mons-rules 0.4.4 → 0.4.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/mons-rules.js +1 -1
- package/package.json +1 -1
package/dist/mons-rules.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
var Qi=Object.defineProperty;var i=(e,n)=>Qi(e,"name",{value:n,configurable:!0});var y=Object.freeze({White:"white",Black:"black"}),E=Object.freeze({Classic:"Classic",SwappedManaRows:"SwappedManaRows",OffsetArcManaRows:"OffsetArcManaRows",CenterSpokeManaRows:"CenterSpokeManaRows",AlternatingManaRows:"AlternatingManaRows",InnerWedgeManaRows:"InnerWedgeManaRows",OuterWedgeManaRows:"OuterWedgeManaRows",BentCenterManaRows:"BentCenterManaRows",OuterEdgeManaRows:"OuterEdgeManaRows",SplitFlankManaRows:"SplitFlankManaRows",ForwardBridgeManaRows:"ForwardBridgeManaRows",CornerChainManaRows:"CornerChainManaRows"}),M=Object.freeze({Demon:"demon",Drainer:"drainer",Angel:"angel",Spirit:"spirit",Mystic:"mystic"}),A=Object.freeze({Potion:"potion",Bomb:"bomb",BombOrPotion:"bomb-or-potion"}),X=Object.freeze({SelectPotion:"select-potion",SelectBomb:"select-bomb"});var Wo=Object.freeze({[y.White]:0,[y.Black]:1});function $e(e){return Wo[e]}i($e,"colorId");var qe=Object.freeze({[M.Demon]:0,[M.Drainer]:1,[M.Angel]:2,[M.Spirit]:3,[M.Mystic]:4}),Oe=Object.freeze({MonMove:"mon-move",ManaMove:"mana-move",Action:"action",Potion:"potion"}),Go=Object.freeze({[X.SelectPotion]:0,[X.SelectBomb]:1}),O=Object.freeze({MonMove:"mon-move",ManaMove:"mana-move",MysticAction:"mystic-action",DemonAction:"demon-action",DemonAdditionalStep:"demon-additional-step",SpiritTargetCapture:"spirit-target-capture",SpiritTargetMove:"spirit-target-move",SelectConsumable:"select-consumable",BombAttack:"bomb-attack"}),Qn=4,Mn=Object.freeze({kind:"supermana"});function Sn(e){return e===y.Black?y.White:y.Black}i(Sn,"otherColor");function Dn(e,n,t){if(!Number.isInteger(t)||t<0||t>2)throw new RangeError("mon cooldown must be an integer from 0 through 2");return Object.freeze({kind:e,color:n,cooldown:t})}i(Dn,"createMon");function Vo(e,n){return e.kind===n.kind&&e.color===n.color&&e.cooldown===n.cooldown}i(Vo,"monEquals");function ve(e){return e.cooldown>0}i(ve,"isMonFainted");function Wr(e){return Dn(e.kind,e.color,2)}i(Wr,"faintMon");function Gr(e){return e.cooldown>0?Dn(e.kind,e.color,e.cooldown-1):Pe(e)}i(Gr,"decreaseMonCooldown");function Yn(e){return Object.freeze({kind:"regular",color:e})}i(Yn,"regularMana");function Vr(e,n){return e.kind==="supermana"?n.kind==="supermana":n.kind==="regular"&&e.color===n.color}i(Vr,"manaEquals");function Ko(e,n){return e||!n?2:1}i(Ko,"manaScoreForOwnership");function Kr(e,n){return Ko(e.kind==="supermana",e.kind==="regular"&&e.color===n)}i(Kr,"manaScore");function Le(e){return Object.freeze({kind:"mon",mon:Pe(e)})}i(Le,"monItem");function Je(e){return Object.freeze({kind:"mana",mana:Xn(e)})}i(Je,"manaItem");function Zn(e,n){return Object.freeze({kind:"mon-with-mana",mon:Pe(e),mana:Xn(n)})}i(Zn,"monWithManaItem");function pt(e,n){return Object.freeze({kind:"mon-with-consumable",mon:Pe(e),consumable:n})}i(pt,"monWithConsumableItem");function bt(e){return Object.freeze({kind:"consumable",consumable:e})}i(bt,"consumableItem");function Pe(e){return Object.isFrozen(e)?e:Dn(e.kind,e.color,e.cooldown)}i(Pe,"immutableMon");function Xn(e){return e.kind==="supermana"?Mn:Object.isFrozen(e)?e:Yn(e.color)}i(Xn,"immutableMana");function Bn(e){switch(e.kind){case"mon":return Object.isFrozen(e)&&Object.isFrozen(e.mon)?e:Le(e.mon);case"mana":return Object.isFrozen(e)&&Object.isFrozen(e.mana)?e:Je(e.mana);case"mon-with-mana":return Object.isFrozen(e)&&Object.isFrozen(e.mon)&&Object.isFrozen(e.mana)?e:Zn(e.mon,e.mana);case"mon-with-consumable":return Object.isFrozen(e)&&Object.isFrozen(e.mon)?e:pt(e.mon,e.consumable);case"consumable":return Object.isFrozen(e)?e:bt(e.consumable)}}i(Bn,"immutableItem");function W(e){return{i:e.i,j:e.j}}i(W,"copyLocation");function Yi(e){switch(e.kind){case"takeback":return{kind:"takeback"};case"location":return{kind:"location",location:W(e.location)};case"modifier":return{kind:"modifier",modifier:e.modifier}}}i(Yi,"copyInput");function Jn(e){let n=Yi(e.input);return e.actorMonItem===void 0?{input:n,kind:e.kind}:{input:n,kind:e.kind,actorMonItem:Bn(e.actorMonItem)}}i(Jn,"copyNextInput");function Vn(e){switch(e.kind){case"mon-move":return{kind:"mon-move",item:Bn(e.item),from:W(e.from),to:W(e.to)};case"mana-move":return{kind:"mana-move",mana:Xn(e.mana),from:W(e.from),to:W(e.to)};case"mana-scored":return{kind:"mana-scored",mana:Xn(e.mana),at:W(e.at)};case"mystic-action":return{kind:"mystic-action",mystic:Pe(e.mystic),from:W(e.from),to:W(e.to)};case"demon-action":return{kind:"demon-action",demon:Pe(e.demon),from:W(e.from),to:W(e.to)};case"demon-additional-step":return{kind:"demon-additional-step",demon:Pe(e.demon),from:W(e.from),to:W(e.to)};case"spirit-target-move":return{kind:"spirit-target-move",item:Bn(e.item),from:W(e.from),to:W(e.to),by:W(e.by)};case"pickup-bomb":return{kind:"pickup-bomb",by:Pe(e.by),at:W(e.at)};case"pickup-potion":return{kind:"pickup-potion",by:Bn(e.by),at:W(e.at)};case"use-potion":return{kind:"use-potion",from:W(e.from),to:W(e.to)};case"pickup-mana":return{kind:"pickup-mana",mana:Xn(e.mana),by:Pe(e.by),at:W(e.at)};case"mon-fainted":return{kind:"mon-fainted",mon:Pe(e.mon),from:W(e.from),to:W(e.to)};case"mana-dropped":return{kind:"mana-dropped",mana:Xn(e.mana),at:W(e.at)};case"supermana-back-to-base":return{kind:"supermana-back-to-base",from:W(e.from),to:W(e.to)};case"bomb-attack":return{kind:"bomb-attack",by:Pe(e.by),from:W(e.from),to:W(e.to)};case"mon-awake":return{kind:"mon-awake",mon:Pe(e.mon),at:W(e.at)};case"bomb-explosion":return{kind:"bomb-explosion",at:W(e.at)};case"next-turn":return{kind:"next-turn",color:e.color};case"game-over":return{kind:"game-over",winner:e.winner};case"takeback":return{kind:"takeback"}}}i(Vn,"copyEvent");function jo(e){switch(e.kind){case"invalid-input":return{kind:"invalid-input"};case"locations-to-start-from":return{kind:"locations-to-start-from",locations:e.locations.map(W)};case"next-input-options":return{kind:"next-input-options",nextInputs:e.nextInputs.map(Jn)};case"events":return{kind:"events",events:e.events.map(Vn)}}}i(jo,"copyOutput");function $(e){switch(e.kind){case"mon":case"mon-with-mana":case"mon-with-consumable":return e.mon;case"mana":case"consumable":return}}i($,"itemMon");function jr(e){let n=$(e);return n===void 0||!ve(n)}i(jr,"isSpiritTargetAllowed");function In(e){switch(e.kind){case"mana":case"mon-with-mana":return e.mana;case"mon":case"mon-with-consumable":case"consumable":return}}i(In,"itemMana");function $o(e){switch(e.kind){case"mon-with-consumable":case"consumable":return e.consumable;case"mon":case"mana":case"mon-with-mana":return}}i($o,"itemConsumable");function $r(e,n){switch(e.kind){case"mon":return n.kind==="mon"&&Vo(e.mon,n.mon);case"mana":return n.kind==="mana"&&Vr(e.mana,n.mana);case"mon-with-mana":return n.kind==="mon-with-mana"&&Vo(e.mon,n.mon)&&Vr(e.mana,n.mana);case"mon-with-consumable":return n.kind==="mon-with-consumable"&&Vo(e.mon,n.mon)&&e.consumable===n.consumable;case"consumable":return n.kind==="consumable"&&e.consumable===n.consumable}}i($r,"itemEquals");function Uo(e){return`${e.kind}:${e.color}:${e.cooldown}`}i(Uo,"monKey");function Ur(e){return e.kind==="supermana"?"s":`r:${e.color}`}i(Ur,"manaKey");function zt(e){switch(e.kind){case"mon":return`m:${Uo(e.mon)}`;case"mana":return`a:${Ur(e.mana)}`;case"mon-with-mana":return`mm:${Uo(e.mon)}:${Ur(e.mana)}`;case"mon-with-consumable":return`mc:${Uo(e.mon)}:${e.consumable}`;case"consumable":return`c:${e.consumable}`}}i(zt,"itemKey");function qo(e){switch(e.kind){case"takeback":return"t";case"location":return`l:${e.location.i}:${e.location.j}`;case"modifier":return`m:${e.modifier}`}}i(qo,"inputKey");function qr(e){return e.map(qo).join(";")}i(qr,"inputChainKey");function yt(e,n){switch(e.kind){case"takeback":return n.kind==="takeback";case"location":return n.kind==="location"&&e.location.i===n.location.i&&e.location.j===n.location.j;case"modifier":return n.kind==="modifier"&&e.modifier===n.modifier}}i(yt,"inputEquals");var Hr=Math.trunc(5.5),Zi=10;function Z(e,n){return{i:e,j:n}}i(Z,"location");function Ho(e,n){return e.i===n.i&&e.j===n.j}i(Ho,"locationEquals");function He(e){return Number.isInteger(e.i)&&Number.isInteger(e.j)&&e.i>=0&&e.i<11&&e.j>=0&&e.j<11}i(He,"isValidLocation");function Un(e){if(!He(e))throw new RangeError(`board location must use integer coordinates from 0 to ${Zi}`)}i(Un,"assertValidLocation");function re(e){return Un(e),e.i*11+e.j}i(re,"locationIndex");function et(e){if(!Number.isInteger(e)||e<0||e>=121)throw new RangeError("board location index must be an integer from 0 to 120");return Z(Math.trunc(e/11),e%11)}i(et,"fromLocationIndex");function zr(e,n){return Z(Math.trunc((e.i+n.i)/2),Math.trunc((e.j+n.j)/2))}i(zr,"locationBetween");function Xr(e,n){return Math.max(Math.abs(n.i-e.i),Math.abs(n.j-e.j))}i(Xr,"locationDistance");function Qr(e,n){let t=[];for(let o=e.i-n;o<=e.i+n;o+=1)for(let r=e.j-n;r<=e.j+n;r+=1){let a=Z(o,r);He(a)&&!Ho(a,e)&&t.push(a)}return t}i(Qr,"nearbyLocationsFor");function Yr(e,n){let t=[];for(let[o,r]of n){let a=Z(e.i+o,e.j+r);He(a)&&t.push(a)}return t}i(Yr,"directionalReachabilityFor");function Ji(e){let n=[];for(let t=-2;t<=2;t+=1)for(let o=-2;o<=2;o+=1){if(Math.max(Math.abs(t),Math.abs(o))!==2)continue;let r=Z(e.i+t,e.j+o);He(r)&&n.push(r)}return n}i(Ji,"spiritReachabilityFor");function ht(e){return Object.freeze(Array.from({length:121},(n,t)=>Object.freeze(e(et(t)).map(o=>Object.freeze(o)))))}i(ht,"buildCache");var es=ht(e=>Qr(e,1)),ns=ht(e=>Qr(e,3)),ts=ht(e=>Yr(e,[[-2,-2],[2,2],[-2,2],[2,-2]])),os=ht(e=>Yr(e,[[-2,0],[2,0],[0,2],[0,-2]])),rs=ht(Ji);function kt(e,n){return He(n)?e[re(n)]??[]:[]}i(kt,"cachedLocations");function Fe(e){return kt(es,e)}i(Fe,"nearbyLocations");function Xt(e){return kt(ns,e)}i(Xt,"bombReachableLocations");function Qt(e){return kt(ts,e)}i(Qt,"mysticReachableLocations");function Yt(e){return kt(os,e)}i(Yt,"demonReachableLocations");function Zt(e){return kt(rs,e)}i(Zt,"spiritReachableLocations");var zo=Object.freeze(Array.from({length:121},(e,n)=>Object.freeze(et(n))));function Zr(e){if(!/^(?:0|[1-9]\d*)$/u.test(e))return;let n=Number(e);return Number.isSafeInteger(n)?n:void 0}i(Zr,"parseNonnegativeInteger");function Jr(e){for(let n=0;n<e.length;n+=1)if(e.charCodeAt(n)>127)return!1;return!0}i(Jr,"isAscii");function B(e){return`${e.i},${e.j}`}i(B,"locationFen");function ea(e){let n=e.split(",");if(n.length!==2)return;let t=n[0],o=n[1];if(t===void 0||o===void 0)return;let r=Zr(t),a=Zr(o);if(r===void 0||a===void 0)return;let s={i:r,j:a};return He(s)?s:void 0}i(ea,"parseLocationFen");function as(e){switch(e){case X.SelectPotion:return"p";case X.SelectBomb:return"b"}}i(as,"modifierFen");function is(e){switch(e){case"p":return X.SelectPotion;case"b":return X.SelectBomb;default:return}}i(is,"parseModifierFen");function ss(e){switch(e.kind){case"takeback":return"z";case"location":return`l${B(e.location)}`;case"modifier":return`m${as(e.modifier)}`}}i(ss,"inputFen");function cs(e){switch(e[0]){case"l":{let n=ea(e.slice(1));return n===void 0?void 0:{kind:"location",location:n}}case"m":{let n=is(e.slice(1));return n===void 0?void 0:{kind:"modifier",modifier:n}}case"z":return e==="z"?{kind:"takeback"}:void 0;default:return}}i(cs,"parseInputFen");function nt(e){return e.map(ss).join(";")}i(nt,"inputArrayFen");function Mt(e){if(!Jr(e))return;if(e==="")return[];let n=[];for(let t of e.split(";")){if(n.length===Qn)return;let o=cs(t);if(o===void 0)return;n.push(o)}return n}i(Mt,"parseInputArrayFen");var na=Object.freeze({includeManaStartsWithPotionAction:!1}),Xo=Object.freeze({includeManaStartsWithPotionAction:!0});function xe(e,n,t){return t===void 0?{input:e,kind:n}:{input:e,kind:n,actorMonItem:t}}i(xe,"nextInput");function ta(e){let n=[],t;for(let o of e)o.kind!==t&&(n.push(o),t=o.kind);return n}i(ta,"firstOptionFromEachKindGroup");function Qo(e,n){return e!==void 0&&Xr(e,n)===1}i(Qo,"isLocationGuardedByAngelLocation");function oa(e,n,t,o){if(t!==void 0){for(let a of e)if(Ho(a,t))return o(t)?[xe({kind:"location",location:t},n)]:[];return[]}let r=[];for(let a of e)o(a)&&r.push(xe({kind:"location",location:a},n));return r}i(oa,"nextInputsFromLocations");var St=new RangeError("fast workspace allocation failed");function It(e){return e===St}i(It,"isFastWorkspaceAllocationFailure");function Re(e){throw e instanceof RangeError?St:e}i(Re,"rethrowFastWorkspaceAllocation");var un=E.Classic,Ie=5,ee=5,An=1,_e=1,Wn=Object.freeze([E.Classic,E.SwappedManaRows,E.OffsetArcManaRows,E.CenterSpokeManaRows,E.AlternatingManaRows,E.InnerWedgeManaRows,E.OuterWedgeManaRows,E.BentCenterManaRows,E.OuterEdgeManaRows,E.SplitFlankManaRows,E.ForwardBridgeManaRows,E.CornerChainManaRows]),ia=Object.freeze({[E.Classic]:0,[E.SwappedManaRows]:1,[E.OffsetArcManaRows]:2,[E.CenterSpokeManaRows]:3,[E.AlternatingManaRows]:4,[E.InnerWedgeManaRows]:5,[E.OuterWedgeManaRows]:6,[E.BentCenterManaRows]:7,[E.OuterEdgeManaRows]:8,[E.SplitFlankManaRows]:9,[E.ForwardBridgeManaRows]:10,[E.CornerChainManaRows]:11}),us=new Map(Wn.map(e=>[ia[e],e]));function sa(e){return ia[e]}i(sa,"gameVariantId");function Q(...e){return Object.freeze(e.map(([n,t])=>Object.freeze(Z(n,t))))}i(Q,"locations");function Be(e,n){return Object.freeze({[y.Black]:e,[y.White]:n})}i(Be,"manaLayout");var ls=Object.freeze({[E.Classic]:Be(Q([3,4],[3,6],[4,3],[4,5],[4,7]),Q([7,4],[7,6],[6,3],[6,5],[6,7])),[E.SwappedManaRows]:Be(Q([3,3],[3,5],[3,7],[4,4],[4,6]),Q([7,3],[7,5],[7,7],[6,4],[6,6])),[E.OffsetArcManaRows]:Be(Q([3,4],[3,6],[4,2],[4,5],[4,8]),Q([6,2],[6,5],[6,8],[7,4],[7,6])),[E.CenterSpokeManaRows]:Be(Q([3,5],[4,2],[4,4],[4,6],[4,8]),Q([6,2],[6,4],[6,6],[6,8],[7,5])),[E.AlternatingManaRows]:Be(Q([4,1],[4,3],[4,5],[4,7],[4,9]),Q([6,1],[6,3],[6,5],[6,7],[6,9])),[E.InnerWedgeManaRows]:Be(Q([3,4],[3,6],[4,4],[4,5],[4,6]),Q([6,4],[6,5],[6,6],[7,4],[7,6])),[E.OuterWedgeManaRows]:Be(Q([3,4],[3,5],[3,6],[4,3],[4,7]),Q([6,3],[6,7],[7,4],[7,5],[7,6])),[E.BentCenterManaRows]:Be(Q([3,5],[4,4],[4,5],[4,6],[5,3]),Q([5,7],[6,4],[6,5],[6,6],[7,5])),[E.OuterEdgeManaRows]:Be(Q([4,0],[4,1],[4,9],[4,10],[5,1]),Q([5,9],[6,0],[6,1],[6,9],[6,10])),[E.SplitFlankManaRows]:Be(Q([3,4],[3,6],[4,2],[4,3],[5,2]),Q([5,8],[6,7],[6,8],[7,4],[7,6])),[E.ForwardBridgeManaRows]:Be(Q([3,4],[3,6],[4,3],[4,5],[5,4]),Q([5,6],[6,5],[6,7],[7,4],[7,6])),[E.CornerChainManaRows]:Be(Q([3,5],[3,6],[4,6],[4,7],[5,7]),Q([5,3],[6,3],[6,4],[7,4],[7,5]))}),ca=Object.freeze({kind:"regular"}),ra=Object.freeze({kind:"consumable-base"}),ds=Object.freeze({kind:"supermana-base"}),At=Object.freeze(Z(5,5)),Ct=Q([0,3],[0,4],[0,5],[0,6],[0,7],[10,3],[10,4],[10,5],[10,6],[10,7]);function ua(e){return Number.isSafeInteger(e)?us.get(e):void 0}i(ua,"gameVariantFromId");function aa(e,n){return ls[e][n]}i(aa,"manaBaseLocations");function ms(e){let n=Array.from({length:121}).fill(ca),t=i((o,r)=>{n[re(o)]=Object.freeze(r)},"put");t(Z(0,0),{kind:"mana-pool",color:y.Black}),t(Z(0,10),{kind:"mana-pool",color:y.Black}),t(Z(10,0),{kind:"mana-pool",color:y.White}),t(Z(10,10),{kind:"mana-pool",color:y.White}),t(Z(0,3),{kind:"mon-base",monKind:M.Mystic,color:y.Black}),t(Z(0,4),{kind:"mon-base",monKind:M.Spirit,color:y.Black}),t(Z(0,5),{kind:"mon-base",monKind:M.Drainer,color:y.Black}),t(Z(0,6),{kind:"mon-base",monKind:M.Angel,color:y.Black}),t(Z(0,7),{kind:"mon-base",monKind:M.Demon,color:y.Black}),t(Z(10,3),{kind:"mon-base",monKind:M.Demon,color:y.White}),t(Z(10,4),{kind:"mon-base",monKind:M.Angel,color:y.White}),t(Z(10,5),{kind:"mon-base",monKind:M.Drainer,color:y.White}),t(Z(10,6),{kind:"mon-base",monKind:M.Spirit,color:y.White}),t(Z(10,7),{kind:"mon-base",monKind:M.Mystic,color:y.White});for(let o of aa(e,y.Black))t(o,{kind:"mana-base",color:y.Black});for(let o of aa(e,y.White))t(o,{kind:"mana-base",color:y.White});return t(Z(5,0),ra),t(Z(5,10),ra),t(At,ds),Object.freeze(n)}i(ms,"buildSquares");var fs=new Map(Wn.map(e=>[e,ms(e)]));function Jt(e){let n=fs.get(e);if(n===void 0)throw new TypeError(`unsupported game variant: ${e}`);return n}i(Jt,"squaresForVariant");function Yo(e,n){return Un(e),Jt(n)[re(e)]??ca}i(Yo,"squareAtForVariant");function ps(e){return Yo(e,un)}i(ps,"squareAt");function bs(e){switch(e.kind){case"mon-base":return Le(Dn(e.monKind,e.color,0));case"mana-base":return Je(Yn(e.color));case"supermana-base":return Je(Mn);case"consumable-base":return bt(A.BombOrPotion);case"regular":case"mana-pool":return}}i(bs,"initialItemForSquare");function ys(e){return Object.freeze(Jt(e).map(bs))}i(ys,"buildInitialItems");var hs=new Map(Wn.map(e=>[e,ys(e)]));function la(e){let n=hs.get(e);if(n===void 0)throw new TypeError(`unsupported game variant: ${e}`);return[...n]}i(la,"initialItemsForVariant");function da(e,n){for(let t of Ct){let o=ps(t);if(o.kind==="mon-base"&&o.monKind===e&&o.color===n)return t}throw new Error("Expected at least one base for the given mon")}i(da,"monBase");var Ae=Object.keys(Wo).length,ln=Object.keys(qe).length,gt=Ae*ln,J=1,me=2,H=3,Et=1,vt=2,be=3,Te=1,fa=2,Ce=3,Tt=qe[M.Demon],he=qe[M.Drainer],wt=qe[M.Angel],eo=qe[M.Spirit],no=qe[M.Mystic],ks=0,Ms=1,en=2,Ss=3,pa=5,se=7,tt=re(At);function G(e){return e&3}i(G,"cellOccupancy");function ce(e){return e>>2&7}i(ce,"cellMonKind");function fe(e){return e>>5&1}i(fe,"cellMonColor");function ae(e){return e>>6&3}i(ae,"cellCooldown");function x(e){return e>>8&3}i(x,"cellMana");function L(e){return e>>10&3}i(L,"cellConsumable");function ot(e){let n=L(e);return n===0||n===Te}i(ot,"damagingAttackCanComplete");function rt(e,n,t,o,r){return H|e<<2|n<<5|t<<6|o<<8|r<<10}i(rt,"makeMonCell");function Cn(e){return J|e<<8}i(Cn,"makeManaCell");function ba(e){return me|e<<10}i(ba,"makeConsumableCell");function De(e,n){return Ko(e===be,e-1===n)}i(De,"manaScoreValue");function ue(e,n){return e*Ae+n}i(ue,"monId");function at(e){return e!==en&&e<se}i(at,"squareIsRegularForMovement");function nn(e){return e>=pa&&e<se}i(nn,"squareIsPool");function to(e){return Math.trunc((e-se)/Ae)}i(to,"squareMonBaseKind");function oo(e){return(e-se)%Ae}i(oo,"squareMonBaseColor");function w(e,n){return e[n]??0}i(w,"u8");function g(e,n){return e[n]??0}i(g,"u16");function d(e,n){return e[n]??0}i(d,"i32");function ke(e,n){let t=e[n];if(t===void 0)throw new RangeError("automove search slot index out of range");return t}i(ke,"at");function ro(e,n,t){return rt(qe[e.kind],$e(e.color),e.cooldown,n,t)}i(ro,"fastMonCellFromMon");function Is(e){let n=new Uint8Array(121),t=Jt(e);for(let o=0;o<121;o+=1){let r=t[o];if(r!==void 0)switch(r.kind){case"regular":n[o]=ks;break;case"consumable-base":n[o]=Ms;break;case"supermana-base":n[o]=en;break;case"mana-base":n[o]=Ss+$e(r.color);break;case"mana-pool":n[o]=pa+$e(r.color);break;case"mon-base":n[o]=se+ue(qe[r.monKind],$e(r.color));break}}return n}i(Is,"buildSquares");var As=new Map(Wn.map(e=>[e,Is(e)]));function ao(e){let n=As.get(e);if(n===void 0)throw new TypeError(`unsupported game variant: ${e}`);try{return n.slice()}catch(t){Re(t)}}i(ao,"fastSquaresForVariant");var Zo=(()=>{let e=new Int32Array(gt).fill(-1),n=ao(ke(Wn,0));for(let t of Ct){let o=re(t),r=w(n,o);r>=se&&(e[r-se]=o)}return e})();function Ot(e){let n=[],t=new Int32Array(121),o=new Int32Array(121);for(let r=0;r<121;r+=1){o[r]=n.length;let a=e(et(r)).map(re).sort((s,u)=>s-u);n.push(...a),t[r]=a.length}return{list:new Int32Array(n),starts:o,counts:t}}i(Ot,"buildOffsetTable");var le=Ot(Fe),gn=Ot(Qt),En=Ot(Yt),io=Ot(Zt),so=Ot(Xt),Cs=(()=>{let e=new Uint8Array(14641);for(let n=0;n<121;n+=1){let t=Math.trunc(n/11),o=n%11;for(let r=0;r<121;r+=1){let a=Math.trunc(r/11),s=r%11;e[n*121+r]=Math.max(Math.abs(t-a),Math.abs(o-s))}}return e})();function Me(e,n){return w(Cs,e*121+n)}i(Me,"chebyshev");function gs(e,n){let t=Math.trunc(e/11),o=e%11,r=Math.trunc(n/11),a=n%11;return Math.trunc((t+r)/2)*11+Math.trunc((o+a)/2)}i(gs,"midpointCompute");var Es=(()=>{let e=new Uint8Array(14641);for(let n=0;n<121;n+=1)for(let t=0;t<121;t+=1)e[n*121+t]=gs(n,t);return e})();function co(e,n){return w(Es,e*121+n)}i(co,"midpoint");var ma=(()=>{let e=[],n=ao(ke(Wn,0));for(let t=0;t<121;t+=1)nn(w(n,t))&&e.push(t);return new Int32Array(e)})(),ya=(()=>{let e=new Uint8Array(121*Ae);for(let n=0;n<121;n+=1){let t=Math.trunc(n/11),o=n%11,r=Math.min(o,10-o);for(let a=0;a<Ae;a+=1){let s=a===0?10:0,u=Math.abs(s-t);e[a*121+n]=u>r?u:r}}return e})(),ha=(()=>{let e=new Uint8Array(121);for(let n=0;n<121;n+=1)e[n]=Math.abs(Hr-Math.trunc(n/11));return e})(),tn=(()=>{let e=new Uint8Array(121);for(let n=0;n<121;n+=1){let t=99;for(let o=0;o<ma.length;o+=1){let r=Me(n,d(ma,o));r<t&&(t=r)}e[n]=t}return e})();function vs(e){let n=e>>>0;return()=>(n^=n<<13,n>>>=0,n^=n>>>17,n^=n<<5,n>>>=0,n|0)}i(vs,"xorshift");function vn(e,n){let t=new Int32Array(n);for(let o=0;o<n;o+=1)t[o]=e();return t}i(vn,"randomTable");var Tn=vs(49734321),ka=3,uo=1+gt*ka,Ts=vn(Tn,121*uo),ws=vn(Tn,121*uo),Os=vn(Tn,484),xs=vn(Tn,484),Rs=vn(Tn,484),_s=vn(Tn,484),Ma=2048,lo=vn(Tn,Ma),Jo=vn(Tn,Ma);function Sa(e){return G(e)!==H?0:1+ue(ce(e),fe(e))*ka+ae(e)}i(Sa,"monSlot");function mo(e,n){return n===0?0:d(Ts,e*uo+Sa(n))^d(Os,e*4+x(n))^d(Rs,e*4+L(n))}i(mo,"cellHashLo");function fo(e,n){return n===0?0:d(ws,e*uo+Sa(n))^d(xs,e*4+x(n))^d(_s,e*4+L(n))}i(fo,"cellHashHi");function er(e,n){return e>=Ie?y.White:n>=Ie?y.Black:void 0}i(er,"winnerForScores");function po(e){return er(e.whiteScore,e.blackScore)}i(po,"winnerForState");function it(e){return e.turnNumber===1}i(it,"isFirstTurnState");function bo(e){return e.activeColor===y.White?e.whitePotionsCount:e.blackPotionsCount}i(bo,"currentPlayerPotions");function dn(e){return e<ee}i(dn,"canMoveMonForCounts");function Ia(e){return dn(e.monsMovesCount)}i(Ia,"canPlayerMoveMon");function wn(e,n){return!e&&n<An}i(wn,"canMoveManaForCounts");function Aa(e){return wn(it(e),e.manaMovesCount)}i(Aa,"canPlayerMoveMana");function yo(e,n,t){return!e&&(t>0||n<_e)}i(yo,"canUseActionForCounts");function Ca(e){return yo(it(e),e.actionsUsedCount,bo(e))}i(Ca,"canPlayerUseAction");function ga(e,n){if(n===void 0)return!0;let t=$(e);switch(n.kind){case"mon":return t!==void 0?!1:e.kind==="mana"?n.mon.kind===M.Drainer&&!ve(n.mon):e.kind==="consumable"&&e.consumable===A.BombOrPotion;case"mana":return t?.kind===M.Drainer&&!ve(t);case"mon-with-mana":case"mon-with-consumable":return e.kind==="consumable"&&e.consumable===A.BombOrPotion;case"consumable":return n.consumable===A.BombOrPotion&&t!==void 0}}i(ga,"spiritDestinationItemAllowed");function nr(e,n,t,o,r,a,s){if(!wn(e,t))return!1;let u=dn(n);return!u&&!yo(e,o,r)||!a||s&&!u&&o>=_e&&r>0}i(nr,"shouldSuggestRegularManaStartsFromScalars");function Ea(e,n,t){return nr(it(e),e.monsMovesCount,e.manaMovesCount,e.actionsUsedCount,bo(e),n,t)}i(Ea,"shouldSuggestRegularManaStarts");function tr(e,n,t,o){return e?!dn(n):wn(e,t)?!dn(n)&&!o:!0}i(tr,"shouldAdvanceTurnForCounts");function Gn(e){switch(e.kind){case"regular":case"consumable-base":case"mana-base":case"mana-pool":return!0;case"supermana-base":case"mon-base":return!1}}i(Gn,"regularSquareForMovement");function or(e,n){let t=e.get(n),o=e.squareAt(n);return t?.kind==="mon"?Gn(o)&&t.mon.kind===M.Drainer:t!==void 0?!1:Gn(o)}i(or,"regularManaMoveDestinationAllowed");function Ns(e){for(let n of e.board.allFreeRegularManaLocations(e.activeColor))for(let t of Fe(n))if(or(e.board,t))return!0;return!1}i(Ns,"hasMovableFreeRegularMana");function va(e){let n=it(e),o=!(!n&&wn(n,e.manaMovesCount)&&!dn(e.monsMovesCount))||Ns(e);return tr(n,e.monsMovesCount,e.manaMovesCount,o)}i(va,"shouldAdvanceTurn");var on=0,ko=1,sr=2,ze=3,On=4,cr=5,Se=127,rn=0,mn=1,jn=2,ur=3,lr=-2,Ta=16;function ye(e,n,t,o,r){return e|n<<3|t<<10|o<<17|r<<24}i(ye,"encodeMove");function st(e){return e&7}i(st,"moveType");function Xe(e){return e>>3&127}i(Xe,"moveFrom");function Ne(e){return e>>10&127}i(Ne,"moveTo");function ct(e){return e>>17&127}i(ct,"moveAux");function xt(e){return e>>24&3}i(xt,"moveModifier");function rr(e,n,t){if(e.length!==n)throw new RangeError(`fast position ${t} length must be ${n}`)}i(rr,"validateArrayLength");var ar=class{static{i(this,"MutableFastPosition")}cells=new Uint16Array(121);squares=new Uint8Array(121);monLocations=new Int32Array(gt).fill(-1);freeMana=new Int32Array(Ae);manaIndices=new Int32Array(Ta);manaCount=0;whiteScore=0;blackScore=0;active=0;monsMoves=0;manaMoves=0;actionsUsed=0;potions=new Int32Array(Ae);firstTurn=!1;hashLo=0;hashHi=0;copyFrom(n){let t=n;this.cells.set(t.cells),this.squares=t.squares;let o=this.monLocations,r=t.monLocations;for(let u=0;u<gt;u+=1)o[u]=d(r,u);this.freeMana[0]=d(t.freeMana,0),this.freeMana[1]=d(t.freeMana,1);let a=this.manaIndices,s=t.manaIndices;for(let u=0;u<Ta;u+=1)a[u]=d(s,u);this.manaCount=t.manaCount,this.whiteScore=t.whiteScore,this.blackScore=t.blackScore,this.active=t.active,this.monsMoves=t.monsMoves,this.manaMoves=t.manaMoves,this.actionsUsed=t.actionsUsed,this.potions[0]=d(t.potions,0),this.potions[1]=d(t.potions,1),this.firstTurn=t.firstTurn,this.hashLo=t.hashLo,this.hashHi=t.hashHi}reset(n){rr(n.cells,121,"cells"),rr(n.squares,121,"squares"),rr(n.potions,Ae,"potions");let t;try{t=new Uint8Array(n.squares)}catch(f){Re(f)}let o=0;for(let f=0;f<121;f+=1){let p=g(n.cells,f);if(!(p===0||G(p)!==J)&&(o+=1,o>this.manaIndices.length))throw new RangeError("fast mana index capacity exceeded")}let r=n.whiteScore,a=n.blackScore,s=n.active,u=n.monsMoves,c=n.manaMoves,l=n.actionsUsed,m=n.firstTurn;this.cells.set(n.cells),this.squares=t,this.whiteScore=r,this.blackScore=a,this.active=s,this.monsMoves=u,this.manaMoves=c,this.actionsUsed=l,this.potions.set(n.potions),this.firstTurn=m,this.rebuildDerived()}rebuildDerived(){this.monLocations.fill(-1),this.freeMana[0]=0,this.freeMana[1]=0,this.manaIndices.fill(0),this.manaCount=0;let n=0,t=0;for(let o=0;o<121;o+=1){let r=g(this.cells,o);if(r===0)continue;n^=mo(o,r),t^=fo(o,r);let a=G(r);if(a===H)this.monLocations[ue(ce(r),fe(r))]=o;else if(a===J){let s=x(r);(s===1||s===2)&&(this.freeMana[s-1]=d(this.freeMana,s-1)+1),this.manaIndices[this.manaCount]=o,this.manaCount+=1}}this.hashLo=n,this.hashHi=t}},Mo=ar;function Rt(e,n,t){let o=d(e.monLocations,ue(wt,n));if(o<0)return!1;let r=g(e.cells,o);return G(r)===H&&ce(r)===wt&&fe(r)===n&&ae(r)===0&&Me(o,t)===1}i(Rt,"awakeAngelGuards");function Ps(e,n){let t=e.manaCount;for(let o=0;o<t;o+=1)if(d(e.manaIndices,o)===n){for(let r=o+1;r<t;r+=1)e.manaIndices[r-1]=d(e.manaIndices,r);e.manaIndices[t-1]=0,e.manaCount=t-1;return}throw new RangeError(`missing fast mana index: ${n}`)}i(Ps,"removeManaIndex");function Ls(e,n){let t=e.manaCount;if(t>=e.manaIndices.length)throw new RangeError("fast mana index capacity exceeded");let o=t;for(;o>0&&d(e.manaIndices,o-1)>n;)e.manaIndices[o]=d(e.manaIndices,o-1),o-=1;e.manaIndices[o]=n,e.manaCount=t+1}i(Ls,"insertManaIndex");function K(e,n,t){let o=g(e.cells,n);if(o!==t){if(o!==0){e.hashLo^=mo(n,o),e.hashHi^=fo(n,o);let r=G(o);if(r===H){let a=ue(ce(o),fe(o));d(e.monLocations,a)===n&&(e.monLocations[a]=-1)}else if(r===J){let a=x(o);(a===1||a===2)&&(e.freeMana[a-1]=d(e.freeMana,a-1)-1),Ps(e,n)}}if(e.cells[n]=t,t!==0){e.hashLo^=mo(n,t),e.hashHi^=fo(n,t);let r=G(t);if(r===H)e.monLocations[ue(ce(t),fe(t))]=n;else if(r===J){let a=x(t);(a===1||a===2)&&(e.freeMana[a-1]=d(e.freeMana,a-1)+1),Ls(e,n)}}}}i(K,"setCell");function ho(e){return rt(ce(e),fe(e),ae(e),0,0)}i(ho,"plainMonCell");function Kn(e,n,t){return rt(ce(e),fe(e),ae(e),n,t)}i(Kn,"carryingMonCell");function wa(e,n){e.potions[n]=d(e.potions,n)+1}i(wa,"addPotion");function ir(e,n,t,o){if(x(n)===0&&L(n)===0&&o===mn){K(e,t,Kn(n,0,Te));return}K(e,t,n),wa(e,fe(n))}i(ir,"collectConsumableAt");function Fs(e,n){e.active===0?e.whiteScore+=n:e.blackScore+=n}i(Fs,"addScore");function dr(e){if(e.actionsUsed<_e){e.actionsUsed+=1;return}e.potions[e.active]=d(e.potions,e.active)-1}i(dr,"consumeAction");function Oa(e,n){let t=ce(n),o=fe(n),r=d(Zo,ue(t,o));K(e,r,rt(t,o,2,0,0))}i(Oa,"faintMonAt");function Bs(e){let n=g(e.cells,tt);G(n)===H&&x(n)===0&&L(n)===0?K(e,tt,Kn(n,be,0)):K(e,tt,Cn(be))}i(Bs,"supermanaBackToBase");function Ds(e,n,t){let o=x(n);o===be?Bs(e):o!==0&&K(e,t,Cn(o)),L(n)===Te&&K(e,t,0)}i(Ds,"releaseFaintedCarry");function mr(e,n,t){Oa(e,n),Ds(e,n,t)}i(mr,"faintTargetAndReleaseCarry");function fr(e,n,t){Fs(e,De(t,e.active));let o=g(e.cells,n);G(o)===H?K(e,n,ho(o)):K(e,n,0)}i(fr,"scoreCarriedManaAt");function Vs(e,n){let t=Xe(n),o=Ne(n),r=g(e.cells,t),a=g(e.cells,o),s=x(r);if(e.monsMoves+=1,K(e,t,0),K(e,o,r),a!==0){let u=G(a);u===J?(s!==0&&K(e,t,Cn(s)),K(e,o,Kn(r,x(a),0))):u===me&&L(a)===Ce&&ir(e,r,o,xt(n))}s!==0&&nn(w(e.squares,o))&&fr(e,o,s)}i(Vs,"applyMonMove");function Us(e,n){let t=Xe(n),o=Ne(n),r=x(g(e.cells,t)),a=g(e.cells,o);e.manaMoves+=1,K(e,t,0),K(e,o,Cn(r)),a!==0&&K(e,o,Kn(a,r,0)),nn(w(e.squares,o))&&fr(e,o,r)}i(Us,"applyManaMove");function Ws(e,n){let t=Ne(n),o=g(e.cells,t);dr(e),K(e,t,0),mr(e,o,t)}i(Ws,"applyMysticAction");function Gs(e,n){let t=Xe(n),o=Ne(n),r=xt(n),a=r===ur?Se:ct(n),s=g(e.cells,t),u=g(e.cells,o),c=d(Zo,ue(ce(s),fe(s))),l=L(u)!==Te||a===Se||a===c;return K(e,t,0),a===Se?K(e,o,ho(s)):K(e,o,0),dr(e),u!==0&&(mr(e,u,o),L(u)===Te&&Oa(e,s)),a!==Se&&(r===mn?K(e,a,Kn(s,0,Te)):(K(e,a,ho(s)),r===jn&&wa(e,fe(s)))),l}i(Gs,"applyDemonAction");function Ks(e,n){let t=Xe(n),o=Ne(n),r=g(e.cells,t),a=g(e.cells,o);K(e,o,0),K(e,t,ho(r)),mr(e,a,o)}i(Ks,"applyBombAttack");function js(e,n){let t=Ne(n),o=ct(n),r=xt(n),a=g(e.cells,t),s=g(e.cells,o),u=x(a);if(dr(e),K(e,t,0),K(e,o,a),s!==0){let c=G(a);if(c===H){let l=G(s);l===J?(u!==0&&K(e,t,Cn(u)),K(e,o,Kn(a,x(s),0))):l===me&&ir(e,a,o,r)}else c===J?K(e,o,Kn(s,u,0)):c===me&&ir(e,s,o,r)}u!==0&&nn(w(e.squares,o))&&fr(e,o,u)}i(js,"applySpiritAction");function pr(e){let n=er(e.whiteScore,e.blackScore);return n===void 0?-1:$e(n)}i(pr,"positionWinner");function xa(e){return yo(e.firstTurn,e.actionsUsed,d(e.potions,e.active))}i(xa,"canUseAction");function Ra(e,n){return d(e.freeMana,e.active)===0?!1:nr(e.firstTurn,e.monsMoves,e.manaMoves,e.actionsUsed,d(e.potions,e.active),n!==0,!0)}i(Ra,"manaStartsAllowed");function ut(e,n){if(!at(w(e.squares,n)))return!1;let t=g(e.cells,n);return t===0||G(t)===H&&ce(t)===he&&x(t)===0&&L(t)===0}i(ut,"manaMoveAllowed");function $s(e){let n=e.active+1;for(let t=0;t<e.manaCount;t+=1){let o=d(e.manaIndices,t),r=g(e.cells,o);if(G(r)!==J||x(r)!==n)continue;let a=d(le.starts,o),s=d(le.counts,o);for(let u=0;u<s;u+=1){let c=d(le.list,a+u);if(ut(e,c))return!0}}return!1}i($s,"hasMovableFreeRegularMana");function qs(e){let t=!(!e.firstTurn&&wn(e.firstTurn,e.manaMoves)&&!dn(e.monsMoves))||d(e.freeMana,e.active)!==0&&$s(e);return tr(e.firstTurn,e.monsMoves,e.manaMoves,t)}i(qs,"shouldAdvanceTurn");function Hs(e){e.active^=1,e.firstTurn=!1,e.actionsUsed=0,e.manaMoves=0,e.monsMoves=0;let n=e.active;for(let t=0;t<ln;t+=1){let o=d(e.monLocations,ue(t,n));if(o<0)continue;let r=g(e.cells,o),a=ae(r);a===0||x(r)!==0||L(r)!==0||K(e,o,rt(ce(r),fe(r),a-1,x(r),L(r)))}}i(Hs,"advanceTurn");function _a(e,n){let t=e,o=st(n),r=!0;switch(o){case on:Vs(t,n);break;case ko:Us(t,n);break;case sr:Ws(t,n);break;case ze:r=Gs(t,n);break;case On:js(t,n);break;case cr:Ks(t,n);break;default:throw new RangeError(`unsupported fast move type: ${o}`)}let a=pr(t);return a===-1&&qs(t)&&Hs(t),r?a:lr}i(_a,"applyFastMove");function Na(e){switch(e){case A.Bomb:return Te;case A.Potion:return fa;case A.BombOrPotion:return Ce}}i(Na,"consumableCode");function Pa(e){return e.kind==="supermana"?be:$e(e.color)===0?Et:vt}i(Pa,"manaCode");var La=2147483647;function Fa(e,n,t){if(!Number.isSafeInteger(t)||t<0||n.whitePotionsCount>La-t||n.blackPotionsCount>La-t||n.turnNumber>Number.MAX_SAFE_INTEGER-t)return!1;let o;try{o=new Uint8Array(e.monLocations.length)}catch(a){if(a instanceof RangeError)return!1;throw a}let r=0;for(let a of n.board.items){if(a===void 0)continue;if(In(a)!==void 0&&(r+=1,r>e.manaIndices.length))return!1;let s=$(a);if(s===void 0)continue;let u=ue(qe[s.kind],$e(s.color));if(o[u]!==0)return!1;o[u]=1}try{zs(e,n)}catch(a){if(It(a))return!1;throw a}return!0}i(Fa,"tryLoadPosition");function zs(e,n){let t;try{t=new Uint16Array(121)}catch(r){Re(r)}let o=n.board.items;for(let r=0;r<121;r+=1){let a=o[r];if(a!==void 0)switch(a.kind){case"mon":t[r]=ro(a.mon,0,0);break;case"mana":t[r]=Cn(Pa(a.mana));break;case"mon-with-mana":t[r]=ro(a.mon,Pa(a.mana),0);break;case"mon-with-consumable":t[r]=ro(a.mon,0,Na(a.consumable));break;case"consumable":t[r]=ba(Na(a.consumable));break}}e.reset({cells:t,squares:ao(n.variant()),whiteScore:n.whiteScore,blackScore:n.blackScore,active:$e(n.activeColor),monsMoves:n.monsMovesCount,manaMoves:n.manaMovesCount,actionsUsed:n.actionsUsedCount,potions:[n.whitePotionsCount,n.blackPotionsCount],firstTurn:n.isFirstTurn()})}i(zs,"loadPosition");function So(e){return{kind:"location",location:et(e)}}i(So,"locationInput");function Xs(e){return{kind:"modifier",modifier:e===mn?X.SelectBomb:X.SelectPotion}}i(Xs,"modifierInput");function Ba(e){let n=st(e),t=[So(Xe(e)),So(Ne(e))];n===On?t.push(So(ct(e))):n===ze&&ct(e)!==Se&&t.push(So(ct(e)));let o=xt(e);return(o===mn||o===jn)&&(n===on||n===ze||n===On)&&t.push(Xs(o)),t}i(Ba,"moveToInputs");var Io=1e6,Qs=-2147483648,Ys=2147483647,Zs=["scoreUnit","potion","bomb","activeMon","faintMon","faintDrainer","faintCooldownStep","drainerCloseToMana","drainerCloseToOwnPool","drainerCloseToSupermana","carrierCloseToPool","carrierPointBonus","carrierScoresThisTurn","carrierScoresNextTurn","winningCarrier","drainerPickupScoresThisTurn","manaToOwnerPool","manaPointsAttraction","manaDrainerControl","supermanaDrainerControl","monCloseToCenter","spiritCloseToEnemy","spiritOnOwnBase","angelCloseToDrainer","angelGuardingDrainer","attackerCloseToEnemyDrainer","drainerThreatImmediate","drainerThreatWalk","carrierThreatFactor","manaToNearestPool","manaStepQueue1","manaStepQueue2","manaStepQueue3","manaStepQueue4","manaStepQueue5","manaStepWinThreat","drainerTripTurn1","drainerTripTurn2","drainerTripTurn3","drainerTripTurn4","supermanaCarrier","scoreShape10","scoreShape20","scoreShape21","scoreShape30","scoreShape31","scoreShape32","tripGradient","raceHalfTurn","threatMoverScaleSpare","threatMoverScaleFew","tripTwoPointScale"];function br(e){if(typeof e!="object"||e===null||Array.isArray(e))throw new TypeError("fast evaluation weights must be an object");let n=e,t={scoreUnit:0,potion:0,bomb:0,activeMon:0,faintMon:0,faintDrainer:0,faintCooldownStep:0,drainerCloseToMana:0,drainerCloseToOwnPool:0,drainerCloseToSupermana:0,carrierCloseToPool:0,carrierPointBonus:0,carrierScoresThisTurn:0,carrierScoresNextTurn:0,winningCarrier:0,drainerPickupScoresThisTurn:0,manaToOwnerPool:0,manaPointsAttraction:0,manaDrainerControl:0,supermanaDrainerControl:0,monCloseToCenter:0,spiritCloseToEnemy:0,spiritOnOwnBase:0,angelCloseToDrainer:0,angelGuardingDrainer:0,attackerCloseToEnemyDrainer:0,drainerThreatImmediate:0,drainerThreatWalk:0,carrierThreatFactor:0,manaToNearestPool:0,manaStepQueue1:0,manaStepQueue2:0,manaStepQueue3:0,manaStepQueue4:0,manaStepQueue5:0,manaStepWinThreat:0,drainerTripTurn1:0,drainerTripTurn2:0,drainerTripTurn3:0,drainerTripTurn4:0,supermanaCarrier:0,scoreShape10:0,scoreShape20:0,scoreShape21:0,scoreShape30:0,scoreShape31:0,scoreShape32:0,tripGradient:0,raceHalfTurn:0,threatMoverScaleSpare:0,threatMoverScaleFew:0,tripTwoPointScale:0};for(let o of Zs){let r=n[o];if(typeof r!="number")throw new TypeError(`weights.${o} must be a number`);if(!Number.isSafeInteger(r)||r<-Io||r>Io)throw new RangeError(`weights.${o} must be a safe integer from -${Io} through ${Io}`);t[o]=r}return Object.freeze(t)}i(br,"normalizeEvalWeights");var Rn=br({scoreUnit:12e3,potion:240,bomb:1200,activeMon:45,faintMon:520,faintDrainer:900,faintCooldownStep:80,drainerCloseToMana:330,drainerCloseToOwnPool:280,drainerCloseToSupermana:180,carrierCloseToPool:1600,carrierPointBonus:420,carrierScoresThisTurn:900,carrierScoresNextTurn:700,winningCarrier:8e3,drainerPickupScoresThisTurn:420,manaToOwnerPool:170,manaPointsAttraction:350,manaDrainerControl:26,supermanaDrainerControl:40,monCloseToCenter:210,spiritCloseToEnemy:200,spiritOnOwnBase:180,angelCloseToDrainer:150,angelGuardingDrainer:260,attackerCloseToEnemyDrainer:150,drainerThreatImmediate:2100,drainerThreatWalk:720,carrierThreatFactor:2,manaToNearestPool:0,manaStepQueue1:3600,manaStepQueue2:2500,manaStepQueue3:1050,manaStepQueue4:800,manaStepQueue5:800,manaStepWinThreat:8e3,drainerTripTurn1:4200,drainerTripTurn2:2200,drainerTripTurn3:1e3,drainerTripTurn4:400,supermanaCarrier:4e3,scoreShape10:-6824,scoreShape20:-6978,scoreShape21:-3085,scoreShape30:-8259,scoreShape31:-4275,scoreShape32:-1052,tripGradient:400,raceHalfTurn:900,threatMoverScaleSpare:25,threatMoverScaleFew:55,tripTwoPointScale:290}),pe=99,ge=Math.max(pe+1,11),Da=3,Ve=Ie+2,Ao=ee+1,yr=0,Ka=1,hr=2,xn=3,ja=3,$a=Ao,pn=6,Va=pn*2+1,_t=6,kr=2,Ua=12;function fn(e){let n=_n(ge);for(let t=0;t<ge;t+=1)n[t]=Math.trunc(e/(t+1));return n}i(fn,"distanceTable");function Js(e){let n=_n(ge),t=e.manaToNearestPool;for(let o=0;o<ge;o+=1){let r=o<=1?e.manaStepQueue1:o===2?e.manaStepQueue2:o===3?e.manaStepQueue3:o===4?e.manaStepQueue4:e.manaStepQueue5;n[o]=r+Math.trunc(t/(o+1))}return n}i(Js,"manaStepQueueTable");function ec(e){let n=_n(Ve*Ve),t=new Set,o=i((r,a,s)=>{if(r===a)throw new RangeError("score shape cells must be off the diagonal");let u=r*Ve+a,c=a*Ve+r;if(t.has(u)||t.has(c))throw new RangeError("score shape cells must be written once");t.add(u),t.add(c),n[u]=s,n[c]=-s},"set");o(1,0,e.scoreShape10),o(2,0,e.scoreShape20),o(2,1,e.scoreShape21),o(3,0,e.scoreShape30),o(3,1,e.scoreShape31),o(3,2,e.scoreShape32);for(let r=0;r+1<Ve;r+=1)for(let a=0;a<Ve;a+=1)if(e.scoreUnit+d(n,(r+1)*Ve+a)-d(n,r*Ve+a)<0)throw new RangeError("score shape corrections must keep the score monotone");return n}i(ec,"scoreShapeTable");function qa(e){let n=_n(ge);for(let t=0;t<ge;t+=1){let o=1+Math.ceil(t/ee);n[t]=o<=1?e.drainerTripTurn1:o===2?e.drainerTripTurn2:o===3?e.drainerTripTurn3:e.drainerTripTurn4}return n}i(qa,"drainerTripTable");function nc(e){let n=qa(e);for(let t=0;t<ge;t+=1)n[t]=Xa(d(n,t),e.tripTwoPointScale,"two-point trip");return n}i(nc,"twoPointTripTable");function tc(e){let n=_n(Va);for(let t=0;t<Va;t+=1)n[t]=(t-pn)*e;return n}i(tc,"raceTable");function oc(e){let n=_n(ge);for(let t=0;t<ge;t+=1){let o=t>Ua?Ua:t;n[t]=o*e}return n}i(oc,"tripStepTable");function rc(e){let n=_n(Da*ge);for(let t=0;t<Da;t+=1){let o=t*ge;for(let r=0;r<ge;r+=1)n[o+r]=Math.trunc(t*e/(r+1))}return n}i(rc,"manaPointsAttractionTable");function Ha(e,n){return n===yr?100:n===hr?e.threatMoverScaleSpare:e.threatMoverScaleFew}i(Ha,"moverScale");function za(e,n,t){let o=e*n;if(!Number.isSafeInteger(o))throw new RangeError(`${t} derived value requires a safe integer product`);return Math.trunc(o/100)}i(za,"scaledSafeInteger");function Xa(e,n,t){let o=za(e,n,t);if(o<Qs||o>Ys)throw new RangeError(`${t} derived value must fit a signed 32-bit integer`);return o}i(Xa,"scaledInt32");function ac(e){let n=_n(2*xn);for(let t=0;t<2;t+=1){let o=t===1?e.carrierThreatFactor:1;for(let r=0;r<xn;r+=1)n[t*xn+r]=Xa(e.drainerThreatImmediate*o,Ha(e,r),"immediate threat")}return n}i(ac,"threatImmediateTable");function ic(e){let n=sc(2*xn*Ao);for(let t=0;t<2;t+=1){let o=t===1?e.carrierThreatFactor:1;for(let r=0;r<xn;r+=1){let a=Ha(e,r),s=(t*xn+r)*Ao;for(let u=0;u<Ao;u+=1)n[s+u]=za(Math.trunc(e.drainerThreatWalk*o*(ee+1-u)/ee),a,"walking threat")}}return n}i(ic,"threatWalkTable");function _n(e){try{return new Int32Array(e)}catch(n){Re(n)}}i(_n,"createInt32Table");function sc(e){try{return new Float64Array(e)}catch(n){Re(n)}}i(sc,"createFloat64Table");function cc(e,n){let t=pn*Math.abs(e.raceHalfTurn);if(t===0)return;let o=Ie-kr;for(let r=0;r<o;r+=1){let a=e.scoreUnit+d(n,o*Ve+r)-d(n,(o-1)*Ve+r);if(t>a)throw new RangeError("race correction must not outweigh the point that opens the endgame band")}}i(cc,"assertRaceStaysMonotone");function Qa(e){let n=ec(e);return cc(e,n),{weights:e,manaPointsAttraction:rc(e.manaPointsAttraction),manaToOwnerPool:fn(e.manaToOwnerPool),manaToNearestPool:Js(e),scoreShape:n,drainerTrip:qa(e),drainerTripTwoPoint:nc(e),race:tc(e.raceHalfTurn),tripStep:oc(e.tripGradient),carrierCloseToPool:fn(e.carrierCloseToPool),drainerCloseToMana:fn(e.drainerCloseToMana),drainerCloseToOwnPool:fn(e.drainerCloseToOwnPool),drainerCloseToSupermana:fn(e.drainerCloseToSupermana),angelCloseToDrainer:fn(e.angelCloseToDrainer),spiritCloseToEnemy:fn(e.spiritCloseToEnemy),monCloseToCenter:fn(e.monCloseToCenter),attackerCloseToEnemyDrainer:fn(e.attackerCloseToEnemyDrainer),threatImmediate:ac(e),threatWalk:ic(e)}}i(Qa,"createEvalTables");var Co=Qa(Rn),Wa=new WeakMap;function Ya(e){if(e===Rn)return Rn;if(!Object.isFrozen(e))return br(e);let n=Wa.get(e);return n===void 0&&(n=br(e),Wa.set(e,n)),n}i(Ya,"memoizedNormalizedEvalWeights");var Ga=new WeakMap;function Za(e){if(e===Rn)return Co;let n=Ga.get(e);return n===void 0&&(n=Qa(e),Ga.set(e,n)),n}i(Za,"memoizedEvalTables");var bn=1e6;function Ja(e,n){return w(ya,n*121+e)}i(Ja,"ownPoolDistance");var ei=Int32Array.of(0,10,110,120);function uc(e,n){for(let t=0;t<ei.length;t+=1){let o=d(ei,t);if(Me(n,o)===1&&ut(e,o))return!0}return!1}i(uc,"hasAdjacentScoringPool");function ni(e,n,t,o){return d(n,t>o?t-o:0)-d(e.tripStep,t)}i(ni,"tripValue");function lc(e){return w(ha,e)}i(lc,"centerDistance");var Mr=new WeakMap,Nt,lt;function dc(e,n){if(e?.length!==n.length)return!1;for(let t=0;t<n.length;t+=1)if(w(e,t)!==w(n,t))return!1;return!0}i(dc,"sameSquareContent");function mc(e){try{let n=new Uint8Array(14641).fill(pe),t=new Int32Array(121),o=new Int32Array(121),r=[],a=[];for(let s=0;s<121;s+=1){let u=d(gn.starts,s),c=d(gn.counts,s);for(let f=0;f<121;f+=1){let p=pe;for(let b=0;b<c;b+=1){let k=d(gn.list,u+b);if(w(e,k)>=se)continue;let C=Me(f,k);C<p&&(p=C)}n[s*121+f]=p}t[s]=r.length;let l=d(En.starts,s),m=d(En.counts,s);for(let f=0;f<m;f+=1){let p=d(En.list,l+f);if(w(e,p)>=se)continue;let b=co(s,p),k=w(e,b);k===en||k>=se||(r.push(p),a.push(b))}o[s]=r.length-d(t,s)}return{mysticSteps:n,demonStarts:t,demonCounts:o,demonOrigins:new Int32Array(r),demonBetween:new Int32Array(a)}}catch(n){Re(n)}}i(mc,"buildAttackTables");function fc(e){if(e===Nt&<!==void 0)return lt;let n=Mr.get(e);if(n!==void 0)return Nt=e,lt=n,n;if(lt!==void 0&&dc(Nt,e)){let o=lt;return Mr.set(e,o),Nt=e,o}let t=mc(e);return Mr.set(e,t),Nt=e,lt=t,t}i(fc,"attackTablesFor");function pc(e,n,t,o){if(!ot(g(e.cells,n)))return pe;let r=t^1,a=pe,s=fc(e.squares);for(let u=0;u<ln;u+=1){let c=d(e.monLocations,ue(u,r));if(c<0)continue;let l=g(e.cells,c);if(G(l)!==H)continue;if(L(l)===Te){let p=Me(c,n)-3,b=p<0?0:p;if(b===0)return 0;b<a&&(a=b);continue}if(ae(l)!==0||L(l)!==0||o||x(l)!==0)continue;if(u===no){let p=w(s.mysticSteps,n*121+c);if(p===0)return 0;p<a&&(a=p);continue}if(u!==Tt)continue;let m=d(s.demonStarts,n),f=d(s.demonCounts,n);for(let p=0;p<f;p+=1){let b=d(s.demonBetween,m+p);if(b!==c&&g(e.cells,b)!==0)continue;let k=Me(c,d(s.demonOrigins,m+p));if(k===0)return 0;k<a&&(a=k)}}return a}i(pc,"estimatedAttackSteps");function ti(e,n,t=0){let o=n.weights,r=(e.whiteScore-e.blackScore)*o.scoreUnit+d(n.scoreShape,e.whiteScore*Ve+e.blackScore)+(d(e.potions,0)-d(e.potions,1))*o.potion,a=d(e.monLocations,ue(he,0)),s=d(e.monLocations,ue(he,1)),u=a>=0&&ae(g(e.cells,a))===0,c=s>=0&&ae(g(e.cells,s))===0,l=pe,m=pe,f=pe,p=pe,b=pe,k=pe,C=ee-e.monsMoves,I=t!==0,_=Ie-e.whiteScore,N=Ie-e.blackScore,F=0,D=_t,P=_t,V=_t,U=_t,ne=!1,Ee=!1;if(I){if(a>=0){let S=g(e.cells,a);ne=ae(S)<=1&&x(S)===0&&L(S)===0}if(s>=0){let S=g(e.cells,s);Ee=ae(S)<=1&&x(S)===0&&L(S)===0}}let Ye=0,cn=0,Ze=!1,kn=!1,zn=0,de=0,we=0,We=0;for(let S=0;S<e.manaCount;S+=1){let v=d(e.manaIndices,S),Ge=g(e.cells,v);if(G(Ge)!==J)continue;let j=x(Ge),z=u?Me(a,v):pe,te=c?Me(s,v):pe;z<l&&(l=z),te<m&&(m=te);let ie=w(tn,v);if(u){let T=z+ie;j===Et&&T<f?f=T:j!==Et&&T<b&&(b=T)}if(c){let T=te+ie;j===vt&&T<p?p=T:j!==vt&&T<k&&(k=T)}if(I){let T=!1;if(j!==be&&ie<=1&&uc(e,v)&&(T=!0,j-1===0?zn<2&&(zn+=1):de<2&&(de+=1)),ne&&(u?z:Me(a,v))+ie<=ee){let oe=De(j,0);oe>Ye?(Ye=oe,Ze=T&&j-1===0):oe===Ye&&!(T&&j-1===0)&&(Ze=!1)}if(Ee&&(c?te:Me(s,v))+ie<=ee){let oe=De(j,1);oe>cn?(cn=oe,kn=T&&j-1===1):oe===cn&&!(T&&j-1===1)&&(kn=!1)}}let Ke=te-z;if(Ke>4&&(Ke=4),Ke<-4&&(Ke=-4),o.manaPointsAttraction!==0){let T=n.manaPointsAttraction;u&&(r+=d(T,De(j,0)*ge+z)),c&&(r-=d(T,De(j,1)*ge+te))}if(j===be)r+=o.supermanaDrainerControl*Ke;else{let T=j-1,R=T===0?1:-1;r+=R*d(n.manaToOwnerPool,Ja(v,T)),r+=R*d(n.manaToNearestPool,ie),r+=o.manaDrainerControl*Ke,ie<=2&&(T===0?_:N)<=1&&(F|=T===0?1:2),T===0?ie<D&&(D=ie):ie<P&&(P=ie)}}F!==0&&(r+=o.manaStepWinThreat*(((F&1)===0?0:1)-((F&2)===0?0:1)));for(let S=0;S<Ae;S+=1){let v=S===0?1:-1,Ge=S^1;for(let j=0;j<ln;j+=1){let z=d(e.monLocations,ue(j,S));if(z<0)continue;let te=g(e.cells,z);if(G(te)!==H)continue;let ie=ae(te);ie!==0&&(r-=v*((j===he?o.faintDrainer:o.faintMon)+o.faintCooldownStep*ie));let Ke=w(e.squares,z);ie===0&&Ke<se&&(r+=v*o.activeMon);let T=x(te);if(T!==0){let R=De(T,S),oe=w(tn,z);r+=v*(d(n.carrierCloseToPool,oe)+R*o.carrierPointBonus),T===be&&(r+=v*o.supermanaCarrier),S===e.active&&oe<=C?r+=v*o.carrierScoresThisTurn*R:S!==e.active&&oe<=ee&&(r+=v*o.carrierScoresNextTurn*R,I&&(S===0?R>we&&(we=R):R>We&&(We=R)));let je=S===0?e.whiteScore:e.blackScore;R>=Ie-je&&(r+=v*o.winningCarrier)}else L(te)===Te&&(r+=v*o.bomb);if(ie===0)if(j===he){let R=0,oe=S===0?l:m,je=S===0?f:p,Fn=S===0?b:k,jt=je<Fn?je:Fn,$t=S===e.active?C:ee,Lr=n.drainerTrip,qt=T!==0?w(tn,z):L(te)!==0?pe:je;T===0&&L(te)===0&&Fn<pe&&(je>=pe||ni(n,n.drainerTripTwoPoint,Fn,$t)>ni(n,n.drainerTrip,je,$t))&&(Lr=n.drainerTripTwoPoint,qt=Fn),R-=d(n.tripStep,qt);let Fr=qt>$t?qt-$t:0,Ht=1+((Fr+ee-1)/ee|0);S===0?Ht<V&&(V=Ht):Ht<U&&(U=Ht),R+=d(Lr,Fr),R+=d(n.drainerCloseToMana,oe),R+=d(n.drainerCloseToOwnPool,Ja(z,S)),R+=d(n.drainerCloseToSupermana,Me(z,tt)),T===0&&L(te)===0&&S===e.active&&jt<=C&&(R+=o.drainerPickupScoresThisTurn),r+=v*R;let Br=Rt(e,S,z),Do=pc(e,z,S,Br),zi=T!==0,Xi=S!==e.active||C===0?yr:C>=ja?hr:Ka,Dr=(zi?xn:0)+Xi;Do===0?r-=v*d(n.threatImmediate,Dr):Do<=ee&&(r-=v*(n.threatWalk[Dr*$a+Do]??0)),Br&&(r+=v*o.angelGuardingDrainer)}else if(j===wt){let R=S===0?a:s;R>=0&&(r+=v*d(n.angelCloseToDrainer,Me(z,R)))}else if(j===eo){let R=pe;for(let oe=0;oe<ln;oe+=1){let je=d(e.monLocations,ue(oe,Ge));if(je<0)continue;let Fn=g(e.cells,je);if(ae(Fn)!==0)continue;let jt=Me(z,je);jt<R&&(R=jt)}r+=v*d(n.spiritCloseToEnemy,R),Ke>=se&&(r-=v*o.spiritOnOwnBase)}else{r+=v*d(n.monCloseToCenter,lc(z));let R=Ge===0?a:s,oe=Ge===0?u:c;R>=0&&oe&&(r+=v*d(n.attackerCloseToEnemyDrainer,Me(z,R)))}}}if(o.raceHalfTurn!==0&&(_<N?_:N)<=kr){let S=e.manaMoves>0?1:0,v=D+(e.active===0?S:0),Ge=P+(e.active===1?S:0),j=V<v?V:v,te=(U<Ge?U:Ge)*2+(e.active===1?0:1)-(j*2+(e.active===0?0:1)),ie=te>pn?pn:te<-pn?-pn:te;r+=d(n.race,ie+pn)}if(I){let S=e.active^1,v=S===0?1:-1,Ge=S===0?Ye:cn,j=S===0?we:We,z=S===0?zn:de,te=z>0,ie=S===0?Ze:kn,Ke=z>=2||z===1&&!ie,T=Ge;T>0&&Ke&&(T+=1);let R=j;R>0&&te&&(R+=1),R>T&&(T=R),te&&T<1&&(T=1);let oe=S===0?e.whiteScore:e.blackScore;T>0&&oe+T>=Ie&&(r+=v*t)}return r}i(ti,"evaluateWithTables");var yn=704,go=1073741824;function Ft(e,n){return n?e+go:e}i(Ft,"encodeGeneratedMoves");function Pt(e){return e>=go?e-go:e}i(Pt,"generatedMoveCount");function Lt(e){return e>=go}i(Lt,"generatedMovesHadRawStartOption");function Sr(e,n){return G(e)===H&&fe(e)!==n&&ae(e)===0}i(Sr,"isEnemyAwakeMon");function Ir(e){let n=131072;return x(e)!==0&&(n+=1<<20),ce(e)===he&&(n+=1<<19),n}i(Ir,"damagingAttackKey");function bc(e,n,t){let o=g(e.cells,t),r=w(e.squares,t),a=G(n),s=a===H,u=x(n),c=L(n),l=o===0?-1:G(o),m=l===H&&(x(o)!==0||L(o)!==0);if(l===H)if(m){if(a!==me||c!==Ce)return 0}else{if(s)return 0;if(a===J){if(ce(o)!==he||ae(o)!==0)return 0}else if(c!==Ce)return 0}else if(l===J){if(!s||ce(n)!==he||ae(n)!==0)return 0}else if(l===me&&(L(o)!==Ce||!s))return 0;if(r>=se){if(!s||to(r)!==ce(n)||oo(r)!==fe(n)||u!==0||c!==0)return 0}else if(r===en){let f=l===J&&x(o)===be,p=s&&ce(n)===he;if(!(u===be||u===0&&p&&(o===0||f)||p&&f))return 0}return o===0?1:s?u===0&&c===0?l===me?L(o)===Ce?2:0:1:u!==0?l===me?L(o)===Ce?1:0:1:l!==me||L(o)!==Ce?0:1:a===J?l!==H||m?0:1:l!==H?0:m?c===Ce?1:0:2}i(bc,"spiritDestinationOptionCount");function yc(e,n,t,o,r,a){let s=r,u=!1,c=ce(t),l=fe(t),m=x(t),f=L(t),p=e.active,b=w(tn,n),k=c===he?1024:0,C=d(le.starts,n),I=d(le.counts,n);for(let _=0;_<I;_+=1){let N=d(le.list,C+_),F=g(e.cells,N),D=w(e.squares,N),P=F===0?-1:G(F),V;if(m!==0)P===H?V=!1:P===J||P===me?V=!0:V=at(D)||D===en&&m===be;else if(f!==0)P===me?V=!0:P===-1?V=at(D):V=!1;else{let ne;P===H?ne=!1:P===J?ne=c===he:ne=!0,ne?D>=se?V=to(D)===c&&oo(D)===l:D===en?V=c===he&&(F===0||P===J&&x(F)===be):V=!0:V=!1}if(!V||(u=!0,P===me&&L(F)!==Ce))continue;let U=0;m!==0&&nn(D)&&(U+=(1<<21)+De(m,p)*(1<<18)),F!==0&&(P===J?U+=65536+De(x(F),p)*512:P===me&&(U+=16384)),m!==0?U+=(b-w(tn,N))*2048+4096:U+=k,P===me&&L(F)===Ce&&m===0&&f===0?(a[s]=U,o[s]=ye(on,n,N,Se,mn),s+=1,a[s]=U,o[s]=ye(on,n,N,Se,jn),s+=1):(a[s]=U,o[s]=ye(on,n,N,Se,rn),s+=1)}return Ft(s,u)}i(yc,"generateMonMoves");function hc(e,n,t,o,r){let a=e.active,s=o,u=!1,c=d(gn.starts,n),l=d(gn.counts,n);for(let m=0;m<l;m+=1){let f=d(gn.list,c+m),p=g(e.cells,f);Sr(p,a)&&(Rt(e,a^1,f)||(u=!0,ot(p)&&(r[s]=Ir(p),t[s]=ye(sr,n,f,Se,rn),s+=1)))}return Ft(s,u)}i(hc,"generateMysticMoves");function kc(e,n,t,o,r){let a=e.active,s=o,u=!1,c=Tt,l=a,m=d(En.starts,n),f=d(En.counts,n);for(let p=0;p<f;p+=1){let b=d(En.list,m+p),k=g(e.cells,b);if(!Sr(k,a)||Rt(e,a^1,b))continue;let C=co(n,b);if(g(e.cells,C)!==0)continue;let I=w(e.squares,C);if(I===en||I>=se||(u=!0,!ot(k)))continue;let _=Ir(k),N=w(e.squares,b),F=x(k);if(!(F!==0&&F!==be||N===en||N>=se)){r[s]=_,t[s]=ye(ze,n,b,Se,rn),s+=1;continue}let P=s,V=d(le.starts,b),U=d(le.counts,b);for(let ne=0;ne<U;ne+=1){let Ee=d(le.list,V+ne),Ye=g(e.cells,Ee),cn=Ye===0?-1:G(Ye);if(cn!==-1&&cn!==me)continue;let Ze=w(e.squares,Ee);(at(Ze)||Ze>=se&&to(Ze)===c&&oo(Ze)===l)&&(cn===me?L(Ye)===Ce?(r[s]=_,t[s]=ye(ze,n,b,Ee,mn),s+=1,r[s]=_,t[s]=ye(ze,n,b,Ee,jn),s+=1):(r[s]=_,t[s]=ye(ze,n,b,Ee,ur),s+=1):(r[s]=_,t[s]=ye(ze,n,b,Ee,rn),s+=1))}s===P&&(r[s]=_,t[s]=ye(ze,n,b,Se,rn),s+=1)}return Ft(s,u)}i(kc,"generateDemonMoves");function Mc(e,n,t,o,r){let a=o,s=!1,u=e.active,c=d(io.starts,n),l=d(io.counts,n);for(let m=0;m<l;m+=1){let f=d(io.list,c+m),p=g(e.cells,f);if(p===0||G(p)===H&&ae(p)!==0)continue;s=!0;let b=x(p),k=G(p)===J,C=w(tn,f),I=(1<<21)+De(b,u)*(1<<18),_=d(le.starts,f),N=d(le.counts,f);for(let F=0;F<N;F+=1){let D=d(le.list,_+F),P=bc(e,p,D);if(P===0)continue;let V=0;b!==0&&nn(w(e.squares,D))?V+=8192+I:k&&Sc(e,D,C,u)&&(V+=40960),P===2?(r[a]=V,t[a]=ye(On,n,f,D,mn),a+=1,r[a]=V,t[a]=ye(On,n,f,D,jn),a+=1):(r[a]=V,t[a]=ye(On,n,f,D,rn),a+=1)}}return Ft(a,s)}i(Mc,"generateSpiritMoves");function Sc(e,n,t,o){if(w(tn,n)<t)return!0;let r=g(e.cells,n);return G(r)===H&&ce(r)===he&&fe(r)===o&&ae(r)===0}i(Sc,"advancesMana");function Ic(e,n,t,o,r){let a=e.active,s=o,u=!1,c=d(so.starts,n),l=d(so.counts,n);for(let m=0;m<l;m+=1){let f=d(so.list,c+m),p=g(e.cells,f);Sr(p,a)&&(u=!0,ot(p)&&(r[s]=Ir(p),t[s]=ye(cr,n,f,Se,rn),s+=1))}return Ft(s,u)}i(Ic,"generateBombMoves");function Ac(e,n,t,o,r){let a=o,s=d(le.starts,n),u=d(le.counts,n);for(let c=0;c<u;c+=1){let l=d(le.list,s+c),m=w(e.squares,l);ut(e,l)&&(r[a]=nn(m)?(1<<21)+(1<<18):16,t[a]=ye(ko,n,l,Se,rn),a+=1)}return a}i(Ac,"generateManaMoves");function Cc(e,n,t,o,r){let a=o;if(w(tn,n)!==1)return a;let s=d(le.starts,n),u=d(le.counts,n);for(let c=0;c<u;c+=1){let l=d(le.list,s+c),m=w(e.squares,l);!nn(m)||!ut(e,l)||(r[a]=(1<<21)+(1<<18),t[a]=ye(ko,n,l,Se,rn),a+=1)}return a}i(Cc,"generateWinningManaMoves");var gc=new Int32Array(yn);function Ar(e,n,t=gc){let o=e.active,r=dn(e.monsMoves),a=xa(e),s=0,u=0;for(let c=0;c<ln;c+=1){let l=d(e.monLocations,ue(c,o));if(l<0)continue;let m=g(e.cells,l);if(G(m)!==H)continue;let f=!1,p=x(m),b=L(m),k=p!==0||b!==0;if(!(!k&&ae(m)!==0)){if(r){let C=yc(e,l,m,n,s,t);s=Pt(C),f||=Lt(C)}if(k){if(b===Te){let C=Ic(e,l,n,s,t);s=Pt(C),f||=Lt(C)}}else if(w(e.squares,l)<se&&a){if(c===no){let I=hc(e,l,n,s,t);s=Pt(I),f||=Lt(I)}else if(c===Tt){let I=kc(e,l,n,s,t);s=Pt(I),f||=Lt(I)}else if(c===eo){let I=Mc(e,l,n,s,t);s=Pt(I),f||=Lt(I)}}f&&(u+=1)}}if(Ra(e,u)){let c=o+1;for(let l=0;l<e.manaCount;l+=1){let m=d(e.manaIndices,l),f=g(e.cells,m);G(f)===J&&x(f)===c&&(s=Ac(e,m,n,s,t))}}else if(d(e.freeMana,o)!==0&&wn(e.firstTurn,e.manaMoves)&&(o===0?e.whiteScore:e.blackScore)+1>=Ie){let c=o+1;for(let l=0;l<e.manaCount;l+=1){let m=d(e.manaIndices,l),f=g(e.cells,m);G(f)===J&&x(f)===c&&(s=Cc(e,m,n,s,t))}}if(s>n.length)throw new RangeError(`fast move buffer capacity exceeded: generated ${s} moves for ${n.length} slots`);return s}i(Ar,"generateMoves");var an=48,Eo=an-2,Nn=bn-an-1,vo=Object.freeze({lateMoveReduction:!0,lateMoveIndex:3,lateMoveDeepIndex:8,moveCountPruning:!0,moveCountDepth:3,moveCountBase:4,moveCountFactor:5,futilityMargin:900,aspirationDelta:0,aspirationMinDepth:3,winsNextTurnThreat:0}),oi=new WeakMap;function ii(e){if(!(Object.isFrozen(e)&&(e.tuning===void 0||Object.isFrozen(e.tuning))))return ri(e);let t=oi.get(e);return t===void 0&&(t=ri(e),oi.set(e,t)),t}i(ii,"memoizedSearchLimits");function ri(e){if(typeof e!="object"||e===null||Array.isArray(e))throw new TypeError("fast search limits must be an object");let n=e,t=n.maxDepth;if(!Number.isSafeInteger(t)||t<0||t>Eo)throw new RangeError(`maxDepth must be a safe integer from 0 through ${Eo}`);let o=n.maxNodes;if(!Number.isSafeInteger(o)||o<0)throw new RangeError("maxNodes must be a nonnegative safe integer");let r=n.tuning;return Object.freeze({maxDepth:t,maxNodes:o,tuning:r===void 0?vo:Ec(r)})}i(ri,"normalizeSearchLimits");function Ec(e){if(typeof e!="object"||e===null||Array.isArray(e))throw new TypeError("fast search tuning must be an object");let n=e;return Object.freeze({lateMoveReduction:ai(n,"lateMoveReduction"),lateMoveIndex:hn(n,"lateMoveIndex",yn),lateMoveDeepIndex:hn(n,"lateMoveDeepIndex",yn),moveCountPruning:ai(n,"moveCountPruning"),moveCountDepth:hn(n,"moveCountDepth",Eo),moveCountBase:hn(n,"moveCountBase",yn),moveCountFactor:hn(n,"moveCountFactor",yn),futilityMargin:hn(n,"futilityMargin",Nn),aspirationDelta:hn(n,"aspirationDelta",Nn),aspirationMinDepth:hn(n,"aspirationMinDepth",Eo),winsNextTurnThreat:hn(n,"winsNextTurnThreat",Nn)})}i(Ec,"normalizeSearchTuning");function ai(e,n){let t=e[n];if(typeof t!="boolean")throw new TypeError(`tuning.${n} must be a boolean`);return t}i(ai,"normalizedTuningBoolean");function hn(e,n,t){let o=e[n];if(typeof o!="number")throw new TypeError(`tuning.${n} must be a number`);if(!Number.isSafeInteger(o)||o<0||o>t)throw new RangeError(`tuning.${n} must be a safe integer from 0 through ${t}`);return o}i(hn,"normalizedTuningInteger");var $n=1<<20,Bt=new Int32Array(0);function Dt(e){try{return new Int32Array(e)}catch(n){Re(n)}}i(Dt,"allocateTranspositionPart");var To=class{static{i(this,"TranspositionTable")}keyLo=Bt;keyHi=Bt;score=Bt;info=Bt;move=Bt;entries=0;generation=1;mask=0;deactivate(){this.mask=0}prepare(n){if(this.keyLo.length!==0)return this.mask=$n-1,!0;if(n())return!1;let t=Dt($n);if(n())return!1;let o=Dt($n);if(n())return!1;let r=Dt($n);if(n())return!1;let a=Dt($n);if(n())return!1;let s=Dt($n);return n()?!1:(this.keyLo=t,this.keyHi=o,this.score=r,this.info=a,this.move=s,this.entries=0,this.generation=1,this.mask=$n-1,!0)}clear(){this.keyLo.fill(0),this.keyHi.fill(0),this.score.fill(0),this.info.fill(0),this.move.fill(0),this.entries=0,this.generation=1}};var vc=16,Vt=1<<vc,Tc=Vt-1,wc=1<<30,si=0,ci=1,ui=2,Oc=3,li=4194303,xc=511,Rc=32768,_c=1<<28,Nc=1<<24,Pc=1<<23,Pn=bn*2,di=i(()=>!1,"NO_TIMEOUT"),bi=Ae,yi=ee+1,hi=An+1,ki=_e+1,Mi=2,Cr=4,Lc=bi*yi*hi*ki*Mi*Cr*Cr;if(lo.length!==Jo.length||lo.length<Lc)throw new RangeError("fast scalar hash table is too small for the configured state space");function Fc(e,n){if(e===n)return!0;if(e?.length!==n.length)return!1;for(let t=0;t<n.length;t+=1)if(w(e,t)!==w(n,t))return!1;return!0}i(Fc,"sameSquares");var wo=class{static{i(this,"FastSearcher")}#e=[];#n=[];#t=[];#o;#r=new Int32Array(an*2);#a=new Int32Array(Ae*121*121);#y=new Int32Array(an+1);#s=new Int32Array(Vt);#h=new Int32Array(Vt);#b=new Int32Array(Vt);#d=new Float64Array(Vt);#c=0;#k;#M=0;#S;#m=Co;#C=vo;#g=0;#f=0;#E=0;#u=!1;#v=!1;#i=0;#I=di;constructor(){this.#o=new To;for(let n=0;n<=an;n+=1)this.#e.push(new Mo),this.#n.push(new Int32Array(yn)),this.#t.push(new Int32Array(yn))}get root(){return ke(this.#e,0)}get size(){return this.#o.entries}search(n,t,o=Rn){let r=ii(n),a=Ya(o);if(this.#v=!1,this.#i=0,pr(this.root)!==-1)return{move:0,score:0,depth:0,nodes:0,supported:!0};this.#m=Za(a);let s=r.tuning;this.#C=s,this.#g=s.winsNextTurnThreat;let u=!Fc(this.#S,this.root.squares);(a!==this.#k||s.winsNextTurnThreat!==this.#M||u)&&(this.#k=a,this.#M=s.winsNextTurnThreat,this.#S=this.root.squares,this.#c>=wc&&(this.#c=0,this.#b.fill(0)),this.#c+=1),this.#f=0,this.#E=r.maxNodes,this.#u=!1,this.#I=t,this.#o.deactivate();try{this.#r.fill(0),this.#a.fill(0);let c=0,l=0,m=0;for(let f=1;f<=r.maxDepth;f+=1){if(f===2){if(this.#f>=this.#E||!this.#o.prepare(this.#I)){this.#u=!0;break}this.#N()}let p=-Pn,b=Pn;s.aspirationDelta>0&&m>0&&f>=s.aspirationMinDepth&&(p=l-s.aspirationDelta,b=l+s.aspirationDelta);let k=this.#w(f,c,p,b),C=0;for(;!this.#l()&&k.move!==0&&(k.score<=p||k.score>=b)&&(p>-Pn||b<Pn);){C+=1;let I=s.aspirationDelta*(1<<C);k.score<=p&&(p=C>=2?-Pn:k.score-I),k.score>=b&&(b=C>=2?Pn:k.score+I),k=this.#w(f,k.move,p,b)}if(k.move===0)break;if(this.#l()){m===0&&(c=k.move,l=k.score);break}if(c=k.move,l=k.score,m=f,!k.selective&&l>=bn-an)break}return{move:c,score:l,depth:m,nodes:this.#f,supported:!this.#v}}finally{this.#o.deactivate(),this.#m=Co,this.#C=vo,this.#g=0,this.#I=di}}#N(){this.#o.generation+=1,this.#o.generation>li&&this.#o.clear()}#w(n,t,o,r){let a=ke(this.#e,0),s=ke(this.#n,0),u=Ar(a,s,ke(this.#t,0));if(u===0)return{move:0,score:0,selective:!1};this.#R(a,s,u,0,t);let c=ke(this.#t,0),l=o,m=0,f=-Pn,p=!1;for(let b=0;b<u;b+=1){this.#_(s,c,b,u);let k=d(s,b),C,I=this.#i,_;if(b===0?(C=this.#p(a,k,0,n-1,l,r),_=this.#i!==I):(C=this.#p(a,k,0,n-1,l,l+1),_=this.#i!==I,C>l&&!this.#l()&&(I=this.#i,C=this.#p(a,k,0,n-1,l,r),_=this.#i!==I)),this.#l()||(C>f&&(f=C,m=k,p=_,C>l&&(l=C)),l>=r))break}return m===0&&(m=d(s,0),f=0,p=!0),{move:m,score:f,selective:p}}#p(n,t,o,r,a,s){let u=ke(this.#e,o+1);u.copyFrom(n),this.#y[o]=t;let c=_a(u,t);return c===lr?(this.#v=!0,this.#u=!0,0):c!==-1?c===n.active?bn-o:-(bn-o):u.active===n.active?this.#O(r,o+1,a,s):-this.#O(r,o+1,-s,-a)}#O(n,t,o,r){if(!this.#T())return 0;let a=ke(this.#e,t);if(t>=an-2)return this.#A(a);if(n<=0)return this.#A(a);let s=o,u=this.#P(a,t),c=mi(a),l=fi(a,c,u),m=pi(a,c,u),f=this.#o,p=(l^m*3)&f.mask,b=0,k=d(f.info,p),C=d(f.keyLo,p)===l&&d(f.keyHi,p)===m&&(k>>>8&li)===f.generation;if(C&&(b=d(f.move,p),(k>>2&63)>=n)){let we=d(f.score,p),We=k&3;if(We===si||We===ci&&we>=r||We===ui&&we<=s)return we}let I=this.#C,_=ke(this.#n,t),N=Ar(a,_,ke(this.#t,t));if(N===0)return this.#A(a,l,m);u!==0&&(N=this.#L(_,N,u,t)),this.#R(a,_,N,t,b);let F=ke(this.#t,t),D=N;if(I.moveCountPruning&&n<=I.moveCountDepth){let de=I.moveCountBase+I.moveCountFactor*n;de<D&&(D=de)}let P=n<=2;if(P&&!this.#T()||this.#l())return 0;let V=!1,U=!1,ne=-Pn,Ee=0,Ye=this.#i;for(let de=0;de<N;de+=1){this.#_(_,F,de,N);let we=d(_,de),We=d(F,de)>=Rc;if(!We&&Ee!==0){let v=de>=D;if(!v&&P&&(V||(U=this.#x(a,l,m)+I.futilityMargin*n<=o,V=!0),v=U),v){this.#i+=1;break}}let S;if(de===0)S=this.#p(a,we,t,n-1,s,r);else{let v=0;I.lateMoveReduction&&!We&&n>=3&&de>=I.lateMoveIndex&&(v=de>=I.lateMoveDeepIndex?2:1,v>=n&&(v=n-1)),S=this.#p(a,we,t,n-1-v,s,s+1),!this.#l()&&S>s&&(v>0||S<r)&&(S=this.#p(a,we,t,n-1,s,r))}if(this.#l())return 0;if(S>ne&&(ne=S,Ee=we),S>s&&(s=S),s>=r){this.#F(a,we,t,n,We);break}}if(Ee===0)return this.#A(a);let Ze=this.#i!==Ye?Oc:ne>=r?ci:ne<=o?ui:si,kn=ne,zn=n;if(kn<bn-an&&kn>-bn+an){let de=k>>2&63;(!C||zn>=de)&&(k===0&&d(f.info,p)===0&&(f.entries+=1),f.keyLo[p]=l,f.keyHi[p]=m,f.score[p]=kn,f.info[p]=f.generation<<8|zn<<2|Ze,f.move[p]=Ee)}return ne}#P(n,t){if(t===0)return 0;let o=d(this.#y,t-1);return st(o)===on&&ke(this.#e,t-1).active===n.active?o:0}#L(n,t,o,r){let a=Xe(o),s=Ne(o),u=ke(this.#t,r),c=0;for(let l=0;l<t;l+=1){let m=d(n,l);if(st(m)===on&&m<o){let f=Xe(m),p=Ne(m);if(f!==a&&f!==s&&p!==a&&p!==s)continue}n[c]=m,u[c]=d(u,l),c+=1}return c===0?t:c}#l(){return this.#u}#T(){return this.#u?!1:this.#f>=this.#E?(this.#u=!0,!1):(this.#f+=1,(this.#f&xc)===0&&this.#I()?(this.#u=!0,!1):!0)}#x(n,t,o){let r=t,a=o;if(r===void 0||a===void 0){let l=mi(n);r=fi(n,l),a=pi(n,l)}let s=(r^a*3)&Tc,u;d(this.#b,s)===this.#c&&d(this.#s,s)===r&&d(this.#h,s)===a?u=this.#d[s]??0:(u=ti(n,this.#m,this.#g),this.#s[s]=r,this.#h[s]=a,this.#d[s]=u,this.#b[s]=this.#c);let c=n.active===0?u:-u;return c>Nn?Nn:c<-Nn?-Nn:c}#A(n,t,o){return this.#T()?this.#x(n,t,o):0}#F(n,t,o,r,a){if(a)return;let s=o*2;d(this.#r,s)!==t&&(this.#r[s+1]=d(this.#r,s),this.#r[s]=t);let u=n.active*121*121+Xe(t)*121+Ne(t),c=d(this.#a,u)+r*r;this.#a[u]=c>1<<20?1<<20:c}#R(n,t,o,r,a){let s=ke(this.#t,r),u=d(this.#r,r*2),c=d(this.#r,r*2+1),l=n.active*121*121;for(let m=0;m<o;m+=1){let f=d(t,m),p=d(s,m);if(f===a)p+=_c;else if(f===u)p+=Nc;else if(f===c)p+=Pc;else{let b=d(this.#a,l+Xe(f)*121+Ne(f));p+=b>8191?8191:b}s[m]=p}}#_(n,t,o,r){let a=o,s=d(t,o);for(let c=o+1;c<r;c+=1){let l=d(t,c);l>s&&(s=l,a=c)}if(a===o)return;let u=d(n,o);n[o]=d(n,a),n[a]=u,t[a]=d(t,o),t[o]=s}};function mi(e){let n=d(e.potions,0),t=d(e.potions,1),o=n>2?3:n,a=t>2?3:t;return a=o+Cr*a,a=(e.firstTurn?1:0)+Mi*a,a=e.actionsUsed+ki*a,a=e.manaMoves+hi*a,a=e.monsMoves+yi*a,e.active+bi*a}i(mi,"scalarIndex");function fi(e,n,t=0){return e.hashLo^d(lo,n)^e.whiteScore*2654435761^e.blackScore*2135587861^d(e.potions,0)^Math.imul(t,668265261)}i(fi,"stateKeyLo");function pi(e,n,t=0){return e.hashHi^d(Jo,n)^e.whiteScore*2246822507^e.blackScore*3266489909^d(e.potions,1)^Math.imul(t,374761393)}i(pi,"stateKeyHi");var Bc=Object.freeze({lateMoveReduction:!0,lateMoveIndex:2,lateMoveDeepIndex:6,moveCountPruning:!0,moveCountDepth:3,moveCountBase:7,moveCountFactor:7,futilityMargin:900,aspirationDelta:600,aspirationMinDepth:2,winsNextTurnThreat:0}),Dc=Object.freeze({lateMoveReduction:!0,lateMoveIndex:2,lateMoveDeepIndex:6,moveCountPruning:!0,moveCountDepth:3,moveCountBase:7,moveCountFactor:7,futilityMargin:900,aspirationDelta:600,aspirationMinDepth:2,winsNextTurnThreat:2500}),Vc=Object.freeze({lateMoveReduction:!0,lateMoveIndex:3,lateMoveDeepIndex:8,moveCountPruning:!0,moveCountDepth:3,moveCountBase:4,moveCountFactor:5,futilityMargin:900,aspirationDelta:0,aspirationMinDepth:3,winsNextTurnThreat:0}),Uc=Object.freeze({fast:Object.freeze({budgetMs:16,limits:Object.freeze({maxDepth:40,maxNodes:38400,tuning:Dc})}),normal:Object.freeze({budgetMs:75,limits:Object.freeze({maxDepth:40,maxNodes:184e3,tuning:Bc})}),pro:Object.freeze({budgetMs:460,limits:Object.freeze({maxDepth:40,maxNodes:2e6,tuning:Vc})})});function Wc(){return globalThis.performance.now()}i(Wc,"systemClock");function Si(e){let n=e();if(!Number.isFinite(n))throw new RangeError("automove clock must return a finite number");return n}i(Si,"readClock");function Gc(){return globalThis.WeakRef}i(Gc,"weakRefConstructor");var gr=class{static{i(this,"FastSearcherPool")}#e;run(n){let t=Gc(),o=t===void 0?void 0:this.#e?.deref();if(o===void 0)try{o=new wo}catch(r){if(r instanceof RangeError)return St;throw r}this.#e=void 0;try{return n(o)}catch(r){if(It(r))return St;throw r}finally{t!==void 0&&(this.#e??=new t(o))}}},Kc=new gr;function Er(e,n,t=Wc){let o=Uc[n],r=Si(t)+o.budgetMs,a=!1,s=i(()=>a?!0:(a=Si(t)>=r,a),"deadlineReached");if(e.winnerColor()!==void 0||s())return{kind:"fallback"};let u;try{u=new Mo}catch(l){if(l instanceof RangeError)return{kind:"fallback"};throw l}if(!Fa(u,e,o.limits.maxDepth)||s())return{kind:"fallback"};let c=Kc.run(l=>{if(!s()&&(l.root.copyFrom(u),!s()))return l.search(o.limits,s,Rn)});return c===void 0||It(c)||s()||!c.supported||c.move===0?{kind:"fallback"}:{kind:"selected",inputs:Ba(c.move)}}i(Er,"selectPackedInputs");function Ii(e){switch(e.kind){case"takeback":return 0;case"location":return 1;case"modifier":return 2}}i(Ii,"inputTag");function jc(e,n){let t=Ii(e)-Ii(n);return t!==0?t:e.kind==="location"&&n.kind==="location"?e.location.i-n.location.i||e.location.j-n.location.j:e.kind==="modifier"&&n.kind==="modifier"?Go[e.modifier]-Go[n.modifier]:0}i(jc,"compareInputs");function $c(e){switch(e.kind){case"invalid-input":case"events":return;case"locations-to-start-from":return e.locations.map(n=>({kind:"location",location:n}));case"next-input-options":return e.nextInputs.map(({input:n})=>n)}}i($c,"nextInputs");function vr(e,n){let t=e.fork().processInput(n,!1,!1);return t.kind==="events"?t:void 0}i(vr,"applyInputs");function Ai(e){let n=e.fork(),t=[],o=i(()=>{let r=t.length===0?n.processInputWithStartOptions(t,!0,!1,Xo):n.inspectInputGrammar(t,Xo);if(r.kind==="invalid-input")return!1;if(r.kind==="events")return t.length>0&&vr(n,t)!==void 0;if(t.length===Qn)return!1;let a=$c(r)?.sort(jc);if(a===void 0||a.length===0)return!1;for(let s of a){if(t.push(s),o())return!0;t.pop()}return!1},"findCompletion");return o()?t:[]}i(Ai,"deterministicLegalFallbackInputs");function Ci(e,n,t){let o=e.fen(),r=t===void 0?Er(e,n):Er(e,n,t),a=r.kind==="selected"?r.inputs:Ai(e),s=vr(e,a);if(s===void 0&&r.kind==="selected"&&(a=Ai(e),s=vr(e,a)),e.fen()!==o)throw new Error("automove suggestion mutated its source game");return s===void 0?{output:{kind:"invalid-input"},inputFen:""}:{output:s,inputFen:nt(a)}}i(Ci,"suggestMove");function Ut(e){return e===y.White?"w":"b"}i(Ut,"colorFen");function Ue(e){if(!Number.isInteger(e.cooldown)||e.cooldown<0||e.cooldown>2)throw new RangeError("mon cooldown must be an integer from 0 through 2");let n=(()=>{switch(e.kind){case M.Demon:return"e";case M.Drainer:return"d";case M.Angel:return"a";case M.Spirit:return"s";case M.Mystic:return"y"}})();return`${e.color===y.White?n.toUpperCase():n}${e.cooldown}`}i(Ue,"monFen");function qc(e,n){let t,o;switch(e.charCodeAt(n)){case 69:t=y.White,o=M.Demon;break;case 101:t=y.Black,o=M.Demon;break;case 68:t=y.White,o=M.Drainer;break;case 100:t=y.Black,o=M.Drainer;break;case 65:t=y.White,o=M.Angel;break;case 97:t=y.Black,o=M.Angel;break;case 83:t=y.White,o=M.Spirit;break;case 115:t=y.Black,o=M.Spirit;break;case 89:t=y.White,o=M.Mystic;break;case 121:t=y.Black,o=M.Mystic;break;default:return}let r=e.charCodeAt(n+1);return r<48||r>50?void 0:Dn(o,t,r-48)}i(qc,"parseMonFenAt");function qn(e){return e.kind==="supermana"?"U":e.color===y.White?"M":"m"}i(qn,"manaFen");function gi(e){switch(e){case 77:return Yn(y.White);case 109:return Yn(y.Black);case 85:return Mn;default:return}}i(gi,"parseManaCode");function Ei(e){switch(e){case A.Potion:return"P";case A.Bomb:return"B";case A.BombOrPotion:return"Q"}}i(Ei,"consumableFen");function vi(e){switch(e){case 80:return A.Potion;case 66:return A.Bomb;case 81:return A.BombOrPotion;default:return}}i(vi,"parseConsumableCode");function dt(e){switch(e.kind){case"mon":return`${Ue(e.mon)}x`;case"mana":return`xx${qn(e.mana)}`;case"mon-with-mana":return`${Ue(e.mon)}${qn(e.mana)}`;case"mon-with-consumable":return`${Ue(e.mon)}${Ei(e.consumable)}`;case"consumable":return`xx${Ei(e.consumable)}`}}i(dt,"itemFen");function Ti(e,n){let t=e.charCodeAt(n),o=e.charCodeAt(n+2);if(t===120){if(e.charCodeAt(n+1)!==120)return;let u=gi(o);if(u!==void 0)return Je(u);let c=vi(o);return c===void 0?void 0:bt(c)}let r=qc(e,n);if(r===void 0)return;let a=gi(o);if(a!==void 0)return Zn(r,a);let s=vi(o);return s!==void 0?pt(r,s):o===120?Le(r):void 0}i(Ti,"parseItemFenAt");function Hc(e){switch(e.kind){case"mon-move":return`mm ${dt(e.item)} ${B(e.from)} ${B(e.to)}`;case"mana-move":return`mma ${qn(e.mana)} ${B(e.from)} ${B(e.to)}`;case"mana-scored":return`ms ${qn(e.mana)} ${B(e.at)}`;case"mystic-action":return`ma ${Ue(e.mystic)} ${B(e.from)} ${B(e.to)}`;case"demon-action":return`da ${Ue(e.demon)} ${B(e.from)} ${B(e.to)}`;case"demon-additional-step":return`das ${Ue(e.demon)} ${B(e.from)} ${B(e.to)}`;case"spirit-target-move":return`stm ${dt(e.item)} ${B(e.from)} ${B(e.to)} ${B(e.by)}`;case"pickup-bomb":return`pb ${Ue(e.by)} ${B(e.at)}`;case"pickup-potion":return`pp ${dt(e.by)} ${B(e.at)}`;case"use-potion":return`up ${B(e.from)} ${B(e.to)}`;case"pickup-mana":return`pm ${qn(e.mana)} ${Ue(e.by)} ${B(e.at)}`;case"mon-fainted":return`mf ${Ue(e.mon)} ${B(e.from)} ${B(e.to)}`;case"mana-dropped":return`md ${qn(e.mana)} ${B(e.at)}`;case"supermana-back-to-base":return`sb ${B(e.from)} ${B(e.to)}`;case"bomb-attack":return`ba ${Ue(e.by)} ${B(e.from)} ${B(e.to)}`;case"mon-awake":return`maw ${Ue(e.mon)} ${B(e.at)}`;case"bomb-explosion":return`be ${B(e.at)}`;case"next-turn":return`nt ${Ut(e.color)}`;case"game-over":return`go ${Ut(e.winner)}`;case"takeback":return"z"}}i(Hc,"eventFen");function wi(e){return e.map(Hc).join(" ")}i(wi,"eventArrayFen");function Oi(e){return e===void 0?void 0:{i:e.i,j:e.j}}i(Oi,"detachedLocation");function Tr(e){let n=new Array(e.length);for(let t=0;t<e.length;t+=1){let o=e[t];o!==void 0&&(n[t]={i:o.i,j:o.j})}return n}i(Tr,"detachedLocations");function Hn(e){let n=e;return n===y.White?0:n===y.Black?1:void 0}i(Hn,"boardColorIndex");var mt=class{constructor(n=un,t,o,r=!1){this.variant=n;if(o!==void 0){this.storage=o;return}let a=t??la(n);if(a.length!==121)throw new RangeError(`board requires exactly ${121} item slots`);this.storage={itemSlots:t===void 0||r?[...a]:a.map(s=>s===void 0?void 0:Bn(s)),occupiedEntries:void 0,categoryDerived:void 0}}variant;static{i(this,"Board")}storage;get items(){return[...this.storage.itemSlots]}static fromItems(n,t){return new Ln(t,n)}fork(){let n=new Ln(this.variant,this.storage.itemSlots,void 0,!0);return n.storage.occupiedEntries=this.storage.occupiedEntries,n.storage.categoryDerived=this.storage.categoryDerived,n}get(n){if(He(n))return this.storage.itemSlots[re(n)]}itemAtIndex(n){return this.storage.itemSlots[n]}squareAt(n){return Un(n),Yo(n,this.variant)}allMonsBases(){return Ct}supermanaBase(){return At}allMonsLocations(n){let t=Hn(n);return t===void 0?[]:Tr(this.getCategoryDerived().monsLocations[t])}allFreeRegularManaLocations(n){let t=Hn(n);return t===void 0?[]:Tr(this.getCategoryDerived().freeRegularManaLocations[t])}base(n){return da(n.kind,n.color)}faintedMonsLocations(n){let t=Hn(n);return t===void 0?[]:Tr(this.getCategoryDerived().faintedMonsLocations[t])}findMana(n){let t=Hn(n);if(t!==void 0)return Oi(this.getCategoryDerived().freeRegularManaLocations[t][0])}findAwakeAngel(n){let t=Hn(n);if(t!==void 0)return Oi(this.getCategoryDerived().awakeAngelLocations[t])}itemsEqual(n){for(let t=0;t<121;t+=1){let o=this.storage.itemSlots[t],r=n.storage.itemSlots[t];if(o===void 0||r===void 0){if(o!==r)return!1}else if(!$r(o,r))return!1}return!0}getOccupiedEntries(){if(this.storage.occupiedEntries!==void 0)return this.storage.occupiedEntries;let n=[];for(let t=0;t<121;t+=1){let o=this.storage.itemSlots[t],r=zo[t];o!==void 0&&r!==void 0&&n.push([r,o])}return this.storage.occupiedEntries=n,n}getCategoryDerived(){if(this.storage.categoryDerived!==void 0)return this.storage.categoryDerived;let n=[],t=[],o=[],r=[],a=[],s=[],u,c;for(let m=0;m<121;m+=1){let f=this.storage.itemSlots[m];if(f!==void 0){let p=zo[m];if(p!==void 0){let b=$(f);if(b!==void 0){let k=Hn(b.color);if(k===void 0)continue;(k===0?n:t).push(p),f.kind==="mon"&&ve(b)?(k===0?a:s).push(p):b.kind===M.Angel&&!ve(b)&&(k===0&&u===void 0?u=p:k===1&&c===void 0&&(c=p))}else if(f.kind==="mana"&&f.mana.kind==="regular"){let k=Hn(f.mana.color);k!==void 0&&(k===0?o:r).push(p)}}}}let l={monsLocations:[n,t],freeRegularManaLocations:[o,r],faintedMonsLocations:[a,s],awakeAngelLocations:[u,c]};return this.storage.categoryDerived=l,l}entries(){return this.getOccupiedEntries().values()}},Ln=class extends mt{static{i(this,"MutableBoard")}#e;delete(n){Un(n),this.storage.itemSlots[re(n)]=void 0,this.storage.occupiedEntries=void 0,this.storage.categoryDerived=void 0}set(n,t){Un(n),this.storage.itemSlots[re(n)]=Bn(t),this.storage.occupiedEntries=void 0,this.storage.categoryDerived=void 0}readonlyView(){return this.#e??=new mt(this.variant,void 0,this.storage),this.#e}};var xi=Ie+1,zc=Object.freeze(["","n01","n02","n03","n04","n05","n06","n07","n08","n09","n10","n11"]);function Xc(e){let n="",t=0;for(let o=0;o<11;o+=1){o>0&&(n+="/");let r=t+11,a=0;for(;t<r;){let s=e.itemAtIndex(t);if(t+=1,s===void 0){a+=1;continue}a>0&&(n+=Ri(a),a=0),n+=dt(s)}a>0&&(n+=Ri(a))}return n}i(Xc,"boardFen");function Qc(e,n,t,o){let r=new Array(121).fill(void 0),a=n;for(let s=0;s<11;s+=1){let u=0,c=!1;for(;a<t&&e.charCodeAt(a)!==47;){if(e.charCodeAt(a)===110){if(c||a+2>=t)return;let m=e.charCodeAt(a+1)-48,f=e.charCodeAt(a+2)-48;if(m<0||m>9||f<0||f>9)return;let p=m*10+f;if(p<1||u+p>11)return;u+=p,a+=3,c=!0;continue}if(a+2>=t||u>=11)return;let l=Ti(e,a);if(l===void 0)return;r[s*11+u]=l,u+=1,a+=3,c=!1}if(u!==11)return;if(s<10){if(e.charCodeAt(a)!==47)return;a+=1}}if(a===t)return new Ln(o,r,void 0,!0)}i(Qc,"parseBoardFenRange");function _i(e){let n=`${e.whiteScore} ${e.blackScore} ${Ut(e.activeColor)} ${e.actionsUsedCount} ${e.manaMovesCount} ${e.monsMovesCount} ${e.whitePotionsCount} ${e.blackPotionsCount} ${e.turnNumber} ${Xc(e.board)}`,t=e.board.variant;return t===un?n:`${n} ${sa(t)}`}i(_i,"gameFen");function Ni(e){let n=0,t=i(_=>{let N=n,F=0,D=!1;for(;n<e.length;){let P=e.charCodeAt(n);if(P===32)break;if(P<48||P>57)return-1;if(n===N)D=P===48;else if(D)return-1;if(F=F*10+(P-48),!Number.isSafeInteger(F))return-1;n+=1}if(n===N)return-1;if(_){if(n>=e.length)return-1;n+=1}else if(n!==e.length)return-1;return F},"readInteger"),o=t(!0),r=t(!0),a=e.charCodeAt(n),s=a===119?y.White:a===98?y.Black:void 0;if(s===void 0||e.charCodeAt(n+1)!==32)return;n+=2;let u=t(!0),c=t(!0),l=t(!0),m=t(!0),f=t(!0),p=t(!0);if(o<0||r<0||u<0||c<0||l<0||m<0||f<0||p<0||o>xi||r>xi||u>_e||c>An||l>ee||p<1)return;let b=n;for(;n<e.length&&e.charCodeAt(n)!==32;)n+=1;let k=n,C=un;if(n<e.length){n+=1;let _=t(!1),N=ua(_);if(N===void 0||N===un)return;C=N}let I=Qc(e,b,k,C);if(I!==void 0)return{board:I,whiteScore:o,blackScore:r,activeColor:s,actionsUsedCount:u,manaMovesCount:c,monsMovesCount:l,whitePotionsCount:m,blackPotionsCount:f,turnNumber:p}}i(Ni,"parseGameFen");function Ri(e){return zc[e]??""}i(Ri,"emptyRunFen");function Pi(e){return{whiteScore:e.whiteScore,blackScore:e.blackScore,activeColor:e.activeColor,actionsUsedCount:e.actionsUsedCount,manaMovesCount:e.manaMovesCount,monsMovesCount:e.monsMovesCount,whitePotionsCount:e.whitePotionsCount,blackPotionsCount:e.blackPotionsCount}}i(Pi,"copyRulesCounters");function Oo(e,n,t,o){let r=e[n]+t;return o&&!Number.isSafeInteger(r)?!1:(e[n]=r,!0)}i(Oo,"addCounter");function wr(e,n,t,o){if(e.actionsUsedCount<_e)return e.actionsUsedCount+=1,{valid:!0};let r=e.activeColor===y.White?"whitePotionsCount":"blackPotionsCount";return o&&e[r]<=0?{valid:!1}:(e[r]-=1,{valid:!0,potionUse:{from:n,to:t}})}i(wr,"consumeAction");function Or(e,n,t,o){switch(n.kind){case"mon-move":return{valid:Oo(e,"monsMovesCount",1,o)};case"mana-move":return{valid:Oo(e,"manaMovesCount",1,o)};case"mana-scored":{let r=e.activeColor===y.White?"whiteScore":"blackScore";return{valid:Oo(e,r,Kr(n.mana,e.activeColor),o)}}case"mystic-action":return wr(e,n.from,n.to,o);case"demon-action":{let a=t.find(s=>s.kind==="demon-additional-step")?.to??n.to;return wr(e,a,a,o)}case"spirit-target-move":return wr(e,n.by,n.to,o);case"pickup-potion":{let r=$(n.by);if(r===void 0)return{valid:!0};let a=r.color===y.White?"whitePotionsCount":"blackPotionsCount";return{valid:Oo(e,a,1,o)}}case"demon-additional-step":case"pickup-bomb":case"use-potion":case"pickup-mana":case"mon-fainted":case"mana-dropped":case"supermana-back-to-base":case"bomb-attack":case"mon-awake":case"bomb-explosion":case"next-turn":case"game-over":case"takeback":return{valid:!0}}}i(Or,"projectEventCounters");function xr(e,n){let t=Pi(e);for(let r of n)if(!Or(t,r,n,!0).valid)return!1;if(e.turnNumber<Number.MAX_SAFE_INTEGER)return!0;let o={...e,board:e.board.fork(),turnNumber:Number.MAX_SAFE_INTEGER-1};return!xo(o,n).turnAdvanced}i(xr,"canApplyRulesEvents");function Yc(e,n,t,o){let r=Or(e,n,t,!1);switch(r.valid&&r.potionUse!==void 0&&o.push({kind:"use-potion",...r.potionUse}),n.kind){case"mon-move":e.board.delete(n.from),e.board.set(n.to,n.item);break;case"mana-move":e.board.delete(n.from),e.board.set(n.to,Je(n.mana));break;case"mana-scored":{let a=e.board.get(n.at);if(a!==void 0){let s=$(a);s===void 0?e.board.delete(n.at):e.board.set(n.at,Le(s))}break}case"mystic-action":e.board.delete(n.to);break;case"demon-action":{e.board.delete(n.from),t.find(s=>s.kind==="demon-additional-step")?.to===void 0?e.board.set(n.to,Le(n.demon)):e.board.delete(n.to);break}case"demon-additional-step":e.board.set(n.to,Le(n.demon));break;case"spirit-target-move":e.board.delete(n.from),e.board.set(n.to,n.item);break;case"pickup-bomb":e.board.set(n.at,pt(n.by,A.Bomb));break;case"pickup-potion":{if($(n.by)===void 0)break;e.board.set(n.at,n.by);break}case"pickup-mana":e.board.set(n.at,Zn(n.by,n.mana));break;case"mon-fainted":e.board.set(n.to,Le(Wr(n.mon)));break;case"mana-dropped":e.board.set(n.at,Je(n.mana));break;case"supermana-back-to-base":{let a=e.board.get(n.to);e.board.set(n.to,a?.kind==="mon"?Zn(a.mon,Mn):Je(Mn));break}case"bomb-attack":e.board.delete(n.to),e.board.set(n.from,Le(n.by));break;case"bomb-explosion":e.board.delete(n.at);break;case"mon-awake":case"game-over":case"next-turn":case"takeback":case"use-potion":break}}i(Yc,"applyEvent");function Zc(e,n){e.activeColor=Sn(e.activeColor),e.turnNumber+=1,e.actionsUsedCount=0,e.manaMovesCount=0,e.monsMovesCount=0,n.push({kind:"next-turn",color:e.activeColor});for(let t of e.board.faintedMonsLocations(e.activeColor)){let o=e.board.get(t),r=o===void 0?void 0:$(o);if(r===void 0)continue;let a=Gr(r);ve(a)||n.push({kind:"mon-awake",mon:a,at:t}),e.board.set(t,Le(a))}}i(Zc,"advanceTurn");function xo(e,n){let t=[];for(let a of n)Yc(e,a,n,t);let o=po(e),r=!1;return o!==void 0?t.push({kind:"game-over",winner:o}):va(e)&&(Zc(e,t),r=!0),{events:[...n,...t],turnAdvanced:r,winner:o}}i(xo,"applyRulesEvents");var Wt=Symbol("cache-miss"),Bi=Symbol("cached-undefined"),Ro=Object.freeze({completionViability:16384,secondInputOptions:4096,secondStage:8192,thirdStage:8192});function Jc(e){return e===void 0?void 0:[e[0].map(Vn),e[1].map(Jn)]}i(Jc,"copyStageResult");function Li(e){return e===void 0?Bi:[e[0].map(Vn),e[1].map(Jn)]}i(Li,"storeStageResult");function Fi(e){return e===Bi?void 0:Jc(e)}i(Fi,"copyStoredStageResult");function _o(e,n,t,o){e.size>=o&&!e.has(n)&&e.clear(),e.set(n,t)}i(_o,"setBounded");var No=class{static{i(this,"RulesQueryCache")}#e;#n;#t;#o;#r;invalidate(){this.#e=void 0,this.#n=void 0,this.#t=void 0,this.#o=void 0,this.#r=void 0}getStartSuggestion(n){let t=this.#e?.[n];return t===void 0?void 0:jo(t)}setStartSuggestion(n,t){(this.#e??=new Array(4))[n]=jo(t)}getCompletionViability(n){return this.#n?.get(n)}setCompletionViability(n,t){_o(this.#n??=new Map,n,t,Ro.completionViability)}getSecondInputOptions(n){let t=this.#t?.get(n);return t===void 0?void 0:t.map(Jn)}setSecondInputOptions(n,t){_o(this.#t??=new Map,n,t.map(Jn),Ro.secondInputOptions)}lookupSecondStage(n){let t=this.#o?.get(n);return t===void 0?Wt:Fi(t)}setSecondStage(n,t){_o(this.#o??=new Map,n,Li(t),Ro.secondStage)}lookupThirdStage(n){let t=this.#r?.get(n);return t===void 0?Wt:Fi(t)}setThirdStage(n,t){_o(this.#r??=new Map,n,Li(t),Ro.thirdStage)}};function Gt(e){return e.map(n=>({fen:n.fen,color:n.color,events:n.events.map(Vn)}))}i(Gt,"copyTrackingEntries");var Po=class e{static{i(this,"GameHistory")}#e=[];#n=[];#t=!0;#o;#r=!0;constructor(n=!1){this.#o=n}get takebackFens(){return[...this.#e]}get trackingEntries(){return Gt(this.#n)}get movesVerified(){return this.#t}get verboseTrackingEnabled(){return this.#o}get eventApplicationTrackingEnabled(){return this.#r||this.#o}copy(){let n=new e(this.#o);return n.#e=[...this.#e],n.#n=Gt(this.#n),n.#t=this.#t,n.#r=this.#r,n}fork(){let n=new e(!1);return n.#t=this.#t,n.#r=!1,n}resetForLoadedFen(){this.#a()}resetForBoardReplacement(){this.#a()}#a(){this.#e=[],this.#n=[],this.#t=!1}replace(n){n.takebackFens!==void 0&&(this.#e=[...n.takebackFens]),n.trackingEntries!==void 0&&(this.#n=Gt(n.trackingEntries)),n.movesVerified!==void 0&&(this.#t=n.movesVerified),n.verboseTrackingEnabled!==void 0&&(this.#o=n.verboseTrackingEnabled,n.verboseTrackingEnabled||(this.#n=[]))}setTakebackTracking(n){this.#r=n,n||(this.#e=[])}setVerboseTracking(n){this.#o=n,n||(this.#n=[])}canTakeback(n,t){return this.#r&&this.#e.length>1&&n===t}prepareTakeback(n,t){if(!this.canTakeback(n,t))return;let o=this.#e[this.#e.length-2];if(o!==void 0)return{previousFen:o,takebackFens:this.#e.slice(0,-1),trackingEntries:Gt(this.#n.slice(0,-1))}}commitTakeback(n){this.#e=[...n.takebackFens],this.#n=Gt(n.trackingEntries)}beginEventApplication(n,t){if(!this.#r||this.#e.length!==0)return;let o=n();this.#e.push(o),this.#o&&this.#n.length===0&&this.#n.push({fen:o,color:t,events:[]})}completeEventApplication(n){let t,o=i(()=>t??=n.snapshotFen(),"snapshotFen");this.#r&&(n.winner!==void 0?this.#e=[]:n.turnAdvanced?this.#e=[o()]:this.#e.push(o())),this.#o&&this.#n.push({fen:o(),color:n.color,events:n.events.map(Vn)})}};function Di(e,n,t,o){let r=e.board.squareAt(n),a=[];switch(t.kind){case"mon":{let s=t.mon;if(s.color!==e.activeColor||ve(s))break;if(e.playerCanMoveMon()&&a.push(...e.nextInputsFromLocations(Fe(n),O.MonMove,o,u=>{let c=e.board.get(u),l=e.board.squareAt(u),m;switch(c?.kind){case"mon":case"mon-with-mana":case"mon-with-consumable":m=!1;break;case"mana":m=s.kind===M.Drainer;break;case"consumable":case void 0:m=!0;break}if(!m)return!1;switch(l.kind){case"regular":case"consumable-base":case"mana-base":case"mana-pool":return!0;case"supermana-base":return s.kind===M.Drainer&&(c===void 0||c.kind==="mana"&&c.mana.kind==="supermana");case"mon-base":return l.monKind===s.kind&&l.color===s.color}})),r.kind!=="mon-base"&&e.playerCanUseAction())switch(s.kind){case M.Angel:case M.Drainer:break;case M.Mystic:{let u=e.board.findAwakeAngel(Sn(e.activeColor));a.push(...e.nextInputsFromLocations(Qt(n),O.MysticAction,o,c=>{let l=e.board.get(c);if(l===void 0||Qo(u,c))return!1;let m=$(l);return m!==void 0&&s.color!==m.color&&!ve(m)}));break}case M.Demon:{let u=e.board.findAwakeAngel(Sn(e.activeColor));a.push(...e.nextInputsFromLocations(Yt(n),O.DemonAction,o,c=>{let l=e.board.get(c),m=zr(n,c),f=e.board.squareAt(m);if(l===void 0||Qo(u,c)||e.board.get(m)!==void 0||f.kind==="supermana-base"||f.kind==="mon-base")return!1;let p=$(l);return p!==void 0&&s.color!==p.color&&!ve(p)}));break}case M.Spirit:a.push(...e.nextInputsFromLocations(Zt(n),O.SpiritTargetCapture,o,u=>{let c=e.board.get(u);return c===void 0?!1:jr(c)}));break}break}case"mana":t.mana.kind==="regular"&&t.mana.color===e.activeColor&&e.playerCanMoveMana()&&a.push(...e.nextInputsFromLocations(Fe(n),O.ManaMove,o,s=>or(e.board,s)));break;case"mon-with-mana":t.mon.color===e.activeColor&&e.playerCanMoveMon()&&a.push(...e.nextInputsFromLocations(Fe(n),O.MonMove,o,s=>{let u=e.board.get(s),c=e.board.squareAt(s);switch(u?.kind){case"mon":case"mon-with-mana":case"mon-with-consumable":return!1;case"mana":case"consumable":return!0;case void 0:return Gn(c)?!0:c.kind==="supermana-base"&&t.mana.kind==="supermana"}}));break;case"mon-with-consumable":{let s=t.mon;if(s.color!==e.activeColor)break;e.playerCanMoveMon()&&a.push(...e.nextInputsFromLocations(Fe(n),O.MonMove,o,u=>{let c=e.board.get(u),l=e.board.squareAt(u);switch(c?.kind){case"mon":case"mana":case"mon-with-mana":case"mon-with-consumable":return!1;case"consumable":return!0;case void 0:return Gn(l)}})),t.consumable===A.Bomb&&a.push(...e.nextInputsFromLocations(Xt(n),O.BombAttack,o,u=>{let c=e.board.get(u),l=c===void 0?void 0:$(c);return l!==void 0&&s.color!==l.color&&!ve(l)}));break}case"consumable":break}return a}i(Di,"generateSecondInputOptions");function Vi(e,n,t,o,r){let a=[],s=[],u=e.board.squareAt(r),c=e.board.get(r);switch(n){case O.MonMove:{let l=$(t);if(l===void 0)return;if(s.push({kind:"mon-move",item:t,from:o,to:r}),c!==void 0)switch(c.kind){case"mon":case"mon-with-mana":case"mon-with-consumable":return;case"mana":{let m=In(t);m!==void 0&&s.push({kind:"mana-dropped",mana:m,at:o}),s.push({kind:"pickup-mana",mana:c.mana,by:l,at:r});break}case"consumable":switch(c.consumable){case A.Bomb:case A.Potion:return;case A.BombOrPotion:$o(t)!==void 0||In(t)!==void 0?s.push({kind:"pickup-potion",by:t,at:r}):(a.push(xe({kind:"modifier",modifier:X.SelectBomb},O.SelectConsumable,t)),a.push(xe({kind:"modifier",modifier:X.SelectPotion},O.SelectConsumable,t)));break}break}if(u.kind==="mana-pool"){let m=In(t);m!==void 0&&s.push({kind:"mana-scored",mana:m,at:r})}break}case O.ManaMove:{if(t.kind!=="mana")return;let l=t.mana;if(s.push({kind:"mana-move",mana:l,from:o,to:r}),c!==void 0){if(c.kind!=="mon")return;s.push({kind:"pickup-mana",mana:l,by:c.mon,at:r})}switch(u.kind){case"regular":case"mana-base":case"consumable-base":break;case"mana-pool":s.push({kind:"mana-scored",mana:l,at:r});break;case"mon-base":case"supermana-base":return}break}case O.MysticAction:{if(t.kind!=="mon")return;if(s.push({kind:"mystic-action",mystic:t.mon,from:o,to:r}),c!==void 0){let l=$(c);if(l===void 0)return;if(s.push({kind:"mon-fainted",mon:l,from:r,to:e.board.base(l)}),c.kind==="mon-with-mana"&&(c.mana.kind==="regular"?s.push({kind:"mana-dropped",mana:c.mana,at:r}):s.push({kind:"supermana-back-to-base",from:r,to:e.board.supermanaBase()})),c.kind==="mon-with-consumable")switch(c.consumable){case A.Bomb:s.push({kind:"bomb-explosion",at:r});break;case A.Potion:case A.BombOrPotion:return}}break}case O.DemonAction:{if(t.kind!=="mon")return;let l=t.mon;s.push({kind:"demon-action",demon:l,from:o,to:r});let m=!1;if(c!==void 0){let f=$(c);if(f===void 0)return;if(s.push({kind:"mon-fainted",mon:f,from:r,to:e.board.base(f)}),c.kind==="mon-with-mana"&&(c.mana.kind==="regular"?(m=!0,s.push({kind:"mana-dropped",mana:c.mana,at:r})):s.push({kind:"supermana-back-to-base",from:r,to:e.board.supermanaBase()})),c.kind==="mon-with-consumable")switch(c.consumable){case A.Bomb:s.push({kind:"bomb-explosion",at:r}),s.push({kind:"mon-fainted",mon:l,from:r,to:e.board.base(l)});break;case A.Potion:case A.BombOrPotion:return}}if((u.kind==="supermana-base"||u.kind==="mon-base")&&(m=!0),m)for(let f of Fe(r)){let p=e.board.get(f),b=e.board.squareAt(f);p!==void 0&&p.kind!=="consumable"||(Gn(b)?a.push(xe({kind:"location",location:f},O.DemonAdditionalStep)):b.kind==="mon-base"&&b.monKind===l.kind&&b.color===l.color&&a.push(xe({kind:"location",location:f},O.DemonAdditionalStep)))}break}case O.SpiritTargetCapture:{if(c===void 0)return;let l=$(c),m=In(c);a.push(...e.nextInputsFromLocations(Fe(r),O.SpiritTargetMove,void 0,f=>{let p=e.board.get(f),b=e.board.squareAt(f);if(!ga(c,p))return!1;switch(b.kind){case"regular":case"consumable-base":case"mana-base":case"mana-pool":return!0;case"supermana-base":{let k=p?.kind==="mana"&&p.mana.kind==="supermana";return m?.kind==="supermana"||m===void 0&&l?.kind===M.Drainer&&(p===void 0||k)||l?.kind===M.Drainer&&k}case"mon-base":return l?.kind===b.monKind&&l.color===b.color&&m===void 0&&$o(c)===void 0}}));break}case O.BombAttack:{let l=$(t);if(l===void 0)return;if(s.push({kind:"bomb-attack",by:l,from:o,to:r}),c!==void 0){let m=$(c);if(m===void 0)return;if(s.push({kind:"mon-fainted",mon:m,from:r,to:e.board.base(m)}),c.kind==="mon-with-mana"&&(c.mana.kind==="regular"?s.push({kind:"mana-dropped",mana:c.mana,at:r}):s.push({kind:"supermana-back-to-base",from:r,to:e.board.supermanaBase()})),c.kind==="mon-with-consumable")switch(c.consumable){case A.Bomb:s.push({kind:"bomb-explosion",at:r});break;case A.Potion:case A.BombOrPotion:return}}break}case O.DemonAdditionalStep:case O.SpiritTargetMove:case O.SelectConsumable:break}return[s,a]}i(Vi,"compileSecondInput");function Ui(e,n,t,o,r){let a=e.get(r),s=[],u=[];switch(n.kind){case O.SpiritTargetMove:{if(n.input.kind!=="location"||a===void 0)return;let c=n.input.location,l=e.get(c),m=e.squareAt(c);if(u.push({kind:"spirit-target-move",item:a,from:r,to:c,by:o}),l!==void 0)switch(a.kind){case"mon":switch(l.kind){case"mon":case"mon-with-mana":case"mon-with-consumable":return;case"mana":u.push({kind:"pickup-mana",mana:l.mana,by:a.mon,at:c});break;case"consumable":switch(l.consumable){case A.Potion:case A.Bomb:return;case A.BombOrPotion:s.push(xe({kind:"modifier",modifier:X.SelectBomb},O.SelectConsumable,a)),s.push(xe({kind:"modifier",modifier:X.SelectPotion},O.SelectConsumable,a));break}break}break;case"mana":if(l.kind!=="mon")return;u.push({kind:"pickup-mana",mana:a.mana,by:l.mon,at:c});break;case"mon-with-mana":switch(l.kind){case"mon":case"mon-with-mana":case"mon-with-consumable":return;case"mana":u.push({kind:"mana-dropped",mana:a.mana,at:r}),u.push({kind:"pickup-mana",mana:l.mana,by:a.mon,at:c});break;case"consumable":switch(l.consumable){case A.Potion:case A.Bomb:return;case A.BombOrPotion:u.push({kind:"pickup-potion",by:a,at:c});break}break}break;case"mon-with-consumable":if(l.kind!=="consumable"||l.consumable!==A.BombOrPotion)return;u.push({kind:"pickup-potion",by:a,at:c});break;case"consumable":switch(l.kind){case"mana":case"consumable":return;case"mon":s.push(xe({kind:"modifier",modifier:X.SelectBomb},O.SelectConsumable,l)),s.push(xe({kind:"modifier",modifier:X.SelectPotion},O.SelectConsumable,l));break;case"mon-with-mana":case"mon-with-consumable":switch(a.consumable){case A.Potion:case A.Bomb:return;case A.BombOrPotion:u.push({kind:"pickup-potion",by:l,at:c});break}break}break}if(m.kind==="mana-pool"){let f=In(a);f!==void 0&&u.push({kind:"mana-scored",mana:f,at:c})}break}case O.DemonAdditionalStep:{if(n.input.kind!=="location")return;let c=$(t);if(c===void 0)return;let l=n.input.location;u.push({kind:"demon-additional-step",demon:c,from:r,to:l});let m=e.get(l);if(m?.kind==="consumable")switch(m.consumable){case A.Potion:case A.Bomb:return;case A.BombOrPotion:s.push(xe({kind:"modifier",modifier:X.SelectBomb},O.SelectConsumable,t)),s.push(xe({kind:"modifier",modifier:X.SelectPotion},O.SelectConsumable,t));break}break}case O.SelectConsumable:{if(n.input.kind!=="modifier")return;let c=$(t);if(c===void 0)return;switch(n.input.modifier){case X.SelectBomb:u.push({kind:"pickup-bomb",by:c,at:r});break;case X.SelectPotion:u.push({kind:"pickup-potion",by:t,at:r});break}break}case O.MonMove:case O.ManaMove:case O.MysticAction:case O.DemonAction:case O.SpiritTargetCapture:case O.BombAttack:return}return[u,s]}i(Ui,"compileThirdInput");function Wi(e,n,t){if(e.kind!=="modifier"||n.input.kind!=="location")return;let r=t.find(s=>yt(s.input,e))?.actorMonItem,a=r===void 0?void 0:$(r);if(!(r===void 0||a===void 0))switch(e.modifier){case X.SelectBomb:return{kind:"pickup-bomb",by:a,at:n.input.location};case X.SelectPotion:return{kind:"pickup-potion",by:r,at:n.input.location}}}i(Wi,"compileFourthInput");function Gi(e,n,t){let o=[],r=Array.from({length:121},()=>!1),a=i(s=>{let u=t([{kind:"location",location:s}]);if(u.kind!=="next-input-options"||u.nextInputs.length===0)return;let c=re(s);r[c]||(r[c]=!0,o.push(s))},"addWhenValid");for(let s of e.board.allMonsLocations(e.activeColor))a(s);if(Ea(e,o.length!==0,n.includeManaStartsWithPotionAction))for(let s of e.board.allFreeRegularManaLocations(e.activeColor))a(s);return o.length===0?{kind:"invalid-input"}:{kind:"locations-to-start-from",locations:o}}i(Gi,"suggestedInputToStartWith");function Ki(e,n,t,o,r,a){let s=n[0];if(s?.kind!=="location")return{kind:"invalid-input"};let u=s.location,c=e.board().get(u);if(c===void 0)return{kind:"invalid-input"};let l=n[1];if(l!==void 0&&l.kind!=="location")return{kind:"invalid-input"};let m=a&&e.requiresCounterCapacityFiltering(),f=e.secondInputOptions(u,c,t,t?void 0:l?.location);if(l===void 0){let U=o&&!m?ta(f):f,ne=e.applicableInputOptions(n,U,r,m,o);return ne.length===0?{kind:"invalid-input"}:{kind:"next-input-options",nextInputs:ne}}let p=l.location,b=f.find(U=>yt(U.input,l));if(b===void 0)return{kind:"invalid-input"};let k=n[2],C=e.processSecondInput(b.kind,c,u,p,t),I=C?.[0]??[],_=C?.[1]??[];if(k===void 0){if(_.length!==0){let U=e.applicableInputOptions(n,_,r,m,o);return U.length===0?{kind:"invalid-input"}:{kind:"next-input-options",nextInputs:U}}return I.length===0?{kind:"invalid-input"}:e.resolveEvents(I,t)}let N=_.find(U=>yt(U.input,k));if(N===void 0)return{kind:"invalid-input"};let F=n[3],D=e.processThirdInput(N,c,u,p,t);I.push(...D?.[0]??[]);let P=D?.[1]??[];if(F===void 0){if(P.length!==0){let U=e.applicableInputOptions(n,P,r,m,o);return U.length===0?{kind:"invalid-input"}:{kind:"next-input-options",nextInputs:U}}return I.length===0?{kind:"invalid-input"}:e.resolveEvents(I,t)}let V=Wi(F,N,P);return V===void 0?{kind:"invalid-input"}:(I.push(V),e.resolveEvents(I,t))}i(Ki,"dispatchStagedInput");var Qe=class e{static{i(this,"MonsGame")}#e;#n;#t;#o;constructor(n=!1,t=un,o){let r=o===void 0?new Ln(t):o.fork();this.#e={board:r,whiteScore:0,blackScore:0,activeColor:y.White,actionsUsedCount:0,manaMovesCount:0,monsMovesCount:0,whitePotionsCount:0,blackPotionsCount:0,turnNumber:1},this.#n=new Po(n),this.#t=new No,this.#o={board:i(()=>this.board,"board"),requiresCounterCapacityFiltering:i(()=>this.#h(),"requiresCounterCapacityFiltering"),secondInputOptions:i((...a)=>this.#c(...a),"secondInputOptions"),processSecondInput:i((...a)=>this.#k(...a),"processSecondInput"),processThirdInput:i((...a)=>this.#M(...a),"processThirdInput"),applicableInputOptions:i((...a)=>this.#b(...a),"applicableInputOptions"),resolveEvents:i((...a)=>this.#S(...a),"resolveEvents")}}get board(){return this.#e.board.readonlyView()}get whiteScore(){return this.#e.whiteScore}get blackScore(){return this.#e.blackScore}get activeColor(){return this.#e.activeColor}get actionsUsedCount(){return this.#e.actionsUsedCount}get manaMovesCount(){return this.#e.manaMovesCount}get monsMovesCount(){return this.#e.monsMovesCount}get whitePotionsCount(){return this.#e.whitePotionsCount}get blackPotionsCount(){return this.#e.blackPotionsCount}get turnNumber(){return this.#e.turnNumber}get takebackFens(){return this.#n.takebackFens}get isMovesVerified(){return this.#n.movesVerified}get withVerboseTracking(){return this.#n.verboseTrackingEnabled}get verboseTrackingEntities(){return this.#n.trackingEntries}replaceHistory(n){this.#n.replace(n)}#r(n){this.#e.whiteScore=n.whiteScore,this.#e.blackScore=n.blackScore,this.#e.activeColor=n.activeColor,this.#e.actionsUsedCount=n.actionsUsedCount,this.#e.manaMovesCount=n.manaMovesCount,this.#e.monsMovesCount=n.monsMovesCount,this.#e.whitePotionsCount=n.whitePotionsCount,this.#e.blackPotionsCount=n.blackPotionsCount,this.#e.turnNumber=n.turnNumber}static#a(n,t){return new e(n,t.variant,t)}static newSimulationState(n){let t=e.#a(!1,n.board);return t.#r(n),t.#n.setTakebackTracking(!1),t}static fromFen(n,t=!1){let o=Ni(n);if(o===void 0)return;let r=e.#a(t,o.board);return r.#r(o),r.#n.resetForLoadedFen(),r}fen(){return _i(this)}copy(){let n=e.#a(this.withVerboseTracking,this.board);return n.#r(this),n.#n=this.#n.copy(),n}fork(){let n=e.#a(!1,this.board);return n.#r(this),n.#n=this.#n.fork(),n}variant(){return this.board.variant}replaceBoardItems(n){let t=Array.from({length:121},()=>{});for(let[r,a]of n)t[re(r)]=a;let o=mt.fromItems(t,this.variant());this.#e.board=o,this.#n.resetForBoardReplacement(),this.invalidateProcessInputCache()}setTakebackHistoryTracking(n){this.#n.setTakebackTracking(n),this.invalidateProcessInputCache()}invalidateProcessInputCache(){this.#t.invalidate()}setVerboseTracking(n){this.#n.setVerboseTracking(n)}#y(n){let t=n.board.fork();this.#e.board=t,this.#r(n),this.invalidateProcessInputCache()}canTakeback(n){return this.#n.canTakeback(this.activeColor,n)}processInput(n,t,o){return this.processInputWithStartOptions(n,t,o,void 0)}processInputWithStartOptions(n,t,o,r){return this.#s(n,t,o,r??na)}inspectInputGrammar(n,t){return this.#s(n,!0,!1,t,!1)}#s(n,t,o,r,a=!0){if(n.length>Qn||this.winnerColor()!==void 0)return{kind:"invalid-input"};if(n.length===0){let u=(a?2:0)|(r.includeManaStartsWithPotionAction?1:0),c=this.#t.getStartSuggestion(u);if(c!==void 0)return c;let l=Gi(this,r,m=>this.#s(m,!0,!0,r,a));return this.#t.setStartSuggestion(u,l),l}let s=n[0];if(n.length===1&&s?.kind==="takeback"){let u=this.#n.prepareTakeback(this.activeColor,this.activeColor);if(u===void 0)return{kind:"invalid-input"};let c=e.fromFen(u.previousFen,!1);return c===void 0?{kind:"invalid-input"}:t?{kind:"events",events:[{kind:"takeback"}]}:(this.#y(c),this.#n.commitTakeback(u),{kind:"events",events:[{kind:"takeback"}]})}return Ki(this.#o,n,t,o,r,a)}#h(){return this.turnNumber===Number.MAX_SAFE_INTEGER||this.whitePotionsCount===Number.MAX_SAFE_INTEGER||this.blackPotionsCount===Number.MAX_SAFE_INTEGER}#b(n,t,o,r,a){if(!r)return t;let s=i(c=>this.#d([...n,c.input],o),"applicable");if(!a)return t.filter(s);let u=t.find(s);return u===void 0?[]:[u]}#d(n,t){let o=`${t.includeManaStartsWithPotionAction?1:0}|${qr(n)}`,r=this.#t.getCompletionViability(o);if(r!==void 0)return r;let a=this.#s(n,!0,!1,t,!1),s=(()=>{switch(a.kind){case"invalid-input":return!1;case"events":return xr(this.#e,a.events);case"locations-to-start-from":return a.locations.some(u=>this.#d([...n,{kind:"location",location:u}],t));case"next-input-options":return a.nextInputs.some(u=>this.#d([...n,u.input],t))}})();return this.#t.setCompletionViability(o,s),s}#c(n,t,o,r){let a=String(re(n)),s=this.#t.getSecondInputOptions(a);if(s!==void 0)return s;let u=Di(this,n,t,r);return o&&this.#t.setSecondInputOptions(a,u),u}#k(n,t,o,r,a){let s=`${n}|${zt(t)}|${re(o)}|${re(r)}`,u=this.#t.lookupSecondStage(s);if(u!==Wt)return u;let c=Vi(this,n,t,o,r);return a&&this.#t.setSecondStage(s,c),c}#M(n,t,o,r,a){let s=`${qo(n.input)}|${n.kind}|${n.actorMonItem===void 0?"":zt(n.actorMonItem)}|${zt(t)}|${re(o)}|${re(r)}`,u=this.#t.lookupThirdStage(s);if(u!==Wt)return u;let c=Ui(this.board,n,t,o,r);return a&&this.#t.setThirdStage(s,c),c}#S(n,t){if(t)return{kind:"events",events:n};let o=this.applyAndAddResultingEvents(n);return o===void 0?{kind:"invalid-input"}:{kind:"events",events:o}}applyAndAddResultingEvents(n){return this.#m(n,this.#n.eventApplicationTrackingEnabled)}forkAndApplyEventsForSimulation(n){let t=this.fork(),o=t.#m(n,!1);return o===void 0?void 0:{game:t,events:o}}#m(n,t){if(!xr(this.#e,n))return;if(this.invalidateProcessInputCache(),!t)return xo(this.#e,n).events;let o=i(()=>this.fen(),"snapshotFen");this.#n.beginEventApplication(o,this.activeColor);let r=xo(this.#e,n);return this.#n.completeEventApplication({snapshotFen:o,color:this.activeColor,events:r.events,turnAdvanced:r.turnAdvanced,winner:r.winner}),r.events}nextInputsFromLocations(n,t,o,r){return oa(n,t,o,r)}availableMoveKinds(){let n=new Map;return n.set(Oe.MonMove,ee-this.monsMovesCount),n.set(Oe.Action,0),n.set(Oe.Potion,0),n.set(Oe.ManaMove,0),this.turnNumber===1||(n.set(Oe.Action,_e-this.actionsUsedCount),n.set(Oe.Potion,this.playerPotionsCount()),n.set(Oe.ManaMove,An-this.manaMovesCount)),n}winnerColor(){return po(this)}isLaterThan(n){return this.variant()!==n.variant()?!1:this.turnNumber>n.turnNumber?!0:this.turnNumber!==n.turnNumber?!1:this.playerPotionsCount()<n.playerPotionsCount()||this.actionsUsedCount>n.actionsUsedCount||this.manaMovesCount>n.manaMovesCount||this.monsMovesCount>n.monsMovesCount||this.board.faintedMonsLocations(Sn(this.activeColor)).length>n.board.faintedMonsLocations(Sn(n.activeColor)).length}isFirstTurn(){return it(this)}playerPotionsCount(){return bo(this)}playerCanMoveMon(){return Ia(this)}playerCanMoveMana(){return Aa(this)}playerCanUseAction(){return Ca(this)}};function Lo(e){let n={i:e.row,j:e.column};if(!Number.isInteger(e.row)||!Number.isInteger(e.column)||!He(n))throw new RangeError(`position must contain integer row and column values from 0 through ${10}`);return n}i(Lo,"toEnginePosition");function Y(e){return{row:e.i,column:e.j}}i(Y,"fromEnginePosition");function sn(e){return{kind:e.kind,color:e.color,cooldown:e.cooldown}}i(sn,"fromEngineMon");function Kt(e){return e.kind==="supermana"?{kind:"supermana"}:{kind:"regular",color:e.color}}i(Kt,"fromEngineMana");function ft(e){switch(e.kind){case"mon":return{kind:"mon",mon:sn(e.mon)};case"mana":return{kind:"mana",mana:Kt(e.mana)};case"mon-with-mana":return{kind:"mon",mon:sn(e.mon),carrying:{kind:"mana",mana:Kt(e.mana)}};case"mon-with-consumable":return{kind:"mon",mon:sn(e.mon),carrying:{kind:"consumable",consumable:e.consumable}};case"consumable":return{kind:"consumable",consumable:e.consumable}}}i(ft,"fromEngineItem");function ji(e){switch(e.kind){case"regular":case"consumable-base":case"supermana-base":return{kind:e.kind};case"mana-base":case"mana-pool":return{kind:e.kind,color:e.color};case"mon-base":return{kind:e.kind,color:e.color,monKind:e.monKind}}}i(ji,"fromEngineSquare");function Rr(e){switch(e.kind){case"takeback":return{kind:"takeback"};case"position":return{kind:"location",location:Lo(e.position)};case"modifier":return{kind:"modifier",modifier:e.modifier}}}i(Rr,"toEngineInput");function _r(e){switch(e.kind){case"takeback":return{kind:"takeback"};case"location":return{kind:"position",position:Y(e.location)};case"modifier":return{kind:"modifier",modifier:e.modifier}}}i(_r,"fromEngineInput");function eu(e){let n=_r(e.input),t=e.actorMonItem===void 0?{}:{actor:ft(e.actorMonItem)};if(e.kind==="select-consumable"){if(n.kind!=="modifier")throw new Error("consumable selection requires a modifier input");return{action:e.kind,input:n,...t}}if(n.kind!=="position")throw new Error(`${e.kind} requires a position input`);switch(e.kind){case"mon-move":case"mana-move":case"mystic-action":case"demon-action":case"demon-additional-step":case"spirit-target-capture":case"spirit-target-move":case"bomb-attack":return{action:e.kind,input:n,...t}}}i(eu,"fromEngineInputOption");function Fo(e){switch(e.kind){case"mon-move":return{kind:e.kind,item:ft(e.item),from:Y(e.from),to:Y(e.to)};case"mana-move":return{kind:e.kind,mana:Kt(e.mana),from:Y(e.from),to:Y(e.to)};case"mana-scored":case"mana-dropped":return{kind:e.kind,mana:Kt(e.mana),at:Y(e.at)};case"mystic-action":return{kind:e.kind,mystic:sn(e.mystic),from:Y(e.from),to:Y(e.to)};case"demon-action":case"demon-additional-step":return{kind:e.kind,demon:sn(e.demon),from:Y(e.from),to:Y(e.to)};case"spirit-target-move":return{kind:e.kind,item:ft(e.item),from:Y(e.from),to:Y(e.to),by:Y(e.by)};case"pickup-bomb":return{kind:e.kind,by:sn(e.by),at:Y(e.at)};case"pickup-potion":return{kind:e.kind,by:ft(e.by),at:Y(e.at)};case"use-potion":case"supermana-back-to-base":return{kind:e.kind,from:Y(e.from),to:Y(e.to)};case"pickup-mana":return{kind:e.kind,mana:Kt(e.mana),by:sn(e.by),at:Y(e.at)};case"mon-fainted":return{kind:e.kind,mon:sn(e.mon),from:Y(e.from),to:Y(e.to)};case"bomb-attack":return{kind:e.kind,by:sn(e.by),from:Y(e.from),to:Y(e.to)};case"mon-awake":return{kind:e.kind,mon:sn(e.mon),at:Y(e.at)};case"bomb-explosion":return{kind:e.kind,at:Y(e.at)};case"next-turn":return{kind:e.kind,color:e.color};case"game-over":return{kind:e.kind,winner:e.winner};case"takeback":return{kind:e.kind}}}i(Fo,"fromEngineEvent");function Nr(e,n){switch(e.kind){case"invalid-input":return{kind:"invalid",inputFen:n};case"locations-to-start-from":return{kind:"awaiting-start",inputFen:n,positions:e.locations.map(Y)};case"next-input-options":return{kind:"awaiting-input",inputFen:n,options:e.nextInputs.map(eu)};case"events":return{kind:"complete",inputFen:n,events:e.events.map(Fo)}}}i(Nr,"fromEngineOutput");function $i(e){return{monMoves:e.get(Oe.MonMove)??0,manaMoves:e.get(Oe.ManaMove)??0,actions:e.get(Oe.Action)??0,potions:e.get(Oe.Potion)??0}}i($i,"availableMoveCountsFromEngine");function nu(e){if(e!=="")return Mt(e)}i(nu,"parseReplayMove");function Bo(e,n,t,o){let r=0,a=0;for(;r<n.length||a<t.length;){let s=e.activeColor===y.White,l=(s?n:t)[s?r:a];if(l===void 0)return{status:"missing-move",whiteMovesProcessed:r,blackMovesProcessed:a};let m=nu(l);if(m===void 0)return{status:"invalid-move",whiteMovesProcessed:r,blackMovesProcessed:a};let f=e.processInput(m,!1,!1);if(f.kind!=="events"||f.events.length===0)return{status:"invalid-move",whiteMovesProcessed:r,blackMovesProcessed:a};s?r+=1:a+=1;let p={whiteMovesProcessed:r,blackMovesProcessed:a};if(o?.(e,p)===!1)return{status:"stopped",...p}}return{status:"complete",whiteMovesProcessed:r,blackMovesProcessed:a}}i(Bo,"replayInterleavedMoves");var Pr=class e{static{i(this,"Game")}#e;constructor(n={}){let{variant:t=E.Classic}=n;if(!ou(t))throw new TypeError(`unsupported game variant: ${String(t)}`);this.#e=new Qe(!0,t)}static#n(n){let t=new e({variant:n.variant()});return t.#e=n,t}static fromFen(n){let t=Qe.fromFen(n,!0);if(t?.fen()===n)return e.#n(t)}get variant(){return this.#e.variant()}get activeColor(){return this.#e.activeColor}get turnNumber(){return this.#e.turnNumber}get scores(){return{[y.White]:this.#e.whiteScore,[y.Black]:this.#e.blackScore}}get potions(){return{[y.White]:this.#e.whitePotionsCount,[y.Black]:this.#e.blackPotionsCount}}get winner(){return this.#e.winnerColor()}get historyVerified(){return this.#e.isMovesVerified}get takebackFens(){return[...this.#e.takebackFens]}get trackingEntries(){return this.#e.verboseTrackingEntities.map(n=>({fen:n.fen,color:n.color,events:n.events.map(Fo),eventsFen:wi(n.events)}))}toFen(){return this.#e.fen()}preview(n){let t=n.map(Rr);return this.#t(t,nt(t))}play(n){let t=n.map(Rr);return this.#o(t,nt(t))}playFen(n){let t=Mt(n);return t===void 0?{kind:"invalid",inputFen:n}:this.#o(t,nt(t))}#t(n,t){let o=n.length===1&&n[0]?.kind==="takeback"?this.#e.copy():this.#e.fork();return Nr(o.processInput(n,!1,!1),t)}#o(n,t){let o=Nr(this.#e.processInput(n,!1,!1),t);return o.kind==="complete"?o:{kind:"invalid",inputFen:t}}itemAt(n){let t=this.#e.board.get(Lo(n));return t===void 0?void 0:ft(t)}squareAt(n){return ji(this.#e.board.squareAt(Lo(n)))}contentPositions(){let n=new Map;for(let[t]of this.#e.board.entries())n.set(qi(t.i,t.j),{row:t.i,column:t.j});for(let t of this.#e.board.allMonsBases())n.set(qi(t.i,t.j),{row:t.i,column:t.j});return[...n.values()].sort((t,o)=>t.row-o.row||t.column-o.column)}canTakeback(n){if(!tu(n))throw new TypeError(`unsupported color: ${String(n)}`);return this.#e.canTakeback(n)}takeback(){return this.play([{kind:"takeback"}])}previousTurn(n){let t=this.#e.verboseTrackingEntities;if(t.length<=1)return;let o=t.slice(0,-1),r=o[o.length-1],a=Qe.fromFen(r?.fen??this.#e.fen(),!0);if(a===void 0)return;let s=n.lastIndexOf(a.fen());if(n.length>0&&s<0)return;let u=s<0?[]:n.slice(0,s+1);if(!u.some(c=>{let l=Qe.fromFen(c,!1);return l?.fen()!==c||l.variant()!==a.variant()}))return a.replaceHistory({takebackFens:u,trackingEntries:o,verboseTrackingEnabled:!0,movesVerified:this.#e.isMovesVerified}),e.#n(a)}verifyHistory(n){let t=new Qe(!0,this.#e.variant());return Bo(t,n.white,n.black).status!=="complete"||t.fen()!==this.#e.fen()?!1:(this.#e.replaceHistory({takebackFens:t.takebackFens,trackingEntries:t.verboseTrackingEntities,movesVerified:!0}),!0)}isLaterThan(n){return this.#e.isLaterThan(n.#e)}availableMoveCounts(){return $i(this.#e.availableMoveKinds())}suggestMove(n){if(!ru(n))throw new TypeError(`unsupported automove preference: ${String(n)}`);let t=Ci(this.#e,n);if(t.output.kind!=="events")return;let o=Mt(t.inputFen);if(o!==void 0)return{inputs:o.map(_r),inputFen:t.inputFen,events:t.output.events.map(Fo)}}};function tu(e){return e===y.White||e===y.Black}i(tu,"isColor");function ou(e){return Object.values(E).includes(e)}i(ou,"isGameVariant");function ru(e){return e==="fast"||e==="normal"||e==="pro"}i(ru,"isAutomovePreference");function qi(e,n){return`${e},${n}`}i(qi,"positionKey");function au(e){let n=Hi(e.white.fen),t=Hi(e.black.fen);if(n===void 0||t===void 0)return n===void 0&&t===void 0?{kind:"invalid"}:{kind:"winner",winner:n===void 0?y.Black:y.White};if(n.variant()!==t.variant())return{kind:"invalid"};let o=n.fen(),r=t.fen();if(n.winnerColor()===void 0&&t.winnerColor()===void 0)return{kind:"ongoing"};let a=new Qe(!1,n.variant()),s;return Bo(a,e.white.moves,e.black.moves,(u,{whiteMovesProcessed:c,blackMovesProcessed:l})=>{let m=u.winnerColor();if(m===void 0)return!0;let f=m===y.White?c===e.white.moves.length:l===e.black.moves.length,p=m===y.White?o:r;return s=f&&p===u.fen()?{kind:"winner",winner:m}:{kind:"invalid"},!1}),s??{kind:"invalid"}}i(au,"resolveMatch");function Hi(e){let n=Qe.fromFen(e,!1);return n?.fen()===e?n:void 0}i(Hi,"submittedGame");export{y as Color,A as Consumable,Pr as Game,E as GameVariant,X as Modifier,M as MonKind,au as resolveMatch};
|
|
1
|
+
var Qi=Object.defineProperty;var i=(e,n)=>Qi(e,"name",{value:n,configurable:!0});var y=Object.freeze({White:"white",Black:"black"}),E=Object.freeze({Classic:"Classic",SwappedManaRows:"SwappedManaRows",OffsetArcManaRows:"OffsetArcManaRows",CenterSpokeManaRows:"CenterSpokeManaRows",AlternatingManaRows:"AlternatingManaRows",InnerWedgeManaRows:"InnerWedgeManaRows",OuterWedgeManaRows:"OuterWedgeManaRows",BentCenterManaRows:"BentCenterManaRows",OuterEdgeManaRows:"OuterEdgeManaRows",SplitFlankManaRows:"SplitFlankManaRows",ForwardBridgeManaRows:"ForwardBridgeManaRows",CornerChainManaRows:"CornerChainManaRows"}),M=Object.freeze({Demon:"demon",Drainer:"drainer",Angel:"angel",Spirit:"spirit",Mystic:"mystic"}),A=Object.freeze({Potion:"potion",Bomb:"bomb",BombOrPotion:"bomb-or-potion"}),X=Object.freeze({SelectPotion:"select-potion",SelectBomb:"select-bomb"});var Go=Object.freeze({[y.White]:0,[y.Black]:1});function $e(e){return Go[e]}i($e,"colorId");var qe=Object.freeze({[M.Demon]:0,[M.Drainer]:1,[M.Angel]:2,[M.Spirit]:3,[M.Mystic]:4}),Oe=Object.freeze({MonMove:"mon-move",ManaMove:"mana-move",Action:"action",Potion:"potion"}),Ko=Object.freeze({[X.SelectPotion]:0,[X.SelectBomb]:1}),O=Object.freeze({MonMove:"mon-move",ManaMove:"mana-move",MysticAction:"mystic-action",DemonAction:"demon-action",DemonAdditionalStep:"demon-additional-step",SpiritTargetCapture:"spirit-target-capture",SpiritTargetMove:"spirit-target-move",SelectConsumable:"select-consumable",BombAttack:"bomb-attack"}),Qn=4,Mn=Object.freeze({kind:"supermana"});function Sn(e){return e===y.Black?y.White:y.Black}i(Sn,"otherColor");function Dn(e,n,t){if(!Number.isInteger(t)||t<0||t>2)throw new RangeError("mon cooldown must be an integer from 0 through 2");return Object.freeze({kind:e,color:n,cooldown:t})}i(Dn,"createMon");function Uo(e,n){return e.kind===n.kind&&e.color===n.color&&e.cooldown===n.cooldown}i(Uo,"monEquals");function ve(e){return e.cooldown>0}i(ve,"isMonFainted");function Gr(e){return Dn(e.kind,e.color,2)}i(Gr,"faintMon");function Kr(e){return e.cooldown>0?Dn(e.kind,e.color,e.cooldown-1):Pe(e)}i(Kr,"decreaseMonCooldown");function Yn(e){return Object.freeze({kind:"regular",color:e})}i(Yn,"regularMana");function Ur(e,n){return e.kind==="supermana"?n.kind==="supermana":n.kind==="regular"&&e.color===n.color}i(Ur,"manaEquals");function jo(e,n){return e||!n?2:1}i(jo,"manaScoreForOwnership");function jr(e,n){return jo(e.kind==="supermana",e.kind==="regular"&&e.color===n)}i(jr,"manaScore");function Le(e){return Object.freeze({kind:"mon",mon:Pe(e)})}i(Le,"monItem");function Ze(e){return Object.freeze({kind:"mana",mana:Xn(e)})}i(Ze,"manaItem");function Zn(e,n){return Object.freeze({kind:"mon-with-mana",mon:Pe(e),mana:Xn(n)})}i(Zn,"monWithManaItem");function pt(e,n){return Object.freeze({kind:"mon-with-consumable",mon:Pe(e),consumable:n})}i(pt,"monWithConsumableItem");function bt(e){return Object.freeze({kind:"consumable",consumable:e})}i(bt,"consumableItem");function Pe(e){return Object.isFrozen(e)?e:Dn(e.kind,e.color,e.cooldown)}i(Pe,"immutableMon");function Xn(e){return e.kind==="supermana"?Mn:Object.isFrozen(e)?e:Yn(e.color)}i(Xn,"immutableMana");function Bn(e){switch(e.kind){case"mon":return Object.isFrozen(e)&&Object.isFrozen(e.mon)?e:Le(e.mon);case"mana":return Object.isFrozen(e)&&Object.isFrozen(e.mana)?e:Ze(e.mana);case"mon-with-mana":return Object.isFrozen(e)&&Object.isFrozen(e.mon)&&Object.isFrozen(e.mana)?e:Zn(e.mon,e.mana);case"mon-with-consumable":return Object.isFrozen(e)&&Object.isFrozen(e.mon)?e:pt(e.mon,e.consumable);case"consumable":return Object.isFrozen(e)?e:bt(e.consumable)}}i(Bn,"immutableItem");function W(e){return{i:e.i,j:e.j}}i(W,"copyLocation");function Yi(e){switch(e.kind){case"takeback":return{kind:"takeback"};case"location":return{kind:"location",location:W(e.location)};case"modifier":return{kind:"modifier",modifier:e.modifier}}}i(Yi,"copyInput");function Jn(e){let n=Yi(e.input);return e.actorMonItem===void 0?{input:n,kind:e.kind}:{input:n,kind:e.kind,actorMonItem:Bn(e.actorMonItem)}}i(Jn,"copyNextInput");function Vn(e){switch(e.kind){case"mon-move":return{kind:"mon-move",item:Bn(e.item),from:W(e.from),to:W(e.to)};case"mana-move":return{kind:"mana-move",mana:Xn(e.mana),from:W(e.from),to:W(e.to)};case"mana-scored":return{kind:"mana-scored",mana:Xn(e.mana),at:W(e.at)};case"mystic-action":return{kind:"mystic-action",mystic:Pe(e.mystic),from:W(e.from),to:W(e.to)};case"demon-action":return{kind:"demon-action",demon:Pe(e.demon),from:W(e.from),to:W(e.to)};case"demon-additional-step":return{kind:"demon-additional-step",demon:Pe(e.demon),from:W(e.from),to:W(e.to)};case"spirit-target-move":return{kind:"spirit-target-move",item:Bn(e.item),from:W(e.from),to:W(e.to),by:W(e.by)};case"pickup-bomb":return{kind:"pickup-bomb",by:Pe(e.by),at:W(e.at)};case"pickup-potion":return{kind:"pickup-potion",by:Bn(e.by),at:W(e.at)};case"use-potion":return{kind:"use-potion",from:W(e.from),to:W(e.to)};case"pickup-mana":return{kind:"pickup-mana",mana:Xn(e.mana),by:Pe(e.by),at:W(e.at)};case"mon-fainted":return{kind:"mon-fainted",mon:Pe(e.mon),from:W(e.from),to:W(e.to)};case"mana-dropped":return{kind:"mana-dropped",mana:Xn(e.mana),at:W(e.at)};case"supermana-back-to-base":return{kind:"supermana-back-to-base",from:W(e.from),to:W(e.to)};case"bomb-attack":return{kind:"bomb-attack",by:Pe(e.by),from:W(e.from),to:W(e.to)};case"mon-awake":return{kind:"mon-awake",mon:Pe(e.mon),at:W(e.at)};case"bomb-explosion":return{kind:"bomb-explosion",at:W(e.at)};case"next-turn":return{kind:"next-turn",color:e.color};case"game-over":return{kind:"game-over",winner:e.winner};case"takeback":return{kind:"takeback"}}}i(Vn,"copyEvent");function $o(e){switch(e.kind){case"invalid-input":return{kind:"invalid-input"};case"locations-to-start-from":return{kind:"locations-to-start-from",locations:e.locations.map(W)};case"next-input-options":return{kind:"next-input-options",nextInputs:e.nextInputs.map(Jn)};case"events":return{kind:"events",events:e.events.map(Vn)}}}i($o,"copyOutput");function $(e){switch(e.kind){case"mon":case"mon-with-mana":case"mon-with-consumable":return e.mon;case"mana":case"consumable":return}}i($,"itemMon");function $r(e){let n=$(e);return n===void 0||!ve(n)}i($r,"isSpiritTargetAllowed");function In(e){switch(e.kind){case"mana":case"mon-with-mana":return e.mana;case"mon":case"mon-with-consumable":case"consumable":return}}i(In,"itemMana");function qo(e){switch(e.kind){case"mon-with-consumable":case"consumable":return e.consumable;case"mon":case"mana":case"mon-with-mana":return}}i(qo,"itemConsumable");function qr(e,n){switch(e.kind){case"mon":return n.kind==="mon"&&Uo(e.mon,n.mon);case"mana":return n.kind==="mana"&&Ur(e.mana,n.mana);case"mon-with-mana":return n.kind==="mon-with-mana"&&Uo(e.mon,n.mon)&&Ur(e.mana,n.mana);case"mon-with-consumable":return n.kind==="mon-with-consumable"&&Uo(e.mon,n.mon)&&e.consumable===n.consumable;case"consumable":return n.kind==="consumable"&&e.consumable===n.consumable}}i(qr,"itemEquals");function Wo(e){return`${e.kind}:${e.color}:${e.cooldown}`}i(Wo,"monKey");function Wr(e){return e.kind==="supermana"?"s":`r:${e.color}`}i(Wr,"manaKey");function zt(e){switch(e.kind){case"mon":return`m:${Wo(e.mon)}`;case"mana":return`a:${Wr(e.mana)}`;case"mon-with-mana":return`mm:${Wo(e.mon)}:${Wr(e.mana)}`;case"mon-with-consumable":return`mc:${Wo(e.mon)}:${e.consumable}`;case"consumable":return`c:${e.consumable}`}}i(zt,"itemKey");function Ho(e){switch(e.kind){case"takeback":return"t";case"location":return`l:${e.location.i}:${e.location.j}`;case"modifier":return`m:${e.modifier}`}}i(Ho,"inputKey");function Hr(e){return e.map(Ho).join(";")}i(Hr,"inputChainKey");function yt(e,n){switch(e.kind){case"takeback":return n.kind==="takeback";case"location":return n.kind==="location"&&e.location.i===n.location.i&&e.location.j===n.location.j;case"modifier":return n.kind==="modifier"&&e.modifier===n.modifier}}i(yt,"inputEquals");function B(e){return`${e.i},${e.j}`}i(B,"locationFen");var Xt=48,Zi=57,Ji=44,es=59,ns=108,ts=109,os=122,rs=112,as=98;function is(e){switch(e){case X.SelectPotion:return"p";case X.SelectBomb:return"b"}}i(is,"modifierFen");function ss(e){switch(e.kind){case"takeback":return"z";case"location":return`l${B(e.location)}`;case"modifier":return`m${is(e.modifier)}`}}i(ss,"inputFen");function zr(e,n,t){if(n>=t)return;let o=e.charCodeAt(n);if(!(o<Xt||o>Zi))return o===Xt+1&&n+1<t&&e.charCodeAt(n+1)===Xt?10:o-Xt}i(zr,"parseCoordinate");function Xr(e,n){return e+(n===10?2:1)}i(Xr,"coordinateEnd");function cs(e,n,t){let o=zr(e,n,t);if(o===void 0)return;let r=Xr(n,o);if(r>=t||e.charCodeAt(r)!==Ji)return;let a=r+1,s=zr(e,a,t);if(!(s===void 0||Xr(a,s)!==t))return{i:o,j:s}}i(cs,"parseLocation");function us(e,n,t){switch(e.charCodeAt(n)){case ns:{let o=cs(e,n+1,t);return o===void 0?void 0:{kind:"location",location:o}}case ts:return t!==n+2?void 0:e.charCodeAt(n+1)===rs?{kind:"modifier",modifier:X.SelectPotion}:e.charCodeAt(n+1)===as?{kind:"modifier",modifier:X.SelectBomb}:void 0;case os:return t===n+1?{kind:"takeback"}:void 0;default:return}}i(us,"parseInputFenRange");function et(e){return e.map(ss).join(";")}i(et,"inputArrayFen");function ht(e){if(typeof e!="string")throw new TypeError("input FEN must be a string");if(e==="")return[];let n=[],t=0;for(let o=0;o<=e.length;o+=1){if(o<e.length&&e.charCodeAt(o)!==es)continue;if(n.length===Qn)return;let r=us(e,t,o);if(r===void 0)return;n.push(r),t=o+1}return n}i(ht,"parseInputArrayFen");var Qr=Math.trunc(5.5),ls=10;function Z(e,n){return{i:e,j:n}}i(Z,"location");function zo(e,n){return e.i===n.i&&e.j===n.j}i(zo,"locationEquals");function cn(e){return Number.isInteger(e.i)&&Number.isInteger(e.j)&&e.i>=0&&e.i<11&&e.j>=0&&e.j<11}i(cn,"isValidLocation");function Un(e){if(!cn(e))throw new RangeError(`board location must use integer coordinates from 0 to ${ls}`)}i(Un,"assertValidLocation");function re(e){return Un(e),e.i*11+e.j}i(re,"locationIndex");function nt(e){if(!Number.isInteger(e)||e<0||e>=121)throw new RangeError("board location index must be an integer from 0 to 120");return Z(Math.trunc(e/11),e%11)}i(nt,"fromLocationIndex");function Yr(e,n){return Z(Math.trunc((e.i+n.i)/2),Math.trunc((e.j+n.j)/2))}i(Yr,"locationBetween");function Zr(e,n){return Math.max(Math.abs(n.i-e.i),Math.abs(n.j-e.j))}i(Zr,"locationDistance");function Jr(e,n){let t=[];for(let o=e.i-n;o<=e.i+n;o+=1)for(let r=e.j-n;r<=e.j+n;r+=1){let a=Z(o,r);cn(a)&&!zo(a,e)&&t.push(a)}return t}i(Jr,"nearbyLocationsFor");function ea(e,n){let t=[];for(let[o,r]of n){let a=Z(e.i+o,e.j+r);cn(a)&&t.push(a)}return t}i(ea,"directionalReachabilityFor");function ds(e){let n=[];for(let t=-2;t<=2;t+=1)for(let o=-2;o<=2;o+=1){if(Math.max(Math.abs(t),Math.abs(o))!==2)continue;let r=Z(e.i+t,e.j+o);cn(r)&&n.push(r)}return n}i(ds,"spiritReachabilityFor");function kt(e){return Object.freeze(Array.from({length:121},(n,t)=>Object.freeze(e(nt(t)).map(o=>Object.freeze(o)))))}i(kt,"buildCache");var ms=kt(e=>Jr(e,1)),fs=kt(e=>Jr(e,3)),ps=kt(e=>ea(e,[[-2,-2],[2,2],[-2,2],[2,-2]])),bs=kt(e=>ea(e,[[-2,0],[2,0],[0,2],[0,-2]])),ys=kt(ds);function Mt(e,n){return cn(n)?e[re(n)]??[]:[]}i(Mt,"cachedLocations");function Fe(e){return Mt(ms,e)}i(Fe,"nearbyLocations");function Qt(e){return Mt(fs,e)}i(Qt,"bombReachableLocations");function Yt(e){return Mt(ps,e)}i(Yt,"mysticReachableLocations");function Zt(e){return Mt(bs,e)}i(Zt,"demonReachableLocations");function Jt(e){return Mt(ys,e)}i(Jt,"spiritReachableLocations");var Xo=Object.freeze(Array.from({length:121},(e,n)=>Object.freeze(nt(n))));var na=Object.freeze({includeManaStartsWithPotionAction:!1}),Qo=Object.freeze({includeManaStartsWithPotionAction:!0});function xe(e,n,t){return t===void 0?{input:e,kind:n}:{input:e,kind:n,actorMonItem:t}}i(xe,"nextInput");function ta(e){let n=[],t;for(let o of e)o.kind!==t&&(n.push(o),t=o.kind);return n}i(ta,"firstOptionFromEachKindGroup");function Yo(e,n){return e!==void 0&&Zr(e,n)===1}i(Yo,"isLocationGuardedByAngelLocation");function oa(e,n,t,o){if(t!==void 0){for(let a of e)if(zo(a,t))return o(t)?[xe({kind:"location",location:t},n)]:[];return[]}let r=[];for(let a of e)o(a)&&r.push(xe({kind:"location",location:a},n));return r}i(oa,"nextInputsFromLocations");var St=new RangeError("fast workspace allocation failed");function It(e){return e===St}i(It,"isFastWorkspaceAllocationFailure");function Re(e){throw e instanceof RangeError?St:e}i(Re,"rethrowFastWorkspaceAllocation");var un=E.Classic,Ie=5,ee=5,An=1,_e=1,Wn=Object.freeze([E.Classic,E.SwappedManaRows,E.OffsetArcManaRows,E.CenterSpokeManaRows,E.AlternatingManaRows,E.InnerWedgeManaRows,E.OuterWedgeManaRows,E.BentCenterManaRows,E.OuterEdgeManaRows,E.SplitFlankManaRows,E.ForwardBridgeManaRows,E.CornerChainManaRows]),ia=Object.freeze({[E.Classic]:0,[E.SwappedManaRows]:1,[E.OffsetArcManaRows]:2,[E.CenterSpokeManaRows]:3,[E.AlternatingManaRows]:4,[E.InnerWedgeManaRows]:5,[E.OuterWedgeManaRows]:6,[E.BentCenterManaRows]:7,[E.OuterEdgeManaRows]:8,[E.SplitFlankManaRows]:9,[E.ForwardBridgeManaRows]:10,[E.CornerChainManaRows]:11}),hs=new Map(Wn.map(e=>[ia[e],e]));function sa(e){return ia[e]}i(sa,"gameVariantId");function Q(...e){return Object.freeze(e.map(([n,t])=>Object.freeze(Z(n,t))))}i(Q,"locations");function Be(e,n){return Object.freeze({[y.Black]:e,[y.White]:n})}i(Be,"manaLayout");var ks=Object.freeze({[E.Classic]:Be(Q([3,4],[3,6],[4,3],[4,5],[4,7]),Q([7,4],[7,6],[6,3],[6,5],[6,7])),[E.SwappedManaRows]:Be(Q([3,3],[3,5],[3,7],[4,4],[4,6]),Q([7,3],[7,5],[7,7],[6,4],[6,6])),[E.OffsetArcManaRows]:Be(Q([3,4],[3,6],[4,2],[4,5],[4,8]),Q([6,2],[6,5],[6,8],[7,4],[7,6])),[E.CenterSpokeManaRows]:Be(Q([3,5],[4,2],[4,4],[4,6],[4,8]),Q([6,2],[6,4],[6,6],[6,8],[7,5])),[E.AlternatingManaRows]:Be(Q([4,1],[4,3],[4,5],[4,7],[4,9]),Q([6,1],[6,3],[6,5],[6,7],[6,9])),[E.InnerWedgeManaRows]:Be(Q([3,4],[3,6],[4,4],[4,5],[4,6]),Q([6,4],[6,5],[6,6],[7,4],[7,6])),[E.OuterWedgeManaRows]:Be(Q([3,4],[3,5],[3,6],[4,3],[4,7]),Q([6,3],[6,7],[7,4],[7,5],[7,6])),[E.BentCenterManaRows]:Be(Q([3,5],[4,4],[4,5],[4,6],[5,3]),Q([5,7],[6,4],[6,5],[6,6],[7,5])),[E.OuterEdgeManaRows]:Be(Q([4,0],[4,1],[4,9],[4,10],[5,1]),Q([5,9],[6,0],[6,1],[6,9],[6,10])),[E.SplitFlankManaRows]:Be(Q([3,4],[3,6],[4,2],[4,3],[5,2]),Q([5,8],[6,7],[6,8],[7,4],[7,6])),[E.ForwardBridgeManaRows]:Be(Q([3,4],[3,6],[4,3],[4,5],[5,4]),Q([5,6],[6,5],[6,7],[7,4],[7,6])),[E.CornerChainManaRows]:Be(Q([3,5],[3,6],[4,6],[4,7],[5,7]),Q([5,3],[6,3],[6,4],[7,4],[7,5]))}),ca=Object.freeze({kind:"regular"}),ra=Object.freeze({kind:"consumable-base"}),Ms=Object.freeze({kind:"supermana-base"}),At=Object.freeze(Z(5,5)),Ct=Q([0,3],[0,4],[0,5],[0,6],[0,7],[10,3],[10,4],[10,5],[10,6],[10,7]);function ua(e){return Number.isSafeInteger(e)?hs.get(e):void 0}i(ua,"gameVariantFromId");function aa(e,n){return ks[e][n]}i(aa,"manaBaseLocations");function Ss(e){let n=Array.from({length:121}).fill(ca),t=i((o,r)=>{n[re(o)]=Object.freeze(r)},"put");t(Z(0,0),{kind:"mana-pool",color:y.Black}),t(Z(0,10),{kind:"mana-pool",color:y.Black}),t(Z(10,0),{kind:"mana-pool",color:y.White}),t(Z(10,10),{kind:"mana-pool",color:y.White}),t(Z(0,3),{kind:"mon-base",monKind:M.Mystic,color:y.Black}),t(Z(0,4),{kind:"mon-base",monKind:M.Spirit,color:y.Black}),t(Z(0,5),{kind:"mon-base",monKind:M.Drainer,color:y.Black}),t(Z(0,6),{kind:"mon-base",monKind:M.Angel,color:y.Black}),t(Z(0,7),{kind:"mon-base",monKind:M.Demon,color:y.Black}),t(Z(10,3),{kind:"mon-base",monKind:M.Demon,color:y.White}),t(Z(10,4),{kind:"mon-base",monKind:M.Angel,color:y.White}),t(Z(10,5),{kind:"mon-base",monKind:M.Drainer,color:y.White}),t(Z(10,6),{kind:"mon-base",monKind:M.Spirit,color:y.White}),t(Z(10,7),{kind:"mon-base",monKind:M.Mystic,color:y.White});for(let o of aa(e,y.Black))t(o,{kind:"mana-base",color:y.Black});for(let o of aa(e,y.White))t(o,{kind:"mana-base",color:y.White});return t(Z(5,0),ra),t(Z(5,10),ra),t(At,Ms),Object.freeze(n)}i(Ss,"buildSquares");var Is=new Map(Wn.map(e=>[e,Ss(e)]));function eo(e){let n=Is.get(e);if(n===void 0)throw new TypeError(`unsupported game variant: ${e}`);return n}i(eo,"squaresForVariant");function Zo(e,n){return Un(e),eo(n)[re(e)]??ca}i(Zo,"squareAtForVariant");function As(e){return Zo(e,un)}i(As,"squareAt");function Cs(e){switch(e.kind){case"mon-base":return Le(Dn(e.monKind,e.color,0));case"mana-base":return Ze(Yn(e.color));case"supermana-base":return Ze(Mn);case"consumable-base":return bt(A.BombOrPotion);case"regular":case"mana-pool":return}}i(Cs,"initialItemForSquare");function gs(e){return Object.freeze(eo(e).map(Cs))}i(gs,"buildInitialItems");var Es=new Map(Wn.map(e=>[e,gs(e)]));function la(e){let n=Es.get(e);if(n===void 0)throw new TypeError(`unsupported game variant: ${e}`);return[...n]}i(la,"initialItemsForVariant");function da(e,n){for(let t of Ct){let o=As(t);if(o.kind==="mon-base"&&o.monKind===e&&o.color===n)return t}throw new Error("Expected at least one base for the given mon")}i(da,"monBase");var Ae=Object.keys(Go).length,ln=Object.keys(qe).length,gt=Ae*ln,J=1,me=2,H=3,Et=1,vt=2,be=3,Te=1,fa=2,Ce=3,Tt=qe[M.Demon],he=qe[M.Drainer],wt=qe[M.Angel],no=qe[M.Spirit],to=qe[M.Mystic],vs=0,Ts=1,Je=2,ws=3,pa=5,se=7,tt=re(At);function G(e){return e&3}i(G,"cellOccupancy");function ce(e){return e>>2&7}i(ce,"cellMonKind");function fe(e){return e>>5&1}i(fe,"cellMonColor");function ae(e){return e>>6&3}i(ae,"cellCooldown");function x(e){return e>>8&3}i(x,"cellMana");function L(e){return e>>10&3}i(L,"cellConsumable");function ot(e){let n=L(e);return n===0||n===Te}i(ot,"damagingAttackCanComplete");function rt(e,n,t,o,r){return H|e<<2|n<<5|t<<6|o<<8|r<<10}i(rt,"makeMonCell");function Cn(e){return J|e<<8}i(Cn,"makeManaCell");function ba(e){return me|e<<10}i(ba,"makeConsumableCell");function De(e,n){return jo(e===be,e-1===n)}i(De,"manaScoreValue");function ue(e,n){return e*Ae+n}i(ue,"monId");function at(e){return e!==Je&&e<se}i(at,"squareIsRegularForMovement");function en(e){return e>=pa&&e<se}i(en,"squareIsPool");function oo(e){return Math.trunc((e-se)/Ae)}i(oo,"squareMonBaseKind");function ro(e){return(e-se)%Ae}i(ro,"squareMonBaseColor");function w(e,n){return e[n]??0}i(w,"u8");function g(e,n){return e[n]??0}i(g,"u16");function d(e,n){return e[n]??0}i(d,"i32");function ke(e,n){let t=e[n];if(t===void 0)throw new RangeError("automove search slot index out of range");return t}i(ke,"at");function ao(e,n,t){return rt(qe[e.kind],$e(e.color),e.cooldown,n,t)}i(ao,"fastMonCellFromMon");function Os(e){let n=new Uint8Array(121),t=eo(e);for(let o=0;o<121;o+=1){let r=t[o];if(r!==void 0)switch(r.kind){case"regular":n[o]=vs;break;case"consumable-base":n[o]=Ts;break;case"supermana-base":n[o]=Je;break;case"mana-base":n[o]=ws+$e(r.color);break;case"mana-pool":n[o]=pa+$e(r.color);break;case"mon-base":n[o]=se+ue(qe[r.monKind],$e(r.color));break}}return n}i(Os,"buildSquares");var xs=new Map(Wn.map(e=>[e,Os(e)]));function io(e){let n=xs.get(e);if(n===void 0)throw new TypeError(`unsupported game variant: ${e}`);try{return n.slice()}catch(t){Re(t)}}i(io,"fastSquaresForVariant");var Jo=(()=>{let e=new Int32Array(gt).fill(-1),n=io(ke(Wn,0));for(let t of Ct){let o=re(t),r=w(n,o);r>=se&&(e[r-se]=o)}return e})();function Ot(e){let n=[],t=new Int32Array(121),o=new Int32Array(121);for(let r=0;r<121;r+=1){o[r]=n.length;let a=e(nt(r)).map(re).sort((s,u)=>s-u);n.push(...a),t[r]=a.length}return{list:new Int32Array(n),starts:o,counts:t}}i(Ot,"buildOffsetTable");var le=Ot(Fe),gn=Ot(Yt),En=Ot(Zt),so=Ot(Jt),co=Ot(Qt),Rs=(()=>{let e=new Uint8Array(14641);for(let n=0;n<121;n+=1){let t=Math.trunc(n/11),o=n%11;for(let r=0;r<121;r+=1){let a=Math.trunc(r/11),s=r%11;e[n*121+r]=Math.max(Math.abs(t-a),Math.abs(o-s))}}return e})();function Me(e,n){return w(Rs,e*121+n)}i(Me,"chebyshev");function _s(e,n){let t=Math.trunc(e/11),o=e%11,r=Math.trunc(n/11),a=n%11;return Math.trunc((t+r)/2)*11+Math.trunc((o+a)/2)}i(_s,"midpointCompute");var Ns=(()=>{let e=new Uint8Array(14641);for(let n=0;n<121;n+=1)for(let t=0;t<121;t+=1)e[n*121+t]=_s(n,t);return e})();function uo(e,n){return w(Ns,e*121+n)}i(uo,"midpoint");var ma=(()=>{let e=[],n=io(ke(Wn,0));for(let t=0;t<121;t+=1)en(w(n,t))&&e.push(t);return new Int32Array(e)})(),ya=(()=>{let e=new Uint8Array(121*Ae);for(let n=0;n<121;n+=1){let t=Math.trunc(n/11),o=n%11,r=Math.min(o,10-o);for(let a=0;a<Ae;a+=1){let s=a===0?10:0,u=Math.abs(s-t);e[a*121+n]=u>r?u:r}}return e})(),ha=(()=>{let e=new Uint8Array(121);for(let n=0;n<121;n+=1)e[n]=Math.abs(Qr-Math.trunc(n/11));return e})(),nn=(()=>{let e=new Uint8Array(121);for(let n=0;n<121;n+=1){let t=99;for(let o=0;o<ma.length;o+=1){let r=Me(n,d(ma,o));r<t&&(t=r)}e[n]=t}return e})();function Ps(e){let n=e>>>0;return()=>(n^=n<<13,n>>>=0,n^=n>>>17,n^=n<<5,n>>>=0,n|0)}i(Ps,"xorshift");function vn(e,n){let t=new Int32Array(n);for(let o=0;o<n;o+=1)t[o]=e();return t}i(vn,"randomTable");var Tn=Ps(49734321),ka=3,lo=1+gt*ka,Ls=vn(Tn,121*lo),Fs=vn(Tn,121*lo),Bs=vn(Tn,484),Ds=vn(Tn,484),Vs=vn(Tn,484),Us=vn(Tn,484),Ma=2048,mo=vn(Tn,Ma),er=vn(Tn,Ma);function Sa(e){return G(e)!==H?0:1+ue(ce(e),fe(e))*ka+ae(e)}i(Sa,"monSlot");function fo(e,n){return n===0?0:d(Ls,e*lo+Sa(n))^d(Bs,e*4+x(n))^d(Vs,e*4+L(n))}i(fo,"cellHashLo");function po(e,n){return n===0?0:d(Fs,e*lo+Sa(n))^d(Ds,e*4+x(n))^d(Us,e*4+L(n))}i(po,"cellHashHi");function nr(e,n){return e>=Ie?y.White:n>=Ie?y.Black:void 0}i(nr,"winnerForScores");function bo(e){return nr(e.whiteScore,e.blackScore)}i(bo,"winnerForState");function it(e){return e.turnNumber===1}i(it,"isFirstTurnState");function yo(e){return e.activeColor===y.White?e.whitePotionsCount:e.blackPotionsCount}i(yo,"currentPlayerPotions");function dn(e){return e<ee}i(dn,"canMoveMonForCounts");function Ia(e){return dn(e.monsMovesCount)}i(Ia,"canPlayerMoveMon");function wn(e,n){return!e&&n<An}i(wn,"canMoveManaForCounts");function Aa(e){return wn(it(e),e.manaMovesCount)}i(Aa,"canPlayerMoveMana");function ho(e,n,t){return!e&&(t>0||n<_e)}i(ho,"canUseActionForCounts");function Ca(e){return ho(it(e),e.actionsUsedCount,yo(e))}i(Ca,"canPlayerUseAction");function ga(e,n){if(n===void 0)return!0;let t=$(e);switch(n.kind){case"mon":return t!==void 0?!1:e.kind==="mana"?n.mon.kind===M.Drainer&&!ve(n.mon):e.kind==="consumable"&&e.consumable===A.BombOrPotion;case"mana":return t?.kind===M.Drainer&&!ve(t);case"mon-with-mana":case"mon-with-consumable":return e.kind==="consumable"&&e.consumable===A.BombOrPotion;case"consumable":return n.consumable===A.BombOrPotion&&t!==void 0}}i(ga,"spiritDestinationItemAllowed");function tr(e,n,t,o,r,a,s){if(!wn(e,t))return!1;let u=dn(n);return!u&&!ho(e,o,r)||!a||s&&!u&&o>=_e&&r>0}i(tr,"shouldSuggestRegularManaStartsFromScalars");function Ea(e,n,t){return tr(it(e),e.monsMovesCount,e.manaMovesCount,e.actionsUsedCount,yo(e),n,t)}i(Ea,"shouldSuggestRegularManaStarts");function or(e,n,t,o){return e?!dn(n):wn(e,t)?!dn(n)&&!o:!0}i(or,"shouldAdvanceTurnForCounts");function Gn(e){switch(e.kind){case"regular":case"consumable-base":case"mana-base":case"mana-pool":return!0;case"supermana-base":case"mon-base":return!1}}i(Gn,"regularSquareForMovement");function rr(e,n){let t=e.get(n),o=e.squareAt(n);return t?.kind==="mon"?Gn(o)&&t.mon.kind===M.Drainer:t!==void 0?!1:Gn(o)}i(rr,"regularManaMoveDestinationAllowed");function Ws(e){for(let n of e.board.allFreeRegularManaLocations(e.activeColor))for(let t of Fe(n))if(rr(e.board,t))return!0;return!1}i(Ws,"hasMovableFreeRegularMana");function va(e){let n=it(e),o=!(!n&&wn(n,e.manaMovesCount)&&!dn(e.monsMovesCount))||Ws(e);return or(n,e.monsMovesCount,e.manaMovesCount,o)}i(va,"shouldAdvanceTurn");var tn=0,Mo=1,cr=2,He=3,On=4,ur=5,Se=127,on=0,mn=1,jn=2,lr=3,dr=-2,Ta=16;function ye(e,n,t,o,r){return e|n<<3|t<<10|o<<17|r<<24}i(ye,"encodeMove");function st(e){return e&7}i(st,"moveType");function ze(e){return e>>3&127}i(ze,"moveFrom");function Ne(e){return e>>10&127}i(Ne,"moveTo");function ct(e){return e>>17&127}i(ct,"moveAux");function xt(e){return e>>24&3}i(xt,"moveModifier");function ar(e,n,t){if(e.length!==n)throw new RangeError(`fast position ${t} length must be ${n}`)}i(ar,"validateArrayLength");var ir=class{static{i(this,"MutableFastPosition")}cells=new Uint16Array(121);squares=new Uint8Array(121);monLocations=new Int32Array(gt).fill(-1);freeMana=new Int32Array(Ae);manaIndices=new Int32Array(Ta);manaCount=0;whiteScore=0;blackScore=0;active=0;monsMoves=0;manaMoves=0;actionsUsed=0;potions=new Int32Array(Ae);firstTurn=!1;hashLo=0;hashHi=0;copyFrom(n){let t=n;this.cells.set(t.cells),this.squares=t.squares;let o=this.monLocations,r=t.monLocations;for(let u=0;u<gt;u+=1)o[u]=d(r,u);this.freeMana[0]=d(t.freeMana,0),this.freeMana[1]=d(t.freeMana,1);let a=this.manaIndices,s=t.manaIndices;for(let u=0;u<Ta;u+=1)a[u]=d(s,u);this.manaCount=t.manaCount,this.whiteScore=t.whiteScore,this.blackScore=t.blackScore,this.active=t.active,this.monsMoves=t.monsMoves,this.manaMoves=t.manaMoves,this.actionsUsed=t.actionsUsed,this.potions[0]=d(t.potions,0),this.potions[1]=d(t.potions,1),this.firstTurn=t.firstTurn,this.hashLo=t.hashLo,this.hashHi=t.hashHi}reset(n){ar(n.cells,121,"cells"),ar(n.squares,121,"squares"),ar(n.potions,Ae,"potions");let t;try{t=new Uint8Array(n.squares)}catch(f){Re(f)}let o=0;for(let f=0;f<121;f+=1){let p=g(n.cells,f);if(!(p===0||G(p)!==J)&&(o+=1,o>this.manaIndices.length))throw new RangeError("fast mana index capacity exceeded")}let r=n.whiteScore,a=n.blackScore,s=n.active,u=n.monsMoves,c=n.manaMoves,l=n.actionsUsed,m=n.firstTurn;this.cells.set(n.cells),this.squares=t,this.whiteScore=r,this.blackScore=a,this.active=s,this.monsMoves=u,this.manaMoves=c,this.actionsUsed=l,this.potions.set(n.potions),this.firstTurn=m,this.rebuildDerived()}rebuildDerived(){this.monLocations.fill(-1),this.freeMana[0]=0,this.freeMana[1]=0,this.manaIndices.fill(0),this.manaCount=0;let n=0,t=0;for(let o=0;o<121;o+=1){let r=g(this.cells,o);if(r===0)continue;n^=fo(o,r),t^=po(o,r);let a=G(r);if(a===H)this.monLocations[ue(ce(r),fe(r))]=o;else if(a===J){let s=x(r);(s===1||s===2)&&(this.freeMana[s-1]=d(this.freeMana,s-1)+1),this.manaIndices[this.manaCount]=o,this.manaCount+=1}}this.hashLo=n,this.hashHi=t}},So=ir;function Rt(e,n,t){let o=d(e.monLocations,ue(wt,n));if(o<0)return!1;let r=g(e.cells,o);return G(r)===H&&ce(r)===wt&&fe(r)===n&&ae(r)===0&&Me(o,t)===1}i(Rt,"awakeAngelGuards");function Gs(e,n){let t=e.manaCount;for(let o=0;o<t;o+=1)if(d(e.manaIndices,o)===n){for(let r=o+1;r<t;r+=1)e.manaIndices[r-1]=d(e.manaIndices,r);e.manaIndices[t-1]=0,e.manaCount=t-1;return}throw new RangeError(`missing fast mana index: ${n}`)}i(Gs,"removeManaIndex");function Ks(e,n){let t=e.manaCount;if(t>=e.manaIndices.length)throw new RangeError("fast mana index capacity exceeded");let o=t;for(;o>0&&d(e.manaIndices,o-1)>n;)e.manaIndices[o]=d(e.manaIndices,o-1),o-=1;e.manaIndices[o]=n,e.manaCount=t+1}i(Ks,"insertManaIndex");function K(e,n,t){let o=g(e.cells,n);if(o!==t){if(o!==0){e.hashLo^=fo(n,o),e.hashHi^=po(n,o);let r=G(o);if(r===H){let a=ue(ce(o),fe(o));d(e.monLocations,a)===n&&(e.monLocations[a]=-1)}else if(r===J){let a=x(o);(a===1||a===2)&&(e.freeMana[a-1]=d(e.freeMana,a-1)-1),Gs(e,n)}}if(e.cells[n]=t,t!==0){e.hashLo^=fo(n,t),e.hashHi^=po(n,t);let r=G(t);if(r===H)e.monLocations[ue(ce(t),fe(t))]=n;else if(r===J){let a=x(t);(a===1||a===2)&&(e.freeMana[a-1]=d(e.freeMana,a-1)+1),Ks(e,n)}}}}i(K,"setCell");function ko(e){return rt(ce(e),fe(e),ae(e),0,0)}i(ko,"plainMonCell");function Kn(e,n,t){return rt(ce(e),fe(e),ae(e),n,t)}i(Kn,"carryingMonCell");function wa(e,n){e.potions[n]=d(e.potions,n)+1}i(wa,"addPotion");function sr(e,n,t,o){if(x(n)===0&&L(n)===0&&o===mn){K(e,t,Kn(n,0,Te));return}K(e,t,n),wa(e,fe(n))}i(sr,"collectConsumableAt");function js(e,n){e.active===0?e.whiteScore+=n:e.blackScore+=n}i(js,"addScore");function mr(e){if(e.actionsUsed<_e){e.actionsUsed+=1;return}e.potions[e.active]=d(e.potions,e.active)-1}i(mr,"consumeAction");function Oa(e,n){let t=ce(n),o=fe(n),r=d(Jo,ue(t,o));K(e,r,rt(t,o,2,0,0))}i(Oa,"faintMonAt");function $s(e){let n=g(e.cells,tt);G(n)===H&&x(n)===0&&L(n)===0?K(e,tt,Kn(n,be,0)):K(e,tt,Cn(be))}i($s,"supermanaBackToBase");function qs(e,n,t){let o=x(n);o===be?$s(e):o!==0&&K(e,t,Cn(o)),L(n)===Te&&K(e,t,0)}i(qs,"releaseFaintedCarry");function fr(e,n,t){Oa(e,n),qs(e,n,t)}i(fr,"faintTargetAndReleaseCarry");function pr(e,n,t){js(e,De(t,e.active));let o=g(e.cells,n);G(o)===H?K(e,n,ko(o)):K(e,n,0)}i(pr,"scoreCarriedManaAt");function Hs(e,n){let t=ze(n),o=Ne(n),r=g(e.cells,t),a=g(e.cells,o),s=x(r);if(e.monsMoves+=1,K(e,t,0),K(e,o,r),a!==0){let u=G(a);u===J?(s!==0&&K(e,t,Cn(s)),K(e,o,Kn(r,x(a),0))):u===me&&L(a)===Ce&&sr(e,r,o,xt(n))}s!==0&&en(w(e.squares,o))&&pr(e,o,s)}i(Hs,"applyMonMove");function zs(e,n){let t=ze(n),o=Ne(n),r=x(g(e.cells,t)),a=g(e.cells,o);e.manaMoves+=1,K(e,t,0),K(e,o,Cn(r)),a!==0&&K(e,o,Kn(a,r,0)),en(w(e.squares,o))&&pr(e,o,r)}i(zs,"applyManaMove");function Xs(e,n){let t=Ne(n),o=g(e.cells,t);mr(e),K(e,t,0),fr(e,o,t)}i(Xs,"applyMysticAction");function Qs(e,n){let t=ze(n),o=Ne(n),r=xt(n),a=r===lr?Se:ct(n),s=g(e.cells,t),u=g(e.cells,o),c=d(Jo,ue(ce(s),fe(s))),l=L(u)!==Te||a===Se||a===c;return K(e,t,0),a===Se?K(e,o,ko(s)):K(e,o,0),mr(e),u!==0&&(fr(e,u,o),L(u)===Te&&Oa(e,s)),a!==Se&&(r===mn?K(e,a,Kn(s,0,Te)):(K(e,a,ko(s)),r===jn&&wa(e,fe(s)))),l}i(Qs,"applyDemonAction");function Ys(e,n){let t=ze(n),o=Ne(n),r=g(e.cells,t),a=g(e.cells,o);K(e,o,0),K(e,t,ko(r)),fr(e,a,o)}i(Ys,"applyBombAttack");function Zs(e,n){let t=Ne(n),o=ct(n),r=xt(n),a=g(e.cells,t),s=g(e.cells,o),u=x(a);if(mr(e),K(e,t,0),K(e,o,a),s!==0){let c=G(a);if(c===H){let l=G(s);l===J?(u!==0&&K(e,t,Cn(u)),K(e,o,Kn(a,x(s),0))):l===me&&sr(e,a,o,r)}else c===J?K(e,o,Kn(s,u,0)):c===me&&sr(e,s,o,r)}u!==0&&en(w(e.squares,o))&&pr(e,o,u)}i(Zs,"applySpiritAction");function br(e){let n=nr(e.whiteScore,e.blackScore);return n===void 0?-1:$e(n)}i(br,"positionWinner");function xa(e){return ho(e.firstTurn,e.actionsUsed,d(e.potions,e.active))}i(xa,"canUseAction");function Ra(e,n){return d(e.freeMana,e.active)===0?!1:tr(e.firstTurn,e.monsMoves,e.manaMoves,e.actionsUsed,d(e.potions,e.active),n!==0,!0)}i(Ra,"manaStartsAllowed");function ut(e,n){if(!at(w(e.squares,n)))return!1;let t=g(e.cells,n);return t===0||G(t)===H&&ce(t)===he&&x(t)===0&&L(t)===0}i(ut,"manaMoveAllowed");function Js(e){let n=e.active+1;for(let t=0;t<e.manaCount;t+=1){let o=d(e.manaIndices,t),r=g(e.cells,o);if(G(r)!==J||x(r)!==n)continue;let a=d(le.starts,o),s=d(le.counts,o);for(let u=0;u<s;u+=1){let c=d(le.list,a+u);if(ut(e,c))return!0}}return!1}i(Js,"hasMovableFreeRegularMana");function ec(e){let t=!(!e.firstTurn&&wn(e.firstTurn,e.manaMoves)&&!dn(e.monsMoves))||d(e.freeMana,e.active)!==0&&Js(e);return or(e.firstTurn,e.monsMoves,e.manaMoves,t)}i(ec,"shouldAdvanceTurn");function nc(e){e.active^=1,e.firstTurn=!1,e.actionsUsed=0,e.manaMoves=0,e.monsMoves=0;let n=e.active;for(let t=0;t<ln;t+=1){let o=d(e.monLocations,ue(t,n));if(o<0)continue;let r=g(e.cells,o),a=ae(r);a===0||x(r)!==0||L(r)!==0||K(e,o,rt(ce(r),fe(r),a-1,x(r),L(r)))}}i(nc,"advanceTurn");function _a(e,n){let t=e,o=st(n),r=!0;switch(o){case tn:Hs(t,n);break;case Mo:zs(t,n);break;case cr:Xs(t,n);break;case He:r=Qs(t,n);break;case On:Zs(t,n);break;case ur:Ys(t,n);break;default:throw new RangeError(`unsupported fast move type: ${o}`)}let a=br(t);return a===-1&&ec(t)&&nc(t),r?a:dr}i(_a,"applyFastMove");function Na(e){switch(e){case A.Bomb:return Te;case A.Potion:return fa;case A.BombOrPotion:return Ce}}i(Na,"consumableCode");function Pa(e){return e.kind==="supermana"?be:$e(e.color)===0?Et:vt}i(Pa,"manaCode");var La=2147483647;function Fa(e,n,t){if(!Number.isSafeInteger(t)||t<0||n.whitePotionsCount>La-t||n.blackPotionsCount>La-t||n.turnNumber>Number.MAX_SAFE_INTEGER-t)return!1;let o;try{o=new Uint8Array(e.monLocations.length)}catch(a){if(a instanceof RangeError)return!1;throw a}let r=0;for(let a of n.board.items){if(a===void 0)continue;if(In(a)!==void 0&&(r+=1,r>e.manaIndices.length))return!1;let s=$(a);if(s===void 0)continue;let u=ue(qe[s.kind],$e(s.color));if(o[u]!==0)return!1;o[u]=1}try{tc(e,n)}catch(a){if(It(a))return!1;throw a}return!0}i(Fa,"tryLoadPosition");function tc(e,n){let t;try{t=new Uint16Array(121)}catch(r){Re(r)}let o=n.board.items;for(let r=0;r<121;r+=1){let a=o[r];if(a!==void 0)switch(a.kind){case"mon":t[r]=ao(a.mon,0,0);break;case"mana":t[r]=Cn(Pa(a.mana));break;case"mon-with-mana":t[r]=ao(a.mon,Pa(a.mana),0);break;case"mon-with-consumable":t[r]=ao(a.mon,0,Na(a.consumable));break;case"consumable":t[r]=ba(Na(a.consumable));break}}e.reset({cells:t,squares:io(n.variant()),whiteScore:n.whiteScore,blackScore:n.blackScore,active:$e(n.activeColor),monsMoves:n.monsMovesCount,manaMoves:n.manaMovesCount,actionsUsed:n.actionsUsedCount,potions:[n.whitePotionsCount,n.blackPotionsCount],firstTurn:n.isFirstTurn()})}i(tc,"loadPosition");function Io(e){return{kind:"location",location:nt(e)}}i(Io,"locationInput");function oc(e){return{kind:"modifier",modifier:e===mn?X.SelectBomb:X.SelectPotion}}i(oc,"modifierInput");function Ba(e){let n=st(e),t=[Io(ze(e)),Io(Ne(e))];n===On?t.push(Io(ct(e))):n===He&&ct(e)!==Se&&t.push(Io(ct(e)));let o=xt(e);return(o===mn||o===jn)&&(n===tn||n===He||n===On)&&t.push(oc(o)),t}i(Ba,"moveToInputs");var Ao=1e6,rc=-2147483648,ac=2147483647,ic=["scoreUnit","potion","bomb","activeMon","faintMon","faintDrainer","faintCooldownStep","drainerCloseToMana","drainerCloseToOwnPool","drainerCloseToSupermana","carrierCloseToPool","carrierPointBonus","carrierScoresThisTurn","carrierScoresNextTurn","winningCarrier","drainerPickupScoresThisTurn","manaToOwnerPool","manaPointsAttraction","manaDrainerControl","supermanaDrainerControl","monCloseToCenter","spiritCloseToEnemy","spiritOnOwnBase","angelCloseToDrainer","angelGuardingDrainer","attackerCloseToEnemyDrainer","drainerThreatImmediate","drainerThreatWalk","carrierThreatFactor","manaToNearestPool","manaStepQueue1","manaStepQueue2","manaStepQueue3","manaStepQueue4","manaStepQueue5","manaStepWinThreat","drainerTripTurn1","drainerTripTurn2","drainerTripTurn3","drainerTripTurn4","supermanaCarrier","scoreShape10","scoreShape20","scoreShape21","scoreShape30","scoreShape31","scoreShape32","tripGradient","raceHalfTurn","threatMoverScaleSpare","threatMoverScaleFew","tripTwoPointScale"];function yr(e){if(typeof e!="object"||e===null||Array.isArray(e))throw new TypeError("fast evaluation weights must be an object");let n=e,t={scoreUnit:0,potion:0,bomb:0,activeMon:0,faintMon:0,faintDrainer:0,faintCooldownStep:0,drainerCloseToMana:0,drainerCloseToOwnPool:0,drainerCloseToSupermana:0,carrierCloseToPool:0,carrierPointBonus:0,carrierScoresThisTurn:0,carrierScoresNextTurn:0,winningCarrier:0,drainerPickupScoresThisTurn:0,manaToOwnerPool:0,manaPointsAttraction:0,manaDrainerControl:0,supermanaDrainerControl:0,monCloseToCenter:0,spiritCloseToEnemy:0,spiritOnOwnBase:0,angelCloseToDrainer:0,angelGuardingDrainer:0,attackerCloseToEnemyDrainer:0,drainerThreatImmediate:0,drainerThreatWalk:0,carrierThreatFactor:0,manaToNearestPool:0,manaStepQueue1:0,manaStepQueue2:0,manaStepQueue3:0,manaStepQueue4:0,manaStepQueue5:0,manaStepWinThreat:0,drainerTripTurn1:0,drainerTripTurn2:0,drainerTripTurn3:0,drainerTripTurn4:0,supermanaCarrier:0,scoreShape10:0,scoreShape20:0,scoreShape21:0,scoreShape30:0,scoreShape31:0,scoreShape32:0,tripGradient:0,raceHalfTurn:0,threatMoverScaleSpare:0,threatMoverScaleFew:0,tripTwoPointScale:0};for(let o of ic){let r=n[o];if(typeof r!="number")throw new TypeError(`weights.${o} must be a number`);if(!Number.isSafeInteger(r)||r<-Ao||r>Ao)throw new RangeError(`weights.${o} must be a safe integer from -${Ao} through ${Ao}`);t[o]=r}return Object.freeze(t)}i(yr,"normalizeEvalWeights");var Rn=yr({scoreUnit:12e3,potion:240,bomb:1200,activeMon:45,faintMon:520,faintDrainer:900,faintCooldownStep:80,drainerCloseToMana:330,drainerCloseToOwnPool:280,drainerCloseToSupermana:180,carrierCloseToPool:1600,carrierPointBonus:420,carrierScoresThisTurn:900,carrierScoresNextTurn:700,winningCarrier:8e3,drainerPickupScoresThisTurn:420,manaToOwnerPool:170,manaPointsAttraction:350,manaDrainerControl:26,supermanaDrainerControl:40,monCloseToCenter:210,spiritCloseToEnemy:200,spiritOnOwnBase:180,angelCloseToDrainer:150,angelGuardingDrainer:260,attackerCloseToEnemyDrainer:150,drainerThreatImmediate:2100,drainerThreatWalk:720,carrierThreatFactor:2,manaToNearestPool:0,manaStepQueue1:3600,manaStepQueue2:2500,manaStepQueue3:1050,manaStepQueue4:800,manaStepQueue5:800,manaStepWinThreat:8e3,drainerTripTurn1:4200,drainerTripTurn2:2200,drainerTripTurn3:1e3,drainerTripTurn4:400,supermanaCarrier:4e3,scoreShape10:-6824,scoreShape20:-6978,scoreShape21:-3085,scoreShape30:-8259,scoreShape31:-4275,scoreShape32:-1052,tripGradient:400,raceHalfTurn:900,threatMoverScaleSpare:25,threatMoverScaleFew:55,tripTwoPointScale:290}),pe=99,ge=Math.max(pe+1,11),Da=3,Ve=Ie+2,Co=ee+1,hr=0,Ka=1,kr=2,xn=3,ja=3,$a=Co,pn=6,Va=pn*2+1,_t=6,Mr=2,Ua=12;function fn(e){let n=_n(ge);for(let t=0;t<ge;t+=1)n[t]=Math.trunc(e/(t+1));return n}i(fn,"distanceTable");function sc(e){let n=_n(ge),t=e.manaToNearestPool;for(let o=0;o<ge;o+=1){let r=o<=1?e.manaStepQueue1:o===2?e.manaStepQueue2:o===3?e.manaStepQueue3:o===4?e.manaStepQueue4:e.manaStepQueue5;n[o]=r+Math.trunc(t/(o+1))}return n}i(sc,"manaStepQueueTable");function cc(e){let n=_n(Ve*Ve),t=new Set,o=i((r,a,s)=>{if(r===a)throw new RangeError("score shape cells must be off the diagonal");let u=r*Ve+a,c=a*Ve+r;if(t.has(u)||t.has(c))throw new RangeError("score shape cells must be written once");t.add(u),t.add(c),n[u]=s,n[c]=-s},"set");o(1,0,e.scoreShape10),o(2,0,e.scoreShape20),o(2,1,e.scoreShape21),o(3,0,e.scoreShape30),o(3,1,e.scoreShape31),o(3,2,e.scoreShape32);for(let r=0;r+1<Ve;r+=1)for(let a=0;a<Ve;a+=1)if(e.scoreUnit+d(n,(r+1)*Ve+a)-d(n,r*Ve+a)<0)throw new RangeError("score shape corrections must keep the score monotone");return n}i(cc,"scoreShapeTable");function qa(e){let n=_n(ge);for(let t=0;t<ge;t+=1){let o=1+Math.ceil(t/ee);n[t]=o<=1?e.drainerTripTurn1:o===2?e.drainerTripTurn2:o===3?e.drainerTripTurn3:e.drainerTripTurn4}return n}i(qa,"drainerTripTable");function uc(e){let n=qa(e);for(let t=0;t<ge;t+=1)n[t]=Xa(d(n,t),e.tripTwoPointScale,"two-point trip");return n}i(uc,"twoPointTripTable");function lc(e){let n=_n(Va);for(let t=0;t<Va;t+=1)n[t]=(t-pn)*e;return n}i(lc,"raceTable");function dc(e){let n=_n(ge);for(let t=0;t<ge;t+=1){let o=t>Ua?Ua:t;n[t]=o*e}return n}i(dc,"tripStepTable");function mc(e){let n=_n(Da*ge);for(let t=0;t<Da;t+=1){let o=t*ge;for(let r=0;r<ge;r+=1)n[o+r]=Math.trunc(t*e/(r+1))}return n}i(mc,"manaPointsAttractionTable");function Ha(e,n){return n===hr?100:n===kr?e.threatMoverScaleSpare:e.threatMoverScaleFew}i(Ha,"moverScale");function za(e,n,t){let o=e*n;if(!Number.isSafeInteger(o))throw new RangeError(`${t} derived value requires a safe integer product`);return Math.trunc(o/100)}i(za,"scaledSafeInteger");function Xa(e,n,t){let o=za(e,n,t);if(o<rc||o>ac)throw new RangeError(`${t} derived value must fit a signed 32-bit integer`);return o}i(Xa,"scaledInt32");function fc(e){let n=_n(2*xn);for(let t=0;t<2;t+=1){let o=t===1?e.carrierThreatFactor:1;for(let r=0;r<xn;r+=1)n[t*xn+r]=Xa(e.drainerThreatImmediate*o,Ha(e,r),"immediate threat")}return n}i(fc,"threatImmediateTable");function pc(e){let n=bc(2*xn*Co);for(let t=0;t<2;t+=1){let o=t===1?e.carrierThreatFactor:1;for(let r=0;r<xn;r+=1){let a=Ha(e,r),s=(t*xn+r)*Co;for(let u=0;u<Co;u+=1)n[s+u]=za(Math.trunc(e.drainerThreatWalk*o*(ee+1-u)/ee),a,"walking threat")}}return n}i(pc,"threatWalkTable");function _n(e){try{return new Int32Array(e)}catch(n){Re(n)}}i(_n,"createInt32Table");function bc(e){try{return new Float64Array(e)}catch(n){Re(n)}}i(bc,"createFloat64Table");function yc(e,n){let t=pn*Math.abs(e.raceHalfTurn);if(t===0)return;let o=Ie-Mr;for(let r=0;r<o;r+=1){let a=e.scoreUnit+d(n,o*Ve+r)-d(n,(o-1)*Ve+r);if(t>a)throw new RangeError("race correction must not outweigh the point that opens the endgame band")}}i(yc,"assertRaceStaysMonotone");function Qa(e){let n=cc(e);return yc(e,n),{weights:e,manaPointsAttraction:mc(e.manaPointsAttraction),manaToOwnerPool:fn(e.manaToOwnerPool),manaToNearestPool:sc(e),scoreShape:n,drainerTrip:qa(e),drainerTripTwoPoint:uc(e),race:lc(e.raceHalfTurn),tripStep:dc(e.tripGradient),carrierCloseToPool:fn(e.carrierCloseToPool),drainerCloseToMana:fn(e.drainerCloseToMana),drainerCloseToOwnPool:fn(e.drainerCloseToOwnPool),drainerCloseToSupermana:fn(e.drainerCloseToSupermana),angelCloseToDrainer:fn(e.angelCloseToDrainer),spiritCloseToEnemy:fn(e.spiritCloseToEnemy),monCloseToCenter:fn(e.monCloseToCenter),attackerCloseToEnemyDrainer:fn(e.attackerCloseToEnemyDrainer),threatImmediate:fc(e),threatWalk:pc(e)}}i(Qa,"createEvalTables");var go=Qa(Rn),Wa=new WeakMap;function Ya(e){if(e===Rn)return Rn;if(!Object.isFrozen(e))return yr(e);let n=Wa.get(e);return n===void 0&&(n=yr(e),Wa.set(e,n)),n}i(Ya,"memoizedNormalizedEvalWeights");var Ga=new WeakMap;function Za(e){if(e===Rn)return go;let n=Ga.get(e);return n===void 0&&(n=Qa(e),Ga.set(e,n)),n}i(Za,"memoizedEvalTables");var bn=1e6;function Ja(e,n){return w(ya,n*121+e)}i(Ja,"ownPoolDistance");var ei=Int32Array.of(0,10,110,120);function hc(e,n){for(let t=0;t<ei.length;t+=1){let o=d(ei,t);if(Me(n,o)===1&&ut(e,o))return!0}return!1}i(hc,"hasAdjacentScoringPool");function ni(e,n,t,o){return d(n,t>o?t-o:0)-d(e.tripStep,t)}i(ni,"tripValue");function kc(e){return w(ha,e)}i(kc,"centerDistance");var Sr=new WeakMap,Nt,lt;function Mc(e,n){if(e?.length!==n.length)return!1;for(let t=0;t<n.length;t+=1)if(w(e,t)!==w(n,t))return!1;return!0}i(Mc,"sameSquareContent");function Sc(e){try{let n=new Uint8Array(14641).fill(pe),t=new Int32Array(121),o=new Int32Array(121),r=[],a=[];for(let s=0;s<121;s+=1){let u=d(gn.starts,s),c=d(gn.counts,s);for(let f=0;f<121;f+=1){let p=pe;for(let b=0;b<c;b+=1){let k=d(gn.list,u+b);if(w(e,k)>=se)continue;let C=Me(f,k);C<p&&(p=C)}n[s*121+f]=p}t[s]=r.length;let l=d(En.starts,s),m=d(En.counts,s);for(let f=0;f<m;f+=1){let p=d(En.list,l+f);if(w(e,p)>=se)continue;let b=uo(s,p),k=w(e,b);k===Je||k>=se||(r.push(p),a.push(b))}o[s]=r.length-d(t,s)}return{mysticSteps:n,demonStarts:t,demonCounts:o,demonOrigins:new Int32Array(r),demonBetween:new Int32Array(a)}}catch(n){Re(n)}}i(Sc,"buildAttackTables");function Ic(e){if(e===Nt&<!==void 0)return lt;let n=Sr.get(e);if(n!==void 0)return Nt=e,lt=n,n;if(lt!==void 0&&Mc(Nt,e)){let o=lt;return Sr.set(e,o),Nt=e,o}let t=Sc(e);return Sr.set(e,t),Nt=e,lt=t,t}i(Ic,"attackTablesFor");function Ac(e,n,t,o){if(!ot(g(e.cells,n)))return pe;let r=t^1,a=pe,s=Ic(e.squares);for(let u=0;u<ln;u+=1){let c=d(e.monLocations,ue(u,r));if(c<0)continue;let l=g(e.cells,c);if(G(l)!==H)continue;if(L(l)===Te){let p=Me(c,n)-3,b=p<0?0:p;if(b===0)return 0;b<a&&(a=b);continue}if(ae(l)!==0||L(l)!==0||o||x(l)!==0)continue;if(u===to){let p=w(s.mysticSteps,n*121+c);if(p===0)return 0;p<a&&(a=p);continue}if(u!==Tt)continue;let m=d(s.demonStarts,n),f=d(s.demonCounts,n);for(let p=0;p<f;p+=1){let b=d(s.demonBetween,m+p);if(b!==c&&g(e.cells,b)!==0)continue;let k=Me(c,d(s.demonOrigins,m+p));if(k===0)return 0;k<a&&(a=k)}}return a}i(Ac,"estimatedAttackSteps");function ti(e,n,t=0){let o=n.weights,r=(e.whiteScore-e.blackScore)*o.scoreUnit+d(n.scoreShape,e.whiteScore*Ve+e.blackScore)+(d(e.potions,0)-d(e.potions,1))*o.potion,a=d(e.monLocations,ue(he,0)),s=d(e.monLocations,ue(he,1)),u=a>=0&&ae(g(e.cells,a))===0,c=s>=0&&ae(g(e.cells,s))===0,l=pe,m=pe,f=pe,p=pe,b=pe,k=pe,C=ee-e.monsMoves,I=t!==0,_=Ie-e.whiteScore,N=Ie-e.blackScore,F=0,D=_t,P=_t,V=_t,U=_t,ne=!1,Ee=!1;if(I){if(a>=0){let S=g(e.cells,a);ne=ae(S)<=1&&x(S)===0&&L(S)===0}if(s>=0){let S=g(e.cells,s);Ee=ae(S)<=1&&x(S)===0&&L(S)===0}}let Qe=0,sn=0,Ye=!1,kn=!1,zn=0,de=0,we=0,We=0;for(let S=0;S<e.manaCount;S+=1){let v=d(e.manaIndices,S),Ge=g(e.cells,v);if(G(Ge)!==J)continue;let j=x(Ge),z=u?Me(a,v):pe,te=c?Me(s,v):pe;z<l&&(l=z),te<m&&(m=te);let ie=w(nn,v);if(u){let T=z+ie;j===Et&&T<f?f=T:j!==Et&&T<b&&(b=T)}if(c){let T=te+ie;j===vt&&T<p?p=T:j!==vt&&T<k&&(k=T)}if(I){let T=!1;if(j!==be&&ie<=1&&hc(e,v)&&(T=!0,j-1===0?zn<2&&(zn+=1):de<2&&(de+=1)),ne&&(u?z:Me(a,v))+ie<=ee){let oe=De(j,0);oe>Qe?(Qe=oe,Ye=T&&j-1===0):oe===Qe&&!(T&&j-1===0)&&(Ye=!1)}if(Ee&&(c?te:Me(s,v))+ie<=ee){let oe=De(j,1);oe>sn?(sn=oe,kn=T&&j-1===1):oe===sn&&!(T&&j-1===1)&&(kn=!1)}}let Ke=te-z;if(Ke>4&&(Ke=4),Ke<-4&&(Ke=-4),o.manaPointsAttraction!==0){let T=n.manaPointsAttraction;u&&(r+=d(T,De(j,0)*ge+z)),c&&(r-=d(T,De(j,1)*ge+te))}if(j===be)r+=o.supermanaDrainerControl*Ke;else{let T=j-1,R=T===0?1:-1;r+=R*d(n.manaToOwnerPool,Ja(v,T)),r+=R*d(n.manaToNearestPool,ie),r+=o.manaDrainerControl*Ke,ie<=2&&(T===0?_:N)<=1&&(F|=T===0?1:2),T===0?ie<D&&(D=ie):ie<P&&(P=ie)}}F!==0&&(r+=o.manaStepWinThreat*(((F&1)===0?0:1)-((F&2)===0?0:1)));for(let S=0;S<Ae;S+=1){let v=S===0?1:-1,Ge=S^1;for(let j=0;j<ln;j+=1){let z=d(e.monLocations,ue(j,S));if(z<0)continue;let te=g(e.cells,z);if(G(te)!==H)continue;let ie=ae(te);ie!==0&&(r-=v*((j===he?o.faintDrainer:o.faintMon)+o.faintCooldownStep*ie));let Ke=w(e.squares,z);ie===0&&Ke<se&&(r+=v*o.activeMon);let T=x(te);if(T!==0){let R=De(T,S),oe=w(nn,z);r+=v*(d(n.carrierCloseToPool,oe)+R*o.carrierPointBonus),T===be&&(r+=v*o.supermanaCarrier),S===e.active&&oe<=C?r+=v*o.carrierScoresThisTurn*R:S!==e.active&&oe<=ee&&(r+=v*o.carrierScoresNextTurn*R,I&&(S===0?R>we&&(we=R):R>We&&(We=R)));let je=S===0?e.whiteScore:e.blackScore;R>=Ie-je&&(r+=v*o.winningCarrier)}else L(te)===Te&&(r+=v*o.bomb);if(ie===0)if(j===he){let R=0,oe=S===0?l:m,je=S===0?f:p,Fn=S===0?b:k,jt=je<Fn?je:Fn,$t=S===e.active?C:ee,Fr=n.drainerTrip,qt=T!==0?w(nn,z):L(te)!==0?pe:je;T===0&&L(te)===0&&Fn<pe&&(je>=pe||ni(n,n.drainerTripTwoPoint,Fn,$t)>ni(n,n.drainerTrip,je,$t))&&(Fr=n.drainerTripTwoPoint,qt=Fn),R-=d(n.tripStep,qt);let Br=qt>$t?qt-$t:0,Ht=1+((Br+ee-1)/ee|0);S===0?Ht<V&&(V=Ht):Ht<U&&(U=Ht),R+=d(Fr,Br),R+=d(n.drainerCloseToMana,oe),R+=d(n.drainerCloseToOwnPool,Ja(z,S)),R+=d(n.drainerCloseToSupermana,Me(z,tt)),T===0&&L(te)===0&&S===e.active&&jt<=C&&(R+=o.drainerPickupScoresThisTurn),r+=v*R;let Dr=Rt(e,S,z),Vo=Ac(e,z,S,Dr),zi=T!==0,Xi=S!==e.active||C===0?hr:C>=ja?kr:Ka,Vr=(zi?xn:0)+Xi;Vo===0?r-=v*d(n.threatImmediate,Vr):Vo<=ee&&(r-=v*(n.threatWalk[Vr*$a+Vo]??0)),Dr&&(r+=v*o.angelGuardingDrainer)}else if(j===wt){let R=S===0?a:s;R>=0&&(r+=v*d(n.angelCloseToDrainer,Me(z,R)))}else if(j===no){let R=pe;for(let oe=0;oe<ln;oe+=1){let je=d(e.monLocations,ue(oe,Ge));if(je<0)continue;let Fn=g(e.cells,je);if(ae(Fn)!==0)continue;let jt=Me(z,je);jt<R&&(R=jt)}r+=v*d(n.spiritCloseToEnemy,R),Ke>=se&&(r-=v*o.spiritOnOwnBase)}else{r+=v*d(n.monCloseToCenter,kc(z));let R=Ge===0?a:s,oe=Ge===0?u:c;R>=0&&oe&&(r+=v*d(n.attackerCloseToEnemyDrainer,Me(z,R)))}}}if(o.raceHalfTurn!==0&&(_<N?_:N)<=Mr){let S=e.manaMoves>0?1:0,v=D+(e.active===0?S:0),Ge=P+(e.active===1?S:0),j=V<v?V:v,te=(U<Ge?U:Ge)*2+(e.active===1?0:1)-(j*2+(e.active===0?0:1)),ie=te>pn?pn:te<-pn?-pn:te;r+=d(n.race,ie+pn)}if(I){let S=e.active^1,v=S===0?1:-1,Ge=S===0?Qe:sn,j=S===0?we:We,z=S===0?zn:de,te=z>0,ie=S===0?Ye:kn,Ke=z>=2||z===1&&!ie,T=Ge;T>0&&Ke&&(T+=1);let R=j;R>0&&te&&(R+=1),R>T&&(T=R),te&&T<1&&(T=1);let oe=S===0?e.whiteScore:e.blackScore;T>0&&oe+T>=Ie&&(r+=v*t)}return r}i(ti,"evaluateWithTables");var yn=704,Eo=1073741824;function Ft(e,n){return n?e+Eo:e}i(Ft,"encodeGeneratedMoves");function Pt(e){return e>=Eo?e-Eo:e}i(Pt,"generatedMoveCount");function Lt(e){return e>=Eo}i(Lt,"generatedMovesHadRawStartOption");function Ir(e,n){return G(e)===H&&fe(e)!==n&&ae(e)===0}i(Ir,"isEnemyAwakeMon");function Ar(e){let n=131072;return x(e)!==0&&(n+=1<<20),ce(e)===he&&(n+=1<<19),n}i(Ar,"damagingAttackKey");function Cc(e,n,t){let o=g(e.cells,t),r=w(e.squares,t),a=G(n),s=a===H,u=x(n),c=L(n),l=o===0?-1:G(o),m=l===H&&(x(o)!==0||L(o)!==0);if(l===H)if(m){if(a!==me||c!==Ce)return 0}else{if(s)return 0;if(a===J){if(ce(o)!==he||ae(o)!==0)return 0}else if(c!==Ce)return 0}else if(l===J){if(!s||ce(n)!==he||ae(n)!==0)return 0}else if(l===me&&(L(o)!==Ce||!s))return 0;if(r>=se){if(!s||oo(r)!==ce(n)||ro(r)!==fe(n)||u!==0||c!==0)return 0}else if(r===Je){let f=l===J&&x(o)===be,p=s&&ce(n)===he;if(!(u===be||u===0&&p&&(o===0||f)||p&&f))return 0}return o===0?1:s?u===0&&c===0?l===me?L(o)===Ce?2:0:1:u!==0?l===me?L(o)===Ce?1:0:1:l!==me||L(o)!==Ce?0:1:a===J?l!==H||m?0:1:l!==H?0:m?c===Ce?1:0:2}i(Cc,"spiritDestinationOptionCount");function gc(e,n,t,o,r,a){let s=r,u=!1,c=ce(t),l=fe(t),m=x(t),f=L(t),p=e.active,b=w(nn,n),k=c===he?1024:0,C=d(le.starts,n),I=d(le.counts,n);for(let _=0;_<I;_+=1){let N=d(le.list,C+_),F=g(e.cells,N),D=w(e.squares,N),P=F===0?-1:G(F),V;if(m!==0)P===H?V=!1:P===J||P===me?V=!0:V=at(D)||D===Je&&m===be;else if(f!==0)P===me?V=!0:P===-1?V=at(D):V=!1;else{let ne;P===H?ne=!1:P===J?ne=c===he:ne=!0,ne?D>=se?V=oo(D)===c&&ro(D)===l:D===Je?V=c===he&&(F===0||P===J&&x(F)===be):V=!0:V=!1}if(!V||(u=!0,P===me&&L(F)!==Ce))continue;let U=0;m!==0&&en(D)&&(U+=(1<<21)+De(m,p)*(1<<18)),F!==0&&(P===J?U+=65536+De(x(F),p)*512:P===me&&(U+=16384)),m!==0?U+=(b-w(nn,N))*2048+4096:U+=k,P===me&&L(F)===Ce&&m===0&&f===0?(a[s]=U,o[s]=ye(tn,n,N,Se,mn),s+=1,a[s]=U,o[s]=ye(tn,n,N,Se,jn),s+=1):(a[s]=U,o[s]=ye(tn,n,N,Se,on),s+=1)}return Ft(s,u)}i(gc,"generateMonMoves");function Ec(e,n,t,o,r){let a=e.active,s=o,u=!1,c=d(gn.starts,n),l=d(gn.counts,n);for(let m=0;m<l;m+=1){let f=d(gn.list,c+m),p=g(e.cells,f);Ir(p,a)&&(Rt(e,a^1,f)||(u=!0,ot(p)&&(r[s]=Ar(p),t[s]=ye(cr,n,f,Se,on),s+=1)))}return Ft(s,u)}i(Ec,"generateMysticMoves");function vc(e,n,t,o,r){let a=e.active,s=o,u=!1,c=Tt,l=a,m=d(En.starts,n),f=d(En.counts,n);for(let p=0;p<f;p+=1){let b=d(En.list,m+p),k=g(e.cells,b);if(!Ir(k,a)||Rt(e,a^1,b))continue;let C=uo(n,b);if(g(e.cells,C)!==0)continue;let I=w(e.squares,C);if(I===Je||I>=se||(u=!0,!ot(k)))continue;let _=Ar(k),N=w(e.squares,b),F=x(k);if(!(F!==0&&F!==be||N===Je||N>=se)){r[s]=_,t[s]=ye(He,n,b,Se,on),s+=1;continue}let P=s,V=d(le.starts,b),U=d(le.counts,b);for(let ne=0;ne<U;ne+=1){let Ee=d(le.list,V+ne),Qe=g(e.cells,Ee),sn=Qe===0?-1:G(Qe);if(sn!==-1&&sn!==me)continue;let Ye=w(e.squares,Ee);(at(Ye)||Ye>=se&&oo(Ye)===c&&ro(Ye)===l)&&(sn===me?L(Qe)===Ce?(r[s]=_,t[s]=ye(He,n,b,Ee,mn),s+=1,r[s]=_,t[s]=ye(He,n,b,Ee,jn),s+=1):(r[s]=_,t[s]=ye(He,n,b,Ee,lr),s+=1):(r[s]=_,t[s]=ye(He,n,b,Ee,on),s+=1))}s===P&&(r[s]=_,t[s]=ye(He,n,b,Se,on),s+=1)}return Ft(s,u)}i(vc,"generateDemonMoves");function Tc(e,n,t,o,r){let a=o,s=!1,u=e.active,c=d(so.starts,n),l=d(so.counts,n);for(let m=0;m<l;m+=1){let f=d(so.list,c+m),p=g(e.cells,f);if(p===0||G(p)===H&&ae(p)!==0)continue;s=!0;let b=x(p),k=G(p)===J,C=w(nn,f),I=(1<<21)+De(b,u)*(1<<18),_=d(le.starts,f),N=d(le.counts,f);for(let F=0;F<N;F+=1){let D=d(le.list,_+F),P=Cc(e,p,D);if(P===0)continue;let V=0;b!==0&&en(w(e.squares,D))?V+=8192+I:k&&wc(e,D,C,u)&&(V+=40960),P===2?(r[a]=V,t[a]=ye(On,n,f,D,mn),a+=1,r[a]=V,t[a]=ye(On,n,f,D,jn),a+=1):(r[a]=V,t[a]=ye(On,n,f,D,on),a+=1)}}return Ft(a,s)}i(Tc,"generateSpiritMoves");function wc(e,n,t,o){if(w(nn,n)<t)return!0;let r=g(e.cells,n);return G(r)===H&&ce(r)===he&&fe(r)===o&&ae(r)===0}i(wc,"advancesMana");function Oc(e,n,t,o,r){let a=e.active,s=o,u=!1,c=d(co.starts,n),l=d(co.counts,n);for(let m=0;m<l;m+=1){let f=d(co.list,c+m),p=g(e.cells,f);Ir(p,a)&&(u=!0,ot(p)&&(r[s]=Ar(p),t[s]=ye(ur,n,f,Se,on),s+=1))}return Ft(s,u)}i(Oc,"generateBombMoves");function xc(e,n,t,o,r){let a=o,s=d(le.starts,n),u=d(le.counts,n);for(let c=0;c<u;c+=1){let l=d(le.list,s+c),m=w(e.squares,l);ut(e,l)&&(r[a]=en(m)?(1<<21)+(1<<18):16,t[a]=ye(Mo,n,l,Se,on),a+=1)}return a}i(xc,"generateManaMoves");function Rc(e,n,t,o,r){let a=o;if(w(nn,n)!==1)return a;let s=d(le.starts,n),u=d(le.counts,n);for(let c=0;c<u;c+=1){let l=d(le.list,s+c),m=w(e.squares,l);!en(m)||!ut(e,l)||(r[a]=(1<<21)+(1<<18),t[a]=ye(Mo,n,l,Se,on),a+=1)}return a}i(Rc,"generateWinningManaMoves");var _c=new Int32Array(yn);function Cr(e,n,t=_c){let o=e.active,r=dn(e.monsMoves),a=xa(e),s=0,u=0;for(let c=0;c<ln;c+=1){let l=d(e.monLocations,ue(c,o));if(l<0)continue;let m=g(e.cells,l);if(G(m)!==H)continue;let f=!1,p=x(m),b=L(m),k=p!==0||b!==0;if(!(!k&&ae(m)!==0)){if(r){let C=gc(e,l,m,n,s,t);s=Pt(C),f||=Lt(C)}if(k){if(b===Te){let C=Oc(e,l,n,s,t);s=Pt(C),f||=Lt(C)}}else if(w(e.squares,l)<se&&a){if(c===to){let I=Ec(e,l,n,s,t);s=Pt(I),f||=Lt(I)}else if(c===Tt){let I=vc(e,l,n,s,t);s=Pt(I),f||=Lt(I)}else if(c===no){let I=Tc(e,l,n,s,t);s=Pt(I),f||=Lt(I)}}f&&(u+=1)}}if(Ra(e,u)){let c=o+1;for(let l=0;l<e.manaCount;l+=1){let m=d(e.manaIndices,l),f=g(e.cells,m);G(f)===J&&x(f)===c&&(s=xc(e,m,n,s,t))}}else if(d(e.freeMana,o)!==0&&wn(e.firstTurn,e.manaMoves)&&(o===0?e.whiteScore:e.blackScore)+1>=Ie){let c=o+1;for(let l=0;l<e.manaCount;l+=1){let m=d(e.manaIndices,l),f=g(e.cells,m);G(f)===J&&x(f)===c&&(s=Rc(e,m,n,s,t))}}if(s>n.length)throw new RangeError(`fast move buffer capacity exceeded: generated ${s} moves for ${n.length} slots`);return s}i(Cr,"generateMoves");var rn=48,vo=rn-2,Nn=bn-rn-1,To=Object.freeze({lateMoveReduction:!0,lateMoveIndex:3,lateMoveDeepIndex:8,moveCountPruning:!0,moveCountDepth:3,moveCountBase:4,moveCountFactor:5,futilityMargin:900,aspirationDelta:0,aspirationMinDepth:3,winsNextTurnThreat:0}),oi=new WeakMap;function ii(e){if(!(Object.isFrozen(e)&&(e.tuning===void 0||Object.isFrozen(e.tuning))))return ri(e);let t=oi.get(e);return t===void 0&&(t=ri(e),oi.set(e,t)),t}i(ii,"memoizedSearchLimits");function ri(e){if(typeof e!="object"||e===null||Array.isArray(e))throw new TypeError("fast search limits must be an object");let n=e,t=n.maxDepth;if(!Number.isSafeInteger(t)||t<0||t>vo)throw new RangeError(`maxDepth must be a safe integer from 0 through ${vo}`);let o=n.maxNodes;if(!Number.isSafeInteger(o)||o<0)throw new RangeError("maxNodes must be a nonnegative safe integer");let r=n.tuning;return Object.freeze({maxDepth:t,maxNodes:o,tuning:r===void 0?To:Nc(r)})}i(ri,"normalizeSearchLimits");function Nc(e){if(typeof e!="object"||e===null||Array.isArray(e))throw new TypeError("fast search tuning must be an object");let n=e;return Object.freeze({lateMoveReduction:ai(n,"lateMoveReduction"),lateMoveIndex:hn(n,"lateMoveIndex",yn),lateMoveDeepIndex:hn(n,"lateMoveDeepIndex",yn),moveCountPruning:ai(n,"moveCountPruning"),moveCountDepth:hn(n,"moveCountDepth",vo),moveCountBase:hn(n,"moveCountBase",yn),moveCountFactor:hn(n,"moveCountFactor",yn),futilityMargin:hn(n,"futilityMargin",Nn),aspirationDelta:hn(n,"aspirationDelta",Nn),aspirationMinDepth:hn(n,"aspirationMinDepth",vo),winsNextTurnThreat:hn(n,"winsNextTurnThreat",Nn)})}i(Nc,"normalizeSearchTuning");function ai(e,n){let t=e[n];if(typeof t!="boolean")throw new TypeError(`tuning.${n} must be a boolean`);return t}i(ai,"normalizedTuningBoolean");function hn(e,n,t){let o=e[n];if(typeof o!="number")throw new TypeError(`tuning.${n} must be a number`);if(!Number.isSafeInteger(o)||o<0||o>t)throw new RangeError(`tuning.${n} must be a safe integer from 0 through ${t}`);return o}i(hn,"normalizedTuningInteger");var $n=1<<20,Bt=new Int32Array(0);function Dt(e){try{return new Int32Array(e)}catch(n){Re(n)}}i(Dt,"allocateTranspositionPart");var wo=class{static{i(this,"TranspositionTable")}keyLo=Bt;keyHi=Bt;score=Bt;info=Bt;move=Bt;entries=0;generation=1;mask=0;deactivate(){this.mask=0}prepare(n){if(this.keyLo.length!==0)return this.mask=$n-1,!0;if(n())return!1;let t=Dt($n);if(n())return!1;let o=Dt($n);if(n())return!1;let r=Dt($n);if(n())return!1;let a=Dt($n);if(n())return!1;let s=Dt($n);return n()?!1:(this.keyLo=t,this.keyHi=o,this.score=r,this.info=a,this.move=s,this.entries=0,this.generation=1,this.mask=$n-1,!0)}clear(){this.keyLo.fill(0),this.keyHi.fill(0),this.score.fill(0),this.info.fill(0),this.move.fill(0),this.entries=0,this.generation=1}};var Pc=16,Vt=1<<Pc,Lc=Vt-1,Fc=1<<30,si=0,ci=1,ui=2,Bc=3,li=4194303,Dc=511,Vc=32768,Uc=1<<28,Wc=1<<24,Gc=1<<23,Pn=bn*2,di=i(()=>!1,"NO_TIMEOUT"),bi=Ae,yi=ee+1,hi=An+1,ki=_e+1,Mi=2,gr=4,Kc=bi*yi*hi*ki*Mi*gr*gr;if(mo.length!==er.length||mo.length<Kc)throw new RangeError("fast scalar hash table is too small for the configured state space");function jc(e,n){if(e===n)return!0;if(e?.length!==n.length)return!1;for(let t=0;t<n.length;t+=1)if(w(e,t)!==w(n,t))return!1;return!0}i(jc,"sameSquares");var Oo=class{static{i(this,"FastSearcher")}#e=[];#n=[];#t=[];#o;#r=new Int32Array(rn*2);#a=new Int32Array(Ae*121*121);#y=new Int32Array(rn+1);#s=new Int32Array(Vt);#h=new Int32Array(Vt);#b=new Int32Array(Vt);#d=new Float64Array(Vt);#c=0;#k;#M=0;#S;#m=go;#C=To;#g=0;#f=0;#E=0;#u=!1;#v=!1;#i=0;#I=di;constructor(){this.#o=new wo;for(let n=0;n<=rn;n+=1)this.#e.push(new So),this.#n.push(new Int32Array(yn)),this.#t.push(new Int32Array(yn))}get root(){return ke(this.#e,0)}get size(){return this.#o.entries}search(n,t,o=Rn){let r=ii(n),a=Ya(o);if(this.#v=!1,this.#i=0,br(this.root)!==-1)return{move:0,score:0,depth:0,nodes:0,supported:!0};this.#m=Za(a);let s=r.tuning;this.#C=s,this.#g=s.winsNextTurnThreat;let u=!jc(this.#S,this.root.squares);(a!==this.#k||s.winsNextTurnThreat!==this.#M||u)&&(this.#k=a,this.#M=s.winsNextTurnThreat,this.#S=this.root.squares,this.#c>=Fc&&(this.#c=0,this.#b.fill(0)),this.#c+=1),this.#f=0,this.#E=r.maxNodes,this.#u=!1,this.#I=t,this.#o.deactivate();try{this.#r.fill(0),this.#a.fill(0);let c=0,l=0,m=0;for(let f=1;f<=r.maxDepth;f+=1){if(f===2){if(this.#f>=this.#E||!this.#o.prepare(this.#I)){this.#u=!0;break}this.#N()}let p=-Pn,b=Pn;s.aspirationDelta>0&&m>0&&f>=s.aspirationMinDepth&&(p=l-s.aspirationDelta,b=l+s.aspirationDelta);let k=this.#w(f,c,p,b),C=0;for(;!this.#l()&&k.move!==0&&(k.score<=p||k.score>=b)&&(p>-Pn||b<Pn);){C+=1;let I=s.aspirationDelta*(1<<C);k.score<=p&&(p=C>=2?-Pn:k.score-I),k.score>=b&&(b=C>=2?Pn:k.score+I),k=this.#w(f,k.move,p,b)}if(k.move===0)break;if(this.#l()){m===0&&(c=k.move,l=k.score);break}if(c=k.move,l=k.score,m=f,!k.selective&&l>=bn-rn)break}return{move:c,score:l,depth:m,nodes:this.#f,supported:!this.#v}}finally{this.#o.deactivate(),this.#m=go,this.#C=To,this.#g=0,this.#I=di}}#N(){this.#o.generation+=1,this.#o.generation>li&&this.#o.clear()}#w(n,t,o,r){let a=ke(this.#e,0),s=ke(this.#n,0),u=Cr(a,s,ke(this.#t,0));if(u===0)return{move:0,score:0,selective:!1};this.#R(a,s,u,0,t);let c=ke(this.#t,0),l=o,m=0,f=-Pn,p=!1;for(let b=0;b<u;b+=1){this.#_(s,c,b,u);let k=d(s,b),C,I=this.#i,_;if(b===0?(C=this.#p(a,k,0,n-1,l,r),_=this.#i!==I):(C=this.#p(a,k,0,n-1,l,l+1),_=this.#i!==I,C>l&&!this.#l()&&(I=this.#i,C=this.#p(a,k,0,n-1,l,r),_=this.#i!==I)),this.#l()||(C>f&&(f=C,m=k,p=_,C>l&&(l=C)),l>=r))break}return m===0&&(m=d(s,0),f=0,p=!0),{move:m,score:f,selective:p}}#p(n,t,o,r,a,s){let u=ke(this.#e,o+1);u.copyFrom(n),this.#y[o]=t;let c=_a(u,t);return c===dr?(this.#v=!0,this.#u=!0,0):c!==-1?c===n.active?bn-o:-(bn-o):u.active===n.active?this.#O(r,o+1,a,s):-this.#O(r,o+1,-s,-a)}#O(n,t,o,r){if(!this.#T())return 0;let a=ke(this.#e,t);if(t>=rn-2)return this.#A(a);if(n<=0)return this.#A(a);let s=o,u=this.#P(a,t),c=mi(a),l=fi(a,c,u),m=pi(a,c,u),f=this.#o,p=(l^m*3)&f.mask,b=0,k=d(f.info,p),C=d(f.keyLo,p)===l&&d(f.keyHi,p)===m&&(k>>>8&li)===f.generation;if(C&&(b=d(f.move,p),(k>>2&63)>=n)){let we=d(f.score,p),We=k&3;if(We===si||We===ci&&we>=r||We===ui&&we<=s)return we}let I=this.#C,_=ke(this.#n,t),N=Cr(a,_,ke(this.#t,t));if(N===0)return this.#A(a,l,m);u!==0&&(N=this.#L(_,N,u,t)),this.#R(a,_,N,t,b);let F=ke(this.#t,t),D=N;if(I.moveCountPruning&&n<=I.moveCountDepth){let de=I.moveCountBase+I.moveCountFactor*n;de<D&&(D=de)}let P=n<=2;if(P&&!this.#T()||this.#l())return 0;let V=!1,U=!1,ne=-Pn,Ee=0,Qe=this.#i;for(let de=0;de<N;de+=1){this.#_(_,F,de,N);let we=d(_,de),We=d(F,de)>=Vc;if(!We&&Ee!==0){let v=de>=D;if(!v&&P&&(V||(U=this.#x(a,l,m)+I.futilityMargin*n<=o,V=!0),v=U),v){this.#i+=1;break}}let S;if(de===0)S=this.#p(a,we,t,n-1,s,r);else{let v=0;I.lateMoveReduction&&!We&&n>=3&&de>=I.lateMoveIndex&&(v=de>=I.lateMoveDeepIndex?2:1,v>=n&&(v=n-1)),S=this.#p(a,we,t,n-1-v,s,s+1),!this.#l()&&S>s&&(v>0||S<r)&&(S=this.#p(a,we,t,n-1,s,r))}if(this.#l())return 0;if(S>ne&&(ne=S,Ee=we),S>s&&(s=S),s>=r){this.#F(a,we,t,n,We);break}}if(Ee===0)return this.#A(a);let Ye=this.#i!==Qe?Bc:ne>=r?ci:ne<=o?ui:si,kn=ne,zn=n;if(kn<bn-rn&&kn>-bn+rn){let de=k>>2&63;(!C||zn>=de)&&(k===0&&d(f.info,p)===0&&(f.entries+=1),f.keyLo[p]=l,f.keyHi[p]=m,f.score[p]=kn,f.info[p]=f.generation<<8|zn<<2|Ye,f.move[p]=Ee)}return ne}#P(n,t){if(t===0)return 0;let o=d(this.#y,t-1);return st(o)===tn&&ke(this.#e,t-1).active===n.active?o:0}#L(n,t,o,r){let a=ze(o),s=Ne(o),u=ke(this.#t,r),c=0;for(let l=0;l<t;l+=1){let m=d(n,l);if(st(m)===tn&&m<o){let f=ze(m),p=Ne(m);if(f!==a&&f!==s&&p!==a&&p!==s)continue}n[c]=m,u[c]=d(u,l),c+=1}return c===0?t:c}#l(){return this.#u}#T(){return this.#u?!1:this.#f>=this.#E?(this.#u=!0,!1):(this.#f+=1,(this.#f&Dc)===0&&this.#I()?(this.#u=!0,!1):!0)}#x(n,t,o){let r=t,a=o;if(r===void 0||a===void 0){let l=mi(n);r=fi(n,l),a=pi(n,l)}let s=(r^a*3)&Lc,u;d(this.#b,s)===this.#c&&d(this.#s,s)===r&&d(this.#h,s)===a?u=this.#d[s]??0:(u=ti(n,this.#m,this.#g),this.#s[s]=r,this.#h[s]=a,this.#d[s]=u,this.#b[s]=this.#c);let c=n.active===0?u:-u;return c>Nn?Nn:c<-Nn?-Nn:c}#A(n,t,o){return this.#T()?this.#x(n,t,o):0}#F(n,t,o,r,a){if(a)return;let s=o*2;d(this.#r,s)!==t&&(this.#r[s+1]=d(this.#r,s),this.#r[s]=t);let u=n.active*121*121+ze(t)*121+Ne(t),c=d(this.#a,u)+r*r;this.#a[u]=c>1<<20?1<<20:c}#R(n,t,o,r,a){let s=ke(this.#t,r),u=d(this.#r,r*2),c=d(this.#r,r*2+1),l=n.active*121*121;for(let m=0;m<o;m+=1){let f=d(t,m),p=d(s,m);if(f===a)p+=Uc;else if(f===u)p+=Wc;else if(f===c)p+=Gc;else{let b=d(this.#a,l+ze(f)*121+Ne(f));p+=b>8191?8191:b}s[m]=p}}#_(n,t,o,r){let a=o,s=d(t,o);for(let c=o+1;c<r;c+=1){let l=d(t,c);l>s&&(s=l,a=c)}if(a===o)return;let u=d(n,o);n[o]=d(n,a),n[a]=u,t[a]=d(t,o),t[o]=s}};function mi(e){let n=d(e.potions,0),t=d(e.potions,1),o=n>2?3:n,a=t>2?3:t;return a=o+gr*a,a=(e.firstTurn?1:0)+Mi*a,a=e.actionsUsed+ki*a,a=e.manaMoves+hi*a,a=e.monsMoves+yi*a,e.active+bi*a}i(mi,"scalarIndex");function fi(e,n,t=0){return e.hashLo^d(mo,n)^e.whiteScore*2654435761^e.blackScore*2135587861^d(e.potions,0)^Math.imul(t,668265261)}i(fi,"stateKeyLo");function pi(e,n,t=0){return e.hashHi^d(er,n)^e.whiteScore*2246822507^e.blackScore*3266489909^d(e.potions,1)^Math.imul(t,374761393)}i(pi,"stateKeyHi");var $c=Object.freeze({lateMoveReduction:!0,lateMoveIndex:2,lateMoveDeepIndex:6,moveCountPruning:!0,moveCountDepth:3,moveCountBase:7,moveCountFactor:7,futilityMargin:900,aspirationDelta:600,aspirationMinDepth:2,winsNextTurnThreat:0}),qc=Object.freeze({lateMoveReduction:!0,lateMoveIndex:2,lateMoveDeepIndex:6,moveCountPruning:!0,moveCountDepth:3,moveCountBase:7,moveCountFactor:7,futilityMargin:900,aspirationDelta:600,aspirationMinDepth:2,winsNextTurnThreat:2500}),Hc=Object.freeze({lateMoveReduction:!0,lateMoveIndex:3,lateMoveDeepIndex:8,moveCountPruning:!0,moveCountDepth:3,moveCountBase:4,moveCountFactor:5,futilityMargin:900,aspirationDelta:0,aspirationMinDepth:3,winsNextTurnThreat:0}),zc=Object.freeze({fast:Object.freeze({budgetMs:16,limits:Object.freeze({maxDepth:40,maxNodes:38400,tuning:qc})}),normal:Object.freeze({budgetMs:75,limits:Object.freeze({maxDepth:40,maxNodes:184e3,tuning:$c})}),pro:Object.freeze({budgetMs:460,limits:Object.freeze({maxDepth:40,maxNodes:2e6,tuning:Hc})})});function Xc(){return globalThis.performance.now()}i(Xc,"systemClock");function Si(e){let n=e();if(!Number.isFinite(n))throw new RangeError("automove clock must return a finite number");return n}i(Si,"readClock");function Qc(){return globalThis.WeakRef}i(Qc,"weakRefConstructor");var Er=class{static{i(this,"FastSearcherPool")}#e;run(n){let t=Qc(),o=t===void 0?void 0:this.#e?.deref();if(o===void 0)try{o=new Oo}catch(r){if(r instanceof RangeError)return St;throw r}this.#e=void 0;try{return n(o)}catch(r){if(It(r))return St;throw r}finally{t!==void 0&&(this.#e??=new t(o))}}},Yc=new Er;function vr(e,n,t=Xc){let o=zc[n],r=Si(t)+o.budgetMs,a=!1,s=i(()=>a?!0:(a=Si(t)>=r,a),"deadlineReached");if(e.winnerColor()!==void 0||s())return{kind:"fallback"};let u;try{u=new So}catch(l){if(l instanceof RangeError)return{kind:"fallback"};throw l}if(!Fa(u,e,o.limits.maxDepth)||s())return{kind:"fallback"};let c=Yc.run(l=>{if(!s()&&(l.root.copyFrom(u),!s()))return l.search(o.limits,s,Rn)});return c===void 0||It(c)||s()||!c.supported||c.move===0?{kind:"fallback"}:{kind:"selected",inputs:Ba(c.move)}}i(vr,"selectPackedInputs");function Ii(e){switch(e.kind){case"takeback":return 0;case"location":return 1;case"modifier":return 2}}i(Ii,"inputTag");function Zc(e,n){let t=Ii(e)-Ii(n);return t!==0?t:e.kind==="location"&&n.kind==="location"?e.location.i-n.location.i||e.location.j-n.location.j:e.kind==="modifier"&&n.kind==="modifier"?Ko[e.modifier]-Ko[n.modifier]:0}i(Zc,"compareInputs");function Jc(e){switch(e.kind){case"invalid-input":case"events":return;case"locations-to-start-from":return e.locations.map(n=>({kind:"location",location:n}));case"next-input-options":return e.nextInputs.map(({input:n})=>n)}}i(Jc,"nextInputs");function Tr(e,n){let t=e.fork().processInput(n,!1,!1);return t.kind==="events"?t:void 0}i(Tr,"applyInputs");function Ai(e){let n=e.fork(),t=[],o=i(()=>{let r=t.length===0?n.processInputWithStartOptions(t,!0,!1,Qo):n.inspectInputGrammar(t,Qo);if(r.kind==="invalid-input")return!1;if(r.kind==="events")return t.length>0&&Tr(n,t)!==void 0;if(t.length===Qn)return!1;let a=Jc(r)?.sort(Zc);if(a===void 0||a.length===0)return!1;for(let s of a){if(t.push(s),o())return!0;t.pop()}return!1},"findCompletion");return o()?t:[]}i(Ai,"deterministicLegalFallbackInputs");function Ci(e,n,t){let o=e.fen(),r=t===void 0?vr(e,n):vr(e,n,t),a=r.kind==="selected"?r.inputs:Ai(e),s=Tr(e,a);if(s===void 0&&r.kind==="selected"&&(a=Ai(e),s=Tr(e,a)),e.fen()!==o)throw new Error("automove suggestion mutated its source game");return s===void 0?{output:{kind:"invalid-input"},inputFen:""}:{output:s,inputFen:et(a)}}i(Ci,"suggestMove");function Ut(e){return e===y.White?"w":"b"}i(Ut,"colorFen");function Ue(e){if(!Number.isInteger(e.cooldown)||e.cooldown<0||e.cooldown>2)throw new RangeError("mon cooldown must be an integer from 0 through 2");let n=(()=>{switch(e.kind){case M.Demon:return"e";case M.Drainer:return"d";case M.Angel:return"a";case M.Spirit:return"s";case M.Mystic:return"y"}})();return`${e.color===y.White?n.toUpperCase():n}${e.cooldown}`}i(Ue,"monFen");function eu(e,n){let t,o;switch(e.charCodeAt(n)){case 69:t=y.White,o=M.Demon;break;case 101:t=y.Black,o=M.Demon;break;case 68:t=y.White,o=M.Drainer;break;case 100:t=y.Black,o=M.Drainer;break;case 65:t=y.White,o=M.Angel;break;case 97:t=y.Black,o=M.Angel;break;case 83:t=y.White,o=M.Spirit;break;case 115:t=y.Black,o=M.Spirit;break;case 89:t=y.White,o=M.Mystic;break;case 121:t=y.Black,o=M.Mystic;break;default:return}let r=e.charCodeAt(n+1);return r<48||r>50?void 0:Dn(o,t,r-48)}i(eu,"parseMonFenAt");function qn(e){return e.kind==="supermana"?"U":e.color===y.White?"M":"m"}i(qn,"manaFen");function gi(e){switch(e){case 77:return Yn(y.White);case 109:return Yn(y.Black);case 85:return Mn;default:return}}i(gi,"parseManaCode");function Ei(e){switch(e){case A.Potion:return"P";case A.Bomb:return"B";case A.BombOrPotion:return"Q"}}i(Ei,"consumableFen");function vi(e){switch(e){case 80:return A.Potion;case 66:return A.Bomb;case 81:return A.BombOrPotion;default:return}}i(vi,"parseConsumableCode");function dt(e){switch(e.kind){case"mon":return`${Ue(e.mon)}x`;case"mana":return`xx${qn(e.mana)}`;case"mon-with-mana":return`${Ue(e.mon)}${qn(e.mana)}`;case"mon-with-consumable":return`${Ue(e.mon)}${Ei(e.consumable)}`;case"consumable":return`xx${Ei(e.consumable)}`}}i(dt,"itemFen");function Ti(e,n){let t=e.charCodeAt(n),o=e.charCodeAt(n+2);if(t===120){if(e.charCodeAt(n+1)!==120)return;let u=gi(o);if(u!==void 0)return Ze(u);let c=vi(o);return c===void 0?void 0:bt(c)}let r=eu(e,n);if(r===void 0)return;let a=gi(o);if(a!==void 0)return Zn(r,a);let s=vi(o);return s!==void 0?pt(r,s):o===120?Le(r):void 0}i(Ti,"parseItemFenAt");function nu(e){switch(e.kind){case"mon-move":return`mm ${dt(e.item)} ${B(e.from)} ${B(e.to)}`;case"mana-move":return`mma ${qn(e.mana)} ${B(e.from)} ${B(e.to)}`;case"mana-scored":return`ms ${qn(e.mana)} ${B(e.at)}`;case"mystic-action":return`ma ${Ue(e.mystic)} ${B(e.from)} ${B(e.to)}`;case"demon-action":return`da ${Ue(e.demon)} ${B(e.from)} ${B(e.to)}`;case"demon-additional-step":return`das ${Ue(e.demon)} ${B(e.from)} ${B(e.to)}`;case"spirit-target-move":return`stm ${dt(e.item)} ${B(e.from)} ${B(e.to)} ${B(e.by)}`;case"pickup-bomb":return`pb ${Ue(e.by)} ${B(e.at)}`;case"pickup-potion":return`pp ${dt(e.by)} ${B(e.at)}`;case"use-potion":return`up ${B(e.from)} ${B(e.to)}`;case"pickup-mana":return`pm ${qn(e.mana)} ${Ue(e.by)} ${B(e.at)}`;case"mon-fainted":return`mf ${Ue(e.mon)} ${B(e.from)} ${B(e.to)}`;case"mana-dropped":return`md ${qn(e.mana)} ${B(e.at)}`;case"supermana-back-to-base":return`sb ${B(e.from)} ${B(e.to)}`;case"bomb-attack":return`ba ${Ue(e.by)} ${B(e.from)} ${B(e.to)}`;case"mon-awake":return`maw ${Ue(e.mon)} ${B(e.at)}`;case"bomb-explosion":return`be ${B(e.at)}`;case"next-turn":return`nt ${Ut(e.color)}`;case"game-over":return`go ${Ut(e.winner)}`;case"takeback":return"z"}}i(nu,"eventFen");function wi(e){return e.map(nu).join(" ")}i(wi,"eventArrayFen");function Oi(e){return e===void 0?void 0:{i:e.i,j:e.j}}i(Oi,"detachedLocation");function wr(e){let n=new Array(e.length);for(let t=0;t<e.length;t+=1){let o=e[t];o!==void 0&&(n[t]={i:o.i,j:o.j})}return n}i(wr,"detachedLocations");function Hn(e){let n=e;return n===y.White?0:n===y.Black?1:void 0}i(Hn,"boardColorIndex");var mt=class{constructor(n=un,t,o,r=!1){this.variant=n;if(o!==void 0){this.storage=o;return}let a=t??la(n);if(a.length!==121)throw new RangeError(`board requires exactly ${121} item slots`);this.storage={itemSlots:t===void 0||r?[...a]:a.map(s=>s===void 0?void 0:Bn(s)),occupiedEntries:void 0,categoryDerived:void 0}}variant;static{i(this,"Board")}storage;get items(){return[...this.storage.itemSlots]}static fromItems(n,t){return new Ln(t,n)}fork(){let n=new Ln(this.variant,this.storage.itemSlots,void 0,!0);return n.storage.occupiedEntries=this.storage.occupiedEntries,n.storage.categoryDerived=this.storage.categoryDerived,n}get(n){if(cn(n))return this.storage.itemSlots[re(n)]}itemAtIndex(n){return this.storage.itemSlots[n]}squareAt(n){return Un(n),Zo(n,this.variant)}allMonsBases(){return Ct}supermanaBase(){return At}allMonsLocations(n){let t=Hn(n);return t===void 0?[]:wr(this.getCategoryDerived().monsLocations[t])}allFreeRegularManaLocations(n){let t=Hn(n);return t===void 0?[]:wr(this.getCategoryDerived().freeRegularManaLocations[t])}base(n){return da(n.kind,n.color)}faintedMonsLocations(n){let t=Hn(n);return t===void 0?[]:wr(this.getCategoryDerived().faintedMonsLocations[t])}findMana(n){let t=Hn(n);if(t!==void 0)return Oi(this.getCategoryDerived().freeRegularManaLocations[t][0])}findAwakeAngel(n){let t=Hn(n);if(t!==void 0)return Oi(this.getCategoryDerived().awakeAngelLocations[t])}itemsEqual(n){for(let t=0;t<121;t+=1){let o=this.storage.itemSlots[t],r=n.storage.itemSlots[t];if(o===void 0||r===void 0){if(o!==r)return!1}else if(!qr(o,r))return!1}return!0}getOccupiedEntries(){if(this.storage.occupiedEntries!==void 0)return this.storage.occupiedEntries;let n=[];for(let t=0;t<121;t+=1){let o=this.storage.itemSlots[t],r=Xo[t];o!==void 0&&r!==void 0&&n.push([r,o])}return this.storage.occupiedEntries=n,n}getCategoryDerived(){if(this.storage.categoryDerived!==void 0)return this.storage.categoryDerived;let n=[],t=[],o=[],r=[],a=[],s=[],u,c;for(let m=0;m<121;m+=1){let f=this.storage.itemSlots[m];if(f!==void 0){let p=Xo[m];if(p!==void 0){let b=$(f);if(b!==void 0){let k=Hn(b.color);if(k===void 0)continue;(k===0?n:t).push(p),f.kind==="mon"&&ve(b)?(k===0?a:s).push(p):b.kind===M.Angel&&!ve(b)&&(k===0&&u===void 0?u=p:k===1&&c===void 0&&(c=p))}else if(f.kind==="mana"&&f.mana.kind==="regular"){let k=Hn(f.mana.color);k!==void 0&&(k===0?o:r).push(p)}}}}let l={monsLocations:[n,t],freeRegularManaLocations:[o,r],faintedMonsLocations:[a,s],awakeAngelLocations:[u,c]};return this.storage.categoryDerived=l,l}entries(){return this.getOccupiedEntries().values()}},Ln=class extends mt{static{i(this,"MutableBoard")}#e;delete(n){Un(n),this.storage.itemSlots[re(n)]=void 0,this.storage.occupiedEntries=void 0,this.storage.categoryDerived=void 0}set(n,t){Un(n),this.storage.itemSlots[re(n)]=Bn(t),this.storage.occupiedEntries=void 0,this.storage.categoryDerived=void 0}readonlyView(){return this.#e??=new mt(this.variant,void 0,this.storage),this.#e}};var xi=Ie+1,tu=Object.freeze(["","n01","n02","n03","n04","n05","n06","n07","n08","n09","n10","n11"]);function ou(e){let n="",t=0;for(let o=0;o<11;o+=1){o>0&&(n+="/");let r=t+11,a=0;for(;t<r;){let s=e.itemAtIndex(t);if(t+=1,s===void 0){a+=1;continue}a>0&&(n+=Ri(a),a=0),n+=dt(s)}a>0&&(n+=Ri(a))}return n}i(ou,"boardFen");function ru(e,n,t,o){let r=new Array(121).fill(void 0),a=n;for(let s=0;s<11;s+=1){let u=0,c=!1;for(;a<t&&e.charCodeAt(a)!==47;){if(e.charCodeAt(a)===110){if(c||a+2>=t)return;let m=e.charCodeAt(a+1)-48,f=e.charCodeAt(a+2)-48;if(m<0||m>9||f<0||f>9)return;let p=m*10+f;if(p<1||u+p>11)return;u+=p,a+=3,c=!0;continue}if(a+2>=t||u>=11)return;let l=Ti(e,a);if(l===void 0)return;r[s*11+u]=l,u+=1,a+=3,c=!1}if(u!==11)return;if(s<10){if(e.charCodeAt(a)!==47)return;a+=1}}if(a===t)return new Ln(o,r,void 0,!0)}i(ru,"parseBoardFenRange");function _i(e){let n=`${e.whiteScore} ${e.blackScore} ${Ut(e.activeColor)} ${e.actionsUsedCount} ${e.manaMovesCount} ${e.monsMovesCount} ${e.whitePotionsCount} ${e.blackPotionsCount} ${e.turnNumber} ${ou(e.board)}`,t=e.board.variant;return t===un?n:`${n} ${sa(t)}`}i(_i,"gameFen");function Ni(e){let n=0,t=i(_=>{let N=n,F=0,D=!1;for(;n<e.length;){let P=e.charCodeAt(n);if(P===32)break;if(P<48||P>57)return-1;if(n===N)D=P===48;else if(D)return-1;if(F=F*10+(P-48),!Number.isSafeInteger(F))return-1;n+=1}if(n===N)return-1;if(_){if(n>=e.length)return-1;n+=1}else if(n!==e.length)return-1;return F},"readInteger"),o=t(!0),r=t(!0),a=e.charCodeAt(n),s=a===119?y.White:a===98?y.Black:void 0;if(s===void 0||e.charCodeAt(n+1)!==32)return;n+=2;let u=t(!0),c=t(!0),l=t(!0),m=t(!0),f=t(!0),p=t(!0);if(o<0||r<0||u<0||c<0||l<0||m<0||f<0||p<0||o>xi||r>xi||u>_e||c>An||l>ee||p<1)return;let b=n;for(;n<e.length&&e.charCodeAt(n)!==32;)n+=1;let k=n,C=un;if(n<e.length){n+=1;let _=t(!1),N=ua(_);if(N===void 0||N===un)return;C=N}let I=ru(e,b,k,C);if(I!==void 0)return{board:I,whiteScore:o,blackScore:r,activeColor:s,actionsUsedCount:u,manaMovesCount:c,monsMovesCount:l,whitePotionsCount:m,blackPotionsCount:f,turnNumber:p}}i(Ni,"parseGameFen");function Ri(e){return tu[e]??""}i(Ri,"emptyRunFen");function Pi(e){return{whiteScore:e.whiteScore,blackScore:e.blackScore,activeColor:e.activeColor,actionsUsedCount:e.actionsUsedCount,manaMovesCount:e.manaMovesCount,monsMovesCount:e.monsMovesCount,whitePotionsCount:e.whitePotionsCount,blackPotionsCount:e.blackPotionsCount}}i(Pi,"copyRulesCounters");function xo(e,n,t,o){let r=e[n]+t;return o&&!Number.isSafeInteger(r)?!1:(e[n]=r,!0)}i(xo,"addCounter");function Or(e,n,t,o){if(e.actionsUsedCount<_e)return e.actionsUsedCount+=1,{valid:!0};let r=e.activeColor===y.White?"whitePotionsCount":"blackPotionsCount";return o&&e[r]<=0?{valid:!1}:(e[r]-=1,{valid:!0,potionUse:{from:n,to:t}})}i(Or,"consumeAction");function xr(e,n,t,o){switch(n.kind){case"mon-move":return{valid:xo(e,"monsMovesCount",1,o)};case"mana-move":return{valid:xo(e,"manaMovesCount",1,o)};case"mana-scored":{let r=e.activeColor===y.White?"whiteScore":"blackScore";return{valid:xo(e,r,jr(n.mana,e.activeColor),o)}}case"mystic-action":return Or(e,n.from,n.to,o);case"demon-action":{let a=t.find(s=>s.kind==="demon-additional-step")?.to??n.to;return Or(e,a,a,o)}case"spirit-target-move":return Or(e,n.by,n.to,o);case"pickup-potion":{let r=$(n.by);if(r===void 0)return{valid:!0};let a=r.color===y.White?"whitePotionsCount":"blackPotionsCount";return{valid:xo(e,a,1,o)}}case"demon-additional-step":case"pickup-bomb":case"use-potion":case"pickup-mana":case"mon-fainted":case"mana-dropped":case"supermana-back-to-base":case"bomb-attack":case"mon-awake":case"bomb-explosion":case"next-turn":case"game-over":case"takeback":return{valid:!0}}}i(xr,"projectEventCounters");function Rr(e,n){let t=Pi(e);for(let r of n)if(!xr(t,r,n,!0).valid)return!1;if(e.turnNumber<Number.MAX_SAFE_INTEGER)return!0;let o={...e,board:e.board.fork(),turnNumber:Number.MAX_SAFE_INTEGER-1};return!Ro(o,n).turnAdvanced}i(Rr,"canApplyRulesEvents");function au(e,n,t,o){let r=xr(e,n,t,!1);switch(r.valid&&r.potionUse!==void 0&&o.push({kind:"use-potion",...r.potionUse}),n.kind){case"mon-move":e.board.delete(n.from),e.board.set(n.to,n.item);break;case"mana-move":e.board.delete(n.from),e.board.set(n.to,Ze(n.mana));break;case"mana-scored":{let a=e.board.get(n.at);if(a!==void 0){let s=$(a);s===void 0?e.board.delete(n.at):e.board.set(n.at,Le(s))}break}case"mystic-action":e.board.delete(n.to);break;case"demon-action":{e.board.delete(n.from),t.find(s=>s.kind==="demon-additional-step")?.to===void 0?e.board.set(n.to,Le(n.demon)):e.board.delete(n.to);break}case"demon-additional-step":e.board.set(n.to,Le(n.demon));break;case"spirit-target-move":e.board.delete(n.from),e.board.set(n.to,n.item);break;case"pickup-bomb":e.board.set(n.at,pt(n.by,A.Bomb));break;case"pickup-potion":{if($(n.by)===void 0)break;e.board.set(n.at,n.by);break}case"pickup-mana":e.board.set(n.at,Zn(n.by,n.mana));break;case"mon-fainted":e.board.set(n.to,Le(Gr(n.mon)));break;case"mana-dropped":e.board.set(n.at,Ze(n.mana));break;case"supermana-back-to-base":{let a=e.board.get(n.to);e.board.set(n.to,a?.kind==="mon"?Zn(a.mon,Mn):Ze(Mn));break}case"bomb-attack":e.board.delete(n.to),e.board.set(n.from,Le(n.by));break;case"bomb-explosion":e.board.delete(n.at);break;case"mon-awake":case"game-over":case"next-turn":case"takeback":case"use-potion":break}}i(au,"applyEvent");function iu(e,n){e.activeColor=Sn(e.activeColor),e.turnNumber+=1,e.actionsUsedCount=0,e.manaMovesCount=0,e.monsMovesCount=0,n.push({kind:"next-turn",color:e.activeColor});for(let t of e.board.faintedMonsLocations(e.activeColor)){let o=e.board.get(t),r=o===void 0?void 0:$(o);if(r===void 0)continue;let a=Kr(r);ve(a)||n.push({kind:"mon-awake",mon:a,at:t}),e.board.set(t,Le(a))}}i(iu,"advanceTurn");function Ro(e,n){let t=[];for(let a of n)au(e,a,n,t);let o=bo(e),r=!1;return o!==void 0?t.push({kind:"game-over",winner:o}):va(e)&&(iu(e,t),r=!0),{events:[...n,...t],turnAdvanced:r,winner:o}}i(Ro,"applyRulesEvents");var Wt=Symbol("cache-miss"),Bi=Symbol("cached-undefined"),_o=Object.freeze({completionViability:16384,secondInputOptions:4096,secondStage:8192,thirdStage:8192});function su(e){return e===void 0?void 0:[e[0].map(Vn),e[1].map(Jn)]}i(su,"copyStageResult");function Li(e){return e===void 0?Bi:[e[0].map(Vn),e[1].map(Jn)]}i(Li,"storeStageResult");function Fi(e){return e===Bi?void 0:su(e)}i(Fi,"copyStoredStageResult");function No(e,n,t,o){e.size>=o&&!e.has(n)&&e.clear(),e.set(n,t)}i(No,"setBounded");var Po=class{static{i(this,"RulesQueryCache")}#e;#n;#t;#o;#r;invalidate(){this.#e=void 0,this.#n=void 0,this.#t=void 0,this.#o=void 0,this.#r=void 0}getStartSuggestion(n){let t=this.#e?.[n];return t===void 0?void 0:$o(t)}setStartSuggestion(n,t){(this.#e??=new Array(4))[n]=$o(t)}getCompletionViability(n){return this.#n?.get(n)}setCompletionViability(n,t){No(this.#n??=new Map,n,t,_o.completionViability)}getSecondInputOptions(n){let t=this.#t?.get(n);return t===void 0?void 0:t.map(Jn)}setSecondInputOptions(n,t){No(this.#t??=new Map,n,t.map(Jn),_o.secondInputOptions)}lookupSecondStage(n){let t=this.#o?.get(n);return t===void 0?Wt:Fi(t)}setSecondStage(n,t){No(this.#o??=new Map,n,Li(t),_o.secondStage)}lookupThirdStage(n){let t=this.#r?.get(n);return t===void 0?Wt:Fi(t)}setThirdStage(n,t){No(this.#r??=new Map,n,Li(t),_o.thirdStage)}};function Gt(e){return e.map(n=>({fen:n.fen,color:n.color,events:n.events.map(Vn)}))}i(Gt,"copyTrackingEntries");var Lo=class e{static{i(this,"GameHistory")}#e=[];#n=[];#t=!0;#o;#r=!0;constructor(n=!1){this.#o=n}get takebackFens(){return[...this.#e]}get trackingEntries(){return Gt(this.#n)}get movesVerified(){return this.#t}get verboseTrackingEnabled(){return this.#o}get eventApplicationTrackingEnabled(){return this.#r||this.#o}copy(){let n=new e(this.#o);return n.#e=[...this.#e],n.#n=Gt(this.#n),n.#t=this.#t,n.#r=this.#r,n}fork(){let n=new e(!1);return n.#t=this.#t,n.#r=!1,n}resetForLoadedFen(){this.#a()}resetForBoardReplacement(){this.#a()}#a(){this.#e=[],this.#n=[],this.#t=!1}replace(n){n.takebackFens!==void 0&&(this.#e=[...n.takebackFens]),n.trackingEntries!==void 0&&(this.#n=Gt(n.trackingEntries)),n.movesVerified!==void 0&&(this.#t=n.movesVerified),n.verboseTrackingEnabled!==void 0&&(this.#o=n.verboseTrackingEnabled,n.verboseTrackingEnabled||(this.#n=[]))}setTakebackTracking(n){this.#r=n,n||(this.#e=[])}setVerboseTracking(n){this.#o=n,n||(this.#n=[])}canTakeback(n,t){return this.#r&&this.#e.length>1&&n===t}prepareTakeback(n,t){if(!this.canTakeback(n,t))return;let o=this.#e[this.#e.length-2];if(o!==void 0)return{previousFen:o,takebackFens:this.#e.slice(0,-1),trackingEntries:Gt(this.#n.slice(0,-1))}}commitTakeback(n){this.#e=[...n.takebackFens],this.#n=Gt(n.trackingEntries)}beginEventApplication(n,t){if(!this.#r||this.#e.length!==0)return;let o=n();this.#e.push(o),this.#o&&this.#n.length===0&&this.#n.push({fen:o,color:t,events:[]})}completeEventApplication(n){let t,o=i(()=>t??=n.snapshotFen(),"snapshotFen");this.#r&&(n.winner!==void 0?this.#e=[]:n.turnAdvanced?this.#e=[o()]:this.#e.push(o())),this.#o&&this.#n.push({fen:o(),color:n.color,events:n.events.map(Vn)})}};function Di(e,n,t,o){let r=e.board.squareAt(n),a=[];switch(t.kind){case"mon":{let s=t.mon;if(s.color!==e.activeColor||ve(s))break;if(e.playerCanMoveMon()&&a.push(...e.nextInputsFromLocations(Fe(n),O.MonMove,o,u=>{let c=e.board.get(u),l=e.board.squareAt(u),m;switch(c?.kind){case"mon":case"mon-with-mana":case"mon-with-consumable":m=!1;break;case"mana":m=s.kind===M.Drainer;break;case"consumable":case void 0:m=!0;break}if(!m)return!1;switch(l.kind){case"regular":case"consumable-base":case"mana-base":case"mana-pool":return!0;case"supermana-base":return s.kind===M.Drainer&&(c===void 0||c.kind==="mana"&&c.mana.kind==="supermana");case"mon-base":return l.monKind===s.kind&&l.color===s.color}})),r.kind!=="mon-base"&&e.playerCanUseAction())switch(s.kind){case M.Angel:case M.Drainer:break;case M.Mystic:{let u=e.board.findAwakeAngel(Sn(e.activeColor));a.push(...e.nextInputsFromLocations(Yt(n),O.MysticAction,o,c=>{let l=e.board.get(c);if(l===void 0||Yo(u,c))return!1;let m=$(l);return m!==void 0&&s.color!==m.color&&!ve(m)}));break}case M.Demon:{let u=e.board.findAwakeAngel(Sn(e.activeColor));a.push(...e.nextInputsFromLocations(Zt(n),O.DemonAction,o,c=>{let l=e.board.get(c),m=Yr(n,c),f=e.board.squareAt(m);if(l===void 0||Yo(u,c)||e.board.get(m)!==void 0||f.kind==="supermana-base"||f.kind==="mon-base")return!1;let p=$(l);return p!==void 0&&s.color!==p.color&&!ve(p)}));break}case M.Spirit:a.push(...e.nextInputsFromLocations(Jt(n),O.SpiritTargetCapture,o,u=>{let c=e.board.get(u);return c===void 0?!1:$r(c)}));break}break}case"mana":t.mana.kind==="regular"&&t.mana.color===e.activeColor&&e.playerCanMoveMana()&&a.push(...e.nextInputsFromLocations(Fe(n),O.ManaMove,o,s=>rr(e.board,s)));break;case"mon-with-mana":t.mon.color===e.activeColor&&e.playerCanMoveMon()&&a.push(...e.nextInputsFromLocations(Fe(n),O.MonMove,o,s=>{let u=e.board.get(s),c=e.board.squareAt(s);switch(u?.kind){case"mon":case"mon-with-mana":case"mon-with-consumable":return!1;case"mana":case"consumable":return!0;case void 0:return Gn(c)?!0:c.kind==="supermana-base"&&t.mana.kind==="supermana"}}));break;case"mon-with-consumable":{let s=t.mon;if(s.color!==e.activeColor)break;e.playerCanMoveMon()&&a.push(...e.nextInputsFromLocations(Fe(n),O.MonMove,o,u=>{let c=e.board.get(u),l=e.board.squareAt(u);switch(c?.kind){case"mon":case"mana":case"mon-with-mana":case"mon-with-consumable":return!1;case"consumable":return!0;case void 0:return Gn(l)}})),t.consumable===A.Bomb&&a.push(...e.nextInputsFromLocations(Qt(n),O.BombAttack,o,u=>{let c=e.board.get(u),l=c===void 0?void 0:$(c);return l!==void 0&&s.color!==l.color&&!ve(l)}));break}case"consumable":break}return a}i(Di,"generateSecondInputOptions");function Vi(e,n,t,o,r){let a=[],s=[],u=e.board.squareAt(r),c=e.board.get(r);switch(n){case O.MonMove:{let l=$(t);if(l===void 0)return;if(s.push({kind:"mon-move",item:t,from:o,to:r}),c!==void 0)switch(c.kind){case"mon":case"mon-with-mana":case"mon-with-consumable":return;case"mana":{let m=In(t);m!==void 0&&s.push({kind:"mana-dropped",mana:m,at:o}),s.push({kind:"pickup-mana",mana:c.mana,by:l,at:r});break}case"consumable":switch(c.consumable){case A.Bomb:case A.Potion:return;case A.BombOrPotion:qo(t)!==void 0||In(t)!==void 0?s.push({kind:"pickup-potion",by:t,at:r}):(a.push(xe({kind:"modifier",modifier:X.SelectBomb},O.SelectConsumable,t)),a.push(xe({kind:"modifier",modifier:X.SelectPotion},O.SelectConsumable,t)));break}break}if(u.kind==="mana-pool"){let m=In(t);m!==void 0&&s.push({kind:"mana-scored",mana:m,at:r})}break}case O.ManaMove:{if(t.kind!=="mana")return;let l=t.mana;if(s.push({kind:"mana-move",mana:l,from:o,to:r}),c!==void 0){if(c.kind!=="mon")return;s.push({kind:"pickup-mana",mana:l,by:c.mon,at:r})}switch(u.kind){case"regular":case"mana-base":case"consumable-base":break;case"mana-pool":s.push({kind:"mana-scored",mana:l,at:r});break;case"mon-base":case"supermana-base":return}break}case O.MysticAction:{if(t.kind!=="mon")return;if(s.push({kind:"mystic-action",mystic:t.mon,from:o,to:r}),c!==void 0){let l=$(c);if(l===void 0)return;if(s.push({kind:"mon-fainted",mon:l,from:r,to:e.board.base(l)}),c.kind==="mon-with-mana"&&(c.mana.kind==="regular"?s.push({kind:"mana-dropped",mana:c.mana,at:r}):s.push({kind:"supermana-back-to-base",from:r,to:e.board.supermanaBase()})),c.kind==="mon-with-consumable")switch(c.consumable){case A.Bomb:s.push({kind:"bomb-explosion",at:r});break;case A.Potion:case A.BombOrPotion:return}}break}case O.DemonAction:{if(t.kind!=="mon")return;let l=t.mon;s.push({kind:"demon-action",demon:l,from:o,to:r});let m=!1;if(c!==void 0){let f=$(c);if(f===void 0)return;if(s.push({kind:"mon-fainted",mon:f,from:r,to:e.board.base(f)}),c.kind==="mon-with-mana"&&(c.mana.kind==="regular"?(m=!0,s.push({kind:"mana-dropped",mana:c.mana,at:r})):s.push({kind:"supermana-back-to-base",from:r,to:e.board.supermanaBase()})),c.kind==="mon-with-consumable")switch(c.consumable){case A.Bomb:s.push({kind:"bomb-explosion",at:r}),s.push({kind:"mon-fainted",mon:l,from:r,to:e.board.base(l)});break;case A.Potion:case A.BombOrPotion:return}}if((u.kind==="supermana-base"||u.kind==="mon-base")&&(m=!0),m)for(let f of Fe(r)){let p=e.board.get(f),b=e.board.squareAt(f);p!==void 0&&p.kind!=="consumable"||(Gn(b)?a.push(xe({kind:"location",location:f},O.DemonAdditionalStep)):b.kind==="mon-base"&&b.monKind===l.kind&&b.color===l.color&&a.push(xe({kind:"location",location:f},O.DemonAdditionalStep)))}break}case O.SpiritTargetCapture:{if(c===void 0)return;let l=$(c),m=In(c);a.push(...e.nextInputsFromLocations(Fe(r),O.SpiritTargetMove,void 0,f=>{let p=e.board.get(f),b=e.board.squareAt(f);if(!ga(c,p))return!1;switch(b.kind){case"regular":case"consumable-base":case"mana-base":case"mana-pool":return!0;case"supermana-base":{let k=p?.kind==="mana"&&p.mana.kind==="supermana";return m?.kind==="supermana"||m===void 0&&l?.kind===M.Drainer&&(p===void 0||k)||l?.kind===M.Drainer&&k}case"mon-base":return l?.kind===b.monKind&&l.color===b.color&&m===void 0&&qo(c)===void 0}}));break}case O.BombAttack:{let l=$(t);if(l===void 0)return;if(s.push({kind:"bomb-attack",by:l,from:o,to:r}),c!==void 0){let m=$(c);if(m===void 0)return;if(s.push({kind:"mon-fainted",mon:m,from:r,to:e.board.base(m)}),c.kind==="mon-with-mana"&&(c.mana.kind==="regular"?s.push({kind:"mana-dropped",mana:c.mana,at:r}):s.push({kind:"supermana-back-to-base",from:r,to:e.board.supermanaBase()})),c.kind==="mon-with-consumable")switch(c.consumable){case A.Bomb:s.push({kind:"bomb-explosion",at:r});break;case A.Potion:case A.BombOrPotion:return}}break}case O.DemonAdditionalStep:case O.SpiritTargetMove:case O.SelectConsumable:break}return[s,a]}i(Vi,"compileSecondInput");function Ui(e,n,t,o,r){let a=e.get(r),s=[],u=[];switch(n.kind){case O.SpiritTargetMove:{if(n.input.kind!=="location"||a===void 0)return;let c=n.input.location,l=e.get(c),m=e.squareAt(c);if(u.push({kind:"spirit-target-move",item:a,from:r,to:c,by:o}),l!==void 0)switch(a.kind){case"mon":switch(l.kind){case"mon":case"mon-with-mana":case"mon-with-consumable":return;case"mana":u.push({kind:"pickup-mana",mana:l.mana,by:a.mon,at:c});break;case"consumable":switch(l.consumable){case A.Potion:case A.Bomb:return;case A.BombOrPotion:s.push(xe({kind:"modifier",modifier:X.SelectBomb},O.SelectConsumable,a)),s.push(xe({kind:"modifier",modifier:X.SelectPotion},O.SelectConsumable,a));break}break}break;case"mana":if(l.kind!=="mon")return;u.push({kind:"pickup-mana",mana:a.mana,by:l.mon,at:c});break;case"mon-with-mana":switch(l.kind){case"mon":case"mon-with-mana":case"mon-with-consumable":return;case"mana":u.push({kind:"mana-dropped",mana:a.mana,at:r}),u.push({kind:"pickup-mana",mana:l.mana,by:a.mon,at:c});break;case"consumable":switch(l.consumable){case A.Potion:case A.Bomb:return;case A.BombOrPotion:u.push({kind:"pickup-potion",by:a,at:c});break}break}break;case"mon-with-consumable":if(l.kind!=="consumable"||l.consumable!==A.BombOrPotion)return;u.push({kind:"pickup-potion",by:a,at:c});break;case"consumable":switch(l.kind){case"mana":case"consumable":return;case"mon":s.push(xe({kind:"modifier",modifier:X.SelectBomb},O.SelectConsumable,l)),s.push(xe({kind:"modifier",modifier:X.SelectPotion},O.SelectConsumable,l));break;case"mon-with-mana":case"mon-with-consumable":switch(a.consumable){case A.Potion:case A.Bomb:return;case A.BombOrPotion:u.push({kind:"pickup-potion",by:l,at:c});break}break}break}if(m.kind==="mana-pool"){let f=In(a);f!==void 0&&u.push({kind:"mana-scored",mana:f,at:c})}break}case O.DemonAdditionalStep:{if(n.input.kind!=="location")return;let c=$(t);if(c===void 0)return;let l=n.input.location;u.push({kind:"demon-additional-step",demon:c,from:r,to:l});let m=e.get(l);if(m?.kind==="consumable")switch(m.consumable){case A.Potion:case A.Bomb:return;case A.BombOrPotion:s.push(xe({kind:"modifier",modifier:X.SelectBomb},O.SelectConsumable,t)),s.push(xe({kind:"modifier",modifier:X.SelectPotion},O.SelectConsumable,t));break}break}case O.SelectConsumable:{if(n.input.kind!=="modifier")return;let c=$(t);if(c===void 0)return;switch(n.input.modifier){case X.SelectBomb:u.push({kind:"pickup-bomb",by:c,at:r});break;case X.SelectPotion:u.push({kind:"pickup-potion",by:t,at:r});break}break}case O.MonMove:case O.ManaMove:case O.MysticAction:case O.DemonAction:case O.SpiritTargetCapture:case O.BombAttack:return}return[u,s]}i(Ui,"compileThirdInput");function Wi(e,n,t){if(e.kind!=="modifier"||n.input.kind!=="location")return;let r=t.find(s=>yt(s.input,e))?.actorMonItem,a=r===void 0?void 0:$(r);if(!(r===void 0||a===void 0))switch(e.modifier){case X.SelectBomb:return{kind:"pickup-bomb",by:a,at:n.input.location};case X.SelectPotion:return{kind:"pickup-potion",by:r,at:n.input.location}}}i(Wi,"compileFourthInput");function Gi(e,n,t){let o=[],r=Array.from({length:121},()=>!1),a=i(s=>{let u=t([{kind:"location",location:s}]);if(u.kind!=="next-input-options"||u.nextInputs.length===0)return;let c=re(s);r[c]||(r[c]=!0,o.push(s))},"addWhenValid");for(let s of e.board.allMonsLocations(e.activeColor))a(s);if(Ea(e,o.length!==0,n.includeManaStartsWithPotionAction))for(let s of e.board.allFreeRegularManaLocations(e.activeColor))a(s);return o.length===0?{kind:"invalid-input"}:{kind:"locations-to-start-from",locations:o}}i(Gi,"suggestedInputToStartWith");function Ki(e,n,t,o,r,a){let s=n[0];if(s?.kind!=="location")return{kind:"invalid-input"};let u=s.location,c=e.board().get(u);if(c===void 0)return{kind:"invalid-input"};let l=n[1];if(l!==void 0&&l.kind!=="location")return{kind:"invalid-input"};let m=a&&e.requiresCounterCapacityFiltering(),f=e.secondInputOptions(u,c,t,t?void 0:l?.location);if(l===void 0){let U=o&&!m?ta(f):f,ne=e.applicableInputOptions(n,U,r,m,o);return ne.length===0?{kind:"invalid-input"}:{kind:"next-input-options",nextInputs:ne}}let p=l.location,b=f.find(U=>yt(U.input,l));if(b===void 0)return{kind:"invalid-input"};let k=n[2],C=e.processSecondInput(b.kind,c,u,p,t),I=C?.[0]??[],_=C?.[1]??[];if(k===void 0){if(_.length!==0){let U=e.applicableInputOptions(n,_,r,m,o);return U.length===0?{kind:"invalid-input"}:{kind:"next-input-options",nextInputs:U}}return I.length===0?{kind:"invalid-input"}:e.resolveEvents(I,t)}let N=_.find(U=>yt(U.input,k));if(N===void 0)return{kind:"invalid-input"};let F=n[3],D=e.processThirdInput(N,c,u,p,t);I.push(...D?.[0]??[]);let P=D?.[1]??[];if(F===void 0){if(P.length!==0){let U=e.applicableInputOptions(n,P,r,m,o);return U.length===0?{kind:"invalid-input"}:{kind:"next-input-options",nextInputs:U}}return I.length===0?{kind:"invalid-input"}:e.resolveEvents(I,t)}let V=Wi(F,N,P);return V===void 0?{kind:"invalid-input"}:(I.push(V),e.resolveEvents(I,t))}i(Ki,"dispatchStagedInput");var Xe=class e{static{i(this,"MonsGame")}#e;#n;#t;#o;constructor(n=!1,t=un,o){let r=o===void 0?new Ln(t):o.fork();this.#e={board:r,whiteScore:0,blackScore:0,activeColor:y.White,actionsUsedCount:0,manaMovesCount:0,monsMovesCount:0,whitePotionsCount:0,blackPotionsCount:0,turnNumber:1},this.#n=new Lo(n),this.#t=new Po,this.#o={board:i(()=>this.board,"board"),requiresCounterCapacityFiltering:i(()=>this.#h(),"requiresCounterCapacityFiltering"),secondInputOptions:i((...a)=>this.#c(...a),"secondInputOptions"),processSecondInput:i((...a)=>this.#k(...a),"processSecondInput"),processThirdInput:i((...a)=>this.#M(...a),"processThirdInput"),applicableInputOptions:i((...a)=>this.#b(...a),"applicableInputOptions"),resolveEvents:i((...a)=>this.#S(...a),"resolveEvents")}}get board(){return this.#e.board.readonlyView()}get whiteScore(){return this.#e.whiteScore}get blackScore(){return this.#e.blackScore}get activeColor(){return this.#e.activeColor}get actionsUsedCount(){return this.#e.actionsUsedCount}get manaMovesCount(){return this.#e.manaMovesCount}get monsMovesCount(){return this.#e.monsMovesCount}get whitePotionsCount(){return this.#e.whitePotionsCount}get blackPotionsCount(){return this.#e.blackPotionsCount}get turnNumber(){return this.#e.turnNumber}get takebackFens(){return this.#n.takebackFens}get isMovesVerified(){return this.#n.movesVerified}get withVerboseTracking(){return this.#n.verboseTrackingEnabled}get verboseTrackingEntities(){return this.#n.trackingEntries}replaceHistory(n){this.#n.replace(n)}#r(n){this.#e.whiteScore=n.whiteScore,this.#e.blackScore=n.blackScore,this.#e.activeColor=n.activeColor,this.#e.actionsUsedCount=n.actionsUsedCount,this.#e.manaMovesCount=n.manaMovesCount,this.#e.monsMovesCount=n.monsMovesCount,this.#e.whitePotionsCount=n.whitePotionsCount,this.#e.blackPotionsCount=n.blackPotionsCount,this.#e.turnNumber=n.turnNumber}static#a(n,t){return new e(n,t.variant,t)}static newSimulationState(n){let t=e.#a(!1,n.board);return t.#r(n),t.#n.setTakebackTracking(!1),t}static fromFen(n,t=!1){let o=Ni(n);if(o===void 0)return;let r=e.#a(t,o.board);return r.#r(o),r.#n.resetForLoadedFen(),r}fen(){return _i(this)}copy(){let n=e.#a(this.withVerboseTracking,this.board);return n.#r(this),n.#n=this.#n.copy(),n}fork(){let n=e.#a(!1,this.board);return n.#r(this),n.#n=this.#n.fork(),n}variant(){return this.board.variant}replaceBoardItems(n){let t=Array.from({length:121},()=>{});for(let[r,a]of n)t[re(r)]=a;let o=mt.fromItems(t,this.variant());this.#e.board=o,this.#n.resetForBoardReplacement(),this.invalidateProcessInputCache()}setTakebackHistoryTracking(n){this.#n.setTakebackTracking(n),this.invalidateProcessInputCache()}invalidateProcessInputCache(){this.#t.invalidate()}setVerboseTracking(n){this.#n.setVerboseTracking(n)}#y(n){let t=n.board.fork();this.#e.board=t,this.#r(n),this.invalidateProcessInputCache()}canTakeback(n){return this.#n.canTakeback(this.activeColor,n)}processInput(n,t,o){return this.processInputWithStartOptions(n,t,o,void 0)}processInputWithStartOptions(n,t,o,r){return this.#s(n,t,o,r??na)}inspectInputGrammar(n,t){return this.#s(n,!0,!1,t,!1)}#s(n,t,o,r,a=!0){if(n.length>Qn||this.winnerColor()!==void 0)return{kind:"invalid-input"};if(n.length===0){let u=(a?2:0)|(r.includeManaStartsWithPotionAction?1:0),c=this.#t.getStartSuggestion(u);if(c!==void 0)return c;let l=Gi(this,r,m=>this.#s(m,!0,!0,r,a));return this.#t.setStartSuggestion(u,l),l}let s=n[0];if(n.length===1&&s?.kind==="takeback"){let u=this.#n.prepareTakeback(this.activeColor,this.activeColor);if(u===void 0)return{kind:"invalid-input"};let c=e.fromFen(u.previousFen,!1);return c===void 0?{kind:"invalid-input"}:t?{kind:"events",events:[{kind:"takeback"}]}:(this.#y(c),this.#n.commitTakeback(u),{kind:"events",events:[{kind:"takeback"}]})}return Ki(this.#o,n,t,o,r,a)}#h(){return this.turnNumber===Number.MAX_SAFE_INTEGER||this.whitePotionsCount===Number.MAX_SAFE_INTEGER||this.blackPotionsCount===Number.MAX_SAFE_INTEGER}#b(n,t,o,r,a){if(!r)return t;let s=i(c=>this.#d([...n,c.input],o),"applicable");if(!a)return t.filter(s);let u=t.find(s);return u===void 0?[]:[u]}#d(n,t){let o=`${t.includeManaStartsWithPotionAction?1:0}|${Hr(n)}`,r=this.#t.getCompletionViability(o);if(r!==void 0)return r;let a=this.#s(n,!0,!1,t,!1),s=(()=>{switch(a.kind){case"invalid-input":return!1;case"events":return Rr(this.#e,a.events);case"locations-to-start-from":return a.locations.some(u=>this.#d([...n,{kind:"location",location:u}],t));case"next-input-options":return a.nextInputs.some(u=>this.#d([...n,u.input],t))}})();return this.#t.setCompletionViability(o,s),s}#c(n,t,o,r){let a=String(re(n)),s=this.#t.getSecondInputOptions(a);if(s!==void 0)return s;let u=Di(this,n,t,r);return o&&this.#t.setSecondInputOptions(a,u),u}#k(n,t,o,r,a){let s=`${n}|${zt(t)}|${re(o)}|${re(r)}`,u=this.#t.lookupSecondStage(s);if(u!==Wt)return u;let c=Vi(this,n,t,o,r);return a&&this.#t.setSecondStage(s,c),c}#M(n,t,o,r,a){let s=`${Ho(n.input)}|${n.kind}|${n.actorMonItem===void 0?"":zt(n.actorMonItem)}|${zt(t)}|${re(o)}|${re(r)}`,u=this.#t.lookupThirdStage(s);if(u!==Wt)return u;let c=Ui(this.board,n,t,o,r);return a&&this.#t.setThirdStage(s,c),c}#S(n,t){if(t)return{kind:"events",events:n};let o=this.applyAndAddResultingEvents(n);return o===void 0?{kind:"invalid-input"}:{kind:"events",events:o}}applyAndAddResultingEvents(n){return this.#m(n,this.#n.eventApplicationTrackingEnabled)}forkAndApplyEventsForSimulation(n){let t=this.fork(),o=t.#m(n,!1);return o===void 0?void 0:{game:t,events:o}}#m(n,t){if(!Rr(this.#e,n))return;if(this.invalidateProcessInputCache(),!t)return Ro(this.#e,n).events;let o=i(()=>this.fen(),"snapshotFen");this.#n.beginEventApplication(o,this.activeColor);let r=Ro(this.#e,n);return this.#n.completeEventApplication({snapshotFen:o,color:this.activeColor,events:r.events,turnAdvanced:r.turnAdvanced,winner:r.winner}),r.events}nextInputsFromLocations(n,t,o,r){return oa(n,t,o,r)}availableMoveKinds(){let n=new Map;return n.set(Oe.MonMove,ee-this.monsMovesCount),n.set(Oe.Action,0),n.set(Oe.Potion,0),n.set(Oe.ManaMove,0),this.turnNumber===1||(n.set(Oe.Action,_e-this.actionsUsedCount),n.set(Oe.Potion,this.playerPotionsCount()),n.set(Oe.ManaMove,An-this.manaMovesCount)),n}winnerColor(){return bo(this)}isLaterThan(n){return this.variant()!==n.variant()?!1:this.turnNumber>n.turnNumber?!0:this.turnNumber!==n.turnNumber?!1:this.playerPotionsCount()<n.playerPotionsCount()||this.actionsUsedCount>n.actionsUsedCount||this.manaMovesCount>n.manaMovesCount||this.monsMovesCount>n.monsMovesCount||this.board.faintedMonsLocations(Sn(this.activeColor)).length>n.board.faintedMonsLocations(Sn(n.activeColor)).length}isFirstTurn(){return it(this)}playerPotionsCount(){return yo(this)}playerCanMoveMon(){return Ia(this)}playerCanMoveMana(){return Aa(this)}playerCanUseAction(){return Ca(this)}};function Fo(e){let n={i:e.row,j:e.column};if(!Number.isInteger(e.row)||!Number.isInteger(e.column)||!cn(n))throw new RangeError(`position must contain integer row and column values from 0 through ${10}`);return n}i(Fo,"toEnginePosition");function Y(e){return{row:e.i,column:e.j}}i(Y,"fromEnginePosition");function an(e){return{kind:e.kind,color:e.color,cooldown:e.cooldown}}i(an,"fromEngineMon");function Kt(e){return e.kind==="supermana"?{kind:"supermana"}:{kind:"regular",color:e.color}}i(Kt,"fromEngineMana");function ft(e){switch(e.kind){case"mon":return{kind:"mon",mon:an(e.mon)};case"mana":return{kind:"mana",mana:Kt(e.mana)};case"mon-with-mana":return{kind:"mon",mon:an(e.mon),carrying:{kind:"mana",mana:Kt(e.mana)}};case"mon-with-consumable":return{kind:"mon",mon:an(e.mon),carrying:{kind:"consumable",consumable:e.consumable}};case"consumable":return{kind:"consumable",consumable:e.consumable}}}i(ft,"fromEngineItem");function ji(e){switch(e.kind){case"regular":case"consumable-base":case"supermana-base":return{kind:e.kind};case"mana-base":case"mana-pool":return{kind:e.kind,color:e.color};case"mon-base":return{kind:e.kind,color:e.color,monKind:e.monKind}}}i(ji,"fromEngineSquare");function _r(e){switch(e.kind){case"takeback":return{kind:"takeback"};case"position":return{kind:"location",location:Fo(e.position)};case"modifier":return{kind:"modifier",modifier:e.modifier}}}i(_r,"toEngineInput");function Nr(e){switch(e.kind){case"takeback":return{kind:"takeback"};case"location":return{kind:"position",position:Y(e.location)};case"modifier":return{kind:"modifier",modifier:e.modifier}}}i(Nr,"fromEngineInput");function cu(e){let n=Nr(e.input),t=e.actorMonItem===void 0?{}:{actor:ft(e.actorMonItem)};if(e.kind==="select-consumable"){if(n.kind!=="modifier")throw new Error("consumable selection requires a modifier input");return{action:e.kind,input:n,...t}}if(n.kind!=="position")throw new Error(`${e.kind} requires a position input`);switch(e.kind){case"mon-move":case"mana-move":case"mystic-action":case"demon-action":case"demon-additional-step":case"spirit-target-capture":case"spirit-target-move":case"bomb-attack":return{action:e.kind,input:n,...t}}}i(cu,"fromEngineInputOption");function Bo(e){switch(e.kind){case"mon-move":return{kind:e.kind,item:ft(e.item),from:Y(e.from),to:Y(e.to)};case"mana-move":return{kind:e.kind,mana:Kt(e.mana),from:Y(e.from),to:Y(e.to)};case"mana-scored":case"mana-dropped":return{kind:e.kind,mana:Kt(e.mana),at:Y(e.at)};case"mystic-action":return{kind:e.kind,mystic:an(e.mystic),from:Y(e.from),to:Y(e.to)};case"demon-action":case"demon-additional-step":return{kind:e.kind,demon:an(e.demon),from:Y(e.from),to:Y(e.to)};case"spirit-target-move":return{kind:e.kind,item:ft(e.item),from:Y(e.from),to:Y(e.to),by:Y(e.by)};case"pickup-bomb":return{kind:e.kind,by:an(e.by),at:Y(e.at)};case"pickup-potion":return{kind:e.kind,by:ft(e.by),at:Y(e.at)};case"use-potion":case"supermana-back-to-base":return{kind:e.kind,from:Y(e.from),to:Y(e.to)};case"pickup-mana":return{kind:e.kind,mana:Kt(e.mana),by:an(e.by),at:Y(e.at)};case"mon-fainted":return{kind:e.kind,mon:an(e.mon),from:Y(e.from),to:Y(e.to)};case"bomb-attack":return{kind:e.kind,by:an(e.by),from:Y(e.from),to:Y(e.to)};case"mon-awake":return{kind:e.kind,mon:an(e.mon),at:Y(e.at)};case"bomb-explosion":return{kind:e.kind,at:Y(e.at)};case"next-turn":return{kind:e.kind,color:e.color};case"game-over":return{kind:e.kind,winner:e.winner};case"takeback":return{kind:e.kind}}}i(Bo,"fromEngineEvent");function Pr(e,n){switch(e.kind){case"invalid-input":return{kind:"invalid",inputFen:n};case"locations-to-start-from":return{kind:"awaiting-start",inputFen:n,positions:e.locations.map(Y)};case"next-input-options":return{kind:"awaiting-input",inputFen:n,options:e.nextInputs.map(cu)};case"events":return{kind:"complete",inputFen:n,events:e.events.map(Bo)}}}i(Pr,"fromEngineOutput");function $i(e){return{monMoves:e.get(Oe.MonMove)??0,manaMoves:e.get(Oe.ManaMove)??0,actions:e.get(Oe.Action)??0,potions:e.get(Oe.Potion)??0}}i($i,"availableMoveCountsFromEngine");function uu(e){if(e!=="")return ht(e)}i(uu,"parseReplayMove");function Do(e,n,t,o){let r=0,a=0;for(;r<n.length||a<t.length;){let s=e.activeColor===y.White,l=(s?n:t)[s?r:a];if(l===void 0)return{status:"missing-move",whiteMovesProcessed:r,blackMovesProcessed:a};let m=uu(l);if(m===void 0)return{status:"invalid-move",whiteMovesProcessed:r,blackMovesProcessed:a};let f=e.processInput(m,!1,!1);if(f.kind!=="events"||f.events.length===0)return{status:"invalid-move",whiteMovesProcessed:r,blackMovesProcessed:a};s?r+=1:a+=1;let p={whiteMovesProcessed:r,blackMovesProcessed:a};if(o?.(e,p)===!1)return{status:"stopped",...p}}return{status:"complete",whiteMovesProcessed:r,blackMovesProcessed:a}}i(Do,"replayInterleavedMoves");var Lr=class e{static{i(this,"Game")}#e;constructor(n={}){let{variant:t=E.Classic}=n;if(!du(t))throw new TypeError(`unsupported game variant: ${String(t)}`);this.#e=new Xe(!0,t)}static#n(n){let t=new e({variant:n.variant()});return t.#e=n,t}static fromFen(n){let t=Xe.fromFen(n,!0);if(t?.fen()===n)return e.#n(t)}get variant(){return this.#e.variant()}get activeColor(){return this.#e.activeColor}get turnNumber(){return this.#e.turnNumber}get scores(){return{[y.White]:this.#e.whiteScore,[y.Black]:this.#e.blackScore}}get potions(){return{[y.White]:this.#e.whitePotionsCount,[y.Black]:this.#e.blackPotionsCount}}get winner(){return this.#e.winnerColor()}get historyVerified(){return this.#e.isMovesVerified}get takebackFens(){return[...this.#e.takebackFens]}get trackingEntries(){return this.#e.verboseTrackingEntities.map(n=>({fen:n.fen,color:n.color,events:n.events.map(Bo),eventsFen:wi(n.events)}))}toFen(){return this.#e.fen()}preview(n){let t=n.map(_r);return this.#t(t,et(t))}play(n){let t=n.map(_r);return this.#o(t,et(t))}playFen(n){let t=ht(n);return t===void 0?{kind:"invalid",inputFen:n}:this.#o(t,et(t))}#t(n,t){let o=n.length===1&&n[0]?.kind==="takeback"?this.#e.copy():this.#e.fork();return Pr(o.processInput(n,!1,!1),t)}#o(n,t){let o=Pr(this.#e.processInput(n,!1,!1),t);return o.kind==="complete"?o:{kind:"invalid",inputFen:t}}itemAt(n){let t=this.#e.board.get(Fo(n));return t===void 0?void 0:ft(t)}squareAt(n){return ji(this.#e.board.squareAt(Fo(n)))}contentPositions(){let n=new Map;for(let[t]of this.#e.board.entries())n.set(qi(t.i,t.j),{row:t.i,column:t.j});for(let t of this.#e.board.allMonsBases())n.set(qi(t.i,t.j),{row:t.i,column:t.j});return[...n.values()].sort((t,o)=>t.row-o.row||t.column-o.column)}canTakeback(n){if(!lu(n))throw new TypeError(`unsupported color: ${String(n)}`);return this.#e.canTakeback(n)}takeback(){return this.play([{kind:"takeback"}])}previousTurn(n){let t=this.#e.verboseTrackingEntities;if(t.length<=1)return;let o=t.slice(0,-1),r=o[o.length-1],a=Xe.fromFen(r?.fen??this.#e.fen(),!0);if(a===void 0)return;let s=n.lastIndexOf(a.fen());if(n.length>0&&s<0)return;let u=s<0?[]:n.slice(0,s+1);if(!u.some(c=>{let l=Xe.fromFen(c,!1);return l?.fen()!==c||l.variant()!==a.variant()}))return a.replaceHistory({takebackFens:u,trackingEntries:o,verboseTrackingEnabled:!0,movesVerified:this.#e.isMovesVerified}),e.#n(a)}verifyHistory(n){let t=new Xe(!0,this.#e.variant());return Do(t,n.white,n.black).status!=="complete"||t.fen()!==this.#e.fen()?!1:(this.#e.replaceHistory({takebackFens:t.takebackFens,trackingEntries:t.verboseTrackingEntities,movesVerified:!0}),!0)}isLaterThan(n){return this.#e.isLaterThan(n.#e)}availableMoveCounts(){return $i(this.#e.availableMoveKinds())}suggestMove(n){if(!mu(n))throw new TypeError(`unsupported automove preference: ${String(n)}`);let t=Ci(this.#e,n);if(t.output.kind!=="events")return;let o=ht(t.inputFen);if(o!==void 0)return{inputs:o.map(Nr),inputFen:t.inputFen,events:t.output.events.map(Bo)}}};function lu(e){return e===y.White||e===y.Black}i(lu,"isColor");function du(e){return Object.values(E).includes(e)}i(du,"isGameVariant");function mu(e){return e==="fast"||e==="normal"||e==="pro"}i(mu,"isAutomovePreference");function qi(e,n){return`${e},${n}`}i(qi,"positionKey");function fu(e){let n=Hi(e.white.fen),t=Hi(e.black.fen);if(n===void 0||t===void 0)return n===void 0&&t===void 0?{kind:"invalid"}:{kind:"winner",winner:n===void 0?y.Black:y.White};if(n.variant()!==t.variant())return{kind:"invalid"};let o=n.fen(),r=t.fen();if(n.winnerColor()===void 0&&t.winnerColor()===void 0)return{kind:"ongoing"};let a=new Xe(!1,n.variant()),s;return Do(a,e.white.moves,e.black.moves,(u,{whiteMovesProcessed:c,blackMovesProcessed:l})=>{let m=u.winnerColor();if(m===void 0)return!0;let f=m===y.White?c===e.white.moves.length:l===e.black.moves.length,p=m===y.White?o:r;return s=f&&p===u.fen()?{kind:"winner",winner:m}:{kind:"invalid"},!1}),s??{kind:"invalid"}}i(fu,"resolveMatch");function Hi(e){let n=Xe.fromFen(e,!1);return n?.fen()===e?n:void 0}i(Hi,"submittedGame");export{y as Color,A as Consumable,Lr as Game,E as GameVariant,X as Modifier,M as MonKind,fu as resolveMatch};
|