; assembly | /* r2dec pseudo code output */ | /* balber_berutil.t/none @ 0x4732d0 */ | #include | ; (fcn) method.std::__1::ostreambuf_iterator_wchar_t__std::__1::char_traits_wchar_t____BloombergLP::bdldfp::DecimalNumPut_wchar_t__std::__1::ostreambuf_iterator_wchar_t__std::__1::char_traits_wchar_t_____::do_put_impl_BloombergLP::bdldfp.Decimal_Type32__std::__1 () | uint64_t method_std::_1::ostreambuf_iterator_wchar_t_std::_1::char_traits_wchar_t_BloombergLP::bdldfp::DecimalNumPut_wchar_t_std::_1::ostreambuf_iterator_wchar_t_std::_1::char_traits_wchar_t_::do_put_impl_BloombergLP::bdldfp_Decimal_Type32_std::_1 (int64_t arg5, int64_t arg4, int64_t arg3, int64_t arg2) { | int64_t var_8h; | uint32_t var_14h; | int32_t var_18h; | int64_t var_1ch; | int64_t var_20h; | int32_t var_2ch; | uint32_t var_30h; | int64_t var_38h; | int64_t var_40h; | int64_t var_48h; | int64_t var_50h; | int64_t var_58h; | int64_t var_5ch; | uint32_t var_60h; | int64_t var_68h; | int64_t var_70h; | char * var_78h; | int64_t var_80h; | int64_t var_81h; | int64_t var_82h; | int64_t var_84h; | r8 = arg5; | rcx = arg4; | rdx = arg3; | rsi = arg2; | /* std::__1::ostreambuf_iterator > BloombergLP::bdldfp::DecimalNumPut > >::do_put_impl(std::__1::ostreambuf_iterator >, std::__1::ios_base&, wchar_t, BloombergLP::bdldfp::Decimal_Type32) const */ 0x004732d0 push rbp | 0x004732d1 push r15 | 0x004732d3 push r14 | 0x004732d5 push r13 | 0x004732d7 push r12 | 0x004732d9 push rbx | 0x004732da sub rsp, 0x88 | 0x004732e1 mov ebp, r8d | 0x004732e4 mov dword [rsp + 0x1c], ecx | *((rsp + 0x1c)) = ecx; 0x004732e8 mov rbx, rsi | rbx = rsi; 0x004732eb mov r13, qword [rdx + 0x10] | r13 = *((rdx + 0x10)); 0x004732ef cmp r13, 0x65 | 0x004732f3 mov ecx, 0x65 | ecx = 0x65; | if (r13 < 0x65) { 0x004732f8 cmovl rcx, r13 | rcx = r13; | } 0x004732fc mov eax, dword [rdx + 0x18] | eax = *((rdx + 0x18)); 0x004732ff mov dword [rsp + 0x18], eax | *((rsp + 0x18)) = eax; 0x00473303 mov qword [rsp + 0x50], rcx | *((rsp + 0x50)) = rcx; 0x00473308 mov dword [rsp + 0x58], ecx | *((rsp + 0x58)) = ecx; 0x0047330c mov qword [rsp + 0x5c], 2 | *((rsp + 0x5c)) = 2; 0x00473315 mov qword [rsp + 0x68], 0x50a7ac | *((rsp + 0x68)) = 0x50a7ac; 0x0047331e mov qword [rsp + 0x70], 0x50a579 | *((rsp + 0x70)) = 0x50a579; 0x00473327 mov qword [rsp + 0x78], 0x50a578 | *((rsp + 0x78)) = "snan"; 0x00473330 mov word [rsp + 0x80], 0x652e | *((rsp + 0x80)) = 0x652e; 0x0047333a mov dword [rsp + 0x84], 2 | *((rsp + 0x84)) = 2; 0x00473345 mov qword [rsp + 0x20], rdx | *((rsp + 0x20)) = rdx; 0x0047334a mov eax, dword [rdx + 8] | eax = *((rdx + 8)); 0x0047334d test eax, 0x104 | | if ((eax & 0x104) != 0) { 0x00473352 je 0x473362 | 0x00473354 xor ecx, ecx | ecx = 0; 0x00473356 test eax, 0x100 | 0x0047335b sete cl | cl = ((eax & 0x100) == 0) ? 1 : 0; 0x0047335e mov dword [rsp + 0x5c], ecx | *((rsp + 0x5c)) = ecx; | } 0x00473362 test eax, 0x800 | | if ((eax & 0x800) != 0) { 0x00473367 je 0x473371 | 0x00473369 mov dword [rsp + 0x60], 1 | *((rsp + 0x60)) = 1; | } 0x00473371 mov ecx, eax | ecx = eax; 0x00473373 shr ecx, 0xa | ecx >>= 0xa; 0x00473376 and cl, 1 | cl &= 1; 0x00473379 mov byte [rsp + 0x82], cl | *((rsp + 0x82)) = cl; 0x00473380 test eax, 0x4000 | | if ((eax & 0x4000) != 0) { 0x00473385 je 0x4733aa | 0x00473387 mov qword [rsp + 0x68], 0x50a57d | *((rsp + 0x68)) = 0x50a57d; 0x00473390 mov qword [rsp + 0x70], 0x50a582 | *((rsp + 0x70)) = 0x50a582; 0x00473399 mov qword [rsp + 0x78], 0x50a581 | *((rsp + 0x78)) = "SNAN"; 0x004733a2 mov byte [rsp + 0x81], 0x45 | *((rsp + 0x81)) = 0x45; | } 0x004733aa mov r14, qword [rip + 0x4e7027] | r14 = BloombergLP::bslma::Default::s_defaultAllocator; 0x004733b1 test r14, r14 | | if (r14 == 0) { 0x004733b4 jne 0x4733be | 0x004733b6 call 0x4b9f60 | rax = BloombergLP::bslma::Default::determineAndReturnDefaultAllocator() (); 0x004733bb mov r14, rax | r14 = rax; | } 0x004733be mov rax, qword [r14] | rax = *(r14); 0x004733c1 mov esi, 0xc8 | esi = 0xc8; 0x004733c6 mov rdi, r14 | rdi = r14; 0x004733c9 call qword [rax + 0x10] | rax = uint64_t (*rax + 0x10)() (); 0x004733cc mov r12, rax | r12 = rax; 0x004733cf lea rcx, [rsp + 0x58] | 0x004733d4 mov rdi, rax | rdi = rax; 0x004733d7 mov esi, 0xc8 | 0x004733dc mov dword [rsp + 0x14], ebp | *((rsp + 0x14)) = ebp; 0x004733e0 mov edx, ebp | 0x004733e2 mov qword [rsp + 0x40], r14 | *((rsp + 0x40)) = r14; 0x004733e7 mov qword [rsp + 0x38], rax | *((rsp + 0x38)) = rax; 0x004733ec call 0x477650 | eax = BloombergLP::bdldfp::DecimalImpUtil::format(char*,int,BloombergLP::bdldfp::DecimalImpUtil_IntelDfp::ValueType32,BloombergLP::bdldfp::DecimalFormatConfigconst&) (rdi, 0xc8, ebp, rsp + 0x58); 0x004733f1 mov ebp, eax | 0x004733f3 mov rdi, rsp | rdi = rsp; 0x004733f6 mov rsi, qword [rsp + 0x20] | rsi = *((rsp + 0x20)); 0x004733fb call 0x404a70 | std::_1::ios_base::getloc()const (); 0x00473400 mov rdi, qword [rip + 0x4e6fd1] | rdi = BloombergLP::bslma::Default::s_defaultAllocator; 0x00473407 test rdi, rdi | | if (rdi == 0) { 0x0047340a jne 0x473414 | 0x0047340c call 0x4b9f60 | rax = BloombergLP::bslma::Default::determineAndReturnDefaultAllocator() (); 0x00473411 mov rdi, rax | rdi = rax; | } 0x00473414 movsxd rax, ebp | rax = (int64_t) ebp; 0x00473417 mov qword [rsp + 0x48], rax | *((rsp + 0x48)) = rax; 0x0047341c lea r15, [rax*4] | r15 = rax*4; 0x00473424 mov rax, qword [rdi] | rax = *(rdi); 0x00473427 mov rsi, r15 | rsi = r15; 0x0047342a call qword [rax + 0x10] | rax = uint64_t (*rax + 0x10)() (); 0x0047342d mov qword [rsp + 8], rax | *((rsp + 8)) = rax; 0x00473432 mov rdi, rsp | rdi = rsp; 0x00473435 mov esi, 0x95a1e0 | esi = std::__1::ctype::id; 0x0047343a call 0x404b60 | rax = std::_1::locale::use_facet(std::_1::locale::id&)const (); 0x0047343f mov rdx, r12 | rdx = r12; 0x00473442 add rdx, qword [rsp + 0x48] | rdx += *((rsp + 0x48)); 0x00473447 mov rbp, qword [rax] | rbp = *(rax); 0x0047344a mov rdi, rax | rdi = rax; 0x0047344d mov rsi, r12 | rsi = r12; 0x00473450 mov rcx, qword [rsp + 8] | rcx = *((rsp + 8)); 0x00473455 call qword [rbp + 0x60] | uint64_t (*rbp + 0x60)() (); 0x00473458 mov ebp, r13d | 0x0047345b sub ebp, dword [rsp + 0x50] | ebp -= *((rsp + 0x50)); 0x0047345f mov rdi, rsp | rdi = rsp; 0x00473462 call 0x404be0 | std::_1::locale::~locale() (); 0x00473467 mov rsi, qword [rsp + 8] | rsi = *((rsp + 8)); 0x0047346c mov r14, qword [rsp + 0x48] | r14 = *((rsp + 0x48)); 0x00473471 lea rcx, [rsi + r14*4] | rcx = rsi + r14*4; 0x00473475 mov eax, dword [rsp + 0x18] | eax = *((rsp + 0x18)); 0x00473479 sub eax, ebp | eax -= ebp; 0x0047347b xor r12d, r12d | r12d = 0; 0x0047347e sub eax, r14d | eax -= r14d; 0x00473481 mov dword [rsp + 0x18], eax | *((rsp + 0x18)) = eax; 0x00473485 cmovns r12d, eax | __asm ("cmovns r12d, eax"); 0x00473489 mov eax, r12d | eax = r12d; 0x0047348c or eax, ebp | eax |= ebp; | if (eax == 0) { 0x0047348e je 0x47352b | goto label_12; | } 0x00473494 mov qword [rsp + 0x30], rcx | *((rsp + 0x30)) = rcx; 0x00473499 mov r14, rcx | r14 = rcx; 0x0047349c mov dword [rsp + 0x2c], ebp | *((rsp + 0x2c)) = ebp; 0x004734a0 test ebp, ebp | | if (ebp == 0) { 0x004734a2 je 0x473598 | goto label_13; | } 0x004734a8 mov rax, qword [rsp + 0x20] | rax = *((rsp + 0x20)); 0x004734ad test byte [rax + 9], 1 | 0x004734b1 mov r14, qword [rsp + 0x30] | r14 = *((rsp + 0x30)); | if ((*((rax + 9)) & 1) == 0) { 0x004734b6 je 0x473598 | goto label_13; | } 0x004734bc mov rdi, rsp | rdi = rsp; 0x004734bf mov rsi, qword [rsp + 0x20] | rsi = *((rsp + 0x20)); 0x004734c4 call 0x404a70 | std::_1::ios_base::getloc()const (); 0x004734c9 mov rdi, rsp | rdi = rsp; 0x004734cc mov esi, 0x95a1e0 | esi = std::__1::ctype::id; 0x004734d1 call 0x404b60 | rax = std::_1::locale::use_facet(std::_1::locale::id&)const (); 0x004734d6 mov r14, qword [rsp + 0x30] | r14 = *((rsp + 0x30)); 0x004734db movsx esi, byte [rsp + 0x81] | esi = *((rsp + 0x81)); 0x004734e3 mov rcx, qword [rax] | rcx = *(rax); 0x004734e6 mov rdi, rax | rdi = rax; 0x004734e9 call qword [rcx + 0x58] | eax = uint64_t (*rcx + 0x58)() (); 0x004734ec mov ebp, eax | 0x004734ee mov rdi, rsp | rdi = rsp; 0x004734f1 call 0x404be0 | std::_1::locale::~locale() (); 0x004734f6 mov rax, qword [rsp + 8] | rax = *((rsp + 8)); 0x004734fb cmp r14, rax | | if (r14 == rax) { 0x004734fe je 0x473592 | goto label_14; | } 0x00473504 mov r14, rax | r14 = rax; 0x00473507 nop word [rax + rax] | | do { 0x00473510 cmp dword [r14], ebp | | if (*(r14) == ebp) { 0x00473513 je 0x473524 | goto label_15; | } 0x00473515 add r14, 4 | r14 += 4; 0x00473519 add r15, 0xfffffffffffffffc | r15 += 0xfffffffffffffffc; 0x0047351d jne 0x473510 | | } while (r15 != 0); 0x0047351f mov r14, qword [rsp + 0x30] | r14 = *((rsp + 0x30)); | label_15: 0x00473524 mov rsi, qword [rsp + 8] | rsi = *((rsp + 8)); 0x00473529 jmp 0x473598 | goto label_13; | label_12: 0x0047352b cmp rcx, rsi | | if (rcx == rsi) { 0x0047352e je 0x473824 | goto label_16; | } 0x00473534 shl r14, 2 | r14 <<= 2; 0x00473538 xor ebp, ebp | ebp = 0; 0x0047353a jmp 0x47354f | | while (rbx == 0) { | label_0: 0x00473540 xor ebx, ebx | ebx = 0; | label_1: 0x00473542 add rbp, 4 | rbp += 4; 0x00473546 cmp r14, rbp | | if (r14 == rbp) { 0x00473549 je 0x473824 | goto label_16; | } 0x0047354f test rbx, rbx | 0x00473552 je 0x473540 | | } 0x00473554 mov rax, qword [rsp + 8] | rax = *((rsp + 8)); 0x00473559 mov eax, dword [rax + rbp] | eax = *((rax + rbp)); 0x0047355c mov rcx, qword [rbx + 0x30] | rcx = *((rbx + 0x30)); 0x00473560 cmp rcx, qword [rbx + 0x38] | | if (rcx != *((rbx + 0x38))) { 0x00473564 je 0x473580 | 0x00473566 lea rdx, [rcx + 4] | rdx = rcx + 4; 0x0047356a mov qword [rbx + 0x30], rdx | *((rbx + 0x30)) = rdx; 0x0047356e mov dword [rcx], eax | *(rcx) = eax; 0x00473570 jmp 0x47358b | | } else { 0x00473580 mov rcx, qword [rbx] | rcx = *(rbx); 0x00473583 mov rdi, rbx | rdi = rbx; 0x00473586 mov esi, eax | esi = eax; 0x00473588 call qword [rcx + 0x68] | eax = uint64_t (*rcx + 0x68)() (); | } 0x0047358b cmp eax, 0xffffffff | | if (eax == 0xffffffff) { 0x0047358e je 0x473540 | goto label_0; | } 0x00473590 jmp 0x473542 | goto label_1; | label_14: 0x00473592 mov r14, rax | r14 = rax; 0x00473595 mov rsi, rax | rsi = rax; | label_13: 0x00473598 cmp dword [rsp + 0x14], 0 | 0x0047359d setns al | __asm ("setns al"); 0x004735a0 cmp dword [rsp + 0x60], 1 | 0x004735a5 setne cl | cl = (*((rsp + 0x60)) != 1) ? 1 : 0; 0x004735a8 mov r15d, 0xb0 | r15d = 0xb0; 0x004735ae mov rdx, qword [rsp + 0x20] | rdx = *((rsp + 0x20)); 0x004735b3 and r15d, dword [rdx + 8] | r15d &= *((rdx + 8)); 0x004735b7 test al, cl | | if ((al & cl) == 0) { 0x004735b9 jne 0x4735e5 | 0x004735bb cmp r15d, 0x10 | | if (r15d == 0x10) { 0x004735bf jne 0x4735e5 | 0x004735c1 lea rbp, [rsi + 4] | rbp = rsi + 4; 0x004735c5 test rbx, rbx | | if (rbx == 0) { 0x004735c8 je 0x4735ea | goto label_17; | } 0x004735ca mov rax, rsi | rax = rsi; 0x004735cd mov eax, dword [rsi] | eax = *(rsi); 0x004735cf mov rcx, qword [rbx + 0x30] | rcx = *((rbx + 0x30)); 0x004735d3 cmp rcx, qword [rbx + 0x38] | | if (rcx == *((rbx + 0x38))) { 0x004735d7 je 0x4735ee | goto label_18; | } 0x004735d9 lea rdx, [rcx + 4] | rdx = rcx + 4; 0x004735dd mov qword [rbx + 0x30], rdx | *((rbx + 0x30)) = rdx; 0x004735e1 mov dword [rcx], eax | *(rcx) = eax; 0x004735e3 jmp 0x4735f9 | | } | } else { 0x004735e5 mov rbp, rsi | 0x004735e8 jmp 0x473602 | goto label_19; | label_17: 0x004735ea xor ebx, ebx | ebx = 0; 0x004735ec jmp 0x473602 | goto label_19; | label_18: 0x004735ee mov rcx, qword [rbx] | rcx = *(rbx); 0x004735f1 mov rdi, rbx | rdi = rbx; 0x004735f4 mov esi, eax | esi = eax; 0x004735f6 call qword [rcx + 0x68] | eax = uint64_t (*rcx + 0x68)() (); | } 0x004735f9 xor ecx, ecx | ecx = 0; 0x004735fb cmp eax, 0xffffffff | | if (eax == 0xffffffff) { 0x004735fe cmove rbx, rcx | rbx = rcx; | } | label_19: 0x00473602 cmp dword [rsp + 0x18], 0 | 0x00473607 mov dword [rsp + 0x14], r15d | *((rsp + 0x14)) = r15d; | if (*((rsp + 0x18)) <= 0) { 0x0047360c jle 0x473664 | goto label_20; | } 0x0047360e cmp r15d, 0x20 | | if (r15d == 0x20) { 0x00473612 je 0x473664 | goto label_20; | } 0x00473614 lea r15d, [r12 + 1] | r15d = r12 + 1; 0x00473619 jmp 0x47362b | | while (rbx == 0) { | label_2: 0x00473620 xor ebx, ebx | ebx = 0; | label_3: 0x00473622 dec r15d | r15d--; 0x00473625 cmp r15d, 1 | | if (r15d <= 1) { 0x00473629 jle 0x473664 | goto label_20; | } 0x0047362b test rbx, rbx | 0x0047362e je 0x473620 | | } 0x00473630 mov rax, qword [rbx + 0x30] | rax = *((rbx + 0x30)); 0x00473634 cmp rax, qword [rbx + 0x38] | | if (rax != *((rbx + 0x38))) { 0x00473638 je 0x473650 | 0x0047363a lea rcx, [rax + 4] | rcx = rax + 4; 0x0047363e mov qword [rbx + 0x30], rcx | *((rbx + 0x30)) = rcx; 0x00473642 mov ecx, dword [rsp + 0x1c] | ecx = *((rsp + 0x1c)); 0x00473646 mov dword [rax], ecx | *(rax) = ecx; 0x00473648 mov eax, ecx | eax = ecx; 0x0047364a jmp 0x47365d | | } else { 0x00473650 mov rax, qword [rbx] | rax = *(rbx); 0x00473653 mov rdi, rbx | rdi = rbx; 0x00473656 mov esi, dword [rsp + 0x1c] | esi = *((rsp + 0x1c)); 0x0047365a call qword [rax + 0x68] | eax = uint64_t (*rax + 0x68)() (); | } 0x0047365d cmp eax, 0xffffffff | | if (eax == 0xffffffff) { 0x00473660 je 0x473620 | goto label_2; | } 0x00473662 jmp 0x473622 | goto label_3; | label_20: 0x00473664 cmp rbp, r14 | | if (rbp == r14) { 0x00473667 je 0x4736b2 | goto label_21; | } 0x00473669 mov r15d, dword [rsp + 0x14] | r15d = *((rsp + 0x14)); 0x0047366e jmp 0x47367b | | while (rbx == 0) { | label_4: 0x00473670 xor ebx, ebx | ebx = 0; | label_5: 0x00473672 add rbp, 4 | rbp += 4; 0x00473676 cmp r14, rbp | | if (r14 == rbp) { 0x00473679 je 0x4736b7 | goto label_22; | } 0x0047367b test rbx, rbx | 0x0047367e je 0x473670 | | } 0x00473680 mov eax, dword [rbp] | eax = *(rbp); 0x00473683 mov rcx, qword [rbx + 0x30] | rcx = *((rbx + 0x30)); 0x00473687 cmp rcx, qword [rbx + 0x38] | | if (rcx != *((rbx + 0x38))) { 0x0047368b je 0x4736a0 | 0x0047368d lea rdx, [rcx + 4] | rdx = rcx + 4; 0x00473691 mov qword [rbx + 0x30], rdx | *((rbx + 0x30)) = rdx; 0x00473695 mov dword [rcx], eax | *(rcx) = eax; 0x00473697 jmp 0x4736ab | | } else { 0x004736a0 mov rcx, qword [rbx] | rcx = *(rbx); 0x004736a3 mov rdi, rbx | rdi = rbx; 0x004736a6 mov esi, eax | esi = eax; 0x004736a8 call qword [rcx + 0x68] | eax = uint64_t (*rcx + 0x68)() (); | } 0x004736ab cmp eax, 0xffffffff | | if (eax == 0xffffffff) { 0x004736ae je 0x473670 | goto label_4; | } 0x004736b0 jmp 0x473672 | goto label_5; | label_21: 0x004736b2 mov r15d, dword [rsp + 0x14] | r15d = *((rsp + 0x14)); | label_22: 0x004736b7 cmp dword [rsp + 0x2c], 0 | | if (*((rsp + 0x2c)) == 0) { 0x004736bc je 0x4737c2 | goto label_23; | } 0x004736c2 mov rdi, rsp | rdi = rsp; 0x004736c5 mov rsi, qword [rsp + 0x20] | rsi = *((rsp + 0x20)); 0x004736ca call 0x404a70 | std::_1::ios_base::getloc()const (); 0x004736cf mov rdi, rsp | rdi = rsp; 0x004736d2 mov esi, 0x95a1e0 | esi = std::__1::ctype::id; 0x004736d7 call 0x404b60 | rax = std::_1::locale::use_facet(std::_1::locale::id&)const (); 0x004736dc mov rcx, qword [rax] | rcx = *(rax); 0x004736df mov rdi, rax | rdi = rax; 0x004736e2 mov esi, 0x30 | esi = 0x30; 0x004736e7 call qword [rcx + 0x58] | eax = uint64_t (*rcx + 0x58)() (); 0x004736ea mov ebp, eax | 0x004736ec mov rdi, rsp | rdi = rsp; 0x004736ef call 0x404be0 | std::_1::locale::~locale() (); 0x004736f4 cmp dword [rsp + 0x2c], 0 | | if (*((rsp + 0x2c)) <= 0) { 0x004736f9 jle 0x473752 | goto label_24; | } 0x004736fb sub r13d, dword [rsp + 0x50] | r13d -= *((rsp + 0x50)); 0x00473700 inc r13d | r13d++; 0x00473703 jmp 0x47371b | | while (rbx == 0) { | label_6: 0x00473710 xor ebx, ebx | ebx = 0; | label_7: 0x00473712 dec r13d | r13d--; 0x00473715 cmp r13d, 1 | | if (r13d <= 1) { 0x00473719 jle 0x473752 | goto label_24; | } 0x0047371b test rbx, rbx | 0x0047371e je 0x473710 | | } 0x00473720 mov rax, qword [rbx + 0x30] | rax = *((rbx + 0x30)); 0x00473724 cmp rax, qword [rbx + 0x38] | | if (rax != *((rbx + 0x38))) { 0x00473728 je 0x473740 | 0x0047372a lea rcx, [rax + 4] | rcx = rax + 4; 0x0047372e mov qword [rbx + 0x30], rcx | *((rbx + 0x30)) = rcx; 0x00473732 mov dword [rax], ebp | *(rax) = ebp; 0x00473734 mov eax, ebp | eax = ebp; 0x00473736 jmp 0x47374b | | } else { 0x00473740 mov rax, qword [rbx] | rax = *(rbx); 0x00473743 mov rdi, rbx | rdi = rbx; 0x00473746 mov esi, ebp | esi = ebp; 0x00473748 call qword [rax + 0x68] | eax = uint64_t (*rax + 0x68)() (); | } 0x0047374b cmp eax, 0xffffffff | | if (eax == 0xffffffff) { 0x0047374e je 0x473710 | goto label_6; | } 0x00473750 jmp 0x473712 | goto label_7; | label_24: 0x00473752 cmp r14, qword [rsp + 0x30] | | if (r14 == *((rsp + 0x30))) { 0x00473757 je 0x4737c2 | goto label_23; | } 0x00473759 mov eax, 0x100 | eax = 0x100; 0x0047375e mov rcx, qword [rsp + 0x20] | rcx = *((rsp + 0x20)); 0x00473763 and eax, dword [rcx + 8] | eax &= *((rcx + 8)); | if (eax == 0) { 0x00473766 je 0x4737c2 | goto label_23; | } 0x00473768 mov rax, qword [rsp + 8] | rax = *((rsp + 8)); 0x0047376d mov rcx, qword [rsp + 0x48] | rcx = *((rsp + 0x48)); 0x00473772 lea rbp, [rax + rcx*4] | rbp = rax + rcx*4; 0x00473776 jmp 0x47378b | | while (rbx == 0) { | label_8: 0x00473780 xor ebx, ebx | ebx = 0; | label_9: 0x00473782 add r14, 4 | r14 += 4; 0x00473786 cmp rbp, r14 | | if (rbp == r14) { 0x00473789 je 0x4737c2 | goto label_23; | } 0x0047378b test rbx, rbx | 0x0047378e je 0x473780 | | } 0x00473790 mov eax, dword [r14] | eax = *(r14); 0x00473793 mov rcx, qword [rbx + 0x30] | rcx = *((rbx + 0x30)); 0x00473797 cmp rcx, qword [rbx + 0x38] | | if (rcx != *((rbx + 0x38))) { 0x0047379b je 0x4737b0 | 0x0047379d lea rdx, [rcx + 4] | rdx = rcx + 4; 0x004737a1 mov qword [rbx + 0x30], rdx | *((rbx + 0x30)) = rdx; 0x004737a5 mov dword [rcx], eax | *(rcx) = eax; 0x004737a7 jmp 0x4737bb | | } else { 0x004737b0 mov rcx, qword [rbx] | rcx = *(rbx); 0x004737b3 mov rdi, rbx | rdi = rbx; 0x004737b6 mov esi, eax | esi = eax; 0x004737b8 call qword [rcx + 0x68] | eax = uint64_t (*rcx + 0x68)() (); | } 0x004737bb cmp eax, 0xffffffff | | if (eax == 0xffffffff) { 0x004737be je 0x473780 | goto label_8; | } 0x004737c0 jmp 0x473782 | goto label_9; | label_23: 0x004737c2 cmp dword [rsp + 0x18], 0 | | if (*((rsp + 0x18)) <= 0) { 0x004737c7 jle 0x473824 | goto label_16; | } 0x004737c9 cmp r15d, 0x20 | | if (r15d != 0x20) { 0x004737cd jne 0x473824 | goto label_16; | } 0x004737cf inc r12d | r12d++; 0x004737d2 jmp 0x4737eb | | while (rbx == 0) { | label_10: 0x004737e0 xor ebx, ebx | ebx = 0; | label_11: 0x004737e2 dec r12d | r12d--; 0x004737e5 cmp r12d, 1 | | if (r12d <= 1) { 0x004737e9 jle 0x473824 | goto label_16; | } 0x004737eb test rbx, rbx | 0x004737ee je 0x4737e0 | | } 0x004737f0 mov rax, qword [rbx + 0x30] | rax = *((rbx + 0x30)); 0x004737f4 cmp rax, qword [rbx + 0x38] | | if (rax != *((rbx + 0x38))) { 0x004737f8 je 0x473810 | 0x004737fa lea rcx, [rax + 4] | rcx = rax + 4; 0x004737fe mov qword [rbx + 0x30], rcx | *((rbx + 0x30)) = rcx; 0x00473802 mov ecx, dword [rsp + 0x1c] | ecx = *((rsp + 0x1c)); 0x00473806 mov dword [rax], ecx | *(rax) = ecx; 0x00473808 mov eax, ecx | eax = ecx; 0x0047380a jmp 0x47381d | | } else { 0x00473810 mov rax, qword [rbx] | rax = *(rbx); 0x00473813 mov rdi, rbx | rdi = rbx; 0x00473816 mov esi, dword [rsp + 0x1c] | esi = *((rsp + 0x1c)); 0x0047381a call qword [rax + 0x68] | eax = uint64_t (*rax + 0x68)() (); | } 0x0047381d cmp eax, 0xffffffff | | if (eax == 0xffffffff) { 0x00473820 je 0x4737e0 | goto label_10; | } 0x00473822 jmp 0x4737e2 | goto label_11; | label_16: 0x00473824 mov rdi, qword [rip + 0x4e6bad] | rdi = BloombergLP::bslma::Default::s_defaultAllocator; 0x0047382b test rdi, rdi | | if (rdi != 0) { 0x0047382e je 0x47383c | 0x00473830 mov rbp, qword [rsp + 0x40] | rbp = *((rsp + 0x40)); 0x00473835 mov r14, qword [rsp + 0x38] | r14 = *((rsp + 0x38)); 0x0047383a jmp 0x47384e | | } else { 0x0047383c call 0x4b9f60 | rax = BloombergLP::bslma::Default::determineAndReturnDefaultAllocator() (); 0x00473841 mov rbp, qword [rsp + 0x40] | rbp = *((rsp + 0x40)); 0x00473846 mov r14, qword [rsp + 0x38] | r14 = *((rsp + 0x38)); 0x0047384b mov rdi, rax | rdi = rax; | } 0x0047384e mov rax, qword [rdi] | rax = *(rdi); 0x00473851 mov rsi, qword [rsp + 8] | rsi = *((rsp + 8)); 0x00473856 call qword [rax + 0x18] | uint64_t (*rax + 0x18)() (); 0x00473859 mov rax, qword [rbp] | rax = *(rbp); 0x0047385d mov rdi, rbp | rdi = rbp; 0x00473860 mov rsi, r14 | rsi = r14; 0x00473863 call qword [rax + 0x18] | uint64_t (*rax + 0x18)() (); 0x00473866 mov rax, rbx | rax = rbx; 0x00473869 add rsp, 0x88 | 0x00473870 pop rbx | 0x00473871 pop r12 | 0x00473873 pop r13 | 0x00473875 pop r14 | 0x00473877 pop r15 | 0x00473879 pop rbp | 0x0047387a ret | return rax; | }