// File: /workspace/github_c_makefile_star2_O0/AlxHnr[P]nano-backup/src/nb.c
// Function: backup
static void backup(CR_Region *r, StringView repo_arg)
{
  Allocator *a = allocatorWrapRegion(r);

  StringView repo_path = strStripTrailingSlashes(repo_arg);
  StringView config_path = strAppendPath(repo_path, str("config"), a);
  StringView metadata_path = strAppendPath(repo_path, str("metadata"), a);
  StringView tmp_file_path = strAppendPath(repo_path, str("tmp-file"), a);

  if(!sPathExists(config_path))
  {
    die("repository has no config file: \"" PRI_STR "\"",
        STR_FMT(repo_arg));
  }
  repoLock(r, repo_path, RLH_readwrite);
  SearchNode *root_node = searchTreeLoad(r, config_path);

  Metadata *metadata = sPathExists(metadata_path)
    ? metadataLoad(r, metadata_path)
    : metadataNew(r);

  initiateBackup(metadata, root_node);
  ChangeSummary changes =
    printMetadataChanges(metadata, *root_node->summarize_expressions);
  printSearchTreeInfos(root_node);

  if(containsChanges(&changes))
  {
    printf("\n");

    bool printed_stats = false;
    if(changes.new_items.affected_items_count > 0)
    {
      printStats("New", TC_green_bold, changes.new_items, &printed_stats);
    }
    if(changes.removed_items.affected_items_count > 0)
    {
      printStats("Removed", TC_red_bold, changes.removed_items,
                 &printed_stats);
    }
    if(changes.lost_items.affected_items_count > 0)
    {
      printStats("Lost", TC_blue_bold, changes.lost_items, &printed_stats);
    }
    if(printed_stats)
    {
      printf("\n\n");
    }

    ensureUserConsent("proceed?", allocatorWrapOneSingleGrowableBuffer(r));
    finishBackup(metadata, repo_arg, tmp_file_path);
    metadataWrite(metadata, repo_arg, tmp_file_path, metadata_path);

    runGC(metadata, repo_arg, true);
  }
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x180, %rsp            # imm = 0x180
leaq 0x10(%rbp), %rax
movq %rax, -0x128(%rbp)
movq %rdi, -0x8(%rbp)
movq -0x8(%rbp), %rdi
callq 0x25a0
movq %rax, %rcx
movq -0x128(%rbp), %rax
movq %rcx, -0x10(%rbp)
leaq -0x28(%rbp), %rdi
movq (%rax), %rcx
movq %rcx, (%rsp)
movq 0x8(%rax), %rcx
movq %rcx, 0x8(%rsp)
movq 0x10(%rax), %rax
movq %rax, 0x10(%rsp)
callq 0xf2e0
leaq -0x58(%rbp), %rdi
leaq 0x1b8c9(%rip), %rsi     # 0x241b7
callq 0xf100
movq -0x10(%rbp), %rsi
leaq -0x40(%rbp), %rdi
leaq -0x28(%rbp), %rcx
leaq -0x58(%rbp), %rax
movq (%rcx), %rdx
movq %rdx, (%rsp)
movq 0x8(%rcx), %rdx
movq %rdx, 0x8(%rsp)
movq 0x10(%rcx), %rcx
movq %rcx, 0x10(%rsp)
movq (%rax), %rcx
movq %rcx, 0x18(%rsp)
movq 0x8(%rax), %rcx
movq %rcx, 0x20(%rsp)
movq 0x10(%rax), %rax
movq %rax, 0x28(%rsp)
callq 0xf750
leaq -0x88(%rbp), %rdi
leaq 0x1b875(%rip), %rsi     # 0x241be
callq 0xf100
movq -0x10(%rbp), %rsi
leaq -0x70(%rbp), %rdi
leaq -0x28(%rbp), %rcx
leaq -0x88(%rbp), %rax
movq (%rcx), %rdx
movq %rdx, (%rsp)
movq 0x8(%rcx), %rdx
movq %rdx, 0x8(%rsp)
movq 0x10(%rcx), %rcx
movq %rcx, 0x10(%rsp)
movq (%rax), %rcx
movq %rcx, 0x18(%rsp)
movq 0x8(%rax), %rcx
movq %rcx, 0x20(%rsp)
movq 0x10(%rax), %rax
movq %rax, 0x28(%rsp)
callq 0xf750
leaq -0xb8(%rbp), %rdi
leaq 0x1bcff(%rip), %rsi     # 0x246a6
callq 0xf100
movq -0x10(%rbp), %rsi
leaq -0xa0(%rbp), %rdi
leaq -0x28(%rbp), %rcx
leaq -0xb8(%rbp), %rax
movq (%rcx), %rdx
movq %rdx, (%rsp)
movq 0x8(%rcx), %rdx
movq %rdx, 0x8(%rsp)
movq 0x10(%rcx), %rcx
movq %rcx, 0x10(%rsp)
movq (%rax), %rcx
movq %rcx, 0x18(%rsp)
movq 0x8(%rax), %rcx
movq %rcx, 0x20(%rsp)
movq 0x10(%rax), %rax
movq %rax, 0x28(%rsp)
callq 0xf750
leaq -0x40(%rbp), %rax
movq (%rax), %rcx
movq %rcx, (%rsp)
movq 0x8(%rax), %rcx
movq %rcx, 0x8(%rsp)
movq 0x10(%rax), %rax
movq %rax, 0x10(%rsp)
callq 0xc4d0
testb $0x1, %al
jne 0x8a3e
movq -0x128(%rbp), %rax
movq 0x8(%rax), %rcx
movl %ecx, %esi
movq (%rax), %rdx
leaq 0x1bc78(%rip), %rdi     # 0x246af
movb $0x0, %al
callq 0x4680
movq -0x8(%rbp), %rdi
leaq -0x28(%rbp), %rax
xorl %esi, %esi
movq (%rax), %rcx
movq %rcx, (%rsp)
movq 0x8(%rax), %rcx
movq %rcx, 0x8(%rsp)
movq 0x10(%rax), %rax
movq %rax, 0x10(%rsp)
callq 0xa520
movq -0x8(%rbp), %rdi
leaq -0x40(%rbp), %rax
movq (%rax), %rcx
movq %rcx, (%rsp)
movq 0x8(%rax), %rcx
movq %rcx, 0x8(%rsp)
movq 0x10(%rax), %rax
movq %rax, 0x10(%rsp)
callq 0xe560
movq %rax, -0xc0(%rbp)
leaq -0x70(%rbp), %rax
movq (%rax), %rcx
movq %rcx, (%rsp)
movq 0x8(%rax), %rcx
movq %rcx, 0x8(%rsp)
movq 0x10(%rax), %rax
movq %rax, 0x10(%rsp)
callq 0xc4d0
testb $0x1, %al
jne 0x8abb
jmp 0x8aea
movq -0x8(%rbp), %rdi
leaq -0x70(%rbp), %rax
movq (%rax), %rcx
movq %rcx, (%rsp)
movq 0x8(%rax), %rcx
movq %rcx, 0x8(%rsp)
movq 0x10(%rax), %rax
movq %rax, 0x10(%rsp)
callq 0x6d20
movq %rax, -0x130(%rbp)
jmp 0x8afa
movq -0x8(%rbp), %rdi
callq 0x6c70
movq %rax, -0x130(%rbp)
movq -0x130(%rbp), %rax
movq %rax, -0xc8(%rbp)
movq -0xc8(%rbp), %rdi
movq -0xc0(%rbp), %rsi
callq 0x2ac0
movq -0xc8(%rbp), %rsi
movq -0xc0(%rbp), %rax
movq 0x58(%rax), %rax
movq (%rax), %rdx
leaq -0x118(%rbp), %rdi
callq 0x5390
movq -0xc0(%rbp), %rdi
callq 0x50e0
leaq -0x118(%rbp), %rdi
callq 0x5660
testb $0x1, %al
jne 0x8b5d
jmp 0x8d1a
leaq 0x1bc45(%rip), %rdi     # 0x247a9
movb $0x0, %al
callq 0x2130
movb $0x0, -0x119(%rbp)
cmpq $0x0, -0x118(%rbp)
jbe 0x8ba2
movq -0x118(%rbp), %rdx
movq -0x110(%rbp), %rcx
leaq 0x1bb44(%rip), %rdi     # 0x246d5
movl $0x5, %esi
leaq -0x119(%rbp), %r8
callq 0x9290
cmpq $0x0, -0x108(%rbp)
jbe 0x8bd2
movq -0x108(%rbp), %rdx
movq -0x100(%rbp), %rcx
leaq 0x1bb18(%rip), %rdi     # 0x246d9
movl $0x3, %esi
leaq -0x119(%rbp), %r8
callq 0x9290
cmpq $0x0, -0xf8(%rbp)
jbe 0x8c02
movq -0xf8(%rbp), %rdx
movq -0xf0(%rbp), %rcx
leaq 0x1baf0(%rip), %rdi     # 0x246e1
movl $0x9, %esi
leaq -0x119(%rbp), %r8
callq 0x9290
testb $0x1, -0x119(%rbp)
je 0x8c19
leaq 0x1bb96(%rip), %rdi     # 0x247a8
movb $0x0, %al
callq 0x2130
movq -0x8(%rbp), %rdi
callq 0x25e0
movq %rax, %rsi
leaq 0x1baba(%rip), %rdi     # 0x246e6
callq 0x9330
movq -0x128(%rbp), %rcx
movq -0xc8(%rbp), %rdi
leaq -0xa0(%rbp), %rax
movq (%rcx), %rdx
movq %rdx, (%rsp)
movq 0x8(%rcx), %rdx
movq %rdx, 0x8(%rsp)
movq 0x10(%rcx), %rcx
movq %rcx, 0x10(%rsp)
movq (%rax), %rcx
movq %rcx, 0x18(%rsp)
movq 0x8(%rax), %rcx
movq %rcx, 0x20(%rsp)
movq 0x10(%rax), %rax
movq %rax, 0x28(%rsp)
callq 0x30b0
movq -0x128(%rbp), %rdx
movq -0xc8(%rbp), %rdi
leaq -0xa0(%rbp), %rcx
leaq -0x70(%rbp), %rax
movq (%rdx), %rsi
movq %rsi, (%rsp)
movq 0x8(%rdx), %rsi
movq %rsi, 0x8(%rsp)
movq 0x10(%rdx), %rdx
movq %rdx, 0x10(%rsp)
movq (%rcx), %rdx
movq %rdx, 0x18(%rsp)
movq 0x8(%rcx), %rdx
movq %rdx, 0x20(%rsp)
movq 0x10(%rcx), %rcx
movq %rcx, 0x28(%rsp)
movq (%rax), %rcx
movq %rcx, 0x30(%rsp)
movq 0x8(%rax), %rcx
movq %rcx, 0x38(%rsp)
movq 0x10(%rax), %rax
movq %rax, 0x40(%rsp)
callq 0x75f0
movq -0x128(%rbp), %rax
movq -0xc8(%rbp), %rdi
movl $0x1, %esi
movq (%rax), %rcx
movq %rcx, (%rsp)
movq 0x8(%rax), %rcx
movq %rcx, 0x8(%rsp)
movq 0x10(%rax), %rax
movq %rax, 0x10(%rsp)
callq 0x8d30
addq $0x180, %rsp            # imm = 0x180
popq %rbp
retq
nopw %cs:(%rax,%rax)