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_356 = 0;
  int x_58_phi = 0;
  bool x_86_phi = false;
  int x_353_phi = 0;
  int x_356_phi = 0;
  int x_358_phi = 0;
  const BST tint_symbol_2 = {9, -1, -1};
  tree[0] = tint_symbol_2;
  switch(0u) {
    default: {
      x_58_phi = 0;
      while (true) {
        int x_84 = 0;
        int x_76 = 0;
        int x_59 = 0;
        int x_59_phi = 0;
        const int x_58 = x_58_phi;
        x_86_phi = false;
        if ((x_58 <= 1)) {
        } else {
          break;
        }
        const int x_65 = tree[x_58].data;
        if ((5 <= x_65)) {
          const int x_78_save = x_58;
          const int x_79 = tree[x_78_save].leftIndex;
          if ((x_79 == -1)) {
            tree[x_78_save].leftIndex = 1;
            const BST tint_symbol_3 = {5, -1, -1};
            tree[1] = tint_symbol_3;
            x_86_phi = true;
            break;
          } else {
            x_84 = tree[x_78_save].leftIndex;
            x_59_phi = x_84;
            {
              x_59 = x_59_phi;
              x_58_phi = x_59;
            }
            continue;
          }
          return;
        } else {
          const int x_70_save = x_58;
          const int x_71 = tree[x_70_save].rightIndex;
          if ((x_71 == -1)) {
            tree[x_70_save].rightIndex = 1;
            const BST tint_symbol_4 = {5, -1, -1};
            tree[1] = tint_symbol_4;
            x_86_phi = true;
            break;
          } else {
            x_76 = tree[x_70_save].rightIndex;
            x_59_phi = x_76;
            {
              x_59 = x_59_phi;
              x_58_phi = x_59;
            }
            continue;
          }
          return;
        }
        return;
        {
          x_59 = x_59_phi;
          x_58_phi = x_59;
        }
      }
      if (x_86_phi) {
        break;
      }
      break;
    }
  }
  int x_91_phi = 0;
  bool x_119_phi = false;
  switch(0u) {
    default: {
      x_91_phi = 0;
      while (true) {
        int x_117 = 0;
        int x_109 = 0;
        int x_92 = 0;
        int x_92_phi = 0;
        const int x_91 = x_91_phi;
        x_119_phi = false;
        if ((x_91 <= 2)) {
        } else {
          break;
        }
        const int x_98 = tree[x_91].data;
        if ((12 <= x_98)) {
          const int x_111_save = x_91;
          const int x_112 = tree[x_111_save].leftIndex;
          if ((x_112 == -1)) {
            tree[x_111_save].leftIndex = 2;
            const BST tint_symbol_5 = {12, -1, -1};
            tree[2] = tint_symbol_5;
            x_119_phi = true;
            break;
          } else {
            x_117 = tree[x_111_save].leftIndex;
            x_92_phi = x_117;
            {
              x_92 = x_92_phi;
              x_91_phi = x_92;
            }
            continue;
          }
          return;
        } else {
          const int x_103_save = x_91;
          const int x_104 = tree[x_103_save].rightIndex;
          if ((x_104 == -1)) {
            tree[x_103_save].rightIndex = 2;
            const BST tint_symbol_6 = {12, -1, -1};
            tree[2] = tint_symbol_6;
            x_119_phi = true;
            break;
          } else {
            x_109 = tree[x_103_save].rightIndex;
            x_92_phi = x_109;
            {
              x_92 = x_92_phi;
              x_91_phi = x_92;
            }
            continue;
          }
          return;
        }
        return;
        {
          x_92 = x_92_phi;
          x_91_phi = x_92;
        }
      }
      if (x_119_phi) {
        break;
      }
      break;
    }
  }
  int x_124_phi = 0;
  bool x_152_phi = false;
  switch(0u) {
    default: {
      x_124_phi = 0;
      while (true) {
        int x_150 = 0;
        int x_142 = 0;
        int x_125 = 0;
        int x_125_phi = 0;
        const int x_124 = x_124_phi;
        x_152_phi = false;
        if ((x_124 <= 3)) {
        } else {
          break;
        }
        const int x_131 = tree[x_124].data;
        if ((15 <= x_131)) {
          const int x_144_save = x_124;
          const int x_145 = tree[x_144_save].leftIndex;
          if ((x_145 == -1)) {
            tree[x_144_save].leftIndex = 3;
            const BST tint_symbol_7 = {15, -1, -1};
            tree[3] = tint_symbol_7;
            x_152_phi = true;
            break;
          } else {
            x_150 = tree[x_144_save].leftIndex;
            x_125_phi = x_150;
            {
              x_125 = x_125_phi;
              x_124_phi = x_125;
            }
            continue;
          }
          return;
        } else {
          const int x_136_save = x_124;
          const int x_137 = tree[x_136_save].rightIndex;
          if ((x_137 == -1)) {
            tree[x_136_save].rightIndex = 3;
            const BST tint_symbol_8 = {15, -1, -1};
            tree[3] = tint_symbol_8;
            x_152_phi = true;
            break;
          } else {
            x_142 = tree[x_136_save].rightIndex;
            x_125_phi = x_142;
            {
              x_125 = x_125_phi;
              x_124_phi = x_125;
            }
            continue;
          }
          return;
        }
        return;
        {
          x_125 = x_125_phi;
          x_124_phi = x_125;
        }
      }
      if (x_152_phi) {
        break;
      }
      break;
    }
  }
  int x_157_phi = 0;
  bool x_185_phi = false;
  switch(0u) {
    default: {
      x_157_phi = 0;
      while (true) {
        int x_183 = 0;
        int x_175 = 0;
        int x_158 = 0;
        int x_158_phi = 0;
        const int x_157 = x_157_phi;
        x_185_phi = false;
        if ((x_157 <= 4)) {
        } else {
          break;
        }
        const int x_164 = tree[x_157].data;
        if ((7 <= x_164)) {
          const int x_177_save = x_157;
          const int x_178 = tree[x_177_save].leftIndex;
          if ((x_178 == -1)) {
            tree[x_177_save].leftIndex = 4;
            const BST tint_symbol_9 = {7, -1, -1};
            tree[4] = tint_symbol_9;
            x_185_phi = true;
            break;
          } else {
            x_183 = tree[x_177_save].leftIndex;
            x_158_phi = x_183;
            {
              x_158 = x_158_phi;
              x_157_phi = x_158;
            }
            continue;
          }
          return;
        } else {
          const int x_169_save = x_157;
          const int x_170 = tree[x_169_save].rightIndex;
          if ((x_170 == -1)) {
            tree[x_169_save].rightIndex = 4;
            const BST tint_symbol_10 = {7, -1, -1};
            tree[4] = tint_symbol_10;
            x_185_phi = true;
            break;
          } else {
            x_175 = tree[x_169_save].rightIndex;
            x_158_phi = x_175;
            {
              x_158 = x_158_phi;
              x_157_phi = x_158;
            }
            continue;
          }
          return;
        }
        return;
        {
          x_158 = x_158_phi;
          x_157_phi = x_158;
        }
      }
      if (x_185_phi) {
        break;
      }
      break;
    }
  }
  int x_190_phi = 0;
  bool x_218_phi = false;
  switch(0u) {
    default: {
      x_190_phi = 0;
      while (true) {
        int x_216 = 0;
        int x_208 = 0;
        int x_191 = 0;
        int x_191_phi = 0;
        const int x_190 = x_190_phi;
        x_218_phi = false;
        if ((x_190 <= 5)) {
        } else {
          break;
        }
        const int x_197 = tree[x_190].data;
        if ((8 <= x_197)) {
          const int x_210_save = x_190;
          const int x_211 = tree[x_210_save].leftIndex;
          if ((x_211 == -1)) {
            tree[x_210_save].leftIndex = 5;
            const BST tint_symbol_11 = {8, -1, -1};
            tree[5] = tint_symbol_11;
            x_218_phi = true;
            break;
          } else {
            x_216 = tree[x_210_save].leftIndex;
            x_191_phi = x_216;
            {
              x_191 = x_191_phi;
              x_190_phi = x_191;
            }
            continue;
          }
          return;
        } else {
          const int x_202_save = x_190;
          const int x_203 = tree[x_202_save].rightIndex;
          if ((x_203 == -1)) {
            tree[x_202_save].rightIndex = 5;
            const BST tint_symbol_12 = {8, -1, -1};
            tree[5] = tint_symbol_12;
            x_218_phi = true;
            break;
          } else {
            x_208 = tree[x_202_save].rightIndex;
            x_191_phi = x_208;
            {
              x_191 = x_191_phi;
              x_190_phi = x_191;
            }
            continue;
          }
          return;
        }
        return;
        {
          x_191 = x_191_phi;
          x_190_phi = x_191;
        }
      }
      if (x_218_phi) {
        break;
      }
      break;
    }
  }
  int x_223_phi = 0;
  bool x_251_phi = false;
  switch(0u) {
    default: {
      x_223_phi = 0;
      while (true) {
        int x_249 = 0;
        int x_241 = 0;
        int x_224 = 0;
        int x_224_phi = 0;
        const int x_223 = x_223_phi;
        x_251_phi = false;
        if ((x_223 <= 6)) {
        } else {
          break;
        }
        const int x_230 = tree[x_223].data;
        if ((2 <= x_230)) {
          const int x_243_save = x_223;
          const int x_244 = tree[x_243_save].leftIndex;
          if ((x_244 == -1)) {
            tree[x_243_save].leftIndex = 6;
            const BST tint_symbol_13 = {2, -1, -1};
            tree[6] = tint_symbol_13;
            x_251_phi = true;
            break;
          } else {
            x_249 = tree[x_243_save].leftIndex;
            x_224_phi = x_249;
            {
              x_224 = x_224_phi;
              x_223_phi = x_224;
            }
            continue;
          }
          return;
        } else {
          const int x_235_save = x_223;
          const int x_236 = tree[x_235_save].rightIndex;
          if ((x_236 == -1)) {
            tree[x_235_save].rightIndex = 6;
            const BST tint_symbol_14 = {2, -1, -1};
            tree[6] = tint_symbol_14;
            x_251_phi = true;
            break;
          } else {
            x_241 = tree[x_235_save].rightIndex;
            x_224_phi = x_241;
            {
              x_224 = x_224_phi;
              x_223_phi = x_224;
            }
            continue;
          }
          return;
        }
        return;
        {
          x_224 = x_224_phi;
          x_223_phi = x_224;
        }
      }
      if (x_251_phi) {
        break;
      }
      break;
    }
  }
  int x_256_phi = 0;
  bool x_284_phi = false;
  switch(0u) {
    default: {
      x_256_phi = 0;
      while (true) {
        int x_282 = 0;
        int x_274 = 0;
        int x_257 = 0;
        int x_257_phi = 0;
        const int x_256 = x_256_phi;
        x_284_phi = false;
        if ((x_256 <= 7)) {
        } else {
          break;
        }
        const int x_263 = tree[x_256].data;
        if ((6 <= x_263)) {
          const int x_276_save = x_256;
          const int x_277 = tree[x_276_save].leftIndex;
          if ((x_277 == -1)) {
            tree[x_276_save].leftIndex = 7;
            const BST tint_symbol_15 = {6, -1, -1};
            tree[7] = tint_symbol_15;
            x_284_phi = true;
            break;
          } else {
            x_282 = tree[x_276_save].leftIndex;
            x_257_phi = x_282;
            {
              x_257 = x_257_phi;
              x_256_phi = x_257;
            }
            continue;
          }
          return;
        } else {
          const int x_268_save = x_256;
          const int x_269 = tree[x_268_save].rightIndex;
          if ((x_269 == -1)) {
            tree[x_268_save].rightIndex = 7;
            const BST tint_symbol_16 = {6, -1, -1};
            tree[7] = tint_symbol_16;
            x_284_phi = true;
            break;
          } else {
            x_274 = tree[x_268_save].rightIndex;
            x_257_phi = x_274;
            {
              x_257 = x_257_phi;
              x_256_phi = x_257;
            }
            continue;
          }
          return;
        }
        return;
        {
          x_257 = x_257_phi;
          x_256_phi = x_257;
        }
      }
      if (x_284_phi) {
        break;
      }
      break;
    }
  }
  int x_289_phi = 0;
  bool x_317_phi = false;
  switch(0u) {
    default: {
      x_289_phi = 0;
      while (true) {
        int x_315 = 0;
        int x_307 = 0;
        int x_290 = 0;
        int x_290_phi = 0;
        const int x_289 = x_289_phi;
        x_317_phi = false;
        if ((x_289 <= 8)) {
        } else {
          break;
        }
        const int x_296 = tree[x_289].data;
        if ((17 <= x_296)) {
          const int x_309_save = x_289;
          const int x_310 = tree[x_309_save].leftIndex;
          if ((x_310 == -1)) {
            tree[x_309_save].leftIndex = 8;
            const BST tint_symbol_17 = {17, -1, -1};
            tree[8] = tint_symbol_17;
            x_317_phi = true;
            break;
          } else {
            x_315 = tree[x_309_save].leftIndex;
            x_290_phi = x_315;
            {
              x_290 = x_290_phi;
              x_289_phi = x_290;
            }
            continue;
          }
          return;
        } else {
          const int x_301_save = x_289;
          const int x_302 = tree[x_301_save].rightIndex;
          if ((x_302 == -1)) {
            tree[x_301_save].rightIndex = 8;
            const BST tint_symbol_18 = {17, -1, -1};
            tree[8] = tint_symbol_18;
            x_317_phi = true;
            break;
          } else {
            x_307 = tree[x_301_save].rightIndex;
            x_290_phi = x_307;
            {
              x_290 = x_290_phi;
              x_289_phi = x_290;
            }
            continue;
          }
          return;
        }
        return;
        {
          x_290 = x_290_phi;
          x_289_phi = x_290;
        }
      }
      if (x_317_phi) {
        break;
      }
      break;
    }
  }
  int x_322_phi = 0;
  bool x_350_phi = false;
  switch(0u) {
    default: {
      x_322_phi = 0;
      while (true) {
        int x_348 = 0;
        int x_340 = 0;
        int x_323 = 0;
        int x_323_phi = 0;
        const int x_322 = x_322_phi;
        x_350_phi = false;
        if ((x_322 <= 9)) {
        } else {
          break;
        }
        const int x_329 = tree[x_322].data;
        if ((13 <= x_329)) {
          const int x_342_save = x_322;
          const int x_343 = tree[x_342_save].leftIndex;
          if ((x_343 == -1)) {
            tree[x_342_save].leftIndex = 9;
            const BST tint_symbol_19 = {13, -1, -1};
            tree[9] = tint_symbol_19;
            x_350_phi = true;
            break;
          } else {
            x_348 = tree[x_342_save].leftIndex;
            x_323_phi = x_348;
            {
              x_323 = x_323_phi;
              x_322_phi = x_323;
            }
            continue;
          }
          return;
        } else {
          const int x_334_save = x_322;
          const int x_335 = tree[x_334_save].rightIndex;
          if ((x_335 == -1)) {
            tree[x_334_save].rightIndex = 9;
            const BST tint_symbol_20 = {13, -1, -1};
            tree[9] = tint_symbol_20;
            x_350_phi = true;
            break;
          } else {
            x_340 = tree[x_334_save].rightIndex;
            x_323_phi = x_340;
            {
              x_323 = x_323_phi;
              x_322_phi = x_323;
            }
            continue;
          }
          return;
        }
        return;
        {
          x_323 = x_323_phi;
          x_322_phi = x_323;
        }
      }
      if (x_350_phi) {
        break;
      }
      break;
    }
  }
  x_353_phi = 0;
  x_356_phi = 0;
  x_358_phi = 0;
  while (true) {
    int x_381 = 0;
    int x_391 = 0;
    int x_396 = 0;
    int x_359 = 0;
    int x_354_phi = 0;
    int x_357_phi = 0;
    const int x_353 = x_353_phi;
    x_356 = x_356_phi;
    const int x_358 = x_358_phi;
    if ((x_358 < 20)) {
    } else {
      break;
    }
    int x_366_phi = 0;
    int x_381_phi = 0;
    bool x_382_phi = false;
    switch(0u) {
      default: {
        x_366_phi = 0;
        while (true) {
          const int x_366 = x_366_phi;
          x_381_phi = x_353;
          x_382_phi = false;
          if ((x_366 != -1)) {
          } else {
            break;
          }
          const BST x_373 = tree[x_366];
          const int x_374 = x_373.data;
          const int x_375 = x_373.leftIndex;
          const int x_376 = x_373.rightIndex;
          if ((x_374 == x_358)) {
            x_381_phi = x_358;
            x_382_phi = true;
            break;
          }
          {
            x_366_phi = ((x_358 > x_374) ? x_376 : x_375);
          }
        }
        x_381 = x_381_phi;
        const bool x_382 = x_382_phi;
        x_354_phi = x_381;
        if (x_382) {
          break;
        }
        x_354_phi = -1;
        break;
      }
    }
    int x_354 = 0;
    int x_390 = 0;
    int x_395 = 0;
    int x_391_phi = 0;
    int x_396_phi = 0;
    x_354 = x_354_phi;
    switch(x_358) {
      case 2:
      case 5:
      case 6:
      case 7:
      case 8:
      case 9:
      case 12:
      case 13:
      case 15:
      case 17: {
        x_391_phi = x_356;
        if ((x_354 == asint(x_358))) {
          x_390 = asint((x_356 + asint(1)));
          x_391_phi = x_390;
        }
        x_391 = x_391_phi;
        x_357_phi = x_391;
        break;
      }
      default: {
        x_396_phi = x_356;
        if ((x_354 == asint(-1))) {
          x_395 = asint((x_356 + asint(1)));
          x_396_phi = x_395;
        }
        x_396 = x_396_phi;
        x_357_phi = x_396;
        break;
      }
    }
    const int x_357 = x_357_phi;
    {
      x_359 = (x_358 + 1);
      x_353_phi = x_354;
      x_356_phi = x_357;
      x_358_phi = x_359;
    }
  }
  if ((x_356 == 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;
};

tint_symbol main() {
  main_1();
  const main_out tint_symbol_1 = {x_GLF_color};
  const tint_symbol tint_symbol_21 = {tint_symbol_1.x_GLF_color_1};
  return tint_symbol_21;
}
