LLM4Binary/decompile-bench-makefile huggingface dataset:
// File: /workspace/github_c_makefile_star2_O2/schroeder-lvb[P]sissm/src/pit001.c
// Function: pit001InitConfig
int pit001InitConfig( void )
{
    cfsPtr cP;

    cP = cfsCreate( sissmGetConfigPath() );

    // read "pit001.pluginstate" variable from the .cfg file
    pit001Config.pluginState = (int) cfsFetchNum( cP, "pit001.pluginState", 0.0 );  // disabled by default

    // read "pit001.StringParameterExample" variable from the .cfg file
    strlcpy( pit001Config.stringParameterExample,  cfsFetchStr( cP, "pit001.StringParameterExample",  "game starting!" ), CFS_FETCH_MAX);
    strlcpy( pit001Config.stringParameterExample2, cfsFetchStr( cP, "pit001.StringParameterExample2", "round starting!" ), CFS_FETCH_MAX);
    strlcpy( pit001Config.stringParameterExample3, cfsFetchStr( cP, "pit001.StringParameterExample3", "to the next objective!" ), CFS_FETCH_MAX);

    // read "pit001.NumericParameterExample" variable from the .cfg file
    pit001Config.numericParameterExample = (int) cfsFetchNum( cP, "pit001.NumericParameterExample", 3.1415926 );

    cfsDestroy( cP );
    return 0;
}

// Assembly:
pushq %rbx
callq 0x8973
movq %rax, %rdi
callq 0x8f80
movq %rax, %rbx
leaq 0x764c(%rip), %rsi      # 0x1e9f0
xorpd %xmm0, %xmm0
movq %rax, %rdi
callq 0x91bd
cvttsd2si %xmm0, %eax
movl %eax, 0x21d656(%rip)    # 0x234a10
leaq 0x7642(%rip), %rsi      # 0x1ea03
leaq 0x7659(%rip), %rdx      # 0x1ea21
movq %rbx, %rdi
callq 0x8ff5
leaq 0x21d63d(%rip), %rdi    # 0x234a14
movl $0x400, %edx            # imm = 0x400
movq %rax, %rsi
callq 0xe97a
leaq 0x7645(%rip), %rsi      # 0x1ea30
leaq 0x765d(%rip), %rdx      # 0x1ea4f
movq %rbx, %rdi
callq 0x8ff5
leaq 0x21da13(%rip), %rdi    # 0x234e14
movl $0x400, %edx            # imm = 0x400
movq %rax, %rsi
callq 0xe97a
leaq 0x764a(%rip), %rsi      # 0x1ea5f
leaq 0x7662(%rip), %rdx      # 0x1ea7e
movq %rbx, %rdi
callq 0x8ff5
leaq 0x21dde9(%rip), %rdi    # 0x235214
movl $0x400, %edx            # imm = 0x400
movq %rax, %rsi
callq 0xe97a
leaq 0x7656(%rip), %rsi      # 0x1ea95
movsd 0x75a1(%rip), %xmm0     # 0x1e9e8
movq %rbx, %rdi
callq 0x91bd
cvttsd2si %xmm0, %eax
movl %eax, 0x21e1bb(%rip)    # 0x235614
movq %rbx, %rdi
callq 0x8fd6
xorl %eax, %eax
popq %rbx
retq
// File: /workspace/github_c_makefile_star2_O2/schroeder-lvb[P]sissm/src/pit001.c
// Function: pit001ClientAddCB
int pit001ClientAddCB( char *strIn )
{
    char playerName[256], playerGUID[256], playerIP[256];

    rosterParsePlayerConn( strIn, 256, playerName, playerGUID, playerIP );
    logPrintf( LOG_LEVEL_INFO, "pit001", "Add Client ::%s::%s::%s::", playerName, playerGUID, playerIP );

    if ( apiPlayersGetCount() >= 8 ) {   // if the last connect player is #8 (last slot if 8 port server)
        if ( 0 != strcmp(playerGUID, "76561000000000000" )) {    // check if this is the server owner 
	    apiKickOrBan( 0, playerGUID, "Sorry the last port reserved for server owner only" );
            apiSay ( "pit001: Player %s kicked server full", playerName );
	}
        apiSay ( "pit001: Welcome server owner %s", playerName );
    }
    else {
        apiSay ( "pit001: Welcome %s", playerName );
    }

    return 0;
}

// Assembly:
pushq %r15
pushq %r14
pushq %rbx
subq $0x300, %rsp            # imm = 0x300
leaq 0x100(%rsp), %rbx
movq %rsp, %r14
leaq 0x200(%rsp), %r15
movl $0x100, %esi            # imm = 0x100
movq %rbx, %rdx
movq %r14, %rcx
movq %r15, %r8
callq 0x144b8
leaq 0x7616(%rip), %rsi      # 0x1eab4
leaq 0x7e8d(%rip), %rdx      # 0x1f332
pushq $0x2
popq %rdi
movq %rbx, %rcx
movq %r14, %r8
movq %r15, %r9
xorl %eax, %eax
callq 0x1920b
callq 0x12ab4
cmpl $0x8, %eax
jl 0x17508
leaq 0x75f2(%rip), %rsi      # 0x1eabb
movq %rsp, %rdi
pushq $0x12
popq %rdx
callq 0x82e0
leaq 0x764a(%rip), %rbx      # 0x1eb25
testl %eax, %eax
je 0x1750f
leaq 0x75e7(%rip), %rdx      # 0x1eacd
movq %rsp, %rsi
xorl %edi, %edi
callq 0x128e1
leaq 0x7609(%rip), %rdi      # 0x1eb00
leaq 0x100(%rsp), %rsi
xorl %eax, %eax
callq 0x125a8
jmp 0x1750f
leaq 0x7636(%rip), %rbx      # 0x1eb45
leaq 0x100(%rsp), %rsi
movq %rbx, %rdi
xorl %eax, %eax
callq 0x125a8
xorl %eax, %eax
addq $0x300, %rsp            # imm = 0x300
popq %rbx
popq %r14
popq %r15
retq
// File: /workspace/github_c_makefile_star2_O2/schroeder-lvb[P]sissm/src/pit001.c
// Function: pit001ClientDelCB
int pit001ClientDelCB( char *strIn )
{
    char playerName[256], playerGUID[256], playerIP[256];

    rosterParsePlayerDisConn( strIn, 256, playerName, playerGUID, playerIP );
    logPrintf( LOG_LEVEL_INFO, "pit001", "Del Client ::%s::%s::%s::", playerName, playerGUID, playerIP );

    apiSay ( "pit001: Good bye %s", playerName );

    return 0;
}

// Assembly:
pushq %r15
pushq %r14
pushq %rbx
subq $0x300, %rsp            # imm = 0x300
leaq 0x200(%rsp), %rbx
leaq 0x100(%rsp), %r14
movq %rsp, %r15
movl $0x100, %esi            # imm = 0x100
movq %rbx, %rdx
movq %r14, %rcx
movq %r15, %r8
callq 0x14544
leaq 0x754b(%rip), %rsi      # 0x1eab4
leaq 0x75e8(%rip), %rdx      # 0x1eb58
pushq $0x2
popq %rdi
movq %rbx, %rcx
movq %r14, %r8
movq %r15, %r9
xorl %eax, %eax
callq 0x1920b
leaq 0x75e8(%rip), %rdi      # 0x1eb72
movq %rbx, %rsi
xorl %eax, %eax
callq 0x125a8
xorl %eax, %eax
addq $0x300, %rsp            # imm = 0x300
popq %rbx
popq %r14
popq %r15
retq
// File: /workspace/github_c_makefile_star2_O2/schroeder-lvb[P]sissm/src/pit001.c
// Function: pit001MapChangeCB
int pit001MapChangeCB( char *strIn )
{
    char mapName[256];

    logPrintf( LOG_LEVEL_INFO, "pit001", "Map Change Event ::%s::", strIn );
    rosterParseMapname( strIn, 256, mapName );
    logPrintf( LOG_LEVEL_INFO, "pit001", "Map name ::%s::", mapName );
    return 0;
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %rbx
subq $0x108, %rsp            # imm = 0x108
movq %rdi, %rbx
leaq 0x74ba(%rip), %r14      # 0x1eab4
leaq 0x75ac(%rip), %rdx      # 0x1ebad
pushq $0x2
popq %rbp
movl %ebp, %edi
movq %r14, %rsi
movq %rbx, %rcx
xorl %eax, %eax
callq 0x1920b
movq %rsp, %r15
movq %rbx, %rdi
movl $0x100, %esi            # imm = 0x100
movq %r15, %rdx
callq 0x1479b
leaq 0x7598(%rip), %rdx      # 0x1ebc5
movl %ebp, %edi
movq %r14, %rsi
movq %r15, %rcx
xorl %eax, %eax
callq 0x1920b
xorl %eax, %eax
addq $0x108, %rsp            # imm = 0x108
popq %rbx
popq %r14
popq %r15
popq %rbp
retq
// File: /workspace/github_c_makefile_star2_O2/schroeder-lvb[P]sissm/src/pit001.c
// Function: pit001GameStartCB
int pit001GameStartCB( char *strIn )
{
    char newCount[256];

    logPrintf( LOG_LEVEL_INFO, "pit001", "Game Start Event ::%s::", strIn );

    apiGameModePropertySet( "minimumenemies", "4" );
    apiGameModePropertySet( "maximumenemies", "4" );

    strlcpy( newCount, apiGameModePropertyGet( "minimumenemies" ), 256) ;

    // in-game announcement start of game
    apiSay( "pit001: %s -- 2 waves of %s bots", pit001Config.stringParameterExample, newCount );  

    return 0;
}

// Assembly:
pushq %r14
pushq %rbx
subq $0x108, %rsp            # imm = 0x108
movq %rdi, %rcx
leaq 0x7454(%rip), %rsi      # 0x1eab4
leaq 0x756e(%rip), %rdx      # 0x1ebd5
pushq $0x2
popq %rdi
xorl %eax, %eax
callq 0x1920b
leaq 0x33c3(%rip), %rbx      # 0x1aa3b
leaq 0x7080(%rip), %r14      # 0x1e6ff
movq %rbx, %rdi
movq %r14, %rsi
callq 0x12464
leaq 0x33b9(%rip), %rdi      # 0x1aa4a
movq %r14, %rsi
callq 0x12464
movq %rbx, %rdi
callq 0x12469
movq %rsp, %rbx
movl $0x100, %edx            # imm = 0x100
movq %rbx, %rdi
movq %rax, %rsi
callq 0xe97a
leaq 0x7532(%rip), %rdi      # 0x1ebed
leaq 0x21d352(%rip), %rsi    # 0x234a14
movq %rbx, %rdx
xorl %eax, %eax
callq 0x125a8
xorl %eax, %eax
addq $0x108, %rsp            # imm = 0x108
popq %rbx
popq %r14
retq
// File: /workspace/github_c_makefile_star2_O2/schroeder-lvb[P]sissm/src/pit001.c
// Function: pit001CapturedCB
int pit001CapturedCB( char *strIn )
{
    static unsigned long int lastTimeCaptured = 0L;
    // logPrintf( LOG_LEVEL_INFO, "pit001", "Captured Objective Event ::%s::", strIn );
    logPrintf( LOG_LEVEL_INFO, "pit001", "Captured Objective Event" );

    // system generates multiple 'captured' report, so it is necessary
    // to add a 10-second window filter to make sure only one gets fired off.
    //
    if ( lastTimeCaptured + 10L < apiTimeGet() ) {

	apiSay( pit001Config.stringParameterExample3 );
        lastTimeCaptured = apiTimeGet();
	// apiServerRestart();

    }

    return 0;
}

// Assembly:
pushq %rbx
leaq 0x7349(%rip), %rsi      # 0x1eab4
leaq 0x74f2(%rip), %rdx      # 0x1ec64
pushq $0x2
popq %rdi
xorl %eax, %eax
callq 0x1920b
movq 0x21de95(%rip), %rbx    # 0x235618
addq $0xa, %rbx
callq 0x10b6a
cmpq %rax, %rbx
jae 0x177ab
leaq 0x21da7c(%rip), %rdi    # 0x235214
xorl %eax, %eax
callq 0x125a8
callq 0x10b6a
movq %rax, 0x21de6d(%rip)    # 0x235618
xorl %eax, %eax
popq %rbx
retq
// File: /workspace/github_c_makefile_star2_O2/schroeder-lvb[P]sissm/src/pit001.c
// Function: pit001ClientSynthDelCB
int pit001ClientSynthDelCB( char *strIn )
{
    static char playerName[256], playerGUID[256], playerIP[256];

    rosterParsePlayerSynthDisConn( strIn, 256, playerName, playerGUID, playerIP );
    logPrintf( LOG_LEVEL_INFO, "pit001", "Synthetic DEL Callback Name ::%s:: IP ::%s:: GUID ::%s::", playerName, playerIP, playerGUID );
    apiSay( "pit001: Disconnect %s", playerName );

    return 0;
}

// Assembly:
pushq %r15
pushq %r14
pushq %rbx
leaq 0x21de25(%rip), %rbx    # 0x235620
leaq 0x21df1e(%rip), %r14    # 0x235720
leaq 0x21e017(%rip), %r15    # 0x235820
movl $0x100, %esi            # imm = 0x100
movq %rbx, %rdx
movq %r14, %rcx
movq %r15, %r8
callq 0x14403
leaq 0x7291(%rip), %rsi      # 0x1eab4
leaq 0x7485(%rip), %rdx      # 0x1ecaf
pushq $0x2
popq %rdi
movq %rbx, %rcx
movq %r15, %r8
movq %r14, %r9
xorl %eax, %eax
callq 0x1920b
leaq 0x74a4(%rip), %rdi      # 0x1ece8
movq %rbx, %rsi
xorl %eax, %eax
callq 0x125a8
xorl %eax, %eax
popq %rbx
popq %r14
popq %r15
retq
// File: /workspace/github_c_makefile_star2_O2/schroeder-lvb[P]sissm/src/pit001.c
// Function: pit001ClientSynthAddCB
int pit001ClientSynthAddCB( char *strIn )
{
    static char playerName[256], playerGUID[256], playerIP[256];

    rosterParsePlayerSynthConn( strIn, 256, playerName, playerGUID, playerIP );
    logPrintf( LOG_LEVEL_INFO, "pit001", "Synthetic ADD Callback Name ::%s:: IP ::%s:: GUID ::%s::", playerName, playerIP, playerGUID );
    apiSay( "pit001: Connected %s", playerName );

    return 0;
}

// Assembly:
pushq %r15
pushq %r14
pushq %rbx
leaq 0x21e0be(%rip), %rbx    # 0x235920
leaq 0x21e1b7(%rip), %r14    # 0x235a20
leaq 0x21e2b0(%rip), %r15    # 0x235b20
movl $0x100, %esi            # imm = 0x100
movq %rbx, %rdx
movq %r14, %rcx
movq %r15, %r8
callq 0x1430a
leaq 0x722a(%rip), %rsi      # 0x1eab4
leaq 0x746d(%rip), %rdx      # 0x1ecfe
pushq $0x2
popq %rdi
movq %rbx, %rcx
movq %r15, %r8
movq %r14, %r9
xorl %eax, %eax
callq 0x1920b
leaq 0x748c(%rip), %rdi      # 0x1ed37
movq %rbx, %rsi
xorl %eax, %eax
callq 0x125a8
xorl %eax, %eax
popq %rbx
popq %r14
popq %r15
retq
// File: /workspace/github_c_makefile_star2_O2/schroeder-lvb[P]sissm/src/pit001.c
// Function: pit001WinLose
int pit001WinLose( char *strIn )
{
    int isTeam0, humanSide;
    char outStr[256];

    humanSide = rosterGetCoopSide();
    isTeam0   = (NULL != strstr( strIn, "Team 0" ));

    switch ( humanSide ) {
    case 0:
        if ( !isTeam0 ) strlcpy( outStr, "Co-op Humans Win", 256 );
        break;
    case 1:
        if (  isTeam0 ) strlcpy( outStr, "Co-opHumans Lose", 256 );
        break;
    default:
        strlcpy( outStr, "PvP WinLose", 256 );
        break;
    }

    apiSay( "pit001: %s", outStr );
    logPrintf( LOG_LEVEL_INFO, "pit001", outStr );

    return 0;
}

// Assembly:
pushq %r14
pushq %rbx
subq $0x108, %rsp            # imm = 0x108
movq %rdi, %r14
callq 0x13680
movl %eax, %ebx
leaq 0x744c(%rip), %rsi      # 0x1ed61
movq %r14, %rdi
callq 0x83c0
cmpl $0x1, %ebx
je 0x17934
testl %ebx, %ebx
jne 0x1794b
testq %rax, %rax
jne 0x17961
movups 0x7436(%rip), %xmm0     # 0x1ed68
jmp 0x17940
testq %rax, %rax
je 0x17961
movups 0x7439(%rip), %xmm0     # 0x1ed79
movaps %xmm0, (%rsp)
movb $0x0, 0x10(%rsp)
jmp 0x17961
movabsq $0x4c6e695720507650, %rax # imm = 0x4C6E695720507650
movq %rax, (%rsp)
movl $0x65736f, 0x8(%rsp)    # imm = 0x65736F
leaq 0x742e(%rip), %rdi      # 0x1ed96
movq %rsp, %rbx
movq %rbx, %rsi
xorl %eax, %eax
callq 0x125a8
leaq 0x7138(%rip), %rsi      # 0x1eab4
pushq $0x2
popq %rdi
movq %rbx, %rdx
xorl %eax, %eax
callq 0x1920b
xorl %eax, %eax
addq $0x108, %rsp            # imm = 0x108
popq %rbx
popq %r14
retq
// File: /workspace/github_c_makefile_star2_O2/schroeder-lvb[P]sissm/src/pit001.c
// Function: pit001Travel
int pit001Travel( char *strIn )
{
    char *mapName, *scenario, *mutator;
    int humanSide;

    mapName = rosterGetMapName();
    scenario = rosterGetScenario();
    mutator = rosterGetMutator();
    humanSide = rosterGetCoopSide();

    logPrintf( LOG_LEVEL_INFO, "pit001", "Change map to ::%s:: Scenario ::%s:: Mutator ::%s:: Human ::%d::", 
        mapName, scenario, mutator, humanSide );
    apiSay( "pit001: Test Map-Scenario %s::%s::%s::%d::", mapName, scenario, mutator, humanSide );

    return 0;
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %rbx
pushq %rax
callq 0x13664
movq %rax, %rbx
callq 0x137ea
movq %rax, %r14
callq 0x13812
movq %rax, %r15
callq 0x13680
movl %eax, %ebp
movl %eax, (%rsp)
leaq 0x70ee(%rip), %rsi      # 0x1eab4
leaq 0x73d4(%rip), %rdx      # 0x1eda1
pushq $0x2
popq %rdi
movq %rbx, %rcx
movq %r14, %r8
movq %r15, %r9
xorl %eax, %eax
callq 0x1920b
leaq 0x73fb(%rip), %rdi      # 0x1ede2
movq %rbx, %rsi
movq %r14, %rdx
movq %r15, %rcx
movl %ebp, %r8d
xorl %eax, %eax
callq 0x125a8
xorl %eax, %eax
addq $0x8, %rsp
popq %rbx
popq %r14
popq %r15
popq %rbp
retq
// File: /workspace/github_c_makefile_star2_O2/schroeder-lvb[P]sissm/src/pit001.c
// Function: pit001SessionLog
int pit001SessionLog( char *strIn )
{
    char *sessionID;

    sessionID = rosterGetSessionID();

    logPrintf( LOG_LEVEL_INFO, "pit001", "Session ID ::%s::", sessionID );
    apiSay( "pit001: Session ID %s", sessionID );

    return 0;
}

// Assembly:
pushq %rbx
callq 0x1360b
movq %rax, %rbx
leaq 0x709d(%rip), %rsi      # 0x1eab4
leaq 0x73ef(%rip), %rdx      # 0x1ee0d
pushq $0x2
popq %rdi
movq %rax, %rcx
xorl %eax, %eax
callq 0x1920b
leaq 0x73ed(%rip), %rdi      # 0x1ee1f
movq %rbx, %rsi
xorl %eax, %eax
callq 0x125a8
xorl %eax, %eax
popq %rbx
retq
// File: /workspace/github_c_makefile_star2_O2/schroeder-lvb[P]sissm/src/pit001.c
// Function: pit001ObjectSynth
int pit001ObjectSynth( char *strIn )
{
    char *obj, *typ; 

    obj = rosterGetObjective();
    typ = rosterGetObjectiveType();

    logPrintf( LOG_LEVEL_INFO, "pit001", "Roster Objective is ::%s::, Type is ::%s::", obj, typ ); 
    apiSay( "pit001: Roster Objective is ::%s::, Type is ::%s::", obj, typ ); 

    return 0;
}

// Assembly:
pushq %r14
pushq %rbx
pushq %rax
callq 0x13640
movq %rax, %rbx
callq 0x13648
movq %rax, %r14
leaq 0x7059(%rip), %rsi      # 0x1eab4
leaq 0x73db(%rip), %rdx      # 0x1ee3d
pushq $0x2
popq %rdi
movq %rbx, %rcx
movq %rax, %r8
xorl %eax, %eax
callq 0x1920b
leaq 0x73bc(%rip), %rdi      # 0x1ee35
movq %rbx, %rsi
movq %r14, %rdx
xorl %eax, %eax
callq 0x125a8
xorl %eax, %eax
addq $0x8, %rsp
popq %rbx
popq %r14
retq
// File: /workspace/github_c_makefile_star2_O2/schroeder-lvb[P]sissm/src/pigreetings.c
// Function: pigreetingsClientSynthDelCB
int pigreetingsClientSynthDelCB( char *strIn )
{
    char playerName[256], playerGUID[256], playerIP[256];


    rosterParsePlayerSynthDisConn( strIn, 256, playerName, playerGUID, playerIP );
    // rosterParsePlayerDisConn( strIn, playerName, playerGUID, playerIP );
    // logPrintf( LOG_LEVEL_CRITICAL, "pigreetings", "SynDel Raw ::%s::", strIn );
    logPrintf( LOG_LEVEL_CRITICAL, "pigreetings", "SynDel Client ::%s:: GUID ::%s:: IP ::%s::", playerName, playerGUID, playerIP );
    // 
    if (!_isIncognito( playerGUID ) && !_isMaskDisconnect() ) {
        if ( 0 != strlen( pigreetingsConfig.disconnected ) ) 
            apiSay( "%s%s%s %s [%d]", 
                pigreetingsConfig.disconnectedPrefix,
                playerName, 
                pigreetingsConfig.disconnectedPostfix,
                pigreetingsConfig.disconnected, apiPlayersGetCount() );
        logPrintf( LOG_LEVEL_CRITICAL, "pigreetings", "%s disconnected [%d]", playerName, apiPlayersGetCount() );
    }

    return 0;
}

// Assembly:
pushq %r15
pushq %r14
pushq %rbx
subq $0x300, %rsp            # imm = 0x300
movq %rsp, %rbx
leaq 0x200(%rsp), %r14
leaq 0x100(%rsp), %r15
movl $0x100, %esi            # imm = 0x100
movq %rbx, %rdx
movq %r14, %rcx
movq %r15, %r8
callq 0x14403
leaq 0x6ff4(%rip), %rsi      # 0x1f2d4
leaq 0x6ff9(%rip), %rdx      # 0x1f2e0
xorl %edi, %edi
movq %rbx, %rcx
movq %r14, %r8
movq %r15, %r9
xorl %eax, %eax
callq 0x1920b
movq %r14, %rdi
callq 0x1838e
testl %eax, %eax
jne 0x1837f
cmpl $0x0, 0x21d91c(%rip)    # 0x235c28
je 0x18326
callq 0x10b6a
subq 0x226536(%rip), %rax    # 0x23e850
movslq 0x21d907(%rip), %rcx    # 0x235c28
cmpq %rcx, %rax
jb 0x1837f
cmpb $0x0, 0x223d0f(%rip)    # 0x23c03c
je 0x1835d
callq 0x12ab4
leaq 0x6fd0(%rip), %rdi      # 0x1f30b
leaq 0x2250fa(%rip), %rsi    # 0x23d43c
leaq 0x2254f3(%rip), %rcx    # 0x23d83c
leaq 0x223cec(%rip), %r8     # 0x23c03c
movq %rsp, %rdx
movl %eax, %r9d
xorl %eax, %eax
callq 0x125a8
callq 0x12ab4
leaq 0x6f6b(%rip), %rsi      # 0x1f2d4
leaq 0x6faa(%rip), %rdx      # 0x1f31a
movq %rsp, %rcx
xorl %edi, %edi
movl %eax, %r8d
xorl %eax, %eax
callq 0x1920b
xorl %eax, %eax
addq $0x300, %rsp            # imm = 0x300
popq %rbx
popq %r14
popq %r15
retq
// File: /workspace/github_c_makefile_star2_O2/schroeder-lvb[P]sissm/src/pigreetings.c
// Function: pigreetingsClientSynthAddCB
int pigreetingsClientSynthAddCB( char *strIn )
{
    char playerName[256], playerGUID[256], playerIP[256];

    rosterParsePlayerSynthConn( strIn, 256, playerName, playerGUID, playerIP );
    if (!_isIncognito( playerGUID )) {
        if ( (apiTimeGet() - timeRestarted) > PIGREETINGS_RESTART_LOCKOUT_SEC ) {   // check if we are restarting
       
           if  ( apiIsAdmin( playerGUID ) && (0 != strlen( pigreetingsConfig.connectedAsAdmin)) ) 
               apiSay( "%s%s%s %s [%d]", 
                    pigreetingsConfig.connectedAsAdminPrefix,
                    playerName, 
                    pigreetingsConfig.connectedAsAdminPostfix,
                    pigreetingsConfig.connectedAsAdmin, apiPlayersGetCount() );
           else if ( 0 != strlen( pigreetingsConfig.connected ))
               apiSay( "%s%s%s %s [%d]", 
                    pigreetingsConfig.connectedPrefix,
                    playerName, 
                    pigreetingsConfig.connectedPostfix,
                    pigreetingsConfig.connected, apiPlayersGetCount() );
        }
        logPrintf( LOG_LEVEL_CRITICAL, "pigreetings", "SynAdd Client ::%s::%s::%s::", playerName, playerGUID, playerIP );
    }
    else {
        logPrintf( LOG_LEVEL_CRITICAL, "pigreetings", "SynAdd Client [incognito] ::%s::%s::%s::", playerName, playerGUID, playerIP );
    }
    return 0;
}

// Assembly:
pushq %rbx
subq $0x300, %rsp            # imm = 0x300
movq %rsp, %rdx
leaq 0x100(%rsp), %rbx
leaq 0x200(%rsp), %r8
movl $0x100, %esi            # imm = 0x100
movq %rbx, %rcx
callq 0x1430a
movq %rbx, %rdi
callq 0x1838e
testl %eax, %eax
je 0x183ea
leaq 0x6f67(%rip), %rbx      # 0x1f34c
jmp 0x18477
callq 0x10b6a
subq 0x22644a(%rip), %rax    # 0x23e840
leaq 0x6f32(%rip), %rbx      # 0x1f32f
cmpq $0x1f, %rax
jb 0x18477
leaq 0x100(%rsp), %rdi
callq 0x12f69
testl %eax, %eax
je 0x18440
cmpb $0x0, 0x223821(%rip)    # 0x23bc3c
je 0x18440
callq 0x12ab4
leaq 0x6ee2(%rip), %rdi      # 0x1f30b
leaq 0x22480c(%rip), %rsi    # 0x23cc3c
leaq 0x224c05(%rip), %rcx    # 0x23d03c
leaq 0x2237fe(%rip), %r8     # 0x23bc3c
jmp 0x1846a
cmpb $0x0, 0x2233f5(%rip)    # 0x23b83c
je 0x18477
callq 0x12ab4
leaq 0x6eb6(%rip), %rdi      # 0x1f30b
leaq 0x223fe0(%rip), %rsi    # 0x23c43c
leaq 0x2243d9(%rip), %rcx    # 0x23c83c
leaq 0x2233d2(%rip), %r8     # 0x23b83c
movq %rsp, %rdx
movl %eax, %r9d
xorl %eax, %eax
callq 0x125a8
leaq 0x6e56(%rip), %rsi      # 0x1f2d4
movq %rsp, %rcx
leaq 0x100(%rsp), %r8
leaq 0x200(%rsp), %r9
xorl %edi, %edi
movq %rbx, %rdx
xorl %eax, %eax
callq 0x1920b
xorl %eax, %eax
addq $0x300, %rsp            # imm = 0x300
popq %rbx
retq
// File: /workspace/github_c_makefile_star2_O2/schroeder-lvb[P]sissm/src/pigreetings.c
// Function: pigreetingsRoundStartCB
int pigreetingsRoundStartCB( char *strIn )
{
    if ( 0 != strlen(pigreetingsConfig.serverGreetings[0] )) 
        apiSay( "%s", pigreetingsConfig.serverGreetings[0] );
    if ( 0 != strlen(pigreetingsConfig.serverGreetings[1] )) 
        apiSay( "%s", pigreetingsConfig.serverGreetings[1] );

    // start the 'ads' periodic printing service
    //
    if ( 0 != pigreetingsConfig.adsDelay )
        alarmReset( alarmAds, pigreetingsConfig.adsDelay );

    return 0;
}

// Assembly:
pushq %rax
cmpb $0x0, 0x21d77d(%rip)    # 0x235c3c
je 0x184d6
leaq 0x578c(%rip), %rdi      # 0x1dc54
leaq 0x21d76d(%rip), %rsi    # 0x235c3c
xorl %eax, %eax
callq 0x125a8
cmpb $0x0, 0x21db5f(%rip)    # 0x23603c
je 0x184f4
leaq 0x576e(%rip), %rdi      # 0x1dc54
leaq 0x21db4f(%rip), %rsi    # 0x23603c
xorl %eax, %eax
callq 0x125a8
movslq 0x21d739(%rip), %rsi    # 0x235c34
testq %rsi, %rsi
je 0x1850c
movq 0x226341(%rip), %rdi    # 0x23e848
callq 0xf1b1
xorl %eax, %eax
popq %rcx
retq
// File: /workspace/github_c_makefile_star2_O2/schroeder-lvb[P]sissm/src/pigreetings.c
// Function: pigreetingsRoundEndCB
int pigreetingsRoundEndCB( char *strIn )
{
    // cancel the 'ads' alarm
    //
    alarmCancel( alarmAds );
    lastRoundEndTime = apiTimeGet();
    logPrintf( LOG_LEVEL_INFO, "pigreetings", "Round End Event" );
    // apiSay("pigreeting Test: End of Round");
    return 0;
}

// Assembly:
pushq %rax
movq 0x226330(%rip), %rdi    # 0x23e848
callq 0xf1d2
callq 0x10b6a
movq %rax, 0x226327(%rip)    # 0x23e850
leaq 0x6da4(%rip), %rsi      # 0x1f2d4
leaq 0x6e3e(%rip), %rdx      # 0x1f375
pushq $0x2
popq %rdi
xorl %eax, %eax
callq 0x1920b
xorl %eax, %eax
popq %rcx
retq
// File: /workspace/github_c_makefile_star2_O2/schroeder-lvb[P]sissm/src/pigreetings.c
// Function: pigreetingsCapturedCB
int pigreetingsCapturedCB( char *strIn )
{
    static unsigned long int lastTimeCaptured = 0L;
    static int lastIndex = 0;

    // only display rules when enabled (commonly disabled for private servers
    //
    if ( pigreetingsConfig.showRules ) {

        // system generates multiple 'captured' report, so it is necessary
        // to add a 10-second window filter to make sure only one gets fired off.
        //
        if ( lastTimeCaptured + 10L < apiTimeGet() ) {
            if ( 0 != strlen(pigreetingsConfig.serverRules[lastIndex] )) 
                apiSay( "%s", pigreetingsConfig.serverRules[lastIndex] );
	    lastIndex = ( lastIndex + 1 ) % 10;
            lastTimeCaptured = apiTimeGet();
        }
    }

    // start the 'ads' periodic printing service
    //
    if ( 0 != pigreetingsConfig.adsDelay )
        alarmReset( alarmAds, pigreetingsConfig.adsDelay );

    return 0;
}

// Assembly:
pushq %rbx
cmpl $0x0, 0x21d6df(%rip)    # 0x235c2c
je 0x185bc
movq 0x226302(%rip), %rbx    # 0x23e858
addq $0xa, %rbx
callq 0x10b6a
cmpq %rax, %rbx
jae 0x185bc
movl 0x2262f6(%rip), %eax    # 0x23e860
movq %rax, %rcx
shlq $0xa, %rcx
leaq 0x21d6a8(%rip), %rdx    # 0x235c20
cmpb $0x0, 0x81c(%rcx,%rdx)
je 0x185a1
leaq (%rcx,%rdx), %rsi
addq $0x81c, %rsi            # imm = 0x81C
leaq 0x56c0(%rip), %rdi      # 0x1dc54
xorl %eax, %eax
callq 0x125a8
movl 0x2262bf(%rip), %eax    # 0x23e860
incl %eax
pushq $0xa
popq %rcx
xorl %edx, %edx
divl %ecx
movl %edx, 0x2262b0(%rip)    # 0x23e860
callq 0x10b6a
movq %rax, 0x22629c(%rip)    # 0x23e858
movslq 0x21d671(%rip), %rsi    # 0x235c34
testq %rsi, %rsi
je 0x185d4
movq 0x226279(%rip), %rdi    # 0x23e848
callq 0xf1b1
xorl %eax, %eax
popq %rbx
retq
// File: /workspace/github_c_makefile_star2_O2/schroeder-lvb[P]sissm/src/pigreetings.c
// Function: pigreetingsWinLoseCB
int pigreetingsWinLoseCB( char *strIn )
{
    int isTeam0, humanSide;
    char outStr[256];

    humanSide = rosterGetCoopSide();
    isTeam0   = (NULL != strstr( strIn, "Team 0" ));
    strlcpy( outStr, pigreetingsConfig.roundWinMsg, 256 );

    switch ( humanSide ) {
    case 0: 
        if ( !isTeam0 ) strlcpy( outStr, pigreetingsConfig.roundLoseMsg, 256 );
        break;
    case 1:
        if (  isTeam0 ) strlcpy( outStr, pigreetingsConfig.roundLoseMsg, 256 );
        break;
    default:
        strlcpy( outStr, pigreetingsConfig.roundPvPMsg, 256 );
        break;
    }

    apiSay( outStr );

    return 0;
}

// Assembly:
pushq %r14
pushq %rbx
subq $0x108, %rsp            # imm = 0x108
movq %rdi, %r14
callq 0x13680
movl %eax, %ebx
leaq 0x676b(%rip), %rsi      # 0x1ed61
movq %r14, %rdi
callq 0x83c0
movq %rax, %r14
leaq 0x225a34(%rip), %rsi    # 0x23e03c
movq %rsp, %rdi
movl $0x100, %edx            # imm = 0x100
callq 0xe97a
cmpl $0x1, %ebx
je 0x18625
testl %ebx, %ebx
jne 0x18633
testq %r14, %r14
jne 0x18647
jmp 0x1862a
testq %r14, %r14
je 0x18647
leaq 0x22560b(%rip), %rsi    # 0x23dc3c
jmp 0x1863a
leaq 0x225e02(%rip), %rsi    # 0x23e43c
movq %rsp, %rdi
movl $0x100, %edx            # imm = 0x100
callq 0xe97a
movq %rsp, %rdi
xorl %eax, %eax
callq 0x125a8
xorl %eax, %eax
addq $0x108, %rsp            # imm = 0x108
popq %rbx
popq %r14
retq
// File: /workspace/github_c_makefile_star2_O2/schroeder-lvb[P]sissm/src/pigreetings.c
// Function: pigreetingsAlarmCB
int pigreetingsAlarmCB( char *alarmMsg )
{
    static int lastIndex = 0;

    if ( 0 != pigreetingsConfig.adsInterval )
        alarmReset( alarmAds, (unsigned long) pigreetingsConfig.adsInterval );

    // only display rules when enabled (commonly disabled for private servers
    //
    if ( pigreetingsConfig.showAds ) {
        if ( 0 != strlen(pigreetingsConfig.serverAds[lastIndex] )) 
            apiSay( "%s", pigreetingsConfig.serverAds[lastIndex] );
        lastIndex = ( lastIndex + 1 ) % 10;
    }
    return 0;
}

// Assembly:
pushq %rax
movslq 0x21d5d2(%rip), %rsi    # 0x235c38
testq %rsi, %rsi
je 0x18677
movq 0x2261d6(%rip), %rdi    # 0x23e848
callq 0xf1b1
cmpl $0x0, 0x21d5b2(%rip)    # 0x235c30
je 0x186cc
movl 0x2261de(%rip), %eax    # 0x23e864
movq %rax, %rcx
shlq $0xa, %rcx
leaq 0x21d58c(%rip), %rdx    # 0x235c20
cmpb $0x0, 0x301c(%rcx,%rdx)
je 0x186bd
leaq (%rcx,%rdx), %rsi
addq $0x301c, %rsi           # imm = 0x301C
leaq 0x55a4(%rip), %rdi      # 0x1dc54
xorl %eax, %eax
callq 0x125a8
movl 0x2261a7(%rip), %eax    # 0x23e864
incl %eax
pushq $0xa
popq %rcx
xorl %edx, %edx
divl %ecx
movl %edx, 0x226198(%rip)    # 0x23e864
xorl %eax, %eax
popq %rcx
retq
// File: /workspace/github_c_makefile_star2_O2/schroeder-lvb[P]sissm/src/pigateway.c
// Function: pigatewayClientSynthDelCB
int pigatewayClientSynthDelCB( char *strIn )
{
    // if there are no players, unlock the server
    //
    if ( 0 == apiPlayersGetCount() ) {
        // Unlcok the server - restore to normal operation
        // Do not unlock if the variable state is "perm" (=2L) 
        // 
        if ( ( 0 == pigatewayConfig.lockServerOnIdle ) && ( 1L == p2pGetL( "pigateway.p2p.lockOut", 0L ) )) {
            p2pSetL( "pigateway.p2p.lockOut", 0L );
            apiSaySys( "Unlocking the server due to zero players" );
            logPrintf( LOG_LEVEL_INFO, "pigateway", "Unlocking the server due to zero players DelCB" );
        }
    }
    return 0;
}

// Assembly:
pushq %rax
callq 0x12ab4
orl 0x226336(%rip), %eax    # 0x23f078
jne 0x18d8c
leaq 0x1a33(%rip), %rdi      # 0x1a77e
xorl %esi, %esi
callq 0x17172
cmpq $0x1, %rax
jne 0x18d8c
leaq 0x1a1f(%rip), %rdi      # 0x1a77e
xorl %esi, %esi
callq 0x17049
leaq 0x6934(%rip), %rdi      # 0x1f6a1
xorl %eax, %eax
callq 0x12753
leaq 0x6625(%rip), %rsi      # 0x1f3a0
leaq 0x6948(%rip), %rdx      # 0x1f6ca
pushq $0x2
popq %rdi
xorl %eax, %eax
callq 0x1920b
xorl %eax, %eax
popq %rcx
retq
// File: /workspace/github_c_makefile_star2_O2/schroeder-lvb[P]sissm/src/pigateway.c
// Function: pigatewayRoundStartCB
int pigatewayRoundStartCB( char *strIn )
{
    if ( 1L ==  p2pGetL( "pigateway.p2p.lockOut", 0L )) {
        apiSay( "REMINDER: Server is locked by Access Control." );
    }
    else if ( 2L ==  p2pGetL( "pigateway.p2p.lockOut", 0L )) {
        apiSay( "!!Server PERM-LOCKED by Access Control!!" );
    }
    else if ( 3L ==  p2pGetL( "pigateway.p2p.lockOut", 0L )) {
        apiSay( "!!Server PERM-LOCKED by Clan List!!" );
    }

    return 0;
}

// Assembly:
pushq %rax
leaq 0x1938(%rip), %rdi      # 0x1a77e
xorl %esi, %esi
callq 0x17172
cmpq $0x1, %rax
jne 0x18e5c
leaq 0x6904(%rip), %rdi      # 0x1f75e
jmp 0x18e94
leaq 0x191b(%rip), %rdi      # 0x1a77e
xorl %esi, %esi
callq 0x17172
cmpq $0x2, %rax
jne 0x18e79
leaq 0x6915(%rip), %rdi      # 0x1f78c
jmp 0x18e94
leaq 0x18fe(%rip), %rdi      # 0x1a77e
xorl %esi, %esi
callq 0x17172
cmpq $0x3, %rax
jne 0x18e9b
leaq 0x6921(%rip), %rdi      # 0x1f7b5
xorl %eax, %eax
callq 0x125a8
xorl %eax, %eax
popq %rcx
retq
// File: /workspace/github_c_makefile_star2_O2/schroeder-lvb[P]sissm/src/pigateway.c
// Function: pigatewayCapturedCB
int pigatewayCapturedCB( char *strIn )
{
    static char rosterBuf[ PIGATEWAY_MAXROSTER ];
    char   *w;
    int    i, myLen;
    char   name[256], guid[256];

    if ( pigatewayConfig.minPlayerNameLength > 0 ) {

        strlcpy( rosterBuf, apiPlayersRoster( 1, "\011" ), PIGATEWAY_MAXROSTER );
 
        for ( i=0 ; ; i++ ){
            w = getWord( rosterBuf, i, "\011" );  // Fetch one player: "abcd[76560000000000005]"
            if ( w == NULL ) break;

            myLen = (int) strlen( w );
            if ( myLen == 0 ) break;

            if ( myLen < (PIGATEWAY_STEAMIDLEN + 2 + pigatewayConfig.minPlayerNameLength) ) {

                strlcpy( name, w, myLen-( PIGATEWAY_STEAMIDLEN+2)+1 );
                strlcpy( guid, & w[ strlen( name ) + 1], PIGATEWAY_STEAMIDLEN+1 );
            
                apiKickOrBan( 0, guid,  pigatewayConfig.minPlayerNameMsg ); 
                logPrintf( LOG_LEVEL_INFO, "pigateway", "Short Name Auto-kick ::%s::%s", name, guid );

            }
        }
    }
    return 0;
}

// Assembly:
cmpl $0x0, 0x2261db(%rip)    # 0x23f084
jle 0x18f96
pushq %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x208, %rsp            # imm = 0x208
leaq 0x4b5b(%rip), %rbx      # 0x1da22
pushq $0x1
popq %rdi
movq %rbx, %rsi
callq 0x12ab9
leaq 0x226cd7(%rip), %r14    # 0x23fbb0
movl $0x4000, %edx           # imm = 0x4000
movq %r14, %rdi
movq %rax, %rsi
callq 0xe97a
leaq 0x100(%rsp), %r15
movq %rsp, %r12
xorl %ebp, %ebp
movq %r14, %rdi
movl %ebp, %esi
movq %rbx, %rdx
callq 0xed9c
testq %rax, %rax
je 0x18f85
movq %rax, %r13
movq %rax, %rdi
callq 0x8120
testl %eax, %eax
je 0x18f85
movl 0x226167(%rip), %ecx    # 0x23f084
addl $0x13, %ecx
cmpl %eax, %ecx
jle 0x18f7e
addl $-0x12, %eax
movslq %eax, %rdx
movq %r15, %rdi
movq %r13, %rsi
callq 0xe97a
movq %r15, %rdi
callq 0x8120
leaq (%rax,%r13), %rsi
incq %rsi
movq %r12, %rdi
pushq $0x12
popq %rdx
callq 0xe97a
xorl %edi, %edi
movq %r12, %rsi
leaq 0x22612d(%rip), %rdx    # 0x23f088
callq 0x128e1
pushq $0x2
popq %rdi
leaq 0x6436(%rip), %rsi      # 0x1f3a0
leaq 0x6868(%rip), %rdx      # 0x1f7d9
movq %r15, %rcx
movq %r12, %r8
xorl %eax, %eax
callq 0x1920b
incl %ebp
jmp 0x18ef6
addq $0x208, %rsp            # imm = 0x208
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
xorl %eax, %eax
retq
// File: /workspace/github_c_makefile_star2_O2/schroeder-lvb[P]sissm/src/pigateway.c
// Function: pigatewayPeriodicCB
int pigatewayPeriodicCB( char *strIn )
{
    static int tenSecondPolling = 0;

    if ( ++tenSecondPolling > 10 ) {
        // This is a redundant, safety code duplicated from DelCB callback.
        // if there are no players, unlock the server
        //
        tenSecondPolling = 0;
        if ( 0 == apiPlayersGetCount() ) {
            if ( pigatewayConfig.lockServerOnIdle )  {
                // Lcok the server when no players are present 
                //
                apiClanClear();
                p2pSetL( "pigateway.p2p.lockOut", 2L );
                // apiSaySys( "Unlocking the server due to zero players" );
                logPrintf( LOG_LEVEL_DEBUG, "pigateway", "Continue locking the empty server due to default in PeriodicCB " );
            } 
            else {
                // Unlock the server - restore to normal operation
                //
                logPrintf( LOG_LEVEL_DEBUG, "pigateway", "Unlocking the server due to zero players at PeriodicCB " );
                apiClanClear();
                p2pSetL( "pigateway.p2p.lockOut", 0L );
                // apiSaySys( "Unlocking the server due to zero players" );
                logPrintf( LOG_LEVEL_DEBUG, "pigateway", "Clanlist cleared on empty server @ periodic loop" );
            }
        }
    }

    return 0;
}

// Assembly:
movl 0x22ac11(%rip), %eax    # 0x243bb0
leal 0x1(%rax), %ecx
movl %ecx, 0x22ac08(%rip)    # 0x243bb0
cmpl $0xa, %eax
jl 0x19028
pushq %r14
pushq %rbx
pushq %rax
andl $0x0, 0x22abf8(%rip)    # 0x243bb0
callq 0x12ab4
testl %eax, %eax
jne 0x19021
cmpl $0x0, 0x2260b0(%rip)    # 0x23f078
je 0x18fd7
leaq 0x6826(%rip), %rbx      # 0x1f7f7
pushq $0x2
popq %r14
jmp 0x18ff9
leaq 0x63c2(%rip), %rsi      # 0x1f3a0
leaq 0x6852(%rip), %rdx      # 0x1f837
xorl %r14d, %r14d
pushq $0x3
popq %rdi
xorl %eax, %eax
callq 0x1920b
leaq 0x6876(%rip), %rbx      # 0x1f86f
callq 0x13431
leaq 0x1779(%rip), %rdi      # 0x1a77e
movq %r14, %rsi
callq 0x17049
leaq 0x638c(%rip), %rsi      # 0x1f3a0
pushq $0x3
popq %rdi
movq %rbx, %rdx
xorl %eax, %eax
callq 0x1920b
addq $0x8, %rsp
popq %rbx
popq %r14
xorl %eax, %eax
retq
// File: /workspace/github_c_makefile_star2_O2/schroeder-lvb[P]sissm/src/pigateway.c
// Function: pigatewayChatCB
int pigatewayChatCB( char *strIn )
{
    char clientID[512], chatLine[512], *w;
    int errCode, i = 0;

    if ( 0 != strlen( pigatewayConfig.chatTrollWords ) ) {
        if ( 0 == (errCode = rosterParsePlayerChat( strIn, 512, clientID, chatLine ))) {
            while (1 == 1 ) {
               w = getWord( pigatewayConfig.chatTrollWords, i++, " " );
               if ( w == NULL ) break;
               if ( 0 == strlen( w ) ) break;
               if (NULL != strcasestr( chatLine, w )) {
                    apiKickOrBan( 0, clientID, "Troll Detect: Generating Report" );
                    logPrintf( LOG_LEVEL_INFO, "pigateway", "Troll Detect Auto-kick ::%s::'%s'", clientID, chatLine );
               }
            }
        }
    }
    return 0;
}

// Assembly:
cmpb $0x0, 0x226456(%rip)    # 0x23f488
je 0x1906f
pushq %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x408, %rsp            # imm = 0x408
leaq 0x200(%rsp), %rdx
movq %rsp, %rcx
movl $0x200, %esi            # imm = 0x200
callq 0x145db
testl %eax, %eax
je 0x19072
addq $0x408, %rsp            # imm = 0x408
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
xorl %eax, %eax
retq
leaq 0x22640f(%rip), %rbx    # 0x23f488
leaq 0x20ce(%rip), %r14      # 0x1b14e
movq %rsp, %r15
leaq 0x200(%rsp), %r13
pushq $0x2
popq %rbp
xorl %r12d, %r12d
movq %rbx, %rdi
movl %r12d, %esi
movq %r14, %rdx
callq 0xed9c
testq %rax, %rax
je 0x1905e
cmpb $0x0, (%rax)
je 0x1905e
movq %r15, %rdi
movq %rax, %rsi
callq 0x8360
testq %rax, %rax
je 0x190e7
xorl %edi, %edi
movq %r13, %rsi
leaq 0x67db(%rip), %rdx      # 0x1f8a0
callq 0x128e1
movl %ebp, %edi
leaq 0x62cd(%rip), %rsi      # 0x1f3a0
leaq 0x67e6(%rip), %rdx      # 0x1f8c0
movq %r13, %rcx
movq %r15, %r8
xorl %eax, %eax
callq 0x1920b
incl %r12d
jmp 0x19091
// File: /workspace/github_c_makefile_star2_O2/schroeder-lvb[P]sissm/src/pigateway.c
// Function: pigatewayInstallPlugin
int pigatewayInstallPlugin( void )
{
    // Read the plugin-specific variables from the .cfg file 
    // 
    pigatewayInitConfig();

    // if plugin is disabled in the .cfg file then do not activate
    //
    if ( pigatewayConfig.pluginState == 0 ) return 0;

    // Install Event-driven CallBack hooks so the plugin gets
    // notified for various happenings.  A complete list is here,
    // but comment out what is not needed for your plug-in.
    // 
    eventsRegister( SISSM_EV_CLIENT_ADD,           pigatewayClientAddCB );
    eventsRegister( SISSM_EV_CLIENT_DEL,           pigatewayClientDelCB );
    eventsRegister( SISSM_EV_INIT,                 pigatewayInitCB );
    eventsRegister( SISSM_EV_RESTART,              pigatewayRestartCB );
    eventsRegister( SISSM_EV_MAPCHANGE,            pigatewayMapChangeCB );
    eventsRegister( SISSM_EV_GAME_START,           pigatewayGameStartCB );
    eventsRegister( SISSM_EV_GAME_END,             pigatewayGameEndCB );
    eventsRegister( SISSM_EV_ROUND_START,          pigatewayRoundStartCB );
    eventsRegister( SISSM_EV_ROUND_END,            pigatewayRoundEndCB );
    eventsRegister( SISSM_EV_OBJECTIVE_CAPTURED,   pigatewayCapturedCB );
    eventsRegister( SISSM_EV_PERIODIC,             pigatewayPeriodicCB );
    eventsRegister( SISSM_EV_CLIENT_ADD_SYNTH,     pigatewayClientSynthAddCB );
    eventsRegister( SISSM_EV_CLIENT_DEL_SYNTH,     pigatewayClientSynthDelCB );
    eventsRegister( SISSM_EV_CHAT,                 pigatewayChatCB     );

    timeRestarted = apiTimeGet();
    return 0;
}

// Assembly:
pushq %rax
callq 0x187f5
cmpl $0x0, 0x225777(%rip)    # 0x23e870
je 0x191dc
leaq -0x376(%rip), %rsi      # 0x18d90
pushq $0x3
popq %rdi
callq 0xcba7
leaq -0x382(%rip), %rsi      # 0x18d93
pushq $0x4
popq %rdi
callq 0xcba7
leaq -0x38e(%rip), %rsi      # 0x18d96
pushq $0x1
popq %rdi
callq 0xcba7
leaq -0x39a(%rip), %rsi      # 0x18d99
pushq $0x2
popq %rdi
callq 0xcba7
leaq -0x35e(%rip), %rsi      # 0x18de4
pushq $0x5
popq %rdi
callq 0xcba7
leaq -0x346(%rip), %rsi      # 0x18e0b
pushq $0x6
popq %rdi
callq 0xcba7
leaq -0x352(%rip), %rsi      # 0x18e0e
pushq $0x7
popq %rdi
callq 0xcba7
leaq -0x331(%rip), %rsi      # 0x18e3e
pushq $0x8
popq %rdi
callq 0xcba7
leaq -0x2df(%rip), %rsi      # 0x18e9f
pushq $0x9
popq %rdi
callq 0xcba7
leaq -0x2eb(%rip), %rsi      # 0x18ea2
pushq $0xa
popq %rdi
callq 0xcba7
leaq -0x203(%rip), %rsi      # 0x18f99
pushq $0xb
popq %rdi
callq 0xcba7
leaq -0x7d2(%rip), %rsi      # 0x189d9
pushq $0xc
popq %rdi
callq 0xcba7
leaq -0x484(%rip), %rsi      # 0x18d36
pushq $0xd
popq %rdi
callq 0xcba7
leaq -0x19e(%rip), %rsi      # 0x1902b
xorl %edi, %edi
callq 0xcba7
callq 0x10b6a
movq %rax, 0x2269c4(%rip)    # 0x23fba0
xorl %eax, %eax
popq %rcx
retq
// File: /workspace/github_c_makefile_star2_O2/schroeder-lvb[P]sissm/src/log.c
// Function: logPrintfInit
void logPrintfInit( int logLevel, char *logFileName, int echoToConsole )
{
    strlcpy( _logFileName, logFileName, sizeof( _logFileName) );
    _logEchoToConsole = echoToConsole;
    _logLevel = logLevel;
    return;
}

// Assembly:
pushq %rbp
pushq %rbx
pushq %rax
movl %edx, %ebx
movl %edi, %ebp
leaq 0x22a9d2(%rip), %rdi    # 0x243bc0
movl $0xff, %edx
callq 0xe97a
movl %ebx, 0x22aac2(%rip)    # 0x243cc0
movl %ebp, 0x22aac0(%rip)    # 0x243cc4
addq $0x8, %rsp
popq %rbx
popq %rbp
retq
// File: /workspace/github_c_makefile_star2_O2/schroeder-lvb[P]sissm/src/pistats.c
// Function: pistatsInitConfig
int pistatsInitConfig( void )
{
    cfsPtr cP;

    cP = cfsCreate( sissmGetConfigPath() );

    // read "pistats.pluginstate" variable from the .cfg file
    pistatsConfig.pluginState = (int) cfsFetchNum( cP, "pistats.pluginState", 0.0 );  // disabled by default

    // read "pistats.StringParameterExample" variable from the .cfg file
    strlcpy( pistatsConfig.stringParameterExample,  cfsFetchStr( cP, "pistats.StringParameterExample",  "game starting!" ), CFS_FETCH_MAX);
    strlcpy( pistatsConfig.stringParameterExample2, cfsFetchStr( cP, "pistats.StringParameterExample2", "round starting!" ), CFS_FETCH_MAX);
    strlcpy( pistatsConfig.stringParameterExample3, cfsFetchStr( cP, "pistats.StringParameterExample3", "to the next objective!" ), CFS_FETCH_MAX);

    // read "pistats.NumericParameterExample" variable from the .cfg file
    pistatsConfig.numericParameterExample = (int) cfsFetchNum( cP, "pistats.NumericParameterExample", 3.1415926 );

    cfsDestroy( cP );
    return 0;
}

// Assembly:
pushq %rbx
callq 0x8973
movq %rax, %rdi
callq 0x8f80
movq %rax, %rbx
leaq 0x65a7(%rip), %rsi      # 0x1f987
xorpd %xmm0, %xmm0
movq %rax, %rdi
callq 0x91bd
cvttsd2si %xmm0, %eax
movl %eax, 0x22b8ea(%rip)    # 0x244ce0
leaq 0x659e(%rip), %rsi      # 0x1f99b
leaq 0x561d(%rip), %rdx      # 0x1ea21
movq %rbx, %rdi
callq 0x8ff5
leaq 0x22b8d1(%rip), %rdi    # 0x244ce4
movl $0x400, %edx            # imm = 0x400
movq %rax, %rsi
callq 0xe97a
leaq 0x6593(%rip), %rsi      # 0x1f9ba
leaq 0x5621(%rip), %rdx      # 0x1ea4f
movq %rbx, %rdi
callq 0x8ff5
leaq 0x22bca7(%rip), %rdi    # 0x2450e4
movl $0x400, %edx            # imm = 0x400
movq %rax, %rsi
callq 0xe97a
leaq 0x6589(%rip), %rsi      # 0x1f9da
leaq 0x5626(%rip), %rdx      # 0x1ea7e
movq %rbx, %rdi
callq 0x8ff5
leaq 0x22c07d(%rip), %rdi    # 0x2454e4
movl $0x400, %edx            # imm = 0x400
movq %rax, %rsi
callq 0xe97a
leaq 0x657f(%rip), %rsi      # 0x1f9fa
movsd 0x5565(%rip), %xmm0     # 0x1e9e8
movq %rbx, %rdi
callq 0x91bd
cvttsd2si %xmm0, %eax
movl %eax, 0x22c44f(%rip)    # 0x2458e4
movq %rbx, %rdi
callq 0x8fd6
xorl %eax, %eax
popq %rbx
retq
// File: /workspace/github_c_makefile_star2_O2/schroeder-lvb[P]sissm/src/pistats.c
// Function: pistatsClientAddCB
int pistatsClientAddCB( char *strIn )
{
    char playerName[256], playerGUID[256], playerIP[256];

    rosterParsePlayerConn( strIn, 256, playerName, playerGUID, playerIP );
    logPrintf( LOG_LEVEL_INFO, "pistats", "Add Client ::%s::%s::%s::", playerName, playerGUID, playerIP );

    if ( apiPlayersGetCount() >= 8 ) {   // if the last connect player is #8 (last slot if 8 port server)
        if ( 0 != strcmp(playerGUID, "76561000000000000" )) {    // check if this is the server owner 
	    apiKickOrBan( 0, playerGUID, "Sorry the last port reserved for server owner only" );
            apiSay ( "pistats: Player %s kicked server full", playerName );
	}
        apiSay ( "pistats: Welcome server owner %s", playerName );
    }
    else {
        apiSay ( "pistats: Welcome %s", playerName );
    }

    return 0;
}

// Assembly:
pushq %r15
pushq %r14
pushq %rbx
subq $0x300, %rsp            # imm = 0x300
leaq 0x100(%rsp), %rbx
movq %rsp, %r14
leaq 0x200(%rsp), %r15
movl $0x100, %esi            # imm = 0x100
movq %rbx, %rdx
movq %r14, %rcx
movq %r15, %r8
callq 0x144b8
leaq 0x6540(%rip), %rsi      # 0x1fa1a
leaq 0x5e51(%rip), %rdx      # 0x1f332
pushq $0x2
popq %rdi
movq %rbx, %rcx
movq %r14, %r8
movq %r15, %r9
xorl %eax, %eax
callq 0x1920b
callq 0x12ab4
cmpl $0x8, %eax
jl 0x19544
leaq 0x55b6(%rip), %rsi      # 0x1eabb
movq %rsp, %rdi
pushq $0x12
popq %rdx
callq 0x82e0
leaq 0x6531(%rip), %rbx      # 0x1fa48
testl %eax, %eax
je 0x1954b
leaq 0x55ab(%rip), %rdx      # 0x1eacd
movq %rsp, %rsi
xorl %edi, %edi
callq 0x128e1
leaq 0x64ef(%rip), %rdi      # 0x1fa22
leaq 0x100(%rsp), %rsi
xorl %eax, %eax
callq 0x125a8
jmp 0x1954b
leaq 0x651e(%rip), %rbx      # 0x1fa69
leaq 0x100(%rsp), %rsi
movq %rbx, %rdi
xorl %eax, %eax
callq 0x125a8
xorl %eax, %eax
addq $0x300, %rsp            # imm = 0x300
popq %rbx
popq %r14
popq %r15
retq
// File: /workspace/github_c_makefile_star2_O2/schroeder-lvb[P]sissm/src/pistats.c
// Function: pistatsClientDelCB
int pistatsClientDelCB( char *strIn )
{
    char playerName[256], playerGUID[256], playerIP[256];

    rosterParsePlayerDisConn( strIn, 256, playerName, playerGUID, playerIP );
    logPrintf( LOG_LEVEL_INFO, "pistats", "Del Client ::%s::%s::%s::", playerName, playerGUID, playerIP );

    apiSay ( "pistats: Good bye %s", playerName );

    return 0;
}

// Assembly:
pushq %r15
pushq %r14
pushq %rbx
subq $0x300, %rsp            # imm = 0x300
leaq 0x200(%rsp), %rbx
leaq 0x100(%rsp), %r14
movq %rsp, %r15
movl $0x100, %esi            # imm = 0x100
movq %rbx, %rdx
movq %r14, %rcx
movq %r15, %r8
callq 0x14544
leaq 0x6475(%rip), %rsi      # 0x1fa1a
leaq 0x55ac(%rip), %rdx      # 0x1eb58
pushq $0x2
popq %rdi
movq %rbx, %rcx
movq %r14, %r8
movq %r15, %r9
xorl %eax, %eax
callq 0x1920b
leaq 0x64b7(%rip), %rdi      # 0x1fa7d
movq %rbx, %rsi
xorl %eax, %eax
callq 0x125a8
xorl %eax, %eax
addq $0x300, %rsp            # imm = 0x300
popq %rbx
popq %r14
popq %r15
retq
// File: /workspace/github_c_makefile_star2_O2/schroeder-lvb[P]sissm/src/pistats.c
// Function: pistatsMapChangeCB
int pistatsMapChangeCB( char *strIn )
{
    char mapName[256];

    logPrintf( LOG_LEVEL_INFO, "pistats", "Map Change Event ::%s::", strIn );
    rosterParseMapname( strIn, 256, mapName );
    logPrintf( LOG_LEVEL_INFO, "pistats", "Map name ::%s::", mapName );
    return 0;
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %rbx
subq $0x108, %rsp            # imm = 0x108
movq %rdi, %rbx
leaq 0x63e4(%rip), %r14      # 0x1fa1a
leaq 0x5570(%rip), %rdx      # 0x1ebad
pushq $0x2
popq %rbp
movl %ebp, %edi
movq %r14, %rsi
movq %rbx, %rcx
xorl %eax, %eax
callq 0x1920b
movq %rsp, %r15
movq %rbx, %rdi
movl $0x100, %esi            # imm = 0x100
movq %r15, %rdx
callq 0x1479b
leaq 0x555c(%rip), %rdx      # 0x1ebc5
movl %ebp, %edi
movq %r14, %rsi
movq %r15, %rcx
xorl %eax, %eax
callq 0x1920b
xorl %eax, %eax
addq $0x108, %rsp            # imm = 0x108
popq %rbx
popq %r14
popq %r15
popq %rbp
retq
// File: /workspace/github_c_makefile_star2_O2/schroeder-lvb[P]sissm/src/pistats.c
// Function: pistatsGameStartCB
int pistatsGameStartCB( char *strIn )
{
    char newCount[256];

    logPrintf( LOG_LEVEL_INFO, "pistats", "Game Start Event ::%s::", strIn );

    apiGameModePropertySet( "minimumenemies", "4" );
    apiGameModePropertySet( "maximumenemies", "4" );

    strlcpy( newCount, apiGameModePropertyGet( "minimumenemies" ), 256) ;

    // in-game announcement start of game
    apiSay( "pistats: %s -- 2 waves of %s bots", pistatsConfig.stringParameterExample, newCount );  

    return 0;
}

// Assembly:
pushq %r14
pushq %rbx
subq $0x108, %rsp            # imm = 0x108
movq %rdi, %rcx
leaq 0x637e(%rip), %rsi      # 0x1fa1a
leaq 0x5532(%rip), %rdx      # 0x1ebd5
pushq $0x2
popq %rdi
xorl %eax, %eax
callq 0x1920b
leaq 0x1387(%rip), %rbx      # 0x1aa3b
leaq 0x5044(%rip), %r14      # 0x1e6ff
movq %rbx, %rdi
movq %r14, %rsi
callq 0x12464
leaq 0x137d(%rip), %rdi      # 0x1aa4a
movq %r14, %rsi
callq 0x12464
movq %rbx, %rdi
callq 0x12469
movq %rsp, %rbx
movl $0x100, %edx            # imm = 0x100
movq %rbx, %rdi
movq %rax, %rsi
callq 0xe97a
leaq 0x639b(%rip), %rdi      # 0x1fa92
leaq 0x22b5e6(%rip), %rsi    # 0x244ce4
movq %rbx, %rdx
xorl %eax, %eax
callq 0x125a8
xorl %eax, %eax
addq $0x108, %rsp            # imm = 0x108
popq %rbx
popq %r14
retq
// File: /workspace/github_c_makefile_star2_O2/schroeder-lvb[P]sissm/src/pistats.c
// Function: pistatsCapturedCB
int pistatsCapturedCB( char *strIn )
{
    static unsigned long int lastTimeCaptured = 0L;
    // logPrintf( LOG_LEVEL_INFO, "pistats", "Captured Objective Event ::%s::", strIn );
    logPrintf( LOG_LEVEL_INFO, "pistats", "Captured Objective Event" );

    // system generates multiple 'captured' report, so it is necessary
    // to add a 10-second window filter to make sure only one gets fired off.
    //
    if ( lastTimeCaptured + 10L < apiTimeGet() ) {

	apiSay( pistatsConfig.stringParameterExample3 );
        lastTimeCaptured = apiTimeGet();
	// apiServerRestart();

    }

    return 0;
}

// Assembly:
pushq %rbx
leaq 0x6273(%rip), %rsi      # 0x1fa1a
leaq 0x54b6(%rip), %rdx      # 0x1ec64
pushq $0x2
popq %rdi
xorl %eax, %eax
callq 0x1920b
movq 0x22c129(%rip), %rbx    # 0x2458e8
addq $0xa, %rbx
callq 0x10b6a
cmpq %rax, %rbx
jae 0x197e7
leaq 0x22bd10(%rip), %rdi    # 0x2454e4
xorl %eax, %eax
callq 0x125a8
callq 0x10b6a
movq %rax, 0x22c101(%rip)    # 0x2458e8
xorl %eax, %eax
popq %rbx
retq
// File: /workspace/github_c_makefile_star2_O2/schroeder-lvb[P]sissm/src/pistats.c
// Function: pistatsClientSynthDelCB
int pistatsClientSynthDelCB( char *strIn )
{
    static char playerName[256], playerGUID[256], playerIP[256];

    rosterParsePlayerSynthDisConn( strIn, 256, playerName, playerGUID, playerIP );
    logPrintf( LOG_LEVEL_INFO, "pistats", "Synthetic DEL Callback Name ::%s:: IP ::%s:: GUID ::%s::", playerName, playerIP, playerGUID );
    apiSay( "pistats: Disconnect %s", playerName );

    return 0;
}

// Assembly:
pushq %r15
pushq %r14
pushq %rbx
leaq 0x22c0b9(%rip), %rbx    # 0x2458f0
leaq 0x22c1b2(%rip), %r14    # 0x2459f0
leaq 0x22c2ab(%rip), %r15    # 0x245af0
movl $0x100, %esi            # imm = 0x100
movq %rbx, %rdx
movq %r14, %rcx
movq %r15, %r8
callq 0x14403
leaq 0x61bb(%rip), %rsi      # 0x1fa1a
leaq 0x5449(%rip), %rdx      # 0x1ecaf
pushq $0x2
popq %rdi
movq %rbx, %rcx
movq %r15, %r8
movq %r14, %r9
xorl %eax, %eax
callq 0x1920b
leaq 0x625f(%rip), %rdi      # 0x1fadf
movq %rbx, %rsi
xorl %eax, %eax
callq 0x125a8
xorl %eax, %eax
popq %rbx
popq %r14
popq %r15
retq