user: What is the c source code of the assembly code below:

```asm
<gmtime_r>:
  endbr64
  push   %r12
  pxor   %xmm0,%xmm0
  mov    %rsi,%r12
  push   %rbx
  sub    $0x8,%rsp
  mov    D113(%rip),%rax
  mov    (%rdi),%ebx
  movq   $0x0,0x20(%rsi)
  movl   $0x0,0x8(%rsi)
  mov    $0x46,%edi
  mov    %rax,(%rsi)
  movups %xmm0,0x10(%rsi)
  jmp    L175
  nopl   0x0(%rax,%rax,1)
L246:
  mov    (%r12),%eax
  lea    0x76c(%rax),%edi
  call   <is_leap_year@plt>
  cmp    $0x1,%rax
  sbb    %eax,%eax
  and    $0xfffeae80,%eax
  add    $0x1e28500,%eax
  cmp    %eax,%ebx
  jl     L378
  mov    (%r12),%eax
  lea    0x76c(%rax),%edi
  call   <is_leap_year@plt>
  cmp    $0x1,%rax
  sbb    %eax,%eax
  and    $0xfffeae80,%eax
  add    $0x1e28500,%eax
  sub    %eax,%ebx
  mov    (%r12),%eax
  lea    0x1(%rax),%edi
  mov    %edi,(%r12)
L175:
  add    $0x76c,%edi
  call   <is_leap_year@plt>
  cmp    $0x1,%rax
  sbb    %eax,%eax
  and    $0xfffeae80,%eax
  add    $0x1e28500,%eax
  cmp    %eax,%ebx
  jge    L246
L378:
  mov    $0x28de80,%eax
  cmp    $0x28de7f,%ebx
  jg     L242
  jmp    L223
  nopl   (%rax)
L58:
  jl     L223
L242:
  mov    0x20(%r12),%rsi
  sub    %eax,%ebx
  mov    (%r12),%edi
  lea    0x1(%rsi),%rax
  add    $0x2,%rsi
  mov    %rax,0x20(%r12)
  call   <days_of_month@plt>
  movslq %ebx,%rdx
  cmp    %rax,%rdx
  jge    L58
L223:
  cmp    $0x1517f,%ebx
  jle    L138
  lea    -0x15180(%rbx),%ecx
  mov    $0xc22e4507,%edx
  mov    0x4(%r12),%esi
  mov    %rcx,%rax
  imul   %rdx,%rcx
  shr    $0x30,%rcx
  add    $0x1,%ecx
  cmp    $0x545ff,%eax
  jbe    L118
  movd   %ebx,%xmm4
  movd   %esi,%xmm5
  mov    %ecx,%edx
  xor    %eax,%eax
  pshufd $0x0,%xmm4,%xmm3
  pshufd $0x0,%xmm5,%xmm2
  paddd  D34(%rip),%xmm3
  movdqa D190(%rip),%xmm7
  paddd  D260(%rip),%xmm2
  movdqa D303(%rip),%xmm6
  shr    $0x2,%edx
  movdqa D130(%rip),%xmm5
  movdqa D105(%rip),%xmm4
  nopl   (%rax)
L372:
  movdqa %xmm2,%xmm0
  movdqa %xmm3,%xmm1
  paddd  %xmm7,%xmm2
  add    $0x1,%eax
  paddd  %xmm6,%xmm3
  paddd  %xmm5,%xmm1
  paddd  %xmm4,%xmm0
  cmp    %edx,%eax
  jne    L372
  mov    %ecx,%edi
  pshufd $0xff,%xmm0,%xmm0
  pshufd $0xff,%xmm1,%xmm1
  and    $0xfffffffc,%edi
  movd   %xmm0,%edx
  movd   %xmm1,%eax
  imul   $0xfffeae80,%edi,%r8d
  add    %edi,%esi
  add    %r8d,%ebx
  cmp    %edi,%ecx
  je     L186
  lea    -0x15180(%rbx),%eax
L118:
  lea    0x1(%rsi),%edx
  cmp    $0x1517f,%eax
  jle    L186
  lea    -0x2a300(%rbx),%eax
  lea    0x2(%rsi),%edx
  cmp    $0x1517f,%eax
  jle    L186
  lea    -0x3f480(%rbx),%eax
  lea    0x3(%rsi),%edx
  cmp    $0x1517f,%eax
  jle    L186
  lea    -0x54600(%rbx),%eax
  lea    0x4(%rsi),%edx
L186:
  mov    %edx,0x4(%r12)
L328:
  cmp    $0xe0f,%eax
  jle    L7
  mov    0x18(%r12),%rcx
  lea    0x1(%rcx),%rdx
  nopl   0x0(%rax)
L49:
  sub    $0xe10,%eax
  mov    %rdx,%rcx
  add    $0x1,%rdx
  cmp    $0xe0f,%eax
  jg     L49
  mov    %rcx,0x18(%r12)
L7:
  cmp    $0x3b,%eax
  jle    L352
  lea    -0x3c(%rax),%esi
  mov    $0x88888889,%ecx
  mov    0x10(%r12),%rdi
  mov    %rsi,%rdx
  imul   %rcx,%rsi
  shr    $0x25,%rsi
  add    $0x1,%esi
  cmp    $0x167,%edx
  jbe    L237
  lea    0x1(%rdi),%rcx
  movd   %eax,%xmm6
  movq   %rdi,%xmm2
  mov    %esi,%edx
  movdqa D1(%rip),%xmm0
  movdqa D265(%rip),%xmm1
  movq   %rcx,%xmm7
  shr    $0x2,%edx
  pshufd $0x0,%xmm6,%xmm3
  punpcklqdq %xmm7,%xmm2
  paddd  %xmm3,%xmm0
  paddq  %xmm2,%xmm1
  cmp    $0x1,%edx
  je     L19
  movdqa D214(%rip),%xmm0
  movdqa D229(%rip),%xmm1
  paddd  %xmm3,%xmm0
  paddq  %xmm2,%xmm1
  cmp    $0x2,%edx
  je     L19
  movdqa D227(%rip),%xmm0
  movdqa D197(%rip),%xmm1
  paddd  %xmm3,%xmm0
  paddq  %xmm2,%xmm1
  cmp    $0x3,%edx
  je     L19
  movdqa D64(%rip),%xmm0
  movdqa D215(%rip),%xmm1
  paddd  %xmm3,%xmm0
  paddq  %xmm2,%xmm1
  cmp    $0x4,%edx
  je     L19
  movdqa D286(%rip),%xmm0
  movdqa D309(%rip),%xmm1
  paddd  %xmm3,%xmm0
  paddq  %xmm2,%xmm1
  cmp    $0x5,%edx
  je     L19
  movdqa D52(%rip),%xmm0
  movdqa D315(%rip),%xmm1
  paddd  %xmm3,%xmm0
  paddq  %xmm2,%xmm1
  cmp    $0x6,%edx
  je     L19
  movdqa D72(%rip),%xmm0
  movdqa D332(%rip),%xmm1
  paddd  %xmm3,%xmm0
  paddq  %xmm2,%xmm1
  cmp    $0x7,%edx
  je     L19
  movdqa D142(%rip),%xmm0
  movdqa D212(%rip),%xmm1
  paddd  %xmm3,%xmm0
  paddq  %xmm2,%xmm1
  cmp    $0x8,%edx
  je     L19
  movdqa D230(%rip),%xmm0
  movdqa D50(%rip),%xmm1
  paddd  %xmm3,%xmm0
  paddq  %xmm2,%xmm1
  cmp    $0x9,%edx
  je     L19
  movdqa D246(%rip),%xmm0
  movdqa D91(%rip),%xmm1
  paddd  %xmm3,%xmm0
  paddq  %xmm2,%xmm1
  cmp    $0xa,%edx
  je     L19
  movdqa D5(%rip),%xmm0
  movdqa D86(%rip),%xmm1
  paddd  %xmm3,%xmm0
  paddq  %xmm2,%xmm1
  cmp    $0xb,%edx
  je     L19
  movdqa D292(%rip),%xmm0
  movdqa D74(%rip),%xmm1
  paddd  %xmm3,%xmm0
  paddq  %xmm2,%xmm1
  cmp    $0xc,%edx
  je     L19
  movdqa D67(%rip),%xmm0
  movdqa D131(%rip),%xmm1
  paddd  %xmm3,%xmm0
  paddq  %xmm2,%xmm1
  cmp    $0xe,%edx
  jne    L19
  paddd  D156(%rip),%xmm3
  paddq  D279(%rip),%xmm2
  movdqa %xmm3,%xmm0
  movdqa %xmm2,%xmm1
  nopl   (%rax)
L19:
  mov    %esi,%r8d
  movhlps %xmm1,%xmm4
  pshufd $0xff,%xmm0,%xmm0
  and    $0xfffffffc,%r8d
  movq   %xmm4,%rcx
  movd   %xmm0,%edx
  mov    %r8d,%r10d
  mov    %r8d,%r9d
  shl    $0x4,%r10d
  sub    %r10d,%r9d
  lea    (%rax,%r9,4),%eax
  mov    %r8d,%r9d
  add    %r9,%rdi
  cmp    %esi,%r8d
  je     L356
  lea    -0x3c(%rax),%edx
L237:
  lea    0x1(%rdi),%rcx
  cmp    $0x3b,%edx
  jle    L356
  lea    -0x78(%rax),%edx
  lea    0x2(%rdi),%rcx
  cmp    $0x3b,%edx
  jle    L356
  lea    -0xb4(%rax),%edx
  lea    0x3(%rdi),%rcx
  cmp    $0x3b,%edx
  jle    L356
  lea    -0xf0(%rax),%edx
  lea    0x4(%rdi),%rcx
  cmp    $0x3b,%edx
  jle    L356
  lea    -0x12c(%rax),%edx
  lea    0x5(%rdi),%rcx
  cmp    $0x3b,%edx
  jle    L356
  lea    -0x168(%rax),%edx
  lea    0x6(%rdi),%rcx
L356:
  mov    %rcx,0x10(%r12)
  mov    %r12,%rax
  mov    %edx,0x8(%r12)
  add    $0x8,%rsp
  pop    %rbx
  pop    %r12
  ret
  nopl   0x0(%rax,%rax,1)
L352:
  mov    %eax,%edx
  mov    %r12,%rax
  mov    %edx,0x8(%r12)
  add    $0x8,%rsp
  pop    %rbx
  pop    %r12
  ret
  nopw   0x0(%rax,%rax,1)
L138:
  mov    %ebx,%eax
  jmp    L328
```

tool_calls: name: read_data
arguments: tag: D113
type: byte[8]
name: read_data
arguments: tag: D34
type: byte[16]
name: read_data
arguments: tag: D190
type: byte[16]
name: read_data
arguments: tag: D260
type: byte[16]
name: read_data
arguments: tag: D303
type: byte[16]
name: read_data
arguments: tag: D130
type: byte[16]
name: read_data
arguments: tag: D105
type: byte[16]
name: read_data
arguments: tag: D1
type: byte[16]
name: read_data
arguments: tag: D265
type: byte[16]
name: read_data
arguments: tag: D214
type: byte[16]
name: read_data
arguments: tag: D229
type: byte[16]
name: read_data
arguments: tag: D227
type: byte[16]
name: read_data
arguments: tag: D197
type: byte[16]
name: read_data
arguments: tag: D64
type: byte[16]
name: read_data
arguments: tag: D215
type: byte[16]
name: read_data
arguments: tag: D286
type: byte[16]
name: read_data
arguments: tag: D309
type: byte[16]
name: read_data
arguments: tag: D52
type: byte[16]
name: read_data
arguments: tag: D315
type: byte[16]
name: read_data
arguments: tag: D72
type: byte[16]
name: read_data
arguments: tag: D332
type: byte[16]
name: read_data
arguments: tag: D142
type: byte[16]
name: read_data
arguments: tag: D212
type: byte[16]
name: read_data
arguments: tag: D230
type: byte[16]
name: read_data
arguments: tag: D50
type: byte[16]
name: read_data
arguments: tag: D246
type: byte[16]
name: read_data
arguments: tag: D91
type: byte[16]
name: read_data
arguments: tag: D5
type: byte[16]
name: read_data
arguments: tag: D86
type: byte[16]
name: read_data
arguments: tag: D292
type: byte[16]
name: read_data
arguments: tag: D74
type: byte[16]
name: read_data
arguments: tag: D67
type: byte[16]
name: read_data
arguments: tag: D131
type: byte[16]
name: read_data
arguments: tag: D156
type: byte[16]
name: read_data
arguments: tag: D279
type: byte[16]

tool: {"D113": [0x46,0x00,0x00,0x00,0x01,0x00,0x00,0x00]}

tool: {"D34": [0x00,0x00,0x00,0x00,0x80,0xae,0xfe,0xff,0x00,0x5d,0xfd,0xff,0x80,0x0b,0xfc,0xff]}

tool: {"D190": [0x04,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x04,0x00,0x00,0x00]}

tool: {"D260": [0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x03,0x00,0x00,0x00]}

tool: {"D303": [0x00,0xba,0xfa,0xff,0x00,0xba,0xfa,0xff,0x00,0xba,0xfa,0xff,0x00,0xba,0xfa,0xff]}

tool: {"D130": [0x80,0xae,0xfe,0xff,0x80,0xae,0xfe,0xff,0x80,0xae,0xfe,0xff,0x80,0xae,0xfe,0xff]}

tool: {"D105": [0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00]}

tool: {"D1": [0xc4,0xff,0xff,0xff,0x88,0xff,0xff,0xff,0x4c,0xff,0xff,0xff,0x10,0xff,0xff,0xff]}

tool: {"D265": [0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00]}

tool: {"D214": [0xd4,0xfe,0xff,0xff,0x98,0xfe,0xff,0xff,0x5c,0xfe,0xff,0xff,0x20,0xfe,0xff,0xff]}

tool: {"D229": [0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00]}

tool: {"D227": [0xe4,0xfd,0xff,0xff,0xa8,0xfd,0xff,0xff,0x6c,0xfd,0xff,0xff,0x30,0xfd,0xff,0xff]}

tool: {"D197": [0x0b,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x00,0x00,0x00,0x00]}

tool: {"D64": [0xf4,0xfc,0xff,0xff,0xb8,0xfc,0xff,0xff,0x7c,0xfc,0xff,0xff,0x40,0xfc,0xff,0xff]}

tool: {"D215": [0x0f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,0x00,0x00,0x00,0x00]}

tool: {"D286": [0x04,0xfc,0xff,0xff,0xc8,0xfb,0xff,0xff,0x8c,0xfb,0xff,0xff,0x50,0xfb,0xff,0xff]}

tool: {"D309": [0x13,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x13,0x00,0x00,0x00,0x00,0x00,0x00,0x00]}

tool: {"D52": [0x14,0xfb,0xff,0xff,0xd8,0xfa,0xff,0xff,0x9c,0xfa,0xff,0xff,0x60,0xfa,0xff,0xff]}

tool: {"D315": [0x17,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x17,0x00,0x00,0x00,0x00,0x00,0x00,0x00]}

tool: {"D72": [0x24,0xfa,0xff,0xff,0xe8,0xf9,0xff,0xff,0xac,0xf9,0xff,0xff,0x70,0xf9,0xff,0xff]}

tool: {"D332": [0x1b,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,0x00,0x00,0x00,0x00]}

tool: {"D142": [0x34,0xf9,0xff,0xff,0xf8,0xf8,0xff,0xff,0xbc,0xf8,0xff,0xff,0x80,0xf8,0xff,0xff]}

tool: {"D212": [0x1f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1f,0x00,0x00,0x00,0x00,0x00,0x00,0x00]}

tool: {"D230": [0x44,0xf8,0xff,0xff,0x08,0xf8,0xff,0xff,0xcc,0xf7,0xff,0xff,0x90,0xf7,0xff,0xff]}

tool: {"D50": [0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00]}

tool: {"D246": [0x54,0xf7,0xff,0xff,0x18,0xf7,0xff,0xff,0xdc,0xf6,0xff,0xff,0xa0,0xf6,0xff,0xff]}

tool: {"D91": [0x27,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x27,0x00,0x00,0x00,0x00,0x00,0x00,0x00]}

tool: {"D5": [0x64,0xf6,0xff,0xff,0x28,0xf6,0xff,0xff,0xec,0xf5,0xff,0xff,0xb0,0xf5,0xff,0xff]}

tool: {"D86": [0x2b,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x2b,0x00,0x00,0x00,0x00,0x00,0x00,0x00]}

tool: {"D292": [0x74,0xf5,0xff,0xff,0x38,0xf5,0xff,0xff,0xfc,0xf4,0xff,0xff,0xc0,0xf4,0xff,0xff]}

tool: {"D74": [0x2f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x2f,0x00,0x00,0x00,0x00,0x00,0x00,0x00]}

tool: {"D67": [0x84,0xf4,0xff,0xff,0x48,0xf4,0xff,0xff,0x0c,0xf4,0xff,0xff,0xd0,0xf3,0xff,0xff]}

tool: {"D131": [0x33,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x33,0x00,0x00,0x00,0x00,0x00,0x00,0x00]}

tool: {"D156": [0x94,0xf3,0xff,0xff,0x58,0xf3,0xff,0xff,0x1c,0xf3,0xff,0xff,0xe0,0xf2,0xff,0xff]}

tool: {"D279": [0x37,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x37,0x00,0x00,0x00,0x00,0x00,0x00,0x00]}

assistant: ```c
struct tm *gmtime_r(const time_t *timep, struct tm *result) {
  time_t time = *timep;
  long day_of_month = 2678400;
  result->tm_year = 1970 - 1900;
  result->tm_mon = 0;
  result->tm_mday = 1;
  result->tm_hour = 0;
  result->tm_min = 0;
  result->tm_sec = 0;
  while (time - (is_leap_year(result->tm_year + 1900) ? 31622400 : 31536000) >= 0) {
    if (time >= (is_leap_year(result->tm_year + 1900) ? 31622400 : 31536000))
      time -= (is_leap_year(result->tm_year + 1900) ? 31622400 : 31536000);
    else
      break;
    result->tm_year++;
  }
  while (time - day_of_month >= 0) {
    if (time >= day_of_month)
      time -= day_of_month;
    else
      break;
    result->tm_mon++;
    day_of_month = days_of_month(result->tm_year, result->tm_mon + 1);
  }
  while (time - 86400 >= 0) {
    if (time >= 86400)
      time -= 86400;
    else
      break;
    result->tm_mday++;
  }
  while (time - 3600 >= 0) {
    if (time >= 3600)
      time -= 3600;
    else
      break;
    result->tm_hour++;
  }
  while (time - 60 >= 0) {
    if (time >= 60)
      time -= 60;
    else
      break;
    result->tm_min++;
  }
  result->tm_sec = time;
  return result;
}
```