// File: /workspace/github_c_makefile_star2_O0/qq-smart[P]qq_sh_server/core/qq_json.c
// Function: cJSON_Duplicate
cJSON *cJSON_Duplicate(cJSON *item,int recurse)
{
	cJSON *newitem,*cptr,*nptr=0,*newchild;
	/* Bail on bad ptr */
	if (!item) return 0;
	/* Create new item */
	newitem=cJSON_New_Item();
	if (!newitem) return 0;
	/* Copy over all vars */
	newitem->type=item->type&(~cJSON_IsReference),newitem->valueint=item->valueint,newitem->valuedouble=item->valuedouble;
	if (item->valuestring)	{newitem->valuestring=cJSON_strdup(item->valuestring);	if (!newitem->valuestring)	{cJSON_Delete(newitem);return 0;}}
	if (item->string)		{newitem->string=cJSON_strdup(item->string);			if (!newitem->string)		{cJSON_Delete(newitem);return 0;}}
	/* If non-recursive, then we're done! */
	if (!recurse) return newitem;
	/* Walk the ->next chain for the child. */
	cptr=item->child;
	while (cptr)
	{
		newchild=cJSON_Duplicate(cptr,1);		/* Duplicate (with recurse) each item in the ->next chain */
		if (!newchild) {cJSON_Delete(newitem);return 0;}
		if (nptr)	{nptr->next=newchild,newchild->prev=nptr;nptr=newchild;}	/* If newitem->child already set, then crosswire ->prev and ->next and move on */
		else		{newitem->child=newchild;nptr=newchild;}					/* Set newitem->child and move to it */
		cptr=cptr->next;
	}
	return newitem;
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x40, %rsp
movq %rdi, -0x10(%rbp)
movl %esi, -0x14(%rbp)
movq $0x0, -0x30(%rbp)
cmpq $0x0, -0x10(%rbp)
jne 0x673b
movq $0x0, -0x8(%rbp)
jmp 0x68bb
callq 0x5420
movq %rax, -0x20(%rbp)
cmpq $0x0, -0x20(%rbp)
jne 0x6758
movq $0x0, -0x8(%rbp)
jmp 0x68bb
movq -0x10(%rbp), %rax
movl 0x18(%rax), %ecx
andl $0xfffffeff, %ecx       # imm = 0xFFFFFEFF
movq -0x20(%rbp), %rax
movl %ecx, 0x18(%rax)
movq -0x10(%rbp), %rax
movl 0x28(%rax), %ecx
movq -0x20(%rbp), %rax
movl %ecx, 0x28(%rax)
movq -0x10(%rbp), %rax
movsd 0x30(%rax), %xmm0
movq -0x20(%rbp), %rax
movsd %xmm0, 0x30(%rax)
movq -0x10(%rbp), %rax
cmpq $0x0, 0x20(%rax)
je 0x67d2
movq -0x10(%rbp), %rax
movq 0x20(%rax), %rdi
callq 0x5c40
movq %rax, %rcx
movq -0x20(%rbp), %rax
movq %rcx, 0x20(%rax)
movq -0x20(%rbp), %rax
cmpq $0x0, 0x20(%rax)
jne 0x67d0
movq -0x20(%rbp), %rdi
callq 0x5270
movq $0x0, -0x8(%rbp)
jmp 0x68bb
jmp 0x67d2
movq -0x10(%rbp), %rax
cmpq $0x0, 0x38(%rax)
je 0x6818
movq -0x10(%rbp), %rax
movq 0x38(%rax), %rdi
callq 0x5c40
movq %rax, %rcx
movq -0x20(%rbp), %rax
movq %rcx, 0x38(%rax)
movq -0x20(%rbp), %rax
cmpq $0x0, 0x38(%rax)
jne 0x6816
movq -0x20(%rbp), %rdi
callq 0x5270
movq $0x0, -0x8(%rbp)
jmp 0x68bb
jmp 0x6818
cmpl $0x0, -0x14(%rbp)
jne 0x682b
movq -0x20(%rbp), %rax
movq %rax, -0x8(%rbp)
jmp 0x68bb
movq -0x10(%rbp), %rax
movq 0x10(%rax), %rax
movq %rax, -0x28(%rbp)
cmpq $0x0, -0x28(%rbp)
je 0x68b3
movq -0x28(%rbp), %rdi
movl $0x1, %esi
callq 0x6710
movq %rax, -0x38(%rbp)
cmpq $0x0, -0x38(%rbp)
jne 0x686a
movq -0x20(%rbp), %rdi
callq 0x5270
movq $0x0, -0x8(%rbp)
jmp 0x68bb
cmpq $0x0, -0x30(%rbp)
je 0x6892
movq -0x38(%rbp), %rcx
movq -0x30(%rbp), %rax
movq %rcx, (%rax)
movq -0x30(%rbp), %rcx
movq -0x38(%rbp), %rax
movq %rcx, 0x8(%rax)
movq -0x38(%rbp), %rax
movq %rax, -0x30(%rbp)
jmp 0x68a6
movq -0x38(%rbp), %rcx
movq -0x20(%rbp), %rax
movq %rcx, 0x10(%rax)
movq -0x38(%rbp), %rax
movq %rax, -0x30(%rbp)
movq -0x28(%rbp), %rax
movq (%rax), %rax
movq %rax, -0x28(%rbp)
jmp 0x6837
movq -0x20(%rbp), %rax
movq %rax, -0x8(%rbp)
movq -0x8(%rbp), %rax
addq $0x40, %rsp
popq %rbp
retq
nopw %cs:(%rax,%rax)