user: Translate the below assembly code into C programming language:

```asm
<get_stat_network>:
  endbr64
  push   %r12
  lea    D73(%rip),%rsi
  lea    D6(%rip),%rdi
  push   %rbp
  push   %rbx
  sub    $0x170,%rsp
  mov    %fs:0x28,%rax
  mov    %rax,0x168(%rsp)
  xor    %eax,%eax
  call   <fopen@plt>
  test   %rax,%rax
  je     L40
  mov    %rax,%r12
  lea    0x60(%rsp),%rbp
  lea    D40(%rip),%rbx
  nopl   (%rax)
L10:
  mov    $0x100,%esi
  mov    %rbp,%rdi
  mov    %r12,%rdx
  call   <fgets@plt>
  mov    %rbx,%rsi
  mov    %rbp,%rdi
  call   <strstr@plt>
  test   %rax,%rax
  je     L10
  mov    %r12,%rdi
  call   <fclose@plt>
  lea    D58(%rip),%rsi
  mov    %rbp,%rdi
  call   <strstr@plt>
  test   %rax,%rax
  je     L35
  lea    0x10(%rsp),%rcx
  lea    0x8(%rsp),%rdx
  sub    $0x8,%rsp
  mov    %rbp,%rdi
  lea    0x50(%rsp),%rax
  lea    D51(%rip),%rsi
  push   %rax
  lea    0x50(%rsp),%rax
  push   %rax
  lea    0x50(%rsp),%rax
  push   %rax
  lea    0x50(%rsp),%rax
  push   %rax
  lea    0x50(%rsp),%rax
  push   %rax
  lea    0x50(%rsp),%r9
  lea    0x48(%rsp),%r8
  call   <sscanf@plt>
  add    $0x30,%rsp
L13:
  lea    0x50(%rsp),%rdi
  xor    %esi,%esi
  mov    0x8(%rsp),%rbx
  mov    0x48(%rsp),%rbp
  call   <gettimeofday@plt>
  pxor   %xmm1,%xmm1
  pxor   %xmm0,%xmm0
  lea    D71(%rip),%rdi
  cvtsi2sdq 0x58(%rsp),%xmm1
  lea    0x0(,%rbp,8),%rdx
  cvtsi2sdq 0x50(%rsp),%xmm0
  divsd  D84(%rip),%xmm0
  lea    0x0(,%rbx,8),%rsi
  addsd  %xmm1,%xmm0
  call   <printf@plt>
L40:
  mov    0x168(%rsp),%rax
  sub    %fs:0x28,%rax
  jne    L20
  add    $0x170,%rsp
  pop    %rbx
  pop    %rbp
  pop    %r12
  ret
  nopl   0x0(%rax)
L35:
  lea    D89(%rip),%rsi
  mov    %rbp,%rdi
  call   <strstr@plt>
  test   %rax,%rax
  je     L13
  lea    0x10(%rsp),%rcx
  lea    0x8(%rsp),%rdx
  sub    $0x8,%rsp
  mov    %rbp,%rdi
  lea    0x50(%rsp),%rax
  lea    D24(%rip),%rsi
  push   %rax
  lea    0x50(%rsp),%rax
  push   %rax
  lea    0x50(%rsp),%rax
  push   %rax
  lea    0x50(%rsp),%rax
  push   %rax
  lea    0x50(%rsp),%rax
  push   %rax
  lea    0x50(%rsp),%r9
  lea    0x48(%rsp),%r8
  call   <sscanf@plt>
  add    $0x30,%rsp
  jmp    L13
L20:
  call   <__stack_chk_fail@plt>
```

tool_calls: name: read_data
arguments: label: D73
type_guessed: string
name: read_data
arguments: label: D6
type_guessed: string
name: read_data
arguments: label: D40
type_guessed: string
name: read_data
arguments: label: D58
type_guessed: string
name: read_data
arguments: label: D51
type_guessed: string
name: read_data
arguments: label: D71
type_guessed: string
name: read_data
arguments: label: D84
type_guessed: f64
name: read_data
arguments: label: D89
type_guessed: string
name: read_data
arguments: label: D24
type_guessed: string

tool: D73: r

tool: D6: /proc/net/dev

tool: D40: eth0

tool: D58: eth0: 

tool: D51: %*[ ]eth0:%*[ ]%llu%*[ ]%llu%*[ ]%llu%*[ ]%llu%*[ ]%llu%*[ ]%llu%*[ ]%llu%*[ ]%llu%*[ ]%llu

tool: D71: %lf|%llu|%llu


tool: D84: 1000000

tool: D89: eth0:

tool: D24: %*[ ]eth0:%llu%*[ ]%llu%*[ ]%llu%*[ ]%llu%*[ ]%llu%*[ ]%llu%*[ ]%llu%*[ ]%llu%*[ ]%llu

assistant: ```c
void get_stat_network() {
  FILE *f;
  char line[256];
  unsigned long long c1, c2, c3, c4, c5, c6, c7, c8, c9;
  unsigned long long tx, rx;
  struct timeval tv;
  double uusec;
  f = fopen("/proc/net/dev", "r");
  if (f) {
    do {
      fgets(line, 256, f);
    } while (strstr(line, "eth0") == NULL);
    fclose(f);
    if (strstr(line, "eth0: ")) {
      sscanf(line, "%*[ ]eth0:%*[ ]%llu%*[ ]%llu%*[ ]%llu%*[ ]%llu%*[ ]%llu%*[ ]%llu%*[ ]%llu%*[ ]%llu%*[ ]%llu", &c1, &c2, &c3, &c4, &c5, &c6, &c7, &c8, &c9);
    } else if (strstr(line, "eth0:")) {
      sscanf(line, "%*[ ]eth0:%llu%*[ ]%llu%*[ ]%llu%*[ ]%llu%*[ ]%llu%*[ ]%llu%*[ ]%llu%*[ ]%llu%*[ ]%llu", &c1, &c2, &c3, &c4, &c5, &c6, &c7, &c8, &c9);
    }
    rx = c1;
    tx = c9;
    gettimeofday(&tv, NULL);
    uusec = (double)tv.tv_sec + (double)tv.tv_usec / 1000000.0;
    printf("%lf|%llu|%llu\n", uusec, rx * 8, tx * 8);
  }
}
```