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

```asm
<sc_strerror>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0x340,%rsp
  mov    %edi,-0x334(%rbp)
  mov    %fs:0x28,%rax
  mov    %rax,-0x8(%rbp)
  xor    %eax,%eax
  lea    D10(%rip),%rax
  mov    %rax,-0x1e0(%rbp)
  lea    D522(%rip),%rax
  mov    %rax,-0x1d8(%rbp)
  lea    D809(%rip),%rax
  mov    %rax,-0x1d0(%rbp)
  lea    D809(%rip),%rax
  mov    %rax,-0x1c8(%rbp)
  lea    D581(%rip),%rax
  mov    %rax,-0x1c0(%rbp)
  lea    D8(%rip),%rax
  mov    %rax,-0x1b8(%rbp)
  lea    D728(%rip),%rax
  mov    %rax,-0x1b0(%rbp)
  lea    D277(%rip),%rax
  mov    %rax,-0x1a8(%rbp)
  lea    D895(%rip),%rax
  mov    %rax,-0x1a0(%rbp)
  lea    D747(%rip),%rax
  mov    %rax,-0x198(%rbp)
  lea    D637(%rip),%rax
  mov    %rax,-0x190(%rbp)
  lea    D763(%rip),%rax
  mov    %rax,-0x188(%rbp)
  lea    D182(%rip),%rax
  mov    %rax,-0x180(%rbp)
  lea    D352(%rip),%rax
  mov    %rax,-0x178(%rbp)
  lea    D414(%rip),%rax
  mov    %rax,-0x170(%rbp)
  lea    D526(%rip),%rax
  mov    %rax,-0x168(%rbp)
  lea    D824(%rip),%rax
  mov    %rax,-0x160(%rbp)
  movl   $0x44c,-0x31c(%rbp)
  lea    D1(%rip),%rax
  mov    %rax,-0xb0(%rbp)
  lea    D42(%rip),%rax
  mov    %rax,-0xa8(%rbp)
  lea    D730(%rip),%rax
  mov    %rax,-0xa0(%rbp)
  lea    D364(%rip),%rax
  mov    %rax,-0x98(%rbp)
  lea    D590(%rip),%rax
  mov    %rax,-0x90(%rbp)
  lea    D76(%rip),%rax
  mov    %rax,-0x88(%rbp)
  lea    D384(%rip),%rax
  mov    %rax,-0x80(%rbp)
  lea    D892(%rip),%rax
  mov    %rax,-0x78(%rbp)
  lea    D141(%rip),%rax
  mov    %rax,-0x70(%rbp)
  lea    D638(%rip),%rax
  mov    %rax,-0x68(%rbp)
  lea    D201(%rip),%rax
  mov    %rax,-0x60(%rbp)
  lea    D388(%rip),%rax
  mov    %rax,-0x58(%rbp)
  lea    D704(%rip),%rax
  mov    %rax,-0x50(%rbp)
  lea    D680(%rip),%rax
  mov    %rax,-0x48(%rbp)
  lea    D267(%rip),%rax
  mov    %rax,-0x40(%rbp)
  lea    D362(%rip),%rax
  mov    %rax,-0x38(%rbp)
  lea    D870(%rip),%rax
  mov    %rax,-0x30(%rbp)
  lea    D55(%rip),%rax
  mov    %rax,-0x28(%rbp)
  lea    D274(%rip),%rax
  mov    %rax,-0x20(%rbp)
  lea    D564(%rip),%rax
  mov    %rax,-0x18(%rbp)
  lea    D355(%rip),%rax
  mov    %rax,-0x10(%rbp)
  movl   $0x4b0,-0x318(%rbp)
  lea    D571(%rip),%rax
  mov    %rax,-0x2e0(%rbp)
  lea    D809(%rip),%rax
  mov    %rax,-0x2d8(%rbp)
  lea    D809(%rip),%rax
  mov    %rax,-0x2d0(%rbp)
  lea    D603(%rip),%rax
  mov    %rax,-0x2c8(%rbp)
  lea    D92(%rip),%rax
  mov    %rax,-0x2c0(%rbp)
  lea    D252(%rip),%rax
  mov    %rax,-0x2b8(%rbp)
  movl   $0x514,-0x314(%rbp)
  lea    D370(%rip),%rax
  mov    %rax,-0x150(%rbp)
  lea    D862(%rip),%rax
  mov    %rax,-0x148(%rbp)
  lea    D746(%rip),%rax
  mov    %rax,-0x140(%rbp)
  lea    D216(%rip),%rax
  mov    %rax,-0x138(%rbp)
  lea    D667(%rip),%rax
  mov    %rax,-0x130(%rbp)
  lea    D315(%rip),%rax
  mov    %rax,-0x128(%rbp)
  lea    D374(%rip),%rax
  mov    %rax,-0x120(%rbp)
  lea    D533(%rip),%rax
  mov    %rax,-0x118(%rbp)
  lea    D796(%rip),%rax
  mov    %rax,-0x110(%rbp)
  lea    D647(%rip),%rax
  mov    %rax,-0x108(%rbp)
  lea    D641(%rip),%rax
  mov    %rax,-0x100(%rbp)
  lea    D13(%rip),%rax
  mov    %rax,-0xf8(%rbp)
  lea    D407(%rip),%rax
  mov    %rax,-0xf0(%rbp)
  lea    D551(%rip),%rax
  mov    %rax,-0xe8(%rbp)
  lea    D771(%rip),%rax
  mov    %rax,-0xe0(%rbp)
  lea    D129(%rip),%rax
  mov    %rax,-0xd8(%rbp)
  lea    D488(%rip),%rax
  mov    %rax,-0xd0(%rbp)
  lea    D312(%rip),%rax
  mov    %rax,-0xc8(%rbp)
  lea    D366(%rip),%rax
  mov    %rax,-0xc0(%rbp)
  movl   $0x578,-0x310(%rbp)
  lea    D454(%rip),%rax
  mov    %rax,-0x2b0(%rbp)
  lea    D38(%rip),%rax
  mov    %rax,-0x2a8(%rbp)
  lea    D882(%rip),%rax
  mov    %rax,-0x2a0(%rbp)
  lea    D885(%rip),%rax
  mov    %rax,-0x298(%rbp)
  lea    D696(%rip),%rax
  mov    %rax,-0x290(%rbp)
  lea    D401(%rip),%rax
  mov    %rax,-0x288(%rbp)
  lea    D106(%rip),%rax
  mov    %rax,-0x280(%rbp)
  lea    D809(%rip),%rax
  mov    %rax,-0x278(%rbp)
  lea    D323(%rip),%rax
  mov    %rax,-0x270(%rbp)
  lea    D774(%rip),%rax
  mov    %rax,-0x268(%rbp)
  lea    D621(%rip),%rax
  mov    %rax,-0x260(%rbp)
  movl   $0x5dc,-0x30c(%rbp)
  lea    D495(%rip),%rax
  mov    %rax,-0x250(%rbp)
  lea    D503(%rip),%rax
  mov    %rax,-0x248(%rbp)
  lea    D830(%rip),%rax
  mov    %rax,-0x240(%rbp)
  lea    D848(%rip),%rax
  mov    %rax,-0x238(%rbp)
  lea    D296(%rip),%rax
  mov    %rax,-0x230(%rbp)
  lea    D843(%rip),%rax
  mov    %rax,-0x228(%rbp)
  lea    D493(%rip),%rax
  mov    %rax,-0x220(%rbp)
  lea    D860(%rip),%rax
  mov    %rax,-0x218(%rbp)
  lea    D758(%rip),%rax
  mov    %rax,-0x210(%rbp)
  lea    D122(%rip),%rax
  mov    %rax,-0x208(%rbp)
  lea    D534(%rip),%rax
  mov    %rax,-0x200(%rbp)
  lea    D297(%rip),%rax
  mov    %rax,-0x1f8(%rbp)
  lea    D280(%rip),%rax
  mov    %rax,-0x1f0(%rbp)
  movl   $0x640,-0x308(%rbp)
  lea    D409(%rip),%rax
  mov    %rax,-0x2f0(%rbp)
  lea    D423(%rip),%rax
  mov    %rax,-0x2e8(%rbp)
  movl   $0x76c,-0x304(%rbp)
  lea    D394(%rip),%rax
  mov    %rax,-0x2f8(%rbp)
  movq   $0x0,-0x300(%rbp)
  movl   $0x0,-0x324(%rbp)
  movl   $0x0,-0x320(%rbp)
  cmpl   $0x0,-0x334(%rbp)
  jne    L33
  mov    -0x2f8(%rbp),%rax
  jmp    L136
L33:
  cmpl   $0x0,-0x334(%rbp)
  jns    L135
  negl   -0x334(%rbp)
L135:
  mov    -0x334(%rbp),%eax
  cmp    -0x304(%rbp),%eax
  jl     L24
  lea    -0x2f0(%rbp),%rax
  mov    %rax,-0x300(%rbp)
  movl   $0x2,-0x324(%rbp)
  mov    -0x304(%rbp),%eax
  mov    %eax,-0x320(%rbp)
  jmp    L82
L24:
  mov    -0x334(%rbp),%eax
  cmp    -0x308(%rbp),%eax
  jl     L48
  lea    -0x250(%rbp),%rax
  mov    %rax,-0x300(%rbp)
  movl   $0xd,-0x324(%rbp)
  mov    -0x308(%rbp),%eax
  mov    %eax,-0x320(%rbp)
  jmp    L82
L48:
  mov    -0x334(%rbp),%eax
  cmp    -0x30c(%rbp),%eax
  jl     L55
  lea    -0x2b0(%rbp),%rax
  mov    %rax,-0x300(%rbp)
  movl   $0xb,-0x324(%rbp)
  mov    -0x30c(%rbp),%eax
  mov    %eax,-0x320(%rbp)
  jmp    L82
L55:
  mov    -0x334(%rbp),%eax
  cmp    -0x310(%rbp),%eax
  jl     L147
  lea    -0x150(%rbp),%rax
  mov    %rax,-0x300(%rbp)
  movl   $0x13,-0x324(%rbp)
  mov    -0x310(%rbp),%eax
  mov    %eax,-0x320(%rbp)
  jmp    L82
L147:
  mov    -0x334(%rbp),%eax
  cmp    -0x314(%rbp),%eax
  jl     L23
  lea    -0x2e0(%rbp),%rax
  mov    %rax,-0x300(%rbp)
  movl   $0x6,-0x324(%rbp)
  mov    -0x314(%rbp),%eax
  mov    %eax,-0x320(%rbp)
  jmp    L82
L23:
  mov    -0x334(%rbp),%eax
  cmp    -0x318(%rbp),%eax
  jl     L52
  lea    -0xb0(%rbp),%rax
  mov    %rax,-0x300(%rbp)
  movl   $0x15,-0x324(%rbp)
  mov    -0x318(%rbp),%eax
  mov    %eax,-0x320(%rbp)
  jmp    L82
L52:
  mov    -0x334(%rbp),%eax
  cmp    -0x31c(%rbp),%eax
  jl     L82
  lea    -0x1e0(%rbp),%rax
  mov    %rax,-0x300(%rbp)
  movl   $0x11,-0x324(%rbp)
  mov    -0x31c(%rbp),%eax
  mov    %eax,-0x320(%rbp)
L82:
  mov    -0x320(%rbp),%eax
  sub    %eax,-0x334(%rbp)
  mov    -0x334(%rbp),%eax
  cmp    -0x324(%rbp),%eax
  jge    L164
  cmpl   $0x0,-0x324(%rbp)
  jne    L12
L164:
  mov    -0x2f0(%rbp),%rax
  jmp    L136
L12:
  mov    -0x334(%rbp),%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0x300(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%rax
L136:
  mov    -0x8(%rbp),%rdx
  sub    %fs:0x28,%rdx
  je     L67
  call   <__stack_chk_fail@plt>
L67:
  leave
  ret
```

tool_calls: name: extract_symbolic_data
arguments: data_label: D10
datatype: string
name: extract_symbolic_data
arguments: data_label: D522
datatype: string
name: extract_symbolic_data
arguments: data_label: D809
datatype: string
name: extract_symbolic_data
arguments: data_label: D581
datatype: string
name: extract_symbolic_data
arguments: data_label: D8
datatype: string
name: extract_symbolic_data
arguments: data_label: D728
datatype: string
name: extract_symbolic_data
arguments: data_label: D277
datatype: string
name: extract_symbolic_data
arguments: data_label: D895
datatype: string
name: extract_symbolic_data
arguments: data_label: D747
datatype: string
name: extract_symbolic_data
arguments: data_label: D637
datatype: string
name: extract_symbolic_data
arguments: data_label: D763
datatype: string
name: extract_symbolic_data
arguments: data_label: D182
datatype: string
name: extract_symbolic_data
arguments: data_label: D352
datatype: string
name: extract_symbolic_data
arguments: data_label: D414
datatype: string
name: extract_symbolic_data
arguments: data_label: D526
datatype: string
name: extract_symbolic_data
arguments: data_label: D824
datatype: string
name: extract_symbolic_data
arguments: data_label: D1
datatype: string
name: extract_symbolic_data
arguments: data_label: D42
datatype: string
name: extract_symbolic_data
arguments: data_label: D730
datatype: string
name: extract_symbolic_data
arguments: data_label: D364
datatype: string
name: extract_symbolic_data
arguments: data_label: D590
datatype: string
name: extract_symbolic_data
arguments: data_label: D76
datatype: string
name: extract_symbolic_data
arguments: data_label: D384
datatype: string
name: extract_symbolic_data
arguments: data_label: D892
datatype: string
name: extract_symbolic_data
arguments: data_label: D141
datatype: string
name: extract_symbolic_data
arguments: data_label: D638
datatype: string
name: extract_symbolic_data
arguments: data_label: D201
datatype: string
name: extract_symbolic_data
arguments: data_label: D388
datatype: string
name: extract_symbolic_data
arguments: data_label: D704
datatype: string
name: extract_symbolic_data
arguments: data_label: D680
datatype: string
name: extract_symbolic_data
arguments: data_label: D267
datatype: string
name: extract_symbolic_data
arguments: data_label: D362
datatype: string
name: extract_symbolic_data
arguments: data_label: D870
datatype: string
name: extract_symbolic_data
arguments: data_label: D55
datatype: string
name: extract_symbolic_data
arguments: data_label: D274
datatype: string
name: extract_symbolic_data
arguments: data_label: D564
datatype: string
name: extract_symbolic_data
arguments: data_label: D355
datatype: string
name: extract_symbolic_data
arguments: data_label: D571
datatype: string
name: extract_symbolic_data
arguments: data_label: D603
datatype: string
name: extract_symbolic_data
arguments: data_label: D92
datatype: string
name: extract_symbolic_data
arguments: data_label: D252
datatype: string
name: extract_symbolic_data
arguments: data_label: D370
datatype: string
name: extract_symbolic_data
arguments: data_label: D862
datatype: string
name: extract_symbolic_data
arguments: data_label: D746
datatype: string
name: extract_symbolic_data
arguments: data_label: D216
datatype: string
name: extract_symbolic_data
arguments: data_label: D667
datatype: string
name: extract_symbolic_data
arguments: data_label: D315
datatype: string
name: extract_symbolic_data
arguments: data_label: D374
datatype: string
name: extract_symbolic_data
arguments: data_label: D533
datatype: string
name: extract_symbolic_data
arguments: data_label: D796
datatype: string
name: extract_symbolic_data
arguments: data_label: D647
datatype: string
name: extract_symbolic_data
arguments: data_label: D641
datatype: string
name: extract_symbolic_data
arguments: data_label: D13
datatype: string
name: extract_symbolic_data
arguments: data_label: D407
datatype: string
name: extract_symbolic_data
arguments: data_label: D551
datatype: string
name: extract_symbolic_data
arguments: data_label: D771
datatype: string
name: extract_symbolic_data
arguments: data_label: D129
datatype: string
name: extract_symbolic_data
arguments: data_label: D488
datatype: string
name: extract_symbolic_data
arguments: data_label: D312
datatype: string
name: extract_symbolic_data
arguments: data_label: D366
datatype: string
name: extract_symbolic_data
arguments: data_label: D454
datatype: string
name: extract_symbolic_data
arguments: data_label: D38
datatype: string
name: extract_symbolic_data
arguments: data_label: D882
datatype: string
name: extract_symbolic_data
arguments: data_label: D885
datatype: string
name: extract_symbolic_data
arguments: data_label: D696
datatype: string
name: extract_symbolic_data
arguments: data_label: D401
datatype: string
name: extract_symbolic_data
arguments: data_label: D106
datatype: string
name: extract_symbolic_data
arguments: data_label: D323
datatype: string
name: extract_symbolic_data
arguments: data_label: D774
datatype: string
name: extract_symbolic_data
arguments: data_label: D621
datatype: string
name: extract_symbolic_data
arguments: data_label: D495
datatype: string
name: extract_symbolic_data
arguments: data_label: D503
datatype: string
name: extract_symbolic_data
arguments: data_label: D830
datatype: string
name: extract_symbolic_data
arguments: data_label: D848
datatype: string
name: extract_symbolic_data
arguments: data_label: D296
datatype: string
name: extract_symbolic_data
arguments: data_label: D843
datatype: string
name: extract_symbolic_data
arguments: data_label: D493
datatype: string
name: extract_symbolic_data
arguments: data_label: D860
datatype: string
name: extract_symbolic_data
arguments: data_label: D758
datatype: string
name: extract_symbolic_data
arguments: data_label: D122
datatype: string
name: extract_symbolic_data
arguments: data_label: D534
datatype: string
name: extract_symbolic_data
arguments: data_label: D297
datatype: string
name: extract_symbolic_data
arguments: data_label: D280
datatype: string
name: extract_symbolic_data
arguments: data_label: D409
datatype: string
name: extract_symbolic_data
arguments: data_label: D423
datatype: string
name: extract_symbolic_data
arguments: data_label: D394
datatype: string

tool: D10: Generic reader error

tool: D522: No readers found

tool: D809: UNUSED

tool: D581: Card not present

tool: D8: Card removed

tool: D728: Card reset

tool: D277: Transmit failed

tool: D895: Timed out while waiting for user input

tool: D747: Input operation cancelled by user

tool: D637: The two PINs did not match

tool: D763: Message too long (keypad)

tool: D182: Timeout while waiting for event from card reader

tool: D352: Unresponsive card (correctly inserted?)

tool: D414: Reader detached

tool: D526: Reader reattached

tool: D824: Reader in use by another application

tool: D1: Card command failed

tool: D42: File not found

tool: D730: Record not found

tool: D364: Unsupported CLA byte in APDU

tool: D590: Unsupported INS byte in APDU

tool: D76: Incorrect parameters in APDU

tool: D384: Wrong length

tool: D892: Card memory failure

tool: D141: Card does not support the requested operation

tool: D638: Not allowed

tool: D201: Card is invalid or cannot be handled

tool: D388: Security status not satisfied

tool: D704: Authentication method blocked

tool: D680: Unknown data received from card

tool: D267: PIN code or key incorrect

tool: D362: File already exists

tool: D870: Data object not found

tool: D55: Not enough memory on card

tool: D274: Part of returned data may be corrupted

tool: D564: End of file/record reached before reading Le bytes

tool: D355: Reference data not usable

tool: D571: Invalid arguments

tool: D603: Buffer too small

tool: D92: Invalid PIN length

tool: D252: Invalid data

tool: D370: Internal error

tool: D862: Invalid ASN.1 object

tool: D746: Required ASN.1 object not found

tool: D216: Premature end of ASN.1 stream

tool: D667: Out of memory

tool: D315: Too many objects

tool: D374: Object not valid

tool: D533: Requested object not found

tool: D796: Not supported

tool: D647: Passphrase required

tool: D641: Inconsistent configuration

tool: D13: Decryption failed

tool: D407: Wrong padding

tool: D551: Unsupported card

tool: D771: Unable to load external module

tool: D129: EF offset too large

tool: D488: Not implemented

tool: D312: Invalid Simple TLV object

tool: D366: Premature end of Simple TLV stream

tool: D454: Generic PKCS#15 initialization error

tool: D38: Syntax error

tool: D882: Inconsistent or incomplete PKCS#15 profile

tool: D885: Key length/algorithm not supported by card

tool: D696: No default (transport) key available

tool: D401: Non unique object ID

tool: D106: Unable to load key and certificate(s) from file

tool: D323: File template not found

tool: D774: Invalid PIN reference

tool: D621: File too small

tool: D495: Generic Secure Messaging error

tool: D503: Data enciphering error

tool: D830: Invalid secure messaging level

tool: D848: No session keys

tool: D296: Invalid session keys

tool: D843: Secure Messaging not initialized

tool: D493: Cannot authenticate card

tool: D860: Random generation error

tool: D758: Secure messaging keyset not found

tool: D122: IFD data missing

tool: D534: SM not applied

tool: D297: SM session already active

tool: D280: Invalid checksum

tool: D409: Unknown error

tool: D423: PKCS#15 compatible smart card not found

tool: D394: Success

assistant: ```c
const char *sc_strerror(int error) {
  const char *rdr_errors[] = {"Generic reader error", "No readers found", "UNUSED", "UNUSED", "Card not present", "Card removed", "Card reset", "Transmit failed", "Timed out while waiting for user input", "Input operation cancelled by user", "The two PINs did not match", "Message too long (keypad)", "Timeout while waiting for event from card reader", "Unresponsive card (correctly inserted?)", "Reader detached", "Reader reattached", "Reader in use by another application"};
  const int rdr_base = - -1100;
  const char *card_errors[] = {"Card command failed", "File not found", "Record not found", "Unsupported CLA byte in APDU", "Unsupported INS byte in APDU", "Incorrect parameters in APDU", "Wrong length", "Card memory failure", "Card does not support the requested operation", "Not allowed", "Card is invalid or cannot be handled", "Security status not satisfied", "Authentication method blocked", "Unknown data received from card", "PIN code or key incorrect", "File already exists", "Data object not found", "Not enough memory on card", "Part of returned data may be corrupted", "End of file/record reached before reading Le bytes", "Reference data not usable"};
  const int card_base = - -1200;
  const char *arg_errors[] = {
      "Invalid arguments", "UNUSED", "UNUSED", "Buffer too small", "Invalid PIN length", "Invalid data",
  };
  const int arg_base = - -1300;
  const char *int_errors[] = {
      "Internal error", "Invalid ASN.1 object", "Required ASN.1 object not found", "Premature end of ASN.1 stream", "Out of memory", "Too many objects", "Object not valid", "Requested object not found", "Not supported", "Passphrase required", "Inconsistent configuration", "Decryption failed", "Wrong padding", "Unsupported card", "Unable to load external module", "EF offset too large", "Not implemented", "Invalid Simple TLV object", "Premature end of Simple TLV stream",
  };
  const int int_base = - -1400;
  const char *p15i_errors[] = {
      "Generic PKCS#15 initialization error", "Syntax error", "Inconsistent or incomplete PKCS#15 profile", "Key length/algorithm not supported by card", "No default (transport) key available", "Non unique object ID", "Unable to load key and certificate(s) from file", "UNUSED", "File template not found", "Invalid PIN reference", "File too small",
  };
  const int p15i_base = - -1500;
  const char *sm_errors[] = {"Generic Secure Messaging error", "Data enciphering error", "Invalid secure messaging level", "No session keys", "Invalid session keys", "Secure Messaging not initialized", "Cannot authenticate card", "Random generation error", "Secure messaging keyset not found", "IFD data missing", "SM not applied", "SM session already active", "Invalid checksum"};
  const int sm_base = - -1600;
  const char *misc_errors[] = {
      "Unknown error",
      "PKCS#15 compatible smart card not found",
  };
  const int misc_base = - -1900;
  const char *no_errors = "Success";
  const char **errors = NULL;
  int count = 0, err_base = 0;
  if (!error)
    return no_errors;
  if (error < 0)
    error = -error;
  if (error >= misc_base) {
    errors = misc_errors;
    count = (sizeof(misc_errors) / (sizeof((misc_errors)[0])));
    err_base = misc_base;
  } else if (error >= sm_base) {
    errors = sm_errors;
    count = (sizeof(sm_errors) / (sizeof((sm_errors)[0])));
    err_base = sm_base;
  } else if (error >= p15i_base) {
    errors = p15i_errors;
    count = (sizeof(p15i_errors) / (sizeof((p15i_errors)[0])));
    err_base = p15i_base;
  } else if (error >= int_base) {
    errors = int_errors;
    count = (sizeof(int_errors) / (sizeof((int_errors)[0])));
    err_base = int_base;
  } else if (error >= arg_base) {
    errors = arg_errors;
    count = (sizeof(arg_errors) / (sizeof((arg_errors)[0])));
    err_base = arg_base;
  } else if (error >= card_base) {
    errors = card_errors;
    count = (sizeof(card_errors) / (sizeof((card_errors)[0])));
    err_base = card_base;
  } else if (error >= rdr_base) {
    errors = rdr_errors;
    count = (sizeof(rdr_errors) / (sizeof((rdr_errors)[0])));
    err_base = rdr_base;
  }
  error -= err_base;
  if (error >= count || count == 0)
    return misc_errors[0];
  return errors[error];
}
```