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

```asm
<skeleton>:
  endbr64
  push   %r12
  push   %rbp
  push   %rbx
  sub    $0x1b0,%rsp
  mov    %rdi,%rbx
  mov    %fs:0x28,%rax
  mov    %rax,0x1a8(%rsp)
  xor    %eax,%eax
  call   <strlen@plt>
  lea    0x28(%rax),%rdi
  lea    D182(%rip),%rbp
  mov    %rbp,%rdx
  mov    $0x1dd,%esi
  call   <eipa_malloc@plt>
  mov    %rax,%rdi
  mov    %rax,(%rsp)
  lea    D100(%rip),%rsi
  call   <strcpy@plt>
  mov    %rbx,%rsi
  mov    (%rsp),%rdi
  call   <strcat@plt>
  lea    D18(%rip),%rsi
  mov    (%rsp),%rdi
  call   <strcat@plt>
  mov    %rbx,%rdi
  call   <strlen@plt>
  lea    0x25(%rax),%rdi
  mov    %rbp,%rdx
  mov    $0x1e5,%esi
  call   <eipa_malloc@plt>
  mov    %rax,%rdi
  mov    %rax,0x8(%rsp)
  lea    D81(%rip),%r12
  mov    %r12,%rsi
  call   <strcpy@plt>
  mov    %rbx,%rsi
  mov    0x8(%rsp),%rdi
  call   <strcat@plt>
  lea    D89(%rip),%rsi
  mov    0x8(%rsp),%rdi
  call   <strcat@plt>
  lea    D117(%rip),%rax
  mov    %rax,0x10(%rsp)
  lea    D58(%rip),%rax
  mov    %rax,0x18(%rsp)
  lea    D361(%rip),%rax
  mov    %rax,0x20(%rsp)
  mov    (%rsp),%rdx
  mov    %rdx,0x28(%rsp)
  lea    D281(%rip),%rcx
  mov    %rcx,0x30(%rsp)
  lea    D105(%rip),%rcx
  mov    %rcx,0x38(%rsp)
  mov    %rax,0x40(%rsp)
  lea    D0(%rip),%rbx
  mov    %rbx,0x48(%rsp)
  lea    D208(%rip),%rbx
  mov    %rbx,0x50(%rsp)
  lea    D249(%rip),%rsi
  mov    %rsi,0x58(%rsp)
  lea    D328(%rip),%rbx
  mov    %rbx,0x60(%rsp)
  lea    D221(%rip),%rdx
  mov    %rdx,0x68(%rsp)
  lea    D266(%rip),%rdx
  mov    %rdx,0x70(%rsp)
  mov    %rax,0x78(%rsp)
  lea    D123(%rip),%rbx
  mov    %rbx,0x80(%rsp)
  mov    %rsi,0x88(%rsp)
  lea    D75(%rip),%rbx
  mov    %rbx,0x90(%rsp)
  lea    D235(%rip),%rbx
  mov    %rbx,0x98(%rsp)
  mov    %rdx,0xa0(%rsp)
  mov    %r12,0xa8(%rsp)
  lea    D291(%rip),%rbx
  mov    %rbx,0xb0(%rsp)
  mov    %rax,0xb8(%rsp)
  lea    D204(%rip),%rbx
  mov    %rbx,0xc0(%rsp)
  lea    D285(%rip),%rsi
  mov    %rsi,0xc8(%rsp)
  lea    D154(%rip),%rbx
  mov    %rbx,0xd0(%rsp)
  mov    %rdx,0xd8(%rsp)
  mov    %rax,0xe0(%rsp)
  lea    D335(%rip),%rsi
  mov    %rsi,0xe8(%rsp)
  mov    %rax,0xf0(%rsp)
  lea    D267(%rip),%rbx
  mov    %rbx,0xf8(%rsp)
  lea    D311(%rip),%rsi
  mov    %rsi,0x100(%rsp)
  lea    D202(%rip),%rbx
  mov    %rbx,0x108(%rsp)
  mov    0x8(%rsp),%rsi
  mov    %rsi,0x110(%rsp)
  lea    D33(%rip),%rsi
  mov    %rsi,0x118(%rsp)
  lea    D259(%rip),%rbx
  mov    %rbx,0x120(%rsp)
  lea    D113(%rip),%rsi
  mov    %rsi,0x128(%rsp)
  mov    %rax,0x130(%rsp)
  lea    D212(%rip),%rbx
  mov    %rbx,0x138(%rsp)
  lea    D344(%rip),%rsi
  mov    %rsi,0x140(%rsp)
  mov    %rdx,0x148(%rsp)
  mov    %r12,0x150(%rsp)
  lea    D134(%rip),%rdi
  mov    %rdi,0x158(%rsp)
  mov    %rax,0x160(%rsp)
  lea    D104(%rip),%rbx
  mov    %rbx,0x168(%rsp)
  lea    D277(%rip),%rsi
  mov    %rsi,0x170(%rsp)
  mov    %rdx,0x178(%rsp)
  mov    %r12,0x180(%rsp)
  lea    D282(%rip),%rdx
  mov    %rdx,0x188(%rsp)
  mov    %rax,0x190(%rsp)
  lea    D21(%rip),%rax
  mov    %rax,0x198(%rsp)
  mov    %rcx,0x1a0(%rsp)
  lea    0x10(%rsp),%rdi
  mov    $0x33,%esi
  call   <buildString@plt>
  mov    %rax,%rbx
  mov    %rsp,%rdi
  mov    %rbp,%rdx
  mov    $0x222,%esi
  call   <eipa_free@plt>
  lea    0x8(%rsp),%rdi
  mov    %rbp,%rdx
  mov    $0x223,%esi
  call   <eipa_free@plt>
  mov    0x1a8(%rsp),%rax
  sub    %fs:0x28,%rax
  jne    L0
  mov    %rbx,%rax
  add    $0x1b0,%rsp
  pop    %rbx
  pop    %rbp
  pop    %r12
  ret
L0:
  call   <__stack_chk_fail@plt>
```

tool_calls: name: disassemble_data
arguments: data_label: D182
datatype: string
name: disassemble_data
arguments: data_label: D100
datatype: string
name: disassemble_data
arguments: data_label: D18
datatype: string
name: disassemble_data
arguments: data_label: D81
datatype: string
name: disassemble_data
arguments: data_label: D89
datatype: string
name: disassemble_data
arguments: data_label: D117
datatype: string
name: disassemble_data
arguments: data_label: D58
datatype: string
name: disassemble_data
arguments: data_label: D361
datatype: string
name: disassemble_data
arguments: data_label: D281
datatype: string
name: disassemble_data
arguments: data_label: D105
datatype: string
name: disassemble_data
arguments: data_label: D0
datatype: string
name: disassemble_data
arguments: data_label: D208
datatype: string
name: disassemble_data
arguments: data_label: D249
datatype: string
name: disassemble_data
arguments: data_label: D328
datatype: string
name: disassemble_data
arguments: data_label: D221
datatype: string
name: disassemble_data
arguments: data_label: D266
datatype: string
name: disassemble_data
arguments: data_label: D123
datatype: string
name: disassemble_data
arguments: data_label: D75
datatype: string
name: disassemble_data
arguments: data_label: D235
datatype: string
name: disassemble_data
arguments: data_label: D291
datatype: string
name: disassemble_data
arguments: data_label: D204
datatype: string
name: disassemble_data
arguments: data_label: D285
datatype: string
name: disassemble_data
arguments: data_label: D154
datatype: string
name: disassemble_data
arguments: data_label: D335
datatype: string
name: disassemble_data
arguments: data_label: D267
datatype: string
name: disassemble_data
arguments: data_label: D311
datatype: string
name: disassemble_data
arguments: data_label: D202
datatype: string
name: disassemble_data
arguments: data_label: D33
datatype: string
name: disassemble_data
arguments: data_label: D259
datatype: string
name: disassemble_data
arguments: data_label: D113
datatype: string
name: disassemble_data
arguments: data_label: D212
datatype: string
name: disassemble_data
arguments: data_label: D344
datatype: string
name: disassemble_data
arguments: data_label: D134
datatype: string
name: disassemble_data
arguments: data_label: D104
datatype: string
name: disassemble_data
arguments: data_label: D277
datatype: string
name: disassemble_data
arguments: data_label: D282
datatype: string
name: disassemble_data
arguments: data_label: D21
datatype: string

tool: D182: /scratch/repos/new/home/jordi_armengol_estape/c-scraper/outputs/2022-01-22/02-19-57/repos/WikiDreams/CUDA-SAK/refs/heads/master/Cuda-SAK/functions.c

tool: D100: __global__ void 

tool: D18: (TODO:add parameters) {

tool: D81: 	

tool: D89: <<<blocks,grid>>>(TODO:parameters);

tool: D117: #include <stdio.h>

tool: D58: #include "HandleError.h"

tool: 

tool: D281: 	//TODO: Kernel code here

tool: D105: }

tool: D0: int main(void) {

tool: D208: 	/*TODO: declare and initialize variables for device and host

tool: D249: 	* Example:

tool: D328: 	* int histo_h[256];	

tool: D221: 	* unsigned int *histo_d;

tool: D266: 	*/

tool: D123: 	/*TODO: prepare device memory

tool: D75: 	* size_t histo_size_bytes = 256 * sizeof(unsigned int);

tool: D235: 	* HANDLE_ERROR( cudaMalloc((int**)&histo_d,histo_size_bytes) );

tool: D291: 	HANDLE_ERROR( cudaMalloc((TODO:add cast to variable type)&TODO:device variable name,TODO:size to allocate in the device memory);

tool: D204: 	/*TODO: initialize device variables

tool: D285: 	* Example: 

tool: D154: 	* HANDLE_ERROR(cudaMemcpy(buffer_d,buffer_h,buffer_size_bytes,cudaMemcpyHostToDevice));

tool: D335: 	HANDLE_ERROR(cudaMemcpy(TODO:device variable,TODO:host variable,TODO:size allocated to device variable, cudaMemcpyHostToDevice))

tool: D267: 	//Kernel Call

tool: D311: 	dim3 grid(TODO:set grid dimensions);

tool: D202: 	dim3 blocks(TODO:set block dimensions);

tool: D33: 	cudaDeviceSynchronize();

tool: D259: 	cudaError_t err = cudaGetLastError();

tool: D113: 	HANDLE_ERROR( err );

tool: D212: 	/*TODO: copy variables from device to host

tool: D344: 	* Example: HANDLE_ERROR(cudaMemcpy(histo_h,histo_d,histo_size_bytes,cudaMemcpyDeviceToHost));

tool: D134: 	HANDLE_ERROR(cudaMemcpy(TODO:host variable,TODO:device variable,TODO: size allocated to device variable, cudaMemcpyDeviceToHost));

tool: D104: 	/*TODO: free device memory

tool: D277: 	* Example: HANDLE_ERROR(cudaFree(buffer_d));

tool: D282: 	HANDLE_ERROR(cudaFree(TODO:variable to free));

tool: D21: 	return 0;

assistant: ```c
char *skeleton(char *kernel_name) {
  char *aux1 = "__global__ void ";
  char *aux2 = "(TODO:add parameters) {";
  char *aux3 = eipa_malloc((strlen(kernel_name) + strlen(aux1) + strlen(aux2) + 1), 477, "/scratch/repos/new/home/jordi_armengol_estape/c-scraper/outputs/2022-01-22/02-19-57/repos/WikiDreams/CUDA-SAK/refs/heads/master/Cuda-SAK/functions.c");
  strcpy(aux3, aux1);
  strcat(aux3, kernel_name);
  strcat(aux3, aux2);
  char *aux4 = "	";
  char *aux5 = "<<<blocks,grid>>>(TODO:parameters);";
  char *aux6 = eipa_malloc((strlen(kernel_name) + strlen(aux4) + strlen(aux5) + 1), 485, "/scratch/repos/new/home/jordi_armengol_estape/c-scraper/outputs/2022-01-22/02-19-57/repos/WikiDreams/CUDA-SAK/refs/heads/master/Cuda-SAK/functions.c");
  strcpy(aux6, aux4);
  strcat(aux6, kernel_name);
  strcat(aux6, aux5);
  char *string[51] = {"#include <stdio.h>", "#include \"HandleError.h\"", "", aux3, "	//TODO: Kernel code here", "}", "", "int main(void) {", "	/*TODO: declare and initialize variables for device and host", "	* Example:", "	* int histo_h[256];	", "	* unsigned int *histo_d;", "	*/", "", "	/*TODO: prepare device memory", "	* Example:", "	* size_t histo_size_bytes = 256 * sizeof(unsigned int);", "	* HANDLE_ERROR( cudaMalloc((int**)&histo_d,histo_size_bytes) );", "	*/", "	", "	HANDLE_ERROR( cudaMalloc((TODO:add cast to variable type)&TODO:device variable name,TODO:size to allocate in the device memory);", "", "	/*TODO: initialize device variables", "	* Example: ", "	* HANDLE_ERROR(cudaMemcpy(buffer_d,buffer_h,buffer_size_bytes,cudaMemcpyHostToDevice));", "	*/", "", "	HANDLE_ERROR(cudaMemcpy(TODO:device variable,TODO:host variable,TODO:size allocated to device variable, cudaMemcpyHostToDevice))", "", "	//Kernel Call", "	dim3 grid(TODO:set grid dimensions);", "	dim3 blocks(TODO:set block dimensions);", aux6, "	cudaDeviceSynchronize();", "	cudaError_t err = cudaGetLastError();", "	HANDLE_ERROR( err );", "", "	/*TODO: copy variables from device to host", "	* Example: HANDLE_ERROR(cudaMemcpy(histo_h,histo_d,histo_size_bytes,cudaMemcpyDeviceToHost));", "	*/", "	", "	HANDLE_ERROR(cudaMemcpy(TODO:host variable,TODO:device variable,TODO: size allocated to device variable, cudaMemcpyDeviceToHost));", "", "	/*TODO: free device memory", "	* Example: HANDLE_ERROR(cudaFree(buffer_d));", "	*/", "	", "	HANDLE_ERROR(cudaFree(TODO:variable to free));", "", "	return 0;", "}"};
  char *final = buildString(string, 51);
  eipa_free((void **)(&(aux3)), 546, "/scratch/repos/new/home/jordi_armengol_estape/c-scraper/outputs/2022-01-22/02-19-57/repos/WikiDreams/CUDA-SAK/refs/heads/master/Cuda-SAK/functions.c");
  eipa_free((void **)(&(aux6)), 547, "/scratch/repos/new/home/jordi_armengol_estape/c-scraper/outputs/2022-01-22/02-19-57/repos/WikiDreams/CUDA-SAK/refs/heads/master/Cuda-SAK/functions.c");
  return final;
}
```