struct buf0 {
  resolution : vec2<f32>;
};

@group(0) @binding(0) var<uniform> x_13 : buf0;

var<private> gl_FragCoord : vec4<f32>;

var<private> x_GLF_color : vec4<f32>;

fn compute_value_f1_f1_(limit : ptr<function, f32>, thirty_two : ptr<function, f32>) -> f32 {
  var result : f32;
  var i : i32;
  result = -0.5;
  i = 1;
  loop {
    let x_136 : i32 = i;
    if ((x_136 < 800)) {
    } else {
      break;
    }
    let x_139 : i32 = i;
    if (((x_139 % 32) == 0)) {
      let x_145 : f32 = result;
      result = (x_145 + 0.400000006);
    } else {
      let x_147 : i32 = i;
      let x_149 : f32 = *(thirty_two);
      if (((f32(x_147) % round(x_149)) <= 0.01)) {
        let x_155 : f32 = result;
        result = (x_155 + 100.0);
      }
    }
    let x_157 : i32 = i;
    let x_159 : f32 = *(limit);
    if ((f32(x_157) >= x_159)) {
      let x_163 : f32 = result;
      return x_163;
    }

    continuing {
      let x_164 : i32 = i;
      i = (x_164 + 1);
    }
  }
  let x_166 : f32 = result;
  return x_166;
}

fn main_1() {
  var c : vec3<f32>;
  var thirty_two_1 : f32;
  var param : f32;
  var param_1 : f32;
  var param_2 : f32;
  var param_3 : f32;
  var i_1 : i32;
  c = vec3<f32>(7.0, 8.0, 9.0);
  let x_63 : f32 = x_13.resolution.x;
  thirty_two_1 = round((x_63 / 8.0));
  let x_67 : f32 = gl_FragCoord.x;
  param = x_67;
  let x_68 : f32 = thirty_two_1;
  param_1 = x_68;
  let x_69 : f32 = compute_value_f1_f1_(&(param), &(param_1));
  c.x = x_69;
  let x_72 : f32 = gl_FragCoord.y;
  param_2 = x_72;
  let x_73 : f32 = thirty_two_1;
  param_3 = x_73;
  let x_74 : f32 = compute_value_f1_f1_(&(param_2), &(param_3));
  c.y = x_74;
  let x_76 : vec3<f32> = c;
  let x_79 : vec3<f32> = c;
  let x_87 : mat4x2<f32> = mat4x2<f32>(vec2<f32>(x_79.x, x_79.y), vec2<f32>(x_79.z, 1.0), vec2<f32>(1.0, 0.0), vec2<f32>(1.0, 0.0));
  c.z = (((x_76 * mat3x3<f32>(vec3<f32>(1.0, 0.0, 0.0), vec3<f32>(0.0, 1.0, 0.0), vec3<f32>(0.0, 0.0, 1.0)))).x + vec3<f32>(x_87[0u].x, x_87[0u].y, x_87[1u].x).y);
  i_1 = 0;
  loop {
    let x_99 : i32 = i_1;
    if ((x_99 < 3)) {
    } else {
      break;
    }
    let x_102 : i32 = i_1;
    let x_104 : f32 = c[x_102];
    if ((x_104 >= 1.0)) {
      let x_108 : i32 = i_1;
      let x_109 : i32 = i_1;
      let x_111 : f32 = c[x_109];
      let x_112 : i32 = i_1;
      let x_114 : f32 = c[x_112];
      c[x_108] = (x_111 * x_114);
      let x_118 : f32 = gl_FragCoord.y;
      if ((x_118 < 0.0)) {
        break;
      }
    }

    continuing {
      let x_122 : i32 = i_1;
      i_1 = (x_122 + 1);
    }
  }
  let x_124 : vec3<f32> = c;
  let x_126 : vec3<f32> = normalize(abs(x_124));
  x_GLF_color = vec4<f32>(x_126.x, x_126.y, x_126.z, 1.0);
  return;
}

struct main_out {
  @location(0)
  x_GLF_color_1 : vec4<f32>;
};

@stage(fragment)
fn main(@builtin(position) gl_FragCoord_param : vec4<f32>) -> main_out {
  gl_FragCoord = gl_FragCoord_param;
  main_1();
  return main_out(x_GLF_color);
}
