struct BST {
  data : i32;
  leftIndex : i32;
  rightIndex : i32;
};

[[block]]
struct buf0 {
  injectionSwitch : vec2<f32>;
};

struct Obj {
  odd_numbers : array<f32, 10>;
  even_numbers : array<f32, 10>;
};

var<private> tree_1 : array<BST, 10>;

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

var<private> gl_FragCoord : vec4<f32>;

var<private> x_GLF_color : vec4<f32>;

fn makeTreeNode_struct_BST_i1_i1_i11_i1_(tree : ptr<function, BST>, data : ptr<function, i32>) {
  let x_74 : i32 = *(data);
  (*(tree)).data = x_74;
  (*(tree)).leftIndex = -1;
  (*(tree)).rightIndex = -1;
  return;
}

fn insert_i1_i1_(treeIndex : ptr<function, i32>, data_1 : ptr<function, i32>) {
  var baseIndex : i32;
  var param : BST;
  var param_1 : i32;
  var param_2 : BST;
  var param_3 : i32;
  var GLF_live8i : i32;
  var GLF_live8A : array<f32, 50>;
  baseIndex = 0;
  loop {
    let x_75 : i32 = baseIndex;
    let x_76 : i32 = *(treeIndex);
    if ((x_75 <= x_76)) {
    } else {
      break;
    }
    let x_77 : i32 = *(data_1);
    let x_78 : i32 = baseIndex;
    let x_79 : i32 = tree_1[x_78].data;
    if ((x_77 <= x_79)) {
      let x_80 : i32 = baseIndex;
      let x_81 : i32 = tree_1[x_80].leftIndex;
      if ((x_81 == -1)) {
        let x_82 : i32 = baseIndex;
        let x_83 : i32 = *(treeIndex);
        tree_1[x_82].leftIndex = x_83;
        let x_84 : i32 = *(treeIndex);
        let x_350 : BST = tree_1[x_84];
        param = x_350;
        let x_85 : i32 = *(data_1);
        param_1 = x_85;
        makeTreeNode_struct_BST_i1_i1_i11_i1_(&(param), &(param_1));
        let x_352 : BST = param;
        tree_1[x_84] = x_352;
        return;
      } else {
        let x_86 : i32 = baseIndex;
        let x_87 : i32 = tree_1[x_86].leftIndex;
        baseIndex = x_87;
        continue;
      }
    } else {
      let x_88 : i32 = baseIndex;
      let x_89 : i32 = tree_1[x_88].rightIndex;
      if ((x_89 == -1)) {
        let x_90 : i32 = baseIndex;
        let x_91 : i32 = *(treeIndex);
        tree_1[x_90].rightIndex = x_91;
        let x_92 : i32 = *(treeIndex);
        let x_362 : BST = tree_1[x_92];
        param_2 = x_362;
        let x_93 : i32 = *(data_1);
        param_3 = x_93;
        makeTreeNode_struct_BST_i1_i1_i11_i1_(&(param_2), &(param_3));
        let x_364 : BST = param_2;
        tree_1[x_92] = x_364;
        return;
      } else {
        GLF_live8i = 1;
        let x_94 : i32 = GLF_live8i;
        let x_95 : i32 = GLF_live8i;
        let x_96 : i32 = GLF_live8i;
        let x_369 : i32 = select(0, x_96, ((x_94 >= 0) && (x_95 < 50)));
        let x_371 : f32 = GLF_live8A[0];
        let x_373 : f32 = GLF_live8A[x_369];
        GLF_live8A[x_369] = (x_373 + x_371);
        loop {
          let x_97 : i32 = baseIndex;
          let x_98 : i32 = tree_1[x_97].rightIndex;
          baseIndex = x_98;

          continuing {
            let x_382 : f32 = x_27.injectionSwitch.x;
            let x_384 : f32 = x_27.injectionSwitch.y;
            if ((x_382 > x_384)) {
            } else {
              break;
            }
          }
        }
        continue;
      }
    }
  }
  return;
}

fn search_i1_(target : ptr<function, i32>) -> i32 {
  var index : i32;
  var currentNode : BST;
  var x_387 : i32;
  index = 0;
  loop {
    let x_99 : i32 = index;
    if ((x_99 != -1)) {
    } else {
      break;
    }
    let x_100 : i32 = index;
    let x_395 : BST = tree_1[x_100];
    currentNode = x_395;
    let x_101 : i32 = currentNode.data;
    let x_102 : i32 = *(target);
    if ((x_101 == x_102)) {
      let x_103 : i32 = *(target);
      return x_103;
    }
    let x_104 : i32 = *(target);
    let x_105 : i32 = currentNode.data;
    if ((x_104 > x_105)) {
      let x_106 : i32 = currentNode.rightIndex;
      x_387 = x_106;
    } else {
      let x_107 : i32 = currentNode.leftIndex;
      x_387 = x_107;
    }
    let x_108 : i32 = x_387;
    index = x_108;
  }
  return -1;
}

fn makeFrame_f1_(v : ptr<function, f32>) -> f32 {
  var param_5 : i32;
  var param_6 : i32;
  var param_7 : i32;
  let x_418 : f32 = *(v);
  *(v) = (x_418 * 6.5);
  let x_420 : f32 = *(v);
  if ((x_420 < 1.5)) {
    param_5 = 100;
    let x_110 : i32 = search_i1_(&(param_5));
    return f32(x_110);
  }
  let x_425 : f32 = *(v);
  if ((x_425 < 4.0)) {
    return 0.0;
  }
  let x_429 : f32 = *(v);
  param_6 = 6;
  let x_111 : i32 = search_i1_(&(param_6));
  if ((x_429 < f32(x_111))) {
    return 1.0;
  }
  param_7 = 30;
  let x_112 : i32 = search_i1_(&(param_7));
  return (10.0 + f32(x_112));
}

fn hueColor_f1_(angle : ptr<function, f32>) -> vec3<f32> {
  var nodeData : f32;
  var param_4 : i32;
  param_4 = 15;
  let x_109 : i32 = search_i1_(&(param_4));
  nodeData = f32(x_109);
  let x_409 : f32 = *(angle);
  let x_410 : f32 = nodeData;
  return ((vec3<f32>(30.0, 30.0, 30.0) + (vec3<f32>(1.0, 5.0, x_410) * x_409)) / vec3<f32>(50.0, 50.0, 50.0));
}

fn main_1() {
  var treeIndex_1 : i32;
  var param_8 : BST;
  var param_9 : i32;
  var param_10 : i32;
  var param_11 : i32;
  var GLF_live1_looplimiter2 : i32;
  var GLF_live1i : i32;
  var param_12 : i32;
  var param_13 : i32;
  var param_14 : i32;
  var param_15 : i32;
  var param_16 : i32;
  var param_17 : i32;
  var param_18 : i32;
  var param_19 : i32;
  var param_20 : i32;
  var param_21 : i32;
  var param_22 : i32;
  var param_23 : i32;
  var GLF_live4_looplimiter3 : i32;
  var GLF_live4i : i32;
  var GLF_live4index : i32;
  var GLF_live4obj : Obj;
  var param_24 : i32;
  var param_25 : i32;
  var param_26 : i32;
  var param_27 : i32;
  var z : vec2<f32>;
  var x : f32;
  var param_28 : f32;
  var y : f32;
  var param_29 : f32;
  var sum : i32;
  var target_1 : i32;
  var result : i32;
  var param_30 : i32;
  var a : f32;
  var x_235 : vec3<f32>;
  var param_31 : f32;
  treeIndex_1 = 0;
  let x_237 : BST = tree_1[0];
  param_8 = x_237;
  param_9 = 9;
  makeTreeNode_struct_BST_i1_i1_i11_i1_(&(param_8), &(param_9));
  let x_239 : BST = param_8;
  tree_1[0] = x_239;
  let x_113 : i32 = treeIndex_1;
  treeIndex_1 = (x_113 + 1);
  let x_115 : i32 = treeIndex_1;
  param_10 = x_115;
  param_11 = 5;
  insert_i1_i1_(&(param_10), &(param_11));
  let x_116 : i32 = treeIndex_1;
  treeIndex_1 = (x_116 + 1);
  GLF_live1_looplimiter2 = 0;
  GLF_live1i = 0;
  loop {
    if (true) {
    } else {
      break;
    }
    let x_118 : i32 = GLF_live1_looplimiter2;
    if ((x_118 >= 7)) {
      break;
    }
    let x_119 : i32 = GLF_live1_looplimiter2;
    GLF_live1_looplimiter2 = (x_119 + 1);

    continuing {
      let x_121 : i32 = GLF_live1i;
      GLF_live1i = (x_121 + 1);
    }
  }
  let x_123 : i32 = treeIndex_1;
  param_12 = x_123;
  param_13 = 12;
  insert_i1_i1_(&(param_12), &(param_13));
  let x_124 : i32 = treeIndex_1;
  treeIndex_1 = (x_124 + 1);
  let x_126 : i32 = treeIndex_1;
  param_14 = x_126;
  param_15 = 15;
  insert_i1_i1_(&(param_14), &(param_15));
  let x_127 : i32 = treeIndex_1;
  treeIndex_1 = (x_127 + 1);
  let x_129 : i32 = treeIndex_1;
  param_16 = x_129;
  param_17 = 7;
  insert_i1_i1_(&(param_16), &(param_17));
  let x_130 : i32 = treeIndex_1;
  treeIndex_1 = (x_130 + 1);
  let x_132 : i32 = treeIndex_1;
  param_18 = x_132;
  param_19 = 8;
  insert_i1_i1_(&(param_18), &(param_19));
  let x_133 : i32 = treeIndex_1;
  treeIndex_1 = (x_133 + 1);
  let x_135 : i32 = treeIndex_1;
  param_20 = x_135;
  param_21 = 2;
  insert_i1_i1_(&(param_20), &(param_21));
  let x_136 : i32 = treeIndex_1;
  treeIndex_1 = (x_136 + 1);
  let x_138 : i32 = treeIndex_1;
  param_22 = x_138;
  param_23 = 6;
  insert_i1_i1_(&(param_22), &(param_23));
  let x_139 : i32 = treeIndex_1;
  treeIndex_1 = (x_139 + 1);
  GLF_live4_looplimiter3 = 0;
  GLF_live4i = 0;
  loop {
    if (true) {
    } else {
      break;
    }
    let x_141 : i32 = GLF_live4_looplimiter3;
    if ((x_141 >= 3)) {
      break;
    }
    let x_142 : i32 = GLF_live4_looplimiter3;
    GLF_live4_looplimiter3 = (x_142 + 1);
    GLF_live4index = 1;
    let x_144 : i32 = GLF_live4index;
    let x_145 : i32 = GLF_live4index;
    let x_146 : i32 = GLF_live4index;
    let x_269 : f32 = GLF_live4obj.even_numbers[1];
    GLF_live4obj.even_numbers[select(0, x_146, ((x_144 >= 0) && (x_145 < 10)))] = x_269;
    let x_147 : i32 = GLF_live4i;
    let x_148 : i32 = GLF_live4i;
    let x_149 : i32 = GLF_live4i;
    GLF_live4obj.even_numbers[select(0, x_149, ((x_147 >= 0) && (x_148 < 10)))] = 1.0;

    continuing {
      let x_150 : i32 = GLF_live4i;
      GLF_live4i = (x_150 + 1);
    }
  }
  let x_152 : i32 = treeIndex_1;
  param_24 = x_152;
  param_25 = 17;
  insert_i1_i1_(&(param_24), &(param_25));
  let x_278 : f32 = x_27.injectionSwitch.x;
  let x_280 : f32 = x_27.injectionSwitch.y;
  if ((x_278 > x_280)) {
    return;
  }
  let x_153 : i32 = treeIndex_1;
  treeIndex_1 = (x_153 + 1);
  let x_155 : i32 = treeIndex_1;
  param_26 = x_155;
  param_27 = 13;
  insert_i1_i1_(&(param_26), &(param_27));
  let x_285 : vec4<f32> = gl_FragCoord;
  z = (vec2<f32>(x_285.y, x_285.x) / vec2<f32>(256.0, 256.0));
  let x_289 : f32 = z.x;
  param_28 = x_289;
  let x_290 : f32 = makeFrame_f1_(&(param_28));
  x = x_290;
  let x_292 : f32 = z.y;
  param_29 = x_292;
  let x_293 : f32 = makeFrame_f1_(&(param_29));
  y = x_293;
  sum = -100;
  target_1 = 0;
  loop {
    let x_156 : i32 = target_1;
    if ((x_156 < 20)) {
    } else {
      break;
    }
    let x_157 : i32 = target_1;
    param_30 = x_157;
    let x_158 : i32 = search_i1_(&(param_30));
    result = x_158;
    let x_159 : i32 = result;
    if ((x_159 > 0)) {
    } else {
      let x_160 : i32 = result;
      switch(x_160) {
        case 0: {
          return;
        }
        case -1: {
          let x_161 : i32 = sum;
          sum = (x_161 + 1);
        }
        default: {
        }
      }
    }

    continuing {
      let x_163 : i32 = target_1;
      target_1 = (x_163 + 1);
    }
  }
  let x_307 : f32 = x;
  let x_308 : f32 = y;
  let x_165 : i32 = sum;
  a = (x_307 + (x_308 * f32(x_165)));
  let x_313 : f32 = x_27.injectionSwitch.x;
  let x_315 : f32 = x_27.injectionSwitch.y;
  if ((x_313 < x_315)) {
    x_235 = vec3<f32>(1.0, 0.0, 0.0);
  } else {
    let x_320 : f32 = a;
    param_31 = x_320;
    let x_321 : vec3<f32> = hueColor_f1_(&(param_31));
    x_235 = x_321;
  }
  let x_322 : vec3<f32> = x_235;
  x_GLF_color = vec4<f32>(x_322.x, x_322.y, x_322.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);
}
