#include <metal_stdlib>
using namespace metal;

kernel void tint_symbol() {
  {
    uint2 tint_loop_idx = 0u;
    int i = 0;
    while(true) {
      if (all((tint_loop_idx == uint2(4294967295u)))) {
        break;
      }
      if ((i < 2)) {
      } else {
        break;
      }
      bool tint_continue = false;
      switch(i) {
        case 0:
        {
          {
            uint2 tint_loop_idx_1 = 0u;
            int j = 0;
            while(true) {
              if (all((tint_loop_idx_1 == uint2(4294967295u)))) {
                break;
              }
              if ((j < 2)) {
              } else {
                break;
              }
              bool tint_continue_1 = false;
              switch(j) {
                case 0:
                {
                  tint_continue_1 = true;
                  break;
                }
                default:
                {
                  break;
                }
              }
              if (tint_continue_1) {
                {
                  uint const tint_low_inc_1 = (tint_loop_idx_1.x + 1u);
                  tint_loop_idx_1.x = tint_low_inc_1;
                  uint const tint_carry_1 = uint((tint_low_inc_1 == 0u));
                  tint_loop_idx_1.y = (tint_loop_idx_1.y + tint_carry_1);
                  j = as_type<int>((as_type<uint>(j) + as_type<uint>(2)));
                }
                continue;
              }
              {
                uint const tint_low_inc_1 = (tint_loop_idx_1.x + 1u);
                tint_loop_idx_1.x = tint_low_inc_1;
                uint const tint_carry_1 = uint((tint_low_inc_1 == 0u));
                tint_loop_idx_1.y = (tint_loop_idx_1.y + tint_carry_1);
                j = as_type<int>((as_type<uint>(j) + as_type<uint>(2)));
              }
              continue;
            }
          }
          tint_continue = true;
          break;
        }
        default:
        {
          break;
        }
      }
      if (tint_continue) {
        {
          uint const tint_low_inc = (tint_loop_idx.x + 1u);
          tint_loop_idx.x = tint_low_inc;
          uint const tint_carry = uint((tint_low_inc == 0u));
          tint_loop_idx.y = (tint_loop_idx.y + tint_carry);
          i = as_type<int>((as_type<uint>(i) + as_type<uint>(2)));
        }
        continue;
      }
      {
        uint const tint_low_inc = (tint_loop_idx.x + 1u);
        tint_loop_idx.x = tint_low_inc;
        uint const tint_carry = uint((tint_low_inc == 0u));
        tint_loop_idx.y = (tint_loop_idx.y + tint_carry);
        i = as_type<int>((as_type<uint>(i) + as_type<uint>(2)));
      }
      continue;
    }
  }
}
