type Arr = [[stride(16)]] array<f32, 3>;

[[block]]
struct buf0 {
  x_GLF_uniform_float_values : Arr;
};

type Arr_1 = [[stride(16)]] array<i32, 4>;

[[block]]
struct buf1 {
  x_GLF_uniform_int_values : Arr_1;
};

var<private> x_GLF_global_loop_count : i32;

[[group(0), binding(0)]] var<uniform> x_7 : buf0;

[[group(0), binding(1)]] var<uniform> x_10 : buf1;

var<private> x_GLF_color : vec4<f32>;

fn main_1() {
  var f : f32;
  var i : i32;
  var i_1 : i32;
  var i_2 : i32;
  var i_3 : i32;
  var i_4 : i32;
  var i_5 : i32;
  var i_6 : i32;
  var i_7 : i32;
  var i_8 : i32;
  var i_9 : i32;
  var i_10 : i32;
  var i_11 : i32;
  var i_12 : i32;
  var i_13 : i32;
  var i_14 : i32;
  var sum : f32;
  var r : i32;
  x_GLF_global_loop_count = 0;
  let x_53 : f32 = x_7.x_GLF_uniform_float_values[1];
  f = x_53;
  let x_55 : i32 = x_10.x_GLF_uniform_int_values[1];
  i = x_55;
  loop {
    let x_60 : i32 = i;
    let x_62 : i32 = x_10.x_GLF_uniform_int_values[0];
    if ((x_60 < x_62)) {
    } else {
      break;
    }
    let x_66 : i32 = x_10.x_GLF_uniform_int_values[1];
    i_1 = x_66;
    loop {
      let x_71 : i32 = i_1;
      let x_73 : i32 = x_10.x_GLF_uniform_int_values[0];
      if ((x_71 < x_73)) {
      } else {
        break;
      }
      let x_77 : i32 = x_10.x_GLF_uniform_int_values[1];
      i_2 = x_77;
      loop {
        let x_82 : i32 = i_2;
        let x_84 : i32 = x_10.x_GLF_uniform_int_values[0];
        if ((x_82 < x_84)) {
        } else {
          break;
        }
        let x_88 : i32 = x_10.x_GLF_uniform_int_values[1];
        i_3 = x_88;
        loop {
          let x_93 : i32 = i_3;
          let x_95 : i32 = x_10.x_GLF_uniform_int_values[0];
          if ((x_93 < x_95)) {
          } else {
            break;
          }
          let x_99 : i32 = x_10.x_GLF_uniform_int_values[1];
          i_4 = x_99;
          loop {
            let x_104 : i32 = i_4;
            let x_106 : i32 = x_10.x_GLF_uniform_int_values[0];
            if ((x_104 < x_106)) {
            } else {
              break;
            }
            let x_110 : i32 = x_10.x_GLF_uniform_int_values[1];
            i_5 = x_110;
            loop {
              let x_115 : i32 = i_5;
              let x_117 : i32 = x_10.x_GLF_uniform_int_values[0];
              if ((x_115 < x_117)) {
              } else {
                break;
              }
              let x_121 : i32 = x_10.x_GLF_uniform_int_values[1];
              i_6 = x_121;
              loop {
                let x_126 : i32 = i_6;
                let x_128 : i32 = x_10.x_GLF_uniform_int_values[0];
                if ((x_126 < x_128)) {
                } else {
                  break;
                }
                let x_132 : i32 = x_10.x_GLF_uniform_int_values[1];
                i_7 = x_132;
                loop {
                  let x_137 : i32 = i_7;
                  let x_139 : i32 = x_10.x_GLF_uniform_int_values[0];
                  if ((x_137 < x_139)) {
                  } else {
                    break;
                  }
                  let x_143 : i32 = x_10.x_GLF_uniform_int_values[1];
                  i_8 = x_143;
                  loop {
                    let x_148 : i32 = i_8;
                    let x_150 : i32 = x_10.x_GLF_uniform_int_values[0];
                    if ((x_148 < x_150)) {
                    } else {
                      break;
                    }
                    let x_154 : i32 = x_10.x_GLF_uniform_int_values[1];
                    i_9 = x_154;
                    loop {
                      let x_159 : i32 = i_9;
                      let x_161 : i32 = x_10.x_GLF_uniform_int_values[0];
                      if ((x_159 < x_161)) {
                      } else {
                        break;
                      }
                      let x_165 : i32 = x_10.x_GLF_uniform_int_values[1];
                      i_10 = x_165;
                      loop {
                        let x_170 : i32 = i_10;
                        let x_172 : i32 = x_10.x_GLF_uniform_int_values[0];
                        if ((x_170 < x_172)) {
                        } else {
                          break;
                        }
                        let x_176 : i32 = x_10.x_GLF_uniform_int_values[1];
                        i_11 = x_176;
                        loop {
                          let x_181 : i32 = i_11;
                          let x_183 : i32 = x_10.x_GLF_uniform_int_values[2];
                          if ((x_181 < x_183)) {
                          } else {
                            break;
                          }
                          let x_187 : i32 = x_10.x_GLF_uniform_int_values[1];
                          i_12 = x_187;
                          loop {
                            let x_192 : i32 = i_12;
                            let x_194 : i32 = x_10.x_GLF_uniform_int_values[0];
                            if ((x_192 < x_194)) {
                            } else {
                              break;
                            }
                            let x_198 : i32 = x_10.x_GLF_uniform_int_values[1];
                            i_13 = x_198;
                            loop {
                              let x_203 : i32 = i_13;
                              let x_205 : i32 = x_10.x_GLF_uniform_int_values[0];
                              if ((x_203 < x_205)) {
                              } else {
                                break;
                              }
                              let x_209 : i32 = x_10.x_GLF_uniform_int_values[1];
                              i_14 = x_209;
                              loop {
                                let x_214 : i32 = i_14;
                                let x_216 : i32 = x_10.x_GLF_uniform_int_values[2];
                                if ((x_214 < x_216)) {
                                } else {
                                  break;
                                }
                                loop {
                                  let x_223 : i32 = x_GLF_global_loop_count;
                                  x_GLF_global_loop_count = (x_223 + 1);

                                  continuing {
                                    let x_225 : i32 = x_GLF_global_loop_count;
                                    let x_227 : i32 = x_10.x_GLF_uniform_int_values[3];
                                    if ((x_225 < (100 - x_227))) {
                                    } else {
                                      break;
                                    }
                                  }
                                }
                                let x_231 : f32 = x_7.x_GLF_uniform_float_values[0];
                                let x_232 : f32 = f;
                                f = (x_232 + x_231);

                                continuing {
                                  let x_234 : i32 = i_14;
                                  i_14 = (x_234 + 1);
                                }
                              }

                              continuing {
                                let x_236 : i32 = i_13;
                                i_13 = (x_236 + 1);
                              }
                            }

                            continuing {
                              let x_238 : i32 = i_12;
                              i_12 = (x_238 + 1);
                            }
                          }

                          continuing {
                            let x_240 : i32 = i_11;
                            i_11 = (x_240 + 1);
                          }
                        }

                        continuing {
                          let x_242 : i32 = i_10;
                          i_10 = (x_242 + 1);
                        }
                      }

                      continuing {
                        let x_244 : i32 = i_9;
                        i_9 = (x_244 + 1);
                      }
                    }

                    continuing {
                      let x_246 : i32 = i_8;
                      i_8 = (x_246 + 1);
                    }
                  }

                  continuing {
                    let x_248 : i32 = i_7;
                    i_7 = (x_248 + 1);
                  }
                }

                continuing {
                  let x_250 : i32 = i_6;
                  i_6 = (x_250 + 1);
                }
              }

              continuing {
                let x_252 : i32 = i_5;
                i_5 = (x_252 + 1);
              }
            }

            continuing {
              let x_254 : i32 = i_4;
              i_4 = (x_254 + 1);
            }
          }

          continuing {
            let x_256 : i32 = i_3;
            i_3 = (x_256 + 1);
          }
        }

        continuing {
          let x_258 : i32 = i_2;
          i_2 = (x_258 + 1);
        }
      }

      continuing {
        let x_260 : i32 = i_1;
        i_1 = (x_260 + 1);
      }
    }

    continuing {
      let x_262 : i32 = i;
      i = (x_262 + 1);
    }
  }
  let x_265 : f32 = x_7.x_GLF_uniform_float_values[1];
  sum = x_265;
  let x_267 : i32 = x_10.x_GLF_uniform_int_values[1];
  r = x_267;
  loop {
    let x_272 : i32 = x_GLF_global_loop_count;
    if ((x_272 < 100)) {
    } else {
      break;
    }
    let x_275 : i32 = x_GLF_global_loop_count;
    x_GLF_global_loop_count = (x_275 + 1);
    let x_277 : f32 = f;
    let x_278 : f32 = sum;
    sum = (x_278 + x_277);

    continuing {
      let x_280 : i32 = r;
      r = (x_280 + 1);
    }
  }
  let x_282 : f32 = sum;
  let x_284 : f32 = x_7.x_GLF_uniform_float_values[2];
  if ((x_282 == x_284)) {
    let x_290 : i32 = x_10.x_GLF_uniform_int_values[0];
    let x_293 : i32 = x_10.x_GLF_uniform_int_values[1];
    let x_296 : i32 = x_10.x_GLF_uniform_int_values[1];
    let x_299 : i32 = x_10.x_GLF_uniform_int_values[0];
    x_GLF_color = vec4<f32>(f32(x_290), f32(x_293), f32(x_296), f32(x_299));
  } else {
    let x_303 : i32 = x_10.x_GLF_uniform_int_values[1];
    let x_304 : f32 = f32(x_303);
    x_GLF_color = vec4<f32>(x_304, x_304, x_304, x_304);
  }
  return;
}

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

[[stage(fragment)]]
fn main() -> main_out {
  main_1();
  return main_out(x_GLF_color);
}
