monoeg_g_utf8_strup (const gchar * str, gssize len)
{
  gchar * D.7304;

  D.7304 = utf8_case_conv (str, len, 1);
  return D.7304;
}


utf8_case_conv (const gchar * str, gssize len, gboolean upper)
{
  unsigned int i.0;
  unsigned int D.7307;
  gunichar * D.7308;
  gunichar iftmp.1;
  unsigned int D.7312;
  long int ulen.2;
  gchar * D.7315;
  gunichar * ustr;
  glong i;
  glong ulen;
  gchar * utf8;

  try
    {
      ustr = monoeg_g_utf8_to_ucs4_fast (str, len, &ulen);
      i = 0;
      goto <D.7188>;
      <D.7187>:
      i.0 = (unsigned int) i;
      D.7307 = i.0 * 4;
      D.7308 = ustr + D.7307;
      if (upper != 0) goto <D.7310>; else goto <D.7311>;
      <D.7310>:
      i.0 = (unsigned int) i;
      D.7307 = i.0 * 4;
      D.7308 = ustr + D.7307;
      D.7312 = *D.7308;
      iftmp.1 = monoeg_g_unichar_toupper (D.7312);
      goto <D.7313>;
      <D.7311>:
      i.0 = (unsigned int) i;
      D.7307 = i.0 * 4;
      D.7308 = ustr + D.7307;
      D.7312 = *D.7308;
      iftmp.1 = monoeg_g_unichar_tolower (D.7312);
      <D.7313>:
      *D.7308 = iftmp.1;
      i = i + 1;
      <D.7188>:
      ulen.2 = ulen;
      if (i < ulen.2) goto <D.7187>; else goto <D.7189>;
      <D.7189>:
      ulen.2 = ulen;
      utf8 = monoeg_g_ucs4_to_utf8 (ustr, ulen.2, 0B, 0B, 0B);
      monoeg_g_free (ustr);
      D.7315 = utf8;
      return D.7315;
    }
  finally
    {
      ulen = {CLOBBER};
    }
}


monoeg_g_utf8_strdown (const gchar * str, gssize len)
{
  gchar * D.7318;

  D.7318 = utf8_case_conv (str, len, 0);
  return D.7318;
}


monoeg_g_utf8_validate (const gchar * str, gssize max_len, const gchar * * end)
{
  gboolean D.7322;
  unsigned char D.7325;
  int D.7326;
  unsigned char D.7327;
  int D.7328;
  int D.7334;
  unsigned int D.7335;
  int D.7336;
  unsigned int n.3;
  unsigned int D.7342;
  guchar * inptr;
  gboolean valid;
  guint length;
  guint min;
  gssize n;

  inptr = str;
  valid = 1;
  n = 0;
  if (max_len == 0) goto <D.7320>; else goto <D.7321>;
  <D.7320>:
  D.7322 = 0;
  return D.7322;
  <D.7321>:
  if (max_len < 0) goto <D.7323>; else goto <D.7324>;
  <D.7323>:
  goto <D.7228>;
  <D.7227>:
  D.7325 = *inptr;
  D.7326 = (int) D.7325;
  D.7327 = g_utf8_jump_table[D.7326];
  length = (guint) D.7327;
  D.7328 = utf8_validate (inptr, length);
  if (D.7328 == 0) goto <D.7329>; else goto <D.7330>;
  <D.7329>:
  valid = 0;
  goto <D.7226>;
  <D.7330>:
  inptr = inptr + length;
  <D.7228>:
  D.7325 = *inptr;
  if (D.7325 != 0) goto <D.7227>; else goto <D.7226>;
  <D.7226>:
  goto <D.7331>;
  <D.7324>:
  goto <D.7231>;
  <D.7230>:
  D.7325 = *inptr;
  if (D.7325 == 0) goto <D.7332>; else goto <D.7333>;
  <D.7332>:
  valid = 0;
  goto <D.7229>;
  <D.7333>:
  D.7325 = *inptr;
  D.7326 = (int) D.7325;
  D.7327 = g_utf8_jump_table[D.7326];
  length = (guint) D.7327;
  D.7334 = max_len - n;
  D.7335 = (unsigned int) D.7334;
  min = MIN_EXPR <D.7335, length>;
  D.7336 = utf8_validate (inptr, min);
  if (D.7336 == 0) goto <D.7337>; else goto <D.7338>;
  <D.7337>:
  valid = 0;
  goto <D.7229>;
  <D.7338>:
  if (min < length) goto <D.7339>; else goto <D.7340>;
  <D.7339>:
  valid = 0;
  goto <D.7229>;
  <D.7340>:
  inptr = inptr + length;
  n.3 = (unsigned int) n;
  D.7342 = n.3 + length;
  n = (gssize) D.7342;
  <D.7231>:
  if (n < max_len) goto <D.7230>; else goto <D.7229>;
  <D.7229>:
  <D.7331>:
  if (end != 0B) goto <D.7343>; else goto <D.7344>;
  <D.7343>:
  *end = inptr;
  <D.7344>:
  D.7322 = valid;
  return D.7322;
}


utf8_validate (const unsigned char * inptr, size_t len)
{
  gboolean D.7346;
  signed char c.4;
  unsigned char D.7351;
  const unsigned char * D.7354;
  unsigned char D.7355;
  const unsigned char * D.7360;
  unsigned char D.7361;
  _Bool D.7362;
  _Bool D.7363;
  _Bool D.7364;
  unsigned char D.7373;
  int D.7374;
  const unsigned char * D.7381;
  unsigned char D.7382;
  unsigned char D.7383;
  unsigned char D.7388;
  unsigned char D.7397;
  const unsigned char * ptr;
  unsigned char c;

  ptr = inptr + len;
  switch (len) <default: <D.7204>, case 1: <D.7215>, case 2: <D.7207>, case 3: <D.7206>, case 4: <D.7205>>
  <D.7204>:
  D.7346 = 0;
  return D.7346;
  <D.7205>:
  ptr = ptr + 4294967295;
  c = *ptr;
  c.4 = (signed char) c;
  if (c.4 >= 0) goto <D.7347>; else goto <D.7350>;
  <D.7350>:
  if (c > 191) goto <D.7347>; else goto <D.7348>;
  <D.7347>:
  D.7346 = 0;
  return D.7346;
  <D.7348>:
  D.7351 = c + 66;
  if (D.7351 <= 1) goto <D.7352>; else goto <D.7353>;
  <D.7352>:
  D.7354 = ptr + 4294967295;
  D.7355 = *D.7354;
  if (D.7355 == 191) goto <D.7356>; else goto <D.7357>;
  <D.7356>:
  D.7360 = ptr + 4294967294;
  D.7361 = *D.7360;
  D.7362 = D.7361 == 143;
  D.7360 = ptr + 4294967294;
  D.7361 = *D.7360;
  D.7363 = D.7361 == 159;
  D.7364 = D.7362 | D.7363;
  if (D.7364 != 0) goto <D.7358>; else goto <D.7365>;
  <D.7365>:
  D.7360 = ptr + 4294967294;
  D.7361 = *D.7360;
  if (D.7361 == 175) goto <D.7358>; else goto <D.7366>;
  <D.7366>:
  D.7360 = ptr + 4294967294;
  D.7361 = *D.7360;
  if (D.7361 == 191) goto <D.7358>; else goto <D.7359>;
  <D.7358>:
  D.7346 = 0;
  return D.7346;
  <D.7359>:
  <D.7357>:
  <D.7353>:
  <D.7206>:
  ptr = ptr + 4294967295;
  c = *ptr;
  c.4 = (signed char) c;
  if (c.4 >= 0) goto <D.7367>; else goto <D.7369>;
  <D.7369>:
  if (c > 191) goto <D.7367>; else goto <D.7368>;
  <D.7367>:
  D.7346 = 0;
  return D.7346;
  <D.7368>:
  <D.7207>:
  ptr = ptr + 4294967295;
  c = *ptr;
  c.4 = (signed char) c;
  if (c.4 >= 0) goto <D.7370>; else goto <D.7372>;
  <D.7372>:
  if (c > 191) goto <D.7370>; else goto <D.7371>;
  <D.7370>:
  D.7346 = 0;
  return D.7346;
  <D.7371>:
  D.7373 = *inptr;
  D.7374 = (int) D.7373;
  switch (D.7374) <default: <D.7214>, case 224: <D.7208>, case 237: <D.7210>, case 239: <D.7211>, case 240: <D.7212>, case 244: <D.7213>>
  <D.7208>:
  if (c <= 159) goto <D.7375>; else goto <D.7376>;
  <D.7375>:
  D.7346 = 0;
  return D.7346;
  <D.7376>:
  goto <D.7209>;
  <D.7210>:
  if (c > 159) goto <D.7377>; else goto <D.7378>;
  <D.7377>:
  D.7346 = 0;
  return D.7346;
  <D.7378>:
  goto <D.7209>;
  <D.7211>:
  if (c == 183) goto <D.7379>; else goto <D.7380>;
  <D.7379>:
  D.7381 = ptr + 1;
  D.7382 = *D.7381;
  D.7383 = D.7382 + 112;
  if (D.7383 <= 31) goto <D.7384>; else goto <D.7385>;
  <D.7384>:
  D.7346 = 0;
  return D.7346;
  <D.7385>:
  <D.7380>:
  if (c == 191) goto <D.7386>; else goto <D.7387>;
  <D.7386>:
  D.7381 = ptr + 1;
  D.7382 = *D.7381;
  D.7388 = D.7382 + 66;
  if (D.7388 <= 1) goto <D.7389>; else goto <D.7390>;
  <D.7389>:
  D.7346 = 0;
  return D.7346;
  <D.7390>:
  <D.7387>:
  goto <D.7209>;
  <D.7212>:
  if (c <= 143) goto <D.7391>; else goto <D.7392>;
  <D.7391>:
  D.7346 = 0;
  return D.7346;
  <D.7392>:
  goto <D.7209>;
  <D.7213>:
  if (c > 143) goto <D.7393>; else goto <D.7394>;
  <D.7393>:
  D.7346 = 0;
  return D.7346;
  <D.7394>:
  goto <D.7209>;
  <D.7214>:
  c.4 = (signed char) c;
  if (c.4 >= 0) goto <D.7395>; else goto <D.7396>;
  <D.7395>:
  D.7346 = 0;
  return D.7346;
  <D.7396>:
  goto <D.7209>;
  <D.7209>:
  <D.7215>:
  D.7373 = *inptr;
  D.7397 = D.7373 + 128;
  if (D.7397 <= 65) goto <D.7398>; else goto <D.7399>;
  <D.7398>:
  D.7346 = 0;
  return D.7346;
  <D.7399>:
  D.7373 = *inptr;
  if (D.7373 > 244) goto <D.7400>; else goto <D.7401>;
  <D.7400>:
  D.7346 = 0;
  return D.7346;
  <D.7401>:
  D.7346 = 1;
  return D.7346;
}


monoeg_utf8_get_char_validated (const gchar * str, gssize max_len)
{
  unsigned char D.7403;
  gunichar D.7406;
  int D.7428;
  unsigned int D.7429;
  int D.7430;
  unsigned int n.5;
  int D.7437;
  unsigned int D.7440;
  unsigned char D.7441;
  unsigned int D.7442;
  unsigned char * inptr;
  gunichar u;
  int n;
  int i;

  inptr = str;
  D.7403 = *inptr;
  u = (gunichar) D.7403;
  if (max_len == 0) goto <D.7404>; else goto <D.7405>;
  <D.7404>:
  D.7406 = 4294967294;
  return D.7406;
  <D.7405>:
  if (u <= 127) goto <D.7407>; else goto <D.7408>;
  <D.7407>:
  D.7406 = u;
  return D.7406;
  <D.7408>:
  if (u <= 193) goto <D.7409>; else goto <D.7410>;
  <D.7409>:
  D.7406 = 4294967295;
  return D.7406;
  <D.7410>:
  if (u <= 223) goto <D.7411>; else goto <D.7412>;
  <D.7411>:
  u = u & 31;
  n = 2;
  goto <D.7413>;
  <D.7412>:
  if (u <= 239) goto <D.7414>; else goto <D.7415>;
  <D.7414>:
  u = u & 15;
  n = 3;
  goto <D.7416>;
  <D.7415>:
  if (u <= 247) goto <D.7417>; else goto <D.7418>;
  <D.7417>:
  u = u & 7;
  n = 4;
  goto <D.7419>;
  <D.7418>:
  if (u <= 251) goto <D.7420>; else goto <D.7421>;
  <D.7420>:
  u = u & 3;
  n = 5;
  goto <D.7422>;
  <D.7421>:
  if (u <= 253) goto <D.7423>; else goto <D.7424>;
  <D.7423>:
  u = u & 1;
  n = 6;
  goto <D.7425>;
  <D.7424>:
  D.7406 = 4294967295;
  return D.7406;
  <D.7425>:
  <D.7422>:
  <D.7419>:
  <D.7416>:
  <D.7413>:
  if (max_len > 0) goto <D.7426>; else goto <D.7427>;
  <D.7426>:
  D.7428 = MIN_EXPR <n, max_len>;
  D.7429 = (unsigned int) D.7428;
  D.7430 = utf8_validate (inptr, D.7429);
  if (D.7430 == 0) goto <D.7431>; else goto <D.7432>;
  <D.7431>:
  D.7406 = 4294967295;
  return D.7406;
  <D.7432>:
  if (max_len < n) goto <D.7433>; else goto <D.7434>;
  <D.7433>:
  D.7406 = 4294967294;
  return D.7406;
  <D.7434>:
  goto <D.7435>;
  <D.7427>:
  n.5 = (unsigned int) n;
  D.7437 = utf8_validate (inptr, n.5);
  if (D.7437 == 0) goto <D.7438>; else goto <D.7439>;
  <D.7438>:
  D.7406 = 4294967295;
  return D.7406;
  <D.7439>:
  <D.7435>:
  i = 1;
  goto <D.7241>;
  <D.7240>:
  D.7440 = u << 6;
  inptr = inptr + 1;
  D.7403 = *inptr;
  D.7441 = D.7403 ^ 128;
  D.7442 = (unsigned int) D.7441;
  u = D.7440 | D.7442;
  i = i + 1;
  <D.7241>:
  if (i < n) goto <D.7240>; else goto <D.7242>;
  <D.7242>:
  D.7406 = u;
  return D.7406;
}


monoeg_g_utf8_strlen (const gchar * str, gssize max_len)
{
  glong D.7446;
  unsigned char D.7449;
  int D.7450;
  unsigned char D.7451;
  sizetype D.7452;
  long int D.7454;
  sizetype n.6;
  const guchar * inptr;
  glong clen;
  glong len;
  glong n;

  inptr = str;
  clen = 0;
  len = 0;
  if (max_len == 0) goto <D.7444>; else goto <D.7445>;
  <D.7444>:
  D.7446 = 0;
  return D.7446;
  <D.7445>:
  if (max_len < 0) goto <D.7447>; else goto <D.7448>;
  <D.7447>:
  goto <D.7252>;
  <D.7251>:
  D.7449 = *inptr;
  D.7450 = (int) D.7449;
  D.7451 = g_utf8_jump_table[D.7450];
  D.7452 = (sizetype) D.7451;
  inptr = inptr + D.7452;
  len = len + 1;
  <D.7252>:
  D.7449 = *inptr;
  if (D.7449 != 0) goto <D.7251>; else goto <D.7253>;
  <D.7253>:
  goto <D.7453>;
  <D.7448>:
  goto <D.7256>;
  <D.7255>:
  D.7449 = *inptr;
  D.7450 = (int) D.7449;
  D.7451 = g_utf8_jump_table[D.7450];
  n = (glong) D.7451;
  D.7454 = clen + n;
  if (D.7454 > max_len) goto <D.7254>; else goto <D.7455>;
  <D.7455>:
  n.6 = (sizetype) n;
  inptr = inptr + n.6;
  clen = clen + n;
  len = len + 1;
  <D.7256>:
  if (len < max_len) goto <D.7457>; else goto <D.7254>;
  <D.7457>:
  D.7449 = *inptr;
  if (D.7449 != 0) goto <D.7255>; else goto <D.7254>;
  <D.7254>:
  <D.7453>:
  D.7446 = len;
  return D.7446;
}


monoeg_g_utf8_get_char (const gchar * src)
{
  unsigned char D.7459;
  gunichar D.7462;
  unsigned int D.7475;
  unsigned char D.7476;
  unsigned int D.7477;
  unsigned char * inptr;
  gunichar u;
  int n;
  int i;

  inptr = src;
  D.7459 = *inptr;
  u = (gunichar) D.7459;
  if (u <= 127) goto <D.7460>; else goto <D.7461>;
  <D.7460>:
  D.7462 = u;
  return D.7462;
  <D.7461>:
  if (u <= 223) goto <D.7463>; else goto <D.7464>;
  <D.7463>:
  u = u & 31;
  n = 2;
  goto <D.7465>;
  <D.7464>:
  if (u <= 239) goto <D.7466>; else goto <D.7467>;
  <D.7466>:
  u = u & 15;
  n = 3;
  goto <D.7468>;
  <D.7467>:
  if (u <= 247) goto <D.7469>; else goto <D.7470>;
  <D.7469>:
  u = u & 7;
  n = 4;
  goto <D.7471>;
  <D.7470>:
  if (u <= 251) goto <D.7472>; else goto <D.7473>;
  <D.7472>:
  u = u & 3;
  n = 5;
  goto <D.7474>;
  <D.7473>:
  u = u & 1;
  n = 6;
  <D.7474>:
  <D.7471>:
  <D.7468>:
  <D.7465>:
  i = 1;
  goto <D.7265>;
  <D.7264>:
  D.7475 = u << 6;
  inptr = inptr + 1;
  D.7459 = *inptr;
  D.7476 = D.7459 ^ 128;
  D.7477 = (unsigned int) D.7476;
  u = D.7475 | D.7477;
  i = i + 1;
  <D.7265>:
  if (i < n) goto <D.7264>; else goto <D.7266>;
  <D.7266>:
  D.7462 = u;
  return D.7462;
}


monoeg_utf8_find_prev_char (const gchar * str, const gchar * p)
{
  gchar * D.7481;

  goto <D.7272>;
  <D.7271>:
  p = p + 4294967295;
  if (1 != 0) goto <D.7479>; else goto <D.7480>;
  <D.7479>:
  D.7481 = p;
  return D.7481;
  <D.7480>:
  <D.7272>:
  if (p > str) goto <D.7271>; else goto <D.7273>;
  <D.7273>:
  D.7481 = 0B;
  return D.7481;
}


monoeg_utf8_prev_char (const gchar * str)
{
  gchar * D.7483;
  const gchar * p;

  p = str;
  p = p + 4294967295;
  D.7483 = p;
  return D.7483;
}


monoeg_g_utf8_offset_to_pointer (const gchar * str, glong offset)
{
  char D.7487;
  int D.7488;
  unsigned char D.7489;
  sizetype D.7490;
  sizetype offset.7;
  gchar * D.7495;
  const gchar * p;

  p = str;
  if (offset > 0) goto <D.7485>; else goto <D.7486>;
  <D.7485>:
  <D.7283>:
  D.7487 = *p;
  D.7488 = (int) D.7487;
  D.7489 = g_utf8_jump_table[D.7488];
  D.7490 = (sizetype) D.7489;
  p = p + D.7490;
  offset = offset + -1;
  if (offset > 0) goto <D.7283>; else goto <D.7284>;
  <D.7284>:
  goto <D.7491>;
  <D.7486>:
  if (offset < 0) goto <D.7492>; else goto <D.7493>;
  <D.7492>:
  {
    const gchar * jump;

    jump = str;
    <D.7289>:
    offset.7 = (sizetype) offset;
    jump = jump + offset.7;
    goto <D.7286>;
    jump = jump + 4294967295;
    <D.7286>:
    p = jump;
    <D.7287>:
    D.7487 = *p;
    D.7488 = (int) D.7487;
    D.7489 = g_utf8_jump_table[D.7488];
    D.7490 = (sizetype) D.7489;
    p = p + D.7490;
    offset = offset + 1;
    if (p < jump) goto <D.7287>; else goto <D.7288>;
    <D.7288>:
    if (offset < 0) goto <D.7289>; else goto <D.7290>;
    <D.7290>:
  }
  <D.7493>:
  <D.7491>:
  D.7495 = p;
  return D.7495;
}


monoeg_g_utf8_pointer_to_offset (const gchar * str, const gchar * pos)
{
  glong D.7499;
  char D.7503;
  int D.7504;
  unsigned char D.7505;
  sizetype D.7506;
  const gchar * inptr;
  const gchar * inend;
  glong offset;
  glong sign;

  offset = 0;
  sign = 1;
  if (pos == str) goto <D.7497>; else goto <D.7498>;
  <D.7497>:
  D.7499 = 0;
  return D.7499;
  <D.7498>:
  if (str < pos) goto <D.7500>; else goto <D.7501>;
  <D.7500>:
  inptr = str;
  inend = pos;
  goto <D.7502>;
  <D.7501>:
  inptr = pos;
  inend = str;
  sign = -1;
  <D.7502>:
  <D.7299>:
  D.7503 = *inptr;
  D.7504 = (int) D.7503;
  D.7505 = g_utf8_jump_table[D.7504];
  D.7506 = (sizetype) D.7505;
  inptr = inptr + D.7506;
  offset = offset + 1;
  if (inptr < inend) goto <D.7299>; else goto <D.7300>;
  <D.7300>:
  D.7499 = offset * sign;
  return D.7499;
}


