// File: /workspace/github_c_makefile_star2_O0/AlxHnr[P]nano-backup/src/informations.c
// Function: recursePrintOverTree
static ChangeSummary recursePrintOverTree(const Metadata *metadata,
                                          const PathNode *path_list,
                                          RegexList *summarize_expressions,
                                          const bool print)
{
  ChangeSummary changes = { 0 };

  for(const PathNode *node = path_list; node != NULL; node = node->next)
  {
    ChangeSummary summary;
    const bool summarize = node->policy != BPOL_none &&
      getExistingState(node)->type == PST_directory &&
      matchesRegexList(node, summarize_expressions);
    /* Once a summarize expression matched, its subnodes should not be
       tested anymore. */
    RegexList *expressions_to_pass_down =
      summarize ? NULL : summarize_expressions;

    if(print && summarize)
    {
      summary = recursePrintOverTree(metadata, node->subnodes,
                                     expressions_to_pass_down, false);
      if(node->hint > BH_unchanged || containsChanges(&summary))
      {
        printNode(node, &summary, summarize);
      }
    }
    else if(print && node->hint > BH_unchanged &&
            !(node->policy == BPOL_none &&
              (node->hint == BH_added ||
               (node->hint >= BH_owner_changed &&
                node->hint <= BH_timestamp_changed))))
    {
      const bool print_subnodes =
        backupHintNoPol(node->hint) > BH_other_to_directory;

      summary =
        recursePrintOverTree(metadata, node->subnodes,
                             expressions_to_pass_down, print_subnodes);

      if(!(node->hint == BH_timestamp_changed &&
           summary.affects_parent_timestamp))
      {
        printNode(node, &summary, summarize);
      }
    }
    else
    {
      summary = recursePrintOverTree(metadata, node->subnodes,
                                     expressions_to_pass_down, print);
    }

    addNode(node, &changes, summary.affects_parent_timestamp);
    changeSummaryAdd(&changes, &summary);
  }

  return changes;
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x1a0, %rsp            # imm = 0x1A0
movq %rdi, -0x190(%rbp)
movb %r8b, %al
movq %rdi, %r8
movq %r8, -0x188(%rbp)
movq %rsi, -0x8(%rbp)
movq %rdx, -0x10(%rbp)
movq %rcx, -0x18(%rbp)
andb $0x1, %al
movb %al, -0x19(%rbp)
xorl %esi, %esi
movl $0x50, %edx
callq 0x2170
movq -0x10(%rbp), %rax
movq %rax, -0x28(%rbp)
cmpq $0x0, -0x28(%rbp)
je 0x5649
movq -0x28(%rbp), %rcx
xorl %eax, %eax
cmpl $0x0, 0x1c(%rcx)
movb %al, -0x191(%rbp)
je 0x545d
movq -0x28(%rbp), %rdi
callq 0x5970
movq %rax, %rcx
xorl %eax, %eax
cmpl $0x3, (%rcx)
movb %al, -0x191(%rbp)
jne 0x545d
movq -0x28(%rbp), %rdi
movq -0x18(%rbp), %rsi
callq 0x59d0
movb %al, -0x191(%rbp)
movb -0x191(%rbp), %al
andb $0x1, %al
movb %al, -0x79(%rbp)
testb $0x1, -0x79(%rbp)
je 0x5479
xorl %eax, %eax
movq %rax, -0x1a0(%rbp)
jmp 0x5484
movq -0x18(%rbp), %rax
movq %rax, -0x1a0(%rbp)
movq -0x1a0(%rbp), %rax
movq %rax, -0x88(%rbp)
testb $0x1, -0x19(%rbp)
je 0x5508
testb $0x1, -0x79(%rbp)
je 0x5508
movq -0x8(%rbp), %rsi
movq -0x28(%rbp), %rax
movq 0x28(%rax), %rdx
movq -0x88(%rbp), %rcx
leaq -0xd8(%rbp), %rdi
xorl %r8d, %r8d
callq 0x53d0
leaq -0x78(%rbp), %rdi
leaq -0xd8(%rbp), %rsi
movl $0x50, %edx
callq 0x2250
movq -0x28(%rbp), %rax
cmpl $0x1, 0x18(%rax)
ja 0x54ee
leaq -0x78(%rbp), %rdi
callq 0x5660
testb $0x1, %al
jne 0x54ee
jmp 0x5503
movq -0x28(%rbp), %rdi
movb -0x79(%rbp), %al
leaq -0x78(%rbp), %rsi
andb $0x1, %al
movzbl %al, %edx
callq 0x5a50
jmp 0x5610
testb $0x1, -0x19(%rbp)
je 0x55d1
movq -0x28(%rbp), %rax
cmpl $0x1, 0x18(%rax)
jbe 0x55d1
movq -0x28(%rbp), %rax
cmpl $0x0, 0x1c(%rax)
jne 0x5550
movq -0x28(%rbp), %rax
cmpl $0x2, 0x18(%rax)
je 0x55d1
movq -0x28(%rbp), %rax
cmpl $0x10, 0x18(%rax)
jb 0x5550
movq -0x28(%rbp), %rax
cmpl $0x40, 0x18(%rax)
jbe 0x55d1
movq -0x28(%rbp), %rax
movl 0x18(%rax), %eax
andl $0x1ff, %eax            # imm = 0x1FF
cmpl $0xd, %eax
seta %al
andb $0x1, %al
movb %al, -0xd9(%rbp)
movq -0x8(%rbp), %rsi
movq -0x28(%rbp), %rax
movq 0x28(%rax), %rdx
movq -0x88(%rbp), %rcx
movb -0xd9(%rbp), %al
leaq -0x130(%rbp), %rdi
andb $0x1, %al
movzbl %al, %r8d
callq 0x53d0
leaq -0x78(%rbp), %rdi
leaq -0x130(%rbp), %rsi
movl $0x50, %edx
callq 0x2250
movq -0x28(%rbp), %rax
cmpl $0x40, 0x18(%rax)
jne 0x55ba
testb $0x1, -0x2f(%rbp)
jne 0x55cf
movq -0x28(%rbp), %rdi
movb -0x79(%rbp), %al
leaq -0x78(%rbp), %rsi
andb $0x1, %al
movzbl %al, %edx
callq 0x5a50
jmp 0x560e
movq -0x8(%rbp), %rsi
movq -0x28(%rbp), %rax
movq 0x28(%rax), %rdx
movq -0x88(%rbp), %rcx
movb -0x19(%rbp), %al
leaq -0x180(%rbp), %rdi
andb $0x1, %al
movzbl %al, %r8d
callq 0x53d0
leaq -0x78(%rbp), %rdi
leaq -0x180(%rbp), %rsi
movl $0x50, %edx
callq 0x2250
jmp 0x5610
movq -0x190(%rbp), %rsi
movq -0x28(%rbp), %rdi
movb -0x2f(%rbp), %al
andb $0x1, %al
movzbl %al, %edx
callq 0x6050
movq -0x190(%rbp), %rdi
leaq -0x78(%rbp), %rsi
callq 0x6230
movq -0x28(%rbp), %rax
movq 0x30(%rax), %rax
movq %rax, -0x28(%rbp)
jmp 0x5414
movq -0x188(%rbp), %rax
addq $0x1a0, %rsp            # imm = 0x1A0
popq %rbp
retq
nopl (%rax)