SKIP: FAILED

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;
  0u;
  do {
    x_62_phi = 0;
    [loop] 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;
        }
      } 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;
        }
      }
      {
        x_63 = x_63_phi;
        x_62_phi = x_63;
      }
    }
    if (x_90_phi) {
      break;
    }
  } while (false);
  int x_95_phi = 0;
  bool x_123_phi = false;
  0u;
  do {
    x_95_phi = 0;
    [loop] 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;
        }
      } 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;
        }
      }
      {
        x_96 = x_96_phi;
        x_95_phi = x_96;
      }
    }
    if (x_123_phi) {
      break;
    }
  } while (false);
  int x_128_phi = 0;
  bool x_156_phi = false;
  0u;
  do {
    x_128_phi = 0;
    [loop] 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;
        }
      } 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;
        }
      }
      {
        x_129 = x_129_phi;
        x_128_phi = x_129;
      }
    }
    if (x_156_phi) {
      break;
    }
  } while (false);
  int x_161_phi = 0;
  bool x_189_phi = false;
  0u;
  do {
    x_161_phi = 0;
    [loop] 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;
        }
      } 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;
        }
      }
      {
        x_162 = x_162_phi;
        x_161_phi = x_162;
      }
    }
    if (x_189_phi) {
      break;
    }
  } while (false);
  int x_194_phi = 0;
  bool x_222_phi = false;
  0u;
  do {
    x_194_phi = 0;
    [loop] 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;
        }
      } 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;
        }
      }
      {
        x_195 = x_195_phi;
        x_194_phi = x_195;
      }
    }
    if (x_222_phi) {
      break;
    }
  } while (false);
  int x_227_phi = 0;
  bool x_255_phi = false;
  0u;
  do {
    x_227_phi = 0;
    [loop] 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;
        }
      } 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;
        }
      }
      {
        x_228 = x_228_phi;
        x_227_phi = x_228;
      }
    }
    if (x_255_phi) {
      break;
    }
  } while (false);
  int x_260_phi = 0;
  bool x_288_phi = false;
  0u;
  do {
    x_260_phi = 0;
    [loop] 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;
        }
      } 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;
        }
      }
      {
        x_261 = x_261_phi;
        x_260_phi = x_261;
      }
    }
    if (x_288_phi) {
      break;
    }
  } while (false);
  int x_293_phi = 0;
  bool x_321_phi = false;
  0u;
  do {
    x_293_phi = 0;
    [loop] 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;
        }
      } 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;
        }
      }
      {
        x_294 = x_294_phi;
        x_293_phi = x_294;
      }
    }
    if (x_321_phi) {
      break;
    }
  } while (false);
  int x_326_phi = 0;
  bool x_354_phi = false;
  0u;
  do {
    x_326_phi = 0;
    [loop] 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;
        }
      } 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;
        }
      }
      {
        x_327 = x_327_phi;
        x_326_phi = x_327;
      }
    }
    if (x_354_phi) {
      break;
    }
  } while (false);
  x_357_phi = 0;
  x_360_phi = 0;
  x_362_phi = 0;
  [loop] 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;
    0u;
    do {
      x_374_phi = 0;
      [loop] 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;
    } while (false);
    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;
}
