diff --git a/beastmaster/index.html b/beastmaster/index.html index dad2ed3..6a85a91 100644 --- a/beastmaster/index.html +++ b/beastmaster/index.html @@ -1 +1 @@ -Borderlands 3 Skill Planner \ No newline at end of file +Borderlands 3 Skill Planner \ No newline at end of file diff --git a/bundle.0a133056.js b/bundle.26aa2253.js similarity index 79% rename from bundle.0a133056.js rename to bundle.26aa2253.js index 726c171..f30e81d 100644 --- a/bundle.0a133056.js +++ b/bundle.26aa2253.js @@ -1,2 +1,2 @@ -!function(e){function n(a){if(t[a])return t[a].exports;var r=t[a]={i:a,l:!1,exports:{}};return e[a].call(r.exports,r,r.exports,n),r.l=!0,r.exports}var t={};n.m=e,n.c=t,n.d=function(e,t,a){n.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:a})},n.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},n.t=function(e,t){if(1&t&&(e=n(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var a=Object.create(null);if(n.r(a),Object.defineProperty(a,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var r in e)n.d(a,r,function(n){return e[n]}.bind(null,r));return a},n.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return n.d(t,"a",t),t},n.o=function(e,n){return Object.prototype.hasOwnProperty.call(e,n)},n.p="/",n(n.s=0)}({"/Yqc":function(e,n){function t(){return"serviceWorker"in navigator&&("https:"===window.location.protocol||"localhost"===window.location.hostname||0===window.location.hostname.indexOf("127."))}n.install=function(e){if(e||(e={}),t()){var n=navigator.serviceWorker.register("/sw.js",{}),a=function(e){function n(){switch(o.state){case"redundant":r("onUpdateFailed"),o.onstatechange=null;break;case"installing":a||r("onUpdating");break;case"installed":i||r("onUpdateReady");break;case"activated":r("onUpdated"),o.onstatechange=null}}function t(){switch(o.state){case"redundant":o.onstatechange=null;break;case"installing":case"installed":break;case"activated":r("onInstalled"),o.onstatechange=null}}var a,i,s,o=e.installing||e.waiting;o&&!o.onstatechange&&(e.active?(n(),s=n):(t(),s=t),a=!0,e.waiting&&(i=!0),o.onstatechange=s)},r=function(n){"function"==typeof e[n]&&e[n]({source:"ServiceWorker"})};n.then(function(e){e&&(a(e),e.onupdatefound=function(){a(e)})}).catch(function(e){return r("onError"),Promise.reject(e)})}},n.applyUpdate=function(e,n){t()&&navigator.serviceWorker.getRegistration().then(function(t){t&&t.waiting?(t.waiting.postMessage({action:"skipWaiting"}),e&&e()):n&&n()})},n.update=function(){t()&&navigator.serviceWorker.getRegistration().then(function(e){if(e)return e.update()})}},0:function(e,n,t){e.exports=t("QfWi")},"31cR":function(e){e.exports={skill:"_3JH8h",enabled:"_1mLSi",usable:"_1xemn",augment:"_3VkFk",actionSkill:"-z8wv",chevron:"_2t_-G",diamond:"_2ej0d",image:"_8ejWg",ranks:"_3DD7O",skillTitle:"_394yV",description:"_1S9-f",effect:"oiyDq"}},"9fQE":function(e,n,t){"use strict";(function(e){function a(n){var t=n.path;return e("nav",null,[{name:"Zane",path:"/operative"},{name:"Amara",path:"/siren"},{name:"FL4K",path:"/beastmaster"},{name:"Moze",path:"/gunner"}].map(function(n){return t===n.path?null:e(r.a,{href:n.path},n.name)}))}t.d(n,"a",function(){return a});var r=t("Y3FI")}).call(this,t("gDde").h)},"Et/u":function(e,n,t){"use strict";function a(e,n){return Math.round(e*n*10)/10}function r(e,n,t){return Math.floor(e*t)}var i=t("LMbI");n.a={Brawl:{0:{Phaseslam:{text:"Amara leaps into the air and Slams the ground, dealing damage to all nearby enemies and knocking them up. Element: Shock.",effect:function(e){return"Damage: "+r(e,0,98)+" (increases with character level)\nCooldown: 35 Seconds"},type:i.a.ACTION_SKILL,ranks:0}},1:{"Root to Rise":{ranks:5,text:"Amara gains increased Maximum Health.",effect:function(e){return"Maximum Health: +"+a(e,8)+"%"}},"Personal Space":{ranks:3,text:"Amara's weapon shots deal Bonus Damage based on the distance to her target. The closer the target, the greater the bonus.",effect:function(e){return"Bonus Damage: Up to +"+a(e,18)+"% of damage dealt"}},Clarity:{ranks:5,text:"Amara constantly regenerates health. The lower her health, the more powerful the regeneration. After using an Action Skill, this bonus is doubled for a few seconds.",effect:function(e){return"Health Regen: Up to +"+a(e,1)+"% of Missing Health/sec\nAdditional Regen: Up to +"+a(e,1)+"% of Missing Health/sec\nDuration: 5 seconds"}}},2:{"Arms Deal":{ranks:5,text:"Amara deals increased Splash Damage and takes reduced Splash Damage.",effect:function(e){return"Splash Damage: +"+a(e,4)+"%\nSplash Damage Resistance: +"+function(e){switch(e){case 1:return 12;case 2:return 21;case 3:return 28;case 4:return 35;case 5:return 40;default:return 0}}(e)+"%"}},Samsara:{ranks:3,text:"Whenever Amara deals damage to an enemy with her Action Skill, she adds a stack of Samsara. For every stack of Samsara, Amara gains increased Gun Damage and Health Regeneration for a few seconds. Stacks decay after a few seconds.",effect:function(e){return"Gun Damage: +"+a(e,1.7)+"% per stack\nHealth Regen: +"+a(e,1.7)+"% of Missing Health/sec per stack\nMaximum Stacks: 5\nDuration: 20 seconds"}},"Helping Hand(s)":{ranks:5,text:"For a few seconds after using her Action Skill, Amara's arms remain active and grant her Damage Resistance.",effect:function(e){return"Damage Resistance: +"+function(e){switch(e){case 1:return 12;case 2:return 21;case 3:return 28;case 4:return 35;case 5:return 40;default:return 0}}(e)+"%\nDuration: 15 seconds"}},"Blight Tiger":{ranks:0,text:"Converts Amara's Action Skill to Corrosive Damage.",effect:function(){return"Action Skill Element: Corrosive."},type:i.a.AUGMENT_DIAMOND}},3:{Fracture:{ranks:0,text:"Amara summons a line of fists that erupt from the ground, dealing damage to enemies in front of Amara. Element: Shock.",effect:function(e){return"Damage: "+r(e,0,88)+" (increases with character level)\nCooldown: 28 seconds"},type:i.a.AUGMENT_ACTION_SKILL},Mindfulness:{ranks:3,text:"Whenever Amara takes damage, she gains a stack of Mindfulness. For every stack of Mindfulness, Amara gains improved Shield Regeneration Delay and Movement Speed. Stacks decay after a few seconds.",effect:function(e){return"Shield Regeneration Delay: -"+function(e){switch(e){case 1:return 9;case 2:return 17;case 3:return 23;default:return 0}}(e)+"% per stack\nMovement Speed: +"+a(e,1.4)+"% per stack\nMaximum Stacks: 25\nDuration: 5 seconds"}},"Find Your Center":{ranks:1,text:"Amara gains increased Melee Damage. Additionally, for a few seconds after using her Action Skill, Amara gains increased Melee Range.",effect:function(){return"Melee Damage: +100%\nMelee Range: +75%\nDuration: 20 seconds"}},Vigor:{ranks:3,text:"Kill Skill. Killing an enemy with Amara's Action Skill grants all allies increased Movement Speed for a few seconds.",effect:function(e){return"Team Movement Speed: +"+a(e,3.333)+"%\nDuration: 8 seconds"}},Revelation:{ranks:0,text:"Amara's Action Skill now creates a Nova when it damages enemies, dealing damage to all nearby enemies.",effect:function(e){return"Nova Damage: "+r(e,0,41)+" (increases with character level)\nAction Skill Damage: -15%"},type:i.a.AUGMENT_CHEVRON}},4:{Downfall:{ranks:0,text:"Amara leaps into the air and shoots an Elemental Beam below her, followed by a Slam. Element: Shock.",effect:function(e){return"Beam Damage: "+r(e,0,14)+" per second (increases with character level)\nSlam Damage: "+r(e,0,95)+" (increases with character level)\nCooldown: 47 seconds"},type:i.a.AUGMENT_ACTION_SKILL},"One With Nature":{ranks:5,text:"Amara gains increased Maximum Health and Elemental Damage Resistance to her Action Skill Element.",effect:function(e){return"Maximum Health: +"+a(e,5)+"%\nElemental Damage Resistance: +"+function(e){switch(e){case 1:return 12;case 2:return 21;case 3:return 28;case 4:return 35;case 5:return 40;default:return 0}}(e)+"%"}}},5:{"Do Unto Others":{ranks:1,text:"Whenever an enemy damages Amara, she automatically throws an energy orb back at them, dealing Action Skill Elemental Damage. This skill has a short cooldown.",effect:function(){return"Cooldown: 8 seconds"}},"Jab Cross":{ranks:5,text:"Whenever Amara deals melee damage to an enemy, she gains increased Action Skill Damage and increased Gun Damage for a few seconds.",effect:function(e){return"Action Skill Damage: +"+a(e,15)+"%\nGun Damage: +"+a(e,3)+"%\nDuration: 10 seconds"}},"Guardian Angel":{ranks:1,text:"When Amara enters Fight For Your Life, she immediately gains a Second Wind, restores her health, and creates an Action Skill Elemental Nova that may knock back nearby enemies. This skill has a long cooldown.",effect:function(){return"Health Restored: 50% of Maximum Health\nCooldown: 120 seconds"}},Glamour:{ranks:0,text:"Enemies damaged by Amara's Action Skill become confused and temporarily attack their allies. However, Action Skill Cooldown is increased. If Amara targets an enemy with Phasegrasp, enemies near the Grasped target are confused as well.",effect:function(){return"Confuse Duration: 8 seconds\nAction Skill Damage: -10%\nAction Skill Cooldown: +20%"},type:i.a.AUGMENT_CHEVRON}},6:{Blitz:{ranks:1,text:"Melee Override. Press [Melee key] while aiming at an enemy to make Amara dash a short distance forward and perform a special melee strike, dealing Elemental Melee Damage. If a Blitz melee attack kills an enemy, Blitz's cooldown is immediately reset.",effect:function(){return"Melee Damage: +100%\nCooldown: 8 seconds"}}}},"Mystical Assault":{0:{Phasecast:{text:"Amara sends forward an Astral Projection of herself, dealing damage to everything in its path. Element: Shock.",effect:function(e){return"Damage: "+r(e,0,92)+"\nCooldown: 28 Seconds"},type:i.a.ACTION_SKILL,ranks:0}},1:{"Do Harm":{ranks:5,text:"Killing an enemy grants Amara a stack of Rush. Activating her Action Skill consumes all Rush stacks. For every stack of Rush consumed, Amara's Action Skill Damage is temporarily increased.",effect:function(e){return"Action Skill Dmg: +"+a(e,.9)+"% per Rush stack consumed\nMaximum Rush Stacks: 10\nDuration: 20 seconds"}},"Fast Hand(s)":{ranks:3,text:"Amara's Reload Speed, Weapon Swap Speed, and Mode Switch Speed are improved.",effect:function(e){return"Reload Speed: +"+function(e){switch(e){case 1:return 7;case 2:return 14;case 3:return 19;default:return 0}}(e)+"%\nWeapon Swap Speed: +"+function(e){switch(e){case 1:return 16;case 2:return 28;case 3:return 36;default:return 0}}(e)+"%\nMode Switch Speed: +"+function(e){switch(e){case 1:return 16;case 2:return 28;case 3:return 36;default:return 0}}(e)+"%"}},"Violent Tapestry":{ranks:5,text:"Applying a Status Effect grants Amara a stack of Rush. Activating her Action Skill consumes all Rush stacks. For every stack of Rush consumed, Amara's Status Effect Chance is temporarily increased.",effect:function(e){return"StatusEffect Chance: +"+a(e,.6)+"% per Rush stack consumed\nMaximum Rush Stacks: 10\nDuration: 20 seconds"}}},2:{Alacrity:{ranks:5,text:"Amara gains increased Reload Speed for every stack of Rush. After consuming Rush stacks, this bonus is increased for a few seconds.",effect:function(e){return"Reload Speed: +"+a(e,.4)+"% per Rush stack\nAdditional Reload Speed: +"+function(e){switch(e){case 1:return.6;case 2:return 1.2;case 3:return 1.8;case 4:return 2.3;case 5:return 2.9;default:return 0}}(e)+"% per Rush stack consumed\nDuration: 8 seconds"}},Transcend:{ranks:3,text:"Amara gains increased Accuracy and Critical Hit Damage for a few seconds after activating her Action Skill.",effect:function(e){return"Accuracy: +"+function(e){switch(e){case 1:return 17;case 2:return 29;case 3:return 38;default:return 0}}(e)+"%\nCritical Hit Damage: +"+a(e,9)+"%\nDuration: 12 seconds"}},Restless:{ranks:5,text:"Amara gains increased Action Skill Cooldown Rate.",effect:function(e){return"Action Skill Cooldown Rate: +"+a(e,5)+"%"}},"Soul Sap":{ranks:0,text:"A portion of all damage dealt by Amara's Action Skill is returned to her or a nearby ally as health.",effect:function(){return"Action Skill Life Steal: 30% of damage dealt"},type:i.a.AUGMENT_CHEVRON}},3:{Deliverance:{ranks:0,text:"Amara sends forward an Astral Projection of herself, dealing damage to everything in its path. Whenever Amara's Astral Projection damages an enemy or object, it releases homing Elemental Projectiles that trigger her Action Skill Elemental Effect on enemies. Element: Shock.",effect:function(e){return"Damage: "+r(e,0,86)+" (increases with character level)\nElemental Projectiles: 3 per enemy or object hit\nCooldown: 28 seconds"},type:i.a.AUGMENT_ACTION_SKILL},Ascendant:{ranks:1,text:"All Action Skill Augments gain increased effects.",effect:function(){return"Soul Sap Life Steal: +20%\nAllure Radius: +100%\nGlamour Duration: +50%\nStillness of Mind: Breaks 0.75 sec after taking dmg\nRevelation Damage: +25%"}},"Stillness of Mind":{ranks:0,text:"Enemies damaged by Amara's Action Skill become phaselocked until they are damaged or the duration ends. However, Action Skill Cooldown is increased. If Amara targets an enemy with Phasegrasp, enemies near the Grasped target are also phaselocked.",effect:function(){return"Phaselock Duration: 6 seconds\nAction Skill Damage: -25%\nAction Skill Cooldown: +15%"},type:i.a.AUGMENT_CHEVRON}},4:{Reverberation:{ranks:0,text:"Amara sends forward an Astral Projection of herself, dealing damage to everything in its path. Astral Projection deals increased damage for every enemy it hits. Element: Shock.",effect:function(e){return"Damage: "+r(e,0,88)+" (increases with character level)\nDamage Bonus: +50% per enemy hit\nCooldown: 30 seconds"},type:i.a.AUGMENT_ACTION_SKILL},"From Rest":{ranks:3,text:"Amara gains improved Fire Rate and Charge Time.",effect:function(e){return"Fire Rate: +"+a(e,4)+"%\nCharge Time: +"+function(e){switch(e){case 1:return 21;case 2:return 34;case 3:return 44;default:return 0}}(e)+"%"}},"Laid Bare":{ranks:3,text:"Enemies take increased damage from all sources for a few seconds after being damaged by Amara's Action Skill.",effect:function(e){return"Damage Increase: +"+a(e,8.333)+"%\nDuration: 8 seconds"}},Wrath:{ranks:3,text:"Amara gains increased Gun Damage. This effect is increased after she activates her Action Skill for a few seconds.",effect:function(e){return"Gun Damage: +"+function(e){switch(e){case 1:return 6.7;case 2:return 13.3;case 3:return 20;default:return 0}}(e)+"%\nAdditional Gun Damage: +"+function(e){switch(e){case 1:return 6.7;case 2:return 13.3;case 3:return 20;default:return 0}}(e)+"%\nDuration: 8 seconds"}}},5:{Remnant:{ranks:3,text:"When Amara kills an enemy with a Gun or Action Skill, she creates a homing projectile that seeks out a new enemy dealing her Action Skill Elemental Damage. Any Overkill Damage is added to the projectile's damage.",effect:function(e){return"Remnant Base Damage: "+r(e,0,9)+" (increases with character level)"}},Awakening:{ranks:3,text:"Amara's Rush stacks gain increased effectiveness.",effect:function(e){return"Rush Stack Effectiveness: +"+a(e,10)+"%"}},Tandava:{ranks:0,text:"Amara sends forward an Astral Projection of herself. When it hits a target, it explodes, damaging all nearby enemies. Element: Shock.",effect:function(e){return"Damage: "+r(e,0,91)+" (increases with character level)\nCooldown: 35 seconds"},type:i.a.AUGMENT_ACTION_SKILL}},6:{Avatar:{ranks:1,text:"Amara's Action Skill can be activated while it's cooling down. This skill may only be used once per completed cooldown. Additionally, increases Amara's Maximum Rush Stacks. Additionally, if Amara's Action Skill kills an enemy, it refunds half of her Rush stacks.",effect:function(){return"Maximum Rush Stacks: +10"}}}},"Fist of the Elements":{0:{Phasegrasp:{text:"Amara summons a giant fist that bursts from the ground and locks the targeted enemy in place for a few seconds. Some enemies are immune to being Grasped and instantly take damage instead. Element: Shock.",effect:function(e){return"Skill Duration: 7 seconds\nCooldown: 16 seconds\nGrasp Immune Damage: "+r(e,0,28)+" (increases with character level)"},type:i.a.ACTION_SKILL,ranks:0}},1:{Anima:{ranks:5,text:"Amara's Status Effects deal increased damage over time and have increased duration. Her Action Skill Status Effect deals further increased damage.",effect:function(e){return"Action Skill Status Effect Damage: +"+a(e,8)+"%\nOther Status Effect Damage: +"+a(e,4)+"%\nStatus Effect Duration: +"+a(e,20)+"%"}},"Steady Hands":{ranks:3,text:"Amara gains increased Weapon Handling and Accuracy.",effect:function(e){return"Handling: +"+function(e){switch(e){case 1:return 14;case 2:return 24;case 3:return 32;default:return 0}}(e)+"%\nAccuracy: +"+function(e){switch(e){case 1:return 13;case 2:return 23;case 3:return 31;default:return 0}}(e)+"%"}},Infusion:{ranks:5,text:"Convert a portion of damage dealt by Amara's weapons into her Action Skill Element.",effect:function(e){return"Converted Damage: "+a(e,8)+"%"}}},2:{Tempest:{ranks:5,text:"Amara deals increased Elemental Damage. Shock Damage is further increased.",effect:function(e){return"Shock Damage: +"+a(e,8)+"%\nOther Elemental Damage: +"+a(e,6)+"%"}},"Illuminated Fist":{ranks:1,text:"Amara gains increased Melee Damage and her Melee Damage is converted to Action Skill Element.",effect:function(){return"Melee Damage: +75%"}},Wildfire:{ranks:5,text:"Whenever Amara applies a Status Effect to an enemy, it has a chance to spread to a nearby enemy.",effect:function(e){return"Spread Chance: +"+a(e,8)+"%"}},Soulfire:{ranks:0,text:"Converts Amara's Action Skill to Incendiary Damage.",effect:function(){return"Action Skill Element: Incendiary."},type:i.a.AUGMENT_DIAMOND}},3:{"The Eternal Fist":{ranks:0,text:"Amara summons a giant fist that bursts from the ground and locks the targeted enemy in place for a few seconds. Whenever the Grasped enemy is killed, a new fist seeks out and Grasps a new target. Some enemies are immune to being Grasped and instantly take damage instead. Element: Shock.",effect:function(e){return"Bonus Targets: Up to +4\nDuration: 7 seconds\nCooldown: 20 seconds\nGrasp Immune Damage: "+r(e,0,28)+" (increases with character level)"},type:i.a.AUGMENT_ACTION_SKILL},Dread:{ranks:1,text:"Amara's Gun Damage is increased for a few seconds after an enemy is Grasped. Whenever any player kills a Grasped enemy, their current weapon is instantly reloaded.",effect:function(){return"Gun Damage: +15%\nDuration: 8 seconds"}},Allure:{ranks:0,text:"Amara's Action Skill creates a singularity that pulls in enemies.",effect:function(){return"Duration: 2.5 seconds\nAction Skill Damage: -20%"},type:i.a.AUGMENT_CHEVRON}},4:{Indiscriminate:{ranks:3,text:"Amara's bullets that damage enemies have a chance to ricochet and deal decreased damage to other nearby enemies. Ricochet Chance and Damage are increased if target is affected by Phasegrasp or Stillness of Mind.",effect:function(e){return"Ricochet Chance: +"+a(e,10)+"%\nRicochet Damage: 50% of damage dealt\nAction Skill Ricochet Chance: +"+a(e,20)+"%\nAction Skill Ricochet Damage: 75% of damage dealt"}},"Deep Well":{ranks:1,text:"Amara gains increased Magazine Size with elemental weapons.",effect:function(){return"Magazine Size: +20%"}},Catharsis:{ranks:3,text:"Whenever Amara triggers an elemental effect on an enemy, when that enemy dies that enemy explodes, dealing her attuned element damage along with any other element that is currently inflicted upon that enemy. This skill has a short cooldown.",effect:function(e){return"Damage: "+r(e,0,4)+" (increases with character level)\nCooldown: 8 seconds"}},"Ties That Bind":{ranks:0,text:"Amara summons a giant fist that bursts from the ground and locks the targeted enemy in place for a few seconds. Enemies near the Grasped target are linked, and any damage dealt to a linked target is shared between all other linked targets. Some enemies are immune to being Grasped and instantly take damage instead. Element: Shock.",effect:function(e){return"Linked Damage: 35% of damage dealt\nDuration: 7 seconds\nCooldown: 18 seconds\nGrasp Immune Damage: "+r(e,0,34)+" (increases with character level)"},type:i.a.AUGMENT_ACTION_SKILL}},5:{"Fist Over Matter":{ranks:0,text:"Amara summons a giant fist that bursts from the ground and locks the targeted enemy in place for a few seconds. After Grasping the targeted enemy, large fists appear and constantly smash the area, dealing damage to nearby enemies. Some enemies are immune to being Grasped and instantly take damage instead. Element: Shock.",effect:function(e){return"Damage: "+r(e,0,35)+" (increases with character level)\nDuration: 7 seconds\nCooldown: 28 seconds\nGrasp Immune Damage: "+r(e,0,39)+" (increases with character level)"},type:i.a.AUGMENT_ACTION_SKILL},Sustainment:{ranks:5,text:"Amara gains Life Steal whenever she deals Elemental Damage with her weapon.",effect:function(e){return"Elemental Weapon Life Steal: +"+a(e,4)+"% of damage dealt"}},Conflux:{ranks:5,text:"Whenever Amara applies a Status Effect to an enemy, she gains a chance to randomly Electrocute, Ignite, or Melt that enemy.",effect:function(e){return"Extra Status Effect Chance: +"+a(e,7)+"%"}}},6:{"Forceful Expression":{ranks:1,text:"Amara's guns deal Bonus Elemental Damage based on her Action Skill Element.",effect:function(){return"Bonus Elemental Damage: +18% of damage dealt"}}}}}},Fl18:function(e,n,t){"use strict";(function(e){var a=t("laFY"),r=t.n(a),i=e("span",null,e("a",{href:"https://borderlands.com/"},"Official Borderlands website")," - ",e("a",{href:"https://github.com/seigler/bl3skills.com"},"Source Code")," - ",e("a",{href:"https://github.com/seigler/bl3skills.com/labels/bug"},e("img",{alt:"GitHub issues: bugs",src:"https://img.shields.io/github/issues-raw/seigler/bl3skills.com/bug"}))," ",e("a",{href:"https://github.com/seigler/bl3skills.com/labels/enhancement"},e("img",{alt:"GitHub issues: enhancements",src:"https://img.shields.io/github/issues-raw/seigler/bl3skills.com/enhancement"}))," ",e("img",{alt:"GitHub contributors",src:"https://img.shields.io/github/contributors/seigler/bl3skills.com"}));n.a=function(){return e("footer",{class:r.a.footer},i)}}).call(this,t("gDde").h)},G9Up:function(e,n,t){"use strict";(function(e){var a=t("Y3FI"),r=t("NZ6x"),i=t("cY+X"),s=t("rFP/"),o=t("x3c/"),c=t("cQx2"),l=e(a.b,null,e(r.a,{path:"/"}),e(i.a,{path:"/operative"}),e(s.a,{path:"/siren"}),e(o.a,{path:"/beastmaster"}),e(c.a,{path:"/gunner"}));n.a=function(){return l}}).call(this,t("gDde").h)},J3pd:function(e,n,t){"use strict";(function(e){function a(){return(a=Object.assign||function(e){for(var n=1;n=5*o-5,level:Object(d.a)(t.state),image:"../../assets/hunters/"+g+"/"+r+o+l+".png",onChange:y(c,r,n,o)}))}))})))}),v=Object(d.a)(this.state);return e("div",null,e("div",{class:h.a.header},e("h1",{class:h.a.title},c,e("div",{class:h.a.subtitle},"the ",g)),e("div",{class:h.a.sidepanel},e("div",{class:h.a.level},"Level ",v),e("div",{class:h.a.reset},e("a",{onClick:function(){Object(l.b)(k),t.setState({invested:[0,0,0],skills:k||{}})}},"Reset"))),e(o.a,{path:p})),e("main",null,e("div",{class:h.a.VaultHunter,onContextMenu:r},e("div",{class:h.a.trees},S))),m)},t}(i.Component)}).call(this,t("gDde").h)},LMbI:function(e,n){"use strict";n.a={ACTION_SKILL:1,AUGMENT_CHEVRON:2,AUGMENT_DIAMOND:3,AUGMENT_ACTION_SKILL:4}},MKmk:function(e){e.exports={VaultHunter:"_2zgqJ",header:"_1Jomm",title:"_17kLY",subtitle:"_3J3hw",sidepanel:"_2UO55",level:"xH9ts",reset:"K9CBr",trees:"_3ek45",tier:"_3Ch4X",treeName:"_1WAM2",tree:"gRWZY",skills:"_2Su0b",green:"-Pl7G",blue:"_1nm1I",red:"_3T1pZ"}},NZ6x:function(e,n,t){"use strict";(function(e){var a=t("Y3FI"),r=t("Fl18"),i=t("odKX"),s=t.n(i),o=e(r.a,null);n.a=function(){return e("div",null,e("div",{class:s.a.splash},e("div",{class:s.a.wrapper},e("h1",null,e("div",{class:s.a.disclaimer},"(Unofficial)"),"Borderlands 3 skill calculator"),[{name:"Zane",job:"the Operative",path:"/operative"},{name:"Amara",job:"the Siren",path:"/siren"},{name:"FL4K",job:"the Beastmaster",path:"/beastmaster"},{name:"Moze",job:"the Gunner",path:"/gunner"}].map(function(n){return e(a.a,{class:s.a.link,href:n.path},e("div",{class:s.a.name},n.name,e("div",{class:s.a.job},n.job)))}))),o)}}).call(this,t("gDde").h)},QfWi:function(e,n,t){"use strict";t.r(n);var a=t("gDde"),r=t("G9Up"),i=(t("pyAK"),document.querySelector("#app"));Object(a.render)(Object(a.h)(r.a,null),i,i.firstElementChild);t("/Yqc").install()},Y3FI:function(e,n,t){"use strict";function a(e,n){for(var t in n)e[t]=n[t];return e}function r(e,n){return e.rankn.rank?-1:e.index-n.index}function i(e,n){return e.index=n,e.rank=function(e){return e.attributes.default?0:(n=e.attributes.path,s(n).map(o).join(""));var n}(e),e.attributes}function s(e){return e.replace(/(^\/+|\/+$)/g,"").split("/")}function o(e){return":"==e.charAt(0)?1+"*+?".indexOf(e.charAt(e.length-1))||4:5}function c(){var e;return""+((e=k&&k.location?k.location:k&&k.getCurrentLocation?k.getCurrentLocation():"undefined"!=typeof location?location:v).pathname||"")+(e.search||"")}function l(e,n){return void 0===n&&(n=!1),"string"!=typeof e&&e.url&&(n=e.replace,e=e.url),function(e){for(var n=y.length;n--;)if(y[n].canRoute(e))return!0;return!1}(e)&&function(e,n){void 0===n&&(n="push"),k&&k[n]?k[n](e):"undefined"!=typeof history&&history[n+"State"]&&history[n+"State"](null,null,e)}(e,n?"replace":"push"),u(e)}function u(e){for(var n=!1,t=0;t0},n.prototype.routeTo=function(e){return this._didRoute=!1,this.setState({url:e}),this.updating?this.canRoute(e):(this.forceUpdate(),this._didRoute)},n.prototype.componentWillMount=function(){y.push(this),this.updating=!0},n.prototype.componentDidMount=function(){var e=this;k&&(this.unlisten=k.listen(function(n){e.routeTo(""+(n.pathname||"")+(n.search||""))})),this.updating=!1},n.prototype.componentWillUnmount=function(){"function"==typeof this.unlisten&&this.unlisten(),y.splice(y.indexOf(this),1)},n.prototype.componentWillUpdate=function(){this.updating=!0},n.prototype.componentDidUpdate=function(){this.updating=!1},n.prototype.getMatchingChildren=function(e,n,t){return e.filter(i).sort(r).map(function(e){var r=function(e,n,t){var a,r=/(?:\?([^#]*))?(#.*)?$/,i=e.match(r),o={};if(i&&i[1])for(var c=i[1].split("&"),l=0;l2;)R.push(arguments[i]);for(n&&null!=n.children&&(R.length||R.push(n.children),delete n.children);R.length;)if((a=R.pop())&&void 0!==a.pop)for(i=a.length;i--;)R.push(a[i]);else"boolean"==typeof a&&(a=null),(r="function"!=typeof e)&&(null==a?a="":"number"==typeof a?a+="":"string"!=typeof a&&(r=!1)),r&&t?s[s.length-1]+=a:s===_?s=[a]:s.push(a),t=r;var o=new M;return o.nodeName=e,o.children=s,o.attributes=null==n?void 0:n,o.key=null==n?void 0:n.key,void 0!==C.vnode&&C.vnode(o),o}function t(e,n){for(var t in n)e[t]=n[t];return e}function a(e,n){null!=e&&("function"==typeof e?e(n):e.current=n)}function r(e){!e.__d&&(e.__d=!0)&&1==T.push(e)&&(C.debounceRendering||E)(i)}function i(){for(var e;e=T.pop();)e.__d&&A(e)}function s(e,n,t){return"string"==typeof n||"number"==typeof n?void 0!==e.splitText:"string"==typeof n.nodeName?!e._componentConstructor&&o(e,n.nodeName):t||e._componentConstructor===n.nodeName}function o(e,n){return e.__n===n||e.nodeName.toLowerCase()===n.toLowerCase()}function c(e){var n=t({},e.attributes);n.children=e.children;var a=e.nodeName.defaultProps;if(void 0!==a)for(var r in a)void 0===n[r]&&(n[r]=a[r]);return n}function l(e){var n=e.parentNode;n&&n.removeChild(e)}function u(e,n,t,r,i){if("className"===n&&(n="class"),"key"===n);else if("ref"===n)a(t,null),a(r,e);else if("class"!==n||i)if("style"===n){if(r&&"string"!=typeof r&&"string"!=typeof t||(e.style.cssText=r||""),r&&"object"==typeof r){if("string"!=typeof t)for(var s in t)s in r||(e.style[s]="");for(var s in r)e.style[s]="number"==typeof r[s]&&!1===N.test(s)?r[s]+"px":r[s]}}else if("dangerouslySetInnerHTML"===n)r&&(e.innerHTML=r.__html||"");else if("o"==n[0]&&"n"==n[1]){var o=n!==(n=n.replace(/Capture$/,""));n=n.toLowerCase().substring(2),r?t||e.addEventListener(n,d,o):e.removeEventListener(n,d,o),(e.__l||(e.__l={}))[n]=r}else if("list"!==n&&"type"!==n&&!i&&n in e){try{e[n]=null==r?"":r}catch(e){}null!=r&&!1!==r||"spellcheck"==n||e.removeAttribute(n)}else{var c=i&&n!==(n=n.replace(/^xlink:?/,""));null==r||!1===r?c?e.removeAttributeNS("http://www.w3.org/1999/xlink",n.toLowerCase()):e.removeAttribute(n):"function"!=typeof r&&(c?e.setAttributeNS("http://www.w3.org/1999/xlink",n.toLowerCase(),r):e.setAttribute(n,r))}else e.className=r||""}function d(e){return this.__l[e.type](C.event&&C.event(e)||e)}function f(){for(var e;e=F.shift();)C.afterMount&&C.afterMount(e),e.componentDidMount&&e.componentDidMount()}function h(e,n,t,a,r,i){H++||(L=null!=r&&void 0!==r.ownerSVGElement,G=null!=e&&!("__preactattr_"in e));var s=m(e,n,t,a,i);return r&&s.parentNode!==r&&r.appendChild(s),--H||(G=!1,i||f()),s}function m(e,n,t,a,r){var i=e,s=L;if(null!=n&&"boolean"!=typeof n||(n=""),"string"==typeof n||"number"==typeof n)return e&&void 0!==e.splitText&&e.parentNode&&(!e._component||r)?e.nodeValue!=n&&(e.nodeValue=n):(i=document.createTextNode(n),e&&(e.parentNode&&e.parentNode.replaceChild(i,e),p(e,!0))),i.__preactattr_=!0,i;var c=n.nodeName;if("function"==typeof c)return w(e,n,t,a);if(L="svg"===c||"foreignObject"!==c&&L,c+="",(!e||!o(e,c))&&(i=function(e,n){var t=n?document.createElementNS("http://www.w3.org/2000/svg",e):document.createElement(e);return t.__n=e,t}(c,L),e)){for(;e.firstChild;)i.appendChild(e.firstChild);e.parentNode&&e.parentNode.replaceChild(i,e),p(e,!0)}var l=i.firstChild,u=i.__preactattr_,d=n.children;if(null==u){u=i.__preactattr_={};for(var f=i.attributes,h=f.length;h--;)u[f[h].name]=f[h].value}return!G&&d&&1===d.length&&"string"==typeof d[0]&&null!=l&&void 0!==l.splitText&&null==l.nextSibling?l.nodeValue!=d[0]&&(l.nodeValue=d[0]):(d&&d.length||null!=l)&&g(i,d,t,a,G||null!=u.dangerouslySetInnerHTML),y(i,n.attributes,u),L=s,i}function g(e,n,t,a,r){var i,o,c,u,d,f=e.childNodes,h=[],g={},k=0,y=0,S=f.length,v=0,D=n?n.length:0;if(0!==S)for(var A=0;A2?[].slice.call(arguments,2):e.children)},createRef:function(){return{}},Component:b,render:function(e,n,t){return h(t,e,{},!1,n,!1)},rerender:i,options:C}}()},gqmc:function(e,n,t){"use strict";function a(e){for(var n=0,t=[0,0,0],a=0,r=0,i=Object.values(e);rh.ranks)return!1;u+=h.invested||0}if(u>0&&s+5<5*o)return!1;s+=u,o+=1}t[a]=s,n+=s,a+=1}return!(n>69)&&t}function r(e){for(var n=1;n0)?o.a.usable:""].join(" "),onClick:t,onContextMenu:t},e("div",{class:o.a.image},e("img",{src:b,alt:a(s)})),w&&h>0&&e("div",{class:o.a.ranks},g,"/",h),e("div",{class:o.a.description},e("h3",{class:o.a.skillTitle},s),d,g>0&&e("div",{class:o.a.effect},"Current Effect:",c,S(g,k)),null!==D&&e("div",{class:o.a.effect},S(1,k)),null==D&&g=5*o-5,level:Object(d.a)(t.state),image:"../../assets/hunters/"+g+"/"+r+o+l+".png",onChange:y(c,r,n,o)}))}))})))}),v=Object(d.a)(this.state);return e("div",null,e("div",{class:h.a.header},e("h1",{class:h.a.title},c,e("div",{class:h.a.subtitle},"the ",g)),e("div",{class:h.a.sidepanel},e("div",{class:h.a.level},"Level ",v),e("div",{class:h.a.reset},e("a",{onClick:function(){Object(l.b)(k),t.setState({invested:[0,0,0],skills:k||{}})}},"Reset"))),e(o.a,{path:p})),e("main",null,e("div",{class:h.a.VaultHunter,onContextMenu:r},e("div",{class:h.a.trees},S))),m)},t}(i.Component)}).call(this,t("gDde").h)},LMbI:function(e,n){"use strict";n.a={ACTION_SKILL:1,AUGMENT_CHEVRON:2,AUGMENT_DIAMOND:3,AUGMENT_ACTION_SKILL:4}},MKmk:function(e){e.exports={VaultHunter:"_2zgqJ",header:"_1Jomm",title:"_17kLY",subtitle:"_3J3hw",sidepanel:"_2UO55",level:"xH9ts",reset:"K9CBr",trees:"_3ek45",tier:"_3Ch4X",treeName:"_1WAM2",tree:"gRWZY",skills:"_2Su0b",green:"-Pl7G",blue:"_1nm1I",red:"_3T1pZ"}},NZ6x:function(e,n,t){"use strict";(function(e){var a=t("Y3FI"),r=t("Fl18"),i=t("odKX"),s=t.n(i),o=e(r.a,null);n.a=function(){return e("div",null,e("div",{class:s.a.splash},e("div",{class:s.a.wrapper},e("h1",null,e("div",{class:s.a.disclaimer},"(Unofficial)"),"Borderlands 3 skill calculator"),[{name:"Zane",job:"the Operative",path:"/operative"},{name:"Amara",job:"the Siren",path:"/siren"},{name:"FL4K",job:"the Beastmaster",path:"/beastmaster"},{name:"Moze",job:"the Gunner",path:"/gunner"}].map(function(n){return e(a.a,{class:s.a.link,href:n.path},e("div",{class:s.a.name},n.name,e("div",{class:s.a.job},n.job)))}))),o)}}).call(this,t("gDde").h)},QfWi:function(e,n,t){"use strict";t.r(n);var a=t("gDde"),r=t("G9Up"),i=(t("pyAK"),document.querySelector("#app"));Object(a.render)(Object(a.h)(r.a,null),i,i.firstElementChild);t("/Yqc").install()},Y3FI:function(e,n,t){"use strict";function a(e,n){for(var t in n)e[t]=n[t];return e}function r(e,n){return e.rankn.rank?-1:e.index-n.index}function i(e,n){return e.index=n,e.rank=function(e){return e.attributes.default?0:(n=e.attributes.path,s(n).map(o).join(""));var n}(e),e.attributes}function s(e){return e.replace(/(^\/+|\/+$)/g,"").split("/")}function o(e){return":"==e.charAt(0)?1+"*+?".indexOf(e.charAt(e.length-1))||4:5}function c(){var e;return""+((e=k&&k.location?k.location:k&&k.getCurrentLocation?k.getCurrentLocation():"undefined"!=typeof location?location:v).pathname||"")+(e.search||"")}function l(e,n){return void 0===n&&(n=!1),"string"!=typeof e&&e.url&&(n=e.replace,e=e.url),function(e){for(var n=y.length;n--;)if(y[n].canRoute(e))return!0;return!1}(e)&&function(e,n){void 0===n&&(n="push"),k&&k[n]?k[n](e):"undefined"!=typeof history&&history[n+"State"]&&history[n+"State"](null,null,e)}(e,n?"replace":"push"),u(e)}function u(e){for(var n=!1,t=0;t0},n.prototype.routeTo=function(e){return this._didRoute=!1,this.setState({url:e}),this.updating?this.canRoute(e):(this.forceUpdate(),this._didRoute)},n.prototype.componentWillMount=function(){y.push(this),this.updating=!0},n.prototype.componentDidMount=function(){var e=this;k&&(this.unlisten=k.listen(function(n){e.routeTo(""+(n.pathname||"")+(n.search||""))})),this.updating=!1},n.prototype.componentWillUnmount=function(){"function"==typeof this.unlisten&&this.unlisten(),y.splice(y.indexOf(this),1)},n.prototype.componentWillUpdate=function(){this.updating=!0},n.prototype.componentDidUpdate=function(){this.updating=!1},n.prototype.getMatchingChildren=function(e,n,t){return e.filter(i).sort(r).map(function(e){var r=function(e,n,t){var a,r=/(?:\?([^#]*))?(#.*)?$/,i=e.match(r),o={};if(i&&i[1])for(var c=i[1].split("&"),l=0;l2;)R.push(arguments[i]);for(n&&null!=n.children&&(R.length||R.push(n.children),delete n.children);R.length;)if((a=R.pop())&&void 0!==a.pop)for(i=a.length;i--;)R.push(a[i]);else"boolean"==typeof a&&(a=null),(r="function"!=typeof e)&&(null==a?a="":"number"==typeof a?a+="":"string"!=typeof a&&(r=!1)),r&&t?s[s.length-1]+=a:s===_?s=[a]:s.push(a),t=r;var o=new M;return o.nodeName=e,o.children=s,o.attributes=null==n?void 0:n,o.key=null==n?void 0:n.key,void 0!==C.vnode&&C.vnode(o),o}function t(e,n){for(var t in n)e[t]=n[t];return e}function a(e,n){null!=e&&("function"==typeof e?e(n):e.current=n)}function r(e){!e.__d&&(e.__d=!0)&&1==T.push(e)&&(C.debounceRendering||E)(i)}function i(){for(var e;e=T.pop();)e.__d&&A(e)}function s(e,n,t){return"string"==typeof n||"number"==typeof n?void 0!==e.splitText:"string"==typeof n.nodeName?!e._componentConstructor&&o(e,n.nodeName):t||e._componentConstructor===n.nodeName}function o(e,n){return e.__n===n||e.nodeName.toLowerCase()===n.toLowerCase()}function c(e){var n=t({},e.attributes);n.children=e.children;var a=e.nodeName.defaultProps;if(void 0!==a)for(var r in a)void 0===n[r]&&(n[r]=a[r]);return n}function l(e){var n=e.parentNode;n&&n.removeChild(e)}function u(e,n,t,r,i){if("className"===n&&(n="class"),"key"===n);else if("ref"===n)a(t,null),a(r,e);else if("class"!==n||i)if("style"===n){if(r&&"string"!=typeof r&&"string"!=typeof t||(e.style.cssText=r||""),r&&"object"==typeof r){if("string"!=typeof t)for(var s in t)s in r||(e.style[s]="");for(var s in r)e.style[s]="number"==typeof r[s]&&!1===N.test(s)?r[s]+"px":r[s]}}else if("dangerouslySetInnerHTML"===n)r&&(e.innerHTML=r.__html||"");else if("o"==n[0]&&"n"==n[1]){var o=n!==(n=n.replace(/Capture$/,""));n=n.toLowerCase().substring(2),r?t||e.addEventListener(n,d,o):e.removeEventListener(n,d,o),(e.__l||(e.__l={}))[n]=r}else if("list"!==n&&"type"!==n&&!i&&n in e){try{e[n]=null==r?"":r}catch(e){}null!=r&&!1!==r||"spellcheck"==n||e.removeAttribute(n)}else{var c=i&&n!==(n=n.replace(/^xlink:?/,""));null==r||!1===r?c?e.removeAttributeNS("http://www.w3.org/1999/xlink",n.toLowerCase()):e.removeAttribute(n):"function"!=typeof r&&(c?e.setAttributeNS("http://www.w3.org/1999/xlink",n.toLowerCase(),r):e.setAttribute(n,r))}else e.className=r||""}function d(e){return this.__l[e.type](C.event&&C.event(e)||e)}function f(){for(var e;e=F.shift();)C.afterMount&&C.afterMount(e),e.componentDidMount&&e.componentDidMount()}function h(e,n,t,a,r,i){H++||(L=null!=r&&void 0!==r.ownerSVGElement,G=null!=e&&!("__preactattr_"in e));var s=m(e,n,t,a,i);return r&&s.parentNode!==r&&r.appendChild(s),--H||(G=!1,i||f()),s}function m(e,n,t,a,r){var i=e,s=L;if(null!=n&&"boolean"!=typeof n||(n=""),"string"==typeof n||"number"==typeof n)return e&&void 0!==e.splitText&&e.parentNode&&(!e._component||r)?e.nodeValue!=n&&(e.nodeValue=n):(i=document.createTextNode(n),e&&(e.parentNode&&e.parentNode.replaceChild(i,e),p(e,!0))),i.__preactattr_=!0,i;var c=n.nodeName;if("function"==typeof c)return w(e,n,t,a);if(L="svg"===c||"foreignObject"!==c&&L,c+="",(!e||!o(e,c))&&(i=function(e,n){var t=n?document.createElementNS("http://www.w3.org/2000/svg",e):document.createElement(e);return t.__n=e,t}(c,L),e)){for(;e.firstChild;)i.appendChild(e.firstChild);e.parentNode&&e.parentNode.replaceChild(i,e),p(e,!0)}var l=i.firstChild,u=i.__preactattr_,d=n.children;if(null==u){u=i.__preactattr_={};for(var f=i.attributes,h=f.length;h--;)u[f[h].name]=f[h].value}return!G&&d&&1===d.length&&"string"==typeof d[0]&&null!=l&&void 0!==l.splitText&&null==l.nextSibling?l.nodeValue!=d[0]&&(l.nodeValue=d[0]):(d&&d.length||null!=l)&&g(i,d,t,a,G||null!=u.dangerouslySetInnerHTML),y(i,n.attributes,u),L=s,i}function g(e,n,t,a,r){var i,o,c,u,d,f=e.childNodes,h=[],g={},k=0,y=0,S=f.length,v=0,D=n?n.length:0;if(0!==S)for(var A=0;A2?[].slice.call(arguments,2):e.children)},createRef:function(){return{}},Component:b,render:function(e,n,t){return h(t,e,{},!1,n,!1)},rerender:i,options:C}}()},gqmc:function(e,n,t){"use strict";function a(e){for(var n=0,t=[0,0,0],a=0,r=0,i=Object.values(e);rh.ranks)return!1;u+=h.invested||0}if(u>0&&s+5<5*o)return!1;s+=u,o+=1}t[a]=s,n+=s,a+=1}return!(n>69)&&t}function r(e){for(var n=1;n0)?o.a.usable:""].join(" "),onClick:t,onContextMenu:t},e("div",{class:o.a.image},e("img",{src:b,alt:a(s)})),w&&h>0&&e("div",{class:o.a.ranks},g,"/",h),e("div",{class:o.a.description},e("h3",{class:o.a.skillTitle},s),d,g>0&&e("div",{class:o.a.effect},"Current Effect:",c,S(g,k)),null!==D&&e("div",{class:o.a.effect},S(1,k)),null==D&&g\n {\n pages.map(page => (\n path === page.path ? null : {page.name}\n ))\n }\n \n );\n}\n","import SKILLS from '@constants/skills';\n\nfunction percent (rank, unit) {\n return Math.round(rank * unit * 10) / 10;\n}\nfunction flat (rank, level, unit) {\n return Math.floor(rank * unit);\n}\n\n// Arms Deal Splash Damage Resistance\nfunction getArmsDealSplashDamageResistance(rank) {\n switch (rank) {\n case 1:\n return 12;\n case 2:\n return 21;\n case 3:\n return 28;\n case 4:\n return 35;\n case 5:\n return 40;\n default:\n return 0;\n }\n}\n\n// Helping Hand(s) Damage Resistance\nfunction getHelpingHandsDamageResistance(rank) {\n switch (rank) {\n case 1:\n return 12;\n case 2:\n return 21;\n case 3:\n return 28;\n case 4:\n return 35;\n case 5:\n return 40;\n default:\n return 0;\n }\n}\n\n// Mindfulness Shield Regeneration Delay\nfunction getMindfulnessShieldRegenerationDelay(rank) {\n switch (rank) {\n case 1:\n return 9;\n case 2:\n return 17;\n case 3:\n return 23;\n default:\n return 0;\n }\n}\n\n// One With Nature Elemental Damage Resistance\nfunction getOneWithNatureElementalDamageResistance(rank) {\n switch (rank) {\n case 1:\n return 12;\n case 2:\n return 21;\n case 3:\n return 28;\n case 4:\n return 35;\n case 5:\n return 40;\n default:\n return 0;\n }\n}\n\n// Fast Hand(s) Reload Speed\nfunction getFastHandsReloadSpeed(rank) {\n switch (rank) {\n case 1:\n return 7;\n case 2:\n return 14;\n case 3:\n return 19;\n default:\n return 0;\n }\n}\n\n// Fast Hand(s) Weapon Swap Speed\nfunction getFastHandsWeaponSwapSpeed(rank) {\n switch (rank) {\n case 1:\n return 16;\n case 2:\n return 28;\n case 3:\n return 36;\n default:\n return 0;\n }\n}\n\n// Fast Hand(s) Mode Switch Speed\nfunction getFastHandsModeSwitchSpeed(rank) {\n switch (rank) {\n case 1:\n return 16;\n case 2:\n return 28;\n case 3:\n return 36;\n default:\n return 0;\n }\n}\n\n// Alacrity Reload Speed After Action Skill\nfunction getAlacrityReloadSpeedAfterActionSkill(rank) {\n switch (rank) {\n case 1:\n return 0.6;\n case 2:\n return 1.2;\n case 3:\n return 1.8;\n case 4:\n return 2.3;\n case 5:\n return 2.9;\n default:\n return 0;\n }\n}\n\n// Transcend Accuracy\nfunction getTranscendAccuracy(rank) {\n switch (rank) {\n case 1:\n return 17;\n case 2:\n return 29;\n case 3:\n return 38;\n default:\n return 0;\n }\n}\n\n// From Rest Charge Time\nfunction getFromRestChargeTime(rank) {\n switch (rank) {\n case 1:\n return 21;\n case 2:\n return 34;\n case 3:\n return 44;\n default:\n return 0;\n }\n}\n\n// Wrath Gun Damage\nfunction getWrathGunDamage(rank) {\n switch (rank) {\n case 1:\n return 6.7;\n case 2:\n return 13.3;\n case 3:\n return 20;\n default:\n return 0;\n }\n}\n\n// Wrath Gun Damage After Action Skill\nfunction getWrathGunDamageAfterActionSkill(rank) {\n switch (rank) {\n case 1:\n return 6.7;\n case 2:\n return 13.3;\n case 3:\n return 20;\n default:\n return 0;\n }\n}\n\n// Steady Hands Handling\nfunction getSteadyHandsHandling(rank) {\n switch (rank) {\n case 1:\n return 14;\n case 2:\n return 24;\n case 3:\n return 32;\n default:\n return 0;\n }\n}\n\n// Steady Hands Accuracy\nfunction getSteadyHandsAccuracy(rank) {\n switch (rank) {\n case 1:\n return 13;\n case 2:\n return 23;\n case 3:\n return 31;\n default:\n return 0;\n }\n}\n\n/* eslint-disable quotes */\nconst skills = {\n \"Brawl\": {\n \"0\": {\n \"Phaseslam\": {\n text: \"Amara leaps into the air and Slams the ground, dealing damage to all nearby enemies and knocking them up. Element: Shock.\",\n effect: (rank, level) => `Damage: ${flat(rank, level, 98)} (increases with character level)\\nCooldown: 35 Seconds`,\n type: SKILLS.ACTION_SKILL,\n ranks: 0,\n },\n },\n \"1\": {\n \"Root to Rise\": {\n ranks: 5,\n text: \"Amara gains increased Maximum Health.\",\n effect: (rank, level) => `Maximum Health: +${percent(rank, 8)}%`,\n },\n \"Personal Space\": {\n ranks: 3,\n text: \"Amara's weapon shots deal Bonus Damage based on the distance to her target. The closer the target, the greater the bonus.\",\n effect: (rank, level) => `Bonus Damage: Up to +${percent(rank, 18)}% of damage dealt`,\n },\n \"Clarity\": {\n ranks: 5,\n text: \"Amara constantly regenerates health. The lower her health, the more powerful the regeneration. After using an Action Skill, this bonus is doubled for a few seconds.\",\n effect: (rank, level) => `Health Regen: Up to +${percent(rank, 1)}% of Missing Health/sec\\nAdditional Regen: Up to +${percent(rank, 1)}% of Missing Health/sec\\nDuration: 5 seconds`,\n },\n },\n \"2\": {\n \"Arms Deal\": {\n ranks: 5,\n text: \"Amara deals increased Splash Damage and takes reduced Splash Damage.\",\n effect: (rank, level) => `Splash Damage: +${percent(rank, 4)}%\\nSplash Damage Resistance: +${getArmsDealSplashDamageResistance(rank)}%`,\n },\n \"Samsara\": {\n ranks: 3,\n text: \"Whenever Amara deals damage to an enemy with her Action Skill, she adds a stack of Samsara. For every stack of Samsara, Amara gains increased Gun Damage and Health Regeneration for a few seconds. Stacks decay after a few seconds.\",\n effect: (rank, level) => `Gun Damage: +${percent(rank, 1.7)}% per stack\\nHealth Regen: +${percent(rank, 1.7)}% of Missing Health/sec per stack\\nMaximum Stacks: 5\\nDuration: 20 seconds`,\n },\n \"Helping Hand(s)\": {\n ranks: 5,\n text: \"For a few seconds after using her Action Skill, Amara's arms remain active and grant her Damage Resistance.\",\n effect: (rank, level) => `Damage Resistance: +${getHelpingHandsDamageResistance(rank)}%\\nDuration: 15 seconds`,\n },\n \"Blight Tiger\": {\n ranks: 0,\n text: \"Converts Amara's Action Skill to Corrosive Damage.\",\n effect: (rank, level) => `Action Skill Element: Corrosive.`,\n type: SKILLS.AUGMENT_DIAMOND,\n },\n },\n \"3\": {\n \"Fracture\": {\n ranks: 0,\n text: \"Amara summons a line of fists that erupt from the ground, dealing damage to enemies in front of Amara. Element: Shock.\",\n effect: (rank, level) => `Damage: ${flat(rank, level, 88)} (increases with character level)\\nCooldown: 28 seconds`,\n type: SKILLS.AUGMENT_ACTION_SKILL,\n },\n \"Mindfulness\": {\n ranks: 3,\n text: \"Whenever Amara takes damage, she gains a stack of Mindfulness. For every stack of Mindfulness, Amara gains improved Shield Regeneration Delay and Movement Speed. Stacks decay after a few seconds.\",\n effect: (rank, level) => `Shield Regeneration Delay: -${getMindfulnessShieldRegenerationDelay(rank)}% per stack\\nMovement Speed: +${percent(rank, 1.4)}% per stack\\nMaximum Stacks: 25\\nDuration: 5 seconds`,\n },\n \"Find Your Center\": {\n ranks: 1,\n text: \"Amara gains increased Melee Damage. Additionally, for a few seconds after using her Action Skill, Amara gains increased Melee Range.\",\n effect: (rank, level) => `Melee Damage: +100%\\nMelee Range: +75%\\nDuration: 20 seconds`,\n },\n \"Vigor\": {\n ranks: 3,\n text: \"Kill Skill. Killing an enemy with Amara's Action Skill grants all allies increased Movement Speed for a few seconds.\",\n effect: (rank, level) => `Team Movement Speed: +${percent(rank, 3.333)}%\\nDuration: 8 seconds`,\n },\n \"Revelation\": {\n ranks: 0,\n text: \"Amara's Action Skill now creates a Nova when it damages enemies, dealing damage to all nearby enemies.\",\n effect: (rank, level) => `Nova Damage: ${flat(rank, level, 41)} (increases with character level)\\nAction Skill Damage: -15%`,\n type: SKILLS.AUGMENT_CHEVRON,\n },\n },\n \"4\": {\n \"Downfall\": {\n ranks: 0,\n text: \"Amara leaps into the air and shoots an Elemental Beam below her, followed by a Slam. Element: Shock.\",\n effect: (rank, level) => `Beam Damage: ${flat(rank, level, 14)} per second (increases with character level)\\nSlam Damage: ${flat(rank, level, 95)} (increases with character level)\\nCooldown: 47 seconds`,\n type: SKILLS.AUGMENT_ACTION_SKILL,\n },\n \"One With Nature\": {\n ranks: 5,\n text: \"Amara gains increased Maximum Health and Elemental Damage Resistance to her Action Skill Element.\",\n effect: (rank, level) => `Maximum Health: +${percent(rank, 5)}%\\nElemental Damage Resistance: +${getOneWithNatureElementalDamageResistance(rank)}%`,\n },\n },\n \"5\": {\n \"Do Unto Others\": {\n ranks: 1,\n text: \"Whenever an enemy damages Amara, she automatically throws an energy orb back at them, dealing Action Skill Elemental Damage. This skill has a short cooldown.\",\n effect: (rank, level) => `Cooldown: 8 seconds`,\n },\n \"Jab Cross\": {\n ranks: 5,\n text: \"Whenever Amara deals melee damage to an enemy, she gains increased Action Skill Damage and increased Gun Damage for a few seconds.\",\n effect: (rank, level) => `Action Skill Damage: +${percent(rank, 15)}%\\nGun Damage: +${percent(rank, 3)}%\\nDuration: 10 seconds`,\n },\n \"Guardian Angel\": {\n ranks: 1,\n text: \"When Amara enters Fight For Your Life, she immediately gains a Second Wind, restores her health, and creates an Action Skill Elemental Nova that may knock back nearby enemies. This skill has a long cooldown.\",\n effect: (rank, level) => `Health Restored: 50% of Maximum Health\\nCooldown: 120 seconds`,\n },\n \"Glamour\": {\n ranks: 0,\n text: \"Enemies damaged by Amara's Action Skill become confused and temporarily attack their allies. However, Action Skill Cooldown is increased. If Amara targets an enemy with Phasegrasp, enemies near the Grasped target are confused as well.\",\n effect: (rank, level) => `Confuse Duration: 8 seconds\\nAction Skill Damage: -10%\\nAction Skill Cooldown: +20%`,\n type: SKILLS.AUGMENT_CHEVRON,\n },\n },\n \"6\": {\n \"Blitz\": {\n ranks: 1,\n text: \"Melee Override. Press [Melee key] while aiming at an enemy to make Amara dash a short distance forward and perform a special melee strike, dealing Elemental Melee Damage. If a Blitz melee attack kills an enemy, Blitz's cooldown is immediately reset.\",\n effect: (rank, level) => `Melee Damage: +100%\\nCooldown: 8 seconds`,\n },\n },\n },\n \"Mystical Assault\": {\n \"0\": {\n \"Phasecast\": {\n text: \"Amara sends forward an Astral Projection of herself, dealing damage to everything in its path. Element: Shock.\",\n effect: (rank, level) => `Damage: ${flat(rank, level, 92)}\\nCooldown: 28 Seconds`,\n type: SKILLS.ACTION_SKILL,\n ranks: 0,\n },\n },\n \"1\": {\n \"Do Harm\": {\n ranks: 5,\n text: \"Killing an enemy grants Amara a stack of Rush. Activating her Action Skill consumes all Rush stacks. For every stack of Rush consumed, Amara's Action Skill Damage is temporarily increased.\",\n effect: (rank, level) => `Action Skill Dmg: +${percent(rank, 0.9)}% per Rush stack consumed\\nMaximum Rush Stacks: 10\\nDuration: 20 seconds`,\n },\n \"Fast Hand(s)\": {\n ranks: 3,\n text: \"Amara's Reload Speed, Weapon Swap Speed, and Mode Switch Speed are improved.\",\n effect: (rank, level) => `Reload Speed: +${getFastHandsReloadSpeed(rank)}%\\nWeapon Swap Speed: +${getFastHandsWeaponSwapSpeed(rank)}%\\nMode Switch Speed: +${getFastHandsModeSwitchSpeed(rank)}%`,\n },\n \"Violent Tapestry\": {\n ranks: 5,\n text: \"Applying a Status Effect grants Amara a stack of Rush. Activating her Action Skill consumes all Rush stacks. For every stack of Rush consumed, Amara's Status Effect Chance is temporarily increased.\",\n effect: (rank, level) => `StatusEffect Chance: +${percent(rank, 0.6)}% per Rush stack consumed\\nMaximum Rush Stacks: 10\\nDuration: 20 seconds`,\n },\n },\n \"2\": {\n \"Alacrity\": {\n ranks: 5,\n text: \"Amara gains increased Reload Speed for every stack of Rush. After consuming Rush stacks, this bonus is increased for a few seconds.\",\n effect: (rank, level) => `Reload Speed: +${percent(rank, 0.4)}% per Rush stack\\nAdditional Reload Speed: +${getAlacrityReloadSpeedAfterActionSkill(rank)}% per Rush stack consumed\\nDuration: 8 seconds`,\n },\n \"Transcend\": {\n ranks: 3,\n text: \"Amara gains increased Accuracy and Critical Hit Damage for a few seconds after activating her Action Skill.\",\n effect: (rank, level) => `Accuracy: +${getTranscendAccuracy(rank)}%\\nCritical Hit Damage: +${percent(rank, 9)}%\\nDuration: 12 seconds`,\n },\n \"Restless\": {\n ranks: 5,\n text: \"Amara gains increased Action Skill Cooldown Rate.\",\n effect: (rank, level) => `Action Skill Cooldown Rate: +${percent(rank, 5)}%`,\n },\n \"Soul Sap\": {\n ranks: 0,\n text: \"A portion of all damage dealt by Amara's Action Skill is returned to her or a nearby ally as health.\",\n effect: (rank, level) => `Action Skill Life Steal: 30% of damage dealt`,\n type: SKILLS.AUGMENT_CHEVRON,\n },\n },\n \"3\": {\n \"Deliverance\": {\n ranks: 0,\n text: \"Amara sends forward an Astral Projection of herself, dealing damage to everything in its path. Whenever Amara's Astral Projection damages an enemy or object, it releases homing Elemental Projectiles that trigger her Action Skill Elemental Effect on enemies. Element: Shock.\",\n effect: (rank, level) => `Damage: ${flat(rank, level, 86)} (increases with character level)\\nElemental Projectiles: 3 per enemy or object hit\\nCooldown: 28 seconds`,\n type: SKILLS.AUGMENT_ACTION_SKILL,\n },\n \"Ascendant\": {\n ranks: 1,\n text: \"All Action Skill Augments gain increased effects.\",\n effect: (rank, level) => `Soul Sap Life Steal: +20%\\nAllure Radius: +100%\\nGlamour Duration: +50%\\nStillness of Mind: Breaks 0.75 sec after taking dmg\\nRevelation Damage: +25%`,\n },\n \"Stillness of Mind\": {\n ranks: 0,\n text: \"Enemies damaged by Amara's Action Skill become phaselocked until they are damaged or the duration ends. However, Action Skill Cooldown is increased. If Amara targets an enemy with Phasegrasp, enemies near the Grasped target are also phaselocked.\",\n effect: (rank, level) => `Phaselock Duration: 6 seconds\\nAction Skill Damage: -25%\\nAction Skill Cooldown: +15%`,\n type: SKILLS.AUGMENT_CHEVRON,\n },\n },\n \"4\": {\n \"Reverberation\": {\n ranks: 0,\n text: \"Amara sends forward an Astral Projection of herself, dealing damage to everything in its path. Astral Projection deals increased damage for every enemy it hits. Element: Shock.\",\n effect: (rank, level) => `Damage: ${flat(rank, level, 88)} (increases with character level)\\nDamage Bonus: +50% per enemy hit\\nCooldown: 30 seconds`,\n type: SKILLS.AUGMENT_ACTION_SKILL,\n },\n \"From Rest\": {\n ranks: 3,\n text: \"Amara gains improved Fire Rate and Charge Time.\",\n effect: (rank, level) => `Fire Rate: +${percent(rank, 4)}%\\nCharge Time: +${getFromRestChargeTime(rank)}%`,\n },\n \"Laid Bare\": {\n ranks: 3,\n text: \"Enemies take increased damage from all sources for a few seconds after being damaged by Amara's Action Skill.\",\n effect: (rank, level) => `Damage Increase: +${percent(rank, 8.333)}%\\nDuration: 8 seconds`,\n },\n \"Wrath\": {\n ranks: 3,\n text: \"Amara gains increased Gun Damage. This effect is increased after she activates her Action Skill for a few seconds.\",\n effect: (rank, level) => `Gun Damage: +${getWrathGunDamage(rank)}%\\nAdditional Gun Damage: +${getWrathGunDamageAfterActionSkill(rank)}%\\nDuration: 8 seconds`,\n },\n },\n \"5\": {\n \"Remnant\": {\n ranks: 3,\n text: \"When Amara kills an enemy with a Gun or Action Skill, she creates a homing projectile that seeks out a new enemy dealing her Action Skill Elemental Damage. Any Overkill Damage is added to the projectile's damage.\",\n effect: (rank, level) => `Remnant Base Damage: ${flat(rank, level, 9)} (increases with character level)`,\n },\n \"Awakening\": {\n ranks: 3,\n text: \"Amara's Rush stacks gain increased effectiveness.\",\n effect: (rank, level) => `Rush Stack Effectiveness: +${percent(rank, 10)}%`,\n },\n \"Tandava\": {\n ranks: 0,\n text: \"Amara sends forward an Astral Projection of herself. When it hits a target, it explodes, damaging all nearby enemies. Element: Shock.\",\n effect: (rank, level) => `Damage: ${flat(rank, level, 91)} (increases with character level)\\nCooldown: 35 seconds`,\n type: SKILLS.AUGMENT_ACTION_SKILL,\n },\n },\n \"6\": {\n \"Avatar\": {\n ranks: 1,\n text: \"Amara's Action Skill can be activated while it's cooling down. This skill may only be used once per completed cooldown. Additionally, increases Amara's Maximum Rush Stacks. Additionally, if Amara's Action Skill kills an enemy, it refunds half of her Rush stacks.\",\n effect: (rank, level) => `Maximum Rush Stacks: +10`,\n },\n },\n },\n \"Fist of the Elements\": {\n \"0\": {\n \"Phasegrasp\": {\n text: \"Amara summons a giant fist that bursts from the ground and locks the targeted enemy in place for a few seconds. Some enemies are immune to being Grasped and instantly take damage instead. Element: Shock.\",\n effect: (rank, level) => `Skill Duration: 7 seconds\\nCooldown: 16 seconds\\nGrasp Immune Damage: ${flat(rank, level, 28)} (increases with character level)`,\n type: SKILLS.ACTION_SKILL,\n ranks: 0,\n },\n },\n \"1\": {\n \"Anima\": {\n ranks: 5,\n text: \"Amara's Status Effects deal increased damage over time and have increased duration. Her Action Skill Status Effect deals further increased damage.\",\n effect: (rank, level) => `Action Skill Status Effect Damage: +${percent(rank, 8)}%\\nOther Status Effect Damage: +${percent(rank, 4)}%\\nStatus Effect Duration: +${percent(rank, 20)}%`,\n },\n \"Steady Hands\": {\n ranks: 3,\n text: \"Amara gains increased Weapon Handling and Accuracy.\",\n effect: (rank, level) => `Handling: +${getSteadyHandsHandling(rank)}%\\nAccuracy: +${getSteadyHandsAccuracy(rank)}%`,\n },\n \"Infusion\": {\n ranks: 5,\n text: \"Convert a portion of damage dealt by Amara's weapons into her Action Skill Element.\",\n effect: (rank, level) => `Converted Damage: ${percent(rank, 8)}%`,\n },\n },\n \"2\": {\n \"Tempest\": {\n ranks: 5,\n text: \"Amara deals increased Elemental Damage. Shock Damage is further increased.\",\n effect: (rank, level) => `Shock Damage: +${percent(rank, 8)}%\\nOther Elemental Damage: +${percent(rank, 6)}%`,\n },\n \"Illuminated Fist\": {\n ranks: 1,\n text: \"Amara gains increased Melee Damage and her Melee Damage is converted to Action Skill Element.\",\n effect: (rank, level) => `Melee Damage: +75%`,\n },\n \"Wildfire\": {\n ranks: 5,\n text: \"Whenever Amara applies a Status Effect to an enemy, it has a chance to spread to a nearby enemy.\",\n effect: (rank, level) => `Spread Chance: +${percent(rank, 8)}%`,\n },\n \"Soulfire\": {\n ranks: 0,\n text: \"Converts Amara's Action Skill to Incendiary Damage.\",\n effect: (rank, level) => `Action Skill Element: Incendiary.`,\n type: SKILLS.AUGMENT_DIAMOND,\n },\n },\n \"3\": {\n \"The Eternal Fist\": {\n ranks: 0,\n text: \"Amara summons a giant fist that bursts from the ground and locks the targeted enemy in place for a few seconds. Whenever the Grasped enemy is killed, a new fist seeks out and Grasps a new target. Some enemies are immune to being Grasped and instantly take damage instead. Element: Shock.\",\n effect: (rank, level) => `Bonus Targets: Up to +4\\nDuration: 7 seconds\\nCooldown: 20 seconds\\nGrasp Immune Damage: ${flat(rank, level, 28)} (increases with character level)`,\n type: SKILLS.AUGMENT_ACTION_SKILL,\n },\n \"Dread\": {\n ranks: 1,\n text: \"Amara's Gun Damage is increased for a few seconds after an enemy is Grasped. Whenever any player kills a Grasped enemy, their current weapon is instantly reloaded.\",\n effect: (rank, level) => `Gun Damage: +15%\\nDuration: 8 seconds`,\n },\n \"Allure\": {\n ranks: 0,\n text: \"Amara's Action Skill creates a singularity that pulls in enemies.\",\n effect: (rank, level) => `Duration: 2.5 seconds\\nAction Skill Damage: -20%`,\n type: SKILLS.AUGMENT_CHEVRON,\n },\n },\n \"4\": {\n \"Indiscriminate\": {\n ranks: 3,\n text: \"Amara's bullets that damage enemies have a chance to ricochet and deal decreased damage to other nearby enemies. Ricochet Chance and Damage are increased if target is affected by Phasegrasp or Stillness of Mind.\",\n effect: (rank, level) => `Ricochet Chance: +${percent(rank, 10)}%\\nRicochet Damage: 50% of damage dealt\\nAction Skill Ricochet Chance: +${percent(rank, 20)}%\\nAction Skill Ricochet Damage: 75% of damage dealt`,\n },\n \"Deep Well\": {\n ranks: 1,\n text: \"Amara gains increased Magazine Size with elemental weapons.\",\n effect: (rank, level) => `Magazine Size: +20%`,\n },\n \"Catharsis\": {\n ranks: 3,\n text: \"Whenever Amara triggers an elemental effect on an enemy, when that enemy dies that enemy explodes, dealing her attuned element damage along with any other element that is currently inflicted upon that enemy. This skill has a short cooldown.\",\n effect: (rank, level) => `Damage: ${flat(rank, level, 4)} (increases with character level)\\nCooldown: 8 seconds`,\n },\n \"Ties That Bind\": {\n ranks: 0,\n text: \"Amara summons a giant fist that bursts from the ground and locks the targeted enemy in place for a few seconds. Enemies near the Grasped target are linked, and any damage dealt to a linked target is shared between all other linked targets. Some enemies are immune to being Grasped and instantly take damage instead. Element: Shock.\",\n effect: (rank, level) => `Linked Damage: 35% of damage dealt\\nDuration: 7 seconds\\nCooldown: 18 seconds\\nGrasp Immune Damage: ${flat(rank, level, 34)} (increases with character level)`,\n type: SKILLS.AUGMENT_ACTION_SKILL,\n },\n },\n \"5\": {\n \"Fist Over Matter\": {\n ranks: 0,\n text: \"Amara summons a giant fist that bursts from the ground and locks the targeted enemy in place for a few seconds. After Grasping the targeted enemy, large fists appear and constantly smash the area, dealing damage to nearby enemies. Some enemies are immune to being Grasped and instantly take damage instead. Element: Shock.\",\n effect: (rank, level) => `Damage: ${flat(rank, level, 35)} (increases with character level)\\nDuration: 7 seconds\\nCooldown: 28 seconds\\nGrasp Immune Damage: ${flat(rank, level, 39)} (increases with character level)`,\n type: SKILLS.AUGMENT_ACTION_SKILL,\n },\n \"Sustainment\": {\n ranks: 5,\n text: \"Amara gains Life Steal whenever she deals Elemental Damage with her weapon.\",\n effect: (rank, level) => `Elemental Weapon Life Steal: +${percent(rank, 4)}% of damage dealt`,\n },\n \"Conflux\": {\n ranks: 5,\n text: \"Whenever Amara applies a Status Effect to an enemy, she gains a chance to randomly Electrocute, Ignite, or Melt that enemy.\",\n effect: (rank, level) => `Extra Status Effect Chance: +${percent(rank, 7)}%`,\n },\n },\n \"6\": {\n \"Forceful Expression\": {\n ranks: 1,\n text: \"Amara's guns deal Bonus Elemental Damage based on her Action Skill Element.\",\n effect: (rank, level) => `Bonus Elemental Damage: +18% of damage dealt`,\n },\n },\n },\n};\n\nexport default skills;\n","import style from './index.css';\n\nexport default function () {\n return (\n \n );\n}\n","import { Router } from 'preact-router';\n\nimport Home from '@pages/Home';\nimport Operative from '@pages/Operative';\nimport Siren from '@pages/Siren';\nimport Beastmaster from '@pages/Beastmaster';\nimport Gunner from '@pages/Gunner';\n\nconst App = () =>\n (\n \n \n \n \n \n );\n\nexport default App;\n","// import { useReducer } from 'preact/hooks'; // Downgraded from Preact 10 for compat with @pwa/cli\nimport { Component } from 'preact';\nimport Skill from '@components/Skill';\nimport Nav from '@components/Nav';\nimport Footer from '@components/Footer';\nimport { getHash, setHash } from './hashHandler';\nimport reducer from './reducer';\nimport { getLevel } from './selectors';\nimport style from './index.css';\n\nfunction contextKiller (event) {\n event.preventDefault();\n return false;\n}\n\nexport default class VaultHunter extends Component {\n constructor (props) {\n super(props);\n this.state = {\n invested: [0, 0, 0],\n skills: props.skills || {},\n };\n }\n\n componentDidMount () {\n this.setState(reducer(this.state, {\n type: 'loadSkills',\n skills: getHash(this.state.skills),\n }));\n }\n\n render ({\n name = 'Unnamed',\n discipline = 'Classless',\n path,\n skills: initialSkills,\n }) {\n const skillChangeListenerFactory = (skillName, treeIndex, treeName, tierIndex) => {\n return (oldValue, newValue) => {\n this.setState(reducer(this.state, {\n type: 'skillChange',\n skillName,\n treeIndex,\n treeName,\n tierIndex,\n newValue,\n oldValue,\n }));\n };\n };\n\n const resetSkills = () => {\n setHash(initialSkills);\n this.setState({\n invested: [0, 0, 0],\n skills: initialSkills || {},\n });\n };\n\n const trees =\n Object.keys(this.state.skills).map((treeName, treeIndex) => {\n return (\n
\n \n

{ treeName }

\n
\n { Object.keys(this.state.skills[treeName]).map((tier, tierIndex) =>\n
\n { Object.keys(this.state.skills[treeName][tier]).map((skillName, skillIndex) =>\n = 5 * tierIndex - 5}\n level={getLevel(this.state)}\n image={`../../assets/hunters/${discipline}/${treeIndex}${tierIndex}${skillIndex}.png`}\n onChange={skillChangeListenerFactory(skillName, treeIndex, treeName, tierIndex)}\n />\n ) }\n
\n ) }\n
\n
\n );\n });\n\n const level = getLevel(this.state);\n\n return (\n
\n
\n

{ name }\n
the { discipline }
\n

\n
\n
Level { level }
\n \n
\n
\n
\n
\n
\n { trees }\n
\n
\n
\n
\n
\n );\n }\n}\n","export default {\n ACTION_SKILL: 1,\n AUGMENT_CHEVRON: 2,\n AUGMENT_DIAMOND: 3,\n AUGMENT_ACTION_SKILL: 4,\n}\n","// extracted by mini-css-extract-plugin\nmodule.exports = {\"VaultHunter\":\"_2zgqJ\",\"header\":\"_1Jomm\",\"title\":\"_17kLY\",\"subtitle\":\"_3J3hw\",\"sidepanel\":\"_2UO55\",\"level\":\"xH9ts\",\"reset\":\"K9CBr\",\"trees\":\"_3ek45\",\"tier\":\"_3Ch4X\",\"treeName\":\"_1WAM2\",\"tree\":\"gRWZY\",\"skills\":\"_2Su0b\",\"green\":\"-Pl7G\",\"blue\":\"_1nm1I\",\"red\":\"_3T1pZ\"};","import { Link } from 'preact-router';\nimport Footer from '@components/Footer';\nimport style from './index.css';\n\nexport default function () {\n const pages = [\n { name: 'Zane', job: 'the Operative', path: '/operative' },\n { name: 'Amara', job: 'the Siren', path: '/siren' },\n { name: 'FL4K', job: 'the Beastmaster', path: '/beastmaster' },\n { name: 'Moze', job: 'the Gunner', path: '/gunner' },\n ];\n return (\n
\n
\n
\n

(Unofficial)
Borderlands 3 skill calculator

\n { pages.map(page => {\n return (\n \n
\n {page.name}\n
\n {page.job}\n
\n
\n \n );\n }) }\n
\n
\n
\n
\n );\n}\n","import { h, render } from 'preact';\nimport App from '@components/App';\nimport './index.css';\n\nlet elem = document.querySelector('#app');\nlet root = render(, elem, elem.firstElementChild);\n\nif (process.env.NODE_ENV === 'development' && module.hot) {\n // enable preact devtools\n require('preact/debug');\n // respond to HMR updates\n module.hot.accept('@components/App', New => {\n New = require('@components/App').default;\n root = render(, elem, root);\n });\n} else if (process.env.NODE_ENV === 'production') {\n // Service Worker registration\n require('offline-plugin/runtime').install();\n}\n","import { Component, cloneElement, h } from 'preact';\n\nvar EMPTY$1 = {};\n\nfunction assign(obj, props) {\n\t// eslint-disable-next-line guard-for-in\n\tfor (var i in props) {\n\t\tobj[i] = props[i];\n\t}\n\treturn obj;\n}\n\nfunction exec(url, route, opts) {\n\tvar reg = /(?:\\?([^#]*))?(#.*)?$/,\n\t\tc = url.match(reg),\n\t\tmatches = {},\n\t\tret;\n\tif (c && c[1]) {\n\t\tvar p = c[1].split('&');\n\t\tfor (var i=0; i b.rank) ? -1 :\n\t\t(a.index - b.index)\n\t);\n}\n\n// filter out VNodes without attributes (which are unrankeable), and add `index`/`rank` properties to be used in sorting.\nfunction prepareVNodeForRanking(vnode, index) {\n\tvnode.index = index;\n\tvnode.rank = rankChild(vnode);\n\treturn vnode.attributes;\n}\n\nfunction segmentize(url) {\n\treturn url.replace(/(^\\/+|\\/+$)/g, '').split('/');\n}\n\nfunction rankSegment(segment) {\n\treturn segment.charAt(0)==':' ? (1 + '*+?'.indexOf(segment.charAt(segment.length-1))) || 4 : 5;\n}\n\nfunction rank(path) {\n\treturn segmentize(path).map(rankSegment).join('');\n}\n\nfunction rankChild(vnode) {\n\treturn vnode.attributes.default ? 0 : rank(vnode.attributes.path);\n}\n\nvar customHistory = null;\n\nvar ROUTERS = [];\n\nvar subscribers = [];\n\nvar EMPTY = {};\n\nfunction isPreactElement(node) {\n\treturn node.__preactattr_!=null || typeof Symbol!=='undefined' && node[Symbol.for('preactattr')]!=null;\n}\n\nfunction setUrl(url, type) {\n\tif ( type === void 0 ) type='push';\n\n\tif (customHistory && customHistory[type]) {\n\t\tcustomHistory[type](url);\n\t}\n\telse if (typeof history!=='undefined' && history[type+'State']) {\n\t\thistory[type+'State'](null, null, url);\n\t}\n}\n\n\nfunction getCurrentUrl() {\n\tvar url;\n\tif (customHistory && customHistory.location) {\n\t\turl = customHistory.location;\n\t}\n\telse if (customHistory && customHistory.getCurrentLocation) {\n\t\turl = customHistory.getCurrentLocation();\n\t}\n\telse {\n\t\turl = typeof location!=='undefined' ? location : EMPTY;\n\t}\n\treturn (\"\" + (url.pathname || '') + (url.search || ''));\n}\n\n\n\nfunction route(url, replace) {\n\tif ( replace === void 0 ) replace=false;\n\n\tif (typeof url!=='string' && url.url) {\n\t\treplace = url.replace;\n\t\turl = url.url;\n\t}\n\n\t// only push URL into history if we can handle it\n\tif (canRoute(url)) {\n\t\tsetUrl(url, replace ? 'replace' : 'push');\n\t}\n\n\treturn routeTo(url);\n}\n\n\n/** Check if the given URL can be handled by any router instances. */\nfunction canRoute(url) {\n\tfor (var i=ROUTERS.length; i--; ) {\n\t\tif (ROUTERS[i].canRoute(url)) { return true; }\n\t}\n\treturn false;\n}\n\n\n/** Tell all router instances to handle the given URL. */\nfunction routeTo(url) {\n\tvar didRoute = false;\n\tfor (var i=0; i 0;\n\t};\n\n\t/** Re-render children with a new URL to match against. */\n\tRouter.prototype.routeTo = function routeTo (url) {\n\t\tthis._didRoute = false;\n\t\tthis.setState({ url: url });\n\n\t\t// if we're in the middle of an update, don't synchronously re-route.\n\t\tif (this.updating) { return this.canRoute(url); }\n\n\t\tthis.forceUpdate();\n\t\treturn this._didRoute;\n\t};\n\n\tRouter.prototype.componentWillMount = function componentWillMount () {\n\t\tROUTERS.push(this);\n\t\tthis.updating = true;\n\t};\n\n\tRouter.prototype.componentDidMount = function componentDidMount () {\n\t\tvar this$1 = this;\n\n\t\tif (customHistory) {\n\t\t\tthis.unlisten = customHistory.listen(function (location) {\n\t\t\t\tthis$1.routeTo((\"\" + (location.pathname || '') + (location.search || '')));\n\t\t\t});\n\t\t}\n\t\tthis.updating = false;\n\t};\n\n\tRouter.prototype.componentWillUnmount = function componentWillUnmount () {\n\t\tif (typeof this.unlisten==='function') { this.unlisten(); }\n\t\tROUTERS.splice(ROUTERS.indexOf(this), 1);\n\t};\n\n\tRouter.prototype.componentWillUpdate = function componentWillUpdate () {\n\t\tthis.updating = true;\n\t};\n\n\tRouter.prototype.componentDidUpdate = function componentDidUpdate () {\n\t\tthis.updating = false;\n\t};\n\n\tRouter.prototype.getMatchingChildren = function getMatchingChildren (children, url, invoke) {\n\t\treturn children\n\t\t\t.filter(prepareVNodeForRanking)\n\t\t\t.sort(pathRankSort)\n\t\t\t.map( function (vnode) {\n\t\t\t\tvar matches = exec(url, vnode.attributes.path, vnode.attributes);\n\t\t\t\tif (matches) {\n\t\t\t\t\tif (invoke !== false) {\n\t\t\t\t\t\tvar newProps = { url: url, matches: matches };\n\t\t\t\t\t\tassign(newProps, matches);\n\t\t\t\t\t\tdelete newProps.ref;\n\t\t\t\t\t\tdelete newProps.key;\n\t\t\t\t\t\treturn cloneElement(vnode, newProps);\n\t\t\t\t\t}\n\t\t\t\t\treturn vnode;\n\t\t\t\t}\n\t\t\t}).filter(Boolean);\n\t};\n\n\tRouter.prototype.render = function render (ref, ref$1) {\n\t\tvar children = ref.children;\n\t\tvar onChange = ref.onChange;\n\t\tvar url = ref$1.url;\n\n\t\tvar active = this.getMatchingChildren(children, url, true);\n\n\t\tvar current = active[0] || null;\n\t\tthis._didRoute = !!current;\n\n\t\tvar previous = this.previousUrl;\n\t\tif (url!==previous) {\n\t\t\tthis.previousUrl = url;\n\t\t\tif (typeof onChange==='function') {\n\t\t\t\tonChange({\n\t\t\t\t\trouter: this,\n\t\t\t\t\turl: url,\n\t\t\t\t\tprevious: previous,\n\t\t\t\t\tactive: active,\n\t\t\t\t\tcurrent: current\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\n\t\treturn current;\n\t};\n\n\treturn Router;\n}(Component));\n\nvar Link = function (props) { return (\n\th('a', assign({ onClick: handleLinkClick }, props))\n); };\n\nvar Route = function (props) { return h(props.component, props); };\n\nRouter.subscribers = subscribers;\nRouter.getCurrentUrl = getCurrentUrl;\nRouter.route = route;\nRouter.Router = Router;\nRouter.Route = Route;\nRouter.Link = Link;\n\nexport { subscribers, getCurrentUrl, route, Router, Route, Link };export default Router;\n//# sourceMappingURL=preact-router.es.js.map\n","import SKILLS from '@constants/skills';\n\nfunction percent (rank, unit) {\n return Math.round(rank * unit * 10) / 10;\n}\n\n/* These three skills dont follow a linear patch for some increases. Data came from official builder.\nhttps://borderlands.com/en-US/characters/fl4k/#-\nMight be different in game but I haven't played FL4K yet!\nThere are probably diminishing return algorithms for these but this was quicker than figuring that out. */\n\n// Hunter's Eye Damage Resistance\nfunction getHuntersEyeDamageResistance(rank) {\n switch (rank) {\n case 1:\n return 5.3;\n case 2:\n return 10.1;\n case 3:\n return 14.4;\n case 4:\n return 18.3;\n case 5:\n return 21.9;\n default:\n return 0;\n }\n}\n\n// Ambush Predator Handling\nfunction getAmbushPredatorHandling(rank) {\n switch (rank) {\n case 1:\n return 17;\n case 2:\n return 29;\n case 3:\n return 38;\n case 4:\n return 44;\n case 5:\n return 50;\n default:\n return 0;\n }\n}\n\n// The Most Dangerous Game Handling\nfunction getMostDangerousGameHandling(rank) {\n switch (rank) {\n case 1:\n return 14.3;\n case 2:\n return 25.0;\n case 3:\n return 33.3;\n default:\n return 0;\n }\n}\n\n// Furious Attack Handling\nfunction getFuriousAttackHandling(rank) {\n switch (rank) {\n case 1:\n return 1;\n case 2:\n return 2;\n case 3:\n return 2.9;\n case 4:\n return 3.8;\n case 5:\n return 4.8;\n default:\n return 0;\n }\n}\n\n// Turn Tail And Run Damage Resistance\nfunction getTurnTailAndRunDamageResistance(rank) {\n switch (rank) {\n case 1:\n return 6.5;\n case 2:\n return 12.3;\n case 3:\n return 17.4;\n default:\n return 0;\n }\n}\n\n// Interplanetary Stalker Beast Movement Speed\nfunction getInterplanetaryStalkerBeastMovementSpeed(rank) {\n switch (rank) {\n case 1:\n return 2;\n case 2:\n return 3;\n case 3:\n return 5;\n case 4:\n return 6;\n case 5:\n return 7;\n default:\n return 0;\n }\n}\n\n// Second Intention Critical Kill Reload Speed\nfunction getSecondIntentionCriticalKillReloadSpeed(rank) {\n switch (rank) {\n case 1:\n return 6;\n case 2:\n return 11;\n case 3:\n return 15;\n case 4:\n return 19;\n case 5:\n return 23;\n default:\n return 0;\n }\n}\n\n/* eslint-disable quotes */\nconst skills = {\n \"Stalker\": {\n \"0\": {\n \"Jabber Sidekick\": {\n text: \"FL4K is joined by a loyal Jabber companion, armed with a Pistol. While accompanied by the Jabber, FL4K's Movement Speed is increased. Hold [Pet Skill key] to issue an Attack Command, which will cause the Jabber to throw a Radiation Barrel at enemies.\",\n type: SKILLS.AUGMENT_DIAMOND,\n ranks: 0,\n effect: (rank, level) => `Movement Speed: +5%`,\n },\n \"Fade Away\": {\n text: \"FL4K cloaks, turning invisible. FL4K can fire 3 shots while cloaked, and each shot is automatically a Critical Hit. While cloaked, FL4K has increased Movement Speed and Health Regeneration.\",\n type: SKILLS.ACTION_SKILL,\n ranks: 0,\n effect: (rank, level) => `Fade Away Bonus Damage: 200% of damage dealt\\nCloaked Movement Speed: +25%\\nHealth Regeneration: +3% of Max Health per second\\nDuration: 15 seconds\\nCooldown: 45 seconds`,\n },\n },\n \"1\": {\n \"Self-Repairing System\": {\n text: \"FL4K's Maximum Health is increased, and they constantly regenerate health.\",\n ranks: 5,\n effect: (rank, level) => `Maximum Health: +${percent(rank, 6)}%\\nHealth Regeneration: +${percent(rank, 0.3)}% of Max Health/sec`,\n },\n \"Sic'Em\": {\n text: \"Attack Command has lowered Cooldown and increased Damage.\",\n ranks: 3,\n effect: (rank, level) => `Attack Command Damage: +${percent(rank, 10)}%\\nAttack Command Cooldown: -${percent(rank, 10)}%`,\n },\n \"Furious Attack\": {\n text: \"Hunter Skill. After shooting an enemy, FL4K gains a stack of Furious Attack. For each stack of Furious Attack, FL4K's Handling and Gun Damage are increased, and their pet gains increased Damage per stack. Stacks decay after a few seconds.\",\n ranks: 5,\n effect: (rank, level) => `Gun Damage: +${percent(rank, 0.4)}% per stack\\nHandling: +${getFuriousAttackHandling(rank)}% per stack\\nPet Damage: +${percent(rank, 0.6)}% per stack\\nMaximum Stacks: 10\\nDuration: 4 seconds`,\n },\n },\n \"2\": {\n \"Guerrillas In The Mist\": {\n text: \"Fade Away no longer ends after FL4K attacks, at the cost of Critical Hit Damage and Fade Away duration being reduced.\",\n type: SKILLS.AUGMENT_CHEVRON,\n ranks: 0,\n effect: (rank, level) => `Fade Away Bonus Damage: 25% of damage dealt\\nFade Away Duration: 5 seconds`,\n },\n \"Eager To Impress\": {\n text: \"Kill Skill. Whenever FL4K kills an enemy, Action Skill Cooldown Time is reduced. Whenever FL4K's pet kills an enemy, Action Skill Cooldown Time is reduced even more and Attack Command's duration is refreshed.\",\n ranks: 5,\n effect: (rank, level) => `FL4K Kill Action Skill Cooldown: -${percent(rank, 0.25)} seconds\\nPet Kill Action Skill Cooldown: -${percent(rank, 0.5)} seconds`,\n },\n \"All My BFF's\": {\n text: \"Allies share a portion of FL4K's total Health Regeneration. FL4K's pet shares twice the amount of Health Regeneration.\",\n ranks: 3,\n effect: (rank, level) => `Allies' Health Regen: +${Math.round(percent(rank, 16.666))}% of FL4K's Health Regen\\nPet Health Regen: +${Math.round(percent(rank, 33.333))}% of FL4K's Health Regen`,\n },\n \"Overclocked\": {\n text: \"FL4K gains increased Fire Rate. FL4K gains even more Fire Rate after reloading.\",\n ranks: 5,\n effect: (rank, level) => `Fire Rate: +${percent(rank, 2)}%\\nAdditional Fire Rate: +${percent(rank, 2)}%\\nDuration: 4 seconds`,\n },\n },\n \"3\": {\n \"Not My Circus\": {\n text: \"After Fade Away ends, FL4K's pet will Taunt, drawing the attention of all enemies in a huge radius. For a few seconds after Taunting, the pet gains powerful Damage Resistance.\",\n type: SKILLS.AUGMENT_CHEVRON,\n ranks: 0,\n effect: (rank, level) => `Pet Taunt Duration: 6 seconds\\nPet Damage Resistance: +80%`,\n },\n \"Lick The Wounds\": {\n text: \"When FL4K is in Fight For Your Life, their pet will attempt to revive them. If it does, it gains increased Damage for a short time.\",\n ranks: 1,\n effect: (rank, level) => `Pet Damage: +30%\\nDuration: 60 seconds`,\n },\n \"Turn Tail And Run\": {\n text: \"While moving, FL4K constantly regenerates health and gains Damage Resistance.\\nWhile still, FL4K gains Gun Damage and Fire Rate.\",\n ranks: 3,\n effect: (rank, level) => `Damage Resistance: +${getTurnTailAndRunDamageResistance(rank)}% while moving\\nHealth Regen: +${percent(rank, 0.3)}% of Max Health/sec while moving\\nGun Damage: +${percent(rank, 8.333)}% while still\\nFire Rate: +${percent(rank, 4)}% while still`,\n },\n \"Beefcake Jabber\": {\n text: \"FL4K's Jabber evolves into a Beefcake, discarding its pistol and equipping a Shotgun. While accompanied by the Beefcake, FL4K gains increased Movement Speed and Maximum Health. When FL4K issues an Attack Command, the Beefcake will summon a melee weapon to deliver a powerful attack that knocks enemies back.\",\n type: SKILLS.AUGMENT_DIAMOND,\n ranks: 0,\n effect: (rank, level) => `Movement Speed: +5%\\nMaximum Health: +10%`,\n },\n },\n \"4\": {\n \"Until You Are Dead\": {\n text: \"The Health Regeneration and Movement Speed of Fade Away persists for a short time after the skill has ended.\",\n type: SKILLS.AUGMENT_CHEVRON,\n ranks: 0,\n effect: (rank, level) => `Duration: 10 seconds after Fade Away ends`,\n },\n \"The Fast And The Furryous\": {\n text: \"While above half health, FL4K's Gun Damage and Movement Speed are increased, and their pet gains increased Damage.\",\n ranks: 3,\n effect: (rank, level) => `Gun Damage: +${Math.round(percent(rank, 8.333))}%\\nMovement Speed: +${percent(rank, 3.333)}%\\nPet Damage: +${percent(rank, 10)}%`,\n },\n \"Hidden Machine\": {\n text: \"When an enemy has no target or is attacking a different target, FL4K deals increased damage against them.\",\n ranks: 5,\n effect: (rank, level) => `Damage: +${percent(rank, 6)}%`,\n },\n \"Gunslinger Jabber\": {\n text: \"FL4K's Jabber upgrades his gear and equips an SMG. While accompanied by the Gunslinger, FL4K gains increased Movement Speed and Critical Hit Damage. When FL4K issues an Attack Command, the Gunslinger equips a Rocket Launcher to attack the target.\",\n type: SKILLS.AUGMENT_DIAMOND,\n ranks: 0,\n effect: (rank, level) => `Movement Speed: +5%\\nCritical Hit Damage: +5%`,\n },\n },\n \"5\": {\n \"Unblinking Eye\": {\n text: \"During Fade Away, successive hits on the same target increase FL4K's Critical Damage per hit. Unblinking Eye resets every 3 hits.\",\n type: SKILLS.AUGMENT_CHEVRON,\n ranks: 0,\n effect: (rank, level) => `Additional Fade Away Bonus Damage: +75% of damage dealt per hit`,\n },\n \"Rage And Recover\": {\n text: \"Kill Skill. After killing an enemy, FL4K and FL4K's pet regenerate health for a few seconds.\",\n ranks: 5,\n effect: (rank, level) => `Health Regeneration: +${percent(rank, 1.6)}% of Missing Health/sec\\nPet Health Regen: +${percent(rank, 1.6)}% of Missing Health/sec\\nDuration: 3 seconds`,\n },\n },\n \"6\": {\n \"The Power Inside\": {\n text: \"FL4K and FL4K's pet gain increased Damage when FL4K activates an Action Skill. If FL4K is at full health, the increased Damage is doubled.\",\n ranks: 1,\n effect: (rank, level) => `Damage: +25%\\nPet Damage: +25%\\nDuration: 15 seconds`,\n },\n },\n },\n \"Master\": {\n \"0\": {\n \"Guard Skag\": {\n text: \"FL4K is joined by a loyal Skag companion, which will increase FL4K's Damage. Hold [Pet Skill key] to issue an Attack Command, which will cause the Skag to vomit acid onto enemies.\",\n type: SKILLS.AUGMENT_DIAMOND,\n ranks: 0,\n effect: (rank, level) => `Damage: +5%`,\n },\n \"Gamma Burst\": {\n text: \"FL4K creates a Rift at a target location, teleporting their pet through the Rift and dealing Radiation Damage to nearby enemies. Additionally, FL4K's pet becomes irradiated, growing in size and dealing bonus Radiation Damage when it attacks. Using Gamma Burst while FL4K's pet is downed or dead will revive the pet at the targeted location with 30% of its health, but will double Action Skill Cooldown Time.\",\n type: SKILLS.ACTION_SKILL,\n ranks: 0,\n effect: (rank, level) => `Damage 56: (increases with character level)\\nDuration: 20 seconds\\nCooldown: 30 seconds`,\n },\n },\n \"1\": {\n \"Ferocity\": {\n text: \"FL4K's Pet deals increased damage.\",\n ranks: 5,\n effect: (rank, level) => `Pet Damage: +${percent(rank, 10)}%`,\n },\n \"Persistence Hunter\": {\n text: \"Increases FL4K's Gun Damage and Action Skill Duration.\",\n ranks: 3,\n effect: (rank, level) => `Gun Damage: +${percent(rank, 4)}%\\nAction Skill Duration: +${percent(rank, 15)}%`,\n },\n \"Go For The Eyes!\": {\n text: \"When FL4K's pet attacks an enemy, the first melee attack is an automatic Critical Hit that deals increased damage.\",\n ranks: 5,\n effect: (rank, level) => `Pet Critical Hit Damage: ${percent(rank, 15)}%`,\n },\n },\n \"2\": {\n \"Atomic Aroma\": {\n text: \"While Gamma Burst is active, FL4K's pet is surrounded by a Radiation Aura, constantly damaging all nearby enemies.\",\n type: SKILLS.AUGMENT_CHEVRON,\n ranks: 0,\n effect: (rank, level) => `Radiation Damage: 4 per second (increases with character level)`,\n },\n \"Who Rescued Who?\": {\n text: \"Whenever FL4K's Pet deals damage, FL4K regenerates health for a few seconds. Whenever FL4K deals damage to an enemy, their Pet's health is restored for a portion of the damage dealt.\",\n ranks: 5,\n effect: (rank, level) => `Health Regeneration: +${percent(rank, 0.4)}% of Max Health/sec\\nPet Health Restored: +${percent(rank, 1)}% of damage dealt`,\n },\n \"He Bites!\": {\n text: \"When FL4K's pet takes damage, the pet returns some of that damage to the attacker.\",\n ranks: 3,\n effect: (rank, level) => `Damage Returned: ${percent(rank, 5)}% of damage received`,\n },\n \"Frenzy\": {\n text: \"Hunter Skill. When FL4K's pet deals damage, FL4K and their pet gain a stack of Frenzy. Each stack of Frenzy increases Damage. The stacks decay after a few seconds.\",\n ranks: 5,\n effect: (rank, level) => `Damage: +${percent(rank, 0.8)}% per stack\\nPet Damage: +${percent(rank, 0.8)}% per stack\\nMaximum Stacks: 10`,\n },\n },\n \"3\": {\n \"Empathic Rage\": {\n text: \"For the duration of Gamma Burst, Damage dealt by FL4K is increased.\",\n type: SKILLS.AUGMENT_CHEVRON,\n ranks: 0,\n effect: (rank, level) => `Damage: +20%`,\n },\n \"Psycho Head On A Stick\": {\n text: \"Hunter Kill Skill. Whenever FL4K kills an enemy, their pet gains increased Movement Speed and Damage for a few seconds.\",\n ranks: 1,\n effect: (rank, level) => `Pet Damage: +20%\\nPet Movement Speed: +12%\\nDuration: 8 seconds`,\n },\n \"Hive Mind\": {\n text: \"When FL4K takes damage, a portion of all damage they take is inflicted on their pet instead.\",\n ranks: 3,\n effect: (rank, level) => `Damage Shared: ${percent(rank, 5)}%`,\n },\n \"Great Horned Skag\": {\n text: \"FL4K's Skag evolves into a larger Great Horned Skag, which will increase FL4K's Damage and Gun Damage. When FL4K issues an Attack Command, the Great Horned Skag will charge at enemies and knock them into the air.\",\n type: SKILLS.AUGMENT_DIAMOND,\n ranks: 0,\n effect: (rank, level) => `Damage: +5%\\nGun Damage: +10%`,\n },\n },\n \"4\": {\n \"Endurance\": {\n text: \"When FL4K or FL4K's pet kills an enemy while Gamma Burst is active, the duration of Gamma Burst is extended and pet damage is increased. These effects can stack up to 5 times.\",\n type: SKILLS.AUGMENT_CHEVRON,\n ranks: 0,\n effect: (rank, level) => `Gamma Burst Duration: +3 seconds per kill\\nPet Damage: +10% per kill\\nMaximum Stacks: 5`,\n },\n \"Barbaric Yawp\": {\n text: \"Increases the power of Pet Bonuses granted to FL4K.\",\n ranks: 5,\n effect: (rank, level) => `Pet Bonuses: +${percent(rank, 40)}%`,\n },\n \"Mutated Defenses\": {\n text: \"When FL4K's pet is at low health, it gains Damage Resistance and regenerates health. This skill has a long cooldown.\",\n ranks: 1,\n effect: (rank, level) => `Pet Damage Resistance: +30%\\nPet Health Regen: +6.667% of Max Health/sec\\n Duration: 6 seconds\\nCooldown: 15 seconds`,\n },\n \"Eridian Skag\": {\n text: \"FL4K's Skag evolves into an Eridian Skag, which will increase FL4K's Damage and Fire Rate. When FL4K issues an Attack Command, their Eridian Skag pulls nearby enemies in by generating a Singularity.\",\n type: SKILLS.AUGMENT_DIAMOND,\n ranks: 0,\n effect: (rank, level) => `Damage: +5%\\nFire Rate: +5%`,\n },\n },\n \"5\": {\n \"Burst Aid\": {\n text: \"After using Gamma Burst, the Rift remains for the duration of the skill. While standing near the Rift, FL4K and their allies rapidly Regenerate Health.\",\n type: SKILLS.AUGMENT_CHEVRON,\n ranks: 0,\n effect: (rank, level) => `Team Health Regeneration: +20% of Max Health/sec`,\n },\n \"Pack Tactics\": {\n text: \"All damage dealt by FL4K and their pet is increased. Additionally, the Maximum Health of both FL4K and their pet is increased.\",\n ranks: 3,\n effect: (rank, level) => `Damage: +${percent(rank, 7)}%\\nMaximum Health: +${percent(rank, 5)}%\\nPet Damage: +${percent(rank, 7)}%\\nPet Maximum Health: +${percent(rank, 5)}%`,\n },\n \"Shared Spirit\": {\n text: \"While FL4K is at low health, a portion of all damage they take is inflicted on their pet instead.\",\n ranks: 1,\n effect: (rank, level) => `Damage Shared: 50%`,\n },\n },\n \"6\": {\n \"Dominance\": {\n text: \"Melee Override Skill. FL4K establishes dominance over an enemy, turning it into an ally for a short time. If the enemy is a Beast, the duration is doubled. While under the effects of Domiance, the enemy constantly loses health until it dies or the effect ends. Only one enemy can be dominated at a time. An enemy can only be dominated once.\",\n ranks: 1,\n effect: (rank, level) => `Duration: 12 seconds\\nTarget Loses 2% of Maximum Health per second`,\n },\n },\n },\n \"Hunter\": {\n \"0\": {\n \"Spiderant Centurion\": {\n text: \"FL4K is joined by a loyal Spiderant companion, which will cause FL4K to constant regenerate health. Hold [Pet Skill key] to issue an Attack Command, which will cause the Spiderant to charge into enemies.\",\n type: SKILLS.AUGMENT_DIAMOND,\n ranks: 0,\n effect: (rank, level) => `Health Regeneration: 1% of Max Health per second`,\n },\n \"Rakk Attack!\": {\n text: \"FL4K sends forward 2 Rakk to dive-bomb enemies. This skill has multiple charges. Element: Incendiary.\",\n type: SKILLS.ACTION_SKILL,\n ranks: 0,\n effect: (rank, level) => `Damage: 35 (increases with character level)\\nElement Status Effect Chance: 100%\\nCooldown: 18 seconds`,\n },\n },\n \"1\": {\n \"Interplanetary Stalker\": {\n text: \"Hunter Kill Skill. Whenever FL4K kills an enemy, they gain a stack of Interplanetary Stalker. For each stack of Interplanetary Stalker, they and their pet gain a bonus to all damage dealt. Additionally, they gain a unique stacking bonus depending on the type of enemy killed. Each unique bonus can stack up to 3 times. Each stack decays after a short time.\",\n ranks: 5,\n effect: (rank, level) => `Damage: +${percent(rank, 2)}% per stack\\nPet Damage: +${percent(rank, 1)}% per stack\\nHuman Bonus: +${percent(rank, 3)}% Action Skill Damage per stack\\nRobot Bonus: +${percent(rank, 1.5)}% Corrosive Damage per stack\\nBeast Bonus: +${getInterplanetaryStalkerBeastMovementSpeed(rank)}% Movement Speed per stack\\nMaximum Stacks: 3`,\n },\n \"Leave No Trace\": {\n text: \"When FL4K scores a Critical Hit, there is a chance for 1 ammo to be added to their magazine.\",\n ranks: 3,\n effect: (rank, level) => `Ammo Chance: +${percent(rank, 12)}%\\nCooldown: 0.3 seconds`,\n },\n \"Second Intention\": {\n text: \"Hunter Kill Skill. Whenever FL4K kills an enemy, they gain increased Reload Speed. This bonus is increased if FL4K scores a Critical Kill.\",\n ranks: 5,\n effect: (rank, level) => `Reload Speed: +${Math.ceil(percent(rank, 2.6))}%\\nCritical Kill Reload Speed: +${getSecondIntentionCriticalKillReloadSpeed(rank)}%\\nDuration: 5 seconds`,\n },\n },\n \"2\": {\n \"Rakk Open A Cold One\": {\n text: \"Converts FL4K's Rakk to Cryo Damage.\",\n type: SKILLS.AUGMENT_CHEVRON,\n ranks: 0,\n effect: (rank, level) => `Rakk Attack! Element: Cryo`,\n },\n \"Hunter's Eye\": {\n text: \"FL4K gains bonuses when fighting different types of enemies.\",\n ranks: 5,\n effect: (rank, level) => `Human Bonus: +${percent(rank, 2.48)}% Critical Hit Damage\\nRobot Bonus: +${percent(rank, 6)}% Armor Damage\\nBeast Bonus: +${getHuntersEyeDamageResistance(rank)}% Damage Resistance`,\n },\n \"Head Count\": {\n text: \"Whenever FL4K scores a Critical Hit, there is a chance their Action Skill Cooldown is reduced.\",\n ranks: 3,\n effect: (rank, level) => `Cooldown Reduction Chance: +${percent(rank, 10)}%\\nAction Skill Cooldown: -2 seconds`,\n },\n \"Ambush Predator\": {\n text: \"While there are no enemies nearby, FL4K's Weapon Handling and Critical Hit Damage are increased.\",\n ranks: 5,\n effect: (rank, level) => `Critical Hit Damage: +${percent(rank, 4)}%\\nHandling: +${getAmbushPredatorHandling(rank)}%`,\n },\n },\n \"3\": {\n \"Falconer's Feast\": {\n text: \"When FL4K's Rakk damage an enemy, a portion of FL4K's health is restored.\",\n type: SKILLS.AUGMENT_CHEVRON,\n ranks: 0,\n effect: (rank, level) => `Health Restored: 7% of Maximum Health`,\n },\n \"Two F4ng\": {\n text: \"FL4K has a chance to fire an extra projectile per shot.\",\n ranks: 5,\n effect: (rank, level) => `Extra Projectile Chance: +${percent(rank, 5)}%`,\n },\n \"Spiderant Scorcher\": {\n text: \"FL4K's Spiderant evolves into a Scorcher, occasionally dealing Incendiary Damage to all enemies nearby. While accompanied by the Scorcher, FL4K constantly regenerates health and deals increased Elemental Damage. When FL4K issues an Attack Command, the Scorcher will charge enemies.\",\n type: SKILLS.AUGMENT_DIAMOND,\n ranks: 0,\n effect: (rank, level) => `Health Regeneration: +1% of Max Health per second\\nElemental Damage: +10%`,\n },\n },\n \"4\": {\n \"Flock'N'Load\": {\n text: \"FL4K sends forward additional Rakk.\",\n type: SKILLS.AUGMENT_CHEVRON,\n ranks: 0,\n effect: (rank, level) => `Additional Rakk: +2`,\n },\n \"Big Game\": {\n text: \"FL4K's Hunter Skills become much more effective and have a longer duration.\",\n ranks: 3,\n effect: (rank, level) => `Hunter Skill Effects: +${percent(rank, 10)}%\\nHunter Skill Duration: +${Math.round(percent(rank, 33.333))}%`,\n },\n \"The Most Dangerous Game\": {\n text: \"Hunter Kill Skill. Whenever FL4K kills a Badass or stronger enemy, they gain increased Critical Hit Damage, Gun Damage, and Handling for a long time and their pet receives increased Damage for a long time. Additionally, they receive a cash reward from the Intergalactic Bureau of Bounty Hunting.\",\n ranks: 3,\n effect: (rank, level) => `Gun Damage: +${percent(rank, 3.333)}%\\nCritical Hit Damage: +${Math.round(percent(rank, 8.333))}%\\nHandling: +${getMostDangerousGameHandling(rank)}%\\nPet Damage: +${percent(rank, 9)}%\\nDuration: 120 seconds`,\n },\n \"Spiderant Countess\": {\n text: \"FL4K's Spiderant evolves into a Countess, which will cause FL4K to constantly regenerate health and gain Damage Resistance. When FL4K issues an Attack Command, the Countess will burrow underground and then emerge dealing Corrosive Damage in an area.\",\n type: SKILLS.AUGMENT_DIAMOND,\n ranks: 0,\n effect: (rank, level) => `Health Regeneration: +1% of Max Health per second\\nDamage Resistance: +5%`,\n },\n },\n \"5\": {\n \"Rakkcelerate\": {\n text: \"FL4K's Rakk have increased Cooldown Rate and gain an Additional Charge.\",\n type: SKILLS.AUGMENT_CHEVRON,\n ranks: 0,\n effect: (rank, level) => `Rakk Attack! Cooldown Rate: +20%\\nMaximum Rakk Attack! Charges: +1`,\n },\n \"Galactic Shadow\": {\n text: \"FL4K deals increased Critical Hit Damage, and enemies are less likely to attack them.\",\n ranks: 1,\n effect: (rank, level) => `Critical Hit Damage: +15%`,\n },\n \"Grim Harvest\": {\n text: \"FL4K gains increased Gun Damage and Action Skill Damage. FL4K's pet gains increased Damage.\",\n ranks: 5,\n effect: (rank, level) => `Gun Damage: +${percent(rank, 3)}%\\nAction Skill Damage: +${percent(rank, 5)}%\\nPet Damage: +${percent(rank, 7)}%`,\n },\n },\n \"6\": {\n \"Megavore\": {\n text: \"FL4K gains a chance to score a Critical Hit with weapons against any part of enemies.\",\n ranks: 1,\n effect: (rank, level) => `Critical Hit Chance: +20%`,\n },\n },\n },\n};\n\nexport default skills;\n","import VaultHunter from '@components/VaultHunter';\n\nimport skills from './skills.js';\n\nexport default function Gunner ({ path }) {\n return (\n \n );\n}\n","import VaultHunter from '@components/VaultHunter';\n\nimport skills from './skills.js';\n\nexport default function Operative ({ path }) {\n return (\n \n );\n}\n","export function getLevel (state) {\n return state.invested.reduce((total, current) => total + current, 2);\n};\n","import SKILLS from '@constants/skills';\n\nfunction percent (rank, unit) {\n return Math.round(rank * unit * 10) / 10;\n}\n\nfunction percentTwoDecimals (rank, unit) {\n return Math.round(rank * unit * 100) / 100;\n}\n\n// Matched Set Heat Per Shot\nfunction getMatchedSetHeatPerShot(rank) {\n switch (rank) {\n case 1:\n return 2;\n case 2:\n return 4;\n case 3:\n return 6;\n case 4:\n return 9;\n case 5:\n return 11;\n default:\n return 0;\n }\n}\n\n// Scrappy Handling\nfunction getScrappyHandling(rank) {\n switch (rank) {\n case 1:\n return 10.7;\n case 2:\n return 19.4;\n case 3:\n return 26.5;\n case 4:\n return 32.4;\n case 5:\n return 37.5;\n default:\n return 0;\n }\n}\n\n// Scrappy Weapon Swap Speed\nfunction getScrappyWeaponSwapSpeed(rank) {\n switch (rank) {\n case 1:\n return 16;\n case 2:\n return 27.5;\n case 3:\n return 36.3;\n case 4:\n return 43.2;\n case 5:\n return 48.7;\n default:\n return 0;\n }\n}\n\n// Scrappy Mode Switch Speed\nfunction getScrappyModeSwitchSpeed(rank) {\n switch (rank) {\n case 1:\n return 16;\n case 2:\n return 27.5;\n case 3:\n return 36.3;\n case 4:\n return 43.2;\n case 5:\n return 48.7;\n default:\n return 0;\n }\n}\n\n// Armored Infantry Damage Resistance\nfunction getArmoredInfantryDamageResistance(rank) {\n switch (rank) {\n case 1:\n return 3;\n case 2:\n return 6;\n case 3:\n return 8;\n case 4:\n return 11;\n case 5:\n return 13;\n default:\n return 0;\n }\n}\n\n// Vladof Ingenuity Shock Damage Resistance\nfunction getVladofIngenuityShockDamageResistance(rank) {\n switch (rank) {\n case 1:\n return 15;\n case 2:\n return 26;\n case 3:\n return 35;\n case 4:\n return 42;\n case 5:\n return 47;\n default:\n return 0;\n }\n}\n\n// Behind the Iron Curtain Shield Recharge Delay\nfunction getBehindTheIronCurtainShieldRechargeDelay(rank) {\n switch (rank) {\n case 1:\n return 7;\n case 2:\n return 14;\n case 3:\n return 19;\n default:\n return 0;\n }\n}\n\n/* eslint-disable quotes */\nconst skills = {\n \"Bottomless Mags\": {\n \"0\": {\n \"Minigun\": {\n text: \"The Minigun is capable of sustained rapid fire. Firing for long periods causes the Minigun to overheat, rendering it inoperable for a few seconds. Element: Non-Elemental.\",\n type: SKILLS.ACTION_SKILL,\n effect: (rank, level) => `Put a little lead in the air and see what falls over.`,\n },\n },\n \"1\": {\n \"Cloud of Lead\": {\n text: \"Occasionally, Moze's and Iron Bear's shots will deal additional Incendiary Damage and won't consume ammo.\",\n ranks: 5,\n effect: (rank, level) => `Effects are triggered every ${9 - rank} shots\\nBonus Incendiary Damage: +${percentTwoDecimals(rank, 2.25)}%`,\n },\n \"Dakka Bear\": {\n text: \"Adds a manned turret to the back of Iron Bear.\",\n ranks: 1,\n effect: (rank, level) => `Fasten your seatbelt, it's going to be a bumpy ride.`,\n },\n \"Matched Set\": {\n text: \"Moze's currently equipped weapon gains a stacking bonus to Magazine Size and Decreased Heat Per Shot for every piece of equipped gear that has a matching manufacturer.\",\n ranks: 5,\n effect: (rank, level) => `Magazine Size: +${percent(rank, 2)}% per matched gear\\nHeat Per Shot: -${getMatchedSetHeatPerShot(rank)}% per matched gear`,\n },\n },\n \"2\": {\n \"Let Off Some Steam\": {\n text: \"Minigun deals more damage as heat increases, and can be fired for longer before overheating.\",\n type: SKILLS.AUGMENT_CHEVRON,\n effect: (rank, level) => `Minigun Damage: Up to +80%\\nMinigun Heat Capacity: +35%`,\n },\n \"Stoke the Embers\": {\n text: \"Increases Moze and Iron Bear's Incendiary Damage.\",\n ranks: 3,\n effect: (rank, level) => `Incendiary Damage: +${percent(rank, 10)}%`,\n },\n \"Redistribution\": {\n text: \"After Moze scores a Critical Hit, she regenerates ammo for a few seconds.\",\n ranks: 1,\n effect: (rank, level) => `Ammo Regeneration: +5% of Magazine Size/sec\\nDuration: 3 seconds`,\n },\n \"Scrappy\": {\n text: \"While moving, Moze's Handling, Weapon Swap and Mode Switch Speed are increased.\",\n ranks: 5,\n effect: (rank, level) => `Handling: +${getScrappyHandling(rank)}%\\nWeapon Swap Speed: +${getScrappyWeaponSwapSpeed(rank)}%\\nMode Switch Speed: +${getScrappyModeSwitchSpeed(rank)}%`,\n },\n \"Salamander\": {\n text: \"The Salamander is a flamethrower that deals Incendiary Damage to enemies at close range. Though the Salamander has infinite ammo, it drains Fuel with use.\",\n type: SKILLS.AUGMENT_ACTION_SKILL,\n effect: (rank, level) => `Fire... for effect.`,\n },\n },\n \"3\": {\n \"General Winter\": {\n text: \"Minigun fires Cryo rounds which reduce Heat Gain and Fuel Drain, but deal reduced damage.\",\n type: SKILLS.AUGMENT_CHEVRON,\n effect: (rank, level) => `Minigun Element: Cryo\\nMinigun Fuel Drain: -40%\\nMinigun Damage: -30%\\nMinigun Cryo Efficiency: +20%`,\n },\n \"Rushin' Offensive\": {\n text: \"Moze can sprint and shoot at the same time.\",\n ranks: 1,\n effect: (rank, level) => `I don't want any messages saying \"I'm holding my position.\"`,\n },\n \"Scorching RPM's\": {\n text: \"Moze gains increased Fire Rate and Critical Hit Damage. Iron Bear gains increased Hard Point damage.\",\n ranks: 5,\n effect: (rank, level) => `Fire Rate: +${percent(rank, 3)}%\\nCritical Hit Damage: +${percent(rank, 4)}%\\nIron Bear Damage: +${percent(rank, 5)}%`,\n },\n \"Fuel Economy\": {\n text: \"Reduces Salamander's Fuel Drain. Additionally, Iron Bear's Movement Speed is increased after damaging an enemy with Salamander.\",\n type: SKILLS.AUGMENT_CHEVRON,\n effect: (rank, level) => `Salamander Fuel Drain: -25%\\nIron Bear Movement Speed: +25%\\nMovement Speed Duration: 3 seconds`,\n },\n },\n \"4\": {\n \"Exploding. Bullets.\": {\n text: \"Minigun fires Explosive Rounds that deal increased Splash Damage, but its Fire Rate is decreased.\",\n type: SKILLS.AUGMENT_CHEVRON,\n effect: (rank, level) => `Minigun Damage: +126%\\nMinigun Fire Rate: -75%`,\n },\n \"The Iron Bank\": {\n text: \"Increases Moze's Magazine Size.\",\n ranks: 5,\n effect: (rank, level) => `Magazine Size: +${percent(rank, 7)}%`,\n },\n \"Specialist Bear\": {\n text: \"Equipping two of the same Weapons on Iron Bear increases the damage they deal.\",\n ranks: 1,\n effect: (rank, level) => `Iron Bear Damage: +${percent(rank, 25)}%`,\n },\n \"Chemical Warfare\": {\n text: \"Salamander now deals Corrosive Damage. Additionally, Salamander's Melt Damage is increased.\",\n type: SKILLS.AUGMENT_CHEVRON,\n effect: (rank, level) => `Salamander Element: Corrosive\\nSalamander Melt Damage: +50%`,\n },\n },\n \"5\": {\n \"Some for the Road\": {\n text: \"Moze gains infinite ammo for a few seconds after exiting Iron Bear.\",\n ranks: 1,\n effect: (rank, level) => `Duration: 5 seconds`,\n },\n \"Click, Click...\": {\n text: \"Moze gains increased Gun Damage as her magazine empties. The less ammo there is remaining, the greater the increase. If Moze has a COV gun equipped, she gains Gun Damage as her gun's heat increases.\",\n ranks: 3,\n effect: (rank, level) => `Gun Damage: Up to +${percent(rank, 12)}%`,\n },\n \"Molten Roar\": {\n text: \"The Salamander burst-fires 3 projectiles with increased Fuel Drain, the first of which leaves a large Incendiary area.\",\n type: SKILLS.AUGMENT_CHEVRON,\n effect: (rank, level) => `Fuel Drain: +25%`,\n },\n },\n \"6\": {\n \"Forge\": {\n text: \"Moze constantly regenerates ammo for her currently equipped weapon.\",\n ranks: 1,\n effect: (rank, level) => `Ammo Regeneration: +5% of Magazine Size/sec`,\n },\n },\n },\n \"Demolition Woman\": {\n \"0\": {\n \"V-35 Grenade Launcher\": {\n text: \"The V-35 is a semi-automatic grenade launcher. Its grenades are not affected by Moze's equipped grenade mod. Element: Non-Elemental.\",\n type: SKILLS.ACTION_SKILL,\n ranks: 0,\n effect: (rank, level) => `For when the V-34 just isn't enough`,\n },\n },\n \"1\": {\n \"Fire in the Skag Den\": {\n text: \"Whenever Moze deals Splash Damage, she deals bonus Incendiary Damage.\",\n ranks: 5,\n effect: (rank, level) => `Bonus Incendiary Damage: +${percent(rank, 3)}% of damage dealt`,\n },\n \"Deadlines\": {\n text: \"Firing Iron Bear Weapons drains less Fuel. Killing an enemy while Iron Bear is active increases Fuel. This skill has diminishing returns.\",\n ranks: 3,\n effect: (rank, level) => `Fuel Drain: -${percent(rank, 10)}%\\nFuel Returned: ${percent(rank, 2)}% of Maximum Fuel`,\n },\n \"Grizzled\": {\n text: \"Kill Skill. Killing an enemy reduces Moze's remaining Action Skill Cooldown Time. This skill has diminishing returns.\",\n ranks: 5,\n effect: (rank, level) => `Iron Bear Cooldown: -${rank * 1} seconds`,\n },\n },\n \"2\": {\n \"Shaped Charge\": {\n text: \"Direct hits with the V-35 deal increased damage.\",\n type: SKILLS.AUGMENT_CHEVRON,\n effect: (rank, level) => `V-35 Direct Hit Damage: +35%`,\n },\n \"Means of Destruction\": {\n text: \"Whenever Moze deals Splash Damage, there is a chance to add ammo to her currently equipped weapon's magazine, with a smaller chance to return a grenade.\",\n ranks: 3,\n effect: (rank, level) => `Ammo Chance: +${percent(rank, 3.333)}%\\nGrenade Chance: +${percent(rank, 2)}%\\nCooldown: 0.3 seconds`,\n },\n \"Torgue Cross-Promotion\": {\n text: \"All Splash Damage dealt by Moze has a chance to double in size.\",\n ranks: 5,\n effect: (rank, level) => `Chance to Double Splash Radius: +${percent(rank, 3)}%`,\n },\n \"Stainless Steel Bear\": {\n text: \"Iron Bear gains additional armor and increased Maximum Fuel.\",\n ranks: 5,\n effect: (rank, level) => `Iron Bear Maximum Health: +${percent(rank, 6)}%\\nMaximum Fuel: +${percent(rank, 4)}%`,\n },\n \"Vanquisher Rocket Pod\": {\n text: \"The Vanquisher Rocket Pod is a rocket launcher capable of rapid-firing volleys of unguided explosive rockets. Element: Non-Elemental.\",\n type: SKILLS.AUGMENT_ACTION_SKILL,\n effect: (rank, level) => `If you want guidance, get a sherpa. If you want explosions, get a Vladof.`,\n },\n },\n \"3\": {\n \"Musical Chairs\": {\n text: \"Occasionally, the V-35 fires a Singularity Grenade that pulls in nearby enemies before exploding.\",\n type: SKILLS.AUGMENT_CHEVRON,\n effect: (rank, level) => `V-35 Singularity: Every 7th grenade`,\n },\n \"Pull the Holy Pin\": {\n text: \"Moze's grenades have a chance to score a Critical Hit, dealing greatly increased damage. Sources of Critical Hit Damage do not affect grenade Critical Hits.\",\n ranks: 3,\n effect: (rank, level) => `Grenade Critical Hit Chance: +${percent(rank, 10)}%`,\n },\n \"Auto Bear\": {\n text: \"After Moze exits Iron Bear, it will remain deployed in place for a short time. While Auto Bear remains active, it will target and attack nearby enemies until its duration ends, then it will charge at an enemy and self-destruct.\",\n ranks: 1,\n effect: (rank, level) => `Auto Bear Duration: 15 seconds`,\n },\n \"Active Tracking\": {\n text: \"The Vanquisher Rocket Pod now fires homing rockets and has increased Reload Speed. Hold down [Action Skill key] and aim at enemies to designate up to 6 targets. Releasing Fire Button launches a volley of homing rockets at the designated targets.\",\n type: SKILLS.AUGMENT_CHEVRON,\n effect: (rank, level) => `Vanquisher Reload Speed: +25%`,\n },\n },\n \"4\": {\n \"Lock and Speedload\": {\n text: \"The V-35's Reload Speed is greatly increased and it now fires a 5-round burst.\",\n type: SKILLS.AUGMENT_CHEVRON,\n effect: (rank, level) => `V-35 Reload Speed: +25%`,\n },\n \"Vampyr\": {\n text: \"Whenever Moze damages an enemy with a thrown grenade, for every enemy hit, she restores a portion of her missing health. Iron Bear restores health for every enemy it deals Splash Damage to.\",\n ranks: 5,\n effect: (rank, level) => `Moze Health Restored: ${percent(rank, 4)}% of Missing Health per enemy hit\\nIron Bear Health Restored: ${percent(rank, 2)}% of Missing Health per enemy hit`,\n },\n \"Why Can't I Carry All These Grenades\": {\n text: \"Increases Moze's grenade carrying capacity.\",\n ranks: 3,\n effect: (rank, level) => `Grenade Capacity: +${rank}`,\n },\n \"Target Softening\": {\n text: \"The Vanquisher Rocket Pod deals greatly reduced damage per rocket, but fires in a 6-rocket spread. Additionally, enemies hit by Vanquisher Rocket Pod rockets take increased damage from all sources.\",\n type: SKILLS.AUGMENT_CHEVRON,\n effect: (rank, level) => `Vanquisher Damage: -74%\\nEnemy Damage Taken: +15%`,\n },\n },\n \"5\": {\n \"To the Last\": {\n text: \"Moze gains the ability to throw grenades while in Fight For Your Life. If she threw a grenade before gaining a Second Wind, a grenade is refunded.\",\n ranks: 1,\n effect: (rank, level) => `The greatest enemy is one with nothing to lose... and a grenade.`,\n },\n \"Explosive Punctuation\": {\n text: \"When Moze deals Splash Damage, her Action Skill Cooldown Rate is briefly increased.\",\n ranks: 5,\n effect: (rank, level) => `Action Skill Cooldown Rate: +${percent(rank, 5)}%`,\n },\n \"Hammerdown Protocol\": {\n text: \"Instead of a volley of conventional rockets, the Vanquisher Rocket Pod launches a single rocket with a nuclear warhead, dealing massive Radiation Damage.\",\n type: SKILLS.AUGMENT_CHEVRON,\n effect: (rank, level) => `Vanquisher Element: Raditation\\nVanquisher Damage: +380%\\nVanquisher Magazine Size: 1`,\n },\n },\n \"6\": {\n \"Short Fuse\": {\n text: \"Whenever Moze deals Gun Damage, there is a chance of a secondary explosion centered on the target.\",\n ranks: 1,\n effect: (rank, level) => `Secondary Explosion Chance: 20%\\nSecondary Explosion Damage: 75% of Gun Damage`,\n },\n },\n },\n \"Shield of Retribution\": {\n \"0\": {\n \"Railgun\": {\n text: \"The Railgun fires electrified high-velocity projectiles that deal Shock Damage.\",\n type: SKILLS.ACTION_SKILL,\n effect: (rank, level) => `It's like a bullet, only bigger. And faster. And wrapped in lightning.`,\n },\n },\n \"1\": {\n \"Selfless Vengeance\": {\n text: \"Whenever Moze reloads, she loses a small portion of her health and grants additional Incendiary Damage to her and her allies' rounds for a few seconds.\",\n ranks: 5,\n effect: (rank, level) => `Health Removed: ${percent(rank, 1)}% of Current Health\\nTeam Bonus Incendiary Damage: +${percent(rank, 3)}% of dmg dealt\\nDuration: 5 seconds`,\n },\n \"Security Bear\": {\n text: \"Iron Bear gains a bubble shield that reduces damage taken. The shield deactivates if it sustains too much damage, reactivating after a short cooldown.\",\n ranks: 1,\n effect: (rank, level) => `50% of Iron Bear Maximum Health added as Shields\\nBubble Recharge Delay: 5 seconds`,\n },\n \"Armored Infantry\": {\n text: \"While Moze's shields are active, she gains Damage Resistance and increased Gun Damage.\",\n ranks: 5,\n effect: (rank, level) => `Damage Resistance: +${getArmoredInfantryDamageResistance(rank)}%\\nGun Damage: +${percent(rank, 3)}%`,\n },\n },\n \"2\": {\n \"Hell on Rails\": {\n text: \"Railgun now fires superheated rounds that deal Incendiary Damge, but have increased Fuel Drain per shot.\",\n type: SKILLS.AUGMENT_CHEVRON,\n effect: (rank, level) => `Railgun Element: Incendiary\\nRailgun Fuel Drain: +30%`,\n },\n \"Drowning in Brass\": {\n text: \"Kill Skill. Killing an enemy grants Moze a stack of Drowning in Brass. For each stack of Drowning in Brass, Moze's Fire Rate is reduced, but Gun Damage is increased for both her and her allies.\",\n ranks: 5,\n effect: (rank, level) => `Moze Fire Rate: -${percent(rank, 0.5)}% per stack\\nTeam Gun Damage: +${percent(rank, 4)}% per stack\\nMaximum Stacks: 3\\nDuration: 15 seconds`,\n },\n \"Thin Red Line\": {\n text: \"A portion of Moze's health is Reserved and cannot be restored, but her Maximum Shield is increased by the same amount.\",\n ranks: 3,\n effect: (rank, level) => `${percent(rank, 20)}% Max Health Reserved and Added to Max Shield`,\n },\n \"Vladof Ingenuity\": {\n text: \"Moze's Maximum Shield is increased, and she gains resistance to Shock Damage.\",\n ranks: 5,\n effect: (rank, level) => `Maximum Shield: +${percent(rank, 6)}%\\nShock Damage Resistance: +${getVladofIngenuityShockDamageResistance(rank)}%`,\n },\n \"Bear Fist\": {\n text: \"The Bear Fist is a pneumatic-driven fist that deals massive damage to a single target at close range. Element: Non-Elemental.\",\n type: SKILLS.AUGMENT_ACTION_SKILL,\n effect: (rank, level) => `Vladof supports the right to bear armored bear arms.`,\n },\n },\n \"3\": {\n \"Capacitive Armature\": {\n text: \"When Railgun hits an enemy, it chains to nearby enemies, dealing reduced Shock Damage to more targets.\",\n type: SKILLS.AUGMENT_CHEVRON,\n effect: (rank, level) => `Splinter Damage: 25% of damage dealt`,\n },\n \"Full Can of Whoop-Ass\": {\n text: \"Entering Iron Bear causes Moze's and her allies' shields to immediately begin recharging at an increased Shield Recharge Rate.\",\n ranks: 1,\n effect: (rank, level) => `Team Shield Recharge Rate: +25%`,\n },\n \"Experimental Munitions\": {\n text: \"Whenever Moze and Iron Bear score a Critical Hit, they deal bonus Incendiary Damage.\",\n ranks: 1,\n effect: (rank, level) => `Bonus Incendiary Damage: +${percent(rank, 10)}% of damage dealt`,\n },\n \"Wild Swing\": {\n text: \"Whenever Bear Fist hits an enemy, it deals random Bonus Elemental Damage to that enemy and all enemies nearby.\",\n type: SKILLS.AUGMENT_CHEVRON,\n effect: (rank, level) => `Bear Fist Bonus Elemental Damage: +35% of damage dealt`,\n },\n },\n \"4\": {\n \"Corrosive Sabot Round\": {\n text: \"Railgun now fires a specialty round that deals reduced damage and explodes after a short delay. Railgun shots have reduced Fuel Drain and the Magazine Size is increased.\",\n type: SKILLS.AUGMENT_CHEVRON,\n effect: (rank, level) => `Railgun Element:Corrosive\\nRailgun Damage: -50%\\nRailgun Fuel Drain: -50%\\nRailgun Magazine Size: +2`,\n },\n \"Behind the Iron Curtain\": {\n text: \"Moze's Shield Recharge Delay is reduced, and her Shield Recharge Rate is increased.\",\n ranks: 3,\n effect: (rank, level) => `Shield Recharge Delay: -${getBehindTheIronCurtainShieldRechargeDelay(rank)}%\\nShield Recharge Rate: +${percent(rank, 7)}%`,\n },\n \"Desperate Measures\": {\n text: \"Moze's Gun Damage and Iron Bear's Damage is increased depending on how low their health is. The lower their health, the greater the increase.\",\n ranks: 3,\n effect: (rank, level) => `Damage: Up to +${Math.round(percent(rank, 16.5))}%`,\n },\n \"Close the Distance\": {\n text: \"Instead of punching, Iron Bear now launches its Bear Fist forward and grabs enemies at greatly increased range, dealing Shock Damage and pulling them back to Iron Bear.\",\n type: SKILLS.AUGMENT_CHEVRON,\n effect: (rank, level) => `Step into my office.`,\n },\n },\n \"5\": {\n \"Phalanx Doctrine\": {\n text: \"Kill Skill. After killing an enemy, Moze gains a stack of Phalanx Doctrine. For every stack of Phalanx Doctrine, Moze's Maximum Shield and Gun Damage are increased. Each stack lasts 30 seconds. There is no stack limit.\",\n ranks: 5,\n effect: (rank, level) => `Maximum Shield: +${percent(rank, 3)}% per stack\\nGun Damage: +${percent(rank, 2)}% per stack\\nDuration: 30 seconds`,\n },\n \"Force Feedback\": {\n text: \"Whenever Moze scores a Critical Kill, her shields immediately begin recharging.\",\n ranks: 1,\n effect: (rank, level) => `Just click on their heads.`,\n },\n \"Shockhammer\": {\n text: \"Bear Fist is now capable of sustained rapid fire punching. Additionally, Bear Fist has reduced Fuel Drain and deals Bonus Shock Damage with each hit.\",\n type: SKILLS.AUGMENT_CHEVRON,\n effect: (rank, level) => `Bear Fist Bonus Shock Damage: +19% of damage dealt\\nBear Fist Fuel Drain: -40%`,\n },\n },\n \"6\": {\n \"Tenacious Defense\": {\n text: \"Whenever Moze's shield is fully depleted, she instantly restores a portion of her shield, and her Gun Damage is increased for a short time. This skill can only trigger after Moze's shields have fully recharged.\",\n ranks: 1,\n effect: (rank, level) => `Shields Restored: 40% of Maximum Shield\\nGun Damage: +30%\\nDuration: 30 seconds`,\n },\n },\n },\n};\n\nexport default skills;\n","!function(){\"use strict\";function e(e,t){var n,o,r,i,l=W;for(i=arguments.length;i-- >2;)P.push(arguments[i]);t&&null!=t.children&&(P.length||P.push(t.children),delete t.children);while(P.length)if((o=P.pop())&&void 0!==o.pop)for(i=o.length;i--;)P.push(o[i]);else\"boolean\"==typeof o&&(o=null),(r=\"function\"!=typeof e)&&(null==o?o=\"\":\"number\"==typeof o?o+=\"\":\"string\"!=typeof o&&(r=!1)),r&&n?l[l.length-1]+=o:l===W?l=[o]:l.push(o),n=r;var a=new T;return a.nodeName=e,a.children=l,a.attributes=null==t?void 0:t,a.key=null==t?void 0:t.key,void 0!==M.vnode&&M.vnode(a),a}function t(e,t){for(var n in t)e[n]=t[n];return e}function n(e,t){null!=e&&(\"function\"==typeof e?e(t):e.current=t)}function o(n,o){return e(n.nodeName,t(t({},n.attributes),o),arguments.length>2?[].slice.call(arguments,2):n.children)}function r(e){!e.__d&&(e.__d=!0)&&1==V.push(e)&&(M.debounceRendering||D)(i)}function i(){var e;while(e=V.pop())e.__d&&x(e)}function l(e,t,n){return\"string\"==typeof t||\"number\"==typeof t?void 0!==e.splitText:\"string\"==typeof t.nodeName?!e._componentConstructor&&a(e,t.nodeName):n||e._componentConstructor===t.nodeName}function a(e,t){return e.__n===t||e.nodeName.toLowerCase()===t.toLowerCase()}function u(e){var n=t({},e.attributes);n.children=e.children;var o=e.nodeName.defaultProps;if(void 0!==o)for(var r in o)void 0===n[r]&&(n[r]=o[r]);return n}function c(e,t){var n=t?document.createElementNS(\"http://www.w3.org/2000/svg\",e):document.createElement(e);return n.__n=e,n}function p(e){var t=e.parentNode;t&&t.removeChild(e)}function s(e,t,o,r,i){if(\"className\"===t&&(t=\"class\"),\"key\"===t);else if(\"ref\"===t)n(o,null),n(r,e);else if(\"class\"!==t||i)if(\"style\"===t){if(r&&\"string\"!=typeof r&&\"string\"!=typeof o||(e.style.cssText=r||\"\"),r&&\"object\"==typeof r){if(\"string\"!=typeof o)for(var l in o)l in r||(e.style[l]=\"\");for(var l in r)e.style[l]=\"number\"==typeof r[l]&&!1===E.test(l)?r[l]+\"px\":r[l]}}else if(\"dangerouslySetInnerHTML\"===t)r&&(e.innerHTML=r.__html||\"\");else if(\"o\"==t[0]&&\"n\"==t[1]){var a=t!==(t=t.replace(/Capture$/,\"\"));t=t.toLowerCase().substring(2),r?o||e.addEventListener(t,_,a):e.removeEventListener(t,_,a),(e.__l||(e.__l={}))[t]=r}else if(\"list\"!==t&&\"type\"!==t&&!i&&t in e){try{e[t]=null==r?\"\":r}catch(e){}null!=r&&!1!==r||\"spellcheck\"==t||e.removeAttribute(t)}else{var u=i&&t!==(t=t.replace(/^xlink:?/,\"\"));null==r||!1===r?u?e.removeAttributeNS(\"http://www.w3.org/1999/xlink\",t.toLowerCase()):e.removeAttribute(t):\"function\"!=typeof r&&(u?e.setAttributeNS(\"http://www.w3.org/1999/xlink\",t.toLowerCase(),r):e.setAttribute(t,r))}else e.className=r||\"\"}function _(e){return this.__l[e.type](M.event&&M.event(e)||e)}function f(){var e;while(e=A.shift())M.afterMount&&M.afterMount(e),e.componentDidMount&&e.componentDidMount()}function d(e,t,n,o,r,i){H++||(R=null!=r&&void 0!==r.ownerSVGElement,B=null!=e&&!(\"__preactattr_\"in e));var l=h(e,t,n,o,i);return r&&l.parentNode!==r&&r.appendChild(l),--H||(B=!1,i||f()),l}function h(e,t,n,o,r){var i=e,l=R;if(null!=t&&\"boolean\"!=typeof t||(t=\"\"),\"string\"==typeof t||\"number\"==typeof t)return e&&void 0!==e.splitText&&e.parentNode&&(!e._component||r)?e.nodeValue!=t&&(e.nodeValue=t):(i=document.createTextNode(t),e&&(e.parentNode&&e.parentNode.replaceChild(i,e),v(e,!0))),i.__preactattr_=!0,i;var u=t.nodeName;if(\"function\"==typeof u)return N(e,t,n,o);if(R=\"svg\"===u||\"foreignObject\"!==u&&R,u+=\"\",(!e||!a(e,u))&&(i=c(u,R),e)){while(e.firstChild)i.appendChild(e.firstChild);e.parentNode&&e.parentNode.replaceChild(i,e),v(e,!0)}var p=i.firstChild,s=i.__preactattr_,_=t.children;if(null==s){s=i.__preactattr_={};for(var f=i.attributes,d=f.length;d--;)s[f[d].name]=f[d].value}return!B&&_&&1===_.length&&\"string\"==typeof _[0]&&null!=p&&void 0!==p.splitText&&null==p.nextSibling?p.nodeValue!=_[0]&&(p.nodeValue=_[0]):(_&&_.length||null!=p)&&m(i,_,n,o,B||null!=s.dangerouslySetInnerHTML),y(i,t.attributes,s),R=l,i}function m(e,t,n,o,r){var i,a,u,c,s,_=e.childNodes,f=[],d={},m=0,b=0,y=_.length,g=0,w=t?t.length:0;if(0!==y)for(var C=0;C skill.ranks) { return false; }\n tierTotal += skill.invested || 0;\n };\n if (tierTotal > 0 && treeTotal + 5 < tierIndex * 5) { return false; }\n treeTotal += tierTotal;\n tierIndex += 1;\n };\n treeTotals[treeIndex] = treeTotal;\n totalSpent += treeTotal;\n treeIndex += 1;\n };\n if (totalSpent > (50 - 3) + 11 + 11) { return false; }\n return treeTotals;\n}\n","import deepmerge from 'deepmerge';\nimport investmentValidator from './investmentValidator';\nimport { setHash } from './hashHandler';\n\nexport default function reducer (state, action) {\n switch (action.type) {\n case 'skillChange':\n var newSkills = deepmerge(state.skills, {\n [action.treeName]: {\n [action.tierIndex + '']: {\n [action.skillName]: {\n invested: action.newValue,\n }\n }\n }\n });\n const skillChangeTotals = investmentValidator(newSkills);\n if (skillChangeTotals) {\n setHash(newSkills);\n return {\n ...state,\n invested: skillChangeTotals,\n skills: newSkills,\n };\n } else {\n return state;\n }\n case 'loadSkills':\n const loadSkillsTotals = investmentValidator(action.skills);\n if (loadSkillsTotals) {\n return {\n ...state,\n invested: loadSkillsTotals,\n skills: deepmerge(state.skills, action.skills),\n };\n } else {\n return state;\n }\n }\n}\n","// extracted by mini-css-extract-plugin\nmodule.exports = {\"footer\":\"Eq4mJ\",\"heart\":\"_37Gl6\",\"moveHeart\":\"_34mPq\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"splash\":\"_2_d3x\",\"wrapper\":\"vMurv\",\"link\":\"_3lx8i\",\"name\":\"_1SiOU\",\"job\":\"_3chgr\",\"disclaimer\":\"_3RIFV\"};","(function (global, factory) {\n\ttypeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :\n\ttypeof define === 'function' && define.amd ? define(factory) :\n\t(global.deepmerge = factory());\n}(this, (function () { 'use strict';\n\nvar isMergeableObject = function isMergeableObject(value) {\n\treturn isNonNullObject(value)\n\t\t&& !isSpecial(value)\n};\n\nfunction isNonNullObject(value) {\n\treturn !!value && typeof value === 'object'\n}\n\nfunction isSpecial(value) {\n\tvar stringValue = Object.prototype.toString.call(value);\n\n\treturn stringValue === '[object RegExp]'\n\t\t|| stringValue === '[object Date]'\n\t\t|| isReactElement(value)\n}\n\n// see https://github.com/facebook/react/blob/b5ac963fb791d1298e7f396236383bc955f916c1/src/isomorphic/classic/element/ReactElement.js#L21-L25\nvar canUseSymbol = typeof Symbol === 'function' && Symbol.for;\nvar REACT_ELEMENT_TYPE = canUseSymbol ? Symbol.for('react.element') : 0xeac7;\n\nfunction isReactElement(value) {\n\treturn value.$$typeof === REACT_ELEMENT_TYPE\n}\n\nfunction emptyTarget(val) {\n\treturn Array.isArray(val) ? [] : {}\n}\n\nfunction cloneUnlessOtherwiseSpecified(value, options) {\n\treturn (options.clone !== false && options.isMergeableObject(value))\n\t\t? deepmerge(emptyTarget(value), value, options)\n\t\t: value\n}\n\nfunction defaultArrayMerge(target, source, options) {\n\treturn target.concat(source).map(function(element) {\n\t\treturn cloneUnlessOtherwiseSpecified(element, options)\n\t})\n}\n\nfunction getMergeFunction(key, options) {\n\tif (!options.customMerge) {\n\t\treturn deepmerge\n\t}\n\tvar customMerge = options.customMerge(key);\n\treturn typeof customMerge === 'function' ? customMerge : deepmerge\n}\n\nfunction mergeObject(target, source, options) {\n\tvar destination = {};\n\tif (options.isMergeableObject(target)) {\n\t\tObject.keys(target).forEach(function(key) {\n\t\t\tdestination[key] = cloneUnlessOtherwiseSpecified(target[key], options);\n\t\t});\n\t}\n\tObject.keys(source).forEach(function(key) {\n\t\tif (!options.isMergeableObject(source[key]) || !target[key]) {\n\t\t\tdestination[key] = cloneUnlessOtherwiseSpecified(source[key], options);\n\t\t} else {\n\t\t\tdestination[key] = getMergeFunction(key, options)(target[key], source[key], options);\n\t\t}\n\t});\n\treturn destination\n}\n\nfunction deepmerge(target, source, options) {\n\toptions = options || {};\n\toptions.arrayMerge = options.arrayMerge || defaultArrayMerge;\n\toptions.isMergeableObject = options.isMergeableObject || isMergeableObject;\n\n\tvar sourceIsArray = Array.isArray(source);\n\tvar targetIsArray = Array.isArray(target);\n\tvar sourceAndTargetTypesMatch = sourceIsArray === targetIsArray;\n\n\tif (!sourceAndTargetTypesMatch) {\n\t\treturn cloneUnlessOtherwiseSpecified(source, options)\n\t} else if (sourceIsArray) {\n\t\treturn options.arrayMerge(target, source, options)\n\t} else {\n\t\treturn mergeObject(target, source, options)\n\t}\n}\n\ndeepmerge.all = function deepmergeAll(array, options) {\n\tif (!Array.isArray(array)) {\n\t\tthrow new Error('first argument should be an array')\n\t}\n\n\treturn array.reduce(function(prev, next) {\n\t\treturn deepmerge(prev, next, options)\n\t}, {})\n};\n\nvar deepmerge_1 = deepmerge;\n\nreturn deepmerge_1;\n\n})));\n","import SKILLS from '@constants/skills';\nimport style from './index.css';\n\nfunction getInitials (string) {\n const numWords = (string.match(/\\s/g) || []).length + 1;\n switch (numWords) {\n case 1:\n return string.slice(0, 3);\n case 2:\n return (string.match(/^\\w{1,2}|\\s\\w{1,2}/g) || []).join('').replace(/\\s/g, '');\n default:\n return (string.match(/^\\w|\\s\\w/g) || []).join('').replace(/\\s/g, '');\n }\n}\n\nexport default function Skill ({\n name = '?',\n text = 'Long description',\n ranks = 0,\n invested = 0,\n tier = 0,\n level = 1,\n effect = (rank, level) => `Rank ${rank} effect`,\n type = null,\n enabled = true,\n image = null,\n onChange = (oldValue, newValue) => null,\n}) {\n const isAugment = [\n SKILLS.AUGMENT_CHEVRON,\n SKILLS.AUGMENT_DIAMOND,\n SKILLS.AUGMENT_ACTION_SKILL,\n ].includes(type);\n let shapeStyle = null;\n if (type === SKILLS.ACTION_SKILL) { shapeStyle = style.actionSkill; }\n if (type === SKILLS.AUGMENT_CHEVRON) { shapeStyle = style.chevron; }\n if (type === SKILLS.AUGMENT_DIAMOND) { shapeStyle = style.diamond; }\n if (type === SKILLS.AUGMENT_ACTION_SKILL) { shapeStyle = style.actionSkill; }\n function clickListener (event) {\n var newValue;\n if (event.type === 'click') {\n newValue = Math.min(invested + 1, ranks);\n } else { // (event.type === 'contextmenu')\n newValue = Math.max(invested - 1, 0);\n }\n if (enabled && invested !== newValue) {\n onChange(invested, newValue);\n }\n event.preventDefault();\n return false;\n }\n return (\n 0) ? style.usable : '',\n ].join(' ')}\n onClick={clickListener}\n onContextMenu={clickListener}\n >\n
{getInitials(name)}
\n { enabled && ranks > 0 &&
{invested}/{ranks}
}\n
\n

{name}

\n {text}\n { invested > 0 &&\n
\n Current Effect:
\n {effect(invested, level)}\n
\n }\n { type !== null &&\n
\n {effect(1, level)}\n
\n }\n { type == null && invested < ranks &&\n
\n Next Rank:
\n {effect(invested + 1, level)}\n
\n }\n
\n \n );\n}\n","import VaultHunter from '@components/VaultHunter';\n\nimport skills from './skills.js';\n\nexport default function Siren ({ path }) {\n return (\n \n );\n}\n","export function setHash (skillsState) {\n const hashparts = [];\n for (let tree of Object.values(skillsState)) {\n for (let tier of Object.values(tree)) {\n for (let skill of Object.values(tier)) {\n if (skill.type == null) {\n hashparts.push(skill.invested || 0);\n }\n };\n };\n };\n const url = window.location.href.split('#')[0] + '#' + hashparts.join('');\n window.location.replace(url);\n};\n\nexport function getHash (skillsState) {\n const hash = window.location.href.split('#')[1] || '';\n const hashparts = hash.match(/./g) || [];\n const skills = JSON.parse(JSON.stringify(skillsState));\n for (let tree of Object.keys(skills)) {\n for (let tier of Object.keys(skills[tree])) {\n for (let skill of Object.keys(skills[tree][tier])) {\n if (skills[tree][tier][skill].type == null) {\n skills[tree][tier][skill] = { invested: parseInt(hashparts.shift() || 0) };\n } else {\n skills[tree][tier][skill] = {};\n }\n };\n };\n };\n return skills;\n};\n","import VaultHunter from '@components/VaultHunter';\n\nimport skills from './skills.js';\n\nexport default function Beastmaster ({ path }) {\n return (\n \n );\n}\n","import SKILLS from '@constants/skills';\n\nfunction percent (rank, unit) {\n return Math.round(rank * unit * 10) / 10;\n}\nfunction flat (rank, level, unit) {\n return Math.floor(rank * unit);\n}\n\n// Stiff Upper Lip Damage Resistance\nfunction getStiffUpperLipDamageResistance(rank) {\n switch (rank) {\n case 1:\n return 6;\n case 2:\n return 12;\n case 3:\n return 16;\n default:\n return 0;\n }\n}\n\n// Nerves of Steel Handling\nfunction getNervesOfSteelHandling(rank) {\n switch (rank) {\n case 1:\n return 2.4;\n case 2:\n return 4.8;\n case 3:\n return 7;\n default:\n return 0;\n }\n}\n\n// Cold Bore Weapon Swap Speed\nfunction getColdBoreWeaponSwapSpeed(rank) {\n switch (rank) {\n case 1:\n return 13;\n case 2:\n return 23;\n case 3:\n return 31;\n case 4:\n return 38;\n case 5:\n return 43;\n default:\n return 0;\n }\n}\n\n// Cool Hand Passive Reload Speed\nfunction getCoolHandPassiveReloadSpeed(rank) {\n switch (rank) {\n case 1:\n return 2.9;\n case 2:\n return 5.7;\n case 3:\n return 8.3;\n case 4:\n return 10.7;\n case 5:\n return 13;\n default:\n return 0;\n }\n}\n\n// Cool Hand After Kill Reload Speed\nfunction getCoolHandAfterKillReloadSpeed(rank) {\n switch (rank) {\n case 1:\n return 4;\n case 2:\n return 7;\n case 3:\n return 11;\n case 4:\n return 14;\n case 5:\n return 17;\n default:\n return 0;\n }\n}\n\n/* eslint-disable quotes */\nconst skills = {\n \"Under Cover\": {\n \"0\": {\n \"Barrier\": {\n text: \"Drop a deployable Barrier that blocks incoming projectiles. Zane and his allies can shoot through the Barrier, dealing increased Gun Damage. Pressing [Action Skill key] while Barrier is active picks up and holds the Barrier, but the size and bonuses are decreased.\",\n effect: (rank, level) => `Duration: 14 seconds\\nCooldown: 24 seconds\\nGun Damage Amp: +25%`,\n type: SKILLS.ACTION_SKILL,\n ranks: 0,\n },\n },\n \"1\": {\n \"Adrenaline\": {\n text: \"Zane gains increased Action Skill Cooldown Rate. This bonus is based on the amount of shield he has. The more percent full, the greater the bonus.\",\n ranks: 5,\n effect: (rank, level) => `Action Skill Cooldown Rate: Up to +${percent(rank, 7)}%`,\n },\n \"Hearty Stock\": {\n text: \"Zane gains increased Maximum Shield Capacity.\",\n ranks: 3,\n effect: (rank, level) => `Maximum Shield: +${percent(rank, 10)}%`,\n },\n \"Ready for Action\": {\n text: \"Zane gains improved Shield Recharge Rate and Shield Recharge Delay.\",\n ranks: 5,\n effect: (rank, level) => `Shield Recharge Delay: -${percent(rank, 7)}%\\nShield Recharge Rate: +${percent(rank, 6)}%`,\n },\n },\n \"2\": {\n \"Charged Relay\": {\n text: \"Whenever Zane or an ally touches the Barrier, they gain increased Movement Speed and Reload Speed for a few seconds.\",\n ranks: 0,\n effect: (rank, level) => `Reload Speed: +20%\\nMovement Speed: +11%\\nDuration: 8 seconds`,\n type: SKILLS.AUGMENT_CHEVRON,\n },\n \"Brainfreeze\": {\n text: \"Whenever Zane scores a Critical Hit on an enemy, there is a chance they will be Slowed. This effect stacks until the target is Frozen.\",\n ranks: 5,\n effect: (rank, level) => `Slow Chance: ${percent(rank, 4)}%`,\n },\n \"Stiff Upper Lip\": {\n text: \"Whenever Zane is damaged, he gains Damage Resistance against that damage type.\",\n ranks: 3,\n effect: (rank, level) => `Damage Resistance: +${getStiffUpperLipDamageResistance(rank)}%`,\n },\n \"Rise to the Occasion\": {\n text: \"Zane gains Health Regeneration. The lower his shield is, the higher the bonus.\",\n ranks: 5,\n effect: (rank, level) => `Health Regeneration: Up to +${percent(rank, 1)}% of Max Health/sec`,\n },\n },\n \"3\": {\n \"Nanites or Some Shite\": {\n text: \"Zane and his allies gain Health Regeneration, increased Reload Speed, and greatly improved Shield Recharge Delay while near his Barrier. The lower their health, the more health is regenerated.\",\n ranks: 0,\n effect: (rank, level) => `Team Health Regen: Up to +4% of Max Health/sec\\nTeam Shield Recharge Delay: -33%\\nTeam Reload Speed: +11%`,\n type: SKILLS.AUGMENT_CHEVRON,\n },\n \"Confident Competence\": {\n text: \"While Zane's shields are active, he gains increased Gun Damage and Accuracy. These bonuses are based on the amount of shields he has. The more percent full, the greater the bonuses.\",\n ranks: 1,\n effect: (rank, level) => `Gun Damage: Up to +35%\\nAccuracy: Up to +33%`,\n },\n \"All-Rounder\": {\n text: \"Zane's Barrier becomes a dome, covering all sides.\",\n ranks: 0,\n effect: (rank, level) => `Barrier Cooldown: +20%`,\n type: SKILLS.AUGMENT_CHEVRON,\n },\n },\n \"4\": {\n \"Redistribution\": {\n text: \"Zane and allies near the Barrier gain increased Gun Damage for a few seconds after the Barrier takes damage.\",\n ranks: 0,\n effect: (rank, level) => `Team Gun Damage: +10%\\nDuration: 3 seconds`,\n type: SKILLS.AUGMENT_CHEVRON,\n },\n \"Really Expensive Jacket\": {\n text: \"Elemental Status Effects applied to Zane have reduced duration.\",\n ranks: 1,\n effect: (rank, level) => `Status Effect Duration: -50%`,\n },\n \"Best Served Cold\": {\n text: \"Kill Skill. Whenever Zane kills an enemy, they create a Cryo Nova, dealing damage to all nearby enemies. This skill has a short cooldown.\",\n ranks: 5,\n effect: (rank, level) => `Cryo Damage: ${flat(rank, level, 2)} (increases with character level)\\nCooldown: 3 seconds`,\n },\n \"Futility Belt\": {\n text: \"Zane gains resistance to non-elemental damage.\\nKill Skill. After killing an enemy, all elemental damage Zane takes is converted to non-elemental damage.\",\n ranks: 1,\n effect: (rank, level) => `Non-Elemental Damage Resistance: +15%\\nDuration: 8 seconds`,\n },\n \"Deterrence Field\": {\n text: \"Enemies that touch the Barrier take Shock Damage and are staggered.\",\n ranks: 0,\n effect: (rank, level) => `Shock Damage: ${flat(1, level, 27)} (increases with character level)`,\n type: SKILLS.AUGMENT_CHEVRON,\n },\n },\n \"5\": {\n \"Refreshment\": {\n text: \"Whenever Zane damages a frozen enemy with his weapon, he gains some of that damage back as health.\",\n ranks: 3,\n effect: (rank, level) => `Life Steal: +${percent(rank, 8)}% of damage dealt`,\n },\n \"Calm, Cool, Collected\": {\n text: \"Whenever Zane Freezes an enemy, his shield instantly begins recharging.\\nIf Zane's shields are already full, he regenerates health for a few seconds.\\nIf Zane's health is already full, his Action Skill Cooldowns and Durations are immediately reset.\",\n ranks: 1,\n effect: (rank, level) => `Health Regeneration: +3% of Max Health per second\\nHealth Regeneration Duration: 3 seconds`,\n },\n \"Nerves of Steel\": {\n text: \"Zane gains increasing Accuracy and Handling. The longer his shield is full, the greater the bonuses.\",\n ranks: 3,\n effect: (rank, level) => `Accuracy: +${percent(rank, 2)}% per second\\nHandling: +${getNervesOfSteelHandling(rank)}% per second\\nMaximum Stacks: 15`,\n },\n },\n \"6\": {\n \"Distributed Denial\": {\n text: \"Zane's Barrier gains the effects of his currently equipped Shield Mod. Additionally, shield effects are applied to all allies near the Barrier. Bonuses to Zane are reduced.\",\n ranks: 1,\n },\n },\n },\n \"Hitman\": {\n \"0\": {\n \"SNTNL\": {\n text: \"Send into battle an automated SNTNL drone that continually flies through the environment and attacks enemies with its Machine Guns. Pressing [Action Skill key] while SNTNL is active causes it to attack the enemy under Zane's crosshairs, if any. Machine Gun Element: Non-Elemental.\",\n effect: (rank, level) => `Machine Gun Damage: ${flat(rank, level, 6)} (increases with character level)\\nDuration: 24 seconds\\nCooldown: 60 seconds`,\n type: SKILLS.ACTION_SKILL,\n ranks: 0,\n }\n },\n \"1\": {\n \"Violent Speed\": {\n text: \"Kill Skill. After killing an enemy, Zane gains increased Movement Speed for a few seconds. This effect stacks twice.\",\n ranks: 5,\n effect: (rank, level) => `Movement Speed: +${percent(rank, 4)}%\\nDuration: 8 seconds\\nMaximum Stacks: 2`,\n },\n \"Cold Bore\": {\n text: \"Zane gains increased Weapon Swap Speed. The next shot fired after swapping weapons deals Bonus Cryo Damage.\",\n ranks: 5,\n effect: (rank, level) => `Weapon Swap Speed: +${getColdBoreWeaponSwapSpeed(rank)}%\\nBonus Cryo Damage: +${percent(rank, 6)}% of damage dealt`,\n },\n \"Violent Momentum\": {\n text: \"Zane's Gun Damage is increased while moving. The quicker he moves, the greater the bonus.\",\n ranks: 5,\n effect: (rank, level) => `Gun Damage: +${percent(rank, 4)}% at default walk speed`,\n },\n },\n \"2\": {\n \"Winter's Drone\": {\n text: \"Converts SNTNL's primary weapons to Cryo Damage.\",\n ranks: 0,\n type: SKILLS.AUGMENT_CHEVRON,\n effect: (rank, level) => `SNTNL Weapons Element: Cryo`,\n },\n \"Cool Hand\": {\n text: \"Zane gains increased Reload Speed.\\nKill Skill. After killing an enemy, Zane's Reload Speed is increased for a few seconds. This effect stacks twice.\",\n ranks: 5,\n effect: (rank, level) => `Reload Speed: +${getCoolHandPassiveReloadSpeed(rank)}%\\nAdditional Reload Speed: +${getCoolHandAfterKillReloadSpeed(rank)}%\\nDuration: 8 seconds\\nMaximum Stacks: 2`,\n },\n \"Drone Delivery\": {\n text: \"SNTRY will occasionally drop a free grenade based on your current grenade mod while attacking enemies.\",\n ranks: 1,\n effect: (rank, level) => `Cooldown: 15 seconds`,\n },\n \"Salvation\": {\n text: \"Kill Skill. After killing an enemy, Zane's weapons gain Life Steal for a few seconds.\",\n ranks: 5,\n effect: (rank, level) => `Life Steal: +${percent(rank, 2)}% of damage dealt\\nDuration: 8 seconds`,\n },\n },\n \"3\": {\n \"Bad Dose\": {\n text: \"SNTNL occasionally shoots out a beam of Radiation that weakens enemies and buffs Zane. For every weakened enemy, Zane's Movement Speed and Fire Rate are increased. Weakened enemies have decreased Movement Speed and Attack Speed.\",\n ranks: 0,\n effect: (rank, level) => `Fire Rate: +2% per affected enemy\\nMovement Speed: +6% per affected enemy\\nBeam Damage: ${flat(rank, level, 4)} (increases with character level)\\nDuration: 12 seconds\\nCooldown: 8 seconds`,\n type: SKILLS.AUGMENT_CHEVRON,\n },\n \"Death Follows Close\": {\n text: \"All of Zane's Kill Skills gain increased effect and duration.\",\n ranks: 1,\n effect: (rank, level) => `Kill Skill Bonus: +25%\\nKill Skill Duration: +7 seconds`,\n },\n \"Static Field\": {\n text: \"SNTNL emits a static field that sends a Shock Beam to nearby enemies, draining their shields and replenishing Zane's.\",\n ranks: 0,\n effect: (rank, level) => `Shield Damage: 2/sec (increases with character level)\\nCooldown: 2 seconds`,\n type: SKILLS.AUGMENT_CHEVRON,\n },\n },\n \"4\": {\n \"Boomsday\": {\n text: \"SNTNL adds a rocket pod to its primary weapons, allowing it to shoot rockets as well as machine guns. Element: Non-Elemental.\",\n ranks: 0,\n effect: (rank, level) => `Rocket Damage: ${flat(rank, level, 32)} (increases with character level)`,\n type: SKILLS.AUGMENT_CHEVRON,\n },\n \"Violent Violence\": {\n text: \"Kill Skill. After killing an enemy, Zane gains increased Fire Rate for a few seconds. This effect stacks twice.\",\n ranks: 5,\n effect: (rank, level) => `Fire Rate: +${percent(rank, 3)}%\\nCooldown: 8 seconds\\nMaximum Stacks: 2`,\n },\n \"Playing Dirty\": {\n text: \"Kill Skill. After killing an enemy, Zane's next five shots all have a chance to fire an additional projectile.\",\n ranks: 5,\n effect: (rank, level) => `Extra Shot Chance: ${percent(rank, 10)}%`,\n },\n \"Almighty Ordnance\": {\n text: \"Hold down [Action Skill key] while SNTNL is deployed to paint a target area. SNTNL fires a missile barrage at that area, and if an enemy is killed, SNTNL's duration is reset. This can only be used once per Action Skill use.\",\n ranks: 0,\n effect: (rank, level) => `Missile Damage: ${flat(rank, level, 56)} (increases with character level)\\nMissiles per Barrage: 4`,\n type: SKILLS.AUGMENT_CHEVRON,\n },\n },\n \"5\": {\n \"Good Misfortune\": {\n text: \"Kill Skill. Killing an enemy increases Zane's Action Skill Duration. This skill has diminishing returns.\",\n ranks: 3,\n effect: (rank, level) => `Action Skill Duration Returned: +${percent(rank, 4)}% of Max Duration`,\n },\n },\n \"6\": {\n \"Seein' Red\": {\n text: \"Activating an Action Skill automatically activates all of Zane's Kill Skills.\",\n ranks: 1,\n }\n }\n },\n \"Doubled Agent\": {\n \"0\": {\n \"Digi-Clone\": {\n text: \"Spawn a Digi-Clone of Zane. The Digi-Clone stays in place, but distracts and fires at enemies. Pressing [Action Skill key] while the Digi-Clone is active causes Zane and the Digi-Clone to swap places.\",\n effect: (rank, level) => `Duration: 15 seconds\\nCooldown: 28 seconds`,\n type: SKILLS.ACTION_SKILL,\n ranks: 0,\n },\n },\n \"1\": {\n \"Synchronicity\": {\n text: \"Zane gains increased Gun Damage for each active Action Skill.\",\n ranks: 5,\n effect: (rank, level) => `Gun Damage: +${percent(rank, 4)}% per active Action Skill`,\n },\n \"Praemunitus\": {\n text: \"Zane and his Dig-Clone gain increased Magazine Size.\",\n ranks: 3,\n effect: (rank, level) => `Magazine Size: +${percent(rank, 8.333)}%\\nDigi-Clone Magazine Size: +${percent(rank, 8.333)}%`,\n },\n \"Borrowed Time\": {\n text: \"Zane gains increased Action Skill Duration for each active Action Skill.\",\n ranks: 5,\n effect: (rank, level) => `Action Skill Duration: +${percent(rank, 6)}% per active Action Skill`,\n },\n },\n \"2\": {\n \"Binary System\": {\n text: \"Whenever Zane swaps places with his Digi-Clone, a Cryo Nova is triggered around Zane and his Digi-Clone.\",\n ranks: 0,\n effect: (rank, level) => `Cryo Damage: ${flat(rank, level, 46)} (increases with character level)`,\n type: SKILLS.AUGMENT_CHEVRON,\n },\n \"Donnybrook\": {\n text: \"Kill Skill. Whenever Zane kills an enemy, he and his Digi-Clone receive increased Gun Damage and gain Health Regeneration for a few seconds. This effect stacks twice.\",\n ranks: 5,\n effect: (rank, level) => `Gun Damage: +${percent(rank, 3)}%\\nHealth Regeneration: +${percent(rank, 0.5)}% of Missing Health/sec\\nDigi-Clone Gun Damage: +${percent(rank, 3)}%\\nDigi-Clone Health Regen: +${percent(rank, 0.5)}% Missing Health/sec\\nDuration: 8 seconds\\nMaximum Stacks: 2`,\n },\n \"Fractal Frags\": {\n text: \"The Digi-Clone throws a copy of Zane's current grenade mod when it is first activated. If the Digi-Clone is killed, it drops a free grenade. Killing an enemy while the Digi-Clone is active gives the Digi-Clone a chance to throw a grenade.\",\n ranks: 1,\n effect: (rank, level) => `Grenade Chance: 30%`,\n },\n \"Duct Tape Mod\": {\n text: \"The first shot fired from Zane's gun has a chance to also fire a grenade. This skill has a short cooldown.\",\n ranks: 5,\n effect: (rank, level) => `Grenade Chance: ${percent(rank, 4)}%\\nCooldown: 8 seconds`,\n },\n },\n \"3\": {\n \"Schadenfreude\": {\n text: \"Whenever the Digi-Clone takes damage, Zane's shield is restored by a portion of that damage.\",\n ranks: 0,\n effect: (rank, level) => `Shields Restored: 100% of damage taken by Digi-Clone`,\n type: SKILLS.AUGMENT_CHEVRON,\n },\n \"Quick Breather\": {\n text: \"Whenever Zane swaps places with his Digi-Clone, his shield immediately begins recharging. The Digi-Clone also immediately restores health.\",\n ranks: 1,\n effect: (rank, level) => `Digi-Clone Health Restored: 50% of Max Health`,\n },\n \"Which One's Real?\": {\n text: \"Enemies are more likely to target the Digi-Clone for a few seconds after it's summoned and after swapping places.\",\n ranks: 0,\n effect: (rank, level) => `Duration: 4 seconds`,\n type: SKILLS.AUGMENT_CHEVRON,\n },\n },\n \"4\": {\n \"Dopplebanger\": {\n text: \"Hold down [Action Skill key] to end the action skill early. When Zane's Action Skill is ended, the Digi-Clone explodes, dealing Splash Damage to all nearby enemies. The more Action Skill time remaining, the greater the damage.\",\n ranks: 0,\n effect: (rank, level) => `Damage: Up to ${flat(rank, level, 280)} (increases with character level)`,\n type: SKILLS.AUGMENT_CHEVRON,\n },\n \"Pocket Full of Grenades\": {\n text: \"Kill Skill. After killing an enemy, Zane gains Grenade Regeneration for a few seconds.\",\n ranks: 3,\n effect: (rank, level) => `Grenade Regeneration: +${percent(rank, 5)}% per second\\nDuration: 8 seconds`,\n },\n \"Old-U\": {\n text: \"Press [Action Skill key] during Fight For Your Life if Digi-Clone is active to destroy the Digi-Clone and immediately gain a Second Wind with full health.\",\n ranks: 1,\n effect: (rank, level) => `Health Restored: 100% of Maximum Health`,\n },\n \"Supersonic Man\": {\n text: \"Zane gains increased Movement Speed for each active Action Skill.\",\n ranks: 3,\n effect: (rank, level) => `Movement Speed: +${percent(rank, 4)}% per active Action Skill`,\n },\n \"Digital Distribution\": {\n text: \"If Zane takes health damage while the Digi-Clone is active, a portion of that damage is inflicted on his Digi-Clone instead.\",\n ranks: 0,\n effect: (rank, level) => `Damage Shared: 75%`,\n type: SKILLS.AUGMENT_CHEVRON,\n },\n },\n \"5\": {\n \"Like a Ghost\": {\n text: \"Zane and his Digi-Clone gain a chance to ignore bullets. This chance is increased for a few seconds after activating an Action Skill. This effect stacks.\",\n ranks: 3,\n effect: (rank, level) => `Ignore Bullet Chance: +${percent(rank, 2)}%\\nAdditional Ignore Bullet Chance: +${percent(rank, 3)}%\\nDuration: 8 seconds`,\n },\n \"Boom. Enhance.\": {\n text: \"Whenever Zane summons his Digi-Clone, it consumes up to 3 grenades. For every grenade consumed, the Digi-Clone gains increased Gun Damage, Maximum Health, Fire Rate, Reload Speed, and Digi-Clone Duration.\",\n ranks: 1,\n effect: (rank, level) => `Digi-Clone Gun Damage: +20% per grenade\\nDigi-Clone Maximum Health: +81% per grenade\\nDigi-Clone Fire Rate: +5% per grenade\\nDigi-Clone Reload Speed: +31% per grenade\\nDigi-Clone Duration: +25% per grenade`,\n },\n \"Trick of the Light\": {\n text: \"Zane deals Bonus Cryo Damage to enemies that aren't targeting him.\",\n ranks: 3,\n effect: (rank, level) => `Bonus Cryo Damage: +${percent(rank, 12)}% of damage dealt`,\n },\n },\n \"6\": {\n \"Double Barrel\": {\n text: \"The Digi-Clone is equipped with a copy of Zane's Current Weapon when activated. Swapping places with the Digi-Clone causes Zane and his Digi-Clone to gain increased Gun Damage.\",\n ranks: 1,\n effect: (rank, level) => `Item Duping: +100%\\nGun Damage: +25%\\nDigi-Clone Gun Damage: +25%`,\n },\n },\n },\n};\n\nexport default skills;\n"],"sourceRoot":""} \ No newline at end of file +{"version":3,"sources":["webpack:///webpack/bootstrap","webpack:///../node_modules/offline-plugin/runtime.js","webpack:///./components/Skill/index.css","webpack:///./components/Nav/index.js","webpack:///./pages/Siren/skills.js","webpack:///./components/Footer/index.js","webpack:///./components/App/index.js","webpack:///./components/VaultHunter/index.js","webpack:///./constants/skills.js","webpack:///./components/VaultHunter/index.css","webpack:///./pages/Home/index.js","webpack:///./index.js","webpack:///../node_modules/preact-router/dist/preact-router.es.js","webpack:///./pages/Beastmaster/skills.js","webpack:///./pages/Gunner/index.js","webpack:///./pages/Operative/index.js","webpack:///./components/VaultHunter/selectors.js","webpack:///./pages/Gunner/skills.js","webpack:///../node_modules/preact/dist/preact.min.js","webpack:///./components/VaultHunter/investmentValidator.js","webpack:///./components/VaultHunter/reducer.js","webpack:///./components/Footer/index.css","webpack:///./pages/Home/index.css","webpack:///../node_modules/deepmerge/dist/umd.js","webpack:///./components/Skill/index.js","webpack:///./pages/Siren/index.js","webpack:///./components/VaultHunter/hashHandler.js","webpack:///./pages/Beastmaster/index.js","webpack:///./pages/Operative/skills.js"],"names":["__webpack_require__","moduleId","installedModules","exports","module","i","l","modules","call","m","c","d","name","getter","o","Object","defineProperty","enumerable","get","r","Symbol","toStringTag","value","t","mode","__esModule","ns","create","key","bind","n","object","property","prototype","hasOwnProperty","p","s","hasSW","navigator","window","location","protocol","hostname","indexOf","install","options","registration","serviceWorker","register","handleUpdating","onUpdateStateChange","sw","state","sendEvent","onstatechange","ignoreInstalling","ignoreWaiting","onInstallStateChange","stateChangeHandler","installing","waiting","active","event","source","then","reg","onupdatefound","catch","err","Promise","reject","applyUpdate","callback","errback","getRegistration","postMessage","action","update","skill","enabled","usable","augment","actionSkill","chevron","diamond","image","ranks","skillTitle","description","effect","h","Nav","_ref","path","map","page","preact_router__WEBPACK_IMPORTED_MODULE_0__","href","__webpack_exports__","percent","rank","unit","Math","round","flat","level","floor","_constants_skills__WEBPACK_IMPORTED_MODULE_0__","skills","Brawl","0","Phaseslam","text","type","SKILLS","ACTION_SKILL","1","Root to Rise","Personal Space","Clarity","2","Arms Deal","getArmsDealSplashDamageResistance","Samsara","Helping Hand(s)","getHelpingHandsDamageResistance","Blight Tiger","AUGMENT_DIAMOND","3","Fracture","AUGMENT_ACTION_SKILL","Mindfulness","getMindfulnessShieldRegenerationDelay","Find Your Center","Vigor","Revelation","AUGMENT_CHEVRON","4","Downfall","One With Nature","getOneWithNatureElementalDamageResistance","5","Do Unto Others","Jab Cross","Guardian Angel","Glamour","6","Blitz","Mystical Assault","Phasecast","Do Harm","Fast Hand(s)","getFastHandsReloadSpeed","getFastHandsWeaponSwapSpeed","getFastHandsModeSwitchSpeed","Violent Tapestry","Alacrity","getAlacrityReloadSpeedAfterActionSkill","Transcend","getTranscendAccuracy","Restless","Soul Sap","Deliverance","Ascendant","Stillness of Mind","Reverberation","From Rest","getFromRestChargeTime","Laid Bare","Wrath","getWrathGunDamage","getWrathGunDamageAfterActionSkill","Remnant","Awakening","Tandava","Avatar","Fist of the Elements","Phasegrasp","Anima","Steady Hands","getSteadyHandsHandling","getSteadyHandsAccuracy","Infusion","Tempest","Illuminated Fist","Wildfire","Soulfire","The Eternal Fist","Dread","Allure","Indiscriminate","Deep Well","Catharsis","Ties That Bind","Fist Over Matter","Sustainment","Conflux","Forceful Expression","_index_css__WEBPACK_IMPORTED_MODULE_0__","_index_css__WEBPACK_IMPORTED_MODULE_0___default","alt","src","class","style","footer","_pages_Home__WEBPACK_IMPORTED_MODULE_1__","_pages_Operative__WEBPACK_IMPORTED_MODULE_2__","_pages_Siren__WEBPACK_IMPORTED_MODULE_3__","_pages_Beastmaster__WEBPACK_IMPORTED_MODULE_4__","_pages_Gunner__WEBPACK_IMPORTED_MODULE_5__","App","contextKiller","preventDefault","_components_Footer__WEBPACK_IMPORTED_MODULE_3__","VaultHunter","props","_this","_Component","this","invested","componentDidMount","setState","reducer","getHash","render","_this2","_ref$name","_ref$discipline","discipline","initialSkills","skillChangeListenerFactory","skillName","treeIndex","treeName","tierIndex","oldValue","newValue","trees","keys","tree","green","blue","red","tier","skillIndex","_components_Skill__WEBPACK_IMPORTED_MODULE_1__","_extends","getLevel","onChange","header","title","subtitle","sidepanel","reset","onClick","setHash","_components_Nav__WEBPACK_IMPORTED_MODULE_2__","onContextMenu","_ref2","Component","_components_Footer__WEBPACK_IMPORTED_MODULE_1__","_index_css__WEBPACK_IMPORTED_MODULE_2__","_index_css__WEBPACK_IMPORTED_MODULE_2___default","splash","wrapper","disclaimer","job","link","preact__WEBPACK_IMPORTED_MODULE_0__","_components_App__WEBPACK_IMPORTED_MODULE_1__","elem","document","querySelector","firstElementChild","require","assign","obj","pathRankSort","a","b","index","prepareVNodeForRanking","vnode","attributes","default","segmentize","rankSegment","join","rankChild","url","replace","split","segment","charAt","length","getCurrentUrl","customHistory","getCurrentLocation","EMPTY","pathname","search","route","ROUTERS","canRoute","history","setUrl","routeTo","didRoute","i$1","subscribers","routeFromLink","node","getAttribute","target","match","handleLinkClick","e","button","currentTarget","prevent","stopImmediatePropagation","stopPropagation","delegateLinkHandler","ctrlKey","metaKey","altKey","shiftKey","String","nodeName","toUpperCase","__preactattr_","for","hasAttribute","parentNode","Router","Link","EMPTY$1","eventListenersInitialized","Component$$1","addEventListener","__proto__","constructor","shouldComponentUpdate","static","getMatchingChildren","children","_didRoute","updating","forceUpdate","componentWillMount","push","this$1","unlisten","listen","componentWillUnmount","splice","componentWillUpdate","componentDidUpdate","invoke","filter","sort","matches","opts","ret","decodeURIComponent","slice","max","param","flags","plus","star","val","exec","newProps","ref","Boolean","ref$1","current","previous","previousUrl","router","Route","component","Stalker","Jabber Sidekick","Fade Away","Self-Repairing System","Sic'Em","Furious Attack","getFuriousAttackHandling","Guerrillas In The Mist","Eager To Impress","All My BFF's","Overclocked","Not My Circus","Lick The Wounds","Turn Tail And Run","getTurnTailAndRunDamageResistance","Beefcake Jabber","Until You Are Dead","The Fast And The Furryous","Hidden Machine","Gunslinger Jabber","Unblinking Eye","Rage And Recover","The Power Inside","Master","Guard Skag","Gamma Burst","Ferocity","Persistence Hunter","Go For The Eyes!","Atomic Aroma","Who Rescued Who?","He Bites!","Frenzy","Empathic Rage","Psycho Head On A Stick","Hive Mind","Great Horned Skag","Endurance","Barbaric Yawp","Mutated Defenses","Eridian Skag","Burst Aid","Pack Tactics","Shared Spirit","Dominance","Hunter","Spiderant Centurion","Rakk Attack!","Interplanetary Stalker","getInterplanetaryStalkerBeastMovementSpeed","Leave No Trace","Second Intention","ceil","getSecondIntentionCriticalKillReloadSpeed","Rakk Open A Cold One","Hunter's Eye","getHuntersEyeDamageResistance","Head Count","Ambush Predator","getAmbushPredatorHandling","Falconer's Feast","Two F4ng","Spiderant Scorcher","Flock'N'Load","Big Game","The Most Dangerous Game","getMostDangerousGameHandling","Spiderant Countess","Rakkcelerate","Galactic Shadow","Grim Harvest","Megavore","Gunner","_components_VaultHunter__WEBPACK_IMPORTED_MODULE_0__","_skills_js__WEBPACK_IMPORTED_MODULE_1__","Operative","reduce","total","Bottomless Mags","Minigun","Cloud of Lead","percentTwoDecimals","Dakka Bear","Matched Set","getMatchedSetHeatPerShot","Let Off Some Steam","Stoke the Embers","Redistribution","Scrappy","getScrappyHandling","getScrappyWeaponSwapSpeed","getScrappyModeSwitchSpeed","Salamander","General Winter","Rushin' Offensive","Scorching RPM's","Fuel Economy","Exploding. Bullets.","The Iron Bank","Specialist Bear","Chemical Warfare","Some for the Road","Click, Click...","Molten Roar","Forge","Demolition Woman","V-35 Grenade Launcher","Fire in the Skag Den","Deadlines","Grizzled","Shaped Charge","Means of Destruction","Torgue Cross-Promotion","Stainless Steel Bear","Vanquisher Rocket Pod","Musical Chairs","Pull the Holy Pin","Auto Bear","Active Tracking","Lock and Speedload","Vampyr","Why Can't I Carry All These Grenades","Target Softening","To the Last","Explosive Punctuation","Hammerdown Protocol","Short Fuse","Shield of Retribution","Railgun","Selfless Vengeance","Security Bear","Armored Infantry","getArmoredInfantryDamageResistance","Hell on Rails","Drowning in Brass","Thin Red Line","Vladof Ingenuity","getVladofIngenuityShockDamageResistance","Bear Fist","Capacitive Armature","Full Can of Whoop-Ass","Experimental Munitions","Wild Swing","Corrosive Sabot Round","Behind the Iron Curtain","getBehindTheIronCurtainShieldRechargeDelay","Desperate Measures","Close the Distance","Phalanx Doctrine","Force Feedback","Shockhammer","Tenacious Defense","W","arguments","P","pop","T","M","__d","V","debounceRendering","D","x","splitText","_componentConstructor","__n","toLowerCase","u","defaultProps","removeChild","cssText","E","test","innerHTML","__html","substring","_","removeEventListener","__l","removeAttribute","removeAttributeNS","setAttributeNS","setAttribute","className","f","A","shift","afterMount","H","R","ownerSVGElement","B","appendChild","_component","nodeValue","createTextNode","replaceChild","v","N","createElementNS","createElement","firstChild","nextSibling","dangerouslySetInnerHTML","y","childNodes","g","w","C","k","__k","trim","insertBefore","lastChild","previousSibling","F","U","__b","__x","__r","getDerivedStateFromProps","base","componentWillReceiveProps","context","__c","__p","syncComponentUpdates","__s","S","getChildContext","getSnapshotBeforeUpdate","L","__u","afterUpdate","__h","beforeUnmount","resolve","setTimeout","cloneElement","createRef","rerender","investmentValidator","totalSpent","treeTotals","_i","_Object$values","values","treeTotal","_i2","_Object$values2","tierTotal","_i3","_Object$values3","_action$treeName","_deepmerge","newSkills","deepmerge","skillChangeTotals","_objectSpread","loadSkillsTotals","heart","moveHeart","isSpecial","stringValue","toString","$$typeof","REACT_ELEMENT_TYPE","isReactElement","cloneUnlessOtherwiseSpecified","clone","isMergeableObject","Array","isArray","defaultArrayMerge","concat","element","mergeObject","destination","forEach","customMerge","getMergeFunction","arrayMerge","sourceIsArray","targetIsArray","sourceAndTargetTypesMatch","isNonNullObject","all","array","Error","prev","next","factory","getInitials","string","Skill","clickListener","min","_ref$text","_ref$ranks","_ref$invested","_ref$level","_ref$effect","_ref$type","_ref$enabled","_ref$image","_ref$onChange","isAugment","includes","shapeStyle","_ref3","_index_css__WEBPACK_IMPORTED_MODULE_1__","_index_css__WEBPACK_IMPORTED_MODULE_1___default","Siren","skillsState","hashparts","JSON","parse","stringify","_i4","_Object$keys","_i5","_Object$keys2","_i6","_Object$keys3","parseInt","Beastmaster","Under Cover","Barrier","Adrenaline","Hearty Stock","Ready for Action","Charged Relay","Brainfreeze","Stiff Upper Lip","getStiffUpperLipDamageResistance","Rise to the Occasion","Nanites or Some Shite","Confident Competence","All-Rounder","Really Expensive Jacket","Best Served Cold","Futility Belt","Deterrence Field","Refreshment","Calm, Cool, Collected","Nerves of Steel","getNervesOfSteelHandling","Distributed Denial","Hitman","SNTNL","Violent Speed","Cold Bore","getColdBoreWeaponSwapSpeed","Violent Momentum","Winter's Drone","Cool Hand","getCoolHandPassiveReloadSpeed","getCoolHandAfterKillReloadSpeed","Drone Delivery","Salvation","Bad Dose","Death Follows Close","Static Field","Boomsday","Violent Violence","Playing Dirty","Almighty Ordnance","Good Misfortune","Seein' Red","Doubled Agent","Digi-Clone","Synchronicity","Praemunitus","Borrowed Time","Binary System","Donnybrook","Fractal Frags","Duct Tape Mod","Schadenfreude","Quick Breather","Which One's Real?","Dopplebanger","Pocket Full of Grenades","Old-U","Supersonic Man","Digital Distribution","Like a Ghost","Boom. Enhance.","Trick of the Light","Double Barrel"],"mappings":"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","file":"bundle.26aa2253.js","sourcesContent":[" \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"/\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 0);\n","var appCacheIframe;\n\nfunction hasSW() {\n \n return 'serviceWorker' in navigator && (\n window.location.protocol === 'https:' ||\n window.location.hostname === 'localhost' ||\n window.location.hostname.indexOf('127.') === 0\n );\n \n}\n\nfunction install(options) {\n options || (options = {});\n\n \n if (hasSW()) {\n var registration = navigator.serviceWorker\n .register(\n \"/sw.js\", {\n \n \n }\n );\n\n \n var handleUpdating = function(registration) {\n var sw = registration.installing || registration.waiting;\n var ignoreInstalling;\n var ignoreWaiting;\n\n // No SW or already handled\n if (!sw || sw.onstatechange) return;\n\n var stateChangeHandler;\n\n // Already has SW\n if (registration.active) {\n onUpdateStateChange();\n stateChangeHandler = onUpdateStateChange;\n } else {\n onInstallStateChange();\n stateChangeHandler = onInstallStateChange;\n }\n\n ignoreInstalling = true;\n if (registration.waiting) {\n ignoreWaiting = true;\n }\n\n sw.onstatechange = stateChangeHandler;\n\n function onUpdateStateChange() {\n switch (sw.state) {\n case 'redundant': {\n sendEvent('onUpdateFailed');\n sw.onstatechange = null;\n } break;\n\n case 'installing': {\n if (!ignoreInstalling) {\n sendEvent('onUpdating');\n }\n } break;\n\n case 'installed': {\n if (!ignoreWaiting) {\n sendEvent('onUpdateReady');\n }\n } break;\n\n case 'activated': {\n sendEvent('onUpdated');\n sw.onstatechange = null;\n } break;\n }\n }\n\n function onInstallStateChange() {\n switch (sw.state) {\n case 'redundant': {\n // Failed to install, ignore\n sw.onstatechange = null;\n } break;\n\n case 'installing': {\n // Installing, ignore\n } break;\n\n case 'installed': {\n // Installed, wait activation\n } break;\n\n case 'activated': {\n sendEvent('onInstalled');\n sw.onstatechange = null;\n } break;\n }\n }\n };\n\n var sendEvent = function(event) {\n if (typeof options[event] === 'function') {\n options[event]({\n source: 'ServiceWorker'\n });\n }\n };\n\n registration.then(function(reg) {\n // WTF no reg?\n if (!reg) return;\n\n // Installed but Shift-Reloaded (page is not controller by SW),\n // update might be ready at this point (more than one tab opened).\n // Anyway, if page is hard-reloaded, then it probably already have latest version\n // but it's not controlled by SW yet. Applying update will claim this page\n // to be controlled by SW. Maybe set flag to not reload it?\n // if (!navigator.serviceWorker.controller) return;\n\n handleUpdating(reg);\n reg.onupdatefound = function() {\n handleUpdating(reg);\n };\n }).catch(function(err) {\n sendEvent('onError');\n return Promise.reject(err);\n });\n \n\n return;\n }\n \n\n \n}\n\nfunction applyUpdate(callback, errback) {\n \n if (hasSW()) {\n navigator.serviceWorker.getRegistration().then(function(registration) {\n if (!registration || !registration.waiting) {\n errback && errback();\n return;\n }\n\n registration.waiting.postMessage({\n action: 'skipWaiting'\n });\n\n callback && callback();\n });\n\n return;\n }\n \n\n \n}\n\nfunction update() {\n \n if (hasSW()) {\n navigator.serviceWorker.getRegistration().then(function(registration) {\n if (!registration) return;\n return registration.update();\n });\n }\n \n\n \n}\n\n\n\nexports.install = install;\nexports.applyUpdate = applyUpdate;\nexports.update = update;\n","// extracted by mini-css-extract-plugin\nmodule.exports = {\"skill\":\"_3JH8h\",\"enabled\":\"_1mLSi\",\"usable\":\"_1xemn\",\"augment\":\"_3VkFk\",\"actionSkill\":\"-z8wv\",\"chevron\":\"_2t_-G\",\"diamond\":\"_2ej0d\",\"image\":\"_8ejWg\",\"ranks\":\"_3DD7O\",\"skillTitle\":\"_394yV\",\"description\":\"_1S9-f\",\"effect\":\"oiyDq\"};","import { Link } from 'preact-router';\n\nexport default function Nav ({ path }) {\n const pages = [\n { name: 'Zane', path: '/operative' },\n { name: 'Amara', path: '/siren' },\n { name: 'FL4K', path: '/beastmaster' },\n { name: 'Moze', path: '/gunner' },\n ];\n return (\n \n );\n}\n","import SKILLS from '@constants/skills';\n\nfunction percent (rank, unit) {\n return Math.round(rank * unit * 10) / 10;\n}\nfunction flat (rank, level, unit) {\n return Math.floor(rank * unit);\n}\n\n// Arms Deal Splash Damage Resistance\nfunction getArmsDealSplashDamageResistance(rank) {\n switch (rank) {\n case 1:\n return 12;\n case 2:\n return 21;\n case 3:\n return 28;\n case 4:\n return 35;\n case 5:\n return 40;\n default:\n return 0;\n }\n}\n\n// Helping Hand(s) Damage Resistance\nfunction getHelpingHandsDamageResistance(rank) {\n switch (rank) {\n case 1:\n return 12;\n case 2:\n return 21;\n case 3:\n return 28;\n case 4:\n return 35;\n case 5:\n return 40;\n default:\n return 0;\n }\n}\n\n// Mindfulness Shield Regeneration Delay\nfunction getMindfulnessShieldRegenerationDelay(rank) {\n switch (rank) {\n case 1:\n return 9;\n case 2:\n return 17;\n case 3:\n return 23;\n default:\n return 0;\n }\n}\n\n// One With Nature Elemental Damage Resistance\nfunction getOneWithNatureElementalDamageResistance(rank) {\n switch (rank) {\n case 1:\n return 12;\n case 2:\n return 21;\n case 3:\n return 28;\n case 4:\n return 35;\n case 5:\n return 40;\n default:\n return 0;\n }\n}\n\n// Fast Hand(s) Reload Speed\nfunction getFastHandsReloadSpeed(rank) {\n switch (rank) {\n case 1:\n return 7;\n case 2:\n return 14;\n case 3:\n return 19;\n default:\n return 0;\n }\n}\n\n// Fast Hand(s) Weapon Swap Speed\nfunction getFastHandsWeaponSwapSpeed(rank) {\n switch (rank) {\n case 1:\n return 16;\n case 2:\n return 28;\n case 3:\n return 36;\n default:\n return 0;\n }\n}\n\n// Fast Hand(s) Mode Switch Speed\nfunction getFastHandsModeSwitchSpeed(rank) {\n switch (rank) {\n case 1:\n return 16;\n case 2:\n return 28;\n case 3:\n return 36;\n default:\n return 0;\n }\n}\n\n// Alacrity Reload Speed After Action Skill\nfunction getAlacrityReloadSpeedAfterActionSkill(rank) {\n switch (rank) {\n case 1:\n return 0.6;\n case 2:\n return 1.2;\n case 3:\n return 1.8;\n case 4:\n return 2.3;\n case 5:\n return 2.9;\n default:\n return 0;\n }\n}\n\n// Transcend Accuracy\nfunction getTranscendAccuracy(rank) {\n switch (rank) {\n case 1:\n return 17;\n case 2:\n return 29;\n case 3:\n return 38;\n default:\n return 0;\n }\n}\n\n// From Rest Charge Time\nfunction getFromRestChargeTime(rank) {\n switch (rank) {\n case 1:\n return 21;\n case 2:\n return 34;\n case 3:\n return 44;\n default:\n return 0;\n }\n}\n\n// Wrath Gun Damage\nfunction getWrathGunDamage(rank) {\n switch (rank) {\n case 1:\n return 6.7;\n case 2:\n return 13.3;\n case 3:\n return 20;\n default:\n return 0;\n }\n}\n\n// Wrath Gun Damage After Action Skill\nfunction getWrathGunDamageAfterActionSkill(rank) {\n switch (rank) {\n case 1:\n return 6.7;\n case 2:\n return 13.3;\n case 3:\n return 20;\n default:\n return 0;\n }\n}\n\n// Steady Hands Handling\nfunction getSteadyHandsHandling(rank) {\n switch (rank) {\n case 1:\n return 14;\n case 2:\n return 24;\n case 3:\n return 32;\n default:\n return 0;\n }\n}\n\n// Steady Hands Accuracy\nfunction getSteadyHandsAccuracy(rank) {\n switch (rank) {\n case 1:\n return 13;\n case 2:\n return 23;\n case 3:\n return 31;\n default:\n return 0;\n }\n}\n\n/* eslint-disable quotes */\nconst skills = {\n \"Brawl\": {\n \"0\": {\n \"Phaseslam\": {\n text: \"Amara leaps into the air and Slams the ground, dealing damage to all nearby enemies and knocking them up. Element: Shock.\",\n effect: (rank, level) => `Damage: ${flat(rank, level, 98)} (increases with character level)\\nCooldown: 35 Seconds`,\n type: SKILLS.ACTION_SKILL,\n ranks: 0,\n },\n },\n \"1\": {\n \"Root to Rise\": {\n ranks: 5,\n text: \"Amara gains increased Maximum Health.\",\n effect: (rank, level) => `Maximum Health: +${percent(rank, 8)}%`,\n },\n \"Personal Space\": {\n ranks: 3,\n text: \"Amara's weapon shots deal Bonus Damage based on the distance to her target. The closer the target, the greater the bonus.\",\n effect: (rank, level) => `Bonus Damage: Up to +${percent(rank, 12)}% of damage dealt`,\n },\n \"Clarity\": {\n ranks: 5,\n text: \"Amara constantly regenerates health. The lower her health, the more powerful the regeneration. After using an Action Skill, this bonus is doubled for a few seconds.\",\n effect: (rank, level) => `Health Regen: Up to +${percent(rank, 1)}% of Missing Health/sec\\nAdditional Regen: Up to +${percent(rank, 1)}% of Missing Health/sec\\nDuration: 5 seconds`,\n },\n },\n \"2\": {\n \"Arms Deal\": {\n ranks: 5,\n text: \"Amara deals increased Splash Damage and takes reduced Splash Damage.\",\n effect: (rank, level) => `Splash Damage: +${percent(rank, 4)}%\\nSplash Damage Resistance: +${getArmsDealSplashDamageResistance(rank)}%`,\n },\n \"Samsara\": {\n ranks: 3,\n text: \"Whenever Amara deals damage to an enemy with her Action Skill, she adds a stack of Samsara. For every stack of Samsara, Amara gains increased Gun Damage and Health Regeneration for a few seconds. Stacks decay after a few seconds.\",\n effect: (rank, level) => `Gun Damage: +${percent(rank, 1.7)}% per stack\\nHealth Regen: +${percent(rank, 1.7)}% of Missing Health/sec per stack\\nMaximum Stacks: 5\\nDuration: 20 seconds`,\n },\n \"Helping Hand(s)\": {\n ranks: 5,\n text: \"For a few seconds after using her Action Skill, Amara's arms remain active and grant her Damage Resistance.\",\n effect: (rank, level) => `Damage Resistance: +${getHelpingHandsDamageResistance(rank)}%\\nDuration: 15 seconds`,\n },\n \"Blight Tiger\": {\n ranks: 0,\n text: \"Converts Amara's Action Skill to Corrosive Damage.\",\n effect: (rank, level) => `Action Skill Element: Corrosive.`,\n type: SKILLS.AUGMENT_DIAMOND,\n },\n },\n \"3\": {\n \"Fracture\": {\n ranks: 0,\n text: \"Amara summons a line of fists that erupt from the ground, dealing damage to enemies in front of Amara. Element: Shock.\",\n effect: (rank, level) => `Damage: ${flat(rank, level, 88)} (increases with character level)\\nCooldown: 28 seconds`,\n type: SKILLS.AUGMENT_ACTION_SKILL,\n },\n \"Mindfulness\": {\n ranks: 3,\n text: \"Whenever Amara takes damage, she gains a stack of Mindfulness. For every stack of Mindfulness, Amara gains improved Shield Regeneration Delay and Movement Speed. Stacks decay after a few seconds.\",\n effect: (rank, level) => `Shield Regeneration Delay: -${getMindfulnessShieldRegenerationDelay(rank)}% per stack\\nMovement Speed: +${percent(rank, 1.4)}% per stack\\nMaximum Stacks: 25\\nDuration: 5 seconds`,\n },\n \"Find Your Center\": {\n ranks: 1,\n text: \"Amara gains increased Melee Damage. Additionally, for a few seconds after using her Action Skill, Amara gains increased Melee Range.\",\n effect: (rank, level) => `Melee Damage: +100%\\nMelee Range: +75%\\nDuration: 20 seconds`,\n },\n \"Vigor\": {\n ranks: 3,\n text: \"Kill Skill. Killing an enemy with Amara's Action Skill grants all allies increased Movement Speed for a few seconds.\",\n effect: (rank, level) => `Team Movement Speed: +${percent(rank, 3.333)}%\\nDuration: 8 seconds`,\n },\n \"Revelation\": {\n ranks: 0,\n text: \"Amara's Action Skill now creates a Nova when it damages enemies, dealing damage to all nearby enemies.\",\n effect: (rank, level) => `Nova Damage: ${flat(rank, level, 41)} (increases with character level)\\nAction Skill Damage: -15%`,\n type: SKILLS.AUGMENT_CHEVRON,\n },\n },\n \"4\": {\n \"Downfall\": {\n ranks: 0,\n text: \"Amara leaps into the air and shoots an Elemental Beam below her, followed by a Slam. Element: Shock.\",\n effect: (rank, level) => `Beam Damage: ${flat(rank, level, 14)} per second (increases with character level)\\nSlam Damage: ${flat(rank, level, 95)} (increases with character level)\\nCooldown: 47 seconds`,\n type: SKILLS.AUGMENT_ACTION_SKILL,\n },\n \"One With Nature\": {\n ranks: 5,\n text: \"Amara gains increased Maximum Health and Elemental Damage Resistance to her Action Skill Element.\",\n effect: (rank, level) => `Maximum Health: +${percent(rank, 5)}%\\nElemental Damage Resistance: +${getOneWithNatureElementalDamageResistance(rank)}%`,\n },\n },\n \"5\": {\n \"Do Unto Others\": {\n ranks: 1,\n text: \"Whenever an enemy damages Amara, she automatically throws an energy orb back at them, dealing Action Skill Elemental Damage. This skill has a short cooldown.\",\n effect: (rank, level) => `Cooldown: 8 seconds`,\n },\n \"Jab Cross\": {\n ranks: 5,\n text: \"Whenever Amara deals melee damage to an enemy, she gains increased Action Skill Damage and increased Gun Damage for a few seconds.\",\n effect: (rank, level) => `Action Skill Damage: +${percent(rank, 15)}%\\nGun Damage: +${percent(rank, 3)}%\\nDuration: 10 seconds`,\n },\n \"Guardian Angel\": {\n ranks: 1,\n text: \"When Amara enters Fight For Your Life, she immediately gains a Second Wind, restores her health, and creates an Action Skill Elemental Nova that may knock back nearby enemies. This skill has a long cooldown.\",\n effect: (rank, level) => `Health Restored: 50% of Maximum Health\\nCooldown: 120 seconds`,\n },\n \"Glamour\": {\n ranks: 0,\n text: \"Enemies damaged by Amara's Action Skill become confused and temporarily attack their allies. However, Action Skill Cooldown is increased. If Amara targets an enemy with Phasegrasp, enemies near the Grasped target are confused as well.\",\n effect: (rank, level) => `Confuse Duration: 8 seconds\\nAction Skill Damage: -10%\\nAction Skill Cooldown: +20%`,\n type: SKILLS.AUGMENT_CHEVRON,\n },\n },\n \"6\": {\n \"Blitz\": {\n ranks: 1,\n text: \"Melee Override. Press [Melee key] while aiming at an enemy to make Amara dash a short distance forward and perform a special melee strike, dealing Elemental Melee Damage. If a Blitz melee attack kills an enemy, Blitz's cooldown is immediately reset.\",\n effect: (rank, level) => `Melee Damage: +100%\\nCooldown: 8 seconds`,\n },\n },\n },\n \"Mystical Assault\": {\n \"0\": {\n \"Phasecast\": {\n text: \"Amara sends forward an Astral Projection of herself, dealing damage to everything in its path. Element: Shock.\",\n effect: (rank, level) => `Damage: ${flat(rank, level, 92)}\\nCooldown: 28 Seconds`,\n type: SKILLS.ACTION_SKILL,\n ranks: 0,\n },\n },\n \"1\": {\n \"Do Harm\": {\n ranks: 5,\n text: \"Killing an enemy grants Amara a stack of Rush. Activating her Action Skill consumes all Rush stacks. For every stack of Rush consumed, Amara's Action Skill Damage is temporarily increased.\",\n effect: (rank, level) => `Action Skill Dmg: +${percent(rank, 0.9)}% per Rush stack consumed\\nMaximum Rush Stacks: 10\\nDuration: 20 seconds`,\n },\n \"Fast Hand(s)\": {\n ranks: 3,\n text: \"Amara's Reload Speed, Weapon Swap Speed, and Mode Switch Speed are improved.\",\n effect: (rank, level) => `Reload Speed: +${getFastHandsReloadSpeed(rank)}%\\nWeapon Swap Speed: +${getFastHandsWeaponSwapSpeed(rank)}%\\nMode Switch Speed: +${getFastHandsModeSwitchSpeed(rank)}%`,\n },\n \"Violent Tapestry\": {\n ranks: 5,\n text: \"Applying a Status Effect grants Amara a stack of Rush. Activating her Action Skill consumes all Rush stacks. For every stack of Rush consumed, Amara's Status Effect Chance is temporarily increased.\",\n effect: (rank, level) => `StatusEffect Chance: +${percent(rank, 0.6)}% per Rush stack consumed\\nMaximum Rush Stacks: 10\\nDuration: 20 seconds`,\n },\n },\n \"2\": {\n \"Alacrity\": {\n ranks: 5,\n text: \"Amara gains increased Reload Speed for every stack of Rush. After consuming Rush stacks, this bonus is increased for a few seconds.\",\n effect: (rank, level) => `Reload Speed: +${percent(rank, 0.4)}% per Rush stack\\nAdditional Reload Speed: +${getAlacrityReloadSpeedAfterActionSkill(rank)}% per Rush stack consumed\\nDuration: 8 seconds`,\n },\n \"Transcend\": {\n ranks: 3,\n text: \"Amara gains increased Accuracy and Critical Hit Damage for a few seconds after activating her Action Skill.\",\n effect: (rank, level) => `Accuracy: +${getTranscendAccuracy(rank)}%\\nCritical Hit Damage: +${percent(rank, 9)}%\\nDuration: 12 seconds`,\n },\n \"Restless\": {\n ranks: 5,\n text: \"Amara gains increased Action Skill Cooldown Rate.\",\n effect: (rank, level) => `Action Skill Cooldown Rate: +${percent(rank, 5)}%`,\n },\n \"Soul Sap\": {\n ranks: 0,\n text: \"A portion of all damage dealt by Amara's Action Skill is returned to her or a nearby ally as health.\",\n effect: (rank, level) => `Action Skill Life Steal: 30% of damage dealt`,\n type: SKILLS.AUGMENT_CHEVRON,\n },\n },\n \"3\": {\n \"Deliverance\": {\n ranks: 0,\n text: \"Amara sends forward an Astral Projection of herself, dealing damage to everything in its path. Whenever Amara's Astral Projection damages an enemy or object, it releases homing Elemental Projectiles that trigger her Action Skill Elemental Effect on enemies. Element: Shock.\",\n effect: (rank, level) => `Damage: ${flat(rank, level, 86)} (increases with character level)\\nElemental Projectiles: 3 per enemy or object hit\\nCooldown: 28 seconds`,\n type: SKILLS.AUGMENT_ACTION_SKILL,\n },\n \"Ascendant\": {\n ranks: 1,\n text: \"All Action Skill Augments gain increased effects.\",\n effect: (rank, level) => `Soul Sap Life Steal: +20%\\nAllure Radius: +100%\\nGlamour Duration: +50%\\nStillness of Mind: Breaks 0.75 sec after taking dmg\\nRevelation Damage: +25%`,\n },\n \"Stillness of Mind\": {\n ranks: 0,\n text: \"Enemies damaged by Amara's Action Skill become phaselocked until they are damaged or the duration ends. However, Action Skill Cooldown is increased. If Amara targets an enemy with Phasegrasp, enemies near the Grasped target are also phaselocked.\",\n effect: (rank, level) => `Phaselock Duration: 6 seconds\\nAction Skill Damage: -25%\\nAction Skill Cooldown: +15%`,\n type: SKILLS.AUGMENT_CHEVRON,\n },\n },\n \"4\": {\n \"Reverberation\": {\n ranks: 0,\n text: \"Amara sends forward an Astral Projection of herself, dealing damage to everything in its path. Astral Projection deals increased damage for every enemy it hits. Element: Shock.\",\n effect: (rank, level) => `Damage: ${flat(rank, level, 88)} (increases with character level)\\nDamage Bonus: +50% per enemy hit\\nCooldown: 30 seconds`,\n type: SKILLS.AUGMENT_ACTION_SKILL,\n },\n \"From Rest\": {\n ranks: 3,\n text: \"Amara gains improved Fire Rate and Charge Time.\",\n effect: (rank, level) => `Fire Rate: +${percent(rank, 4)}%\\nCharge Time: +${getFromRestChargeTime(rank)}%`,\n },\n \"Laid Bare\": {\n ranks: 3,\n text: \"Enemies take increased damage from all sources for a few seconds after being damaged by Amara's Action Skill.\",\n effect: (rank, level) => `Damage Increase: +${percent(rank, 8.333)}%\\nDuration: 8 seconds`,\n },\n \"Wrath\": {\n ranks: 3,\n text: \"Amara gains increased Gun Damage. This effect is increased after she activates her Action Skill for a few seconds.\",\n effect: (rank, level) => `Gun Damage: +${getWrathGunDamage(rank)}%\\nAdditional Gun Damage: +${getWrathGunDamageAfterActionSkill(rank)}%\\nDuration: 8 seconds`,\n },\n },\n \"5\": {\n \"Remnant\": {\n ranks: 3,\n text: \"When Amara kills an enemy with a Gun or Action Skill, she creates a homing projectile that seeks out a new enemy dealing her Action Skill Elemental Damage. Any Overkill Damage is added to the projectile's damage.\",\n effect: (rank, level) => `Remnant Base Damage: ${flat(rank, level, 9)} (increases with character level)`,\n },\n \"Awakening\": {\n ranks: 3,\n text: \"Amara's Rush stacks gain increased effectiveness.\",\n effect: (rank, level) => `Rush Stack Effectiveness: +${percent(rank, 10)}%`,\n },\n \"Tandava\": {\n ranks: 0,\n text: \"Amara sends forward an Astral Projection of herself. When it hits a target, it explodes, damaging all nearby enemies. Element: Shock.\",\n effect: (rank, level) => `Damage: ${flat(rank, level, 91)} (increases with character level)\\nCooldown: 35 seconds`,\n type: SKILLS.AUGMENT_ACTION_SKILL,\n },\n },\n \"6\": {\n \"Avatar\": {\n ranks: 1,\n text: \"Amara's Action Skill can be activated while it's cooling down. This skill may only be used once per completed cooldown. Additionally, increases Amara's Maximum Rush Stacks. Additionally, if Amara's Action Skill kills an enemy, it refunds half of her Rush stacks.\",\n effect: (rank, level) => `Maximum Rush Stacks: +10`,\n },\n },\n },\n \"Fist of the Elements\": {\n \"0\": {\n \"Phasegrasp\": {\n text: \"Amara summons a giant fist that bursts from the ground and locks the targeted enemy in place for a few seconds. Some enemies are immune to being Grasped and instantly take damage instead. Element: Shock.\",\n effect: (rank, level) => `Skill Duration: 7 seconds\\nCooldown: 16 seconds\\nGrasp Immune Damage: ${flat(rank, level, 28)} (increases with character level)`,\n type: SKILLS.ACTION_SKILL,\n ranks: 0,\n },\n },\n \"1\": {\n \"Anima\": {\n ranks: 5,\n text: \"Amara's Status Effects deal increased damage over time and have increased duration. Her Action Skill Status Effect deals further increased damage.\",\n effect: (rank, level) => `Action Skill Status Effect Damage: +${percent(rank, 8)}%\\nOther Status Effect Damage: +${percent(rank, 4)}%\\nStatus Effect Duration: +${percent(rank, 20)}%`,\n },\n \"Steady Hands\": {\n ranks: 3,\n text: \"Amara gains increased Weapon Handling and Accuracy.\",\n effect: (rank, level) => `Handling: +${getSteadyHandsHandling(rank)}%\\nAccuracy: +${getSteadyHandsAccuracy(rank)}%`,\n },\n \"Infusion\": {\n ranks: 5,\n text: \"Convert a portion of damage dealt by Amara's weapons into her Action Skill Element.\",\n effect: (rank, level) => `Converted Damage: ${percent(rank, 8)}%`,\n },\n },\n \"2\": {\n \"Tempest\": {\n ranks: 5,\n text: \"Amara deals increased Elemental Damage. Shock Damage is further increased.\",\n effect: (rank, level) => `Shock Damage: +${percent(rank, 8)}%\\nOther Elemental Damage: +${percent(rank, 6)}%`,\n },\n \"Illuminated Fist\": {\n ranks: 1,\n text: \"Amara gains increased Melee Damage and her Melee Damage is converted to Action Skill Element.\",\n effect: (rank, level) => `Melee Damage: +75%`,\n },\n \"Wildfire\": {\n ranks: 5,\n text: \"Whenever Amara applies a Status Effect to an enemy, it has a chance to spread to a nearby enemy.\",\n effect: (rank, level) => `Spread Chance: +${percent(rank, 8)}%`,\n },\n \"Soulfire\": {\n ranks: 0,\n text: \"Converts Amara's Action Skill to Incendiary Damage.\",\n effect: (rank, level) => `Action Skill Element: Incendiary.`,\n type: SKILLS.AUGMENT_DIAMOND,\n },\n },\n \"3\": {\n \"The Eternal Fist\": {\n ranks: 0,\n text: \"Amara summons a giant fist that bursts from the ground and locks the targeted enemy in place for a few seconds. Whenever the Grasped enemy is killed, a new fist seeks out and Grasps a new target. Some enemies are immune to being Grasped and instantly take damage instead. Element: Shock.\",\n effect: (rank, level) => `Bonus Targets: Up to +4\\nDuration: 7 seconds\\nCooldown: 20 seconds\\nGrasp Immune Damage: ${flat(rank, level, 28)} (increases with character level)`,\n type: SKILLS.AUGMENT_ACTION_SKILL,\n },\n \"Dread\": {\n ranks: 1,\n text: \"Amara's Gun Damage is increased for a few seconds after an enemy is Grasped. Whenever any player kills a Grasped enemy, their current weapon is instantly reloaded.\",\n effect: (rank, level) => `Gun Damage: +15%\\nDuration: 8 seconds`,\n },\n \"Allure\": {\n ranks: 0,\n text: \"Amara's Action Skill creates a singularity that pulls in enemies.\",\n effect: (rank, level) => `Duration: 2.5 seconds\\nAction Skill Damage: -20%`,\n type: SKILLS.AUGMENT_CHEVRON,\n },\n },\n \"4\": {\n \"Indiscriminate\": {\n ranks: 3,\n text: \"Amara's bullets that damage enemies have a chance to ricochet and deal decreased damage to other nearby enemies. Ricochet Chance and Damage are increased if target is affected by Phasegrasp or Stillness of Mind.\",\n effect: (rank, level) => `Ricochet Chance: +${percent(rank, 10)}%\\nRicochet Damage: 50% of damage dealt\\nAction Skill Ricochet Chance: +${percent(rank, 20)}%\\nAction Skill Ricochet Damage: 75% of damage dealt`,\n },\n \"Deep Well\": {\n ranks: 1,\n text: \"Amara gains increased Magazine Size with elemental weapons.\",\n effect: (rank, level) => `Magazine Size: +20%`,\n },\n \"Catharsis\": {\n ranks: 3,\n text: \"Whenever Amara triggers an elemental effect on an enemy, when that enemy dies that enemy explodes, dealing her attuned element damage along with any other element that is currently inflicted upon that enemy. This skill has a short cooldown.\",\n effect: (rank, level) => `Damage: ${flat(rank, level, 4)} (increases with character level)\\nCooldown: 8 seconds`,\n },\n \"Ties That Bind\": {\n ranks: 0,\n text: \"Amara summons a giant fist that bursts from the ground and locks the targeted enemy in place for a few seconds. Enemies near the Grasped target are linked, and any damage dealt to a linked target is shared between all other linked targets. Some enemies are immune to being Grasped and instantly take damage instead. Element: Shock.\",\n effect: (rank, level) => `Linked Damage: 35% of damage dealt\\nDuration: 7 seconds\\nCooldown: 18 seconds\\nGrasp Immune Damage: ${flat(rank, level, 34)} (increases with character level)`,\n type: SKILLS.AUGMENT_ACTION_SKILL,\n },\n },\n \"5\": {\n \"Fist Over Matter\": {\n ranks: 0,\n text: \"Amara summons a giant fist that bursts from the ground and locks the targeted enemy in place for a few seconds. After Grasping the targeted enemy, large fists appear and constantly smash the area, dealing damage to nearby enemies. Some enemies are immune to being Grasped and instantly take damage instead. Element: Shock.\",\n effect: (rank, level) => `Damage: ${flat(rank, level, 35)} (increases with character level)\\nDuration: 7 seconds\\nCooldown: 28 seconds\\nGrasp Immune Damage: ${flat(rank, level, 39)} (increases with character level)`,\n type: SKILLS.AUGMENT_ACTION_SKILL,\n },\n \"Sustainment\": {\n ranks: 5,\n text: \"Amara gains Life Steal whenever she deals Elemental Damage with her weapon.\",\n effect: (rank, level) => `Elemental Weapon Life Steal: +${percent(rank, 4)}% of damage dealt`,\n },\n \"Conflux\": {\n ranks: 5,\n text: \"Whenever Amara applies a Status Effect to an enemy, she gains a chance to randomly Electrocute, Ignite, or Melt that enemy.\",\n effect: (rank, level) => `Extra Status Effect Chance: +${percent(rank, 7)}%`,\n },\n },\n \"6\": {\n \"Forceful Expression\": {\n ranks: 1,\n text: \"Amara's guns deal Bonus Elemental Damage based on her Action Skill Element.\",\n effect: (rank, level) => `Bonus Elemental Damage: +18% of damage dealt`,\n },\n },\n },\n};\n\nexport default skills;\n","import style from './index.css';\n\nexport default function () {\n return (\n \n );\n}\n","import { Router } from 'preact-router';\n\nimport Home from '@pages/Home';\nimport Operative from '@pages/Operative';\nimport Siren from '@pages/Siren';\nimport Beastmaster from '@pages/Beastmaster';\nimport Gunner from '@pages/Gunner';\n\nconst App = () =>\n (\n \n \n \n \n \n );\n\nexport default App;\n","// import { useReducer } from 'preact/hooks'; // Downgraded from Preact 10 for compat with @pwa/cli\nimport { Component } from 'preact';\nimport Skill from '@components/Skill';\nimport Nav from '@components/Nav';\nimport Footer from '@components/Footer';\nimport { getHash, setHash } from './hashHandler';\nimport reducer from './reducer';\nimport { getLevel } from './selectors';\nimport style from './index.css';\n\nfunction contextKiller (event) {\n event.preventDefault();\n return false;\n}\n\nexport default class VaultHunter extends Component {\n constructor (props) {\n super(props);\n this.state = {\n invested: [0, 0, 0],\n skills: props.skills || {},\n };\n }\n\n componentDidMount () {\n this.setState(reducer(this.state, {\n type: 'loadSkills',\n skills: getHash(this.state.skills),\n }));\n }\n\n render ({\n name = 'Unnamed',\n discipline = 'Classless',\n path,\n skills: initialSkills,\n }) {\n const skillChangeListenerFactory = (skillName, treeIndex, treeName, tierIndex) => {\n return (oldValue, newValue) => {\n this.setState(reducer(this.state, {\n type: 'skillChange',\n skillName,\n treeIndex,\n treeName,\n tierIndex,\n newValue,\n oldValue,\n }));\n };\n };\n\n const resetSkills = () => {\n setHash(initialSkills);\n this.setState({\n invested: [0, 0, 0],\n skills: initialSkills || {},\n });\n };\n\n const trees =\n Object.keys(this.state.skills).map((treeName, treeIndex) => {\n return (\n
\n \n

{ treeName }

\n
\n { Object.keys(this.state.skills[treeName]).map((tier, tierIndex) =>\n
\n { Object.keys(this.state.skills[treeName][tier]).map((skillName, skillIndex) =>\n = 5 * tierIndex - 5}\n level={getLevel(this.state)}\n image={`../../assets/hunters/${discipline}/${treeIndex}${tierIndex}${skillIndex}.png`}\n onChange={skillChangeListenerFactory(skillName, treeIndex, treeName, tierIndex)}\n />\n ) }\n
\n ) }\n
\n
\n );\n });\n\n const level = getLevel(this.state);\n\n return (\n
\n
\n

{ name }\n
the { discipline }
\n

\n
\n
Level { level }
\n \n
\n
\n
\n
\n
\n { trees }\n
\n
\n
\n
\n
\n );\n }\n}\n","export default {\n ACTION_SKILL: 1,\n AUGMENT_CHEVRON: 2,\n AUGMENT_DIAMOND: 3,\n AUGMENT_ACTION_SKILL: 4,\n}\n","// extracted by mini-css-extract-plugin\nmodule.exports = {\"VaultHunter\":\"_2zgqJ\",\"header\":\"_1Jomm\",\"title\":\"_17kLY\",\"subtitle\":\"_3J3hw\",\"sidepanel\":\"_2UO55\",\"level\":\"xH9ts\",\"reset\":\"K9CBr\",\"trees\":\"_3ek45\",\"tier\":\"_3Ch4X\",\"treeName\":\"_1WAM2\",\"tree\":\"gRWZY\",\"skills\":\"_2Su0b\",\"green\":\"-Pl7G\",\"blue\":\"_1nm1I\",\"red\":\"_3T1pZ\"};","import { Link } from 'preact-router';\nimport Footer from '@components/Footer';\nimport style from './index.css';\n\nexport default function () {\n const pages = [\n { name: 'Zane', job: 'the Operative', path: '/operative' },\n { name: 'Amara', job: 'the Siren', path: '/siren' },\n { name: 'FL4K', job: 'the Beastmaster', path: '/beastmaster' },\n { name: 'Moze', job: 'the Gunner', path: '/gunner' },\n ];\n return (\n
\n
\n
\n

(Unofficial)
Borderlands 3 skill calculator

\n { pages.map(page => {\n return (\n \n
\n {page.name}\n
\n {page.job}\n
\n
\n \n );\n }) }\n
\n
\n
\n
\n );\n}\n","import { h, render } from 'preact';\nimport App from '@components/App';\nimport './index.css';\n\nlet elem = document.querySelector('#app');\nlet root = render(, elem, elem.firstElementChild);\n\nif (process.env.NODE_ENV === 'development' && module.hot) {\n // enable preact devtools\n require('preact/debug');\n // respond to HMR updates\n module.hot.accept('@components/App', New => {\n New = require('@components/App').default;\n root = render(, elem, root);\n });\n} else if (process.env.NODE_ENV === 'production') {\n // Service Worker registration\n require('offline-plugin/runtime').install();\n}\n","import { Component, cloneElement, h } from 'preact';\n\nvar EMPTY$1 = {};\n\nfunction assign(obj, props) {\n\t// eslint-disable-next-line guard-for-in\n\tfor (var i in props) {\n\t\tobj[i] = props[i];\n\t}\n\treturn obj;\n}\n\nfunction exec(url, route, opts) {\n\tvar reg = /(?:\\?([^#]*))?(#.*)?$/,\n\t\tc = url.match(reg),\n\t\tmatches = {},\n\t\tret;\n\tif (c && c[1]) {\n\t\tvar p = c[1].split('&');\n\t\tfor (var i=0; i b.rank) ? -1 :\n\t\t(a.index - b.index)\n\t);\n}\n\n// filter out VNodes without attributes (which are unrankeable), and add `index`/`rank` properties to be used in sorting.\nfunction prepareVNodeForRanking(vnode, index) {\n\tvnode.index = index;\n\tvnode.rank = rankChild(vnode);\n\treturn vnode.attributes;\n}\n\nfunction segmentize(url) {\n\treturn url.replace(/(^\\/+|\\/+$)/g, '').split('/');\n}\n\nfunction rankSegment(segment) {\n\treturn segment.charAt(0)==':' ? (1 + '*+?'.indexOf(segment.charAt(segment.length-1))) || 4 : 5;\n}\n\nfunction rank(path) {\n\treturn segmentize(path).map(rankSegment).join('');\n}\n\nfunction rankChild(vnode) {\n\treturn vnode.attributes.default ? 0 : rank(vnode.attributes.path);\n}\n\nvar customHistory = null;\n\nvar ROUTERS = [];\n\nvar subscribers = [];\n\nvar EMPTY = {};\n\nfunction isPreactElement(node) {\n\treturn node.__preactattr_!=null || typeof Symbol!=='undefined' && node[Symbol.for('preactattr')]!=null;\n}\n\nfunction setUrl(url, type) {\n\tif ( type === void 0 ) type='push';\n\n\tif (customHistory && customHistory[type]) {\n\t\tcustomHistory[type](url);\n\t}\n\telse if (typeof history!=='undefined' && history[type+'State']) {\n\t\thistory[type+'State'](null, null, url);\n\t}\n}\n\n\nfunction getCurrentUrl() {\n\tvar url;\n\tif (customHistory && customHistory.location) {\n\t\turl = customHistory.location;\n\t}\n\telse if (customHistory && customHistory.getCurrentLocation) {\n\t\turl = customHistory.getCurrentLocation();\n\t}\n\telse {\n\t\turl = typeof location!=='undefined' ? location : EMPTY;\n\t}\n\treturn (\"\" + (url.pathname || '') + (url.search || ''));\n}\n\n\n\nfunction route(url, replace) {\n\tif ( replace === void 0 ) replace=false;\n\n\tif (typeof url!=='string' && url.url) {\n\t\treplace = url.replace;\n\t\turl = url.url;\n\t}\n\n\t// only push URL into history if we can handle it\n\tif (canRoute(url)) {\n\t\tsetUrl(url, replace ? 'replace' : 'push');\n\t}\n\n\treturn routeTo(url);\n}\n\n\n/** Check if the given URL can be handled by any router instances. */\nfunction canRoute(url) {\n\tfor (var i=ROUTERS.length; i--; ) {\n\t\tif (ROUTERS[i].canRoute(url)) { return true; }\n\t}\n\treturn false;\n}\n\n\n/** Tell all router instances to handle the given URL. */\nfunction routeTo(url) {\n\tvar didRoute = false;\n\tfor (var i=0; i 0;\n\t};\n\n\t/** Re-render children with a new URL to match against. */\n\tRouter.prototype.routeTo = function routeTo (url) {\n\t\tthis._didRoute = false;\n\t\tthis.setState({ url: url });\n\n\t\t// if we're in the middle of an update, don't synchronously re-route.\n\t\tif (this.updating) { return this.canRoute(url); }\n\n\t\tthis.forceUpdate();\n\t\treturn this._didRoute;\n\t};\n\n\tRouter.prototype.componentWillMount = function componentWillMount () {\n\t\tROUTERS.push(this);\n\t\tthis.updating = true;\n\t};\n\n\tRouter.prototype.componentDidMount = function componentDidMount () {\n\t\tvar this$1 = this;\n\n\t\tif (customHistory) {\n\t\t\tthis.unlisten = customHistory.listen(function (location) {\n\t\t\t\tthis$1.routeTo((\"\" + (location.pathname || '') + (location.search || '')));\n\t\t\t});\n\t\t}\n\t\tthis.updating = false;\n\t};\n\n\tRouter.prototype.componentWillUnmount = function componentWillUnmount () {\n\t\tif (typeof this.unlisten==='function') { this.unlisten(); }\n\t\tROUTERS.splice(ROUTERS.indexOf(this), 1);\n\t};\n\n\tRouter.prototype.componentWillUpdate = function componentWillUpdate () {\n\t\tthis.updating = true;\n\t};\n\n\tRouter.prototype.componentDidUpdate = function componentDidUpdate () {\n\t\tthis.updating = false;\n\t};\n\n\tRouter.prototype.getMatchingChildren = function getMatchingChildren (children, url, invoke) {\n\t\treturn children\n\t\t\t.filter(prepareVNodeForRanking)\n\t\t\t.sort(pathRankSort)\n\t\t\t.map( function (vnode) {\n\t\t\t\tvar matches = exec(url, vnode.attributes.path, vnode.attributes);\n\t\t\t\tif (matches) {\n\t\t\t\t\tif (invoke !== false) {\n\t\t\t\t\t\tvar newProps = { url: url, matches: matches };\n\t\t\t\t\t\tassign(newProps, matches);\n\t\t\t\t\t\tdelete newProps.ref;\n\t\t\t\t\t\tdelete newProps.key;\n\t\t\t\t\t\treturn cloneElement(vnode, newProps);\n\t\t\t\t\t}\n\t\t\t\t\treturn vnode;\n\t\t\t\t}\n\t\t\t}).filter(Boolean);\n\t};\n\n\tRouter.prototype.render = function render (ref, ref$1) {\n\t\tvar children = ref.children;\n\t\tvar onChange = ref.onChange;\n\t\tvar url = ref$1.url;\n\n\t\tvar active = this.getMatchingChildren(children, url, true);\n\n\t\tvar current = active[0] || null;\n\t\tthis._didRoute = !!current;\n\n\t\tvar previous = this.previousUrl;\n\t\tif (url!==previous) {\n\t\t\tthis.previousUrl = url;\n\t\t\tif (typeof onChange==='function') {\n\t\t\t\tonChange({\n\t\t\t\t\trouter: this,\n\t\t\t\t\turl: url,\n\t\t\t\t\tprevious: previous,\n\t\t\t\t\tactive: active,\n\t\t\t\t\tcurrent: current\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\n\t\treturn current;\n\t};\n\n\treturn Router;\n}(Component));\n\nvar Link = function (props) { return (\n\th('a', assign({ onClick: handleLinkClick }, props))\n); };\n\nvar Route = function (props) { return h(props.component, props); };\n\nRouter.subscribers = subscribers;\nRouter.getCurrentUrl = getCurrentUrl;\nRouter.route = route;\nRouter.Router = Router;\nRouter.Route = Route;\nRouter.Link = Link;\n\nexport { subscribers, getCurrentUrl, route, Router, Route, Link };export default Router;\n//# sourceMappingURL=preact-router.es.js.map\n","import SKILLS from '@constants/skills';\n\nfunction percent (rank, unit) {\n return Math.round(rank * unit * 10) / 10;\n}\n\n/* These three skills dont follow a linear patch for some increases. Data came from official builder.\nhttps://borderlands.com/en-US/characters/fl4k/#-\nMight be different in game but I haven't played FL4K yet!\nThere are probably diminishing return algorithms for these but this was quicker than figuring that out. */\n\n// Hunter's Eye Damage Resistance\nfunction getHuntersEyeDamageResistance(rank) {\n switch (rank) {\n case 1:\n return 5.3;\n case 2:\n return 10.1;\n case 3:\n return 14.4;\n case 4:\n return 18.3;\n case 5:\n return 21.9;\n default:\n return 0;\n }\n}\n\n// Ambush Predator Handling\nfunction getAmbushPredatorHandling(rank) {\n switch (rank) {\n case 1:\n return 17;\n case 2:\n return 29;\n case 3:\n return 38;\n case 4:\n return 44;\n case 5:\n return 50;\n default:\n return 0;\n }\n}\n\n// The Most Dangerous Game Handling\nfunction getMostDangerousGameHandling(rank) {\n switch (rank) {\n case 1:\n return 14.3;\n case 2:\n return 25.0;\n case 3:\n return 33.3;\n default:\n return 0;\n }\n}\n\n// Furious Attack Handling\nfunction getFuriousAttackHandling(rank) {\n switch (rank) {\n case 1:\n return 1;\n case 2:\n return 2;\n case 3:\n return 2.9;\n case 4:\n return 3.8;\n case 5:\n return 4.8;\n default:\n return 0;\n }\n}\n\n// Turn Tail And Run Damage Resistance\nfunction getTurnTailAndRunDamageResistance(rank) {\n switch (rank) {\n case 1:\n return 6.5;\n case 2:\n return 12.3;\n case 3:\n return 17.4;\n default:\n return 0;\n }\n}\n\n// Interplanetary Stalker Beast Movement Speed\nfunction getInterplanetaryStalkerBeastMovementSpeed(rank) {\n switch (rank) {\n case 1:\n return 2;\n case 2:\n return 3;\n case 3:\n return 5;\n case 4:\n return 6;\n case 5:\n return 7;\n default:\n return 0;\n }\n}\n\n// Second Intention Critical Kill Reload Speed\nfunction getSecondIntentionCriticalKillReloadSpeed(rank) {\n switch (rank) {\n case 1:\n return 6;\n case 2:\n return 11;\n case 3:\n return 15;\n case 4:\n return 19;\n case 5:\n return 23;\n default:\n return 0;\n }\n}\n\n/* eslint-disable quotes */\nconst skills = {\n \"Stalker\": {\n \"0\": {\n \"Jabber Sidekick\": {\n text: \"FL4K is joined by a loyal Jabber companion, armed with a Pistol. While accompanied by the Jabber, FL4K's Movement Speed is increased. Hold [Pet Skill key] to issue an Attack Command, which will cause the Jabber to throw a Radiation Barrel at enemies.\",\n type: SKILLS.AUGMENT_DIAMOND,\n ranks: 0,\n effect: (rank, level) => `Movement Speed: +5%`,\n },\n \"Fade Away\": {\n text: \"FL4K cloaks, turning invisible. FL4K can fire 3 shots while cloaked, and each shot is automatically a Critical Hit. While cloaked, FL4K has increased Movement Speed and Health Regeneration.\",\n type: SKILLS.ACTION_SKILL,\n ranks: 0,\n effect: (rank, level) => `Fade Away Bonus Damage: 200% of damage dealt\\nCloaked Movement Speed: +25%\\nHealth Regeneration: +3% of Max Health per second\\nDuration: 15 seconds\\nCooldown: 45 seconds`,\n },\n },\n \"1\": {\n \"Self-Repairing System\": {\n text: \"FL4K's Maximum Health is increased, and they constantly regenerate health.\",\n ranks: 5,\n effect: (rank, level) => `Maximum Health: +${percent(rank, 6)}%\\nHealth Regeneration: +${percent(rank, 0.3)}% of Max Health/sec`,\n },\n \"Sic'Em\": {\n text: \"Attack Command has lowered Cooldown and increased Damage.\",\n ranks: 3,\n effect: (rank, level) => `Attack Command Damage: +${percent(rank, 10)}%\\nAttack Command Cooldown: -${percent(rank, 10)}%`,\n },\n \"Furious Attack\": {\n text: \"Hunter Skill. After shooting an enemy, FL4K gains a stack of Furious Attack. For each stack of Furious Attack, FL4K's Handling and Gun Damage are increased, and their pet gains increased Damage per stack. Stacks decay after a few seconds.\",\n ranks: 5,\n effect: (rank, level) => `Gun Damage: +${percent(rank, 0.4)}% per stack\\nHandling: +${getFuriousAttackHandling(rank)}% per stack\\nPet Damage: +${percent(rank, 0.6)}% per stack\\nMaximum Stacks: 10\\nDuration: 4 seconds`,\n },\n },\n \"2\": {\n \"Guerrillas In The Mist\": {\n text: \"Fade Away no longer ends after FL4K attacks, at the cost of Critical Hit Damage and Fade Away duration being reduced.\",\n type: SKILLS.AUGMENT_CHEVRON,\n ranks: 0,\n effect: (rank, level) => `Fade Away Bonus Damage: 25% of damage dealt\\nFade Away Duration: 5 seconds`,\n },\n \"Eager To Impress\": {\n text: \"Kill Skill. Whenever FL4K kills an enemy, Action Skill Cooldown Time is reduced. Whenever FL4K's pet kills an enemy, Action Skill Cooldown Time is reduced even more and Attack Command's duration is refreshed.\",\n ranks: 5,\n effect: (rank, level) => `FL4K Kill Action Skill Cooldown: -${percent(rank, 0.25)} seconds\\nPet Kill Action Skill Cooldown: -${percent(rank, 0.5)} seconds`,\n },\n \"All My BFF's\": {\n text: \"Allies share a portion of FL4K's total Health Regeneration. FL4K's pet shares twice the amount of Health Regeneration.\",\n ranks: 3,\n effect: (rank, level) => `Allies' Health Regen: +${Math.round(percent(rank, 16.666))}% of FL4K's Health Regen\\nPet Health Regen: +${Math.round(percent(rank, 33.333))}% of FL4K's Health Regen`,\n },\n \"Overclocked\": {\n text: \"FL4K gains increased Fire Rate. FL4K gains even more Fire Rate after reloading.\",\n ranks: 5,\n effect: (rank, level) => `Fire Rate: +${percent(rank, 2)}%\\nAdditional Fire Rate: +${percent(rank, 2)}%\\nDuration: 4 seconds`,\n },\n },\n \"3\": {\n \"Not My Circus\": {\n text: \"After Fade Away ends, FL4K's pet will Taunt, drawing the attention of all enemies in a huge radius. For a few seconds after Taunting, the pet gains powerful Damage Resistance.\",\n type: SKILLS.AUGMENT_CHEVRON,\n ranks: 0,\n effect: (rank, level) => `Pet Taunt Duration: 6 seconds\\nPet Damage Resistance: +80%`,\n },\n \"Lick The Wounds\": {\n text: \"When FL4K is in Fight For Your Life, their pet will attempt to revive them. If it does, it gains increased Damage for a short time.\",\n ranks: 1,\n effect: (rank, level) => `Pet Damage: +30%\\nDuration: 60 seconds`,\n },\n \"Turn Tail And Run\": {\n text: \"While moving, FL4K constantly regenerates health and gains Damage Resistance.\\nWhile still, FL4K gains Gun Damage and Fire Rate.\",\n ranks: 3,\n effect: (rank, level) => `Damage Resistance: +${getTurnTailAndRunDamageResistance(rank)}% while moving\\nHealth Regen: +${percent(rank, 0.3)}% of Max Health/sec while moving\\nGun Damage: +${percent(rank, 8.333)}% while still\\nFire Rate: +${percent(rank, 4)}% while still`,\n },\n \"Beefcake Jabber\": {\n text: \"FL4K's Jabber evolves into a Beefcake, discarding its pistol and equipping a Shotgun. While accompanied by the Beefcake, FL4K gains increased Movement Speed and Maximum Health. When FL4K issues an Attack Command, the Beefcake will summon a melee weapon to deliver a powerful attack that knocks enemies back.\",\n type: SKILLS.AUGMENT_DIAMOND,\n ranks: 0,\n effect: (rank, level) => `Movement Speed: +5%\\nMaximum Health: +10%`,\n },\n },\n \"4\": {\n \"Until You Are Dead\": {\n text: \"The Health Regeneration and Movement Speed of Fade Away persists for a short time after the skill has ended.\",\n type: SKILLS.AUGMENT_CHEVRON,\n ranks: 0,\n effect: (rank, level) => `Duration: 10 seconds after Fade Away ends`,\n },\n \"The Fast And The Furryous\": {\n text: \"While above half health, FL4K's Gun Damage and Movement Speed are increased, and their pet gains increased Damage.\",\n ranks: 3,\n effect: (rank, level) => `Gun Damage: +${Math.round(percent(rank, 8.333))}%\\nMovement Speed: +${percent(rank, 3.333)}%\\nPet Damage: +${percent(rank, 10)}%`,\n },\n \"Hidden Machine\": {\n text: \"When an enemy has no target or is attacking a different target, FL4K deals increased damage against them.\",\n ranks: 5,\n effect: (rank, level) => `Damage: +${percent(rank, 6)}%`,\n },\n \"Gunslinger Jabber\": {\n text: \"FL4K's Jabber upgrades his gear and equips an SMG. While accompanied by the Gunslinger, FL4K gains increased Movement Speed and Critical Hit Damage. When FL4K issues an Attack Command, the Gunslinger equips a Rocket Launcher to attack the target.\",\n type: SKILLS.AUGMENT_DIAMOND,\n ranks: 0,\n effect: (rank, level) => `Movement Speed: +5%\\nCritical Hit Damage: +5%`,\n },\n },\n \"5\": {\n \"Unblinking Eye\": {\n text: \"During Fade Away, successive hits on the same target increase FL4K's Critical Damage per hit. Unblinking Eye resets every 3 hits.\",\n type: SKILLS.AUGMENT_CHEVRON,\n ranks: 0,\n effect: (rank, level) => `Additional Fade Away Bonus Damage: +75% of damage dealt per hit`,\n },\n \"Rage And Recover\": {\n text: \"Kill Skill. After killing an enemy, FL4K and FL4K's pet regenerate health for a few seconds.\",\n ranks: 5,\n effect: (rank, level) => `Health Regeneration: +${percent(rank, 1.6)}% of Missing Health/sec\\nPet Health Regen: +${percent(rank, 1.6)}% of Missing Health/sec\\nDuration: 3 seconds`,\n },\n },\n \"6\": {\n \"The Power Inside\": {\n text: \"FL4K and FL4K's pet gain increased Damage when FL4K activates an Action Skill. If FL4K is at full health, the increased Damage is doubled.\",\n ranks: 1,\n effect: (rank, level) => `Damage: +25%\\nPet Damage: +25%\\nDuration: 15 seconds`,\n },\n },\n },\n \"Master\": {\n \"0\": {\n \"Guard Skag\": {\n text: \"FL4K is joined by a loyal Skag companion, which will increase FL4K's Damage. Hold [Pet Skill key] to issue an Attack Command, which will cause the Skag to vomit acid onto enemies.\",\n type: SKILLS.AUGMENT_DIAMOND,\n ranks: 0,\n effect: (rank, level) => `Damage: +5%`,\n },\n \"Gamma Burst\": {\n text: \"FL4K creates a Rift at a target location, teleporting their pet through the Rift and dealing Radiation Damage to nearby enemies. Additionally, FL4K's pet becomes irradiated, growing in size and dealing bonus Radiation Damage when it attacks. Using Gamma Burst while FL4K's pet is downed or dead will revive the pet at the targeted location with 30% of its health, but will double Action Skill Cooldown Time.\",\n type: SKILLS.ACTION_SKILL,\n ranks: 0,\n effect: (rank, level) => `Damage 56: (increases with character level)\\nDuration: 20 seconds\\nCooldown: 30 seconds`,\n },\n },\n \"1\": {\n \"Ferocity\": {\n text: \"FL4K's Pet deals increased damage.\",\n ranks: 5,\n effect: (rank, level) => `Pet Damage: +${percent(rank, 10)}%`,\n },\n \"Persistence Hunter\": {\n text: \"Increases FL4K's Gun Damage and Action Skill Duration.\",\n ranks: 3,\n effect: (rank, level) => `Gun Damage: +${percent(rank, 4)}%\\nAction Skill Duration: +${percent(rank, 15)}%`,\n },\n \"Go For The Eyes!\": {\n text: \"When FL4K's pet attacks an enemy, the first melee attack is an automatic Critical Hit that deals increased damage.\",\n ranks: 5,\n effect: (rank, level) => `Pet Critical Hit Damage: ${percent(rank, 15)}%`,\n },\n },\n \"2\": {\n \"Atomic Aroma\": {\n text: \"While Gamma Burst is active, FL4K's pet is surrounded by a Radiation Aura, constantly damaging all nearby enemies.\",\n type: SKILLS.AUGMENT_CHEVRON,\n ranks: 0,\n effect: (rank, level) => `Radiation Damage: 4 per second (increases with character level)`,\n },\n \"Who Rescued Who?\": {\n text: \"Whenever FL4K's Pet deals damage, FL4K regenerates health for a few seconds. Whenever FL4K deals damage to an enemy, their Pet's health is restored for a portion of the damage dealt.\",\n ranks: 5,\n effect: (rank, level) => `Health Regeneration: +${percent(rank, 0.4)}% of Max Health/sec\\nPet Health Restored: +${percent(rank, 1)}% of damage dealt`,\n },\n \"He Bites!\": {\n text: \"When FL4K's pet takes damage, the pet returns some of that damage to the attacker.\",\n ranks: 3,\n effect: (rank, level) => `Damage Returned: ${percent(rank, 5)}% of damage received`,\n },\n \"Frenzy\": {\n text: \"Hunter Skill. When FL4K's pet deals damage, FL4K and their pet gain a stack of Frenzy. Each stack of Frenzy increases Damage. The stacks decay after a few seconds.\",\n ranks: 5,\n effect: (rank, level) => `Damage: +${percent(rank, 0.8)}% per stack\\nPet Damage: +${percent(rank, 0.8)}% per stack\\nMaximum Stacks: 10`,\n },\n },\n \"3\": {\n \"Empathic Rage\": {\n text: \"For the duration of Gamma Burst, Damage dealt by FL4K is increased.\",\n type: SKILLS.AUGMENT_CHEVRON,\n ranks: 0,\n effect: (rank, level) => `Damage: +20%`,\n },\n \"Psycho Head On A Stick\": {\n text: \"Hunter Kill Skill. Whenever FL4K kills an enemy, their pet gains increased Movement Speed and Damage for a few seconds.\",\n ranks: 1,\n effect: (rank, level) => `Pet Damage: +20%\\nPet Movement Speed: +12%\\nDuration: 8 seconds`,\n },\n \"Hive Mind\": {\n text: \"When FL4K takes damage, a portion of all damage they take is inflicted on their pet instead.\",\n ranks: 3,\n effect: (rank, level) => `Damage Shared: ${percent(rank, 5)}%`,\n },\n \"Great Horned Skag\": {\n text: \"FL4K's Skag evolves into a larger Great Horned Skag, which will increase FL4K's Damage and Gun Damage. When FL4K issues an Attack Command, the Great Horned Skag will charge at enemies and knock them into the air.\",\n type: SKILLS.AUGMENT_DIAMOND,\n ranks: 0,\n effect: (rank, level) => `Damage: +5%\\nGun Damage: +10%`,\n },\n },\n \"4\": {\n \"Endurance\": {\n text: \"When FL4K or FL4K's pet kills an enemy while Gamma Burst is active, the duration of Gamma Burst is extended and pet damage is increased. These effects can stack up to 5 times.\",\n type: SKILLS.AUGMENT_CHEVRON,\n ranks: 0,\n effect: (rank, level) => `Gamma Burst Duration: +3 seconds per kill\\nPet Damage: +10% per kill\\nMaximum Stacks: 5`,\n },\n \"Barbaric Yawp\": {\n text: \"Increases the power of Pet Bonuses granted to FL4K.\",\n ranks: 5,\n effect: (rank, level) => `Pet Bonuses: +${percent(rank, 40)}%`,\n },\n \"Mutated Defenses\": {\n text: \"When FL4K's pet is at low health, it gains Damage Resistance and regenerates health. This skill has a long cooldown.\",\n ranks: 1,\n effect: (rank, level) => `Pet Damage Resistance: +30%\\nPet Health Regen: +6.667% of Max Health/sec\\n Duration: 6 seconds\\nCooldown: 15 seconds`,\n },\n \"Eridian Skag\": {\n text: \"FL4K's Skag evolves into an Eridian Skag, which will increase FL4K's Damage and Fire Rate. When FL4K issues an Attack Command, their Eridian Skag pulls nearby enemies in by generating a Singularity.\",\n type: SKILLS.AUGMENT_DIAMOND,\n ranks: 0,\n effect: (rank, level) => `Damage: +5%\\nFire Rate: +5%`,\n },\n },\n \"5\": {\n \"Burst Aid\": {\n text: \"After using Gamma Burst, the Rift remains for the duration of the skill. While standing near the Rift, FL4K and their allies rapidly Regenerate Health.\",\n type: SKILLS.AUGMENT_CHEVRON,\n ranks: 0,\n effect: (rank, level) => `Team Health Regeneration: +20% of Max Health/sec`,\n },\n \"Pack Tactics\": {\n text: \"All damage dealt by FL4K and their pet is increased. Additionally, the Maximum Health of both FL4K and their pet is increased.\",\n ranks: 3,\n effect: (rank, level) => `Damage: +${percent(rank, 7)}%\\nMaximum Health: +${percent(rank, 5)}%\\nPet Damage: +${percent(rank, 7)}%\\nPet Maximum Health: +${percent(rank, 5)}%`,\n },\n \"Shared Spirit\": {\n text: \"While FL4K is at low health, a portion of all damage they take is inflicted on their pet instead.\",\n ranks: 1,\n effect: (rank, level) => `Damage Shared: 50%`,\n },\n },\n \"6\": {\n \"Dominance\": {\n text: \"Melee Override Skill. FL4K establishes dominance over an enemy, turning it into an ally for a short time. If the enemy is a Beast, the duration is doubled. While under the effects of Dominance, the enemy constantly loses health until it dies or the effect ends. Only one enemy can be dominated at a time. An enemy can only be dominated once.\",\n ranks: 1,\n effect: (rank, level) => `Duration: 12 seconds\\nTarget Loses 2% of Maximum Health per second`,\n },\n },\n },\n \"Hunter\": {\n \"0\": {\n \"Spiderant Centurion\": {\n text: \"FL4K is joined by a loyal Spiderant companion, which will cause FL4K to constant regenerate health. Hold [Pet Skill key] to issue an Attack Command, which will cause the Spiderant to charge into enemies.\",\n type: SKILLS.AUGMENT_DIAMOND,\n ranks: 0,\n effect: (rank, level) => `Health Regeneration: 1% of Max Health per second`,\n },\n \"Rakk Attack!\": {\n text: \"FL4K sends forward 2 Rakk to dive-bomb enemies. This skill has multiple charges. Element: Incendiary.\",\n type: SKILLS.ACTION_SKILL,\n ranks: 0,\n effect: (rank, level) => `Damage: 35 (increases with character level)\\nElement Status Effect Chance: 100%\\nCooldown: 18 seconds`,\n },\n },\n \"1\": {\n \"Interplanetary Stalker\": {\n text: \"Hunter Kill Skill. Whenever FL4K kills an enemy, they gain a stack of Interplanetary Stalker. For each stack of Interplanetary Stalker, they and their pet gain a bonus to all damage dealt. Additionally, they gain a unique stacking bonus depending on the type of enemy killed. Each unique bonus can stack up to 3 times. Each stack decays after a short time.\",\n ranks: 5,\n effect: (rank, level) => `Damage: +${percent(rank, 2)}% per stack\\nPet Damage: +${percent(rank, 1)}% per stack\\nHuman Bonus: +${percent(rank, 3)}% Action Skill Damage per stack\\nRobot Bonus: +${percent(rank, 1.5)}% Corrosive Damage per stack\\nBeast Bonus: +${getInterplanetaryStalkerBeastMovementSpeed(rank)}% Movement Speed per stack\\nMaximum Stacks: 3`,\n },\n \"Leave No Trace\": {\n text: \"When FL4K scores a Critical Hit, there is a chance for 1 ammo to be added to their magazine.\",\n ranks: 3,\n effect: (rank, level) => `Ammo Chance: +${percent(rank, 12)}%\\nCooldown: 0.3 seconds`,\n },\n \"Second Intention\": {\n text: \"Hunter Kill Skill. Whenever FL4K kills an enemy, they gain increased Reload Speed. This bonus is increased if FL4K scores a Critical Kill.\",\n ranks: 5,\n effect: (rank, level) => `Reload Speed: +${Math.ceil(percent(rank, 2.6))}%\\nCritical Kill Reload Speed: +${getSecondIntentionCriticalKillReloadSpeed(rank)}%\\nDuration: 5 seconds`,\n },\n },\n \"2\": {\n \"Rakk Open A Cold One\": {\n text: \"Converts FL4K's Rakk to Cryo Damage.\",\n type: SKILLS.AUGMENT_CHEVRON,\n ranks: 0,\n effect: (rank, level) => `Rakk Attack! Element: Cryo`,\n },\n \"Hunter's Eye\": {\n text: \"FL4K gains bonuses when fighting different types of enemies.\",\n ranks: 5,\n effect: (rank, level) => `Human Bonus: +${percent(rank, 2.48)}% Critical Hit Damage\\nRobot Bonus: +${percent(rank, 6)}% Armor Damage\\nBeast Bonus: +${getHuntersEyeDamageResistance(rank)}% Damage Resistance`,\n },\n \"Head Count\": {\n text: \"Whenever FL4K scores a Critical Hit, there is a chance their Action Skill Cooldown is reduced.\",\n ranks: 3,\n effect: (rank, level) => `Cooldown Reduction Chance: +${percent(rank, 10)}%\\nAction Skill Cooldown: -2 seconds`,\n },\n \"Ambush Predator\": {\n text: \"While there are no enemies nearby, FL4K's Weapon Handling and Critical Hit Damage are increased.\",\n ranks: 5,\n effect: (rank, level) => `Critical Hit Damage: +${percent(rank, 4)}%\\nHandling: +${getAmbushPredatorHandling(rank)}%`,\n },\n },\n \"3\": {\n \"Falconer's Feast\": {\n text: \"When FL4K's Rakk damage an enemy, a portion of FL4K's health is restored.\",\n type: SKILLS.AUGMENT_CHEVRON,\n ranks: 0,\n effect: (rank, level) => `Health Restored: 7% of Maximum Health`,\n },\n \"Two F4ng\": {\n text: \"FL4K has a chance to fire an extra projectile per shot.\",\n ranks: 5,\n effect: (rank, level) => `Extra Projectile Chance: +${percent(rank, 5)}%`,\n },\n \"Spiderant Scorcher\": {\n text: \"FL4K's Spiderant evolves into a Scorcher, occasionally dealing Incendiary Damage to all enemies nearby. While accompanied by the Scorcher, FL4K constantly regenerates health and deals increased Elemental Damage. When FL4K issues an Attack Command, the Scorcher will charge enemies.\",\n type: SKILLS.AUGMENT_DIAMOND,\n ranks: 0,\n effect: (rank, level) => `Health Regeneration: +1% of Max Health per second\\nElemental Damage: +10%`,\n },\n },\n \"4\": {\n \"Flock'N'Load\": {\n text: \"FL4K sends forward additional Rakk.\",\n type: SKILLS.AUGMENT_CHEVRON,\n ranks: 0,\n effect: (rank, level) => `Additional Rakk: +2`,\n },\n \"Big Game\": {\n text: \"FL4K's Hunter Skills become much more effective and have a longer duration.\",\n ranks: 3,\n effect: (rank, level) => `Hunter Skill Effects: +${percent(rank, 10)}%\\nHunter Skill Duration: +${Math.round(percent(rank, 33.333))}%`,\n },\n \"The Most Dangerous Game\": {\n text: \"Hunter Kill Skill. Whenever FL4K kills a Badass or stronger enemy, they gain increased Critical Hit Damage, Gun Damage, and Handling for a long time and their pet receives increased Damage for a long time. Additionally, they receive a cash reward from the Intergalactic Bureau of Bounty Hunting.\",\n ranks: 3,\n effect: (rank, level) => `Gun Damage: +${percent(rank, 3.333)}%\\nCritical Hit Damage: +${Math.round(percent(rank, 8.333))}%\\nHandling: +${getMostDangerousGameHandling(rank)}%\\nPet Damage: +${percent(rank, 9)}%\\nDuration: 120 seconds`,\n },\n \"Spiderant Countess\": {\n text: \"FL4K's Spiderant evolves into a Countess, which will cause FL4K to constantly regenerate health and gain Damage Resistance. When FL4K issues an Attack Command, the Countess will burrow underground and then emerge dealing Corrosive Damage in an area.\",\n type: SKILLS.AUGMENT_DIAMOND,\n ranks: 0,\n effect: (rank, level) => `Health Regeneration: +1% of Max Health per second\\nDamage Resistance: +5%`,\n },\n },\n \"5\": {\n \"Rakkcelerate\": {\n text: \"FL4K's Rakk have increased Cooldown Rate and gain an Additional Charge.\",\n type: SKILLS.AUGMENT_CHEVRON,\n ranks: 0,\n effect: (rank, level) => `Rakk Attack! Cooldown Rate: +20%\\nMaximum Rakk Attack! Charges: +1`,\n },\n \"Galactic Shadow\": {\n text: \"FL4K deals increased Critical Hit Damage, and enemies are less likely to attack them.\",\n ranks: 1,\n effect: (rank, level) => `Critical Hit Damage: +15%`,\n },\n \"Grim Harvest\": {\n text: \"FL4K gains increased Gun Damage and Action Skill Damage. FL4K's pet gains increased Damage.\",\n ranks: 5,\n effect: (rank, level) => `Gun Damage: +${percent(rank, 3)}%\\nAction Skill Damage: +${percent(rank, 5)}%\\nPet Damage: +${percent(rank, 7)}%`,\n },\n },\n \"6\": {\n \"Megavore\": {\n text: \"FL4K gains a chance to score a Critical Hit with weapons against any part of enemies.\",\n ranks: 1,\n effect: (rank, level) => `Critical Hit Chance: +20%`,\n },\n },\n },\n};\n\nexport default skills;\n","import VaultHunter from '@components/VaultHunter';\n\nimport skills from './skills.js';\n\nexport default function Gunner ({ path }) {\n return (\n \n );\n}\n","import VaultHunter from '@components/VaultHunter';\n\nimport skills from './skills.js';\n\nexport default function Operative ({ path }) {\n return (\n \n );\n}\n","export function getLevel (state) {\n return state.invested.reduce((total, current) => total + current, 2);\n};\n","import SKILLS from '@constants/skills';\n\nfunction percent (rank, unit) {\n return Math.round(rank * unit * 10) / 10;\n}\n\nfunction percentTwoDecimals (rank, unit) {\n return Math.round(rank * unit * 100) / 100;\n}\n\n// Matched Set Heat Per Shot\nfunction getMatchedSetHeatPerShot(rank) {\n switch (rank) {\n case 1:\n return 2;\n case 2:\n return 4;\n case 3:\n return 6;\n case 4:\n return 9;\n case 5:\n return 11;\n default:\n return 0;\n }\n}\n\n// Scrappy Handling\nfunction getScrappyHandling(rank) {\n switch (rank) {\n case 1:\n return 10.7;\n case 2:\n return 19.4;\n case 3:\n return 26.5;\n case 4:\n return 32.4;\n case 5:\n return 37.5;\n default:\n return 0;\n }\n}\n\n// Scrappy Weapon Swap Speed\nfunction getScrappyWeaponSwapSpeed(rank) {\n switch (rank) {\n case 1:\n return 16;\n case 2:\n return 27.5;\n case 3:\n return 36.3;\n case 4:\n return 43.2;\n case 5:\n return 48.7;\n default:\n return 0;\n }\n}\n\n// Scrappy Mode Switch Speed\nfunction getScrappyModeSwitchSpeed(rank) {\n switch (rank) {\n case 1:\n return 16;\n case 2:\n return 27.5;\n case 3:\n return 36.3;\n case 4:\n return 43.2;\n case 5:\n return 48.7;\n default:\n return 0;\n }\n}\n\n// Armored Infantry Damage Resistance\nfunction getArmoredInfantryDamageResistance(rank) {\n switch (rank) {\n case 1:\n return 3;\n case 2:\n return 6;\n case 3:\n return 8;\n case 4:\n return 11;\n case 5:\n return 13;\n default:\n return 0;\n }\n}\n\n// Vladof Ingenuity Shock Damage Resistance\nfunction getVladofIngenuityShockDamageResistance(rank) {\n switch (rank) {\n case 1:\n return 15;\n case 2:\n return 26;\n case 3:\n return 35;\n case 4:\n return 42;\n case 5:\n return 47;\n default:\n return 0;\n }\n}\n\n// Behind the Iron Curtain Shield Recharge Delay\nfunction getBehindTheIronCurtainShieldRechargeDelay(rank) {\n switch (rank) {\n case 1:\n return 7;\n case 2:\n return 14;\n case 3:\n return 19;\n default:\n return 0;\n }\n}\n\n/* eslint-disable quotes */\nconst skills = {\n \"Bottomless Mags\": {\n \"0\": {\n \"Minigun\": {\n text: \"The Minigun is capable of sustained rapid fire. Firing for long periods causes the Minigun to overheat, rendering it inoperable for a few seconds. Element: Non-Elemental.\",\n type: SKILLS.ACTION_SKILL,\n effect: (rank, level) => `Put a little lead in the air and see what falls over.`,\n },\n },\n \"1\": {\n \"Cloud of Lead\": {\n text: \"Occasionally, Moze's and Iron Bear's shots will deal additional Incendiary Damage and won't consume ammo.\",\n ranks: 5,\n effect: (rank, level) => `Effects are triggered every ${9 - rank} shots\\nBonus Incendiary Damage: +${percentTwoDecimals(rank, 2.25)}%`,\n },\n \"Dakka Bear\": {\n text: \"Adds a manned turret to the back of Iron Bear.\",\n ranks: 1,\n effect: (rank, level) => `Fasten your seatbelt, it's going to be a bumpy ride.`,\n },\n \"Matched Set\": {\n text: \"Moze's currently equipped weapon gains a stacking bonus to Magazine Size and Decreased Heat Per Shot for every piece of equipped gear that has a matching manufacturer.\",\n ranks: 5,\n effect: (rank, level) => `Magazine Size: +${percent(rank, 2)}% per matched gear\\nHeat Per Shot: -${getMatchedSetHeatPerShot(rank)}% per matched gear`,\n },\n },\n \"2\": {\n \"Let Off Some Steam\": {\n text: \"Minigun deals more damage as heat increases, and can be fired for longer before overheating.\",\n type: SKILLS.AUGMENT_CHEVRON,\n effect: (rank, level) => `Minigun Damage: Up to +80%\\nMinigun Heat Capacity: +35%`,\n },\n \"Stoke the Embers\": {\n text: \"Increases Moze and Iron Bear's Incendiary Damage.\",\n ranks: 3,\n effect: (rank, level) => `Incendiary Damage: +${percent(rank, 10)}%`,\n },\n \"Redistribution\": {\n text: \"After Moze scores a Critical Hit, she regenerates ammo for a few seconds.\",\n ranks: 1,\n effect: (rank, level) => `Ammo Regeneration: +5% of Magazine Size/sec\\nDuration: 3 seconds`,\n },\n \"Scrappy\": {\n text: \"While moving, Moze's Handling, Weapon Swap and Mode Switch Speed are increased.\",\n ranks: 5,\n effect: (rank, level) => `Handling: +${getScrappyHandling(rank)}%\\nWeapon Swap Speed: +${getScrappyWeaponSwapSpeed(rank)}%\\nMode Switch Speed: +${getScrappyModeSwitchSpeed(rank)}%`,\n },\n \"Salamander\": {\n text: \"The Salamander is a flamethrower that deals Incendiary Damage to enemies at close range. Though the Salamander has infinite ammo, it drains Fuel with use.\",\n type: SKILLS.AUGMENT_ACTION_SKILL,\n effect: (rank, level) => `Fire... for effect.`,\n },\n },\n \"3\": {\n \"General Winter\": {\n text: \"Minigun fires Cryo rounds which reduce Heat Gain and Fuel Drain, but deal reduced damage.\",\n type: SKILLS.AUGMENT_CHEVRON,\n effect: (rank, level) => `Minigun Element: Cryo\\nMinigun Fuel Drain: -40%\\nMinigun Damage: -30%\\nMinigun Cryo Efficiency: +20%`,\n },\n \"Rushin' Offensive\": {\n text: \"Moze can sprint and shoot at the same time.\",\n ranks: 1,\n effect: (rank, level) => `I don't want any messages saying \"I'm holding my position.\"`,\n },\n \"Scorching RPM's\": {\n text: \"Moze gains increased Fire Rate and Critical Hit Damage. Iron Bear gains increased Hard Point damage.\",\n ranks: 5,\n effect: (rank, level) => `Fire Rate: +${percent(rank, 3)}%\\nCritical Hit Damage: +${percent(rank, 4)}%\\nIron Bear Damage: +${percent(rank, 5)}%`,\n },\n \"Fuel Economy\": {\n text: \"Reduces Salamander's Fuel Drain. Additionally, Iron Bear's Movement Speed is increased after damaging an enemy with Salamander.\",\n type: SKILLS.AUGMENT_CHEVRON,\n effect: (rank, level) => `Salamander Fuel Drain: -25%\\nIron Bear Movement Speed: +25%\\nMovement Speed Duration: 3 seconds`,\n },\n },\n \"4\": {\n \"Exploding. Bullets.\": {\n text: \"Minigun fires Explosive Rounds that deal increased Splash Damage, but its Fire Rate is decreased.\",\n type: SKILLS.AUGMENT_CHEVRON,\n effect: (rank, level) => `Minigun Damage: +126%\\nMinigun Fire Rate: -75%`,\n },\n \"The Iron Bank\": {\n text: \"Increases Moze's Magazine Size.\",\n ranks: 5,\n effect: (rank, level) => `Magazine Size: +${percent(rank, 7)}%`,\n },\n \"Specialist Bear\": {\n text: \"Equipping two of the same Weapons on Iron Bear increases the damage they deal.\",\n ranks: 1,\n effect: (rank, level) => `Iron Bear Damage: +${percent(rank, 25)}%`,\n },\n \"Chemical Warfare\": {\n text: \"Salamander now deals Corrosive Damage. Additionally, Salamander's Melt Damage is increased.\",\n type: SKILLS.AUGMENT_CHEVRON,\n effect: (rank, level) => `Salamander Element: Corrosive\\nSalamander Melt Damage: +50%`,\n },\n },\n \"5\": {\n \"Some for the Road\": {\n text: \"Moze gains infinite ammo for a few seconds after exiting Iron Bear.\",\n ranks: 1,\n effect: (rank, level) => `Duration: 5 seconds`,\n },\n \"Click, Click...\": {\n text: \"Moze gains increased Gun Damage as her magazine empties. The less ammo there is remaining, the greater the increase. If Moze has a COV gun equipped, she gains Gun Damage as her gun's heat increases.\",\n ranks: 3,\n effect: (rank, level) => `Gun Damage: Up to +${percent(rank, 12)}%`,\n },\n \"Molten Roar\": {\n text: \"The Salamander burst-fires 3 projectiles with increased Fuel Drain, the first of which leaves a large Incendiary area.\",\n type: SKILLS.AUGMENT_CHEVRON,\n effect: (rank, level) => `Fuel Drain: +25%`,\n },\n },\n \"6\": {\n \"Forge\": {\n text: \"Moze constantly regenerates ammo for her currently equipped weapon.\",\n ranks: 1,\n effect: (rank, level) => `Ammo Regeneration: +5% of Magazine Size/sec`,\n },\n },\n },\n \"Demolition Woman\": {\n \"0\": {\n \"V-35 Grenade Launcher\": {\n text: \"The V-35 is a semi-automatic grenade launcher. Its grenades are not affected by Moze's equipped grenade mod. Element: Non-Elemental.\",\n type: SKILLS.ACTION_SKILL,\n ranks: 0,\n effect: (rank, level) => `For when the V-34 just isn't enough`,\n },\n },\n \"1\": {\n \"Fire in the Skag Den\": {\n text: \"Whenever Moze deals Splash Damage, she deals bonus Incendiary Damage.\",\n ranks: 5,\n effect: (rank, level) => `Bonus Incendiary Damage: +${percent(rank, 3)}% of damage dealt`,\n },\n \"Deadlines\": {\n text: \"Firing Iron Bear Weapons drains less Fuel. Killing an enemy while Iron Bear is active increases Fuel. This skill has diminishing returns.\",\n ranks: 3,\n effect: (rank, level) => `Fuel Drain: -${percent(rank, 10)}%\\nFuel Returned: ${percent(rank, 2)}% of Maximum Fuel`,\n },\n \"Grizzled\": {\n text: \"Kill Skill. Killing an enemy reduces Moze's remaining Action Skill Cooldown Time. This skill has diminishing returns.\",\n ranks: 5,\n effect: (rank, level) => `Iron Bear Cooldown: -${rank * 1} seconds`,\n },\n },\n \"2\": {\n \"Shaped Charge\": {\n text: \"Direct hits with the V-35 deal increased damage.\",\n type: SKILLS.AUGMENT_CHEVRON,\n effect: (rank, level) => `V-35 Direct Hit Damage: +35%`,\n },\n \"Means of Destruction\": {\n text: \"Whenever Moze deals Splash Damage, there is a chance to add ammo to her currently equipped weapon's magazine, with a smaller chance to return a grenade.\",\n ranks: 3,\n effect: (rank, level) => `Ammo Chance: +${percent(rank, 3.333)}%\\nGrenade Chance: +${percent(rank, 2)}%\\nCooldown: 0.3 seconds`,\n },\n \"Torgue Cross-Promotion\": {\n text: \"All Splash Damage dealt by Moze has a chance to double in size.\",\n ranks: 5,\n effect: (rank, level) => `Chance to Double Splash Radius: +${percent(rank, 3)}%`,\n },\n \"Stainless Steel Bear\": {\n text: \"Iron Bear gains additional armor and increased Maximum Fuel.\",\n ranks: 5,\n effect: (rank, level) => `Iron Bear Maximum Health: +${percent(rank, 6)}%\\nMaximum Fuel: +${percent(rank, 4)}%`,\n },\n \"Vanquisher Rocket Pod\": {\n text: \"The Vanquisher Rocket Pod is a rocket launcher capable of rapid-firing volleys of unguided explosive rockets. Element: Non-Elemental.\",\n type: SKILLS.AUGMENT_ACTION_SKILL,\n effect: (rank, level) => `If you want guidance, get a sherpa. If you want explosions, get a Vladof.`,\n },\n },\n \"3\": {\n \"Musical Chairs\": {\n text: \"Occasionally, the V-35 fires a Singularity Grenade that pulls in nearby enemies before exploding.\",\n type: SKILLS.AUGMENT_CHEVRON,\n effect: (rank, level) => `V-35 Singularity: Every 7th grenade`,\n },\n \"Pull the Holy Pin\": {\n text: \"Moze's grenades have a chance to score a Critical Hit, dealing greatly increased damage. Sources of Critical Hit Damage do not affect grenade Critical Hits.\",\n ranks: 3,\n effect: (rank, level) => `Grenade Critical Hit Chance: +${percent(rank, 10)}%`,\n },\n \"Auto Bear\": {\n text: \"After Moze exits Iron Bear, it will remain deployed in place for a short time. While Auto Bear remains active, it will target and attack nearby enemies until its duration ends, then it will charge at an enemy and self-destruct.\",\n ranks: 1,\n effect: (rank, level) => `Auto Bear Duration: 15 seconds`,\n },\n \"Active Tracking\": {\n text: \"The Vanquisher Rocket Pod now fires homing rockets and has increased Reload Speed. Hold down [Action Skill key] and aim at enemies to designate up to 6 targets. Releasing Fire Button launches a volley of homing rockets at the designated targets.\",\n type: SKILLS.AUGMENT_CHEVRON,\n effect: (rank, level) => `Vanquisher Reload Speed: +25%`,\n },\n },\n \"4\": {\n \"Lock and Speedload\": {\n text: \"The V-35's Reload Speed is greatly increased and it now fires a 5-round burst.\",\n type: SKILLS.AUGMENT_CHEVRON,\n effect: (rank, level) => `V-35 Reload Speed: +25%`,\n },\n \"Vampyr\": {\n text: \"Whenever Moze damages an enemy with a thrown grenade, for every enemy hit, she restores a portion of her missing health. Iron Bear restores health for every enemy it deals Splash Damage to.\",\n ranks: 5,\n effect: (rank, level) => `Moze Health Restored: ${percent(rank, 4)}% of Missing Health per enemy hit\\nIron Bear Health Restored: ${percent(rank, 2)}% of Missing Health per enemy hit`,\n },\n \"Why Can't I Carry All These Grenades\": {\n text: \"Increases Moze's grenade carrying capacity.\",\n ranks: 3,\n effect: (rank, level) => `Grenade Capacity: +${rank}`,\n },\n \"Target Softening\": {\n text: \"The Vanquisher Rocket Pod deals greatly reduced damage per rocket, but fires in a 6-rocket spread. Additionally, enemies hit by Vanquisher Rocket Pod rockets take increased damage from all sources.\",\n type: SKILLS.AUGMENT_CHEVRON,\n effect: (rank, level) => `Vanquisher Damage: -74%\\nEnemy Damage Taken: +15%`,\n },\n },\n \"5\": {\n \"To the Last\": {\n text: \"Moze gains the ability to throw grenades while in Fight For Your Life. If she threw a grenade before gaining a Second Wind, a grenade is refunded.\",\n ranks: 1,\n effect: (rank, level) => `The greatest enemy is one with nothing to lose... and a grenade.`,\n },\n \"Explosive Punctuation\": {\n text: \"When Moze deals Splash Damage, her Action Skill Cooldown Rate is briefly increased.\",\n ranks: 5,\n effect: (rank, level) => `Action Skill Cooldown Rate: +${percent(rank, 5)}%`,\n },\n \"Hammerdown Protocol\": {\n text: \"Instead of a volley of conventional rockets, the Vanquisher Rocket Pod launches a single rocket with a nuclear warhead, dealing massive Radiation Damage.\",\n type: SKILLS.AUGMENT_CHEVRON,\n effect: (rank, level) => `Vanquisher Element: Raditation\\nVanquisher Damage: +380%\\nVanquisher Magazine Size: 1`,\n },\n },\n \"6\": {\n \"Short Fuse\": {\n text: \"Whenever Moze deals Gun Damage, there is a chance of a secondary explosion centered on the target.\",\n ranks: 1,\n effect: (rank, level) => `Secondary Explosion Chance: 20%\\nSecondary Explosion Damage: 75% of Gun Damage`,\n },\n },\n },\n \"Shield of Retribution\": {\n \"0\": {\n \"Railgun\": {\n text: \"The Railgun fires electrified high-velocity projectiles that deal Shock Damage.\",\n type: SKILLS.ACTION_SKILL,\n effect: (rank, level) => `It's like a bullet, only bigger. And faster. And wrapped in lightning.`,\n },\n },\n \"1\": {\n \"Selfless Vengeance\": {\n text: \"Whenever Moze reloads, she loses a small portion of her health and grants additional Incendiary Damage to her and her allies' rounds for a few seconds.\",\n ranks: 5,\n effect: (rank, level) => `Health Removed: ${percent(rank, 1)}% of Current Health\\nTeam Bonus Incendiary Damage: +${percent(rank, 3)}% of dmg dealt\\nDuration: 5 seconds`,\n },\n \"Security Bear\": {\n text: \"Iron Bear gains a bubble shield that reduces damage taken. The shield deactivates if it sustains too much damage, reactivating after a short cooldown.\",\n ranks: 1,\n effect: (rank, level) => `50% of Iron Bear Maximum Health added as Shields\\nBubble Recharge Delay: 5 seconds`,\n },\n \"Armored Infantry\": {\n text: \"While Moze's shields are active, she gains Damage Resistance and increased Gun Damage.\",\n ranks: 5,\n effect: (rank, level) => `Damage Resistance: +${getArmoredInfantryDamageResistance(rank)}%\\nGun Damage: +${percent(rank, 3)}%`,\n },\n },\n \"2\": {\n \"Hell on Rails\": {\n text: \"Railgun now fires superheated rounds that deal Incendiary Damge, but have increased Fuel Drain per shot.\",\n type: SKILLS.AUGMENT_CHEVRON,\n effect: (rank, level) => `Railgun Element: Incendiary\\nRailgun Fuel Drain: +8%`,\n },\n \"Drowning in Brass\": {\n text: \"Kill Skill. Killing an enemy grants Moze a stack of Drowning in Brass. For each stack of Drowning in Brass, Moze's Fire Rate is reduced, but Gun Damage is increased for both her and her allies.\",\n ranks: 5,\n effect: (rank, level) => `Moze Fire Rate: -${percent(rank, 0.5)}% per stack\\nTeam Gun Damage: +${percent(rank, 4)}% per stack\\nMaximum Stacks: 3\\nDuration: 15 seconds`,\n },\n \"Thin Red Line\": {\n text: \"A portion of Moze's health is Reserved and cannot be restored, but her Maximum Shield is increased by the same amount.\",\n ranks: 3,\n effect: (rank, level) => `${percent(rank, 20)}% Max Health Reserved and Added to Max Shield`,\n },\n \"Vladof Ingenuity\": {\n text: \"Moze's Maximum Shield is increased, and she gains resistance to Shock Damage.\",\n ranks: 5,\n effect: (rank, level) => `Maximum Shield: +${percent(rank, 6)}%\\nShock Damage Resistance: +${getVladofIngenuityShockDamageResistance(rank)}%`,\n },\n \"Bear Fist\": {\n text: \"The Bear Fist is a pneumatic-driven fist that deals massive damage to a single target at close range. Element: Non-Elemental.\",\n type: SKILLS.AUGMENT_ACTION_SKILL,\n effect: (rank, level) => `Vladof supports the right to bear armored bear arms.`,\n },\n },\n \"3\": {\n \"Capacitive Armature\": {\n text: \"When Railgun hits an enemy, it chains to nearby enemies, dealing reduced Shock Damage to more targets.\",\n type: SKILLS.AUGMENT_CHEVRON,\n effect: (rank, level) => `Splinter Damage: 25% of damage dealt`,\n },\n \"Full Can of Whoop-Ass\": {\n text: \"Entering Iron Bear causes Moze's and her allies' shields to immediately begin recharging at an increased Shield Recharge Rate.\",\n ranks: 1,\n effect: (rank, level) => `Team Shield Recharge Rate: +25%`,\n },\n \"Experimental Munitions\": {\n text: \"Whenever Moze and Iron Bear score a Critical Hit, they deal bonus Incendiary Damage.\",\n ranks: 1,\n effect: (rank, level) => `Bonus Incendiary Damage: +${percent(rank, 10)}% of damage dealt`,\n },\n \"Wild Swing\": {\n text: \"Whenever Bear Fist hits an enemy, it deals random Bonus Elemental Damage to that enemy and all enemies nearby.\",\n type: SKILLS.AUGMENT_CHEVRON,\n effect: (rank, level) => `Bear Fist Bonus Elemental Damage: +35% of damage dealt`,\n },\n },\n \"4\": {\n \"Corrosive Sabot Round\": {\n text: \"Railgun now fires a specialty round that deals reduced damage and explodes after a short delay. Railgun shots have reduced Fuel Drain and the Magazine Size is increased.\",\n type: SKILLS.AUGMENT_CHEVRON,\n effect: (rank, level) => `Railgun Element:Corrosive\\nRailgun Damage: -33%\\nRailgun Fuel Drain: -33%\\nRailgun Magazine Size: +2`,\n },\n \"Behind the Iron Curtain\": {\n text: \"Moze's Shield Recharge Delay is reduced, and her Shield Recharge Rate is increased.\",\n ranks: 3,\n effect: (rank, level) => `Shield Recharge Delay: -${getBehindTheIronCurtainShieldRechargeDelay(rank)}%\\nShield Recharge Rate: +${percent(rank, 7)}%`,\n },\n \"Desperate Measures\": {\n text: \"Moze's Gun Damage and Iron Bear's Damage is increased depending on how low their health is. The lower their health, the greater the increase.\",\n ranks: 3,\n effect: (rank, level) => `Damage: Up to +${Math.round(percent(rank, 16.5))}%`,\n },\n \"Close the Distance\": {\n text: \"Instead of punching, Iron Bear now launches its Bear Fist forward and grabs enemies at greatly increased range, dealing Shock Damage and pulling them back to Iron Bear.\",\n type: SKILLS.AUGMENT_CHEVRON,\n effect: (rank, level) => `Step into my office.`,\n },\n },\n \"5\": {\n \"Phalanx Doctrine\": {\n text: \"Kill Skill. After killing an enemy, Moze gains a stack of Phalanx Doctrine. For every stack of Phalanx Doctrine, Moze's Maximum Shield and Gun Damage are increased. Each stack lasts 30 seconds. There is no stack limit.\",\n ranks: 5,\n effect: (rank, level) => `Maximum Shield: +${percent(rank, 3)}% per stack\\nGun Damage: +${percent(rank, 2)}% per stack\\nDuration: 30 seconds`,\n },\n \"Force Feedback\": {\n text: \"Whenever Moze scores a Critical Kill, her shields immediately begin recharging.\",\n ranks: 1,\n effect: (rank, level) => `Just click on their heads.`,\n },\n \"Shockhammer\": {\n text: \"Bear Fist is now capable of sustained rapid fire punching. Additionally, Bear Fist has reduced Fuel Drain and deals Bonus Shock Damage with each hit.\",\n type: SKILLS.AUGMENT_CHEVRON,\n effect: (rank, level) => `Bear Fist Bonus Shock Damage: +19% of damage dealt\\nBear Fist Fuel Drain: -40%`,\n },\n },\n \"6\": {\n \"Tenacious Defense\": {\n text: \"Whenever Moze's shield is fully depleted, she instantly restores a portion of her shield, and her Gun Damage is increased for a short time. This skill can only trigger after Moze's shields have fully recharged.\",\n ranks: 1,\n effect: (rank, level) => `Shields Restored: 40% of Maximum Shield\\nGun Damage: +30%\\nDuration: 30 seconds`,\n },\n },\n },\n};\n\nexport default skills;\n","!function(){\"use strict\";function e(e,t){var n,o,r,i,l=W;for(i=arguments.length;i-- >2;)P.push(arguments[i]);t&&null!=t.children&&(P.length||P.push(t.children),delete t.children);while(P.length)if((o=P.pop())&&void 0!==o.pop)for(i=o.length;i--;)P.push(o[i]);else\"boolean\"==typeof o&&(o=null),(r=\"function\"!=typeof e)&&(null==o?o=\"\":\"number\"==typeof o?o+=\"\":\"string\"!=typeof o&&(r=!1)),r&&n?l[l.length-1]+=o:l===W?l=[o]:l.push(o),n=r;var a=new T;return a.nodeName=e,a.children=l,a.attributes=null==t?void 0:t,a.key=null==t?void 0:t.key,void 0!==M.vnode&&M.vnode(a),a}function t(e,t){for(var n in t)e[n]=t[n];return e}function n(e,t){null!=e&&(\"function\"==typeof e?e(t):e.current=t)}function o(n,o){return e(n.nodeName,t(t({},n.attributes),o),arguments.length>2?[].slice.call(arguments,2):n.children)}function r(e){!e.__d&&(e.__d=!0)&&1==V.push(e)&&(M.debounceRendering||D)(i)}function i(){var e;while(e=V.pop())e.__d&&x(e)}function l(e,t,n){return\"string\"==typeof t||\"number\"==typeof t?void 0!==e.splitText:\"string\"==typeof t.nodeName?!e._componentConstructor&&a(e,t.nodeName):n||e._componentConstructor===t.nodeName}function a(e,t){return e.__n===t||e.nodeName.toLowerCase()===t.toLowerCase()}function u(e){var n=t({},e.attributes);n.children=e.children;var o=e.nodeName.defaultProps;if(void 0!==o)for(var r in o)void 0===n[r]&&(n[r]=o[r]);return n}function c(e,t){var n=t?document.createElementNS(\"http://www.w3.org/2000/svg\",e):document.createElement(e);return n.__n=e,n}function p(e){var t=e.parentNode;t&&t.removeChild(e)}function s(e,t,o,r,i){if(\"className\"===t&&(t=\"class\"),\"key\"===t);else if(\"ref\"===t)n(o,null),n(r,e);else if(\"class\"!==t||i)if(\"style\"===t){if(r&&\"string\"!=typeof r&&\"string\"!=typeof o||(e.style.cssText=r||\"\"),r&&\"object\"==typeof r){if(\"string\"!=typeof o)for(var l in o)l in r||(e.style[l]=\"\");for(var l in r)e.style[l]=\"number\"==typeof r[l]&&!1===E.test(l)?r[l]+\"px\":r[l]}}else if(\"dangerouslySetInnerHTML\"===t)r&&(e.innerHTML=r.__html||\"\");else if(\"o\"==t[0]&&\"n\"==t[1]){var a=t!==(t=t.replace(/Capture$/,\"\"));t=t.toLowerCase().substring(2),r?o||e.addEventListener(t,_,a):e.removeEventListener(t,_,a),(e.__l||(e.__l={}))[t]=r}else if(\"list\"!==t&&\"type\"!==t&&!i&&t in e){try{e[t]=null==r?\"\":r}catch(e){}null!=r&&!1!==r||\"spellcheck\"==t||e.removeAttribute(t)}else{var u=i&&t!==(t=t.replace(/^xlink:?/,\"\"));null==r||!1===r?u?e.removeAttributeNS(\"http://www.w3.org/1999/xlink\",t.toLowerCase()):e.removeAttribute(t):\"function\"!=typeof r&&(u?e.setAttributeNS(\"http://www.w3.org/1999/xlink\",t.toLowerCase(),r):e.setAttribute(t,r))}else e.className=r||\"\"}function _(e){return this.__l[e.type](M.event&&M.event(e)||e)}function f(){var e;while(e=A.shift())M.afterMount&&M.afterMount(e),e.componentDidMount&&e.componentDidMount()}function d(e,t,n,o,r,i){H++||(R=null!=r&&void 0!==r.ownerSVGElement,B=null!=e&&!(\"__preactattr_\"in e));var l=h(e,t,n,o,i);return r&&l.parentNode!==r&&r.appendChild(l),--H||(B=!1,i||f()),l}function h(e,t,n,o,r){var i=e,l=R;if(null!=t&&\"boolean\"!=typeof t||(t=\"\"),\"string\"==typeof t||\"number\"==typeof t)return e&&void 0!==e.splitText&&e.parentNode&&(!e._component||r)?e.nodeValue!=t&&(e.nodeValue=t):(i=document.createTextNode(t),e&&(e.parentNode&&e.parentNode.replaceChild(i,e),v(e,!0))),i.__preactattr_=!0,i;var u=t.nodeName;if(\"function\"==typeof u)return N(e,t,n,o);if(R=\"svg\"===u||\"foreignObject\"!==u&&R,u+=\"\",(!e||!a(e,u))&&(i=c(u,R),e)){while(e.firstChild)i.appendChild(e.firstChild);e.parentNode&&e.parentNode.replaceChild(i,e),v(e,!0)}var p=i.firstChild,s=i.__preactattr_,_=t.children;if(null==s){s=i.__preactattr_={};for(var f=i.attributes,d=f.length;d--;)s[f[d].name]=f[d].value}return!B&&_&&1===_.length&&\"string\"==typeof _[0]&&null!=p&&void 0!==p.splitText&&null==p.nextSibling?p.nodeValue!=_[0]&&(p.nodeValue=_[0]):(_&&_.length||null!=p)&&m(i,_,n,o,B||null!=s.dangerouslySetInnerHTML),y(i,t.attributes,s),R=l,i}function m(e,t,n,o,r){var i,a,u,c,s,_=e.childNodes,f=[],d={},m=0,b=0,y=_.length,g=0,w=t?t.length:0;if(0!==y)for(var C=0;C skill.ranks) { return false; }\n tierTotal += skill.invested || 0;\n };\n if (tierTotal > 0 && treeTotal + 5 < tierIndex * 5) { return false; }\n treeTotal += tierTotal;\n tierIndex += 1;\n };\n treeTotals[treeIndex] = treeTotal;\n totalSpent += treeTotal;\n treeIndex += 1;\n };\n if (totalSpent > (50 - 3) + 11 + 11) { return false; }\n return treeTotals;\n}\n","import deepmerge from 'deepmerge';\nimport investmentValidator from './investmentValidator';\nimport { setHash } from './hashHandler';\n\nexport default function reducer (state, action) {\n switch (action.type) {\n case 'skillChange':\n var newSkills = deepmerge(state.skills, {\n [action.treeName]: {\n [action.tierIndex + '']: {\n [action.skillName]: {\n invested: action.newValue,\n }\n }\n }\n });\n const skillChangeTotals = investmentValidator(newSkills);\n if (skillChangeTotals) {\n setHash(newSkills);\n return {\n ...state,\n invested: skillChangeTotals,\n skills: newSkills,\n };\n } else {\n return state;\n }\n case 'loadSkills':\n const loadSkillsTotals = investmentValidator(action.skills);\n if (loadSkillsTotals) {\n return {\n ...state,\n invested: loadSkillsTotals,\n skills: deepmerge(state.skills, action.skills),\n };\n } else {\n return state;\n }\n }\n}\n","// extracted by mini-css-extract-plugin\nmodule.exports = {\"footer\":\"Eq4mJ\",\"heart\":\"_37Gl6\",\"moveHeart\":\"_34mPq\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"splash\":\"_2_d3x\",\"wrapper\":\"vMurv\",\"link\":\"_3lx8i\",\"name\":\"_1SiOU\",\"job\":\"_3chgr\",\"disclaimer\":\"_3RIFV\"};","(function (global, factory) {\n\ttypeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :\n\ttypeof define === 'function' && define.amd ? define(factory) :\n\t(global.deepmerge = factory());\n}(this, (function () { 'use strict';\n\nvar isMergeableObject = function isMergeableObject(value) {\n\treturn isNonNullObject(value)\n\t\t&& !isSpecial(value)\n};\n\nfunction isNonNullObject(value) {\n\treturn !!value && typeof value === 'object'\n}\n\nfunction isSpecial(value) {\n\tvar stringValue = Object.prototype.toString.call(value);\n\n\treturn stringValue === '[object RegExp]'\n\t\t|| stringValue === '[object Date]'\n\t\t|| isReactElement(value)\n}\n\n// see https://github.com/facebook/react/blob/b5ac963fb791d1298e7f396236383bc955f916c1/src/isomorphic/classic/element/ReactElement.js#L21-L25\nvar canUseSymbol = typeof Symbol === 'function' && Symbol.for;\nvar REACT_ELEMENT_TYPE = canUseSymbol ? Symbol.for('react.element') : 0xeac7;\n\nfunction isReactElement(value) {\n\treturn value.$$typeof === REACT_ELEMENT_TYPE\n}\n\nfunction emptyTarget(val) {\n\treturn Array.isArray(val) ? [] : {}\n}\n\nfunction cloneUnlessOtherwiseSpecified(value, options) {\n\treturn (options.clone !== false && options.isMergeableObject(value))\n\t\t? deepmerge(emptyTarget(value), value, options)\n\t\t: value\n}\n\nfunction defaultArrayMerge(target, source, options) {\n\treturn target.concat(source).map(function(element) {\n\t\treturn cloneUnlessOtherwiseSpecified(element, options)\n\t})\n}\n\nfunction getMergeFunction(key, options) {\n\tif (!options.customMerge) {\n\t\treturn deepmerge\n\t}\n\tvar customMerge = options.customMerge(key);\n\treturn typeof customMerge === 'function' ? customMerge : deepmerge\n}\n\nfunction mergeObject(target, source, options) {\n\tvar destination = {};\n\tif (options.isMergeableObject(target)) {\n\t\tObject.keys(target).forEach(function(key) {\n\t\t\tdestination[key] = cloneUnlessOtherwiseSpecified(target[key], options);\n\t\t});\n\t}\n\tObject.keys(source).forEach(function(key) {\n\t\tif (!options.isMergeableObject(source[key]) || !target[key]) {\n\t\t\tdestination[key] = cloneUnlessOtherwiseSpecified(source[key], options);\n\t\t} else {\n\t\t\tdestination[key] = getMergeFunction(key, options)(target[key], source[key], options);\n\t\t}\n\t});\n\treturn destination\n}\n\nfunction deepmerge(target, source, options) {\n\toptions = options || {};\n\toptions.arrayMerge = options.arrayMerge || defaultArrayMerge;\n\toptions.isMergeableObject = options.isMergeableObject || isMergeableObject;\n\n\tvar sourceIsArray = Array.isArray(source);\n\tvar targetIsArray = Array.isArray(target);\n\tvar sourceAndTargetTypesMatch = sourceIsArray === targetIsArray;\n\n\tif (!sourceAndTargetTypesMatch) {\n\t\treturn cloneUnlessOtherwiseSpecified(source, options)\n\t} else if (sourceIsArray) {\n\t\treturn options.arrayMerge(target, source, options)\n\t} else {\n\t\treturn mergeObject(target, source, options)\n\t}\n}\n\ndeepmerge.all = function deepmergeAll(array, options) {\n\tif (!Array.isArray(array)) {\n\t\tthrow new Error('first argument should be an array')\n\t}\n\n\treturn array.reduce(function(prev, next) {\n\t\treturn deepmerge(prev, next, options)\n\t}, {})\n};\n\nvar deepmerge_1 = deepmerge;\n\nreturn deepmerge_1;\n\n})));\n","import SKILLS from '@constants/skills';\nimport style from './index.css';\n\nfunction getInitials (string) {\n const numWords = (string.match(/\\s/g) || []).length + 1;\n switch (numWords) {\n case 1:\n return string.slice(0, 3);\n case 2:\n return (string.match(/^\\w{1,2}|\\s\\w{1,2}/g) || []).join('').replace(/\\s/g, '');\n default:\n return (string.match(/^\\w|\\s\\w/g) || []).join('').replace(/\\s/g, '');\n }\n}\n\nexport default function Skill ({\n name = '?',\n text = 'Long description',\n ranks = 0,\n invested = 0,\n tier = 0,\n level = 1,\n effect = (rank, level) => `Rank ${rank} effect`,\n type = null,\n enabled = true,\n image = null,\n onChange = (oldValue, newValue) => null,\n}) {\n const isAugment = [\n SKILLS.AUGMENT_CHEVRON,\n SKILLS.AUGMENT_DIAMOND,\n SKILLS.AUGMENT_ACTION_SKILL,\n ].includes(type);\n let shapeStyle = null;\n if (type === SKILLS.ACTION_SKILL) { shapeStyle = style.actionSkill; }\n if (type === SKILLS.AUGMENT_CHEVRON) { shapeStyle = style.chevron; }\n if (type === SKILLS.AUGMENT_DIAMOND) { shapeStyle = style.diamond; }\n if (type === SKILLS.AUGMENT_ACTION_SKILL) { shapeStyle = style.actionSkill; }\n function clickListener (event) {\n var newValue;\n if (event.type === 'click') {\n newValue = Math.min(invested + 1, ranks);\n } else { // (event.type === 'contextmenu')\n newValue = Math.max(invested - 1, 0);\n }\n if (enabled && invested !== newValue) {\n onChange(invested, newValue);\n }\n event.preventDefault();\n return false;\n }\n return (\n 0) ? style.usable : '',\n ].join(' ')}\n onClick={clickListener}\n onContextMenu={clickListener}\n >\n
{getInitials(name)}
\n { enabled && ranks > 0 &&
{invested}/{ranks}
}\n
\n

{name}

\n {text}\n { invested > 0 &&\n
\n Current Effect:
\n {effect(invested, level)}\n
\n }\n { type !== null &&\n
\n {effect(1, level)}\n
\n }\n { type == null && invested < ranks &&\n
\n Next Rank:
\n {effect(invested + 1, level)}\n
\n }\n
\n \n );\n}\n","import VaultHunter from '@components/VaultHunter';\n\nimport skills from './skills.js';\n\nexport default function Siren ({ path }) {\n return (\n \n );\n}\n","export function setHash (skillsState) {\n const hashparts = [];\n for (let tree of Object.values(skillsState)) {\n for (let tier of Object.values(tree)) {\n for (let skill of Object.values(tier)) {\n if (skill.type == null) {\n hashparts.push(skill.invested || 0);\n }\n };\n };\n };\n const url = window.location.href.split('#')[0] + '#' + hashparts.join('');\n window.location.replace(url);\n};\n\nexport function getHash (skillsState) {\n const hash = window.location.href.split('#')[1] || '';\n const hashparts = hash.match(/./g) || [];\n const skills = JSON.parse(JSON.stringify(skillsState));\n for (let tree of Object.keys(skills)) {\n for (let tier of Object.keys(skills[tree])) {\n for (let skill of Object.keys(skills[tree][tier])) {\n if (skills[tree][tier][skill].type == null) {\n skills[tree][tier][skill] = { invested: parseInt(hashparts.shift() || 0) };\n } else {\n skills[tree][tier][skill] = {};\n }\n };\n };\n };\n return skills;\n};\n","import VaultHunter from '@components/VaultHunter';\n\nimport skills from './skills.js';\n\nexport default function Beastmaster ({ path }) {\n return (\n \n );\n}\n","import SKILLS from '@constants/skills';\n\nfunction percent (rank, unit) {\n return Math.round(rank * unit * 10) / 10;\n}\nfunction flat (rank, level, unit) {\n return Math.floor(rank * unit);\n}\n\n// Stiff Upper Lip Damage Resistance\nfunction getStiffUpperLipDamageResistance(rank) {\n switch (rank) {\n case 1:\n return 6;\n case 2:\n return 12;\n case 3:\n return 16;\n default:\n return 0;\n }\n}\n\n// Nerves of Steel Handling\nfunction getNervesOfSteelHandling(rank) {\n switch (rank) {\n case 1:\n return 2.4;\n case 2:\n return 4.8;\n case 3:\n return 7;\n default:\n return 0;\n }\n}\n\n// Cold Bore Weapon Swap Speed\nfunction getColdBoreWeaponSwapSpeed(rank) {\n switch (rank) {\n case 1:\n return 13;\n case 2:\n return 23;\n case 3:\n return 31;\n case 4:\n return 38;\n case 5:\n return 43;\n default:\n return 0;\n }\n}\n\n// Cool Hand Passive Reload Speed\nfunction getCoolHandPassiveReloadSpeed(rank) {\n switch (rank) {\n case 1:\n return 2.9;\n case 2:\n return 5.7;\n case 3:\n return 8.3;\n case 4:\n return 10.7;\n case 5:\n return 13;\n default:\n return 0;\n }\n}\n\n// Cool Hand After Kill Reload Speed\nfunction getCoolHandAfterKillReloadSpeed(rank) {\n switch (rank) {\n case 1:\n return 4;\n case 2:\n return 7;\n case 3:\n return 11;\n case 4:\n return 14;\n case 5:\n return 17;\n default:\n return 0;\n }\n}\n\n/* eslint-disable quotes */\nconst skills = {\n \"Under Cover\": {\n \"0\": {\n \"Barrier\": {\n text: \"Drop a deployable Barrier that blocks incoming projectiles. Zane and his allies can shoot through the Barrier, dealing increased Gun Damage. Pressing [Action Skill key] while Barrier is active picks up and holds the Barrier, but the size and bonuses are decreased.\",\n effect: (rank, level) => `Duration: 14 seconds\\nCooldown: 24 seconds\\nGun Damage Amp: +25%`,\n type: SKILLS.ACTION_SKILL,\n ranks: 0,\n },\n },\n \"1\": {\n \"Adrenaline\": {\n text: \"Zane gains increased Action Skill Cooldown Rate. This bonus is based on the amount of shield he has. The more percent full, the greater the bonus.\",\n ranks: 5,\n effect: (rank, level) => `Action Skill Cooldown Rate: Up to +${percent(rank, 7)}%`,\n },\n \"Hearty Stock\": {\n text: \"Zane gains increased Maximum Shield Capacity.\",\n ranks: 3,\n effect: (rank, level) => `Maximum Shield: +${percent(rank, 10)}%`,\n },\n \"Ready for Action\": {\n text: \"Zane gains improved Shield Recharge Rate and Shield Recharge Delay.\",\n ranks: 5,\n effect: (rank, level) => `Shield Recharge Delay: -${percent(rank, 7)}%\\nShield Recharge Rate: +${percent(rank, 6)}%`,\n },\n },\n \"2\": {\n \"Charged Relay\": {\n text: \"Whenever Zane or an ally touches the Barrier, they gain increased Movement Speed and Reload Speed for a few seconds.\",\n ranks: 0,\n effect: (rank, level) => `Reload Speed: +20%\\nMovement Speed: +11%\\nDuration: 8 seconds`,\n type: SKILLS.AUGMENT_CHEVRON,\n },\n \"Brainfreeze\": {\n text: \"Whenever Zane scores a Critical Hit on an enemy, there is a chance they will be Slowed. This effect stacks until the target is Frozen.\",\n ranks: 5,\n effect: (rank, level) => `Slow Chance: ${percent(rank, 4)}%`,\n },\n \"Stiff Upper Lip\": {\n text: \"Whenever Zane is damaged, he gains Damage Resistance against that damage type.\",\n ranks: 3,\n effect: (rank, level) => `Damage Resistance: +${getStiffUpperLipDamageResistance(rank)}%`,\n },\n \"Rise to the Occasion\": {\n text: \"Zane gains Health Regeneration. The lower his shield is, the higher the bonus.\",\n ranks: 5,\n effect: (rank, level) => `Health Regeneration: Up to +${percent(rank, 1)}% of Max Health/sec`,\n },\n },\n \"3\": {\n \"Nanites or Some Shite\": {\n text: \"Zane and his allies gain Health Regeneration, increased Reload Speed, and greatly improved Shield Recharge Delay while near his Barrier. The lower their health, the more health is regenerated.\",\n ranks: 0,\n effect: (rank, level) => `Team Health Regen: Up to +4% of Max Health/sec\\nTeam Shield Recharge Delay: -33%\\nTeam Reload Speed: +11%`,\n type: SKILLS.AUGMENT_CHEVRON,\n },\n \"Confident Competence\": {\n text: \"While Zane's shields are active, he gains increased Gun Damage and Accuracy. These bonuses are based on the amount of shields he has. The more percent full, the greater the bonuses.\",\n ranks: 1,\n effect: (rank, level) => `Gun Damage: Up to +35%\\nAccuracy: Up to +33%`,\n },\n \"All-Rounder\": {\n text: \"Zane's Barrier becomes a dome, covering all sides.\",\n ranks: 0,\n effect: (rank, level) => `Barrier Cooldown: +20%`,\n type: SKILLS.AUGMENT_CHEVRON,\n },\n },\n \"4\": {\n \"Redistribution\": {\n text: \"Zane and allies near the Barrier gain increased Gun Damage for a few seconds after the Barrier takes damage.\",\n ranks: 0,\n effect: (rank, level) => `Team Gun Damage: +10%\\nDuration: 3 seconds`,\n type: SKILLS.AUGMENT_CHEVRON,\n },\n \"Really Expensive Jacket\": {\n text: \"Elemental Status Effects applied to Zane have reduced duration.\",\n ranks: 1,\n effect: (rank, level) => `Status Effect Duration: -50%`,\n },\n \"Best Served Cold\": {\n text: \"Kill Skill. Whenever Zane kills an enemy, they create a Cryo Nova, dealing damage to all nearby enemies. This skill has a short cooldown.\",\n ranks: 5,\n effect: (rank, level) => `Cryo Damage: ${flat(rank, level, 2)} (increases with character level)\\nCooldown: 3 seconds`,\n },\n \"Futility Belt\": {\n text: \"Zane gains resistance to non-elemental damage.\\nKill Skill. After killing an enemy, all elemental damage Zane takes is converted to non-elemental damage.\",\n ranks: 1,\n effect: (rank, level) => `Non-Elemental Damage Resistance: +15%\\nDuration: 8 seconds`,\n },\n \"Deterrence Field\": {\n text: \"Enemies that touch the Barrier take Shock Damage and are staggered.\",\n ranks: 0,\n effect: (rank, level) => `Shock Damage: ${flat(1, level, 27)} (increases with character level)`,\n type: SKILLS.AUGMENT_CHEVRON,\n },\n },\n \"5\": {\n \"Refreshment\": {\n text: \"Whenever Zane damages a frozen enemy with his weapon, he gains some of that damage back as health.\",\n ranks: 3,\n effect: (rank, level) => `Life Steal: +${percent(rank, 8)}% of damage dealt`,\n },\n \"Calm, Cool, Collected\": {\n text: \"Whenever Zane Freezes an enemy, his shield instantly begins recharging.\\nIf Zane's shields are already full, he regenerates health for a few seconds.\\nIf Zane's health is already full, his Action Skill Cooldowns and Durations are immediately reset.\",\n ranks: 1,\n effect: (rank, level) => `Health Regeneration: +3% of Max Health per second\\nHealth Regeneration Duration: 3 seconds`,\n },\n \"Nerves of Steel\": {\n text: \"Zane gains increasing Accuracy and Handling. The longer his shield is full, the greater the bonuses.\",\n ranks: 3,\n effect: (rank, level) => `Accuracy: +${percent(rank, 2)}% per second\\nHandling: +${getNervesOfSteelHandling(rank)}% per second\\nMaximum Stacks: 15`,\n },\n },\n \"6\": {\n \"Distributed Denial\": {\n text: \"Zane's Barrier gains the effects of his currently equipped Shield Mod. Additionally, shield effects are applied to all allies near the Barrier. Bonuses to Zane are reduced.\",\n ranks: 1,\n },\n },\n },\n \"Hitman\": {\n \"0\": {\n \"SNTNL\": {\n text: \"Send into battle an automated SNTNL drone that continually flies through the environment and attacks enemies with its Machine Guns. Pressing [Action Skill key] while SNTNL is active causes it to attack the enemy under Zane's crosshairs, if any. Machine Gun Element: Non-Elemental.\",\n effect: (rank, level) => `Machine Gun Damage: ${flat(rank, level, 6)} (increases with character level)\\nDuration: 24 seconds\\nCooldown: 60 seconds`,\n type: SKILLS.ACTION_SKILL,\n ranks: 0,\n }\n },\n \"1\": {\n \"Violent Speed\": {\n text: \"Kill Skill. After killing an enemy, Zane gains increased Movement Speed for a few seconds. This effect stacks twice.\",\n ranks: 5,\n effect: (rank, level) => `Movement Speed: +${percent(rank, 4)}%\\nDuration: 8 seconds\\nMaximum Stacks: 2`,\n },\n \"Cold Bore\": {\n text: \"Zane gains increased Weapon Swap Speed. The next shot fired after swapping weapons deals Bonus Cryo Damage.\",\n ranks: 5,\n effect: (rank, level) => `Weapon Swap Speed: +${getColdBoreWeaponSwapSpeed(rank)}%\\nBonus Cryo Damage: +${percent(rank, 6)}% of damage dealt`,\n },\n \"Violent Momentum\": {\n text: \"Zane's Gun Damage is increased while moving. The quicker he moves, the greater the bonus.\",\n ranks: 5,\n effect: (rank, level) => `Gun Damage: +${percent(rank, 4)}% at default walk speed`,\n },\n },\n \"2\": {\n \"Winter's Drone\": {\n text: \"Converts SNTNL's primary weapons to Cryo Damage.\",\n ranks: 0,\n type: SKILLS.AUGMENT_CHEVRON,\n effect: (rank, level) => `SNTNL Weapons Element: Cryo`,\n },\n \"Cool Hand\": {\n text: \"Zane gains increased Reload Speed.\\nKill Skill. After killing an enemy, Zane's Reload Speed is increased for a few seconds. This effect stacks twice.\",\n ranks: 5,\n effect: (rank, level) => `Reload Speed: +${getCoolHandPassiveReloadSpeed(rank)}%\\nAdditional Reload Speed: +${getCoolHandAfterKillReloadSpeed(rank)}%\\nDuration: 8 seconds\\nMaximum Stacks: 2`,\n },\n \"Drone Delivery\": {\n text: \"SNTRY will occasionally drop a free grenade based on your current grenade mod while attacking enemies.\",\n ranks: 1,\n effect: (rank, level) => `Cooldown: 15 seconds`,\n },\n \"Salvation\": {\n text: \"Kill Skill. After killing an enemy, Zane's weapons gain Life Steal for a few seconds.\",\n ranks: 5,\n effect: (rank, level) => `Life Steal: +${percent(rank, 2)}% of damage dealt\\nDuration: 8 seconds`,\n },\n },\n \"3\": {\n \"Bad Dose\": {\n text: \"SNTNL occasionally shoots out a beam of Radiation that weakens enemies and buffs Zane. For every weakened enemy, Zane's Movement Speed and Fire Rate are increased. Weakened enemies have decreased Movement Speed and Attack Speed.\",\n ranks: 0,\n effect: (rank, level) => `Fire Rate: +2% per affected enemy\\nMovement Speed: +6% per affected enemy\\nBeam Damage: ${flat(rank, level, 4)} (increases with character level)\\nDuration: 12 seconds\\nCooldown: 8 seconds`,\n type: SKILLS.AUGMENT_CHEVRON,\n },\n \"Death Follows Close\": {\n text: \"All of Zane's Kill Skills gain increased effect and duration.\",\n ranks: 1,\n effect: (rank, level) => `Kill Skill Bonus: +25%\\nKill Skill Duration: +7 seconds`,\n },\n \"Static Field\": {\n text: \"SNTNL emits a static field that sends a Shock Beam to nearby enemies, draining their shields and replenishing Zane's.\",\n ranks: 0,\n effect: (rank, level) => `Shield Damage: 2/sec (increases with character level)\\nCooldown: 2 seconds`,\n type: SKILLS.AUGMENT_CHEVRON,\n },\n },\n \"4\": {\n \"Boomsday\": {\n text: \"SNTNL adds a rocket pod to its primary weapons, allowing it to shoot rockets as well as machine guns. Element: Non-Elemental.\",\n ranks: 0,\n effect: (rank, level) => `Rocket Damage: ${flat(rank, level, 32)} (increases with character level)`,\n type: SKILLS.AUGMENT_CHEVRON,\n },\n \"Violent Violence\": {\n text: \"Kill Skill. After killing an enemy, Zane gains increased Fire Rate for a few seconds. This effect stacks twice.\",\n ranks: 5,\n effect: (rank, level) => `Fire Rate: +${percent(rank, 3)}%\\nCooldown: 8 seconds\\nMaximum Stacks: 2`,\n },\n \"Playing Dirty\": {\n text: \"Kill Skill. After killing an enemy, Zane's next five shots all have a chance to fire an additional projectile.\",\n ranks: 5,\n effect: (rank, level) => `Extra Shot Chance: ${percent(rank, 10)}%`,\n },\n \"Almighty Ordnance\": {\n text: \"Hold down [Action Skill key] while SNTNL is deployed to paint a target area. SNTNL fires a missile barrage at that area, and if an enemy is killed, SNTNL's duration is reset. This can only be used once per Action Skill use.\",\n ranks: 0,\n effect: (rank, level) => `Missile Damage: ${flat(rank, level, 56)} (increases with character level)\\nMissiles per Barrage: 4`,\n type: SKILLS.AUGMENT_CHEVRON,\n },\n },\n \"5\": {\n \"Good Misfortune\": {\n text: \"Kill Skill. Killing an enemy increases Zane's Action Skill Duration. This skill has diminishing returns.\",\n ranks: 3,\n effect: (rank, level) => `Action Skill Duration Returned: +${percent(rank, 4)}% of Max Duration`,\n },\n },\n \"6\": {\n \"Seein' Red\": {\n text: \"Activating an Action Skill automatically activates all of Zane's Kill Skills.\",\n ranks: 1,\n }\n }\n },\n \"Doubled Agent\": {\n \"0\": {\n \"Digi-Clone\": {\n text: \"Spawn a Digi-Clone of Zane. The Digi-Clone stays in place, but distracts and fires at enemies. Pressing [Action Skill key] while the Digi-Clone is active causes Zane and the Digi-Clone to swap places.\",\n effect: (rank, level) => `Duration: 15 seconds\\nCooldown: 28 seconds`,\n type: SKILLS.ACTION_SKILL,\n ranks: 0,\n },\n },\n \"1\": {\n \"Synchronicity\": {\n text: \"Zane gains increased Gun Damage for each active Action Skill.\",\n ranks: 5,\n effect: (rank, level) => `Gun Damage: +${percent(rank, 4)}% per active Action Skill`,\n },\n \"Praemunitus\": {\n text: \"Zane and his Dig-Clone gain increased Magazine Size.\",\n ranks: 3,\n effect: (rank, level) => `Magazine Size: +${percent(rank, 8.333)}%\\nDigi-Clone Magazine Size: +${percent(rank, 8.333)}%`,\n },\n \"Borrowed Time\": {\n text: \"Zane gains increased Action Skill Duration for each active Action Skill.\",\n ranks: 5,\n effect: (rank, level) => `Action Skill Duration: +${percent(rank, 6)}% per active Action Skill`,\n },\n },\n \"2\": {\n \"Binary System\": {\n text: \"Whenever Zane swaps places with his Digi-Clone, a Cryo Nova is triggered around Zane and his Digi-Clone.\",\n ranks: 0,\n effect: (rank, level) => `Cryo Damage: ${flat(rank, level, 46)} (increases with character level)`,\n type: SKILLS.AUGMENT_CHEVRON,\n },\n \"Donnybrook\": {\n text: \"Kill Skill. Whenever Zane kills an enemy, he and his Digi-Clone receive increased Gun Damage and gain Health Regeneration for a few seconds. This effect stacks twice.\",\n ranks: 5,\n effect: (rank, level) => `Gun Damage: +${percent(rank, 3)}%\\nHealth Regeneration: +${percent(rank, 0.5)}% of Missing Health/sec\\nDigi-Clone Gun Damage: +${percent(rank, 3)}%\\nDigi-Clone Health Regen: +${percent(rank, 0.5)}% Missing Health/sec\\nDuration: 8 seconds\\nMaximum Stacks: 2`,\n },\n \"Fractal Frags\": {\n text: \"The Digi-Clone throws a copy of Zane's current grenade mod when it is first activated. If the Digi-Clone is killed, it drops a free grenade. Killing an enemy while the Digi-Clone is active gives the Digi-Clone a chance to throw a grenade.\",\n ranks: 1,\n effect: (rank, level) => `Grenade Chance: 30%`,\n },\n \"Duct Tape Mod\": {\n text: \"The first shot fired from Zane's gun has a chance to also fire a grenade. This skill has a short cooldown.\",\n ranks: 5,\n effect: (rank, level) => `Grenade Chance: ${percent(rank, 4)}%\\nCooldown: 8 seconds`,\n },\n },\n \"3\": {\n \"Schadenfreude\": {\n text: \"Whenever the Digi-Clone takes damage, Zane's shield is restored by a portion of that damage.\",\n ranks: 0,\n effect: (rank, level) => `Shields Restored: 100% of damage taken by Digi-Clone`,\n type: SKILLS.AUGMENT_CHEVRON,\n },\n \"Quick Breather\": {\n text: \"Whenever Zane swaps places with his Digi-Clone, his shield immediately begins recharging. The Digi-Clone also immediately restores health.\",\n ranks: 1,\n effect: (rank, level) => `Digi-Clone Health Restored: 50% of Max Health`,\n },\n \"Which One's Real?\": {\n text: \"Enemies are more likely to target the Digi-Clone for a few seconds after it's summoned and after swapping places.\",\n ranks: 0,\n effect: (rank, level) => `Duration: 4 seconds`,\n type: SKILLS.AUGMENT_CHEVRON,\n },\n },\n \"4\": {\n \"Dopplebanger\": {\n text: \"Hold down [Action Skill key] to end the action skill early. When Zane's Action Skill is ended, the Digi-Clone explodes, dealing Splash Damage to all nearby enemies. The more Action Skill time remaining, the greater the damage.\",\n ranks: 0,\n effect: (rank, level) => `Damage: Up to ${flat(rank, level, 280)} (increases with character level)`,\n type: SKILLS.AUGMENT_CHEVRON,\n },\n \"Pocket Full of Grenades\": {\n text: \"Kill Skill. After killing an enemy, Zane gains Grenade Regeneration for a few seconds.\",\n ranks: 3,\n effect: (rank, level) => `Grenade Regeneration: +${percent(rank, 5)}% per second\\nDuration: 8 seconds`,\n },\n \"Old-U\": {\n text: \"Press [Action Skill key] during Fight For Your Life if Digi-Clone is active to destroy the Digi-Clone and immediately gain a Second Wind with full health.\",\n ranks: 1,\n effect: (rank, level) => `Health Restored: 100% of Maximum Health`,\n },\n \"Supersonic Man\": {\n text: \"Zane gains increased Movement Speed for each active Action Skill.\",\n ranks: 3,\n effect: (rank, level) => `Movement Speed: +${percent(rank, 4)}% per active Action Skill`,\n },\n \"Digital Distribution\": {\n text: \"If Zane takes health damage while the Digi-Clone is active, a portion of that damage is inflicted on his Digi-Clone instead.\",\n ranks: 0,\n effect: (rank, level) => `Damage Shared: 75%`,\n type: SKILLS.AUGMENT_CHEVRON,\n },\n },\n \"5\": {\n \"Like a Ghost\": {\n text: \"Zane and his Digi-Clone gain a chance to ignore bullets. This chance is increased for a few seconds after activating an Action Skill. This effect stacks.\",\n ranks: 3,\n effect: (rank, level) => `Ignore Bullet Chance: +${percent(rank, 2)}%\\nAdditional Ignore Bullet Chance: +${percent(rank, 3)}%\\nDuration: 8 seconds`,\n },\n \"Boom. Enhance.\": {\n text: \"Whenever Zane summons his Digi-Clone, it consumes up to 3 grenades. For every grenade consumed, the Digi-Clone gains increased Gun Damage, Maximum Health, Fire Rate, Reload Speed, and Digi-Clone Duration.\",\n ranks: 1,\n effect: (rank, level) => `Digi-Clone Gun Damage: +20% per grenade\\nDigi-Clone Maximum Health: +81% per grenade\\nDigi-Clone Fire Rate: +5% per grenade\\nDigi-Clone Reload Speed: +31% per grenade\\nDigi-Clone Duration: +25% per grenade`,\n },\n \"Trick of the Light\": {\n text: \"Zane deals Bonus Cryo Damage to enemies that aren't targeting him.\",\n ranks: 3,\n effect: (rank, level) => `Bonus Cryo Damage: +${percent(rank, 12)}% of damage dealt`,\n },\n },\n \"6\": {\n \"Double Barrel\": {\n text: \"The Digi-Clone is equipped with a copy of Zane's Current Weapon when activated. Swapping places with the Digi-Clone causes Zane and his Digi-Clone to gain increased Gun Damage.\",\n ranks: 1,\n effect: (rank, level) => `Item Duping: +100%\\nGun Damage: +25%\\nDigi-Clone Gun Damage: +25%`,\n },\n },\n },\n};\n\nexport default skills;\n"],"sourceRoot":""} \ No newline at end of file diff --git a/bundle.dd0ac.css b/bundle.9c683.css similarity index 100% rename from bundle.dd0ac.css rename to bundle.9c683.css diff --git a/gunner/index.html b/gunner/index.html index dad2ed3..6a85a91 100644 --- a/gunner/index.html +++ b/gunner/index.html @@ -1 +1 @@ -Borderlands 3 Skill Planner \ No newline at end of file +Borderlands 3 Skill Planner \ No newline at end of file diff --git a/index.html b/index.html index dad2ed3..6a85a91 100644 --- a/index.html +++ b/index.html @@ -1 +1 @@ -Borderlands 3 Skill Planner \ No newline at end of file +Borderlands 3 Skill Planner \ No newline at end of file diff --git a/operative/index.html b/operative/index.html index dad2ed3..6a85a91 100644 --- a/operative/index.html +++ b/operative/index.html @@ -1 +1 @@ -Borderlands 3 Skill Planner \ No newline at end of file +Borderlands 3 Skill Planner \ No newline at end of file diff --git a/siren/index.html b/siren/index.html index dad2ed3..6a85a91 100644 --- a/siren/index.html +++ b/siren/index.html @@ -1 +1 @@ -Borderlands 3 Skill Planner \ No newline at end of file +Borderlands 3 Skill Planner \ No newline at end of file diff --git a/sw.js b/sw.js index 5cfd4f8..0e47ef3 100644 --- a/sw.js +++ b/sw.js @@ -1,3 +1,3 @@ -var __wpo = {"assets":{"main":["/45598562077bdc84281b5330ff4d283e.png","/6274c9808eb08785f146a2b78283b5f6.jpg","/bundle.dd0ac.css","/bundle.0a133056.js","/assets/favicon.png","/assets/hunters/Beastmaster/000.png","/assets/hunters/Beastmaster/001.png","/assets/hunters/Beastmaster/010.png","/assets/hunters/Beastmaster/011.png","/assets/hunters/Beastmaster/012.png","/assets/hunters/Beastmaster/020.png","/assets/hunters/Beastmaster/021.png","/assets/hunters/Beastmaster/022.png","/assets/hunters/Beastmaster/023.png","/assets/hunters/Beastmaster/030.png","/assets/hunters/Beastmaster/031.png","/assets/hunters/Beastmaster/032.png","/assets/hunters/Beastmaster/033.png","/assets/hunters/Beastmaster/040.png","/assets/hunters/Beastmaster/041.png","/assets/hunters/Beastmaster/042.png","/assets/hunters/Beastmaster/043.png","/assets/hunters/Beastmaster/050.png","/assets/hunters/Beastmaster/051.png","/assets/hunters/Beastmaster/060.png","/assets/hunters/Beastmaster/100.png","/assets/hunters/Beastmaster/101.png","/assets/hunters/Beastmaster/110.png","/assets/hunters/Beastmaster/111.png","/assets/hunters/Beastmaster/112.png","/assets/hunters/Beastmaster/120.png","/assets/hunters/Beastmaster/121.png","/assets/hunters/Beastmaster/122.png","/assets/hunters/Beastmaster/123.png","/assets/hunters/Beastmaster/130.png","/assets/hunters/Beastmaster/131.png","/assets/hunters/Beastmaster/132.png","/assets/hunters/Beastmaster/133.png","/assets/hunters/Beastmaster/140.png","/assets/hunters/Beastmaster/141.png","/assets/hunters/Beastmaster/142.png","/assets/hunters/Beastmaster/143.png","/assets/hunters/Beastmaster/150.png","/assets/hunters/Beastmaster/151.png","/assets/hunters/Beastmaster/152.png","/assets/hunters/Beastmaster/160.png","/assets/hunters/Beastmaster/200.png","/assets/hunters/Beastmaster/201.png","/assets/hunters/Beastmaster/210.png","/assets/hunters/Beastmaster/211.png","/assets/hunters/Beastmaster/212.png","/assets/hunters/Beastmaster/220.png","/assets/hunters/Beastmaster/221.png","/assets/hunters/Beastmaster/222.png","/assets/hunters/Beastmaster/223.png","/assets/hunters/Beastmaster/230.png","/assets/hunters/Beastmaster/231.png","/assets/hunters/Beastmaster/232.png","/assets/hunters/Beastmaster/240.png","/assets/hunters/Beastmaster/241.png","/assets/hunters/Beastmaster/242.png","/assets/hunters/Beastmaster/243.png","/assets/hunters/Beastmaster/250.png","/assets/hunters/Beastmaster/251.png","/assets/hunters/Beastmaster/252.png","/assets/hunters/Beastmaster/260.png","/assets/hunters/Beastmaster/hero.png","/assets/hunters/Gunner/000.png","/assets/hunters/Gunner/010.png","/assets/hunters/Gunner/011.png","/assets/hunters/Gunner/012.png","/assets/hunters/Gunner/020.png","/assets/hunters/Gunner/021.png","/assets/hunters/Gunner/022.png","/assets/hunters/Gunner/023.png","/assets/hunters/Gunner/024.png","/assets/hunters/Gunner/030.png","/assets/hunters/Gunner/031.png","/assets/hunters/Gunner/032.png","/assets/hunters/Gunner/033.png","/assets/hunters/Gunner/040.png","/assets/hunters/Gunner/041.png","/assets/hunters/Gunner/042.png","/assets/hunters/Gunner/043.png","/assets/hunters/Gunner/050.png","/assets/hunters/Gunner/051.png","/assets/hunters/Gunner/052.png","/assets/hunters/Gunner/060.png","/assets/hunters/Gunner/100.png","/assets/hunters/Gunner/110.png","/assets/hunters/Gunner/111.png","/assets/hunters/Gunner/112.png","/assets/hunters/Gunner/120.png","/assets/hunters/Gunner/121.png","/assets/hunters/Gunner/122.png","/assets/hunters/Gunner/123.png","/assets/hunters/Gunner/124.png","/assets/hunters/Gunner/130.png","/assets/hunters/Gunner/131.png","/assets/hunters/Gunner/132.png","/assets/hunters/Gunner/133.png","/assets/hunters/Gunner/140.png","/assets/hunters/Gunner/141.png","/assets/hunters/Gunner/142.png","/assets/hunters/Gunner/143.png","/assets/hunters/Gunner/150.png","/assets/hunters/Gunner/151.png","/assets/hunters/Gunner/152.png","/assets/hunters/Gunner/160.png","/assets/hunters/Gunner/200.png","/assets/hunters/Gunner/210.png","/assets/hunters/Gunner/211.png","/assets/hunters/Gunner/212.png","/assets/hunters/Gunner/220.png","/assets/hunters/Gunner/221.png","/assets/hunters/Gunner/222.png","/assets/hunters/Gunner/223.png","/assets/hunters/Gunner/224.png","/assets/hunters/Gunner/230.png","/assets/hunters/Gunner/231.png","/assets/hunters/Gunner/232.png","/assets/hunters/Gunner/233.png","/assets/hunters/Gunner/240.png","/assets/hunters/Gunner/241.png","/assets/hunters/Gunner/242.png","/assets/hunters/Gunner/243.png","/assets/hunters/Gunner/250.png","/assets/hunters/Gunner/251.png","/assets/hunters/Gunner/252.png","/assets/hunters/Gunner/260.png","/assets/hunters/Gunner/hero.png","/assets/hunters/Operative/000.png","/assets/hunters/Operative/010.png","/assets/hunters/Operative/011.png","/assets/hunters/Operative/012.png","/assets/hunters/Operative/020.png","/assets/hunters/Operative/021.png","/assets/hunters/Operative/022.png","/assets/hunters/Operative/023.png","/assets/hunters/Operative/030.png","/assets/hunters/Operative/031.png","/assets/hunters/Operative/032.png","/assets/hunters/Operative/040.png","/assets/hunters/Operative/041.png","/assets/hunters/Operative/042.png","/assets/hunters/Operative/043.png","/assets/hunters/Operative/044.png","/assets/hunters/Operative/050.png","/assets/hunters/Operative/051.png","/assets/hunters/Operative/052.png","/assets/hunters/Operative/060.png","/assets/hunters/Operative/100.png","/assets/hunters/Operative/110.png","/assets/hunters/Operative/111.png","/assets/hunters/Operative/112.png","/assets/hunters/Operative/120.png","/assets/hunters/Operative/121.png","/assets/hunters/Operative/122.png","/assets/hunters/Operative/123.png","/assets/hunters/Operative/130.png","/assets/hunters/Operative/131.png","/assets/hunters/Operative/132.png","/assets/hunters/Operative/140.png","/assets/hunters/Operative/141.png","/assets/hunters/Operative/142.png","/assets/hunters/Operative/143.png","/assets/hunters/Operative/150.png","/assets/hunters/Operative/160.png","/assets/hunters/Operative/200.png","/assets/hunters/Operative/210.png","/assets/hunters/Operative/211.png","/assets/hunters/Operative/212.png","/assets/hunters/Operative/220.png","/assets/hunters/Operative/221.png","/assets/hunters/Operative/222.png","/assets/hunters/Operative/223.png","/assets/hunters/Operative/230.png","/assets/hunters/Operative/231.png","/assets/hunters/Operative/232.png","/assets/hunters/Operative/240.png","/assets/hunters/Operative/241.png","/assets/hunters/Operative/242.png","/assets/hunters/Operative/243.png","/assets/hunters/Operative/244.png","/assets/hunters/Operative/250.png","/assets/hunters/Operative/251.png","/assets/hunters/Operative/252.png","/assets/hunters/Operative/260.png","/assets/hunters/Operative/hero.png","/assets/hunters/Siren/000.png","/assets/hunters/Siren/010.png","/assets/hunters/Siren/011.png","/assets/hunters/Siren/012.png","/assets/hunters/Siren/020.png","/assets/hunters/Siren/021.png","/assets/hunters/Siren/022.png","/assets/hunters/Siren/023.png","/assets/hunters/Siren/030.png","/assets/hunters/Siren/031.png","/assets/hunters/Siren/032.png","/assets/hunters/Siren/033.png","/assets/hunters/Siren/034.png","/assets/hunters/Siren/040.png","/assets/hunters/Siren/041.png","/assets/hunters/Siren/050.png","/assets/hunters/Siren/051.png","/assets/hunters/Siren/052.png","/assets/hunters/Siren/053.png","/assets/hunters/Siren/060.png","/assets/hunters/Siren/100.png","/assets/hunters/Siren/110.png","/assets/hunters/Siren/111.png","/assets/hunters/Siren/112.png","/assets/hunters/Siren/120.png","/assets/hunters/Siren/121.png","/assets/hunters/Siren/122.png","/assets/hunters/Siren/123.png","/assets/hunters/Siren/130.png","/assets/hunters/Siren/131.png","/assets/hunters/Siren/132.png","/assets/hunters/Siren/140.png","/assets/hunters/Siren/141.png","/assets/hunters/Siren/142.png","/assets/hunters/Siren/143.png","/assets/hunters/Siren/150.png","/assets/hunters/Siren/151.png","/assets/hunters/Siren/152.png","/assets/hunters/Siren/160.png","/assets/hunters/Siren/200.png","/assets/hunters/Siren/210.png","/assets/hunters/Siren/211.png","/assets/hunters/Siren/212.png","/assets/hunters/Siren/220.png","/assets/hunters/Siren/221.png","/assets/hunters/Siren/222.png","/assets/hunters/Siren/223.png","/assets/hunters/Siren/230.png","/assets/hunters/Siren/231.png","/assets/hunters/Siren/232.png","/assets/hunters/Siren/240.png","/assets/hunters/Siren/241.png","/assets/hunters/Siren/242.png","/assets/hunters/Siren/243.png","/assets/hunters/Siren/250.png","/assets/hunters/Siren/251.png","/assets/hunters/Siren/252.png","/assets/hunters/Siren/260.png","/assets/hunters/Siren/hero.png","/assets/hunters/augment-action.png","/assets/hunters/augment-chevron.png","/assets/hunters/augment-diamond.png","/assets/hunters/basic.png","/assets/manifest.json","/assets/robots.txt","/"],"additional":[],"optional":[]},"externals":[],"hashesMap":{"6e148698d382b2c0806ba60a00e5e3e431d7232f":"/45598562077bdc84281b5330ff4d283e.png","507dda73c3ff7f9e08f8788d03b518bb39678b85":"/6274c9808eb08785f146a2b78283b5f6.jpg","52647711740605b3b91f8cf57cb4be3586119102":"/bundle.dd0ac.css","3993a080d59534a9c9169c59233bed19c42af35c":"/bundle.0a133056.js","67af5559591f22ffba90d13299f3df513e5cbc52":"/assets/favicon.png","9af1150332d75385d8ffdc64d571ec8d1a437f0f":"/assets/hunters/Beastmaster/000.png","c2925bcd582074cfd7e6aeedcd1dbb2781a48031":"/assets/hunters/Beastmaster/001.png","6d40ff1f4f45ea121a66d2293d2db879d9d66ef6":"/assets/hunters/Beastmaster/010.png","ed9f7a1a2d7e0bbc75bb655a9899f5daee69d9df":"/assets/hunters/Beastmaster/011.png","189f08d09779099cb3866ecd2e5db147e8688f7b":"/assets/hunters/Beastmaster/012.png","4da990290ac582249093aa0762ec03ce194568d9":"/assets/hunters/Beastmaster/020.png","c587d5fe8d5e028bb7e616dcea87379611f268f1":"/assets/hunters/Beastmaster/021.png","a46ddf7becbdfc0de6acab4527ab2ea2321a2d5a":"/assets/hunters/Beastmaster/022.png","af94b67084c450485969b7f3b9214db033c72084":"/assets/hunters/Beastmaster/023.png","fd0cfa0fed9faca922742630721f5816554e93e3":"/assets/hunters/Beastmaster/030.png","901a3ecef0ef8dada62b1b30e8bdf49fb1551ddf":"/assets/hunters/Beastmaster/031.png","dadc56494285303f24541f5577bb205a74043a62":"/assets/hunters/Beastmaster/032.png","7ae0e52589523f74914281227f6e461ff2d9a267":"/assets/hunters/Beastmaster/033.png","faeaa65837f8379a0e11960b89caec4d5bace436":"/assets/hunters/Beastmaster/040.png","f28d5dc8cf56ec11f6d2ecdef2375edfe953a562":"/assets/hunters/Beastmaster/041.png","ac562b991899445dcc8878a69d1a2a76de25f4e6":"/assets/hunters/Beastmaster/042.png","1a91e2aa94ad216dc0c71851c008bd818bdb1941":"/assets/hunters/Beastmaster/043.png","f03ca5e3841494d7773c1c0aff46aaa11e53f85a":"/assets/hunters/Beastmaster/050.png","cb621aefc1783ddb201e202d412ad3907b78f414":"/assets/hunters/Beastmaster/051.png","22d915e3a307b42461c9b8cfb1c2bb3c78f36a8a":"/assets/hunters/Beastmaster/060.png","30628665bf411727c306cbeac159456db3be9e1f":"/assets/hunters/Beastmaster/100.png","82dcc57934ea55d61fa48dbbb190574a5b83a3d8":"/assets/hunters/Beastmaster/101.png","7e14ff5afd5e2eec8e0f0f6e11f7f475317924fa":"/assets/hunters/Beastmaster/110.png","024f1a8d93699ef6add10638fb7a34d8edb60d8c":"/assets/hunters/Beastmaster/111.png","7df3c789dbf3a63f3a1b226a9d52dad1d882b2f9":"/assets/hunters/Beastmaster/112.png","26cf2fdbb660e73e0127dd4d3db270f9caddef3a":"/assets/hunters/Beastmaster/120.png","33e7cb07076d660b1124bf0e700b54c560b35396":"/assets/hunters/Beastmaster/121.png","a2e8552717e0b056949779ae5720c1a03bdb4372":"/assets/hunters/Beastmaster/122.png","ac7ffb0b0746ac85d369e1bd3c7947a34ba396aa":"/assets/hunters/Beastmaster/123.png","0bec5e860f684498986e687f265c30f8091869c2":"/assets/hunters/Beastmaster/130.png","8b693e1a7730d22dcf1c1b2eddcaae94b372c769":"/assets/hunters/Beastmaster/131.png","aaf378398b332e219c89cc0a4a4f401cc254866b":"/assets/hunters/Beastmaster/132.png","99a3944a10da723293bca8c01cf335b1068093f0":"/assets/hunters/Beastmaster/133.png","32cc792225263a7d52b1e4f20893365f20cc812b":"/assets/hunters/Beastmaster/140.png","ce96b467323aab2967e07124fef6b58d4259229c":"/assets/hunters/Beastmaster/141.png","d78620f70a3ce4f785c8f4b1d7aebd23a0831fe2":"/assets/hunters/Beastmaster/142.png","e71e828300067bb37ddff61f38d3559ae9e20c2c":"/assets/hunters/Beastmaster/143.png","eeff605535573fed8b6ce039e91e37beaf5ea456":"/assets/hunters/Beastmaster/150.png","ea2699d4b4c5eaca7588dc33bc10f27f1206052c":"/assets/hunters/Beastmaster/151.png","e325151f9b69d8d147407c8b70ce72627ca93830":"/assets/hunters/Beastmaster/152.png","982415964f422ed25a5ffab32a28ea7a854c1541":"/assets/hunters/Beastmaster/160.png","977877a464943f876846612ecc8493bb8137b0f6":"/assets/hunters/Beastmaster/200.png","7fb64ed1f5d0baf25f772cd5af5da6feb2f6270d":"/assets/hunters/Beastmaster/201.png","d9a71f3dee3ed3f69ff83794687c9c06228385b3":"/assets/hunters/Beastmaster/210.png","96ce6f53559178f4dfbbabf251242a4c5c241b17":"/assets/hunters/Beastmaster/211.png","6e044f76a1700b3739bfcafbbfb33e9146f2693a":"/assets/hunters/Beastmaster/212.png","23abf2f2c2b3bba52a7eef79e2e3460a063b063a":"/assets/hunters/Beastmaster/220.png","32c28e47255087a985b6f17c2076534ea631c1ee":"/assets/hunters/Beastmaster/221.png","b23df346b16cd8aa7e320e90d3c759f8fafc9929":"/assets/hunters/Beastmaster/222.png","663f88fff3084d908fd24a36ecd7b6c88bc4b940":"/assets/hunters/Beastmaster/223.png","1b61af090bb407ae59f4fce586f777e99f390abd":"/assets/hunters/Beastmaster/230.png","15d9fbd82ef4e0de5eaafb1ee079ef276e721573":"/assets/hunters/Beastmaster/231.png","253f574bc73a1cd2b808a382de2ec3a04c3b94bb":"/assets/hunters/Beastmaster/232.png","ddeda995655074539ee0bad9c6588a2cdcc36e61":"/assets/hunters/Beastmaster/240.png","94b05d293948e5d6588dcc423019b40eff55396d":"/assets/hunters/Beastmaster/241.png","afaf095f2bf2a9478fde265dd06b5b1d6d68ef1b":"/assets/hunters/Beastmaster/242.png","e3073e7192fa6ac41dd2a48d309056f37a908c92":"/assets/hunters/Beastmaster/243.png","8df769891eeb6868762131a107658dff76f4b139":"/assets/hunters/Beastmaster/250.png","ba3887ee18f5edd865c6069f89ff1a5603dd119b":"/assets/hunters/Beastmaster/251.png","5e9b8f8e3d316c352177fa203cc280ccaed98f43":"/assets/hunters/Beastmaster/252.png","5d20741e9d260aca46897c69dd5427c50000c012":"/assets/hunters/Beastmaster/260.png","a130dbe9dbd85818b542218b80337b41a60b8f57":"/assets/hunters/Beastmaster/hero.png","4187c6c8ae77b9bd8d0215d6980ce50d3b7c3e19":"/assets/hunters/Gunner/000.png","54ba8ace6d5d6e8ae01ec25a1db23910ea4230b6":"/assets/hunters/Gunner/010.png","a64742e5642e605bf7ef6a8f4686d292d60b0d31":"/assets/hunters/Gunner/011.png","63090db8b79d42db3af5da2011ee75fa4b15c263":"/assets/hunters/Gunner/012.png","0ea5958ea65635176bbd7e13c152cc4333621245":"/assets/hunters/Gunner/020.png","cd5d48863b8f918eff767e4a27978983f5532863":"/assets/hunters/Gunner/021.png","dc39585077aa0888669d15d9e4ac9af80c4470d3":"/assets/hunters/Gunner/022.png","366c52377ad6b58e2a4b405855c94b221748cf58":"/assets/hunters/Gunner/023.png","4c3e4ad961bb6a2df481a385e0dd792622853098":"/assets/hunters/Gunner/024.png","bb2acdcd1cfc65557be53994f5e464add91efef8":"/assets/hunters/Gunner/030.png","18727a70a50c5c88546d6a18f422a5a9fec0eb60":"/assets/hunters/Gunner/031.png","bfa8f91257949610a3ed259d0e75cc4c297667dc":"/assets/hunters/Gunner/032.png","b0189c14fb87e38e996f45aeb5b866830caae3fd":"/assets/hunters/Gunner/033.png","eebe75ecefbbb0d338e4878f930bc1105fe2b01f":"/assets/hunters/Gunner/040.png","f98d09199bbf20aa0a10bb80da8eba3066056287":"/assets/hunters/Gunner/041.png","cbd1b2927a1eb75ec293c4231c4bc61c6e8d740f":"/assets/hunters/Gunner/042.png","a7b036839f7cf93c6f3b3372d55b774aff758be0":"/assets/hunters/Gunner/043.png","fd4608d9372eff5bd077693c60ed19aa01fb4969":"/assets/hunters/Gunner/050.png","0ffe098e5a7914ad6a68dc68953f81f2666d6120":"/assets/hunters/Gunner/051.png","7ff320db6f0b9fd30d5821adbd3e20ca959b42c6":"/assets/hunters/Gunner/052.png","aa17029957f1594bada996c1dc9856a7fb4471e2":"/assets/hunters/Gunner/060.png","da1375416c4581fed1c744b6bdd0e47818178d94":"/assets/hunters/Gunner/100.png","f0985444446483e8155d5ad62b1a4891f134fa83":"/assets/hunters/Gunner/110.png","445438d55e403f82c19514787ddef15e5e954b80":"/assets/hunters/Gunner/111.png","0fe037264951d5cb8f0cd491de447f49a08064d0":"/assets/hunters/Gunner/112.png","7a65dafe4415dbcf539da1ec53e536acd1745ec5":"/assets/hunters/Gunner/120.png","05f3bbbe0c86817a04bd38488c77321e92dea508":"/assets/hunters/Gunner/121.png","6f4d55e6ad61f43edc35f6470d939978680efc9a":"/assets/hunters/Gunner/122.png","f55dc9d48685bee4ef27001fd53b5c3c383e83b7":"/assets/hunters/Gunner/123.png","aecb1b10a6e3d7b257f041222ff10997e92b07ba":"/assets/hunters/Gunner/124.png","b701fbcb98aca94c4e6568b1c32f906586f480a3":"/assets/hunters/Gunner/130.png","35604765c3975337b7e4c8e8b0e0aebb52517ff8":"/assets/hunters/Gunner/131.png","4f961a48612b9e3a088f5531102be6e609a9fc8f":"/assets/hunters/Gunner/132.png","0e15f8e90e1940044a3ca106f938279ac9cc7f0b":"/assets/hunters/Gunner/133.png","2389e82816838d62586b52e7388482664f3060ab":"/assets/hunters/Gunner/140.png","6206c23cc0ff52527d39f0334edbf1df9a4800d1":"/assets/hunters/Gunner/141.png","7ea99637b1199931144a5fe37813c5e9e8324362":"/assets/hunters/Gunner/142.png","71297be19da6b323bc9f6ccff3e724b6d50b29d3":"/assets/hunters/Gunner/143.png","0010bbf4ca4077299aa70fea4a0add3071d6ddb9":"/assets/hunters/Gunner/150.png","a0a6a4366ce4b1e0e5a50d73f9538fc3ac04e8d2":"/assets/hunters/Gunner/151.png","82a16ee707c2d92ab932cd1db55cb9020e670272":"/assets/hunters/Gunner/152.png","114a44e26c933145f43a36cea694770eb3b120a1":"/assets/hunters/Gunner/160.png","1d5b2851ef2347aabf476f610600e4476c3b18bf":"/assets/hunters/Gunner/200.png","e7febc53830b0e4fb9cd8a92c2e6332ce1540f01":"/assets/hunters/Gunner/210.png","bd2bd9ba423cecbd1eadd6ed1ca4a68679b1dbc3":"/assets/hunters/Gunner/211.png","2fabd4a301616f6704940823d7a81c5fd369f53d":"/assets/hunters/Gunner/212.png","f9848cfe5c6fb11a5821029722af40faaee64a96":"/assets/hunters/Gunner/220.png","a2598fb40de61863547fe2b67c81b149e8fbc332":"/assets/hunters/Gunner/221.png","bc5e563aaf3216c6efb290e99cd3b6a362bb7d95":"/assets/hunters/Gunner/222.png","8d361fd4a34014b89b9c0a03a9fa338dba865ce5":"/assets/hunters/Gunner/223.png","3f4c9dd9f0dd7354273758532040fbccc2277c6f":"/assets/hunters/Gunner/224.png","b7b50379f1803c2d00f719483f1ed7aa34bddd45":"/assets/hunters/Gunner/230.png","0448c6458f4f5359776f636a471580fb11121be8":"/assets/hunters/Gunner/231.png","256073fae1eb05b3d94651905f01cb5bfd92e23b":"/assets/hunters/Gunner/232.png","cbca31bdca22859ab3f37ccdd80ae8334b794338":"/assets/hunters/Gunner/233.png","4522c90c5d25323cd95180054514cc6ccdb92664":"/assets/hunters/Gunner/240.png","e89b15316e45658116fed755c6011521e486ae9b":"/assets/hunters/Gunner/241.png","44cb933def44307d807f4634268686e0a5aa8216":"/assets/hunters/Gunner/242.png","77dd207479a8fa95602d195c9deb1eebf0b5b697":"/assets/hunters/Gunner/243.png","223135018c6e6d35524ef84b6a8cfceae4b4275c":"/assets/hunters/Gunner/250.png","0aed8b4d9cb55d8d6df832ac1ffa2de61ac85def":"/assets/hunters/Gunner/251.png","3906bbc206f0eacbe03247f8fbd334b0545b0b70":"/assets/hunters/Gunner/252.png","3bec18b1f50a52e19b78c59b7df679734c07a43f":"/assets/hunters/Gunner/260.png","eaf0686064b5bc00abc5b7cc0fb8939369a41503":"/assets/hunters/Gunner/hero.png","e40e1fc31efbc81b37ff548787f0edd4b8b64c13":"/assets/hunters/Operative/000.png","fd18822d21daa341af9e4f94fa70262db14e7e35":"/assets/hunters/Operative/010.png","058992804a106410e81d1b49dca7fa8ce1c6b5c9":"/assets/hunters/Operative/011.png","654f8233158d370f5a40f5fe36f63e85aaae0740":"/assets/hunters/Operative/012.png","095a541f6df8d85c8b08d2f229008c80f7c69272":"/assets/hunters/Operative/020.png","d53106ffa8f071e7378431dcc785bfad863f4518":"/assets/hunters/Operative/021.png","6bd2425c6cdf8540e9dd6039f95214e6a80cb2ad":"/assets/hunters/Operative/022.png","7a3fbca77aaff8e9fbdcd15c204e339cebfabe3d":"/assets/hunters/Operative/023.png","e64459bcabee744812c4b3cc407d17e14b5bc234":"/assets/hunters/Operative/030.png","c2ddf9b83a43f78f5b85f0a3f3e7d1d4c7985b2a":"/assets/hunters/Operative/031.png","d850497106e1e12027db58408438dab289517dd6":"/assets/hunters/Operative/032.png","507904d621f8a38c95cf410ce5613dd97833a494":"/assets/hunters/Operative/040.png","bf29347f3a54ac5abf730245a6d5d9fc71a8210b":"/assets/hunters/Operative/041.png","8e2e0be519c250a5e5b64f7c623761a568131255":"/assets/hunters/Operative/042.png","30ffd6fc8ff712203258736ef97af135c86a338a":"/assets/hunters/Operative/043.png","219b472bf0aa359cc2d051c2fb8feec06802ba5c":"/assets/hunters/Operative/044.png","a7ec503665b5309d42b0cc5d202098c80f23e0ea":"/assets/hunters/Operative/050.png","c0aa8c2498b3b9bd73422ff8efea305fad690e18":"/assets/hunters/Operative/051.png","4bd4d4f7b4cc589129e2f22cb5a32c5a08541d2a":"/assets/hunters/Operative/052.png","7c288f69ff398d0825f188a7989fed55416836a0":"/assets/hunters/Operative/060.png","7a495ec486cbe6ba809f0ceb31117225017910e5":"/assets/hunters/Operative/100.png","c7a17ec6da6656a3e041ce2b7f42c1b92ed713fa":"/assets/hunters/Operative/110.png","4a8fda88f745e7301235c978a134d3ca5c41d5a7":"/assets/hunters/Operative/111.png","2002837a2ec2c7f6dada2f6aaa75388f29ad6e4c":"/assets/hunters/Operative/112.png","04a9c7c143898286803a85cef9db9066dcb2bada":"/assets/hunters/Operative/120.png","a4480299ebbe70463b4ee1c184da0d0ba209182c":"/assets/hunters/Operative/121.png","80e14d582ebcf34e22abfa0cc7d4f1557503214e":"/assets/hunters/Operative/122.png","4a7b8d4b079c5f00f04fdffdb657e8ad69446560":"/assets/hunters/Operative/123.png","2c2af16423174d171f3ee39459aebebbf9ae9fad":"/assets/hunters/Operative/130.png","826a5707be9431a3dd0b7b0bd0b59bb5710c1447":"/assets/hunters/Operative/131.png","86ba39661db22dd276eb3dfbec65988b012c9237":"/assets/hunters/Operative/132.png","45c65212d85d25b9c4ab5ab05824da55107743f4":"/assets/hunters/Operative/140.png","eeba798cd9a667dfc31ab25db9cb4a633d31a150":"/assets/hunters/Operative/141.png","be846fd50ce21587aa0cea64d4a5f57937ba5265":"/assets/hunters/Operative/142.png","e8c7b5aecf30e84c6323b10156a8532064bece5d":"/assets/hunters/Operative/143.png","6b488e1ddbd290ba80a210b735b3c25c58ed7cb8":"/assets/hunters/Operative/150.png","19e79d9cf7054f0fb659fa696ffc380e9d468dc4":"/assets/hunters/Operative/160.png","7d62f2dd934d1104f2dfffb3ddb89cdcd5da016b":"/assets/hunters/Operative/200.png","09b9d5331cee82ebafb31036819aeb604385d8a2":"/assets/hunters/Operative/210.png","9cd2e136045e5edc2d47949ec7d76676fbffbc85":"/assets/hunters/Operative/211.png","cc20f1335a72571f1651dce50d3e954f7e482b7e":"/assets/hunters/Operative/212.png","355d50f3aefe59db6bcd1ace3b23d0a15a090b05":"/assets/hunters/Operative/220.png","35a1a8612977e3ab005a673e5a59919fa919d956":"/assets/hunters/Operative/221.png","6a7240e95312ac568433ec4e91dae1cd44d25e14":"/assets/hunters/Operative/222.png","94dde5c18b76dbaf6acc716025712a46d898fae0":"/assets/hunters/Operative/223.png","a24c06a778d615b34d2c2db09a02181df00e3c2f":"/assets/hunters/Operative/230.png","0fe3f7793c7062d3164a6ecac07d0b6a1fc55d65":"/assets/hunters/Operative/231.png","63fdc826a006dc32530ed16e32b56744da96ff99":"/assets/hunters/Operative/232.png","064c956df313d6fc95f3b0998e389483a0fd28c6":"/assets/hunters/Operative/240.png","e0047708adb72841ac537da604a39e9e46dcb0b7":"/assets/hunters/Operative/241.png","1b45c4f82f2dfdabe2742b67d6f5d1d86f0d4283":"/assets/hunters/Operative/242.png","d5fd1f52ecc2d44786465272493728e6d98ede30":"/assets/hunters/Operative/243.png","a48399aab7c43c283dacc9de894b18147bbfccb1":"/assets/hunters/Operative/244.png","46711a97a1363d1975980cfdd5c09dadf31a729b":"/assets/hunters/Operative/250.png","be8be3cef153cefbc4fdf66b8a5c70d7a0fc068f":"/assets/hunters/Operative/251.png","4494a87bef0d5054b9f9ce24f2106cacd5c6fa6e":"/assets/hunters/Operative/252.png","bae7b02fceee628ce289afa0d7014ccca58f83e2":"/assets/hunters/Operative/260.png","695afb5dc6e3bdfadb89b6eb3d12415efca249fe":"/assets/hunters/Operative/hero.png","57212c02193b23f4d17554ef88380fe306c986df":"/assets/hunters/Siren/000.png","58319e672307d1c516bbbbef749a630c6e37767b":"/assets/hunters/Siren/010.png","f485089a7a1ed3611a91eea49618010632c69642":"/assets/hunters/Siren/011.png","60963b8fa9158e8f365e7cad2cf8531f50176af2":"/assets/hunters/Siren/012.png","3088bb213a23ef9fb576896f0efbd732fb2f7f33":"/assets/hunters/Siren/020.png","c554f40fafaaa061e988f98304f493079253d731":"/assets/hunters/Siren/021.png","8ceafe51b741d8b1a8ea744cd29e237fabd3d692":"/assets/hunters/Siren/022.png","8c2d8c8cc3c60d010805912ec61d5749a03f027f":"/assets/hunters/Siren/023.png","6e0a6c9f543c240479b6c1d73d2b13af3125f4e8":"/assets/hunters/Siren/030.png","e57dd3c7611d17ec6142b6a04500c319f2ab8e79":"/assets/hunters/Siren/031.png","dc6a903b77a8a67c4384fb1f354b34ea2fe4b92e":"/assets/hunters/Siren/032.png","f9b122cfa271eeccec58058c80f4aeefbce87c9b":"/assets/hunters/Siren/033.png","d520fa5bd39b828d5746578f15922fd9f0d27ffd":"/assets/hunters/Siren/034.png","6cd40c59f7373893a7bb33d00f8ff24da60349a5":"/assets/hunters/Siren/040.png","aa296237d8c5cf8cf5f2d06231cdcec07b36e509":"/assets/hunters/Siren/041.png","ef80ca78fb970a88688ca0289e8a7843f6b3ddd9":"/assets/hunters/Siren/050.png","e90bfd5bfe9c7a8c03429c1eee49ff26bfc669e1":"/assets/hunters/Siren/051.png","bd6709b152682fc2eb88297361d348a2c2cee9a1":"/assets/hunters/Siren/052.png","0f879d03ec6df9291678cea9ad8d3bef4e0d3b74":"/assets/hunters/Siren/053.png","9d04da9a041282cb37c0d97e83bce85c63a785f2":"/assets/hunters/Siren/060.png","96fdbdeb8ef38823499cf59b446ac20b86db7ee0":"/assets/hunters/Siren/100.png","bda71cc5df9d604cd097d3f8da0c0404a503b1af":"/assets/hunters/Siren/110.png","0280f1bd6a29b9ae6668fb46b4d45371bf539630":"/assets/hunters/Siren/111.png","83b3f792d7952ce470674935f802833771ada128":"/assets/hunters/Siren/112.png","6087f9870b7c431b1087d48b34524f75f4ebdff9":"/assets/hunters/Siren/120.png","30159cf274855c028235426501aaf6eac8a645a2":"/assets/hunters/Siren/121.png","13295df1006186480bb76d038dbab73743e440f2":"/assets/hunters/Siren/122.png","b2c9c54e37c5ff2701a4b6c02ac83f2b04b460a4":"/assets/hunters/Siren/123.png","628ac596fdb6381c784e593e5c242bfe92d6759b":"/assets/hunters/Siren/130.png","a2b8e7c9cb73862413ee6dd41fd50b65727a4681":"/assets/hunters/Siren/131.png","7d0d1fcb4d9a2eb4ceb6d7b108e46cee8ca1e01b":"/assets/hunters/Siren/132.png","cd371cfffd3f085fb5d4e366a7245585d98434ac":"/assets/hunters/Siren/140.png","f76d7c745e7e7f4fe95fe46cd0ab2102b877bd99":"/assets/hunters/Siren/141.png","e1d68cc26a18121171ad00dcaeb4bd0363a60ab1":"/assets/hunters/Siren/142.png","a371dd81416210b59829dd1c6cd9b33b93ce5b8a":"/assets/hunters/Siren/143.png","6d858495a04fe72c3c357fe9cd241f264f133ad5":"/assets/hunters/Siren/150.png","eab92d709b012c7e21ef7c6b2ad8443ce2a7a3f4":"/assets/hunters/Siren/151.png","bed032432c354753eb8a611993498dc53ca2e6e9":"/assets/hunters/Siren/152.png","3fa960d2c12874870a56a9eea8975b1db805e66c":"/assets/hunters/Siren/160.png","4ecfeeb74d55e7d7f57fccefe731c0f33d362deb":"/assets/hunters/Siren/200.png","e640a9ef005cc59f56512f0ada6f5dbd32a1ef5c":"/assets/hunters/Siren/210.png","327b02ecb10ebcddb1c33e52ba08a2cb92712682":"/assets/hunters/Siren/211.png","a797f881e6817655670a0d32dc74ad15fed5c6d8":"/assets/hunters/Siren/212.png","4451f38ff89ff4efab9eedf58b37acb849456720":"/assets/hunters/Siren/220.png","ac195d75dcd3ae551aef64ff80433252467f20ea":"/assets/hunters/Siren/221.png","f7f74c2a2c23b96486054eef8487a3dbd07ece92":"/assets/hunters/Siren/222.png","63405fd1654248ae3f45e4a7fb3c05d513b364f9":"/assets/hunters/Siren/223.png","58e1d50d3d2e48b1858ce394f43f813c12ec1c2c":"/assets/hunters/Siren/230.png","3b272462d3f5622ade8f46bc1c88333e6f62e05f":"/assets/hunters/Siren/231.png","1c2b2485f37289911ef97036094d2c4c5b0ef618":"/assets/hunters/Siren/232.png","fdf3a0d346941525e0e6d1590d264d5c49ef1148":"/assets/hunters/Siren/240.png","a3d38dcf1753639fe32232d6cba92e42036642ac":"/assets/hunters/Siren/241.png","89bdc1c2aa3342c88fb14ae41793799b109484de":"/assets/hunters/Siren/242.png","bad9c3d49d066e545271058d818cc3fca10514e4":"/assets/hunters/Siren/243.png","54753ca6c780d7622417d673c665ab11bc204029":"/assets/hunters/Siren/250.png","ed21a092d748afd5b86f100839d05f4cb5b2d3b2":"/assets/hunters/Siren/251.png","1ea9f714dc662ce8e0a0035de4db7a0a05e334c7":"/assets/hunters/Siren/252.png","50cc650d962be41549a8595ca6df34b4741a8e50":"/assets/hunters/Siren/260.png","88c73b79a233f81fb265f4a5440157968b250a51":"/assets/hunters/Siren/hero.png","da5115eef0fec4fa4125932d2979689e8c9401e0":"/assets/hunters/augment-action.png","6f1cc287ad25e2f0d8ca12256c2f0277e932b8a8":"/assets/hunters/augment-chevron.png","cfb4c486971c9fac258b2288e3511bc78b7b94b9":"/assets/hunters/augment-diamond.png","1a69f37c8ca85b7e15720d4557b7c3e610b5bd13":"/assets/hunters/basic.png","3a03eb4a327cd89d096bd1ed9f95366649e8e259":"/assets/manifest.json","c47ccf1a49c24cc5842430aa75c72ef491292412":"/assets/robots.txt","0209e710cd9bfbc188d6c18f495b6ac66bb2b814":"/"},"strategy":"changed","responseStrategy":"cache-first","version":"2/17/2020, 10:07:11 PM","name":"webpack-offline","pluginVersion":"5.0.7","relativePaths":false}; +var __wpo = {"assets":{"main":["/45598562077bdc84281b5330ff4d283e.png","/6274c9808eb08785f146a2b78283b5f6.jpg","/bundle.9c683.css","/bundle.26aa2253.js","/assets/favicon.png","/assets/hunters/Beastmaster/000.png","/assets/hunters/Beastmaster/001.png","/assets/hunters/Beastmaster/010.png","/assets/hunters/Beastmaster/011.png","/assets/hunters/Beastmaster/012.png","/assets/hunters/Beastmaster/020.png","/assets/hunters/Beastmaster/021.png","/assets/hunters/Beastmaster/022.png","/assets/hunters/Beastmaster/023.png","/assets/hunters/Beastmaster/030.png","/assets/hunters/Beastmaster/031.png","/assets/hunters/Beastmaster/032.png","/assets/hunters/Beastmaster/033.png","/assets/hunters/Beastmaster/040.png","/assets/hunters/Beastmaster/041.png","/assets/hunters/Beastmaster/042.png","/assets/hunters/Beastmaster/043.png","/assets/hunters/Beastmaster/050.png","/assets/hunters/Beastmaster/051.png","/assets/hunters/Beastmaster/060.png","/assets/hunters/Beastmaster/100.png","/assets/hunters/Beastmaster/101.png","/assets/hunters/Beastmaster/110.png","/assets/hunters/Beastmaster/111.png","/assets/hunters/Beastmaster/112.png","/assets/hunters/Beastmaster/120.png","/assets/hunters/Beastmaster/121.png","/assets/hunters/Beastmaster/122.png","/assets/hunters/Beastmaster/123.png","/assets/hunters/Beastmaster/130.png","/assets/hunters/Beastmaster/131.png","/assets/hunters/Beastmaster/132.png","/assets/hunters/Beastmaster/133.png","/assets/hunters/Beastmaster/140.png","/assets/hunters/Beastmaster/141.png","/assets/hunters/Beastmaster/142.png","/assets/hunters/Beastmaster/143.png","/assets/hunters/Beastmaster/150.png","/assets/hunters/Beastmaster/151.png","/assets/hunters/Beastmaster/152.png","/assets/hunters/Beastmaster/160.png","/assets/hunters/Beastmaster/200.png","/assets/hunters/Beastmaster/201.png","/assets/hunters/Beastmaster/210.png","/assets/hunters/Beastmaster/211.png","/assets/hunters/Beastmaster/212.png","/assets/hunters/Beastmaster/220.png","/assets/hunters/Beastmaster/221.png","/assets/hunters/Beastmaster/222.png","/assets/hunters/Beastmaster/223.png","/assets/hunters/Beastmaster/230.png","/assets/hunters/Beastmaster/231.png","/assets/hunters/Beastmaster/232.png","/assets/hunters/Beastmaster/240.png","/assets/hunters/Beastmaster/241.png","/assets/hunters/Beastmaster/242.png","/assets/hunters/Beastmaster/243.png","/assets/hunters/Beastmaster/250.png","/assets/hunters/Beastmaster/251.png","/assets/hunters/Beastmaster/252.png","/assets/hunters/Beastmaster/260.png","/assets/hunters/Beastmaster/hero.png","/assets/hunters/Gunner/000.png","/assets/hunters/Gunner/010.png","/assets/hunters/Gunner/011.png","/assets/hunters/Gunner/012.png","/assets/hunters/Gunner/020.png","/assets/hunters/Gunner/021.png","/assets/hunters/Gunner/022.png","/assets/hunters/Gunner/023.png","/assets/hunters/Gunner/024.png","/assets/hunters/Gunner/030.png","/assets/hunters/Gunner/031.png","/assets/hunters/Gunner/032.png","/assets/hunters/Gunner/033.png","/assets/hunters/Gunner/040.png","/assets/hunters/Gunner/041.png","/assets/hunters/Gunner/042.png","/assets/hunters/Gunner/043.png","/assets/hunters/Gunner/050.png","/assets/hunters/Gunner/051.png","/assets/hunters/Gunner/052.png","/assets/hunters/Gunner/060.png","/assets/hunters/Gunner/100.png","/assets/hunters/Gunner/110.png","/assets/hunters/Gunner/111.png","/assets/hunters/Gunner/112.png","/assets/hunters/Gunner/120.png","/assets/hunters/Gunner/121.png","/assets/hunters/Gunner/122.png","/assets/hunters/Gunner/123.png","/assets/hunters/Gunner/124.png","/assets/hunters/Gunner/130.png","/assets/hunters/Gunner/131.png","/assets/hunters/Gunner/132.png","/assets/hunters/Gunner/133.png","/assets/hunters/Gunner/140.png","/assets/hunters/Gunner/141.png","/assets/hunters/Gunner/142.png","/assets/hunters/Gunner/143.png","/assets/hunters/Gunner/150.png","/assets/hunters/Gunner/151.png","/assets/hunters/Gunner/152.png","/assets/hunters/Gunner/160.png","/assets/hunters/Gunner/200.png","/assets/hunters/Gunner/210.png","/assets/hunters/Gunner/211.png","/assets/hunters/Gunner/212.png","/assets/hunters/Gunner/220.png","/assets/hunters/Gunner/221.png","/assets/hunters/Gunner/222.png","/assets/hunters/Gunner/223.png","/assets/hunters/Gunner/224.png","/assets/hunters/Gunner/230.png","/assets/hunters/Gunner/231.png","/assets/hunters/Gunner/232.png","/assets/hunters/Gunner/233.png","/assets/hunters/Gunner/240.png","/assets/hunters/Gunner/241.png","/assets/hunters/Gunner/242.png","/assets/hunters/Gunner/243.png","/assets/hunters/Gunner/250.png","/assets/hunters/Gunner/251.png","/assets/hunters/Gunner/252.png","/assets/hunters/Gunner/260.png","/assets/hunters/Gunner/hero.png","/assets/hunters/Operative/000.png","/assets/hunters/Operative/010.png","/assets/hunters/Operative/011.png","/assets/hunters/Operative/012.png","/assets/hunters/Operative/020.png","/assets/hunters/Operative/021.png","/assets/hunters/Operative/022.png","/assets/hunters/Operative/023.png","/assets/hunters/Operative/030.png","/assets/hunters/Operative/031.png","/assets/hunters/Operative/032.png","/assets/hunters/Operative/040.png","/assets/hunters/Operative/041.png","/assets/hunters/Operative/042.png","/assets/hunters/Operative/043.png","/assets/hunters/Operative/044.png","/assets/hunters/Operative/050.png","/assets/hunters/Operative/051.png","/assets/hunters/Operative/052.png","/assets/hunters/Operative/060.png","/assets/hunters/Operative/100.png","/assets/hunters/Operative/110.png","/assets/hunters/Operative/111.png","/assets/hunters/Operative/112.png","/assets/hunters/Operative/120.png","/assets/hunters/Operative/121.png","/assets/hunters/Operative/122.png","/assets/hunters/Operative/123.png","/assets/hunters/Operative/130.png","/assets/hunters/Operative/131.png","/assets/hunters/Operative/132.png","/assets/hunters/Operative/140.png","/assets/hunters/Operative/141.png","/assets/hunters/Operative/142.png","/assets/hunters/Operative/143.png","/assets/hunters/Operative/150.png","/assets/hunters/Operative/160.png","/assets/hunters/Operative/200.png","/assets/hunters/Operative/210.png","/assets/hunters/Operative/211.png","/assets/hunters/Operative/212.png","/assets/hunters/Operative/220.png","/assets/hunters/Operative/221.png","/assets/hunters/Operative/222.png","/assets/hunters/Operative/223.png","/assets/hunters/Operative/230.png","/assets/hunters/Operative/231.png","/assets/hunters/Operative/232.png","/assets/hunters/Operative/240.png","/assets/hunters/Operative/241.png","/assets/hunters/Operative/242.png","/assets/hunters/Operative/243.png","/assets/hunters/Operative/244.png","/assets/hunters/Operative/250.png","/assets/hunters/Operative/251.png","/assets/hunters/Operative/252.png","/assets/hunters/Operative/260.png","/assets/hunters/Operative/hero.png","/assets/hunters/Siren/000.png","/assets/hunters/Siren/010.png","/assets/hunters/Siren/011.png","/assets/hunters/Siren/012.png","/assets/hunters/Siren/020.png","/assets/hunters/Siren/021.png","/assets/hunters/Siren/022.png","/assets/hunters/Siren/023.png","/assets/hunters/Siren/030.png","/assets/hunters/Siren/031.png","/assets/hunters/Siren/032.png","/assets/hunters/Siren/033.png","/assets/hunters/Siren/034.png","/assets/hunters/Siren/040.png","/assets/hunters/Siren/041.png","/assets/hunters/Siren/050.png","/assets/hunters/Siren/051.png","/assets/hunters/Siren/052.png","/assets/hunters/Siren/053.png","/assets/hunters/Siren/060.png","/assets/hunters/Siren/100.png","/assets/hunters/Siren/110.png","/assets/hunters/Siren/111.png","/assets/hunters/Siren/112.png","/assets/hunters/Siren/120.png","/assets/hunters/Siren/121.png","/assets/hunters/Siren/122.png","/assets/hunters/Siren/123.png","/assets/hunters/Siren/130.png","/assets/hunters/Siren/131.png","/assets/hunters/Siren/132.png","/assets/hunters/Siren/140.png","/assets/hunters/Siren/141.png","/assets/hunters/Siren/142.png","/assets/hunters/Siren/143.png","/assets/hunters/Siren/150.png","/assets/hunters/Siren/151.png","/assets/hunters/Siren/152.png","/assets/hunters/Siren/160.png","/assets/hunters/Siren/200.png","/assets/hunters/Siren/210.png","/assets/hunters/Siren/211.png","/assets/hunters/Siren/212.png","/assets/hunters/Siren/220.png","/assets/hunters/Siren/221.png","/assets/hunters/Siren/222.png","/assets/hunters/Siren/223.png","/assets/hunters/Siren/230.png","/assets/hunters/Siren/231.png","/assets/hunters/Siren/232.png","/assets/hunters/Siren/240.png","/assets/hunters/Siren/241.png","/assets/hunters/Siren/242.png","/assets/hunters/Siren/243.png","/assets/hunters/Siren/250.png","/assets/hunters/Siren/251.png","/assets/hunters/Siren/252.png","/assets/hunters/Siren/260.png","/assets/hunters/Siren/hero.png","/assets/hunters/augment-action.png","/assets/hunters/augment-chevron.png","/assets/hunters/augment-diamond.png","/assets/hunters/basic.png","/assets/manifest.json","/assets/robots.txt","/"],"additional":[],"optional":[]},"externals":[],"hashesMap":{"6e148698d382b2c0806ba60a00e5e3e431d7232f":"/45598562077bdc84281b5330ff4d283e.png","507dda73c3ff7f9e08f8788d03b518bb39678b85":"/6274c9808eb08785f146a2b78283b5f6.jpg","52647711740605b3b91f8cf57cb4be3586119102":"/bundle.9c683.css","506d0da57d940ad81f033bdacf784e754c63420c":"/bundle.26aa2253.js","67af5559591f22ffba90d13299f3df513e5cbc52":"/assets/favicon.png","9af1150332d75385d8ffdc64d571ec8d1a437f0f":"/assets/hunters/Beastmaster/000.png","c2925bcd582074cfd7e6aeedcd1dbb2781a48031":"/assets/hunters/Beastmaster/001.png","6d40ff1f4f45ea121a66d2293d2db879d9d66ef6":"/assets/hunters/Beastmaster/010.png","ed9f7a1a2d7e0bbc75bb655a9899f5daee69d9df":"/assets/hunters/Beastmaster/011.png","189f08d09779099cb3866ecd2e5db147e8688f7b":"/assets/hunters/Beastmaster/012.png","4da990290ac582249093aa0762ec03ce194568d9":"/assets/hunters/Beastmaster/020.png","c587d5fe8d5e028bb7e616dcea87379611f268f1":"/assets/hunters/Beastmaster/021.png","a46ddf7becbdfc0de6acab4527ab2ea2321a2d5a":"/assets/hunters/Beastmaster/022.png","af94b67084c450485969b7f3b9214db033c72084":"/assets/hunters/Beastmaster/023.png","fd0cfa0fed9faca922742630721f5816554e93e3":"/assets/hunters/Beastmaster/030.png","901a3ecef0ef8dada62b1b30e8bdf49fb1551ddf":"/assets/hunters/Beastmaster/031.png","dadc56494285303f24541f5577bb205a74043a62":"/assets/hunters/Beastmaster/032.png","7ae0e52589523f74914281227f6e461ff2d9a267":"/assets/hunters/Beastmaster/033.png","faeaa65837f8379a0e11960b89caec4d5bace436":"/assets/hunters/Beastmaster/040.png","f28d5dc8cf56ec11f6d2ecdef2375edfe953a562":"/assets/hunters/Beastmaster/041.png","ac562b991899445dcc8878a69d1a2a76de25f4e6":"/assets/hunters/Beastmaster/042.png","1a91e2aa94ad216dc0c71851c008bd818bdb1941":"/assets/hunters/Beastmaster/043.png","f03ca5e3841494d7773c1c0aff46aaa11e53f85a":"/assets/hunters/Beastmaster/050.png","cb621aefc1783ddb201e202d412ad3907b78f414":"/assets/hunters/Beastmaster/051.png","22d915e3a307b42461c9b8cfb1c2bb3c78f36a8a":"/assets/hunters/Beastmaster/060.png","30628665bf411727c306cbeac159456db3be9e1f":"/assets/hunters/Beastmaster/100.png","82dcc57934ea55d61fa48dbbb190574a5b83a3d8":"/assets/hunters/Beastmaster/101.png","7e14ff5afd5e2eec8e0f0f6e11f7f475317924fa":"/assets/hunters/Beastmaster/110.png","024f1a8d93699ef6add10638fb7a34d8edb60d8c":"/assets/hunters/Beastmaster/111.png","7df3c789dbf3a63f3a1b226a9d52dad1d882b2f9":"/assets/hunters/Beastmaster/112.png","26cf2fdbb660e73e0127dd4d3db270f9caddef3a":"/assets/hunters/Beastmaster/120.png","33e7cb07076d660b1124bf0e700b54c560b35396":"/assets/hunters/Beastmaster/121.png","a2e8552717e0b056949779ae5720c1a03bdb4372":"/assets/hunters/Beastmaster/122.png","ac7ffb0b0746ac85d369e1bd3c7947a34ba396aa":"/assets/hunters/Beastmaster/123.png","0bec5e860f684498986e687f265c30f8091869c2":"/assets/hunters/Beastmaster/130.png","8b693e1a7730d22dcf1c1b2eddcaae94b372c769":"/assets/hunters/Beastmaster/131.png","aaf378398b332e219c89cc0a4a4f401cc254866b":"/assets/hunters/Beastmaster/132.png","99a3944a10da723293bca8c01cf335b1068093f0":"/assets/hunters/Beastmaster/133.png","32cc792225263a7d52b1e4f20893365f20cc812b":"/assets/hunters/Beastmaster/140.png","ce96b467323aab2967e07124fef6b58d4259229c":"/assets/hunters/Beastmaster/141.png","d78620f70a3ce4f785c8f4b1d7aebd23a0831fe2":"/assets/hunters/Beastmaster/142.png","e71e828300067bb37ddff61f38d3559ae9e20c2c":"/assets/hunters/Beastmaster/143.png","eeff605535573fed8b6ce039e91e37beaf5ea456":"/assets/hunters/Beastmaster/150.png","ea2699d4b4c5eaca7588dc33bc10f27f1206052c":"/assets/hunters/Beastmaster/151.png","e325151f9b69d8d147407c8b70ce72627ca93830":"/assets/hunters/Beastmaster/152.png","982415964f422ed25a5ffab32a28ea7a854c1541":"/assets/hunters/Beastmaster/160.png","977877a464943f876846612ecc8493bb8137b0f6":"/assets/hunters/Beastmaster/200.png","7fb64ed1f5d0baf25f772cd5af5da6feb2f6270d":"/assets/hunters/Beastmaster/201.png","d9a71f3dee3ed3f69ff83794687c9c06228385b3":"/assets/hunters/Beastmaster/210.png","96ce6f53559178f4dfbbabf251242a4c5c241b17":"/assets/hunters/Beastmaster/211.png","6e044f76a1700b3739bfcafbbfb33e9146f2693a":"/assets/hunters/Beastmaster/212.png","23abf2f2c2b3bba52a7eef79e2e3460a063b063a":"/assets/hunters/Beastmaster/220.png","32c28e47255087a985b6f17c2076534ea631c1ee":"/assets/hunters/Beastmaster/221.png","b23df346b16cd8aa7e320e90d3c759f8fafc9929":"/assets/hunters/Beastmaster/222.png","663f88fff3084d908fd24a36ecd7b6c88bc4b940":"/assets/hunters/Beastmaster/223.png","1b61af090bb407ae59f4fce586f777e99f390abd":"/assets/hunters/Beastmaster/230.png","15d9fbd82ef4e0de5eaafb1ee079ef276e721573":"/assets/hunters/Beastmaster/231.png","253f574bc73a1cd2b808a382de2ec3a04c3b94bb":"/assets/hunters/Beastmaster/232.png","ddeda995655074539ee0bad9c6588a2cdcc36e61":"/assets/hunters/Beastmaster/240.png","94b05d293948e5d6588dcc423019b40eff55396d":"/assets/hunters/Beastmaster/241.png","afaf095f2bf2a9478fde265dd06b5b1d6d68ef1b":"/assets/hunters/Beastmaster/242.png","e3073e7192fa6ac41dd2a48d309056f37a908c92":"/assets/hunters/Beastmaster/243.png","8df769891eeb6868762131a107658dff76f4b139":"/assets/hunters/Beastmaster/250.png","ba3887ee18f5edd865c6069f89ff1a5603dd119b":"/assets/hunters/Beastmaster/251.png","5e9b8f8e3d316c352177fa203cc280ccaed98f43":"/assets/hunters/Beastmaster/252.png","5d20741e9d260aca46897c69dd5427c50000c012":"/assets/hunters/Beastmaster/260.png","a130dbe9dbd85818b542218b80337b41a60b8f57":"/assets/hunters/Beastmaster/hero.png","4187c6c8ae77b9bd8d0215d6980ce50d3b7c3e19":"/assets/hunters/Gunner/000.png","54ba8ace6d5d6e8ae01ec25a1db23910ea4230b6":"/assets/hunters/Gunner/010.png","a64742e5642e605bf7ef6a8f4686d292d60b0d31":"/assets/hunters/Gunner/011.png","63090db8b79d42db3af5da2011ee75fa4b15c263":"/assets/hunters/Gunner/012.png","0ea5958ea65635176bbd7e13c152cc4333621245":"/assets/hunters/Gunner/020.png","cd5d48863b8f918eff767e4a27978983f5532863":"/assets/hunters/Gunner/021.png","dc39585077aa0888669d15d9e4ac9af80c4470d3":"/assets/hunters/Gunner/022.png","366c52377ad6b58e2a4b405855c94b221748cf58":"/assets/hunters/Gunner/023.png","4c3e4ad961bb6a2df481a385e0dd792622853098":"/assets/hunters/Gunner/024.png","bb2acdcd1cfc65557be53994f5e464add91efef8":"/assets/hunters/Gunner/030.png","18727a70a50c5c88546d6a18f422a5a9fec0eb60":"/assets/hunters/Gunner/031.png","bfa8f91257949610a3ed259d0e75cc4c297667dc":"/assets/hunters/Gunner/032.png","b0189c14fb87e38e996f45aeb5b866830caae3fd":"/assets/hunters/Gunner/033.png","eebe75ecefbbb0d338e4878f930bc1105fe2b01f":"/assets/hunters/Gunner/040.png","f98d09199bbf20aa0a10bb80da8eba3066056287":"/assets/hunters/Gunner/041.png","cbd1b2927a1eb75ec293c4231c4bc61c6e8d740f":"/assets/hunters/Gunner/042.png","a7b036839f7cf93c6f3b3372d55b774aff758be0":"/assets/hunters/Gunner/043.png","fd4608d9372eff5bd077693c60ed19aa01fb4969":"/assets/hunters/Gunner/050.png","0ffe098e5a7914ad6a68dc68953f81f2666d6120":"/assets/hunters/Gunner/051.png","7ff320db6f0b9fd30d5821adbd3e20ca959b42c6":"/assets/hunters/Gunner/052.png","aa17029957f1594bada996c1dc9856a7fb4471e2":"/assets/hunters/Gunner/060.png","da1375416c4581fed1c744b6bdd0e47818178d94":"/assets/hunters/Gunner/100.png","f0985444446483e8155d5ad62b1a4891f134fa83":"/assets/hunters/Gunner/110.png","445438d55e403f82c19514787ddef15e5e954b80":"/assets/hunters/Gunner/111.png","0fe037264951d5cb8f0cd491de447f49a08064d0":"/assets/hunters/Gunner/112.png","7a65dafe4415dbcf539da1ec53e536acd1745ec5":"/assets/hunters/Gunner/120.png","05f3bbbe0c86817a04bd38488c77321e92dea508":"/assets/hunters/Gunner/121.png","6f4d55e6ad61f43edc35f6470d939978680efc9a":"/assets/hunters/Gunner/122.png","f55dc9d48685bee4ef27001fd53b5c3c383e83b7":"/assets/hunters/Gunner/123.png","aecb1b10a6e3d7b257f041222ff10997e92b07ba":"/assets/hunters/Gunner/124.png","b701fbcb98aca94c4e6568b1c32f906586f480a3":"/assets/hunters/Gunner/130.png","35604765c3975337b7e4c8e8b0e0aebb52517ff8":"/assets/hunters/Gunner/131.png","4f961a48612b9e3a088f5531102be6e609a9fc8f":"/assets/hunters/Gunner/132.png","0e15f8e90e1940044a3ca106f938279ac9cc7f0b":"/assets/hunters/Gunner/133.png","2389e82816838d62586b52e7388482664f3060ab":"/assets/hunters/Gunner/140.png","6206c23cc0ff52527d39f0334edbf1df9a4800d1":"/assets/hunters/Gunner/141.png","7ea99637b1199931144a5fe37813c5e9e8324362":"/assets/hunters/Gunner/142.png","71297be19da6b323bc9f6ccff3e724b6d50b29d3":"/assets/hunters/Gunner/143.png","0010bbf4ca4077299aa70fea4a0add3071d6ddb9":"/assets/hunters/Gunner/150.png","a0a6a4366ce4b1e0e5a50d73f9538fc3ac04e8d2":"/assets/hunters/Gunner/151.png","82a16ee707c2d92ab932cd1db55cb9020e670272":"/assets/hunters/Gunner/152.png","114a44e26c933145f43a36cea694770eb3b120a1":"/assets/hunters/Gunner/160.png","1d5b2851ef2347aabf476f610600e4476c3b18bf":"/assets/hunters/Gunner/200.png","e7febc53830b0e4fb9cd8a92c2e6332ce1540f01":"/assets/hunters/Gunner/210.png","bd2bd9ba423cecbd1eadd6ed1ca4a68679b1dbc3":"/assets/hunters/Gunner/211.png","2fabd4a301616f6704940823d7a81c5fd369f53d":"/assets/hunters/Gunner/212.png","f9848cfe5c6fb11a5821029722af40faaee64a96":"/assets/hunters/Gunner/220.png","a2598fb40de61863547fe2b67c81b149e8fbc332":"/assets/hunters/Gunner/221.png","bc5e563aaf3216c6efb290e99cd3b6a362bb7d95":"/assets/hunters/Gunner/222.png","8d361fd4a34014b89b9c0a03a9fa338dba865ce5":"/assets/hunters/Gunner/223.png","3f4c9dd9f0dd7354273758532040fbccc2277c6f":"/assets/hunters/Gunner/224.png","b7b50379f1803c2d00f719483f1ed7aa34bddd45":"/assets/hunters/Gunner/230.png","0448c6458f4f5359776f636a471580fb11121be8":"/assets/hunters/Gunner/231.png","256073fae1eb05b3d94651905f01cb5bfd92e23b":"/assets/hunters/Gunner/232.png","cbca31bdca22859ab3f37ccdd80ae8334b794338":"/assets/hunters/Gunner/233.png","4522c90c5d25323cd95180054514cc6ccdb92664":"/assets/hunters/Gunner/240.png","e89b15316e45658116fed755c6011521e486ae9b":"/assets/hunters/Gunner/241.png","44cb933def44307d807f4634268686e0a5aa8216":"/assets/hunters/Gunner/242.png","77dd207479a8fa95602d195c9deb1eebf0b5b697":"/assets/hunters/Gunner/243.png","223135018c6e6d35524ef84b6a8cfceae4b4275c":"/assets/hunters/Gunner/250.png","0aed8b4d9cb55d8d6df832ac1ffa2de61ac85def":"/assets/hunters/Gunner/251.png","3906bbc206f0eacbe03247f8fbd334b0545b0b70":"/assets/hunters/Gunner/252.png","3bec18b1f50a52e19b78c59b7df679734c07a43f":"/assets/hunters/Gunner/260.png","eaf0686064b5bc00abc5b7cc0fb8939369a41503":"/assets/hunters/Gunner/hero.png","e40e1fc31efbc81b37ff548787f0edd4b8b64c13":"/assets/hunters/Operative/000.png","fd18822d21daa341af9e4f94fa70262db14e7e35":"/assets/hunters/Operative/010.png","058992804a106410e81d1b49dca7fa8ce1c6b5c9":"/assets/hunters/Operative/011.png","654f8233158d370f5a40f5fe36f63e85aaae0740":"/assets/hunters/Operative/012.png","095a541f6df8d85c8b08d2f229008c80f7c69272":"/assets/hunters/Operative/020.png","d53106ffa8f071e7378431dcc785bfad863f4518":"/assets/hunters/Operative/021.png","6bd2425c6cdf8540e9dd6039f95214e6a80cb2ad":"/assets/hunters/Operative/022.png","7a3fbca77aaff8e9fbdcd15c204e339cebfabe3d":"/assets/hunters/Operative/023.png","e64459bcabee744812c4b3cc407d17e14b5bc234":"/assets/hunters/Operative/030.png","c2ddf9b83a43f78f5b85f0a3f3e7d1d4c7985b2a":"/assets/hunters/Operative/031.png","d850497106e1e12027db58408438dab289517dd6":"/assets/hunters/Operative/032.png","507904d621f8a38c95cf410ce5613dd97833a494":"/assets/hunters/Operative/040.png","bf29347f3a54ac5abf730245a6d5d9fc71a8210b":"/assets/hunters/Operative/041.png","8e2e0be519c250a5e5b64f7c623761a568131255":"/assets/hunters/Operative/042.png","30ffd6fc8ff712203258736ef97af135c86a338a":"/assets/hunters/Operative/043.png","219b472bf0aa359cc2d051c2fb8feec06802ba5c":"/assets/hunters/Operative/044.png","a7ec503665b5309d42b0cc5d202098c80f23e0ea":"/assets/hunters/Operative/050.png","c0aa8c2498b3b9bd73422ff8efea305fad690e18":"/assets/hunters/Operative/051.png","4bd4d4f7b4cc589129e2f22cb5a32c5a08541d2a":"/assets/hunters/Operative/052.png","7c288f69ff398d0825f188a7989fed55416836a0":"/assets/hunters/Operative/060.png","7a495ec486cbe6ba809f0ceb31117225017910e5":"/assets/hunters/Operative/100.png","c7a17ec6da6656a3e041ce2b7f42c1b92ed713fa":"/assets/hunters/Operative/110.png","4a8fda88f745e7301235c978a134d3ca5c41d5a7":"/assets/hunters/Operative/111.png","2002837a2ec2c7f6dada2f6aaa75388f29ad6e4c":"/assets/hunters/Operative/112.png","04a9c7c143898286803a85cef9db9066dcb2bada":"/assets/hunters/Operative/120.png","a4480299ebbe70463b4ee1c184da0d0ba209182c":"/assets/hunters/Operative/121.png","80e14d582ebcf34e22abfa0cc7d4f1557503214e":"/assets/hunters/Operative/122.png","4a7b8d4b079c5f00f04fdffdb657e8ad69446560":"/assets/hunters/Operative/123.png","2c2af16423174d171f3ee39459aebebbf9ae9fad":"/assets/hunters/Operative/130.png","826a5707be9431a3dd0b7b0bd0b59bb5710c1447":"/assets/hunters/Operative/131.png","86ba39661db22dd276eb3dfbec65988b012c9237":"/assets/hunters/Operative/132.png","45c65212d85d25b9c4ab5ab05824da55107743f4":"/assets/hunters/Operative/140.png","eeba798cd9a667dfc31ab25db9cb4a633d31a150":"/assets/hunters/Operative/141.png","be846fd50ce21587aa0cea64d4a5f57937ba5265":"/assets/hunters/Operative/142.png","e8c7b5aecf30e84c6323b10156a8532064bece5d":"/assets/hunters/Operative/143.png","6b488e1ddbd290ba80a210b735b3c25c58ed7cb8":"/assets/hunters/Operative/150.png","19e79d9cf7054f0fb659fa696ffc380e9d468dc4":"/assets/hunters/Operative/160.png","7d62f2dd934d1104f2dfffb3ddb89cdcd5da016b":"/assets/hunters/Operative/200.png","09b9d5331cee82ebafb31036819aeb604385d8a2":"/assets/hunters/Operative/210.png","9cd2e136045e5edc2d47949ec7d76676fbffbc85":"/assets/hunters/Operative/211.png","cc20f1335a72571f1651dce50d3e954f7e482b7e":"/assets/hunters/Operative/212.png","355d50f3aefe59db6bcd1ace3b23d0a15a090b05":"/assets/hunters/Operative/220.png","35a1a8612977e3ab005a673e5a59919fa919d956":"/assets/hunters/Operative/221.png","6a7240e95312ac568433ec4e91dae1cd44d25e14":"/assets/hunters/Operative/222.png","94dde5c18b76dbaf6acc716025712a46d898fae0":"/assets/hunters/Operative/223.png","a24c06a778d615b34d2c2db09a02181df00e3c2f":"/assets/hunters/Operative/230.png","0fe3f7793c7062d3164a6ecac07d0b6a1fc55d65":"/assets/hunters/Operative/231.png","63fdc826a006dc32530ed16e32b56744da96ff99":"/assets/hunters/Operative/232.png","064c956df313d6fc95f3b0998e389483a0fd28c6":"/assets/hunters/Operative/240.png","e0047708adb72841ac537da604a39e9e46dcb0b7":"/assets/hunters/Operative/241.png","1b45c4f82f2dfdabe2742b67d6f5d1d86f0d4283":"/assets/hunters/Operative/242.png","d5fd1f52ecc2d44786465272493728e6d98ede30":"/assets/hunters/Operative/243.png","a48399aab7c43c283dacc9de894b18147bbfccb1":"/assets/hunters/Operative/244.png","46711a97a1363d1975980cfdd5c09dadf31a729b":"/assets/hunters/Operative/250.png","be8be3cef153cefbc4fdf66b8a5c70d7a0fc068f":"/assets/hunters/Operative/251.png","4494a87bef0d5054b9f9ce24f2106cacd5c6fa6e":"/assets/hunters/Operative/252.png","bae7b02fceee628ce289afa0d7014ccca58f83e2":"/assets/hunters/Operative/260.png","695afb5dc6e3bdfadb89b6eb3d12415efca249fe":"/assets/hunters/Operative/hero.png","57212c02193b23f4d17554ef88380fe306c986df":"/assets/hunters/Siren/000.png","58319e672307d1c516bbbbef749a630c6e37767b":"/assets/hunters/Siren/010.png","f485089a7a1ed3611a91eea49618010632c69642":"/assets/hunters/Siren/011.png","60963b8fa9158e8f365e7cad2cf8531f50176af2":"/assets/hunters/Siren/012.png","3088bb213a23ef9fb576896f0efbd732fb2f7f33":"/assets/hunters/Siren/020.png","c554f40fafaaa061e988f98304f493079253d731":"/assets/hunters/Siren/021.png","8ceafe51b741d8b1a8ea744cd29e237fabd3d692":"/assets/hunters/Siren/022.png","8c2d8c8cc3c60d010805912ec61d5749a03f027f":"/assets/hunters/Siren/023.png","6e0a6c9f543c240479b6c1d73d2b13af3125f4e8":"/assets/hunters/Siren/030.png","e57dd3c7611d17ec6142b6a04500c319f2ab8e79":"/assets/hunters/Siren/031.png","dc6a903b77a8a67c4384fb1f354b34ea2fe4b92e":"/assets/hunters/Siren/032.png","f9b122cfa271eeccec58058c80f4aeefbce87c9b":"/assets/hunters/Siren/033.png","d520fa5bd39b828d5746578f15922fd9f0d27ffd":"/assets/hunters/Siren/034.png","6cd40c59f7373893a7bb33d00f8ff24da60349a5":"/assets/hunters/Siren/040.png","aa296237d8c5cf8cf5f2d06231cdcec07b36e509":"/assets/hunters/Siren/041.png","ef80ca78fb970a88688ca0289e8a7843f6b3ddd9":"/assets/hunters/Siren/050.png","e90bfd5bfe9c7a8c03429c1eee49ff26bfc669e1":"/assets/hunters/Siren/051.png","bd6709b152682fc2eb88297361d348a2c2cee9a1":"/assets/hunters/Siren/052.png","0f879d03ec6df9291678cea9ad8d3bef4e0d3b74":"/assets/hunters/Siren/053.png","9d04da9a041282cb37c0d97e83bce85c63a785f2":"/assets/hunters/Siren/060.png","96fdbdeb8ef38823499cf59b446ac20b86db7ee0":"/assets/hunters/Siren/100.png","bda71cc5df9d604cd097d3f8da0c0404a503b1af":"/assets/hunters/Siren/110.png","0280f1bd6a29b9ae6668fb46b4d45371bf539630":"/assets/hunters/Siren/111.png","83b3f792d7952ce470674935f802833771ada128":"/assets/hunters/Siren/112.png","6087f9870b7c431b1087d48b34524f75f4ebdff9":"/assets/hunters/Siren/120.png","30159cf274855c028235426501aaf6eac8a645a2":"/assets/hunters/Siren/121.png","13295df1006186480bb76d038dbab73743e440f2":"/assets/hunters/Siren/122.png","b2c9c54e37c5ff2701a4b6c02ac83f2b04b460a4":"/assets/hunters/Siren/123.png","628ac596fdb6381c784e593e5c242bfe92d6759b":"/assets/hunters/Siren/130.png","a2b8e7c9cb73862413ee6dd41fd50b65727a4681":"/assets/hunters/Siren/131.png","7d0d1fcb4d9a2eb4ceb6d7b108e46cee8ca1e01b":"/assets/hunters/Siren/132.png","cd371cfffd3f085fb5d4e366a7245585d98434ac":"/assets/hunters/Siren/140.png","f76d7c745e7e7f4fe95fe46cd0ab2102b877bd99":"/assets/hunters/Siren/141.png","e1d68cc26a18121171ad00dcaeb4bd0363a60ab1":"/assets/hunters/Siren/142.png","a371dd81416210b59829dd1c6cd9b33b93ce5b8a":"/assets/hunters/Siren/143.png","6d858495a04fe72c3c357fe9cd241f264f133ad5":"/assets/hunters/Siren/150.png","eab92d709b012c7e21ef7c6b2ad8443ce2a7a3f4":"/assets/hunters/Siren/151.png","bed032432c354753eb8a611993498dc53ca2e6e9":"/assets/hunters/Siren/152.png","3fa960d2c12874870a56a9eea8975b1db805e66c":"/assets/hunters/Siren/160.png","4ecfeeb74d55e7d7f57fccefe731c0f33d362deb":"/assets/hunters/Siren/200.png","e640a9ef005cc59f56512f0ada6f5dbd32a1ef5c":"/assets/hunters/Siren/210.png","327b02ecb10ebcddb1c33e52ba08a2cb92712682":"/assets/hunters/Siren/211.png","a797f881e6817655670a0d32dc74ad15fed5c6d8":"/assets/hunters/Siren/212.png","4451f38ff89ff4efab9eedf58b37acb849456720":"/assets/hunters/Siren/220.png","ac195d75dcd3ae551aef64ff80433252467f20ea":"/assets/hunters/Siren/221.png","f7f74c2a2c23b96486054eef8487a3dbd07ece92":"/assets/hunters/Siren/222.png","63405fd1654248ae3f45e4a7fb3c05d513b364f9":"/assets/hunters/Siren/223.png","58e1d50d3d2e48b1858ce394f43f813c12ec1c2c":"/assets/hunters/Siren/230.png","3b272462d3f5622ade8f46bc1c88333e6f62e05f":"/assets/hunters/Siren/231.png","1c2b2485f37289911ef97036094d2c4c5b0ef618":"/assets/hunters/Siren/232.png","fdf3a0d346941525e0e6d1590d264d5c49ef1148":"/assets/hunters/Siren/240.png","a3d38dcf1753639fe32232d6cba92e42036642ac":"/assets/hunters/Siren/241.png","89bdc1c2aa3342c88fb14ae41793799b109484de":"/assets/hunters/Siren/242.png","bad9c3d49d066e545271058d818cc3fca10514e4":"/assets/hunters/Siren/243.png","54753ca6c780d7622417d673c665ab11bc204029":"/assets/hunters/Siren/250.png","ed21a092d748afd5b86f100839d05f4cb5b2d3b2":"/assets/hunters/Siren/251.png","1ea9f714dc662ce8e0a0035de4db7a0a05e334c7":"/assets/hunters/Siren/252.png","50cc650d962be41549a8595ca6df34b4741a8e50":"/assets/hunters/Siren/260.png","88c73b79a233f81fb265f4a5440157968b250a51":"/assets/hunters/Siren/hero.png","da5115eef0fec4fa4125932d2979689e8c9401e0":"/assets/hunters/augment-action.png","6f1cc287ad25e2f0d8ca12256c2f0277e932b8a8":"/assets/hunters/augment-chevron.png","cfb4c486971c9fac258b2288e3511bc78b7b94b9":"/assets/hunters/augment-diamond.png","1a69f37c8ca85b7e15720d4557b7c3e610b5bd13":"/assets/hunters/basic.png","3a03eb4a327cd89d096bd1ed9f95366649e8e259":"/assets/manifest.json","c47ccf1a49c24cc5842430aa75c72ef491292412":"/assets/robots.txt","dda31fb53c0c17df55434f8250e141a884db1e91":"/"},"strategy":"changed","responseStrategy":"cache-first","version":"3/12/2020, 1:43:49 PM","name":"webpack-offline","pluginVersion":"5.0.7","relativePaths":false}; !function(e){function n(r){if(t[r])return t[r].exports;var o=t[r]={i:r,l:!1,exports:{}};return e[r].call(o.exports,o,o.exports,n),o.l=!0,o.exports}var t={};n.m=e,n.c=t,n.d=function(e,t,r){n.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:r})},n.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},n.t=function(e,t){if(1&t&&(e=n(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var r=Object.create(null);if(n.r(r),Object.defineProperty(r,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var o in e)n.d(r,o,function(n){return e[n]}.bind(null,o));return r},n.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return n.d(t,"a",t),t},n.o=function(e,n){return Object.prototype.hasOwnProperty.call(e,n)},n.p="/",n(n.s="+N4f")}({"+N4f":function(e,n,t){"use strict";function r(e,n){return caches.match(e,{cacheName:n}).then(function(t){return o(t)?t:i(t).then(function(t){return caches.open(n).then(function(n){return n.put(e,t)}).then(function(){return t})})}).catch(function(){})}function o(e){return!e||!e.redirected||!e.ok||"opaqueredirect"===e.type}function i(e){return o(e)?Promise.resolve(e):("body"in e?Promise.resolve(e.body):e.blob()).then(function(n){return new Response(n,{headers:e.headers,status:e.status})})}function a(e,n){console.groupCollapsed("[SW]:",e),n.forEach(function(e){console.log("Asset:",e)}),console.groupEnd()}var c,s,u;if(c=ExtendableEvent.prototype.waitUntil,s=FetchEvent.prototype.respondWith,u=new WeakMap,ExtendableEvent.prototype.waitUntil=function(e){var n=this,t=u.get(n);if(!t)return t=[Promise.resolve(e)],u.set(n,t),c.call(n,Promise.resolve().then(function e(){var r=t.length;return Promise.all(t.map(function(e){return e.catch(function(){})})).then(function(){return t.length!=r?e():(u.delete(n),Promise.all(t))})}));t.push(Promise.resolve(e))},FetchEvent.prototype.respondWith=function(e){return this.waitUntil(e),s.call(this,e)},void 0===f)var f=!1;!function(e,n){function t(n){var t=w[n];return caches.open(q).then(function(r){return h(r,t,{bust:e.version,request:b,failAll:"main"===n})}).then(function(){a("Cached assets: "+n,t)}).catch(function(e){throw console.error(e),e})}function o(n){return caches.keys().then(function(e){for(var n=e.length,t=void 0;n--&&0!==(t=e[n]).indexOf(P););if(t){var r=void 0;return caches.open(t).then(function(e){return r=e,e.match(new URL(R,location).toString())}).then(function(e){if(e)return Promise.all([r,r.keys(),e.json()])})}}).then(function(r){if(!r)return t(n);var o=r[0],i=r[1],c=r[2],s=c.hashmap;if(!c.hashmap||c.version===e.version)return t(n);var u=Object.keys(s).map(function(e){return s[e]}),f=i.map(function(e){var n=new URL(e.url);return n.search="",n.hash="",n.toString()}),l=w[n],d=[],p=l.filter(function(e){return-1===f.indexOf(e)||-1===u.indexOf(e)});Object.keys(y).forEach(function(e){var n=y[e];if(-1!==l.indexOf(n)&&-1===p.indexOf(n)&&-1===d.indexOf(n)){var t=s[e];t&&-1!==f.indexOf(t)?d.push([t,n]):p.push(n)}}),a("Changed assets: "+n,p),a("Moved assets: "+n,d);var v=Promise.all(d.map(function(e){return o.match(e[0]).then(function(n){return[e[1],n]})}));return caches.open(q).then(function(t){var r=v.then(function(e){return Promise.all(e.map(function(e){return t.put(e[0],e[1])}))});return Promise.all([r,h(t,p,{bust:e.version,request:b,failAll:"main"===n,deleteFirst:"main"!==n})])})})}function c(){return caches.keys().then(function(e){var n=e.map(function(e){if(0===e.indexOf(P)&&0!==e.indexOf(q))return console.log("[SW]:","Delete cache:",e),caches.delete(e)});return Promise.all(n)})}function s(){return caches.open(q).then(function(n){var t=new Response(JSON.stringify({version:e.version,hashmap:y}));return n.put(new URL(R,location).toString(),t)})}function u(e,n,t){return function(e){if(v&&"function"==typeof v.map&&e.preloadResponse&&"navigate"===e.request.mode){var n=v.map(new URL(e.request.url),e.request);n&&function(e,n){var t=new URL(e,location),r=n.preloadResponse;x.set(r,{url:t,response:r});var o=function(){return x.has(r)},i=r.then(function(e){if(e&&o()){var n=e.clone();return caches.open(O).then(function(e){if(o())return e.put(t,n).then(function(){if(!o())return caches.open(O).then(function(e){return e.delete(t)})})})}});n.waitUntil(i)}(n,e)}}(e),r(t,q).then(function(r){return r?(f&&console.log("[SW]:","URL ["+t+"]("+n+") from cache"),r):fetch(e.request).then(function(r){return r.ok?(f&&console.log("[SW]:","URL ["+n+"] from network"),t===n&&(o=r.clone(),i=caches.open(q).then(function(e){return e.put(n,o)}).then(function(){console.log("[SW]:","Cache asset: "+n)}),e.waitUntil(i)),r):(f&&console.log("[SW]:","URL ["+n+"] wrong response: ["+r.status+"] "+r.type),r);var o,i})})}function l(e){var n=new URL(e.request.url);if(self.registration.navigationPreload&&v&&v.test&&v.test(n,e.request)){var t=function(e){if(x){var n=void 0,t=void 0;return x.forEach(function(r,o){r.url.href===e.href&&(n=r.response,t=o)}),n?(x.delete(t),n):void 0}}(n),o=e.request;return t?(e.waitUntil(caches.open(O).then(function(e){return e.delete(o)})),t):r(o,O).then(function(n){return n&&e.waitUntil(caches.open(O).then(function(e){return e.delete(o)})),n||fetch(e.request)})}}function h(e,n,t){n=n.slice();var r=t.bust,o=!1!==t.failAll,a=!0===t.deleteFirst,c=t.request||{credentials:"omit",mode:"cors"},s=Promise.resolve();return a&&(s=Promise.all(n.map(function(n){return e.delete(n).catch(function(){})}))),Promise.all(n.map(function(e){var n,t,o;return r&&(t=r,o=-1!==(n=e).indexOf("?"),e=n+(o?"&":"?")+"__uncache="+encodeURIComponent(t)),fetch(e,c).then(i).then(function(e){return e.ok?{response:e}:{error:!0}},function(){return{error:!0}})})).then(function(t){return o&&t.some(function(e){return e.error})?Promise.reject(new Error("Wrong response status")):(o||(t=t.filter(function(e,t){return!e.error||(n.splice(t,1),!1)})),s.then(function(){var r=t.map(function(t,r){return e.put(n[r],t.response)});return Promise.all(r)}))})}function d(e){return e.preloadResponse&&!0===v?e.preloadResponse.then(function(n){return n||fetch(e.request)}):fetch(e.request)}var p=n.cacheMaps,v=n.navigationPreload,m=e.strategy,g=e.responseStrategy,w=e.assets,y=e.hashesMap,U=e.externals,b=e.prefetchRequest||{credentials:"same-origin",mode:"cors"},P=e.name,q=P+":"+e.version,O=P+"$preload",R="__offline_webpack__data";Object.keys(w).forEach(function(e){w[e]=w[e].map(function(e){var n=new URL(e,location);return n.hash="",-1===U.indexOf(e)&&(n.search=""),n.toString()})}),y=Object.keys(y).reduce(function(e,n){var t=new URL(y[n],location);return t.search="",t.hash="",e[n]=t.toString(),e},{}),U=U.map(function(e){var n=new URL(e,location);return n.hash="",n.toString()});var S=[].concat(w.main,w.additional,w.optional);self.addEventListener("install",function(e){console.log("[SW]:","Install event");var n=void 0;n="changed"===m?o("main"):t("main"),e.waitUntil(n)}),self.addEventListener("activate",function(e){console.log("[SW]:","Activate event");var n=w.additional.length?(f&&console.log("[SW]:","Caching additional"),("changed"===m?o("additional"):t("additional")).catch(function(){console.error("[SW]:","Cache section `additional` failed to load")})):Promise.resolve();n=(n=(n=n.then(s)).then(c)).then(function(){if(self.clients&&self.clients.claim)return self.clients.claim()}),v&&self.registration.navigationPreload&&(n=Promise.all([n,self.registration.navigationPreload.enable()])),e.waitUntil(n)}),self.addEventListener("fetch",function(e){if("GET"===e.request.method&&("only-if-cached"!==e.request.cache||"same-origin"===e.request.mode)){var n=new URL(e.request.url);n.hash="";var t=n.toString();-1===U.indexOf(t)&&(n.search="",t=n.toString());var o=-1!==S.indexOf(t),i=t;if(!o){var a=function(e){var n=e.url,t=new URL(n),r=void 0;r=function(e){return"navigate"===e.mode||e.headers.get("Upgrade-Insecure-Requests")||-1!==(e.headers.get("Accept")||"").indexOf("text/html")}(e)?"navigate":t.origin===location.origin?"same-origin":"cross-origin";for(var o=0;o