// File: attractivechaos[P]udb2/sparsehash/./sparsehash/internal/sparsehashtable.h
// Function: std::pair<unsigned int const, unsigned int>& google::sparse_hashtable<std::pair<unsigned int const, unsigned int>, unsigned int, Hash32, google::sparse_hash_map<unsigned int, unsigned int, Hash32, std::equal_to<unsigned int>, google::libc_allocator_with_realloc<std::pair<unsigned int const, unsigned int>>>::SelectKey, google::sparse_hash_map<unsigned int, unsigned int, Hash32, std::equal_to<unsigned int>, google::libc_allocator_with_realloc<std::pair<unsigned int const, unsigned int>>>::SetKey, std::equal_to<unsigned int>, google::libc_allocator_with_realloc<std::pair<unsigned int const, unsigned int>>>::find_or_insert<google::sparse_hash_map<unsigned int, unsigned int, Hash32, std::equal_to<unsigned int>, google::libc_allocator_with_realloc<std::pair<unsigned int const, unsigned int>>>::DefaultValue>(unsigned int const&)
value_type& find_or_insert(const key_type& key) {
    // First, double-check we're not inserting delkey
    assert((!settings.use_deleted() || !equals(key, key_info.delkey))
           && "Inserting the deleted key");
    const std::pair<size_type,size_type> pos = find_position(key);
    DefaultValue default_value;
    if ( pos.first != ILLEGAL_BUCKET) {  // object was already there
      return *table.get_iter(pos.first);
    } else if (resize_delta(1)) {        // needed to rehash to make room
      // Since we resized, we can't use pos, so recalculate where to insert.
      return *insert_noresize(default_value(key)).first;
    } else {                             // no need to rehash, insert right here
      return *insert_at(default_value(key), pos.second);
    }
  }

// Assembly:
subq $0x108, %rsp            # imm = 0x108
movq %rdi, 0xf8(%rsp)
movq %rsi, 0xf0(%rsp)
movq 0xf8(%rsp), %rdi
movq %rdi, 0x8(%rsp)
callq 0x5ca0
testb $0x1, %al
jne 0x641f
jmp 0x6445
movq 0x8(%rsp), %rdi
movq 0xf0(%rsp), %rsi
movq %rdi, %rdx
addq $0x20, %rdx
callq 0x5d10
movb %al, %cl
xorl %eax, %eax
testb $0x1, %cl
movb %al, 0x7(%rsp)
jne 0x644d
movb $0x1, %al
movb %al, 0x7(%rsp)
jmp 0x644d
movb 0x7(%rsp), %al
testb $0x1, %al
jne 0x6457
jmp 0x6459
jmp 0x6478
leaq 0x35b8(%rip), %rdi      # 0x9a18
leaq 0x1c9a(%rip), %rsi      # 0x8101
movl $0x3e4, %edx            # imm = 0x3E4
leaq 0x35ff(%rip), %rcx      # 0x9a72
callq 0x10b0
movq 0x8(%rsp), %rdi
movq 0xf0(%rsp), %rsi
callq 0x6590
movq %rax, 0xe0(%rsp)
movq %rdx, 0xe8(%rsp)
cmpq $-0x1, 0xe0(%rsp)
je 0x64dd
movq 0x8(%rsp), %rsi
addq $0x30, %rsi
movq 0xe0(%rsp), %rdx
leaq 0xb8(%rsp), %rdi
callq 0x6750
leaq 0xb8(%rsp), %rdi
callq 0x6890
movq %rax, 0x100(%rsp)
jmp 0x657c
movq 0x8(%rsp), %rdi
movl $0x1, %esi
callq 0x68a0
testb $0x1, %al
jne 0x64f2
jmp 0x6534
movq 0xf0(%rsp), %rsi
leaq 0xdf(%rsp), %rdi
callq 0x6d80
movq 0x8(%rsp), %rsi
movq %rax, 0x60(%rsp)
leaq 0x68(%rsp), %rdi
leaq 0x60(%rsp), %rdx
callq 0x6b90
leaq 0x68(%rsp), %rdi
callq 0x6dd0
movq %rax, 0x100(%rsp)
jmp 0x657c
movq 0xf0(%rsp), %rsi
leaq 0xdf(%rsp), %rdi
callq 0x6d80
movq 0x8(%rsp), %rsi
movq %rax, 0x10(%rsp)
movq 0xe8(%rsp), %rcx
leaq 0x18(%rsp), %rdi
leaq 0x10(%rsp), %rdx
callq 0x6df0
leaq 0x18(%rsp), %rdi
callq 0x6dd0
movq %rax, 0x100(%rsp)
movq 0x100(%rsp), %rax
addq $0x108, %rsp            # imm = 0x108
retq
nopl (%rax)