( function ( ) { var aa = "pawn knight bishop rook queen king" . split ( " " ) ; function ba ( a , b ) { return "abcdefgh" [ b ] + "12345678" [ a ] } function ca ( a ) { return "abcdefgh" . indexOf ( a [ 0 ] ) + 8 * "12345678" . indexOf ( a [ 1 ] ) } function g ( a ) { return ba ( a >>> 3 , a & 7 ) } ; function n ( a , b ) { this . a = a >>> 0 ; this . b = b >>> 0 } function da ( a ) { a >>>= 0 ; a -= a >>> 1 & 1431655765 ; a = ( a & 858993459 ) + ( a >>> 2 & 858993459 ) ; return 16843009 * ( a + ( a >>> 4 ) & 252645135 ) >>> 24 } function ea ( a ) { a >>>= 0 ; return ( a & a - 1 ) >>> 0 } function fa ( a ) { a >>>= 0 ; return da ( ( a & - a ) - 1 ) } function p ( a ) { return da ( a . a ) + da ( a . b ) } function ha ( a ) { return a . a ? fa ( a . a ) : 32 + fa ( a . b ) } function t ( a ) { var b = ha ( a ) ; a . a ? a . a = ea ( a . a ) : a . b = ea ( a . b ) ; return b } function u ( a ) { return ! a . a && ! a . b } function v ( a , b ) { b >>>= 0 ; return 32 > b ? ! ( a . a & 1 << b ) : ! ( a . b & 1 << b - 32 ) }
function w ( a , b ) { b >>>= 0 ; 32 > b ? a . a = ( a . a | 1 << b ) >>> 0 : a . b = ( a . b | 1 << b - 32 ) >>> 0 ; return a } function ia ( a , b ) { b >>>= 0 ; 32 > b ? a . a = ( a . a & ~ ( 1 << b ) ) >>> 0 : a . b = ( a . b & ~ ( 1 << b - 32 ) ) >>> 0 } n . prototype . and = function ( a ) { this . a = ( this . a & a . a ) >>> 0 ; this . b = ( this . b & a . b ) >>> 0 ; return this } ; function x ( a , b ) { a . a = ( a . a & ~ b . a ) >>> 0 ; a . b = ( a . b & ~ b . b ) >>> 0 ; return a } n . prototype . or = function ( a ) { this . a = ( this . a | a . a ) >>> 0 ; this . b = ( this . b | a . b ) >>> 0 ; return this } ; n . prototype . xor = function ( a ) { this . a = ( this . a ^ a . a ) >>> 0 ; this . b = ( this . b ^ a . b ) >>> 0 ; return this } ;
function ja ( a ) { a . a = ~ a . a >>> 0 ; a . b = ~ a . b >>> 0 ; return a } function y ( a , b ) { b >>>= 0 ; 31 < b ? ( a . b = a . a << b - 32 >>> 0 , a . a = 0 ) : 0 < b && ( a . b = ( a . b << b | a . a >>> 32 - b ) >>> 0 , a . a = a . a << b >>> 0 ) ; return a } function z ( a , b ) { b >>>= 0 ; 31 < b ? ( a . a = a . b >>> b - 32 , a . b = 0 ) : 0 < b && ( a . a = ( a . a >>> b | a . b << 32 - b ) >>> 0 , a . b >>>= b ) ; return a } function A ( a , b ) { 63 < b || - 63 > b ? a . a = a . b = 0 : 0 < b ? y ( a , b ) : 0 > b && z ( a , - b ) ; return a } function ka ( a , b ) { return a . a === b . a && a . b === b . b } function C ( a ) { return D ( a . a , a . b ) } function D ( a , b ) { return new n ( a , b ) } function F ( a ) { return w ( D ( 0 , 0 ) , a ) }
function la ( ) { var a = ma ; return A ( D ( 270549120 , 16909320 ) . and ( A ( D ( 4294967295 , 4294967295 ) , 8 * a ) ) , a ) } function na ( ) { var a = oa ; return A ( D ( 134480385 , 2151686160 ) . and ( A ( D ( 4294967295 , 4294967295 ) , 8 * - a ) ) , a ) } function pa ( ) { var a = w ( D ( 0 , 0 ) , qa ) , b = x ( z ( C ( a ) , 1 ) , G [ 7 ] ) , c = x ( x ( z ( C ( a ) , 2 ) , G [ 7 ] ) , G [ 6 ] ) , d = x ( y ( C ( a ) , 1 ) , G [ 0 ] ) ; a = x ( x ( y ( C ( a ) , 2 ) , G [ 0 ] ) , G [ 1 ] ) ; c = c . or ( a ) ; b = b . or ( d ) ; return y ( C ( c ) , 8 ) . or ( z ( c , 8 ) ) . or ( y ( C ( b ) , 16 ) ) . or ( z ( b , 16 ) ) }
function ra ( ) { var a = w ( D ( 0 , 0 ) , sa ) , b = x ( z ( C ( a ) , 1 ) , G [ 7 ] ) . or ( x ( y ( C ( a ) , 1 ) , G [ 0 ] ) ) , c = z ( C ( a ) . or ( b ) , 8 ) ; a = y ( C ( a ) . or ( b ) , 8 ) ; return b . or ( c ) . or ( a ) } for ( var ta = D ( 4294967295 , 4294967295 ) , ua = D ( 1437226410 , 1437226410 ) , va = D ( 2857740885 , 2857740885 ) , wa = [ ] , xa = 0 ; 8 > xa ; ++ xa ) wa . push ( y ( D ( 16843009 , 16843009 ) , xa ) ) ; for ( var G = wa , H = [ ] , ya = 0 ; 8 > ya ; ++ ya ) H . push ( y ( D ( 255 , 0 ) , 8 * ya ) ) ; for ( var za = [ ] , ma = - 7 ; 8 > ma ; ++ ma ) za . push ( la ( ) ) ; for ( var Aa = [ ] , oa = - 7 ; 8 > oa ; ++ oa ) Aa . push ( na ( ) ) ; for ( var Ba = [ ] , qa = 0 ; 64 > qa ; ++ qa ) Ba . push ( pa ( ) ) ; for ( var Ca = [ ] , sa = 0 ; 64 > sa ; ++ sa ) Ca . push ( ra ( ) ) ; function Da ( a , b ) { this . b = a >>> 0 ; this . a = b >>> 0 } for ( var Ea = [ ] , Fa = 0 ; 1586 > Fa ; ++ Fa ) Ea . push ( 1 + 4294967295 * Math . random ( ) >>> 0 ) ; function I ( a , b ) { a . b = ( a . b ^ Ea [ b ] ) >>> 0 ; a . a = ( a . a ^ Ea [ b + 1 ] ) >>> 0 } function J ( a , b ) { 0 <= b && I ( a , 1570 + ( b & 7 ) ) } ; function L ( a , b , c , d , f ) { this . value = b & 63 | ( a & 63 ) << 6 | ( c & 15 ) << 12 | ( d & 7 ) << 16 | ( ( f | 0 ) & 7 ) << 19 } function M ( a ) { return a . value >>> 6 & 63 } function N ( a ) { return a . value >>> 12 & 15 } function O ( a ) { return a . value >>> 16 & 7 } function P ( a ) { return 2 === N ( a ) || 3 === N ( a ) } function Ga ( a ) { return 5 !== N ( a ) ? a . value & 63 : ( a . value & 63 ) + ( M ( a ) < ( a . value & 63 ) ? - 8 : 8 ) } ; function Ha ( ) { this . b = new Da ( 0 , 0 ) ; this . a = [ C ( H [ 1 ] ) . or ( H [ 6 ] ) , F ( 1 ) . or ( F ( 6 ) ) . or ( F ( 57 ) ) . or ( F ( 62 ) ) , F ( 2 ) . or ( F ( 5 ) ) . or ( F ( 58 ) ) . or ( F ( 61 ) ) , F ( 0 ) . or ( F ( 7 ) ) . or ( F ( 56 ) ) . or ( F ( 63 ) ) , F ( 3 ) . or ( F ( 59 ) ) , F ( 4 ) . or ( F ( 60 ) ) , C ( H [ 0 ] ) . or ( H [ 1 ] ) , C ( H [ 6 ] ) . or ( H [ 7 ] ) ] ; this . h = [ ] ; this . c = 0 ; this . g = 15 ; this . f = - 1 ; this . l = 0 ; this . i = [ ] ; this . j = [ ] ; for ( var a = this . h . length = 0 ; 64 > a ; ++ a ) { var b ; a : { for ( b = 0 ; 5 >= b ; ++ b ) if ( ! v ( this . a [ b ] , a ) ) break a ; b = null } this . h . push ( b ) } this . b = new Da ( 0 , 0 ) ; this . c && I ( this . b , 0 ) ; for ( a = 0 ; 1 >= a ; ++ a ) for ( b = 0 ; 5 >= b ; ++ b ) { var c = this . b , d = b , f = a , e =
Q ( this , b , a ) ; for ( e = C ( e ) ; ! u ( e ) ; ) { var h = t ( e ) ; I ( c , 2 + d + 6 * f + 12 * h ) } } I ( this . b , 1538 + this . g ) ; J ( this . b , this . f ) ; this . m = [ ] } var R = [ 7 , 63 , 0 , 56 ] , Ia = [ ja ( y ( D ( 16843009 , 16843009 ) , 7 ) ) , ta , ja ( y ( D ( 16843009 , 16843009 ) , 0 ) ) ] ; function S ( a , b , c ) { c = Ja ( a , ! ! c ) ; return b ? c : c . filter ( Ha . prototype . o , a ) } function Q ( a , b , c ) { return C ( a . a [ b ] ) . and ( a . a [ 6 + c ] ) } function Ka ( a ) { return C ( a . a [ 6 ] ) . or ( a . a [ 7 ] ) } function U ( a ) { return La ( a , a . c ^ 1 , ha ( Q ( a , 5 , a . c ) ) ) }
function V ( a , b , c , d ) { var f = D ( 0 , 0 ) ; c = 8 * c + d ; d = Ia [ 1 + d ] ; for ( A ( a , c ) ; ! u ( a . and ( d ) ) ; A ( x ( a , b ) , c ) ) f . or ( a ) ; return f } function Ma ( a , b ) { return V ( C ( a ) , b , 1 , 1 ) . or ( V ( C ( a ) , b , 1 , - 1 ) ) . or ( V ( C ( a ) , b , - 1 , 1 ) ) . or ( V ( C ( a ) , b , - 1 , - 1 ) ) } function Pa ( a , b ) { return V ( C ( a ) , b , 0 , 1 ) . or ( V ( C ( a ) , b , 0 , - 1 ) ) . or ( V ( C ( a ) , b , 1 , 0 ) ) . or ( V ( C ( a ) , b , - 1 , 0 ) ) }
function La ( a , b , c ) { var d = Q ( a , 0 , b ) , f = 0 === b ; var e = A ( x ( C ( d ) , G [ 0 ] ) , f ? 7 : - 9 ) ; d = A ( x ( C ( d ) , G [ 7 ] ) , f ? 9 : - 7 ) ; e = e . or ( d ) ; if ( ! v ( e , c ) ) return ! 0 ; e = Q ( a , 1 , b ) ; if ( ! u ( C ( Ba [ c ] ) . and ( e ) ) ) return ! 0 ; e = Q ( a , 5 , b ) ; if ( ! u ( C ( Ca [ c ] ) . and ( e ) ) ) return ! 0 ; e = Ka ( a ) ; d = Q ( a , 4 , b ) ; f = C ( Q ( a , 2 , b ) ) . or ( d ) ; f = Ma ( f , e ) ; if ( ! v ( f , c ) ) return ! 0 ; a = C ( Q ( a , 3 , b ) ) . or ( d ) ; a = Pa ( a , e ) ; return v ( a , c ) ? ! 1 : ! 0 } function W ( a , b , c ) { I ( a . b , 1538 + a . g ) ; a . g &= ~ ( 1 << b + ( c ? 0 : 2 ) ) ; I ( a . b , 1538 + a . g ) }
function Qa ( a , b , c ) { if ( 0 === ( a . g & 1 << b + ( c ? 0 : 2 ) ) ) return ! 1 ; var d = c ? 1 : - 1 , f = 0 === b ? 4 : 60 , e = Ka ( a ) ; ( d = ! v ( e , f + d ) || ! v ( e , f + 2 * d ) || ! c && ! v ( e , f + 3 * d ) ) || ( d = b ^ 1 , c = c ? 1 : - 1 , b = 0 === b ? 4 : 60 , d = ! ( ! La ( a , d , b ) && ! La ( a , d , b + c ) && ! La ( a , d , b + 2 * c ) ) ) ; return d ? ! 1 : ! 0 } function Ra ( a ) { var b = a . b ; return 3 <= a . m . reduce ( function ( a , d ) { return a + ( d . b === b . b && d . a === b . a ? 1 : 0 ) } , 0 ) }
function Sa ( a ) { if ( ! u ( a . a [ 0 ] ) || ! u ( a . a [ 3 ] ) || ! u ( a . a [ 4 ] ) ) return ! 1 ; if ( 4 > p ( a . a [ 6 ] ) + p ( a . a [ 7 ] ) ) return ! 0 ; if ( ! u ( a . a [ 1 ] ) ) return ! 1 ; a = a . a [ 2 ] ; return ka ( C ( a ) . and ( ua ) , a ) || ka ( C ( a ) . and ( va ) , a ) ? ! 0 : ! 1 } function Ta ( a ) { return 100 <= a . l || Ra ( a ) || Sa ( a ) }
function Ja ( a , b ) { function c ( a , b , c ) { for ( ; ! u ( a ) ; ) { var d = t ( a ) ; e . push ( new L ( d - b , d , c , 0 , K . h [ d ] ) ) } } function d ( a , b , d ) { c ( C ( a ) , b , d ? 15 : 11 ) ; c ( C ( a ) , b , d ? 14 : 10 ) ; c ( C ( a ) , b , d ? 13 : 9 ) ; c ( C ( a ) , b , d ? 12 : 8 ) } function f ( a , b , d ) { for ( ; ! u ( b ) ; ) { var c = t ( b ) ; v ( db , c ) && e . push ( new L ( a , c , v ( l , c ) ? 0 : 4 , d , K . h [ c ] ) ) } } var e = [ ] , h = a . c , l = a . a [ 6 + ( h ^ 1 ) ] , k = Ka ( a ) , K = a , r = 1 - 2 * h , B = 8 * r , q = Q ( a , 0 , h ) , m = H [ h ? 0 : 7 ] ; if ( ! b ) { var E = x ( x ( A ( C ( q ) . and ( H [ h ? 6 : 1 ] ) , 2 * B ) , k ) , A ( C ( k ) , B ) ) ; c ( E , 2 * B , 1 ) ; E = x ( A ( C ( q ) , B ) , k ) ; c ( x ( C ( E ) , m ) , B , 0 ) ; d ( C ( E ) . and ( m ) , B , ! 1 ) } var Na = G [ h ? 7 : 0 ] ; E = B - r ; var T = A ( x ( C ( q ) ,
Na ) , E ) . and ( l ) ; c ( x ( C ( T ) , m ) , E , 4 ) ; d ( C ( T ) . and ( m ) , E , ! 0 ) ; T = G [ h ? 0 : 7 ] ; B += r ; var Oa = A ( x ( C ( q ) , T ) , B ) . and ( l ) ; c ( x ( C ( Oa ) , m ) , B , 4 ) ; d ( C ( Oa ) . and ( m ) , B , ! 0 ) ; 0 <= a . f && ( m = A ( x ( F ( a . f + r ) . and ( q ) , Na ) , E ) , c ( m , E , 5 ) , r = A ( x ( F ( a . f - r ) . and ( q ) , T ) , B ) , c ( r , B , 5 ) ) ; var db = a . a [ 6 + h ] ; r = b ? l : ta ; for ( q = C ( Q ( a , 1 , h ) ) ; ! u ( q ) ; ) m = t ( q ) , f ( m , C ( Ba [ m ] ) . and ( r ) , 1 ) ; for ( q = C ( Q ( a , 4 , h ) ) ; ! u ( q ) ; ) m = t ( q ) , f ( m , Ma ( F ( m ) , k ) . or ( Pa ( F ( m ) , k ) ) . and ( r ) , 4 ) ; for ( q = C ( Q ( a , 2 , h ) ) ; ! u ( q ) ; ) m = t ( q ) , f ( m , Ma ( F ( m ) , k ) . and ( r ) , 2 ) ; for ( q = C ( Q ( a , 3 , h ) ) ; ! u ( q ) ; ) m = t ( q ) , f ( m , Pa ( F ( m ) , k ) . and ( r ) , 3 ) ; k = ha ( Q ( a , 5 , h ) ) ;
f ( k , C ( Ca [ k ] ) . and ( r ) , 5 ) ; b || ( Qa ( a , h , ! 0 ) && e . push ( new L ( k , k + 2 , 2 , 5 , null ) ) , Qa ( a , h , ! 1 ) && e . push ( new L ( k , k - 2 , 3 , 5 , null ) ) ) ; return e } function Ua ( a , b , c , d , f ) { var e = F ( d ) . or ( F ( f ) ) ; a . a [ b ] . xor ( e ) ; a . a [ 6 + c ] . xor ( e ) ; a . h [ d ] = null ; a . h [ f ] = b ; I ( a . b , 2 + b + 6 * c + 12 * d ) ; I ( a . b , 2 + b + 6 * c + 12 * f ) } function Va ( a , b , c , d , f ) { ia ( a . a [ b ] , f ) ; w ( a . a [ c ] , f ) ; a . h [ f ] = c ; I ( a . b , 2 + b + 6 * d + 12 * f ) ; I ( a . b , 2 + c + 6 * d + 12 * f ) }
function Wa ( a , b ) { if ( N ( b ) & 4 ) { var c = b . value >>> 19 & 7 , d = a . c ^ 1 , f = Ga ( b ) ; ia ( a . a [ c ] , f ) ; ia ( a . a [ 6 + d ] , f ) ; a . h [ f ] = null ; I ( a . b , 2 + c + 6 * d + 12 * f ) } P ( b ) && ( c = a . c , d = 2 === N ( b ) , f = R [ c + ( d ? 0 : 2 ) ] , Ua ( a , 3 , c , f , f + ( d ? - 2 : 3 ) ) ) ; Ua ( a , O ( b ) , a . c , M ( b ) , b . value & 63 ) ; N ( b ) & 8 && Va ( a , 0 , N ( b ) & 8 ? 1 + ( N ( b ) & 3 ) : 0 , a . c , b . value & 63 ) }
function Xa ( a , b ) { N ( b ) & 8 && Va ( a , N ( b ) & 8 ? 1 + ( N ( b ) & 3 ) : 0 , 0 , a . c , b . value & 63 ) ; Ua ( a , O ( b ) , a . c , b . value & 63 , M ( b ) ) ; if ( P ( b ) ) { var c = a . c , d = 2 === N ( b ) , f = R [ c + ( d ? 0 : 2 ) ] ; Ua ( a , 3 , c , f + ( d ? - 2 : 3 ) , f ) } N ( b ) & 4 && ( c = b . value >>> 19 & 7 , d = a . c ^ 1 , b = Ga ( b ) , w ( a . a [ c ] , b ) , w ( a . a [ 6 + d ] , b ) , a . h [ b ] = c , I ( a . b , 2 + c + 6 * d + 12 * b ) ) } Ha . prototype . o = function ( a ) { Wa ( this , a ) ; var b = U ( this ) ; Xa ( this , a ) ; return ! b } ;
function X ( a , b ) { var c = a . b ; a . m . push ( new Da ( c . b , c . a ) ) ; Wa ( a , b ) ; if ( U ( a ) ) return Xa ( a , b ) , a . m . pop ( ) , ! 1 ; a . i . push ( b ) ; a . j . push ( a . f ) ; a . j . push ( a . g ) ; a . j . push ( a . l ) ; J ( a . b , a . f ) ; a . f = 1 === N ( b ) ? b . value & 63 : - 1 ; J ( a . b , a . f ) ; c = a . c ; 5 === O ( b ) ? ( W ( a , c , ! 0 ) , W ( a , c , ! 1 ) ) : 3 === O ( b ) && ( M ( b ) === R [ c + 0 ] ? W ( a , c , ! 0 ) : M ( b ) === R [ c + 2 ] && W ( a , c , ! 1 ) ) ; c ^= 1 ; 3 === ( b . value >>> 19 & 7 ) && ( Ga ( b ) === R [ c + 0 ] ? W ( a , c , ! 0 ) : Ga ( b ) === R [ c + 2 ] && W ( a , c , ! 1 ) ) ; N ( b ) & 4 || 0 === O ( b ) ? a . l = 0 : ++ a . l ; a . c = c ; I ( a . b , 0 ) ; return ! 0 }
function Y ( a ) { if ( a . i . length ) { var b = a . i . pop ( ) ; a . c ^= 1 ; I ( a . b , 0 ) ; Xa ( a , b ) ; a . j . pop ( ) ; I ( a . b , 1538 + a . g ) ; a . g = a . j . pop ( ) ; I ( a . b , 1538 + a . g ) ; J ( a . b , a . f ) ; a . f = a . j . pop ( ) ; J ( a . b , a . f ) ; a . m . pop ( ) } } ; var Ya = [ 100 , 300 , 300 , 500 , 900 , 2E4 ] , Za = [ [ 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 50 , 50 , 50 , 50 , 50 , 50 , 50 , 50 , 10 , 10 , 20 , 30 , 30 , 20 , 10 , 10 , 5 , 5 , 10 , 25 , 25 , 10 , 5 , 5 , 0 , 0 , 0 , 20 , 20 , 0 , 0 , 0 , 5 , - 5 , - 10 , 0 , 0 , - 10 , - 5 , 5 , 5 , 10 , 10 , - 20 , - 20 , 10 , 10 , 5 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ] , [ - 50 , - 40 , - 30 , - 30 , - 30 , - 30 , - 40 , - 50 , - 40 , - 20 , 0 , 0 , 0 , 0 , - 20 , - 40 , - 30 , 0 , 10 , 15 , 15 , 10 , 0 , - 30 , - 30 , 5 , 15 , 20 , 20 , 15 , 5 , - 30 , - 30 , 0 , 15 , 20 , 20 , 15 , 0 , - 30 , - 30 , 5 , 10 , 15 , 15 , 10 , 5 , - 30 , - 40 , - 20 , 0 , 5 , 5 , 0 , - 20 , - 40 , - 50 , - 40 , - 30 , - 30 , - 30 , - 30 , - 40 , - 50 ] , [ - 20 , - 10 , - 10 , - 10 , - 10 , - 10 , - 10 , - 20 , - 10 , 0 , 0 , 0 , 0 , 0 , 0 , - 10 , - 10 , 0 , 5 , 10 , 10 , 5 , 0 , - 10 , - 10 , 5 , 5 , 10 , 10 ,
5 , 5 , - 10 , - 10 , 0 , 10 , 10 , 10 , 10 , 0 , - 10 , - 10 , 10 , 10 , 10 , 10 , 10 , 10 , - 10 , - 10 , 5 , 0 , 0 , 0 , 0 , 5 , - 10 , - 20 , - 10 , - 10 , - 10 , - 10 , - 10 , - 10 , - 20 ] , [ 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 5 , 10 , 10 , 10 , 10 , 10 , 10 , 5 , - 5 , 0 , 0 , 0 , 0 , 0 , 0 , - 5 , - 5 , 0 , 0 , 0 , 0 , 0 , 0 , - 5 , - 5 , 0 , 0 , 0 , 0 , 0 , 0 , - 5 , - 5 , 0 , 0 , 0 , 0 , 0 , 0 , - 5 , - 5 , 0 , 0 , 0 , 0 , 0 , 0 , - 5 , 0 , 0 , 0 , 5 , 5 , 0 , 0 , 0 ] , [ - 20 , - 10 , - 10 , - 5 , - 5 , - 10 , - 10 , - 20 , - 10 , 0 , 0 , 0 , 0 , 0 , 0 , - 10 , - 10 , 0 , 5 , 5 , 5 , 5 , 0 , - 10 , - 5 , 0 , 5 , 5 , 5 , 5 , 0 , - 5 , 0 , 0 , 5 , 5 , 5 , 5 , 0 , - 5 , - 10 , 5 , 5 , 5 , 5 , 5 , 0 , - 10 , - 10 , 0 , 5 , 0 , 0 , 0 , 0 , - 10 , - 20 , - 10 , - 10 , - 5 , - 5 , - 10 , - 10 , - 20 ] , [ - 30 , - 40 , - 40 , - 50 , - 50 , - 40 , - 40 , - 30 , - 30 , - 40 , - 40 , - 50 , - 50 , - 40 , - 40 , - 30 , - 30 ,
- 40 , - 40 , - 50 , - 50 , - 40 , - 40 , - 30 , - 30 , - 40 , - 40 , - 50 , - 50 , - 40 , - 40 , - 30 , - 20 , - 30 , - 30 , - 40 , - 40 , - 30 , - 30 , - 20 , - 10 , - 20 , - 20 , - 20 , - 20 , - 20 , - 20 , - 10 , 20 , 20 , 0 , 0 , 0 , 0 , 20 , 20 , 20 , 30 , 10 , 0 , 0 , 10 , 30 , 20 ] ] , $a = Ya [ 0 ] / 2 ; function ab ( a , b ) { for ( var c = 0 , d = 0 ; 5 > d ; ++ d ) c += p ( Q ( a , d , b ) ) * Ya [ d ] ; 1 < p ( Q ( a , 2 , b ) ) && ( c += $a ) ; return c } function bb ( a , b ) { for ( var c = 0 , d = 0 ; 5 >= d ; ++ d ) for ( var f = C ( Q ( a , d , b ) ) ; ! u ( f ) ; ) { var e = t ( f ) ; c += Za [ d ] [ b ? e : 56 ^ e ] } return c }
function cb ( a ) { function b ( a ) { function b ( a ) { var b = N ( a ) & 4 ? ( 1 + ( a . value >>> 19 & 7 ) ) / ( 1 + O ( a ) ) : 0 ; b = 6 * b + O ( a ) ; b = 16 * b + N ( a ) ; b = 64 * b + ( a . value & 63 ) ; return b = 64 * b + M ( a ) } a . sort ( function ( a , c ) { return b ( c ) - b ( a ) } ) ; return a } function c ( a , d , e ) { if ( Ta ( a ) ) return 0 ; var h = ab ( a , 0 ) - ab ( a , 1 ) ; var l = bb ( a , 0 ) - bb ( a , 1 ) ; l = h + l ; ++ f ; if ( h = 0 === a . c ) { if ( l >= e ) return e ; d = l > d ? l : d } else { if ( l <= d ) return d ; e = l < e ? l : e } l = b ( S ( a , ! 0 , ! U ( a ) ) ) ; for ( var k = 0 ; k < l . length ; ++ k ) if ( X ( a , l [ k ] ) ) { var m = c ( a , d , e ) ; Y ( a ) ; if ( h ) { if ( m >= e ) return e ; d = m > d ? m : d } else { if ( m <= d ) return d ; e = m <
e ? m : e } } return h ? d : e } function d ( a , f , e , h ) { if ( 1 > f ) return c ( a , e , h ) ; for ( var l = b ( S ( a , ! 0 , ! 1 ) ) , k = 0 === a . c , m = ! 1 , r = 0 ; r < l . length ; ++ r ) if ( X ( a , l [ r ] ) ) { m = ! 0 ; var q = d ( a , f - 1 , e , h ) ; Y ( a ) ; k ? e = q > e ? q : e : h = q < h ? q : h ; if ( h <= e ) break } if ( ! m ) { if ( ! U ( a ) ) return 0 ; a = Ya [ 5 ] ; return k ? - a : a } return Ta ( a ) ? 0 : k ? e : h } for ( var f = 0 , e = null , h = - Infinity , l = Infinity , k = b ( S ( a , ! 0 ) ) , K = 0 ; K < k . length ; ++ K ) if ( X ( a , k [ K ] ) ) { var r = d ( a , 3 , h , l ) ; Y ( a ) ; 0 === a . c ? r > h && ( h = r , e = k [ K ] ) : r < l && ( l = r , e = k [ K ] ) } return e } ; function eb ( ) { this . a = new Ha }
function fb ( ) { var a = $ ( "<table>" ) , b = "<tr><th></th>" + "abcdefgh" . split ( "" ) . map ( function ( a ) { return '<th class="file">' + a + "</th>" } ) . join ( "" ) + "<th></th></tr>" ; a . append ( b ) ; for ( var c = 0 ; 8 > c ; ++ c ) { var d = 7 - c , f = $ ( "<tr>" ) ; a . append ( f ) ; var e = '<th class="rank">' + ( 8 - c ) + "</th>" ; f . append ( e ) ; for ( var h = 0 ; 8 > h ; ++ h ) { var l = $ ( "<td>" ) , k = ( d + h ) % 2 ? "light" : "dark" ; l . attr ( "id" , ba ( d , h ) ) ; l . attr ( "title" , "Algebraic: " + ba ( d , h ) + "\nRank: " + d + "\nFile: " + h + "\nIndex: " + ( h + 8 * d ) + "\nColor: " + k ) ; l . addClass ( k ) ; f . append ( l ) } f . append ( e ) } a . append ( b ) ; $ ( "#chessboard" ) . append ( a ) }
function gb ( ) { $ ( "#chessboard table tr td, #chessboard table tr td div" ) . removeClass ( "from to positional capture double-push en-passant promotion castle king-castle queen-castle" ) } function hb ( ) { $ ( "#chessboard table tr td div.ui-draggable" ) . draggable ( "destroy" ) ; $ ( "#chessboard table tr td.ui-droppable" ) . droppable ( "destroy" ) }
function ib ( a ) { var b = S ( a . a ) ; $ ( "#moves" ) . html ( '<a href="#" id="undo" class="' + ( a . a . i . length ? "can" : "cannot" ) + '">undo</a><br/><a href="#" id="auto" class="' + ( 0 < b . length ? "can" : "cannot" ) + '">auto</a><br/>' + b . map ( function ( a , b ) { return '<a href="#" id="' + b + '">' + ( P ( a ) ? "0-0" + ( 3 === N ( a ) ? "-0" : "" ) : " NBRQK" . charAt ( O ( a ) ) + g ( M ( a ) ) + ( N ( a ) & 4 ? "x" : "-" ) + g ( a . value & 63 ) + ( 5 === N ( a ) ? "e.p." : "" ) + ( N ( a ) & 8 ? " NBRQK" . charAt ( N ( a ) & 8 ? 1 + ( N ( a ) & 3 ) : 0 ) : "" ) ) + "</a><br/>" } ) . join ( "" ) ) ; $ ( "#chessboard table tr td, #chessboard table tr td div" ) . removeClass ( "can-move" ) ;
b . forEach ( function ( a ) { a = $ ( "#" + g ( M ( a ) ) ) ; a . add ( a . children ( ) ) . addClass ( "can-move" ) } ) ; var c = ! 1 ; $ ( "#chessboard table tr td div.can-move" ) . mouseenter ( function ( ) { if ( ! c ) { var d = $ ( this ) , f = d . parent ( ) , e = ca ( "" + f . attr ( "id" ) ) ; f = f . add ( d ) ; f . toggleClass ( "from" , b . some ( function ( a ) { return M ( a ) === e } ) ) ; f . hasClass ( "from" ) && ( b . forEach ( function ( a ) { if ( M ( a ) === e ) { var b = $ ( "#" + g ( a . value & 63 ) ) ; b = b . add ( b . children ( ) ) ; b . addClass ( "to" ) ; b . addClass ( 0 === N ( a ) ? "positional" : "" ) ; b . addClass ( N ( a ) & 4 ? "capture" : "" ) ; b . addClass ( 1 === N ( a ) ? "double-push" :
"" ) ; b . addClass ( 5 === N ( a ) ? "en-passant" : "" ) ; b . addClass ( N ( a ) & 8 ? "promotion" : "" ) ; b . addClass ( P ( a ) ? "castle" : "" ) ; b . addClass ( 2 === N ( a ) ? "king-castle" : "" ) ; b . addClass ( 3 === N ( a ) ? "queen-castle" : "" ) } } ) , hb ( ) , $ ( "#chessboard table tr td.to" ) . droppable ( { drop : function ( ) { var c = ca ( "" + $ ( this ) . attr ( "id" ) ) , d = b . filter ( function ( a ) { return M ( a ) === e && ( a . value & 63 ) === c } ) ; 0 < d . length ? ( X ( a . a , d [ 0 ] ) , Z ( a ) ) : ( gb ( ) , hb ( ) ) } } ) , d . draggable ( { start : function ( ) { c = ! 0 } , stop : function ( ) { c = ! 1 } , containment : "#chessboard table" , zIndex : 10 , revert : "invalid" } ) ) } } ) . mouseleave ( function ( ) { c ||
gb ( ) } ) ; $ ( "#moves a" ) . click ( function ( ) { var c = $ ( this ) . attr ( "id" ) ; "undo" === c ? ( Y ( a . a ) , Y ( a . a ) , Z ( a ) ) : "auto" === c ? jb ( a ) : ( X ( a . a , b [ parseInt ( c , 10 ) ] ) , Z ( a ) ) } ) }
function jb ( a ) { $ ( "#moves" ) . html ( "" ) ; var b = $ ( "#dim" ) ; b . fadeIn ( function ( ) { var c = cb ( a . a ) ; if ( ! c ) throw Error ( "Move not found" ) ; X ( a . a , c ) ; var d = $ ( "#" + g ( M ( c ) ) ) ; c = $ ( "#" + g ( c . value & 63 ) ) ; var f = c . offset ( ) . left - d . offset ( ) . left , e = c . offset ( ) . top - d . offset ( ) . top , h = d . children ( "div" ) ; h . css ( { position : "relative" , top : "0px" , left : "0px" } ) ; b . fadeOut ( function ( ) { h . animate ( { top : e + "px" , left : f + "px" } , function ( ) { Z ( a ) } ) } ) } ) }
function Z ( a ) { gb ( ) ; hb ( ) ; $ ( "#chessboard table tr td div" ) . remove ( ) ; $ ( "#chessboard table tr td" ) . removeClass ( "white black turn last-move " + aa . join ( " " ) ) ; for ( var b = a . a . a [ 6 ] , c = a . a . a [ 7 ] , d = 0 ; 64 > d ; ++ d ) for ( var f = $ ( "#" + g ( d ) ) , e = 0 ; 5 >= e ; ++ e ) if ( ! v ( a . a . a [ e ] , d ) ) { var h = 0 === a . a . c ? ! v ( b , d ) : ! v ( c , d ) , l = $ ( "<div>" ) ; l . attr ( "title" , f . attr ( "title" ) + "\nPiece: " + aa [ e ] + "\nColor: " + ( v ( b , d ) ? "black" : "white" ) ) ; l . text ( "\u2659\u265f\u2658\u265e\u2657\u265d\u2656\u265c\u2655\u265b\u2654\u265a" . charAt ( 2 * e + ( v ( b , d ) ? 1 : 0 ) ) ) ; var k = l . add ( f ) ;
k . addClass ( aa [ e ] ) ; k . toggleClass ( "white" , ! v ( b , d ) ) ; k . toggleClass ( "black" , ! v ( c , d ) ) ; k . toggleClass ( "turn" , h ) ; f . append ( l ) ; break } b = a . a ; b = b . i . length ? b . i [ b . i . length - 1 ] : null ; null !== b && ( $ ( "#" + g ( M ( b ) ) ) . addClass ( "last-move" ) , $ ( "#" + g ( b . value & 63 ) ) . addClass ( "last-move" ) ) ; b = a . a ; b = S ( b ) . length ? 100 <= b . l ? 3 : Ra ( b ) ? 4 : Sa ( b ) ? 5 : 0 : U ( b ) ? 1 : 2 ; 0 === b && 1 === a . a . c ? jb ( a ) : ( ib ( a ) , $ ( "#dim" ) . css ( { display : "none" } ) , 1 === b ? $ ( "#moves" ) . append ( "#<br/>" + ( a . a . c ? "1-0" : "0-1" ) ) : 0 !== b && $ ( "#moves" ) . append ( "½-½" ) ) } ; window . makeChessGame = function ( ) { fb ( ) ; Z ( new eb ) } ; } ) ( ) ;