user: 请从给定的汇编指令推导出C源代码:

```asm
<prutenic_prop_luna>:
  endbr64
  sub    $0x5b8,%rsp
  lea    D7(%rip),%rsi
  mov    $0xb5,%ecx
  mov    %fs:0x28,%rax
  mov    %rax,0x5a8(%rsp)
  xor    %eax,%eax
  mov    %rsp,%rdi
  rep movsq %ds:(%rsi),%es:(%rdi)
  mov    %rsp,%rsi
  mov    $0xb5,%edi
  call   <interpolate_symmetric_linear@plt>
  mov    0x5a8(%rsp),%rax
  sub    %fs:0x28,%rax
  jne    L8
  add    $0x5b8,%rsp
  ret
L8:
  call   <__stack_chk_fail@plt>
```

tool_calls: name: disassemble_data
arguments: label: D7
data_type: string

tool: 

assistant: ```c
double prutenic_prop_luna(double angle) {
  double table[] = {
      ((0) + (0) / 60.), ((0) + (0) / 60.), ((0) + (1) / 60.), ((0) + (3) / 60.), ((0) + (6) / 60.), ((0) + (9) / 60.), ((0) + (13) / 60.), ((0) + (17) / 60.), ((0) + (22) / 60.), ((0) + (28) / 60.), ((0) + (35) / 60.), ((0) + (42) / 60.), ((0) + (50) / 60.), ((0) + (58) / 60.), ((1) + (8) / 60.), ((1) + (18) / 60.), ((1) + (28) / 60.), ((1) + (39) / 60.), ((1) + (51) / 60.), ((2) + (4) / 60.), ((2) + (17) / 60.), ((2) + (31) / 60.), ((2) + (45) / 60.), ((3) + (0) / 60.), ((3) + (15) / 60.), ((3) + (31) / 60.), ((3) + (48) / 60.), ((4) + (5) / 60.), ((4) + (23) / 60.), ((4) + (41) / 60.), ((5) + (0) / 60.), ((5) + (19) / 60.), ((5) + (39) / 60.), ((6) + (0) / 60.), ((6) + (21) / 60.), ((6) + (42) / 60.), ((7) + (4) / 60.), ((7) + (26) / 60.), ((7) + (49) / 60.), ((8) + (12) / 60.), ((8) + (36) / 60.), ((9) + (0) / 60.), ((9) + (24) / 60.), ((9) + (49) / 60.), ((10) + (14) / 60.), ((10) + (39) / 60.), ((11) + (5) / 60.), ((11) + (31) / 60.), ((11) + (58) / 60.), ((12) + (25) / 60.), ((12) + (52) / 60.), ((13) + (20) / 60.), ((13) + (48) / 60.), ((14) + (16) / 60.), ((14) + (44) / 60.), ((15) + (13) / 60.), ((15) + (42) / 60.), ((16) + (11) / 60.), ((16) + (40) / 60.), ((17) + (10) / 60.), ((17) + (39) / 60.), ((18) + (9) / 60.), ((18) + (39) / 60.), ((19) + (10) / 60.), ((19) + (40) / 60.), ((20) + (10) / 60.), ((20) + (41) / 60.), ((21) + (12) / 60.), ((21) + (43) / 60.), ((22) + (14) / 60.), ((22) + (45) / 60.), ((23) + (16) / 60.), ((23) + (47) / 60.), ((24) + (18) / 60.), ((24) + (50) / 60.), ((25) + (21) / 60.), ((25) + (53) / 60.), ((26) + (24) / 60.), ((26) + (55) / 60.), ((27) + (27) / 60.), ((27) + (58) / 60.), ((28) + (29) / 60.), ((29) + (1) / 60.), ((29) + (32) / 60.), ((30) + (3) / 60.), ((30) + (35) / 60.), ((31) + (6) / 60.), ((31) + (37) / 60.), ((32) + (8) / 60.), ((32) + (39) / 60.), ((33) + (9) / 60.), ((33) + (40) / 60.), ((34) + (11) / 60.), ((34) + (41) / 60.), ((35) + (11) / 60.), ((35) + (42) / 60.), ((36) + (12) / 60.), ((36) + (41) / 60.), ((37) + (11) / 60.), ((37) + (40) / 60.), ((38) + (10) / 60.), ((38) + (39) / 60.), ((39) + (8) / 60.), ((39) + (37) / 60.), ((40) + (5) / 60.), ((40) + (34) / 60.), ((41) + (2) / 60.), ((41) + (29) / 60.), ((41) + (57) / 60.), ((42) + (25) / 60.), ((42) + (52) / 60.), ((43) + (19) / 60.), ((43) + (45) / 60.), ((44) + (12) / 60.), ((44) + (38) / 60.), ((45) + (4) / 60.), ((45) + (29) / 60.), ((45) + (55) / 60.), ((46) + (20) / 60.), ((46) + (45) / 60.), ((47) + (9) / 60.), ((47) + (33) / 60.), ((47) + (57) / 60.), ((48) + (20) / 60.), ((48) + (43) / 60.), ((49) + (6) / 60.), ((49) + (29) / 60.), ((49) + (51) / 60.), ((50) + (12) / 60.), ((50) + (34) / 60.), ((50) + (55) / 60.), ((51) + (16) / 60.), ((51) + (36) / 60.), ((51) + (56) / 60.), ((52) + (16) / 60.), ((52) + (35) / 60.), ((52) + (54) / 60.), ((53) + (13) / 60.), ((53) + (31) / 60.), ((53) + (49) / 60.), ((54) + (7) / 60.), ((54) + (24) / 60.), ((54) + (40) / 60.), ((54) + (56) / 60.), ((55) + (12) / 60.), ((55) + (28) / 60.), ((55) + (43) / 60.), ((55) + (58) / 60.), ((56) + (12) / 60.), ((56) + (26) / 60.), ((56) + (39) / 60.), ((56) + (52) / 60.), ((57) + (5) / 60.), ((57) + (17) / 60.), ((57) + (29) / 60.), ((57) + (40) / 60.), ((57) + (51) / 60.), ((58) + (1) / 60.), ((58) + (11) / 60.), ((58) + (21) / 60.), ((58) + (30) / 60.), ((58) + (39) / 60.), ((58) + (47) / 60.), ((58) + (55) / 60.), ((59) + (2) / 60.), ((59) + (9) / 60.), ((59) + (16) / 60.), ((59) + (22) / 60.), ((59) + (27) / 60.), ((59) + (33) / 60.), ((59) + (38) / 60.), ((59) + (42) / 60.), ((59) + (46) / 60.), ((59) + (49) / 60.), ((59) + (52) / 60.), ((59) + (54) / 60.), ((59) + (56) / 60.), ((59) + (58) / 60.), ((59) + (59) / 60.), ((60) + (0) / 60.), ((60) + (0) / 60.),
  };
  return interpolate_symmetric_linear(sizeof(table) / sizeof(*table), table, angle);
}
```