{
    ATTACK = {
        ATTACKED = ( setTargetToPrimaryAggressor, "messageMother: ATTACKED" );
        ENTER = ( groupAttackTarget, performAttack );
        INCOMING_MISSILE = ( "messageMother: INCOMING_MISSILE", groupAttackTarget, performAttack );
        MOTHER_LOST = ( "setStateTo: SELF_DESTRUCT" );
        NOTHING_FOUND = ( "setStateTo: SENTINEL" );
        NOT_ESCORTING = ( "setStateTo: SELF_DESTRUCT" );
        NO_TARGET = ( "setStateTo: SENTINEL" );
        TARGET_DESTROYED = ( requestNewTarget );
        TARGET_FOUND = ( setTargetToFoundTarget, "setStateTo: ATTACK" );
        TARGET_LOST = ( requestNewTarget );
        UPDATE = ( "pauseAI: 5.0", escortCheckMother );
    };
    GLOBAL = {
        ENTER = ( "setStateTo: SENTINEL" );
    };
    SELF_DESTRUCT = {
        ENTER = ( "commsMessageByUnpiloted: [anarchies_sentinel_destruct]", "randomPauseAI: 2.8 3.4" );
        UPDATE = ( "setDesiredRangeTo: 10000.0", dealEnergyDamageWithinDesiredRange, becomeExplosion );
    };
    SENTINEL = {
        ATTACKED = ( "messageMother: ATTACKED" );
        ENTER = ( performEscort );
        ESCORTING = ( "setDesiredRangeTo: 0.0", performIdle );
        GROUP_ATTACK_TARGET = ( setTargetToFoundTarget, "setStateTo: ATTACK" );
        INCOMING_MISSILE = ( "messageMother: INCOMING_MISSILE" );
        NOT_ESCORTING = ( "setStateTo: SELF_DESTRUCT" );
        UPDATE = ( escortCheckMother, "pauseAI: 10.0" );
    };
}