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

var<private> x_GLF_color : vec4<f32>;

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

fn main_1() {
  var GLF_dead6index : i32;
  var GLF_dead6currentNode : i32;
  var donor_replacementGLF_dead6tree : array<i32, 1>;
  x_GLF_color = vec4<f32>(1.0, 0.0, 0.0, 1.0);
  GLF_dead6index = 0;
  let x_34 : f32 = x_6.injectionSwitch.y;
  if ((x_34 < 0.0)) {
    loop {
      if (true) {
      } else {
        break;
      }
      let x_9 : i32 = GLF_dead6index;
      let x_10 : i32 = donor_replacementGLF_dead6tree[x_9];
      GLF_dead6currentNode = x_10;
      let x_11 : i32 = GLF_dead6currentNode;
      GLF_dead6index = x_11;
    }
  }
  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);
}
