mons-rules 0.4.8 → 0.4.11

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.
@@ -1 +1 @@
1
- var es=Object.defineProperty;var i=(e,n)=>es(e,"name",{value:n,configurable:!0});var h=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 $o=Object.freeze({[h.White]:0,[h.Black]:1});function ze(e){return $o[e]}i(ze,"colorId");var Xe=Object.freeze({[M.Demon]:0,[M.Drainer]:1,[M.Angel]:2,[M.Spirit]:3,[M.Mystic]:4}),xe=Object.freeze({MonMove:"mon-move",ManaMove:"mana-move",Action:"action",Potion:"potion"}),qo=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===h.Black?h.White:h.Black}i(Sn,"otherColor");function Vn(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(Vn,"createMon");function Ko(e,n){return e.kind===n.kind&&e.color===n.color&&e.cooldown===n.cooldown}i(Ko,"monEquals");function Ae(e){return e.cooldown>0}i(Ae,"isMonFainted");function Kr(e){return Vn(e.kind,e.color,2)}i(Kr,"faintMon");function jr(e){return e.cooldown>0?Vn(e.kind,e.color,e.cooldown-1):Le(e)}i(jr,"decreaseMonCooldown");function Yn(e){return Object.freeze({kind:"regular",color:e})}i(Yn,"regularMana");function Wr(e,n){return e.kind==="supermana"?n.kind==="supermana":n.kind==="regular"&&e.color===n.color}i(Wr,"manaEquals");function Ho(e,n){return e||!n?2:1}i(Ho,"manaScoreForOwnership");function $r(e,n){return Ho(e.kind==="supermana",e.kind==="regular"&&e.color===n)}i($r,"manaScore");function Fe(e){return Object.freeze({kind:"mon",mon:Le(e)})}i(Fe,"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:Le(e),mana:Xn(n)})}i(Zn,"monWithManaItem");function pt(e,n){return Object.freeze({kind:"mon-with-consumable",mon:Le(e),consumable:n})}i(pt,"monWithConsumableItem");function bt(e){return Object.freeze({kind:"consumable",consumable:e})}i(bt,"consumableItem");function Le(e){return Object.isFrozen(e)?e:Vn(e.kind,e.color,e.cooldown)}i(Le,"immutableMon");function Xn(e){return e.kind==="supermana"?Mn:Object.isFrozen(e)?e:Yn(e.color)}i(Xn,"immutableMana");function Dn(e){switch(e.kind){case"mon":return Object.isFrozen(e)&&Object.isFrozen(e.mon)?e:Fe(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(Dn,"immutableItem");function W(e){return{i:e.i,j:e.j}}i(W,"copyLocation");function ns(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(ns,"copyInput");function Jn(e){let n=ns(e.input);return e.actorMonItem===void 0?{input:n,kind:e.kind}:{input:n,kind:e.kind,actorMonItem:Dn(e.actorMonItem)}}i(Jn,"copyNextInput");function Un(e){switch(e.kind){case"mon-move":return{kind:"mon-move",item:Dn(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:Le(e.mystic),from:W(e.from),to:W(e.to)};case"demon-action":return{kind:"demon-action",demon:Le(e.demon),from:W(e.from),to:W(e.to)};case"demon-additional-step":return{kind:"demon-additional-step",demon:Le(e.demon),from:W(e.from),to:W(e.to)};case"spirit-target-move":return{kind:"spirit-target-move",item:Dn(e.item),from:W(e.from),to:W(e.to),by:W(e.by)};case"pickup-bomb":return{kind:"pickup-bomb",by:Le(e.by),at:W(e.at)};case"pickup-potion":return{kind:"pickup-potion",by:Dn(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:Le(e.by),at:W(e.at)};case"mon-fainted":return{kind:"mon-fainted",mon:Le(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:Le(e.by),from:W(e.from),to:W(e.to)};case"mon-awake":return{kind:"mon-awake",mon:Le(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(Un,"copyEvent");function zo(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(Un)}}}i(zo,"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 qr(e){let n=$(e);return n===void 0||!Ae(n)}i(qr,"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 Xo(e){switch(e.kind){case"mon-with-consumable":case"consumable":return e.consumable;case"mon":case"mana":case"mon-with-mana":return}}i(Xo,"itemConsumable");function Hr(e,n){switch(e.kind){case"mon":return n.kind==="mon"&&Ko(e.mon,n.mon);case"mana":return n.kind==="mana"&&Wr(e.mana,n.mana);case"mon-with-mana":return n.kind==="mon-with-mana"&&Ko(e.mon,n.mon)&&Wr(e.mana,n.mana);case"mon-with-consumable":return n.kind==="mon-with-consumable"&&Ko(e.mon,n.mon)&&e.consumable===n.consumable;case"consumable":return n.kind==="consumable"&&e.consumable===n.consumable}}i(Hr,"itemEquals");function jo(e){return`${e.kind}:${e.color}:${e.cooldown}`}i(jo,"monKey");function Gr(e){return e.kind==="supermana"?"s":`r:${e.color}`}i(Gr,"manaKey");function Xt(e){switch(e.kind){case"mon":return`m:${jo(e.mon)}`;case"mana":return`a:${Gr(e.mana)}`;case"mon-with-mana":return`mm:${jo(e.mon)}:${Gr(e.mana)}`;case"mon-with-consumable":return`mc:${jo(e.mon)}:${e.consumable}`;case"consumable":return`c:${e.consumable}`}}i(Xt,"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 zr(e){return e.map(Qo).join(";")}i(zr,"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 Qt=48,ts=57,os=44,rs=59,as=108,is=109,ss=122,cs=112,us=98;function ls(e){switch(e){case X.SelectPotion:return"p";case X.SelectBomb:return"b"}}i(ls,"modifierFen");function ds(e){switch(e.kind){case"takeback":return"z";case"location":return`l${B(e.location)}`;case"modifier":return`m${ls(e.modifier)}`}}i(ds,"inputFen");function Xr(e,n,t){if(n>=t)return;let o=e.charCodeAt(n);if(!(o<Qt||o>ts))return o===Qt+1&&n+1<t&&e.charCodeAt(n+1)===Qt?10:o-Qt}i(Xr,"parseCoordinate");function Qr(e,n){return e+(n===10?2:1)}i(Qr,"coordinateEnd");function ms(e,n,t){let o=Xr(e,n,t);if(o===void 0)return;let r=Qr(n,o);if(r>=t||e.charCodeAt(r)!==os)return;let a=r+1,s=Xr(e,a,t);if(!(s===void 0||Qr(a,s)!==t))return{i:o,j:s}}i(ms,"parseLocation");function fs(e,n,t){switch(e.charCodeAt(n)){case as:{let o=ms(e,n+1,t);return o===void 0?void 0:{kind:"location",location:o}}case is:return t!==n+2?void 0:e.charCodeAt(n+1)===cs?{kind:"modifier",modifier:X.SelectPotion}:e.charCodeAt(n+1)===us?{kind:"modifier",modifier:X.SelectBomb}:void 0;case ss:return t===n+1?{kind:"takeback"}:void 0;default:return}}i(fs,"parseInputFenRange");function et(e){return e.map(ds).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)!==rs)continue;if(n.length===Qn)return;let r=fs(e,t,o);if(r===void 0)return;n.push(r),t=o+1}return n}i(ht,"parseInputArrayFen");var Yr=Math.trunc(5.5),ps=10;function Z(e,n){return{i:e,j:n}}i(Z,"location");function kt(e,n){return e.i===n.i&&e.j===n.j}i(kt,"locationEquals");function un(e){return Number.isInteger(e.i)&&Number.isInteger(e.j)&&e.i>=0&&e.i<11&&e.j>=0&&e.j<11}i(un,"isValidLocation");function Wn(e){if(!un(e))throw new RangeError(`board location must use integer coordinates from 0 to ${ps}`)}i(Wn,"assertValidLocation");function re(e){return Wn(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 Zr(e,n){return Z(Math.trunc((e.i+n.i)/2),Math.trunc((e.j+n.j)/2))}i(Zr,"locationBetween");function Jr(e,n){return Math.max(Math.abs(n.i-e.i),Math.abs(n.j-e.j))}i(Jr,"locationDistance");function ea(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);un(a)&&!kt(a,e)&&t.push(a)}return t}i(ea,"nearbyLocationsFor");function na(e,n){let t=[];for(let[o,r]of n){let a=Z(e.i+o,e.j+r);un(a)&&t.push(a)}return t}i(na,"directionalReachabilityFor");function bs(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);un(r)&&n.push(r)}return n}i(bs,"spiritReachabilityFor");function Mt(e){return Object.freeze(Array.from({length:121},(n,t)=>Object.freeze(e(nt(t)).map(o=>Object.freeze(o)))))}i(Mt,"buildCache");var ys=Mt(e=>ea(e,1)),hs=Mt(e=>ea(e,3)),ks=Mt(e=>na(e,[[-2,-2],[2,2],[-2,2],[2,-2]])),Ms=Mt(e=>na(e,[[-2,0],[2,0],[0,2],[0,-2]])),Ss=Mt(bs);function St(e,n){return un(n)?e[re(n)]??[]:[]}i(St,"cachedLocations");function Be(e){return St(ys,e)}i(Be,"nearbyLocations");function Yt(e){return St(hs,e)}i(Yt,"bombReachableLocations");function Zt(e){return St(ks,e)}i(Zt,"mysticReachableLocations");function Jt(e){return St(Ms,e)}i(Jt,"demonReachableLocations");function eo(e){return St(Ss,e)}i(eo,"spiritReachableLocations");var Yo=Object.freeze(Array.from({length:121},(e,n)=>Object.freeze(nt(n))));var ta=Object.freeze({includeManaStartsWithPotionAction:!1}),Zo=Object.freeze({includeManaStartsWithPotionAction:!0});function Re(e,n,t){return t===void 0?{input:e,kind:n}:{input:e,kind:n,actorMonItem:t}}i(Re,"nextInput");function oa(e){let n=[],t;for(let o of e)o.kind!==t&&(n.push(o),t=o.kind);return n}i(oa,"firstOptionFromEachKindGroup");function Jo(e,n){return e!==void 0&&Jr(e,n)===1}i(Jo,"isLocationGuardedByAngelLocation");function ra(e,n,t,o){if(t!==void 0){for(let a of e)if(kt(a,t))return o(t)?[Re({kind:"location",location:t},n)]:[];return[]}let r=[];for(let a of e)o(a)&&r.push(Re({kind:"location",location:a},n));return r}i(ra,"nextInputsFromLocations");var It=new RangeError("fast workspace allocation failed");function At(e){return e===It}i(At,"isFastWorkspaceAllocationFailure");function _e(e){throw e instanceof RangeError?It:e}i(_e,"rethrowFastWorkspaceAllocation");var ln=E.Classic,Ce=5,ee=5,An=1,Ne=1,Gn=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]),sa=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}),Is=new Map(Gn.map(e=>[sa[e],e]));function ca(e){return sa[e]}i(ca,"gameVariantId");function Q(...e){return Object.freeze(e.map(([n,t])=>Object.freeze(Z(n,t))))}i(Q,"locations");function De(e,n){return Object.freeze({[h.Black]:e,[h.White]:n})}i(De,"manaLayout");var As=Object.freeze({[E.Classic]:De(Q([3,4],[3,6],[4,3],[4,5],[4,7]),Q([7,4],[7,6],[6,3],[6,5],[6,7])),[E.SwappedManaRows]:De(Q([3,3],[3,5],[3,7],[4,4],[4,6]),Q([7,3],[7,5],[7,7],[6,4],[6,6])),[E.OffsetArcManaRows]:De(Q([3,4],[3,6],[4,2],[4,5],[4,8]),Q([6,2],[6,5],[6,8],[7,4],[7,6])),[E.CenterSpokeManaRows]:De(Q([3,5],[4,2],[4,4],[4,6],[4,8]),Q([6,2],[6,4],[6,6],[6,8],[7,5])),[E.AlternatingManaRows]:De(Q([4,1],[4,3],[4,5],[4,7],[4,9]),Q([6,1],[6,3],[6,5],[6,7],[6,9])),[E.InnerWedgeManaRows]:De(Q([3,4],[3,6],[4,4],[4,5],[4,6]),Q([6,4],[6,5],[6,6],[7,4],[7,6])),[E.OuterWedgeManaRows]:De(Q([3,4],[3,5],[3,6],[4,3],[4,7]),Q([6,3],[6,7],[7,4],[7,5],[7,6])),[E.BentCenterManaRows]:De(Q([3,5],[4,4],[4,5],[4,6],[5,3]),Q([5,7],[6,4],[6,5],[6,6],[7,5])),[E.OuterEdgeManaRows]:De(Q([4,0],[4,1],[4,9],[4,10],[5,1]),Q([5,9],[6,0],[6,1],[6,9],[6,10])),[E.SplitFlankManaRows]:De(Q([3,4],[3,6],[4,2],[4,3],[5,2]),Q([5,8],[6,7],[6,8],[7,4],[7,6])),[E.ForwardBridgeManaRows]:De(Q([3,4],[3,6],[4,3],[4,5],[5,4]),Q([5,6],[6,5],[6,7],[7,4],[7,6])),[E.CornerChainManaRows]:De(Q([3,5],[3,6],[4,6],[4,7],[5,7]),Q([5,3],[6,3],[6,4],[7,4],[7,5]))}),ua=Object.freeze({kind:"regular"}),aa=Object.freeze({kind:"consumable-base"}),Cs=Object.freeze({kind:"supermana-base"}),Ct=Object.freeze(Z(5,5)),gt=Q([0,3],[0,4],[0,5],[0,6],[0,7],[10,3],[10,4],[10,5],[10,6],[10,7]);function la(e){return Number.isSafeInteger(e)?Is.get(e):void 0}i(la,"gameVariantFromId");function ia(e,n){return As[e][n]}i(ia,"manaBaseLocations");function gs(e){let n=Array.from({length:121}).fill(ua),t=i((o,r)=>{n[re(o)]=Object.freeze(r)},"put");t(Z(0,0),{kind:"mana-pool",color:h.Black}),t(Z(0,10),{kind:"mana-pool",color:h.Black}),t(Z(10,0),{kind:"mana-pool",color:h.White}),t(Z(10,10),{kind:"mana-pool",color:h.White}),t(Z(0,3),{kind:"mon-base",monKind:M.Mystic,color:h.Black}),t(Z(0,4),{kind:"mon-base",monKind:M.Spirit,color:h.Black}),t(Z(0,5),{kind:"mon-base",monKind:M.Drainer,color:h.Black}),t(Z(0,6),{kind:"mon-base",monKind:M.Angel,color:h.Black}),t(Z(0,7),{kind:"mon-base",monKind:M.Demon,color:h.Black}),t(Z(10,3),{kind:"mon-base",monKind:M.Demon,color:h.White}),t(Z(10,4),{kind:"mon-base",monKind:M.Angel,color:h.White}),t(Z(10,5),{kind:"mon-base",monKind:M.Drainer,color:h.White}),t(Z(10,6),{kind:"mon-base",monKind:M.Spirit,color:h.White}),t(Z(10,7),{kind:"mon-base",monKind:M.Mystic,color:h.White});for(let o of ia(e,h.Black))t(o,{kind:"mana-base",color:h.Black});for(let o of ia(e,h.White))t(o,{kind:"mana-base",color:h.White});return t(Z(5,0),aa),t(Z(5,10),aa),t(Ct,Cs),Object.freeze(n)}i(gs,"buildSquares");var Es=new Map(Gn.map(e=>[e,gs(e)]));function no(e){let n=Es.get(e);if(n===void 0)throw new TypeError(`unsupported game variant: ${e}`);return n}i(no,"squaresForVariant");function er(e,n){return Wn(e),no(n)[re(e)]??ua}i(er,"squareAtForVariant");function vs(e){return er(e,ln)}i(vs,"squareAt");function Ts(e){switch(e.kind){case"mon-base":return Fe(Vn(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(Ts,"initialItemForSquare");function ws(e){return Object.freeze(no(e).map(Ts))}i(ws,"buildInitialItems");var Os=new Map(Gn.map(e=>[e,ws(e)]));function da(e){let n=Os.get(e);if(n===void 0)throw new TypeError(`unsupported game variant: ${e}`);return[...n]}i(da,"initialItemsForVariant");function ma(e,n){for(let t of gt){let o=vs(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(ma,"monBase");var ge=Object.keys($o).length,dn=Object.keys(Xe).length,Et=ge*dn,J=1,pe=2,H=3,vt=1,Tt=2,ye=3,Ee=1,pa=2,ve=3,wt=Xe[M.Demon],ke=Xe[M.Drainer],Ot=Xe[M.Angel],to=Xe[M.Spirit],oo=Xe[M.Mystic],xs=0,Rs=1,Je=2,_s=3,ba=5,ue=7,tt=re(Ct);function G(e){return e&3}i(G,"cellOccupancy");function ae(e){return e>>2&7}i(ae,"cellMonKind");function fe(e){return e>>5&1}i(fe,"cellMonColor");function ie(e){return e>>6&3}i(ie,"cellCooldown");function R(e){return e>>8&3}i(R,"cellMana");function N(e){return e>>10&3}i(N,"cellConsumable");function ot(e){let n=N(e);return n===0||n===Ee}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 ya(e){return pe|e<<10}i(ya,"makeConsumableCell");function Ve(e,n){return Ho(e===ye,e-1===n)}i(Ve,"manaScoreValue");function se(e,n){return e*ge+n}i(se,"monId");function at(e){return e!==Je&&e<ue}i(at,"squareIsRegularForMovement");function en(e){return e>=ba&&e<ue}i(en,"squareIsPool");function ro(e){return Math.trunc((e-ue)/ge)}i(ro,"squareMonBaseKind");function ao(e){return(e-ue)%ge}i(ao,"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 Me(e,n){let t=e[n];if(t===void 0)throw new RangeError("automove search slot index out of range");return t}i(Me,"at");function io(e,n,t){return rt(Xe[e.kind],ze(e.color),e.cooldown,n,t)}i(io,"fastMonCellFromMon");function Ns(e){let n=new Uint8Array(121),t=no(e);for(let o=0;o<121;o+=1){let r=t[o];if(r!==void 0)switch(r.kind){case"regular":n[o]=xs;break;case"consumable-base":n[o]=Rs;break;case"supermana-base":n[o]=Je;break;case"mana-base":n[o]=_s+ze(r.color);break;case"mana-pool":n[o]=ba+ze(r.color);break;case"mon-base":n[o]=ue+se(Xe[r.monKind],ze(r.color));break}}return n}i(Ns,"buildSquares");var Ps=new Map(Gn.map(e=>[e,Ns(e)]));function so(e){let n=Ps.get(e);if(n===void 0)throw new TypeError(`unsupported game variant: ${e}`);try{return n.slice()}catch(t){_e(t)}}i(so,"fastSquaresForVariant");var co=(()=>{let e=new Int32Array(Et).fill(-1),n=so(Me(Gn,0));for(let t of gt){let o=re(t),r=w(n,o);r>=ue&&(e[r-ue]=o)}return e})();function xt(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(xt,"buildOffsetTable");var le=xt(Be),gn=xt(Zt),En=xt(Jt),uo=xt(eo),lo=xt(Yt),Ls=(()=>{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 Se(e,n){return w(Ls,e*121+n)}i(Se,"chebyshev");function Fs(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(Fs,"midpointCompute");var Bs=(()=>{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]=Fs(n,t);return e})();function mo(e,n){return w(Bs,e*121+n)}i(mo,"midpoint");var fa=(()=>{let e=[],n=so(Me(Gn,0));for(let t=0;t<121;t+=1)en(w(n,t))&&e.push(t);return new Int32Array(e)})(),ha=(()=>{let e=new Uint8Array(121*ge);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<ge;a+=1){let s=a===0?10:0,u=Math.abs(s-t);e[a*121+n]=u>r?u:r}}return e})(),ka=(()=>{let e=new Uint8Array(121);for(let n=0;n<121;n+=1)e[n]=Math.abs(Yr-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<fa.length;o+=1){let r=Se(n,d(fa,o));r<t&&(t=r)}e[n]=t}return e})();function Ds(e){let n=e>>>0;return()=>(n^=n<<13,n>>>=0,n^=n>>>17,n^=n<<5,n>>>=0,n|0)}i(Ds,"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=Ds(49734321),Ma=3,fo=1+Et*Ma,Vs=vn(Tn,121*fo),Us=vn(Tn,121*fo),Ws=vn(Tn,484),Gs=vn(Tn,484),Ks=vn(Tn,484),js=vn(Tn,484),Sa=2048,po=vn(Tn,Sa),nr=vn(Tn,Sa);function Ia(e){return G(e)!==H?0:1+se(ae(e),fe(e))*Ma+ie(e)}i(Ia,"monSlot");function bo(e,n){return n===0?0:d(Vs,e*fo+Ia(n))^d(Ws,e*4+R(n))^d(Ks,e*4+N(n))}i(bo,"cellHashLo");function yo(e,n){return n===0?0:d(Us,e*fo+Ia(n))^d(Gs,e*4+R(n))^d(js,e*4+N(n))}i(yo,"cellHashHi");function tr(e,n){return e>=Ce?h.White:n>=Ce?h.Black:void 0}i(tr,"winnerForScores");function ho(e){return tr(e.whiteScore,e.blackScore)}i(ho,"winnerForState");function it(e){return e.turnNumber===1}i(it,"isFirstTurnState");function ko(e){return e.activeColor===h.White?e.whitePotionsCount:e.blackPotionsCount}i(ko,"currentPlayerPotions");function mn(e){return e<ee}i(mn,"canMoveMonForCounts");function Aa(e){return mn(e.monsMovesCount)}i(Aa,"canPlayerMoveMon");function wn(e,n){return!e&&n<An}i(wn,"canMoveManaForCounts");function Ca(e){return wn(it(e),e.manaMovesCount)}i(Ca,"canPlayerMoveMana");function Mo(e,n,t){return!e&&(t>0||n<Ne)}i(Mo,"canUseActionForCounts");function ga(e){return Mo(it(e),e.actionsUsedCount,ko(e))}i(ga,"canPlayerUseAction");function Ea(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&&!Ae(n.mon):e.kind==="consumable"&&e.consumable===A.BombOrPotion;case"mana":return t?.kind===M.Drainer&&!Ae(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(Ea,"spiritDestinationItemAllowed");function or(e,n,t,o,r,a,s){if(!wn(e,t))return!1;let u=mn(n);return!u&&!Mo(e,o,r)||!a||s&&!u&&o>=Ne&&r>0}i(or,"shouldSuggestRegularManaStartsFromScalars");function va(e,n,t){return or(it(e),e.monsMovesCount,e.manaMovesCount,e.actionsUsedCount,ko(e),n,t)}i(va,"shouldSuggestRegularManaStarts");function rr(e,n,t,o){return e?!mn(n):wn(e,t)?!mn(n)&&!o:!0}i(rr,"shouldAdvanceTurnForCounts");function Kn(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(Kn,"regularSquareForMovement");function ar(e,n){let t=e.get(n),o=e.squareAt(n);return t?.kind==="mon"?Kn(o)&&t.mon.kind===M.Drainer:t!==void 0?!1:Kn(o)}i(ar,"regularManaMoveDestinationAllowed");function $s(e){for(let n of e.board.allFreeRegularManaLocations(e.activeColor))for(let t of Be(n))if(ar(e.board,t))return!0;return!1}i($s,"hasMovableFreeRegularMana");function Ta(e){let n=it(e),o=!(!n&&wn(n,e.manaMovesCount)&&!mn(e.monsMovesCount))||$s(e);return rr(n,e.monsMovesCount,e.manaMovesCount,o)}i(Ta,"shouldAdvanceTurn");var tn=0,Io=1,ur=2,Qe=3,On=4,lr=5,Ie=127,on=0,fn=1,$n=2,dr=3,Ao=-2,wa=16;function he(e,n,t,o,r){return e|n<<3|t<<10|o<<17|r<<24}i(he,"encodeMove");function st(e){return e&7}i(st,"moveType");function Ue(e){return e>>3&127}i(Ue,"moveFrom");function we(e){return e>>10&127}i(we,"moveTo");function ct(e){return e>>17&127}i(ct,"moveAux");function Rt(e){return e>>24&3}i(Rt,"moveModifier");function ir(e,n,t){if(e.length!==n)throw new RangeError(`fast position ${t} length must be ${n}`)}i(ir,"validateArrayLength");var sr=class{static{i(this,"MutableFastPosition")}cells=new Uint16Array(121);squares=new Uint8Array(121);monLocations=new Int32Array(Et).fill(-1);freeMana=new Int32Array(ge);manaIndices=new Int32Array(wa);manaCount=0;whiteScore=0;blackScore=0;active=0;monsMoves=0;manaMoves=0;actionsUsed=0;potions=new Int32Array(ge);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<Et;u+=1)o[u]=r[u]??0;this.freeMana[0]=t.freeMana[0]??0,this.freeMana[1]=t.freeMana[1]??0;let a=this.manaIndices,s=t.manaIndices;for(let u=0;u<wa;u+=1)a[u]=s[u]??0;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]=t.potions[0]??0,this.potions[1]=t.potions[1]??0,this.firstTurn=t.firstTurn,this.hashLo=t.hashLo,this.hashHi=t.hashHi}reset(n){ir(n.cells,121,"cells"),ir(n.squares,121,"squares"),ir(n.potions,ge,"potions");let t;try{t=new Uint8Array(n.squares)}catch(p){_e(p)}let o=0;for(let p=0;p<121;p+=1){let f=g(n.cells,p);if(!(f===0||G(f)!==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^=bo(o,r),t^=yo(o,r);let a=G(r);if(a===H)this.monLocations[se(ae(r),fe(r))]=o;else if(a===J){let s=R(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}},Co=sr;function _t(e,n,t){let o=d(e.monLocations,se(Ot,n));if(o<0)return!1;let r=g(e.cells,o);return G(r)===H&&ae(r)===Ot&&fe(r)===n&&ie(r)===0&&Se(o,t)===1}i(_t,"awakeAngelGuards");function qs(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(qs,"removeManaIndex");function Hs(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(Hs,"insertManaIndex");function K(e,n,t){let o=g(e.cells,n);if(o!==t){if(o!==0){e.hashLo^=bo(n,o),e.hashHi^=yo(n,o);let r=G(o);if(r===H){let a=se(ae(o),fe(o));d(e.monLocations,a)===n&&(e.monLocations[a]=-1)}else if(r===J){let a=R(o);(a===1||a===2)&&(e.freeMana[a-1]=d(e.freeMana,a-1)-1),qs(e,n)}}if(e.cells[n]=t,t!==0){e.hashLo^=bo(n,t),e.hashHi^=yo(n,t);let r=G(t);if(r===H)e.monLocations[se(ae(t),fe(t))]=n;else if(r===J){let a=R(t);(a===1||a===2)&&(e.freeMana[a-1]=d(e.freeMana,a-1)+1),Hs(e,n)}}}}i(K,"setCell");function So(e){return rt(ae(e),fe(e),ie(e),0,0)}i(So,"plainMonCell");function jn(e,n,t){return rt(ae(e),fe(e),ie(e),n,t)}i(jn,"carryingMonCell");function Oa(e,n){e.potions[n]=d(e.potions,n)+1}i(Oa,"addPotion");function cr(e,n,t,o){if(R(n)===0&&N(n)===0&&o===fn){K(e,t,jn(n,0,Ee));return}K(e,t,n),Oa(e,fe(n))}i(cr,"collectConsumableAt");function zs(e,n){e.active===0?e.whiteScore+=n:e.blackScore+=n}i(zs,"addScore");function mr(e){if(e.actionsUsed<Ne){e.actionsUsed+=1;return}e.potions[e.active]=d(e.potions,e.active)-1}i(mr,"consumeAction");function xa(e,n){let t=ae(n),o=fe(n),r=d(co,se(t,o));K(e,r,rt(t,o,2,0,0))}i(xa,"faintMonAt");function Xs(e){let n=g(e.cells,tt);G(n)===H&&R(n)===0&&N(n)===0?K(e,tt,jn(n,ye,0)):K(e,tt,Cn(ye))}i(Xs,"supermanaBackToBase");function Qs(e,n,t){let o=R(n);if(o===ye?Xs(e):o!==0&&K(e,t,Cn(o)),N(n)===Ee){let r=d(co,se(ae(n),fe(n)));t!==r&&K(e,t,0)}}i(Qs,"releaseFaintedCarry");function fr(e,n,t){xa(e,n),Qs(e,n,t)}i(fr,"faintTargetAndReleaseCarry");function pr(e,n,t){zs(e,Ve(t,e.active));let o=g(e.cells,n);G(o)===H?K(e,n,So(o)):K(e,n,0)}i(pr,"scoreCarriedManaAt");function Ys(e,n){let t=Ue(n),o=we(n),r=g(e.cells,t),a=g(e.cells,o),s=R(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,jn(r,R(a),0))):u===pe&&N(a)===ve&&cr(e,r,o,Rt(n))}s!==0&&en(w(e.squares,o))&&pr(e,o,s)}i(Ys,"applyMonMove");function Zs(e,n){let t=Ue(n),o=we(n),r=R(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,jn(a,r,0)),en(w(e.squares,o))&&pr(e,o,r)}i(Zs,"applyManaMove");function Js(e,n){let t=we(n),o=g(e.cells,t);mr(e),K(e,t,0),fr(e,o,t)}i(Js,"applyMysticAction");function ec(e,n){let t=Ue(n),o=we(n),r=Rt(n),a=r===dr?Ie:ct(n),s=g(e.cells,t),u=g(e.cells,o),c=d(co,se(ae(s),fe(s))),l=N(u)!==Ee||a===Ie||a===c;return K(e,t,0),a===Ie?K(e,o,So(s)):K(e,o,0),mr(e),u!==0&&(fr(e,u,o),N(u)===Ee&&xa(e,s)),a!==Ie&&(r===fn?K(e,a,jn(s,0,Ee)):(K(e,a,So(s)),r===$n&&Oa(e,fe(s)))),l}i(ec,"applyDemonAction");function nc(e,n){let t=Ue(n),o=we(n),r=g(e.cells,t),a=g(e.cells,o);K(e,o,0),K(e,t,So(r)),fr(e,a,o)}i(nc,"applyBombAttack");function tc(e,n){let t=we(n),o=ct(n),r=Rt(n),a=g(e.cells,t),s=g(e.cells,o),u=R(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,jn(a,R(s),0))):l===pe&&cr(e,a,o,r)}else c===J?K(e,o,jn(s,u,0)):c===pe&&cr(e,s,o,r)}u!==0&&en(w(e.squares,o))&&pr(e,o,u)}i(tc,"applySpiritAction");function br(e){let n=tr(e.whiteScore,e.blackScore);return n===void 0?-1:ze(n)}i(br,"positionWinner");function Ra(e){return Mo(e.firstTurn,e.actionsUsed,d(e.potions,e.active))}i(Ra,"canUseAction");function _a(e,n){return d(e.freeMana,e.active)===0?!1:or(e.firstTurn,e.monsMoves,e.manaMoves,e.actionsUsed,d(e.potions,e.active),n!==0,!0)}i(_a,"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&&ae(t)===ke&&R(t)===0&&N(t)===0}i(ut,"manaMoveAllowed");function oc(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||R(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(oc,"hasMovableFreeRegularMana");function rc(e){let t=!(!e.firstTurn&&wn(e.firstTurn,e.manaMoves)&&!mn(e.monsMoves))||d(e.freeMana,e.active)!==0&&oc(e);return rr(e.firstTurn,e.monsMoves,e.manaMoves,t)}i(rc,"shouldAdvanceTurn");function ac(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<dn;t+=1){let o=d(e.monLocations,se(t,n));if(o<0)continue;let r=g(e.cells,o),a=ie(r);a===0||R(r)!==0||N(r)!==0||K(e,o,rt(ae(r),fe(r),a-1,R(r),N(r)))}}i(ac,"advanceTurn");function Na(e,n){let t=e,o=st(n),r=!0;switch(o){case tn:Ys(t,n);break;case Io:Zs(t,n);break;case ur:Js(t,n);break;case Qe:r=ec(t,n);break;case On:tc(t,n);break;case lr:nc(t,n);break;default:throw new RangeError(`unsupported fast move type: ${o}`)}let a=br(t);return a===-1&&rc(t)&&ac(t),r?a:Ao}i(Na,"applyFastMove");function Pa(e){switch(e){case A.Bomb:return Ee;case A.Potion:return pa;case A.BombOrPotion:return ve}}i(Pa,"consumableCode");function La(e){return e.kind==="supermana"?ye:ze(e.color)===0?vt:Tt}i(La,"manaCode");var Fa=2147483647;function Ba(e,n,t){if(!Number.isSafeInteger(t)||t<0||n.whitePotionsCount>Fa-t||n.blackPotionsCount>Fa-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=se(Xe[s.kind],ze(s.color));if(o[u]!==0)return!1;o[u]=1}try{ic(e,n)}catch(a){if(At(a))return!1;throw a}return!0}i(Ba,"tryLoadPosition");function ic(e,n){let t;try{t=new Uint16Array(121)}catch(r){_e(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]=io(a.mon,0,0);break;case"mana":t[r]=Cn(La(a.mana));break;case"mon-with-mana":t[r]=io(a.mon,La(a.mana),0);break;case"mon-with-consumable":t[r]=io(a.mon,0,Pa(a.consumable));break;case"consumable":t[r]=ya(Pa(a.consumable));break}}e.reset({cells:t,squares:so(n.variant()),whiteScore:n.whiteScore,blackScore:n.blackScore,active:ze(n.activeColor),monsMoves:n.monsMovesCount,manaMoves:n.manaMovesCount,actionsUsed:n.actionsUsedCount,potions:[n.whitePotionsCount,n.blackPotionsCount],firstTurn:n.isFirstTurn()})}i(ic,"loadPosition");function go(e){return{kind:"location",location:nt(e)}}i(go,"locationInput");function sc(e){return{kind:"modifier",modifier:e===fn?X.SelectBomb:X.SelectPotion}}i(sc,"modifierInput");function Da(e){let n=st(e),t=[go(Ue(e)),go(we(e))];n===On?t.push(go(ct(e))):n===Qe&&ct(e)!==Ie&&t.push(go(ct(e)));let o=Rt(e);return(o===fn||o===$n)&&(n===tn||n===Qe||n===On)&&t.push(sc(o)),t}i(Da,"moveToInputs");var Eo=1e6,cc=-2147483648,uc=2147483647,lc=["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 lc){let r=n[o];if(typeof r!="number")throw new TypeError(`weights.${o} must be a number`);if(!Number.isSafeInteger(r)||r<-Eo||r>Eo)throw new RangeError(`weights.${o} must be a safe integer from -${Eo} through ${Eo}`);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}),be=99,Te=Math.max(be+1,11),Va=3,We=Ce+2,vo=ee+1,hr=0,ja=1,kr=2,xn=3,$a=3,qa=vo,bn=6,Ua=bn*2+1,Nt=6,Mr=2,Wa=12;function pn(e){let n=_n(Te);for(let t=0;t<Te;t+=1)n[t]=Math.trunc(e/(t+1));return n}i(pn,"distanceTable");function dc(e){let n=_n(Te),t=e.manaToNearestPool;for(let o=0;o<Te;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(dc,"manaStepQueueTable");function mc(e){let n=_n(We*We),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*We+a,c=a*We+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<We;r+=1)for(let a=0;a<We;a+=1)if(e.scoreUnit+d(n,(r+1)*We+a)-d(n,r*We+a)<0)throw new RangeError("score shape corrections must keep the score monotone");return n}i(mc,"scoreShapeTable");function Ha(e){let n=_n(Te);for(let t=0;t<Te;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(Ha,"drainerTripTable");function fc(e){let n=Ha(e);for(let t=0;t<Te;t+=1)n[t]=Qa(d(n,t),e.tripTwoPointScale,"two-point trip");return n}i(fc,"twoPointTripTable");function pc(e){let n=_n(Ua);for(let t=0;t<Ua;t+=1)n[t]=(t-bn)*e;return n}i(pc,"raceTable");function bc(e){let n=_n(Te);for(let t=0;t<Te;t+=1){let o=t>Wa?Wa:t;n[t]=o*e}return n}i(bc,"tripStepTable");function yc(e){let n=_n(Va*Te);for(let t=0;t<Va;t+=1){let o=t*Te;for(let r=0;r<Te;r+=1)n[o+r]=Math.trunc(t*e/(r+1))}return n}i(yc,"manaPointsAttractionTable");function za(e,n){return n===hr?100:n===kr?e.threatMoverScaleSpare:e.threatMoverScaleFew}i(za,"moverScale");function Xa(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(Xa,"scaledSafeInteger");function Qa(e,n,t){let o=Xa(e,n,t);if(o<cc||o>uc)throw new RangeError(`${t} derived value must fit a signed 32-bit integer`);return o}i(Qa,"scaledInt32");function hc(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]=Qa(e.drainerThreatImmediate*o,za(e,r),"immediate threat")}return n}i(hc,"threatImmediateTable");function kc(e){let n=Mc(2*xn*vo);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=za(e,r),s=(t*xn+r)*vo;for(let u=0;u<vo;u+=1)n[s+u]=Xa(Math.trunc(e.drainerThreatWalk*o*(ee+1-u)/ee),a,"walking threat")}}return n}i(kc,"threatWalkTable");function _n(e){try{return new Int32Array(e)}catch(n){_e(n)}}i(_n,"createInt32Table");function Mc(e){try{return new Float64Array(e)}catch(n){_e(n)}}i(Mc,"createFloat64Table");function Sc(e,n){let t=bn*Math.abs(e.raceHalfTurn);if(t===0)return;let o=Ce-Mr;for(let r=0;r<o;r+=1){let a=e.scoreUnit+d(n,o*We+r)-d(n,(o-1)*We+r);if(t>a)throw new RangeError("race correction must not outweigh the point that opens the endgame band")}}i(Sc,"assertRaceStaysMonotone");function Ya(e){let n=mc(e);return Sc(e,n),{weights:e,manaPointsAttraction:yc(e.manaPointsAttraction),manaToOwnerPool:pn(e.manaToOwnerPool),manaToNearestPool:dc(e),scoreShape:n,drainerTrip:Ha(e),drainerTripTwoPoint:fc(e),race:pc(e.raceHalfTurn),tripStep:bc(e.tripGradient),carrierCloseToPool:pn(e.carrierCloseToPool),drainerCloseToMana:pn(e.drainerCloseToMana),drainerCloseToOwnPool:pn(e.drainerCloseToOwnPool),drainerCloseToSupermana:pn(e.drainerCloseToSupermana),angelCloseToDrainer:pn(e.angelCloseToDrainer),spiritCloseToEnemy:pn(e.spiritCloseToEnemy),monCloseToCenter:pn(e.monCloseToCenter),attackerCloseToEnemyDrainer:pn(e.attackerCloseToEnemyDrainer),threatImmediate:hc(e),threatWalk:kc(e)}}i(Ya,"createEvalTables");var To=Ya(Rn),Ga=new WeakMap;function Za(e){if(e===Rn)return Rn;if(!Object.isFrozen(e))return yr(e);let n=Ga.get(e);return n===void 0&&(n=yr(e),Ga.set(e,n)),n}i(Za,"memoizedNormalizedEvalWeights");var Ka=new WeakMap;function Ja(e){if(e===Rn)return To;let n=Ka.get(e);return n===void 0&&(n=Ya(e),Ka.set(e,n)),n}i(Ja,"memoizedEvalTables");var yn=1e6;function ei(e,n){return w(ha,n*121+e)}i(ei,"ownPoolDistance");var ni=Int32Array.of(0,10,110,120);function Ic(e,n){for(let t=0;t<ni.length;t+=1){let o=d(ni,t);if(Se(n,o)===1&&ut(e,o))return!0}return!1}i(Ic,"hasAdjacentScoringPool");function ti(e,n,t,o){return d(n,t>o?t-o:0)-d(e.tripStep,t)}i(ti,"tripValue");function Ac(e){return w(ka,e)}i(Ac,"centerDistance");var Sr=new WeakMap,Pt,lt;function Cc(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(Cc,"sameSquareContent");function gc(e){try{let n=new Uint8Array(14641).fill(be),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 p=0;p<121;p+=1){let f=be;for(let b=0;b<c;b+=1){let y=d(gn.list,u+b);if(w(e,y)>=ue)continue;let I=Se(p,y);I<f&&(f=I)}n[s*121+p]=f}t[s]=r.length;let l=d(En.starts,s),m=d(En.counts,s);for(let p=0;p<m;p+=1){let f=d(En.list,l+p);if(w(e,f)>=ue)continue;let b=mo(s,f),y=w(e,b);y===Je||y>=ue||(r.push(f),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){_e(n)}}i(gc,"buildAttackTables");function Ec(e){if(e===Pt&&lt!==void 0)return lt;let n=Sr.get(e);if(n!==void 0)return Pt=e,lt=n,n;if(lt!==void 0&&Cc(Pt,e)){let o=lt;return Sr.set(e,o),Pt=e,o}let t=gc(e);return Sr.set(e,t),Pt=e,lt=t,t}i(Ec,"attackTablesFor");function vc(e,n,t,o){if(!ot(g(e.cells,n)))return be;let r=t^1,a=be,s=Ec(e.squares);for(let u=0;u<dn;u+=1){let c=d(e.monLocations,se(u,r));if(c<0)continue;let l=g(e.cells,c);if(G(l)!==H)continue;if(N(l)===Ee){let f=Se(c,n)-3,b=f<0?0:f;if(b===0)return 0;b<a&&(a=b);continue}if(ie(l)!==0||N(l)!==0||o||R(l)!==0)continue;if(u===oo){let f=w(s.mysticSteps,n*121+c);if(f===0)return 0;f<a&&(a=f);continue}if(u!==wt)continue;let m=d(s.demonStarts,n),p=d(s.demonCounts,n);for(let f=0;f<p;f+=1){let b=d(s.demonBetween,m+f);if(b!==c&&g(e.cells,b)!==0)continue;let y=Se(c,d(s.demonOrigins,m+f));if(y===0)return 0;y<a&&(a=y)}}return a}i(vc,"estimatedAttackSteps");function oi(e,n,t=0){let o=n.weights,r=(e.whiteScore-e.blackScore)*o.scoreUnit+d(n.scoreShape,e.whiteScore*We+e.blackScore)+(d(e.potions,0)-d(e.potions,1))*o.potion,a=d(e.monLocations,se(ke,0)),s=d(e.monLocations,se(ke,1)),u=a>=0&&ie(g(e.cells,a))===0,c=s>=0&&ie(g(e.cells,s))===0,l=be,m=be,p=be,f=be,b=be,y=be,I=ee-e.monsMoves,S=t!==0,P=Ce-e.whiteScore,x=Ce-e.blackScore,F=0,D=Nt,L=Nt,V=Nt,U=Nt,de=!1,Ke=!1;if(S){if(a>=0){let C=g(e.cells,a);de=ie(C)<=1&&R(C)===0&&N(C)===0}if(s>=0){let C=g(e.cells,s);Ke=ie(C)<=1&&R(C)===0&&N(C)===0}}let Oe=0,sn=0,cn=!1,Pe=!1,Fn=0,me=0,je=0,$e=0;for(let C=0;C<e.manaCount;C+=1){let v=d(e.manaIndices,C),ne=g(e.cells,v);if(G(ne)!==J)continue;let j=R(ne),z=u?Se(a,v):be,te=c?Se(s,v):be;z<l&&(l=z),te<m&&(m=te);let ce=w(nn,v);if(u){let T=z+ce;j===vt&&T<p?p=T:j!==vt&&T<b&&(b=T)}if(c){let T=te+ce;j===Tt&&T<f?f=T:j!==Tt&&T<y&&(y=T)}if(S){let T=!1;if(j!==ye&&ce<=1&&Ic(e,v)&&(T=!0,j-1===0?Fn<2&&(Fn+=1):me<2&&(me+=1)),de&&(u?z:Se(a,v))+ce<=ee){let oe=Ve(j,0);oe>Oe?(Oe=oe,cn=T&&j-1===0):oe===Oe&&!(T&&j-1===0)&&(cn=!1)}if(Ke&&(c?te:Se(s,v))+ce<=ee){let oe=Ve(j,1);oe>sn?(sn=oe,Pe=T&&j-1===1):oe===sn&&!(T&&j-1===1)&&(Pe=!1)}}let qe=te-z;if(qe>4&&(qe=4),qe<-4&&(qe=-4),o.manaPointsAttraction!==0){let T=n.manaPointsAttraction;u&&(r+=d(T,Ve(j,0)*Te+z)),c&&(r-=d(T,Ve(j,1)*Te+te))}if(j===ye)r+=o.supermanaDrainerControl*qe;else{let T=j-1,_=T===0?1:-1;r+=_*d(n.manaToOwnerPool,ei(v,T)),r+=_*d(n.manaToNearestPool,ce),r+=o.manaDrainerControl*qe,ce<=2&&(T===0?P:x)<=1&&(F|=T===0?1:2),T===0?ce<D&&(D=ce):ce<L&&(L=ce)}}F!==0&&(r+=o.manaStepWinThreat*(((F&1)===0?0:1)-((F&2)===0?0:1)));for(let C=0;C<ge;C+=1){let v=C===0?1:-1,ne=C^1;for(let j=0;j<dn;j+=1){let z=d(e.monLocations,se(j,C));if(z<0)continue;let te=g(e.cells,z);if(G(te)!==H)continue;let ce=ie(te);ce!==0&&(r-=v*((j===ke?o.faintDrainer:o.faintMon)+o.faintCooldownStep*ce));let qe=w(e.squares,z);ce===0&&qe<ue&&(r+=v*o.activeMon);let T=R(te);if(T!==0){let _=Ve(T,C),oe=w(nn,z);r+=v*(d(n.carrierCloseToPool,oe)+_*o.carrierPointBonus),T===ye&&(r+=v*o.supermanaCarrier),C===e.active&&oe<=I?r+=v*o.carrierScoresThisTurn*_:C!==e.active&&oe<=ee&&(r+=v*o.carrierScoresNextTurn*_,S&&(C===0?_>je&&(je=_):_>$e&&($e=_)));let He=C===0?e.whiteScore:e.blackScore;_>=Ce-He&&(r+=v*o.winningCarrier)}else N(te)===Ee&&(r+=v*o.bomb);if(ce===0)if(j===ke){let _=0,oe=C===0?l:m,He=C===0?p:f,Bn=C===0?b:y,$t=He<Bn?He:Bn,qt=C===e.active?I:ee,Br=n.drainerTrip,Ht=T!==0?w(nn,z):N(te)!==0?be:He;T===0&&N(te)===0&&Bn<be&&(He>=be||ti(n,n.drainerTripTwoPoint,Bn,qt)>ti(n,n.drainerTrip,He,qt))&&(Br=n.drainerTripTwoPoint,Ht=Bn),_-=d(n.tripStep,Ht);let Dr=Ht>qt?Ht-qt:0,zt=1+((Dr+ee-1)/ee|0);C===0?zt<V&&(V=zt):zt<U&&(U=zt),_+=d(Br,Dr),_+=d(n.drainerCloseToMana,oe),_+=d(n.drainerCloseToOwnPool,ei(z,C)),_+=d(n.drainerCloseToSupermana,Se(z,tt)),T===0&&N(te)===0&&C===e.active&&$t<=I&&(_+=o.drainerPickupScoresThisTurn),r+=v*_;let Vr=_t(e,C,z),Go=vc(e,z,C,Vr),Zi=T!==0,Ji=C!==e.active||I===0?hr:I>=$a?kr:ja,Ur=(Zi?xn:0)+Ji;Go===0?r-=v*d(n.threatImmediate,Ur):Go<=ee&&(r-=v*(n.threatWalk[Ur*qa+Go]??0)),Vr&&(r+=v*o.angelGuardingDrainer)}else if(j===Ot){let _=C===0?a:s;_>=0&&(r+=v*d(n.angelCloseToDrainer,Se(z,_)))}else if(j===to){let _=be;for(let oe=0;oe<dn;oe+=1){let He=d(e.monLocations,se(oe,ne));if(He<0)continue;let Bn=g(e.cells,He);if(ie(Bn)!==0)continue;let $t=Se(z,He);$t<_&&(_=$t)}r+=v*d(n.spiritCloseToEnemy,_),qe>=ue&&(r-=v*o.spiritOnOwnBase)}else{r+=v*d(n.monCloseToCenter,Ac(z));let _=ne===0?a:s,oe=ne===0?u:c;_>=0&&oe&&(r+=v*d(n.attackerCloseToEnemyDrainer,Se(z,_)))}}}if(o.raceHalfTurn!==0&&(P<x?P:x)<=Mr){let C=e.manaMoves>0?1:0,v=D+(e.active===0?C:0),ne=L+(e.active===1?C:0),j=V<v?V:v,te=(U<ne?U:ne)*2+(e.active===1?0:1)-(j*2+(e.active===0?0:1)),ce=te>bn?bn:te<-bn?-bn:te;r+=d(n.race,ce+bn)}if(S){let C=e.active^1,v=C===0?1:-1,ne=C===0?Oe:sn,j=C===0?je:$e,z=C===0?Fn:me,te=z>0,ce=C===0?cn:Pe,qe=z>=2||z===1&&!ce,T=ne;T>0&&qe&&(T+=1);let _=j;_>0&&te&&(_+=1),_>T&&(T=_),te&&T<1&&(T=1);let oe=C===0?e.whiteScore:e.blackScore;T>0&&oe+T>=Ce&&(r+=v*t)}return r}i(oi,"evaluateWithTables");var hn=704,wo=1073741824;function Bt(e,n){return n?e+wo:e}i(Bt,"encodeGeneratedMoves");function Lt(e){return e>=wo?e-wo:e}i(Lt,"generatedMoveCount");function Ft(e){return e>=wo}i(Ft,"generatedMovesHadRawStartOption");function Ir(e,n){return G(e)===H&&fe(e)!==n&&ie(e)===0}i(Ir,"isEnemyAwakeMon");function Ar(e){let n=131072;return R(e)!==0&&(n+=1<<20),ae(e)===ke&&(n+=1<<19),n}i(Ar,"damagingAttackKey");function Tc(e,n,t){let o=g(e.cells,t),r=w(e.squares,t),a=G(n),s=a===H,u=R(n),c=N(n),l=o===0?-1:G(o),m=l===H&&(R(o)!==0||N(o)!==0);if(l===H)if(m){if(a!==pe||c!==ve)return 0}else{if(s)return 0;if(a===J){if(ae(o)!==ke||ie(o)!==0)return 0}else if(c!==ve)return 0}else if(l===J){if(!s||ae(n)!==ke||ie(n)!==0)return 0}else if(l===pe&&(N(o)!==ve||!s))return 0;if(r>=ue){if(!s||ro(r)!==ae(n)||ao(r)!==fe(n)||u!==0||c!==0)return 0}else if(r===Je){let p=l===J&&R(o)===ye,f=s&&ae(n)===ke;if(!(u===ye||u===0&&f&&(o===0||p)||f&&p))return 0}return o===0?1:s?u===0&&c===0?l===pe?N(o)===ve?2:0:1:u!==0?l===pe?N(o)===ve?1:0:1:l!==pe||N(o)!==ve?0:1:a===J?l!==H||m?0:1:l!==H?0:m?c===ve?1:0:2}i(Tc,"spiritDestinationOptionCount");function wc(e,n,t,o,r,a){let s=r,u=!1,c=ae(t),l=fe(t),m=R(t),p=N(t),f=e.active,b=w(nn,n),y=c===ke?1024:0,I=d(le.starts,n),S=d(le.counts,n);for(let P=0;P<S;P+=1){let x=d(le.list,I+P),F=g(e.cells,x),D=w(e.squares,x),L=F===0?-1:G(F),V;if(m!==0)L===H?V=!1:L===J||L===pe?V=!0:V=at(D)||D===Je&&m===ye;else if(p!==0)L===pe?V=!0:L===-1?V=at(D):V=!1;else{let de;L===H?de=!1:L===J?de=c===ke:de=!0,de?D>=ue?V=ro(D)===c&&ao(D)===l:D===Je?V=c===ke&&(F===0||L===J&&R(F)===ye):V=!0:V=!1}if(!V||(u=!0,L===pe&&N(F)!==ve))continue;let U=0;m!==0&&en(D)&&(U+=(1<<21)+Ve(m,f)*(1<<18)),F!==0&&(L===J?U+=65536+Ve(R(F),f)*512:L===pe&&(U+=16384)),m!==0?U+=(b-w(nn,x))*2048+4096:U+=y,L===pe&&N(F)===ve&&m===0&&p===0?(a[s]=U,o[s]=he(tn,n,x,Ie,fn),s+=1,a[s]=U,o[s]=he(tn,n,x,Ie,$n),s+=1):(a[s]=U,o[s]=he(tn,n,x,Ie,on),s+=1)}return Bt(s,u)}i(wc,"generateMonMoves");function Oc(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 p=d(gn.list,c+m),f=g(e.cells,p);Ir(f,a)&&(_t(e,a^1,p)||(u=!0,ot(f)&&(r[s]=Ar(f),t[s]=he(ur,n,p,Ie,on),s+=1)))}return Bt(s,u)}i(Oc,"generateMysticMoves");function xc(e,n,t,o,r){let a=e.active,s=o,u=!1,c=wt,l=a,m=d(En.starts,n),p=d(En.counts,n);for(let f=0;f<p;f+=1){let b=d(En.list,m+f),y=g(e.cells,b);if(!Ir(y,a)||_t(e,a^1,b))continue;let I=mo(n,b);if(g(e.cells,I)!==0)continue;let S=w(e.squares,I);if(S===Je||S>=ue||(u=!0,!ot(y)))continue;let P=Ar(y),x=w(e.squares,b),F=R(y);if(!(!(N(y)===Ee)&&(F!==0&&F!==ye||x===Je||x>=ue))){r[s]=P,t[s]=he(Qe,n,b,Ie,on),s+=1;continue}let V=s,U=d(le.starts,b),de=d(le.counts,b);for(let Ke=0;Ke<de;Ke+=1){let Oe=d(le.list,U+Ke),sn=g(e.cells,Oe),cn=sn===0?-1:G(sn);if(cn!==-1&&cn!==pe)continue;let Pe=w(e.squares,Oe);(at(Pe)||Pe>=ue&&ro(Pe)===c&&ao(Pe)===l)&&(cn===pe?N(sn)===ve?(r[s]=P,t[s]=he(Qe,n,b,Oe,fn),s+=1,r[s]=P,t[s]=he(Qe,n,b,Oe,$n),s+=1):(r[s]=P,t[s]=he(Qe,n,b,Oe,dr),s+=1):(r[s]=P,t[s]=he(Qe,n,b,Oe,on),s+=1))}s===V&&(r[s]=P,t[s]=he(Qe,n,b,Ie,on),s+=1)}return Bt(s,u)}i(xc,"generateDemonMoves");function Rc(e,n,t,o,r){let a=o,s=!1,u=e.active,c=d(uo.starts,n),l=d(uo.counts,n);for(let m=0;m<l;m+=1){let p=d(uo.list,c+m),f=g(e.cells,p);if(f===0||G(f)===H&&ie(f)!==0)continue;s=!0;let b=R(f),y=G(f)===J,I=w(nn,p),S=(1<<21)+Ve(b,u)*(1<<18),P=d(le.starts,p),x=d(le.counts,p);for(let F=0;F<x;F+=1){let D=d(le.list,P+F),L=Tc(e,f,D);if(L===0)continue;let V=0;b!==0&&en(w(e.squares,D))?V+=8192+S:y&&_c(e,D,I,u)&&(V+=40960),L===2?(r[a]=V,t[a]=he(On,n,p,D,fn),a+=1,r[a]=V,t[a]=he(On,n,p,D,$n),a+=1):(r[a]=V,t[a]=he(On,n,p,D,on),a+=1)}}return Bt(a,s)}i(Rc,"generateSpiritMoves");function _c(e,n,t,o){if(w(nn,n)<t)return!0;let r=g(e.cells,n);return G(r)===H&&ae(r)===ke&&fe(r)===o&&ie(r)===0}i(_c,"advancesMana");function Nc(e,n,t,o,r){let a=e.active,s=o,u=!1,c=d(lo.starts,n),l=d(lo.counts,n);for(let m=0;m<l;m+=1){let p=d(lo.list,c+m),f=g(e.cells,p);Ir(f,a)&&(u=!0,ot(f)&&(r[s]=Ar(f),t[s]=he(lr,n,p,Ie,on),s+=1))}return Bt(s,u)}i(Nc,"generateBombMoves");function Pc(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]=he(Io,n,l,Ie,on),a+=1)}return a}i(Pc,"generateManaMoves");function Lc(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]=he(Io,n,l,Ie,on),a+=1)}return a}i(Lc,"generateWinningManaMoves");var Fc=new Int32Array(hn);function Cr(e,n,t=Fc){let o=e.active,r=mn(e.monsMoves),a=Ra(e),s=0,u=0;for(let c=0;c<dn;c+=1){let l=d(e.monLocations,se(c,o));if(l<0)continue;let m=g(e.cells,l);if(G(m)!==H)continue;let p=!1,f=R(m),b=N(m),y=f!==0||b!==0;if(!(!y&&ie(m)!==0)){if(r){let I=wc(e,l,m,n,s,t);s=Lt(I),p||=Ft(I)}if(y){if(b===Ee){let I=Nc(e,l,n,s,t);s=Lt(I),p||=Ft(I)}}else if(w(e.squares,l)<ue&&a){if(c===oo){let S=Oc(e,l,n,s,t);s=Lt(S),p||=Ft(S)}else if(c===wt){let S=xc(e,l,n,s,t);s=Lt(S),p||=Ft(S)}else if(c===to){let S=Rc(e,l,n,s,t);s=Lt(S),p||=Ft(S)}}p&&(u+=1)}}if(_a(e,u)){let c=o+1;for(let l=0;l<e.manaCount;l+=1){let m=d(e.manaIndices,l),p=g(e.cells,m);G(p)===J&&R(p)===c&&(s=Pc(e,m,n,s,t))}}else if(d(e.freeMana,o)!==0&&wn(e.firstTurn,e.manaMoves)&&(o===0?e.whiteScore:e.blackScore)+1>=Ce){let c=o+1;for(let l=0;l<e.manaCount;l+=1){let m=d(e.manaIndices,l),p=g(e.cells,m);G(p)===J&&R(p)===c&&(s=Lc(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,Oo=rn-2,Nn=yn-rn-1,xo=Object.freeze({lateMoveReduction:!0,lateMoveIndex:3,lateMoveDeepIndex:8,moveCountPruning:!0,moveCountDepth:3,moveCountBase:4,moveCountFactor:5,futilityMargin:900,aspirationDelta:0,aspirationMinDepth:3,winsNextTurnThreat:0}),ri=new WeakMap;function si(e){if(!(Object.isFrozen(e)&&(e.tuning===void 0||Object.isFrozen(e.tuning))))return ai(e);let t=ri.get(e);return t===void 0&&(t=ai(e),ri.set(e,t)),t}i(si,"memoizedSearchLimits");function ai(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>Oo)throw new RangeError(`maxDepth must be a safe integer from 0 through ${Oo}`);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?xo:Bc(r)})}i(ai,"normalizeSearchLimits");function Bc(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:ii(n,"lateMoveReduction"),lateMoveIndex:kn(n,"lateMoveIndex",hn),lateMoveDeepIndex:kn(n,"lateMoveDeepIndex",hn),moveCountPruning:ii(n,"moveCountPruning"),moveCountDepth:kn(n,"moveCountDepth",Oo),moveCountBase:kn(n,"moveCountBase",hn),moveCountFactor:kn(n,"moveCountFactor",hn),futilityMargin:kn(n,"futilityMargin",Nn),aspirationDelta:kn(n,"aspirationDelta",Nn),aspirationMinDepth:kn(n,"aspirationMinDepth",Oo),winsNextTurnThreat:kn(n,"winsNextTurnThreat",Nn)})}i(Bc,"normalizeSearchTuning");function ii(e,n){let t=e[n];if(typeof t!="boolean")throw new TypeError(`tuning.${n} must be a boolean`);return t}i(ii,"normalizedTuningBoolean");function kn(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(kn,"normalizedTuningInteger");var qn=1<<20,Dt=new Int32Array(0);function Vt(e){try{return new Int32Array(e)}catch(n){_e(n)}}i(Vt,"allocateTranspositionPart");var Ro=class{static{i(this,"TranspositionTable")}keyLo=Dt;keyHi=Dt;score=Dt;info=Dt;move=Dt;entries=0;generation=1;mask=0;deactivate(){this.mask=0}prepare(n){if(this.keyLo.length!==0)return this.mask=qn-1,!0;if(n())return!1;let t=Vt(qn);if(n())return!1;let o=Vt(qn);if(n())return!1;let r=Vt(qn);if(n())return!1;let a=Vt(qn);if(n())return!1;let s=Vt(qn);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=qn-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 Dc=16,Ut=1<<Dc,Vc=Ut-1,Uc=1<<30,ci=0,ui=1,li=2,Wc=3,di=4194303,Gc=2047,Kc=32768,mi=1<<28,fi=1<<24,pi=1<<23,Pn=yn*2,bi=i(()=>!1,"NO_TIMEOUT"),Mi=ge,Si=ee+1,Ii=An+1,Ai=Ne+1,Ci=2,gr=4,jc=Mi*Si*Ii*Ai*Ci*gr*gr;if(po.length!==nr.length||po.length<jc)throw new RangeError("fast scalar hash table is too small for the configured state space");function $c(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($c,"sameSquares");function Er(e,n,t,o,r,a,s,u,c){if(o===0){for(let f=0;f<t;f+=1){let b=d(e,f),y=d(n,f);if(b===r)y+=mi;else if(b===a)y+=fi;else if(b===s)y+=pi;else{let I=d(u,c+Ue(b)*121+we(b));y+=I>8191?8191:I}n[f]=y}return t}let l=Ue(o),m=we(o),p=0;for(let f=0;f<t;f+=1){let b=d(e,f);if(st(b)===tn&&b<o){let I=Ue(b),S=we(b);if(I!==l&&I!==m&&S!==l&&S!==m)continue}let y=d(n,f);if(b===r)y+=mi;else if(b===a)y+=fi;else if(b===s)y+=pi;else{let I=d(u,c+Ue(b)*121+we(b));y+=I>8191?8191:I}p!==f&&(e[p]=b),n[p]=y,p+=1}return p===0?Er(e,n,t,0,r,a,s,u,c):p}i(Er,"orderMoves");var _o=class{static{i(this,"FastSearcher")}#e=[];#n=[];#t=[];#o;#r=new Int32Array(rn*2);#a=new Int32Array(ge*121*121);#y=new Int32Array(rn+1);#s=new Int32Array(Ut);#h=new Int32Array(Ut);#b=new Int32Array(Ut);#d=new Float64Array(Ut);#c=0;#k;#M=0;#S;#m=To;#C=xo;#g=0;#f=0;#E=0;#u=!1;#v=!1;#i=0;#I=bi;constructor(){this.#o=new Ro;for(let n=0;n<=rn;n+=1)this.#e.push(new Co),this.#n.push(new Int32Array(hn)),this.#t.push(new Int32Array(hn))}get root(){return Me(this.#e,0)}get size(){return this.#o.entries}search(n,t,o=Rn){let r=si(n),a=Za(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=Ja(a);let s=r.tuning;this.#C=s,this.#g=s.winsNextTurnThreat;let u=!$c(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>=Uc&&(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 p=1;p<=r.maxDepth;p+=1){if(p===2){if(this.#f>=this.#E||!this.#o.prepare(this.#I)){this.#u=!0;break}this.#N()}let f=-Pn,b=Pn;s.aspirationDelta>0&&m>0&&p>=s.aspirationMinDepth&&(f=l-s.aspirationDelta,b=l+s.aspirationDelta);let y=this.#w(p,c,f,b),I=0;for(;!this.#l()&&y.move!==0&&(y.score<=f||y.score>=b)&&(f>-Pn||b<Pn);){I+=1;let S=s.aspirationDelta*(1<<I);y.score<=f&&(f=I>=2?-Pn:y.score-S),y.score>=b&&(b=I>=2?Pn:y.score+S),y=this.#w(p,y.move,f,b)}if(y.move===0)break;if(this.#l()){m===0&&(c=y.move,l=y.score);break}if(c=y.move,l=y.score,m=p,!y.selective&&l>=yn-rn)break}return{move:c,score:l,depth:m,nodes:this.#f,supported:!this.#v}}finally{this.#o.deactivate(),this.#m=To,this.#C=xo,this.#g=0,this.#I=bi}}#N(){this.#o.generation+=1,this.#o.generation>di&&this.#o.clear()}#w(n,t,o,r){let a=Me(this.#e,0),s=Me(this.#n,0),u=Cr(a,s,Me(this.#t,0));if(u===0)return{move:0,score:0,selective:!1};Er(s,Me(this.#t,0),u,0,t,d(this.#r,0),d(this.#r,1),this.#a,a.active*121*121);let c=Me(this.#t,0),l=o,m=0,p=-Pn,f=!1;for(let b=0;b<u;b+=1){this.#_(s,c,b,u);let y=d(s,b),I=this.#O(a,y,0),S,P=this.#i,x;if(b===0?(S=this.#p(a,I,0,n-1,l,r),x=this.#i!==P):(S=this.#p(a,I,0,n-1,l,l+1),x=this.#i!==P,S>l&&!this.#l()&&(P=this.#i,S=this.#p(a,I,0,n-1,l,r),x=this.#i!==P)),this.#l()||(S>p&&(p=S,m=y,f=x,S>l&&(l=S)),l>=r))break}return m===0&&(m=d(s,0),p=0,f=!0),{move:m,score:p,selective:f}}#O(n,t,o){let r=Me(this.#e,o+1);r.copyFrom(n),this.#y[o]=t;let a=Na(r,t);return a===Ao&&(this.#v=!0,this.#u=!0),a}#p(n,t,o,r,a,s){let u=Me(this.#e,o+1);return t===Ao?0:t!==-1?t===n.active?yn-o:-(yn-o):u.active===n.active?this.#x(r,o+1,a,s):-this.#x(r,o+1,-s,-a)}#x(n,t,o,r){if(!this.#T())return 0;let a=Me(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=yi(a),l=hi(a,c,u),m=ki(a,c,u),p=this.#o,f=(l^m*3)&p.mask,b=0,y=d(p.info,f),I=d(p.keyLo,f)===l&&d(p.keyHi,f)===m&&(y>>>8&di)===p.generation;if(I&&(b=d(p.move,f),(y>>2&63)>=n)){let je=d(p.score,f),$e=y&3;if($e===ci||$e===ui&&je>=r||$e===li&&je<=s)return je}let S=this.#C,P=Me(this.#n,t),x=Cr(a,P,Me(this.#t,t));if(x===0)return this.#A(a,l,m);let F=Me(this.#t,t);x=Er(P,F,x,u,b,d(this.#r,t*2),d(this.#r,t*2+1),this.#a,a.active*121*121);let D=x;if(S.moveCountPruning&&n<=S.moveCountDepth){let me=S.moveCountBase+S.moveCountFactor*n;me<D&&(D=me)}let L=n<=2;if(L&&!this.#T()||this.#l())return 0;let V=!1,U=!1,de=-Pn,Ke=0,Oe=this.#i;for(let me=0;me<x;me+=1){this.#_(P,F,me,x);let je=d(P,me),$e=d(F,me)>=Kc;if(!$e&&Ke!==0){let ne=me>=D;if(!ne&&L&&(V||(U=this.#R(a,l,m)+S.futilityMargin*n<=o,V=!0),ne=U),ne){this.#i+=1;break}}let C=this.#O(a,je,t),v;if(me===0)v=this.#p(a,C,t,n-1,s,r);else{let ne=0;S.lateMoveReduction&&!$e&&n>=3&&me>=S.lateMoveIndex&&(ne=me>=S.lateMoveDeepIndex?2:1,ne>=n&&(ne=n-1)),v=this.#p(a,C,t,n-1-ne,s,s+1),!this.#l()&&v>s&&(ne>0||v<r)&&(v=this.#p(a,C,t,n-1,s,r))}if(this.#l())return 0;if(v>de&&(de=v,Ke=je),v>s&&(s=v),s>=r){this.#L(a,je,t,n,$e);break}}if(Ke===0)return this.#A(a);let cn=this.#i!==Oe?Wc:de>=r?ui:de<=o?li:ci,Pe=de,Fn=n;if(Pe<yn-rn&&Pe>-yn+rn){let me=y>>2&63;(!I||Fn>=me)&&(y===0&&d(p.info,f)===0&&(p.entries+=1),p.keyLo[f]=l,p.keyHi[f]=m,p.score[f]=Pe,p.info[f]=p.generation<<8|Fn<<2|cn,p.move[f]=Ke)}return de}#P(n,t){if(t===0)return 0;let o=d(this.#y,t-1);return st(o)===tn&&Me(this.#e,t-1).active===n.active?o:0}#l(){return this.#u}#T(){return this.#u?!1:this.#f>=this.#E?(this.#u=!0,!1):(this.#f+=1,(this.#f&Gc)===0&&this.#I()?(this.#u=!0,!1):!0)}#R(n,t,o){let r=t,a=o;if(r===void 0||a===void 0){let l=yi(n);r=hi(n,l),a=ki(n,l)}let s=(r^a*3)&Vc,u;d(this.#b,s)===this.#c&&d(this.#s,s)===r&&d(this.#h,s)===a?u=this.#d[s]??0:(u=oi(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.#R(n,t,o):0}#L(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+Ue(t)*121+we(t),c=d(this.#a,u)+r*r;this.#a[u]=c>1<<20?1<<20:c}#_(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 yi(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)+Ci*a,a=e.actionsUsed+Ai*a,a=e.manaMoves+Ii*a,a=e.monsMoves+Si*a,e.active+Mi*a}i(yi,"scalarIndex");function hi(e,n,t=0){return e.hashLo^d(po,n)^e.whiteScore*2654435761^e.blackScore*2135587861^d(e.potions,0)^Math.imul(t,668265261)}i(hi,"stateKeyLo");function ki(e,n,t=0){return e.hashHi^d(nr,n)^e.whiteScore*2246822507^e.blackScore*3266489909^d(e.potions,1)^Math.imul(t,374761393)}i(ki,"stateKeyHi");var qc=Object.freeze({lateMoveReduction:!0,lateMoveIndex:2,lateMoveDeepIndex:6,moveCountPruning:!0,moveCountDepth:3,moveCountBase:7,moveCountFactor:7,futilityMargin:900,aspirationDelta:600,aspirationMinDepth:2,winsNextTurnThreat:0}),Hc=Object.freeze({lateMoveReduction:!0,lateMoveIndex:2,lateMoveDeepIndex:6,moveCountPruning:!0,moveCountDepth:3,moveCountBase:7,moveCountFactor:7,futilityMargin:900,aspirationDelta:600,aspirationMinDepth:2,winsNextTurnThreat:2500}),zc=Object.freeze({lateMoveReduction:!0,lateMoveIndex:3,lateMoveDeepIndex:8,moveCountPruning:!0,moveCountDepth:3,moveCountBase:4,moveCountFactor:5,futilityMargin:900,aspirationDelta:0,aspirationMinDepth:3,winsNextTurnThreat:0}),Xc=Object.freeze({fast:Object.freeze({budgetMs:50,limits:Object.freeze({maxDepth:40,maxNodes:38400,tuning:Hc})}),normal:Object.freeze({budgetMs:150,limits:Object.freeze({maxDepth:40,maxNodes:184e3,tuning:qc})}),pro:Object.freeze({budgetMs:650,limits:Object.freeze({maxDepth:40,maxNodes:2e6,tuning:zc})})});function Qc(){return globalThis.performance.now()}i(Qc,"systemClock");function gi(e){let n=e();if(!Number.isFinite(n))throw new RangeError("automove clock must return a finite number");return n}i(gi,"readClock");function Yc(){return globalThis.WeakRef}i(Yc,"weakRefConstructor");var vr=class{static{i(this,"FastSearcherPool")}#e;run(n){let t=Yc(),o=t===void 0?void 0:this.#e?.deref();if(o===void 0)try{o=new _o}catch(r){if(r instanceof RangeError)return It;throw r}this.#e=void 0;try{return n(o)}catch(r){if(At(r))return It;throw r}finally{t!==void 0&&(this.#e??=new t(o))}}},Zc=new vr;function Tr(e,n,t=Qc){let o=Xc[n],r=gi(t)+o.budgetMs,a=!1,s=i(()=>a?!0:(a=gi(t)>=r,a),"deadlineReached");if(e.winnerColor()!==void 0||s())return{kind:"fallback"};let u;try{u=new Co}catch(l){if(l instanceof RangeError)return{kind:"fallback"};throw l}if(!Ba(u,e,o.limits.maxDepth)||s())return{kind:"fallback"};let c=Zc.run(l=>{if(!s()&&(l.root.copyFrom(u),!s()))return l.search(o.limits,s,Rn)});return c===void 0||At(c)||!c.supported||c.move===0?{kind:"fallback"}:{kind:"selected",inputs:Da(c.move)}}i(Tr,"selectPackedInputs");function Ei(e){switch(e.kind){case"takeback":return 0;case"location":return 1;case"modifier":return 2}}i(Ei,"inputTag");function Jc(e,n){let t=Ei(e)-Ei(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"?qo[e.modifier]-qo[n.modifier]:0}i(Jc,"compareInputs");function eu(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(eu,"nextInputs");function wr(e,n){let t=e.fork().processInput(n,!1,!1);return t.kind==="events"?t:void 0}i(wr,"applyInputs");function vi(e){let n=e.fork(),t=[],o=i(()=>{let r=t.length===0?n.processInputWithStartOptions(t,!0,!1,Zo):n.inspectInputGrammar(t,Zo);if(r.kind==="invalid-input")return!1;if(r.kind==="events")return t.length>0&&wr(n,t)!==void 0;if(t.length===Qn)return!1;let a=eu(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(vi,"deterministicLegalFallbackInputs");function Ti(e,n,t){let o=e.fen(),r=t===void 0?Tr(e,n):Tr(e,n,t),a=r.kind==="selected"?r.inputs:vi(e),s=wr(e,a);if(s===void 0&&r.kind==="selected"&&(a=vi(e),s=wr(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(Ti,"suggestMove");function Wt(e){return e===h.White?"w":"b"}i(Wt,"colorFen");function Ge(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===h.White?n.toUpperCase():n}${e.cooldown}`}i(Ge,"monFen");function nu(e,n){let t,o;switch(e.charCodeAt(n)){case 69:t=h.White,o=M.Demon;break;case 101:t=h.Black,o=M.Demon;break;case 68:t=h.White,o=M.Drainer;break;case 100:t=h.Black,o=M.Drainer;break;case 65:t=h.White,o=M.Angel;break;case 97:t=h.Black,o=M.Angel;break;case 83:t=h.White,o=M.Spirit;break;case 115:t=h.Black,o=M.Spirit;break;case 89:t=h.White,o=M.Mystic;break;case 121:t=h.Black,o=M.Mystic;break;default:return}let r=e.charCodeAt(n+1);return r<48||r>50?void 0:Vn(o,t,r-48)}i(nu,"parseMonFenAt");function Hn(e){return e.kind==="supermana"?"U":e.color===h.White?"M":"m"}i(Hn,"manaFen");function wi(e){switch(e){case 77:return Yn(h.White);case 109:return Yn(h.Black);case 85:return Mn;default:return}}i(wi,"parseManaCode");function Oi(e){switch(e){case A.Potion:return"P";case A.Bomb:return"B";case A.BombOrPotion:return"Q"}}i(Oi,"consumableFen");function xi(e){switch(e){case 80:return A.Potion;case 66:return A.Bomb;case 81:return A.BombOrPotion;default:return}}i(xi,"parseConsumableCode");function dt(e){switch(e.kind){case"mon":return`${Ge(e.mon)}x`;case"mana":return`xx${Hn(e.mana)}`;case"mon-with-mana":return`${Ge(e.mon)}${Hn(e.mana)}`;case"mon-with-consumable":return`${Ge(e.mon)}${Oi(e.consumable)}`;case"consumable":return`xx${Oi(e.consumable)}`}}i(dt,"itemFen");function Ri(e,n){let t=e.charCodeAt(n),o=e.charCodeAt(n+2);if(t===120){if(e.charCodeAt(n+1)!==120)return;let u=wi(o);if(u!==void 0)return Ze(u);let c=xi(o);return c===void 0?void 0:bt(c)}let r=nu(e,n);if(r===void 0)return;let a=wi(o);if(a!==void 0)return Zn(r,a);let s=xi(o);return s!==void 0?pt(r,s):o===120?Fe(r):void 0}i(Ri,"parseItemFenAt");function tu(e){switch(e.kind){case"mon-move":return`mm ${dt(e.item)} ${B(e.from)} ${B(e.to)}`;case"mana-move":return`mma ${Hn(e.mana)} ${B(e.from)} ${B(e.to)}`;case"mana-scored":return`ms ${Hn(e.mana)} ${B(e.at)}`;case"mystic-action":return`ma ${Ge(e.mystic)} ${B(e.from)} ${B(e.to)}`;case"demon-action":return`da ${Ge(e.demon)} ${B(e.from)} ${B(e.to)}`;case"demon-additional-step":return`das ${Ge(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 ${Ge(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 ${Hn(e.mana)} ${Ge(e.by)} ${B(e.at)}`;case"mon-fainted":return`mf ${Ge(e.mon)} ${B(e.from)} ${B(e.to)}`;case"mana-dropped":return`md ${Hn(e.mana)} ${B(e.at)}`;case"supermana-back-to-base":return`sb ${B(e.from)} ${B(e.to)}`;case"bomb-attack":return`ba ${Ge(e.by)} ${B(e.from)} ${B(e.to)}`;case"mon-awake":return`maw ${Ge(e.mon)} ${B(e.at)}`;case"bomb-explosion":return`be ${B(e.at)}`;case"next-turn":return`nt ${Wt(e.color)}`;case"game-over":return`go ${Wt(e.winner)}`;case"takeback":return"z"}}i(tu,"eventFen");function _i(e){return e.map(tu).join(" ")}i(_i,"eventArrayFen");function Ni(e){return e===void 0?void 0:{i:e.i,j:e.j}}i(Ni,"detachedLocation");function Or(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(Or,"detachedLocations");function zn(e){let n=e;return n===h.White?0:n===h.Black?1:void 0}i(zn,"boardColorIndex");var mt=class{constructor(n=ln,t,o,r=!1){this.variant=n;if(o!==void 0){this.storage=o;return}let a=t??da(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:Dn(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(un(n))return this.storage.itemSlots[re(n)]}itemAtIndex(n){return this.storage.itemSlots[n]}squareAt(n){return Wn(n),er(n,this.variant)}allMonsBases(){return gt}supermanaBase(){return Ct}allMonsLocations(n){let t=zn(n);return t===void 0?[]:Or(this.getCategoryDerived().monsLocations[t])}allFreeRegularManaLocations(n){let t=zn(n);return t===void 0?[]:Or(this.getCategoryDerived().freeRegularManaLocations[t])}base(n){return ma(n.kind,n.color)}faintedMonsLocations(n){let t=zn(n);return t===void 0?[]:Or(this.getCategoryDerived().faintedMonsLocations[t])}findMana(n){let t=zn(n);if(t!==void 0)return Ni(this.getCategoryDerived().freeRegularManaLocations[t][0])}findAwakeAngel(n){let t=zn(n);if(t!==void 0)return Ni(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(!Hr(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=Yo[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 p=this.storage.itemSlots[m];if(p!==void 0){let f=Yo[m];if(f!==void 0){let b=$(p);if(b!==void 0){let y=zn(b.color);if(y===void 0)continue;(y===0?n:t).push(f),p.kind==="mon"&&Ae(b)?(y===0?a:s).push(f):b.kind===M.Angel&&!Ae(b)&&(y===0&&u===void 0?u=f:y===1&&c===void 0&&(c=f))}else if(p.kind==="mana"&&p.mana.kind==="regular"){let y=zn(p.mana.color);y!==void 0&&(y===0?o:r).push(f)}}}}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){Wn(n),this.storage.itemSlots[re(n)]=void 0,this.storage.occupiedEntries=void 0,this.storage.categoryDerived=void 0}set(n,t){Wn(n),this.storage.itemSlots[re(n)]=Dn(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 Pi=Ce+1,ou=Object.freeze(["","n01","n02","n03","n04","n05","n06","n07","n08","n09","n10","n11"]);function ru(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+=Li(a),a=0),n+=dt(s)}a>0&&(n+=Li(a))}return n}i(ru,"boardFen");function au(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,p=e.charCodeAt(a+2)-48;if(m<0||m>9||p<0||p>9)return;let f=m*10+p;if(f<1||u+f>11)return;u+=f,a+=3,c=!0;continue}if(a+2>=t||u>=11)return;let l=Ri(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(au,"parseBoardFenRange");function Fi(e){let n=`${e.whiteScore} ${e.blackScore} ${Wt(e.activeColor)} ${e.actionsUsedCount} ${e.manaMovesCount} ${e.monsMovesCount} ${e.whitePotionsCount} ${e.blackPotionsCount} ${e.turnNumber} ${ru(e.board)}`,t=e.board.variant;return t===ln?n:`${n} ${ca(t)}`}i(Fi,"gameFen");function Bi(e){let n=0,t=i(P=>{let x=n,F=0,D=!1;for(;n<e.length;){let L=e.charCodeAt(n);if(L===32)break;if(L<48||L>57)return-1;if(n===x)D=L===48;else if(D)return-1;if(F=F*10+(L-48),!Number.isSafeInteger(F))return-1;n+=1}if(n===x)return-1;if(P){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?h.White:a===98?h.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),p=t(!0),f=t(!0);if(o<0||r<0||u<0||c<0||l<0||m<0||p<0||f<0||o>Pi||r>Pi||u>Ne||c>An||l>ee||f<1)return;let b=n;for(;n<e.length&&e.charCodeAt(n)!==32;)n+=1;let y=n,I=ln;if(n<e.length){n+=1;let P=t(!1),x=la(P);if(x===void 0||x===ln)return;I=x}let S=au(e,b,y,I);if(S!==void 0)return{board:S,whiteScore:o,blackScore:r,activeColor:s,actionsUsedCount:u,manaMovesCount:c,monsMovesCount:l,whitePotionsCount:m,blackPotionsCount:p,turnNumber:f}}i(Bi,"parseGameFen");function Li(e){return ou[e]??""}i(Li,"emptyRunFen");function Di(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(Di,"copyRulesCounters");function No(e,n,t,o){let r=e[n]+t;return o&&!Number.isSafeInteger(r)?!1:(e[n]=r,!0)}i(No,"addCounter");function xr(e,n,t,o){if(e.actionsUsedCount<Ne)return e.actionsUsedCount+=1,{valid:!0};let r=e.activeColor===h.White?"whitePotionsCount":"blackPotionsCount";return o&&e[r]<=0?{valid:!1}:(e[r]-=1,{valid:!0,potionUse:{from:n,to:t}})}i(xr,"consumeAction");function Rr(e,n,t,o){switch(n.kind){case"mon-move":return{valid:No(e,"monsMovesCount",1,o)};case"mana-move":return{valid:No(e,"manaMovesCount",1,o)};case"mana-scored":{let r=e.activeColor===h.White?"whiteScore":"blackScore";return{valid:No(e,r,$r(n.mana,e.activeColor),o)}}case"mystic-action":return xr(e,n.from,n.to,o);case"demon-action":{let a=t.find(s=>s.kind==="demon-additional-step")?.to??n.to;return xr(e,a,a,o)}case"spirit-target-move":return xr(e,n.by,n.to,o);case"pickup-potion":{let r=$(n.by);if(r===void 0)return{valid:!0};let a=r.color===h.White?"whitePotionsCount":"blackPotionsCount";return{valid:No(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(Rr,"projectEventCounters");function _r(e,n){let t=Di(e);for(let r of n)if(!Rr(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!Po(o,n).turnAdvanced}i(_r,"canApplyRulesEvents");function iu(e,n,t,o){let r=Rr(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,Fe(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,Fe(n.demon)):e.board.delete(n.to);break}case"demon-additional-step":e.board.set(n.to,Fe(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,Fe(Kr(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,Fe(n.by));break;case"bomb-explosion":{let a=e.board.get(n.at),s=a===void 0?void 0:$(a);(s===void 0||!Ae(s)||!kt(e.board.base(s),n.at))&&e.board.delete(n.at);break}case"mon-awake":case"game-over":case"next-turn":case"takeback":case"use-potion":break}}i(iu,"applyEvent");function su(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=jr(r);Ae(a)||n.push({kind:"mon-awake",mon:a,at:t}),e.board.set(t,Fe(a))}}i(su,"advanceTurn");function Po(e,n){let t=[];for(let a of n)iu(e,a,n,t);let o=ho(e),r=!1;return o!==void 0?t.push({kind:"game-over",winner:o}):Ta(e)&&(su(e,t),r=!0),{events:[...n,...t],turnAdvanced:r,winner:o}}i(Po,"applyRulesEvents");var Gt=Symbol("cache-miss"),Wi=Symbol("cached-undefined"),Lo=Object.freeze({completionViability:16384,secondInputOptions:4096,secondStage:8192,thirdStage:8192});function cu(e){return e===void 0?void 0:[e[0].map(Un),e[1].map(Jn)]}i(cu,"copyStageResult");function Vi(e){return e===void 0?Wi:[e[0].map(Un),e[1].map(Jn)]}i(Vi,"storeStageResult");function Ui(e){return e===Wi?void 0:cu(e)}i(Ui,"copyStoredStageResult");function Fo(e,n,t,o){e.size>=o&&!e.has(n)&&e.clear(),e.set(n,t)}i(Fo,"setBounded");var Bo=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:zo(t)}setStartSuggestion(n,t){(this.#e??=new Array(4))[n]=zo(t)}getCompletionViability(n){return this.#n?.get(n)}setCompletionViability(n,t){Fo(this.#n??=new Map,n,t,Lo.completionViability)}getSecondInputOptions(n){let t=this.#t?.get(n);return t===void 0?void 0:t.map(Jn)}setSecondInputOptions(n,t){Fo(this.#t??=new Map,n,t.map(Jn),Lo.secondInputOptions)}lookupSecondStage(n){let t=this.#o?.get(n);return t===void 0?Gt:Ui(t)}setSecondStage(n,t){Fo(this.#o??=new Map,n,Vi(t),Lo.secondStage)}lookupThirdStage(n){let t=this.#r?.get(n);return t===void 0?Gt:Ui(t)}setThirdStage(n,t){Fo(this.#r??=new Map,n,Vi(t),Lo.thirdStage)}};function Kt(e){return e.map(n=>({fen:n.fen,color:n.color,events:n.events.map(Un)}))}i(Kt,"copyTrackingEntries");var Do=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 Kt(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=Kt(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=Kt(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:Kt(this.#n.slice(0,-1))}}commitTakeback(n){this.#e=[...n.takebackFens],this.#n=Kt(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(Un)})}};function Gi(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||Ae(s))break;if(e.playerCanMoveMon()&&a.push(...e.nextInputsFromLocations(Be(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(Zt(n),O.MysticAction,o,c=>{let l=e.board.get(c);if(l===void 0||Jo(u,c))return!1;let m=$(l);return m!==void 0&&s.color!==m.color&&!Ae(m)}));break}case M.Demon:{let u=e.board.findAwakeAngel(Sn(e.activeColor));a.push(...e.nextInputsFromLocations(Jt(n),O.DemonAction,o,c=>{let l=e.board.get(c),m=Zr(n,c),p=e.board.squareAt(m);if(l===void 0||Jo(u,c)||e.board.get(m)!==void 0||p.kind==="supermana-base"||p.kind==="mon-base")return!1;let f=$(l);return f!==void 0&&s.color!==f.color&&!Ae(f)}));break}case M.Spirit:a.push(...e.nextInputsFromLocations(eo(n),O.SpiritTargetCapture,o,u=>{let c=e.board.get(u);return c===void 0?!1:qr(c)}));break}break}case"mana":t.mana.kind==="regular"&&t.mana.color===e.activeColor&&e.playerCanMoveMana()&&a.push(...e.nextInputsFromLocations(Be(n),O.ManaMove,o,s=>ar(e.board,s)));break;case"mon-with-mana":t.mon.color===e.activeColor&&e.playerCanMoveMon()&&a.push(...e.nextInputsFromLocations(Be(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 Kn(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(Be(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 Kn(l)}})),t.consumable===A.Bomb&&a.push(...e.nextInputsFromLocations(Yt(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&&!Ae(l)}));break}case"consumable":break}return a}i(Gi,"generateSecondInputOptions");function Ki(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:Xo(t)!==void 0||In(t)!==void 0?s.push({kind:"pickup-potion",by:t,at:r}):(a.push(Re({kind:"modifier",modifier:X.SelectBomb},O.SelectConsumable,t)),a.push(Re({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,p=!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:p=!0,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(!p&&(u.kind==="supermana-base"||u.kind==="mon-base")&&(m=!0),m)for(let f of Be(r)){let b=e.board.get(f),y=e.board.squareAt(f);b!==void 0&&b.kind!=="consumable"||(Kn(y)?a.push(Re({kind:"location",location:f},O.DemonAdditionalStep)):y.kind==="mon-base"&&y.monKind===l.kind&&y.color===l.color&&a.push(Re({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(Be(r),O.SpiritTargetMove,void 0,p=>{let f=e.board.get(p),b=e.board.squareAt(p);if(!Ea(c,f))return!1;switch(b.kind){case"regular":case"consumable-base":case"mana-base":case"mana-pool":return!0;case"supermana-base":{let y=f?.kind==="mana"&&f.mana.kind==="supermana";return m?.kind==="supermana"||m===void 0&&l?.kind===M.Drainer&&(f===void 0||y)||l?.kind===M.Drainer&&y}case"mon-base":return l?.kind===b.monKind&&l.color===b.color&&m===void 0&&Xo(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(Ki,"compileSecondInput");function ji(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(Re({kind:"modifier",modifier:X.SelectBomb},O.SelectConsumable,a)),s.push(Re({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(Re({kind:"modifier",modifier:X.SelectBomb},O.SelectConsumable,l)),s.push(Re({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 p=In(a);p!==void 0&&u.push({kind:"mana-scored",mana:p,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(Re({kind:"modifier",modifier:X.SelectBomb},O.SelectConsumable,t)),s.push(Re({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(ji,"compileThirdInput");function $i(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($i,"compileFourthInput");function qi(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(va(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(qi,"suggestedInputToStartWith");function Hi(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(),p=e.secondInputOptions(u,c,t,t?void 0:l?.location);if(l===void 0){let U=o&&!m?oa(p):p,de=e.applicableInputOptions(n,U,r,m,o);return de.length===0?{kind:"invalid-input"}:{kind:"next-input-options",nextInputs:de}}let f=l.location,b=p.find(U=>yt(U.input,l));if(b===void 0)return{kind:"invalid-input"};let y=n[2],I=e.processSecondInput(b.kind,c,u,f,t),S=I?.[0]??[],P=I?.[1]??[];if(y===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 S.length===0?{kind:"invalid-input"}:e.resolveEvents(S,t)}let x=P.find(U=>yt(U.input,y));if(x===void 0)return{kind:"invalid-input"};let F=n[3],D=e.processThirdInput(x,c,u,f,t);S.push(...D?.[0]??[]);let L=D?.[1]??[];if(F===void 0){if(L.length!==0){let U=e.applicableInputOptions(n,L,r,m,o);return U.length===0?{kind:"invalid-input"}:{kind:"next-input-options",nextInputs:U}}return S.length===0?{kind:"invalid-input"}:e.resolveEvents(S,t)}let V=$i(F,x,L);return V===void 0?{kind:"invalid-input"}:(S.push(V),e.resolveEvents(S,t))}i(Hi,"dispatchStagedInput");var Ye=class e{static{i(this,"MonsGame")}#e;#n;#t;#o;constructor(n=!1,t=ln,o){let r=o===void 0?new Ln(t):o.fork();this.#e={board:r,whiteScore:0,blackScore:0,activeColor:h.White,actionsUsedCount:0,manaMovesCount:0,monsMovesCount:0,whitePotionsCount:0,blackPotionsCount:0,turnNumber:1},this.#n=new Do(n),this.#t=new Bo,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=Bi(n);if(o===void 0)return;let r=e.#a(t,o.board);return r.#r(o),r.#n.resetForLoadedFen(),r}fen(){return Fi(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??ta)}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=qi(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 Hi(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}|${zr(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 _r(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=Gi(this,n,t,r);return o&&this.#t.setSecondInputOptions(a,u),u}#k(n,t,o,r,a){let s=`${n}|${Xt(t)}|${re(o)}|${re(r)}`,u=this.#t.lookupSecondStage(s);if(u!==Gt)return u;let c=Ki(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?"":Xt(n.actorMonItem)}|${Xt(t)}|${re(o)}|${re(r)}`,u=this.#t.lookupThirdStage(s);if(u!==Gt)return u;let c=ji(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(!_r(this.#e,n))return;if(this.invalidateProcessInputCache(),!t)return Po(this.#e,n).events;let o=i(()=>this.fen(),"snapshotFen");this.#n.beginEventApplication(o,this.activeColor);let r=Po(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 ra(n,t,o,r)}availableMoveKinds(){let n=new Map;return n.set(xe.MonMove,ee-this.monsMovesCount),n.set(xe.Action,0),n.set(xe.Potion,0),n.set(xe.ManaMove,0),this.turnNumber===1||(n.set(xe.Action,Ne-this.actionsUsedCount),n.set(xe.Potion,this.playerPotionsCount()),n.set(xe.ManaMove,An-this.manaMovesCount)),n}winnerColor(){return ho(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 ko(this)}playerCanMoveMon(){return Aa(this)}playerCanMoveMana(){return Ca(this)}playerCanUseAction(){return ga(this)}};function Vo(e){let n={i:e.row,j:e.column};if(!Number.isInteger(e.row)||!Number.isInteger(e.column)||!un(n))throw new RangeError(`position must contain integer row and column values from 0 through ${10}`);return n}i(Vo,"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 jt(e){return e.kind==="supermana"?{kind:"supermana"}:{kind:"regular",color:e.color}}i(jt,"fromEngineMana");function ft(e){switch(e.kind){case"mon":return{kind:"mon",mon:an(e.mon)};case"mana":return{kind:"mana",mana:jt(e.mana)};case"mon-with-mana":return{kind:"mon",mon:an(e.mon),carrying:{kind:"mana",mana:jt(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 zi(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(zi,"fromEngineSquare");function Nr(e){switch(e.kind){case"takeback":return{kind:"takeback"};case"position":return{kind:"location",location:Vo(e.position)};case"modifier":return{kind:"modifier",modifier:e.modifier}}}i(Nr,"toEngineInput");function Pr(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(Pr,"fromEngineInput");function uu(e){let n=Pr(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(uu,"fromEngineInputOption");function Uo(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:jt(e.mana),from:Y(e.from),to:Y(e.to)};case"mana-scored":case"mana-dropped":return{kind:e.kind,mana:jt(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:jt(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(Uo,"fromEngineEvent");function Lr(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(uu)};case"events":return{kind:"complete",inputFen:n,events:e.events.map(Uo)}}}i(Lr,"fromEngineOutput");function Xi(e){return{monMoves:e.get(xe.MonMove)??0,manaMoves:e.get(xe.ManaMove)??0,actions:e.get(xe.Action)??0,potions:e.get(xe.Potion)??0}}i(Xi,"availableMoveCountsFromEngine");function lu(e){if(e!=="")return ht(e)}i(lu,"parseReplayMove");function Wo(e,n,t,o){let r=0,a=0;for(;r<n.length||a<t.length;){let s=e.activeColor===h.White,l=(s?n:t)[s?r:a];if(l===void 0)return{status:"missing-move",whiteMovesProcessed:r,blackMovesProcessed:a};let m=lu(l);if(m===void 0)return{status:"invalid-move",whiteMovesProcessed:r,blackMovesProcessed:a};let p=e.processInput(m,!1,!1);if(p.kind!=="events"||p.events.length===0)return{status:"invalid-move",whiteMovesProcessed:r,blackMovesProcessed:a};s?r+=1:a+=1;let f={whiteMovesProcessed:r,blackMovesProcessed:a};if(o?.(e,f)===!1)return{status:"stopped",...f}}return{status:"complete",whiteMovesProcessed:r,blackMovesProcessed:a}}i(Wo,"replayInterleavedMoves");var Fr=class e{static{i(this,"Game")}#e;constructor(n={}){let{variant:t=E.Classic}=n;if(!mu(t))throw new TypeError(`unsupported game variant: ${String(t)}`);this.#e=new Ye(!0,t)}static#n(n){let t=new e({variant:n.variant()});return t.#e=n,t}static fromFen(n){let t=Ye.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{[h.White]:this.#e.whiteScore,[h.Black]:this.#e.blackScore}}get potions(){return{[h.White]:this.#e.whitePotionsCount,[h.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(Uo),eventsFen:_i(n.events)}))}toFen(){return this.#e.fen()}preview(n){let t=n.map(Nr);return this.#t(t,et(t))}play(n){let t=n.map(Nr);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 Lr(o.processInput(n,!1,!1),t)}#o(n,t){let o=Lr(this.#e.processInput(n,!1,!1),t);return o.kind==="complete"?o:{kind:"invalid",inputFen:t}}itemAt(n){let t=this.#e.board.get(Vo(n));return t===void 0?void 0:ft(t)}squareAt(n){return zi(this.#e.board.squareAt(Vo(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(!du(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=Ye.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=Ye.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 Ye(!0,this.#e.variant());return Wo(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 Xi(this.#e.availableMoveKinds())}suggestMove(n){if(!fu(n))throw new TypeError(`unsupported automove preference: ${String(n)}`);let t=Ti(this.#e,n);if(t.output.kind!=="events")return;let o=ht(t.inputFen);if(o!==void 0)return{inputs:o.map(Pr),inputFen:t.inputFen,events:t.output.events.map(Uo)}}};function du(e){return e===h.White||e===h.Black}i(du,"isColor");function mu(e){return Object.values(E).includes(e)}i(mu,"isGameVariant");function fu(e){return e==="fast"||e==="normal"||e==="pro"}i(fu,"isAutomovePreference");function Qi(e,n){return`${e},${n}`}i(Qi,"positionKey");function pu(e){let n=Yi(e.white.fen),t=Yi(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?h.Black:h.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 Ye(!1,n.variant()),s;return Wo(a,e.white.moves,e.black.moves,(u,{whiteMovesProcessed:c,blackMovesProcessed:l})=>{let m=u.winnerColor();if(m===void 0)return!0;let p=m===h.White?c===e.white.moves.length:l===e.black.moves.length,f=m===h.White?o:r;return s=p&&f===u.fen()?{kind:"winner",winner:m}:{kind:"invalid"},!1}),s??{kind:"invalid"}}i(pu,"resolveMatch");function Yi(e){let n=Ye.fromFen(e,!1);return n?.fen()===e?n:void 0}i(Yi,"submittedGame");export{h as Color,A as Consumable,Fr as Game,E as GameVariant,X as Modifier,M as MonKind,pu as resolveMatch};
1
+ var fs=Object.defineProperty;var s=(e,n)=>fs(e,"name",{value:n,configurable:!0});var y=Object.freeze({White:"white",Black:"black"}),R=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"}),I=Object.freeze({Demon:"demon",Drainer:"drainer",Angel:"angel",Spirit:"spirit",Mystic:"mystic"}),O=Object.freeze({Potion:"potion",Bomb:"bomb",BombOrPotion:"bomb-or-potion"}),J=Object.freeze({SelectPotion:"select-potion",SelectBomb:"select-bomb"});var nr=Object.freeze({[y.White]:0,[y.Black]:1});function nn(e){return nr[e]}s(nn,"colorId");var tn=Object.freeze({[I.Demon]:0,[I.Drainer]:1,[I.Angel]:2,[I.Spirit]:3,[I.Mystic]:4}),Be=Object.freeze({MonMove:"mon-move",ManaMove:"mana-move",Action:"action",Potion:"potion"}),tr=Object.freeze({[J.SelectPotion]:0,[J.SelectBomb]:1}),_=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"}),ot=4,En=Object.freeze({kind:"supermana"});function Pn(e){return e===y.Black?y.White:y.Black}s(Pn,"otherColor");function Hn(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})}s(Hn,"createMon");function Jo(e,n){return e.kind===n.kind&&e.color===n.color&&e.cooldown===n.cooldown}s(Jo,"monEquals");function Ee(e){return e.cooldown>0}s(Ee,"isMonFainted");function sa(e){return Hn(e.kind,e.color,2)}s(sa,"faintMon");function ca(e){return e.cooldown>0?Hn(e.kind,e.color,e.cooldown-1):ze(e)}s(ca,"decreaseMonCooldown");function rt(e){return Object.freeze({kind:"regular",color:e})}s(rt,"regularMana");function aa(e,n){return e.kind==="supermana"?n.kind==="supermana":n.kind==="regular"&&e.color===n.color}s(aa,"manaEquals");function or(e,n){return e||!n?2:1}s(or,"manaScoreForOwnership");function ua(e,n){return or(e.kind==="supermana",e.kind==="regular"&&e.color===n)}s(ua,"manaScore");function He(e){return Object.freeze({kind:"mon",mon:ze(e)})}s(He,"monItem");function cn(e){return Object.freeze({kind:"mana",mana:tt(e)})}s(cn,"manaItem");function at(e,n){return Object.freeze({kind:"mon-with-mana",mon:ze(e),mana:tt(n)})}s(at,"monWithManaItem");function Ct(e,n){return Object.freeze({kind:"mon-with-consumable",mon:ze(e),consumable:n})}s(Ct,"monWithConsumableItem");function It(e){return Object.freeze({kind:"consumable",consumable:e})}s(It,"consumableItem");function ze(e){return Object.isFrozen(e)?e:Hn(e.kind,e.color,e.cooldown)}s(ze,"immutableMon");function tt(e){return e.kind==="supermana"?En:Object.isFrozen(e)?e:rt(e.color)}s(tt,"immutableMana");function zn(e){switch(e.kind){case"mon":return Object.isFrozen(e)&&Object.isFrozen(e.mon)?e:He(e.mon);case"mana":return Object.isFrozen(e)&&Object.isFrozen(e.mana)?e:cn(e.mana);case"mon-with-mana":return Object.isFrozen(e)&&Object.isFrozen(e.mon)&&Object.isFrozen(e.mana)?e:at(e.mon,e.mana);case"mon-with-consumable":return Object.isFrozen(e)&&Object.isFrozen(e.mon)?e:Ct(e.mon,e.consumable);case"consumable":return Object.isFrozen(e)?e:It(e.consumable)}}s(zn,"immutableItem");function V(e){return{i:e.i,j:e.j}}s(V,"copyLocation");function ps(e){switch(e.kind){case"takeback":return{kind:"takeback"};case"location":return{kind:"location",location:V(e.location)};case"modifier":return{kind:"modifier",modifier:e.modifier}}}s(ps,"copyInput");function it(e){let n=ps(e.input);return e.actorMonItem===void 0?{input:n,kind:e.kind}:{input:n,kind:e.kind,actorMonItem:zn(e.actorMonItem)}}s(it,"copyNextInput");function Qn(e){switch(e.kind){case"mon-move":return{kind:"mon-move",item:zn(e.item),from:V(e.from),to:V(e.to)};case"mana-move":return{kind:"mana-move",mana:tt(e.mana),from:V(e.from),to:V(e.to)};case"mana-scored":return{kind:"mana-scored",mana:tt(e.mana),at:V(e.at)};case"mystic-action":return{kind:"mystic-action",mystic:ze(e.mystic),from:V(e.from),to:V(e.to)};case"demon-action":return{kind:"demon-action",demon:ze(e.demon),from:V(e.from),to:V(e.to)};case"demon-additional-step":return{kind:"demon-additional-step",demon:ze(e.demon),from:V(e.from),to:V(e.to)};case"spirit-target-move":return{kind:"spirit-target-move",item:zn(e.item),from:V(e.from),to:V(e.to),by:V(e.by)};case"pickup-bomb":return{kind:"pickup-bomb",by:ze(e.by),at:V(e.at)};case"pickup-potion":return{kind:"pickup-potion",by:zn(e.by),at:V(e.at)};case"use-potion":return{kind:"use-potion",from:V(e.from),to:V(e.to)};case"pickup-mana":return{kind:"pickup-mana",mana:tt(e.mana),by:ze(e.by),at:V(e.at)};case"mon-fainted":return{kind:"mon-fainted",mon:ze(e.mon),from:V(e.from),to:V(e.to)};case"mana-dropped":return{kind:"mana-dropped",mana:tt(e.mana),at:V(e.at)};case"supermana-back-to-base":return{kind:"supermana-back-to-base",from:V(e.from),to:V(e.to)};case"bomb-attack":return{kind:"bomb-attack",by:ze(e.by),from:V(e.from),to:V(e.to)};case"mon-awake":return{kind:"mon-awake",mon:ze(e.mon),at:V(e.at)};case"bomb-explosion":return{kind:"bomb-explosion",at:V(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"}}}s(Qn,"copyEvent");function rr(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(V)};case"next-input-options":return{kind:"next-input-options",nextInputs:e.nextInputs.map(it)};case"events":return{kind:"events",events:e.events.map(Qn)}}}s(rr,"copyOutput");function Q(e){switch(e.kind){case"mon":case"mon-with-mana":case"mon-with-consumable":return e.mon;case"mana":case"consumable":return}}s(Q,"itemMon");function la(e){let n=Q(e);return n===void 0||!Ee(n)}s(la,"isSpiritTargetAllowed");function vn(e){switch(e.kind){case"mana":case"mon-with-mana":return e.mana;case"mon":case"mon-with-consumable":case"consumable":return}}s(vn,"itemMana");function ar(e){switch(e.kind){case"mon-with-consumable":case"consumable":return e.consumable;case"mon":case"mana":case"mon-with-mana":return}}s(ar,"itemConsumable");function da(e,n){switch(e.kind){case"mon":return n.kind==="mon"&&Jo(e.mon,n.mon);case"mana":return n.kind==="mana"&&aa(e.mana,n.mana);case"mon-with-mana":return n.kind==="mon-with-mana"&&Jo(e.mon,n.mon)&&aa(e.mana,n.mana);case"mon-with-consumable":return n.kind==="mon-with-consumable"&&Jo(e.mon,n.mon)&&e.consumable===n.consumable;case"consumable":return n.kind==="consumable"&&e.consumable===n.consumable}}s(da,"itemEquals");function er(e){return`${e.kind}:${e.color}:${e.cooldown}`}s(er,"monKey");function ia(e){return e.kind==="supermana"?"s":`r:${e.color}`}s(ia,"manaKey");function ro(e){switch(e.kind){case"mon":return`m:${er(e.mon)}`;case"mana":return`a:${ia(e.mana)}`;case"mon-with-mana":return`mm:${er(e.mon)}:${ia(e.mana)}`;case"mon-with-consumable":return`mc:${er(e.mon)}:${e.consumable}`;case"consumable":return`c:${e.consumable}`}}s(ro,"itemKey");function ir(e){switch(e.kind){case"takeback":return"t";case"location":return`l:${e.location.i}:${e.location.j}`;case"modifier":return`m:${e.modifier}`}}s(ir,"inputKey");function Aa(e){return e.map(ir).join(";")}s(Aa,"inputChainKey");function St(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}}s(St,"inputEquals");function W(e){return`${e.i},${e.j}`}s(W,"locationFen");var ao=48,bs=57,hs=44,ys=59,ks=108,gs=109,Ms=122,Cs=112,Is=98;function Ss(e){switch(e){case J.SelectPotion:return"p";case J.SelectBomb:return"b"}}s(Ss,"modifierFen");function Es(e){switch(e.kind){case"takeback":return"z";case"location":return`l${W(e.location)}`;case"modifier":return`m${Ss(e.modifier)}`}}s(Es,"inputFen");function ma(e,n,t){if(n>=t)return;let o=e.charCodeAt(n);if(!(o<ao||o>bs))return o===ao+1&&n+1<t&&e.charCodeAt(n+1)===ao?10:o-ao}s(ma,"parseCoordinate");function fa(e,n){return e+(n===10?2:1)}s(fa,"coordinateEnd");function Ps(e,n,t){let o=ma(e,n,t);if(o===void 0)return;let r=fa(n,o);if(r>=t||e.charCodeAt(r)!==hs)return;let a=r+1,i=ma(e,a,t);if(!(i===void 0||fa(a,i)!==t))return{i:o,j:i}}s(Ps,"parseLocation");function vs(e,n,t){switch(e.charCodeAt(n)){case ks:{let o=Ps(e,n+1,t);return o===void 0?void 0:{kind:"location",location:o}}case gs:return t!==n+2?void 0:e.charCodeAt(n+1)===Cs?{kind:"modifier",modifier:J.SelectPotion}:e.charCodeAt(n+1)===Is?{kind:"modifier",modifier:J.SelectBomb}:void 0;case Ms:return t===n+1?{kind:"takeback"}:void 0;default:return}}s(vs,"parseInputFenRange");function st(e){return e.map(Es).join(";")}s(st,"inputArrayFen");function Et(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)!==ys)continue;if(n.length===ot)return;let r=vs(e,t,o);if(r===void 0)return;n.push(r),t=o+1}return n}s(Et,"parseInputArrayFen");var pa=Math.trunc(5.5),ws=10;function oe(e,n){return{i:e,j:n}}s(oe,"location");function Pt(e,n){return e.i===n.i&&e.j===n.j}s(Pt,"locationEquals");function bn(e){return Number.isInteger(e.i)&&Number.isInteger(e.j)&&e.i>=0&&e.i<11&&e.j>=0&&e.j<11}s(bn,"isValidLocation");function qn(e){if(!bn(e))throw new RangeError(`board location must use integer coordinates from 0 to ${ws}`)}s(qn,"assertValidLocation");function se(e){return qn(e),e.i*11+e.j}s(se,"locationIndex");function ct(e){if(!Number.isInteger(e)||e<0||e>=121)throw new RangeError("board location index must be an integer from 0 to 120");return oe(Math.trunc(e/11),e%11)}s(ct,"fromLocationIndex");function ba(e,n){return oe(Math.trunc((e.i+n.i)/2),Math.trunc((e.j+n.j)/2))}s(ba,"locationBetween");function ha(e,n){return Math.max(Math.abs(n.i-e.i),Math.abs(n.j-e.j))}s(ha,"locationDistance");function ya(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=oe(o,r);bn(a)&&!Pt(a,e)&&t.push(a)}return t}s(ya,"nearbyLocationsFor");function ka(e,n){let t=[];for(let[o,r]of n){let a=oe(e.i+o,e.j+r);bn(a)&&t.push(a)}return t}s(ka,"directionalReachabilityFor");function Ts(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=oe(e.i+t,e.j+o);bn(r)&&n.push(r)}return n}s(Ts,"spiritReachabilityFor");function vt(e){return Object.freeze(Array.from({length:121},(n,t)=>Object.freeze(e(ct(t)).map(o=>Object.freeze(o)))))}s(vt,"buildCache");var Os=vt(e=>ya(e,1)),xs=vt(e=>ya(e,3)),Rs=vt(e=>ka(e,[[-2,-2],[2,2],[-2,2],[2,-2]])),_s=vt(e=>ka(e,[[-2,0],[2,0],[0,2],[0,-2]])),Ds=vt(Ts);function wt(e,n){return bn(n)?e[se(n)]??[]:[]}s(wt,"cachedLocations");function Qe(e){return wt(Os,e)}s(Qe,"nearbyLocations");function io(e){return wt(xs,e)}s(io,"bombReachableLocations");function so(e){return wt(Rs,e)}s(so,"mysticReachableLocations");function co(e){return wt(_s,e)}s(co,"demonReachableLocations");function uo(e){return wt(Ds,e)}s(uo,"spiritReachableLocations");var sr=Object.freeze(Array.from({length:121},(e,n)=>Object.freeze(ct(n))));var ga=Object.freeze({includeManaStartsWithPotionAction:!1}),cr=Object.freeze({includeManaStartsWithPotionAction:!0});function Fe(e,n,t){return t===void 0?{input:e,kind:n}:{input:e,kind:n,actorMonItem:t}}s(Fe,"nextInput");function Ma(e){let n=[],t;for(let o of e)o.kind!==t&&(n.push(o),t=o.kind);return n}s(Ma,"firstOptionFromEachKindGroup");function ur(e,n){return e!==void 0&&ha(e,n)===1}s(ur,"isLocationGuardedByAngelLocation");function Ca(e,n,t,o){if(t!==void 0){for(let a of e)if(Pt(a,t))return o(t)?[Fe({kind:"location",location:t},n)]:[];return[]}let r=[];for(let a of e)o(a)&&r.push(Fe({kind:"location",location:a},n));return r}s(Ca,"nextInputsFromLocations");var Tt=new RangeError("fast workspace allocation failed");function Ot(e){return e===Tt}s(Ot,"isFastWorkspaceAllocationFailure");function Oe(e){throw e instanceof RangeError?Tt:e}s(Oe,"rethrowFastWorkspaceAllocation");var hn=R.Classic,ke=5,ie=5,wn=1,Ue=1,$n=Object.freeze([R.Classic,R.SwappedManaRows,R.OffsetArcManaRows,R.CenterSpokeManaRows,R.AlternatingManaRows,R.InnerWedgeManaRows,R.OuterWedgeManaRows,R.BentCenterManaRows,R.OuterEdgeManaRows,R.SplitFlankManaRows,R.ForwardBridgeManaRows,R.CornerChainManaRows]),Ea=Object.freeze({[R.Classic]:0,[R.SwappedManaRows]:1,[R.OffsetArcManaRows]:2,[R.CenterSpokeManaRows]:3,[R.AlternatingManaRows]:4,[R.InnerWedgeManaRows]:5,[R.OuterWedgeManaRows]:6,[R.BentCenterManaRows]:7,[R.OuterEdgeManaRows]:8,[R.SplitFlankManaRows]:9,[R.ForwardBridgeManaRows]:10,[R.CornerChainManaRows]:11}),Ls=new Map($n.map(e=>[Ea[e],e]));function Pa(e){return Ea[e]}s(Pa,"gameVariantId");function ee(...e){return Object.freeze(e.map(([n,t])=>Object.freeze(oe(n,t))))}s(ee,"locations");function qe(e,n){return Object.freeze({[y.Black]:e,[y.White]:n})}s(qe,"manaLayout");var Ns=Object.freeze({[R.Classic]:qe(ee([3,4],[3,6],[4,3],[4,5],[4,7]),ee([7,4],[7,6],[6,3],[6,5],[6,7])),[R.SwappedManaRows]:qe(ee([3,3],[3,5],[3,7],[4,4],[4,6]),ee([7,3],[7,5],[7,7],[6,4],[6,6])),[R.OffsetArcManaRows]:qe(ee([3,4],[3,6],[4,2],[4,5],[4,8]),ee([6,2],[6,5],[6,8],[7,4],[7,6])),[R.CenterSpokeManaRows]:qe(ee([3,5],[4,2],[4,4],[4,6],[4,8]),ee([6,2],[6,4],[6,6],[6,8],[7,5])),[R.AlternatingManaRows]:qe(ee([4,1],[4,3],[4,5],[4,7],[4,9]),ee([6,1],[6,3],[6,5],[6,7],[6,9])),[R.InnerWedgeManaRows]:qe(ee([3,4],[3,6],[4,4],[4,5],[4,6]),ee([6,4],[6,5],[6,6],[7,4],[7,6])),[R.OuterWedgeManaRows]:qe(ee([3,4],[3,5],[3,6],[4,3],[4,7]),ee([6,3],[6,7],[7,4],[7,5],[7,6])),[R.BentCenterManaRows]:qe(ee([3,5],[4,4],[4,5],[4,6],[5,3]),ee([5,7],[6,4],[6,5],[6,6],[7,5])),[R.OuterEdgeManaRows]:qe(ee([4,0],[4,1],[4,9],[4,10],[5,1]),ee([5,9],[6,0],[6,1],[6,9],[6,10])),[R.SplitFlankManaRows]:qe(ee([3,4],[3,6],[4,2],[4,3],[5,2]),ee([5,8],[6,7],[6,8],[7,4],[7,6])),[R.ForwardBridgeManaRows]:qe(ee([3,4],[3,6],[4,3],[4,5],[5,4]),ee([5,6],[6,5],[6,7],[7,4],[7,6])),[R.CornerChainManaRows]:qe(ee([3,5],[3,6],[4,6],[4,7],[5,7]),ee([5,3],[6,3],[6,4],[7,4],[7,5]))}),va=Object.freeze({kind:"regular"}),Ia=Object.freeze({kind:"consumable-base"}),Bs=Object.freeze({kind:"supermana-base"}),xt=Object.freeze(oe(5,5)),Rt=ee([0,3],[0,4],[0,5],[0,6],[0,7],[10,3],[10,4],[10,5],[10,6],[10,7]);function wa(e){return Number.isSafeInteger(e)?Ls.get(e):void 0}s(wa,"gameVariantFromId");function Sa(e,n){return Ns[e][n]}s(Sa,"manaBaseLocations");function Fs(e){let n=Array.from({length:121}).fill(va),t=s((o,r)=>{n[se(o)]=Object.freeze(r)},"put");t(oe(0,0),{kind:"mana-pool",color:y.Black}),t(oe(0,10),{kind:"mana-pool",color:y.Black}),t(oe(10,0),{kind:"mana-pool",color:y.White}),t(oe(10,10),{kind:"mana-pool",color:y.White}),t(oe(0,3),{kind:"mon-base",monKind:I.Mystic,color:y.Black}),t(oe(0,4),{kind:"mon-base",monKind:I.Spirit,color:y.Black}),t(oe(0,5),{kind:"mon-base",monKind:I.Drainer,color:y.Black}),t(oe(0,6),{kind:"mon-base",monKind:I.Angel,color:y.Black}),t(oe(0,7),{kind:"mon-base",monKind:I.Demon,color:y.Black}),t(oe(10,3),{kind:"mon-base",monKind:I.Demon,color:y.White}),t(oe(10,4),{kind:"mon-base",monKind:I.Angel,color:y.White}),t(oe(10,5),{kind:"mon-base",monKind:I.Drainer,color:y.White}),t(oe(10,6),{kind:"mon-base",monKind:I.Spirit,color:y.White}),t(oe(10,7),{kind:"mon-base",monKind:I.Mystic,color:y.White});for(let o of Sa(e,y.Black))t(o,{kind:"mana-base",color:y.Black});for(let o of Sa(e,y.White))t(o,{kind:"mana-base",color:y.White});return t(oe(5,0),Ia),t(oe(5,10),Ia),t(xt,Bs),Object.freeze(n)}s(Fs,"buildSquares");var Us=new Map($n.map(e=>[e,Fs(e)]));function lo(e){let n=Us.get(e);if(n===void 0)throw new TypeError(`unsupported game variant: ${e}`);return n}s(lo,"squaresForVariant");function lr(e,n){return qn(e),lo(n)[se(e)]??va}s(lr,"squareAtForVariant");function js(e){return lr(e,hn)}s(js,"squareAt");function Gs(e){switch(e.kind){case"mon-base":return He(Hn(e.monKind,e.color,0));case"mana-base":return cn(rt(e.color));case"supermana-base":return cn(En);case"consumable-base":return It(O.BombOrPotion);case"regular":case"mana-pool":return}}s(Gs,"initialItemForSquare");function Ks(e){return Object.freeze(lo(e).map(Gs))}s(Ks,"buildInitialItems");var Ws=new Map($n.map(e=>[e,Ks(e)]));function Ta(e){let n=Ws.get(e);if(n===void 0)throw new TypeError(`unsupported game variant: ${e}`);return[...n]}s(Ta,"initialItemsForVariant");function Oa(e,n){for(let t of Rt){let o=js(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")}s(Oa,"monBase");var ae=Object.keys(nr).length,yn=Object.keys(tn).length,_t=ae*yn,ne=1,ue=2,X=3,Dt=1,Lt=2,ge=3,Pe=1,Ra=2,pe=3,Nt=tn[I.Demon],Ce=tn[I.Drainer],Bt=tn[I.Angel],Ao=tn[I.Spirit],Ft=tn[I.Mystic],Vs=0,zs=1,on=2,Hs=3,_a=5,ce=7,ut=se(xt);function j(e){return e&3}s(j,"cellOccupancy");function le(e){return e>>2&7}s(le,"cellMonKind");function fe(e){return e>>5&1}s(fe,"cellMonColor");function de(e){return e>>6&3}s(de,"cellCooldown");function D(e){return e>>8&3}s(D,"cellMana");function N(e){return e>>10&3}s(N,"cellConsumable");function lt(e){let n=N(e);return n===0||n===Pe}s(lt,"damagingAttackCanComplete");function dt(e,n,t,o,r){return X|e<<2|n<<5|t<<6|o<<8|r<<10}s(dt,"makeMonCell");function Tn(e){return ne|e<<8}s(Tn,"makeManaCell");function Da(e){return ue|e<<10}s(Da,"makeConsumableCell");function je(e,n){return or(e===ge,e-1===n)}s(je,"manaScoreValue");function ve(e,n){return e*ae+n}s(ve,"monId");function At(e){return e!==on&&e<ce}s(At,"squareIsRegularForMovement");function un(e){return e>=_a&&e<ce}s(un,"squareIsPool");function Ut(e){return Math.trunc((e-ce)/ae)}s(Ut,"squareMonBaseKind");function jt(e){return(e-ce)%ae}s(jt,"squareMonBaseColor");function H(e,n){return e[n]??0}s(H,"u8");function G(e,n){return e[n]??0}s(G,"u16");function m(e,n){return e[n]??0}s(m,"i32");function Ie(e,n){let t=e[n];if(t===void 0)throw new RangeError("automove search slot index out of range");return t}s(Ie,"at");function mo(e,n,t){return dt(tn[e.kind],nn(e.color),e.cooldown,n,t)}s(mo,"fastMonCellFromMon");function Qs(e){let n=new Uint8Array(121),t=lo(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]=zs;break;case"supermana-base":n[o]=on;break;case"mana-base":n[o]=Hs+nn(r.color);break;case"mana-pool":n[o]=_a+nn(r.color);break;case"mon-base":n[o]=ce+ve(tn[r.monKind],nn(r.color));break}}return n}s(Qs,"buildSquares");var qs=new Map($n.map(e=>[e,Qs(e)]));function fo(e){let n=qs.get(e);if(n===void 0)throw new TypeError(`unsupported game variant: ${e}`);try{return n.slice()}catch(t){Oe(t)}}s(fo,"fastSquaresForVariant");var po=(()=>{let e=new Int32Array(_t).fill(-1),n=fo(Ie($n,0));for(let t of Rt){let o=se(t),r=H(n,o);r>=ce&&(e[r-ce]=o)}return e})();function Gt(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(ct(r)).map(se).sort((i,u)=>i-u);n.push(...a),t[r]=a.length}return{list:new Int32Array(n),starts:o,counts:t}}s(Gt,"buildOffsetTable");var Ae=Gt(Qe),On=Gt(so),xn=Gt(co),bo=Gt(uo),ho=Gt(io),$s=(()=>{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),i=r%11;e[n*121+r]=Math.max(Math.abs(t-a),Math.abs(o-i))}}return e})();function Se(e,n){return H($s,e*121+n)}s(Se,"chebyshev");function Ys(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)}s(Ys,"midpointCompute");var Xs=(()=>{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]=Ys(n,t);return e})();function yo(e,n){return H(Xs,e*121+n)}s(yo,"midpoint");var xa=(()=>{let e=[],n=fo(Ie($n,0));for(let t=0;t<121;t+=1)un(H(n,t))&&e.push(t);return new Int32Array(e)})(),dr=(()=>{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 i=a===0?10:0,u=Math.abs(i-t);e[a*121+n]=u>r?u:r}}return e})(),La=(()=>{let e=new Uint8Array(121);for(let n=0;n<121;n+=1)e[n]=Math.abs(pa-Math.trunc(n/11));return e})(),ln=(()=>{let e=new Uint8Array(121);for(let n=0;n<121;n+=1){let t=99;for(let o=0;o<xa.length;o+=1){let r=Se(n,m(xa,o));r<t&&(t=r)}e[n]=t}return e})();function Zs(e){let n=e>>>0;return()=>(n^=n<<13,n>>>=0,n^=n>>>17,n^=n<<5,n>>>=0,n|0)}s(Zs,"xorshift");function Rn(e,n){let t=new Int32Array(n);for(let o=0;o<n;o+=1)t[o]=e();return t}s(Rn,"randomTable");var _n=Zs(49734321),Na=3,ko=1+_t*Na,Js=Rn(_n,121*ko),ec=Rn(_n,121*ko),nc=Rn(_n,484),tc=Rn(_n,484),oc=Rn(_n,484),rc=Rn(_n,484),Ba=2048,go=Rn(_n,Ba),Ar=Rn(_n,Ba);function Fa(e){return j(e)!==X?0:1+ve(le(e),fe(e))*Na+de(e)}s(Fa,"monSlot");function Mo(e,n){return n===0?0:m(Js,e*ko+Fa(n))^m(nc,e*4+D(n))^m(oc,e*4+N(n))}s(Mo,"cellHashLo");function Co(e,n){return n===0?0:m(ec,e*ko+Fa(n))^m(tc,e*4+D(n))^m(rc,e*4+N(n))}s(Co,"cellHashHi");function mr(e,n){return e>=ke?y.White:n>=ke?y.Black:void 0}s(mr,"winnerForScores");function Io(e){return mr(e.whiteScore,e.blackScore)}s(Io,"winnerForState");function mt(e){return e.turnNumber===1}s(mt,"isFirstTurnState");function So(e){return e.activeColor===y.White?e.whitePotionsCount:e.blackPotionsCount}s(So,"currentPlayerPotions");function kn(e){return e<ie}s(kn,"canMoveMonForCounts");function Ua(e){return kn(e.monsMovesCount)}s(Ua,"canPlayerMoveMon");function Dn(e,n){return!e&&n<wn}s(Dn,"canMoveManaForCounts");function ja(e){return Dn(mt(e),e.manaMovesCount)}s(ja,"canPlayerMoveMana");function Eo(e,n,t){return!e&&(t>0||n<Ue)}s(Eo,"canUseActionForCounts");function Ga(e){return Eo(mt(e),e.actionsUsedCount,So(e))}s(Ga,"canPlayerUseAction");function Ka(e,n){if(n===void 0)return!0;let t=Q(e);switch(n.kind){case"mon":return t!==void 0?!1:e.kind==="mana"?n.mon.kind===I.Drainer&&!Ee(n.mon):e.kind==="consumable"&&e.consumable===O.BombOrPotion;case"mana":return t?.kind===I.Drainer&&!Ee(t);case"mon-with-mana":case"mon-with-consumable":return e.kind==="consumable"&&e.consumable===O.BombOrPotion;case"consumable":return n.consumable===O.BombOrPotion&&t!==void 0}}s(Ka,"spiritDestinationItemAllowed");function fr(e,n,t,o,r,a,i){if(!Dn(e,t))return!1;let u=kn(n);return!u&&!Eo(e,o,r)||!a||i&&!u&&o>=Ue&&r>0}s(fr,"shouldSuggestRegularManaStartsFromScalars");function Wa(e,n,t){return fr(mt(e),e.monsMovesCount,e.manaMovesCount,e.actionsUsedCount,So(e),n,t)}s(Wa,"shouldSuggestRegularManaStarts");function pr(e,n,t,o){return e?!kn(n):Dn(e,t)?!kn(n)&&!o:!0}s(pr,"shouldAdvanceTurnForCounts");function Yn(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}}s(Yn,"regularSquareForMovement");function br(e,n){let t=e.get(n),o=e.squareAt(n);return t?.kind==="mon"?Yn(o)&&t.mon.kind===I.Drainer:t!==void 0?!1:Yn(o)}s(br,"regularManaMoveDestinationAllowed");function ac(e){for(let n of e.board.allFreeRegularManaLocations(e.activeColor))for(let t of Qe(n))if(br(e.board,t))return!0;return!1}s(ac,"hasMovableFreeRegularMana");function Va(e){let n=mt(e),o=!(!n&&Dn(n,e.manaMovesCount)&&!kn(e.monsMovesCount))||ac(e);return pr(n,e.monsMovesCount,e.manaMovesCount,o)}s(Va,"shouldAdvanceTurn");var ft=0,vo=1,Sr=2,rn=3,Ln=4,Er=5,xe=127,Ge=0,dn=1,Nn=2,Pr=3,wo=-2,za=16,ic=Math.ceil(121*Uint16Array.BYTES_PER_ELEMENT/Int32Array.BYTES_PER_ELEMENT),yr=ic,kr=yr+_t,gr=kr+ae,Mr=gr+za,sc=Mr+ae;function Re(e,n,t,o,r){return e|n<<3|t<<10|o<<17|r<<24}s(Re,"encodeMove");function pt(e){return e&7}s(pt,"moveType");function Ha(e,n){if(e===n)return!0;if(e?.length!==n.length)return!1;for(let t=0;t<n.length;t+=1)if(H(e,t)!==H(n,t))return!1;return!0}s(Ha,"sameSquares");function $e(e){return e>>3&127}s($e,"moveFrom");function _e(e){return e>>10&127}s(_e,"moveTo");function bt(e){return e>>17&127}s(bt,"moveAux");function Kt(e){return e>>24&3}s(Kt,"moveModifier");function hr(e,n,t){if(e.length!==n)throw new RangeError(`fast position ${t} length must be ${n}`)}s(hr,"validateArrayLength");var Cr=class{static{s(this,"MutableFastPosition")}storage=new Int32Array(sc);cells=new Uint16Array(this.storage.buffer,0,121);squares=new Uint8Array(121);monLocations=this.storage.subarray(yr,yr+_t).fill(-1);freeMana=this.storage.subarray(kr,kr+ae);manaIndices=this.storage.subarray(gr,gr+za);manaCount=0;whiteScore=0;blackScore=0;active=0;monsMoves=0;manaMoves=0;actionsUsed=0;potions=this.storage.subarray(Mr,Mr+ae);firstTurn=!1;hashLo=0;hashHi=0;copyFrom(n){let t=n;this.storage.set(t.storage),this.squares=t.squares,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.firstTurn=t.firstTurn,this.hashLo=t.hashLo,this.hashHi=t.hashHi}reset(n){hr(n.cells,121,"cells"),hr(n.squares,121,"squares"),hr(n.potions,ae,"potions");let t;try{t=new Uint8Array(n.squares)}catch(d){Oe(d)}let o=0;for(let d=0;d<121;d+=1){let f=G(n.cells,d);if(!(f===0||j(f)!==ne)&&(o+=1,o>this.manaIndices.length))throw new RangeError("fast mana index capacity exceeded")}let r=n.whiteScore,a=n.blackScore,i=n.active,u=n.monsMoves,c=n.manaMoves,l=n.actionsUsed,A=n.firstTurn;this.cells.set(n.cells),this.squares=t,this.whiteScore=r,this.blackScore=a,this.active=i,this.monsMoves=u,this.manaMoves=c,this.actionsUsed=l,this.potions.set(n.potions),this.firstTurn=A,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^=Co(o,r);let a=j(r);if(a===X)this.monLocations[ve(le(r),fe(r))]=o;else if(a===ne){let i=D(r);(i===1||i===2)&&(this.freeMana[i-1]=m(this.freeMana,i-1)+1),this.manaIndices[this.manaCount]=o,this.manaCount+=1}}this.hashLo=n,this.hashHi=t}},To=Cr;function Wt(e,n,t){let o=m(e.monLocations,ve(Bt,n));if(o<0)return!1;let r=G(e.cells,o);return j(r)===X&&le(r)===Bt&&fe(r)===n&&de(r)===0&&Se(o,t)===1}s(Wt,"awakeAngelGuards");function cc(e,n){let t=e.manaCount;for(let o=0;o<t;o+=1)if(m(e.manaIndices,o)===n){for(let r=o+1;r<t;r+=1)e.manaIndices[r-1]=m(e.manaIndices,r);e.manaIndices[t-1]=0,e.manaCount=t-1;return}throw new RangeError(`missing fast mana index: ${n}`)}s(cc,"removeManaIndex");function uc(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&&m(e.manaIndices,o-1)>n;)e.manaIndices[o]=m(e.manaIndices,o-1),o-=1;e.manaIndices[o]=n,e.manaCount=t+1}s(uc,"insertManaIndex");function z(e,n,t){let o=G(e.cells,n);if(o!==t){if(o!==0){e.hashLo^=Mo(n,o),e.hashHi^=Co(n,o);let r=j(o);if(r===X){let a=ve(le(o),fe(o));m(e.monLocations,a)===n&&(e.monLocations[a]=-1)}else if(r===ne){let a=D(o);(a===1||a===2)&&(e.freeMana[a-1]=m(e.freeMana,a-1)-1),cc(e,n)}}if(e.cells[n]=t,t!==0){e.hashLo^=Mo(n,t),e.hashHi^=Co(n,t);let r=j(t);if(r===X)e.monLocations[ve(le(t),fe(t))]=n;else if(r===ne){let a=D(t);(a===1||a===2)&&(e.freeMana[a-1]=m(e.freeMana,a-1)+1),uc(e,n)}}}}s(z,"setCell");function Po(e){return dt(le(e),fe(e),de(e),0,0)}s(Po,"plainMonCell");function Xn(e,n,t){return dt(le(e),fe(e),de(e),n,t)}s(Xn,"carryingMonCell");function Qa(e,n){e.potions[n]=m(e.potions,n)+1}s(Qa,"addPotion");function Ir(e,n,t,o){if(D(n)===0&&N(n)===0&&o===dn){z(e,t,Xn(n,0,Pe));return}z(e,t,n),Qa(e,fe(n))}s(Ir,"collectConsumableAt");function lc(e,n){e.active===0?e.whiteScore+=n:e.blackScore+=n}s(lc,"addScore");function vr(e){if(e.actionsUsed<Ue){e.actionsUsed+=1;return}e.potions[e.active]=m(e.potions,e.active)-1}s(vr,"consumeAction");function qa(e,n){let t=le(n),o=fe(n),r=m(po,ve(t,o));z(e,r,dt(t,o,2,0,0))}s(qa,"faintMonAt");function dc(e){let n=G(e.cells,ut);j(n)===X&&D(n)===0&&N(n)===0?z(e,ut,Xn(n,ge,0)):z(e,ut,Tn(ge))}s(dc,"supermanaBackToBase");function Ac(e,n,t){let o=D(n);if(o===ge?dc(e):o!==0&&z(e,t,Tn(o)),N(n)===Pe){let r=m(po,ve(le(n),fe(n)));t!==r&&z(e,t,0)}}s(Ac,"releaseFaintedCarry");function wr(e,n,t){qa(e,n),Ac(e,n,t)}s(wr,"faintTargetAndReleaseCarry");function Tr(e,n,t){lc(e,je(t,e.active));let o=G(e.cells,n);j(o)===X?z(e,n,Po(o)):z(e,n,0)}s(Tr,"scoreCarriedManaAt");function mc(e,n){let t=$e(n),o=_e(n),r=G(e.cells,t),a=G(e.cells,o),i=D(r);if(e.monsMoves+=1,z(e,t,0),z(e,o,r),a!==0){let u=j(a);u===ne?(i!==0&&z(e,t,Tn(i)),z(e,o,Xn(r,D(a),0))):u===ue&&N(a)===pe&&Ir(e,r,o,Kt(n))}i!==0&&un(H(e.squares,o))&&Tr(e,o,i)}s(mc,"applyMonMove");function fc(e,n){let t=$e(n),o=_e(n),r=D(G(e.cells,t)),a=G(e.cells,o);e.manaMoves+=1,z(e,t,0),z(e,o,Tn(r)),a!==0&&z(e,o,Xn(a,r,0)),un(H(e.squares,o))&&Tr(e,o,r)}s(fc,"applyManaMove");function pc(e,n){let t=_e(n),o=G(e.cells,t);vr(e),z(e,t,0),wr(e,o,t)}s(pc,"applyMysticAction");function bc(e,n){let t=$e(n),o=_e(n),r=Kt(n),a=r===Pr?xe:bt(n),i=G(e.cells,t),u=G(e.cells,o),c=m(po,ve(le(i),fe(i))),l=N(u)!==Pe||a===xe||a===c;return z(e,t,0),a===xe?z(e,o,Po(i)):z(e,o,0),vr(e),u!==0&&(wr(e,u,o),N(u)===Pe&&qa(e,i)),a!==xe&&(r===dn?z(e,a,Xn(i,0,Pe)):(z(e,a,Po(i)),r===Nn&&Qa(e,fe(i)))),l}s(bc,"applyDemonAction");function hc(e,n){let t=$e(n),o=_e(n),r=G(e.cells,t),a=G(e.cells,o);z(e,o,0),z(e,t,Po(r)),wr(e,a,o)}s(hc,"applyBombAttack");function yc(e,n){let t=_e(n),o=bt(n),r=Kt(n),a=G(e.cells,t),i=G(e.cells,o),u=D(a);if(vr(e),z(e,t,0),z(e,o,a),i!==0){let c=j(a);if(c===X){let l=j(i);l===ne?(u!==0&&z(e,t,Tn(u)),z(e,o,Xn(a,D(i),0))):l===ue&&Ir(e,a,o,r)}else c===ne?z(e,o,Xn(i,u,0)):c===ue&&Ir(e,i,o,r)}u!==0&&un(H(e.squares,o))&&Tr(e,o,u)}s(yc,"applySpiritAction");function Or(e){let n=mr(e.whiteScore,e.blackScore);return n===void 0?-1:nn(n)}s(Or,"positionWinner");function Oo(e){return Eo(e.firstTurn,e.actionsUsed,m(e.potions,e.active))}s(Oo,"canUseAction");function $a(e,n){return m(e.freeMana,e.active)===0?!1:fr(e.firstTurn,e.monsMoves,e.manaMoves,e.actionsUsed,m(e.potions,e.active),n!==0,!0)}s($a,"manaStartsAllowed");function ht(e,n){if(!At(H(e.squares,n)))return!1;let t=G(e.cells,n);return t===0||j(t)===X&&le(t)===Ce&&D(t)===0&&N(t)===0}s(ht,"manaMoveAllowed");function kc(e){let n=e.active+1;for(let t=0;t<e.manaCount;t+=1){let o=m(e.manaIndices,t),r=G(e.cells,o);if(j(r)!==ne||D(r)!==n)continue;let a=m(Ae.starts,o),i=m(Ae.counts,o);for(let u=0;u<i;u+=1){let c=m(Ae.list,a+u);if(ht(e,c))return!0}}return!1}s(kc,"hasMovableFreeRegularMana");function gc(e){let t=!(!e.firstTurn&&Dn(e.firstTurn,e.manaMoves)&&!kn(e.monsMoves))||m(e.freeMana,e.active)!==0&&kc(e);return pr(e.firstTurn,e.monsMoves,e.manaMoves,t)}s(gc,"shouldAdvanceTurn");function Mc(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<yn;t+=1){let o=m(e.monLocations,ve(t,n));if(o<0)continue;let r=G(e.cells,o),a=de(r);a===0||D(r)!==0||N(r)!==0||z(e,o,dt(le(r),fe(r),a-1,D(r),N(r)))}}s(Mc,"advanceTurn");function Ya(e,n){let t=e,o=pt(n),r=!0;switch(o){case ft:mc(t,n);break;case vo:fc(t,n);break;case Sr:pc(t,n);break;case rn:r=bc(t,n);break;case Ln:yc(t,n);break;case Er:hc(t,n);break;default:throw new RangeError(`unsupported fast move type: ${o}`)}let a=Or(t);return a===-1&&gc(t)&&Mc(t),r?a:wo}s(Ya,"applyFastMove");function Xa(e){switch(e){case O.Bomb:return Pe;case O.Potion:return Ra;case O.BombOrPotion:return pe}}s(Xa,"consumableCode");function Za(e){return e.kind==="supermana"?ge:nn(e.color)===0?Dt:Lt}s(Za,"manaCode");var Ja=2147483647;function ei(e,n,t){if(!Number.isSafeInteger(t)||t<0||n.whitePotionsCount>Ja-t||n.blackPotionsCount>Ja-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(vn(a)!==void 0&&(r+=1,r>e.manaIndices.length))return!1;let i=Q(a);if(i===void 0)continue;let u=ve(tn[i.kind],nn(i.color));if(o[u]!==0)return!1;o[u]=1}try{Cc(e,n)}catch(a){if(Ot(a))return!1;throw a}return!0}s(ei,"tryLoadPosition");function Cc(e,n){let t;try{t=new Uint16Array(121)}catch(r){Oe(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]=mo(a.mon,0,0);break;case"mana":t[r]=Tn(Za(a.mana));break;case"mon-with-mana":t[r]=mo(a.mon,Za(a.mana),0);break;case"mon-with-consumable":t[r]=mo(a.mon,0,Xa(a.consumable));break;case"consumable":t[r]=Da(Xa(a.consumable));break}}e.reset({cells:t,squares:fo(n.variant()),whiteScore:n.whiteScore,blackScore:n.blackScore,active:nn(n.activeColor),monsMoves:n.monsMovesCount,manaMoves:n.manaMovesCount,actionsUsed:n.actionsUsedCount,potions:[n.whitePotionsCount,n.blackPotionsCount],firstTurn:n.isFirstTurn()})}s(Cc,"loadPosition");function xo(e){return{kind:"location",location:ct(e)}}s(xo,"locationInput");function Ic(e){return{kind:"modifier",modifier:e===dn?J.SelectBomb:J.SelectPotion}}s(Ic,"modifierInput");function ni(e){let n=pt(e),t=[xo($e(e)),xo(_e(e))];n===Ln?t.push(xo(bt(e))):n===rn&&bt(e)!==xe&&t.push(xo(bt(e)));let o=Kt(e);return(o===dn||o===Nn)&&(n===ft||n===rn||n===Ln)&&t.push(Ic(o)),t}s(ni,"moveToInputs");var Ro=1e6,Sc=-2147483648,Ec=2147483647,Pc=["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 Vt(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 Pc){let r=n[o];if(typeof r!="number")throw new TypeError(`weights.${o} must be a number`);if(!Number.isSafeInteger(r)||r<-Ro||r>Ro)throw new RangeError(`weights.${o} must be a safe integer from -${Ro} through ${Ro}`);t[o]=r}return Object.freeze(t)}s(Vt,"normalizeEvalWeights");var Mn=Vt({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}),zt=Vt({...Mn,threatMoverScaleSpare:35}),Do=Vt(Mn);var si=.5,vc="AAJAAOwB6P98ANT/PAAoAAwA7AAAAtj/wP8AAmz+AAL8/gACAAJ8AOj/EADgAQACAALkAKQBAAIAAqwAMAF4AAwAAAJU/gD+4AAAAgAC+P+gAbT/ZAAIAAACAAIA/gACAAJ4AQD+AAKg/tAABAAAAgD+AP4sAcz+FACgAAD+mP6M/1D/AAIA/jT+PAAAAgACPP+U/2wAoP9sAAD+AP4A/oQAfP7s/wABpP9o/sj/HAC4/gACAAIAAgD+AP4E/gT/9P/U//D/gP4M/wD+AP4A/gD+7P8UADQAAADU/wD+AP4A/gACAP68/wQABAAMAPj/aAD0/yAAAAAAAAQABAAAAPj/wP9U/rD+fP8AAoz/5P9MACgA+P+s/1z/EABUAYwAAALE/oT/NAAoABAAhAAI/zAANABEAKAA+AAQANT/hAAY/6T/WAAwAEQAkAAAAlwAFAEA/gACAP7I/5z/AP/U/wD+0P8E/xz+AP4AAgD+cP48/wAABAEkAJAAAAIAAgD+AAIA/gACLAGAAbT/MAAAAowBAAIA/gACAP4AApwBBP/g/2AAAAIAAgACAP4AAgD+AAIA/ij/AP4A/gD+AP4A/gD+AAIA/owBAP7I/6z+AP4A/igB3P+U/gACdP90AAACKP8A/mz+3P8IAAAAAAAAAAAAAAAAAPD/VP+4/8D/HAAEAAAABAAIAPj/AADg/7j/3P4EAKwAFAD0/xwABACw/wAACAD4//z/bAH8/9AAIAD4/wgA5P9oABAA/P+4AQAC+P4AAlgB1P+0/0z/zAFgAAgAAAIA/lD/AAIAAnwBJP6IALAAMAA4AIgAAP4A/gD+AAIA/hz/RACIARAABADk/xj/wP4AAgACAAIAAgACSAE0AOj//P+Y/wD+AP4A/gACAAIAArAA5P/o/7j//P4A/gD+AP4A/gD+AP4U/oT/4P8A/vz/bP5Q/pwBsP6E/8T/fAA8ABD/xAAMAAAAGAD4//z/CAAAAPz/vP9U/xAAGAAQACQBmP/c/1AA9P8AAPD/AADAAAACiAAAAvz/aP8A/+j+9ABgAbQAQAAAAgACtAEEAGT/KP4A/sj/AAIAAqT/AP4AAqAB1AD8/gD+TP8A/oz/pAEA/hz+AP4A/gD+CP8A/gD+AP4AAgACVP8A/jz/8P4AAgACAAIAAgD+AAIAAvj/XP/k/gD+AAIAAgACAALY/tj+WAH8//D/EACI/zD+AAIA/gD+AP4A/uD/8P/E/7T/2AAAAvj/AP4A/gD+RP7k/oD/5P90/wQAOACI/gD+AP4A/nj/AP4Q/nD/9P8AAPz/FAD0/zgAZAHY/wD+wP+0//z/1P8UAMQAoP98AcT/iP8c//j/4P+EAKD+AALA/pD/AAKE/9ABYADQ/xQAAP7E/wACAP9Q/2gBAP4AAgAC1P/AANT/9P6Q/gD+AP4AAgACAAIAAgACoABw/6j+KP5k/wD+AP4A/gD+AAIAAkwA1AEU/wACjAEAAkD/AP4o/wACYAAAAgACPAAAAgACAAIAAgD+AAKA//z/IACoAfQBAAIAAgD+AP4AAoj+AP7w/wgAvADc/mD/VAAA/gD+eP8AAiT+VP/s/xAA5P/s/ywAxP4AAgD+AP4c/wACZwCHAeD/YQDe/zgAHgAPALkAAAJ4/83/AAJR/qQBM//+AX0BPQC9//f/pwEAAaQBjQAlATIBiAGlAGQBdwAKABkBP/4u/i8AAAIAAp7/SgGx/0cA4P++AQACwP4AAgACjgEA/gACyv68APz/AAIA/gD+YQHT/hMAEgAA/nL+Qf81/18BAP8n/rz/AAIAAhn///8oAKH/vgC7/gD+Yf7FANX+gf9sANn/zP7Y/yIAHv8AAgACAAEA/gD+dv5L/wwAFQDt/2D/yf8A/gD+AP4A/kwAjwBkABoAvf8A/2P+AP4AAnb+uf8LAA4AGQA+AM4Ad/+Y/87/+/8GAAUA///0/5//P/6E/h3/PwGa/9D/VgA7AO//hf9F/4z/+gBDAH0Bk/51//3/AQD//0UA3P7x/0EAvf+lAGgAw/+//4MAZP99/z4ANABPAGYAAAIDAMQAe/4AAgD+r/9C/wH/8/8r/pL/d/8V/+7+lQGU/lT/Uf/0/0MANADsAAAC3gEA/wACLP4AAmEB2AAHAEMAAAITAQ8Blf4AAgP+7wG1Aev+GQB6AAACAAIAAgD/AAIA/gACAP/e/gD+AP4A/gD/AP8A/gABAP6pAQD/Vv+B/qL+AP8LAQoA6f4AAp7/cwAAAt7/AP/I/uD/DAAAAAAAAAAAAAAA///n/2n/wv+T/zoABgADAAcACQD4/wAA0v+x/xr/CADSABUA+f8pAAQAoP/3/wIA8f8GAGAB9f+jADMAEgAKAOP/BgAEAPL/xwH4Ac7+rAE1ASsAw/84/9EBUgANAAACAP46/wACAAJLAfP+5AAeABoAiwBnAAD+kP4h/kcBCf5D//v/pQEQAB0A1f/S/ij/AAIAAgACAAEAAnYBLgDt//D/Mv8A/hb+H/4AAgACAALWAAoA2f/h/73+AP4A/gD+AP62/gD+F/7P/+X/uf5yAFf+if61AbX+rf/O/84AkQAU/2cA3f8BABcA9f/7/wUAAAD3/4b/P//+/w4AMQAZAXr/w/8xAPr/BwDX/ykA5gAAAmAAAALI/w7/J/8c//sAhAFxADoAAAKTAccBo/8L/zv+I/5TAAACAAJK/wD+AAK4ACEAvf4A/vn/OP5b/3UBH/5B/gD+AP4A/jz/AP4A/sP+AAIAAnL/E/7t/mP/UQEAAgAC9wGE/gACAAL7/0//rP4A/gACAAKEAQABIv+i/4IB/v/5/z0AxP8k/wACAP4A/gD/of5oAO//yP8CACIBAAJ6AAD+AP6Y/jP+tP5y/+n/8P8gAD0Awf4A/hj+PP5a/wD+DP59//T//v8BAA4A8v81AGoBCgAO/pP/v//v/8L/OwCGAG7/LwFT/1z/4v7j/2j/8f+g/loB3f4s/zoBI/+kAUUA0//C/wv+f/8AAjz/S/9uASX+AAIAApX/EABXALf+vv4A/gD+AAIAAr4BAAJrAdoAjv8g/yP+N/8A/gD+AP4A/gACsQG5AN8Bz/8AArMAAAIy/1b+3v+FAVQAAAIAAkIA7gHHAQACAAIA/vgBIP/7/x8AvgG/AUABAAIA/lT+AAJm/gD+8v8KAPEAv/4IAIAAAP4A/xr/AAEb/mj/7/8RAOH//f8oAEX/AAIA/gD+1f8AAo4AIgHY/0YA6P80ABQAEgCGAAACGP/a/wACNv5IAWr//AH6AP7/kv/e/24BAABIATYApgBkABABngCYAXYACAAyACr+XP5+/wACAAJE//QArv8qALj/fAEAAoD/AAIAAqQBAP4AAvT+qAD0/wACAP4A/pYB2v4SAIT/AP5M/vb+Gv++AAAAGv48/wACAAL2/moA5P+i/xABdv8A/sL+BgEu/xb/2P8OADD/6P8oAIT/AAIAAgAAAP4A/uj+kv8kAFYA6v9AAIYAAP4A/gD+AP6sAAoBlAA0AKb/AADG/gD+AALs/rb/EgAYACYAhAA0Afr+EP+c//b/CAAGAP7/8P9+/yr+WP6+/n4AqP+8/2AATgDm/17/Lv8I/6AA+v/6AGL+Zv/G/9r/7v8GALD+sv9OADb/qgDY/3b/qv+CALD/Vv8kADgAWgA8AAACqv90APb+AAIA/pb/6P4C/xIAVv5U/+r/DgDc/yoBKP84AGb/6P+C/0QASAEAArwBAAAAAlj+AAKWATAAWgBWAAACmgAeACr/AAIG/t4BzgHS/lIAlAAAAgACAAIAAAACAP4AAgAAlP4A/gD+AP4AAAAAAP4AAAD+xgEAAOT+Vv5E/wAA7gA4AD7/AALI/3IAAAKUAAAAJP/k/xAAAAAAAAAAAAAAAP7/3v9+/8z/Zv9YAAgABgAKAAoA+P8AAMT/qv9Y/wwA+AAWAP7/NgAEAJD/7v/8/+r/EABUAe7/dgBGACwADADi/6T/+P/o/9YB8AGk/lgBEgGCANL/JP/WAUQAEgAAAgD+JP8AAgACGgHC/0ABjP8EAN4ARgAA/iD/Qv6OABL+av+y/8IBEAA2AMb/jP6Q/wACAAIAAgAAAAKkASgA8v/k/8z+AP4s/j7+AAIAAgAC/AAwAMr/CgB+/gD+AP4A/gD+bP8A/hr+GgDq/3L/6ABC/sL+zgG6/tb/2P8gAeYAGP8KAK7/AgAWAPL/+v8CAAAA8v9Q/yr/7P8EAFIADgFc/6r/EgAAAA4Avv9SAAwBAAI4AAAClP+0/k7/UP8CAagBLgA0AAACJgHaAUL/sv5O/kb+3gAAAgAC8P4A/gAC0P9u/37+AP6mAHD+Kv9GAT7+Zv4A/gD+AP5w/wD+AP6G/wACAAKQ/yb+nv7W/6IAAAIAAu4BCP8AAgAC/v9C/3T+AP4AAgACCAEAAGz/bACsAQAAAgBqAAAAGAAAAgD+AP4AAEL/8ADu/8z/UABsAQAC/AAA/gD+MP8i/oT+ZP/u/2wAPABCAPr+AP4w/nj+PP8A/gj+iv/0//z/BgAIAPD/MgBwATwAHP5m/8r/4v+w/2IASAA8/+IA4v4w/6j+zv/w/l7/oP60APr+yP50AML+eAEqANb/cP8W/jr/AAJ4/0b/dAFK/gACAAJW/2D/2gB6/uz+AP4A/gACAAJ8AQAC1gAUAaz/mP8e/gr/AP4A/gD+AP4AAmIBJgHqAYoAAALa/wACJP+s/pQACgFIAAACAAJIANwBjgEAAgACAP7wAcD++v8eANQBigGAAAACAP6o/gACRP4A/vT/DAAmAaL+sACsAAD+AAC8/gAAEv58//L/EgDe/w4AJADG/wACAP4A/o4AAAK1AL0A0P8rAPL/MAAKABUAUwAAArj+5/8AAhv+7ACh//oBdwC//2f/xf81AQD/7ADf/ycAlv+YAJcAzAF1AAYAS/8V/or+zf4AAgAC6v6eAKv/DQCQ/zoBAAJAAAACAAK6AQD+AAIe/5QA7P8AAgD+AP7LAeH+EQD2/gD+Jv6r/v/+HQAAAQ3+vP4AAgAC0/7VAKD/o/9iATEAAP4j/0cBh/+r/kT/QwCU//j/LgDq/wACAAIA/wD+AP5a/9n/PACXAOf/IAFDAQD+AP4A/gD+DAGFAcQATgCP/wABKf8A/gACYv+z/xkAIgAzAMoAmgF9/oj+av/x/woABwD9/+z/Xf8V/iz+X/69/7b/qP9qAGEA3f83/xf/hP5GALH/dwAx/lf/j/+z/93/x/+E/nP/WwCv/q8ASP8p/5X/gQD8/y//CgA8AGUAEgAAAlH/JABx/wACAP59/47+A/8xAIH+Fv9dAAcBygC/ALz/HAF7/9z/wf5UAKQBAAKaAQABAAKE/gACywGI/60AaQAAAiEALf+//wACCf7NAecBuf6LAK4AAAIAAgACAAEAAgD+AAIAAUr+AP4A/gD+AAEAAQD+AP8A/uMBAAFy/iv+5v8AAdEAZgCT/wAC8v9xAAACSgEAAYD/6P8UAAAAAAAAAAAAAAD9/9X/k//W/zn/dgAKAAkADQALAPj/AAC2/6P/lv8QAB4BFwADAEMABACA/+X/9v/j/xoASAHn/0kAWQBGAA4A4f9C/+z/3v/lAegBev4EAe8A2QDh/xD/2wE2ABcAAAIA/g7/AAIAAukAkQCcAfr+7v8xASUAAP6w/2P+1f8b/pH/af/fARAATwC3/0b++P8AAgACAAIA/wAC0gEiAPf/2P9m/gD+Qv5d/gACAAIAAiIBVgC7/zMAP/4A/gD+AP4A/iIAAP4d/mUA7/8rAF4BLf77/ucBv/7//+L/cgE7ARz/rf9//wMAFQDv//n///8AAO3/Gv8V/9r/+v9zAAMBPv+R//P/BgAVAKX/ewAyAQACEAAAAmD/Wv51/4T/CQHMAev/LgAAArkA7QHh/ln+Yf5p/mkBAAIAApb+AP4AAuj+u/4//gD+UwGo/vn+FwFd/ov+AP4A/gD+pP8A/gD+SQAAAgACrv85/k/+SQDz/wACAALlAYz/AAIAAgEANf88/gD+AAIAAowAAP+2/zYB1gECAAsAlwA8AAwBAAIA/gD+AAHj/3gB7f/Q/54AtgEAAn4BAP4A/sj/Ef5U/lb/8//oAFgARwAz/wD+SP60/h7/AP4E/pf/9P/6/wsAAgDu/y8AdgFuACr+Of/V/9X/nv+JAAoACv+VAHH+BP9u/rn/eP7L/qD+DgAX/2T+rv9h/kwBDwDZ/x7/If71/gACtP9B/3oBb/4AAgACF/+w/l0BPf4a/wD+AP4AAgACOgEAAkEATgHK/xAAGf7d/gD+AP4A/gD+AAITAZMB9QFFAQACAf8AAhb/Av9KAY8APAAAAgACTgDKAVUBAAIAAgD+6AFg/vn/HQDqAVUBwP8AAgD+/P4AAiL+AP72/w4AWwGF/lgB2AAA/gABXv4A/wn+kP/1/xMA2/8fACAARwAAAgD+AP5HAQAC3ABYAMj/EAD8/ywAAAAYACAAAAJY/vT/AAIA/pAA2P/4AfT/gP88/6z//AAA/pAAiP+o/8j+IACQAAACdAAEAGT+AP64/hz+AAIAApD+SACo//D/aP/4AAACAAEAAgAC0AEA/gACSP+AAOT/AAIA/gD+AALo/hAAaP4A/gD+YP7k/nz/AAIA/jz+AAIAArD+QAFc/6T/tAHsAAD+hP+IAeD/QP6w/ngA+P8IADQAUAAAAgACAP4A/gD+zP8gAFQA2ADk/wACAAIA/gD+AP4A/mwBAAL0AGgAeP8AAoz/AP4AAtj/sP8gACwAQAAQAQACAP4A/jj/7P8MAAgA/P/o/zz/AP4A/gD+/P7E/5T/dAB0ANT/EP8A/wD+7P9o//T/AP5I/1j/jP/M/4j/WP40/2gAKP60ALj+3P6A/4AASAAI//D/QABwAOj/AAL4/tT/7P8AAgD+ZP80/gT/UACs/tj+0AAAArgBVABQAAACkP/Q/wD+ZAAAAgACeAEAAgACsP4AAgAC4P4AAXwAAAKo/zz+VAAAAgz+vAEAAqD+xADIAAACAAIAAgACAAIA/gACAAIA/gD+AP4A/gACAAIA/gD+AP4AAgACAP4A/ogAAAK0AJQA6P8AAhwAcAAAAgACAALc/+z/GAAAAAAAAAAAAAAA/P/M/6j/4P8M/5QADAAMABAADAD4/wAAqP+c/9T/FABEARgACABQAAQAcP/c//D/3P8kADwB4P8cAGwAYAAQAOD/4P7g/9T/9AHgAVD+sADMADAB8P/8/uABKAAcAAACAP74/gACAAK4AGAB+AFo/tj/hAEEAAD+QACE/hz/JP64/yD//AEQAGgAqP8A/mAAAAIAAgACAP4AAgACHAD8/8z/AP4A/lj+fP4AAgACAAJIAXwArP9cAAD+AP4A/gD+AP7YAAD+IP6wAPT/5ADUARj+NP8AAsT+KADs/8QBkAEg/1D/UP8EABQA7P/4//z/AADo/+T+AP/I//D/lAD4ACD/eP/U/wwAHACM/6QAWAEAAuj/AAIs/wD+nP+4/xAB8AGo/ygAAAJMAAACgP4A/nT+jP70AQACAAI8/gD+AAIA/gj+AP4A/gAC4P7I/ugAfP6w/gD+AP4A/tj/AP4A/gwBAAIAAsz/TP4A/rwARP8AAgAC3AEQAAACAAIEACj/BP4A/gACAAIQAAD+AAAAAgACBAAUAMQAeAAAAgACAP4A/gAChAAAAuz/1P/sAAACAAIAAgD+AP5gAAD+JP5I//j/ZAF0AEwAbP8A/mD+8P4A/wD+AP6k//T/+P8QAPz/7P8sAHwBoAA4/gz/4P/I/4z/sADM/9j+SAAA/tj+NP6k/wD+OP6g/mj/NP8A/uj+AP4gAfT/3P/M/iz+sP4AAvD/PP+AAZT+AAIAAtj+AP7gAQD+SP8A/gD+AAIAAvgAAAKs/4gB6P+IABT+sP4A/gD+AP4A/gACxAAAAgACAAIAAij+AAII/1j/AAIUADAAAAIAAlQAuAEcAQACAAIA/uABAP74/xwAAAIgAQD/AAIA/lD/AAIA/gD++P8QAJABaP4AAgQBAP4AAgD+AP4A/qT/+P8UANj/MAAcAMgAAAIA/gD+AAI=",xr;function wc(){if(xr!==void 0)return xr;try{let e=new Int16Array(3025),n="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",t=0,o=0,r=0,a=0;for(let i of vc){if(i==="=")break;let u=n.indexOf(i);if(o=o<<6|u,t+=6,t<8)continue;t-=8;let c=o>>t&255;if(o&=(1<<t)-1,(r&1)===0)a=c;else{let l=a|c<<8;e[r>>1]=l>=32768?l-65536:l}r+=1}return xr=e,e}catch(e){Oe(e)}}s(wc,"memoizedLearnedProPhaseNumerators");var be=99,we=Math.max(be+1,11),ti=3,Ye=ke+2,_o=ie+1,Rr=0,ci=1,_r=2,Bn=3,ui=3,li=_o,Cn=6,oi=Cn*2+1,Ht=6,Dr=2,ri=12;function gn(e){let n=Fn(we);for(let t=0;t<we;t+=1)n[t]=Math.trunc(e/(t+1));return n}s(gn,"distanceTable");function Tc(e){let n=Fn(we),t=e.manaToNearestPool;for(let o=0;o<we;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}s(Tc,"manaStepQueueTable");function Oc(e){let n=Fn(Ye*Ye),t=new Set,o=s((r,a,i)=>{if(r===a)throw new RangeError("score shape cells must be off the diagonal");let u=r*Ye+a,c=a*Ye+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]=i,n[c]=-i},"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<Ye;r+=1)for(let a=0;a<Ye;a+=1)if(e.scoreUnit+m(n,(r+1)*Ye+a)-m(n,r*Ye+a)<0)throw new RangeError("score shape corrections must keep the score monotone");return n}s(Oc,"scoreShapeTable");function di(e){let n=Fn(we);for(let t=0;t<we;t+=1){let o=1+Math.ceil(t/ie);n[t]=o<=1?e.drainerTripTurn1:o===2?e.drainerTripTurn2:o===3?e.drainerTripTurn3:e.drainerTripTurn4}return n}s(di,"drainerTripTable");function xc(e){let n=di(e);for(let t=0;t<we;t+=1)n[t]=fi(m(n,t),e.tripTwoPointScale,"two-point trip");return n}s(xc,"twoPointTripTable");function Rc(e){let n=Fn(oi);for(let t=0;t<oi;t+=1)n[t]=(t-Cn)*e;return n}s(Rc,"raceTable");function _c(e){let n=Fn(we);for(let t=0;t<we;t+=1){let o=t>ri?ri:t;n[t]=o*e}return n}s(_c,"tripStepTable");function Dc(e){let n=Fn(ti*we);for(let t=0;t<ti;t+=1){let o=t*we;for(let r=0;r<we;r+=1)n[o+r]=Math.trunc(t*e/(r+1))}return n}s(Dc,"manaPointsAttractionTable");function Ai(e,n){return n===Rr?100:n===_r?e.threatMoverScaleSpare:e.threatMoverScaleFew}s(Ai,"moverScale");function mi(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)}s(mi,"scaledSafeInteger");function fi(e,n,t){let o=mi(e,n,t);if(o<Sc||o>Ec)throw new RangeError(`${t} derived value must fit a signed 32-bit integer`);return o}s(fi,"scaledInt32");function Lc(e){let n=Fn(2*Bn);for(let t=0;t<2;t+=1){let o=t===1?e.carrierThreatFactor:1;for(let r=0;r<Bn;r+=1)n[t*Bn+r]=fi(e.drainerThreatImmediate*o,Ai(e,r),"immediate threat")}return n}s(Lc,"threatImmediateTable");function Nc(e){let n=Bc(2*Bn*_o);for(let t=0;t<2;t+=1){let o=t===1?e.carrierThreatFactor:1;for(let r=0;r<Bn;r+=1){let a=Ai(e,r),i=(t*Bn+r)*_o;for(let u=0;u<_o;u+=1)n[i+u]=mi(Math.trunc(e.drainerThreatWalk*o*(ie+1-u)/ie),a,"walking threat")}}return n}s(Nc,"threatWalkTable");function Fn(e){try{return new Int32Array(e)}catch(n){Oe(n)}}s(Fn,"createInt32Table");function Bc(e){try{return new Float64Array(e)}catch(n){Oe(n)}}s(Bc,"createFloat64Table");function Fc(e,n){let t=Cn*Math.abs(e.raceHalfTurn);if(t===0)return;let o=ke-Dr;for(let r=0;r<o;r+=1){let a=e.scoreUnit+m(n,o*Ye+r)-m(n,(o-1)*Ye+r);if(t>a)throw new RangeError("race correction must not outweigh the point that opens the endgame band")}}s(Fc,"assertRaceStaysMonotone");function pi(e){let n=Oc(e);return Fc(e,n),{weights:e,learnedPro:e===Do?wc():void 0,manaPointsAttraction:Dc(e.manaPointsAttraction),manaToOwnerPool:gn(e.manaToOwnerPool),manaToNearestPool:Tc(e),scoreShape:n,drainerTrip:di(e),drainerTripTwoPoint:xc(e),race:Rc(e.raceHalfTurn),tripStep:_c(e.tripGradient),carrierCloseToPool:gn(e.carrierCloseToPool),drainerCloseToMana:gn(e.drainerCloseToMana),drainerCloseToOwnPool:gn(e.drainerCloseToOwnPool),drainerCloseToSupermana:gn(e.drainerCloseToSupermana),angelCloseToDrainer:gn(e.angelCloseToDrainer),spiritCloseToEnemy:gn(e.spiritCloseToEnemy),monCloseToCenter:gn(e.monCloseToCenter),attackerCloseToEnemyDrainer:gn(e.attackerCloseToEnemyDrainer),threatImmediate:Lc(e),threatWalk:Nc(e)}}s(pi,"createEvalTables");var Lo=pi(Mn),ai=new WeakMap;function bi(e){if(e===Mn||e===zt||e===Do)return e;if(!Object.isFrozen(e))return Vt(e);let n=ai.get(e);return n===void 0&&(n=Vt(e),ai.set(e,n)),n}s(bi,"memoizedNormalizedEvalWeights");var ii=new WeakMap;function hi(e){if(e===Mn)return Lo;let n=ii.get(e);return n===void 0&&(n=pi(e),ii.set(e,n)),n}s(hi,"memoizedEvalTables");var Xe=1e6,yi=Int32Array.of(0,10,110,120);function Uc(e,n){for(let t=0;t<yi.length;t+=1){let o=m(yi,t);if(Se(n,o)===1&&ht(e,o))return!0}return!1}s(Uc,"hasAdjacentScoringPool");function jc(e,n){let t=e.whiteScore>e.blackScore?e.whiteScore:e.blackScore,o=(t<ke?t:ke-1)*605,r=e.monLocations,a=0,i=r[0]??0;i>=0&&(a+=n[o+i]??0);let u=r[1]??0;u>=0&&(a-=n[o+120-u]??0);let c=o+121,l=r[2]??0;l>=0&&(a+=n[c+l]??0);let A=r[3]??0;A>=0&&(a-=n[c+120-A]??0);let d=c+121,f=r[4]??0;f>=0&&(a+=n[d+f]??0);let b=r[5]??0;b>=0&&(a-=n[d+120-b]??0);let p=d+121,g=r[6]??0;g>=0&&(a+=n[p+g]??0);let k=r[7]??0;k>=0&&(a-=n[p+120-k]??0);let x=p+121,v=r[8]??0;v>=0&&(a+=n[x+v]??0);let M=r[9]??0;return M>=0&&(a-=n[x+120-M]??0),a*si}s(jc,"learnedProResidual");var Lr=new WeakMap,Qt,yt;function Gc(e,n){if(e?.length!==n.length)return!1;for(let t=0;t<n.length;t+=1)if(H(e,t)!==H(n,t))return!1;return!0}s(Gc,"sameSquareContent");function Kc(e){try{let n=new Uint8Array(14641).fill(be),t=new Int32Array(121),o=new Int32Array(121),r=[],a=[];for(let i=0;i<121;i+=1){let u=m(On.starts,i),c=m(On.counts,i);for(let d=0;d<121;d+=1){let f=be;for(let b=0;b<c;b+=1){let p=m(On.list,u+b);if(H(e,p)>=ce)continue;let g=Se(d,p);g<f&&(f=g)}n[i*121+d]=f}t[i]=r.length;let l=m(xn.starts,i),A=m(xn.counts,i);for(let d=0;d<A;d+=1){let f=m(xn.list,l+d);if(H(e,f)>=ce)continue;let b=yo(i,f),p=H(e,b);p===on||p>=ce||(r.push(f),a.push(b))}o[i]=r.length-m(t,i)}return{mysticSteps:n,demonStarts:t,demonCounts:o,demonOrigins:new Int32Array(r),demonBetween:new Int32Array(a)}}catch(n){Oe(n)}}s(Kc,"buildAttackTables");function Wc(e){if(e===Qt&&yt!==void 0)return yt;let n=Lr.get(e);if(n!==void 0)return Qt=e,yt=n,n;if(yt!==void 0&&Gc(Qt,e)){let o=yt;return Lr.set(e,o),Qt=e,o}let t=Kc(e);return Lr.set(e,t),Qt=e,yt=t,t}s(Wc,"attackTablesFor");function Vc(e,n,t,o){let r=e.cells;if(!lt(r[n]??0))return be;let a=t^1,i=a!==e.active||Oo(e),u=be,c=Wc(e.squares);for(let l=0,A=a;l<yn;l+=1,A+=ae){let d=e.monLocations[A]??-1;if(d<0)continue;let f=r[d]??0;if(j(f)!==X)continue;let b=N(f);if(b===Pe){let k=Se(d,n)-3,x=k<0?0:k;if(x===0)return 0;x<u&&(u=x);continue}if(l!==Ft&&l!==Nt||!i||o||de(f)!==0||b!==0||D(f)!==0)continue;if(l===Ft){let k=c.mysticSteps[n*121+d]??0;if(k===0)return 0;k<u&&(u=k);continue}let p=c.demonStarts[n]??0,g=c.demonCounts[n]??0;for(let k=0;k<g;k+=1){let x=c.demonBetween[p+k]??0;if(x!==d&&r[x]!==0)continue;let v=Se(d,c.demonOrigins[p+k]??0);if(v===0)return 0;v<u&&(u=v)}}return u}s(Vc,"estimatedAttackSteps");function ki(e,n,t=0){let o=n.weights,r=e.cells,a=e.squares,i=e.monLocations,u=e.manaIndices,c=e.potions,l=(e.whiteScore-e.blackScore)*o.scoreUnit+(n.scoreShape[e.whiteScore*Ye+e.blackScore]??0)+((c[0]??0)-(c[1]??0))*o.potion,A=i[Ce*ae]??0,d=i[Ce*ae+1]??0,f=A>=0&&de(r[A]??0)===0,b=d>=0&&de(r[d]??0)===0,p=be,g=be,k=be,x=be,v=be,M=be,w=ie-e.monsMoves,C=t!==0,S=ke-e.whiteScore,P=ke-e.blackScore,L=0,U=Ht,T=Ht,me=Ht,Me=Ht,he=!1,mn=!1;if(C){if(A>=0){let E=r[A]??0;he=de(E)<=1&&D(E)===0&&N(E)===0}if(d>=0){let E=r[d]??0;mn=de(E)<=1&&D(E)===0&&N(E)===0}}let fn=0,Wn=0,nt=!1,Z=!1,De=0,We=0,Vn=0,Le=0;for(let E=0;E<e.manaCount;E+=1){let K=u[E]??0,Je=r[K]??0;if(j(Je)!==ne)continue;let q=D(Je),Te=f?Se(A,K):be,$=b?Se(d,K):be;Te<p&&(p=Te),$<g&&(g=$);let re=ln[K]??0;if(f){let B=Te+re;q===Dt&&B<k?k=B:q!==Dt&&B<v&&(v=B)}if(b){let B=$+re;q===Lt&&B<x?x=B:q!==Lt&&B<M&&(M=B)}if(C){let B=!1;if(q!==ge&&re<=1&&Uc(e,K)&&(B=!0,q-1===0?De<2&&(De+=1):We<2&&(We+=1)),he&&(f?Te:Se(A,K))+re<=ie){let F=je(q,0);F>fn?(fn=F,nt=B&&q-1===0):F===fn&&!(B&&q-1===0)&&(nt=!1)}if(mn&&(b?$:Se(d,K))+re<=ie){let F=je(q,1);F>Wn?(Wn=F,Z=B&&q-1===1):F===Wn&&!(B&&q-1===1)&&(Z=!1)}}let Ne=$-Te;if(Ne>4&&(Ne=4),Ne<-4&&(Ne=-4),o.manaPointsAttraction!==0){let B=n.manaPointsAttraction;f&&(l+=B[je(q,0)*we+Te]??0),b&&(l-=B[je(q,1)*we+$]??0)}if(q===ge)l+=o.supermanaDrainerControl*Ne;else{let B=q-1,ye=B===0?1:-1;l+=ye*(n.manaToOwnerPool[dr[B*121+K]??0]??0),l+=ye*(n.manaToNearestPool[re]??0),l+=o.manaDrainerControl*Ne,re<=2&&(B===0?S:P)<=1&&(L|=B===0?1:2),B===0?re<U&&(U=re):re<T&&(T=re)}}L!==0&&(l+=o.manaStepWinThreat*(((L&1)===0?0:1)-((L&2)===0?0:1)));for(let E=0;E<ae;E+=1){let K=E===0?1:-1,Je=E^1;for(let q=0,Te=E;q<yn;q+=1,Te+=ae){let $=i[Te]??0;if($<0)continue;let re=r[$]??0;if(j(re)!==X)continue;let Ne=de(re);Ne!==0&&(l-=K*((q===Ce?o.faintDrainer:o.faintMon)+o.faintCooldownStep*Ne));let B=a[$]??0;Ne===0&&B<ce&&(l+=K*o.activeMon);let ye=D(re);if(ye!==0){let F=je(ye,E),sn=ln[$]??0;l+=K*((n.carrierCloseToPool[sn]??0)+F*o.carrierPointBonus),ye===ge&&(l+=K*o.supermanaCarrier),E===e.active&&sn<=w?l+=K*o.carrierScoresThisTurn*F:E!==e.active&&sn<=ie&&(l+=K*o.carrierScoresNextTurn*F,C&&(E===0?F>Vn&&(Vn=F):F>Le&&(Le=F)));let Ve=E===0?e.whiteScore:e.blackScore;F>=ke-Ve&&(l+=K*o.winningCarrier)}else N(re)===Pe&&(l+=K*o.bomb);if(Ne===0)if(q===Ce){let F=0,sn=E===0?p:g,Ve=E===0?k:x,en=E===0?v:M,Xo=Ve<en?Ve:en,pn=E===e.active?w:ie,na=n.drainerTrip,to=ye!==0?ln[$]??0:N(re)!==0?be:Ve;ye===0&&N(re)===0&&en<be&&(Ve>=be||(n.drainerTripTwoPoint[en>pn?en-pn:0]??0)-(n.tripStep[en]??0)>(n.drainerTrip[Ve>pn?Ve-pn:0]??0)-(n.tripStep[Ve]??0))&&(na=n.drainerTripTwoPoint,to=en),F-=n.tripStep[to]??0;let ta=to>pn?to-pn:0,oo=1+((ta+ie-1)/ie|0);E===0?oo<me&&(me=oo):oo<Me&&(Me=oo),F+=na[ta]??0,F+=n.drainerCloseToMana[sn]??0,F+=n.drainerCloseToOwnPool[dr[E*121+$]??0]??0,F+=n.drainerCloseToSupermana[Se($,ut)]??0,ye===0&&N(re)===0&&E===e.active&&Xo<=w&&(F+=o.drainerPickupScoresThisTurn),l+=K*F;let oa=Wt(e,E,$),Zo=Vc(e,$,E,oa),As=ye!==0,ms=E!==e.active||w===0?Rr:w>=ui?_r:ci,ra=(As?Bn:0)+ms;Zo===0?l-=K*(n.threatImmediate[ra]??0):Zo<=ie&&(l-=K*(n.threatWalk[ra*li+Zo]??0)),oa&&(l+=K*o.angelGuardingDrainer)}else if(q===Bt){let F=E===0?A:d;F>=0&&(l+=K*(n.angelCloseToDrainer[Se($,F)]??0))}else if(q===Ao){let F=be;for(let sn=0,Ve=Je;sn<yn;sn+=1,Ve+=ae){let en=i[Ve]??0;if(en<0)continue;let Xo=r[en]??0;if(de(Xo)!==0)continue;let pn=Se($,en);pn<F&&(F=pn)}l+=K*(n.spiritCloseToEnemy[F]??0),B>=ce&&(l-=K*o.spiritOnOwnBase)}else{l+=K*(n.monCloseToCenter[La[$]??0]??0);let F=Je===0?A:d,sn=Je===0?f:b;F>=0&&sn&&(l+=K*(n.attackerCloseToEnemyDrainer[Se($,F)]??0))}}}if(o.raceHalfTurn!==0&&(S<P?S:P)<=Dr){let E=e.manaMoves>0?1:0,K=U+(e.active===0?E:0),Je=T+(e.active===1?E:0),q=me<K?me:K,$=(Me<Je?Me:Je)*2+(e.active===1?0:1)-(q*2+(e.active===0?0:1)),re=$>Cn?Cn:$<-Cn?-Cn:$;l+=n.race[re+Cn]??0}if(C){let E=e.active^1,K=E===0?1:-1,Je=E===0?fn:Wn,q=E===0?Vn:Le,Te=E===0?De:We,$=Te>0,re=E===0?nt:Z,Ne=Te>=2||Te===1&&!re,B=Je;B>0&&Ne&&(B+=1);let ye=q;ye>0&&$&&(ye+=1),ye>B&&(B=ye),$&&B<1&&(B=1);let F=E===0?e.whiteScore:e.blackScore;B>0&&F+B>=ke&&(l+=K*t)}return n.learnedPro!==void 0&&(l+=jc(e,n.learnedPro)),l}s(ki,"evaluateWithTables");var In=704,No=1073741824;function Un(e,n){return n?e+No:e}s(Un,"encodeGeneratedMoves");function qt(e){return e>=No?e-No:e}s(qt,"generatedMoveCount");function $t(e){return e>=No}s($t,"generatedMovesHadRawStartOption");function Nr(e,n){return j(e)===X&&fe(e)!==n&&de(e)===0}s(Nr,"isEnemyAwakeMon");function Br(e){let n=131072;return D(e)!==0&&(n+=1<<20),le(e)===Ce&&(n+=1<<19),n}s(Br,"damagingAttackKey");function zc(e,n,t){let o=G(e.cells,t),r=H(e.squares,t),a=j(n),i=a===X,u=D(n),c=N(n),l=o===0?-1:j(o),A=l===X&&(D(o)!==0||N(o)!==0);if(l===X)if(A){if(a!==ue||c!==pe)return 0}else{if(i)return 0;if(a===ne){if(le(o)!==Ce||de(o)!==0)return 0}else if(c!==pe)return 0}else if(l===ne){if(!i||le(n)!==Ce||de(n)!==0)return 0}else if(l===ue&&(N(o)!==pe||!i))return 0;if(r>=ce){if(!i||Ut(r)!==le(n)||jt(r)!==fe(n)||u!==0||c!==0)return 0}else if(r===on){let d=l===ne&&D(o)===ge,f=i&&le(n)===Ce;if(!(u===ge||u===0&&f&&(o===0||d)||f&&d))return 0}return o===0?1:i?u===0&&c===0?l===ue?N(o)===pe?2:0:1:u!==0?l===ue?N(o)===pe?1:0:1:l!==ue||N(o)!==pe?0:1:a===ne?l!==X||A?0:1:l!==X?0:A?c===pe?1:0:2}s(zc,"spiritDestinationOptionCount");function Hc(e,n,t,o,r,a){let i=r,u=!1,c=le(t),l=fe(t),A=D(t),d=N(t),f=e.active,b=e.cells,p=e.squares,g=Ae.list,k=ln[n]??0,x=c===Ce?1024:0,v=n<<3|xe<<17,M=Ae.starts[n]??0,w=Ae.counts[n]??0;if(A!==0){for(let C=0;C<w;C+=1){let S=g[M+C]??0,P=b[S]??0,L=p[S]??0,U=P===0?-1:j(P);if(U===X||U!==ne&&U!==ue&&!At(L)&&(L!==on||A!==ge)||(u=!0,U===ue&&N(P)!==pe))continue;let T=0;un(L)&&(T+=(1<<21)+je(A,f)*(1<<18)),U===ne?T+=65536+je(D(P),f)*512:U===ue&&(T+=16384),a[i]=T+(k-(ln[S]??0))*2048+4096,o[i]=v|S<<10|Ge<<24,i+=1}return Un(i,u)}if(d!==0){for(let C=0;C<w;C+=1){let S=g[M+C]??0,P=b[S]??0,L=P===0?-1:j(P);if(L===ue){if(u=!0,N(P)!==pe)continue;a[i]=x+16384}else{if(L!==-1||!At(p[S]??0))continue;u=!0,a[i]=x}o[i]=v|S<<10|Ge<<24,i+=1}return Un(i,u)}if(c===Ce){for(let C=0;C<w;C+=1){let S=g[M+C]??0,P=b[S]??0,L=p[S]??0,U=P===0?-1:j(P);if(U===X)continue;if(L>=ce){if(Ut(L)!==Ce||jt(L)!==l)continue}else if(L===on&&P!==0&&(U!==ne||D(P)!==ge))continue;if(u=!0,U===ue&&N(P)!==pe)continue;let T=1024;U===ne?T+=65536+je(D(P),f)*512:U===ue&&(T+=16384),U===ue&&N(P)===pe?(a[i]=T,o[i]=v|S<<10|dn<<24,i+=1,a[i]=T,o[i]=v|S<<10|Nn<<24,i+=1):(a[i]=T,o[i]=v|S<<10|Ge<<24,i+=1)}return Un(i,u)}for(let C=0;C<w;C+=1){let S=g[M+C]??0,P=b[S]??0,L=p[S]??0,U=P===0?-1:j(P);if(!(U===X||U===ne)){if(L>=ce){if(Ut(L)!==c||jt(L)!==l)continue}else if(L===on)continue;if(u=!0,U===ue){if(N(P)!==pe)continue;a[i]=16384,o[i]=v|S<<10|dn<<24,i+=1,a[i]=16384,o[i]=v|S<<10|Nn<<24,i+=1}else a[i]=0,o[i]=v|S<<10|Ge<<24,i+=1}}return Un(i,u)}s(Hc,"generateMonMoves");function Qc(e,n,t,o,r){let a=e.active,i=o,u=!1,c=m(On.starts,n),l=m(On.counts,n);for(let A=0;A<l;A+=1){let d=m(On.list,c+A),f=G(e.cells,d);Nr(f,a)&&(Wt(e,a^1,d)||(u=!0,lt(f)&&(r[i]=Br(f),t[i]=Re(Sr,n,d,xe,Ge),i+=1)))}return Un(i,u)}s(Qc,"generateMysticMoves");function qc(e,n,t,o,r){let a=e.active,i=o,u=!1,c=Nt,l=a,A=m(xn.starts,n),d=m(xn.counts,n);for(let f=0;f<d;f+=1){let b=m(xn.list,A+f),p=G(e.cells,b);if(!Nr(p,a)||Wt(e,a^1,b))continue;let g=yo(n,b);if(G(e.cells,g)!==0)continue;let k=H(e.squares,g);if(k===on||k>=ce||(u=!0,!lt(p)))continue;let x=Br(p),v=H(e.squares,b),M=D(p);if(!(!(N(p)===Pe)&&(M!==0&&M!==ge||v===on||v>=ce))){r[i]=x,t[i]=Re(rn,n,b,xe,Ge),i+=1;continue}let S=i,P=m(Ae.starts,b),L=m(Ae.counts,b);for(let U=0;U<L;U+=1){let T=m(Ae.list,P+U),me=G(e.cells,T),Me=me===0?-1:j(me);if(Me!==-1&&Me!==ue)continue;let he=H(e.squares,T);(At(he)||he>=ce&&Ut(he)===c&&jt(he)===l)&&(Me===ue?N(me)===pe?(r[i]=x,t[i]=Re(rn,n,b,T,dn),i+=1,r[i]=x,t[i]=Re(rn,n,b,T,Nn),i+=1):(r[i]=x,t[i]=Re(rn,n,b,T,Pr),i+=1):(r[i]=x,t[i]=Re(rn,n,b,T,Ge),i+=1))}i===S&&(r[i]=x,t[i]=Re(rn,n,b,xe,Ge),i+=1)}return Un(i,u)}s(qc,"generateDemonMoves");function $c(e,n,t,o,r){let a=o,i=!1,u=e.active,c=m(bo.starts,n),l=m(bo.counts,n);for(let A=0;A<l;A+=1){let d=m(bo.list,c+A),f=G(e.cells,d);if(f===0||j(f)===X&&de(f)!==0)continue;i=!0;let b=D(f),p=j(f)===ne,g=H(ln,d),k=(1<<21)+je(b,u)*(1<<18),x=m(Ae.starts,d),v=m(Ae.counts,d);for(let M=0;M<v;M+=1){let w=m(Ae.list,x+M),C=zc(e,f,w);if(C===0)continue;let S=0;b!==0&&un(H(e.squares,w))?S+=8192+k:p&&Yc(e,w,g,u)&&(S+=40960),C===2?(r[a]=S,t[a]=Re(Ln,n,d,w,dn),a+=1,r[a]=S,t[a]=Re(Ln,n,d,w,Nn),a+=1):(r[a]=S,t[a]=Re(Ln,n,d,w,Ge),a+=1)}}return Un(a,i)}s($c,"generateSpiritMoves");function Yc(e,n,t,o){if(H(ln,n)<t)return!0;let r=G(e.cells,n);return j(r)===X&&le(r)===Ce&&fe(r)===o&&de(r)===0}s(Yc,"advancesMana");function Xc(e,n,t,o,r){let a=e.active,i=o,u=!1,c=m(ho.starts,n),l=m(ho.counts,n);for(let A=0;A<l;A+=1){let d=m(ho.list,c+A),f=G(e.cells,d);Nr(f,a)&&(u=!0,lt(f)&&(r[i]=Br(f),t[i]=Re(Er,n,d,xe,Ge),i+=1))}return Un(i,u)}s(Xc,"generateBombMoves");function Zc(e,n,t,o,r){let a=o,i=m(Ae.starts,n),u=m(Ae.counts,n);for(let c=0;c<u;c+=1){let l=m(Ae.list,i+c),A=H(e.squares,l);ht(e,l)&&(r[a]=un(A)?(1<<21)+(1<<18):16,t[a]=Re(vo,n,l,xe,Ge),a+=1)}return a}s(Zc,"generateManaMoves");function Jc(e,n,t,o,r){let a=o;if(H(ln,n)!==1)return a;let i=m(Ae.starts,n),u=m(Ae.counts,n);for(let c=0;c<u;c+=1){let l=m(Ae.list,i+c),A=H(e.squares,l);!un(A)||!ht(e,l)||(r[a]=(1<<21)+(1<<18),t[a]=Re(vo,n,l,xe,Ge),a+=1)}return a}s(Jc,"generateWinningManaMoves");var eu=new Int32Array(In);function Fr(e,n,t=eu){let o=e.active,r=kn(e.monsMoves),a=Oo(e),i=0,u=0;for(let c=0;c<yn;c+=1){let l=m(e.monLocations,ve(c,o));if(l<0)continue;let A=G(e.cells,l);if(j(A)!==X)continue;let d=!1,f=D(A),b=N(A),p=f!==0||b!==0;if(!(!p&&de(A)!==0)){if(r){let g=Hc(e,l,A,n,i,t);i=qt(g),d||=$t(g)}if(p){if(b===Pe){let g=Xc(e,l,n,i,t);i=qt(g),d||=$t(g)}}else if(H(e.squares,l)<ce&&a){if(c===Ft){let k=Qc(e,l,n,i,t);i=qt(k),d||=$t(k)}else if(c===Nt){let k=qc(e,l,n,i,t);i=qt(k),d||=$t(k)}else if(c===Ao){let k=$c(e,l,n,i,t);i=qt(k),d||=$t(k)}}d&&(u+=1)}}if($a(e,u)){let c=o+1;for(let l=0;l<e.manaCount;l+=1){let A=m(e.manaIndices,l),d=G(e.cells,A);j(d)===ne&&D(d)===c&&(i=Zc(e,A,n,i,t))}}else if(m(e.freeMana,o)!==0&&Dn(e.firstTurn,e.manaMoves)&&(o===0?e.whiteScore:e.blackScore)+1>=ke){let c=o+1;for(let l=0;l<e.manaCount;l+=1){let A=m(e.manaIndices,l),d=G(e.cells,A);j(d)===ne&&D(d)===c&&(i=Jc(e,A,n,i,t))}}if(i>n.length)throw new RangeError(`fast move buffer capacity exceeded: generated ${i} moves for ${n.length} slots`);return i}s(Fr,"generateMoves");var Ke=48,Bo=Ke-2,jn=Xe-Ke-1,Fo=Object.freeze({lateMoveReduction:!0,lateMoveIndex:3,lateMoveDeepIndex:8,moveCountPruning:!0,moveCountDepth:3,moveCountBase:4,moveCountFactor:5,futilityMargin:900,aspirationDelta:0,aspirationMinDepth:3,winsNextTurnThreat:0}),gi=new WeakMap;function Ii(e){if(!(Object.isFrozen(e)&&(e.tuning===void 0||Object.isFrozen(e.tuning))))return Mi(e);let t=gi.get(e);return t===void 0&&(t=Mi(e),gi.set(e,t)),t}s(Ii,"memoizedSearchLimits");function Mi(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>Bo)throw new RangeError(`maxDepth must be a safe integer from 0 through ${Bo}`);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?Fo:nu(r)})}s(Mi,"normalizeSearchLimits");function nu(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:Ci(n,"lateMoveReduction"),lateMoveIndex:Sn(n,"lateMoveIndex",In),lateMoveDeepIndex:Sn(n,"lateMoveDeepIndex",In),moveCountPruning:Ci(n,"moveCountPruning"),moveCountDepth:Sn(n,"moveCountDepth",Bo),moveCountBase:Sn(n,"moveCountBase",In),moveCountFactor:Sn(n,"moveCountFactor",In),futilityMargin:Sn(n,"futilityMargin",jn),aspirationDelta:Sn(n,"aspirationDelta",jn),aspirationMinDepth:Sn(n,"aspirationMinDepth",Bo),winsNextTurnThreat:Sn(n,"winsNextTurnThreat",jn)})}s(nu,"normalizeSearchTuning");function Ci(e,n){let t=e[n];if(typeof t!="boolean")throw new TypeError(`tuning.${n} must be a boolean`);return t}s(Ci,"normalizedTuningBoolean");function Sn(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}s(Sn,"normalizedTuningInteger");var Zn=1<<20,Yt=new Int32Array(0);function Xt(e){try{return new Int32Array(e)}catch(n){Oe(n)}}s(Xt,"allocateTranspositionPart");var Uo=class{static{s(this,"TranspositionTable")}keyLo=Yt;keyHi=Yt;score=Yt;info=Yt;move=Yt;entries=0;generation=1;mask=0;deactivate(){this.mask=0}prepare(n){if(this.keyLo.length!==0)return this.mask=Zn-1,!0;if(n())return!1;let t=Xt(Zn);if(n())return!1;let o=Xt(Zn);if(n())return!1;let r=Xt(Zn);if(n())return!1;let a=Xt(Zn);if(n())return!1;let i=Xt(Zn);return n()?!1:(this.keyLo=t,this.keyHi=o,this.score=r,this.info=a,this.move=i,this.entries=0,this.generation=1,this.mask=Zn-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}},Si=ae,Ei=ie+1,Pi=wn+1,vi=Ue+1,wi=2,Ur=4,tu=Si*Ei*Pi*vi*wi*Ur*Ur;if(go.length!==Ar.length||go.length<tu)throw new RangeError("fast scalar hash table is too small for the configured state space");function jr(e){let n=m(e.potions,0),t=m(e.potions,1),o=n>2?3:n,a=t>2?3:t;return a=o+Ur*a,a=(e.firstTurn?1:0)+wi*a,a=e.actionsUsed+vi*a,a=e.manaMoves+Pi*a,a=e.monsMoves+Ei*a,e.active+Si*a}s(jr,"scalarIndex");function Gr(e,n,t=0){return e.hashLo^m(go,n)^e.whiteScore*2654435761^e.blackScore*2135587861^m(e.potions,0)^Math.imul(t,668265261)}s(Gr,"stateKeyLo");function Kr(e,n,t=0){return e.hashHi^m(Ar,n)^e.whiteScore*2246822507^e.blackScore*3266489909^m(e.potions,1)^Math.imul(t,374761393)}s(Kr,"stateKeyHi");var ou=16,Bi=1<<ou,ru=Bi-1,au=1<<30,Ti=0,Oi=1,jo=2,iu=3,xi=1<<30,Ri=4194303,su=2047,cu=32768,_i=1<<28,Di=1<<24,Li=1<<23,Gn=Xe*2,Ni=s(()=>!1,"NO_TIMEOUT");function Wr(e,n,t,o,r,a,i,u,c){if(o===0){let M=0,w=-2147483648,C=1,S=-2147483648,P=-2147483648,L=1,U=-2147483648;for(let T=0;T<t;T+=1){let me=m(e,T),Me=m(n,T);if(me===r)Me+=_i;else if(me===a)Me+=Di;else if(me===i)Me+=Li;else{let mn=m(u,c+$e(me)*121+_e(me));Me+=mn>8191?8191:mn}n[T]=Me;let he=m(n,T);if(T===0){P=he,w=he;continue}he>w?(w=he,M=T,U>=P?(S=U,C=L):(S=P,C=T)):(T===1||he>S)&&(S=he,C=T),(T===1||he>U)&&(U=he,L=T)}if(M!==0){let T=m(e,0);e[0]=m(e,M),e[M]=T,n[M]=m(n,0),n[0]=w}if(t>1&&C!==1){let T=m(e,1);e[1]=m(e,C),e[C]=T,n[C]=m(n,1),n[1]=S}return t}let l=$e(o),A=_e(o),d=0,f=0,b=-2147483648,p=1,g=-2147483648,k=-2147483648,x=1,v=-2147483648;for(let M=0;M<t;M+=1){let w=m(e,M);if(pt(w)===ft&&w<o){let P=$e(w),L=_e(w);if(P!==l&&P!==A&&L!==l&&L!==A)continue}let C=m(n,M);if(w===r)C+=_i;else if(w===a)C+=Di;else if(w===i)C+=Li;else{let P=m(u,c+$e(w)*121+_e(w));C+=P>8191?8191:P}d!==M&&(e[d]=w),n[d]=C;let S=m(n,d);d===0?(k=S,b=S):(S>b?(b=S,f=d,v>=k?(g=v,p=x):(g=k,p=d)):(d===1||S>g)&&(g=S,p=d),(d===1||S>v)&&(v=S,x=d)),d+=1}if(d===0)return Wr(e,n,t,0,r,a,i,u,c);if(f!==0){let M=m(e,0);e[0]=m(e,f),e[f]=M,n[f]=m(n,0),n[0]=b}if(d>1&&p!==1){let M=m(e,1);e[1]=m(e,p),e[p]=M,n[p]=m(n,1),n[1]=g}return d}s(Wr,"orderMoves");var Go=class{static{s(this,"FastSearcher")}#e=[];#n=[];#t=[];#o;#r=new Int32Array(Ke*2);#a=new Int32Array(ae*121*121);#y=new Int32Array(Ke+1);#s=new Int32Array(Bi*4);#c=0;#k;#A=0;#g;#m=Lo;#u=!1;#h=Fo;#f=0;#p=0;#E=0;#l=!1;#M=!1;#i=0;#C=0;#I=Ni;constructor(){this.#o=new Uo;for(let n=0;n<=Ke;n+=1)this.#e.push(new To),this.#n.push(new Int32Array(In)),this.#t.push(new Int32Array(In))}get root(){return Ie(this.#e,0)}get size(){return this.#o.entries}search(n,t,o=Mn){let r=Ii(n),a=bi(o);if(this.#M=!1,this.#u=!1,this.#i=0,this.#C=0,Or(this.root)!==-1)return{move:0,score:0,depth:0,nodes:0,supported:!0};this.#m=hi(a),this.#u=a===zt;let i=r.tuning;this.#h=i,this.#f=i.winsNextTurnThreat;let u=!Ha(this.#g,this.root.squares);(a!==this.#k||i.winsNextTurnThreat!==this.#A||u)&&(this.#k=a,this.#A=i.winsNextTurnThreat,this.#g=this.root.squares,this.#c>=au&&(this.#c=0,this.#s.fill(0)),this.#c+=1),this.#p=0,this.#E=r.maxNodes,this.#l=!1,this.#I=t,this.#o.deactivate();try{this.#r.fill(0),this.#a.fill(0);let c=0,l=0,A=0;for(let d=1;d<=r.maxDepth;d+=1){if(d===2){if(this.#p>=this.#E||!this.#o.prepare(this.#I)){this.#l=!0;break}this.#R()}let f=-Gn,b=Gn;i.aspirationDelta>0&&A>0&&d>=i.aspirationMinDepth&&(f=l-i.aspirationDelta,b=l+i.aspirationDelta);let p=this.#v(d,c,f,b,c),g=0;for(;!this.#d()&&p.provenWin!==!0&&p.move!==0&&(p.score<=f||p.score>=b)&&(f>-Gn||b<Gn);){g+=1;let k=i.aspirationDelta*(1<<g);p.score<=f&&(f=g>=2?-Gn:p.score-k),p.score>=b&&(b=g>=2?Gn:p.score+k),p=this.#v(d,p.move,f,b,c)}if(p.move===0)break;if(this.#d()){(A===0||this.#m.learnedPro!==void 0&&p.verifiedChallenger===!0&&!this.#M)&&(c=p.move,l=p.score);break}if(c=p.move,l=p.score,A=d,!p.selective&&l>=Xe-Ke)break}return{move:c,score:l,depth:A,nodes:this.#p,supported:!this.#M}}finally{this.#o.deactivate(),this.#m=Lo,this.#u=!1,this.#h=Fo,this.#f=0,this.#I=Ni}}#R(){this.#o.generation+=1,this.#o.generation>Ri&&this.#o.clear()}#v(n,t,o,r,a){let i=Ie(this.#e,0),u=Ie(this.#n,0),c=Fr(i,u,Ie(this.#t,0));if(c===0)return{move:0,score:0,selective:!1};Wr(u,Ie(this.#t,0),c,0,t,m(this.#r,0),m(this.#r,1),this.#a,i.active*121*121);let l=Ie(this.#t,0),A=o,d=0,f=-Gn,b=!1,p=!1;for(let g=0;g<c;g+=1){g>=2&&this.#x(u,l,g,c);let k=m(u,g),x=this.#C,v=this.#w(i,k,0),M,w=this.#i,C,S=g===0;if(g===0)M=this.#b(i,v,0,n-1,A,r),C=this.#i!==w;else if(M=this.#b(i,v,0,n-1,A,A+1),C=this.#i!==w,M>A&&!this.#d()){if(!C&&this.#C===x&&M>=Xe-Ke)return{move:k,score:M,selective:!1,provenWin:!0};w=this.#i,M=this.#b(i,v,0,n-1,A,r),S=!0,C=this.#i!==w}if(this.#d()||(M>f&&(f=M,d=k,b=C,p=S&&M>A&&a!==0&&m(u,0)===a&&k!==a,M>A&&(A=M)),A>=r))break}return d===0&&(d=m(u,0),f=0,b=!0),{move:d,score:f,selective:b,verifiedChallenger:p}}#w(n,t,o){let r=Ie(this.#e,o+1);r.copyFrom(n),this.#y[o]=t;let a=Ya(r,t);return r.active!==n.active&&(this.#C+=1),a===wo&&(this.#M=!0,this.#l=!0),a}#b(n,t,o,r,a,i){let u=Ie(this.#e,o+1);return t===wo?0:t!==-1?t===n.active?Xe-o:-(Xe-o):u.active===n.active?this.#T(r,o+1,a,i):-this.#T(r,o+1,-i,-a)}#T(n,t,o,r){if(!this.#P())return 0;let a=Ie(this.#e,t);if(t>=Ke-2)return this.#S(a);if(n<=0)return this.#S(a);let i=o,u=this.#_(a,t),c=jr(a),l=Gr(a,c,u),A=Kr(a,c,u),d=this.#o,f=(l^A*3)&d.mask,b=0,p=m(d.info,f),g=m(d.keyLo,f)===l&&m(d.keyHi,f)===A&&(p>>>8&Ri)===d.generation;if(g){b=m(d.move,f);let Z=p>>2&63;if(Z>=n){let De=m(d.score,f)/2,We=p&3;if((p&xi)!==0){if(this.#u&&Z===n&&We===jo&&De<=i)return this.#i+=1,De}else if(We===Ti||We===Oi&&De>=r||We===jo&&De<=i)return De}}let k=this.#h,x=Ie(this.#n,t),v=Fr(a,x,Ie(this.#t,t));if(v===0)return this.#S(a,l^Math.imul(u,668265261),A^Math.imul(u,374761393));let M=Ie(this.#t,t);v=Wr(x,M,v,u,b,m(this.#r,t*2),m(this.#r,t*2+1),this.#a,a.active*121*121);let w=v;if(k.moveCountPruning&&n<=k.moveCountDepth){let Z=k.moveCountBase+k.moveCountFactor*n;Z<w&&(w=Z)}let C=n<=2;if(C&&!this.#P()||this.#d())return 0;let S=!1,P=!1,L=0,U=!1,T=-Gn,me=0,Me=this.#i;for(let Z=0;Z<v;Z+=1){Z>=2&&this.#x(x,M,Z,v);let De=m(x,Z),We=m(M,Z)>=cu;if(!We&&me!==0){let E=Z>=w;if(!E&&C&&(S||(L=this.#O(a,l^Math.imul(u,668265261),A^Math.imul(u,374761393))+k.futilityMargin*n,P=L<=o,S=!0),E=P,P&&(U=!0)),E){this.#i+=1;break}}let Vn=this.#w(a,De,t),Le;if(Z===0)Le=this.#b(a,Vn,t,n-1,i,r);else{let E=0;k.lateMoveReduction&&!We&&n>=3&&Z>=k.lateMoveIndex&&(E=Z>=k.lateMoveDeepIndex?2:1,E>=n&&(E=n-1)),Le=this.#b(a,Vn,t,n-1-E,i,i+1),!this.#d()&&Le>i&&(E>0||Le<r)&&(Le=this.#b(a,Vn,t,n-1,i,r))}if(this.#d())return 0;if(Le>T&&(T=Le,me=De),Le>i&&(i=Le),i>=r){this.#D(a,De,t,n,We);break}}if(me===0)return this.#S(a);let mn=this.#i!==Me?iu:T>=r?Oi:T<=o?jo:Ti,fn=T,Wn=0;if(this.#u&&U&&T<=o){let Z=T>L?T:L;Z<Xe-Ke&&Z>-Xe+Ke&&(mn=jo,fn=Z,Wn=xi)}let nt=n;if(fn<Xe-Ke&&fn>-Xe+Ke){let Z=p>>2&63;(!g||nt>=Z)&&(p===0&&m(d.info,f)===0&&(d.entries+=1),d.keyLo[f]=l,d.keyHi[f]=A,d.score[f]=fn*2,d.info[f]=Wn|d.generation<<8|nt<<2|mn,d.move[f]=me)}return T}#_(n,t){if(t===0)return 0;let o=m(this.#y,t-1);return pt(o)===ft&&Ie(this.#e,t-1).active===n.active?o:0}#d(){return this.#l}#P(){return this.#l?!1:this.#p>=this.#E?(this.#l=!0,!1):(this.#p+=1,(this.#p&su)===0&&this.#I()?(this.#l=!0,!1):!0)}#O(n,t,o){let r=t,a=o;if(r===void 0||a===void 0){let l=jr(n);r=Gr(n,l),a=Kr(n,l)}let i=((r^a*3)&ru)<<2,u=this.#s,c;return m(u,i+2)===this.#c&&m(u,i)===r&&m(u,i+1)===a?c=m(u,i+3)/2:(c=ki(n,this.#m,this.#f),c>jn?c=jn:c<-jn&&(c=-jn),u[i]=r,u[i+1]=a,u[i+2]=this.#c,u[i+3]=c*2),n.active===0?c:-c}#S(n,t,o){return this.#P()?this.#O(n,t,o):0}#D(n,t,o,r,a){if(a)return;let i=o*2;m(this.#r,i)!==t&&(this.#r[i+1]=m(this.#r,i),this.#r[i]=t);let u=n.active*121*121+$e(t)*121+_e(t),c=m(this.#a,u)+r*r;this.#a[u]=c>1<<20?1<<20:c}#x(n,t,o,r){let a=o,i=m(t,o);for(let c=o+1;c<r;c+=1){let l=m(t,c);l>i&&(i=l,a=c)}if(a===o)return;let u=m(n,o);n[o]=m(n,a),n[a]=u,t[a]=m(t,o),t[o]=i}};var uu=Object.freeze({lateMoveReduction:!0,lateMoveIndex:2,lateMoveDeepIndex:6,moveCountPruning:!0,moveCountDepth:3,moveCountBase:7,moveCountFactor:7,futilityMargin:900,aspirationDelta:600,aspirationMinDepth:2,winsNextTurnThreat:0}),lu=Object.freeze({lateMoveReduction:!0,lateMoveIndex:2,lateMoveDeepIndex:6,moveCountPruning:!0,moveCountDepth:3,moveCountBase:7,moveCountFactor:7,futilityMargin:900,aspirationDelta:600,aspirationMinDepth:2,winsNextTurnThreat:2500}),du=Object.freeze({lateMoveReduction:!0,lateMoveIndex:3,lateMoveDeepIndex:8,moveCountPruning:!0,moveCountDepth:3,moveCountBase:4,moveCountFactor:5,futilityMargin:900,aspirationDelta:0,aspirationMinDepth:3,winsNextTurnThreat:0}),Au=Object.freeze({fast:Object.freeze({budgetMs:50,weights:Mn,limits:Object.freeze({maxDepth:40,maxNodes:39936,tuning:lu})}),normal:Object.freeze({budgetMs:150,weights:zt,limits:Object.freeze({maxDepth:40,maxNodes:184e3,tuning:uu})}),pro:Object.freeze({budgetMs:650,weights:Do,limits:Object.freeze({maxDepth:40,maxNodes:2e6,tuning:du})})});function mu(){return globalThis.performance.now()}s(mu,"systemClock");function Fi(e){let n=e();if(!Number.isFinite(n))throw new RangeError("automove clock must return a finite number");return n}s(Fi,"readClock");function fu(){return globalThis.WeakRef}s(fu,"weakRefConstructor");var Vr=class{static{s(this,"FastSearcherPool")}#e;run(n){let t=fu(),o=t===void 0?void 0:this.#e?.deref();if(o===void 0)try{o=new Go}catch(r){if(r instanceof RangeError)return Tt;throw r}this.#e=void 0;try{return n(o)}catch(r){if(Ot(r))return Tt;throw r}finally{t!==void 0&&(this.#e??=new t(o))}}},pu=new Vr;function zr(e,n,t=mu){let o=Au[n],r=Fi(t)+o.budgetMs,a=!1,i=s(()=>a?!0:(a=Fi(t)>=r,a),"deadlineReached");if(e.winnerColor()!==void 0||i())return{kind:"fallback"};let u;try{u=new To}catch(l){if(l instanceof RangeError)return{kind:"fallback"};throw l}if(!ei(u,e,o.limits.maxDepth)||i())return{kind:"fallback"};let c=pu.run(l=>{if(!i()&&(l.root.copyFrom(u),!i()))return l.search(o.limits,i,o.weights)});return c===void 0||Ot(c)||!c.supported||c.move===0?{kind:"fallback"}:{kind:"selected",inputs:ni(c.move)}}s(zr,"selectPackedInputs");function Ui(e){switch(e.kind){case"takeback":return 0;case"location":return 1;case"modifier":return 2}}s(Ui,"inputTag");function bu(e,n){let t=Ui(e)-Ui(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"?tr[e.modifier]-tr[n.modifier]:0}s(bu,"compareInputs");function hu(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)}}s(hu,"nextInputs");function Hr(e,n){let t=e.fork().processInput(n,!1,!1);return t.kind==="events"?t:void 0}s(Hr,"applyInputs");function ji(e){let n=e.fork(),t=[],o=s(()=>{let r=t.length===0?n.processInputWithStartOptions(t,!0,!1,cr):n.inspectInputGrammar(t,cr);if(r.kind==="invalid-input")return!1;if(r.kind==="events")return t.length>0&&Hr(n,t)!==void 0;if(t.length===ot)return!1;let a=hu(r)?.sort(bu);if(a===void 0||a.length===0)return!1;for(let i of a){if(t.push(i),o())return!0;t.pop()}return!1},"findCompletion");return o()?t:[]}s(ji,"deterministicLegalFallbackInputs");function Gi(e,n,t){let o=e.fen(),r=t===void 0?zr(e,n):zr(e,n,t),a=r.kind==="selected"?r.inputs:ji(e),i=Hr(e,a);if(i===void 0&&r.kind==="selected"&&(a=ji(e),i=Hr(e,a)),e.fen()!==o)throw new Error("automove suggestion mutated its source game");return i===void 0?{output:{kind:"invalid-input"},inputFen:""}:{output:i,inputFen:st(a)}}s(Gi,"suggestMove");function Zt(e){return e===y.White?"w":"b"}s(Zt,"colorFen");function Ze(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 I.Demon:return"e";case I.Drainer:return"d";case I.Angel:return"a";case I.Spirit:return"s";case I.Mystic:return"y"}})();return`${e.color===y.White?n.toUpperCase():n}${e.cooldown}`}s(Ze,"monFen");function yu(e,n){let t,o;switch(e.charCodeAt(n)){case 69:t=y.White,o=I.Demon;break;case 101:t=y.Black,o=I.Demon;break;case 68:t=y.White,o=I.Drainer;break;case 100:t=y.Black,o=I.Drainer;break;case 65:t=y.White,o=I.Angel;break;case 97:t=y.Black,o=I.Angel;break;case 83:t=y.White,o=I.Spirit;break;case 115:t=y.Black,o=I.Spirit;break;case 89:t=y.White,o=I.Mystic;break;case 121:t=y.Black,o=I.Mystic;break;default:return}let r=e.charCodeAt(n+1);return r<48||r>50?void 0:Hn(o,t,r-48)}s(yu,"parseMonFenAt");function Jn(e){return e.kind==="supermana"?"U":e.color===y.White?"M":"m"}s(Jn,"manaFen");function Ki(e){switch(e){case 77:return rt(y.White);case 109:return rt(y.Black);case 85:return En;default:return}}s(Ki,"parseManaCode");function Wi(e){switch(e){case O.Potion:return"P";case O.Bomb:return"B";case O.BombOrPotion:return"Q"}}s(Wi,"consumableFen");function Vi(e){switch(e){case 80:return O.Potion;case 66:return O.Bomb;case 81:return O.BombOrPotion;default:return}}s(Vi,"parseConsumableCode");function kt(e){switch(e.kind){case"mon":return`${Ze(e.mon)}x`;case"mana":return`xx${Jn(e.mana)}`;case"mon-with-mana":return`${Ze(e.mon)}${Jn(e.mana)}`;case"mon-with-consumable":return`${Ze(e.mon)}${Wi(e.consumable)}`;case"consumable":return`xx${Wi(e.consumable)}`}}s(kt,"itemFen");function zi(e,n){let t=e.charCodeAt(n),o=e.charCodeAt(n+2);if(t===120){if(e.charCodeAt(n+1)!==120)return;let u=Ki(o);if(u!==void 0)return cn(u);let c=Vi(o);return c===void 0?void 0:It(c)}let r=yu(e,n);if(r===void 0)return;let a=Ki(o);if(a!==void 0)return at(r,a);let i=Vi(o);return i!==void 0?Ct(r,i):o===120?He(r):void 0}s(zi,"parseItemFenAt");function ku(e){switch(e.kind){case"mon-move":return`mm ${kt(e.item)} ${W(e.from)} ${W(e.to)}`;case"mana-move":return`mma ${Jn(e.mana)} ${W(e.from)} ${W(e.to)}`;case"mana-scored":return`ms ${Jn(e.mana)} ${W(e.at)}`;case"mystic-action":return`ma ${Ze(e.mystic)} ${W(e.from)} ${W(e.to)}`;case"demon-action":return`da ${Ze(e.demon)} ${W(e.from)} ${W(e.to)}`;case"demon-additional-step":return`das ${Ze(e.demon)} ${W(e.from)} ${W(e.to)}`;case"spirit-target-move":return`stm ${kt(e.item)} ${W(e.from)} ${W(e.to)} ${W(e.by)}`;case"pickup-bomb":return`pb ${Ze(e.by)} ${W(e.at)}`;case"pickup-potion":return`pp ${kt(e.by)} ${W(e.at)}`;case"use-potion":return`up ${W(e.from)} ${W(e.to)}`;case"pickup-mana":return`pm ${Jn(e.mana)} ${Ze(e.by)} ${W(e.at)}`;case"mon-fainted":return`mf ${Ze(e.mon)} ${W(e.from)} ${W(e.to)}`;case"mana-dropped":return`md ${Jn(e.mana)} ${W(e.at)}`;case"supermana-back-to-base":return`sb ${W(e.from)} ${W(e.to)}`;case"bomb-attack":return`ba ${Ze(e.by)} ${W(e.from)} ${W(e.to)}`;case"mon-awake":return`maw ${Ze(e.mon)} ${W(e.at)}`;case"bomb-explosion":return`be ${W(e.at)}`;case"next-turn":return`nt ${Zt(e.color)}`;case"game-over":return`go ${Zt(e.winner)}`;case"takeback":return"z"}}s(ku,"eventFen");function Hi(e){return e.map(ku).join(" ")}s(Hi,"eventArrayFen");function Qi(e){return e===void 0?void 0:{i:e.i,j:e.j}}s(Qi,"detachedLocation");function Qr(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}s(Qr,"detachedLocations");function et(e){let n=e;return n===y.White?0:n===y.Black?1:void 0}s(et,"boardColorIndex");var gt=class{constructor(n=hn,t,o,r=!1){this.variant=n;if(o!==void 0){this.storage=o;return}let a=t??Ta(n);if(a.length!==121)throw new RangeError(`board requires exactly ${121} item slots`);this.storage={itemSlots:t===void 0||r?[...a]:a.map(i=>i===void 0?void 0:zn(i)),occupiedEntries:void 0,categoryDerived:void 0}}variant;static{s(this,"Board")}storage;get items(){return[...this.storage.itemSlots]}static fromItems(n,t){return new Kn(t,n)}fork(){let n=new Kn(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(bn(n))return this.storage.itemSlots[se(n)]}itemAtIndex(n){return this.storage.itemSlots[n]}squareAt(n){return qn(n),lr(n,this.variant)}allMonsBases(){return Rt}supermanaBase(){return xt}allMonsLocations(n){let t=et(n);return t===void 0?[]:Qr(this.getCategoryDerived().monsLocations[t])}allFreeRegularManaLocations(n){let t=et(n);return t===void 0?[]:Qr(this.getCategoryDerived().freeRegularManaLocations[t])}base(n){return Oa(n.kind,n.color)}faintedMonsLocations(n){let t=et(n);return t===void 0?[]:Qr(this.getCategoryDerived().faintedMonsLocations[t])}findMana(n){let t=et(n);if(t!==void 0)return Qi(this.getCategoryDerived().freeRegularManaLocations[t][0])}findAwakeAngel(n){let t=et(n);if(t!==void 0)return Qi(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(!da(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=sr[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=[],i=[],u,c;for(let A=0;A<121;A+=1){let d=this.storage.itemSlots[A];if(d!==void 0){let f=sr[A];if(f!==void 0){let b=Q(d);if(b!==void 0){let p=et(b.color);if(p===void 0)continue;(p===0?n:t).push(f),d.kind==="mon"&&Ee(b)?(p===0?a:i).push(f):b.kind===I.Angel&&!Ee(b)&&(p===0&&u===void 0?u=f:p===1&&c===void 0&&(c=f))}else if(d.kind==="mana"&&d.mana.kind==="regular"){let p=et(d.mana.color);p!==void 0&&(p===0?o:r).push(f)}}}}let l={monsLocations:[n,t],freeRegularManaLocations:[o,r],faintedMonsLocations:[a,i],awakeAngelLocations:[u,c]};return this.storage.categoryDerived=l,l}entries(){return this.getOccupiedEntries().values()}},Kn=class extends gt{static{s(this,"MutableBoard")}#e;delete(n){qn(n),this.storage.itemSlots[se(n)]=void 0,this.storage.occupiedEntries=void 0,this.storage.categoryDerived=void 0}set(n,t){qn(n),this.storage.itemSlots[se(n)]=zn(t),this.storage.occupiedEntries=void 0,this.storage.categoryDerived=void 0}readonlyView(){return this.#e??=new gt(this.variant,void 0,this.storage),this.#e}};var qi=ke+1,gu=Object.freeze(["","n01","n02","n03","n04","n05","n06","n07","n08","n09","n10","n11"]);function Mu(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 i=e.itemAtIndex(t);if(t+=1,i===void 0){a+=1;continue}a>0&&(n+=$i(a),a=0),n+=kt(i)}a>0&&(n+=$i(a))}return n}s(Mu,"boardFen");function Cu(e,n,t,o){let r=new Array(121).fill(void 0),a=n;for(let i=0;i<11;i+=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 A=e.charCodeAt(a+1)-48,d=e.charCodeAt(a+2)-48;if(A<0||A>9||d<0||d>9)return;let f=A*10+d;if(f<1||u+f>11)return;u+=f,a+=3,c=!0;continue}if(a+2>=t||u>=11)return;let l=zi(e,a);if(l===void 0)return;r[i*11+u]=l,u+=1,a+=3,c=!1}if(u!==11)return;if(i<10){if(e.charCodeAt(a)!==47)return;a+=1}}if(a===t)return new Kn(o,r,void 0,!0)}s(Cu,"parseBoardFenRange");function Yi(e){let n=`${e.whiteScore} ${e.blackScore} ${Zt(e.activeColor)} ${e.actionsUsedCount} ${e.manaMovesCount} ${e.monsMovesCount} ${e.whitePotionsCount} ${e.blackPotionsCount} ${e.turnNumber} ${Mu(e.board)}`,t=e.board.variant;return t===hn?n:`${n} ${Pa(t)}`}s(Yi,"gameFen");function Xi(e){let n=0,t=s(x=>{let v=n,M=0,w=!1;for(;n<e.length;){let C=e.charCodeAt(n);if(C===32)break;if(C<48||C>57)return-1;if(n===v)w=C===48;else if(w)return-1;if(M=M*10+(C-48),!Number.isSafeInteger(M))return-1;n+=1}if(n===v)return-1;if(x){if(n>=e.length)return-1;n+=1}else if(n!==e.length)return-1;return M},"readInteger"),o=t(!0),r=t(!0),a=e.charCodeAt(n),i=a===119?y.White:a===98?y.Black:void 0;if(i===void 0||e.charCodeAt(n+1)!==32)return;n+=2;let u=t(!0),c=t(!0),l=t(!0),A=t(!0),d=t(!0),f=t(!0);if(o<0||r<0||u<0||c<0||l<0||A<0||d<0||f<0||o>qi||r>qi||u>Ue||c>wn||l>ie||f<1)return;let b=n;for(;n<e.length&&e.charCodeAt(n)!==32;)n+=1;let p=n,g=hn;if(n<e.length){n+=1;let x=t(!1),v=wa(x);if(v===void 0||v===hn)return;g=v}let k=Cu(e,b,p,g);if(k!==void 0)return{board:k,whiteScore:o,blackScore:r,activeColor:i,actionsUsedCount:u,manaMovesCount:c,monsMovesCount:l,whitePotionsCount:A,blackPotionsCount:d,turnNumber:f}}s(Xi,"parseGameFen");function $i(e){return gu[e]??""}s($i,"emptyRunFen");function Zi(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}}s(Zi,"copyRulesCounters");function Ko(e,n,t,o){let r=e[n]+t;return o&&!Number.isSafeInteger(r)?!1:(e[n]=r,!0)}s(Ko,"addCounter");function qr(e,n,t,o){if(e.actionsUsedCount<Ue)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}})}s(qr,"consumeAction");function $r(e,n,t,o){switch(n.kind){case"mon-move":return{valid:Ko(e,"monsMovesCount",1,o)};case"mana-move":return{valid:Ko(e,"manaMovesCount",1,o)};case"mana-scored":{let r=e.activeColor===y.White?"whiteScore":"blackScore";return{valid:Ko(e,r,ua(n.mana,e.activeColor),o)}}case"mystic-action":return qr(e,n.from,n.to,o);case"demon-action":{let a=t.find(i=>i.kind==="demon-additional-step")?.to??n.to;return qr(e,a,a,o)}case"spirit-target-move":return qr(e,n.by,n.to,o);case"pickup-potion":{let r=Q(n.by);if(r===void 0)return{valid:!0};let a=r.color===y.White?"whitePotionsCount":"blackPotionsCount";return{valid:Ko(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}}}s($r,"projectEventCounters");function Yr(e,n){let t=Zi(e);for(let r of n)if(!$r(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!Wo(o,n).turnAdvanced}s(Yr,"canApplyRulesEvents");function Iu(e,n,t,o){let r=$r(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,cn(n.mana));break;case"mana-scored":{let a=e.board.get(n.at);if(a!==void 0){let i=Q(a);i===void 0?e.board.delete(n.at):e.board.set(n.at,He(i))}break}case"mystic-action":e.board.delete(n.to);break;case"demon-action":{e.board.delete(n.from),t.find(i=>i.kind==="demon-additional-step")?.to===void 0?e.board.set(n.to,He(n.demon)):e.board.delete(n.to);break}case"demon-additional-step":e.board.set(n.to,He(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,Ct(n.by,O.Bomb));break;case"pickup-potion":{if(Q(n.by)===void 0)break;e.board.set(n.at,n.by);break}case"pickup-mana":e.board.set(n.at,at(n.by,n.mana));break;case"mon-fainted":e.board.set(n.to,He(sa(n.mon)));break;case"mana-dropped":e.board.set(n.at,cn(n.mana));break;case"supermana-back-to-base":{let a=e.board.get(n.to);e.board.set(n.to,a?.kind==="mon"?at(a.mon,En):cn(En));break}case"bomb-attack":e.board.delete(n.to),e.board.set(n.from,He(n.by));break;case"bomb-explosion":{let a=e.board.get(n.at),i=a===void 0?void 0:Q(a);(i===void 0||!Ee(i)||!Pt(e.board.base(i),n.at))&&e.board.delete(n.at);break}case"mon-awake":case"game-over":case"next-turn":case"takeback":case"use-potion":break}}s(Iu,"applyEvent");function Su(e,n){e.activeColor=Pn(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:Q(o);if(r===void 0)continue;let a=ca(r);Ee(a)||n.push({kind:"mon-awake",mon:a,at:t}),e.board.set(t,He(a))}}s(Su,"advanceTurn");function Wo(e,n){let t=[];for(let a of n)Iu(e,a,n,t);let o=Io(e),r=!1;return o!==void 0?t.push({kind:"game-over",winner:o}):Va(e)&&(Su(e,t),r=!0),{events:[...n,...t],turnAdvanced:r,winner:o}}s(Wo,"applyRulesEvents");var Jt=Symbol("cache-miss"),ns=Symbol("cached-undefined"),Vo=Object.freeze({completionViability:16384,secondInputOptions:4096,secondStage:8192,thirdStage:8192});function Eu(e){return e===void 0?void 0:[e[0].map(Qn),e[1].map(it)]}s(Eu,"copyStageResult");function Ji(e){return e===void 0?ns:[e[0].map(Qn),e[1].map(it)]}s(Ji,"storeStageResult");function es(e){return e===ns?void 0:Eu(e)}s(es,"copyStoredStageResult");function zo(e,n,t,o){e.size>=o&&!e.has(n)&&e.clear(),e.set(n,t)}s(zo,"setBounded");var Ho=class{static{s(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:rr(t)}setStartSuggestion(n,t){(this.#e??=new Array(4))[n]=rr(t)}getCompletionViability(n){return this.#n?.get(n)}setCompletionViability(n,t){zo(this.#n??=new Map,n,t,Vo.completionViability)}getSecondInputOptions(n){let t=this.#t?.get(n);return t===void 0?void 0:t.map(it)}setSecondInputOptions(n,t){zo(this.#t??=new Map,n,t.map(it),Vo.secondInputOptions)}lookupSecondStage(n){let t=this.#o?.get(n);return t===void 0?Jt:es(t)}setSecondStage(n,t){zo(this.#o??=new Map,n,Ji(t),Vo.secondStage)}lookupThirdStage(n){let t=this.#r?.get(n);return t===void 0?Jt:es(t)}setThirdStage(n,t){zo(this.#r??=new Map,n,Ji(t),Vo.thirdStage)}};function eo(e){return e.map(n=>({fen:n.fen,color:n.color,events:n.events.map(Qn)}))}s(eo,"copyTrackingEntries");var Qo=class e{static{s(this,"GameHistory")}#e=[];#n=[];#t=!0;#o;#r=!0;constructor(n=!1){this.#o=n}get takebackFens(){return[...this.#e]}get trackingEntries(){return eo(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=eo(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=eo(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:eo(this.#n.slice(0,-1))}}commitTakeback(n){this.#e=[...n.takebackFens],this.#n=eo(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=s(()=>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(Qn)})}};function ts(e,n,t,o){let r=e.board.squareAt(n),a=[];switch(t.kind){case"mon":{let i=t.mon;if(i.color!==e.activeColor||Ee(i))break;if(e.playerCanMoveMon()&&a.push(...e.nextInputsFromLocations(Qe(n),_.MonMove,o,u=>{let c=e.board.get(u),l=e.board.squareAt(u),A;switch(c?.kind){case"mon":case"mon-with-mana":case"mon-with-consumable":A=!1;break;case"mana":A=i.kind===I.Drainer;break;case"consumable":case void 0:A=!0;break}if(!A)return!1;switch(l.kind){case"regular":case"consumable-base":case"mana-base":case"mana-pool":return!0;case"supermana-base":return i.kind===I.Drainer&&(c===void 0||c.kind==="mana"&&c.mana.kind==="supermana");case"mon-base":return l.monKind===i.kind&&l.color===i.color}})),r.kind!=="mon-base"&&e.playerCanUseAction())switch(i.kind){case I.Angel:case I.Drainer:break;case I.Mystic:{let u=e.board.findAwakeAngel(Pn(e.activeColor));a.push(...e.nextInputsFromLocations(so(n),_.MysticAction,o,c=>{let l=e.board.get(c);if(l===void 0||ur(u,c))return!1;let A=Q(l);return A!==void 0&&i.color!==A.color&&!Ee(A)}));break}case I.Demon:{let u=e.board.findAwakeAngel(Pn(e.activeColor));a.push(...e.nextInputsFromLocations(co(n),_.DemonAction,o,c=>{let l=e.board.get(c),A=ba(n,c),d=e.board.squareAt(A);if(l===void 0||ur(u,c)||e.board.get(A)!==void 0||d.kind==="supermana-base"||d.kind==="mon-base")return!1;let f=Q(l);return f!==void 0&&i.color!==f.color&&!Ee(f)}));break}case I.Spirit:a.push(...e.nextInputsFromLocations(uo(n),_.SpiritTargetCapture,o,u=>{let c=e.board.get(u);return c===void 0?!1:la(c)}));break}break}case"mana":t.mana.kind==="regular"&&t.mana.color===e.activeColor&&e.playerCanMoveMana()&&a.push(...e.nextInputsFromLocations(Qe(n),_.ManaMove,o,i=>br(e.board,i)));break;case"mon-with-mana":t.mon.color===e.activeColor&&e.playerCanMoveMon()&&a.push(...e.nextInputsFromLocations(Qe(n),_.MonMove,o,i=>{let u=e.board.get(i),c=e.board.squareAt(i);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 Yn(c)?!0:c.kind==="supermana-base"&&t.mana.kind==="supermana"}}));break;case"mon-with-consumable":{let i=t.mon;if(i.color!==e.activeColor)break;e.playerCanMoveMon()&&a.push(...e.nextInputsFromLocations(Qe(n),_.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 Yn(l)}})),t.consumable===O.Bomb&&a.push(...e.nextInputsFromLocations(io(n),_.BombAttack,o,u=>{let c=e.board.get(u),l=c===void 0?void 0:Q(c);return l!==void 0&&i.color!==l.color&&!Ee(l)}));break}case"consumable":break}return a}s(ts,"generateSecondInputOptions");function os(e,n,t,o,r){let a=[],i=[],u=e.board.squareAt(r),c=e.board.get(r);switch(n){case _.MonMove:{let l=Q(t);if(l===void 0)return;if(i.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 A=vn(t);A!==void 0&&i.push({kind:"mana-dropped",mana:A,at:o}),i.push({kind:"pickup-mana",mana:c.mana,by:l,at:r});break}case"consumable":switch(c.consumable){case O.Bomb:case O.Potion:return;case O.BombOrPotion:ar(t)!==void 0||vn(t)!==void 0?i.push({kind:"pickup-potion",by:t,at:r}):(a.push(Fe({kind:"modifier",modifier:J.SelectBomb},_.SelectConsumable,t)),a.push(Fe({kind:"modifier",modifier:J.SelectPotion},_.SelectConsumable,t)));break}break}if(u.kind==="mana-pool"){let A=vn(t);A!==void 0&&i.push({kind:"mana-scored",mana:A,at:r})}break}case _.ManaMove:{if(t.kind!=="mana")return;let l=t.mana;if(i.push({kind:"mana-move",mana:l,from:o,to:r}),c!==void 0){if(c.kind!=="mon")return;i.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":i.push({kind:"mana-scored",mana:l,at:r});break;case"mon-base":case"supermana-base":return}break}case _.MysticAction:{if(t.kind!=="mon")return;if(i.push({kind:"mystic-action",mystic:t.mon,from:o,to:r}),c!==void 0){let l=Q(c);if(l===void 0)return;if(i.push({kind:"mon-fainted",mon:l,from:r,to:e.board.base(l)}),c.kind==="mon-with-mana"&&(c.mana.kind==="regular"?i.push({kind:"mana-dropped",mana:c.mana,at:r}):i.push({kind:"supermana-back-to-base",from:r,to:e.board.supermanaBase()})),c.kind==="mon-with-consumable")switch(c.consumable){case O.Bomb:i.push({kind:"bomb-explosion",at:r});break;case O.Potion:case O.BombOrPotion:return}}break}case _.DemonAction:{if(t.kind!=="mon")return;let l=t.mon;i.push({kind:"demon-action",demon:l,from:o,to:r});let A=!1,d=!1;if(c!==void 0){let f=Q(c);if(f===void 0)return;if(i.push({kind:"mon-fainted",mon:f,from:r,to:e.board.base(f)}),c.kind==="mon-with-mana"&&(c.mana.kind==="regular"?(A=!0,i.push({kind:"mana-dropped",mana:c.mana,at:r})):i.push({kind:"supermana-back-to-base",from:r,to:e.board.supermanaBase()})),c.kind==="mon-with-consumable")switch(c.consumable){case O.Bomb:d=!0,i.push({kind:"bomb-explosion",at:r}),i.push({kind:"mon-fainted",mon:l,from:r,to:e.board.base(l)});break;case O.Potion:case O.BombOrPotion:return}}if(!d&&(u.kind==="supermana-base"||u.kind==="mon-base")&&(A=!0),A)for(let f of Qe(r)){let b=e.board.get(f),p=e.board.squareAt(f);b!==void 0&&b.kind!=="consumable"||(Yn(p)?a.push(Fe({kind:"location",location:f},_.DemonAdditionalStep)):p.kind==="mon-base"&&p.monKind===l.kind&&p.color===l.color&&a.push(Fe({kind:"location",location:f},_.DemonAdditionalStep)))}break}case _.SpiritTargetCapture:{if(c===void 0)return;let l=Q(c),A=vn(c);a.push(...e.nextInputsFromLocations(Qe(r),_.SpiritTargetMove,void 0,d=>{let f=e.board.get(d),b=e.board.squareAt(d);if(!Ka(c,f))return!1;switch(b.kind){case"regular":case"consumable-base":case"mana-base":case"mana-pool":return!0;case"supermana-base":{let p=f?.kind==="mana"&&f.mana.kind==="supermana";return A?.kind==="supermana"||A===void 0&&l?.kind===I.Drainer&&(f===void 0||p)||l?.kind===I.Drainer&&p}case"mon-base":return l?.kind===b.monKind&&l.color===b.color&&A===void 0&&ar(c)===void 0}}));break}case _.BombAttack:{let l=Q(t);if(l===void 0)return;if(i.push({kind:"bomb-attack",by:l,from:o,to:r}),c!==void 0){let A=Q(c);if(A===void 0)return;if(i.push({kind:"mon-fainted",mon:A,from:r,to:e.board.base(A)}),c.kind==="mon-with-mana"&&(c.mana.kind==="regular"?i.push({kind:"mana-dropped",mana:c.mana,at:r}):i.push({kind:"supermana-back-to-base",from:r,to:e.board.supermanaBase()})),c.kind==="mon-with-consumable")switch(c.consumable){case O.Bomb:i.push({kind:"bomb-explosion",at:r});break;case O.Potion:case O.BombOrPotion:return}}break}case _.DemonAdditionalStep:case _.SpiritTargetMove:case _.SelectConsumable:break}return[i,a]}s(os,"compileSecondInput");function rs(e,n,t,o,r){let a=e.get(r),i=[],u=[];switch(n.kind){case _.SpiritTargetMove:{if(n.input.kind!=="location"||a===void 0)return;let c=n.input.location,l=e.get(c),A=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 O.Potion:case O.Bomb:return;case O.BombOrPotion:i.push(Fe({kind:"modifier",modifier:J.SelectBomb},_.SelectConsumable,a)),i.push(Fe({kind:"modifier",modifier:J.SelectPotion},_.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 O.Potion:case O.Bomb:return;case O.BombOrPotion:u.push({kind:"pickup-potion",by:a,at:c});break}break}break;case"mon-with-consumable":if(l.kind!=="consumable"||l.consumable!==O.BombOrPotion)return;u.push({kind:"pickup-potion",by:a,at:c});break;case"consumable":switch(l.kind){case"mana":case"consumable":return;case"mon":i.push(Fe({kind:"modifier",modifier:J.SelectBomb},_.SelectConsumable,l)),i.push(Fe({kind:"modifier",modifier:J.SelectPotion},_.SelectConsumable,l));break;case"mon-with-mana":case"mon-with-consumable":switch(a.consumable){case O.Potion:case O.Bomb:return;case O.BombOrPotion:u.push({kind:"pickup-potion",by:l,at:c});break}break}break}if(A.kind==="mana-pool"){let d=vn(a);d!==void 0&&u.push({kind:"mana-scored",mana:d,at:c})}break}case _.DemonAdditionalStep:{if(n.input.kind!=="location")return;let c=Q(t);if(c===void 0)return;let l=n.input.location;u.push({kind:"demon-additional-step",demon:c,from:r,to:l});let A=e.get(l);if(A?.kind==="consumable")switch(A.consumable){case O.Potion:case O.Bomb:return;case O.BombOrPotion:i.push(Fe({kind:"modifier",modifier:J.SelectBomb},_.SelectConsumable,t)),i.push(Fe({kind:"modifier",modifier:J.SelectPotion},_.SelectConsumable,t));break}break}case _.SelectConsumable:{if(n.input.kind!=="modifier")return;let c=Q(t);if(c===void 0)return;switch(n.input.modifier){case J.SelectBomb:u.push({kind:"pickup-bomb",by:c,at:r});break;case J.SelectPotion:u.push({kind:"pickup-potion",by:t,at:r});break}break}case _.MonMove:case _.ManaMove:case _.MysticAction:case _.DemonAction:case _.SpiritTargetCapture:case _.BombAttack:return}return[u,i]}s(rs,"compileThirdInput");function as(e,n,t){if(e.kind!=="modifier"||n.input.kind!=="location")return;let r=t.find(i=>St(i.input,e))?.actorMonItem,a=r===void 0?void 0:Q(r);if(!(r===void 0||a===void 0))switch(e.modifier){case J.SelectBomb:return{kind:"pickup-bomb",by:a,at:n.input.location};case J.SelectPotion:return{kind:"pickup-potion",by:r,at:n.input.location}}}s(as,"compileFourthInput");function is(e,n,t){let o=[],r=Array.from({length:121},()=>!1),a=s(i=>{let u=t([{kind:"location",location:i}]);if(u.kind!=="next-input-options"||u.nextInputs.length===0)return;let c=se(i);r[c]||(r[c]=!0,o.push(i))},"addWhenValid");for(let i of e.board.allMonsLocations(e.activeColor))a(i);if(Wa(e,o.length!==0,n.includeManaStartsWithPotionAction))for(let i of e.board.allFreeRegularManaLocations(e.activeColor))a(i);return o.length===0?{kind:"invalid-input"}:{kind:"locations-to-start-from",locations:o}}s(is,"suggestedInputToStartWith");function ss(e,n,t,o,r,a){let i=n[0];if(i?.kind!=="location")return{kind:"invalid-input"};let u=i.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 A=a&&e.requiresCounterCapacityFiltering(),d=e.secondInputOptions(u,c,t,t?void 0:l?.location);if(l===void 0){let P=o&&!A?Ma(d):d,L=e.applicableInputOptions(n,P,r,A,o);return L.length===0?{kind:"invalid-input"}:{kind:"next-input-options",nextInputs:L}}let f=l.location,b=d.find(P=>St(P.input,l));if(b===void 0)return{kind:"invalid-input"};let p=n[2],g=e.processSecondInput(b.kind,c,u,f,t),k=g?.[0]??[],x=g?.[1]??[];if(p===void 0){if(x.length!==0){let P=e.applicableInputOptions(n,x,r,A,o);return P.length===0?{kind:"invalid-input"}:{kind:"next-input-options",nextInputs:P}}return k.length===0?{kind:"invalid-input"}:e.resolveEvents(k,t)}let v=x.find(P=>St(P.input,p));if(v===void 0)return{kind:"invalid-input"};let M=n[3],w=e.processThirdInput(v,c,u,f,t);k.push(...w?.[0]??[]);let C=w?.[1]??[];if(M===void 0){if(C.length!==0){let P=e.applicableInputOptions(n,C,r,A,o);return P.length===0?{kind:"invalid-input"}:{kind:"next-input-options",nextInputs:P}}return k.length===0?{kind:"invalid-input"}:e.resolveEvents(k,t)}let S=as(M,v,C);return S===void 0?{kind:"invalid-input"}:(k.push(S),e.resolveEvents(k,t))}s(ss,"dispatchStagedInput");var an=class e{static{s(this,"MonsGame")}#e;#n;#t;#o;constructor(n=!1,t=hn,o){let r=o===void 0?new Kn(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 Qo(n),this.#t=new Ho,this.#o={board:s(()=>this.board,"board"),requiresCounterCapacityFiltering:s(()=>this.#c(),"requiresCounterCapacityFiltering"),secondInputOptions:s((...a)=>this.#g(...a),"secondInputOptions"),processSecondInput:s((...a)=>this.#m(...a),"processSecondInput"),processThirdInput:s((...a)=>this.#u(...a),"processThirdInput"),applicableInputOptions:s((...a)=>this.#k(...a),"applicableInputOptions"),resolveEvents:s((...a)=>this.#h(...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=Xi(n);if(o===void 0)return;let r=e.#a(t,o.board);return r.#r(o),r.#n.resetForLoadedFen(),r}fen(){return Yi(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[se(r)]=a;let o=gt.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??ga)}inspectInputGrammar(n,t){return this.#s(n,!0,!1,t,!1)}#s(n,t,o,r,a=!0){if(n.length>ot||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=is(this,r,A=>this.#s(A,!0,!0,r,a));return this.#t.setStartSuggestion(u,l),l}let i=n[0];if(n.length===1&&i?.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 ss(this.#o,n,t,o,r,a)}#c(){return this.turnNumber===Number.MAX_SAFE_INTEGER||this.whitePotionsCount===Number.MAX_SAFE_INTEGER||this.blackPotionsCount===Number.MAX_SAFE_INTEGER}#k(n,t,o,r,a){if(!r)return t;let i=s(c=>this.#A([...n,c.input],o),"applicable");if(!a)return t.filter(i);let u=t.find(i);return u===void 0?[]:[u]}#A(n,t){let o=`${t.includeManaStartsWithPotionAction?1:0}|${Aa(n)}`,r=this.#t.getCompletionViability(o);if(r!==void 0)return r;let a=this.#s(n,!0,!1,t,!1),i=(()=>{switch(a.kind){case"invalid-input":return!1;case"events":return Yr(this.#e,a.events);case"locations-to-start-from":return a.locations.some(u=>this.#A([...n,{kind:"location",location:u}],t));case"next-input-options":return a.nextInputs.some(u=>this.#A([...n,u.input],t))}})();return this.#t.setCompletionViability(o,i),i}#g(n,t,o,r){let a=String(se(n)),i=this.#t.getSecondInputOptions(a);if(i!==void 0)return i;let u=ts(this,n,t,r);return o&&this.#t.setSecondInputOptions(a,u),u}#m(n,t,o,r,a){let i=`${n}|${ro(t)}|${se(o)}|${se(r)}`,u=this.#t.lookupSecondStage(i);if(u!==Jt)return u;let c=os(this,n,t,o,r);return a&&this.#t.setSecondStage(i,c),c}#u(n,t,o,r,a){let i=`${ir(n.input)}|${n.kind}|${n.actorMonItem===void 0?"":ro(n.actorMonItem)}|${ro(t)}|${se(o)}|${se(r)}`,u=this.#t.lookupThirdStage(i);if(u!==Jt)return u;let c=rs(this.board,n,t,o,r);return a&&this.#t.setThirdStage(i,c),c}#h(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.#f(n,this.#n.eventApplicationTrackingEnabled)}forkAndApplyEventsForSimulation(n){let t=this.fork(),o=t.#f(n,!1);return o===void 0?void 0:{game:t,events:o}}#f(n,t){if(!Yr(this.#e,n))return;if(this.invalidateProcessInputCache(),!t)return Wo(this.#e,n).events;let o=s(()=>this.fen(),"snapshotFen");this.#n.beginEventApplication(o,this.activeColor);let r=Wo(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 Ca(n,t,o,r)}availableMoveKinds(){let n=new Map;return n.set(Be.MonMove,ie-this.monsMovesCount),n.set(Be.Action,0),n.set(Be.Potion,0),n.set(Be.ManaMove,0),this.turnNumber===1||(n.set(Be.Action,Ue-this.actionsUsedCount),n.set(Be.Potion,this.playerPotionsCount()),n.set(Be.ManaMove,wn-this.manaMovesCount)),n}winnerColor(){return Io(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(Pn(this.activeColor)).length>n.board.faintedMonsLocations(Pn(n.activeColor)).length}isFirstTurn(){return mt(this)}playerPotionsCount(){return So(this)}playerCanMoveMon(){return Ua(this)}playerCanMoveMana(){return ja(this)}playerCanUseAction(){return Ga(this)}};function qo(e){let n={i:e.row,j:e.column};if(!Number.isInteger(e.row)||!Number.isInteger(e.column)||!bn(n))throw new RangeError(`position must contain integer row and column values from 0 through ${10}`);return n}s(qo,"toEnginePosition");function te(e){return{row:e.i,column:e.j}}s(te,"fromEnginePosition");function An(e){return{kind:e.kind,color:e.color,cooldown:e.cooldown}}s(An,"fromEngineMon");function no(e){return e.kind==="supermana"?{kind:"supermana"}:{kind:"regular",color:e.color}}s(no,"fromEngineMana");function Mt(e){switch(e.kind){case"mon":return{kind:"mon",mon:An(e.mon)};case"mana":return{kind:"mana",mana:no(e.mana)};case"mon-with-mana":return{kind:"mon",mon:An(e.mon),carrying:{kind:"mana",mana:no(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}}}s(Mt,"fromEngineItem");function cs(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}}}s(cs,"fromEngineSquare");function Xr(e){switch(e.kind){case"takeback":return{kind:"takeback"};case"position":return{kind:"location",location:qo(e.position)};case"modifier":return{kind:"modifier",modifier:e.modifier}}}s(Xr,"toEngineInput");function Zr(e){switch(e.kind){case"takeback":return{kind:"takeback"};case"location":return{kind:"position",position:te(e.location)};case"modifier":return{kind:"modifier",modifier:e.modifier}}}s(Zr,"fromEngineInput");function Pu(e){let n=Zr(e.input),t=e.actorMonItem===void 0?{}:{actor:Mt(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}}}s(Pu,"fromEngineInputOption");function $o(e){switch(e.kind){case"mon-move":return{kind:e.kind,item:Mt(e.item),from:te(e.from),to:te(e.to)};case"mana-move":return{kind:e.kind,mana:no(e.mana),from:te(e.from),to:te(e.to)};case"mana-scored":case"mana-dropped":return{kind:e.kind,mana:no(e.mana),at:te(e.at)};case"mystic-action":return{kind:e.kind,mystic:An(e.mystic),from:te(e.from),to:te(e.to)};case"demon-action":case"demon-additional-step":return{kind:e.kind,demon:An(e.demon),from:te(e.from),to:te(e.to)};case"spirit-target-move":return{kind:e.kind,item:Mt(e.item),from:te(e.from),to:te(e.to),by:te(e.by)};case"pickup-bomb":return{kind:e.kind,by:An(e.by),at:te(e.at)};case"pickup-potion":return{kind:e.kind,by:Mt(e.by),at:te(e.at)};case"use-potion":case"supermana-back-to-base":return{kind:e.kind,from:te(e.from),to:te(e.to)};case"pickup-mana":return{kind:e.kind,mana:no(e.mana),by:An(e.by),at:te(e.at)};case"mon-fainted":return{kind:e.kind,mon:An(e.mon),from:te(e.from),to:te(e.to)};case"bomb-attack":return{kind:e.kind,by:An(e.by),from:te(e.from),to:te(e.to)};case"mon-awake":return{kind:e.kind,mon:An(e.mon),at:te(e.at)};case"bomb-explosion":return{kind:e.kind,at:te(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}}}s($o,"fromEngineEvent");function Jr(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(te)};case"next-input-options":return{kind:"awaiting-input",inputFen:n,options:e.nextInputs.map(Pu)};case"events":return{kind:"complete",inputFen:n,events:e.events.map($o)}}}s(Jr,"fromEngineOutput");function us(e){return{monMoves:e.get(Be.MonMove)??0,manaMoves:e.get(Be.ManaMove)??0,actions:e.get(Be.Action)??0,potions:e.get(Be.Potion)??0}}s(us,"availableMoveCountsFromEngine");function vu(e){if(e!=="")return Et(e)}s(vu,"parseReplayMove");function Yo(e,n,t,o){let r=0,a=0;for(;r<n.length||a<t.length;){let i=e.activeColor===y.White,l=(i?n:t)[i?r:a];if(l===void 0)return{status:"missing-move",whiteMovesProcessed:r,blackMovesProcessed:a};let A=vu(l);if(A===void 0)return{status:"invalid-move",whiteMovesProcessed:r,blackMovesProcessed:a};let d=e.processInput(A,!1,!1);if(d.kind!=="events"||d.events.length===0)return{status:"invalid-move",whiteMovesProcessed:r,blackMovesProcessed:a};i?r+=1:a+=1;let f={whiteMovesProcessed:r,blackMovesProcessed:a};if(o?.(e,f)===!1)return{status:"stopped",...f}}return{status:"complete",whiteMovesProcessed:r,blackMovesProcessed:a}}s(Yo,"replayInterleavedMoves");var ea=class e{static{s(this,"Game")}#e;constructor(n={}){let{variant:t=R.Classic}=n;if(!Tu(t))throw new TypeError(`unsupported game variant: ${String(t)}`);this.#e=new an(!0,t)}static#n(n){let t=new e({variant:n.variant()});return t.#e=n,t}static fromFen(n){let t=an.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($o),eventsFen:Hi(n.events)}))}toFen(){return this.#e.fen()}preview(n){let t=n.map(Xr);return this.#t(t,st(t))}play(n){let t=n.map(Xr);return this.#o(t,st(t))}playFen(n){let t=Et(n);return t===void 0?{kind:"invalid",inputFen:n}:this.#o(t,st(t))}#t(n,t){let o=n.length===1&&n[0]?.kind==="takeback"?this.#e.copy():this.#e.fork();return Jr(o.processInput(n,!1,!1),t)}#o(n,t){let o=Jr(this.#e.processInput(n,!1,!1),t);return o.kind==="complete"?o:{kind:"invalid",inputFen:t}}itemAt(n){let t=this.#e.board.get(qo(n));return t===void 0?void 0:Mt(t)}squareAt(n){return cs(this.#e.board.squareAt(qo(n)))}contentPositions(){let n=new Map;for(let[t]of this.#e.board.entries())n.set(ls(t.i,t.j),{row:t.i,column:t.j});for(let t of this.#e.board.allMonsBases())n.set(ls(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(!wu(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=an.fromFen(r?.fen??this.#e.fen(),!0);if(a===void 0)return;let i=n.lastIndexOf(a.fen());if(n.length>0&&i<0)return;let u=i<0?[]:n.slice(0,i+1);if(!u.some(c=>{let l=an.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 an(!0,this.#e.variant());return Yo(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 us(this.#e.availableMoveKinds())}suggestMove(n){if(!Ou(n))throw new TypeError(`unsupported automove preference: ${String(n)}`);let t=Gi(this.#e,n);if(t.output.kind!=="events")return;let o=Et(t.inputFen);if(o!==void 0)return{inputs:o.map(Zr),inputFen:t.inputFen,events:t.output.events.map($o)}}};function wu(e){return e===y.White||e===y.Black}s(wu,"isColor");function Tu(e){return Object.values(R).includes(e)}s(Tu,"isGameVariant");function Ou(e){return e==="fast"||e==="normal"||e==="pro"}s(Ou,"isAutomovePreference");function ls(e,n){return`${e},${n}`}s(ls,"positionKey");function xu(e){let n=ds(e.white.fen),t=ds(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 an(!1,n.variant()),i;return Yo(a,e.white.moves,e.black.moves,(u,{whiteMovesProcessed:c,blackMovesProcessed:l})=>{let A=u.winnerColor();if(A===void 0)return!0;let d=A===y.White?c===e.white.moves.length:l===e.black.moves.length,f=A===y.White?o:r;return i=d&&f===u.fen()?{kind:"winner",winner:A}:{kind:"invalid"},!1}),i??{kind:"invalid"}}s(xu,"resolveMatch");function ds(e){let n=an.fromFen(e,!1);return n?.fen()===e?n:void 0}s(ds,"submittedGame");export{y as Color,O as Consumable,ea as Game,R as GameVariant,J as Modifier,I as MonKind,xu as resolveMatch};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "mons-rules",
3
- "version": "0.4.8",
3
+ "version": "0.4.11",
4
4
  "description": "TypeScript rules engine for Super Metal Mons",
5
5
  "type": "module",
6
6
  "license": "CC0-1.0",