struct buf0 {
  one : i32,
}

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

var<private> x_GLF_color : vec4<f32>;

fn main_1() {
  var a : i32;
  var i0 : i32;
  var i1 : i32;
  var i2 : i32;
  var i3 : i32;
  var i4 : i32;
  var i5 : i32;
  var i6 : i32;
  var i7 : i32;
  var i8_1 : i32;
  var i9 : i32;
  a = 0;
  i0 = 0;
  loop {
    let x_40 : i32 = i0;
    let x_42 : i32 = x_7.one;
    if ((x_40 < x_42)) {
    } else {
      break;
    }
    i1 = 0;
    loop {
      let x_49 : i32 = i1;
      let x_51 : i32 = x_7.one;
      if ((x_49 < x_51)) {
      } else {
        break;
      }
      i2 = 0;
      loop {
        let x_58 : i32 = i2;
        let x_60 : i32 = x_7.one;
        if ((x_58 < x_60)) {
        } else {
          break;
        }
        i3 = 0;
        loop {
          let x_67 : i32 = i3;
          let x_69 : i32 = x_7.one;
          if ((x_67 < (x_69 + 2))) {
          } else {
            break;
          }
          i4 = 0;
          loop {
            let x_77 : i32 = i4;
            let x_79 : i32 = x_7.one;
            if ((x_77 < x_79)) {
            } else {
              break;
            }
            i5 = 0;
            loop {
              let x_86 : i32 = i5;
              let x_88 : i32 = x_7.one;
              if ((x_86 < x_88)) {
              } else {
                break;
              }
              loop {
                let x_96 : i32 = x_7.one;
                if ((x_96 > 0)) {
                } else {
                  break;
                }
                i6 = 0;
                loop {
                  let x_103 : i32 = i6;
                  let x_105 : i32 = x_7.one;
                  if ((x_103 < x_105)) {
                  } else {
                    break;
                  }
                  i7 = 0;
                  loop {
                    let x_112 : i32 = i7;
                    let x_114 : i32 = x_7.one;
                    if ((x_112 < x_114)) {
                    } else {
                      break;
                    }
                    i8_1 = 0;
                    loop {
                      let x_121 : i32 = i8_1;
                      let x_123 : i32 = x_7.one;
                      if ((x_121 < x_123)) {
                      } else {
                        break;
                      }
                      i9 = 0;
                      loop {
                        let x_130 : i32 = i9;
                        let x_132 : i32 = x_7.one;
                        if ((x_130 < x_132)) {
                        } else {
                          break;
                        }
                        let x_135 : i32 = a;
                        a = (x_135 + 1);

                        continuing {
                          let x_137 : i32 = i9;
                          i9 = (x_137 + 1);
                        }
                      }

                      continuing {
                        let x_139 : i32 = i8_1;
                        i8_1 = (x_139 + 1);
                      }
                    }

                    continuing {
                      let x_141 : i32 = i7;
                      i7 = (x_141 + 1);
                    }
                  }

                  continuing {
                    let x_143 : i32 = i6;
                    i6 = (x_143 + 1);
                  }
                }
                break;
              }

              continuing {
                let x_145 : i32 = i5;
                i5 = (x_145 + 1);
              }
            }

            continuing {
              let x_147 : i32 = i4;
              i4 = (x_147 + 1);
            }
          }

          continuing {
            let x_149 : i32 = i3;
            i3 = (x_149 + 1);
          }
        }

        continuing {
          let x_151 : i32 = i2;
          i2 = (x_151 + 1);
        }
      }

      continuing {
        let x_153 : i32 = i1;
        i1 = (x_153 + 1);
      }
    }

    continuing {
      let x_155 : i32 = i0;
      i0 = (x_155 + 1);
    }
  }
  let x_157 : i32 = a;
  if ((x_157 == 3)) {
    x_GLF_color = vec4<f32>(1.0, 0.0, 0.0, 1.0);
  } else {
    x_GLF_color = vec4<f32>(0.0, 0.0, 0.0, 0.0);
  }
  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);
}
