dice-roller-parser
Version:
A javascript dice roller that parses roll20 format strings and generates rolled outputs
2 lines • 228 kB
JavaScript
!function(e,r){if("object"==typeof exports&&"object"==typeof module)module.exports=r();else if("function"==typeof define&&define.amd)define([],r);else{var t=r();for(var o in t)("object"==typeof exports?exports:e)[o]=t[o]}}(this,(function(){return function(e){var r={};function t(o){if(r[o])return r[o].exports;var n=r[o]={i:o,l:!1,exports:{}};return e[o].call(n.exports,n,n.exports,t),n.l=!0,n.exports}return t.m=e,t.c=r,t.d=function(e,r,o){t.o(e,r)||Object.defineProperty(e,r,{enumerable:!0,get:o})},t.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},t.t=function(e,r){if(1&r&&(e=t(e)),8&r)return e;if(4&r&&"object"==typeof e&&e&&e.__esModule)return e;var o=Object.create(null);if(t.r(o),Object.defineProperty(o,"default",{enumerable:!0,value:e}),2&r&&"string"!=typeof e)for(var n in e)t.d(o,n,function(r){return e[r]}.bind(null,n));return o},t.n=function(e){var r=e&&e.__esModule?function(){return e.default}:function(){return e};return t.d(r,"a",r),r},t.o=function(e,r){return Object.prototype.hasOwnProperty.call(e,r)},t.p="",t(t.s=0)}([function(e,r,t){"use strict";function o(e){for(var t in e)r.hasOwnProperty(t)||(r[t]=e[t])}Object.defineProperty(r,"__esModule",{value:!0}),o(t(1)),o(t(3))},function(e,r,t){"use strict";Object.defineProperty(r,"__esModule",{value:!0});const o=t(2);r.DiceRoller=class{constructor(e,r=1e3){this.randFunction=Math.random,this.maxRollCount=1e3,e&&(this.randFunction=e),this.maxRollCount=r}parse(e){return o.parse(e)}roll(e){const r=o.parse(e);return this.rollType(r)}rollValue(e){return this.roll(e).value}rollParsed(e){return this.rollType(e)}rollType(e){let r;switch(e.type){case"diceExpression":r=this.rollDiceExpr(e);break;case"group":r=this.rollGroup(e);break;case"die":r=this.rollDie(e);break;case"expression":r=this.rollExpression(e);break;case"mathfunction":r=this.rollFunction(e);break;case"inline":r=this.rollType(e.expr);break;case"number":r=Object.assign(Object.assign({},e),{success:!1,valid:!0,order:0});break;default:throw new Error(`Unable to render ${e.type}`)}return e.label&&(r.label=e.label),r}rollDiceExpr(e){const r=this.rollType(e.head),t=[r],o=[],n=e.ops.reduce((e,r,n)=>{const l=this.rollType(r.tail);switch(l.order=n,t.push(l),o.push(r.op),r.op){case"+":return e+l.value;case"-":return e-l.value;default:return e}},r.value);return{dice:t,ops:o,success:!1,type:"diceexpressionroll",valid:!0,value:n,order:0}}rollGroup(e){let r=e.rolls.map((e,r)=>Object.assign(Object.assign({},this.rollType(e)),{order:r}));if(e.mods){const t=e.mods,o=e=>{const r=t.some(e=>["failure","success"].includes(e.type));return e=t.reduce((e,r)=>this.applyGroupMod(e,r),e),r&&(e=e.map(e=>(e.success||(e.value=0,e.success=!0),e))),e};if(1===r.length&&["die","diceexpressionroll"].includes(r[0].type)){const e=r[0];let t="die"===e.type?e.rolls:e.dice.filter(e=>"number"!==e.type).reduce((e,r)=>[...e,..."die"===r.type?r.rolls:r.dice],[]);t=o(t),e.value=t.reduce((e,r)=>r.valid?e+r.value:e,0)}else r=o(r)}return{dice:r,success:!1,type:"grouproll",valid:!0,value:r.reduce((e,r)=>r.valid?e+r.value:e,0),order:0}}rollDie(e){const r=this.rollType(e.count);if(r.value>this.maxRollCount)throw new Error("Entered number of dice too large.");let t,o;"fate"===e.die.type?(o={type:"fate",success:!1,valid:!1,value:0,order:0},t=Array.from({length:r.value},(e,r)=>this.generateFateRoll(r))):(o=this.rollType(e.die),t=Array.from({length:r.value},(e,r)=>this.generateDiceRoll(o.value,r))),e.mods&&(t=e.mods.reduce((e,r)=>this.applyMod(e,r),t)),e.targets&&(t=e.targets.reduce((e,r)=>this.applyMod(e,r),t).map(e=>(e.success||(e.value=0,e.success=!0),e)));let n=!1,l=0;if(e.match){const r=e.match,o=t.reduce((e,r)=>e.set(r.roll,(e.get(r.roll)||0)+1),new Map),s=new Set(Array.from(o.entries()).filter(([e,t])=>t>=r.min.value).filter(([e])=>!(r.mod&&r.expr)||this.successTest(r.mod,this.rollType(r.expr).value,e)).map(([e])=>e));t.filter(e=>s.has(e.roll)).forEach(e=>e.matched=!0),r.count&&(n=!0,l=s.size)}return e.sort&&(t=this.applySort(t,e.sort)),{count:r,die:o,rolls:t,success:!1,type:"die",valid:!0,value:n?l:t.reduce((e,r)=>r.valid?e+r.value:e,0),order:0,matched:n}}rollExpression(e){const r=this.rollType(e.head),t=[r],o=[],n=e.ops.reduce((e,r)=>{const n=this.rollType(r.tail);switch(t.push(n),o.push(r.op),r.op){case"+":return e+n.value;case"-":return e-n.value;case"*":return e*n.value;case"/":return e/n.value;case"%":return e%n.value;case"**":return e**n.value;default:return e}},r.value);return{dice:t,ops:o,success:!1,type:"expressionroll",valid:!0,value:n,order:0}}rollFunction(e){const r=this.rollType(e.expr);let t;switch(e.op){case"floor":t=Math.floor(r.value);break;case"ceil":t=Math.ceil(r.value);break;case"round":t=Math.round(r.value);break;case"abs":t=Math.abs(r.value);break;default:t=r.value}return{expr:r,op:e.op,success:!1,type:"mathfunction",valid:!0,value:t,order:0}}applyGroupMod(e,r){return this.getGroupModMethod(r)(e)}getGroupModMethod(e){const r=e=>e.value;switch(e.type){case"success":return this.getSuccessMethod(e,r);case"failure":return this.getFailureMethod(e,r);case"keep":return this.getKeepMethod(e,r);case"drop":return this.getDropMethod(e,r);default:throw new Error(`Mod ${e.type} is not recognised`)}}applyMod(e,r){return this.getModMethod(r)(e)}getModMethod(e){const r=e=>e.roll;switch(e.type){case"success":return this.getSuccessMethod(e,r);case"failure":return this.getFailureMethod(e,r);case"crit":return this.getCritSuccessMethod(e,r);case"critfail":return this.getCritFailureMethod(e,r);case"keep":return t=>this.getKeepMethod(e,r)(t).sort((e,r)=>e.order-r.order);case"drop":return t=>this.getDropMethod(e,r)(t).sort((e,r)=>e.order-r.order);case"explode":return this.getExplodeMethod(e);case"compound":return this.getCompoundMethod(e);case"penetrate":return this.getPenetrateMethod(e);case"reroll":return this.getReRollMethod(e);case"rerollOnce":return this.getReRollOnceMethod(e);default:throw new Error(`Mod ${e.type} is not recognised`)}}applySort(e,r){return e.sort((e,t)=>r.asc?e.roll-t.roll:t.roll-e.roll),e.forEach((e,r)=>e.order=r),e}getCritSuccessMethod(e,r){const t=this.rollType(e.expr);return o=>o.map(o=>{if(!o.valid)return o;if("roll"!==o.type)return o;if(o.success)return o;const n=o;return this.successTest(e.mod,t.value,r(o))?n.critical="success":"success"===n.critical&&(n.critical=null),o})}getCritFailureMethod(e,r){const t=this.rollType(e.expr);return o=>o.map(o=>{if(!o.valid)return o;if("roll"!==o.type)return o;if(o.success)return o;const n=o;return this.successTest(e.mod,t.value,r(o))?n.critical="failure":"failure"===n.critical&&(n.critical=null),o})}getSuccessMethod(e,r){const t=this.rollType(e.expr);return o=>o.map(o=>o.valid?(this.successTest(e.mod,t.value,r(o))&&(o.success?o.value+=1:(o.value=1,o.success=!0)),o):o)}getFailureMethod(e,r){const t=this.rollType(e.expr);return o=>o.map(o=>o.valid?(this.successTest(e.mod,t.value,r(o))&&(o.success?o.value-=1:(o.value=-1,o.success=!0)),o):o)}getKeepMethod(e,r){const t=this.rollType(e.expr);return o=>{if(0===o.length)return o;o=o.sort((t,o)=>"l"===e.highlow?r(o)-r(t):r(t)-r(o)).sort((e,r)=>(e.valid?1:0)-(r.valid?1:0));const n=Math.max(Math.min(t.value,o.length),0);let l=0,s=0;const u=o.reduce((e,r)=>(r.valid?1:0)+e,0)-n;for(;s<o.length&&l<u;)o[s].valid&&(o[s].valid=!1,l++),s++;return o}}getDropMethod(e,r){const t=this.rollType(e.expr);return o=>{o=o.sort((t,o)=>"h"===e.highlow?r(o)-r(t):r(t)-r(o));const n=Math.max(Math.min(t.value,o.length),0);let l=0,s=0;for(;s<o.length&&l<n;)o[s].valid&&(o[s].valid=!1,l++),s++;return o}}getExplodeMethod(e){const r=e.target?this.rollType(e.target.value):null;return t=>{const o=r?t=>this.successTest(e.target.mod,r.value,t.roll):e=>this.successTest("=","fateroll"===e.type?1:e.die,e.roll);if("roll"===t[0].type&&o({roll:1})&&o({roll:t[0].die}))throw new Error("Invalid reroll target");for(let e=0;e<t.length;e++){let r=t[e];r.order=e;let n=0;for(;o(r)&&n++<1e3;){const o=this.reRoll(r,++e);t.splice(e,0,o),r=o}}return t}}getCompoundMethod(e){const r=e.target?this.rollType(e.target.value):null;return t=>{const o=r?t=>this.successTest(e.target.mod,r.value,t.roll):e=>this.successTest("=","fateroll"===e.type?1:e.die,e.roll);if("roll"===t[0].type&&o({roll:1})&&o({roll:t[0].die}))throw new Error("Invalid reroll target");for(let e=0;e<t.length;e++){let r=t[e],n=r.roll,l=0;for(;o(r)&&l++<1e3;){const o=this.reRoll(t[e],++e);n+=o.roll,r=o}r.value=n,r.roll=n}return t}}getPenetrateMethod(e){const r=e.target?this.rollType(e.target.value):null;return t=>{const o=r?t=>this.successTest(e.target.mod,r.value,t.roll):e=>this.successTest("=","fateroll"===e.type?1:e.die,e.roll);if(r&&"roll"===t[0].type&&o(t[0])&&this.successTest(e.target.mod,r.value,1))throw new Error("Invalid reroll target");for(let e=0;e<t.length;e++){let r=t[e];r.order=e;let n=0;for(;o(r)&&n++<1e3;){const o=this.reRoll(r,++e);o.value-=1,o.roll-=1,t.splice(e,0,o),r=o}}return t}}getReRollMethod(e){const r=e.target?this.successTest.bind(null,e.target.mod,this.rollType(e.target.value).value):this.successTest.bind(null,"=",1);return e=>{if("roll"===e[0].type&&r(1)&&r(e[0].die))throw new Error("Invalid reroll target");for(let t=0;t<e.length;t++)for(;r(e[t].roll);){e[t].valid=!1;const r=this.reRoll(e[t],t+1);e.splice(++t,0,r)}return e}}getReRollOnceMethod(e){const r=e.target?this.successTest.bind(null,e.target.mod,this.rollType(e.target.value).value):this.successTest.bind(null,"=",1);return e=>{if("roll"===e[0].type&&r(1)&&r(e[0].die))throw new Error("Invalid reroll target");for(let t=0;t<e.length;t++)if(r(e[t].roll)){e[t].valid=!1;const r=this.reRoll(e[t],t+1);e.splice(++t,0,r)}return e}}successTest(e,r,t){switch(e){case">":return t>=r;case"<":return t<=r;case"=":default:return t==r}}reRoll(e,r){switch(e.type){case"roll":return this.generateDiceRoll(e.die,r);case"fateroll":return this.generateFateRoll(r);default:throw new Error(`Cannot do a reroll of a ${e.type}.`)}}generateDiceRoll(e,r){const t=Math.floor(this.randFunction()*e)+1;return{critical:t===e?"success":1===t?"failure":null,die:e,matched:!1,order:r,roll:t,success:!1,type:"roll",valid:!0,value:t}}generateFateRoll(e){const r=Math.floor(3*this.randFunction())-1;return{matched:!1,order:e,roll:r,success:!1,type:"fateroll",valid:!0,value:r}}}},function(e,r,t){"use strict";function o(e,r,t,n){this.message=e,this.expected=r,this.found=t,this.location=n,this.name="SyntaxError","function"==typeof Error.captureStackTrace&&Error.captureStackTrace(this,o)}!function(e,r){function t(){this.constructor=e}t.prototype=r.prototype,e.prototype=new t}(o,Error),o.buildMessage=function(e,r){var t={literal:function(e){return'"'+n(e.text)+'"'},class:function(e){var r,t="";for(r=0;r<e.parts.length;r++)t+=e.parts[r]instanceof Array?l(e.parts[r][0])+"-"+l(e.parts[r][1]):l(e.parts[r]);return"["+(e.inverted?"^":"")+t+"]"},any:function(e){return"any character"},end:function(e){return"end of input"},other:function(e){return e.description}};function o(e){return e.charCodeAt(0).toString(16).toUpperCase()}function n(e){return e.replace(/\\/g,"\\\\").replace(/"/g,'\\"').replace(/\0/g,"\\0").replace(/\t/g,"\\t").replace(/\n/g,"\\n").replace(/\r/g,"\\r").replace(/[\x00-\x0F]/g,(function(e){return"\\x0"+o(e)})).replace(/[\x10-\x1F\x7F-\x9F]/g,(function(e){return"\\x"+o(e)}))}function l(e){return e.replace(/\\/g,"\\\\").replace(/\]/g,"\\]").replace(/\^/g,"\\^").replace(/-/g,"\\-").replace(/\0/g,"\\0").replace(/\t/g,"\\t").replace(/\n/g,"\\n").replace(/\r/g,"\\r").replace(/[\x00-\x0F]/g,(function(e){return"\\x0"+o(e)})).replace(/[\x10-\x1F\x7F-\x9F]/g,(function(e){return"\\x"+o(e)}))}return"Expected "+function(e){var r,o,n,l=new Array(e.length);for(r=0;r<e.length;r++)l[r]=(n=e[r],t[n.type](n));if(l.sort(),l.length>0){for(r=1,o=1;r<l.length;r++)l[r-1]!==l[r]&&(l[o]=l[r],o++);l.length=o}switch(l.length){case 1:return l[0];case 2:return l[0]+" or "+l[1];default:return l.slice(0,-1).join(", ")+", or "+l[l.length-1]}}(e)+" but "+function(e){return e?'"'+n(e)+'"':"end of input"}(r)+" found."},e.exports={SyntaxError:o,parse:function(e,r){r=void 0!==r?r:{};var t,n={},l={start:ye},s=ye,u={type:"any"},a=ie("[[",!1),c=ie("]]",!1),i=function(e,r){return r&&(e.label=r),e},d=ie(">",!1),h=ie("<",!1),p=ie("=",!1),f=ie("f",!1),v=ie("cs",!1),g=ie("cf",!1),y=ie("m",!1),m=ie("t",!1),b=ie("k",!1),x=ie("l",!1),A=ie("h",!1),C=ie("d",!1),M=ie("{",!1),w=ie(",",!1),R=ie("}",!1),T=ie("+",!1),$=ie("sa",!1),E=ie("sd",!1),F=ie("!",!1),k=ie("!!",!1),j=ie("!p",!1),_=ie("r",!1),O=ie("ro",!1),S=ie("F",!1),D=ie("%",!1),P=ie("(",!1),G=ie(")",!1),I=ie("-",!1),B=function(e,r){if(0==r.length)return e;return{head:e,type:"expression",ops:r.map(e=>({type:"math",op:e[1],tail:e[3]}))}},W=ie("*",!1),K=ie("/",!1),U=ie("**",!1),z=ie("floor",!1),V=ie("ceil",!1),q=ie("round",!1),H=ie("abs",!1),J=he("integer"),L=/^[0-9]/,N=de([["0","9"]],!1,!1),Q=function(){return{type:"number",value:parseInt(e.substring(le,ne),10)}},X=ie("[",!1),Y=/^[^\]]/,Z=de(["]"],!0,!1),ee=ie("]",!1),re=he("whitespace"),te=/^[ \t\n\r]/,oe=de([" ","\t","\n","\r"],!1,!1),ne=0,le=0,se=[{line:1,column:1}],ue=0,ae=[],ce=0;if("startRule"in r){if(!(r.startRule in l))throw new Error("Can't start parsing from rule \""+r.startRule+'".');s=l[r.startRule]}function ie(e,r){return{type:"literal",text:e,ignoreCase:r}}function de(e,r,t){return{type:"class",parts:e,inverted:r,ignoreCase:t}}function he(e){return{type:"other",description:e}}function pe(r){var t,o=se[r];if(o)return o;for(t=r-1;!se[t];)t--;for(o={line:(o=se[t]).line,column:o.column};t<r;)10===e.charCodeAt(t)?(o.line++,o.column=1):o.column++,t++;return se[r]=o,o}function fe(e,r){var t=pe(e),o=pe(r);return{start:{offset:e,line:t.line,column:t.column},end:{offset:r,line:o.line,column:o.column}}}function ve(e){ne<ue||(ne>ue&&(ue=ne,ae=[]),ae.push(e))}function ge(e,r,t){return new o(o.buildMessage(e,r),e,r,t)}function ye(){var r,t,o,l,s,a;if(r=ne,(t=Pe())!==n){for(o=[],e.length>ne?(l=e.charAt(ne),ne++):(l=n,0===ce&&ve(u));l!==n;)o.push(l),e.length>ne?(l=e.charAt(ne),ne++):(l=n,0===ce&&ve(u));o!==n?(le=r,a=o,(s=t).root=!0,a&&(s.label=a.join("")),r=t=s):(ne=r,r=n)}else ne=r,r=n;return r}function me(){var r,t,o;return r=ne,(t=function(){var r,t,o,l,s;if(r=ne,(t=function(){var r,t,o,l,s,u,a,c,i;r=ne,123===e.charCodeAt(ne)?(t="{",ne++):(t=n,0===ce&&ve(M));if(t!==n)if(qe()!==n)if((o=Te())!==n){for(l=[],s=ne,(u=qe())!==n?(44===e.charCodeAt(ne)?(a=",",ne++):(a=n,0===ce&&ve(w)),a!==n&&(c=qe())!==n&&(i=Te())!==n?s=u=[u,a,c,i]:(ne=s,s=n)):(ne=s,s=n);s!==n;)l.push(s),s=ne,(u=qe())!==n?(44===e.charCodeAt(ne)?(a=",",ne++):(a=n,0===ce&&ve(w)),a!==n&&(c=qe())!==n&&(i=Te())!==n?s=u=[u,a,c,i]:(ne=s,s=n)):(ne=s,s=n);l!==n&&(s=qe())!==n?(125===e.charCodeAt(ne)?(u="}",ne++):(u=n,0===ce&&ve(R)),u!==n?(le=r,t={rolls:[o,...l.map(e=>e[3])],type:"group"},r=t):(ne=r,r=n)):(ne=r,r=n)}else ne=r,r=n;else ne=r,r=n;else ne=r,r=n;return r}())!==n){for(o=[],(l=we())===n&&(l=Re())===n&&(l=be())===n&&(l=xe());l!==n;)o.push(l),(l=we())===n&&(l=Re())===n&&(l=be())===n&&(l=xe());o!==n&&(l=qe())!==n?((s=Ve())===n&&(s=null),s!==n?(le=r,u=t,c=s,(a=o).length>0&&(u.mods=(u.mods||[]).concat(a)),c&&(u.label=c),r=t=u):(ne=r,r=n)):(ne=r,r=n)}else ne=r,r=n;var u,a,c;return r}())===n&&(t=Ee())===n&&(t=ze()),t!==n&&qe()!==n?((o=Ve())===n&&(o=null),o!==n?(le=r,r=t=i(t,o)):(ne=r,r=n)):(ne=r,r=n),r}function be(){var r,t,o;return r=ne,62===e.charCodeAt(ne)?(t=">",ne++):(t=n,0===ce&&ve(d)),t===n&&(60===e.charCodeAt(ne)?(t="<",ne++):(t=n,0===ce&&ve(h)),t===n&&(61===e.charCodeAt(ne)?(t="=",ne++):(t=n,0===ce&&ve(p)))),t!==n&&(o=De())!==n?(le=r,r=t={type:"success",mod:t,expr:o}):(ne=r,r=n),r}function xe(){var r,t,o,l;return r=ne,102===e.charCodeAt(ne)?(t="f",ne++):(t=n,0===ce&&ve(f)),t!==n?(62===e.charCodeAt(ne)?(o=">",ne++):(o=n,0===ce&&ve(d)),o===n&&(60===e.charCodeAt(ne)?(o="<",ne++):(o=n,0===ce&&ve(h)),o===n&&(61===e.charCodeAt(ne)?(o="=",ne++):(o=n,0===ce&&ve(p)))),o===n&&(o=null),o!==n&&(l=De())!==n?(le=r,r=t={type:"failure",mod:o,expr:l}):(ne=r,r=n)):(ne=r,r=n),r}function Ae(){var r,t,o,l;return r=ne,"cs"===e.substr(ne,2)?(t="cs",ne+=2):(t=n,0===ce&&ve(v)),t!==n?(62===e.charCodeAt(ne)?(o=">",ne++):(o=n,0===ce&&ve(d)),o===n&&(60===e.charCodeAt(ne)?(o="<",ne++):(o=n,0===ce&&ve(h)),o===n&&(61===e.charCodeAt(ne)?(o="=",ne++):(o=n,0===ce&&ve(p)))),o===n&&(o=null),o!==n&&(l=De())!==n?(le=r,r=t={type:"crit",mod:o,expr:l}):(ne=r,r=n)):(ne=r,r=n),r}function Ce(){var r,t,o,l;return r=ne,"cf"===e.substr(ne,2)?(t="cf",ne+=2):(t=n,0===ce&&ve(g)),t!==n?(62===e.charCodeAt(ne)?(o=">",ne++):(o=n,0===ce&&ve(d)),o===n&&(60===e.charCodeAt(ne)?(o="<",ne++):(o=n,0===ce&&ve(h)),o===n&&(61===e.charCodeAt(ne)?(o="=",ne++):(o=n,0===ce&&ve(p)))),o===n&&(o=null),o!==n&&(l=De())!==n?(le=r,r=t={type:"critfail",mod:o,expr:l}):(ne=r,r=n)):(ne=r,r=n),r}function Me(){var r,t,o,l,s;return r=ne,109===e.charCodeAt(ne)?(t="m",ne++):(t=n,0===ce&&ve(y)),t!==n?(116===e.charCodeAt(ne)?(o="t",ne++):(o=n,0===ce&&ve(m)),o===n&&(o=null),o!==n?((l=ze())===n&&(l=null),l!==n?((s=function(){var r,t,o;return r=ne,62===e.charCodeAt(ne)?(t=">",ne++):(t=n,0===ce&&ve(d)),t===n&&(60===e.charCodeAt(ne)?(t="<",ne++):(t=n,0===ce&&ve(h)),t===n&&(61===e.charCodeAt(ne)?(t="=",ne++):(t=n,0===ce&&ve(p)))),t!==n&&(o=De())!==n?(le=r,r=t={mod:t,expr:o}):(ne=r,r=n),r}())===n&&(s=null),s!==n?(le=r,r=t=function(e,r,t){const o={type:"match",min:r||{type:"number",value:2},count:!!e};return t&&(o.mod=t.mod,o.expr=t.expr),o}(o,l,s)):(ne=r,r=n)):(ne=r,r=n)):(ne=r,r=n)):(ne=r,r=n),r}function we(){var r,t,o,l;return r=ne,107===e.charCodeAt(ne)?(t="k",ne++):(t=n,0===ce&&ve(b)),t!==n?(108===e.charCodeAt(ne)?(o="l",ne++):(o=n,0===ce&&ve(x)),o===n&&(104===e.charCodeAt(ne)?(o="h",ne++):(o=n,0===ce&&ve(A))),o===n&&(o=null),o!==n?((l=De())===n&&(l=null),l!==n?(le=r,r=t={type:"keep",highlow:o,expr:l||Je}):(ne=r,r=n)):(ne=r,r=n)):(ne=r,r=n),r}function Re(){var r,t,o,l;return r=ne,100===e.charCodeAt(ne)?(t="d",ne++):(t=n,0===ce&&ve(C)),t!==n?(108===e.charCodeAt(ne)?(o="l",ne++):(o=n,0===ce&&ve(x)),o===n&&(104===e.charCodeAt(ne)?(o="h",ne++):(o=n,0===ce&&ve(A))),o===n&&(o=null),o!==n?((l=De())===n&&(l=null),l!==n?(le=r,r=t={type:"drop",highlow:o,expr:l||Je}):(ne=r,r=n)):(ne=r,r=n)):(ne=r,r=n),r}function Te(){var r,t,o,l,s,u,a,c;if(r=ne,(t=$e())!==n){for(o=[],l=ne,(s=qe())!==n?(43===e.charCodeAt(ne)?(u="+",ne++):(u=n,0===ce&&ve(T)),u!==n&&(a=qe())!==n&&(c=$e())!==n?l=s=[s,u,a,c]:(ne=l,l=n)):(ne=l,l=n);l!==n;)o.push(l),l=ne,(s=qe())!==n?(43===e.charCodeAt(ne)?(u="+",ne++):(u=n,0===ce&&ve(T)),u!==n&&(a=qe())!==n&&(c=$e())!==n?l=s=[s,u,a,c]:(ne=l,l=n)):(ne=l,l=n);o!==n?(le=r,r=t=function(e,r){if(0==r.length)return e;return{head:e,type:"diceExpression",ops:r.map(e=>({type:"math",op:e[1],tail:e[3]}))}}(t,o)):(ne=r,r=n)}else ne=r,r=n;return r}function $e(){var e;return(e=Ee())===n&&(e=Pe()),e}function Ee(){var r,t,o;return r=ne,(t=function(){var r,t,o,l,s;if(r=ne,(t=function(){var r,t,o,l;if(r=ne,(t=function(){var r,t,o,l;r=ne,(t=De())===n&&(t=null);t!==n?(100===e.charCodeAt(ne)?(o="d",ne++):(o=n,0===ce&&ve(C)),o!==n?((l=function(){var r,t;r=ne,70===e.charCodeAt(ne)?(t="F",ne++):(t=n,0===ce&&ve(S));t===n&&(102===e.charCodeAt(ne)?(t="f",ne++):(t=n,0===ce&&ve(f)));t!==n&&(le=r,t={type:"fate"});return r=t}())===n&&(l=function(){var r,t;r=ne,37===e.charCodeAt(ne)?(t="%",ne++):(t=n,0===ce&&ve(D));t!==n&&(le=r,t={type:"number",value:"100"});return r=t}())===n&&(l=De()),l!==n?(le=r,t={die:l,count:t||{type:"number",value:1},type:"die"},r=t):(ne=r,r=n)):(ne=r,r=n)):(ne=r,r=n);return r}())!==n){for(o=[],(l=ke())===n&&(l=je())===n&&(l=Fe())===n&&(l=Oe())===n&&(l=_e());l!==n;)o.push(l),(l=ke())===n&&(l=je())===n&&(l=Fe())===n&&(l=Oe())===n&&(l=_e());o!==n?(le=r,u=o,(s=t).mods=(s.mods||[]).concat(u),r=t=s):(ne=r,r=n)}else ne=r,r=n;var s,u;return r}())!==n){for(o=[],(l=Re())===n&&(l=we())===n&&(l=be())===n&&(l=xe())===n&&(l=Ce())===n&&(l=Ae());l!==n;)o.push(l),(l=Re())===n&&(l=we())===n&&(l=be())===n&&(l=xe())===n&&(l=Ce())===n&&(l=Ae());o!==n?((l=Me())===n&&(l=null),l!==n?((s=function(){var r,t;r=ne,"sa"===e.substr(ne,2)?(t="sa",ne+=2):(t=n,0===ce&&ve($));t!==n&&(le=r,t={type:"sort",asc:!0});return r=t}())===n&&(s=function(){var r,t;r=ne,"sd"===e.substr(ne,2)?(t="sd",ne+=2):(t=n,0===ce&&ve(E));t!==n&&(le=r,t={type:"sort",asc:!1});return r=t}()),s===n&&(s=null),s!==n?(le=r,t=function(e,r,t,o){const n=r.filter(e=>["success","failure"].includes(e.type));return r=r.filter(e=>!n.includes(e)),e.mods=(e.mods||[]).concat(r),n.length>0&&(e.targets=n),t&&(e.match=t),o&&(e.sort=o),e}(t,o,l,s),r=t):(ne=r,r=n)):(ne=r,r=n)):(ne=r,r=n)}else ne=r,r=n;return r}())!==n&&qe()!==n?((o=Ve())===n&&(o=null),o!==n?(le=r,r=t=i(t,o)):(ne=r,r=n)):(ne=r,r=n),r}function Fe(){var r,t,o;return r=ne,33===e.charCodeAt(ne)?(t="!",ne++):(t=n,0===ce&&ve(F)),t!==n?((o=Se())===n&&(o=null),o!==n?(le=r,r=t={type:"explode",target:o}):(ne=r,r=n)):(ne=r,r=n),r}function ke(){var r,t,o;return r=ne,"!!"===e.substr(ne,2)?(t="!!",ne+=2):(t=n,0===ce&&ve(k)),t!==n?((o=Se())===n&&(o=null),o!==n?(le=r,r=t={type:"compound",target:o}):(ne=r,r=n)):(ne=r,r=n),r}function je(){var r,t,o;return r=ne,"!p"===e.substr(ne,2)?(t="!p",ne+=2):(t=n,0===ce&&ve(j)),t!==n?((o=Se())===n&&(o=null),o!==n?(le=r,r=t={type:"penetrate",target:o}):(ne=r,r=n)):(ne=r,r=n),r}function _e(){var r,t,o;return r=ne,114===e.charCodeAt(ne)?(t="r",ne++):(t=n,0===ce&&ve(_)),t!==n?((o=Se())===n&&(o=null),o!==n?(le=r,r=t={type:"reroll",target:o||He}):(ne=r,r=n)):(ne=r,r=n),r}function Oe(){var r,t,o;return r=ne,"ro"===e.substr(ne,2)?(t="ro",ne+=2):(t=n,0===ce&&ve(O)),t!==n?((o=Se())===n&&(o=null),o!==n?(le=r,r=t={type:"rerollOnce",target:o||He}):(ne=r,r=n)):(ne=r,r=n),r}function Se(){var r,t,o;return r=ne,62===e.charCodeAt(ne)?(t=">",ne++):(t=n,0===ce&&ve(d)),t===n&&(60===e.charCodeAt(ne)?(t="<",ne++):(t=n,0===ce&&ve(h)),t===n&&(61===e.charCodeAt(ne)?(t="=",ne++):(t=n,0===ce&&ve(p)))),t===n&&(t=null),t!==n&&(o=De())!==n?(le=r,r=t={type:"target",mod:t,value:o}):(ne=r,r=n),r}function De(){var e;return(e=Ge())===n&&(e=ze()),e}function Pe(){var r;return(r=function(){var r,t,o,l;return r=ne,"[["===e.substr(ne,2)?(t="[[",ne+=2):(t=n,0===ce&&ve(a)),t!==n&&(o=Pe())!==n?("]]"===e.substr(ne,2)?(l="]]",ne+=2):(l=n,0===ce&&ve(c)),l!==n?(le=r,r=t={type:"inline",expr:o}):(ne=r,r=n)):(ne=r,r=n),r}())===n&&(r=Ie())===n&&(r=Ge()),r}function Ge(){var r,t,o,l,s,u,a;return r=ne,40===e.charCodeAt(ne)?(t="(",ne++):(t=n,0===ce&&ve(P)),t!==n&&(o=Ie())!==n?(41===e.charCodeAt(ne)?(l=")",ne++):(l=n,0===ce&&ve(G)),l!==n&&qe()!==n?((s=Ve())===n&&(s=null),s!==n?(le=r,u=o,(a=s)&&(u.label=a),r=t=u):(ne=r,r=n)):(ne=r,r=n)):(ne=r,r=n),r}function Ie(){var r,t,o,l,s,u,a,c;if(r=ne,(t=Be())!==n){for(o=[],l=ne,(s=qe())!==n?(43===e.charCodeAt(ne)?(u="+",ne++):(u=n,0===ce&&ve(T)),u===n&&(45===e.charCodeAt(ne)?(u="-",ne++):(u=n,0===ce&&ve(I))),u!==n&&(a=qe())!==n&&(c=Be())!==n?l=s=[s,u,a,c]:(ne=l,l=n)):(ne=l,l=n);l!==n;)o.push(l),l=ne,(s=qe())!==n?(43===e.charCodeAt(ne)?(u="+",ne++):(u=n,0===ce&&ve(T)),u===n&&(45===e.charCodeAt(ne)?(u="-",ne++):(u=n,0===ce&&ve(I))),u!==n&&(a=qe())!==n&&(c=Be())!==n?l=s=[s,u,a,c]:(ne=l,l=n)):(ne=l,l=n);o!==n?(le=r,r=t=B(t,o)):(ne=r,r=n)}else ne=r,r=n;return r}function Be(){var r,t,o,l,s,u,a,c;if(r=ne,(t=We())!==n){for(o=[],l=ne,(s=qe())!==n?(42===e.charCodeAt(ne)?(u="*",ne++):(u=n,0===ce&&ve(W)),u===n&&(47===e.charCodeAt(ne)?(u="/",ne++):(u=n,0===ce&&ve(K))),u!==n&&(a=qe())!==n&&(c=We())!==n?l=s=[s,u,a,c]:(ne=l,l=n)):(ne=l,l=n);l!==n;)o.push(l),l=ne,(s=qe())!==n?(42===e.charCodeAt(ne)?(u="*",ne++):(u=n,0===ce&&ve(W)),u===n&&(47===e.charCodeAt(ne)?(u="/",ne++):(u=n,0===ce&&ve(K))),u!==n&&(a=qe())!==n&&(c=We())!==n?l=s=[s,u,a,c]:(ne=l,l=n)):(ne=l,l=n);o!==n?(le=r,r=t=B(t,o)):(ne=r,r=n)}else ne=r,r=n;return r}function We(){var r,t,o,l,s,u,a,c;if(r=ne,(t=Ue())!==n){for(o=[],l=ne,(s=qe())!==n?("**"===e.substr(ne,2)?(u="**",ne+=2):(u=n,0===ce&&ve(U)),u===n&&(37===e.charCodeAt(ne)?(u="%",ne++):(u=n,0===ce&&ve(D))),u!==n&&(a=qe())!==n&&(c=Ue())!==n?l=s=[s,u,a,c]:(ne=l,l=n)):(ne=l,l=n);l!==n;)o.push(l),l=ne,(s=qe())!==n?("**"===e.substr(ne,2)?(u="**",ne+=2):(u=n,0===ce&&ve(U)),u===n&&(37===e.charCodeAt(ne)?(u="%",ne++):(u=n,0===ce&&ve(D))),u!==n&&(a=qe())!==n&&(c=Ue())!==n?l=s=[s,u,a,c]:(ne=l,l=n)):(ne=l,l=n);o!==n?(le=r,r=t=B(t,o)):(ne=r,r=n)}else ne=r,r=n;return r}function Ke(){var r,t,o,l,s;return r=ne,(t=function(){var r;return"floor"===e.substr(ne,5)?(r="floor",ne+=5):(r=n,0===ce&&ve(z)),r===n&&("ceil"===e.substr(ne,4)?(r="ceil",ne+=4):(r=n,0===ce&&ve(V)),r===n&&("round"===e.substr(ne,5)?(r="round",ne+=5):(r=n,0===ce&&ve(q)),r===n&&("abs"===e.substr(ne,3)?(r="abs",ne+=3):(r=n,0===ce&&ve(H))))),r}())!==n&&qe()!==n?(40===e.charCodeAt(ne)?(o="(",ne++):(o=n,0===ce&&ve(P)),o!==n&&qe()!==n&&(l=Ie())!==n&&qe()!==n?(41===e.charCodeAt(ne)?(s=")",ne++):(s=n,0===ce&&ve(G)),s!==n?(le=r,r=t={type:"mathfunction",op:t,expr:l}):(ne=r,r=n)):(ne=r,r=n)):(ne=r,r=n),r}function Ue(){var e;return(e=Ke())===n&&(e=me())===n&&(e=Ge()),e}function ze(){var r,t,o,l;if(ce++,r=ne,45===e.charCodeAt(ne)?(t="-",ne++):(t=n,0===ce&&ve(I)),t===n&&(t=null),t!==n){if(o=[],L.test(e.charAt(ne))?(l=e.charAt(ne),ne++):(l=n,0===ce&&ve(N)),l!==n)for(;l!==n;)o.push(l),L.test(e.charAt(ne))?(l=e.charAt(ne),ne++):(l=n,0===ce&&ve(N));else o=n;o!==n?(le=r,r=t=Q()):(ne=r,r=n)}else ne=r,r=n;return ce--,r===n&&(t=n,0===ce&&ve(J)),r}function Ve(){var r,t,o,l;if(r=ne,91===e.charCodeAt(ne)?(t="[",ne++):(t=n,0===ce&&ve(X)),t!==n){if(o=[],Y.test(e.charAt(ne))?(l=e.charAt(ne),ne++):(l=n,0===ce&&ve(Z)),l!==n)for(;l!==n;)o.push(l),Y.test(e.charAt(ne))?(l=e.charAt(ne),ne++):(l=n,0===ce&&ve(Z));else o=n;o!==n?(93===e.charCodeAt(ne)?(l="]",ne++):(l=n,0===ce&&ve(ee)),l!==n?(le=r,r=t=o.join("")):(ne=r,r=n)):(ne=r,r=n)}else ne=r,r=n;return r}function qe(){var r,t;for(ce++,r=[],te.test(e.charAt(ne))?(t=e.charAt(ne),ne++):(t=n,0===ce&&ve(oe));t!==n;)r.push(t),te.test(e.charAt(ne))?(t=e.charAt(ne),ne++):(t=n,0===ce&&ve(oe));return ce--,r===n&&(t=n,0===ce&&ve(re)),r}const He={type:"target",mod:"=",value:{type:"number",value:1}},Je={type:"number",value:1};if((t=s())!==n&&ne===e.length)return t;throw t!==n&&ne<e.length&&ve({type:"end"}),ge(ae,ue<e.length?e.charAt(ue):null,ue<e.length?fe(ue,ue+1):fe(ue,ue))}}},function(e,r,t){"use strict";Object.defineProperty(r,"__esModule",{value:!0});r.DiscordRollRenderer=class{render(e){return this.doRender(e,!0)}doRender(e,r=!1){let t="";switch(e.type){case"diceexpressionroll":t=this.renderGroupExpr(e);break;case"grouproll":t=this.renderGroup(e);break;case"die":t=this.renderDie(e);break;case"expressionroll":t=this.renderExpression(e);break;case"mathfunction":t=this.renderFunction(e);break;case"roll":return this.renderRoll(e);case"fateroll":return this.renderFateRoll(e);case"number":const r=e.label?` (${e.label})`:"";return`${e.value}${r}`;case"fate":return"F";default:throw new Error("Unable to render")}return e.valid||(t="~~"+t.replace(/~~/g,"")+"~~"),r?this.stripBrackets(t):e.label?`(${e.label}: ${t})`:t}renderGroup(e){const r=[];for(const t of e.dice)r.push(this.doRender(t));return r.length>1?`{ ${r.join(" + ")} } = ${e.value}`:`{ ${this.stripBrackets(r[0])} } = ${e.value}`}renderGroupExpr(e){const r=[];for(const t of e.dice)r.push(this.doRender(t));return r.length>1?`(${r.join(" + ")} = ${e.value})`:r[0]}renderDie(e){const r=[];for(const t of e.rolls)r.push(this.doRender(t));let t=`${r.join(", ")}`;["number","fate"].includes(e.die.type)&&"number"===e.count.type||(t+=`[*Rolling: ${this.doRender(e.count)}d${this.doRender(e.die)}*]`);const o=e.matched?` Match${1===e.value?"":"es"}`:"";return t+=` = ${e.value}${o}`,`(${t})`}renderExpression(e){if(e.dice.length>1){const r=[];for(let t=0;t<e.dice.length-1;t++)r.push(this.doRender(e.dice[t])),r.push(e.ops[t]);return r.push(this.doRender(e.dice.slice(-1)[0])),r.push("="),r.push(e.value+""),`(${r.join(" ")})`}return"number"===e.dice[0].type?e.value+"":this.doRender(e.dice[0])}renderFunction(e){const r=this.doRender(e.expr);return`(${e.op}${this.addBrackets(r)} = ${e.value})`}addBrackets(e){return e.startsWith("(")||(e=`(${e}`),e.endsWith(")")||(e=`${e})`),e}stripBrackets(e){return e.startsWith("(")&&(e=e.substring(1)),e.endsWith(")")&&(e=e.substring(0,e.length-1)),e}renderRoll(e){let r=`${e.roll}`;return e.valid?e.success&&1===e.value?r=`**${e.roll}**`:e.success&&-1===e.value?r=`*${e.roll}*`:e.success||"success"!==e.critical?e.success||"failure"!==e.critical||(r=`*${e.roll}*`):r=`**${e.roll}**`:r=`~~${e.roll}~~`,e.matched&&(r=`__${r}__`),r}renderFateRoll(e){const r=0===e.roll?"0":e.roll>0?"+":"-";let t=`${e.roll}`;return e.valid?e.success&&1===e.value?t=`**${r}**`:e.success&&-1===e.value&&(t=`*${r}*`):t=`~~${r}~~`,e.matched&&(t=`__${t}__`),t}}}])}));
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vd2VicGFjay91bml2ZXJzYWxNb2R1bGVEZWZpbml0aW9uIiwid2VicGFjazovLy93ZWJwYWNrL2Jvb3RzdHJhcCIsIndlYnBhY2s6Ly8vLi9zcmMvaW5kZXgudHMiLCJ3ZWJwYWNrOi8vLy4vc3JjL2RpY2VSb2xsZXIudHMiLCJ3ZWJwYWNrOi8vLy4vc3JjL2RpY2Vyb2xsLmpzIiwid2VicGFjazovLy8uL3NyYy9kaXNjb3JkUm9sbFJlbmRlcmVyLnRzIl0sIm5hbWVzIjpbInJvb3QiLCJmYWN0b3J5IiwiZXhwb3J0cyIsIm1vZHVsZSIsImRlZmluZSIsImFtZCIsImEiLCJpIiwidGhpcyIsImluc3RhbGxlZE1vZHVsZXMiLCJfX3dlYnBhY2tfcmVxdWlyZV9fIiwibW9kdWxlSWQiLCJsIiwibW9kdWxlcyIsImNhbGwiLCJtIiwiYyIsImQiLCJuYW1lIiwiZ2V0dGVyIiwibyIsIk9iamVjdCIsImRlZmluZVByb3BlcnR5IiwiZW51bWVyYWJsZSIsImdldCIsInIiLCJTeW1ib2wiLCJ0b1N0cmluZ1RhZyIsInZhbHVlIiwidCIsIm1vZGUiLCJfX2VzTW9kdWxlIiwibnMiLCJjcmVhdGUiLCJrZXkiLCJiaW5kIiwibiIsIm9iamVjdCIsInByb3BlcnR5IiwicHJvdG90eXBlIiwiaGFzT3duUHJvcGVydHkiLCJwIiwicyIsInBhcnNlciIsInJhbmRGdW5jdGlvbiIsIm1heFJvbGxzIiwiTWF0aCIsInJhbmRvbSIsIm1heFJvbGxDb3VudCIsImlucHV0IiwicGFyc2UiLCJyb2xsVHlwZSIsInJvbGwiLCJwYXJzZWQiLCJyZXNwb25zZSIsInR5cGUiLCJyb2xsRGljZUV4cHIiLCJyb2xsR3JvdXAiLCJyb2xsRGllIiwicm9sbEV4cHJlc3Npb24iLCJyb2xsRnVuY3Rpb24iLCJleHByIiwic3VjY2VzcyIsInZhbGlkIiwib3JkZXIiLCJFcnJvciIsImxhYmVsIiwiaGVhZFJvbGwiLCJoZWFkIiwicm9sbHMiLCJvcHMiLCJyZWR1Y2UiLCJoZWFkVmFsdWUiLCJtYXRoIiwidGFpbFJvbGwiLCJ0YWlsIiwicHVzaCIsIm9wIiwiZGljZSIsIm1hcCIsIm1vZHMiLCJhcHBseUdyb3VwTW9kcyIsImlzU3VjY2VzcyIsInNvbWUiLCJtb2QiLCJpbmNsdWRlcyIsImFyciIsImFwcGx5R3JvdXBNb2QiLCJkaWUiLCJsZW5ndGgiLCJmaWx0ZXIiLCJzdW0iLCJjb3VudCIsIkFycmF5IiwiZnJvbSIsIl8iLCJnZW5lcmF0ZUZhdGVSb2xsIiwiZ2VuZXJhdGVEaWNlUm9sbCIsIm1vZGRlZFJvbGxzIiwiYXBwbHlNb2QiLCJ0YXJnZXRzIiwidGFyZ2V0IiwibWF0Y2hlZCIsIm1hdGNoQ291bnQiLCJtYXRjaCIsImNvdW50cyIsInNldCIsIk1hcCIsIm1hdGNoZXMiLCJTZXQiLCJlbnRyaWVzIiwibWF0Y2hlZENvdW50IiwibWluIiwidmFsIiwic3VjY2Vzc1Rlc3QiLCJoYXMiLCJmb3JFYWNoIiwic2l6ZSIsInNvcnQiLCJhcHBseVNvcnQiLCJmbG9vciIsImNlaWwiLCJyb3VuZCIsImFicyIsImdldEdyb3VwTW9kTWV0aG9kIiwibG9va3VwIiwiZ2V0U3VjY2Vzc01ldGhvZCIsImdldEZhaWx1cmVNZXRob2QiLCJnZXRLZWVwTWV0aG9kIiwiZ2V0RHJvcE1ldGhvZCIsImdldE1vZE1ldGhvZCIsImdldENyaXRTdWNjZXNzTWV0aG9kIiwiZ2V0Q3JpdEZhaWx1cmVNZXRob2QiLCJiIiwiZ2V0RXhwbG9kZU1ldGhvZCIsImdldENvbXBvdW5kTWV0aG9kIiwiZ2V0UGVuZXRyYXRlTWV0aG9kIiwiZ2V0UmVSb2xsTWV0aG9kIiwiZ2V0UmVSb2xsT25jZU1ldGhvZCIsImFzYyIsImV4cHJSZXN1bHQiLCJjcml0Um9sbCIsImNyaXRpY2FsIiwiaGlnaGxvdyIsInRvS2VlcCIsIm1heCIsImRyb3BwZWQiLCJ0b0Ryb3AiLCJ0YXJnZXRWYWx1ZSIsInRhcmdldE1ldGhvZCIsImV4cGxvZGVDb3VudCIsIm5ld1JvbGwiLCJyZVJvbGwiLCJzcGxpY2UiLCJyb2xsVmFsdWUiLCJwZWckU3ludGF4RXJyb3IiLCJtZXNzYWdlIiwiZXhwZWN0ZWQiLCJmb3VuZCIsImxvY2F0aW9uIiwiY2FwdHVyZVN0YWNrVHJhY2UiLCJjaGlsZCIsInBhcmVudCIsImN0b3IiLCJjb25zdHJ1Y3RvciIsInBlZyRzdWJjbGFzcyIsImJ1aWxkTWVzc2FnZSIsIkRFU0NSSUJFX0VYUEVDVEFUSU9OX0ZOUyIsImxpdGVyYWwiLCJleHBlY3RhdGlvbiIsImxpdGVyYWxFc2NhcGUiLCJ0ZXh0IiwiZXNjYXBlZFBhcnRzIiwicGFydHMiLCJjbGFzc0VzY2FwZSIsImludmVydGVkIiwiYW55IiwiZW5kIiwib3RoZXIiLCJkZXNjcmlwdGlvbiIsImhleCIsImNoIiwiY2hhckNvZGVBdCIsInRvU3RyaW5nIiwidG9VcHBlckNhc2UiLCJyZXBsYWNlIiwiaiIsImRlc2NyaXB0aW9ucyIsInNsaWNlIiwiam9pbiIsImRlc2NyaWJlRXhwZWN0ZWQiLCJkZXNjcmliZUZvdW5kIiwiU3ludGF4RXJyb3IiLCJvcHRpb25zIiwicGVnJHJlc3VsdCIsInBlZyRGQUlMRUQiLCJwZWckc3RhcnRSdWxlRnVuY3Rpb25zIiwic3RhcnQiLCJwZWckcGFyc2VzdGFydCIsInBlZyRzdGFydFJ1bGVGdW5jdGlvbiIsInBlZyRjMCIsInBlZyRjMyIsInBlZyRsaXRlcmFsRXhwZWN0YXRpb24iLCJwZWckYzUiLCJwZWckYzciLCJwZWckYzEwIiwicGVnJGMxMiIsInBlZyRjMTQiLCJwZWckYzE3IiwicGVnJGMyMCIsInBlZyRjMjMiLCJwZWckYzI3IiwicGVnJGMyOSIsInBlZyRjMzIiLCJwZWckYzM0IiwicGVnJGMzNiIsInBlZyRjMzkiLCJwZWckYzQyIiwicGVnJGM0NCIsInBlZyRjNDYiLCJwZWckYzQ5IiwicGVnJGM1MyIsInBlZyRjNTYiLCJwZWckYzYwIiwicGVnJGM2MyIsInBlZyRjNjYiLCJwZWckYzY5IiwicGVnJGM3MiIsInBlZyRjNzciLCJwZWckYzgwIiwicGVnJGM4MyIsInBlZyRjODUiLCJwZWckYzg4IiwicGVnJGM4OSIsImVsZW1lbnQiLCJwZWckYzkxIiwicGVnJGM5MyIsInBlZyRjOTUiLCJwZWckYzk3IiwicGVnJGM5OSIsInBlZyRjMTAxIiwicGVnJGMxMDMiLCJwZWckYzEwNSIsInBlZyRvdGhlckV4cGVjdGF0aW9uIiwicGVnJGMxMDYiLCJwZWckYzEwNyIsInBlZyRjbGFzc0V4cGVjdGF0aW9uIiwicGVnJGMxMDgiLCJwYXJzZUludCIsInN1YnN0cmluZyIsInBlZyRzYXZlZFBvcyIsInBlZyRjdXJyUG9zIiwicGVnJGMxMTAiLCJwZWckYzExMSIsInBlZyRjMTEyIiwicGVnJGMxMTQiLCJwZWckYzExNiIsInBlZyRjMTE3IiwicGVnJGMxMTgiLCJwZWckcG9zRGV0YWlsc0NhY2hlIiwibGluZSIsImNvbHVtbiIsInBlZyRtYXhGYWlsUG9zIiwicGVnJG1heEZhaWxFeHBlY3RlZCIsInBlZyRzaWxlbnRGYWlscyIsInN0YXJ0UnVsZSIsImlnbm9yZUNhc2UiLCJwZWckY29tcHV0ZVBvc0RldGFpbHMiLCJwb3MiLCJkZXRhaWxzIiwicGVnJGNvbXB1dGVMb2NhdGlvbiIsInN0YXJ0UG9zIiwiZW5kUG9zIiwic3RhcnRQb3NEZXRhaWxzIiwiZW5kUG9zRGV0YWlscyIsIm9mZnNldCIsInBlZyRmYWlsIiwicGVnJGJ1aWxkU3RydWN0dXJlZEVycm9yIiwiczAiLCJzMSIsInMyIiwiczMiLCJwZWckcGFyc2VFeHByZXNzaW9uIiwiY2hhckF0IiwicGVnJHBhcnNlQW55Um9sbCIsInM0IiwiczUiLCJzNiIsInM3IiwiczgiLCJzOSIsInBlZyRwYXJzZV8iLCJwZWckcGFyc2VSb2xsRXhwcmVzc2lvbiIsImVsIiwicGVnJHBhcnNlR3JvdXBlZFJvbGwiLCJwZWckcGFyc2VLZWVwTW9kIiwicGVnJHBhcnNlRHJvcE1vZCIsInBlZyRwYXJzZVN1Y2Nlc3NNb2QiLCJwZWckcGFyc2VGYWlsdXJlTW9kIiwicGVnJHBhcnNlTGFiZWwiLCJncm91cCIsImNvbmNhdCIsInBlZyRwYXJzZU1vZEdyb3VwZWRSb2xsIiwicGVnJHBhcnNlRnVsbFJvbGwiLCJwZWckcGFyc2VJbnRlZ2VyIiwicGVnJHBhcnNlUm9sbEV4cHIiLCJwZWckcGFyc2VDcml0aWNhbFN1Y2Nlc3NNb2QiLCJzdWJzdHIiLCJwZWckcGFyc2VDcml0aWNhbEZhaWx1cmVNb2QiLCJwZWckcGFyc2VNYXRjaE1vZCIsInBlZyRwYXJzZU1hdGNoVGFyZ2V0IiwicGVnJGMzMCIsImRlZmF1bHRFeHByZXNzaW9uIiwicGVnJHBhcnNlUm9sbE9yRXhwcmVzc2lvbiIsInBlZyRjNTAiLCJwZWckcGFyc2VGYXRlRXhwciIsInBlZyRwYXJzZVBlcmNlbnRFeHByIiwicGVnJHBhcnNlRGljZVJvbGwiLCJwZWckcGFyc2VDb21wb3VuZFJvbGwiLCJwZWckcGFyc2VQZW5ldHJhdGVSb2xsIiwicGVnJHBhcnNlRXhwbG9kZVJvbGwiLCJwZWckcGFyc2VSZVJvbGxPbmNlTW9kIiwicGVnJHBhcnNlUmVSb2xsTW9kIiwicGVnJHBhcnNlUm9sbGVkTW9kUm9sbCIsInBlZyRwYXJzZVNvcnRBc2NNb2QiLCJwZWckcGFyc2VTb3J0RGVzY01vZCIsInBlZyRjNTEiLCJwZWckcGFyc2VUYXJnZXRlZFJvbGwiLCJwZWckcGFyc2VUYXJnZXRNb2QiLCJkZWZhdWx0VGFyZ2V0IiwicGVnJHBhcnNlQnJhY2tldEV4cHJlc3Npb24iLCJwZWckcGFyc2VJbmxpbmVFeHByZXNzaW9uIiwicGVnJHBhcnNlQWRkU3ViRXhwcmVzc2lvbiIsInBlZyRwYXJzZU11bHREaXZFeHByZXNzaW9uIiwicGVnJHBhcnNlTW9kRXhwb0V4cHJlc3Npb24iLCJwZWckcGFyc2VGdW5jdGlvbk9yUm9sbCIsInBlZyRwYXJzZU1hdGhGbkV4cHJlc3Npb24iLCJwZWckcGFyc2VNYXRoRnVuY3Rpb24iLCJ0ZXN0IiwiZG9SZW5kZXIiLCJyZW5kZXIiLCJyZW5kZXJHcm91cEV4cHIiLCJyZW5kZXJHcm91cCIsInJlbmRlckRpZSIsInJlbmRlckV4cHJlc3Npb24iLCJyZW5kZXJGdW5jdGlvbiIsInJlbmRlclJvbGwiLCJyZW5kZXJGYXRlUm9sbCIsInN0cmlwQnJhY2tldHMiLCJyZXBsaWVzIiwicmVwbHkiLCJleHByZXNzaW9ucyIsImFkZEJyYWNrZXRzIiwic3RhcnRzV2l0aCIsImVuZHNXaXRoIiwicm9sbERpc3BsYXkiXSwibWFwcGluZ3MiOiJDQUFBLFNBQTJDQSxFQUFNQyxHQUNoRCxHQUFzQixpQkFBWkMsU0FBMEMsaUJBQVhDLE9BQ3hDQSxPQUFPRCxRQUFVRCxTQUNiLEdBQXFCLG1CQUFYRyxRQUF5QkEsT0FBT0MsSUFDOUNELE9BQU8sR0FBSUgsT0FDUCxDQUNKLElBQUlLLEVBQUlMLElBQ1IsSUFBSSxJQUFJTSxLQUFLRCxHQUF1QixpQkFBWkosUUFBdUJBLFFBQVVGLEdBQU1PLEdBQUtELEVBQUVDLElBUHhFLENBU0dDLE1BQU0sV0FDVCxPLFlDVEUsSUFBSUMsRUFBbUIsR0FHdkIsU0FBU0MsRUFBb0JDLEdBRzVCLEdBQUdGLEVBQWlCRSxHQUNuQixPQUFPRixFQUFpQkUsR0FBVVQsUUFHbkMsSUFBSUMsRUFBU00sRUFBaUJFLEdBQVksQ0FDekNKLEVBQUdJLEVBQ0hDLEdBQUcsRUFDSFYsUUFBUyxJQVVWLE9BTkFXLEVBQVFGLEdBQVVHLEtBQUtYLEVBQU9ELFFBQVNDLEVBQVFBLEVBQU9ELFFBQVNRLEdBRy9EUCxFQUFPUyxHQUFJLEVBR0pULEVBQU9ELFFBMERmLE9BckRBUSxFQUFvQkssRUFBSUYsRUFHeEJILEVBQW9CTSxFQUFJUCxFQUd4QkMsRUFBb0JPLEVBQUksU0FBU2YsRUFBU2dCLEVBQU1DLEdBQzNDVCxFQUFvQlUsRUFBRWxCLEVBQVNnQixJQUNsQ0csT0FBT0MsZUFBZXBCLEVBQVNnQixFQUFNLENBQUVLLFlBQVksRUFBTUMsSUFBS0wsS0FLaEVULEVBQW9CZSxFQUFJLFNBQVN2QixHQUNYLG9CQUFYd0IsUUFBMEJBLE9BQU9DLGFBQzFDTixPQUFPQyxlQUFlcEIsRUFBU3dCLE9BQU9DLFlBQWEsQ0FBRUMsTUFBTyxXQUU3RFAsT0FBT0MsZUFBZXBCLEVBQVMsYUFBYyxDQUFFMEIs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