// File: jliesch[P]ofxget/pugixml/pugixml.cpp
// Function: pugi::impl::(anonymous namespace)::xml_parser::parse_exclamation(char*, pugi::xml_node_struct*, unsigned int, char)
char_t* parse_exclamation(char_t* s, xml_node_struct* cursor, unsigned int optmsk, char_t endch)
		{
			// parse node contents, starting with exclamation mark
			++s;

			if (*s == '-') // '<!-...'
			{
				++s;

				if (*s == '-') // '<!--...'
				{
					++s;

					if (PUGI__OPTSET(parse_comments))
					{
						PUGI__PUSHNODE(node_comment); // Append a new node on the tree.
						cursor->value = s; // Save the offset.
					}

					if (PUGI__OPTSET(parse_eol) && PUGI__OPTSET(parse_comments))
					{
						s = strconv_comment(s, endch);

						if (!s) PUGI__THROW_ERROR(status_bad_comment, cursor->value);
					}
					else
					{
						// Scan for terminating '-->'.
						PUGI__SCANFOR(s[0] == '-' && s[1] == '-' && PUGI__ENDSWITH(s[2], '>'));
						PUGI__CHECK_ERROR(status_bad_comment, s);

						if (PUGI__OPTSET(parse_comments))
							*s = 0; // Zero-terminate this segment at the first terminating '-'.

						s += (s[2] == '>' ? 3 : 2); // Step over the '\0->'.
					}
				}
				else PUGI__THROW_ERROR(status_bad_comment, s);
			}
			else if (*s == '[')
			{
				// '<![CDATA[...'
				if (*++s=='C' && *++s=='D' && *++s=='A' && *++s=='T' && *++s=='A' && *++s == '[')
				{
					++s;

					if (PUGI__OPTSET(parse_cdata))
					{
						PUGI__PUSHNODE(node_cdata); // Append a new node on the tree.
						cursor->value = s; // Save the offset.

						if (PUGI__OPTSET(parse_eol))
						{
							s = strconv_cdata(s, endch);

							if (!s) PUGI__THROW_ERROR(status_bad_cdata, cursor->value);
						}
						else
						{
							// Scan for terminating ']]>'.
							PUGI__SCANFOR(s[0] == ']' && s[1] == ']' && PUGI__ENDSWITH(s[2], '>'));
							PUGI__CHECK_ERROR(status_bad_cdata, s);

							*s++ = 0; // Zero-terminate this segment.
						}
					}
					else // Flagged for discard, but we still have to scan for the terminator.
					{
						// Scan for terminating ']]>'.
						PUGI__SCANFOR(s[0] == ']' && s[1] == ']' && PUGI__ENDSWITH(s[2], '>'));
						PUGI__CHECK_ERROR(status_bad_cdata, s);

						++s;
					}

					s += (s[1] == '>' ? 2 : 1); // Step over the last ']>'.
				}
				else PUGI__THROW_ERROR(status_bad_cdata, s);
			}
			else if (s[0] == 'D' && s[1] == 'O' && s[2] == 'C' && s[3] == 'T' && s[4] == 'Y' && s[5] == 'P' && PUGI__ENDSWITH(s[6], 'E'))
			{
				s -= 2;

				if (cursor->parent) PUGI__THROW_ERROR(status_bad_doctype, s);

				char_t* mark = s + 9;

				s = parse_doctype_group(s, endch);
				if (!s) return s;

				assert((*s == 0 && endch == '>') || *s == '>');
				if (*s) *s++ = 0;

				if (PUGI__OPTSET(parse_doctype))
				{
					while (PUGI__IS_CHARTYPE(*mark, ct_space)) ++mark;

					PUGI__PUSHNODE(node_doctype);

					cursor->value = mark;
				}
			}
			else if (*s == 0 && endch == '-') PUGI__THROW_ERROR(status_bad_comment, s);
			else if (*s == 0 && endch == '[') PUGI__THROW_ERROR(status_bad_cdata, s);
			else PUGI__THROW_ERROR(status_unrecognized_tag, s);

			return s;
		}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x50, %rsp
movb %r8b, %al
movq %rdi, -0x10(%rbp)
movq %rsi, -0x18(%rbp)
movq %rdx, -0x20(%rbp)
movl %ecx, -0x24(%rbp)
movb %al, -0x25(%rbp)
movq -0x10(%rbp), %rax
movq %rax, -0x38(%rbp)
movq -0x18(%rbp), %rax
addq $0x1, %rax
movq %rax, -0x18(%rbp)
movq -0x18(%rbp), %rax
movsbl (%rax), %eax
cmpl $0x2d, %eax
jne 0x53677
movq -0x18(%rbp), %rax
addq $0x1, %rax
movq %rax, -0x18(%rbp)
movq -0x18(%rbp), %rax
movsbl (%rax), %eax
cmpl $0x2d, %eax
jne 0x53652
movq -0x18(%rbp), %rax
addq $0x1, %rax
movq %rax, -0x18(%rbp)
movl -0x24(%rbp), %eax
andl $0x2, %eax
cmpl $0x0, %eax
je 0x53500
movq -0x38(%rbp), %rax
movq -0x20(%rbp), %rdi
movq (%rax), %rsi
movl $0x5, %edx
callq 0x4fb50
movq %rax, -0x20(%rbp)
cmpq $0x0, -0x20(%rbp)
jne 0x534f4
movq -0x38(%rbp), %rax
movq -0x18(%rbp), %rcx
movq %rcx, 0x8(%rax)
movl $0x3, 0x10(%rax)
movq $0x0, -0x8(%rbp)
jmp 0x53c56
movq -0x18(%rbp), %rcx
movq -0x20(%rbp), %rax
movq %rcx, 0x10(%rax)
movl -0x24(%rbp), %eax
andl $0x20, %eax
cmpl $0x0, %eax
je 0x53557
movl -0x24(%rbp), %eax
andl $0x2, %eax
cmpl $0x0, %eax
je 0x53557
movq -0x18(%rbp), %rdi
movsbl -0x25(%rbp), %esi
callq 0x563f0
movq %rax, -0x18(%rbp)
cmpq $0x0, -0x18(%rbp)
jne 0x53552
movq -0x38(%rbp), %rax
movq -0x20(%rbp), %rcx
movq 0x10(%rcx), %rcx
movq %rcx, 0x8(%rax)
movl $0x7, 0x10(%rax)
movq $0x0, -0x8(%rbp)
jmp 0x53c56
jmp 0x53650
jmp 0x53559
movq -0x18(%rbp), %rax
movsbl (%rax), %ecx
xorl %eax, %eax
cmpl $0x0, %ecx
movb %al, -0x39(%rbp)
je 0x535d2
movq -0x18(%rbp), %rax
movsbl (%rax), %ecx
xorl %eax, %eax
cmpl $0x2d, %ecx
movb %al, -0x3a(%rbp)
jne 0x535ca
movq -0x18(%rbp), %rax
movsbl 0x1(%rax), %ecx
xorl %eax, %eax
cmpl $0x2d, %ecx
movb %al, -0x3a(%rbp)
jne 0x535ca
movq -0x18(%rbp), %rax
movsbl 0x2(%rax), %ecx
movb $0x1, %al
cmpl $0x3e, %ecx
movb %al, -0x3b(%rbp)
je 0x535c4
movq -0x18(%rbp), %rax
movsbl 0x2(%rax), %ecx
xorl %eax, %eax
cmpl $0x0, %ecx
movb %al, -0x3c(%rbp)
jne 0x535be
movsbl -0x25(%rbp), %eax
cmpl $0x3e, %eax
sete %al
movb %al, -0x3c(%rbp)
movb -0x3c(%rbp), %al
movb %al, -0x3b(%rbp)
movb -0x3b(%rbp), %al
movb %al, -0x3a(%rbp)
movb -0x3a(%rbp), %al
xorb $-0x1, %al
movb %al, -0x39(%rbp)
movb -0x39(%rbp), %al
testb $0x1, %al
jne 0x535db
jmp 0x535ec
movq -0x18(%rbp), %rax
addq $0x1, %rax
movq %rax, -0x18(%rbp)
jmp 0x53559
movq -0x18(%rbp), %rax
movsbl (%rax), %eax
cmpl $0x0, %eax
jne 0x53618
movq -0x38(%rbp), %rax
movq -0x18(%rbp), %rcx
movq %rcx, 0x8(%rax)
movl $0x7, 0x10(%rax)
movq $0x0, -0x8(%rbp)
jmp 0x53c56
movl -0x24(%rbp), %eax
andl $0x2, %eax
cmpl $0x0, %eax
je 0x5362a
movq -0x18(%rbp), %rax
movb $0x0, (%rax)
movq -0x18(%rbp), %rax
movsbl 0x2(%rax), %edx
movl $0x2, %ecx
movl $0x3, %eax
cmpl $0x3e, %edx
cmovel %eax, %ecx
movq -0x18(%rbp), %rax
movslq %ecx, %rcx
addq %rcx, %rax
movq %rax, -0x18(%rbp)
jmp 0x53672
movq -0x38(%rbp), %rax
movq -0x18(%rbp), %rcx
movq %rcx, 0x8(%rax)
movl $0x7, 0x10(%rax)
movq $0x0, -0x8(%rbp)
jmp 0x53c56
jmp 0x53c4e
movq -0x18(%rbp), %rax
movsbl (%rax), %eax
cmpl $0x5b, %eax
jne 0x539d4
movq -0x18(%rbp), %rax
movq %rax, %rcx
addq $0x1, %rcx
movq %rcx, -0x18(%rbp)
movsbl 0x1(%rax), %eax
cmpl $0x43, %eax
jne 0x539af
movq -0x18(%rbp), %rax
movq %rax, %rcx
addq $0x1, %rcx
movq %rcx, -0x18(%rbp)
movsbl 0x1(%rax), %eax
cmpl $0x44, %eax
jne 0x539af
movq -0x18(%rbp), %rax
movq %rax, %rcx
addq $0x1, %rcx
movq %rcx, -0x18(%rbp)
movsbl 0x1(%rax), %eax
cmpl $0x41, %eax
jne 0x539af
movq -0x18(%rbp), %rax
movq %rax, %rcx
addq $0x1, %rcx
movq %rcx, -0x18(%rbp)
movsbl 0x1(%rax), %eax
cmpl $0x54, %eax
jne 0x539af
movq -0x18(%rbp), %rax
movq %rax, %rcx
addq $0x1, %rcx
movq %rcx, -0x18(%rbp)
movsbl 0x1(%rax), %eax
cmpl $0x41, %eax
jne 0x539af
movq -0x18(%rbp), %rax
movq %rax, %rcx
addq $0x1, %rcx
movq %rcx, -0x18(%rbp)
movsbl 0x1(%rax), %eax
cmpl $0x5b, %eax
jne 0x539af
movq -0x18(%rbp), %rax
addq $0x1, %rax
movq %rax, -0x18(%rbp)
movl -0x24(%rbp), %eax
andl $0x4, %eax
cmpl $0x0, %eax
je 0x538ba
movq -0x38(%rbp), %rax
movq -0x20(%rbp), %rdi
movq (%rax), %rsi
movl $0x4, %edx
callq 0x4fb50
movq %rax, -0x20(%rbp)
cmpq $0x0, -0x20(%rbp)
jne 0x5378a
movq -0x38(%rbp), %rax
movq -0x18(%rbp), %rcx
movq %rcx, 0x8(%rax)
movl $0x3, 0x10(%rax)
movq $0x0, -0x8(%rbp)
jmp 0x53c56
movq -0x18(%rbp), %rcx
movq -0x20(%rbp), %rax
movq %rcx, 0x10(%rax)
movl -0x24(%rbp), %eax
andl $0x20, %eax
cmpl $0x0, %eax
je 0x537e2
movq -0x18(%rbp), %rdi
movsbl -0x25(%rbp), %esi
callq 0x56600
movq %rax, -0x18(%rbp)
cmpq $0x0, -0x18(%rbp)
jne 0x537dd
movq -0x38(%rbp), %rax
movq -0x20(%rbp), %rcx
movq 0x10(%rcx), %rcx
movq %rcx, 0x8(%rax)
movl $0x8, 0x10(%rax)
movq $0x0, -0x8(%rbp)
jmp 0x53c56
jmp 0x538b5
jmp 0x537e4
movq -0x18(%rbp), %rax
movsbl (%rax), %ecx
xorl %eax, %eax
cmpl $0x0, %ecx
movb %al, -0x3d(%rbp)
je 0x5385d
movq -0x18(%rbp), %rax
movsbl (%rax), %ecx
xorl %eax, %eax
cmpl $0x5d, %ecx
movb %al, -0x3e(%rbp)
jne 0x53855
movq -0x18(%rbp), %rax
movsbl 0x1(%rax), %ecx
xorl %eax, %eax
cmpl $0x5d, %ecx
movb %al, -0x3e(%rbp)
jne 0x53855
movq -0x18(%rbp), %rax
movsbl 0x2(%rax), %ecx
movb $0x1, %al
cmpl $0x3e, %ecx
movb %al, -0x3f(%rbp)
je 0x5384f
movq -0x18(%rbp), %rax
movsbl 0x2(%rax), %ecx
xorl %eax, %eax
cmpl $0x0, %ecx
movb %al, -0x40(%rbp)
jne 0x53849
movsbl -0x25(%rbp), %eax
cmpl $0x3e, %eax
sete %al
movb %al, -0x40(%rbp)
movb -0x40(%rbp), %al
movb %al, -0x3f(%rbp)
movb -0x3f(%rbp), %al
movb %al, -0x3e(%rbp)
movb -0x3e(%rbp), %al
xorb $-0x1, %al
movb %al, -0x3d(%rbp)
movb -0x3d(%rbp), %al
testb $0x1, %al
jne 0x53866
jmp 0x53877
movq -0x18(%rbp), %rax
addq $0x1, %rax
movq %rax, -0x18(%rbp)
jmp 0x537e4
movq -0x18(%rbp), %rax
movsbl (%rax), %eax
cmpl $0x0, %eax
jne 0x538a3
movq -0x38(%rbp), %rax
movq -0x18(%rbp), %rcx
movq %rcx, 0x8(%rax)
movl $0x8, 0x10(%rax)
movq $0x0, -0x8(%rbp)
jmp 0x53c56
movq -0x18(%rbp), %rax
movq %rax, %rcx
addq $0x1, %rcx
movq %rcx, -0x18(%rbp)
movb $0x0, (%rax)
jmp 0x53987
jmp 0x538bc
movq -0x18(%rbp), %rax
movsbl (%rax), %ecx
xorl %eax, %eax
cmpl $0x0, %ecx
movb %al, -0x41(%rbp)
je 0x53935
movq -0x18(%rbp), %rax
movsbl (%rax), %ecx
xorl %eax, %eax
cmpl $0x5d, %ecx
movb %al, -0x42(%rbp)
jne 0x5392d
movq -0x18(%rbp), %rax
movsbl 0x1(%rax), %ecx
xorl %eax, %eax
cmpl $0x5d, %ecx
movb %al, -0x42(%rbp)
jne 0x5392d
movq -0x18(%rbp), %rax
movsbl 0x2(%rax), %ecx
movb $0x1, %al
cmpl $0x3e, %ecx
movb %al, -0x43(%rbp)
je 0x53927
movq -0x18(%rbp), %rax
movsbl 0x2(%rax), %ecx
xorl %eax, %eax
cmpl $0x0, %ecx
movb %al, -0x44(%rbp)
jne 0x53921
movsbl -0x25(%rbp), %eax
cmpl $0x3e, %eax
sete %al
movb %al, -0x44(%rbp)
movb -0x44(%rbp), %al
movb %al, -0x43(%rbp)
movb -0x43(%rbp), %al
movb %al, -0x42(%rbp)
movb -0x42(%rbp), %al
xorb $-0x1, %al
movb %al, -0x41(%rbp)
movb -0x41(%rbp), %al
testb $0x1, %al
jne 0x5393e
jmp 0x5394f
movq -0x18(%rbp), %rax
addq $0x1, %rax
movq %rax, -0x18(%rbp)
jmp 0x538bc
movq -0x18(%rbp), %rax
movsbl (%rax), %eax
cmpl $0x0, %eax
jne 0x5397b
movq -0x38(%rbp), %rax
movq -0x18(%rbp), %rcx
movq %rcx, 0x8(%rax)
movl $0x8, 0x10(%rax)
movq $0x0, -0x8(%rbp)
jmp 0x53c56
movq -0x18(%rbp), %rax
addq $0x1, %rax
movq %rax, -0x18(%rbp)
movq -0x18(%rbp), %rax
movsbl 0x1(%rax), %edx
movl $0x1, %ecx
movl $0x2, %eax
cmpl $0x3e, %edx
cmovel %eax, %ecx
movq -0x18(%rbp), %rax
movslq %ecx, %rcx
addq %rcx, %rax
movq %rax, -0x18(%rbp)
jmp 0x539cf
movq -0x38(%rbp), %rax
movq -0x18(%rbp), %rcx
movq %rcx, 0x8(%rax)
movl $0x8, 0x10(%rax)
movq $0x0, -0x8(%rbp)
jmp 0x53c56
jmp 0x53c4c
movq -0x18(%rbp), %rax
movsbl (%rax), %eax
cmpl $0x44, %eax
jne 0x53bc9
movq -0x18(%rbp), %rax
movsbl 0x1(%rax), %eax
cmpl $0x4f, %eax
jne 0x53bc9
movq -0x18(%rbp), %rax
movsbl 0x2(%rax), %eax
cmpl $0x43, %eax
jne 0x53bc9
movq -0x18(%rbp), %rax
movsbl 0x3(%rax), %eax
cmpl $0x54, %eax
jne 0x53bc9
movq -0x18(%rbp), %rax
movsbl 0x4(%rax), %eax
cmpl $0x59, %eax
jne 0x53bc9
movq -0x18(%rbp), %rax
movsbl 0x5(%rax), %eax
cmpl $0x50, %eax
jne 0x53bc9
movq -0x18(%rbp), %rax
movsbl 0x6(%rax), %eax
cmpl $0x45, %eax
je 0x53a64
movq -0x18(%rbp), %rax
movsbl 0x6(%rax), %eax
cmpl $0x0, %eax
jne 0x53bc9
movsbl -0x25(%rbp), %eax
cmpl $0x45, %eax
jne 0x53bc9
movq -0x18(%rbp), %rax
addq $-0x2, %rax
movq %rax, -0x18(%rbp)
movq -0x20(%rbp), %rax
cmpq $0x0, 0x18(%rax)
je 0x53a9b
movq -0x38(%rbp), %rax
movq -0x18(%rbp), %rcx
movq %rcx, 0x8(%rax)
movl $0x9, 0x10(%rax)
movq $0x0, -0x8(%rbp)
jmp 0x53c56
movq -0x38(%rbp), %rdi
movq -0x18(%rbp), %rax
addq $0x9, %rax
movq %rax, -0x30(%rbp)
movq -0x18(%rbp), %rsi
movsbl -0x25(%rbp), %edx
callq 0x567f0
movq %rax, -0x18(%rbp)
cmpq $0x0, -0x18(%rbp)
jne 0x53ad0
movq -0x18(%rbp), %rax
movq %rax, -0x8(%rbp)
jmp 0x53c56
movq -0x18(%rbp), %rax
movsbl (%rax), %eax
cmpl $0x0, %eax
jne 0x53aea
movsbl -0x25(%rbp), %ecx
movb $0x1, %al
cmpl $0x3e, %ecx
movb %al, -0x45(%rbp)
je 0x53afa
movq -0x18(%rbp), %rax
movsbl (%rax), %eax
cmpl $0x3e, %eax
sete %al
movb %al, -0x45(%rbp)
movb -0x45(%rbp), %al
testb $0x1, %al
jne 0x53b03
jmp 0x53b05
jmp 0x53b24
leaq 0x18ef0(%rip), %rdi     # 0x6c9fc
leaq 0x17842(%rip), %rsi     # 0x6b355
movl $0xc39, %edx            # imm = 0xC39
leaq 0x18f04(%rip), %rcx     # 0x6ca23
callq 0x7180
movq -0x18(%rbp), %rax
cmpb $0x0, (%rax)
je 0x53b3f
movq -0x18(%rbp), %rax
movq %rax, %rcx
addq $0x1, %rcx
movq %rcx, -0x18(%rbp)
movb $0x0, (%rax)
movl -0x24(%rbp), %eax
andl $0x200, %eax            # imm = 0x200
cmpl $0x0, %eax
je 0x53bc4
jmp 0x53b4e
movq -0x30(%rbp), %rax
movzbl (%rax), %eax
movl %eax, %ecx
leaq 0x17572(%rip), %rax     # 0x6b0d0
movzbl (%rax,%rcx), %eax
andl $0x8, %eax
cmpl $0x0, %eax
je 0x53b78
movq -0x30(%rbp), %rax
addq $0x1, %rax
movq %rax, -0x30(%rbp)
jmp 0x53b4e
movq -0x38(%rbp), %rax
movq -0x20(%rbp), %rdi
movq (%rax), %rsi
movl $0x8, %edx
callq 0x4fb50
movq %rax, -0x20(%rbp)
cmpq $0x0, -0x20(%rbp)
jne 0x53bb8
movq -0x38(%rbp), %rax
movq -0x18(%rbp), %rcx
movq %rcx, 0x8(%rax)
movl $0x3, 0x10(%rax)
movq $0x0, -0x8(%rbp)
jmp 0x53c56
movq -0x30(%rbp), %rcx
movq -0x20(%rbp), %rax
movq %rcx, 0x10(%rax)
jmp 0x53c4a
movq -0x18(%rbp), %rax
movsbl (%rax), %eax
cmpl $0x0, %eax
jne 0x53bfb
movsbl -0x25(%rbp), %eax
cmpl $0x2d, %eax
jne 0x53bfb
movq -0x38(%rbp), %rax
movq -0x18(%rbp), %rcx
movq %rcx, 0x8(%rax)
movl $0x7, 0x10(%rax)
movq $0x0, -0x8(%rbp)
jmp 0x53c56
movq -0x18(%rbp), %rax
movsbl (%rax), %eax
cmpl $0x0, %eax
jne 0x53c2d
movsbl -0x25(%rbp), %eax
cmpl $0x5b, %eax
jne 0x53c2d
movq -0x38(%rbp), %rax
movq -0x18(%rbp), %rcx
movq %rcx, 0x8(%rax)
movl $0x8, 0x10(%rax)
movq $0x0, -0x8(%rbp)
jmp 0x53c56
movq -0x38(%rbp), %rax
movq -0x18(%rbp), %rcx
movq %rcx, 0x8(%rax)
movl $0x5, 0x10(%rax)
movq $0x0, -0x8(%rbp)
jmp 0x53c56
jmp 0x53c4c
jmp 0x53c4e
movq -0x18(%rbp), %rax
movq %rax, -0x8(%rbp)
movq -0x8(%rbp), %rax
addq $0x50, %rsp
popq %rbp
retq