// File: /workspace/github_c_makefile_star2_O0/JimKent[P]linearSat/lib/mime.c
// Function: parseMultiParts
struct mimePart *parseMultiParts(struct mimeBuf *b, char *altHeader)
/* This is a recursive function.  It parses multipart MIME messages.
   Data that are binary or too large will be saved in mimePart->filename
   otherwise saved as a c-string in mimePart->data.  If multipart,
   then first child is mimePart->child, subsequent sibs are in child->next.
   altHeader is a string of headers that can be fed in if the headers have
   already been read off the stream by an earlier process, i.e. apache.
 */
{ 
struct mimePart *p=AllocA(*p);
char *parentboundary = NULL, *boundary = NULL;
char *ct = NULL;
boolean autoBoundary = FALSE;


//debug
//fprintf(stderr,"altHeader=[%s]\n",altHeader);

if (sameOk(altHeader, "autoBoundary"))
    { /* process things with no explicit header.
       *  look for *MIME* \n\n-- */
    struct dyString *dy = dyStringNew(0);
    char *prevPrevLine = NULL;
    char *prevLine = NULL;
    char *line = NULL;
    boolean found = FALSE;
    autoBoundary = TRUE;
    while (TRUE)
	{
	if (b->i >= b->eoi && b->eoi < b->eom)  /* at end of input */
	    break;
	line = getLineMB(b);
	if (line && startsWith("--",line) // && 
	    //sameString(prevLine,"") && 
	    //prevPrevLine &&
	    //stringIn("MULTI",prevPrevLine) && 
	    //stringIn("MIME",prevPrevLine) 
	    )
	    {
	    found = TRUE;
	    break;
	    }
	freez(&prevPrevLine);
	prevPrevLine = prevLine;
	prevLine = line;
	if (prevPrevLine)
	    touppers(prevPrevLine);
	}
    if (!found)
	errAbort("autoBoundary: No initial boundary found.");

    dyStringPrintf(dy, "CONTENT-TYPE:multipart/form-data; boundary=%s%s%s", 
	line+2, getNewLineByType(), getNewLineByType() );
    altHeader = dyStringCannibalize(&dy); 
    
    //debug
    //fprintf(stderr,"autoBoundary altHeader = [%s]\n",altHeader);
    //fflush(stderr); 

    freez(&prevPrevLine);	    
    freez(&prevLine);	    
    freez(&line);	    
    }

//debug
//fprintf(stderr,"\n");
readPartHeaderMB(b,p,altHeader);

ct = hashFindVal(p->hdr,"content-type");  /* use lowercase key */
//debug
//fprintf(stderr,"ct from hash:%s\n",ct);
//fflush(stderr); 

if (ct && startsWith("multipart/",ct))
    {
    char bound[MAXBOUNDARY]; 
    char *bnd = NULL;
    struct mimePart *child = NULL;

    /* these 3 vars just for processing epilog chunk: */
    char *bp=NULL;
    int size=0;
    boolean hasZeros=FALSE;

    /* save */
    parentboundary = b->boundary;

    boundary = getMimeHeaderFieldVal(ct,"boundary");
    if (strlen(boundary) >= MAXBOUNDARY)
	errAbort("error: boundary= value too long in MIME header Content-type:%s",ct);
    safef(bound, sizeof(bound), "--%s",boundary);  /* do not prepend CRLF to boundary yet */
    freez(&boundary);
    boundary = cloneString(bound);
    //debug
    //fprintf(stderr,"initial boundary parsed:%s\n",boundary);
    //fflush(stderr); 

    if (!autoBoundary)
	{
	/* skip any extra "prolog" before the initial boundary marker */
	while (TRUE)
	    {
	    bnd = getLineMB(b);
	    if (sameString(bnd,boundary)) 
	       break;
	    freez(&bnd);
	    }
	    //debug
	    //fprintf(stderr,"initial boundary found:%s\n",bnd);
	    //fflush(stderr); 
	freez(&bnd);
	}

    /* include crlf in the boundary so bodies won't have trailing a CRLF
     * this is done here so that in case there's no extra CRLF
     * between the header and the boundary, it will still work,
     * so we only prepend the CRLF to the boundary after initial found */
    safef(bound,sizeof(bound),"%s%s", getNewLineByType(), boundary);
    freez(&boundary);
    boundary=cloneString(bound);
    
    setBoundaryMB(b, boundary);

    while(TRUE)
	{
	int i = 0;
	char c1 = ' ', c2 = ' ';
    	child = parseMultiParts(b,NULL);
	slAddHead(&p->multi,child);
	//call getLine, compare to boundary 
	/* skip extra initial boundary marker - it's moot anyway */
	freez(&bnd);
	    //debug
	    //fprintf(stderr,"post-parse pre-getLineMB dumpMB: ");
	    //dumpMB(b);  //debug
	for (i=0;i<strlen(boundary);++i)
	    bound[i] = getcMB(b);
	bound[i] = 0;    
	if (!sameString(bound,boundary))
	    errAbort("expected boundary %s, but found %s in MIME",boundary,bound);
	//debug
    	//fprintf(stderr,"\nfound boundary:%s\n",bound);
	//fflush(stderr); 
    	c1 = getcMB(b);
	if (c1 == '-')
	    {
	    c2 = getcMB(b);
	    if (c2 == '-')
    		break;  /* last boundary found */
	    else		    
	    	errAbort("expected -- after boundary %s, but found %c%c in MIME",boundary,c1,c2);
	    }
	if (nlType == nlt_dos)
	    c2 = getcMB(b);
	switch (nlType)
	    {
	    case nlt_dos:
		if (c1 == 0x0d && c2 == 0x0a)
		    break;
		else		    
		    errAbort("expected CRLF after boundary %s, but found %c%c in MIME",boundary,c1,c2);
	    case nlt_unix:
		if (c1 == 0x0a)
		    break;
		else		    
		    errAbort("expected LF after boundary %s, but found %c in MIME",boundary,c1);
	    case nlt_mac:
		if (c1 == 0x0d)
		    break;
		else		    
		    errAbort("expected CR after boundary %s, but found %c in MIME",boundary,c1);
	    default:
		    errAbort("unexpected nlType %d after boundary %s",nlType,boundary);
	    }
	setEopMB(b);
	}	
    freez(&bnd);
    slReverse(&p->multi);
    /* restore */
    freez(&boundary);
    boundary = parentboundary;
	//debug
    	//fprintf(stderr,"restoring parent boundary = %s\n",boundary);
    setBoundaryMB(b, boundary);

    /* dump any "epilog" that may be between the 
     * end of the child boundary and the parent boundary */
    getChunkMB(b, &bp, &size, &hasZeros);
    //debug
    //fprintf(stderr,"epilog size=%d\n",size);
    	   
    
    }
else
    {
    char *bp=NULL;
    int size=0;
    boolean hasZeros=FALSE;
    boolean toobig=FALSE;
    boolean asFile=FALSE;
    boolean convert=FALSE;
    FILE *f = NULL;
    struct dyString *dy=newDyString(1024);
    //debug
    //fprintf(stderr,"starting new part (non-multi), dumpMB: \n");
    //dumpMB(b);  //debug
    
    //debug
    //ct = hashFindVal(p->hdr,"content-transfer-encoding");  /* use lowercase key */
    //fprintf(stderr,"cte from hash:%s\n",ct);
	
    while(TRUE)
	{
	// break if eop, eod, eoi
    	getChunkMB(b, &bp, &size, &hasZeros);
	//debug
    	//fprintf(stderr,"bp=%lu size=%d, hasZeros=%d \n", 
	//    (unsigned long) bp,
	//    size,
	//    hasZeros);
	if (hasZeros)
	    {
	    p->binary=TRUE;
	    }
	//if (hasZeros && !asFile)
	//    {
	//    convert=TRUE;
	//    }
	if (!asFile && p->size+size > MAXPARTSIZE)
	    {
	    toobig = TRUE;
	    convert=TRUE;
	    }
	if (convert)
	    {
	    struct tempName uploadedData;
	    convert=FALSE;
	    asFile = TRUE;
	    makeTempName(&uploadedData, "hgSs", ".cgi");
	    p->fileName=cloneString(uploadedData.forCgi);
	    f = mustOpen(p->fileName,"w");
	    mustWrite(f,dy->string,dy->stringSize);
	    freeDyString(&dy);
	    }
	if (asFile)
	    {
	    mustWrite(f,bp,size);
	    }
	else
	    {
    	    dyStringAppendN(dy,bp,size);
	    }
	p->size+=size;
	if (p->size > MAXDATASIZE)
	    errAbort("max data size allowable for upload in MIME exceeded %llu",(unsigned long long)MAXDATASIZE);
	    
	
	if (b->eop && b->i == b->eop)  /* end of part */
	    {
	    break;
	    }
	if (b->i == b->eoi && b->eoi < b->eom) /* end of data */
	    {
	    break;
	    }
	moreMimeBuf(b);
	}
    if (dy)
	{
	p->data=needLargeMem(dy->stringSize+1);
	memcpy(p->data,dy->string,dy->stringSize);
	p->data[dy->stringSize] = 0;
    	freeDyString(&dy);
	}
    if (f)
	carefulClose(&f);

    //debug
    //fprintf(stderr,"p->fileName=%s p->data=[%s]\n",p->fileName,p->data);

    }

return p;
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x240, %rsp            # imm = 0x240
movq %rdi, -0x8(%rbp)
movq %rsi, -0x10(%rbp)
movl $0x38, %edi
callq 0x152f0
movq %rax, -0x18(%rbp)
movq $0x0, -0x20(%rbp)
movq $0x0, -0x28(%rbp)
movq $0x0, -0x30(%rbp)
movl $0x0, -0x34(%rbp)
movq -0x10(%rbp), %rdi
leaq 0x6495(%rip), %rsi      # 0x27560
callq 0xa440
cmpl $0x0, %eax
jne 0x21229
xorl %edi, %edi
callq 0xf030
movq %rax, -0x40(%rbp)
movq $0x0, -0x48(%rbp)
movq $0x0, -0x50(%rbp)
movq $0x0, -0x58(%rbp)
movl $0x0, -0x5c(%rbp)
movl $0x1, -0x34(%rbp)
movq -0x8(%rbp), %rax
movq 0x8008(%rax), %rax
movq -0x8(%rbp), %rcx
cmpq 0x8030(%rcx), %rax
jb 0x2113c
movq -0x8(%rbp), %rax
movq 0x8030(%rax), %rax
movq -0x8(%rbp), %rcx
cmpq 0x8038(%rcx), %rax
jae 0x2113c
jmp 0x2119c
movq -0x8(%rbp), %rdi
callq 0x21940
movq %rax, -0x58(%rbp)
cmpq $0x0, -0x58(%rbp)
je 0x2116e
movq -0x58(%rbp), %rsi
leaq 0x4ab8(%rip), %rdi      # 0x25c13
callq 0xa4b0
cmpl $0x0, %eax
je 0x2116e
movl $0x1, -0x5c(%rbp)
jmp 0x2119c
leaq -0x48(%rbp), %rdi
callq 0x15410
movq -0x50(%rbp), %rax
movq %rax, -0x48(%rbp)
movq -0x58(%rbp), %rax
movq %rax, -0x50(%rbp)
cmpq $0x0, -0x48(%rbp)
je 0x21197
movq -0x48(%rbp), %rdi
callq 0xad80
jmp 0x2110a
cmpl $0x0, -0x5c(%rbp)
jne 0x211b0
leaq 0x63c4(%rip), %rdi      # 0x2756d
movb $0x0, %al
callq 0xfd50
movq -0x40(%rbp), %rax
movq %rax, -0x220(%rbp)
movq -0x58(%rbp), %rax
addq $0x2, %rax
movq %rax, -0x218(%rbp)
callq 0x21020
movq %rax, -0x210(%rbp)
callq 0x21020
movq -0x220(%rbp), %rdi
movq -0x218(%rbp), %rdx
movq -0x210(%rbp), %rcx
movq %rax, %r8
leaq 0x639c(%rip), %rsi      # 0x27596
movb $0x0, %al
callq 0xf550
leaq -0x40(%rbp), %rdi
callq 0xf0d0
movq %rax, -0x10(%rbp)
leaq -0x48(%rbp), %rdi
callq 0x15410
leaq -0x50(%rbp), %rdi
callq 0x15410
leaq -0x58(%rbp), %rdi
callq 0x15410
movq -0x8(%rbp), %rdi
movq -0x18(%rbp), %rsi
movq -0x10(%rbp), %rdx
callq 0x21a80
movq -0x18(%rbp), %rax
movq 0x8(%rax), %rdi
leaq 0x60b9(%rip), %rsi      # 0x27302
callq 0x10d00
movq %rax, -0x30(%rbp)
cmpq $0x0, -0x30(%rbp)
je 0x21662
movq -0x30(%rbp), %rsi
leaq 0x6360(%rip), %rdi      # 0x275c8
callq 0xa4b0
cmpl $0x0, %eax
je 0x21662
movq $0x0, -0xb8(%rbp)
movq $0x0, -0xc0(%rbp)
movq $0x0, -0xc8(%rbp)
movl $0x0, -0xcc(%rbp)
movl $0x0, -0xd0(%rbp)
movq -0x8(%rbp), %rax
movq 0x8018(%rax), %rax
movq %rax, -0x20(%rbp)
movq -0x30(%rbp), %rdi
leaq 0x630e(%rip), %rsi      # 0x275d3
callq 0x20e40
movq %rax, -0x28(%rbp)
movq -0x28(%rbp), %rdi
callq 0x31f0
cmpq $0x4d, %rax
jb 0x212ef
movq -0x30(%rbp), %rsi
leaq 0x62f4(%rip), %rdi      # 0x275dc
movb $0x0, %al
callq 0xfd50
leaq -0xb0(%rbp), %rdi
movq -0x28(%rbp), %rcx
movl $0x4d, %esi
leaq 0x6315(%rip), %rdx      # 0x2761b
movb $0x0, %al
callq 0xdc90
leaq -0x28(%rbp), %rdi
callq 0x15410
leaq -0xb0(%rbp), %rdi
callq 0x7530
movq %rax, -0x28(%rbp)
cmpl $0x0, -0x34(%rbp)
jne 0x2136f
jmp 0x2132e
movq -0x8(%rbp), %rdi
callq 0x21940
movq %rax, -0xb8(%rbp)
movq -0xb8(%rbp), %rdi
movq -0x28(%rbp), %rsi
callq 0x3410
cmpl $0x0, %eax
jne 0x21355
jmp 0x21363
leaq -0xb8(%rbp), %rdi
callq 0x15410
jmp 0x2132e
leaq -0xb8(%rbp), %rdi
callq 0x15410
leaq -0xb0(%rbp), %rax
movq %rax, -0x228(%rbp)
callq 0x21020
movq -0x228(%rbp), %rdi
movq %rax, %rcx
movq -0x28(%rbp), %r8
movl $0x4d, %esi
leaq 0x3e33(%rip), %rdx      # 0x251cf
movb $0x0, %al
callq 0xdc90
leaq -0x28(%rbp), %rdi
callq 0x15410
leaq -0xb0(%rbp), %rdi
callq 0x7530
movq %rax, -0x28(%rbp)
movq -0x8(%rbp), %rdi
movq -0x28(%rbp), %rsi
callq 0x21cd0
movl $0x0, -0xd4(%rbp)
movb $0x20, -0xd5(%rbp)
movb $0x20, -0xd6(%rbp)
movq -0x8(%rbp), %rdi
xorl %eax, %eax
movl %eax, %esi
callq 0x21080
movq %rax, -0xc0(%rbp)
movq -0x18(%rbp), %rdi
addq $0x30, %rdi
movq -0xc0(%rbp), %rsi
callq 0x21d40
leaq -0xb8(%rbp), %rdi
callq 0x15410
movl $0x0, -0xd4(%rbp)
movslq -0xd4(%rbp), %rax
movq %rax, -0x230(%rbp)
movq -0x28(%rbp), %rdi
callq 0x31f0
movq %rax, %rcx
movq -0x230(%rbp), %rax
cmpq %rcx, %rax
jae 0x2146f
movq -0x8(%rbp), %rdi
callq 0x21d80
movb %al, %cl
movslq -0xd4(%rbp), %rax
movb %cl, -0xb0(%rbp,%rax)
movl -0xd4(%rbp), %eax
addl $0x1, %eax
movl %eax, -0xd4(%rbp)
jmp 0x2141f
movslq -0xd4(%rbp), %rax
movb $0x0, -0xb0(%rbp,%rax)
leaq -0xb0(%rbp), %rdi
movq -0x28(%rbp), %rsi
callq 0x3410
cmpl $0x0, %eax
je 0x214ac
movq -0x28(%rbp), %rsi
leaq -0xb0(%rbp), %rdx
leaq 0x617b(%rip), %rdi      # 0x27620
movb $0x0, %al
callq 0xfd50
movq -0x8(%rbp), %rdi
callq 0x21d80
movb %al, -0xd5(%rbp)
movsbl -0xd5(%rbp), %eax
cmpl $0x2d, %eax
jne 0x21509
movq -0x8(%rbp), %rdi
callq 0x21d80
movb %al, -0xd6(%rbp)
movsbl -0xd6(%rbp), %eax
cmpl $0x2d, %eax
jne 0x214e7
jmp 0x21608
movq -0x28(%rbp), %rsi
movsbl -0xd5(%rbp), %edx
movsbl -0xd6(%rbp), %ecx
leaq 0x614b(%rip), %rdi      # 0x2764b
movb $0x0, %al
callq 0xfd50
jmp 0x21509
cmpl $0x2, 0x2201c(%rip)     # 0x4352c
jne 0x21521
movq -0x8(%rbp), %rdi
callq 0x21d80
movb %al, -0xd6(%rbp)
movl 0x22005(%rip), %eax     # 0x4352c
movl %eax, -0x234(%rbp)
subl $0x1, %eax
je 0x21590
jmp 0x21534
movl -0x234(%rbp), %eax
subl $0x2, %eax
je 0x21551
jmp 0x21541
movl -0x234(%rbp), %eax
subl $0x3, %eax
je 0x215b9
jmp 0x215e2
movsbl -0xd5(%rbp), %eax
cmpl $0xd, %eax
jne 0x2156e
movsbl -0xd6(%rbp), %eax
cmpl $0xa, %eax
jne 0x2156e
jmp 0x215fa
movq -0x28(%rbp), %rsi
movsbl -0xd5(%rbp), %edx
movsbl -0xd6(%rbp), %ecx
leaq 0x60fa(%rip), %rdi      # 0x27681
movb $0x0, %al
callq 0xfd50
jmp 0x21590
movsbl -0xd5(%rbp), %eax
cmpl $0xa, %eax
jne 0x2159e
jmp 0x215fa
movq -0x28(%rbp), %rsi
movsbl -0xd5(%rbp), %edx
leaq 0x6109(%rip), %rdi      # 0x276b9
movb $0x0, %al
callq 0xfd50
jmp 0x215b9
movsbl -0xd5(%rbp), %eax
cmpl $0xd, %eax
jne 0x215c7
jmp 0x215fa
movq -0x28(%rbp), %rsi
movsbl -0xd5(%rbp), %edx
leaq 0x6114(%rip), %rdi      # 0x276ed
movb $0x0, %al
callq 0xfd50
jmp 0x215e2
movl 0x21f44(%rip), %esi     # 0x4352c
movq -0x28(%rbp), %rdx
leaq 0x612e(%rip), %rdi      # 0x27721
movb $0x0, %al
callq 0xfd50
movq -0x8(%rbp), %rdi
callq 0x21e30
jmp 0x213c9
leaq -0xb8(%rbp), %rdi
callq 0x15410
movq -0x18(%rbp), %rdi
addq $0x30, %rdi
callq 0x7bb0
leaq -0x28(%rbp), %rdi
callq 0x15410
movq -0x20(%rbp), %rax
movq %rax, -0x28(%rbp)
movq -0x8(%rbp), %rdi
movq -0x28(%rbp), %rsi
callq 0x21cd0
movq -0x8(%rbp), %rdi
leaq -0xc8(%rbp), %rsi
leaq -0xcc(%rbp), %rdx
leaq -0xd0(%rbp), %rcx
callq 0x21eb0
jmp 0x21933
movq $0x0, -0xe0(%rbp)
movl $0x0, -0xe4(%rbp)
movl $0x0, -0xe8(%rbp)
movl $0x0, -0xec(%rbp)
movl $0x0, -0xf0(%rbp)
movl $0x0, -0xf4(%rbp)
movq $0x0, -0x100(%rbp)
movl $0x400, %edi            # imm = 0x400
callq 0xf030
movq %rax, -0x108(%rbp)
movq -0x8(%rbp), %rdi
leaq -0xe0(%rbp), %rsi
leaq -0xe4(%rbp), %rdx
leaq -0xe8(%rbp), %rcx
callq 0x21eb0
cmpl $0x0, -0xe8(%rbp)
je 0x216ed
movq -0x18(%rbp), %rax
movl $0x1, 0x28(%rax)
cmpl $0x0, -0xf0(%rbp)
jne 0x2172b
movq -0x18(%rbp), %rax
movq 0x10(%rax), %rax
movslq -0xe4(%rbp), %rcx
addq %rcx, %rax
movabsq $0x1000000000, %rcx     # imm = 0x1000000000
cmpq %rcx, %rax
jle 0x2172b
movl $0x1, -0xec(%rbp)
movl $0x1, -0xf4(%rbp)
cmpl $0x0, -0xf4(%rbp)
je 0x217c6
movl $0x0, -0xf4(%rbp)
movl $0x1, -0xf0(%rbp)
leaq -0x208(%rbp), %rdi
leaq 0x5fee(%rip), %rsi      # 0x27748
leaq 0x5fec(%rip), %rdx      # 0x2774d
callq 0x22040
leaq -0x208(%rbp), %rdi
callq 0x7530
movq %rax, %rcx
movq -0x18(%rbp), %rax
movq %rcx, 0x20(%rax)
movq -0x18(%rbp), %rax
movq 0x20(%rax), %rdi
leaq 0x32c9(%rip), %rsi      # 0x24a55
callq 0xc4f0
movq %rax, -0x100(%rbp)
movq -0x100(%rbp), %rdi
movq -0x108(%rbp), %rax
movq 0x8(%rax), %rsi
movq -0x108(%rbp), %rax
movslq 0x14(%rax), %rdx
callq 0xc620
leaq -0x108(%rbp), %rdi
callq 0xf090
cmpl $0x0, -0xf0(%rbp)
je 0x217eb
movq -0x100(%rbp), %rdi
movq -0xe0(%rbp), %rsi
movslq -0xe4(%rbp), %rdx
callq 0xc620
jmp 0x21804
movq -0x108(%rbp), %rdi
movq -0xe0(%rbp), %rsi
movl -0xe4(%rbp), %edx
callq 0xf200
movslq -0xe4(%rbp), %rcx
movq -0x18(%rbp), %rax
addq 0x10(%rax), %rcx
movq %rcx, 0x10(%rax)
movq -0x18(%rbp), %rax
movabsq $0x1000000000, %rcx     # imm = 0x1000000000
cmpq %rcx, 0x10(%rax)
jle 0x21843
leaq 0x5f20(%rip), %rdi      # 0x27752
movabsq $0x1000000000, %rsi     # imm = 0x1000000000
movb $0x0, %al
callq 0xfd50
movq -0x8(%rbp), %rax
cmpq $0x0, 0x8010(%rax)
je 0x2186b
movq -0x8(%rbp), %rax
movq 0x8008(%rax), %rax
movq -0x8(%rbp), %rcx
cmpq 0x8010(%rcx), %rax
jne 0x2186b
jmp 0x218ab
movq -0x8(%rbp), %rax
movq 0x8008(%rax), %rax
movq -0x8(%rbp), %rcx
cmpq 0x8030(%rcx), %rax
jne 0x2189d
movq -0x8(%rbp), %rax
movq 0x8030(%rax), %rax
movq -0x8(%rbp), %rcx
cmpq 0x8038(%rcx), %rax
jae 0x2189d
jmp 0x218ab
movq -0x8(%rbp), %rdi
callq 0x20c10
jmp 0x216bb
cmpq $0x0, -0x108(%rbp)
je 0x2191b
movq -0x108(%rbp), %rax
movl 0x14(%rax), %eax
addl $0x1, %eax
movslq %eax, %rdi
callq 0x14ff0
movq %rax, %rcx
movq -0x18(%rbp), %rax
movq %rcx, 0x18(%rax)
movq -0x18(%rbp), %rax
movq 0x18(%rax), %rdi
movq -0x108(%rbp), %rax
movq 0x8(%rax), %rsi
movq -0x108(%rbp), %rax
movslq 0x14(%rax), %rdx
callq 0x3470
movq -0x18(%rbp), %rax
movq 0x18(%rax), %rax
movq -0x108(%rbp), %rcx
movslq 0x14(%rcx), %rcx
movb $0x0, (%rax,%rcx)
leaq -0x108(%rbp), %rdi
callq 0xf090
cmpq $0x0, -0x100(%rbp)
je 0x21931
leaq -0x100(%rbp), %rdi
callq 0xcf30
jmp 0x21933
movq -0x18(%rbp), %rax
addq $0x240, %rsp            # imm = 0x240
popq %rbp
retq