#include <metal_stdlib>

using namespace metal;
struct tint_array_wrapper {
  /* 0x0000 */ int4 arr[4];
};

struct S {
  /* 0x0000 */ tint_array_wrapper a;
};

int idx1(thread uint* const tint_symbol_10) {
  *(tint_symbol_10) = (*(tint_symbol_10) - 1u);
  return 1;
}

int idx2(thread uint* const tint_symbol_11) {
  *(tint_symbol_11) = (*(tint_symbol_11) - 1u);
  return 2;
}

int idx3(thread uint* const tint_symbol_12) {
  *(tint_symbol_12) = (*(tint_symbol_12) - 1u);
  return 3;
}

int idx4(thread uint* const tint_symbol_13) {
  *(tint_symbol_13) = (*(tint_symbol_13) - 1u);
  return 4;
}

int idx5(thread uint* const tint_symbol_14) {
  *(tint_symbol_14) = (*(tint_symbol_14) - 1u);
  return 0;
}

int idx6(thread uint* const tint_symbol_15) {
  *(tint_symbol_15) = (*(tint_symbol_15) - 1u);
  return 2;
}

void tint_symbol_1(thread uint* const tint_symbol_16, device S (*const tint_symbol_17)[1]) {
  int const tint_symbol_6 = idx1(tint_symbol_16);
  int const tint_symbol_7 = idx2(tint_symbol_16);
  int const tint_symbol_2_save = tint_symbol_6;
  int const tint_symbol_2_save_1 = tint_symbol_7;
  int const tint_symbol_3 = idx3(tint_symbol_16);
  {
    (*(tint_symbol_17))[tint_symbol_2_save].a.arr[tint_symbol_2_save_1][tint_symbol_3] = as_type<int>((as_type<uint>((*(tint_symbol_17))[tint_symbol_2_save].a.arr[tint_symbol_2_save_1][tint_symbol_3]) - as_type<uint>(1)));
    while (true) {
      if (!((*(tint_symbol_16) < 10u))) {
        break;
      }
      {
      }
      {
        int const tint_symbol_8 = idx4(tint_symbol_16);
        int const tint_symbol_9 = idx5(tint_symbol_16);
        int const tint_symbol_4_save = tint_symbol_8;
        int const tint_symbol_4_save_1 = tint_symbol_9;
        int const tint_symbol_5 = idx6(tint_symbol_16);
        (*(tint_symbol_17))[tint_symbol_4_save].a.arr[tint_symbol_4_save_1][tint_symbol_5] = as_type<int>((as_type<uint>((*(tint_symbol_17))[tint_symbol_4_save].a.arr[tint_symbol_4_save_1][tint_symbol_5]) - as_type<uint>(1)));
      }
    }
  }
}

