struct BST {
  int data;
  int leftIndex;
  int rightIndex;
};

static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);

void main_1() {
  BST tree[10] = (BST[10])0;
  int x_360 = 0;
  int x_62_phi = 0;
  bool x_90_phi = false;
  int x_357_phi = 0;
  int x_360_phi = 0;
  int x_362_phi = 0;
  const BST tint_symbol_1 = {9, -1, -1};
  tree[0] = tint_symbol_1;
  switch(0u) {
    default: {
      x_62_phi = 0;
      while (true) {
        int x_88 = 0;
        int x_80 = 0;
        int x_63 = 0;
        int x_63_phi = 0;
        const int x_62 = x_62_phi;
        x_90_phi = false;
        if ((x_62 <= 1)) {
        } else {
          break;
        }
        const int x_69 = tree[x_62].data;
        if ((5 <= x_69)) {
          const int x_82_save = x_62;
          const int x_83 = tree[x_82_save].leftIndex;
          if ((x_83 == -1)) {
            tree[x_82_save].leftIndex = 1;
            const BST tint_symbol_2 = {5, -1, -1};
            tree[1] = tint_symbol_2;
            x_90_phi = true;
            break;
          } else {
            x_88 = tree[x_82_save].leftIndex;
            x_63_phi = x_88;
            {
              x_63 = x_63_phi;
              x_62_phi = x_63;
            }
            continue;
          }
          return;
        } else {
          const int x_74_save = x_62;
          const int x_75 = tree[x_74_save].rightIndex;
          if ((x_75 == -1)) {
            tree[x_74_save].rightIndex = 1;
            const BST tint_symbol_3 = {5, -1, -1};
            tree[1] = tint_symbol_3;
            x_90_phi = true;
            break;
          } else {
            x_80 = tree[x_74_save].rightIndex;
            x_63_phi = x_80;
            {
              x_63 = x_63_phi;
              x_62_phi = x_63;
            }
            continue;
          }
          return;
        }
        return;
        {
          x_63 = x_63_phi;
          x_62_phi = x_63;
        }
      }
      if (x_90_phi) {
        break;
      }
      break;
    }
  }
  int x_95_phi = 0;
  bool x_123_phi = false;
  switch(0u) {
    default: {
      x_95_phi = 0;
      while (true) {
        int x_121 = 0;
        int x_113 = 0;
        int x_96 = 0;
        int x_96_phi = 0;
        const int x_95 = x_95_phi;
        x_123_phi = false;
        if ((x_95 <= 2)) {
        } else {
          break;
        }
        const int x_102 = tree[x_95].data;
        if ((12 <= x_102)) {
          const int x_115_save = x_95;
          const int x_116 = tree[x_115_save].leftIndex;
          if ((x_116 == -1)) {
            tree[x_115_save].leftIndex = 2;
            const BST tint_symbol_4 = {12, -1, -1};
            tree[2] = tint_symbol_4;
            x_123_phi = true;
            break;
          } else {
            x_121 = tree[x_115_save].leftIndex;
            x_96_phi = x_121;
            {
              x_96 = x_96_phi;
              x_95_phi = x_96;
            }
            continue;
          }
          return;
        } else {
          const int x_107_save = x_95;
          const int x_108 = tree[x_107_save].rightIndex;
          if ((x_108 == -1)) {
            tree[x_107_save].rightIndex = 2;
            const BST tint_symbol_5 = {12, -1, -1};
            tree[2] = tint_symbol_5;
            x_123_phi = true;
            break;
          } else {
            x_113 = tree[x_107_save].rightIndex;
            x_96_phi = x_113;
            {
              x_96 = x_96_phi;
              x_95_phi = x_96;
            }
            continue;
          }
          return;
        }
        return;
        {
          x_96 = x_96_phi;
          x_95_phi = x_96;
        }
      }
      if (x_123_phi) {
        break;
      }
      break;
    }
  }
  int x_128_phi = 0;
  bool x_156_phi = false;
  switch(0u) {
    default: {
      x_128_phi = 0;
      while (true) {
        int x_154 = 0;
        int x_146 = 0;
        int x_129 = 0;
        int x_129_phi = 0;
        const int x_128 = x_128_phi;
        x_156_phi = false;
        if ((x_128 <= 3)) {
        } else {
          break;
        }
        const int x_135 = tree[x_128].data;
        if ((15 <= x_135)) {
          const int x_148_save = x_128;
          const int x_149 = tree[x_148_save].leftIndex;
          if ((x_149 == -1)) {
            tree[x_148_save].leftIndex = 3;
            const BST tint_symbol_6 = {15, -1, -1};
            tree[3] = tint_symbol_6;
            x_156_phi = true;
            break;
          } else {
            x_154 = tree[x_148_save].leftIndex;
            x_129_phi = x_154;
            {
              x_129 = x_129_phi;
              x_128_phi = x_129;
            }
            continue;
          }
          return;
        } else {
          const int x_140_save = x_128;
          const int x_141 = tree[x_140_save].rightIndex;
          if ((x_141 == -1)) {
            tree[x_140_save].rightIndex = 3;
            const BST tint_symbol_7 = {15, -1, -1};
            tree[3] = tint_symbol_7;
            x_156_phi = true;
            break;
          } else {
            x_146 = tree[x_140_save].rightIndex;
            x_129_phi = x_146;
            {
              x_129 = x_129_phi;
              x_128_phi = x_129;
            }
            continue;
          }
          return;
        }
        return;
        {
          x_129 = x_129_phi;
          x_128_phi = x_129;
        }
      }
      if (x_156_phi) {
        break;
      }
      break;
    }
  }
  int x_161_phi = 0;
  bool x_189_phi = false;
  switch(0u) {
    default: {
      x_161_phi = 0;
      while (true) {
        int x_187 = 0;
        int x_179 = 0;
        int x_162 = 0;
        int x_162_phi = 0;
        const int x_161 = x_161_phi;
        x_189_phi = false;
        if ((x_161 <= 4)) {
        } else {
          break;
        }
        const int x_168 = tree[x_161].data;
        if ((7 <= x_168)) {
          const int x_181_save = x_161;
          const int x_182 = tree[x_181_save].leftIndex;
          if ((x_182 == -1)) {
            tree[x_181_save].leftIndex = 4;
            const BST tint_symbol_8 = {7, -1, -1};
            tree[4] = tint_symbol_8;
            x_189_phi = true;
            break;
          } else {
            x_187 = tree[x_181_save].leftIndex;
            x_162_phi = x_187;
            {
              x_162 = x_162_phi;
              x_161_phi = x_162;
            }
            continue;
          }
          return;
        } else {
          const int x_173_save = x_161;
          const int x_174 = tree[x_173_save].rightIndex;
          if ((x_174 == -1)) {
            tree[x_173_save].rightIndex = 4;
            const BST tint_symbol_9 = {7, -1, -1};
            tree[4] = tint_symbol_9;
            x_189_phi = true;
            break;
          } else {
            x_179 = tree[x_173_save].rightIndex;
            x_162_phi = x_179;
            {
              x_162 = x_162_phi;
              x_161_phi = x_162;
            }
            continue;
          }
          return;
        }
        return;
        {
          x_162 = x_162_phi;
          x_161_phi = x_162;
        }
      }
      if (x_189_phi) {
        break;
      }
      break;
    }
  }
  int x_194_phi = 0;
  bool x_222_phi = false;
  switch(0u) {
    default: {
      x_194_phi = 0;
      while (true) {
        int x_220 = 0;
        int x_212 = 0;
        int x_195 = 0;
        int x_195_phi = 0;
        const int x_194 = x_194_phi;
        x_222_phi = false;
        if ((x_194 <= 5)) {
        } else {
          break;
        }
        const int x_201 = tree[x_194].data;
        if ((8 <= x_201)) {
          const int x_214_save = x_194;
          const int x_215 = tree[x_214_save].leftIndex;
          if ((x_215 == -1)) {
            tree[x_214_save].leftIndex = 5;
            const BST tint_symbol_10 = {8, -1, -1};
            tree[5] = tint_symbol_10;
            x_222_phi = true;
            break;
          } else {
            x_220 = tree[x_214_save].leftIndex;
            x_195_phi = x_220;
            {
              x_195 = x_195_phi;
              x_194_phi = x_195;
            }
            continue;
          }
          return;
        } else {
          const int x_206_save = x_194;
          const int x_207 = tree[x_206_save].rightIndex;
          if ((x_207 == -1)) {
            tree[x_206_save].rightIndex = 5;
            const BST tint_symbol_11 = {8, -1, -1};
            tree[5] = tint_symbol_11;
            x_222_phi = true;
            break;
          } else {
            x_212 = tree[x_206_save].rightIndex;
            x_195_phi = x_212;
            {
              x_195 = x_195_phi;
              x_194_phi = x_195;
            }
            continue;
          }
          return;
        }
        return;
        {
          x_195 = x_195_phi;
          x_194_phi = x_195;
        }
      }
      if (x_222_phi) {
        break;
      }
      break;
    }
  }
  int x_227_phi = 0;
  bool x_255_phi = false;
  switch(0u) {
    default: {
      x_227_phi = 0;
      while (true) {
        int x_253 = 0;
        int x_245 = 0;
        int x_228 = 0;
        int x_228_phi = 0;
        const int x_227 = x_227_phi;
        x_255_phi = false;
        if ((x_227 <= 6)) {
        } else {
          break;
        }
        const int x_234 = tree[x_227].data;
        if ((2 <= x_234)) {
          const int x_247_save = x_227;
          const int x_248 = tree[x_247_save].leftIndex;
          if ((x_248 == -1)) {
            tree[x_247_save].leftIndex = 6;
            const BST tint_symbol_12 = {2, -1, -1};
            tree[6] = tint_symbol_12;
            x_255_phi = true;
            break;
          } else {
            x_253 = tree[x_247_save].leftIndex;
            x_228_phi = x_253;
            {
              x_228 = x_228_phi;
              x_227_phi = x_228;
            }
            continue;
          }
          return;
        } else {
          const int x_239_save = x_227;
          const int x_240 = tree[x_239_save].rightIndex;
          if ((x_240 == -1)) {
            tree[x_239_save].rightIndex = 6;
            const BST tint_symbol_13 = {2, -1, -1};
            tree[6] = tint_symbol_13;
            x_255_phi = true;
            break;
          } else {
            x_245 = tree[x_239_save].rightIndex;
            x_228_phi = x_245;
            {
              x_228 = x_228_phi;
              x_227_phi = x_228;
            }
            continue;
          }
          return;
        }
        return;
        {
          x_228 = x_228_phi;
          x_227_phi = x_228;
        }
      }
      if (x_255_phi) {
        break;
      }
      break;
    }
  }
  int x_260_phi = 0;
  bool x_288_phi = false;
  switch(0u) {
    default: {
      x_260_phi = 0;
      while (true) {
        int x_286 = 0;
        int x_278 = 0;
        int x_261 = 0;
        int x_261_phi = 0;
        const int x_260 = x_260_phi;
        x_288_phi = false;
        if ((x_260 <= 7)) {
        } else {
          break;
        }
        const int x_267 = tree[x_260].data;
        if ((6 <= x_267)) {
          const int x_280_save = x_260;
          const int x_281 = tree[x_280_save].leftIndex;
          if ((x_281 == -1)) {
            tree[x_280_save].leftIndex = 7;
            const BST tint_symbol_14 = {6, -1, -1};
            tree[7] = tint_symbol_14;
            x_288_phi = true;
            break;
          } else {
            x_286 = tree[x_280_save].leftIndex;
            x_261_phi = x_286;
            {
              x_261 = x_261_phi;
              x_260_phi = x_261;
            }
            continue;
          }
          return;
        } else {
          const int x_272_save = x_260;
          const int x_273 = tree[x_272_save].rightIndex;
          if ((x_273 == -1)) {
            tree[x_272_save].rightIndex = 7;
            const BST tint_symbol_15 = {6, -1, -1};
            tree[7] = tint_symbol_15;
            x_288_phi = true;
            break;
          } else {
            x_278 = tree[x_272_save].rightIndex;
            x_261_phi = x_278;
            {
              x_261 = x_261_phi;
              x_260_phi = x_261;
            }
            continue;
          }
          return;
        }
        return;
        {
          x_261 = x_261_phi;
          x_260_phi = x_261;
        }
      }
      if (x_288_phi) {
        break;
      }
      break;
    }
  }
  int x_293_phi = 0;
  bool x_321_phi = false;
  switch(0u) {
    default: {
      x_293_phi = 0;
      while (true) {
        int x_319 = 0;
        int x_311 = 0;
        int x_294 = 0;
        int x_294_phi = 0;
        const int x_293 = x_293_phi;
        x_321_phi = false;
        if ((x_293 <= 8)) {
        } else {
          break;
        }
        const int x_300 = tree[x_293].data;
        if ((17 <= x_300)) {
          const int x_313_save = x_293;
          const int x_314 = tree[x_313_save].leftIndex;
          if ((x_314 == -1)) {
            tree[x_313_save].leftIndex = 8;
            const BST tint_symbol_16 = {17, -1, -1};
            tree[8] = tint_symbol_16;
            x_321_phi = true;
            break;
          } else {
            x_319 = tree[x_313_save].leftIndex;
            x_294_phi = x_319;
            {
              x_294 = x_294_phi;
              x_293_phi = x_294;
            }
            continue;
          }
          return;
        } else {
          const int x_305_save = x_293;
          const int x_306 = tree[x_305_save].rightIndex;
          if ((x_306 == -1)) {
            tree[x_305_save].rightIndex = 8;
            const BST tint_symbol_17 = {17, -1, -1};
            tree[8] = tint_symbol_17;
            x_321_phi = true;
            break;
          } else {
            x_311 = tree[x_305_save].rightIndex;
            x_294_phi = x_311;
            {
              x_294 = x_294_phi;
              x_293_phi = x_294;
            }
            continue;
          }
          return;
        }
        return;
        {
          x_294 = x_294_phi;
          x_293_phi = x_294;
        }
      }
      if (x_321_phi) {
        break;
      }
      break;
    }
  }
  int x_326_phi = 0;
  bool x_354_phi = false;
  switch(0u) {
    default: {
      x_326_phi = 0;
      while (true) {
        int x_352 = 0;
        int x_344 = 0;
        int x_327 = 0;
        int x_327_phi = 0;
        const int x_326 = x_326_phi;
        x_354_phi = false;
        if ((x_326 <= 9)) {
        } else {
          break;
        }
        const int x_333 = tree[x_326].data;
        if ((13 <= x_333)) {
          const int x_346_save = x_326;
          const int x_347 = tree[x_346_save].leftIndex;
          if ((x_347 == -1)) {
            tree[x_346_save].leftIndex = 9;
            const BST tint_symbol_18 = {13, -1, -1};
            tree[9] = tint_symbol_18;
            x_354_phi = true;
            break;
          } else {
            x_352 = tree[x_346_save].leftIndex;
            x_327_phi = x_352;
            {
              x_327 = x_327_phi;
              x_326_phi = x_327;
            }
            continue;
          }
          return;
        } else {
          const int x_338_save = x_326;
          const int x_339 = tree[x_338_save].rightIndex;
          if ((x_339 == -1)) {
            tree[x_338_save].rightIndex = 9;
            const BST tint_symbol_19 = {13, -1, -1};
            tree[9] = tint_symbol_19;
            x_354_phi = true;
            break;
          } else {
            x_344 = tree[x_338_save].rightIndex;
            x_327_phi = x_344;
            {
              x_327 = x_327_phi;
              x_326_phi = x_327;
            }
            continue;
          }
          return;
        }
        return;
        {
          x_327 = x_327_phi;
          x_326_phi = x_327;
        }
      }
      if (x_354_phi) {
        break;
      }
      break;
    }
  }
  x_357_phi = 0;
  x_360_phi = 0;
  x_362_phi = 0;
  while (true) {
    int x_392 = 0;
    int x_402 = 0;
    int x_407 = 0;
    int x_363 = 0;
    int x_358_phi = 0;
    int x_361_phi = 0;
    const int x_357 = x_357_phi;
    x_360 = x_360_phi;
    const int x_362 = x_362_phi;
    const int x_365 = (6 - 15);
    if ((x_362 < 20)) {
    } else {
      break;
    }
    int x_374_phi = 0;
    int x_392_phi = 0;
    bool x_393_phi = false;
    switch(0u) {
      default: {
        x_374_phi = 0;
        while (true) {
          const int x_374 = x_374_phi;
          x_392_phi = x_357;
          x_393_phi = false;
          if ((x_374 != -1)) {
          } else {
            break;
          }
          const BST x_381 = tree[x_374];
          const int x_382 = x_381.data;
          const int x_383 = x_381.leftIndex;
          const int x_385 = x_381.rightIndex;
          if ((x_382 == x_362)) {
            x_392_phi = x_362;
            x_393_phi = true;
            break;
          }
          const float x_389 = x_GLF_color[((3u <= 3u) ? 3u : 3u)];
          {
            x_374_phi = (!((x_362 <= x_382)) ? x_385 : x_383);
          }
        }
        x_392 = x_392_phi;
        const bool x_393 = x_393_phi;
        x_358_phi = x_392;
        if (x_393) {
          break;
        }
        x_358_phi = -1;
        break;
      }
    }
    int x_358 = 0;
    int x_401 = 0;
    int x_406 = 0;
    int x_402_phi = 0;
    int x_407_phi = 0;
    x_358 = x_358_phi;
    switch(x_362) {
      case 2:
      case 5:
      case 6:
      case 7:
      case 8:
      case 9:
      case 12:
      case 13:
      case 15:
      case 17: {
        x_402_phi = x_360;
        if ((x_358 == asint(x_362))) {
          x_401 = asint((x_360 + asint(1)));
          x_402_phi = x_401;
        }
        x_402 = x_402_phi;
        x_361_phi = x_402;
        break;
      }
      default: {
        x_407_phi = x_360;
        if ((x_358 == asint(-1))) {
          x_406 = asint((x_360 + asint(1)));
          x_407_phi = x_406;
        }
        x_407 = x_407_phi;
        x_361_phi = x_407;
        break;
      }
    }
    const int x_361 = x_361_phi;
    {
      x_363 = (x_362 + 1);
      x_357_phi = x_358;
      x_360_phi = x_361;
      x_362_phi = x_363;
    }
  }
  if ((x_360 == asint(20))) {
    x_GLF_color = float4(1.0f, 0.0f, 0.0f, 1.0f);
  } else {
    x_GLF_color = float4(0.0f, 0.0f, 1.0f, 1.0f);
  }
  return;
}

struct main_out {
  float4 x_GLF_color_1;
};
struct tint_symbol {
  float4 x_GLF_color_1 : SV_Target0;
};

main_out main_inner() {
  main_1();
  const main_out tint_symbol_20 = {x_GLF_color};
  return tint_symbol_20;
}

tint_symbol main() {
  const main_out inner_result = main_inner();
  tint_symbol wrapper_result = (tint_symbol)0;
  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
  return wrapper_result;
}
