mono_class_from_typeref (struct MonoImage * image, guint32 type_token)
{
  unsigned int D.21684;
  unsigned int D.21685;
  int D.21686;
  char * D.21689;
  const char * D.21690;
  struct MonoClass * D.21691;
  int D.21692;
  unsigned int D.21693;
  unsigned int D.21694;
  unsigned int D.21695;
  unsigned int D.21696;
  int idx.0;
  const char * iftmp.1;
  char D.21703;
  struct MonoAssembly * D.21707;
  struct MonoAssemblyName * D.21708;
  gchar * D.21711;
  unsigned int D.21712;
  unsigned int D.21717;
  unsigned int D.21718;
  struct MonoClassExt * D.21720;
  int D.18466;
  const char * D.21722;
  struct MonoImage * D.21725;
  unsigned int D.21726;
  unsigned int D.21727;
  struct MonoTableInfo * D.21728;
  int D.21729;
  struct MonoTableInfo * D.21730;
  unsigned int D.21731;
  int D.21732;
  int D.18482;
  unsigned int D.21735;
  int D.21736;
  int D.21739;
  unsigned int D.21740;
  unsigned int D.21741;
  <unnamed-unsigned:24> D.21743;
  unsigned int D.21744;
  gchar * D.21747;
  struct MonoAssembly * * D.21750;
  sizetype D.21752;
  sizetype D.21753;
  struct MonoAssembly * * D.21754;
  struct MonoAssembly * D.21755;
  unsigned int D.21756;
  int D.21757;
  _Bool D.21758;
  long int D.21759;
  long int D.21760;
  int iftmp.2;
  struct MonoImage * D.21769;
  struct MonoError error;
  guint32 cols[3];
  struct MonoTableInfo * t;
  guint32 idx;
  const char * name;
  const char * nspace;
  struct MonoClass * res;
  struct MonoImage * module;

  try
    {
      t = &image->tables[1];
      D.21684 = type_token & 16777215;
      D.21685 = D.21684 + 4294967295;
      D.21686 = mono_verifier_verify_typeref_row (image, D.21685, &error);
      if (D.21686 == 0) goto <D.21687>; else goto <D.21688>;
      <D.21687>:
      D.21689 = image->name;
      D.21690 = mono_error_get_message (&error);
      mono_trace (16, 2, "Failed to resolve typeref from %s due to \'%s\'", D.21689, D.21690);
      D.21691 = 0B;
      return D.21691;
      <D.21688>:
      D.21684 = type_token & 16777215;
      D.21685 = D.21684 + 4294967295;
      D.21692 = (int) D.21685;
      mono_metadata_decode_row (t, D.21692, &cols, 3);
      D.21693 = cols[1];
      name = mono_metadata_string_heap (image, D.21693);
      D.21694 = cols[2];
      nspace = mono_metadata_string_heap (image, D.21694);
      D.21695 = cols[0];
      idx = D.21695 >> 2;
      D.21695 = cols[0];
      D.21696 = D.21695 & 3;
      switch (D.21696) <default: <D.21742>, case 0: <D.18450>, case 1: <D.18452>, case 2: <D.18487>, case 3: <D.18455>>
      <D.18450>:
      if (idx == 0) goto <D.21697>; else goto <D.21698>;
      <D.21697>:
      monoeg_g_log (0B, 4, "null ResolutionScope not yet handled");
      <D.18451>:
      goto <D.18451>;
      <D.21698>:
      D.21691 = mono_class_from_name (image, nspace, name);
      return D.21691;
      <D.18452>:
      idx.0 = (int) idx;
      module = mono_image_load_module (image, idx.0);
      if (module != 0B) goto <D.21700>; else goto <D.21701>;
      <D.21700>:
      D.21691 = mono_class_from_name (module, nspace, name);
      return D.21691;
      <D.21701>:
      {
        char * msg;
        char * human_name;

        D.21703 = *nspace;
        if (D.21703 != 0) goto <D.21704>; else goto <D.21705>;
        <D.21704>:
        iftmp.1 = ".";
        goto <D.21706>;
        <D.21705>:
        iftmp.1 = "";
        <D.21706>:
        msg = monoeg_g_strdup_printf ("%s%s%s", nspace, iftmp.1, name);
        D.21707 = image->assembly;
        D.21708 = &D.21707->aname;
        human_name = mono_stringify_assembly_name (D.21708);
        mono_loader_set_error_type_load (msg, human_name);
        monoeg_g_free (msg);
        monoeg_g_free (human_name);
        D.21691 = 0B;
        return D.21691;
      }
      <D.18455>:
      {
        struct MonoClass * enclosing;
        struct GList * tmp;

        D.21684 = type_token & 16777215;
        if (D.21684 == idx) goto <D.21709>; else goto <D.21710>;
        <D.21709>:
        D.21689 = image->name;
        D.21711 = monoeg_g_strdup_printf ("Image %s with self-referencing typeref token %08x.", D.21689, type_token);
        mono_loader_set_error_bad_image (D.21711);
        D.21691 = 0B;
        return D.21691;
        <D.21710>:
        D.21712 = idx | 16777216;
        enclosing = mono_class_from_typeref (image, D.21712);
        if (enclosing == 0B) goto <D.21713>; else goto <D.21714>;
        <D.21713>:
        D.21691 = 0B;
        return D.21691;
        <D.21714>:
        D.21717 = BIT_FIELD_REF <*enclosing, 32, 160>;
        D.21718 = D.21717 & 2147483648;
        if (D.21718 != 0) goto <D.21719>; else goto <D.21715>;
        <D.21719>:
        D.21720 = enclosing->ext;
        if (D.21720 != 0B) goto <D.21721>; else goto <D.21715>;
        <D.21721>:
        D.21720 = enclosing->ext;
        tmp = D.21720->nested_classes;
        goto <D.18468>;
        <D.18467>:
        res = tmp->data;
        {
          size_t __s1_len;
          size_t __s2_len;

          D.21722 = res->name;
          D.18466 = __builtin_strcmp (D.21722, name);
        }
        if (D.18466 == 0) goto <D.21723>; else goto <D.21724>;
        <D.21723>:
        D.21691 = res;
        return D.21691;
        <D.21724>:
        tmp = tmp->next;
        <D.18468>:
        if (tmp != 0B) goto <D.18467>; else goto <D.18469>;
        <D.18469>:
        goto <D.21716>;
        <D.21715>:
        {
          int i;

          D.21725 = enclosing->image;
          D.21726 = enclosing->type_token;
          D.21727 = mono_metadata_nesting_typedef (D.21725, D.21726, 1);
          i = (int) D.21727;
          goto <D.18485>;
          <D.18484>:
          {
            guint32 class_nested;
            guint32 string_offset;
            const char * nname;

            D.21725 = enclosing->image;
            D.21728 = &D.21725->tables[41];
            D.21729 = i + -1;
            class_nested = mono_metadata_decode_row_col (D.21728, D.21729, 0);
            D.21725 = enclosing->image;
            D.21730 = &D.21725->tables[2];
            D.21731 = class_nested + 4294967295;
            D.21732 = (int) D.21731;
            string_offset = mono_metadata_decode_row_col (D.21730, D.21732, 1);
            D.21725 = enclosing->image;
            nname = mono_metadata_string_heap (D.21725, string_offset);
            {
              size_t __s1_len;
              size_t __s2_len;

              D.18482 = __builtin_strcmp (nname, name);
            }
            if (D.18482 == 0) goto <D.21733>; else goto <D.21734>;
            <D.21733>:
            {
              struct MonoClass * res;

              D.21725 = enclosing->image;
              D.21735 = class_nested | 33554432;
              res = mono_class_create_from_typedef (D.21725, D.21735, &error);
              D.21736 = mono_error_ok (&error);
              if (D.21736 == 0) goto <D.21737>; else goto <D.21738>;
              <D.21737>:
              mono_loader_set_error_from_mono_error (&error);
              mono_error_cleanup (&error);
              D.21691 = 0B;
              return D.21691;
              <D.21738>:
              D.21691 = res;
              return D.21691;
            }
            <D.21734>:
            D.21725 = enclosing->image;
            D.21726 = enclosing->type_token;
            D.21739 = i + 1;
            D.21740 = (unsigned int) D.21739;
            D.21741 = mono_metadata_nesting_typedef (D.21725, D.21726, D.21740);
            i = (int) D.21741;
          }
          <D.18485>:
          if (i != 0) goto <D.18484>; else goto <D.18486>;
          <D.18486>:
        }
        <D.21716>:
        D.21689 = image->name;
        monoeg_g_log (0B, 16, "TypeRef ResolutionScope not yet handled (%d) for %s.%s in image %s", idx, nspace, name, D.21689);
        D.21691 = 0B;
        return D.21691;
      }
      <D.18487>:
      goto <D.18488>;
      <D.21742>:
      <D.18488>:
      D.21743 = image->tables[35].rows;
      D.21744 = (unsigned int) D.21743;
      if (D.21744 < idx) goto <D.21745>; else goto <D.21746>;
      <D.21745>:
      D.21689 = image->name;
      D.21747 = monoeg_g_strdup_printf ("Image %s with invalid assemblyref token %08x.", D.21689, idx);
      mono_loader_set_error_bad_image (D.21747);
      D.21691 = 0B;
      return D.21691;
      <D.21746>:
      D.21750 = image->references;
      if (D.21750 == 0B) goto <D.21748>; else goto <D.21751>;
      <D.21751>:
      D.21750 = image->references;
      D.21752 = idx + 1073741823;
      D.21753 = D.21752 * 4;
      D.21754 = D.21750 + D.21753;
      D.21755 = *D.21754;
      if (D.21755 == 0B) goto <D.21748>; else goto <D.21749>;
      <D.21748>:
      D.21756 = idx + 4294967295;
      D.21757 = (int) D.21756;
      mono_assembly_load_reference (image, D.21757);
      <D.21749>:
      D.21750 = image->references;
      D.21752 = idx + 1073741823;
      D.21753 = D.21752 * 4;
      D.21754 = D.21750 + D.21753;
      D.21755 = *D.21754;
      D.21758 = D.21755 == 0B;
      D.21759 = (long int) D.21758;
      D.21760 = __builtin_expect (D.21759, 0);
      if (D.21760 != 0) goto <D.21761>; else goto <D.21762>;
      <D.21761>:
      monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "class.c", 248, "image->references [idx - 1]");
      <D.21762>:
      D.21750 = image->references;
      D.21752 = idx + 1073741823;
      D.21753 = D.21752 * 4;
      D.21754 = D.21750 + D.21753;
      D.21755 = *D.21754;
      if (D.21755 == 4294967295B) goto <D.21763>; else goto <D.21764>;
      <D.21763>:
      {
        struct MonoAssemblyName aname;
        char * human_name;

        try
          {
            D.21756 = idx + 4294967295;
            D.21757 = (int) D.21756;
            mono_assembly_get_assemblyref (image, D.21757, &aname);
            human_name = mono_stringify_assembly_name (&aname);
            D.21707 = image->assembly;
            if (D.21707 != 0B) goto <D.21766>; else goto <D.21767>;
            <D.21766>:
            D.21707 = image->assembly;
            iftmp.2 = D.21707->ref_only;
            goto <D.21768>;
            <D.21767>:
            iftmp.2 = 0;
            <D.21768>:
            mono_loader_set_error_assembly_load (human_name, iftmp.2);
            monoeg_g_free (human_name);
            D.21691 = 0B;
            return D.21691;
          }
        finally
          {
            aname = {CLOBBER};
          }
      }
      <D.21764>:
      D.21750 = image->references;
      D.21752 = idx + 1073741823;
      D.21753 = D.21752 * 4;
      D.21754 = D.21750 + D.21753;
      D.21755 = *D.21754;
      D.21769 = D.21755->image;
      D.21691 = mono_class_from_name (D.21769, nspace, name);
      return D.21691;
    }
  finally
    {
      error = {CLOBBER};
      cols = {CLOBBER};
    }
}


mono_class_create_from_typedef (struct MonoImage * image, guint32 type_token, struct MonoError * error)
{
  unsigned int D.21775;
  <unnamed-unsigned:24> D.21777;
  unsigned int D.21778;
  struct MonoLoaderError * D.21779;
  _Bool D.21780;
  long int D.21781;
  long int D.21782;
  struct MonoClass * D.21785;
  struct MonoInternalHashTable * D.21786;
  void * type_token.3;
  struct MonoLoaderError * D.21790;
  _Bool D.21791;
  long int D.21792;
  long int D.21793;
  unsigned int D.21796;
  int D.21797;
  unsigned int D.21798;
  unsigned int D.21799;
  unsigned int D.21800;
  unsigned int classes_size.4;
  unsigned int classes_size.5;
  unsigned int D.21803;
  struct MonoGenericContainer * D.21804;
  struct MonoGenericContainer * D.21805;
  unsigned int D.21810;
  unsigned int D.21813;
  gchar * D.21818;
  struct MonoGenericClass * D.21823;
  struct MonoClass * D.21826;
  struct MonoClass * D.21833;
  int D.21834;
  const char * D.21837;
  gchar * D.21838;
  struct MonoLoaderError * D.21839;
  _Bool D.21840;
  long int D.21841;
  long int D.21842;
  unsigned int D.21845;
  unsigned int D.21846;
  struct MonoClass * D.21849;
  unsigned int D.21850;
  unsigned int D.21851;
  int D.21854;
  gchar * D.21857;
  struct MonoClass * * interfaces.6;
  unsigned int icount.7;
  short unsigned int D.21860;
  unsigned int D.21861;
  unsigned int D.21862;
  unsigned int D.21863;
  unsigned int D.21864;
  int tidx.8;
  unsigned int D.21868;
  unsigned int D.21869;
  <unnamed-unsigned:24> D.21871;
  <unnamed-unsigned:24> D.21872;
  unsigned int D.21876;
  unsigned int D.21878;
  unsigned int D.21879;
  unsigned int D.21880;
  unsigned int D.21883;
  unsigned int D.21884;
  int D.21886;
  int D.20310;
  int iftmp.9;
  int D.20309;
  const char[7] * D.21892;
  unsigned char D.21893;
  int D.21894;
  unsigned char D.21895;
  int D.21896;
  const unsigned char * D.21901;
  unsigned char D.21902;
  int D.21903;
  const unsigned char * D.21904;
  unsigned char D.21905;
  int D.21906;
  const unsigned char * D.21911;
  unsigned char D.21912;
  int D.21913;
  const unsigned char * D.21914;
  unsigned char D.21915;
  int D.21916;
  const unsigned char * D.21921;
  unsigned char D.21922;
  int D.21923;
  const unsigned char * D.21924;
  unsigned char D.21925;
  int D.21926;
  int D.20319;
  int iftmp.10;
  int D.20318;
  const char[6] * D.21933;
  unsigned char D.21934;
  int D.21935;
  unsigned char D.21936;
  int D.21937;
  const unsigned char * D.21942;
  unsigned char D.21943;
  int D.21944;
  const unsigned char * D.21945;
  unsigned char D.21946;
  int D.21947;
  const unsigned char * D.21952;
  unsigned char D.21953;
  int D.21954;
  const unsigned char * D.21955;
  unsigned char D.21956;
  int D.21957;
  const unsigned char * D.21962;
  unsigned char D.21963;
  int D.21964;
  const unsigned char * D.21965;
  unsigned char D.21966;
  int D.21967;
  int D.21971;
  unsigned int D.21972;
  unsigned int D.21973;
  int D.21974;
  unsigned int D.21975;
  _Bool D.21976;
  long int D.21977;
  long int D.21978;
  struct MonoClass * D.21985;
  struct MonoLoaderError * D.21986;
  _Bool D.21987;
  long int D.21988;
  long int D.21989;
  struct MonoClass * D.21992;
  int D.21995;
  gchar * D.21998;
  struct MonoLoaderError * D.21999;
  _Bool D.22000;
  long int D.22001;
  long int D.22002;
  struct MonoImage * D.22005;
  const char * D.22006;
  int D.20329;
  int iftmp.11;
  int D.20328;
  const char[10] * D.22012;
  unsigned char D.22013;
  int D.22014;
  unsigned char D.22015;
  int D.22016;
  const unsigned char * D.22021;
  unsigned char D.22022;
  int D.22023;
  const unsigned char * D.22024;
  unsigned char D.22025;
  int D.22026;
  const unsigned char * D.22031;
  unsigned char D.22032;
  int D.22033;
  const unsigned char * D.22034;
  unsigned char D.22035;
  int D.22036;
  const unsigned char * D.22041;
  unsigned char D.22042;
  int D.22043;
  const unsigned char * D.22044;
  unsigned char D.22045;
  int D.22046;
  int D.20338;
  int iftmp.12;
  int D.20337;
  unsigned char D.22053;
  int D.22054;
  const unsigned char * D.22059;
  unsigned char D.22060;
  int D.22061;
  const unsigned char * D.22066;
  unsigned char D.22067;
  int D.22068;
  const unsigned char * D.22073;
  unsigned char D.22074;
  int D.22075;
  int D.22079;
  int iftmp.13;
  int D.20356;
  int iftmp.14;
  int D.20355;
  const char[3] * D.22089;
  unsigned char D.22090;
  int D.22091;
  unsigned char D.22092;
  int D.22093;
  const unsigned char * D.22098;
  unsigned char D.22099;
  int D.22100;
  const unsigned char * D.22101;
  unsigned char D.22102;
  int D.22103;
  const unsigned char * D.22108;
  unsigned char D.22109;
  int D.22110;
  const unsigned char * D.22111;
  unsigned char D.22112;
  int D.22113;
  const unsigned char * D.22118;
  unsigned char D.22119;
  int D.22120;
  const unsigned char * D.22121;
  unsigned char D.22122;
  int D.22123;
  const char * D.22125;
  int D.20365;
  int iftmp.15;
  int D.20364;
  const char[4] * D.22130;
  unsigned char D.22131;
  int D.22132;
  unsigned char D.22133;
  int D.22134;
  const unsigned char * D.22139;
  unsigned char D.22140;
  int D.22141;
  const unsigned char * D.22142;
  unsigned char D.22143;
  int D.22144;
  const unsigned char * D.22149;
  unsigned char D.22150;
  int D.22151;
  const unsigned char * D.22152;
  unsigned char D.22153;
  int D.22154;
  const unsigned char * D.22159;
  unsigned char D.22160;
  int D.22161;
  const unsigned char * D.22162;
  unsigned char D.22163;
  int D.22164;
  int D.20374;
  int iftmp.16;
  int D.20373;
  const char[3] * D.22170;
  unsigned char D.22171;
  int D.22172;
  unsigned char D.22173;
  int D.22174;
  const unsigned char * D.22179;
  unsigned char D.22180;
  int D.22181;
  const unsigned char * D.22182;
  unsigned char D.22183;
  int D.22184;
  const unsigned char * D.22189;
  unsigned char D.22190;
  int D.22191;
  const unsigned char * D.22192;
  unsigned char D.22193;
  int D.22194;
  const unsigned char * D.22199;
  unsigned char D.22200;
  int D.22201;
  const unsigned char * D.22202;
  unsigned char D.22203;
  int D.22204;
  int D.20383;
  int iftmp.17;
  int D.20382;
  const char[3] * D.22210;
  unsigned char D.22211;
  int D.22212;
  unsigned char D.22213;
  int D.22214;
  const unsigned char * D.22219;
  unsigned char D.22220;
  int D.22221;
  const unsigned char * D.22222;
  unsigned char D.22223;
  int D.22224;
  const unsigned char * D.22229;
  unsigned char D.22230;
  int D.22231;
  const unsigned char * D.22232;
  unsigned char D.22233;
  int D.22234;
  const unsigned char * D.22239;
  unsigned char D.22240;
  int D.22241;
  const unsigned char * D.22242;
  unsigned char D.22243;
  int D.22244;
  int D.20392;
  int iftmp.18;
  int D.20391;
  const char[4] * D.22250;
  unsigned char D.22251;
  int D.22252;
  unsigned char D.22253;
  int D.22254;
  const unsigned char * D.22259;
  unsigned char D.22260;
  int D.22261;
  const unsigned char * D.22262;
  unsigned char D.22263;
  int D.22264;
  const unsigned char * D.22269;
  unsigned char D.22270;
  int D.22271;
  const unsigned char * D.22272;
  unsigned char D.22273;
  int D.22274;
  const unsigned char * D.22279;
  unsigned char D.22280;
  int D.22281;
  const unsigned char * D.22282;
  unsigned char D.22283;
  int D.22284;
  int D.20401;
  int iftmp.19;
  int D.20400;
  const char[3] * D.22290;
  unsigned char D.22291;
  int D.22292;
  unsigned char D.22293;
  int D.22294;
  const unsigned char * D.22299;
  unsigned char D.22300;
  int D.22301;
  const unsigned char * D.22302;
  unsigned char D.22303;
  int D.22304;
  const unsigned char * D.22309;
  unsigned char D.22310;
  int D.22311;
  const unsigned char * D.22312;
  unsigned char D.22313;
  int D.22314;
  const unsigned char * D.22319;
  unsigned char D.22320;
  int D.22321;
  const unsigned char * D.22322;
  unsigned char D.22323;
  int D.22324;
  int D.20410;
  int iftmp.20;
  int D.20409;
  const char[3] * D.22330;
  unsigned char D.22331;
  int D.22332;
  unsigned char D.22333;
  int D.22334;
  const unsigned char * D.22339;
  unsigned char D.22340;
  int D.22341;
  const unsigned char * D.22342;
  unsigned char D.22343;
  int D.22344;
  const unsigned char * D.22349;
  unsigned char D.22350;
  int D.22351;
  const unsigned char * D.22352;
  unsigned char D.22353;
  int D.22354;
  const unsigned char * D.22359;
  unsigned char D.22360;
  int D.22361;
  const unsigned char * D.22362;
  unsigned char D.22363;
  int D.22364;
  int D.20419;
  int iftmp.21;
  int D.20418;
  const char[4] * D.22370;
  unsigned char D.22371;
  int D.22372;
  unsigned char D.22373;
  int D.22374;
  const unsigned char * D.22379;
  unsigned char D.22380;
  int D.22381;
  const unsigned char * D.22382;
  unsigned char D.22383;
  int D.22384;
  const unsigned char * D.22389;
  unsigned char D.22390;
  int D.22391;
  const unsigned char * D.22392;
  unsigned char D.22393;
  int D.22394;
  const unsigned char * D.22399;
  unsigned char D.22400;
  int D.22401;
  const unsigned char * D.22402;
  unsigned char D.22403;
  int D.22404;
  int D.20428;
  int iftmp.22;
  int D.20427;
  const char[4] * D.22410;
  unsigned char D.22411;
  int D.22412;
  unsigned char D.22413;
  int D.22414;
  const unsigned char * D.22419;
  unsigned char D.22420;
  int D.22421;
  const unsigned char * D.22422;
  unsigned char D.22423;
  int D.22424;
  const unsigned char * D.22429;
  unsigned char D.22430;
  int D.22431;
  const unsigned char * D.22432;
  unsigned char D.22433;
  int D.22434;
  const unsigned char * D.22439;
  unsigned char D.22440;
  int D.22441;
  const unsigned char * D.22442;
  unsigned char D.22443;
  int D.22444;
  int D.20437;
  int iftmp.23;
  int D.20436;
  const char[5] * D.22450;
  unsigned char D.22451;
  int D.22452;
  unsigned char D.22453;
  int D.22454;
  const unsigned char * D.22459;
  unsigned char D.22460;
  int D.22461;
  const unsigned char * D.22462;
  unsigned char D.22463;
  int D.22464;
  const unsigned char * D.22469;
  unsigned char D.22470;
  int D.22471;
  const unsigned char * D.22472;
  unsigned char D.22473;
  int D.22474;
  const unsigned char * D.22479;
  unsigned char D.22480;
  int D.22481;
  const unsigned char * D.22482;
  unsigned char D.22483;
  int D.22484;
  unsigned char D.22486;
  <unnamed-unsigned:1> D.22487;
  struct MonoLoaderError * D.22488;
  _Bool D.22489;
  long int D.22490;
  long int D.22491;
  struct MonoLoaderError * D.22494;
  _Bool D.22495;
  long int D.22496;
  long int D.22497;
  struct MonoTableInfo * tt;
  struct MonoClass * class;
  struct MonoClass * parent;
  guint32 cols[6];
  guint32 cols_next[6];
  guint tidx;
  struct MonoGenericContext * context;
  const char * name;
  const char * nspace;
  guint icount;
  struct MonoClass * * interfaces;
  guint32 field_last;
  guint32 method_last;
  guint32 nesting_tokeen;
  void parent_failure = <<< error >>>;

  try
    {
      tt = &image->tables[2];
      parent = 0B;
      tidx = type_token & 16777215;
      context = 0B;
      icount = 0;
      mono_error_init (error);
      D.21775 = type_token >> 24;
      if (D.21775 != 2) goto <D.21773>; else goto <D.21776>;
      <D.21776>:
      D.21777 = tt->rows;
      D.21778 = (unsigned int) D.21777;
      if (D.21778 < tidx) goto <D.21773>; else goto <D.21774>;
      <D.21773>:
      mono_error_set_bad_image (error, image, "Invalid typedef token %x", type_token);
      D.21779 = mono_loader_get_last_error ();
      D.21780 = D.21779 != 0B;
      D.21781 = (long int) D.21780;
      D.21782 = __builtin_expect (D.21781, 0);
      if (D.21782 != 0) goto <D.21783>; else goto <D.21784>;
      <D.21783>:
      monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "class.c", 5589, "!mono_loader_get_last_error ()");
      <D.21784>:
      D.21785 = 0B;
      return D.21785;
      <D.21774>:
      mono_loader_lock ();
      D.21786 = &image->class_cache;
      type_token.3 = (void *) type_token;
      class = mono_internal_hash_table_lookup (D.21786, type_token.3);
      if (class != 0B) goto <D.21788>; else goto <D.21789>;
      <D.21788>:
      mono_loader_unlock ();
      D.21790 = mono_loader_get_last_error ();
      D.21791 = D.21790 != 0B;
      D.21792 = (long int) D.21791;
      D.21793 = __builtin_expect (D.21792, 0);
      if (D.21793 != 0) goto <D.21794>; else goto <D.21795>;
      <D.21794>:
      monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "class.c", 5597, "!mono_loader_get_last_error ()");
      <D.21795>:
      D.21785 = class;
      return D.21785;
      <D.21789>:
      D.21796 = tidx + 4294967295;
      D.21797 = (int) D.21796;
      mono_metadata_decode_row (tt, D.21797, &cols, 6);
      D.21798 = cols[1];
      name = mono_metadata_string_heap (image, D.21798);
      D.21799 = cols[2];
      nspace = mono_metadata_string_heap (image, D.21799);
      class = mono_image_alloc0 (image, 164);
      class->name = name;
      class->name_space = nspace;
      mono_profiler_class_event (class, 0);
      class->image = image;
      class->type_token = type_token;
      D.21800 = cols[0];
      class->flags = D.21800;
      D.21786 = &image->class_cache;
      type_token.3 = (void *) type_token;
      mono_internal_hash_table_insert (D.21786, type_token.3, class);
      classes_size.4 = classes_size;
      classes_size.5 = classes_size.4 + 164;
      classes_size = classes_size.5;
      D.21803 = class->type_token;
      D.21804 = mono_metadata_load_generic_params (image, D.21803, 0B);
      class->generic_container = D.21804;
      D.21805 = class->generic_container;
      if (D.21805 != 0B) goto <D.21806>; else goto <D.21807>;
      <D.21806>:
      class->is_generic = 1;
      D.21805 = class->generic_container;
      D.21805->owner.klass = class;
      D.21805 = class->generic_container;
      context = &D.21805->context;
      <D.21807>:
      D.21805 = class->generic_container;
      if (D.21805 != 0B) goto <D.21808>; else goto <D.21809>;
      <D.21808>:
      enable_gclass_recording ();
      <D.21809>:
      D.21810 = cols[3];
      if (D.21810 != 0) goto <D.21811>; else goto <D.21812>;
      <D.21811>:
      {
        struct MonoClass * tmp;
        guint32 parent_token;

        D.21810 = cols[3];
        parent_token = mono_metadata_token_from_dor (D.21810);
        D.21813 = parent_token >> 24;
        if (D.21813 == 27) goto <D.21814>; else goto <D.21815>;
        <D.21814>:
        class->this_arg.byref = 1;
        class->this_arg.data.klass = class;
        class->this_arg.type = 18;
        class->byval_arg.data.klass = class;
        class->byval_arg.type = 18;
        <D.21815>:
        parent = mono_class_get_full (image, parent_token, context);
        if (parent == 0B) goto <D.21816>; else goto <D.21817>;
        <D.21816>:
        D.21818 = monoeg_g_strdup_printf ("Could not load parent, token is %x", parent_token);
        mono_class_set_failure_from_loader_error (class, error, D.21818);
        goto parent_failure;
        <D.21817>:
        tmp = parent;
        goto <D.20300>;
        <D.20299>:
        if (tmp == class) goto <D.21819>; else goto <D.21820>;
        <D.21819>:
        mono_class_set_failure_and_error (class, error, "Cycle found while resolving parent");
        goto parent_failure;
        <D.21820>:
        D.21805 = class->generic_container;
        if (D.21805 != 0B) goto <D.21821>; else goto <D.21822>;
        <D.21821>:
        D.21823 = tmp->generic_class;
        if (D.21823 != 0B) goto <D.21824>; else goto <D.21825>;
        <D.21824>:
        D.21823 = tmp->generic_class;
        D.21826 = D.21823->container_class;
        if (D.21826 == class) goto <D.21827>; else goto <D.21828>;
        <D.21827>:
        mono_class_set_failure_and_error (class, error, "Parent extends generic instance of this type");
        goto parent_failure;
        <D.21828>:
        <D.21825>:
        <D.21822>:
        tmp = tmp->parent;
        <D.20300>:
        if (tmp != 0B) goto <D.20299>; else goto <D.20301>;
        <D.20301>:
      }
      <D.21812>:
      mono_class_setup_parent (class, parent);
      mono_class_setup_mono_type (class);
      D.21805 = class->generic_container;
      if (D.21805 != 0B) goto <D.21829>; else goto <D.21830>;
      <D.21829>:
      disable_gclass_recording (fix_gclass_incomplete_instantiation, class);
      <D.21830>:
      nesting_tokeen = mono_metadata_nested_in_typedef (image, type_token);
      if (nesting_tokeen != 0) goto <D.21831>; else goto <D.21832>;
      <D.21831>:
      D.21833 = mono_class_create_from_typedef (image, nesting_tokeen, error);
      class->nested_in = D.21833;
      D.21834 = mono_error_ok (error);
      if (D.21834 == 0) goto <D.21835>; else goto <D.21836>;
      <D.21835>:
      D.21837 = mono_error_get_message (error);
      D.21838 = monoeg_strdup (D.21837);
      mono_class_set_failure (class, 7, D.21838);
      mono_loader_unlock ();
      mono_profiler_class_loaded (class, 1);
      D.21839 = mono_loader_get_last_error ();
      D.21840 = D.21839 != 0B;
      D.21841 = (long int) D.21840;
      D.21842 = __builtin_expect (D.21841, 0);
      if (D.21842 != 0) goto <D.21843>; else goto <D.21844>;
      <D.21843>:
      monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "class.c", 5684, "!mono_loader_get_last_error ()");
      <D.21844>:
      D.21785 = 0B;
      return D.21785;
      <D.21836>:
      <D.21832>:
      D.21845 = class->flags;
      D.21846 = D.21845 & 196608;
      if (D.21846 == 65536) goto <D.21847>; else goto <D.21848>;
      <D.21847>:
      class->unicode = 1;
      <D.21848>:
      class->element_class = class;
      D.21849 = class->element_class;
      class->cast_class = D.21849;
      D.21850 = BIT_FIELD_REF <*class, 32, 160>;
      D.21851 = D.21850 & 16;
      if (D.21851 == 0) goto <D.21852>; else goto <D.21853>;
      <D.21852>:
      D.21854 = mono_metadata_interfaces_from_typedef_full (image, type_token, &interfaces, &icount, 0, context);
      if (D.21854 == 0) goto <D.21855>; else goto <D.21856>;
      <D.21855>:
      D.21857 = monoeg_strdup ("Could not load interfaces");
      mono_class_set_failure_from_loader_error (class, error, D.21857);
      mono_loader_unlock ();
      mono_profiler_class_loaded (class, 1);
      D.21785 = 0B;
      return D.21785;
      <D.21856>:
      interfaces.6 = interfaces;
      class->interfaces = interfaces.6;
      icount.7 = icount;
      D.21860 = (short unsigned int) icount.7;
      class->interface_count = D.21860;
      class->interfaces_inited = 1;
      <D.21853>:
      D.21861 = cols[4];
      D.21862 = D.21861 + 4294967295;
      class->field.first = D.21862;
      D.21863 = cols[5];
      D.21864 = D.21863 + 4294967295;
      class->method.first = D.21864;
      D.21777 = tt->rows;
      D.21778 = (unsigned int) D.21777;
      if (D.21778 > tidx) goto <D.21865>; else goto <D.21866>;
      <D.21865>:
      tidx.8 = (int) tidx;
      mono_metadata_decode_row (tt, tidx.8, &cols_next, 6);
      D.21868 = cols_next[4];
      field_last = D.21868 + 4294967295;
      D.21869 = cols_next[5];
      method_last = D.21869 + 4294967295;
      goto <D.21870>;
      <D.21866>:
      D.21871 = image->tables[4].rows;
      field_last = (guint32) D.21871;
      D.21872 = image->tables[6].rows;
      method_last = (guint32) D.21872;
      <D.21870>:
      D.21861 = cols[4];
      if (D.21861 != 0) goto <D.21875>; else goto <D.21873>;
      <D.21875>:
      D.21861 = cols[4];
      D.21871 = image->tables[4].rows;
      D.21876 = (unsigned int) D.21871;
      if (D.21861 <= D.21876) goto <D.21877>; else goto <D.21873>;
      <D.21877>:
      D.21878 = class->field.first;
      D.21879 = field_last - D.21878;
      class->field.count = D.21879;
      goto <D.21874>;
      <D.21873>:
      class->field.count = 0;
      <D.21874>:
      D.21863 = cols[5];
      D.21872 = image->tables[6].rows;
      D.21880 = (unsigned int) D.21872;
      if (D.21863 <= D.21880) goto <D.21881>; else goto <D.21882>;
      <D.21881>:
      D.21883 = class->method.first;
      D.21884 = method_last - D.21883;
      class->method.count = D.21884;
      goto <D.21885>;
      <D.21882>:
      class->method.count = 0;
      <D.21885>:
      D.21886 = mono_is_corlib_image (image);
      if (D.21886 != 0) goto <D.21887>; else goto <D.21888>;
      <D.21887>:
      {
        size_t __s1_len;
        size_t __s2_len;

        __s2_len = 6;
        if (__s2_len <= 3) goto <D.21890>; else goto <D.21891>;
        <D.21890>:
        {
          const unsigned char * __s2;
          int __result;

          __s2 = nspace;
          D.21892 = "System";
          D.21893 = MEM[(const unsigned char *)D.21892];
          D.21894 = (int) D.21893;
          D.21895 = *__s2;
          D.21896 = (int) D.21895;
          __result = D.21894 - D.21896;
          {
            if (__s2_len != 0) goto <D.21897>; else goto <D.21898>;
            <D.21897>:
            if (__result == 0) goto <D.21899>; else goto <D.21900>;
            <D.21899>:
            D.21901 = &MEM[(void *)"System" + 1B];
            D.21902 = *D.21901;
            D.21903 = (int) D.21902;
            D.21904 = __s2 + 1;
            D.21905 = *D.21904;
            D.21906 = (int) D.21905;
            __result = D.21903 - D.21906;
            if (__s2_len > 1) goto <D.21907>; else goto <D.21908>;
            <D.21907>:
            if (__result == 0) goto <D.21909>; else goto <D.21910>;
            <D.21909>:
            D.21911 = &MEM[(void *)"System" + 2B];
            D.21912 = *D.21911;
            D.21913 = (int) D.21912;
            D.21914 = __s2 + 2;
            D.21915 = *D.21914;
            D.21916 = (int) D.21915;
            __result = D.21913 - D.21916;
            if (__s2_len > 2) goto <D.21917>; else goto <D.21918>;
            <D.21917>:
            if (__result == 0) goto <D.21919>; else goto <D.21920>;
            <D.21919>:
            D.21921 = &MEM[(void *)"System" + 3B];
            D.21922 = *D.21921;
            D.21923 = (int) D.21922;
            D.21924 = __s2 + 3;
            D.21925 = *D.21924;
            D.21926 = (int) D.21925;
            __result = D.21923 - D.21926;
            <D.21920>:
            <D.21918>:
            <D.21910>:
            <D.21908>:
            <D.21900>:
            <D.21898>:
          }
          D.20309 = __result;
        }
        iftmp.9 = -D.20309;
        goto <D.21927>;
        <D.21891>:
        iftmp.9 = __builtin_strcmp (nspace, "System");
        <D.21927>:
        D.20310 = iftmp.9;
      }
      if (D.20310 == 0) goto <D.21928>; else goto <D.21929>;
      <D.21928>:
      {
        size_t __s1_len;
        size_t __s2_len;

        __s2_len = 5;
        if (__s2_len <= 3) goto <D.21931>; else goto <D.21932>;
        <D.21931>:
        {
          const unsigned char * __s2;
          int __result;

          __s2 = name;
          D.21933 = "Array";
          D.21934 = MEM[(const unsigned char *)D.21933];
          D.21935 = (int) D.21934;
          D.21936 = *__s2;
          D.21937 = (int) D.21936;
          __result = D.21935 - D.21937;
          {
            if (__s2_len != 0) goto <D.21938>; else goto <D.21939>;
            <D.21938>:
            if (__result == 0) goto <D.21940>; else goto <D.21941>;
            <D.21940>:
            D.21942 = &MEM[(void *)"Array" + 1B];
            D.21943 = *D.21942;
            D.21944 = (int) D.21943;
            D.21945 = __s2 + 1;
            D.21946 = *D.21945;
            D.21947 = (int) D.21946;
            __result = D.21944 - D.21947;
            if (__s2_len > 1) goto <D.21948>; else goto <D.21949>;
            <D.21948>:
            if (__result == 0) goto <D.21950>; else goto <D.21951>;
            <D.21950>:
            D.21952 = &MEM[(void *)"Array" + 2B];
            D.21953 = *D.21952;
            D.21954 = (int) D.21953;
            D.21955 = __s2 + 2;
            D.21956 = *D.21955;
            D.21957 = (int) D.21956;
            __result = D.21954 - D.21957;
            if (__s2_len > 2) goto <D.21958>; else goto <D.21959>;
            <D.21958>:
            if (__result == 0) goto <D.21960>; else goto <D.21961>;
            <D.21960>:
            D.21962 = &MEM[(void *)"Array" + 3B];
            D.21963 = *D.21962;
            D.21964 = (int) D.21963;
            D.21965 = __s2 + 3;
            D.21966 = *D.21965;
            D.21967 = (int) D.21966;
            __result = D.21964 - D.21967;
            <D.21961>:
            <D.21959>:
            <D.21951>:
            <D.21949>:
            <D.21941>:
            <D.21939>:
          }
          D.20318 = __result;
        }
        iftmp.10 = -D.20318;
        goto <D.21968>;
        <D.21932>:
        iftmp.10 = __builtin_strcmp (name, "Array");
        <D.21968>:
        D.20319 = iftmp.10;
      }
      if (D.20319 == 0) goto <D.21969>; else goto <D.21970>;
      <D.21969>:
      D.21971 = class->instance_size;
      D.21972 = (unsigned int) D.21971;
      D.21973 = D.21972 + 8;
      D.21974 = (int) D.21973;
      class->instance_size = D.21974;
      D.21975 = class->field.count;
      D.21976 = D.21975 != 0;
      D.21977 = (long int) D.21976;
      D.21978 = __builtin_expect (D.21977, 0);
      if (D.21978 != 0) goto <D.21979>; else goto <D.21980>;
      <D.21979>:
      monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "class.c", 5744, "class->field.count == 0");
      <D.21980>:
      <D.21970>:
      <D.21929>:
      <D.21888>:
      D.21850 = BIT_FIELD_REF <*class, 32, 160>;
      D.21851 = D.21850 & 16;
      if (D.21851 != 0) goto <D.21981>; else goto <D.21982>;
      <D.21981>:
      {
        struct MonoType * enum_basetype;

        enum_basetype = mono_class_find_enum_basetype (class);
        if (enum_basetype == 0B) goto <D.21983>; else goto <D.21984>;
        <D.21983>:
        D.21985 = mono_defaults.int32_class;
        class->element_class = D.21985;
        D.21849 = class->element_class;
        class->cast_class = D.21849;
        mono_class_set_failure_and_error (class, error, "Could not enum basetype");
        mono_loader_unlock ();
        mono_profiler_class_loaded (class, 1);
        D.21986 = mono_loader_get_last_error ();
        D.21987 = D.21986 != 0B;
        D.21988 = (long int) D.21987;
        D.21989 = __builtin_expect (D.21988, 0);
        if (D.21989 != 0) goto <D.21990>; else goto <D.21991>;
        <D.21990>:
        monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "class.c", 5755, "!mono_loader_get_last_error ()");
        <D.21991>:
        D.21785 = 0B;
        return D.21785;
        <D.21984>:
        D.21992 = mono_class_from_mono_type (enum_basetype);
        class->element_class = D.21992;
        D.21849 = class->element_class;
        class->cast_class = D.21849;
      }
      <D.21982>:
      D.21805 = class->generic_container;
      if (D.21805 != 0B) goto <D.21993>; else goto <D.21994>;
      <D.21993>:
      D.21805 = class->generic_container;
      D.21995 = mono_metadata_load_generic_param_constraints_full (image, type_token, D.21805);
      if (D.21995 == 0) goto <D.21996>; else goto <D.21997>;
      <D.21996>:
      D.21998 = monoeg_strdup ("Could not load generic parameter constraints");
      mono_class_set_failure_from_loader_error (class, error, D.21998);
      mono_loader_unlock ();
      mono_profiler_class_loaded (class, 1);
      D.21999 = mono_loader_get_last_error ();
      D.22000 = D.21999 != 0B;
      D.22001 = (long int) D.22000;
      D.22002 = __builtin_expect (D.22001, 0);
      if (D.22002 != 0) goto <D.22003>; else goto <D.22004>;
      <D.22003>:
      monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "class.c", 5770, "!mono_loader_get_last_error ()");
      <D.22004>:
      D.21785 = 0B;
      return D.21785;
      <D.21997>:
      <D.21994>:
      D.22005 = class->image;
      D.22006 = D.22005->assembly_name;
      if (D.22006 != 0B) goto <D.22007>; else goto <D.22008>;
      <D.22007>:
      {
        size_t __s1_len;
        size_t __s2_len;

        __s2_len = 9;
        if (__s2_len <= 3) goto <D.22010>; else goto <D.22011>;
        <D.22010>:
        {
          const unsigned char * __s2;
          int __result;

          D.22005 = class->image;
          __s2 = D.22005->assembly_name;
          D.22012 = "Mono.Simd";
          D.22013 = MEM[(const unsigned char *)D.22012];
          D.22014 = (int) D.22013;
          D.22015 = *__s2;
          D.22016 = (int) D.22015;
          __result = D.22014 - D.22016;
          {
            if (__s2_len != 0) goto <D.22017>; else goto <D.22018>;
            <D.22017>:
            if (__result == 0) goto <D.22019>; else goto <D.22020>;
            <D.22019>:
            D.22021 = &MEM[(void *)"Mono.Simd" + 1B];
            D.22022 = *D.22021;
            D.22023 = (int) D.22022;
            D.22024 = __s2 + 1;
            D.22025 = *D.22024;
            D.22026 = (int) D.22025;
            __result = D.22023 - D.22026;
            if (__s2_len > 1) goto <D.22027>; else goto <D.22028>;
            <D.22027>:
            if (__result == 0) goto <D.22029>; else goto <D.22030>;
            <D.22029>:
            D.22031 = &MEM[(void *)"Mono.Simd" + 2B];
            D.22032 = *D.22031;
            D.22033 = (int) D.22032;
            D.22034 = __s2 + 2;
            D.22035 = *D.22034;
            D.22036 = (int) D.22035;
            __result = D.22033 - D.22036;
            if (__s2_len > 2) goto <D.22037>; else goto <D.22038>;
            <D.22037>:
            if (__result == 0) goto <D.22039>; else goto <D.22040>;
            <D.22039>:
            D.22041 = &MEM[(void *)"Mono.Simd" + 3B];
            D.22042 = *D.22041;
            D.22043 = (int) D.22042;
            D.22044 = __s2 + 3;
            D.22045 = *D.22044;
            D.22046 = (int) D.22045;
            __result = D.22043 - D.22046;
            <D.22040>:
            <D.22038>:
            <D.22030>:
            <D.22028>:
            <D.22020>:
            <D.22018>:
          }
          D.20328 = __result;
        }
        iftmp.11 = -D.20328;
        goto <D.22047>;
        <D.22011>:
        D.22005 = class->image;
        D.22006 = D.22005->assembly_name;
        iftmp.11 = __builtin_strcmp (D.22006, "Mono.Simd");
        <D.22047>:
        D.20329 = iftmp.11;
      }
      if (D.20329 == 0) goto <D.22048>; else goto <D.22049>;
      <D.22048>:
      {
        size_t __s1_len;
        size_t __s2_len;

        __s2_len = 9;
        if (__s2_len <= 3) goto <D.22051>; else goto <D.22052>;
        <D.22051>:
        {
          const unsigned char * __s2;
          int __result;

          __s2 = nspace;
          D.22012 = "Mono.Simd";
          D.22013 = MEM[(const unsigned char *)D.22012];
          D.22014 = (int) D.22013;
          D.22053 = *__s2;
          D.22054 = (int) D.22053;
          __result = D.22014 - D.22054;
          {
            if (__s2_len != 0) goto <D.22055>; else goto <D.22056>;
            <D.22055>:
            if (__result == 0) goto <D.22057>; else goto <D.22058>;
            <D.22057>:
            D.22021 = &MEM[(void *)"Mono.Simd" + 1B];
            D.22022 = *D.22021;
            D.22023 = (int) D.22022;
            D.22059 = __s2 + 1;
            D.22060 = *D.22059;
            D.22061 = (int) D.22060;
            __result = D.22023 - D.22061;
            if (__s2_len > 1) goto <D.22062>; else goto <D.22063>;
            <D.22062>:
            if (__result == 0) goto <D.22064>; else goto <D.22065>;
            <D.22064>:
            D.22031 = &MEM[(void *)"Mono.Simd" + 2B];
            D.22032 = *D.22031;
            D.22033 = (int) D.22032;
            D.22066 = __s2 + 2;
            D.22067 = *D.22066;
            D.22068 = (int) D.22067;
            __result = D.22033 - D.22068;
            if (__s2_len > 2) goto <D.22069>; else goto <D.22070>;
            <D.22069>:
            if (__result == 0) goto <D.22071>; else goto <D.22072>;
            <D.22071>:
            D.22041 = &MEM[(void *)"Mono.Simd" + 3B];
            D.22042 = *D.22041;
            D.22043 = (int) D.22042;
            D.22073 = __s2 + 3;
            D.22074 = *D.22073;
            D.22075 = (int) D.22074;
            __result = D.22043 - D.22075;
            <D.22072>:
            <D.22070>:
            <D.22065>:
            <D.22063>:
            <D.22058>:
            <D.22056>:
          }
          D.20337 = __result;
        }
        iftmp.12 = -D.20337;
        goto <D.22076>;
        <D.22052>:
        iftmp.12 = __builtin_strcmp (nspace, "Mono.Simd");
        <D.22076>:
        D.20338 = iftmp.12;
      }
      if (D.20338 == 0) goto <D.22077>; else goto <D.22078>;
      <D.22077>:
      D.22079 = strncmp (name, "Vector", 6);
      if (D.22079 == 0) goto <D.22080>; else goto <D.22081>;
      <D.22080>:
      {
        size_t __s1_len;
        size_t __s2_len;

        __s2_len = 2;
        if (__s2_len <= 3) goto <D.22087>; else goto <D.22088>;
        <D.22087>:
        {
          const unsigned char * __s2;
          int __result;

          __s2 = name + 6;
          D.22089 = "2d";
          D.22090 = MEM[(const unsigned char *)D.22089];
          D.22091 = (int) D.22090;
          D.22092 = *__s2;
          D.22093 = (int) D.22092;
          __result = D.22091 - D.22093;
          {
            if (__s2_len != 0) goto <D.22094>; else goto <D.22095>;
            <D.22094>:
            if (__result == 0) goto <D.22096>; else goto <D.22097>;
            <D.22096>:
            D.22098 = &MEM[(void *)"2d" + 1B];
            D.22099 = *D.22098;
            D.22100 = (int) D.22099;
            D.22101 = __s2 + 1;
            D.22102 = *D.22101;
            D.22103 = (int) D.22102;
            __result = D.22100 - D.22103;
            if (__s2_len > 1) goto <D.22104>; else goto <D.22105>;
            <D.22104>:
            if (__result == 0) goto <D.22106>; else goto <D.22107>;
            <D.22106>:
            D.22108 = &MEM[(void *)"2d" + 2B];
            D.22109 = *D.22108;
            D.22110 = (int) D.22109;
            D.22111 = __s2 + 2;
            D.22112 = *D.22111;
            D.22113 = (int) D.22112;
            __result = D.22110 - D.22113;
            if (__s2_len > 2) goto <D.22114>; else goto <D.22115>;
            <D.22114>:
            if (__result == 0) goto <D.22116>; else goto <D.22117>;
            <D.22116>:
            D.22118 = &MEM[(void *)"2d" + 3B];
            D.22119 = *D.22118;
            D.22120 = (int) D.22119;
            D.22121 = __s2 + 3;
            D.22122 = *D.22121;
            D.22123 = (int) D.22122;
            __result = D.22120 - D.22123;
            <D.22117>:
            <D.22115>:
            <D.22107>:
            <D.22105>:
            <D.22097>:
            <D.22095>:
          }
          D.20355 = __result;
        }
        iftmp.14 = -D.20355;
        goto <D.22124>;
        <D.22088>:
        D.22125 = name + 6;
        iftmp.14 = __builtin_strcmp (D.22125, "2d");
        <D.22124>:
        D.20356 = iftmp.14;
      }
      if (D.20356 == 0) goto <D.22083>; else goto <D.22126>;
      <D.22126>:
      {
        size_t __s1_len;
        size_t __s2_len;

        __s2_len = 3;
        if (__s2_len <= 3) goto <D.22128>; else goto <D.22129>;
        <D.22128>:
        {
          const unsigned char * __s2;
          int __result;

          __s2 = name + 6;
          D.22130 = "2ul";
          D.22131 = MEM[(const unsigned char *)D.22130];
          D.22132 = (int) D.22131;
          D.22133 = *__s2;
          D.22134 = (int) D.22133;
          __result = D.22132 - D.22134;
          {
            if (__s2_len != 0) goto <D.22135>; else goto <D.22136>;
            <D.22135>:
            if (__result == 0) goto <D.22137>; else goto <D.22138>;
            <D.22137>:
            D.22139 = &MEM[(void *)"2ul" + 1B];
            D.22140 = *D.22139;
            D.22141 = (int) D.22140;
            D.22142 = __s2 + 1;
            D.22143 = *D.22142;
            D.22144 = (int) D.22143;
            __result = D.22141 - D.22144;
            if (__s2_len > 1) goto <D.22145>; else goto <D.22146>;
            <D.22145>:
            if (__result == 0) goto <D.22147>; else goto <D.22148>;
            <D.22147>:
            D.22149 = &MEM[(void *)"2ul" + 2B];
            D.22150 = *D.22149;
            D.22151 = (int) D.22150;
            D.22152 = __s2 + 2;
            D.22153 = *D.22152;
            D.22154 = (int) D.22153;
            __result = D.22151 - D.22154;
            if (__s2_len > 2) goto <D.22155>; else goto <D.22156>;
            <D.22155>:
            if (__result == 0) goto <D.22157>; else goto <D.22158>;
            <D.22157>:
            D.22159 = &MEM[(void *)"2ul" + 3B];
            D.22160 = *D.22159;
            D.22161 = (int) D.22160;
            D.22162 = __s2 + 3;
            D.22163 = *D.22162;
            D.22164 = (int) D.22163;
            __result = D.22161 - D.22164;
            <D.22158>:
            <D.22156>:
            <D.22148>:
            <D.22146>:
            <D.22138>:
            <D.22136>:
          }
          D.20364 = __result;
        }
        iftmp.15 = -D.20364;
        goto <D.22165>;
        <D.22129>:
        D.22125 = name + 6;
        iftmp.15 = __builtin_strcmp (D.22125, "2ul");
        <D.22165>:
        D.20365 = iftmp.15;
      }
      if (D.20365 == 0) goto <D.22083>; else goto <D.22166>;
      <D.22166>:
      {
        size_t __s1_len;
        size_t __s2_len;

        __s2_len = 2;
        if (__s2_len <= 3) goto <D.22168>; else goto <D.22169>;
        <D.22168>:
        {
          const unsigned char * __s2;
          int __result;

          __s2 = name + 6;
          D.22170 = "2l";
          D.22171 = MEM[(const unsigned char *)D.22170];
          D.22172 = (int) D.22171;
          D.22173 = *__s2;
          D.22174 = (int) D.22173;
          __result = D.22172 - D.22174;
          {
            if (__s2_len != 0) goto <D.22175>; else goto <D.22176>;
            <D.22175>:
            if (__result == 0) goto <D.22177>; else goto <D.22178>;
            <D.22177>:
            D.22179 = &MEM[(void *)"2l" + 1B];
            D.22180 = *D.22179;
            D.22181 = (int) D.22180;
            D.22182 = __s2 + 1;
            D.22183 = *D.22182;
            D.22184 = (int) D.22183;
            __result = D.22181 - D.22184;
            if (__s2_len > 1) goto <D.22185>; else goto <D.22186>;
            <D.22185>:
            if (__result == 0) goto <D.22187>; else goto <D.22188>;
            <D.22187>:
            D.22189 = &MEM[(void *)"2l" + 2B];
            D.22190 = *D.22189;
            D.22191 = (int) D.22190;
            D.22192 = __s2 + 2;
            D.22193 = *D.22192;
            D.22194 = (int) D.22193;
            __result = D.22191 - D.22194;
            if (__s2_len > 2) goto <D.22195>; else goto <D.22196>;
            <D.22195>:
            if (__result == 0) goto <D.22197>; else goto <D.22198>;
            <D.22197>:
            D.22199 = &MEM[(void *)"2l" + 3B];
            D.22200 = *D.22199;
            D.22201 = (int) D.22200;
            D.22202 = __s2 + 3;
            D.22203 = *D.22202;
            D.22204 = (int) D.22203;
            __result = D.22201 - D.22204;
            <D.22198>:
            <D.22196>:
            <D.22188>:
            <D.22186>:
            <D.22178>:
            <D.22176>:
          }
          D.20373 = __result;
        }
        iftmp.16 = -D.20373;
        goto <D.22205>;
        <D.22169>:
        D.22125 = name + 6;
        iftmp.16 = __builtin_strcmp (D.22125, "2l");
        <D.22205>:
        D.20374 = iftmp.16;
      }
      if (D.20374 == 0) goto <D.22083>; else goto <D.22206>;
      <D.22206>:
      {
        size_t __s1_len;
        size_t __s2_len;

        __s2_len = 2;
        if (__s2_len <= 3) goto <D.22208>; else goto <D.22209>;
        <D.22208>:
        {
          const unsigned char * __s2;
          int __result;

          __s2 = name + 6;
          D.22210 = "4f";
          D.22211 = MEM[(const unsigned char *)D.22210];
          D.22212 = (int) D.22211;
          D.22213 = *__s2;
          D.22214 = (int) D.22213;
          __result = D.22212 - D.22214;
          {
            if (__s2_len != 0) goto <D.22215>; else goto <D.22216>;
            <D.22215>:
            if (__result == 0) goto <D.22217>; else goto <D.22218>;
            <D.22217>:
            D.22219 = &MEM[(void *)"4f" + 1B];
            D.22220 = *D.22219;
            D.22221 = (int) D.22220;
            D.22222 = __s2 + 1;
            D.22223 = *D.22222;
            D.22224 = (int) D.22223;
            __result = D.22221 - D.22224;
            if (__s2_len > 1) goto <D.22225>; else goto <D.22226>;
            <D.22225>:
            if (__result == 0) goto <D.22227>; else goto <D.22228>;
            <D.22227>:
            D.22229 = &MEM[(void *)"4f" + 2B];
            D.22230 = *D.22229;
            D.22231 = (int) D.22230;
            D.22232 = __s2 + 2;
            D.22233 = *D.22232;
            D.22234 = (int) D.22233;
            __result = D.22231 - D.22234;
            if (__s2_len > 2) goto <D.22235>; else goto <D.22236>;
            <D.22235>:
            if (__result == 0) goto <D.22237>; else goto <D.22238>;
            <D.22237>:
            D.22239 = &MEM[(void *)"4f" + 3B];
            D.22240 = *D.22239;
            D.22241 = (int) D.22240;
            D.22242 = __s2 + 3;
            D.22243 = *D.22242;
            D.22244 = (int) D.22243;
            __result = D.22241 - D.22244;
            <D.22238>:
            <D.22236>:
            <D.22228>:
            <D.22226>:
            <D.22218>:
            <D.22216>:
          }
          D.20382 = __result;
        }
        iftmp.17 = -D.20382;
        goto <D.22245>;
        <D.22209>:
        D.22125 = name + 6;
        iftmp.17 = __builtin_strcmp (D.22125, "4f");
        <D.22245>:
        D.20383 = iftmp.17;
      }
      if (D.20383 == 0) goto <D.22083>; else goto <D.22246>;
      <D.22246>:
      {
        size_t __s1_len;
        size_t __s2_len;

        __s2_len = 3;
        if (__s2_len <= 3) goto <D.22248>; else goto <D.22249>;
        <D.22248>:
        {
          const unsigned char * __s2;
          int __result;

          __s2 = name + 6;
          D.22250 = "4ui";
          D.22251 = MEM[(const unsigned char *)D.22250];
          D.22252 = (int) D.22251;
          D.22253 = *__s2;
          D.22254 = (int) D.22253;
          __result = D.22252 - D.22254;
          {
            if (__s2_len != 0) goto <D.22255>; else goto <D.22256>;
            <D.22255>:
            if (__result == 0) goto <D.22257>; else goto <D.22258>;
            <D.22257>:
            D.22259 = &MEM[(void *)"4ui" + 1B];
            D.22260 = *D.22259;
            D.22261 = (int) D.22260;
            D.22262 = __s2 + 1;
            D.22263 = *D.22262;
            D.22264 = (int) D.22263;
            __result = D.22261 - D.22264;
            if (__s2_len > 1) goto <D.22265>; else goto <D.22266>;
            <D.22265>:
            if (__result == 0) goto <D.22267>; else goto <D.22268>;
            <D.22267>:
            D.22269 = &MEM[(void *)"4ui" + 2B];
            D.22270 = *D.22269;
            D.22271 = (int) D.22270;
            D.22272 = __s2 + 2;
            D.22273 = *D.22272;
            D.22274 = (int) D.22273;
            __result = D.22271 - D.22274;
            if (__s2_len > 2) goto <D.22275>; else goto <D.22276>;
            <D.22275>:
            if (__result == 0) goto <D.22277>; else goto <D.22278>;
            <D.22277>:
            D.22279 = &MEM[(void *)"4ui" + 3B];
            D.22280 = *D.22279;
            D.22281 = (int) D.22280;
            D.22282 = __s2 + 3;
            D.22283 = *D.22282;
            D.22284 = (int) D.22283;
            __result = D.22281 - D.22284;
            <D.22278>:
            <D.22276>:
            <D.22268>:
            <D.22266>:
            <D.22258>:
            <D.22256>:
          }
          D.20391 = __result;
        }
        iftmp.18 = -D.20391;
        goto <D.22285>;
        <D.22249>:
        D.22125 = name + 6;
        iftmp.18 = __builtin_strcmp (D.22125, "4ui");
        <D.22285>:
        D.20392 = iftmp.18;
      }
      if (D.20392 == 0) goto <D.22083>; else goto <D.22286>;
      <D.22286>:
      {
        size_t __s1_len;
        size_t __s2_len;

        __s2_len = 2;
        if (__s2_len <= 3) goto <D.22288>; else goto <D.22289>;
        <D.22288>:
        {
          const unsigned char * __s2;
          int __result;

          __s2 = name + 6;
          D.22290 = "4i";
          D.22291 = MEM[(const unsigned char *)D.22290];
          D.22292 = (int) D.22291;
          D.22293 = *__s2;
          D.22294 = (int) D.22293;
          __result = D.22292 - D.22294;
          {
            if (__s2_len != 0) goto <D.22295>; else goto <D.22296>;
            <D.22295>:
            if (__result == 0) goto <D.22297>; else goto <D.22298>;
            <D.22297>:
            D.22299 = &MEM[(void *)"4i" + 1B];
            D.22300 = *D.22299;
            D.22301 = (int) D.22300;
            D.22302 = __s2 + 1;
            D.22303 = *D.22302;
            D.22304 = (int) D.22303;
            __result = D.22301 - D.22304;
            if (__s2_len > 1) goto <D.22305>; else goto <D.22306>;
            <D.22305>:
            if (__result == 0) goto <D.22307>; else goto <D.22308>;
            <D.22307>:
            D.22309 = &MEM[(void *)"4i" + 2B];
            D.22310 = *D.22309;
            D.22311 = (int) D.22310;
            D.22312 = __s2 + 2;
            D.22313 = *D.22312;
            D.22314 = (int) D.22313;
            __result = D.22311 - D.22314;
            if (__s2_len > 2) goto <D.22315>; else goto <D.22316>;
            <D.22315>:
            if (__result == 0) goto <D.22317>; else goto <D.22318>;
            <D.22317>:
            D.22319 = &MEM[(void *)"4i" + 3B];
            D.22320 = *D.22319;
            D.22321 = (int) D.22320;
            D.22322 = __s2 + 3;
            D.22323 = *D.22322;
            D.22324 = (int) D.22323;
            __result = D.22321 - D.22324;
            <D.22318>:
            <D.22316>:
            <D.22308>:
            <D.22306>:
            <D.22298>:
            <D.22296>:
          }
          D.20400 = __result;
        }
        iftmp.19 = -D.20400;
        goto <D.22325>;
        <D.22289>:
        D.22125 = name + 6;
        iftmp.19 = __builtin_strcmp (D.22125, "4i");
        <D.22325>:
        D.20401 = iftmp.19;
      }
      if (D.20401 == 0) goto <D.22083>; else goto <D.22326>;
      <D.22326>:
      {
        size_t __s1_len;
        size_t __s2_len;

        __s2_len = 2;
        if (__s2_len <= 3) goto <D.22328>; else goto <D.22329>;
        <D.22328>:
        {
          const unsigned char * __s2;
          int __result;

          __s2 = name + 6;
          D.22330 = "8s";
          D.22331 = MEM[(const unsigned char *)D.22330];
          D.22332 = (int) D.22331;
          D.22333 = *__s2;
          D.22334 = (int) D.22333;
          __result = D.22332 - D.22334;
          {
            if (__s2_len != 0) goto <D.22335>; else goto <D.22336>;
            <D.22335>:
            if (__result == 0) goto <D.22337>; else goto <D.22338>;
            <D.22337>:
            D.22339 = &MEM[(void *)"8s" + 1B];
            D.22340 = *D.22339;
            D.22341 = (int) D.22340;
            D.22342 = __s2 + 1;
            D.22343 = *D.22342;
            D.22344 = (int) D.22343;
            __result = D.22341 - D.22344;
            if (__s2_len > 1) goto <D.22345>; else goto <D.22346>;
            <D.22345>:
            if (__result == 0) goto <D.22347>; else goto <D.22348>;
            <D.22347>:
            D.22349 = &MEM[(void *)"8s" + 2B];
            D.22350 = *D.22349;
            D.22351 = (int) D.22350;
            D.22352 = __s2 + 2;
            D.22353 = *D.22352;
            D.22354 = (int) D.22353;
            __result = D.22351 - D.22354;
            if (__s2_len > 2) goto <D.22355>; else goto <D.22356>;
            <D.22355>:
            if (__result == 0) goto <D.22357>; else goto <D.22358>;
            <D.22357>:
            D.22359 = &MEM[(void *)"8s" + 3B];
            D.22360 = *D.22359;
            D.22361 = (int) D.22360;
            D.22362 = __s2 + 3;
            D.22363 = *D.22362;
            D.22364 = (int) D.22363;
            __result = D.22361 - D.22364;
            <D.22358>:
            <D.22356>:
            <D.22348>:
            <D.22346>:
            <D.22338>:
            <D.22336>:
          }
          D.20409 = __result;
        }
        iftmp.20 = -D.20409;
        goto <D.22365>;
        <D.22329>:
        D.22125 = name + 6;
        iftmp.20 = __builtin_strcmp (D.22125, "8s");
        <D.22365>:
        D.20410 = iftmp.20;
      }
      if (D.20410 == 0) goto <D.22083>; else goto <D.22366>;
      <D.22366>:
      {
        size_t __s1_len;
        size_t __s2_len;

        __s2_len = 3;
        if (__s2_len <= 3) goto <D.22368>; else goto <D.22369>;
        <D.22368>:
        {
          const unsigned char * __s2;
          int __result;

          __s2 = name + 6;
          D.22370 = "8us";
          D.22371 = MEM[(const unsigned char *)D.22370];
          D.22372 = (int) D.22371;
          D.22373 = *__s2;
          D.22374 = (int) D.22373;
          __result = D.22372 - D.22374;
          {
            if (__s2_len != 0) goto <D.22375>; else goto <D.22376>;
            <D.22375>:
            if (__result == 0) goto <D.22377>; else goto <D.22378>;
            <D.22377>:
            D.22379 = &MEM[(void *)"8us" + 1B];
            D.22380 = *D.22379;
            D.22381 = (int) D.22380;
            D.22382 = __s2 + 1;
            D.22383 = *D.22382;
            D.22384 = (int) D.22383;
            __result = D.22381 - D.22384;
            if (__s2_len > 1) goto <D.22385>; else goto <D.22386>;
            <D.22385>:
            if (__result == 0) goto <D.22387>; else goto <D.22388>;
            <D.22387>:
            D.22389 = &MEM[(void *)"8us" + 2B];
            D.22390 = *D.22389;
            D.22391 = (int) D.22390;
            D.22392 = __s2 + 2;
            D.22393 = *D.22392;
            D.22394 = (int) D.22393;
            __result = D.22391 - D.22394;
            if (__s2_len > 2) goto <D.22395>; else goto <D.22396>;
            <D.22395>:
            if (__result == 0) goto <D.22397>; else goto <D.22398>;
            <D.22397>:
            D.22399 = &MEM[(void *)"8us" + 3B];
            D.22400 = *D.22399;
            D.22401 = (int) D.22400;
            D.22402 = __s2 + 3;
            D.22403 = *D.22402;
            D.22404 = (int) D.22403;
            __result = D.22401 - D.22404;
            <D.22398>:
            <D.22396>:
            <D.22388>:
            <D.22386>:
            <D.22378>:
            <D.22376>:
          }
          D.20418 = __result;
        }
        iftmp.21 = -D.20418;
        goto <D.22405>;
        <D.22369>:
        D.22125 = name + 6;
        iftmp.21 = __builtin_strcmp (D.22125, "8us");
        <D.22405>:
        D.20419 = iftmp.21;
      }
      if (D.20419 == 0) goto <D.22083>; else goto <D.22406>;
      <D.22406>:
      {
        size_t __s1_len;
        size_t __s2_len;

        __s2_len = 3;
        if (__s2_len <= 3) goto <D.22408>; else goto <D.22409>;
        <D.22408>:
        {
          const unsigned char * __s2;
          int __result;

          __s2 = name + 6;
          D.22410 = "16b";
          D.22411 = MEM[(const unsigned char *)D.22410];
          D.22412 = (int) D.22411;
          D.22413 = *__s2;
          D.22414 = (int) D.22413;
          __result = D.22412 - D.22414;
          {
            if (__s2_len != 0) goto <D.22415>; else goto <D.22416>;
            <D.22415>:
            if (__result == 0) goto <D.22417>; else goto <D.22418>;
            <D.22417>:
            D.22419 = &MEM[(void *)"16b" + 1B];
            D.22420 = *D.22419;
            D.22421 = (int) D.22420;
            D.22422 = __s2 + 1;
            D.22423 = *D.22422;
            D.22424 = (int) D.22423;
            __result = D.22421 - D.22424;
            if (__s2_len > 1) goto <D.22425>; else goto <D.22426>;
            <D.22425>:
            if (__result == 0) goto <D.22427>; else goto <D.22428>;
            <D.22427>:
            D.22429 = &MEM[(void *)"16b" + 2B];
            D.22430 = *D.22429;
            D.22431 = (int) D.22430;
            D.22432 = __s2 + 2;
            D.22433 = *D.22432;
            D.22434 = (int) D.22433;
            __result = D.22431 - D.22434;
            if (__s2_len > 2) goto <D.22435>; else goto <D.22436>;
            <D.22435>:
            if (__result == 0) goto <D.22437>; else goto <D.22438>;
            <D.22437>:
            D.22439 = &MEM[(void *)"16b" + 3B];
            D.22440 = *D.22439;
            D.22441 = (int) D.22440;
            D.22442 = __s2 + 3;
            D.22443 = *D.22442;
            D.22444 = (int) D.22443;
            __result = D.22441 - D.22444;
            <D.22438>:
            <D.22436>:
            <D.22428>:
            <D.22426>:
            <D.22418>:
            <D.22416>:
          }
          D.20427 = __result;
        }
        iftmp.22 = -D.20427;
        goto <D.22445>;
        <D.22409>:
        D.22125 = name + 6;
        iftmp.22 = __builtin_strcmp (D.22125, "16b");
        <D.22445>:
        D.20428 = iftmp.22;
      }
      if (D.20428 == 0) goto <D.22083>; else goto <D.22446>;
      <D.22446>:
      {
        size_t __s1_len;
        size_t __s2_len;

        __s2_len = 4;
        if (__s2_len <= 3) goto <D.22448>; else goto <D.22449>;
        <D.22448>:
        {
          const unsigned char * __s2;
          int __result;

          __s2 = name + 6;
          D.22450 = "16sb";
          D.22451 = MEM[(const unsigned char *)D.22450];
          D.22452 = (int) D.22451;
          D.22453 = *__s2;
          D.22454 = (int) D.22453;
          __result = D.22452 - D.22454;
          {
            if (__s2_len != 0) goto <D.22455>; else goto <D.22456>;
            <D.22455>:
            if (__result == 0) goto <D.22457>; else goto <D.22458>;
            <D.22457>:
            D.22459 = &MEM[(void *)"16sb" + 1B];
            D.22460 = *D.22459;
            D.22461 = (int) D.22460;
            D.22462 = __s2 + 1;
            D.22463 = *D.22462;
            D.22464 = (int) D.22463;
            __result = D.22461 - D.22464;
            if (__s2_len > 1) goto <D.22465>; else goto <D.22466>;
            <D.22465>:
            if (__result == 0) goto <D.22467>; else goto <D.22468>;
            <D.22467>:
            D.22469 = &MEM[(void *)"16sb" + 2B];
            D.22470 = *D.22469;
            D.22471 = (int) D.22470;
            D.22472 = __s2 + 2;
            D.22473 = *D.22472;
            D.22474 = (int) D.22473;
            __result = D.22471 - D.22474;
            if (__s2_len > 2) goto <D.22475>; else goto <D.22476>;
            <D.22475>:
            if (__result == 0) goto <D.22477>; else goto <D.22478>;
            <D.22477>:
            D.22479 = &MEM[(void *)"16sb" + 3B];
            D.22480 = *D.22479;
            D.22481 = (int) D.22480;
            D.22482 = __s2 + 3;
            D.22483 = *D.22482;
            D.22484 = (int) D.22483;
            __result = D.22481 - D.22484;
            <D.22478>:
            <D.22476>:
            <D.22468>:
            <D.22466>:
            <D.22458>:
            <D.22456>:
          }
          D.20436 = __result;
        }
        iftmp.23 = -D.20436;
        goto <D.22485>;
        <D.22449>:
        D.22125 = name + 6;
        iftmp.23 = __builtin_strcmp (D.22125, "16sb");
        <D.22485>:
        D.20437 = iftmp.23;
      }
      if (D.20437 == 0) goto <D.22083>; else goto <D.22084>;
      <D.22083>:
      iftmp.13 = 1;
      goto <D.22085>;
      <D.22084>:
      iftmp.13 = 0;
      <D.22085>:
      D.22486 = (unsigned char) iftmp.13;
      D.22487 = (<unnamed-unsigned:1>) D.22486;
      class->simd_type = D.22487;
      <D.22081>:
      <D.22078>:
      <D.22049>:
      <D.22008>:
      mono_loader_unlock ();
      mono_profiler_class_loaded (class, 0);
      D.22488 = mono_loader_get_last_error ();
      D.22489 = D.22488 != 0B;
      D.22490 = (long int) D.22489;
      D.22491 = __builtin_expect (D.22490, 0);
      if (D.22491 != 0) goto <D.22492>; else goto <D.22493>;
      <D.22492>:
      monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "class.c", 5782, "!mono_loader_get_last_error ()");
      <D.22493>:
      D.21785 = class;
      return D.21785;
      parent_failure:
      mono_class_setup_mono_type (class);
      mono_loader_unlock ();
      mono_profiler_class_loaded (class, 1);
      D.22494 = mono_loader_get_last_error ();
      D.22495 = D.22494 != 0B;
      D.22496 = (long int) D.22495;
      D.22497 = __builtin_expect (D.22496, 0);
      if (D.22497 != 0) goto <D.22498>; else goto <D.22499>;
      <D.22498>:
      monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "class.c", 5790, "!mono_loader_get_last_error ()");
      <D.22499>:
      D.21785 = 0B;
      return D.21785;
    }
  finally
    {
      cols = {CLOBBER};
      cols_next = {CLOBBER};
      icount = {CLOBBER};
      interfaces = {CLOBBER};
    }
}


fix_gclass_incomplete_instantiation (struct MonoClass * gclass, void * user_data)
{
  struct MonoGenericClass * D.22502;
  struct MonoClass * D.22503;
  gboolean D.22506;
  struct MonoClass * D.22507;
  struct MonoClass * D.22510;
  struct MonoClass * gtd;

  gtd = user_data;
  D.22502 = gclass->generic_class;
  D.22503 = D.22502->container_class;
  if (D.22503 != gtd) goto <D.22504>; else goto <D.22505>;
  <D.22504>:
  D.22506 = 0;
  return D.22506;
  <D.22505>:
  D.22507 = gtd->parent;
  if (D.22507 != 0B) goto <D.22508>; else goto <D.22509>;
  <D.22508>:
  D.22510 = gclass->parent;
  if (D.22510 == 0B) goto <D.22511>; else goto <D.22512>;
  <D.22511>:
  mono_generic_class_setup_parent (gclass, gtd);
  <D.22512>:
  <D.22509>:
  D.22506 = 1;
  return D.22506;
}


mono_generic_class_setup_parent (struct MonoClass * klass, struct MonoClass * gtd)
{
  struct MonoClass * D.22514;
  struct MonoGenericContext * D.22517;
  struct MonoClass * D.22518;
  int D.22519;
  struct MonoClass * D.22522;
  struct MonoClass * D.22523;
  unsigned int D.22526;
  unsigned int D.22527;
  struct MonoClass * D.22530;
  struct MonoClass * D.22531;

  D.22514 = gtd->parent;
  if (D.22514 != 0B) goto <D.22515>; else goto <D.22516>;
  <D.22515>:
  {
    struct MonoError error;
    struct MonoGenericClass * gclass;

    try
      {
        gclass = klass->generic_class;
        D.22514 = gtd->parent;
        D.22517 = mono_generic_class_get_context (gclass);
        D.22518 = mono_class_inflate_generic_class_checked (D.22514, D.22517, &error);
        klass->parent = D.22518;
        D.22519 = mono_error_ok (&error);
        if (D.22519 == 0) goto <D.22520>; else goto <D.22521>;
        <D.22520>:
        D.22522 = mono_defaults.object_class;
        klass->parent = D.22522;
        mono_class_set_failure (klass, 7, 0B);
        mono_error_cleanup (&error);
        <D.22521>:
      }
    finally
      {
        error = {CLOBBER};
      }
  }
  <D.22516>:
  D.22523 = klass->parent;
  if (D.22523 != 0B) goto <D.22524>; else goto <D.22525>;
  <D.22524>:
  D.22523 = klass->parent;
  mono_class_setup_parent (klass, D.22523);
  <D.22525>:
  D.22526 = BIT_FIELD_REF <*klass, 32, 160>;
  D.22527 = D.22526 & 16;
  if (D.22527 != 0) goto <D.22528>; else goto <D.22529>;
  <D.22528>:
  D.22530 = gtd->cast_class;
  klass->cast_class = D.22530;
  D.22531 = gtd->element_class;
  klass->element_class = D.22531;
  <D.22529>:
}


mono_class_inflate_generic_class_checked (struct MonoClass * gklass, struct MonoGenericContext * context, struct MonoError * error)
{
  struct MonoType * D.22532;
  int D.22533;
  struct MonoClass * D.22536;
  struct MonoClass * res;
  struct MonoType * inflated;

  D.22532 = &gklass->byval_arg;
  inflated = mono_class_inflate_generic_type_checked (D.22532, context, error);
  D.22533 = mono_error_ok (error);
  if (D.22533 == 0) goto <D.22534>; else goto <D.22535>;
  <D.22534>:
  D.22536 = 0B;
  return D.22536;
  <D.22535>:
  res = mono_class_from_mono_type (inflated);
  mono_metadata_free_type (inflated);
  D.22536 = res;
  return D.22536;
}


enable_gclass_recording ()
{
  int record_gclass_instantiation.24;
  int record_gclass_instantiation.25;

  record_gclass_instantiation.24 = record_gclass_instantiation;
  record_gclass_instantiation.25 = record_gclass_instantiation.24 + 1;
  record_gclass_instantiation = record_gclass_instantiation.25;
}


disable_gclass_recording (gboolean (*gclass_record_func) (struct MonoClass *, void *) func, void * user_data)
{
  int record_gclass_instantiation.26;
  _Bool D.22541;
  long int D.22542;
  long int D.22543;
  int record_gclass_instantiation.27;
  void * D.22547;
  int D.22548;
  struct GSList * D.22551;
  struct GSList * D.22553;
  struct GSList * gclass_recorded_list.28;
  struct GSList * * head;

  head = &gclass_recorded_list;
  record_gclass_instantiation.26 = record_gclass_instantiation;
  D.22541 = record_gclass_instantiation.26 <= 0;
  D.22542 = (long int) D.22541;
  D.22543 = __builtin_expect (D.22542, 0);
  if (D.22543 != 0) goto <D.22544>; else goto <D.22545>;
  <D.22544>:
  monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "class.c", 120, "record_gclass_instantiation > 0");
  <D.22545>:
  record_gclass_instantiation.26 = record_gclass_instantiation;
  record_gclass_instantiation.27 = record_gclass_instantiation.26 + -1;
  record_gclass_instantiation = record_gclass_instantiation.27;
  goto <D.18436>;
  <D.18435>:
  {
    struct GSList * node;

    node = *head;
    D.22547 = node->data;
    D.22548 = func (D.22547, user_data);
    if (D.22548 != 0) goto <D.22549>; else goto <D.22550>;
    <D.22549>:
    D.22551 = node->next;
    *head = D.22551;
    monoeg_g_slist_free_1 (node);
    goto <D.22552>;
    <D.22550>:
    head = &node->next;
    <D.22552>:
  }
  <D.18436>:
  D.22553 = *head;
  if (D.22553 != 0B) goto <D.18435>; else goto <D.18437>;
  <D.18437>:
  record_gclass_instantiation.26 = record_gclass_instantiation;
  if (record_gclass_instantiation.26 == 0) goto <D.22554>; else goto <D.22555>;
  <D.22554>:
  gclass_recorded_list.28 = gclass_recorded_list;
  if (gclass_recorded_list.28 != 0B) goto <D.22557>; else goto <D.22558>;
  <D.22557>:
  gclass_recorded_list.28 = gclass_recorded_list;
  monoeg_g_slist_free (gclass_recorded_list.28);
  gclass_recorded_list = 0B;
  <D.22558>:
  <D.22555>:
}


mono_class_find_enum_basetype (struct MonoClass * class)
{
  unsigned int D.22559;
  unsigned int D.22560;
  unsigned int D.22561;
  _Bool D.22562;
  long int D.22563;
  long int D.22564;
  struct MonoGenericContainer * D.22567;
  struct MonoGenericClass * D.22571;
  _Bool D.22574;
  long int D.22575;
  long int D.22576;
  unsigned int D.22579;
  unsigned int i.29;
  unsigned int D.22581;
  unsigned int D.22582;
  unsigned int D.22583;
  struct MonoImage * D.22586;
  unsigned int D.22587;
  int D.22588;
  struct MonoType * D.22591;
  const char * sig.30;
  const char * sig.31;
  char D.22594;
  short int D.22597;
  int D.22598;
  const char * D.22599;
  struct MonoGenericContext * D.22604;
  short unsigned int D.22605;
  struct MonoGenericContainer * container;
  struct MonoImage * m;
  const int top;
  int i;

  container = 0B;
  m = class->image;
  D.22559 = class->field.count;
  top = (const int) D.22559;
  D.22560 = BIT_FIELD_REF <*class, 32, 160>;
  D.22561 = D.22560 & 16;
  D.22562 = D.22561 == 0;
  D.22563 = (long int) D.22562;
  D.22564 = __builtin_expect (D.22563, 0);
  if (D.22564 != 0) goto <D.22565>; else goto <D.22566>;
  <D.22565>:
  monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "class.c", 1250, "class->enumtype");
  <D.22566>:
  D.22567 = class->generic_container;
  if (D.22567 != 0B) goto <D.22568>; else goto <D.22569>;
  <D.22568>:
  container = class->generic_container;
  goto <D.22570>;
  <D.22569>:
  D.22571 = class->generic_class;
  if (D.22571 != 0B) goto <D.22572>; else goto <D.22573>;
  <D.22572>:
  {
    struct MonoClass * gklass;

    D.22571 = class->generic_class;
    gklass = D.22571->container_class;
    container = gklass->generic_container;
    D.22574 = container == 0B;
    D.22575 = (long int) D.22574;
    D.22576 = __builtin_expect (D.22575, 0);
    if (D.22576 != 0) goto <D.22577>; else goto <D.22578>;
    <D.22577>:
    monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "class.c", 1258, "container");
    <D.22578>:
  }
  <D.22573>:
  <D.22570>:
  i = 0;
  goto <D.18749>;
  <D.18748>:
  {
    const char * sig;
    guint32 cols[3];
    int idx;
    struct MonoType * ftype;

    try
      {
        D.22579 = class->field.first;
        i.29 = (unsigned int) i;
        D.22581 = D.22579 + i.29;
        idx = (int) D.22581;
        mono_metadata_decode_table_row (m, 4, idx, &cols, 3);
        D.22582 = cols[0];
        D.22583 = D.22582 & 16;
        if (D.22583 != 0) goto <D.22584>; else goto <D.22585>;
        <D.22584>:
        // predicted unlikely by continue predictor.
        goto <D.18747>;
        <D.22585>:
        D.22586 = class->image;
        D.22587 = cols[2];
        D.22588 = mono_verifier_verify_field_signature (D.22586, D.22587, 0B);
        if (D.22588 == 0) goto <D.22589>; else goto <D.22590>;
        <D.22589>:
        D.22591 = 0B;
        return D.22591;
        <D.22590>:
        D.22587 = cols[2];
        sig.30 = mono_metadata_blob_heap (m, D.22587);
        sig = sig.30;
        sig.31 = sig;
        mono_metadata_decode_value (sig.31, &sig);
        sig.31 = sig;
        D.22594 = *sig.31;
        if (D.22594 != 6) goto <D.22595>; else goto <D.22596>;
        <D.22595>:
        D.22591 = 0B;
        return D.22591;
        <D.22596>:
        D.22582 = cols[0];
        D.22597 = (short int) D.22582;
        D.22598 = (int) D.22597;
        sig.31 = sig;
        D.22599 = sig.31 + 1;
        ftype = mono_metadata_parse_type_full (m, container, 5, D.22598, D.22599, &sig);
        if (ftype == 0B) goto <D.22600>; else goto <D.22601>;
        <D.22600>:
        D.22591 = 0B;
        return D.22591;
        <D.22601>:
        D.22571 = class->generic_class;
        if (D.22571 != 0B) goto <D.22602>; else goto <D.22603>;
        <D.22602>:
        D.22604 = mono_class_get_context (class);
        ftype = mono_class_inflate_generic_type (ftype, D.22604);
        D.22582 = cols[0];
        D.22605 = (short unsigned int) D.22582;
        ftype->attrs = D.22605;
        <D.22603>:
        D.22591 = ftype;
        return D.22591;
      }
    finally
      {
        sig = {CLOBBER};
        cols = {CLOBBER};
      }
  }
  <D.18747>:
  i = i + 1;
  <D.18749>:
  if (i < top) goto <D.18748>; else goto <D.18750>;
  <D.18750>:
  D.22591 = 0B;
  return D.22591;
}


mono_class_set_failure_and_error (struct MonoClass * class, struct MonoError * error, const char * msg)
{
  gchar * D.22609;

  D.22609 = monoeg_strdup (msg);
  mono_class_set_failure (class, 7, D.22609);
  mono_error_set_type_load_class (error, class, msg);
}


monoeg_strdup (const gchar * str)
{
  gchar * D.22612;

  if (str != 0B) goto <D.22610>; else goto <D.22611>;
  <D.22610>:
  D.22612 = __strdup (str);
  return D.22612;
  <D.22611>:
  D.22612 = 0B;
  return D.22612;
}


mono_class_set_failure_from_loader_error (struct MonoClass * class, struct MonoError * error, char * msg)
{
  struct MonoLoaderError * lerror;

  lerror = mono_loader_get_last_error ();
  if (lerror != 0B) goto <D.22614>; else goto <D.22615>;
  <D.22614>:
  set_failure_from_loader_error (class, lerror);
  mono_error_set_from_loader_error (error);
  if (msg != 0B) goto <D.22616>; else goto <D.22617>;
  <D.22616>:
  monoeg_g_free (msg);
  <D.22617>:
  goto <D.22618>;
  <D.22615>:
  mono_class_set_failure (class, 7, msg);
  mono_error_set_type_load_class (error, class, msg);
  <D.22618>:
}


set_failure_from_loader_error (struct MonoClass * class, struct MonoLoaderError * error)
{
  unsigned char D.22619;
  int D.22620;
  struct MonoImage * D.22621;
  char * D.22622;
  char * D.22623;
  const char * D.22624;
  struct MonoClass * D.22625;
  const char * D.22628;
  int D.22632;
  unsigned int D.22636;
  void * exception_data;

  exception_data = 0B;
  D.22619 = error->exception_type;
  D.22620 = (int) D.22619;
  switch (D.22620) <default: <D.19885>, case 5: <D.19878>, case 6: <D.19879>, case 7: <D.19876>, case 8: <D.19882>, case 12: <D.19884>>
  <D.19876>:
  D.22621 = class->image;
  D.22622 = error->class_name;
  D.22623 = error->assembly_name;
  exception_data = concat_two_strings_with_zero (D.22621, D.22622, D.22623);
  goto <D.19877>;
  <D.19878>:
  D.22621 = class->image;
  D.22622 = error->class_name;
  D.22624 = error->member_name;
  exception_data = concat_two_strings_with_zero (D.22621, D.22622, D.22624);
  goto <D.19877>;
  <D.19879>:
  {
    const char * name_space;
    const char * class_name;

    D.22625 = error->klass;
    name_space = D.22625->name_space;
    if (name_space != 0B) goto <D.22626>; else goto <D.22627>;
    <D.22626>:
    D.22625 = error->klass;
    D.22628 = D.22625->name;
    class_name = monoeg_g_strdup_printf ("%s.%s", name_space, D.22628);
    goto <D.22629>;
    <D.22627>:
    D.22625 = error->klass;
    class_name = D.22625->name;
    <D.22629>:
    D.22621 = class->image;
    D.22624 = error->member_name;
    exception_data = concat_two_strings_with_zero (D.22621, class_name, D.22624);
    if (name_space != 0B) goto <D.22630>; else goto <D.22631>;
    <D.22630>:
    monoeg_g_free (class_name);
    <D.22631>:
    goto <D.19877>;
  }
  <D.19882>:
  {
    const char * msg;

    D.22632 = error->ref_only;
    if (D.22632 != 0) goto <D.22633>; else goto <D.22634>;
    <D.22633>:
    msg = "Cannot resolve dependency to assembly \'%s\' because it has not been preloaded. When using the ReflectionOnly APIs, dependent assemblies must be pre-loaded or loaded on demand through the ReflectionOnlyAssemblyResolve event.";
    goto <D.22635>;
    <D.22634>:
    msg = "Could not load file or assembly \'%s\' or one of its dependencies.";
    <D.22635>:
    D.22621 = class->image;
    D.22623 = error->assembly_name;
    exception_data = concat_two_strings_with_zero (D.22621, msg, D.22623);
    goto <D.19877>;
  }
  <D.19884>:
  exception_data = error->msg;
  goto <D.19877>;
  <D.19885>:
  monoeg_assertion_message ("* Assertion: should not be reached at %s:%d\n", "class.c", 4891);
  <D.19877>:
  D.22619 = error->exception_type;
  D.22636 = (unsigned int) D.22619;
  mono_class_set_failure (class, D.22636, exception_data);
}


concat_two_strings_with_zero (struct MonoImage * image, const char * s1, const char * s2)
{
  size_t iftmp.32;
  size_t iftmp.33;
  unsigned int D.22645;
  unsigned int D.22646;
  unsigned int len.34;
  long unsigned int len.35;
  const char * iftmp.36;
  const char * iftmp.37;
  int D.22657;
  _Bool D.22658;
  long int D.22659;
  long int D.22660;
  char * D.22663;
  int null_length;
  int len;
  char * s;
  int result;

  null_length = 6;
  if (s1 != 0B) goto <D.22638>; else goto <D.22639>;
  <D.22638>:
  iftmp.32 = strlen (s1);
  goto <D.22640>;
  <D.22639>:
  iftmp.32 = (size_t) null_length;
  <D.22640>:
  if (s2 != 0B) goto <D.22642>; else goto <D.22643>;
  <D.22642>:
  iftmp.33 = strlen (s2);
  goto <D.22644>;
  <D.22643>:
  iftmp.33 = (size_t) null_length;
  <D.22644>:
  D.22645 = iftmp.32 + iftmp.33;
  D.22646 = D.22645 + 2;
  len = (int) D.22646;
  len.34 = (unsigned int) len;
  s = mono_image_alloc (image, len.34);
  len.35 = (long unsigned int) len;
  if (s1 != 0B) goto <D.22650>; else goto <D.22651>;
  <D.22650>:
  iftmp.36 = s1;
  goto <D.22652>;
  <D.22651>:
  iftmp.36 = "(null)";
  <D.22652>:
  if (s2 != 0B) goto <D.22654>; else goto <D.22655>;
  <D.22654>:
  iftmp.37 = s2;
  goto <D.22656>;
  <D.22655>:
  iftmp.37 = "(null)";
  <D.22656>:
  result = monoeg_g_snprintf (s, len.35, "%s%c%s", iftmp.36, 0, iftmp.37);
  D.22657 = len + -1;
  D.22658 = D.22657 != result;
  D.22659 = (long int) D.22658;
  D.22660 = __builtin_expect (D.22659, 0);
  if (D.22660 != 0) goto <D.22661>; else goto <D.22662>;
  <D.22661>:
  monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "class.c", 4839, "result == len - 1");
  <D.22662>:
  D.22663 = s;
  return D.22663;
}


mono_dup_array_type (struct MonoImage * image, struct MonoArrayType * a)
{
  int * D.22667;
  unsigned char D.22670;
  unsigned int D.22671;
  unsigned int D.22672;
  void * D.22673;
  int * D.22674;
  unsigned char D.22677;
  unsigned int D.22678;
  unsigned int D.22679;
  void * D.22680;
  void * D.22684;
  void * D.22687;
  struct MonoArrayType * D.22688;

  if (image != 0B) goto <D.22665>; else goto <D.22666>;
  <D.22665>:
  a = mono_image_memdup (image, a, 16);
  D.22667 = a->sizes;
  if (D.22667 != 0B) goto <D.22668>; else goto <D.22669>;
  <D.22668>:
  D.22667 = a->sizes;
  D.22670 = a->numsizes;
  D.22671 = (unsigned int) D.22670;
  D.22672 = D.22671 * 4;
  D.22673 = mono_image_memdup (image, D.22667, D.22672);
  a->sizes = D.22673;
  <D.22669>:
  D.22674 = a->lobounds;
  if (D.22674 != 0B) goto <D.22675>; else goto <D.22676>;
  <D.22675>:
  D.22674 = a->lobounds;
  D.22677 = a->numlobounds;
  D.22678 = (unsigned int) D.22677;
  D.22679 = D.22678 * 4;
  D.22680 = mono_image_memdup (image, D.22674, D.22679);
  a->lobounds = D.22680;
  <D.22676>:
  goto <D.22681>;
  <D.22666>:
  a = monoeg_g_memdup (a, 16);
  D.22667 = a->sizes;
  if (D.22667 != 0B) goto <D.22682>; else goto <D.22683>;
  <D.22682>:
  D.22667 = a->sizes;
  D.22670 = a->numsizes;
  D.22671 = (unsigned int) D.22670;
  D.22672 = D.22671 * 4;
  D.22684 = monoeg_g_memdup (D.22667, D.22672);
  a->sizes = D.22684;
  <D.22683>:
  D.22674 = a->lobounds;
  if (D.22674 != 0B) goto <D.22685>; else goto <D.22686>;
  <D.22685>:
  D.22674 = a->lobounds;
  D.22677 = a->numlobounds;
  D.22678 = (unsigned int) D.22677;
  D.22679 = D.22678 * 4;
  D.22687 = monoeg_g_memdup (D.22674, D.22679);
  a->lobounds = D.22687;
  <D.22686>:
  <D.22681>:
  D.22688 = a;
  return D.22688;
}


mono_image_memdup (struct MonoImage * image, void * data, guint size)
{
  void * D.22690;
  void * res;

  res = mono_image_alloc (image, size);
  memcpy (res, data, size);
  D.22690 = res;
  return D.22690;
}


memcpy (void * restrict __dest, const void * restrict __src, size_t __len)
{
  void * D.22692;
  unsigned int D.22693;

  D.22693 = __builtin_object_size (__dest, 0);
  D.22692 = __builtin___memcpy_chk (__dest, __src, __len, D.22693);
  return D.22692;
}


mono_metadata_signature_deep_dup (struct MonoImage * image, struct MonoMethodSignature * sig)
{
  struct MonoType * D.22695;
  struct MonoType * D.22696;
  struct MonoType * D.22697;
  struct MonoType * D.22698;
  short unsigned int D.22699;
  int D.22700;
  struct MonoMethodSignature * D.22701;
  int i;

  sig = mono_metadata_signature_dup_full (image, sig);
  D.22695 = sig->ret;
  D.22696 = mono_metadata_type_dup (image, D.22695);
  sig->ret = D.22696;
  i = 0;
  goto <D.18507>;
  <D.18506>:
  D.22697 = sig->params[i];
  D.22698 = mono_metadata_type_dup (image, D.22697);
  sig->params[i] = D.22698;
  i = i + 1;
  <D.18507>:
  D.22699 = sig->param_count;
  D.22700 = (int) D.22699;
  if (D.22700 > i) goto <D.18506>; else goto <D.18508>;
  <D.18508>:
  D.22701 = sig;
  return D.22701;
}


mono_type_get_name_full (struct MonoType * type, MonoTypeNameFormat format)
{
  char * D.22703;
  struct GString * result;

  result = monoeg_g_string_new ("");
  mono_type_get_name_recurse (type, result, 0, format);
  D.22703 = monoeg_g_string_free (result, 0);
  return D.22703;
}


mono_type_get_name_recurse (struct MonoType * type, struct GString * str, gboolean is_recursed, MonoTypeNameFormat format)
{
  unsigned char D.22705;
  int D.22706;
  struct MonoArrayType * D.22707;
  unsigned char D.22708;
  MonoTypeNameFormat iftmp.38;
  struct MonoClass * D.22713;
  struct MonoType * D.22714;
  MonoTypeNameFormat iftmp.39;
  struct MonoClass * D.22723;
  struct MonoType * D.22724;
  MonoTypeNameFormat iftmp.40;
  struct MonoType * D.22731;
  struct MonoClass * D.22734;
  struct MonoGenericParam * D.22738;
  struct MonoGenericContainer * D.22739;
  struct MonoGenericParamInfo * D.22741;
  const char * iftmp.41;
  short unsigned int D.22746;
  int D.22747;
  struct MonoGenericParamInfo * iftmp.42;
  const char * D.22752;
  struct MonoClass * D.22753;
  struct MonoType * D.22756;
  const char * D.22761;
  char D.22762;
  const char * D.22767;
  int iftmp.43;
  int s.44;
  int D.22772;
  unsigned int D.22774;
  struct MonoGenericClass * D.22777;
  MonoTypeNameFormat iftmp.45;
  unsigned char D.22791;
  struct MonoType * D.22796;
  <unnamed-unsigned:22> D.22803;
  int D.22804;
  struct MonoGenericContainer * D.22809;
  struct MonoGenericParamFull * D.22821;
  unsigned int i.46;
  unsigned int D.22823;
  struct MonoGenericParamFull * D.22824;
  const char * D.22825;
  <unnamed-signed:31> D.22826;
  int D.22827;
  struct MonoClass * klass;

  D.22705 = type->type;
  D.22706 = (int) D.22705;
  switch (D.22706) <default: <D.18540>, case 15: <D.18536>, case 19: <D.18538>, case 20: <D.18526>, case 29: <D.18534>, case 30: <D.18539>>
  <D.18526>:
  {
    int i;
    int rank;
    MonoTypeNameFormat nested_format;

    D.22707 = type->data.array;
    D.22708 = D.22707->rank;
    rank = (int) D.22708;
    if (format != 3) goto <D.22710>; else goto <D.22711>;
    <D.22710>:
    iftmp.38 = format;
    goto <D.22712>;
    <D.22711>:
    iftmp.38 = 2;
    <D.22712>:
    nested_format = iftmp.38;
    D.22707 = type->data.array;
    D.22713 = D.22707->eklass;
    D.22714 = &D.22713->byval_arg;
    mono_type_get_name_recurse (D.22714, str, 0, nested_format);
    monoeg_g_string_append_c (str, 91);
    if (rank == 1) goto <D.22715>; else goto <D.22716>;
    <D.22715>:
    monoeg_g_string_append_c (str, 42);
    <D.22716>:
    i = 1;
    goto <D.18531>;
    <D.18530>:
    monoeg_g_string_append_c (str, 44);
    i = i + 1;
    <D.18531>:
    if (i < rank) goto <D.18530>; else goto <D.18532>;
    <D.18532>:
    monoeg_g_string_append_c (str, 93);
    mono_type_name_check_byref (type, str);
    if (format == 3) goto <D.22717>; else goto <D.22718>;
    <D.22717>:
    D.22707 = type->data.array;
    D.22713 = D.22707->eklass;
    _mono_type_get_assembly_name (D.22713, str);
    <D.22718>:
    goto <D.18533>;
  }
  <D.18534>:
  {
    MonoTypeNameFormat nested_format;

    if (format != 3) goto <D.22720>; else goto <D.22721>;
    <D.22720>:
    iftmp.39 = format;
    goto <D.22722>;
    <D.22721>:
    iftmp.39 = 2;
    <D.22722>:
    nested_format = iftmp.39;
    D.22723 = type->data.klass;
    D.22724 = &D.22723->byval_arg;
    mono_type_get_name_recurse (D.22724, str, 0, nested_format);
    monoeg_g_string_append (str, "[]");
    mono_type_name_check_byref (type, str);
    if (format == 3) goto <D.22725>; else goto <D.22726>;
    <D.22725>:
    D.22723 = type->data.klass;
    _mono_type_get_assembly_name (D.22723, str);
    <D.22726>:
    goto <D.18533>;
  }
  <D.18536>:
  {
    MonoTypeNameFormat nested_format;

    if (format != 3) goto <D.22728>; else goto <D.22729>;
    <D.22728>:
    iftmp.40 = format;
    goto <D.22730>;
    <D.22729>:
    iftmp.40 = 2;
    <D.22730>:
    nested_format = iftmp.40;
    D.22731 = type->data.type;
    mono_type_get_name_recurse (D.22731, str, 0, nested_format);
    monoeg_g_string_append_c (str, 42);
    mono_type_name_check_byref (type, str);
    if (format == 3) goto <D.22732>; else goto <D.22733>;
    <D.22732>:
    D.22731 = type->data.type;
    D.22734 = mono_class_from_mono_type (D.22731);
    _mono_type_get_assembly_name (D.22734, str);
    <D.22733>:
    goto <D.18533>;
  }
  <D.18538>:
  <D.18539>:
  D.22738 = type->data.generic_param;
  D.22739 = D.22738->owner;
  if (D.22739 == 0B) goto <D.22735>; else goto <D.22740>;
  <D.22740>:
  D.22738 = type->data.generic_param;
  D.22741 = &MEM[(struct MonoGenericParamFull *)D.22738].info;
  if (D.22741 == 0B) goto <D.22735>; else goto <D.22736>;
  <D.22735>:
  D.22705 = type->type;
  if (D.22705 == 19) goto <D.22743>; else goto <D.22744>;
  <D.22743>:
  iftmp.41 = "!";
  goto <D.22745>;
  <D.22744>:
  iftmp.41 = "!!";
  <D.22745>:
  D.22738 = type->data.generic_param;
  D.22746 = D.22738->num;
  D.22747 = (int) D.22746;
  monoeg_g_string_append_printf (str, "%s%d", iftmp.41, D.22747);
  goto <D.22737>;
  <D.22736>:
  D.22738 = type->data.generic_param;
  D.22739 = D.22738->owner;
  if (D.22739 != 0B) goto <D.22749>; else goto <D.22750>;
  <D.22749>:
  D.22738 = type->data.generic_param;
  iftmp.42 = &MEM[(struct MonoGenericParamFull *)D.22738].info;
  goto <D.22751>;
  <D.22750>:
  iftmp.42 = 0B;
  <D.22751>:
  D.22752 = iftmp.42->name;
  monoeg_g_string_append (str, D.22752);
  <D.22737>:
  mono_type_name_check_byref (type, str);
  goto <D.18533>;
  <D.18540>:
  klass = mono_class_from_mono_type (type);
  D.22753 = klass->nested_in;
  if (D.22753 != 0B) goto <D.22754>; else goto <D.22755>;
  <D.22754>:
  D.22753 = klass->nested_in;
  D.22756 = &D.22753->byval_arg;
  mono_type_get_name_recurse (D.22756, str, 1, format);
  if (format == 0) goto <D.22757>; else goto <D.22758>;
  <D.22757>:
  monoeg_g_string_append_c (str, 46);
  goto <D.22759>;
  <D.22758>:
  monoeg_g_string_append_c (str, 43);
  <D.22759>:
  goto <D.22760>;
  <D.22755>:
  D.22761 = klass->name_space;
  D.22762 = *D.22761;
  if (D.22762 != 0) goto <D.22763>; else goto <D.22764>;
  <D.22763>:
  D.22761 = klass->name_space;
  monoeg_g_string_append (str, D.22761);
  monoeg_g_string_append_c (str, 46);
  <D.22764>:
  <D.22760>:
  if (format == 0) goto <D.22765>; else goto <D.22766>;
  <D.22765>:
  {
    char * s;
    int len;

    D.22767 = klass->name;
    s = __builtin_strchr (D.22767, 96);
    if (s != 0B) goto <D.22769>; else goto <D.22770>;
    <D.22769>:
    s.44 = (int) s;
    D.22767 = klass->name;
    D.22772 = (int) D.22767;
    iftmp.43 = s.44 - D.22772;
    goto <D.22773>;
    <D.22770>:
    D.22767 = klass->name;
    D.22774 = strlen (D.22767);
    iftmp.43 = (int) D.22774;
    <D.22773>:
    len = iftmp.43;
    D.22767 = klass->name;
    monoeg_g_string_append_len (str, D.22767, len);
  }
  goto <D.22775>;
  <D.22766>:
  D.22767 = klass->name;
  monoeg_g_string_append (str, D.22767);
  <D.22775>:
  if (is_recursed != 0) goto <D.18533>; else goto <D.22776>;
  <D.22776>:
  D.22777 = klass->generic_class;
  if (D.22777 != 0B) goto <D.22778>; else goto <D.22779>;
  <D.22778>:
  {
    struct MonoGenericClass * gclass;
    struct MonoGenericInst * inst;
    MonoTypeNameFormat nested_format;
    int i;

    gclass = klass->generic_class;
    inst = gclass->context.class_inst;
    if (format != 2) goto <D.22781>; else goto <D.22782>;
    <D.22781>:
    iftmp.45 = format;
    goto <D.22783>;
    <D.22782>:
    iftmp.45 = 3;
    <D.22783>:
    nested_format = iftmp.45;
    if (format == 0) goto <D.22784>; else goto <D.22785>;
    <D.22784>:
    monoeg_g_string_append_c (str, 60);
    goto <D.22786>;
    <D.22785>:
    monoeg_g_string_append_c (str, 91);
    <D.22786>:
    i = 0;
    goto <D.18549>;
    <D.18548>:
    {
      struct MonoType * t;

      t = inst->type_argv[i];
      if (i != 0) goto <D.22787>; else goto <D.22788>;
      <D.22787>:
      monoeg_g_string_append_c (str, 44);
      <D.22788>:
      if (nested_format == 3) goto <D.22789>; else goto <D.22790>;
      <D.22789>:
      D.22791 = t->type;
      if (D.22791 != 19) goto <D.22792>; else goto <D.22793>;
      <D.22792>:
      D.22705 = type->type;
      if (D.22705 != 30) goto <D.22794>; else goto <D.22795>;
      <D.22794>:
      monoeg_g_string_append_c (str, 91);
      <D.22795>:
      <D.22793>:
      <D.22790>:
      D.22796 = inst->type_argv[i];
      mono_type_get_name_recurse (D.22796, str, 0, nested_format);
      if (nested_format == 3) goto <D.22797>; else goto <D.22798>;
      <D.22797>:
      D.22791 = t->type;
      if (D.22791 != 19) goto <D.22799>; else goto <D.22800>;
      <D.22799>:
      D.22705 = type->type;
      if (D.22705 != 30) goto <D.22801>; else goto <D.22802>;
      <D.22801>:
      monoeg_g_string_append_c (str, 93);
      <D.22802>:
      <D.22800>:
      <D.22798>:
    }
    i = i + 1;
    <D.18549>:
    D.22803 = inst->type_argc;
    D.22804 = (int) D.22803;
    if (D.22804 > i) goto <D.18548>; else goto <D.18550>;
    <D.18550>:
    if (format == 0) goto <D.22805>; else goto <D.22806>;
    <D.22805>:
    monoeg_g_string_append_c (str, 62);
    goto <D.22807>;
    <D.22806>:
    monoeg_g_string_append_c (str, 93);
    <D.22807>:
  }
  goto <D.22808>;
  <D.22779>:
  D.22809 = klass->generic_container;
  if (D.22809 != 0B) goto <D.22810>; else goto <D.22811>;
  <D.22810>:
  if (format != 2) goto <D.22812>; else goto <D.22813>;
  <D.22812>:
  if (format != 3) goto <D.22814>; else goto <D.22815>;
  <D.22814>:
  {
    int i;

    if (format == 0) goto <D.22816>; else goto <D.22817>;
    <D.22816>:
    monoeg_g_string_append_c (str, 60);
    goto <D.22818>;
    <D.22817>:
    monoeg_g_string_append_c (str, 91);
    <D.22818>:
    i = 0;
    goto <D.18553>;
    <D.18552>:
    if (i != 0) goto <D.22819>; else goto <D.22820>;
    <D.22819>:
    monoeg_g_string_append_c (str, 44);
    <D.22820>:
    D.22809 = klass->generic_container;
    D.22821 = D.22809->type_params;
    i.46 = (unsigned int) i;
    D.22823 = i.46 * 32;
    D.22824 = D.22821 + D.22823;
    D.22825 = D.22824->info.name;
    monoeg_g_string_append (str, D.22825);
    i = i + 1;
    <D.18553>:
    D.22809 = klass->generic_container;
    D.22826 = D.22809->type_argc;
    D.22827 = (int) D.22826;
    if (D.22827 > i) goto <D.18552>; else goto <D.18554>;
    <D.18554>:
    if (format == 0) goto <D.22828>; else goto <D.22829>;
    <D.22828>:
    monoeg_g_string_append_c (str, 62);
    goto <D.22830>;
    <D.22829>:
    monoeg_g_string_append_c (str, 93);
    <D.22830>:
  }
  <D.22815>:
  <D.22813>:
  <D.22811>:
  <D.22808>:
  mono_type_name_check_byref (type, str);
  if (format == 3) goto <D.22831>; else goto <D.22832>;
  <D.22831>:
  D.22705 = type->type;
  if (D.22705 != 19) goto <D.22833>; else goto <D.22834>;
  <D.22833>:
  D.22705 = type->type;
  if (D.22705 != 30) goto <D.22835>; else goto <D.22836>;
  <D.22835>:
  _mono_type_get_assembly_name (klass, str);
  <D.22836>:
  <D.22834>:
  <D.22832>:
  goto <D.18533>;
  <D.18533>:
}


mono_type_name_check_byref (struct MonoType * type, struct GString * str)
{
  unsigned int D.22837;
  unsigned int D.22838;

  D.22837 = BIT_FIELD_REF <*type, 32, 32>;
  D.22838 = D.22837 & 1073741824;
  if (D.22838 != 0) goto <D.22839>; else goto <D.22840>;
  <D.22839>:
  monoeg_g_string_append_c (str, 38);
  <D.22840>:
}


_mono_type_get_assembly_name (struct MonoClass * klass, struct GString * str)
{
  struct MonoImage * D.22841;
  struct MonoAssemblyName * D.22842;
  struct MonoAssembly * ta;
  char * name;

  D.22841 = klass->image;
  ta = D.22841->assembly;
  D.22842 = &ta->aname;
  name = mono_stringify_assembly_name (D.22842);
  monoeg_g_string_append_printf (str, ", %s", name);
  monoeg_g_free (name);
}


mono_type_get_full_name (struct MonoClass * class)
{
  char * D.22843;
  struct MonoType * D.22844;

  D.22844 = mono_class_get_type (class);
  D.22843 = mono_type_get_name_full (D.22844, 1);
  return D.22843;
}


mono_type_get_name (struct MonoType * type)
{
  char * D.22846;

  D.22846 = mono_type_get_name_full (type, 0);
  return D.22846;
}


mono_type_get_underlying_type (struct MonoType * type)
{
  unsigned char D.22848;
  struct MonoClass * D.22851;
  unsigned int D.22852;
  unsigned int D.22853;
  unsigned int D.22856;
  unsigned int D.22857;
  struct MonoType * D.22860;
  struct MonoGenericClass * D.22863;
  struct MonoClass * D.22864;
  unsigned int D.22865;
  unsigned int D.22866;

  D.22848 = type->type;
  if (D.22848 == 17) goto <D.22849>; else goto <D.22850>;
  <D.22849>:
  D.22851 = type->data.klass;
  D.22852 = BIT_FIELD_REF <*D.22851, 32, 160>;
  D.22853 = D.22852 & 16;
  if (D.22853 != 0) goto <D.22854>; else goto <D.22855>;
  <D.22854>:
  D.22856 = BIT_FIELD_REF <*type, 32, 32>;
  D.22857 = D.22856 & 1073741824;
  if (D.22857 == 0) goto <D.22858>; else goto <D.22859>;
  <D.22858>:
  D.22851 = type->data.klass;
  D.22860 = mono_class_enum_basetype (D.22851);
  return D.22860;
  <D.22859>:
  <D.22855>:
  <D.22850>:
  D.22848 = type->type;
  if (D.22848 == 21) goto <D.22861>; else goto <D.22862>;
  <D.22861>:
  D.22863 = type->data.generic_class;
  D.22864 = D.22863->container_class;
  D.22865 = BIT_FIELD_REF <*D.22864, 32, 160>;
  D.22866 = D.22865 & 16;
  if (D.22866 != 0) goto <D.22867>; else goto <D.22868>;
  <D.22867>:
  D.22856 = BIT_FIELD_REF <*type, 32, 32>;
  D.22857 = D.22856 & 1073741824;
  if (D.22857 == 0) goto <D.22869>; else goto <D.22870>;
  <D.22869>:
  D.22863 = type->data.generic_class;
  D.22864 = D.22863->container_class;
  D.22860 = mono_class_enum_basetype (D.22864);
  return D.22860;
  <D.22870>:
  <D.22868>:
  <D.22862>:
  D.22860 = type;
  return D.22860;
}


mono_class_is_open_constructed_type (struct MonoType * t)
{
  unsigned char D.22872;
  int D.22873;
  gboolean D.22874;
  struct MonoClass * D.22875;
  struct MonoType * D.22876;
  struct MonoArrayType * D.22877;
  struct MonoClass * D.22878;
  struct MonoType * D.22879;
  struct MonoType * D.22880;
  struct MonoGenericClass * D.22881;
  struct MonoGenericInst * D.22882;
  <unnamed-unsigned:1> D.22883;
  struct MonoGenericContainer * D.22884;
  _Bool D.22885;

  D.22872 = t->type;
  D.22873 = (int) D.22872;
  switch (D.22873) <default: <D.18580>, case 15: <D.18576>, case 17: <D.18579>, case 18: <D.18578>, case 19: <D.18572>, case 20: <D.18575>, case 21: <D.18577>, case 29: <D.18574>, case 30: <D.18573>>
  <D.18572>:
  <D.18573>:
  D.22874 = 1;
  return D.22874;
  <D.18574>:
  D.22875 = t->data.klass;
  D.22876 = &D.22875->byval_arg;
  D.22874 = mono_class_is_open_constructed_type (D.22876);
  return D.22874;
  <D.18575>:
  D.22877 = t->data.array;
  D.22878 = D.22877->eklass;
  D.22879 = &D.22878->byval_arg;
  D.22874 = mono_class_is_open_constructed_type (D.22879);
  return D.22874;
  <D.18576>:
  D.22880 = t->data.type;
  D.22874 = mono_class_is_open_constructed_type (D.22880);
  return D.22874;
  <D.18577>:
  D.22881 = t->data.generic_class;
  D.22882 = D.22881->context.class_inst;
  D.22883 = D.22882->is_open;
  D.22874 = (gboolean) D.22883;
  return D.22874;
  <D.18578>:
  <D.18579>:
  D.22875 = t->data.klass;
  D.22884 = D.22875->generic_container;
  D.22885 = D.22884 != 0B;
  D.22874 = (gboolean) D.22885;
  return D.22874;
  <D.18580>:
  D.22874 = 0;
  return D.22874;
}


mono_generic_class_get_context (struct MonoGenericClass * gclass)
{
  struct MonoGenericContext * D.22887;

  D.22887 = &gclass->context;
  return D.22887;
}


mono_class_get_context (struct MonoClass * class)
{
  struct MonoGenericContext * D.22889;
  struct MonoGenericContext * iftmp.47;
  struct MonoGenericClass * D.22891;

  D.22891 = class->generic_class;
  if (D.22891 != 0B) goto <D.22892>; else goto <D.22893>;
  <D.22892>:
  D.22891 = class->generic_class;
  iftmp.47 = mono_generic_class_get_context (D.22891);
  goto <D.22894>;
  <D.22893>:
  iftmp.47 = 0B;
  <D.22894>:
  D.22889 = iftmp.47;
  return D.22889;
}


mono_class_get_generic_container (struct MonoClass * klass)
{
  unsigned int D.22896;
  unsigned int D.22897;
  _Bool D.22898;
  long int D.22899;
  long int D.22900;
  struct MonoGenericContainer * D.22903;

  D.22896 = BIT_FIELD_REF <*klass, 32, 192>;
  D.22897 = D.22896 & 4;
  D.22898 = D.22897 == 0;
  D.22899 = (long int) D.22898;
  D.22900 = __builtin_expect (D.22899, 0);
  if (D.22900 != 0) goto <D.22901>; else goto <D.22902>;
  <D.22901>:
  monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "class.c", 752, "klass->is_generic");
  <D.22902>:
  D.22903 = klass->generic_container;
  return D.22903;
}


mono_class_get_generic_class (struct MonoClass * klass)
{
  unsigned int D.22905;
  unsigned int D.22906;
  _Bool D.22907;
  long int D.22908;
  long int D.22909;
  struct MonoGenericClass * D.22912;

  D.22905 = BIT_FIELD_REF <*klass, 32, 192>;
  D.22906 = D.22905 & 8;
  D.22907 = D.22906 == 0;
  D.22908 = (long int) D.22907;
  D.22909 = __builtin_expect (D.22908, 0);
  if (D.22909 != 0) goto <D.22910>; else goto <D.22911>;
  <D.22910>:
  monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "class.c", 765, "klass->is_inflated");
  <D.22911>:
  D.22912 = klass->generic_class;
  return D.22912;
}


mono_class_inflate_generic_type_with_mempool (struct MonoImage * image, struct MonoType * type, struct MonoGenericContext * context, struct MonoError * error)
{
  int D.22916;
  struct MonoType * D.22919;
  long unsigned int D.22924;
  long unsigned int D.22925;
  struct MonoType * inflated;

  inflated = 0B;
  mono_error_init (error);
  if (context != 0B) goto <D.22914>; else goto <D.22915>;
  <D.22914>:
  inflated = inflate_generic_type (image, type, context, error);
  <D.22915>:
  D.22916 = mono_error_ok (error);
  if (D.22916 == 0) goto <D.22917>; else goto <D.22918>;
  <D.22917>:
  D.22919 = 0B;
  return D.22919;
  <D.22918>:
  if (inflated == 0B) goto <D.22920>; else goto <D.22921>;
  <D.22920>:
  {
    struct MonoType * shared;

    shared = mono_metadata_get_shared_type (type);
    if (shared != 0B) goto <D.22922>; else goto <D.22923>;
    <D.22922>:
    D.22919 = shared;
    return D.22919;
    <D.22923>:
    D.22919 = mono_metadata_type_dup (image, type);
    return D.22919;
  }
  <D.22921>:
  D.22924 = mono_stats.inflated_type_count;
  D.22925 = D.22924 + 1;
  mono_stats.inflated_type_count = D.22925;
  D.22919 = inflated;
  return D.22919;
}


inflate_generic_type (struct MonoImage * image, struct MonoType * type, struct MonoGenericContext * context, struct MonoError * error)
{
  unsigned char D.22927;
  int D.22928;
  struct MonoGenericParam * D.22929;
  short unsigned int D.22930;
  struct MonoType *[0:] * D.22934;
  struct MonoType * D.22935;
  <unnamed-unsigned:22> D.22936;
  int D.22937;
  struct MonoGenericParamInfo * iftmp.48;
  struct MonoGenericContainer * D.22941;
  const char * iftmp.49;
  struct MonoType * D.22949;
  int D.22950;
  struct MonoGenericParamInfo * iftmp.50;
  const char * iftmp.51;
  unsigned char D.22961;
  int D.22962;
  <unnamed-unsigned:1> D.22963;
  short unsigned int D.22964;
  <unnamed-unsigned:22> D.22967;
  int D.22968;
  struct MonoGenericParamInfo * iftmp.52;
  const char * iftmp.53;
  struct MonoType * D.22979;
  int D.22980;
  struct MonoGenericParamInfo * iftmp.54;
  const char * iftmp.55;
  unsigned char D.22991;
  int D.22992;
  struct MonoType * D.22993;
  int D.22997;
  struct MonoClass * D.22998;
  struct MonoArrayType * D.22999;
  struct MonoType * D.23000;
  int D.23004;
  struct MonoArrayType * D.23005;
  struct MonoClass * D.23006;
  struct MonoGenericInst * D.23007;
  unsigned int D.23008;
  unsigned int D.23009;
  int D.23012;
  struct MonoClass * D.23017;
  <unnamed-unsigned:1> D.23018;
  int D.23019;
  struct MonoGenericClass * D.23020;
  struct MonoGenericInst * D.23025;
  int D.23026;
  struct MonoImage * D.23031;
  <unnamed-unsigned:1> D.23032;
  int D.23033;

  mono_error_init (error);
  D.22927 = type->type;
  D.22928 = (int) D.22927;
  switch (D.22928) <default: <D.18622>, case 17: <D.18616>, case 18: <D.18615>, case 19: <D.18597>, case 20: <D.18607>, case 21: <D.18611>, case 29: <D.18603>, case 30: <D.18591>>
  <D.18591>:
  {
    struct MonoType * nt;
    int num;
    struct MonoGenericInst * inst;

    D.22929 = type->data.generic_param;
    D.22930 = D.22929->num;
    num = (int) D.22930;
    inst = context->method_inst;
    if (inst == 0B) goto <D.22931>; else goto <D.22933>;
    <D.22933>:
    D.22934 = &inst->type_argv;
    if (D.22934 == 0B) goto <D.22931>; else goto <D.22932>;
    <D.22931>:
    D.22935 = 0B;
    return D.22935;
    <D.22932>:
    D.22936 = inst->type_argc;
    D.22937 = (int) D.22936;
    if (D.22937 <= num) goto <D.22938>; else goto <D.22939>;
    <D.22938>:
    {
      struct MonoGenericParamInfo * info;

      D.22929 = type->data.generic_param;
      D.22941 = D.22929->owner;
      if (D.22941 != 0B) goto <D.22942>; else goto <D.22943>;
      <D.22942>:
      D.22929 = type->data.generic_param;
      iftmp.48 = &MEM[(struct MonoGenericParamFull *)D.22929].info;
      goto <D.22944>;
      <D.22943>:
      iftmp.48 = 0B;
      <D.22944>:
      info = iftmp.48;
      if (info != 0B) goto <D.22946>; else goto <D.22947>;
      <D.22946>:
      iftmp.49 = info->name;
      goto <D.22948>;
      <D.22947>:
      iftmp.49 = "";
      <D.22948>:
      D.22936 = inst->type_argc;
      D.22937 = (int) D.22936;
      mono_error_set_bad_image (error, image, "MVAR %d (%s) cannot be expanded in this context with %d instantiations", num, iftmp.49, D.22937);
      D.22935 = 0B;
      return D.22935;
    }
    <D.22939>:
    D.22949 = inst->type_argv[num];
    D.22950 = is_valid_generic_argument (D.22949);
    if (D.22950 == 0) goto <D.22951>; else goto <D.22952>;
    <D.22951>:
    {
      struct MonoGenericParamInfo * info;

      D.22929 = type->data.generic_param;
      D.22941 = D.22929->owner;
      if (D.22941 != 0B) goto <D.22954>; else goto <D.22955>;
      <D.22954>:
      D.22929 = type->data.generic_param;
      iftmp.50 = &MEM[(struct MonoGenericParamFull *)D.22929].info;
      goto <D.22956>;
      <D.22955>:
      iftmp.50 = 0B;
      <D.22956>:
      info = iftmp.50;
      if (info != 0B) goto <D.22958>; else goto <D.22959>;
      <D.22958>:
      iftmp.51 = info->name;
      goto <D.22960>;
      <D.22959>:
      iftmp.51 = "";
      <D.22960>:
      D.22949 = inst->type_argv[num];
      D.22961 = D.22949->type;
      D.22962 = (int) D.22961;
      mono_error_set_bad_image (error, image, "MVAR %d (%s) cannot be expanded with type 0x%x", num, iftmp.51, D.22962);
      D.22935 = 0B;
      return D.22935;
    }
    <D.22952>:
    D.22949 = inst->type_argv[num];
    nt = mono_metadata_type_dup (image, D.22949);
    D.22963 = type->byref;
    nt->byref = D.22963;
    D.22964 = type->attrs;
    nt->attrs = D.22964;
    D.22935 = nt;
    return D.22935;
  }
  <D.18597>:
  {
    struct MonoType * nt;
    int num;
    struct MonoGenericInst * inst;

    D.22929 = type->data.generic_param;
    D.22930 = D.22929->num;
    num = (int) D.22930;
    inst = context->class_inst;
    if (inst == 0B) goto <D.22965>; else goto <D.22966>;
    <D.22965>:
    D.22935 = 0B;
    return D.22935;
    <D.22966>:
    D.22967 = inst->type_argc;
    D.22968 = (int) D.22967;
    if (D.22968 <= num) goto <D.22969>; else goto <D.22970>;
    <D.22969>:
    {
      struct MonoGenericParamInfo * info;

      D.22929 = type->data.generic_param;
      D.22941 = D.22929->owner;
      if (D.22941 != 0B) goto <D.22972>; else goto <D.22973>;
      <D.22972>:
      D.22929 = type->data.generic_param;
      iftmp.52 = &MEM[(struct MonoGenericParamFull *)D.22929].info;
      goto <D.22974>;
      <D.22973>:
      iftmp.52 = 0B;
      <D.22974>:
      info = iftmp.52;
      if (info != 0B) goto <D.22976>; else goto <D.22977>;
      <D.22976>:
      iftmp.53 = info->name;
      goto <D.22978>;
      <D.22977>:
      iftmp.53 = "";
      <D.22978>:
      D.22967 = inst->type_argc;
      D.22968 = (int) D.22967;
      mono_error_set_bad_image (error, image, "VAR %d (%s) cannot be expanded in this context with %d instantiations", num, iftmp.53, D.22968);
      D.22935 = 0B;
      return D.22935;
    }
    <D.22970>:
    D.22979 = inst->type_argv[num];
    D.22980 = is_valid_generic_argument (D.22979);
    if (D.22980 == 0) goto <D.22981>; else goto <D.22982>;
    <D.22981>:
    {
      struct MonoGenericParamInfo * info;

      D.22929 = type->data.generic_param;
      D.22941 = D.22929->owner;
      if (D.22941 != 0B) goto <D.22984>; else goto <D.22985>;
      <D.22984>:
      D.22929 = type->data.generic_param;
      iftmp.54 = &MEM[(struct MonoGenericParamFull *)D.22929].info;
      goto <D.22986>;
      <D.22985>:
      iftmp.54 = 0B;
      <D.22986>:
      info = iftmp.54;
      if (info != 0B) goto <D.22988>; else goto <D.22989>;
      <D.22988>:
      iftmp.55 = info->name;
      goto <D.22990>;
      <D.22989>:
      iftmp.55 = "";
      <D.22990>:
      D.22979 = inst->type_argv[num];
      D.22991 = D.22979->type;
      D.22992 = (int) D.22991;
      mono_error_set_bad_image (error, image, "VAR %d (%s) cannot be expanded with type 0x%x", num, iftmp.55, D.22992);
      D.22935 = 0B;
      return D.22935;
    }
    <D.22982>:
    D.22979 = inst->type_argv[num];
    nt = mono_metadata_type_dup (image, D.22979);
    D.22963 = type->byref;
    nt->byref = D.22963;
    D.22964 = type->attrs;
    nt->attrs = D.22964;
    D.22935 = nt;
    return D.22935;
  }
  <D.18603>:
  {
    struct MonoClass * eclass;
    struct MonoType * nt;
    struct MonoType * inflated;

    eclass = type->data.klass;
    D.22993 = &eclass->byval_arg;
    inflated = inflate_generic_type (0B, D.22993, context, error);
    if (inflated == 0B) goto <D.22994>; else goto <D.22996>;
    <D.22996>:
    D.22997 = mono_error_ok (error);
    if (D.22997 == 0) goto <D.22994>; else goto <D.22995>;
    <D.22994>:
    D.22935 = 0B;
    return D.22935;
    <D.22995>:
    nt = mono_metadata_type_dup (image, type);
    D.22998 = mono_class_from_mono_type (inflated);
    nt->data.klass = D.22998;
    mono_metadata_free_type (inflated);
    D.22935 = nt;
    return D.22935;
  }
  <D.18607>:
  {
    struct MonoClass * eclass;
    struct MonoType * nt;
    struct MonoType * inflated;

    D.22999 = type->data.array;
    eclass = D.22999->eklass;
    D.23000 = &eclass->byval_arg;
    inflated = inflate_generic_type (0B, D.23000, context, error);
    if (inflated == 0B) goto <D.23001>; else goto <D.23003>;
    <D.23003>:
    D.23004 = mono_error_ok (error);
    if (D.23004 == 0) goto <D.23001>; else goto <D.23002>;
    <D.23001>:
    D.22935 = 0B;
    return D.22935;
    <D.23002>:
    nt = mono_metadata_type_dup (image, type);
    D.23005 = nt->data.array;
    D.23006 = mono_class_from_mono_type (inflated);
    D.23005->eklass = D.23006;
    mono_metadata_free_type (inflated);
    D.22935 = nt;
    return D.22935;
  }
  <D.18611>:
  {
    struct MonoGenericClass * gclass;
    struct MonoGenericInst * inst;
    struct MonoType * nt;

    gclass = type->data.generic_class;
    D.23007 = gclass->context.class_inst;
    D.23008 = BIT_FIELD_REF <*D.23007, 32, 32>;
    D.23009 = D.23008 & 4194304;
    if (D.23009 == 0) goto <D.23010>; else goto <D.23011>;
    <D.23010>:
    D.22935 = 0B;
    return D.22935;
    <D.23011>:
    D.23007 = gclass->context.class_inst;
    inst = mono_metadata_inflate_generic_inst (D.23007, context, error);
    D.23012 = mono_error_ok (error);
    if (D.23012 == 0) goto <D.23013>; else goto <D.23014>;
    <D.23013>:
    D.22935 = 0B;
    return D.22935;
    <D.23014>:
    D.23007 = gclass->context.class_inst;
    if (D.23007 != inst) goto <D.23015>; else goto <D.23016>;
    <D.23015>:
    D.23017 = gclass->container_class;
    D.23018 = gclass->is_dynamic;
    D.23019 = (int) D.23018;
    gclass = mono_metadata_lookup_generic_class (D.23017, inst, D.23019);
    <D.23016>:
    D.23020 = type->data.generic_class;
    if (D.23020 == gclass) goto <D.23021>; else goto <D.23022>;
    <D.23021>:
    D.22935 = 0B;
    return D.22935;
    <D.23022>:
    nt = mono_metadata_type_dup (image, type);
    nt->data.generic_class = gclass;
    D.22935 = nt;
    return D.22935;
  }
  <D.18615>:
  <D.18616>:
  {
    struct MonoClass * klass;
    struct MonoGenericContainer * container;
    struct MonoGenericInst * inst;
    struct MonoGenericClass * gclass;
    struct MonoType * nt;

    klass = type->data.klass;
    container = klass->generic_container;
    gclass = 0B;
    if (container == 0B) goto <D.23023>; else goto <D.23024>;
    <D.23023>:
    D.22935 = 0B;
    return D.22935;
    <D.23024>:
    D.23025 = container->context.class_inst;
    inst = mono_metadata_inflate_generic_inst (D.23025, context, error);
    D.23026 = mono_error_ok (error);
    if (D.23026 == 0) goto <D.23027>; else goto <D.23028>;
    <D.23027>:
    D.22935 = 0B;
    return D.22935;
    <D.23028>:
    D.23025 = container->context.class_inst;
    if (D.23025 == inst) goto <D.23029>; else goto <D.23030>;
    <D.23029>:
    D.22935 = 0B;
    return D.22935;
    <D.23030>:
    D.23031 = klass->image;
    D.23032 = D.23031->dynamic;
    D.23033 = (int) D.23032;
    gclass = mono_metadata_lookup_generic_class (klass, inst, D.23033);
    nt = mono_metadata_type_dup (image, type);
    nt->type = 21;
    nt->data.generic_class = gclass;
    D.22935 = nt;
    return D.22935;
  }
  <D.18622>:
  D.22935 = 0B;
  return D.22935;
  D.22935 = 0B;
  return D.22935;
}


is_valid_generic_argument (struct MonoType * type)
{
  unsigned char D.23035;
  int D.23036;
  gboolean D.23037;

  D.23035 = type->type;
  D.23036 = (int) D.23035;
  switch (D.23036) <default: <D.23038>, case 1: <D.18584>>
  <D.18584>:
  D.23037 = 0;
  return D.23037;
  <D.23038>:
  D.23037 = 1;
  return D.23037;
}


mono_class_inflate_generic_type (struct MonoType * type, struct MonoGenericContext * context)
{
  int D.23040;
  struct MonoType * D.23043;
  struct MonoError error;
  struct MonoType * result;

  try
    {
      result = mono_class_inflate_generic_type_checked (type, context, &error);
      D.23040 = mono_error_ok (&error);
      if (D.23040 == 0) goto <D.23041>; else goto <D.23042>;
      <D.23041>:
      mono_error_cleanup (&error);
      D.23043 = 0B;
      return D.23043;
      <D.23042>:
      D.23043 = result;
      return D.23043;
    }
  finally
    {
      error = {CLOBBER};
    }
}


mono_class_inflate_generic_type_checked (struct MonoType * type, struct MonoGenericContext * context, struct MonoError * error)
{
  struct MonoType * D.23046;

  D.23046 = mono_class_inflate_generic_type_with_mempool (0B, type, context, error);
  return D.23046;
}


mono_class_inflate_generic_class (struct MonoClass * gklass, struct MonoGenericContext * context)
{
  int D.23048;
  _Bool D.23049;
  long int D.23050;
  long int D.23051;
  struct MonoClass * D.23054;
  struct MonoError error;
  struct MonoClass * res;

  try
    {
      res = mono_class_inflate_generic_class_checked (gklass, context, &error);
      D.23048 = mono_error_ok (&error);
      D.23049 = D.23048 == 0;
      D.23050 = (long int) D.23049;
      D.23051 = __builtin_expect (D.23050, 0);
      if (D.23051 != 0) goto <D.23052>; else goto <D.23053>;
      <D.23052>:
      monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "class.c", 905, "mono_error_ok (&error)");
      <D.23053>:
      D.23054 = res;
      return D.23054;
    }
  finally
    {
      error = {CLOBBER};
    }
}


mono_class_inflate_generic_method (struct MonoMethod * method, struct MonoGenericContext * context)
{
  struct MonoMethod * D.23057;

  D.23057 = mono_class_inflate_generic_method_full (method, 0B, context);
  return D.23057;
}


mono_class_inflate_generic_method_full (struct MonoMethod * method, struct MonoClass * klass_hint, struct MonoGenericContext * context)
{
  int D.23059;
  const char * D.23062;
  struct MonoMethod * D.23063;
  struct MonoError error;
  struct MonoMethod * res;

  try
    {
      res = mono_class_inflate_generic_method_full_checked (method, klass_hint, context, &error);
      D.23059 = mono_error_ok (&error);
      if (D.23059 == 0) goto <D.23060>; else goto <D.23061>;
      <D.23060>:
      D.23062 = mono_error_get_message (&error);
      monoeg_g_log (0B, 4, "Could not inflate generic method due to %s", D.23062);
      <D.18694>:
      goto <D.18694>;
      <D.23061>:
      D.23063 = res;
      return D.23063;
    }
  finally
    {
      error = {CLOBBER};
    }
}


mono_class_inflate_generic_method_full_checked (struct MonoMethod * method, struct MonoClass * klass_hint, struct MonoGenericContext * context, struct MonoError * error)
{
  int D.23066;
  struct MonoMethod * D.23069;
  int D.23070;
  unsigned int D.23073;
  unsigned int D.23074;
  unsigned int D.23078;
  struct MonoGenericInst * D.23080;
  struct MonoClass * D.23081;
  struct MonoGenericContainer * D.23082;
  struct MonoGenericInst * D.23084;
  int iftmp.56;
  struct MonoImage * D.23089;
  unsigned int D.23090;
  unsigned int D.23091;
  unsigned int D.23093;
  unsigned int D.23094;
  struct MonoGenericContainer * D.23096;
  struct MonoGenericInst * D.23097;
  unsigned char D.23099;
  <unnamed-unsigned:1> D.23100;
  struct MonoGenericContainer * D.23105;
  struct MonoGenericInst * D.23106;
  struct MonoMethod * D.23109;
  struct MonoClass * D.23110;
  struct MonoGenericClass * D.23111;
  _Bool D.23112;
  long int D.23113;
  long int D.23114;
  struct MonoGenericContainer * D.23117;
  struct MonoGenericInst * D.23120;
  struct MonoGenericInst * D.23124;
  long unsigned int D.23127;
  long unsigned int D.23128;
  unsigned int inflated_methods_size.57;
  unsigned int inflated_methods_size.58;
  const char * D.23133;
  unsigned int D.23134;
  unsigned int D.23135;
  struct MonoMethodPInvoke * D.23138;
  struct MonoMethod * D.23140;
  struct MonoGenericClass * D.23148;
  struct MonoClass * D.23150;
  struct MonoGenericInst * D.23152;
  struct MonoClass * D.23155;
  struct MonoType * D.23158;
  int D.23159;
  struct MonoClass * iftmp.59;
  struct MonoMethod * result;
  struct MonoMethodInflated * iresult;
  struct MonoMethodInflated * cached;
  struct MonoMethodSignature * sig;
  struct MonoGenericContext tmp_context;
  gboolean is_mb_open;
  void fail = <<< error >>>;

  try
    {
      is_mb_open = 0;
      mono_error_init (error);
      goto <D.18710>;
      <D.18709>:
      {
        struct MonoGenericContext * method_context;
        struct MonoMethodInflated * imethod;

        method_context = mono_method_get_context (method);
        imethod = method;
        tmp_context = inflate_generic_context (method_context, context, error);
        D.23066 = mono_error_ok (error);
        if (D.23066 == 0) goto <D.23067>; else goto <D.23068>;
        <D.23067>:
        D.23069 = 0B;
        return D.23069;
        <D.23068>:
        context = &tmp_context;
        D.23070 = mono_metadata_generic_context_equal (method_context, context);
        if (D.23070 != 0) goto <D.23071>; else goto <D.23072>;
        <D.23071>:
        D.23069 = method;
        return D.23069;
        <D.23072>:
        method = imethod->declaring;
      }
      <D.18710>:
      D.23073 = BIT_FIELD_REF <*method, 32, 160>;
      D.23074 = D.23073 & 4096;
      if (D.23074 != 0) goto <D.18709>; else goto <D.18711>;
      <D.18711>:
      D.23073 = BIT_FIELD_REF <*method, 32, 160>;
      D.23078 = D.23073 & 2048;
      if (D.23078 == 0) goto <D.23077>; else goto <D.23079>;
      <D.23079>:
      D.23080 = context->method_inst;
      if (D.23080 == 0B) goto <D.23077>; else goto <D.23076>;
      <D.23077>:
      D.23081 = method->klass;
      D.23082 = D.23081->generic_container;
      if (D.23082 == 0B) goto <D.23075>; else goto <D.23083>;
      <D.23083>:
      D.23084 = context->class_inst;
      if (D.23084 == 0B) goto <D.23075>; else goto <D.23076>;
      <D.23075>:
      D.23069 = method;
      return D.23069;
      <D.23076>:
      D.23073 = BIT_FIELD_REF <*method, 32, 160>;
      D.23078 = D.23073 & 2048;
      if (D.23078 != 0) goto <D.23088>; else goto <D.23086>;
      <D.23088>:
      D.23081 = method->klass;
      D.23089 = D.23081->image;
      D.23090 = BIT_FIELD_REF <*D.23089, 32, 128>;
      D.23091 = D.23090 & 8;
      if (D.23091 != 0) goto <D.23092>; else goto <D.23086>;
      <D.23092>:
      D.23081 = method->klass;
      D.23093 = BIT_FIELD_REF <*D.23081, 32, 160>;
      D.23094 = D.23093 & 128;
      if (D.23094 == 0) goto <D.23095>; else goto <D.23086>;
      <D.23095>:
      D.23080 = context->method_inst;
      D.23096 = mono_method_get_generic_container (method);
      D.23097 = D.23096->context.method_inst;
      if (D.23080 == D.23097) goto <D.23098>; else goto <D.23086>;
      <D.23098>:
      iftmp.56 = 1;
      goto <D.23087>;
      <D.23086>:
      iftmp.56 = 0;
      <D.23087>:
      is_mb_open = iftmp.56;
      iresult = monoeg_malloc0 (48);
      iresult->context = *context;
      iresult->declaring = method;
      D.23099 = (unsigned char) is_mb_open;
      D.23100 = (<unnamed-unsigned:1>) D.23099;
      iresult->method.method.is_mb_open = D.23100;
      D.23080 = context->method_inst;
      if (D.23080 == 0B) goto <D.23101>; else goto <D.23102>;
      <D.23101>:
      D.23073 = BIT_FIELD_REF <*method, 32, 160>;
      D.23078 = D.23073 & 2048;
      if (D.23078 != 0) goto <D.23103>; else goto <D.23104>;
      <D.23103>:
      D.23105 = mono_method_get_generic_container (method);
      D.23106 = D.23105->context.method_inst;
      iresult->context.method_inst = D.23106;
      <D.23104>:
      <D.23102>:
      D.23084 = context->class_inst;
      if (D.23084 == 0B) goto <D.23107>; else goto <D.23108>;
      <D.23107>:
      D.23109 = iresult->declaring;
      D.23110 = D.23109->klass;
      D.23111 = D.23110->generic_class;
      D.23112 = D.23111 != 0B;
      D.23113 = (long int) D.23112;
      D.23114 = __builtin_expect (D.23113, 0);
      if (D.23114 != 0) goto <D.23115>; else goto <D.23116>;
      <D.23115>:
      monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "class.c", 1059, "!iresult->declaring->klass->generic_class");
      <D.23116>:
      D.23109 = iresult->declaring;
      D.23110 = D.23109->klass;
      D.23117 = D.23110->generic_container;
      if (D.23117 != 0B) goto <D.23118>; else goto <D.23119>;
      <D.23118>:
      D.23109 = iresult->declaring;
      D.23110 = D.23109->klass;
      D.23117 = D.23110->generic_container;
      D.23120 = D.23117->context.class_inst;
      iresult->context.class_inst = D.23120;
      goto <D.23121>;
      <D.23119>:
      D.23109 = iresult->declaring;
      D.23110 = D.23109->klass;
      D.23111 = D.23110->generic_class;
      if (D.23111 != 0B) goto <D.23122>; else goto <D.23123>;
      <D.23122>:
      D.23109 = iresult->declaring;
      D.23110 = D.23109->klass;
      D.23111 = D.23110->generic_class;
      D.23124 = D.23111->context.class_inst;
      iresult->context.class_inst = D.23124;
      <D.23123>:
      <D.23121>:
      <D.23108>:
      mono_loader_lock ();
      cached = mono_method_inflated_lookup (iresult, 0);
      if (cached != 0B) goto <D.23125>; else goto <D.23126>;
      <D.23125>:
      mono_loader_unlock ();
      monoeg_g_free (iresult);
      D.23069 = cached;
      return D.23069;
      <D.23126>:
      D.23127 = mono_stats.inflated_method_count;
      D.23128 = D.23127 + 1;
      mono_stats.inflated_method_count = D.23128;
      inflated_methods_size.57 = inflated_methods_size;
      inflated_methods_size.58 = inflated_methods_size.57 + 48;
      inflated_methods_size = inflated_methods_size.58;
      sig = mono_method_signature (method);
      if (sig == 0B) goto <D.23131>; else goto <D.23132>;
      <D.23131>:
      {
        char * name;

        D.23081 = method->klass;
        name = mono_type_get_full_name (D.23081);
        D.23081 = method->klass;
        D.23089 = D.23081->image;
        D.23133 = method->name;
        mono_error_set_bad_image (error, D.23089, "Could not resolve signature of method %s:%s", name, D.23133);
        monoeg_g_free (name);
        goto fail;
      }
      <D.23132>:
      D.23134 = BIT_FIELD_REF <*sig, 32, 64>;
      D.23135 = D.23134 & 16777216;
      if (D.23135 != 0) goto <D.23136>; else goto <D.23137>;
      <D.23136>:
      D.23138 = &iresult->method.pinvoke;
      memcpy (D.23138, method, 32);
      goto <D.23139>;
      <D.23137>:
      D.23140 = &iresult->method.method;
      memcpy (D.23140, method, 24);
      <D.23139>:
      result = iresult;
      result->is_inflated = 1;
      result->is_generic = 0;
      result->sre_method = 0;
      result->signature = 0B;
      D.23099 = (unsigned char) is_mb_open;
      D.23100 = (<unnamed-unsigned:1>) D.23099;
      result->is_mb_open = D.23100;
      D.23080 = context->method_inst;
      if (D.23080 == 0B) goto <D.23141>; else goto <D.23142>;
      <D.23141>:
      {
        struct MonoGenericContainer * generic_container;

        generic_container = mono_method_get_generic_container (method);
        if (generic_container != 0B) goto <D.23143>; else goto <D.23144>;
        <D.23143>:
        result->is_generic = 1;
        mono_method_set_generic_container (result, generic_container);
        <D.23144>:
      }
      <D.23142>:
      if (klass_hint == 0B) goto <D.23145>; else goto <D.23147>;
      <D.23147>:
      D.23148 = klass_hint->generic_class;
      if (D.23148 == 0B) goto <D.23145>; else goto <D.23149>;
      <D.23149>:
      D.23148 = klass_hint->generic_class;
      D.23150 = D.23148->container_class;
      D.23081 = method->klass;
      if (D.23150 != D.23081) goto <D.23145>; else goto <D.23151>;
      <D.23151>:
      D.23148 = klass_hint->generic_class;
      D.23152 = D.23148->context.class_inst;
      D.23084 = context->class_inst;
      if (D.23152 != D.23084) goto <D.23145>; else goto <D.23146>;
      <D.23145>:
      klass_hint = 0B;
      <D.23146>:
      D.23081 = method->klass;
      D.23082 = D.23081->generic_container;
      if (D.23082 != 0B) goto <D.23153>; else goto <D.23154>;
      <D.23153>:
      result->klass = klass_hint;
      <D.23154>:
      D.23155 = result->klass;
      if (D.23155 == 0B) goto <D.23156>; else goto <D.23157>;
      <D.23156>:
      {
        struct MonoType * inflated;

        D.23081 = method->klass;
        D.23158 = &D.23081->byval_arg;
        inflated = inflate_generic_type (0B, D.23158, context, error);
        D.23159 = mono_error_ok (error);
        if (D.23159 == 0) goto fail; else goto <D.23160>;
        <D.23160>:
        if (inflated != 0B) goto <D.23162>; else goto <D.23163>;
        <D.23162>:
        iftmp.59 = mono_class_from_mono_type (inflated);
        goto <D.23164>;
        <D.23163>:
        iftmp.59 = method->klass;
        <D.23164>:
        result->klass = iftmp.59;
        if (inflated != 0B) goto <D.23165>; else goto <D.23166>;
        <D.23165>:
        mono_metadata_free_type (inflated);
        <D.23166>:
      }
      <D.23157>:
      mono_method_inflated_lookup (iresult, 1);
      mono_loader_unlock ();
      D.23069 = result;
      return D.23069;
      fail:
      mono_loader_unlock ();
      monoeg_g_free (iresult);
      D.23069 = 0B;
      return D.23069;
    }
  finally
    {
      tmp_context = {CLOBBER};
    }
}


inflate_generic_context (struct MonoGenericContext * context, struct MonoGenericContext * inflate_with, struct MonoError * error)
{
  struct MonoGenericInst * D.23170;
  int D.23173;
  struct MonoGenericInst * D.23175;
  int D.23178;
  struct MonoGenericInst * class_inst;
  struct MonoGenericInst * method_inst;
  struct MonoGenericContext res;
  void fail = <<< error >>>;

  try
    {
      class_inst = 0B;
      method_inst = 0B;
      res.class_inst = 0B;
      res.method_inst = 0B;
      mono_error_init (error);
      D.23170 = context->class_inst;
      if (D.23170 != 0B) goto <D.23171>; else goto <D.23172>;
      <D.23171>:
      D.23170 = context->class_inst;
      class_inst = mono_metadata_inflate_generic_inst (D.23170, inflate_with, error);
      D.23173 = mono_error_ok (error);
      if (D.23173 == 0) goto fail; else goto <D.23174>;
      <D.23174>:
      <D.23172>:
      D.23175 = context->method_inst;
      if (D.23175 != 0B) goto <D.23176>; else goto <D.23177>;
      <D.23176>:
      D.23175 = context->method_inst;
      method_inst = mono_metadata_inflate_generic_inst (D.23175, inflate_with, error);
      D.23178 = mono_error_ok (error);
      if (D.23178 == 0) goto fail; else goto <D.23179>;
      <D.23179>:
      <D.23177>:
      res.class_inst = class_inst;
      res.method_inst = method_inst;
      fail:
      <retval> = res;
      return <retval>;
    }
  finally
    {
      res = {CLOBBER};
    }
}


mono_get_inflated_method (struct MonoMethod * method)
{
  struct MonoMethod * D.23182;

  D.23182 = method;
  return D.23182;
}


mono_method_get_context_general (struct MonoMethod * method, gboolean uninflated)
{
  unsigned int D.23184;
  unsigned int D.23185;
  struct MonoGenericContext * D.23188;
  unsigned int D.23191;
  struct MonoGenericContainer * D.23194;
  struct MonoClass * D.23195;
  struct MonoGenericContainer * D.23196;

  D.23184 = BIT_FIELD_REF <*method, 32, 160>;
  D.23185 = D.23184 & 4096;
  if (D.23185 != 0) goto <D.23186>; else goto <D.23187>;
  <D.23186>:
  {
    struct MonoMethodInflated * imethod;

    imethod = method;
    D.23188 = &imethod->context;
    return D.23188;
  }
  <D.23187>:
  if (uninflated == 0) goto <D.23189>; else goto <D.23190>;
  <D.23189>:
  D.23188 = 0B;
  return D.23188;
  <D.23190>:
  D.23184 = BIT_FIELD_REF <*method, 32, 160>;
  D.23191 = D.23184 & 2048;
  if (D.23191 != 0) goto <D.23192>; else goto <D.23193>;
  <D.23192>:
  D.23194 = mono_method_get_generic_container (method);
  D.23188 = &D.23194->context;
  return D.23188;
  <D.23193>:
  D.23195 = method->klass;
  D.23196 = D.23195->generic_container;
  if (D.23196 != 0B) goto <D.23197>; else goto <D.23198>;
  <D.23197>:
  D.23195 = method->klass;
  D.23196 = D.23195->generic_container;
  D.23188 = &D.23196->context;
  return D.23188;
  <D.23198>:
  D.23188 = 0B;
  return D.23188;
}


mono_method_get_context (struct MonoMethod * method)
{
  struct MonoGenericContext * D.23200;

  D.23200 = mono_method_get_context_general (method, 0);
  return D.23200;
}


mono_method_get_generic_container (struct MonoMethod * method)
{
  unsigned int D.23202;
  unsigned int D.23203;
  struct MonoGenericContainer * D.23206;
  struct MonoClass * D.23207;
  struct MonoImage * D.23208;
  _Bool D.23209;
  long int D.23210;
  long int D.23211;
  struct MonoGenericContainer * container;

  D.23202 = BIT_FIELD_REF <*method, 32, 160>;
  D.23203 = D.23202 & 2048;
  if (D.23203 == 0) goto <D.23204>; else goto <D.23205>;
  <D.23204>:
  D.23206 = 0B;
  return D.23206;
  <D.23205>:
  D.23207 = method->klass;
  D.23208 = D.23207->image;
  container = mono_image_property_lookup (D.23208, method, 0);
  D.23209 = container == 0B;
  D.23210 = (long int) D.23209;
  D.23211 = __builtin_expect (D.23210, 0);
  if (D.23211 != 0) goto <D.23212>; else goto <D.23213>;
  <D.23212>:
  monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "class.c", 1216, "container");
  <D.23213>:
  D.23206 = container;
  return D.23206;
}


mono_method_set_generic_container (struct MonoMethod * method, struct MonoGenericContainer * container)
{
  unsigned int D.23215;
  unsigned int D.23216;
  _Bool D.23217;
  long int D.23218;
  long int D.23219;
  struct MonoClass * D.23222;
  struct MonoImage * D.23223;

  D.23215 = BIT_FIELD_REF <*method, 32, 160>;
  D.23216 = D.23215 & 2048;
  D.23217 = D.23216 == 0;
  D.23218 = (long int) D.23217;
  D.23219 = __builtin_expect (D.23218, 0);
  if (D.23219 != 0) goto <D.23220>; else goto <D.23221>;
  <D.23220>:
  monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "class.c", 1230, "method->is_generic");
  <D.23221>:
  D.23222 = method->klass;
  D.23223 = D.23222->image;
  mono_image_property_insert (D.23223, method, 0, container);
}


mono_class_setup_fields_locking (struct MonoClass * class)
{
  unsigned int D.23224;
  unsigned int D.23225;

  D.23224 = BIT_FIELD_REF <*class, 32, 192>;
  D.23225 = D.23224 & 32;
  if (D.23225 != 0) goto <D.23226>; else goto <D.23227>;
  <D.23226>:
  return;
  <D.23227>:
  mono_loader_lock ();
  mono_class_setup_fields (class);
  mono_loader_unlock ();
}


mono_class_setup_fields (struct MonoClass * class)
{
  unsigned int D.23229;
  struct MonoClass * iftmp.60;
  struct MonoGenericClass * D.23231;
  unsigned int D.23235;
  unsigned int D.23236;
  struct MonoClass * D.23241;
  struct MonoImage * D.23242;
  unsigned int D.23243;
  unsigned int D.23244;
  unsigned int D.23247;
  unsigned int D.23248;
  unsigned int D.23251;
  unsigned char D.23254;
  unsigned char D.23257;
  struct MonoClass * D.23260;
  unsigned int D.23263;
  unsigned int D.23264;
  unsigned char D.23267;
  int D.23270;
  int D.23271;
  int D.23272;
  unsigned char D.23273;
  <unnamed-unsigned:1> D.23274;
  unsigned char D.23275;
  <unnamed-unsigned:1> D.23276;
  unsigned char D.23277;
  unsigned char D.23278;
  <unnamed-unsigned:1> D.23279;
  <unnamed-unsigned:1> D.23280;
  struct MonoImage * D.23282;
  unsigned int D.23283;
  unsigned int D.23284;
  unsigned int packing_size.61;
  unsigned int D.23288;
  const char * D.23291;
  unsigned char D.23292;
  <unnamed-unsigned:4> D.23293;
  unsigned int D.23294;
  unsigned int real_size.62;
  unsigned int real_size.63;
  unsigned int D.23303;
  int D.23304;
  unsigned char D.23305;
  <unnamed-unsigned:1> D.23306;
  struct MonoGenericContainer * D.23309;
  _Bool D.23315;
  long int D.23316;
  long int D.23317;
  unsigned int D.23320;
  unsigned int i.64;
  unsigned int D.23322;
  struct MonoClassField * D.23323;
  unsigned int i.65;
  unsigned int D.23325;
  struct MonoType * D.23326;
  int D.23329;
  char * D.23334;
  const char * D.23335;
  _Bool D.23336;
  long int D.23337;
  long int D.23338;
  short unsigned int D.23341;
  int D.23342;
  int D.23343;
  int D.18807;
  int iftmp.66;
  int D.18806;
  const char[9] * D.23349;
  unsigned char D.23350;
  int D.23351;
  unsigned char D.23352;
  int D.23353;
  const unsigned char * D.23358;
  unsigned char D.23359;
  int D.23360;
  const unsigned char * D.23361;
  unsigned char D.23362;
  int D.23363;
  const unsigned char * D.23368;
  unsigned char D.23369;
  int D.23370;
  const unsigned char * D.23371;
  unsigned char D.23372;
  int D.23373;
  const unsigned char * D.23378;
  unsigned char D.23379;
  int D.23380;
  const unsigned char * D.23381;
  unsigned char D.23382;
  int D.23383;
  const char * D.23385;
  struct MonoClassField * D.23390;
  int D.23391;
  unsigned int idx.67;
  unsigned int offset.68;
  int offset.69;
  int D.23398;
  int D.23401;
  gchar * D.23404;
  gchar * D.23407;
  unsigned int D.23415;
  unsigned int D.23416;
  int D.23418;
  unsigned char D.23421;
  unsigned int D.23427;
  unsigned int D.23428;
  unsigned int D.23429;
  unsigned int D.23430;
  struct MonoClass * D.23435;
  struct MonoClass * D.23436;
  <unnamed-unsigned:1> D.23437;
  int D.23438;
  struct MonoClass * D.23441;
  struct MonoType * D.23446;
  unsigned char D.23453;
  unsigned int D.23456;
  unsigned int D.23459;
  unsigned int D.23460;
  struct MonoError error;
  struct MonoImage * m;
  int top;
  guint32 layout;
  int i;
  int blittable;
  guint32 real_size;
  guint32 packing_size;
  gboolean explicit_size;
  struct MonoClassField * field;
  struct MonoGenericContainer * container;
  struct MonoClass * gtd;

  try
    {
      m = class->image;
      D.23229 = class->flags;
      layout = D.23229 & 24;
      blittable = 1;
      real_size = 0;
      packing_size = 0;
      container = 0B;
      D.23231 = class->generic_class;
      if (D.23231 != 0B) goto <D.23232>; else goto <D.23233>;
      <D.23232>:
      iftmp.60 = mono_class_get_generic_type_definition (class);
      goto <D.23234>;
      <D.23233>:
      iftmp.60 = 0B;
      <D.23234>:
      gtd = iftmp.60;
      D.23235 = BIT_FIELD_REF <*class, 32, 192>;
      D.23236 = D.23235 & 64;
      if (D.23236 != 0) goto <D.23237>; else goto <D.23238>;
      <D.23237>:
      return;
      <D.23238>:
      D.23231 = class->generic_class;
      if (D.23231 != 0B) goto <D.23239>; else goto <D.23240>;
      <D.23239>:
      D.23231 = class->generic_class;
      D.23241 = D.23231->container_class;
      D.23242 = D.23241->image;
      D.23243 = BIT_FIELD_REF <*D.23242, 32, 128>;
      D.23244 = D.23243 & 8;
      if (D.23244 != 0) goto <D.23245>; else goto <D.23246>;
      <D.23245>:
      D.23231 = class->generic_class;
      D.23241 = D.23231->container_class;
      D.23247 = BIT_FIELD_REF <*D.23241, 32, 160>;
      D.23248 = D.23247 & 128;
      if (D.23248 == 0) goto <D.23249>; else goto <D.23250>;
      <D.23249>:
      return;
      <D.23250>:
      <D.23246>:
      <D.23240>:
      mono_class_setup_basic_field_info (class);
      D.23251 = class->field.count;
      top = (int) D.23251;
      if (gtd != 0B) goto <D.23252>; else goto <D.23253>;
      <D.23252>:
      mono_class_setup_fields (gtd);
      D.23254 = gtd->exception_type;
      if (D.23254 != 0) goto <D.23255>; else goto <D.23256>;
      <D.23255>:
      mono_class_set_failure (class, 7, 0B);
      return;
      <D.23256>:
      <D.23253>:
      class->instance_size = 0;
      D.23257 = class->rank;
      if (D.23257 == 0) goto <D.23258>; else goto <D.23259>;
      <D.23258>:
      class->sizes.class_size = 0;
      <D.23259>:
      D.23260 = class->parent;
      if (D.23260 != 0B) goto <D.23261>; else goto <D.23262>;
      <D.23261>:
      D.23260 = class->parent;
      mono_class_init (D.23260);
      D.23260 = class->parent;
      D.23263 = BIT_FIELD_REF <*D.23260, 32, 160>;
      D.23264 = D.23263 & 4;
      if (D.23264 == 0) goto <D.23265>; else goto <D.23266>;
      <D.23265>:
      D.23260 = class->parent;
      mono_class_setup_fields (D.23260);
      D.23260 = class->parent;
      D.23267 = D.23260->exception_type;
      if (D.23267 != 0) goto <D.23268>; else goto <D.23269>;
      <D.23268>:
      mono_class_set_failure (class, 7, 0B);
      return;
      <D.23269>:
      <D.23266>:
      D.23270 = class->instance_size;
      D.23260 = class->parent;
      D.23271 = D.23260->instance_size;
      D.23272 = D.23270 + D.23271;
      class->instance_size = D.23272;
      D.23260 = class->parent;
      D.23273 = D.23260->min_align;
      class->min_align = D.23273;
      D.23274 = class->has_references;
      D.23275 = (unsigned char) D.23274;
      D.23260 = class->parent;
      D.23276 = D.23260->has_references;
      D.23277 = (unsigned char) D.23276;
      D.23278 = D.23275 | D.23277;
      D.23279 = (<unnamed-unsigned:1>) D.23278;
      class->has_references = D.23279;
      D.23260 = class->parent;
      D.23280 = D.23260->blittable;
      blittable = (int) D.23280;
      goto <D.23281>;
      <D.23262>:
      class->instance_size = 8;
      class->min_align = 1;
      <D.23281>:
      D.23282 = class->image;
      D.23283 = class->type_token;
      D.23284 = mono_metadata_packing_from_typedef (D.23282, D.23283, &packing_size, &real_size);
      explicit_size = (gboolean) D.23284;
      if (explicit_size != 0) goto <D.23285>; else goto <D.23286>;
      <D.23285>:
      packing_size.61 = packing_size;
      D.23288 = packing_size.61 & 4294967280;
      if (D.23288 != 0) goto <D.23289>; else goto <D.23290>;
      <D.23289>:
      {
        char * err_msg;

        D.23291 = class->name;
        packing_size.61 = packing_size;
        err_msg = monoeg_g_strdup_printf ("Could not load struct \'%s\' with packing size %d >= 16", D.23291, packing_size.61);
        mono_class_set_failure (class, 7, err_msg);
        return;
      }
      <D.23290>:
      packing_size.61 = packing_size;
      D.23292 = (unsigned char) packing_size.61;
      D.23293 = (<unnamed-unsigned:4>) D.23292;
      class->packing_size = D.23293;
      D.23270 = class->instance_size;
      D.23294 = (unsigned int) D.23270;
      real_size.62 = real_size;
      real_size.63 = D.23294 + real_size.62;
      real_size = real_size.63;
      <D.23286>:
      if (top == 0) goto <D.23297>; else goto <D.23298>;
      <D.23297>:
      if (explicit_size != 0) goto <D.23299>; else goto <D.23300>;
      <D.23299>:
      real_size.62 = real_size;
      if (real_size.62 != 0) goto <D.23301>; else goto <D.23302>;
      <D.23301>:
      D.23270 = class->instance_size;
      D.23294 = (unsigned int) D.23270;
      real_size.62 = real_size;
      D.23303 = MAX_EXPR <D.23294, real_size.62>;
      D.23304 = (int) D.23303;
      class->instance_size = D.23304;
      <D.23302>:
      <D.23300>:
      D.23305 = (unsigned char) blittable;
      D.23306 = (<unnamed-unsigned:1>) D.23305;
      class->blittable = D.23306;
      mono_memory_barrier ();
      class->size_inited = 1;
      class->fields_inited = 1;
      class->setup_fields_called = 1;
      return;
      <D.23298>:
      if (layout == 0) goto <D.23307>; else goto <D.23308>;
      <D.23307>:
      blittable = 0;
      <D.23308>:
      class->setup_fields_called = 1;
      D.23309 = class->generic_container;
      if (D.23309 != 0B) goto <D.23310>; else goto <D.23311>;
      <D.23310>:
      container = class->generic_container;
      goto <D.23312>;
      <D.23311>:
      if (gtd != 0B) goto <D.23313>; else goto <D.23314>;
      <D.23313>:
      container = gtd->generic_container;
      D.23315 = container == 0B;
      D.23316 = (long int) D.23315;
      D.23317 = __builtin_expect (D.23316, 0);
      if (D.23317 != 0) goto <D.23318>; else goto <D.23319>;
      <D.23318>:
      monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "class.c", 1567, "container");
      <D.23319>:
      <D.23314>:
      <D.23312>:
      i = 0;
      goto <D.18816>;
      <D.18815>:
      {
        int idx;

        D.23320 = class->field.first;
        i.64 = (unsigned int) i;
        D.23322 = D.23320 + i.64;
        idx = (int) D.23322;
        D.23323 = class->fields;
        i.65 = (unsigned int) i;
        D.23325 = i.65 * 16;
        field = D.23323 + D.23325;
        field->parent = class;
        D.23326 = field->type;
        if (D.23326 == 0B) goto <D.23327>; else goto <D.23328>;
        <D.23327>:
        mono_field_resolve_type (field, &error);
        D.23329 = mono_error_ok (&error);
        if (D.23329 == 0) goto <D.23330>; else goto <D.23331>;
        <D.23330>:
        mono_error_cleanup (&error);
        return;
        <D.23331>:
        D.23326 = field->type;
        if (D.23326 == 0B) goto <D.23332>; else goto <D.23333>;
        <D.23332>:
        D.23334 = mono_type_get_full_name (class);
        D.23335 = field->name;
        monoeg_g_log (0B, 4, "could not resolve %s:%s\n", D.23334, D.23335);
        <D.18798>:
        goto <D.18798>;
        <D.23333>:
        D.23326 = field->type;
        D.23336 = D.23326 == 0B;
        D.23337 = (long int) D.23336;
        D.23338 = __builtin_expect (D.23337, 0);
        if (D.23338 != 0) goto <D.23339>; else goto <D.23340>;
        <D.23339>:
        monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "class.c", 1588, "field->type");
        <D.23340>:
        <D.23328>:
        D.23326 = field->type;
        D.23341 = D.23326->attrs;
        D.23342 = (int) D.23341;
        D.23343 = D.23342 & 1536;
        if (D.23343 != 0) goto <D.23344>; else goto <D.23345>;
        <D.23344>:
        {
          size_t __s1_len;
          size_t __s2_len;

          __s2_len = 8;
          if (__s2_len <= 3) goto <D.23347>; else goto <D.23348>;
          <D.23347>:
          {
            const unsigned char * __s2;
            int __result;

            __s2 = mono_field_get_name (field);
            D.23349 = "_Deleted";
            D.23350 = MEM[(const unsigned char *)D.23349];
            D.23351 = (int) D.23350;
            D.23352 = *__s2;
            D.23353 = (int) D.23352;
            __result = D.23351 - D.23353;
            {
              if (__s2_len != 0) goto <D.23354>; else goto <D.23355>;
              <D.23354>:
              if (__result == 0) goto <D.23356>; else goto <D.23357>;
              <D.23356>:
              D.23358 = &MEM[(void *)"_Deleted" + 1B];
              D.23359 = *D.23358;
              D.23360 = (int) D.23359;
              D.23361 = __s2 + 1;
              D.23362 = *D.23361;
              D.23363 = (int) D.23362;
              __result = D.23360 - D.23363;
              if (__s2_len > 1) goto <D.23364>; else goto <D.23365>;
              <D.23364>:
              if (__result == 0) goto <D.23366>; else goto <D.23367>;
              <D.23366>:
              D.23368 = &MEM[(void *)"_Deleted" + 2B];
              D.23369 = *D.23368;
              D.23370 = (int) D.23369;
              D.23371 = __s2 + 2;
              D.23372 = *D.23371;
              D.23373 = (int) D.23372;
              __result = D.23370 - D.23373;
              if (__s2_len > 2) goto <D.23374>; else goto <D.23375>;
              <D.23374>:
              if (__result == 0) goto <D.23376>; else goto <D.23377>;
              <D.23376>:
              D.23378 = &MEM[(void *)"_Deleted" + 3B];
              D.23379 = *D.23378;
              D.23380 = (int) D.23379;
              D.23381 = __s2 + 3;
              D.23382 = *D.23381;
              D.23383 = (int) D.23382;
              __result = D.23380 - D.23383;
              <D.23377>:
              <D.23375>:
              <D.23367>:
              <D.23365>:
              <D.23357>:
              <D.23355>:
            }
            D.18806 = __result;
          }
          iftmp.66 = -D.18806;
          goto <D.23384>;
          <D.23348>:
          D.23385 = mono_field_get_name (field);
          iftmp.66 = __builtin_strcmp (D.23385, "_Deleted");
          <D.23384>:
          D.18807 = iftmp.66;
        }
        if (D.18807 == 0) goto <D.23386>; else goto <D.23387>;
        <D.23386>:
        // predicted unlikely by continue predictor.
        goto <D.18808>;
        <D.23387>:
        <D.23345>:
        if (gtd != 0B) goto <D.23388>; else goto <D.23389>;
        <D.23388>:
        {
          struct MonoClassField * gfield;

          D.23390 = gtd->fields;
          i.65 = (unsigned int) i;
          D.23325 = i.65 * 16;
          gfield = D.23390 + D.23325;
          D.23391 = gfield->offset;
          field->offset = D.23391;
        }
        goto <D.23392>;
        <D.23389>:
        if (layout == 16) goto <D.23393>; else goto <D.23394>;
        <D.23393>:
        {
          guint32 offset;

          try
            {
              idx.67 = (unsigned int) idx;
              mono_metadata_field_info (m, idx.67, &offset, 0B, 0B);
              offset.68 = offset;
              offset.69 = (int) offset.68;
              field->offset = offset.69;
              D.23398 = field->offset;
              if (D.23398 == -1) goto <D.23399>; else goto <D.23400>;
              <D.23399>:
              D.23326 = field->type;
              D.23341 = D.23326->attrs;
              D.23342 = (int) D.23341;
              D.23401 = D.23342 & 16;
              if (D.23401 == 0) goto <D.23402>; else goto <D.23403>;
              <D.23402>:
              D.23335 = field->name;
              D.23404 = monoeg_g_strdup_printf ("Missing field layout info for %s", D.23335);
              mono_class_set_failure (class, 7, D.23404);
              goto <D.18811>;
              <D.23403>:
              <D.23400>:
              D.23398 = field->offset;
              if (D.23398 < -1) goto <D.23405>; else goto <D.23406>;
              <D.23405>:
              D.23398 = field->offset;
              D.23335 = field->name;
              D.23407 = monoeg_g_strdup_printf ("Invalid negative field offset %d for %s", D.23398, D.23335);
              mono_class_set_failure (class, 7, D.23407);
              goto <D.18811>;
              <D.23406>:
            }
          finally
            {
              offset = {CLOBBER};
            }
        }
        <D.23394>:
        <D.23392>:
        if (blittable != 0) goto <D.23408>; else goto <D.23409>;
        <D.23408>:
        D.23326 = field->type;
        D.23341 = D.23326->attrs;
        D.23342 = (int) D.23341;
        D.23401 = D.23342 & 16;
        if (D.23401 == 0) goto <D.23410>; else goto <D.23411>;
        <D.23410>:
        D.23326 = field->type;
        D.23415 = BIT_FIELD_REF <*D.23326, 32, 32>;
        D.23416 = D.23415 & 1073741824;
        if (D.23416 != 0) goto <D.23412>; else goto <D.23417>;
        <D.23417>:
        D.23326 = field->type;
        D.23418 = mono_type_is_reference (D.23326);
        if (D.23418 != 0) goto <D.23412>; else goto <D.23413>;
        <D.23412>:
        blittable = 0;
        goto <D.23414>;
        <D.23413>:
        {
          struct MonoClass * field_class;

          D.23326 = field->type;
          field_class = mono_class_from_mono_type (D.23326);
          if (field_class != 0B) goto <D.23419>; else goto <D.23420>;
          <D.23419>:
          mono_class_setup_fields (field_class);
          D.23421 = field_class->exception_type;
          if (D.23421 != 0) goto <D.23422>; else goto <D.23423>;
          <D.23422>:
          mono_class_set_failure (class, 7, 0B);
          goto <D.18811>;
          <D.23423>:
          <D.23420>:
          if (field_class == 0B) goto <D.23424>; else goto <D.23426>;
          <D.23426>:
          D.23427 = BIT_FIELD_REF <*field_class, 32, 160>;
          D.23428 = D.23427 & 32;
          if (D.23428 == 0) goto <D.23424>; else goto <D.23425>;
          <D.23424>:
          blittable = 0;
          <D.23425>:
        }
        <D.23414>:
        <D.23411>:
        <D.23409>:
        D.23429 = BIT_FIELD_REF <*class, 32, 160>;
        D.23430 = D.23429 & 16;
        if (D.23430 != 0) goto <D.23431>; else goto <D.23432>;
        <D.23431>:
        D.23326 = field->type;
        D.23341 = D.23326->attrs;
        D.23342 = (int) D.23341;
        D.23401 = D.23342 & 16;
        if (D.23401 == 0) goto <D.23433>; else goto <D.23434>;
        <D.23433>:
        D.23326 = field->type;
        D.23435 = mono_class_from_mono_type (D.23326);
        class->element_class = D.23435;
        D.23436 = class->element_class;
        class->cast_class = D.23436;
        D.23436 = class->element_class;
        D.23437 = D.23436->blittable;
        blittable = (int) D.23437;
        <D.23434>:
        <D.23432>:
        D.23326 = field->type;
        D.23438 = mono_type_has_exceptions (D.23326);
        if (D.23438 != 0) goto <D.23439>; else goto <D.23440>;
        <D.23439>:
        {
          char * class_name;
          char * type_name;

          class_name = mono_type_get_full_name (class);
          D.23326 = field->type;
          type_name = mono_type_full_name (D.23326);
          mono_class_set_failure (class, 7, 0B);
          D.23335 = field->name;
          monoeg_g_log (0B, 16, "Invalid type %s for instance field %s:%s", type_name, class_name, D.23335);
          monoeg_g_free (class_name);
          monoeg_g_free (type_name);
          goto <D.18811>;
        }
        <D.23440>:
      }
      <D.18808>:
      i = i + 1;
      <D.18816>:
      if (i < top) goto <D.18815>; else goto <D.18811>;
      <D.18811>:
      D.23441 = mono_defaults.string_class;
      if (D.23441 == class) goto <D.23442>; else goto <D.23443>;
      <D.23442>:
      blittable = 0;
      <D.23443>:
      D.23305 = (unsigned char) blittable;
      D.23306 = (<unnamed-unsigned:1>) D.23305;
      class->blittable = D.23306;
      D.23429 = BIT_FIELD_REF <*class, 32, 160>;
      D.23430 = D.23429 & 16;
      if (D.23430 != 0) goto <D.23444>; else goto <D.23445>;
      <D.23444>:
      D.23446 = mono_class_enum_basetype (class);
      if (D.23446 == 0B) goto <D.23447>; else goto <D.23448>;
      <D.23447>:
      mono_class_set_failure (class, 7, 0B);
      return;
      <D.23448>:
      <D.23445>:
      if (explicit_size != 0) goto <D.23449>; else goto <D.23450>;
      <D.23449>:
      real_size.62 = real_size;
      if (real_size.62 != 0) goto <D.23451>; else goto <D.23452>;
      <D.23451>:
      D.23270 = class->instance_size;
      D.23294 = (unsigned int) D.23270;
      real_size.62 = real_size;
      D.23303 = MAX_EXPR <D.23294, real_size.62>;
      D.23304 = (int) D.23303;
      class->instance_size = D.23304;
      <D.23452>:
      <D.23450>:
      D.23453 = class->exception_type;
      if (D.23453 != 0) goto <D.23454>; else goto <D.23455>;
      <D.23454>:
      return;
      <D.23455>:
      mono_class_layout_fields (class);
      D.23429 = BIT_FIELD_REF <*class, 32, 160>;
      D.23456 = D.23429 & 8;
      if (D.23456 != 0) goto <D.23457>; else goto <D.23458>;
      <D.23457>:
      D.23270 = class->instance_size;
      D.23459 = (unsigned int) D.23270;
      D.23460 = D.23459 + 4294967295;
      if (D.23460 > 1048583) goto <D.23461>; else goto <D.23462>;
      <D.23461>:
      mono_class_set_failure (class, 7, 0B);
      <D.23462>:
      <D.23458>:
      mono_memory_barrier ();
      class->fields_inited = 1;
    }
  finally
    {
      error = {CLOBBER};
      real_size = {CLOBBER};
      packing_size = {CLOBBER};
    }
}


mono_class_setup_basic_field_info (struct MonoClass * class)
{
  struct MonoClassField * D.23468;
  struct MonoClass * iftmp.70;
  struct MonoGenericClass * D.23472;
  unsigned int D.23476;
  struct MonoClass * D.23479;
  struct MonoImage * D.23480;
  unsigned int D.23481;
  unsigned int D.23482;
  unsigned int D.23485;
  unsigned int D.23486;
  unsigned int D.23491;
  unsigned int D.23492;
  unsigned int top.71;
  unsigned int D.23494;
  int D.23495;
  void * D.23496;
  unsigned int i.72;
  unsigned int D.23498;
  struct MonoClassField * D.23501;
  struct MonoClassField * D.23502;
  const char * D.23503;
  unsigned int D.23505;
  unsigned int i.73;
  unsigned int D.23507;
  const char * D.23508;
  struct MonoClassField * field;
  struct MonoClass * gtd;
  struct MonoImage * image;
  int i;
  int top;

  D.23468 = class->fields;
  if (D.23468 != 0B) goto <D.23469>; else goto <D.23470>;
  <D.23469>:
  return;
  <D.23470>:
  D.23472 = class->generic_class;
  if (D.23472 != 0B) goto <D.23473>; else goto <D.23474>;
  <D.23473>:
  iftmp.70 = mono_class_get_generic_type_definition (class);
  goto <D.23475>;
  <D.23474>:
  iftmp.70 = 0B;
  <D.23475>:
  gtd = iftmp.70;
  image = class->image;
  D.23476 = class->field.count;
  top = (int) D.23476;
  D.23472 = class->generic_class;
  if (D.23472 != 0B) goto <D.23477>; else goto <D.23478>;
  <D.23477>:
  D.23472 = class->generic_class;
  D.23479 = D.23472->container_class;
  D.23480 = D.23479->image;
  D.23481 = BIT_FIELD_REF <*D.23480, 32, 128>;
  D.23482 = D.23481 & 8;
  if (D.23482 != 0) goto <D.23483>; else goto <D.23484>;
  <D.23483>:
  D.23472 = class->generic_class;
  D.23479 = D.23472->container_class;
  D.23485 = BIT_FIELD_REF <*D.23479, 32, 160>;
  D.23486 = D.23485 & 128;
  if (D.23486 == 0) goto <D.23487>; else goto <D.23488>;
  <D.23487>:
  return;
  <D.23488>:
  <D.23484>:
  <D.23478>:
  if (gtd != 0B) goto <D.23489>; else goto <D.23490>;
  <D.23489>:
  mono_class_setup_basic_field_info (gtd);
  D.23491 = gtd->field.count;
  top = (int) D.23491;
  D.23492 = gtd->field.first;
  class->field.first = D.23492;
  D.23491 = gtd->field.count;
  class->field.count = D.23491;
  <D.23490>:
  top.71 = (unsigned int) top;
  D.23494 = top.71 * 16;
  D.23495 = (int) D.23494;
  D.23496 = mono_class_alloc0 (class, D.23495);
  class->fields = D.23496;
  i = 0;
  goto <D.18779>;
  <D.18778>:
  D.23468 = class->fields;
  i.72 = (unsigned int) i;
  D.23498 = i.72 * 16;
  field = D.23468 + D.23498;
  field->parent = class;
  if (gtd != 0B) goto <D.23499>; else goto <D.23500>;
  <D.23499>:
  D.23501 = gtd->fields;
  i.72 = (unsigned int) i;
  D.23498 = i.72 * 16;
  D.23502 = D.23501 + D.23498;
  D.23503 = mono_field_get_name (D.23502);
  field->name = D.23503;
  goto <D.23504>;
  <D.23500>:
  {
    int idx;
    guint32 name_idx;

    D.23505 = class->field.first;
    i.73 = (unsigned int) i;
    D.23507 = D.23505 + i.73;
    idx = (int) D.23507;
    name_idx = mono_metadata_decode_table_row_col (image, 4, idx, 1);
    D.23508 = mono_metadata_string_heap (image, name_idx);
    field->name = D.23508;
  }
  <D.23504>:
  i = i + 1;
  <D.18779>:
  if (i < top) goto <D.18778>; else goto <D.18780>;
  <D.18780>:
}


mono_class_alloc0 (struct MonoClass * class, int size)
{
  unsigned int size.74;
  void * D.23511;
  void * res;

  res = mono_class_alloc (class, size);
  size.74 = (unsigned int) size;
  memset (res, 0, size.74);
  D.23511 = res;
  return D.23511;
}


mono_class_alloc (struct MonoClass * class, int size)
{
  struct MonoGenericClass * D.23513;
  void * D.23516;
  struct MonoImageSet * D.23517;
  unsigned int size.75;
  struct MonoImage * D.23519;

  D.23513 = class->generic_class;
  if (D.23513 != 0B) goto <D.23514>; else goto <D.23515>;
  <D.23514>:
  D.23513 = class->generic_class;
  D.23517 = D.23513->owner;
  size.75 = (unsigned int) size;
  D.23516 = mono_image_set_alloc (D.23517, size.75);
  return D.23516;
  <D.23515>:
  D.23519 = class->image;
  size.75 = (unsigned int) size;
  D.23516 = mono_image_alloc (D.23519, size.75);
  return D.23516;
}


memset (void * __dest, int __ch, size_t __len)
{
  int D.23523;
  int D.23528;
  void * D.23530;
  unsigned int D.23531;

  D.23523 = __builtin_constant_p (__len);
  if (D.23523 != 0) goto <D.23524>; else goto <D.23525>;
  <D.23524>:
  if (__len == 0) goto <D.23526>; else goto <D.23527>;
  <D.23526>:
  D.23528 = __builtin_constant_p (__ch);
  if (D.23528 == 0) goto <D.23521>; else goto <D.23529>;
  <D.23529>:
  if (__ch != 0) goto <D.23521>; else goto <D.23522>;
  <D.23521>:
  __warn_memset_zero_len ();
  D.23530 = __dest;
  return D.23530;
  <D.23522>:
  <D.23527>:
  <D.23525>:
  D.23531 = __builtin_object_size (__dest, 0);
  D.23530 = __builtin___memset_chk (__dest, __ch, __len, D.23531);
  return D.23530;
}


mono_field_resolve_type (struct MonoClassField * field, struct MonoError * error)
{
  struct MonoClass * iftmp.76;
  struct MonoGenericClass * D.23534;
  int field.77;
  struct MonoClassField * D.23539;
  int D.23540;
  int D.23541;
  struct MonoClassField * D.23544;
  unsigned int field_idx.78;
  unsigned int D.23546;
  int D.23547;
  const char * D.23550;
  struct MonoGenericContext * D.23551;
  struct MonoType * D.23552;
  int D.23553;
  const char * D.23556;
  unsigned int D.23558;
  unsigned int field_idx.79;
  unsigned int D.23560;
  unsigned int D.23561;
  unsigned int D.23562;
  _Bool D.23563;
  long int D.23564;
  long int D.23565;
  struct MonoGenericContainer * D.23568;
  _Bool D.23574;
  long int D.23575;
  long int D.23576;
  unsigned int D.23579;
  int D.23580;
  const char * D.23583;
  const char * sig.80;
  const char * sig.81;
  char D.23586;
  _Bool D.23587;
  long int D.23588;
  long int D.23589;
  unsigned int D.23592;
  short int D.23593;
  int D.23594;
  const char * D.23595;
  struct MonoType * D.23596;
  struct MonoType * D.23597;
  gchar * D.23600;
  struct MonoClass * class;
  struct MonoImage * image;
  struct MonoClass * gtd;
  int field_idx;

  class = field->parent;
  image = class->image;
  D.23534 = class->generic_class;
  if (D.23534 != 0B) goto <D.23535>; else goto <D.23536>;
  <D.23535>:
  iftmp.76 = mono_class_get_generic_type_definition (class);
  goto <D.23537>;
  <D.23536>:
  iftmp.76 = 0B;
  <D.23537>:
  gtd = iftmp.76;
  field.77 = (int) field;
  D.23539 = class->fields;
  D.23540 = (int) D.23539;
  D.23541 = field.77 - D.23540;
  field_idx = D.23541 /[ex] 16;
  mono_error_init (error);
  if (gtd != 0B) goto <D.23542>; else goto <D.23543>;
  <D.23542>:
  {
    struct MonoClassField * gfield;
    struct MonoType * gtype;

    D.23544 = gtd->fields;
    field_idx.78 = (unsigned int) field_idx;
    D.23546 = field_idx.78 * 16;
    gfield = D.23544 + D.23546;
    gtype = mono_field_get_type_checked (gfield, error);
    D.23547 = mono_error_ok (error);
    if (D.23547 == 0) goto <D.23548>; else goto <D.23549>;
    <D.23548>:
    {
      char * err_msg;

      D.23550 = mono_error_get_message (error);
      err_msg = monoeg_g_strdup_printf ("Could not load field %d type due to: %s", field_idx, D.23550);
      mono_class_set_failure (class, 7, err_msg);
      monoeg_g_free (err_msg);
    }
    <D.23549>:
    D.23551 = mono_class_get_context (class);
    D.23552 = mono_class_inflate_generic_type_no_copy (image, gtype, D.23551, error);
    field->type = D.23552;
    D.23553 = mono_error_ok (error);
    if (D.23553 == 0) goto <D.23554>; else goto <D.23555>;
    <D.23554>:
    {
      char * err_msg;

      D.23556 = mono_error_get_message (error);
      err_msg = monoeg_g_strdup_printf ("Could not load field %d type due to: %s", field_idx, D.23556);
      mono_class_set_failure (class, 7, err_msg);
      monoeg_g_free (err_msg);
    }
    <D.23555>:
  }
  goto <D.23557>;
  <D.23543>:
  {
    const char * sig;
    guint32 cols[3];
    struct MonoGenericContainer * container;
    int idx;

    try
      {
        container = 0B;
        D.23558 = class->field.first;
        field_idx.79 = (unsigned int) field_idx;
        D.23560 = D.23558 + field_idx.79;
        idx = (int) D.23560;
        D.23561 = BIT_FIELD_REF <*image, 32, 128>;
        D.23562 = D.23561 & 8;
        D.23563 = D.23562 != 0;
        D.23564 = (long int) D.23563;
        D.23565 = __builtin_expect (D.23564, 0);
        if (D.23565 != 0) goto <D.23566>; else goto <D.23567>;
        <D.23566>:
        monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "class.c", 10119, "!image->dynamic");
        <D.23567>:
        D.23568 = class->generic_container;
        if (D.23568 != 0B) goto <D.23569>; else goto <D.23570>;
        <D.23569>:
        container = class->generic_container;
        goto <D.23571>;
        <D.23570>:
        if (gtd != 0B) goto <D.23572>; else goto <D.23573>;
        <D.23572>:
        container = gtd->generic_container;
        D.23574 = container == 0B;
        D.23575 = (long int) D.23574;
        D.23576 = __builtin_expect (D.23575, 0);
        if (D.23576 != 0) goto <D.23577>; else goto <D.23578>;
        <D.23577>:
        monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "class.c", 10125, "container");
        <D.23578>:
        <D.23573>:
        <D.23571>:
        mono_metadata_decode_table_row (image, 4, idx, &cols, 3);
        D.23579 = cols[2];
        D.23580 = mono_verifier_verify_field_signature (image, D.23579, 0B);
        if (D.23580 == 0) goto <D.23581>; else goto <D.23582>;
        <D.23581>:
        D.23583 = field->name;
        mono_error_set_type_load_class (error, class, "Could not verify field %s signature", D.23583);
        mono_class_set_failure (class, 7, 0B);
        return;
        <D.23582>:
        D.23579 = cols[2];
        sig.80 = mono_metadata_blob_heap (image, D.23579);
        sig = sig.80;
        sig.81 = sig;
        mono_metadata_decode_value (sig.81, &sig);
        sig.81 = sig;
        D.23586 = *sig.81;
        D.23587 = D.23586 != 6;
        D.23588 = (long int) D.23587;
        D.23589 = __builtin_expect (D.23588, 0);
        if (D.23589 != 0) goto <D.23590>; else goto <D.23591>;
        <D.23590>:
        monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "class.c", 10141, "*sig == 0x06");
        <D.23591>:
        D.23592 = cols[0];
        D.23593 = (short int) D.23592;
        D.23594 = (int) D.23593;
        sig.81 = sig;
        D.23595 = sig.81 + 1;
        D.23596 = mono_metadata_parse_type_full (image, container, 5, D.23594, D.23595, &sig);
        field->type = D.23596;
        D.23597 = field->type;
        if (D.23597 == 0B) goto <D.23598>; else goto <D.23599>;
        <D.23598>:
        D.23583 = field->name;
        D.23600 = monoeg_g_strdup_printf ("Could not load field %s type", D.23583);
        mono_class_set_failure_from_loader_error (class, error, D.23600);
        <D.23599>:
      }
    finally
      {
        sig = {CLOBBER};
        cols = {CLOBBER};
      }
  }
  <D.23557>:
}


mono_class_inflate_generic_type_no_copy (struct MonoImage * image, struct MonoType * type, struct MonoGenericContext * context, struct MonoError * error)
{
  int D.23606;
  struct MonoType * D.23609;
  long unsigned int D.23612;
  long unsigned int D.23613;
  struct MonoType * inflated;

  inflated = 0B;
  mono_error_init (error);
  if (context != 0B) goto <D.23604>; else goto <D.23605>;
  <D.23604>:
  inflated = inflate_generic_type (image, type, context, error);
  D.23606 = mono_error_ok (error);
  if (D.23606 == 0) goto <D.23607>; else goto <D.23608>;
  <D.23607>:
  D.23609 = 0B;
  return D.23609;
  <D.23608>:
  <D.23605>:
  if (inflated == 0B) goto <D.23610>; else goto <D.23611>;
  <D.23610>:
  D.23609 = type;
  return D.23609;
  <D.23611>:
  D.23612 = mono_stats.inflated_type_count;
  D.23613 = D.23612 + 1;
  mono_stats.inflated_type_count = D.23613;
  D.23609 = inflated;
  return D.23609;
}


mono_type_has_exceptions (struct MonoType * type)
{
  unsigned char D.23615;
  int D.23616;
  gboolean D.23617;
  struct MonoClass * D.23618;
  unsigned char D.23619;
  struct MonoArrayType * D.23620;
  struct MonoClass * D.23621;
  unsigned char D.23622;
  struct MonoGenericClass * D.23623;
  struct MonoClass * D.23624;
  unsigned char D.23625;

  D.23615 = type->type;
  D.23616 = (int) D.23615;
  switch (D.23616) <default: <D.23626>, case 17: <D.18755>, case 18: <D.18754>, case 20: <D.18757>, case 21: <D.18758>, case 29: <D.18756>>
  <D.18754>:
  <D.18755>:
  <D.18756>:
  D.23618 = type->data.klass;
  D.23619 = D.23618->exception_type;
  D.23617 = (gboolean) D.23619;
  return D.23617;
  <D.18757>:
  D.23620 = type->data.array;
  D.23621 = D.23620->eklass;
  D.23622 = D.23621->exception_type;
  D.23617 = (gboolean) D.23622;
  return D.23617;
  <D.18758>:
  D.23623 = type->data.generic_class;
  D.23624 = mono_generic_class_get_class (D.23623);
  D.23625 = D.23624->exception_type;
  D.23617 = (gboolean) D.23625;
  return D.23617;
  <D.23626>:
  D.23617 = 0;
  return D.23617;
}


mono_memory_barrier ()
{
  __sync_synchronize ();
}


mono_type_get_basic_type_from_generic (struct MonoType * type)
{
  unsigned int D.23630;
  unsigned int D.23631;
  unsigned char D.23634;
  struct MonoType * D.23636;
  struct MonoClass * D.23637;

  D.23630 = BIT_FIELD_REF <*type, 32, 32>;
  D.23631 = D.23630 & 1073741824;
  if (D.23631 == 0) goto <D.23632>; else goto <D.23633>;
  <D.23632>:
  D.23634 = type->type;
  if (D.23634 == 19) goto <D.23628>; else goto <D.23635>;
  <D.23635>:
  D.23634 = type->type;
  if (D.23634 == 30) goto <D.23628>; else goto <D.23629>;
  <D.23628>:
  D.23637 = mono_defaults.object_class;
  D.23636 = &D.23637->byval_arg;
  return D.23636;
  <D.23629>:
  <D.23633>:
  D.23636 = type;
  return D.23636;
}


mono_class_layout_fields (struct MonoClass * class)
{
  unsigned int D.23639;
  unsigned int D.23640;
  unsigned int D.23643;
  unsigned int D.23644;
  struct MonoClassField * D.23647;
  unsigned int i.82;
  unsigned int D.23649;
  struct MonoType * D.23650;
  short unsigned int D.23651;
  int D.23652;
  int D.23653;
  int D.23659;
  int D.23661;
  unsigned char D.23663;
  struct MonoImage * D.23665;
  struct MonoImage * D.23666;
  int D.23667;
  struct MonoClass * D.23669;
  int D.23670;
  int D.23676;
  int D.23678;
  unsigned char D.23680;
  int D.23682;
  struct MonoClass * D.23684;
  int D.23685;
  int D.23689;
  int D.23691;
  unsigned char D.23693;
  int D.23695;
  struct MonoClass * D.23697;
  int D.23698;
  struct MonoClass * D.23707;
  unsigned char D.23710;
  int D.23713;
  int D.23715;
  int D.18862;
  int iftmp.83;
  int D.18861;
  const char[9] * D.23721;
  unsigned char D.23722;
  int D.23723;
  unsigned char D.23724;
  int D.23725;
  const unsigned char * D.23730;
  unsigned char D.23731;
  int D.23732;
  const unsigned char * D.23733;
  unsigned char D.23734;
  int D.23735;
  const unsigned char * D.23740;
  unsigned char D.23741;
  int D.23742;
  const unsigned char * D.23743;
  unsigned char D.23744;
  int D.23745;
  const unsigned char * D.23750;
  unsigned char D.23751;
  int D.23752;
  const unsigned char * D.23753;
  unsigned char D.23754;
  int D.23755;
  const char * D.23757;
  int D.23768;
  int D.23770;
  unsigned char D.23772;
  int D.23774;
  struct MonoClass * D.23776;
  int D.23777;
  int D.23784;
  int D.18872;
  int iftmp.84;
  int D.18871;
  const char[10] * D.23790;
  unsigned char D.23791;
  int D.23792;
  unsigned char D.23793;
  int D.23794;
  const unsigned char * D.23799;
  unsigned char D.23800;
  int D.23801;
  const unsigned char * D.23802;
  unsigned char D.23803;
  int D.23804;
  const unsigned char * D.23809;
  unsigned char D.23810;
  int D.23811;
  const unsigned char * D.23812;
  unsigned char D.23813;
  int D.23814;
  const unsigned char * D.23819;
  unsigned char D.23820;
  int D.23821;
  const unsigned char * D.23822;
  unsigned char D.23823;
  int D.23824;
  const char * D.23826;
  int D.23829;
  int iftmp.85;
  unsigned int D.23831;
  <unnamed-unsigned:4> D.23834;
  int D.23835;
  int align.86;
  int D.23841;
  int D.23843;
  int D.23846;
  struct MonoClass * D.23848;
  int D.23849;
  unsigned int align.87;
  unsigned int D.23851;
  int align.88;
  unsigned char D.23853;
  int D.23854;
  int D.23855;
  unsigned char D.23856;
  int real_size.89;
  int D.23860;
  int D.23861;
  int D.23862;
  int D.23863;
  int D.23864;
  int iftmp.90;
  unsigned int D.23868;
  unsigned int D.23869;
  _Bool D.23872;
  long int D.23873;
  long int D.23874;
  unsigned int D.23877;
  unsigned int D.23878;
  unsigned int D.23879;
  int D.23880;
  int D.23881;
  int D.23882;
  int D.23885;
  int D.23886;
  int D.23887;
  int D.18892;
  int iftmp.91;
  int D.18891;
  unsigned char D.23893;
  int D.23894;
  const unsigned char * D.23899;
  unsigned char D.23900;
  int D.23901;
  const unsigned char * D.23906;
  unsigned char D.23907;
  int D.23908;
  const unsigned char * D.23913;
  unsigned char D.23914;
  int D.23915;
  const char * D.23917;
  int D.23922;
  int iftmp.92;
  int align.93;
  int D.23928;
  unsigned char D.23929;
  unsigned int D.23930;
  unsigned int D.23931;
  int D.23932;
  int D.23935;
  int D.23937;
  struct MonoClass * D.23939;
  int D.23940;
  unsigned int D.23941;
  unsigned int D.23944;
  unsigned int D.23950;
  unsigned int D.23953;
  unsigned int D.23954;
  unsigned int D.23955;
  unsigned char D.23956;
  unsigned int D.23957;
  unsigned int D.23958;
  int D.18908;
  int iftmp.94;
  int D.18907;
  unsigned char D.23966;
  int D.23967;
  const unsigned char * D.23972;
  unsigned char D.23973;
  int D.23974;
  const unsigned char * D.23979;
  unsigned char D.23980;
  int D.23981;
  const unsigned char * D.23986;
  unsigned char D.23987;
  int D.23988;
  const char * D.23990;
  int D.23993;
  int D.23996;
  int D.23997;
  int align.95;
  int D.23999;
  int D.24000;
  int D.24001;
  int D.24002;
  unsigned int D.24003;
  int D.24004;
  int i;
  const int top;
  guint32 layout;
  guint32 pass;
  guint32 passes;
  guint32 real_size;
  gboolean gc_aware_layout;
  struct MonoClassField * field;

  D.23639 = class->field.count;
  top = (const int) D.23639;
  D.23640 = class->flags;
  layout = D.23640 & 24;
  gc_aware_layout = 0;
  if (layout == 0) goto <D.23641>; else goto <D.23642>;
  <D.23641>:
  D.23643 = BIT_FIELD_REF <*class, 32, 160>;
  D.23644 = D.23643 & 8;
  if (D.23644 == 0) goto <D.23645>; else goto <D.23646>;
  <D.23645>:
  gc_aware_layout = 1;
  <D.23646>:
  <D.23642>:
  i = 0;
  goto <D.18839>;
  <D.18838>:
  {
    struct MonoType * ftype;

    D.23647 = class->fields;
    i.82 = (unsigned int) i;
    D.23649 = i.82 * 16;
    field = D.23647 + D.23649;
    D.23650 = field->type;
    D.23651 = D.23650->attrs;
    D.23652 = (int) D.23651;
    D.23653 = D.23652 & 16;
    if (D.23653 == 0) goto <D.23654>; else goto <D.23655>;
    <D.23654>:
    D.23650 = field->type;
    ftype = mono_type_get_underlying_type (D.23650);
    ftype = mono_type_get_basic_type_from_generic (ftype);
    D.23659 = mono_type_is_reference (ftype);
    if (D.23659 != 0) goto <D.23656>; else goto <D.23660>;
    <D.23660>:
    D.23661 = mono_gc_is_moving ();
    if (D.23661 == 0) goto <D.23662>; else goto <D.23657>;
    <D.23662>:
    D.23663 = ftype->type;
    if (D.23663 == 25) goto <D.23664>; else goto <D.23657>;
    <D.23664>:
    D.23665 = class->image;
    D.23666 = mono_defaults.corlib;
    if (D.23665 == D.23666) goto <D.23656>; else goto <D.23657>;
    <D.23657>:
    D.23667 = mono_type_is_struct (ftype);
    if (D.23667 != 0) goto <D.23668>; else goto <D.23658>;
    <D.23668>:
    D.23669 = mono_class_from_mono_type (ftype);
    D.23670 = mono_class_has_references (D.23669);
    if (D.23670 != 0) goto <D.23656>; else goto <D.23658>;
    <D.23656>:
    class->has_references = 1;
    <D.23658>:
    <D.23655>:
  }
  i = i + 1;
  <D.18839>:
  if (i < top) goto <D.18838>; else goto <D.18840>;
  <D.18840>:
  i = 0;
  goto <D.18843>;
  <D.18842>:
  {
    struct MonoType * ftype;

    D.23647 = class->fields;
    i.82 = (unsigned int) i;
    D.23649 = i.82 * 16;
    field = D.23647 + D.23649;
    D.23650 = field->type;
    D.23651 = D.23650->attrs;
    D.23652 = (int) D.23651;
    D.23653 = D.23652 & 16;
    if (D.23653 != 0) goto <D.23671>; else goto <D.23672>;
    <D.23671>:
    D.23650 = field->type;
    ftype = mono_type_get_underlying_type (D.23650);
    ftype = mono_type_get_basic_type_from_generic (ftype);
    D.23676 = mono_type_is_reference (ftype);
    if (D.23676 != 0) goto <D.23673>; else goto <D.23677>;
    <D.23677>:
    D.23678 = mono_gc_is_moving ();
    if (D.23678 == 0) goto <D.23679>; else goto <D.23674>;
    <D.23679>:
    D.23680 = ftype->type;
    if (D.23680 == 25) goto <D.23681>; else goto <D.23674>;
    <D.23681>:
    D.23665 = class->image;
    D.23666 = mono_defaults.corlib;
    if (D.23665 == D.23666) goto <D.23673>; else goto <D.23674>;
    <D.23674>:
    D.23682 = mono_type_is_struct (ftype);
    if (D.23682 != 0) goto <D.23683>; else goto <D.23675>;
    <D.23683>:
    D.23684 = mono_class_from_mono_type (ftype);
    D.23685 = mono_class_has_references (D.23684);
    if (D.23685 != 0) goto <D.23673>; else goto <D.23675>;
    <D.23673>:
    class->has_static_refs = 1;
    <D.23675>:
    <D.23672>:
  }
  i = i + 1;
  <D.18843>:
  if (i < top) goto <D.18842>; else goto <D.18844>;
  <D.18844>:
  i = 0;
  goto <D.18847>;
  <D.18846>:
  {
    struct MonoType * ftype;

    D.23647 = class->fields;
    i.82 = (unsigned int) i;
    D.23649 = i.82 * 16;
    field = D.23647 + D.23649;
    D.23650 = field->type;
    ftype = mono_type_get_underlying_type (D.23650);
    ftype = mono_type_get_basic_type_from_generic (ftype);
    D.23689 = mono_type_is_reference (ftype);
    if (D.23689 != 0) goto <D.23686>; else goto <D.23690>;
    <D.23690>:
    D.23691 = mono_gc_is_moving ();
    if (D.23691 == 0) goto <D.23692>; else goto <D.23687>;
    <D.23692>:
    D.23693 = ftype->type;
    if (D.23693 == 25) goto <D.23694>; else goto <D.23687>;
    <D.23694>:
    D.23665 = class->image;
    D.23666 = mono_defaults.corlib;
    if (D.23665 == D.23666) goto <D.23686>; else goto <D.23687>;
    <D.23687>:
    D.23695 = mono_type_is_struct (ftype);
    if (D.23695 != 0) goto <D.23696>; else goto <D.23688>;
    <D.23696>:
    D.23697 = mono_class_from_mono_type (ftype);
    D.23698 = mono_class_has_references (D.23697);
    if (D.23698 != 0) goto <D.23686>; else goto <D.23688>;
    <D.23686>:
    D.23650 = field->type;
    D.23651 = D.23650->attrs;
    D.23652 = (int) D.23651;
    D.23653 = D.23652 & 16;
    if (D.23653 != 0) goto <D.23699>; else goto <D.23700>;
    <D.23699>:
    class->has_static_refs = 1;
    goto <D.23701>;
    <D.23700>:
    class->has_references = 1;
    <D.23701>:
    <D.23688>:
  }
  i = i + 1;
  <D.18847>:
  if (i < top) goto <D.18846>; else goto <D.18848>;
  <D.18848>:
  switch (layout) <default: <D.23947>, case 0: <D.18849>, case 8: <D.18850>, case 16: <D.18880>>
  <D.18849>:
  <D.18850>:
  if (gc_aware_layout != 0) goto <D.23702>; else goto <D.23703>;
  <D.23702>:
  passes = 2;
  goto <D.23704>;
  <D.23703>:
  passes = 1;
  <D.23704>:
  if (layout != 0) goto <D.23705>; else goto <D.23706>;
  <D.23705>:
  passes = 1;
  <D.23706>:
  D.23707 = class->parent;
  if (D.23707 != 0B) goto <D.23708>; else goto <D.23709>;
  <D.23708>:
  D.23707 = class->parent;
  mono_class_setup_fields (D.23707);
  D.23707 = class->parent;
  D.23710 = D.23707->exception_type;
  if (D.23710 != 0) goto <D.23711>; else goto <D.23712>;
  <D.23711>:
  mono_class_set_failure (class, 7, 0B);
  return;
  <D.23712>:
  D.23707 = class->parent;
  D.23713 = D.23707->instance_size;
  real_size = (guint32) D.23713;
  goto <D.23714>;
  <D.23709>:
  real_size = 8;
  <D.23714>:
  pass = 0;
  goto <D.18877>;
  <D.18876>:
  i = 0;
  goto <D.18874>;
  <D.18873>:
  {
    gint32 align;
    guint32 size;
    struct MonoType * ftype;

    try
      {
        D.23647 = class->fields;
        i.82 = (unsigned int) i;
        D.23649 = i.82 * 16;
        field = D.23647 + D.23649;
        D.23650 = field->type;
        D.23651 = D.23650->attrs;
        D.23652 = (int) D.23651;
        D.23715 = D.23652 & 1536;
        if (D.23715 != 0) goto <D.23716>; else goto <D.23717>;
        <D.23716>:
        {
          size_t __s1_len;
          size_t __s2_len;

          __s2_len = 8;
          if (__s2_len <= 3) goto <D.23719>; else goto <D.23720>;
          <D.23719>:
          {
            const unsigned char * __s2;
            int __result;

            __s2 = mono_field_get_name (field);
            D.23721 = "_Deleted";
            D.23722 = MEM[(const unsigned char *)D.23721];
            D.23723 = (int) D.23722;
            D.23724 = *__s2;
            D.23725 = (int) D.23724;
            __result = D.23723 - D.23725;
            {
              if (__s2_len != 0) goto <D.23726>; else goto <D.23727>;
              <D.23726>:
              if (__result == 0) goto <D.23728>; else goto <D.23729>;
              <D.23728>:
              D.23730 = &MEM[(void *)"_Deleted" + 1B];
              D.23731 = *D.23730;
              D.23732 = (int) D.23731;
              D.23733 = __s2 + 1;
              D.23734 = *D.23733;
              D.23735 = (int) D.23734;
              __result = D.23732 - D.23735;
              if (__s2_len > 1) goto <D.23736>; else goto <D.23737>;
              <D.23736>:
              if (__result == 0) goto <D.23738>; else goto <D.23739>;
              <D.23738>:
              D.23740 = &MEM[(void *)"_Deleted" + 2B];
              D.23741 = *D.23740;
              D.23742 = (int) D.23741;
              D.23743 = __s2 + 2;
              D.23744 = *D.23743;
              D.23745 = (int) D.23744;
              __result = D.23742 - D.23745;
              if (__s2_len > 2) goto <D.23746>; else goto <D.23747>;
              <D.23746>:
              if (__result == 0) goto <D.23748>; else goto <D.23749>;
              <D.23748>:
              D.23750 = &MEM[(void *)"_Deleted" + 3B];
              D.23751 = *D.23750;
              D.23752 = (int) D.23751;
              D.23753 = __s2 + 3;
              D.23754 = *D.23753;
              D.23755 = (int) D.23754;
              __result = D.23752 - D.23755;
              <D.23749>:
              <D.23747>:
              <D.23739>:
              <D.23737>:
              <D.23729>:
              <D.23727>:
            }
            D.18861 = __result;
          }
          iftmp.83 = -D.18861;
          goto <D.23756>;
          <D.23720>:
          D.23757 = mono_field_get_name (field);
          iftmp.83 = __builtin_strcmp (D.23757, "_Deleted");
          <D.23756>:
          D.18862 = iftmp.83;
        }
        if (D.18862 == 0) goto <D.23758>; else goto <D.23759>;
        <D.23758>:
        // predicted unlikely by continue predictor.
        goto <D.18863>;
        <D.23759>:
        <D.23717>:
        D.23650 = field->type;
        D.23651 = D.23650->attrs;
        D.23652 = (int) D.23651;
        D.23653 = D.23652 & 16;
        if (D.23653 != 0) goto <D.23760>; else goto <D.23761>;
        <D.23760>:
        // predicted unlikely by continue predictor.
        goto <D.18863>;
        <D.23761>:
        D.23650 = field->type;
        ftype = mono_type_get_underlying_type (D.23650);
        ftype = mono_type_get_basic_type_from_generic (ftype);
        if (gc_aware_layout != 0) goto <D.23762>; else goto <D.23763>;
        <D.23762>:
        D.23768 = mono_type_is_reference (ftype);
        if (D.23768 != 0) goto <D.23764>; else goto <D.23769>;
        <D.23769>:
        D.23770 = mono_gc_is_moving ();
        if (D.23770 == 0) goto <D.23771>; else goto <D.23765>;
        <D.23771>:
        D.23772 = ftype->type;
        if (D.23772 == 25) goto <D.23773>; else goto <D.23765>;
        <D.23773>:
        D.23665 = class->image;
        D.23666 = mono_defaults.corlib;
        if (D.23665 == D.23666) goto <D.23764>; else goto <D.23765>;
        <D.23765>:
        D.23774 = mono_type_is_struct (ftype);
        if (D.23774 != 0) goto <D.23775>; else goto <D.23766>;
        <D.23775>:
        D.23776 = mono_class_from_mono_type (ftype);
        D.23777 = mono_class_has_references (D.23776);
        if (D.23777 != 0) goto <D.23764>; else goto <D.23766>;
        <D.23764>:
        if (pass == 1) goto <D.23778>; else goto <D.23779>;
        <D.23778>:
        // predicted unlikely by continue predictor.
        goto <D.18863>;
        <D.23779>:
        goto <D.23767>;
        <D.23766>:
        if (pass == 0) goto <D.23780>; else goto <D.23781>;
        <D.23780>:
        // predicted unlikely by continue predictor.
        goto <D.18863>;
        <D.23781>:
        <D.23767>:
        <D.23763>:
        if (top == 1) goto <D.23782>; else goto <D.23783>;
        <D.23782>:
        D.23784 = class->instance_size;
        if (D.23784 == 8) goto <D.23785>; else goto <D.23786>;
        <D.23785>:
        {
          size_t __s1_len;
          size_t __s2_len;

          __s2_len = 9;
          if (__s2_len <= 3) goto <D.23788>; else goto <D.23789>;
          <D.23788>:
          {
            const unsigned char * __s2;
            int __result;

            __s2 = mono_field_get_name (field);
            D.23790 = "$PRIVATE$";
            D.23791 = MEM[(const unsigned char *)D.23790];
            D.23792 = (int) D.23791;
            D.23793 = *__s2;
            D.23794 = (int) D.23793;
            __result = D.23792 - D.23794;
            {
              if (__s2_len != 0) goto <D.23795>; else goto <D.23796>;
              <D.23795>:
              if (__result == 0) goto <D.23797>; else goto <D.23798>;
              <D.23797>:
              D.23799 = &MEM[(void *)"$PRIVATE$" + 1B];
              D.23800 = *D.23799;
              D.23801 = (int) D.23800;
              D.23802 = __s2 + 1;
              D.23803 = *D.23802;
              D.23804 = (int) D.23803;
              __result = D.23801 - D.23804;
              if (__s2_len > 1) goto <D.23805>; else goto <D.23806>;
              <D.23805>:
              if (__result == 0) goto <D.23807>; else goto <D.23808>;
              <D.23807>:
              D.23809 = &MEM[(void *)"$PRIVATE$" + 2B];
              D.23810 = *D.23809;
              D.23811 = (int) D.23810;
              D.23812 = __s2 + 2;
              D.23813 = *D.23812;
              D.23814 = (int) D.23813;
              __result = D.23811 - D.23814;
              if (__s2_len > 2) goto <D.23815>; else goto <D.23816>;
              <D.23815>:
              if (__result == 0) goto <D.23817>; else goto <D.23818>;
              <D.23817>:
              D.23819 = &MEM[(void *)"$PRIVATE$" + 3B];
              D.23820 = *D.23819;
              D.23821 = (int) D.23820;
              D.23822 = __s2 + 3;
              D.23823 = *D.23822;
              D.23824 = (int) D.23823;
              __result = D.23821 - D.23824;
              <D.23818>:
              <D.23816>:
              <D.23808>:
              <D.23806>:
              <D.23798>:
              <D.23796>:
            }
            D.18871 = __result;
          }
          iftmp.84 = -D.18871;
          goto <D.23825>;
          <D.23789>:
          D.23826 = mono_field_get_name (field);
          iftmp.84 = __builtin_strcmp (D.23826, "$PRIVATE$");
          <D.23825>:
          D.18872 = iftmp.84;
        }
        if (D.18872 == 0) goto <D.23827>; else goto <D.23828>;
        <D.23827>:
        // predicted unlikely by continue predictor.
        goto <D.18863>;
        <D.23828>:
        <D.23786>:
        <D.23783>:
        D.23650 = field->type;
        D.23829 = mono_type_size (D.23650, &align);
        size = (guint32) D.23829;
        D.23643 = BIT_FIELD_REF <*class, 32, 160>;
        D.23831 = D.23643 & 983040;
        if (D.23831 != 0) goto <D.23832>; else goto <D.23833>;
        <D.23832>:
        D.23834 = class->packing_size;
        D.23835 = (int) D.23834;
        align.86 = align;
        iftmp.85 = MIN_EXPR <D.23835, align.86>;
        goto <D.23837>;
        <D.23833>:
        iftmp.85 = align;
        <D.23837>:
        align = iftmp.85;
        D.23841 = mono_type_is_reference (ftype);
        if (D.23841 != 0) goto <D.23838>; else goto <D.23842>;
        <D.23842>:
        D.23843 = mono_gc_is_moving ();
        if (D.23843 == 0) goto <D.23844>; else goto <D.23839>;
        <D.23844>:
        D.23772 = ftype->type;
        if (D.23772 == 25) goto <D.23845>; else goto <D.23839>;
        <D.23845>:
        D.23665 = class->image;
        D.23666 = mono_defaults.corlib;
        if (D.23665 == D.23666) goto <D.23838>; else goto <D.23839>;
        <D.23839>:
        D.23846 = mono_type_is_struct (ftype);
        if (D.23846 != 0) goto <D.23847>; else goto <D.23840>;
        <D.23847>:
        D.23848 = mono_class_from_mono_type (ftype);
        D.23849 = mono_class_has_references (D.23848);
        if (D.23849 != 0) goto <D.23838>; else goto <D.23840>;
        <D.23838>:
        align.86 = align;
        align.87 = (unsigned int) align.86;
        D.23851 = MAX_EXPR <align.87, 4>;
        align.88 = (int) D.23851;
        align = align.88;
        <D.23840>:
        D.23853 = class->min_align;
        D.23854 = (int) D.23853;
        align.86 = align;
        D.23855 = MAX_EXPR <D.23854, align.86>;
        D.23856 = (unsigned char) D.23855;
        class->min_align = D.23856;
        real_size.89 = (int) real_size;
        field->offset = real_size.89;
        align.86 = align;
        if (align.86 != 0) goto <D.23858>; else goto <D.23859>;
        <D.23858>:
        D.23860 = field->offset;
        align.86 = align;
        D.23861 = align.86 + -1;
        D.23862 = D.23860 + D.23861;
        field->offset = D.23862;
        D.23860 = field->offset;
        align.86 = align;
        D.23863 = -align.86;
        D.23864 = D.23860 & D.23863;
        field->offset = D.23864;
        <D.23859>:
        D.23665 = class->image;
        D.23868 = BIT_FIELD_REF <*D.23665, 32, 128>;
        D.23869 = D.23868 & 8;
        if (D.23869 == 0) goto <D.23870>; else goto <D.23866>;
        <D.23870>:
        D.23860 = field->offset;
        if (D.23860 <= 0) goto <D.23871>; else goto <D.23866>;
        <D.23871>:
        iftmp.90 = 1;
        goto <D.23867>;
        <D.23866>:
        iftmp.90 = 0;
        <D.23867>:
        D.23872 = iftmp.90 != 0;
        D.23873 = (long int) D.23872;
        D.23874 = __builtin_expect (D.23873, 0);
        if (D.23874 != 0) goto <D.23875>; else goto <D.23876>;
        <D.23875>:
        monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "class.c", 1894, "class->image->dynamic || field->offset > 0");
        <D.23876>:
        D.23860 = field->offset;
        D.23877 = (unsigned int) D.23860;
        real_size = D.23877 + size;
      }
    finally
      {
        align = {CLOBBER};
      }
  }
  <D.18863>:
  i = i + 1;
  <D.18874>:
  if (i < top) goto <D.18873>; else goto <D.18875>;
  <D.18875>:
  D.23784 = class->instance_size;
  D.23878 = (unsigned int) D.23784;
  D.23879 = MAX_EXPR <D.23878, real_size>;
  D.23880 = (int) D.23879;
  class->instance_size = D.23880;
  D.23784 = class->instance_size;
  D.23853 = class->min_align;
  D.23854 = (int) D.23853;
  D.23881 = D.23854 + -1;
  D.23882 = D.23784 & D.23881;
  if (D.23882 != 0) goto <D.23883>; else goto <D.23884>;
  <D.23883>:
  D.23784 = class->instance_size;
  D.23853 = class->min_align;
  D.23854 = (int) D.23853;
  D.23881 = D.23854 + -1;
  D.23885 = D.23784 + D.23881;
  class->instance_size = D.23885;
  D.23784 = class->instance_size;
  D.23853 = class->min_align;
  D.23854 = (int) D.23853;
  D.23886 = -D.23854;
  D.23887 = D.23784 & D.23886;
  class->instance_size = D.23887;
  <D.23884>:
  pass = pass + 1;
  <D.18877>:
  if (pass < passes) goto <D.18876>; else goto <D.18878>;
  <D.18878>:
  goto <D.18879>;
  <D.18880>:
  real_size = 0;
  i = 0;
  goto <D.18895>;
  <D.18894>:
  {
    gint32 align;
    guint32 size;
    struct MonoType * ftype;

    try
      {
        D.23647 = class->fields;
        i.82 = (unsigned int) i;
        D.23649 = i.82 * 16;
        field = D.23647 + D.23649;
        D.23650 = field->type;
        D.23651 = D.23650->attrs;
        D.23652 = (int) D.23651;
        D.23715 = D.23652 & 1536;
        if (D.23715 != 0) goto <D.23888>; else goto <D.23889>;
        <D.23888>:
        {
          size_t __s1_len;
          size_t __s2_len;

          __s2_len = 8;
          if (__s2_len <= 3) goto <D.23891>; else goto <D.23892>;
          <D.23891>:
          {
            const unsigned char * __s2;
            int __result;

            __s2 = mono_field_get_name (field);
            D.23721 = "_Deleted";
            D.23722 = MEM[(const unsigned char *)D.23721];
            D.23723 = (int) D.23722;
            D.23893 = *__s2;
            D.23894 = (int) D.23893;
            __result = D.23723 - D.23894;
            {
              if (__s2_len != 0) goto <D.23895>; else goto <D.23896>;
              <D.23895>:
              if (__result == 0) goto <D.23897>; else goto <D.23898>;
              <D.23897>:
              D.23730 = &MEM[(void *)"_Deleted" + 1B];
              D.23731 = *D.23730;
              D.23732 = (int) D.23731;
              D.23899 = __s2 + 1;
              D.23900 = *D.23899;
              D.23901 = (int) D.23900;
              __result = D.23732 - D.23901;
              if (__s2_len > 1) goto <D.23902>; else goto <D.23903>;
              <D.23902>:
              if (__result == 0) goto <D.23904>; else goto <D.23905>;
              <D.23904>:
              D.23740 = &MEM[(void *)"_Deleted" + 2B];
              D.23741 = *D.23740;
              D.23742 = (int) D.23741;
              D.23906 = __s2 + 2;
              D.23907 = *D.23906;
              D.23908 = (int) D.23907;
              __result = D.23742 - D.23908;
              if (__s2_len > 2) goto <D.23909>; else goto <D.23910>;
              <D.23909>:
              if (__result == 0) goto <D.23911>; else goto <D.23912>;
              <D.23911>:
              D.23750 = &MEM[(void *)"_Deleted" + 3B];
              D.23751 = *D.23750;
              D.23752 = (int) D.23751;
              D.23913 = __s2 + 3;
              D.23914 = *D.23913;
              D.23915 = (int) D.23914;
              __result = D.23752 - D.23915;
              <D.23912>:
              <D.23910>:
              <D.23905>:
              <D.23903>:
              <D.23898>:
              <D.23896>:
            }
            D.18891 = __result;
          }
          iftmp.91 = -D.18891;
          goto <D.23916>;
          <D.23892>:
          D.23917 = mono_field_get_name (field);
          iftmp.91 = __builtin_strcmp (D.23917, "_Deleted");
          <D.23916>:
          D.18892 = iftmp.91;
        }
        if (D.18892 == 0) goto <D.23918>; else goto <D.23919>;
        <D.23918>:
        // predicted unlikely by continue predictor.
        goto <D.18893>;
        <D.23919>:
        <D.23889>:
        D.23650 = field->type;
        D.23651 = D.23650->attrs;
        D.23652 = (int) D.23651;
        D.23653 = D.23652 & 16;
        if (D.23653 != 0) goto <D.23920>; else goto <D.23921>;
        <D.23920>:
        // predicted unlikely by continue predictor.
        goto <D.18893>;
        <D.23921>:
        D.23650 = field->type;
        D.23922 = mono_type_size (D.23650, &align);
        size = (guint32) D.23922;
        D.23643 = BIT_FIELD_REF <*class, 32, 160>;
        D.23831 = D.23643 & 983040;
        if (D.23831 != 0) goto <D.23924>; else goto <D.23925>;
        <D.23924>:
        D.23834 = class->packing_size;
        D.23835 = (int) D.23834;
        align.93 = align;
        iftmp.92 = MIN_EXPR <D.23835, align.93>;
        goto <D.23927>;
        <D.23925>:
        iftmp.92 = align;
        <D.23927>:
        align = iftmp.92;
        D.23853 = class->min_align;
        D.23854 = (int) D.23853;
        align.93 = align;
        D.23928 = MAX_EXPR <D.23854, align.93>;
        D.23929 = (unsigned char) D.23928;
        class->min_align = D.23929;
        D.23860 = field->offset;
        D.23930 = (unsigned int) D.23860;
        D.23931 = D.23930 + 8;
        D.23932 = (int) D.23931;
        field->offset = D.23932;
        D.23650 = field->type;
        ftype = mono_type_get_underlying_type (D.23650);
        ftype = mono_type_get_basic_type_from_generic (ftype);
        D.23935 = mono_type_is_reference (ftype);
        if (D.23935 != 0) goto <D.23933>; else goto <D.23936>;
        <D.23936>:
        D.23937 = mono_type_is_struct (ftype);
        if (D.23937 != 0) goto <D.23938>; else goto <D.23934>;
        <D.23938>:
        D.23939 = mono_class_from_mono_type (ftype);
        D.23940 = mono_class_has_references (D.23939);
        if (D.23940 != 0) goto <D.23933>; else goto <D.23934>;
        <D.23933>:
        D.23860 = field->offset;
        D.23930 = (unsigned int) D.23860;
        D.23941 = D.23930 & 3;
        if (D.23941 != 0) goto <D.23942>; else goto <D.23943>;
        <D.23942>:
        mono_class_set_failure (class, 7, 0B);
        <D.23943>:
        <D.23934>:
        D.23860 = field->offset;
        D.23877 = (unsigned int) D.23860;
        D.23944 = D.23877 + size;
        real_size = MAX_EXPR <D.23944, real_size>;
      }
    finally
      {
        align = {CLOBBER};
      }
  }
  <D.18893>:
  i = i + 1;
  <D.18895>:
  if (i < top) goto <D.18894>; else goto <D.18896>;
  <D.18896>:
  D.23784 = class->instance_size;
  D.23878 = (unsigned int) D.23784;
  D.23879 = MAX_EXPR <D.23878, real_size>;
  D.23880 = (int) D.23879;
  class->instance_size = D.23880;
  D.23784 = class->instance_size;
  D.23853 = class->min_align;
  D.23854 = (int) D.23853;
  D.23881 = D.23854 + -1;
  D.23882 = D.23784 & D.23881;
  if (D.23882 != 0) goto <D.23945>; else goto <D.23946>;
  <D.23945>:
  D.23784 = class->instance_size;
  D.23853 = class->min_align;
  D.23854 = (int) D.23853;
  D.23881 = D.23854 + -1;
  D.23885 = D.23784 + D.23881;
  class->instance_size = D.23885;
  D.23784 = class->instance_size;
  D.23853 = class->min_align;
  D.23854 = (int) D.23853;
  D.23886 = -D.23854;
  D.23887 = D.23784 & D.23886;
  class->instance_size = D.23887;
  <D.23946>:
  goto <D.18879>;
  <D.23947>:
  <D.18879>:
  if (layout != 16) goto <D.23948>; else goto <D.23949>;
  <D.23948>:
  D.23784 = class->instance_size;
  D.23950 = (unsigned int) D.23784;
  if (D.23950 <= 12) goto <D.23951>; else goto <D.23952>;
  <D.23951>:
  D.23784 = class->instance_size;
  D.23950 = (unsigned int) D.23784;
  D.23953 = D.23950 + 4294967288;
  D.23853 = class->min_align;
  D.23954 = (unsigned int) D.23853;
  D.23955 = MAX_EXPR <D.23953, D.23954>;
  D.23956 = (unsigned char) D.23955;
  class->min_align = D.23956;
  <D.23952>:
  <D.23949>:
  mono_memory_barrier ();
  class->size_inited = 1;
  i = 0;
  goto <D.18911>;
  <D.18910>:
  {
    gint32 align;
    guint32 size;

    try
      {
        D.23647 = class->fields;
        i.82 = (unsigned int) i;
        D.23649 = i.82 * 16;
        field = D.23647 + D.23649;
        D.23650 = field->type;
        D.23651 = D.23650->attrs;
        D.23957 = (unsigned int) D.23651;
        D.23958 = D.23957 & 80;
        if (D.23958 != 16) goto <D.23959>; else goto <D.23960>;
        <D.23959>:
        // predicted unlikely by continue predictor.
        goto <D.18899>;
        <D.23960>:
        D.23650 = field->type;
        D.23651 = D.23650->attrs;
        D.23652 = (int) D.23651;
        D.23715 = D.23652 & 1536;
        if (D.23715 != 0) goto <D.23961>; else goto <D.23962>;
        <D.23961>:
        {
          size_t __s1_len;
          size_t __s2_len;

          __s2_len = 8;
          if (__s2_len <= 3) goto <D.23964>; else goto <D.23965>;
          <D.23964>:
          {
            const unsigned char * __s2;
            int __result;

            __s2 = mono_field_get_name (field);
            D.23721 = "_Deleted";
            D.23722 = MEM[(const unsigned char *)D.23721];
            D.23723 = (int) D.23722;
            D.23966 = *__s2;
            D.23967 = (int) D.23966;
            __result = D.23723 - D.23967;
            {
              if (__s2_len != 0) goto <D.23968>; else goto <D.23969>;
              <D.23968>:
              if (__result == 0) goto <D.23970>; else goto <D.23971>;
              <D.23970>:
              D.23730 = &MEM[(void *)"_Deleted" + 1B];
              D.23731 = *D.23730;
              D.23732 = (int) D.23731;
              D.23972 = __s2 + 1;
              D.23973 = *D.23972;
              D.23974 = (int) D.23973;
              __result = D.23732 - D.23974;
              if (__s2_len > 1) goto <D.23975>; else goto <D.23976>;
              <D.23975>:
              if (__result == 0) goto <D.23977>; else goto <D.23978>;
              <D.23977>:
              D.23740 = &MEM[(void *)"_Deleted" + 2B];
              D.23741 = *D.23740;
              D.23742 = (int) D.23741;
              D.23979 = __s2 + 2;
              D.23980 = *D.23979;
              D.23981 = (int) D.23980;
              __result = D.23742 - D.23981;
              if (__s2_len > 2) goto <D.23982>; else goto <D.23983>;
              <D.23982>:
              if (__result == 0) goto <D.23984>; else goto <D.23985>;
              <D.23984>:
              D.23750 = &MEM[(void *)"_Deleted" + 3B];
              D.23751 = *D.23750;
              D.23752 = (int) D.23751;
              D.23986 = __s2 + 3;
              D.23987 = *D.23986;
              D.23988 = (int) D.23987;
              __result = D.23752 - D.23988;
              <D.23985>:
              <D.23983>:
              <D.23978>:
              <D.23976>:
              <D.23971>:
              <D.23969>:
            }
            D.18907 = __result;
          }
          iftmp.94 = -D.18907;
          goto <D.23989>;
          <D.23965>:
          D.23990 = mono_field_get_name (field);
          iftmp.94 = __builtin_strcmp (D.23990, "_Deleted");
          <D.23989>:
          D.18908 = iftmp.94;
        }
        if (D.18908 == 0) goto <D.23991>; else goto <D.23992>;
        <D.23991>:
        // predicted unlikely by continue predictor.
        goto <D.18899>;
        <D.23992>:
        <D.23962>:
        D.23650 = field->type;
        D.23993 = mono_type_has_exceptions (D.23650);
        if (D.23993 != 0) goto <D.23994>; else goto <D.23995>;
        <D.23994>:
        mono_class_set_failure (class, 7, 0B);
        goto <D.18909>;
        <D.23995>:
        D.23650 = field->type;
        D.23996 = mono_type_size (D.23650, &align);
        size = (guint32) D.23996;
        D.23997 = class->sizes.class_size;
        field->offset = D.23997;
        D.23860 = field->offset;
        align.95 = align;
        D.23999 = align.95 + -1;
        D.24000 = D.23860 + D.23999;
        field->offset = D.24000;
        D.23860 = field->offset;
        align.95 = align;
        D.24001 = -align.95;
        D.24002 = D.23860 & D.24001;
        field->offset = D.24002;
        D.23860 = field->offset;
        D.23877 = (unsigned int) D.23860;
        D.24003 = D.23877 + size;
        D.24004 = (int) D.24003;
        class->sizes.class_size = D.24004;
      }
    finally
      {
        align = {CLOBBER};
      }
  }
  <D.18899>:
  i = i + 1;
  <D.18911>:
  if (i < top) goto <D.18910>; else goto <D.18909>;
  <D.18909>:
}


mono_class_has_references (struct MonoClass * klass)
{
  unsigned int D.24013;
  unsigned int D.24014;
  gboolean D.24017;
  <unnamed-unsigned:1> D.24018;

  D.24013 = BIT_FIELD_REF <*klass, 32, 160>;
  D.24014 = D.24013 & 2;
  if (D.24014 != 0) goto <D.24015>; else goto <D.24016>;
  <D.24015>:
  D.24017 = 1;
  return D.24017;
  <D.24016>:
  mono_class_init (klass);
  D.24018 = klass->has_references;
  D.24017 = (gboolean) D.24018;
  return D.24017;
}


mono_class_setup_methods (struct MonoClass * class)
{
  struct MonoMethod * * D.24020;
  struct MonoGenericClass * D.24025;
  unsigned char D.24028;
  gchar * D.24033;
  unsigned int D.24034;
  unsigned int D.24035;
  unsigned int D.24036;
  unsigned int D.24037;
  int D.24038;
  unsigned int i.96;
  unsigned int D.24040;
  struct MonoMethod * * D.24041;
  struct MonoMethod * * D.24042;
  struct MonoMethod * * D.24043;
  struct MonoMethod * D.24044;
  struct MonoGenericContext * D.24045;
  struct MonoMethod * D.24046;
  int D.24047;
  const char * D.24050;
  gchar * D.24051;
  unsigned int i.97;
  unsigned char D.24054;
  guint32 iftmp.98;
  int D.24061;
  _Bool D.24062;
  long int D.24063;
  long int D.24064;
  short unsigned int D.24067;
  int D.24070;
  int D.24071;
  unsigned int D.24072;
  unsigned int D.24073;
  unsigned int D.24074;
  int D.24075;
  struct MonoImage * D.24076;
  unsigned int D.24077;
  struct MonoClass * D.24078;
  struct MonoType * D.24079;
  struct MonoClass * D.24080;
  struct MonoType * D.24081;
  int D.24082;
  int method_num.99;
  unsigned int method_num.100;
  unsigned int D.24085;
  struct MonoMethod * * D.24086;
  int D.24089;
  unsigned int D.24090;
  int method_num.101;
  unsigned int method_num.102;
  unsigned int D.24093;
  struct MonoMethod * * D.24094;
  struct MonoClass * D.24095;
  struct MonoType * D.24096;
  int method_num.103;
  unsigned int method_num.104;
  unsigned int D.24099;
  struct MonoMethod * * D.24100;
  struct MonoType * D.24101;
  int method_num.105;
  unsigned int method_num.106;
  unsigned int D.24104;
  struct MonoMethod * * D.24105;
  int D.24106;
  unsigned int D.24107;
  int method_num.107;
  unsigned int method_num.108;
  unsigned int D.24110;
  struct MonoMethod * * D.24111;
  struct MonoClass * * D.24112;
  struct MonoClass * * D.24113;
  struct MonoClass * D.24114;
  int D.24115;
  int D.24116;
  unsigned int D.24118;
  unsigned int D.24119;
  unsigned int D.24120;
  unsigned int D.24121;
  int D.24122;
  unsigned int D.24123;
  struct MonoMethod * D.24124;
  unsigned int D.24127;
  unsigned int D.24128;
  unsigned char D.24130;
  struct MonoMethod * D.24132;
  short unsigned int D.24133;
  int D.24134;
  int D.24135;
  int slot.109;
  short int D.24139;
  int i;
  struct MonoMethod * * methods;

  D.24020 = class->methods;
  if (D.24020 != 0B) goto <D.24021>; else goto <D.24022>;
  <D.24021>:
  return;
  <D.24022>:
  mono_loader_lock ();
  D.24020 = class->methods;
  if (D.24020 != 0B) goto <D.24023>; else goto <D.24024>;
  <D.24023>:
  mono_loader_unlock ();
  return;
  <D.24024>:
  D.24025 = class->generic_class;
  if (D.24025 != 0B) goto <D.24026>; else goto <D.24027>;
  <D.24026>:
  {
    struct MonoError error;
    struct MonoClass * gklass;

    try
      {
        D.24025 = class->generic_class;
        gklass = D.24025->container_class;
        mono_class_init (gklass);
        D.24028 = gklass->exception_type;
        if (D.24028 == 0) goto <D.24029>; else goto <D.24030>;
        <D.24029>:
        mono_class_setup_methods (gklass);
        <D.24030>:
        D.24028 = gklass->exception_type;
        if (D.24028 != 0) goto <D.24031>; else goto <D.24032>;
        <D.24031>:
        D.24033 = monoeg_strdup ("Generic type definition failed to load");
        mono_class_set_failure (class, 7, D.24033);
        mono_loader_unlock ();
        return;
        <D.24032>:
        D.24034 = gklass->method.count;
        class->method.count = D.24034;
        D.24035 = class->method.count;
        D.24036 = D.24035 + 1;
        D.24037 = D.24036 * 4;
        D.24038 = (int) D.24037;
        methods = mono_class_alloc0 (class, D.24038);
        i = 0;
        goto <D.18927>;
        <D.18926>:
        i.96 = (unsigned int) i;
        D.24040 = i.96 * 4;
        D.24041 = methods + D.24040;
        D.24042 = gklass->methods;
        i.96 = (unsigned int) i;
        D.24040 = i.96 * 4;
        D.24043 = D.24042 + D.24040;
        D.24044 = *D.24043;
        D.24045 = mono_class_get_context (class);
        D.24046 = mono_class_inflate_generic_method_full_checked (D.24044, class, D.24045, &error);
        *D.24041 = D.24046;
        D.24047 = mono_error_ok (&error);
        if (D.24047 == 0) goto <D.24048>; else goto <D.24049>;
        <D.24048>:
        {
          char * method;

          D.24042 = gklass->methods;
          i.96 = (unsigned int) i;
          D.24040 = i.96 * 4;
          D.24043 = D.24042 + D.24040;
          D.24044 = *D.24043;
          method = mono_method_full_name (D.24044, 1);
          D.24050 = mono_error_get_message (&error);
          D.24051 = monoeg_g_strdup_printf ("Could not inflate method %s due to %s", method, D.24050);
          mono_class_set_failure (class, 7, D.24051);
          monoeg_g_free (method);
          mono_error_cleanup (&error);
          mono_loader_unlock ();
          return;
        }
        <D.24049>:
        i = i + 1;
        <D.18927>:
        i.97 = (unsigned int) i;
        D.24035 = class->method.count;
        if (i.97 < D.24035) goto <D.18926>; else goto <D.18928>;
        <D.18928>:
      }
    finally
      {
        error = {CLOBBER};
      }
  }
  goto <D.24053>;
  <D.24027>:
  D.24054 = class->rank;
  if (D.24054 != 0) goto <D.24055>; else goto <D.24056>;
  <D.24055>:
  {
    struct MonoError error;
    struct MonoMethod * amethod;
    struct MonoMethodSignature * sig;
    int count_generic;
    int first_generic;
    int method_num;

    try
      {
        count_generic = 0;
        first_generic = 0;
        method_num = 0;
        D.24054 = class->rank;
        if (D.24054 > 1) goto <D.24058>; else goto <D.24059>;
        <D.24058>:
        iftmp.98 = 5;
        goto <D.24060>;
        <D.24059>:
        iftmp.98 = 4;
        <D.24060>:
        class->method.count = iftmp.98;
        mono_class_setup_interfaces (class, &error);
        D.24061 = mono_error_ok (&error);
        D.24062 = D.24061 == 0;
        D.24063 = (long int) D.24062;
        D.24064 = __builtin_expect (D.24063, 0);
        if (D.24064 != 0) goto <D.24065>; else goto <D.24066>;
        <D.24065>:
        monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "class.c", 2088, "mono_error_ok (&error)");
        <D.24066>:
        D.24067 = class->interface_count;
        if (D.24067 != 0) goto <D.24068>; else goto <D.24069>;
        <D.24068>:
        count_generic = generic_array_methods (class);
        D.24035 = class->method.count;
        first_generic = (int) D.24035;
        D.24035 = class->method.count;
        D.24067 = class->interface_count;
        D.24070 = (int) D.24067;
        D.24071 = D.24070 * count_generic;
        D.24072 = (unsigned int) D.24071;
        D.24073 = D.24035 + D.24072;
        class->method.count = D.24073;
        <D.24069>:
        D.24035 = class->method.count;
        D.24074 = D.24035 * 4;
        D.24075 = (int) D.24074;
        methods = mono_class_alloc0 (class, D.24075);
        D.24076 = class->image;
        D.24054 = class->rank;
        D.24077 = (unsigned int) D.24054;
        sig = mono_metadata_signature_alloc (D.24076, D.24077);
        D.24078 = mono_defaults.void_class;
        D.24079 = &D.24078->byval_arg;
        sig->ret = D.24079;
        sig->pinvoke = 1;
        sig->hasthis = 1;
        i = 0;
        goto <D.18936>;
        <D.18935>:
        D.24080 = mono_defaults.int32_class;
        D.24081 = &D.24080->byval_arg;
        sig->params[i] = D.24081;
        i = i + 1;
        <D.18936>:
        D.24054 = class->rank;
        D.24082 = (int) D.24054;
        if (D.24082 > i) goto <D.18935>; else goto <D.18937>;
        <D.18937>:
        amethod = create_array_method (class, ".ctor", sig);
        method_num.99 = method_num;
        method_num = method_num.99 + 1;
        method_num.100 = (unsigned int) method_num.99;
        D.24085 = method_num.100 * 4;
        D.24086 = methods + D.24085;
        *D.24086 = amethod;
        D.24054 = class->rank;
        if (D.24054 > 1) goto <D.24087>; else goto <D.24088>;
        <D.24087>:
        D.24076 = class->image;
        D.24054 = class->rank;
        D.24082 = (int) D.24054;
        D.24089 = D.24082 * 2;
        D.24090 = (unsigned int) D.24089;
        sig = mono_metadata_signature_alloc (D.24076, D.24090);
        D.24078 = mono_defaults.void_class;
        D.24079 = &D.24078->byval_arg;
        sig->ret = D.24079;
        sig->pinvoke = 1;
        sig->hasthis = 1;
        i = 0;
        goto <D.18939>;
        <D.18938>:
        D.24080 = mono_defaults.int32_class;
        D.24081 = &D.24080->byval_arg;
        sig->params[i] = D.24081;
        i = i + 1;
        <D.18939>:
        D.24054 = class->rank;
        D.24082 = (int) D.24054;
        D.24089 = D.24082 * 2;
        if (D.24089 > i) goto <D.18938>; else goto <D.18940>;
        <D.18940>:
        amethod = create_array_method (class, ".ctor", sig);
        method_num.101 = method_num;
        method_num = method_num.101 + 1;
        method_num.102 = (unsigned int) method_num.101;
        D.24093 = method_num.102 * 4;
        D.24094 = methods + D.24093;
        *D.24094 = amethod;
        <D.24088>:
        D.24076 = class->image;
        D.24054 = class->rank;
        D.24077 = (unsigned int) D.24054;
        sig = mono_metadata_signature_alloc (D.24076, D.24077);
        D.24095 = class->element_class;
        D.24096 = &D.24095->byval_arg;
        sig->ret = D.24096;
        sig->pinvoke = 1;
        sig->hasthis = 1;
        i = 0;
        goto <D.18942>;
        <D.18941>:
        D.24080 = mono_defaults.int32_class;
        D.24081 = &D.24080->byval_arg;
        sig->params[i] = D.24081;
        i = i + 1;
        <D.18942>:
        D.24054 = class->rank;
        D.24082 = (int) D.24054;
        if (D.24082 > i) goto <D.18941>; else goto <D.18943>;
        <D.18943>:
        amethod = create_array_method (class, "Get", sig);
        method_num.103 = method_num;
        method_num = method_num.103 + 1;
        method_num.104 = (unsigned int) method_num.103;
        D.24099 = method_num.104 * 4;
        D.24100 = methods + D.24099;
        *D.24100 = amethod;
        D.24076 = class->image;
        D.24054 = class->rank;
        D.24077 = (unsigned int) D.24054;
        sig = mono_metadata_signature_alloc (D.24076, D.24077);
        D.24095 = class->element_class;
        D.24101 = &D.24095->this_arg;
        sig->ret = D.24101;
        sig->pinvoke = 1;
        sig->hasthis = 1;
        i = 0;
        goto <D.18945>;
        <D.18944>:
        D.24080 = mono_defaults.int32_class;
        D.24081 = &D.24080->byval_arg;
        sig->params[i] = D.24081;
        i = i + 1;
        <D.18945>:
        D.24054 = class->rank;
        D.24082 = (int) D.24054;
        if (D.24082 > i) goto <D.18944>; else goto <D.18946>;
        <D.18946>:
        amethod = create_array_method (class, "Address", sig);
        method_num.105 = method_num;
        method_num = method_num.105 + 1;
        method_num.106 = (unsigned int) method_num.105;
        D.24104 = method_num.106 * 4;
        D.24105 = methods + D.24104;
        *D.24105 = amethod;
        D.24076 = class->image;
        D.24054 = class->rank;
        D.24082 = (int) D.24054;
        D.24106 = D.24082 + 1;
        D.24107 = (unsigned int) D.24106;
        sig = mono_metadata_signature_alloc (D.24076, D.24107);
        D.24078 = mono_defaults.void_class;
        D.24079 = &D.24078->byval_arg;
        sig->ret = D.24079;
        sig->pinvoke = 1;
        sig->hasthis = 1;
        i = 0;
        goto <D.18948>;
        <D.18947>:
        D.24080 = mono_defaults.int32_class;
        D.24081 = &D.24080->byval_arg;
        sig->params[i] = D.24081;
        i = i + 1;
        <D.18948>:
        D.24054 = class->rank;
        D.24082 = (int) D.24054;
        if (D.24082 > i) goto <D.18947>; else goto <D.18949>;
        <D.18949>:
        D.24095 = class->element_class;
        D.24096 = &D.24095->byval_arg;
        sig->params[i] = D.24096;
        amethod = create_array_method (class, "Set", sig);
        method_num.107 = method_num;
        method_num = method_num.107 + 1;
        method_num.108 = (unsigned int) method_num.107;
        D.24110 = method_num.108 * 4;
        D.24111 = methods + D.24110;
        *D.24111 = amethod;
        i = 0;
        goto <D.18951>;
        <D.18950>:
        D.24112 = class->interfaces;
        i.96 = (unsigned int) i;
        D.24040 = i.96 * 4;
        D.24113 = D.24112 + D.24040;
        D.24114 = *D.24113;
        D.24115 = i * count_generic;
        D.24116 = D.24115 + first_generic;
        setup_generic_array_ifaces (class, D.24114, methods, D.24116);
        i = i + 1;
        <D.18951>:
        D.24067 = class->interface_count;
        D.24070 = (int) D.24067;
        if (D.24070 > i) goto <D.18950>; else goto <D.18952>;
        <D.18952>:
      }
    finally
      {
        error = {CLOBBER};
      }
  }
  goto <D.24117>;
  <D.24056>:
  D.24035 = class->method.count;
  D.24074 = D.24035 * 4;
  D.24075 = (int) D.24074;
  methods = mono_class_alloc (class, D.24075);
  i = 0;
  goto <D.18955>;
  <D.18954>:
  {
    int idx;

    D.24076 = class->image;
    D.24118 = class->method.first;
    i.97 = (unsigned int) i;
    D.24119 = D.24118 + i.97;
    D.24120 = D.24119 + 1;
    D.24121 = mono_metadata_translate_token_index (D.24076, 6, D.24120);
    idx = (int) D.24121;
    i.96 = (unsigned int) i;
    D.24040 = i.96 * 4;
    D.24041 = methods + D.24040;
    D.24076 = class->image;
    D.24122 = idx | 100663296;
    D.24123 = (unsigned int) D.24122;
    D.24124 = mono_get_method (D.24076, D.24123, class);
    *D.24041 = D.24124;
  }
  i = i + 1;
  <D.18955>:
  i.97 = (unsigned int) i;
  D.24035 = class->method.count;
  if (i.97 < D.24035) goto <D.18954>; else goto <D.18956>;
  <D.18956>:
  <D.24117>:
  <D.24053>:
  D.24127 = class->flags;
  D.24128 = D.24127 & 32;
  if (D.24128 != 0) goto <D.24125>; else goto <D.24129>;
  <D.24129>:
  D.24130 = class->byval_arg.type;
  if (D.24130 == 19) goto <D.24125>; else goto <D.24131>;
  <D.24131>:
  D.24130 = class->byval_arg.type;
  if (D.24130 == 30) goto <D.24125>; else goto <D.24126>;
  <D.24125>:
  {
    int slot;

    slot = 0;
    i = 0;
    goto <D.18959>;
    <D.18958>:
    i.96 = (unsigned int) i;
    D.24040 = i.96 * 4;
    D.24041 = methods + D.24040;
    D.24132 = *D.24041;
    D.24133 = D.24132->flags;
    D.24134 = (int) D.24133;
    D.24135 = D.24134 & 64;
    if (D.24135 != 0) goto <D.24136>; else goto <D.24137>;
    <D.24136>:
    i.96 = (unsigned int) i;
    D.24040 = i.96 * 4;
    D.24041 = methods + D.24040;
    D.24132 = *D.24041;
    slot.109 = slot;
    slot = slot.109 + 1;
    D.24139 = (short int) slot.109;
    D.24132->slot = D.24139;
    <D.24137>:
    i = i + 1;
    <D.18959>:
    i.97 = (unsigned int) i;
    D.24035 = class->method.count;
    if (i.97 < D.24035) goto <D.18958>; else goto <D.18960>;
    <D.18960>:
  }
  <D.24126>:
  mono_memory_barrier ();
  class->methods = methods;
  mono_loader_unlock ();
}


generic_array_methods (struct MonoClass * class)
{
  int generic_array_method_num.110;
  int D.24146;
  struct MonoClass * D.24147;
  unsigned char D.24148;
  _Bool D.24149;
  long int D.24150;
  long int D.24151;
  struct MonoMethod * * D.24154;
  unsigned int i.111;
  unsigned int D.24156;
  struct MonoMethod * * D.24157;
  const char * D.24158;
  int D.24159;
  unsigned int i.112;
  unsigned int D.24163;
  struct MonoImage * D.24164;
  unsigned int count_generic.113;
  unsigned int D.24166;
  void * generic_array_method_info.114;
  struct GenericArrayMethodInfo * generic_array_method_info.115;
  unsigned int D.24169;
  struct GenericArrayMethodInfo * D.24170;
  const char * D.24171;
  int D.24172;
  int D.24176;
  unsigned int D.24180;
  int D.24181;
  unsigned int D.24184;
  unsigned int D.24186;
  int D.24187;
  unsigned int D.24190;
  int D.24192;
  unsigned int D.24196;
  unsigned int D.24197;
  unsigned int D.24198;
  unsigned int D.24199;
  unsigned int D.24200;
  gchar * D.24201;
  int i;
  int count_generic;
  struct GList * list;
  struct GList * tmp;

  count_generic = 0;
  list = 0B;
  generic_array_method_num.110 = generic_array_method_num;
  if (generic_array_method_num.110 != 0) goto <D.24144>; else goto <D.24145>;
  <D.24144>:
  D.24146 = generic_array_method_num;
  return D.24146;
  <D.24145>:
  D.24147 = class->parent;
  mono_class_setup_methods (D.24147);
  D.24147 = class->parent;
  D.24148 = D.24147->exception_type;
  D.24149 = D.24148 != 0;
  D.24150 = (long int) D.24149;
  D.24151 = __builtin_expect (D.24150, 0);
  if (D.24151 != 0) goto <D.24152>; else goto <D.24153>;
  <D.24152>:
  monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "class.c", 4760, "!class->parent->exception_type");
  <D.24153>:
  i = 0;
  goto <D.19793>;
  <D.19792>:
  {
    struct MonoMethod * m;

    D.24147 = class->parent;
    D.24154 = D.24147->methods;
    i.111 = (unsigned int) i;
    D.24156 = i.111 * 4;
    D.24157 = D.24154 + D.24156;
    m = *D.24157;
    D.24158 = m->name;
    D.24159 = strncmp (D.24158, "InternalArray__", 15);
    if (D.24159 == 0) goto <D.24160>; else goto <D.24161>;
    <D.24160>:
    count_generic = count_generic + 1;
    list = monoeg_g_list_prepend (list, m);
    <D.24161>:
  }
  i = i + 1;
  <D.19793>:
  i.112 = (unsigned int) i;
  D.24147 = class->parent;
  D.24163 = D.24147->method.count;
  if (i.112 < D.24163) goto <D.19792>; else goto <D.19794>;
  <D.19794>:
  list = monoeg_g_list_reverse (list);
  D.24164 = mono_defaults.corlib;
  count_generic.113 = (unsigned int) count_generic;
  D.24166 = count_generic.113 * 8;
  generic_array_method_info.114 = mono_image_alloc (D.24164, D.24166);
  generic_array_method_info = generic_array_method_info.114;
  i = 0;
  tmp = list;
  goto <D.19847>;
  <D.19846>:
  {
    const char * mname;
    const char * iname;
    gchar * name;
    struct MonoMethod * m;
    const char * ireadonlylist_prefix;
    const char * ireadonlycollection_prefix;

    m = tmp->data;
    ireadonlylist_prefix = "InternalArray__IReadOnlyList_";
    ireadonlycollection_prefix = "InternalArray__IReadOnlyCollection_";
    generic_array_method_info.115 = generic_array_method_info;
    i.111 = (unsigned int) i;
    D.24169 = i.111 * 8;
    D.24170 = generic_array_method_info.115 + D.24169;
    D.24170->array_method = m;
    D.24171 = m->name;
    D.24172 = strncmp (D.24171, "InternalArray__ICollection_", 27);
    if (D.24172 == 0) goto <D.24173>; else goto <D.24174>;
    <D.24173>:
    iname = "System.Collections.Generic.ICollection`1.";
    D.24171 = m->name;
    mname = D.24171 + 27;
    goto <D.24175>;
    <D.24174>:
    D.24171 = m->name;
    D.24176 = strncmp (D.24171, "InternalArray__IEnumerable_", 27);
    if (D.24176 == 0) goto <D.24177>; else goto <D.24178>;
    <D.24177>:
    iname = "System.Collections.Generic.IEnumerable`1.";
    D.24171 = m->name;
    mname = D.24171 + 27;
    goto <D.24179>;
    <D.24178>:
    D.24171 = m->name;
    D.24180 = strlen (ireadonlylist_prefix);
    D.24181 = strncmp (D.24171, ireadonlylist_prefix, D.24180);
    if (D.24181 == 0) goto <D.24182>; else goto <D.24183>;
    <D.24182>:
    iname = "System.Collections.Generic.IReadOnlyList`1.";
    D.24171 = m->name;
    D.24184 = strlen (ireadonlylist_prefix);
    mname = D.24171 + D.24184;
    goto <D.24185>;
    <D.24183>:
    D.24171 = m->name;
    D.24186 = strlen (ireadonlycollection_prefix);
    D.24187 = strncmp (D.24171, ireadonlycollection_prefix, D.24186);
    if (D.24187 == 0) goto <D.24188>; else goto <D.24189>;
    <D.24188>:
    iname = "System.Collections.Generic.IReadOnlyCollection`1.";
    D.24171 = m->name;
    D.24190 = strlen (ireadonlycollection_prefix);
    mname = D.24171 + D.24190;
    goto <D.24191>;
    <D.24189>:
    D.24171 = m->name;
    D.24192 = strncmp (D.24171, "InternalArray__", 15);
    if (D.24192 == 0) goto <D.24193>; else goto <D.24194>;
    <D.24193>:
    iname = "System.Collections.Generic.IList`1.";
    D.24171 = m->name;
    mname = D.24171 + 15;
    goto <D.24195>;
    <D.24194>:
    monoeg_assertion_message ("* Assertion: should not be reached at %s:%d\n", "class.c", 4795);
    <D.24195>:
    <D.24191>:
    <D.24185>:
    <D.24179>:
    <D.24175>:
    D.24164 = mono_defaults.corlib;
    D.24196 = strlen (iname);
    D.24197 = strlen (mname);
    D.24198 = D.24196 + D.24197;
    D.24199 = D.24198 + 1;
    name = mono_image_alloc (D.24164, D.24199);
    strcpy (name, iname);
    D.24200 = strlen (iname);
    D.24201 = name + D.24200;
    strcpy (D.24201, mname);
    generic_array_method_info.115 = generic_array_method_info;
    i.111 = (unsigned int) i;
    D.24169 = i.111 * 8;
    D.24170 = generic_array_method_info.115 + D.24169;
    D.24170->name = name;
    i = i + 1;
  }
  tmp = tmp->next;
  <D.19847>:
  if (tmp != 0B) goto <D.19846>; else goto <D.19848>;
  <D.19848>:
  generic_array_method_num = count_generic;
  monoeg_g_list_free (list);
  D.24146 = generic_array_method_num;
  return D.24146;
}


strcpy (char * restrict __dest, const char * restrict __src)
{
  char * D.24203;
  unsigned int D.24204;

  D.24204 = __builtin_object_size (__dest, 1);
  D.24203 = __builtin___strcpy_chk (__dest, __src, D.24204);
  return D.24203;
}


create_array_method (struct MonoClass * class, const char * name, struct MonoMethodSignature * sig)
{
  struct MonoImage * D.24206;
  char D.24207;
  short unsigned int D.24210;
  short unsigned int D.24211;
  short unsigned int D.24213;
  short unsigned int D.24214;
  struct MonoMethod * D.24215;
  struct MonoMethod * method;

  D.24206 = class->image;
  method = mono_image_alloc0 (D.24206, 32);
  method->klass = class;
  method->flags = 6;
  method->iflags = 4096;
  method->signature = sig;
  method->name = name;
  method->slot = -1;
  D.24207 = *name;
  if (D.24207 == 46) goto <D.24208>; else goto <D.24209>;
  <D.24208>:
  D.24210 = method->flags;
  D.24211 = D.24210 | 6144;
  method->flags = D.24211;
  goto <D.24212>;
  <D.24209>:
  D.24213 = method->iflags;
  D.24214 = D.24213 | 3;
  method->iflags = D.24214;
  <D.24212>:
  D.24215 = method;
  return D.24215;
}


setup_generic_array_ifaces (struct MonoClass * class, struct MonoClass * iface, struct MonoMethod * * methods, int pos)
{
  struct MonoGenericClass * D.24217;
  struct MonoGenericInst * D.24218;
  struct GenericArrayMethodInfo * generic_array_method_info.116;
  unsigned int i.117;
  unsigned int D.24221;
  struct GenericArrayMethodInfo * D.24222;
  int pos.118;
  unsigned int pos.119;
  unsigned int D.24225;
  struct MonoMethod * * D.24226;
  char * D.24227;
  struct MonoMethod * D.24228;
  int generic_array_method_num.120;
  struct MonoGenericContext tmp_context;
  int i;

  try
    {
      tmp_context.class_inst = 0B;
      D.24217 = iface->generic_class;
      D.24218 = D.24217->context.class_inst;
      tmp_context.method_inst = D.24218;
      i = 0;
      goto <D.19860>;
      <D.19859>:
      {
        struct MonoMethod * m;
        struct MonoMethod * inflated;

        generic_array_method_info.116 = generic_array_method_info;
        i.117 = (unsigned int) i;
        D.24221 = i.117 * 8;
        D.24222 = generic_array_method_info.116 + D.24221;
        m = D.24222->array_method;
        inflated = mono_class_inflate_generic_method (m, &tmp_context);
        pos.118 = pos;
        pos = pos.118 + 1;
        pos.119 = (unsigned int) pos.118;
        D.24225 = pos.119 * 4;
        D.24226 = methods + D.24225;
        generic_array_method_info.116 = generic_array_method_info;
        i.117 = (unsigned int) i;
        D.24221 = i.117 * 8;
        D.24222 = generic_array_method_info.116 + D.24221;
        D.24227 = D.24222->name;
        D.24228 = mono_marshal_get_generic_array_helper (class, iface, D.24227, inflated);
        *D.24226 = D.24228;
      }
      i = i + 1;
      <D.19860>:
      generic_array_method_num.120 = generic_array_method_num;
      if (i < generic_array_method_num.120) goto <D.19859>; else goto <D.19861>;
      <D.19861>:
    }
  finally
    {
      tmp_context = {CLOBBER};
    }
}


mono_class_get_method_by_index (struct MonoClass * class, int index)
{
  struct MonoGenericClass * D.24231;
  struct MonoMethod * * D.24233;
  struct MonoMethod * * D.24235;
  unsigned int index.121;
  unsigned int D.24237;
  struct MonoMethod * * D.24238;
  struct MonoMethod * D.24239;
  struct MonoGenericContext * D.24240;
  struct MonoMethod * D.24241;
  unsigned char D.24242;
  int iftmp.122;
  unsigned int index.123;
  unsigned int D.24251;
  _Bool D.24252;
  long int D.24253;
  long int D.24254;
  struct MonoMethod * * D.24257;

  D.24231 = class->generic_class;
  if (D.24231 != 0B) goto <D.24232>; else goto <D.24230>;
  <D.24232>:
  D.24233 = class->methods;
  if (D.24233 == 0B) goto <D.24234>; else goto <D.24230>;
  <D.24234>:
  {
    struct MonoClass * gklass;
    struct MonoMethod * m;

    D.24231 = class->generic_class;
    gklass = D.24231->container_class;
    D.24235 = gklass->methods;
    index.121 = (unsigned int) index;
    D.24237 = index.121 * 4;
    D.24238 = D.24235 + D.24237;
    D.24239 = *D.24238;
    D.24240 = mono_class_get_context (class);
    m = mono_class_inflate_generic_method_full (D.24239, class, D.24240);
    D.24241 = m;
    return D.24241;
  }
  <D.24230>:
  mono_class_setup_methods (class);
  D.24242 = class->exception_type;
  if (D.24242 != 0) goto <D.24243>; else goto <D.24244>;
  <D.24243>:
  D.24241 = 0B;
  return D.24241;
  <D.24244>:
  if (index < 0) goto <D.24246>; else goto <D.24249>;
  <D.24249>:
  index.123 = (unsigned int) index;
  D.24251 = class->method.count;
  if (index.123 >= D.24251) goto <D.24246>; else goto <D.24247>;
  <D.24246>:
  iftmp.122 = 1;
  goto <D.24248>;
  <D.24247>:
  iftmp.122 = 0;
  <D.24248>:
  D.24252 = iftmp.122 != 0;
  D.24253 = (long int) D.24252;
  D.24254 = __builtin_expect (D.24253, 0);
  if (D.24254 != 0) goto <D.24255>; else goto <D.24256>;
  <D.24255>:
  monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "class.c", 2205, "index >= 0 && index < class->method.count");
  <D.24256>:
  D.24233 = class->methods;
  index.121 = (unsigned int) index;
  D.24237 = index.121 * 4;
  D.24257 = D.24233 + D.24237;
  D.24241 = *D.24257;
  return D.24241;
}


mono_class_get_inflated_method (struct MonoClass * class, struct MonoMethod * method)
{
  struct MonoGenericClass * D.24259;
  struct MonoClass * D.24260;
  _Bool D.24261;
  long int D.24262;
  long int D.24263;
  unsigned char D.24266;
  _Bool D.24267;
  long int D.24268;
  long int D.24269;
  struct MonoMethod * * D.24272;
  unsigned int i.124;
  unsigned int D.24274;
  struct MonoMethod * * D.24275;
  struct MonoMethod * D.24276;
  struct MonoMethod * * D.24279;
  struct MonoMethod * D.24282;
  struct MonoMethod * * D.24283;
  struct MonoGenericContext * D.24284;
  unsigned int i.125;
  unsigned int D.24286;
  struct MonoClass * gklass;
  int i;

  D.24259 = class->generic_class;
  gklass = D.24259->container_class;
  D.24260 = method->klass;
  D.24261 = D.24260 != gklass;
  D.24262 = (long int) D.24261;
  D.24263 = __builtin_expect (D.24262, 0);
  if (D.24263 != 0) goto <D.24264>; else goto <D.24265>;
  <D.24264>:
  monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "class.c", 2222, "method->klass == gklass");
  <D.24265>:
  mono_class_setup_methods (gklass);
  D.24266 = gklass->exception_type;
  D.24267 = D.24266 != 0;
  D.24268 = (long int) D.24267;
  D.24269 = __builtin_expect (D.24268, 0);
  if (D.24269 != 0) goto <D.24270>; else goto <D.24271>;
  <D.24270>:
  monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "class.c", 2225, "!gklass->exception_type");
  <D.24271>:
  i = 0;
  goto <D.18974>;
  <D.18973>:
  D.24272 = gklass->methods;
  i.124 = (unsigned int) i;
  D.24274 = i.124 * 4;
  D.24275 = D.24272 + D.24274;
  D.24276 = *D.24275;
  if (D.24276 == method) goto <D.24277>; else goto <D.24278>;
  <D.24277>:
  D.24279 = class->methods;
  if (D.24279 != 0B) goto <D.24280>; else goto <D.24281>;
  <D.24280>:
  D.24279 = class->methods;
  i.124 = (unsigned int) i;
  D.24274 = i.124 * 4;
  D.24283 = D.24279 + D.24274;
  D.24282 = *D.24283;
  return D.24282;
  <D.24281>:
  D.24272 = gklass->methods;
  i.124 = (unsigned int) i;
  D.24274 = i.124 * 4;
  D.24275 = D.24272 + D.24274;
  D.24276 = *D.24275;
  D.24284 = mono_class_get_context (class);
  D.24282 = mono_class_inflate_generic_method_full (D.24276, class, D.24284);
  return D.24282;
  <D.24278>:
  i = i + 1;
  <D.18974>:
  i.125 = (unsigned int) i;
  D.24286 = gklass->method.count;
  if (i.125 < D.24286) goto <D.18973>; else goto <D.18975>;
  <D.18975>:
  D.24282 = 0B;
  return D.24282;
}


mono_class_get_vtable_entry (struct MonoClass * class, int offset)
{
  unsigned char D.24288;
  struct MonoClass * D.24291;
  int D.24292;
  struct MonoMethod * D.24295;
  struct MonoMethod * * D.24296;
  unsigned int offset.126;
  unsigned int D.24298;
  struct MonoMethod * * D.24299;
  struct MonoGenericClass * D.24300;
  struct MonoMethod * * D.24303;
  struct MonoMethod * * D.24304;
  struct MonoGenericContext * D.24305;
  unsigned char D.24307;
  struct MonoMethod * * D.24310;
  struct MonoMethod * * D.24311;
  struct MonoMethod * m;

  D.24288 = class->rank;
  if (D.24288 == 1) goto <D.24289>; else goto <D.24290>;
  <D.24289>:
  D.24291 = class->parent;
  mono_class_setup_vtable (D.24291);
  D.24291 = class->parent;
  D.24292 = D.24291->vtable_size;
  if (D.24292 > offset) goto <D.24293>; else goto <D.24294>;
  <D.24293>:
  D.24291 = class->parent;
  D.24296 = D.24291->vtable;
  offset.126 = (unsigned int) offset;
  D.24298 = offset.126 * 4;
  D.24299 = D.24296 + D.24298;
  D.24295 = *D.24299;
  return D.24295;
  <D.24294>:
  <D.24290>:
  D.24300 = class->generic_class;
  if (D.24300 != 0B) goto <D.24301>; else goto <D.24302>;
  <D.24301>:
  {
    struct MonoClass * gklass;

    D.24300 = class->generic_class;
    gklass = D.24300->container_class;
    mono_class_setup_vtable (gklass);
    D.24303 = gklass->vtable;
    offset.126 = (unsigned int) offset;
    D.24298 = offset.126 * 4;
    D.24304 = D.24303 + D.24298;
    m = *D.24304;
    D.24305 = mono_class_get_context (class);
    m = mono_class_inflate_generic_method_full (m, class, D.24305);
  }
  goto <D.24306>;
  <D.24302>:
  mono_class_setup_vtable (class);
  D.24307 = class->exception_type;
  if (D.24307 != 0) goto <D.24308>; else goto <D.24309>;
  <D.24308>:
  D.24295 = 0B;
  return D.24295;
  <D.24309>:
  D.24310 = class->vtable;
  offset.126 = (unsigned int) offset;
  D.24298 = offset.126 * 4;
  D.24311 = D.24310 + D.24298;
  m = *D.24311;
  <D.24306>:
  D.24295 = m;
  return D.24295;
}


mono_class_get_vtable_size (struct MonoClass * klass)
{
  int D.24313;

  mono_class_setup_vtable (klass);
  D.24313 = klass->vtable_size;
  return D.24313;
}


mono_unload_interface_ids (struct MonoBitSet * bitset)
{
  struct MonoBitSet * global_interface_bitset.127;

  mono_loader_lock ();
  global_interface_bitset.127 = global_interface_bitset;
  mono_bitset_sub (global_interface_bitset.127, bitset);
  mono_loader_unlock ();
}


mono_unload_interface_id (struct MonoClass * class)
{
  struct MonoBitSet * global_interface_bitset.128;
  short unsigned int D.24319;
  unsigned int D.24322;

  global_interface_bitset.128 = global_interface_bitset;
  if (global_interface_bitset.128 != 0B) goto <D.24317>; else goto <D.24318>;
  <D.24317>:
  D.24319 = class->interface_id;
  if (D.24319 != 0) goto <D.24320>; else goto <D.24321>;
  <D.24320>:
  mono_loader_lock ();
  global_interface_bitset.128 = global_interface_bitset;
  D.24319 = class->interface_id;
  D.24322 = (unsigned int) D.24319;
  mono_bitset_clear (global_interface_bitset.128, D.24322);
  mono_loader_unlock ();
  <D.24321>:
  <D.24318>:
}


mono_class_get_implemented_interfaces (struct MonoClass * klass, struct MonoError * error)
{
  int D.24323;
  struct GPtrArray * res.129;
  struct GPtrArray * D.24329;
  struct GPtrArray * res;

  try
    {
      res = 0B;
      collect_implemented_interfaces_aux (klass, &res, error);
      D.24323 = mono_error_ok (error);
      if (D.24323 == 0) goto <D.24324>; else goto <D.24325>;
      <D.24324>:
      res.129 = res;
      if (res.129 != 0B) goto <D.24327>; else goto <D.24328>;
      <D.24327>:
      res.129 = res;
      monoeg_g_ptr_array_free (res.129, 1);
      <D.24328>:
      D.24329 = 0B;
      return D.24329;
      <D.24325>:
      D.24329 = res;
      return D.24329;
    }
  finally
    {
      res = {CLOBBER};
    }
}


collect_implemented_interfaces_aux (struct MonoClass * klass, struct GPtrArray * * res, struct MonoError * error)
{
  int D.24332;
  struct MonoClass * * D.24335;
  unsigned int i.130;
  unsigned int D.24337;
  struct MonoClass * * D.24338;
  struct GPtrArray * D.24339;
  struct GPtrArray * D.24342;
  unsigned char D.24343;
  int D.24346;
  short unsigned int D.24349;
  int D.24350;
  int i;
  struct MonoClass * ic;

  mono_class_setup_interfaces (klass, error);
  D.24332 = mono_error_ok (error);
  if (D.24332 == 0) goto <D.24333>; else goto <D.24334>;
  <D.24333>:
  return;
  <D.24334>:
  i = 0;
  goto <D.19090>;
  <D.19089>:
  D.24335 = klass->interfaces;
  i.130 = (unsigned int) i;
  D.24337 = i.130 * 4;
  D.24338 = D.24335 + D.24337;
  ic = *D.24338;
  D.24339 = *res;
  if (D.24339 == 0B) goto <D.24340>; else goto <D.24341>;
  <D.24340>:
  D.24342 = monoeg_g_ptr_array_new ();
  *res = D.24342;
  <D.24341>:
  D.24339 = *res;
  monoeg_g_ptr_array_add (D.24339, ic);
  mono_class_init (ic);
  D.24343 = ic->exception_type;
  if (D.24343 != 0) goto <D.24344>; else goto <D.24345>;
  <D.24344>:
  mono_error_set_type_load_class (error, ic, "Error Loading class");
  return;
  <D.24345>:
  collect_implemented_interfaces_aux (ic, res, error);
  D.24346 = mono_error_ok (error);
  if (D.24346 == 0) goto <D.24347>; else goto <D.24348>;
  <D.24347>:
  return;
  <D.24348>:
  i = i + 1;
  <D.19090>:
  D.24349 = klass->interface_count;
  D.24350 = (int) D.24349;
  if (D.24350 > i) goto <D.19089>; else goto <D.19091>;
  <D.19091>:
}


mono_class_interface_offset (struct MonoClass * klass, struct MonoClass * itf)
{
  struct MonoClass * * D.24352;
  short unsigned int D.24353;
  unsigned int D.24354;
  int D.24357;
  guint16 * D.24358;
  int result.131;
  int D.24360;
  int D.24361;
  int D.24362;
  unsigned int D.24363;
  unsigned int D.24364;
  guint16 * D.24365;
  short unsigned int D.24366;
  struct MonoClass * * result;

  D.24352 = klass->interfaces_packed;
  D.24353 = klass->interface_offsets_count;
  D.24354 = (unsigned int) D.24353;
  result = mono_binary_search (itf, D.24352, D.24354, 4, compare_interface_ids);
  if (result != 0B) goto <D.24355>; else goto <D.24356>;
  <D.24355>:
  D.24358 = klass->interface_offsets_packed;
  result.131 = (int) result;
  D.24352 = klass->interfaces_packed;
  D.24360 = (int) D.24352;
  D.24361 = result.131 - D.24360;
  D.24362 = D.24361 /[ex] 4;
  D.24363 = (unsigned int) D.24362;
  D.24364 = D.24363 * 2;
  D.24365 = D.24358 + D.24364;
  D.24366 = *D.24365;
  D.24357 = (int) D.24366;
  return D.24357;
  <D.24356>:
  D.24357 = -1;
  return D.24357;
}


compare_interface_ids (const void * p_key, const void * p_element)
{
  int D.24368;
  short unsigned int D.24369;
  int D.24370;
  short unsigned int D.24371;
  int D.24372;
  const struct MonoClass * key;
  const struct MonoClass * element;

  key = p_key;
  element = MEM[(struct MonoClass * *)p_element];
  D.24369 = key->interface_id;
  D.24370 = (int) D.24369;
  D.24371 = element->interface_id;
  D.24372 = (int) D.24371;
  D.24368 = D.24370 - D.24372;
  return D.24368;
}


mono_class_interface_offset_with_variance (struct MonoClass * klass, struct MonoClass * itf, gboolean * non_exact_match)
{
  int D.24376;
  int D.24377;
  struct MonoClass * * D.24380;
  unsigned int i.132;
  unsigned int D.24382;
  struct MonoClass * * D.24383;
  struct MonoClass * D.24384;
  int D.24385;
  guint16 * D.24388;
  unsigned int D.24389;
  guint16 * D.24390;
  short unsigned int D.24391;
  short unsigned int D.24392;
  int D.24393;
  int i;

  i = mono_class_interface_offset (klass, itf);
  *non_exact_match = 0;
  if (i >= 0) goto <D.24374>; else goto <D.24375>;
  <D.24374>:
  D.24376 = i;
  return D.24376;
  <D.24375>:
  D.24377 = mono_class_has_variant_generic_params (itf);
  if (D.24377 == 0) goto <D.24378>; else goto <D.24379>;
  <D.24378>:
  D.24376 = -1;
  return D.24376;
  <D.24379>:
  i = 0;
  goto <D.19115>;
  <D.19114>:
  D.24380 = klass->interfaces_packed;
  i.132 = (unsigned int) i;
  D.24382 = i.132 * 4;
  D.24383 = D.24380 + D.24382;
  D.24384 = *D.24383;
  D.24385 = mono_class_is_variant_compatible (itf, D.24384, 0);
  if (D.24385 != 0) goto <D.24386>; else goto <D.24387>;
  <D.24386>:
  *non_exact_match = 1;
  D.24388 = klass->interface_offsets_packed;
  i.132 = (unsigned int) i;
  D.24389 = i.132 * 2;
  D.24390 = D.24388 + D.24389;
  D.24391 = *D.24390;
  D.24376 = (int) D.24391;
  return D.24376;
  <D.24387>:
  i = i + 1;
  <D.19115>:
  D.24392 = klass->interface_offsets_count;
  D.24393 = (int) D.24392;
  if (D.24393 > i) goto <D.19114>; else goto <D.19116>;
  <D.19116>:
  D.24376 = -1;
  return D.24376;
}


mono_class_setup_interface_offsets (struct MonoClass * class)
{
  mono_loader_lock ();
  setup_interface_offsets (class, 0, 0);
  mono_loader_unlock ();
}


setup_interface_offsets (struct MonoClass * class, int cur_slot, gboolean overwrite)
{
  short unsigned int D.24395;
  unsigned int D.24396;
  unsigned int D.24397;
  struct MonoClass * * D.24398;
  unsigned int j.133;
  unsigned int D.24400;
  struct MonoClass * * D.24401;
  short unsigned int D.24402;
  int D.24403;
  struct MonoClass * * D.24404;
  unsigned int i.134;
  unsigned int D.24406;
  struct MonoClass * * D.24407;
  unsigned int D.24408;
  unsigned int D.24409;
  short unsigned int D.24412;
  int D.24413;
  int D.24416;
  const char * D.24419;
  gchar * D.24420;
  unsigned int D.24423;
  unsigned int num_ifaces.135;
  unsigned int D.24425;
  void * * D.24426;
  void * * D.24427;
  unsigned int i.136;
  struct GPtrArray * * D.24431;
  int D.24432;
  struct MonoClass * * D.24433;
  int num_array_interfaces.137;
  unsigned int D.24439;
  unsigned int D.24440;
  unsigned char D.24442;
  short unsigned int D.24444;
  int D.24445;
  short unsigned int D.24448;
  unsigned int num_ifaces.138;
  unsigned int D.24450;
  int * D.24451;
  _Bool D.24454;
  long int D.24455;
  long int D.24456;
  int D.24459;
  sizetype D.24460;
  sizetype D.24461;
  sizetype D.24462;
  struct MonoClass * * D.24463;
  struct MonoClass * D.24464;
  _Bool D.24465;
  long int D.24466;
  long int D.24467;
  struct GPtrArray * * D.24470;
  int D.24473;
  gchar * D.24478;
  int is_enumerator.139;
  struct MonoClass * * D.24488;
  unsigned int ienumerator_idx.140;
  unsigned int D.24490;
  struct MonoClass * * D.24491;
  struct MonoClass * D.24492;
  _Bool D.24493;
  long int D.24494;
  long int D.24495;
  int D.19331;
  int iftmp.141;
  int D.19330;
  const char[14] * D.24501;
  unsigned char D.24502;
  int D.24503;
  unsigned char D.24504;
  int D.24505;
  const unsigned char * D.24510;
  unsigned char D.24511;
  int D.24512;
  const unsigned char * D.24513;
  unsigned char D.24514;
  int D.24515;
  const unsigned char * D.24520;
  unsigned char D.24521;
  int D.24522;
  const unsigned char * D.24523;
  unsigned char D.24524;
  int D.24525;
  const unsigned char * D.24530;
  unsigned char D.24531;
  int D.24532;
  const unsigned char * D.24533;
  unsigned char D.24534;
  int D.24535;
  const char * D.24537;
  unsigned int ilist_iface_idx.142;
  unsigned int D.24543;
  struct MonoClass * * D.24544;
  struct MonoClass * iftmp.143;
  unsigned int ireadonlylist_iface_idx.144;
  unsigned int D.24549;
  struct MonoClass * * D.24550;
  int iftmp.145;
  struct MonoClass * D.24556;
  struct MonoClass * * D.24557;
  unsigned int icollection_iface_idx.146;
  unsigned int D.24559;
  struct MonoClass * * D.24560;
  struct MonoClass * D.24561;
  unsigned int ienumerable_iface_idx.147;
  unsigned int D.24563;
  struct MonoClass * * D.24564;
  struct MonoClass * D.24565;
  int iftmp.148;
  struct MonoClass * D.24569;
  int iftmp.149;
  struct MonoClass * * D.24574;
  unsigned int ireadonlycollection_iface_idx.150;
  unsigned int D.24576;
  struct MonoClass * * D.24577;
  struct MonoClass * D.24578;
  int iftmp.151;
  _Bool D.24586;
  long int D.24587;
  long int D.24588;
  struct MonoGenericClass * D.24591;
  struct MonoClass * D.24592;
  struct MonoClass * D.24593;
  int D.19356;
  int iftmp.152;
  int D.19355;
  const char[14] * D.24600;
  unsigned char D.24601;
  int D.24602;
  unsigned char D.24603;
  int D.24604;
  const unsigned char * D.24609;
  unsigned char D.24610;
  int D.24611;
  const unsigned char * D.24612;
  unsigned char D.24613;
  int D.24614;
  const unsigned char * D.24619;
  unsigned char D.24620;
  int D.24621;
  const unsigned char * D.24622;
  unsigned char D.24623;
  int D.24624;
  const unsigned char * D.24629;
  unsigned char D.24630;
  int D.24631;
  const unsigned char * D.24632;
  unsigned char D.24633;
  int D.24634;
  int D.19365;
  int iftmp.153;
  int D.19364;
  const char[14] * D.24642;
  unsigned char D.24643;
  int D.24644;
  unsigned char D.24645;
  int D.24646;
  const unsigned char * D.24651;
  unsigned char D.24652;
  int D.24653;
  const unsigned char * D.24654;
  unsigned char D.24655;
  int D.24656;
  const unsigned char * D.24661;
  unsigned char D.24662;
  int D.24663;
  const unsigned char * D.24664;
  unsigned char D.24665;
  int D.24666;
  const unsigned char * D.24671;
  unsigned char D.24672;
  int D.24673;
  const unsigned char * D.24674;
  unsigned char D.24675;
  int D.24676;
  int D.19374;
  int iftmp.154;
  int D.19373;
  const char[16] * D.24684;
  unsigned char D.24685;
  int D.24686;
  unsigned char D.24687;
  int D.24688;
  const unsigned char * D.24693;
  unsigned char D.24694;
  int D.24695;
  const unsigned char * D.24696;
  unsigned char D.24697;
  int D.24698;
  const unsigned char * D.24703;
  unsigned char D.24704;
  int D.24705;
  const unsigned char * D.24706;
  unsigned char D.24707;
  int D.24708;
  const unsigned char * D.24713;
  unsigned char D.24714;
  int D.24715;
  const unsigned char * D.24716;
  unsigned char D.24717;
  int D.24718;
  int D.19383;
  int iftmp.155;
  int D.19382;
  const char[22] * D.24726;
  unsigned char D.24727;
  int D.24728;
  unsigned char D.24729;
  int D.24730;
  const unsigned char * D.24735;
  unsigned char D.24736;
  int D.24737;
  const unsigned char * D.24738;
  unsigned char D.24739;
  int D.24740;
  const unsigned char * D.24745;
  unsigned char D.24746;
  int D.24747;
  const unsigned char * D.24748;
  unsigned char D.24749;
  int D.24750;
  const unsigned char * D.24755;
  unsigned char D.24756;
  int D.24757;
  const unsigned char * D.24758;
  unsigned char D.24759;
  int D.24760;
  int D.24765;
  struct MonoClass * * D.24770;
  short unsigned int D.24773;
  int D.24774;
  _Bool D.24775;
  long int D.24776;
  long int D.24777;
  short unsigned int D.24780;
  unsigned int interface_offsets_count.156;
  unsigned int D.24782;
  int D.24783;
  void * D.24784;
  unsigned int D.24785;
  int D.24786;
  void * D.24787;
  int D.24788;
  int D.24789;
  unsigned int D.24790;
  unsigned int iftmp.157;
  int D.24792;
  unsigned int D.24796;
  struct MonoClass * * D.24797;
  struct MonoClass * D.24798;
  short unsigned int D.24799;
  int D.24800;
  sizetype D.24801;
  uint8_t * D.24802;
  unsigned char D.24803;
  signed char D.24804;
  int D.24805;
  int D.24806;
  signed char D.24807;
  signed char D.24808;
  unsigned char D.24809;
  struct MonoClass * * D.24810;
  guint16 * D.24811;
  unsigned int D.24812;
  guint16 * D.24813;
  short unsigned int D.24814;
  struct GPtrArray * * D.24815;
  int D.24818;
  struct MonoError error;
  struct MonoClass * k;
  struct MonoClass * ic;
  int i;
  int j;
  int max_iid;
  int num_ifaces;
  struct MonoClass * * interfaces_full;
  int * interface_offsets_full;
  struct GPtrArray * ifaces;
  struct GPtrArray * * ifaces_array;
  int interface_offsets_count;
  struct MonoClass * * array_interfaces;
  int num_array_interfaces;
  int is_enumerator;
  void end = <<< error >>>;

  try
    {
      interfaces_full = 0B;
      interface_offsets_full = 0B;
      ifaces_array = 0B;
      array_interfaces = 0B;
      is_enumerator = 0;
      mono_class_setup_supertypes (class);
      array_interfaces = get_implicit_generic_array_interfaces (class, &num_array_interfaces, &is_enumerator);
      max_iid = 0;
      num_ifaces = num_array_interfaces;
      D.24395 = class->idepth;
      D.24396 = (unsigned int) D.24395;
      D.24397 = D.24396 * 4;
      ifaces_array = monoeg_malloc0 (D.24397);
      j = 0;
      goto <D.19300>;
      <D.19299>:
      D.24398 = class->supertypes;
      j.133 = (unsigned int) j;
      D.24400 = j.133 * 4;
      D.24401 = D.24398 + D.24400;
      k = *D.24401;
      D.24402 = k->interface_count;
      D.24403 = (int) D.24402;
      num_ifaces = D.24403 + num_ifaces;
      i = 0;
      goto <D.19292>;
      <D.19291>:
      D.24404 = k->interfaces;
      i.134 = (unsigned int) i;
      D.24406 = i.134 * 4;
      D.24407 = D.24404 + D.24406;
      ic = *D.24407;
      D.24408 = BIT_FIELD_REF <*ic, 32, 160>;
      D.24409 = D.24408 & 1;
      if (D.24409 == 0) goto <D.24410>; else goto <D.24411>;
      <D.24410>:
      mono_class_init (ic);
      <D.24411>:
      D.24412 = ic->interface_id;
      D.24413 = (int) D.24412;
      if (D.24413 > max_iid) goto <D.24414>; else goto <D.24415>;
      <D.24414>:
      D.24412 = ic->interface_id;
      max_iid = (int) D.24412;
      <D.24415>:
      i = i + 1;
      <D.19292>:
      D.24402 = k->interface_count;
      D.24403 = (int) D.24402;
      if (D.24403 > i) goto <D.19291>; else goto <D.19293>;
      <D.19293>:
      ifaces = mono_class_get_implemented_interfaces (k, &error);
      D.24416 = mono_error_ok (&error);
      if (D.24416 == 0) goto <D.24417>; else goto <D.24418>;
      <D.24417>:
      {
        char * name;

        name = mono_type_get_full_name (k);
        D.24419 = mono_error_get_message (&error);
        D.24420 = monoeg_g_strdup_printf ("Error getting the interfaces of %s due to %s", name, D.24419);
        mono_class_set_failure (class, 7, D.24420);
        monoeg_g_free (name);
        mono_error_cleanup (&error);
        cur_slot = -1;
        goto end;
      }
      <D.24418>:
      if (ifaces != 0B) goto <D.24421>; else goto <D.24422>;
      <D.24421>:
      D.24423 = ifaces->len;
      num_ifaces.135 = (unsigned int) num_ifaces;
      D.24425 = D.24423 + num_ifaces.135;
      num_ifaces = (int) D.24425;
      i = 0;
      goto <D.19297>;
      <D.19296>:
      D.24426 = ifaces->pdata;
      i.134 = (unsigned int) i;
      D.24406 = i.134 * 4;
      D.24427 = D.24426 + D.24406;
      ic = *D.24427;
      D.24412 = ic->interface_id;
      D.24413 = (int) D.24412;
      if (D.24413 > max_iid) goto <D.24428>; else goto <D.24429>;
      <D.24428>:
      D.24412 = ic->interface_id;
      max_iid = (int) D.24412;
      <D.24429>:
      i = i + 1;
      <D.19297>:
      i.136 = (unsigned int) i;
      D.24423 = ifaces->len;
      if (i.136 < D.24423) goto <D.19296>; else goto <D.19298>;
      <D.19298>:
      j.133 = (unsigned int) j;
      D.24400 = j.133 * 4;
      D.24431 = ifaces_array + D.24400;
      *D.24431 = ifaces;
      <D.24422>:
      j = j + 1;
      <D.19300>:
      D.24395 = class->idepth;
      D.24432 = (int) D.24395;
      if (D.24432 > j) goto <D.19299>; else goto <D.19301>;
      <D.19301>:
      i = 0;
      goto <D.19303>;
      <D.19302>:
      i.134 = (unsigned int) i;
      D.24406 = i.134 * 4;
      D.24433 = array_interfaces + D.24406;
      ic = *D.24433;
      mono_class_init (ic);
      D.24412 = ic->interface_id;
      D.24413 = (int) D.24412;
      if (D.24413 > max_iid) goto <D.24434>; else goto <D.24435>;
      <D.24434>:
      D.24412 = ic->interface_id;
      max_iid = (int) D.24412;
      <D.24435>:
      i = i + 1;
      <D.19303>:
      num_array_interfaces.137 = num_array_interfaces;
      if (i < num_array_interfaces.137) goto <D.19302>; else goto <D.19304>;
      <D.19304>:
      D.24439 = class->flags;
      D.24440 = D.24439 & 32;
      if (D.24440 != 0) goto <D.24437>; else goto <D.24441>;
      <D.24441>:
      D.24442 = class->byval_arg.type;
      if (D.24442 == 19) goto <D.24437>; else goto <D.24443>;
      <D.24443>:
      D.24442 = class->byval_arg.type;
      if (D.24442 == 30) goto <D.24437>; else goto <D.24438>;
      <D.24437>:
      num_ifaces = num_ifaces + 1;
      D.24444 = class->interface_id;
      D.24445 = (int) D.24444;
      if (D.24445 > max_iid) goto <D.24446>; else goto <D.24447>;
      <D.24446>:
      D.24444 = class->interface_id;
      max_iid = (int) D.24444;
      <D.24447>:
      <D.24438>:
      D.24448 = (short unsigned int) max_iid;
      class->max_interface_id = D.24448;
      num_ifaces.138 = (unsigned int) num_ifaces;
      D.24450 = num_ifaces.138 * 4;
      interfaces_full = monoeg_malloc0 (D.24450);
      num_ifaces.138 = (unsigned int) num_ifaces;
      D.24450 = num_ifaces.138 * 4;
      interface_offsets_full = monoeg_malloc (D.24450);
      i = 0;
      goto <D.19306>;
      <D.19305>:
      i.134 = (unsigned int) i;
      D.24406 = i.134 * 4;
      D.24451 = interface_offsets_full + D.24406;
      *D.24451 = -1;
      i = i + 1;
      <D.19306>:
      if (i < num_ifaces) goto <D.19305>; else goto <D.19307>;
      <D.19307>:
      j = 0;
      goto <D.19313>;
      <D.19312>:
      D.24398 = class->supertypes;
      j.133 = (unsigned int) j;
      D.24400 = j.133 * 4;
      D.24401 = D.24398 + D.24400;
      k = *D.24401;
      j.133 = (unsigned int) j;
      D.24400 = j.133 * 4;
      D.24431 = ifaces_array + D.24400;
      ifaces = *D.24431;
      if (ifaces != 0B) goto <D.24452>; else goto <D.24453>;
      <D.24452>:
      i = 0;
      goto <D.19310>;
      <D.19309>:
      {
        int io;

        D.24426 = ifaces->pdata;
        i.134 = (unsigned int) i;
        D.24406 = i.134 * 4;
        D.24427 = D.24426 + D.24406;
        ic = *D.24427;
        io = mono_class_interface_offset (k, ic);
        D.24454 = io < 0;
        D.24455 = (long int) D.24454;
        D.24456 = __builtin_expect (D.24455, 0);
        if (D.24456 != 0) goto <D.24457>; else goto <D.24458>;
        <D.24457>:
        monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "class.c", 3372, "io >= 0");
        <D.24458>:
        set_interface_and_offset (num_ifaces, interfaces_full, interface_offsets_full, ic, io, 1);
      }
      i = i + 1;
      <D.19310>:
      i.136 = (unsigned int) i;
      D.24423 = ifaces->len;
      if (i.136 < D.24423) goto <D.19309>; else goto <D.19311>;
      <D.19311>:
      <D.24453>:
      j = j + 1;
      <D.19313>:
      D.24395 = class->idepth;
      D.24432 = (int) D.24395;
      D.24459 = D.24432 + -1;
      if (D.24459 > j) goto <D.19312>; else goto <D.19314>;
      <D.19314>:
      D.24398 = class->supertypes;
      D.24395 = class->idepth;
      D.24460 = (sizetype) D.24395;
      D.24461 = D.24460 + 1073741823;
      D.24462 = D.24461 * 4;
      D.24463 = D.24398 + D.24462;
      D.24464 = *D.24463;
      D.24465 = D.24464 != class;
      D.24466 = (long int) D.24465;
      D.24467 = __builtin_expect (D.24466, 0);
      if (D.24467 != 0) goto <D.24468>; else goto <D.24469>;
      <D.24468>:
      monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "class.c", 3378, "class == class->supertypes [class->idepth - 1]");
      <D.24469>:
      D.24395 = class->idepth;
      D.24460 = (sizetype) D.24395;
      D.24461 = D.24460 + 1073741823;
      D.24462 = D.24461 * 4;
      D.24470 = ifaces_array + D.24462;
      ifaces = *D.24470;
      if (ifaces != 0B) goto <D.24471>; else goto <D.24472>;
      <D.24471>:
      i = 0;
      goto <D.19319>;
      <D.19318>:
      {
        int count;

        D.24426 = ifaces->pdata;
        i.134 = (unsigned int) i;
        D.24406 = i.134 * 4;
        D.24427 = D.24426 + D.24406;
        ic = *D.24427;
        D.24473 = set_interface_and_offset (num_ifaces, interfaces_full, interface_offsets_full, ic, cur_slot, 0);
        if (D.24473 != 0) goto <D.24474>; else goto <D.24475>;
        <D.24474>:
        // predicted unlikely by continue predictor.
        goto <D.19316>;
        <D.24475>:
        count = count_virtual_methods (ic);
        if (count == -1) goto <D.24476>; else goto <D.24477>;
        <D.24476>:
        {
          char * name;

          name = mono_type_get_full_name (ic);
          D.24478 = monoeg_g_strdup_printf ("Error calculating interface offset of %s", name);
          mono_class_set_failure (class, 7, D.24478);
          monoeg_g_free (name);
          cur_slot = -1;
          goto end;
        }
        <D.24477>:
        cur_slot = cur_slot + count;
      }
      <D.19316>:
      i = i + 1;
      <D.19319>:
      i.136 = (unsigned int) i;
      D.24423 = ifaces->len;
      if (i.136 < D.24423) goto <D.19318>; else goto <D.19320>;
      <D.19320>:
      <D.24472>:
      D.24439 = class->flags;
      D.24440 = D.24439 & 32;
      if (D.24440 != 0) goto <D.24479>; else goto <D.24481>;
      <D.24481>:
      D.24442 = class->byval_arg.type;
      if (D.24442 == 19) goto <D.24479>; else goto <D.24482>;
      <D.24482>:
      D.24442 = class->byval_arg.type;
      if (D.24442 == 30) goto <D.24479>; else goto <D.24480>;
      <D.24479>:
      set_interface_and_offset (num_ifaces, interfaces_full, interface_offsets_full, class, cur_slot, 1);
      <D.24480>:
      num_array_interfaces.137 = num_array_interfaces;
      if (num_array_interfaces.137 != 0) goto <D.24483>; else goto <D.24484>;
      <D.24483>:
      is_enumerator.139 = is_enumerator;
      if (is_enumerator.139 != 0) goto <D.24486>; else goto <D.24487>;
      <D.24486>:
      {
        int ienumerator_idx;
        int ienumerator_offset;

        ienumerator_idx = find_array_interface (class, "IEnumerator`1");
        D.24488 = class->interfaces;
        ienumerator_idx.140 = (unsigned int) ienumerator_idx;
        D.24490 = ienumerator_idx.140 * 4;
        D.24491 = D.24488 + D.24490;
        D.24492 = *D.24491;
        ienumerator_offset = find_interface_offset (num_ifaces, interfaces_full, interface_offsets_full, D.24492);
        D.24493 = ienumerator_offset < 0;
        D.24494 = (long int) D.24493;
        D.24495 = __builtin_expect (D.24494, 0);
        if (D.24495 != 0) goto <D.24496>; else goto <D.24497>;
        <D.24496>:
        monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "class.c", 3405, "ienumerator_offset >= 0");
        <D.24497>:
        i = 0;
        goto <D.19333>;
        <D.19332>:
        i.134 = (unsigned int) i;
        D.24406 = i.134 * 4;
        D.24433 = array_interfaces + D.24406;
        ic = *D.24433;
        {
          size_t __s1_len;
          size_t __s2_len;

          __s2_len = 13;
          if (__s2_len <= 3) goto <D.24499>; else goto <D.24500>;
          <D.24499>:
          {
            const unsigned char * __s2;
            int __result;

            __s2 = ic->name;
            D.24501 = "IEnumerator`1";
            D.24502 = MEM[(const unsigned char *)D.24501];
            D.24503 = (int) D.24502;
            D.24504 = *__s2;
            D.24505 = (int) D.24504;
            __result = D.24503 - D.24505;
            {
              if (__s2_len != 0) goto <D.24506>; else goto <D.24507>;
              <D.24506>:
              if (__result == 0) goto <D.24508>; else goto <D.24509>;
              <D.24508>:
              D.24510 = &MEM[(void *)"IEnumerator`1" + 1B];
              D.24511 = *D.24510;
              D.24512 = (int) D.24511;
              D.24513 = __s2 + 1;
              D.24514 = *D.24513;
              D.24515 = (int) D.24514;
              __result = D.24512 - D.24515;
              if (__s2_len > 1) goto <D.24516>; else goto <D.24517>;
              <D.24516>:
              if (__result == 0) goto <D.24518>; else goto <D.24519>;
              <D.24518>:
              D.24520 = &MEM[(void *)"IEnumerator`1" + 2B];
              D.24521 = *D.24520;
              D.24522 = (int) D.24521;
              D.24523 = __s2 + 2;
              D.24524 = *D.24523;
              D.24525 = (int) D.24524;
              __result = D.24522 - D.24525;
              if (__s2_len > 2) goto <D.24526>; else goto <D.24527>;
              <D.24526>:
              if (__result == 0) goto <D.24528>; else goto <D.24529>;
              <D.24528>:
              D.24530 = &MEM[(void *)"IEnumerator`1" + 3B];
              D.24531 = *D.24530;
              D.24532 = (int) D.24531;
              D.24533 = __s2 + 3;
              D.24534 = *D.24533;
              D.24535 = (int) D.24534;
              __result = D.24532 - D.24535;
              <D.24529>:
              <D.24527>:
              <D.24519>:
              <D.24517>:
              <D.24509>:
              <D.24507>:
            }
            D.19330 = __result;
          }
          iftmp.141 = -D.19330;
          goto <D.24536>;
          <D.24500>:
          D.24537 = ic->name;
          iftmp.141 = __builtin_strcmp (D.24537, "IEnumerator`1");
          <D.24536>:
          D.19331 = iftmp.141;
        }
        if (D.19331 == 0) goto <D.24538>; else goto <D.24539>;
        <D.24538>:
        set_interface_and_offset (num_ifaces, interfaces_full, interface_offsets_full, ic, ienumerator_offset, 1);
        goto <D.24540>;
        <D.24539>:
        monoeg_assertion_message ("* Assertion: should not be reached at %s:%d\n", "class.c", 3411);
        <D.24540>:
        i = i + 1;
        <D.19333>:
        num_array_interfaces.137 = num_array_interfaces;
        if (i < num_array_interfaces.137) goto <D.19332>; else goto <D.19334>;
        <D.19334>:
      }
      goto <D.24541>;
      <D.24487>:
      {
        int ilist_offset;
        int icollection_offset;
        int ienumerable_offset;
        int ireadonlylist_offset;
        int ireadonlycollection_offset;
        int ilist_iface_idx;
        struct MonoClass * ilist_class;
        int ireadonlylist_iface_idx;
        struct MonoClass * ireadonlylist_class;
        int icollection_iface_idx;
        int ienumerable_iface_idx;
        int ireadonlycollection_iface_idx;

        ilist_iface_idx = find_array_interface (class, "IList`1");
        D.24488 = class->interfaces;
        ilist_iface_idx.142 = (unsigned int) ilist_iface_idx;
        D.24543 = ilist_iface_idx.142 * 4;
        D.24544 = D.24488 + D.24543;
        ilist_class = *D.24544;
        ireadonlylist_iface_idx = find_array_interface (class, "IReadOnlyList`1");
        if (ireadonlylist_iface_idx != -1) goto <D.24546>; else goto <D.24547>;
        <D.24546>:
        D.24488 = class->interfaces;
        ireadonlylist_iface_idx.144 = (unsigned int) ireadonlylist_iface_idx;
        D.24549 = ireadonlylist_iface_idx.144 * 4;
        D.24550 = D.24488 + D.24549;
        iftmp.143 = *D.24550;
        goto <D.24551>;
        <D.24547>:
        iftmp.143 = 0B;
        <D.24551>:
        ireadonlylist_class = iftmp.143;
        icollection_iface_idx = find_array_interface (ilist_class, "ICollection`1");
        ienumerable_iface_idx = find_array_interface (ilist_class, "IEnumerable`1");
        if (ireadonlylist_iface_idx != -1) goto <D.24553>; else goto <D.24554>;
        <D.24553>:
        iftmp.145 = find_array_interface (ireadonlylist_class, "IReadOnlyCollection`1");
        goto <D.24555>;
        <D.24554>:
        iftmp.145 = -1;
        <D.24555>:
        ireadonlycollection_iface_idx = iftmp.145;
        D.24488 = class->interfaces;
        ilist_iface_idx.142 = (unsigned int) ilist_iface_idx;
        D.24543 = ilist_iface_idx.142 * 4;
        D.24544 = D.24488 + D.24543;
        D.24556 = *D.24544;
        ilist_offset = find_interface_offset (num_ifaces, interfaces_full, interface_offsets_full, D.24556);
        D.24557 = ilist_class->interfaces;
        icollection_iface_idx.146 = (unsigned int) icollection_iface_idx;
        D.24559 = icollection_iface_idx.146 * 4;
        D.24560 = D.24557 + D.24559;
        D.24561 = *D.24560;
        icollection_offset = find_interface_offset (num_ifaces, interfaces_full, interface_offsets_full, D.24561);
        D.24557 = ilist_class->interfaces;
        ienumerable_iface_idx.147 = (unsigned int) ienumerable_iface_idx;
        D.24563 = ienumerable_iface_idx.147 * 4;
        D.24564 = D.24557 + D.24563;
        D.24565 = *D.24564;
        ienumerable_offset = find_interface_offset (num_ifaces, interfaces_full, interface_offsets_full, D.24565);
        if (ireadonlylist_iface_idx != -1) goto <D.24567>; else goto <D.24568>;
        <D.24567>:
        D.24488 = class->interfaces;
        ireadonlylist_iface_idx.144 = (unsigned int) ireadonlylist_iface_idx;
        D.24549 = ireadonlylist_iface_idx.144 * 4;
        D.24550 = D.24488 + D.24549;
        D.24569 = *D.24550;
        iftmp.148 = find_interface_offset (num_ifaces, interfaces_full, interface_offsets_full, D.24569);
        goto <D.24570>;
        <D.24568>:
        iftmp.148 = -1;
        <D.24570>:
        ireadonlylist_offset = iftmp.148;
        if (ireadonlycollection_iface_idx != -1) goto <D.24572>; else goto <D.24573>;
        <D.24572>:
        D.24574 = ireadonlylist_class->interfaces;
        ireadonlycollection_iface_idx.150 = (unsigned int) ireadonlycollection_iface_idx;
        D.24576 = ireadonlycollection_iface_idx.150 * 4;
        D.24577 = D.24574 + D.24576;
        D.24578 = *D.24577;
        iftmp.149 = find_interface_offset (num_ifaces, interfaces_full, interface_offsets_full, D.24578);
        goto <D.24579>;
        <D.24573>:
        iftmp.149 = -1;
        <D.24579>:
        ireadonlycollection_offset = iftmp.149;
        if (ilist_offset < 0) goto <D.24581>; else goto <D.24584>;
        <D.24584>:
        if (icollection_offset < 0) goto <D.24581>; else goto <D.24585>;
        <D.24585>:
        if (ienumerable_offset < 0) goto <D.24581>; else goto <D.24582>;
        <D.24581>:
        iftmp.151 = 1;
        goto <D.24583>;
        <D.24582>:
        iftmp.151 = 0;
        <D.24583>:
        D.24586 = iftmp.151 != 0;
        D.24587 = (long int) D.24586;
        D.24588 = __builtin_expect (D.24587, 0);
        if (D.24588 != 0) goto <D.24589>; else goto <D.24590>;
        <D.24589>:
        monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "class.c", 3428, "ilist_offset >= 0 && icollection_offset >= 0 && ienumerable_offset >= 0");
        <D.24590>:
        i = 0;
        goto <D.19385>;
        <D.19384>:
        {
          int offset;

          i.134 = (unsigned int) i;
          D.24406 = i.134 * 4;
          D.24433 = array_interfaces + D.24406;
          ic = *D.24433;
          D.24591 = ic->generic_class;
          D.24592 = D.24591->container_class;
          D.24593 = mono_defaults.generic_ilist_class;
          if (D.24592 == D.24593) goto <D.24594>; else goto <D.24595>;
          <D.24594>:
          offset = ilist_offset;
          goto <D.24596>;
          <D.24595>:
          {
            size_t __s1_len;
            size_t __s2_len;

            __s2_len = 13;
            if (__s2_len <= 3) goto <D.24598>; else goto <D.24599>;
            <D.24598>:
            {
              const unsigned char * __s2;
              int __result;

              __s2 = ic->name;
              D.24600 = "ICollection`1";
              D.24601 = MEM[(const unsigned char *)D.24600];
              D.24602 = (int) D.24601;
              D.24603 = *__s2;
              D.24604 = (int) D.24603;
              __result = D.24602 - D.24604;
              {
                if (__s2_len != 0) goto <D.24605>; else goto <D.24606>;
                <D.24605>:
                if (__result == 0) goto <D.24607>; else goto <D.24608>;
                <D.24607>:
                D.24609 = &MEM[(void *)"ICollection`1" + 1B];
                D.24610 = *D.24609;
                D.24611 = (int) D.24610;
                D.24612 = __s2 + 1;
                D.24613 = *D.24612;
                D.24614 = (int) D.24613;
                __result = D.24611 - D.24614;
                if (__s2_len > 1) goto <D.24615>; else goto <D.24616>;
                <D.24615>:
                if (__result == 0) goto <D.24617>; else goto <D.24618>;
                <D.24617>:
                D.24619 = &MEM[(void *)"ICollection`1" + 2B];
                D.24620 = *D.24619;
                D.24621 = (int) D.24620;
                D.24622 = __s2 + 2;
                D.24623 = *D.24622;
                D.24624 = (int) D.24623;
                __result = D.24621 - D.24624;
                if (__s2_len > 2) goto <D.24625>; else goto <D.24626>;
                <D.24625>:
                if (__result == 0) goto <D.24627>; else goto <D.24628>;
                <D.24627>:
                D.24629 = &MEM[(void *)"ICollection`1" + 3B];
                D.24630 = *D.24629;
                D.24631 = (int) D.24630;
                D.24632 = __s2 + 3;
                D.24633 = *D.24632;
                D.24634 = (int) D.24633;
                __result = D.24631 - D.24634;
                <D.24628>:
                <D.24626>:
                <D.24618>:
                <D.24616>:
                <D.24608>:
                <D.24606>:
              }
              D.19355 = __result;
            }
            iftmp.152 = -D.19355;
            goto <D.24635>;
            <D.24599>:
            D.24537 = ic->name;
            iftmp.152 = __builtin_strcmp (D.24537, "ICollection`1");
            <D.24635>:
            D.19356 = iftmp.152;
          }
          if (D.19356 == 0) goto <D.24636>; else goto <D.24637>;
          <D.24636>:
          offset = icollection_offset;
          goto <D.24638>;
          <D.24637>:
          {
            size_t __s1_len;
            size_t __s2_len;

            __s2_len = 13;
            if (__s2_len <= 3) goto <D.24640>; else goto <D.24641>;
            <D.24640>:
            {
              const unsigned char * __s2;
              int __result;

              __s2 = ic->name;
              D.24642 = "IEnumerable`1";
              D.24643 = MEM[(const unsigned char *)D.24642];
              D.24644 = (int) D.24643;
              D.24645 = *__s2;
              D.24646 = (int) D.24645;
              __result = D.24644 - D.24646;
              {
                if (__s2_len != 0) goto <D.24647>; else goto <D.24648>;
                <D.24647>:
                if (__result == 0) goto <D.24649>; else goto <D.24650>;
                <D.24649>:
                D.24651 = &MEM[(void *)"IEnumerable`1" + 1B];
                D.24652 = *D.24651;
                D.24653 = (int) D.24652;
                D.24654 = __s2 + 1;
                D.24655 = *D.24654;
                D.24656 = (int) D.24655;
                __result = D.24653 - D.24656;
                if (__s2_len > 1) goto <D.24657>; else goto <D.24658>;
                <D.24657>:
                if (__result == 0) goto <D.24659>; else goto <D.24660>;
                <D.24659>:
                D.24661 = &MEM[(void *)"IEnumerable`1" + 2B];
                D.24662 = *D.24661;
                D.24663 = (int) D.24662;
                D.24664 = __s2 + 2;
                D.24665 = *D.24664;
                D.24666 = (int) D.24665;
                __result = D.24663 - D.24666;
                if (__s2_len > 2) goto <D.24667>; else goto <D.24668>;
                <D.24667>:
                if (__result == 0) goto <D.24669>; else goto <D.24670>;
                <D.24669>:
                D.24671 = &MEM[(void *)"IEnumerable`1" + 3B];
                D.24672 = *D.24671;
                D.24673 = (int) D.24672;
                D.24674 = __s2 + 3;
                D.24675 = *D.24674;
                D.24676 = (int) D.24675;
                __result = D.24673 - D.24676;
                <D.24670>:
                <D.24668>:
                <D.24660>:
                <D.24658>:
                <D.24650>:
                <D.24648>:
              }
              D.19364 = __result;
            }
            iftmp.153 = -D.19364;
            goto <D.24677>;
            <D.24641>:
            D.24537 = ic->name;
            iftmp.153 = __builtin_strcmp (D.24537, "IEnumerable`1");
            <D.24677>:
            D.19365 = iftmp.153;
          }
          if (D.19365 == 0) goto <D.24678>; else goto <D.24679>;
          <D.24678>:
          offset = ienumerable_offset;
          goto <D.24680>;
          <D.24679>:
          {
            size_t __s1_len;
            size_t __s2_len;

            __s2_len = 15;
            if (__s2_len <= 3) goto <D.24682>; else goto <D.24683>;
            <D.24682>:
            {
              const unsigned char * __s2;
              int __result;

              __s2 = ic->name;
              D.24684 = "IReadOnlyList`1";
              D.24685 = MEM[(const unsigned char *)D.24684];
              D.24686 = (int) D.24685;
              D.24687 = *__s2;
              D.24688 = (int) D.24687;
              __result = D.24686 - D.24688;
              {
                if (__s2_len != 0) goto <D.24689>; else goto <D.24690>;
                <D.24689>:
                if (__result == 0) goto <D.24691>; else goto <D.24692>;
                <D.24691>:
                D.24693 = &MEM[(void *)"IReadOnlyList`1" + 1B];
                D.24694 = *D.24693;
                D.24695 = (int) D.24694;
                D.24696 = __s2 + 1;
                D.24697 = *D.24696;
                D.24698 = (int) D.24697;
                __result = D.24695 - D.24698;
                if (__s2_len > 1) goto <D.24699>; else goto <D.24700>;
                <D.24699>:
                if (__result == 0) goto <D.24701>; else goto <D.24702>;
                <D.24701>:
                D.24703 = &MEM[(void *)"IReadOnlyList`1" + 2B];
                D.24704 = *D.24703;
                D.24705 = (int) D.24704;
                D.24706 = __s2 + 2;
                D.24707 = *D.24706;
                D.24708 = (int) D.24707;
                __result = D.24705 - D.24708;
                if (__s2_len > 2) goto <D.24709>; else goto <D.24710>;
                <D.24709>:
                if (__result == 0) goto <D.24711>; else goto <D.24712>;
                <D.24711>:
                D.24713 = &MEM[(void *)"IReadOnlyList`1" + 3B];
                D.24714 = *D.24713;
                D.24715 = (int) D.24714;
                D.24716 = __s2 + 3;
                D.24717 = *D.24716;
                D.24718 = (int) D.24717;
                __result = D.24715 - D.24718;
                <D.24712>:
                <D.24710>:
                <D.24702>:
                <D.24700>:
                <D.24692>:
                <D.24690>:
              }
              D.19373 = __result;
            }
            iftmp.154 = -D.19373;
            goto <D.24719>;
            <D.24683>:
            D.24537 = ic->name;
            iftmp.154 = __builtin_strcmp (D.24537, "IReadOnlyList`1");
            <D.24719>:
            D.19374 = iftmp.154;
          }
          if (D.19374 == 0) goto <D.24720>; else goto <D.24721>;
          <D.24720>:
          offset = ireadonlylist_offset;
          goto <D.24722>;
          <D.24721>:
          {
            size_t __s1_len;
            size_t __s2_len;

            __s2_len = 21;
            if (__s2_len <= 3) goto <D.24724>; else goto <D.24725>;
            <D.24724>:
            {
              const unsigned char * __s2;
              int __result;

              __s2 = ic->name;
              D.24726 = "IReadOnlyCollection`1";
              D.24727 = MEM[(const unsigned char *)D.24726];
              D.24728 = (int) D.24727;
              D.24729 = *__s2;
              D.24730 = (int) D.24729;
              __result = D.24728 - D.24730;
              {
                if (__s2_len != 0) goto <D.24731>; else goto <D.24732>;
                <D.24731>:
                if (__result == 0) goto <D.24733>; else goto <D.24734>;
                <D.24733>:
                D.24735 = &MEM[(void *)"IReadOnlyCollection`1" + 1B];
                D.24736 = *D.24735;
                D.24737 = (int) D.24736;
                D.24738 = __s2 + 1;
                D.24739 = *D.24738;
                D.24740 = (int) D.24739;
                __result = D.24737 - D.24740;
                if (__s2_len > 1) goto <D.24741>; else goto <D.24742>;
                <D.24741>:
                if (__result == 0) goto <D.24743>; else goto <D.24744>;
                <D.24743>:
                D.24745 = &MEM[(void *)"IReadOnlyCollection`1" + 2B];
                D.24746 = *D.24745;
                D.24747 = (int) D.24746;
                D.24748 = __s2 + 2;
                D.24749 = *D.24748;
                D.24750 = (int) D.24749;
                __result = D.24747 - D.24750;
                if (__s2_len > 2) goto <D.24751>; else goto <D.24752>;
                <D.24751>:
                if (__result == 0) goto <D.24753>; else goto <D.24754>;
                <D.24753>:
                D.24755 = &MEM[(void *)"IReadOnlyCollection`1" + 3B];
                D.24756 = *D.24755;
                D.24757 = (int) D.24756;
                D.24758 = __s2 + 3;
                D.24759 = *D.24758;
                D.24760 = (int) D.24759;
                __result = D.24757 - D.24760;
                <D.24754>:
                <D.24752>:
                <D.24744>:
                <D.24742>:
                <D.24734>:
                <D.24732>:
              }
              D.19382 = __result;
            }
            iftmp.155 = -D.19382;
            goto <D.24761>;
            <D.24725>:
            D.24537 = ic->name;
            iftmp.155 = __builtin_strcmp (D.24537, "IReadOnlyCollection`1");
            <D.24761>:
            D.19383 = iftmp.155;
          }
          if (D.19383 == 0) goto <D.24762>; else goto <D.24763>;
          <D.24762>:
          offset = ireadonlycollection_offset;
          goto <D.24764>;
          <D.24763>:
          monoeg_assertion_message ("* Assertion: should not be reached at %s:%d\n", "class.c", 3443);
          <D.24764>:
          <D.24722>:
          <D.24680>:
          <D.24638>:
          <D.24596>:
          set_interface_and_offset (num_ifaces, interfaces_full, interface_offsets_full, ic, offset, 1);
        }
        i = i + 1;
        <D.19385>:
        num_array_interfaces.137 = num_array_interfaces;
        if (i < num_array_interfaces.137) goto <D.19384>; else goto <D.19386>;
        <D.19386>:
      }
      <D.24541>:
      <D.24484>:
      interface_offsets_count = 0;
      i = 0;
      goto <D.19388>;
      <D.19387>:
      i.134 = (unsigned int) i;
      D.24406 = i.134 * 4;
      D.24451 = interface_offsets_full + D.24406;
      D.24765 = *D.24451;
      if (D.24765 != -1) goto <D.24766>; else goto <D.24767>;
      <D.24766>:
      interface_offsets_count = interface_offsets_count + 1;
      <D.24767>:
      i = i + 1;
      <D.19388>:
      if (i < num_ifaces) goto <D.19387>; else goto <D.19389>;
      <D.19389>:
      D.24770 = class->interfaces_packed;
      if (D.24770 != 0B) goto <D.24771>; else goto <D.24768>;
      <D.24771>:
      if (overwrite == 0) goto <D.24772>; else goto <D.24768>;
      <D.24772>:
      D.24773 = class->interface_offsets_count;
      D.24774 = (int) D.24773;
      D.24775 = D.24774 != interface_offsets_count;
      D.24776 = (long int) D.24775;
      D.24777 = __builtin_expect (D.24776, 0);
      if (D.24777 != 0) goto <D.24778>; else goto <D.24779>;
      <D.24778>:
      monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "class.c", 3465, "class->interface_offsets_count == interface_offsets_count");
      <D.24779>:
      goto <D.24769>;
      <D.24768>:
      {
        uint8_t * bitmap;
        int bsize;

        D.24780 = (short unsigned int) interface_offsets_count;
        class->interface_offsets_count = D.24780;
        interface_offsets_count.156 = (unsigned int) interface_offsets_count;
        D.24782 = interface_offsets_count.156 * 4;
        D.24783 = (int) D.24782;
        D.24784 = mono_class_alloc (class, D.24783);
        class->interfaces_packed = D.24784;
        interface_offsets_count.156 = (unsigned int) interface_offsets_count;
        D.24785 = interface_offsets_count.156 * 2;
        D.24786 = (int) D.24785;
        D.24787 = mono_class_alloc (class, D.24786);
        class->interface_offsets_packed = D.24787;
        D.24788 = max_iid + 1;
        D.24789 = D.24788 >> 3;
        D.24790 = (unsigned int) D.24789;
        D.24788 = max_iid + 1;
        D.24792 = D.24788 & 7;
        if (D.24792 != 0) goto <D.24793>; else goto <D.24794>;
        <D.24793>:
        iftmp.157 = 1;
        goto <D.24795>;
        <D.24794>:
        iftmp.157 = 0;
        <D.24795>:
        D.24796 = D.24790 + iftmp.157;
        bsize = (int) D.24796;
        bitmap = mono_class_alloc0 (class, bsize);
        i = 0;
        goto <D.19394>;
        <D.19393>:
        {
          int id;

          i.134 = (unsigned int) i;
          D.24406 = i.134 * 4;
          D.24797 = interfaces_full + D.24406;
          D.24798 = *D.24797;
          D.24799 = D.24798->interface_id;
          id = (int) D.24799;
          D.24800 = id >> 3;
          D.24801 = (sizetype) D.24800;
          D.24802 = bitmap + D.24801;
          D.24800 = id >> 3;
          D.24801 = (sizetype) D.24800;
          D.24802 = bitmap + D.24801;
          D.24803 = *D.24802;
          D.24804 = (signed char) D.24803;
          D.24805 = id & 7;
          D.24806 = 1 << D.24805;
          D.24807 = (signed char) D.24806;
          D.24808 = D.24804 | D.24807;
          D.24809 = (unsigned char) D.24808;
          *D.24802 = D.24809;
          D.24770 = class->interfaces_packed;
          i.134 = (unsigned int) i;
          D.24406 = i.134 * 4;
          D.24810 = D.24770 + D.24406;
          i.134 = (unsigned int) i;
          D.24406 = i.134 * 4;
          D.24797 = interfaces_full + D.24406;
          D.24798 = *D.24797;
          *D.24810 = D.24798;
          D.24811 = class->interface_offsets_packed;
          i.134 = (unsigned int) i;
          D.24812 = i.134 * 2;
          D.24813 = D.24811 + D.24812;
          i.134 = (unsigned int) i;
          D.24406 = i.134 * 4;
          D.24451 = interface_offsets_full + D.24406;
          D.24765 = *D.24451;
          D.24814 = (short unsigned int) D.24765;
          *D.24813 = D.24814;
        }
        i = i + 1;
        <D.19394>:
        if (i < interface_offsets_count) goto <D.19393>; else goto <D.19395>;
        <D.19395>:
        class->interface_bitmap = bitmap;
      }
      <D.24769>:
      end:
      monoeg_g_free (interfaces_full);
      monoeg_g_free (interface_offsets_full);
      monoeg_g_free (array_interfaces);
      i = 0;
      goto <D.19397>;
      <D.19396>:
      i.134 = (unsigned int) i;
      D.24406 = i.134 * 4;
      D.24815 = ifaces_array + D.24406;
      ifaces = *D.24815;
      if (ifaces != 0B) goto <D.24816>; else goto <D.24817>;
      <D.24816>:
      monoeg_g_ptr_array_free (ifaces, 1);
      <D.24817>:
      i = i + 1;
      <D.19397>:
      D.24395 = class->idepth;
      D.24432 = (int) D.24395;
      if (D.24432 > i) goto <D.19396>; else goto <D.19398>;
      <D.19398>:
      monoeg_g_free (ifaces_array);
      D.24818 = cur_slot;
      return D.24818;
    }
  finally
    {
      error = {CLOBBER};
      num_array_interfaces = {CLOBBER};
      is_enumerator = {CLOBBER};
    }
}


get_implicit_generic_array_interfaces (struct MonoClass * class, int * num, int * is_enumerator)
{
  struct MonoClass * D.24821;
  struct MonoClass * * D.24824;
  unsigned char D.24825;
  unsigned char D.24826;
  struct MonoGenericClass * D.24831;
  struct MonoClass * D.24833;
  struct MonoClass * D.24834;
  int D.19184;
  int iftmp.158;
  int D.19183;
  const char[21] * D.24839;
  unsigned char D.24840;
  int D.24841;
  unsigned char D.24842;
  int D.24843;
  const unsigned char * D.24848;
  unsigned char D.24849;
  int D.24850;
  const unsigned char * D.24851;
  unsigned char D.24852;
  int D.24853;
  const unsigned char * D.24858;
  unsigned char D.24859;
  int D.24860;
  const unsigned char * D.24861;
  unsigned char D.24862;
  int D.24863;
  const unsigned char * D.24868;
  unsigned char D.24869;
  int D.24870;
  const unsigned char * D.24871;
  unsigned char D.24872;
  int D.24873;
  const char * D.24875;
  struct MonoGenericInst * D.24877;
  struct MonoType * D.24878;
  int iftmp.159;
  struct MonoClass * D.24886;
  unsigned char D.24887;
  struct MonoClass * generic_icollection_class.160;
  struct MonoImage * D.24891;
  struct MonoClass * generic_icollection_class.161;
  struct MonoClass * generic_ienumerable_class.162;
  struct MonoClass * generic_ienumerator_class.163;
  struct MonoClass * generic_ireadonlylist_class.164;
  struct MonoClass * generic_ireadonlycollection_class.165;
  unsigned int D.24897;
  unsigned int D.24898;
  int iftmp.166;
  struct MonoClass * generic_ireadonlylist_class.167;
  int iftmp.168;
  struct MonoClass * D.24907;
  unsigned int real_count.169;
  unsigned int D.24916;
  struct MonoClass * D.24917;
  unsigned int nifaces.170;
  unsigned int D.24921;
  struct MonoClass * * D.24922;
  short unsigned int D.24924;
  int iftmp.171;
  unsigned char D.24933;
  struct MonoImage * D.24938;
  unsigned int D.24939;
  unsigned int D.24940;
  unsigned int D.24942;
  int iftmp.172;
  short unsigned int D.24946;
  short unsigned int D.24948;
  unsigned int D.24952;
  unsigned int D.24953;
  unsigned char D.24955;
  unsigned int D.24959;
  unsigned int D.24960;
  int iftmp.173;
  int D.24973;
  int D.24974;
  struct MonoClass * D.24981;
  struct MonoClass * * D.24982;
  unsigned int i.174;
  unsigned int D.24984;
  struct MonoClass * * D.24985;
  struct MonoClass * D.24986;
  unsigned int j.175;
  unsigned int D.24988;
  struct MonoClass * * D.24989;
  struct MonoClass * * D.24992;
  struct MonoClass * * D.24993;
  struct MonoClass * D.24994;
  struct MonoClass * * D.24996;
  struct MonoClass * * D.24997;
  struct MonoClass * D.24998;
  int D.24999;
  unsigned int original_rank.176;
  struct MonoClass * D.25003;
  struct MonoClass * * D.25004;
  struct MonoClass * D.25005;
  sizetype i.177;
  sizetype D.25007;
  sizetype D.25008;
  struct MonoClass * * D.25009;
  struct MonoClass * D.25010;
  sizetype D.25013;
  sizetype D.25014;
  struct MonoClass * * D.25015;
  struct MonoClass * generic_ienumerable_class.178;
  struct MonoClass * D.25017;
  sizetype D.25020;
  sizetype D.25021;
  struct MonoClass * * D.25022;
  struct MonoClass * D.25023;
  sizetype D.25024;
  sizetype D.25025;
  struct MonoClass * * D.25026;
  struct MonoClass * generic_ireadonlycollection_class.179;
  struct MonoClass * D.25028;
  struct MonoClass * D.25032;
  struct MonoClass * generic_ienumerator_class.180;
  struct MonoClass * D.25036;
  struct MonoClass * D.25037;
  unsigned int j.181;
  unsigned int D.25045;
  struct MonoClass * * D.25046;
  struct MonoClass * D.25047;
  struct MonoClass * D.25048;
  int D.25049;
  struct MonoClass * D.25050;
  int j.182;
  unsigned int j.183;
  unsigned int D.25054;
  struct MonoClass * * D.25055;
  struct MonoClass * D.25056;
  struct MonoClass * D.25057;
  struct MonoClass * D.25060;
  struct MonoClass * D.25061;
  struct MonoClass * eclass;
  static struct MonoClass * generic_icollection_class = 0B;
  static struct MonoClass * generic_ienumerable_class = 0B;
  static struct MonoClass * generic_ienumerator_class = 0B;
  static struct MonoClass * generic_ireadonlylist_class = 0B;
  static struct MonoClass * generic_ireadonlycollection_class = 0B;
  struct MonoClass * valuetype_types[2];
  struct MonoClass * * interfaces;
  int i;
  int nifaces;
  int interface_count;
  int real_count;
  int original_rank;
  int all_interfaces;
  gboolean internal_enumerator;
  gboolean eclass_is_valuetype;

  try
    {
      eclass = class->element_class;
      valuetype_types[0] = 0B;
      valuetype_types[1] = 0B;
      interfaces = 0B;
      D.24821 = mono_defaults.generic_ilist_class;
      if (D.24821 == 0B) goto <D.24822>; else goto <D.24823>;
      <D.24822>:
      *num = 0;
      D.24824 = 0B;
      return D.24824;
      <D.24823>:
      internal_enumerator = 0;
      eclass_is_valuetype = 0;
      D.24825 = eclass->rank;
      original_rank = (int) D.24825;
      D.24826 = class->byval_arg.type;
      if (D.24826 != 29) goto <D.24827>; else goto <D.24828>;
      <D.24827>:
      D.24831 = class->generic_class;
      if (D.24831 != 0B) goto <D.24832>; else goto <D.24829>;
      <D.24832>:
      D.24833 = class->nested_in;
      D.24834 = mono_defaults.array_class;
      if (D.24833 == D.24834) goto <D.24835>; else goto <D.24829>;
      <D.24835>:
      {
        size_t __s1_len;
        size_t __s2_len;

        __s2_len = 20;
        if (__s2_len <= 3) goto <D.24837>; else goto <D.24838>;
        <D.24837>:
        {
          const unsigned char * __s2;
          int __result;

          __s2 = class->name;
          D.24839 = "InternalEnumerator`1";
          D.24840 = MEM[(const unsigned char *)D.24839];
          D.24841 = (int) D.24840;
          D.24842 = *__s2;
          D.24843 = (int) D.24842;
          __result = D.24841 - D.24843;
          {
            if (__s2_len != 0) goto <D.24844>; else goto <D.24845>;
            <D.24844>:
            if (__result == 0) goto <D.24846>; else goto <D.24847>;
            <D.24846>:
            D.24848 = &MEM[(void *)"InternalEnumerator`1" + 1B];
            D.24849 = *D.24848;
            D.24850 = (int) D.24849;
            D.24851 = __s2 + 1;
            D.24852 = *D.24851;
            D.24853 = (int) D.24852;
            __result = D.24850 - D.24853;
            if (__s2_len > 1) goto <D.24854>; else goto <D.24855>;
            <D.24854>:
            if (__result == 0) goto <D.24856>; else goto <D.24857>;
            <D.24856>:
            D.24858 = &MEM[(void *)"InternalEnumerator`1" + 2B];
            D.24859 = *D.24858;
            D.24860 = (int) D.24859;
            D.24861 = __s2 + 2;
            D.24862 = *D.24861;
            D.24863 = (int) D.24862;
            __result = D.24860 - D.24863;
            if (__s2_len > 2) goto <D.24864>; else goto <D.24865>;
            <D.24864>:
            if (__result == 0) goto <D.24866>; else goto <D.24867>;
            <D.24866>:
            D.24868 = &MEM[(void *)"InternalEnumerator`1" + 3B];
            D.24869 = *D.24868;
            D.24870 = (int) D.24869;
            D.24871 = __s2 + 3;
            D.24872 = *D.24871;
            D.24873 = (int) D.24872;
            __result = D.24870 - D.24873;
            <D.24867>:
            <D.24865>:
            <D.24857>:
            <D.24855>:
            <D.24847>:
            <D.24845>:
          }
          D.19183 = __result;
        }
        iftmp.158 = -D.19183;
        goto <D.24874>;
        <D.24838>:
        D.24875 = class->name;
        iftmp.158 = __builtin_strcmp (D.24875, "InternalEnumerator`1");
        <D.24874>:
        D.19184 = iftmp.158;
      }
      if (D.19184 == 0) goto <D.24876>; else goto <D.24829>;
      <D.24876>:
      D.24831 = class->generic_class;
      D.24877 = D.24831->context.class_inst;
      D.24878 = D.24877->type_argv[0];
      eclass = mono_class_from_mono_type (D.24878);
      D.24825 = eclass->rank;
      original_rank = (int) D.24825;
      D.24825 = eclass->rank;
      if (D.24825 == 0) goto <D.24879>; else goto <D.24880>;
      <D.24879>:
      eclass = eclass->element_class;
      <D.24880>:
      internal_enumerator = 1;
      *is_enumerator = 1;
      goto <D.24830>;
      <D.24829>:
      *num = 0;
      D.24824 = 0B;
      return D.24824;
      <D.24830>:
      <D.24828>:
      D.24825 = eclass->rank;
      if (D.24825 == 0) goto <D.24882>; else goto <D.24885>;
      <D.24885>:
      D.24886 = eclass->element_class;
      D.24887 = D.24886->rank;
      if (D.24887 == 0) goto <D.24882>; else goto <D.24883>;
      <D.24882>:
      iftmp.159 = 1;
      goto <D.24884>;
      <D.24883>:
      iftmp.159 = 0;
      <D.24884>:
      all_interfaces = iftmp.159;
      generic_icollection_class.160 = generic_icollection_class;
      if (generic_icollection_class.160 == 0B) goto <D.24889>; else goto <D.24890>;
      <D.24889>:
      D.24891 = mono_defaults.corlib;
      generic_icollection_class.161 = mono_class_from_name (D.24891, "System.Collections.Generic", "ICollection`1");
      generic_icollection_class = generic_icollection_class.161;
      D.24891 = mono_defaults.corlib;
      generic_ienumerable_class.162 = mono_class_from_name (D.24891, "System.Collections.Generic", "IEnumerable`1");
      generic_ienumerable_class = generic_ienumerable_class.162;
      D.24891 = mono_defaults.corlib;
      generic_ienumerator_class.163 = mono_class_from_name (D.24891, "System.Collections.Generic", "IEnumerator`1");
      generic_ienumerator_class = generic_ienumerator_class.163;
      D.24891 = mono_defaults.corlib;
      generic_ireadonlylist_class.164 = mono_class_from_name (D.24891, "System.Collections.Generic", "IReadOnlyList`1");
      generic_ireadonlylist_class = generic_ireadonlylist_class.164;
      D.24891 = mono_defaults.corlib;
      generic_ireadonlycollection_class.165 = mono_class_from_name (D.24891, "System.Collections.Generic", "IReadOnlyCollection`1");
      generic_ireadonlycollection_class = generic_ireadonlycollection_class.165;
      <D.24890>:
      mono_class_init (eclass);
      D.24897 = BIT_FIELD_REF <*eclass, 32, 160>;
      D.24898 = D.24897 & 8;
      if (D.24898 != 0) goto <D.24899>; else goto <D.24900>;
      <D.24899>:
      generic_ireadonlylist_class.167 = generic_ireadonlylist_class;
      if (generic_ireadonlylist_class.167 != 0B) goto <D.24903>; else goto <D.24904>;
      <D.24903>:
      iftmp.166 = 5;
      goto <D.24905>;
      <D.24904>:
      iftmp.166 = 3;
      <D.24905>:
      nifaces = iftmp.166;
      fill_valuetype_array_derived_types (&valuetype_types, eclass, original_rank);
      D.24907 = valuetype_types[1];
      if (D.24907 != 0B) goto <D.24908>; else goto <D.24909>;
      <D.24908>:
      iftmp.168 = nifaces * 2;
      goto <D.24910>;
      <D.24909>:
      iftmp.168 = nifaces;
      <D.24910>:
      interface_count = iftmp.168;
      real_count = interface_count;
      if (internal_enumerator != 0) goto <D.24911>; else goto <D.24912>;
      <D.24911>:
      real_count = real_count + 1;
      D.24907 = valuetype_types[1];
      if (D.24907 != 0B) goto <D.24913>; else goto <D.24914>;
      <D.24913>:
      real_count = real_count + 1;
      <D.24914>:
      <D.24912>:
      real_count.169 = (unsigned int) real_count;
      D.24916 = real_count.169 * 4;
      interfaces = monoeg_malloc0 (D.24916);
      D.24917 = valuetype_types[0];
      *interfaces = D.24917;
      D.24907 = valuetype_types[1];
      if (D.24907 != 0B) goto <D.24918>; else goto <D.24919>;
      <D.24918>:
      nifaces.170 = (unsigned int) nifaces;
      D.24921 = nifaces.170 * 4;
      D.24922 = interfaces + D.24921;
      D.24907 = valuetype_types[1];
      *D.24922 = D.24907;
      <D.24919>:
      eclass_is_valuetype = 1;
      goto <D.24923>;
      <D.24900>:
      {
        int j;
        int idepth;

        D.24924 = eclass->idepth;
        idepth = (int) D.24924;
        if (internal_enumerator == 0) goto <D.24925>; else goto <D.24926>;
        <D.24925>:
        idepth = idepth + -1;
        <D.24926>:
        generic_ireadonlylist_class.167 = generic_ireadonlylist_class;
        if (generic_ireadonlylist_class.167 != 0B) goto <D.24928>; else goto <D.24929>;
        <D.24928>:
        iftmp.171 = 2;
        goto <D.24930>;
        <D.24929>:
        iftmp.171 = 3;
        <D.24930>:
        nifaces = iftmp.171;
        D.24933 = eclass->this_arg.type;
        if (D.24933 != 19) goto <D.24934>; else goto <D.24935>;
        <D.24934>:
        D.24933 = eclass->this_arg.type;
        if (D.24933 != 30) goto <D.24936>; else goto <D.24937>;
        <D.24936>:
        D.24938 = eclass->image;
        D.24939 = BIT_FIELD_REF <*D.24938, 32, 128>;
        D.24940 = D.24939 & 8;
        if (D.24940 == 0) goto <D.24931>; else goto <D.24941>;
        <D.24941>:
        D.24897 = BIT_FIELD_REF <*eclass, 32, 160>;
        D.24942 = D.24897 & 128;
        if (D.24942 != 0) goto <D.24931>; else goto <D.24932>;
        <D.24931>:
        mono_class_setup_interface_offsets (eclass);
        <D.24932>:
        <D.24937>:
        <D.24935>:
        if (all_interfaces != 0) goto <D.24944>; else goto <D.24945>;
        <D.24944>:
        D.24946 = eclass->interface_offsets_count;
        iftmp.172 = (int) D.24946;
        goto <D.24947>;
        <D.24945>:
        D.24948 = eclass->interface_count;
        iftmp.172 = (int) D.24948;
        <D.24947>:
        interface_count = iftmp.172;
        D.24952 = eclass->flags;
        D.24953 = D.24952 & 32;
        if (D.24953 != 0) goto <D.24949>; else goto <D.24954>;
        <D.24954>:
        D.24955 = eclass->byval_arg.type;
        if (D.24955 == 19) goto <D.24949>; else goto <D.24956>;
        <D.24956>:
        D.24955 = eclass->byval_arg.type;
        if (D.24955 == 30) goto <D.24949>; else goto <D.24950>;
        <D.24949>:
        interface_count = interface_count + 1;
        goto <D.24951>;
        <D.24950>:
        interface_count = interface_count + idepth;
        <D.24951>:
        D.24825 = eclass->rank;
        if (D.24825 != 0) goto <D.24957>; else goto <D.24958>;
        <D.24957>:
        D.24886 = eclass->element_class;
        D.24959 = BIT_FIELD_REF <*D.24886, 32, 160>;
        D.24960 = D.24959 & 8;
        if (D.24960 != 0) goto <D.24961>; else goto <D.24962>;
        <D.24961>:
        D.24886 = eclass->element_class;
        fill_valuetype_array_derived_types (&valuetype_types, D.24886, original_rank);
        D.24907 = valuetype_types[1];
        if (D.24907 != 0B) goto <D.24963>; else goto <D.24964>;
        <D.24963>:
        interface_count = interface_count + 1;
        <D.24964>:
        <D.24962>:
        <D.24958>:
        interface_count = interface_count * nifaces;
        real_count = interface_count;
        if (internal_enumerator != 0) goto <D.24965>; else goto <D.24966>;
        <D.24965>:
        D.24952 = eclass->flags;
        D.24953 = D.24952 & 32;
        if (D.24953 == 0) goto <D.24970>; else goto <D.24968>;
        <D.24970>:
        D.24955 = eclass->byval_arg.type;
        if (D.24955 != 19) goto <D.24971>; else goto <D.24968>;
        <D.24971>:
        D.24955 = eclass->byval_arg.type;
        if (D.24955 != 30) goto <D.24972>; else goto <D.24968>;
        <D.24972>:
        iftmp.173 = idepth;
        goto <D.24969>;
        <D.24968>:
        iftmp.173 = 1;
        <D.24969>:
        D.24946 = eclass->interface_offsets_count;
        D.24973 = (int) D.24946;
        D.24974 = iftmp.173 + D.24973;
        real_count = D.24974 + real_count;
        D.24907 = valuetype_types[1];
        if (D.24907 != 0B) goto <D.24975>; else goto <D.24976>;
        <D.24975>:
        real_count = real_count + 1;
        <D.24976>:
        <D.24966>:
        real_count.169 = (unsigned int) real_count;
        D.24916 = real_count.169 * 4;
        interfaces = monoeg_malloc0 (D.24916);
        D.24952 = eclass->flags;
        D.24953 = D.24952 & 32;
        if (D.24953 != 0) goto <D.24977>; else goto <D.24979>;
        <D.24979>:
        D.24955 = eclass->byval_arg.type;
        if (D.24955 == 19) goto <D.24977>; else goto <D.24980>;
        <D.24980>:
        D.24955 = eclass->byval_arg.type;
        if (D.24955 == 30) goto <D.24977>; else goto <D.24978>;
        <D.24977>:
        D.24981 = mono_defaults.object_class;
        *interfaces = D.24981;
        j = nifaces;
        goto <D.19189>;
        <D.24978>:
        j = 0;
        i = 0;
        goto <D.19188>;
        <D.19187>:
        D.24982 = eclass->supertypes;
        i.174 = (unsigned int) i;
        D.24984 = i.174 * 4;
        D.24985 = D.24982 + D.24984;
        D.24986 = *D.24985;
        mono_class_init (D.24986);
        j.175 = (unsigned int) j;
        D.24988 = j.175 * 4;
        D.24989 = interfaces + D.24988;
        D.24982 = eclass->supertypes;
        i.174 = (unsigned int) i;
        D.24984 = i.174 * 4;
        D.24985 = D.24982 + D.24984;
        D.24986 = *D.24985;
        *D.24989 = D.24986;
        j = j + nifaces;
        i = i + 1;
        <D.19188>:
        if (i < idepth) goto <D.19187>; else goto <D.19189>;
        <D.19189>:
        if (all_interfaces != 0) goto <D.24990>; else goto <D.24991>;
        <D.24990>:
        i = 0;
        goto <D.19191>;
        <D.19190>:
        j.175 = (unsigned int) j;
        D.24988 = j.175 * 4;
        D.24989 = interfaces + D.24988;
        D.24992 = eclass->interfaces_packed;
        i.174 = (unsigned int) i;
        D.24984 = i.174 * 4;
        D.24993 = D.24992 + D.24984;
        D.24994 = *D.24993;
        *D.24989 = D.24994;
        j = j + nifaces;
        i = i + 1;
        <D.19191>:
        D.24946 = eclass->interface_offsets_count;
        D.24973 = (int) D.24946;
        if (D.24973 > i) goto <D.19190>; else goto <D.19192>;
        <D.19192>:
        goto <D.24995>;
        <D.24991>:
        i = 0;
        goto <D.19194>;
        <D.19193>:
        j.175 = (unsigned int) j;
        D.24988 = j.175 * 4;
        D.24989 = interfaces + D.24988;
        D.24996 = eclass->interfaces;
        i.174 = (unsigned int) i;
        D.24984 = i.174 * 4;
        D.24997 = D.24996 + D.24984;
        D.24998 = *D.24997;
        *D.24989 = D.24998;
        j = j + nifaces;
        i = i + 1;
        <D.19194>:
        D.24948 = eclass->interface_count;
        D.24999 = (int) D.24948;
        if (D.24999 > i) goto <D.19193>; else goto <D.19195>;
        <D.19195>:
        <D.24995>:
        D.24907 = valuetype_types[1];
        if (D.24907 != 0B) goto <D.25000>; else goto <D.25001>;
        <D.25000>:
        j.175 = (unsigned int) j;
        D.24988 = j.175 * 4;
        D.24989 = interfaces + D.24988;
        D.24907 = valuetype_types[1];
        original_rank.176 = (unsigned int) original_rank;
        D.25003 = array_class_get_if_rank (D.24907, original_rank.176);
        *D.24989 = D.25003;
        j = j + nifaces;
        <D.25001>:
      }
      <D.24923>:
      i = 0;
      goto <D.19198>;
      <D.19197>:
      {
        struct MonoClass * iface;

        i.174 = (unsigned int) i;
        D.24984 = i.174 * 4;
        D.25004 = interfaces + D.24984;
        iface = *D.25004;
        i.174 = (unsigned int) i;
        D.24984 = i.174 * 4;
        D.25004 = interfaces + D.24984;
        D.24821 = mono_defaults.generic_ilist_class;
        D.25005 = inflate_class_one_arg (D.24821, iface);
        *D.25004 = D.25005;
        i.177 = (sizetype) i;
        D.25007 = i.177 + 1;
        D.25008 = D.25007 * 4;
        D.25009 = interfaces + D.25008;
        generic_icollection_class.160 = generic_icollection_class;
        D.25010 = inflate_class_one_arg (generic_icollection_class.160, iface);
        *D.25009 = D.25010;
        D.24897 = BIT_FIELD_REF <*eclass, 32, 160>;
        D.24898 = D.24897 & 8;
        if (D.24898 != 0) goto <D.25011>; else goto <D.25012>;
        <D.25011>:
        i.177 = (sizetype) i;
        D.25013 = i.177 + 2;
        D.25014 = D.25013 * 4;
        D.25015 = interfaces + D.25014;
        generic_ienumerable_class.178 = generic_ienumerable_class;
        D.25017 = inflate_class_one_arg (generic_ienumerable_class.178, iface);
        *D.25015 = D.25017;
        generic_ireadonlylist_class.167 = generic_ireadonlylist_class;
        if (generic_ireadonlylist_class.167 != 0B) goto <D.25018>; else goto <D.25019>;
        <D.25018>:
        i.177 = (sizetype) i;
        D.25020 = i.177 + 3;
        D.25021 = D.25020 * 4;
        D.25022 = interfaces + D.25021;
        generic_ireadonlylist_class.167 = generic_ireadonlylist_class;
        D.25023 = inflate_class_one_arg (generic_ireadonlylist_class.167, iface);
        *D.25022 = D.25023;
        i.177 = (sizetype) i;
        D.25024 = i.177 + 4;
        D.25025 = D.25024 * 4;
        D.25026 = interfaces + D.25025;
        generic_ireadonlycollection_class.179 = generic_ireadonlycollection_class;
        D.25028 = inflate_class_one_arg (generic_ireadonlycollection_class.179, iface);
        *D.25026 = D.25028;
        <D.25019>:
        goto <D.25029>;
        <D.25012>:
        generic_ireadonlylist_class.167 = generic_ireadonlylist_class;
        if (generic_ireadonlylist_class.167 == 0B) goto <D.25030>; else goto <D.25031>;
        <D.25030>:
        i.177 = (sizetype) i;
        D.25013 = i.177 + 2;
        D.25014 = D.25013 * 4;
        D.25015 = interfaces + D.25014;
        generic_ienumerable_class.178 = generic_ienumerable_class;
        D.25032 = inflate_class_one_arg (generic_ienumerable_class.178, iface);
        *D.25015 = D.25032;
        <D.25031>:
        <D.25029>:
      }
      i = i + nifaces;
      <D.19198>:
      if (i < interface_count) goto <D.19197>; else goto <D.19199>;
      <D.19199>:
      if (internal_enumerator != 0) goto <D.25033>; else goto <D.25034>;
      <D.25033>:
      {
        int j;

        i = 0;
        goto <D.19202>;
        <D.19201>:
        i.174 = (unsigned int) i;
        D.24984 = i.174 * 4;
        D.25004 = interfaces + D.24984;
        generic_ienumerator_class.180 = generic_ienumerator_class;
        i.174 = (unsigned int) i;
        D.24984 = i.174 * 4;
        D.25004 = interfaces + D.24984;
        D.25036 = *D.25004;
        D.25037 = inflate_class_one_arg (generic_ienumerator_class.180, D.25036);
        *D.25004 = D.25037;
        i = i + 1;
        <D.19202>:
        if (i < interface_count) goto <D.19201>; else goto <D.19203>;
        <D.19203>:
        j = interface_count;
        if (eclass_is_valuetype == 0) goto <D.25038>; else goto <D.25039>;
        <D.25038>:
        D.24952 = eclass->flags;
        D.24953 = D.24952 & 32;
        if (D.24953 != 0) goto <D.25040>; else goto <D.25042>;
        <D.25042>:
        D.24955 = eclass->byval_arg.type;
        if (D.24955 == 19) goto <D.25040>; else goto <D.25043>;
        <D.25043>:
        D.24955 = eclass->byval_arg.type;
        if (D.24955 == 30) goto <D.25040>; else goto <D.25041>;
        <D.25040>:
        j.181 = (unsigned int) j;
        D.25045 = j.181 * 4;
        D.25046 = interfaces + D.25045;
        generic_ienumerator_class.180 = generic_ienumerator_class;
        D.24981 = mono_defaults.object_class;
        D.25047 = inflate_class_one_arg (generic_ienumerator_class.180, D.24981);
        *D.25046 = D.25047;
        j = j + 1;
        goto <D.19206>;
        <D.25041>:
        i = 0;
        goto <D.19205>;
        <D.19204>:
        j.181 = (unsigned int) j;
        D.25045 = j.181 * 4;
        D.25046 = interfaces + D.25045;
        generic_ienumerator_class.180 = generic_ienumerator_class;
        D.24982 = eclass->supertypes;
        i.174 = (unsigned int) i;
        D.24984 = i.174 * 4;
        D.24985 = D.24982 + D.24984;
        D.24986 = *D.24985;
        D.25048 = inflate_class_one_arg (generic_ienumerator_class.180, D.24986);
        *D.25046 = D.25048;
        j = j + 1;
        i = i + 1;
        <D.19205>:
        D.24924 = eclass->idepth;
        D.25049 = (int) D.24924;
        if (D.25049 > i) goto <D.19204>; else goto <D.19206>;
        <D.19206>:
        i = 0;
        goto <D.19208>;
        <D.19207>:
        j.181 = (unsigned int) j;
        D.25045 = j.181 * 4;
        D.25046 = interfaces + D.25045;
        generic_ienumerator_class.180 = generic_ienumerator_class;
        D.24992 = eclass->interfaces_packed;
        i.174 = (unsigned int) i;
        D.24984 = i.174 * 4;
        D.24993 = D.24992 + D.24984;
        D.24994 = *D.24993;
        D.25050 = inflate_class_one_arg (generic_ienumerator_class.180, D.24994);
        *D.25046 = D.25050;
        j = j + 1;
        i = i + 1;
        <D.19208>:
        D.24946 = eclass->interface_offsets_count;
        D.24973 = (int) D.24946;
        if (D.24973 > i) goto <D.19207>; else goto <D.19209>;
        <D.19209>:
        goto <D.25051>;
        <D.25039>:
        j.182 = j;
        j = j.182 + 1;
        j.183 = (unsigned int) j.182;
        D.25054 = j.183 * 4;
        D.25055 = interfaces + D.25054;
        generic_ienumerator_class.180 = generic_ienumerator_class;
        D.24917 = valuetype_types[0];
        original_rank.176 = (unsigned int) original_rank;
        D.25056 = array_class_get_if_rank (D.24917, original_rank.176);
        D.25057 = inflate_class_one_arg (generic_ienumerator_class.180, D.25056);
        *D.25055 = D.25057;
        <D.25051>:
        D.24907 = valuetype_types[1];
        if (D.24907 != 0B) goto <D.25058>; else goto <D.25059>;
        <D.25058>:
        j.181 = (unsigned int) j;
        D.25045 = j.181 * 4;
        D.25046 = interfaces + D.25045;
        generic_ienumerator_class.180 = generic_ienumerator_class;
        D.24907 = valuetype_types[1];
        original_rank.176 = (unsigned int) original_rank;
        D.25060 = array_class_get_if_rank (D.24907, original_rank.176);
        D.25061 = inflate_class_one_arg (generic_ienumerator_class.180, D.25060);
        *D.25046 = D.25061;
        <D.25059>:
      }
      <D.25034>:
      *num = real_count;
      D.24824 = interfaces;
      return D.24824;
    }
  finally
    {
      valuetype_types = {CLOBBER};
    }
}


fill_valuetype_array_derived_types (struct MonoClass * * valuetype_types, struct MonoClass * eclass, int rank)
{
  struct MonoClass * D.25064;
  struct MonoClass * * D.25067;
  struct MonoClass * D.25068;
  struct MonoClass * D.25073;
  struct MonoClass * D.25076;
  struct MonoClass * D.25081;
  struct MonoClass * D.25084;
  struct MonoClass * D.25089;
  struct MonoClass * D.25092;
  unsigned int D.25097;
  unsigned int D.25098;
  struct MonoType * D.25101;
  struct MonoType * D.25104;
  struct MonoClass * D.25105;

  *valuetype_types = eclass;
  D.25064 = mono_defaults.int16_class;
  if (D.25064 == eclass) goto <D.25065>; else goto <D.25066>;
  <D.25065>:
  D.25067 = valuetype_types + 4;
  D.25068 = mono_defaults.uint16_class;
  *D.25067 = D.25068;
  goto <D.25069>;
  <D.25066>:
  D.25068 = mono_defaults.uint16_class;
  if (D.25068 == eclass) goto <D.25070>; else goto <D.25071>;
  <D.25070>:
  D.25067 = valuetype_types + 4;
  D.25064 = mono_defaults.int16_class;
  *D.25067 = D.25064;
  goto <D.25072>;
  <D.25071>:
  D.25073 = mono_defaults.int32_class;
  if (D.25073 == eclass) goto <D.25074>; else goto <D.25075>;
  <D.25074>:
  D.25067 = valuetype_types + 4;
  D.25076 = mono_defaults.uint32_class;
  *D.25067 = D.25076;
  goto <D.25077>;
  <D.25075>:
  D.25076 = mono_defaults.uint32_class;
  if (D.25076 == eclass) goto <D.25078>; else goto <D.25079>;
  <D.25078>:
  D.25067 = valuetype_types + 4;
  D.25073 = mono_defaults.int32_class;
  *D.25067 = D.25073;
  goto <D.25080>;
  <D.25079>:
  D.25081 = mono_defaults.int64_class;
  if (D.25081 == eclass) goto <D.25082>; else goto <D.25083>;
  <D.25082>:
  D.25067 = valuetype_types + 4;
  D.25084 = mono_defaults.uint64_class;
  *D.25067 = D.25084;
  goto <D.25085>;
  <D.25083>:
  D.25084 = mono_defaults.uint64_class;
  if (D.25084 == eclass) goto <D.25086>; else goto <D.25087>;
  <D.25086>:
  D.25067 = valuetype_types + 4;
  D.25081 = mono_defaults.int64_class;
  *D.25067 = D.25081;
  goto <D.25088>;
  <D.25087>:
  D.25089 = mono_defaults.byte_class;
  if (D.25089 == eclass) goto <D.25090>; else goto <D.25091>;
  <D.25090>:
  D.25067 = valuetype_types + 4;
  D.25092 = mono_defaults.sbyte_class;
  *D.25067 = D.25092;
  goto <D.25093>;
  <D.25091>:
  D.25092 = mono_defaults.sbyte_class;
  if (D.25092 == eclass) goto <D.25094>; else goto <D.25095>;
  <D.25094>:
  D.25067 = valuetype_types + 4;
  D.25089 = mono_defaults.byte_class;
  *D.25067 = D.25089;
  goto <D.25096>;
  <D.25095>:
  D.25097 = BIT_FIELD_REF <*eclass, 32, 160>;
  D.25098 = D.25097 & 16;
  if (D.25098 != 0) goto <D.25099>; else goto <D.25100>;
  <D.25099>:
  D.25101 = mono_class_enum_basetype (eclass);
  if (D.25101 != 0B) goto <D.25102>; else goto <D.25103>;
  <D.25102>:
  D.25067 = valuetype_types + 4;
  D.25104 = mono_class_enum_basetype (eclass);
  D.25105 = mono_class_from_mono_type (D.25104);
  *D.25067 = D.25105;
  <D.25103>:
  <D.25100>:
  <D.25096>:
  <D.25093>:
  <D.25088>:
  <D.25085>:
  <D.25080>:
  <D.25077>:
  <D.25072>:
  <D.25069>:
}


array_class_get_if_rank (struct MonoClass * class, guint rank)
{
  struct MonoClass * D.25106;
  struct MonoClass * iftmp.184;

  if (rank != 0) goto <D.25108>; else goto <D.25109>;
  <D.25108>:
  iftmp.184 = mono_array_class_get (class, rank);
  goto <D.25110>;
  <D.25109>:
  iftmp.184 = class;
  <D.25110>:
  D.25106 = iftmp.184;
  return D.25106;
}


inflate_class_one_arg (struct MonoClass * gtype, struct MonoClass * arg0)
{
  struct MonoType * D.25112;
  struct MonoClass * D.25113;
  struct MonoType * args[1];

  try
    {
      D.25112 = &arg0->byval_arg;
      args[0] = D.25112;
      D.25113 = mono_class_bind_generic_parameters (gtype, 1, &args, 0);
      return D.25113;
    }
  finally
    {
      args = {CLOBBER};
    }
}


count_virtual_methods (struct MonoClass * class)
{
  struct MonoMethod * * D.25118;
  unsigned int D.25120;
  struct MonoImage * D.25122;
  unsigned int D.25123;
  unsigned int D.25124;
  struct MonoGenericClass * D.25126;
  unsigned char D.25127;
  int D.25130;
  unsigned int i.185;
  unsigned int D.25132;
  struct MonoMethod * * D.25133;
  struct MonoMethod * D.25134;
  short unsigned int D.25135;
  unsigned int D.25136;
  unsigned int i.186;
  unsigned int D.25140;
  unsigned int D.25141;
  unsigned int D.25142;
  int D.25143;
  int i;
  int count;
  guint32 flags;

  count = 0;
  class = mono_class_get_generic_type_definition (class);
  D.25118 = class->methods;
  if (D.25118 != 0B) goto <D.25116>; else goto <D.25119>;
  <D.25119>:
  D.25120 = class->type_token;
  if (D.25120 == 0) goto <D.25116>; else goto <D.25121>;
  <D.25121>:
  D.25122 = class->image;
  D.25123 = BIT_FIELD_REF <*D.25122, 32, 128>;
  D.25124 = D.25123 & 8;
  if (D.25124 != 0) goto <D.25116>; else goto <D.25125>;
  <D.25125>:
  D.25126 = class->generic_class;
  if (D.25126 != 0B) goto <D.25116>; else goto <D.25117>;
  <D.25116>:
  mono_class_setup_methods (class);
  D.25127 = class->exception_type;
  if (D.25127 != 0) goto <D.25128>; else goto <D.25129>;
  <D.25128>:
  D.25130 = -1;
  return D.25130;
  <D.25129>:
  i = 0;
  goto <D.19234>;
  <D.19233>:
  D.25118 = class->methods;
  i.185 = (unsigned int) i;
  D.25132 = i.185 * 4;
  D.25133 = D.25118 + D.25132;
  D.25134 = *D.25133;
  D.25135 = D.25134->flags;
  flags = (guint32) D.25135;
  D.25136 = flags & 64;
  if (D.25136 != 0) goto <D.25137>; else goto <D.25138>;
  <D.25137>:
  count = count + 1;
  <D.25138>:
  i = i + 1;
  <D.19234>:
  i.186 = (unsigned int) i;
  D.25140 = class->method.count;
  if (i.186 < D.25140) goto <D.19233>; else goto <D.19235>;
  <D.19235>:
  goto <D.19238>;
  <D.25117>:
  i = 0;
  goto <D.19237>;
  <D.19236>:
  D.25122 = class->image;
  D.25141 = class->method.first;
  i.186 = (unsigned int) i;
  D.25142 = D.25141 + i.186;
  D.25143 = (int) D.25142;
  flags = mono_metadata_decode_table_row_col (D.25122, 6, D.25143, 2);
  D.25136 = flags & 64;
  if (D.25136 != 0) goto <D.25144>; else goto <D.25145>;
  <D.25144>:
  count = count + 1;
  <D.25145>:
  i = i + 1;
  <D.19237>:
  i.186 = (unsigned int) i;
  D.25140 = class->method.count;
  if (i.186 < D.25140) goto <D.19236>; else goto <D.19238>;
  <D.19238>:
  D.25130 = count;
  return D.25130;
}


find_array_interface (struct MonoClass * klass, const char * name)
{
  int D.19223;
  struct MonoClass * * D.25147;
  unsigned int i.187;
  unsigned int D.25149;
  struct MonoClass * * D.25150;
  struct MonoClass * D.25151;
  const char * D.25152;
  int D.25155;
  short unsigned int D.25156;
  int D.25157;
  int i;

  i = 0;
  goto <D.19225>;
  <D.19224>:
  {
    size_t __s1_len;
    size_t __s2_len;

    D.25147 = klass->interfaces;
    i.187 = (unsigned int) i;
    D.25149 = i.187 * 4;
    D.25150 = D.25147 + D.25149;
    D.25151 = *D.25150;
    D.25152 = D.25151->name;
    D.19223 = __builtin_strcmp (D.25152, name);
  }
  if (D.19223 == 0) goto <D.25153>; else goto <D.25154>;
  <D.25153>:
  D.25155 = i;
  return D.25155;
  <D.25154>:
  i = i + 1;
  <D.19225>:
  D.25156 = klass->interface_count;
  D.25157 = (int) D.25156;
  if (D.25157 > i) goto <D.19224>; else goto <D.19226>;
  <D.19226>:
  D.25155 = -1;
  return D.25155;
}


find_interface_offset (int num_ifaces, struct MonoClass * * interfaces_full, int * interface_offsets_full, struct MonoClass * ic)
{
  int D.25161;
  unsigned int i.188;
  unsigned int D.25163;
  int * D.25164;
  int i;

  i = find_interface (num_ifaces, interfaces_full, ic);
  if (1 != 0) goto <D.25159>; else goto <D.25160>;
  <D.25159>:
  i.188 = (unsigned int) i;
  D.25163 = i.188 * 4;
  D.25164 = interface_offsets_full + D.25163;
  D.25161 = *D.25164;
  return D.25161;
  <D.25160>:
  D.25161 = -1;
  return D.25161;
}


find_interface (int num_ifaces, struct MonoClass * * interfaces_full, struct MonoClass * ic)
{
  int D.25168;
  int D.25171;
  unsigned int m.189;
  unsigned int D.25173;
  struct MonoClass * * D.25174;
  struct MonoClass * D.25175;
  short unsigned int D.25184;
  short unsigned int D.25185;
  int m;
  int l;

  l = 0;
  if (num_ifaces == 0) goto <D.25166>; else goto <D.25167>;
  <D.25166>:
  D.25168 = -1;
  return D.25168;
  <D.25167>:
  <D.19246>:
  if (l > num_ifaces) goto <D.25169>; else goto <D.25170>;
  <D.25169>:
  D.25168 = -1;
  return D.25168;
  <D.25170>:
  D.25171 = l + num_ifaces;
  m = D.25171 / 2;
  m.189 = (unsigned int) m;
  D.25173 = m.189 * 4;
  D.25174 = interfaces_full + D.25173;
  D.25175 = *D.25174;
  if (D.25175 == ic) goto <D.25176>; else goto <D.25177>;
  <D.25176>:
  D.25168 = m;
  return D.25168;
  <D.25177>:
  if (l == num_ifaces) goto <D.25178>; else goto <D.25179>;
  <D.25178>:
  D.25168 = -1;
  return D.25168;
  <D.25179>:
  m.189 = (unsigned int) m;
  D.25173 = m.189 * 4;
  D.25174 = interfaces_full + D.25173;
  D.25175 = *D.25174;
  if (D.25175 == 0B) goto <D.25180>; else goto <D.25183>;
  <D.25183>:
  m.189 = (unsigned int) m;
  D.25173 = m.189 * 4;
  D.25174 = interfaces_full + D.25173;
  D.25175 = *D.25174;
  D.25184 = D.25175->interface_id;
  D.25185 = ic->interface_id;
  if (D.25184 > D.25185) goto <D.25180>; else goto <D.25181>;
  <D.25180>:
  num_ifaces = m + -1;
  goto <D.25182>;
  <D.25181>:
  l = m + 1;
  <D.25182>:
  goto <D.19246>;
}


set_interface_and_offset (int num_ifaces, struct MonoClass * * interfaces_full, int * interface_offsets_full, struct MonoClass * ic, int offset, mono_bool force_set)
{
  mono_bool D.25191;
  unsigned int i.190;
  unsigned int D.25193;
  int * D.25194;
  struct MonoClass * * D.25195;
  struct MonoClass * D.25196;
  short unsigned int D.25199;
  short unsigned int D.25200;
  unsigned int end.191;
  unsigned int D.25205;
  struct MonoClass * * D.25206;
  struct MonoClass * D.25207;
  sizetype i.192;
  sizetype D.25209;
  sizetype D.25210;
  struct MonoClass * * D.25211;
  const void * D.25212;
  int D.25213;
  unsigned int D.25214;
  unsigned int D.25215;
  int * D.25216;
  const void * D.25217;
  int i;

  i = find_interface (num_ifaces, interfaces_full, ic);
  if (i >= 0) goto <D.25187>; else goto <D.25188>;
  <D.25187>:
  if (force_set == 0) goto <D.25189>; else goto <D.25190>;
  <D.25189>:
  D.25191 = 1;
  return D.25191;
  <D.25190>:
  i.190 = (unsigned int) i;
  D.25193 = i.190 * 4;
  D.25194 = interface_offsets_full + D.25193;
  *D.25194 = offset;
  D.25191 = 0;
  return D.25191;
  <D.25188>:
  i = 0;
  goto <D.19270>;
  <D.19269>:
  i.190 = (unsigned int) i;
  D.25193 = i.190 * 4;
  D.25195 = interfaces_full + D.25193;
  D.25196 = *D.25195;
  if (D.25196 != 0B) goto <D.25197>; else goto <D.25198>;
  <D.25197>:
  {
    int end;

    i.190 = (unsigned int) i;
    D.25193 = i.190 * 4;
    D.25195 = interfaces_full + D.25193;
    D.25196 = *D.25195;
    D.25199 = D.25196->interface_id;
    D.25200 = ic->interface_id;
    if (D.25199 < D.25200) goto <D.25201>; else goto <D.25202>;
    <D.25201>:
    // predicted unlikely by continue predictor.
    goto <D.19264>;
    <D.25202>:
    end = i + 1;
    goto <D.19266>;
    <D.19265>:
    end = end + 1;
    <D.19266>:
    if (end < num_ifaces) goto <D.25203>; else goto <D.19267>;
    <D.25203>:
    end.191 = (unsigned int) end;
    D.25205 = end.191 * 4;
    D.25206 = interfaces_full + D.25205;
    D.25207 = *D.25206;
    if (D.25207 != 0B) goto <D.19265>; else goto <D.19267>;
    <D.19267>:
    i.192 = (sizetype) i;
    D.25209 = i.192 + 1;
    D.25210 = D.25209 * 4;
    D.25211 = interfaces_full + D.25210;
    i.190 = (unsigned int) i;
    D.25193 = i.190 * 4;
    D.25212 = interfaces_full + D.25193;
    D.25213 = end - i;
    D.25214 = (unsigned int) D.25213;
    D.25215 = D.25214 * 4;
    memmove (D.25211, D.25212, D.25215);
    i.192 = (sizetype) i;
    D.25209 = i.192 + 1;
    D.25210 = D.25209 * 4;
    D.25216 = interface_offsets_full + D.25210;
    i.190 = (unsigned int) i;
    D.25193 = i.190 * 4;
    D.25217 = interface_offsets_full + D.25193;
    D.25213 = end - i;
    D.25214 = (unsigned int) D.25213;
    D.25215 = D.25214 * 4;
    memmove (D.25216, D.25217, D.25215);
  }
  <D.25198>:
  i.190 = (unsigned int) i;
  D.25193 = i.190 * 4;
  D.25195 = interfaces_full + D.25193;
  *D.25195 = ic;
  i.190 = (unsigned int) i;
  D.25193 = i.190 * 4;
  D.25194 = interface_offsets_full + D.25193;
  *D.25194 = offset;
  goto <D.19268>;
  <D.19264>:
  i = i + 1;
  <D.19270>:
  if (i < num_ifaces) goto <D.19269>; else goto <D.19268>;
  <D.19268>:
  D.25191 = 0;
  return D.25191;
}


memmove (void * __dest, const void * __src, size_t __len)
{
  void * D.25219;
  unsigned int D.25220;

  D.25220 = __builtin_object_size (__dest, 0);
  D.25219 = __builtin___memmove_chk (__dest, __src, __len, D.25220);
  return D.25219;
}


mono_class_check_vtable_constraints (struct MonoClass * class, struct GList * in_setup)
{
  struct MonoGenericClass * D.25222;
  gboolean D.25225;
  unsigned char D.25226;
  _Bool D.25227;
  struct MonoClass * D.25228;
  struct MonoClass * D.25229;
  unsigned char D.25230;
  gchar * D.25233;
  struct MonoType * D.25234;
  unsigned char D.25235;
  int D.25240;
  int D.25242;
  int D.25243;
  gchar * D.25246;
  <unnamed-unsigned:22> D.25247;
  int D.25248;
  struct MonoGenericInst * ginst;
  int i;

  D.25222 = class->generic_class;
  if (D.25222 == 0B) goto <D.25223>; else goto <D.25224>;
  <D.25223>:
  mono_class_setup_vtable_full (class, in_setup);
  D.25226 = class->exception_type;
  D.25227 = D.25226 == 0;
  D.25225 = (gboolean) D.25227;
  return D.25225;
  <D.25224>:
  D.25228 = mono_class_get_generic_type_definition (class);
  mono_class_setup_vtable_full (D.25228, in_setup);
  D.25222 = class->generic_class;
  D.25229 = D.25222->container_class;
  D.25230 = D.25229->exception_type;
  if (D.25230 != 0) goto <D.25231>; else goto <D.25232>;
  <D.25231>:
  D.25233 = monoeg_strdup ("Failed to load generic definition vtable");
  mono_class_set_failure (class, 7, D.25233);
  D.25225 = 0;
  return D.25225;
  <D.25232>:
  D.25222 = class->generic_class;
  ginst = D.25222->context.class_inst;
  i = 0;
  goto <D.19415>;
  <D.19414>:
  {
    struct MonoClass * arg;

    D.25234 = ginst->type_argv[i];
    D.25235 = D.25234->type;
    if (D.25235 != 21) goto <D.25236>; else goto <D.25237>;
    <D.25236>:
    // predicted unlikely by continue predictor.
    goto <D.19413>;
    <D.25237>:
    D.25234 = ginst->type_argv[i];
    arg = mono_class_from_mono_type (D.25234);
    D.25240 = mono_class_has_gtd_parent (class, arg);
    if (D.25240 != 0) goto <D.25238>; else goto <D.25241>;
    <D.25241>:
    D.25242 = mono_class_has_gtd_parent (arg, class);
    if (D.25242 != 0) goto <D.25238>; else goto <D.25239>;
    <D.25238>:
    // predicted unlikely by continue predictor.
    goto <D.19413>;
    <D.25239>:
    D.25243 = mono_class_check_vtable_constraints (arg, in_setup);
    if (D.25243 == 0) goto <D.25244>; else goto <D.25245>;
    <D.25244>:
    D.25246 = monoeg_g_strdup_printf ("Failed to load generic parameter %d", i);
    mono_class_set_failure (class, 7, D.25246);
    D.25225 = 0;
    return D.25225;
    <D.25245>:
  }
  <D.19413>:
  i = i + 1;
  <D.19415>:
  D.25247 = ginst->type_argc;
  D.25248 = (int) D.25247;
  if (D.25248 > i) goto <D.19414>; else goto <D.19416>;
  <D.19416>:
  D.25225 = 1;
  return D.25225;
}


mono_class_setup_vtable_full (struct MonoClass * class, struct GList * in_setup)
{
  struct MonoMethod * * D.25250;
  unsigned int D.25255;
  unsigned int D.25256;
  unsigned char D.25258;
  unsigned char D.25260;
  struct GList * D.25263;
  long unsigned int D.25268;
  long unsigned int D.25269;
  struct MonoGenericClass * D.25270;
  int D.25273;
  struct MonoClass * D.25276;
  struct MonoImage * D.25278;
  unsigned int D.25279;
  unsigned int D.25280;
  struct MonoMethod * * overrides.193;
  int onum.194;
  gchar * D.25289;
  struct MonoMethod * * overrides;
  struct MonoGenericContext * context;
  guint32 type_token;
  int onum;
  gboolean ok;

  try
    {
      onum = 0;
      ok = 1;
      D.25250 = class->vtable;
      if (D.25250 != 0B) goto <D.25251>; else goto <D.25252>;
      <D.25251>:
      return;
      <D.25252>:
      D.25255 = class->flags;
      D.25256 = D.25255 & 32;
      if (D.25256 != 0) goto <D.25253>; else goto <D.25257>;
      <D.25257>:
      D.25258 = class->byval_arg.type;
      if (D.25258 == 19) goto <D.25253>; else goto <D.25259>;
      <D.25259>:
      D.25258 = class->byval_arg.type;
      if (D.25258 == 30) goto <D.25253>; else goto <D.25254>;
      <D.25253>:
      mono_class_setup_methods (class);
      return;
      <D.25254>:
      D.25260 = class->exception_type;
      if (D.25260 != 0) goto <D.25261>; else goto <D.25262>;
      <D.25261>:
      return;
      <D.25262>:
      D.25263 = monoeg_g_list_find (in_setup, class);
      if (D.25263 != 0B) goto <D.25264>; else goto <D.25265>;
      <D.25264>:
      return;
      <D.25265>:
      mono_loader_lock ();
      D.25250 = class->vtable;
      if (D.25250 != 0B) goto <D.25266>; else goto <D.25267>;
      <D.25266>:
      mono_loader_unlock ();
      return;
      <D.25267>:
      D.25268 = mono_stats.generic_vtable_count;
      D.25269 = D.25268 + 1;
      mono_stats.generic_vtable_count = D.25269;
      in_setup = monoeg_g_list_prepend (in_setup, class);
      D.25270 = class->generic_class;
      if (D.25270 != 0B) goto <D.25271>; else goto <D.25272>;
      <D.25271>:
      D.25273 = mono_class_check_vtable_constraints (class, in_setup);
      if (D.25273 == 0) goto <D.25274>; else goto <D.25275>;
      <D.25274>:
      mono_loader_unlock ();
      monoeg_g_list_remove (in_setup, class);
      return;
      <D.25275>:
      context = mono_class_get_context (class);
      D.25270 = class->generic_class;
      D.25276 = D.25270->container_class;
      type_token = D.25276->type_token;
      goto <D.25277>;
      <D.25272>:
      context = class->generic_container;
      type_token = class->type_token;
      <D.25277>:
      D.25278 = class->image;
      D.25279 = BIT_FIELD_REF <*D.25278, 32, 128>;
      D.25280 = D.25279 & 8;
      if (D.25280 != 0) goto <D.25281>; else goto <D.25282>;
      <D.25281>:
      mono_reflection_get_dynamic_overrides (class, &overrides, &onum);
      goto <D.25283>;
      <D.25282>:
      D.25278 = class->image;
      ok = mono_class_get_overrides_full (D.25278, type_token, &overrides, &onum, context);
      <D.25283>:
      if (ok != 0) goto <D.25284>; else goto <D.25285>;
      <D.25284>:
      overrides.193 = overrides;
      onum.194 = onum;
      mono_class_setup_vtable_general (class, overrides.193, onum.194, in_setup);
      goto <D.25288>;
      <D.25285>:
      D.25289 = monoeg_strdup ("Could not load list of method overrides");
      mono_class_set_failure (class, 7, D.25289);
      <D.25288>:
      overrides.193 = overrides;
      monoeg_g_free (overrides.193);
      mono_loader_unlock ();
      monoeg_g_list_remove (in_setup, class);
      return;
    }
  finally
    {
      overrides = {CLOBBER};
      onum = {CLOBBER};
    }
}


mono_class_has_gtd_parent (struct MonoClass * klass, struct MonoClass * parent)
{
  gboolean D.25292;
  int iftmp.195;
  short unsigned int D.25296;
  short unsigned int D.25297;
  struct MonoClass * * D.25299;
  sizetype D.25300;
  sizetype D.25301;
  sizetype D.25302;
  struct MonoClass * * D.25303;
  struct MonoClass * D.25304;
  struct MonoClass * D.25305;

  klass = mono_class_get_generic_type_definition (klass);
  parent = mono_class_get_generic_type_definition (parent);
  mono_class_setup_supertypes (klass);
  mono_class_setup_supertypes (parent);
  D.25296 = klass->idepth;
  D.25297 = parent->idepth;
  if (D.25296 >= D.25297) goto <D.25298>; else goto <D.25294>;
  <D.25298>:
  D.25299 = klass->supertypes;
  D.25297 = parent->idepth;
  D.25300 = (sizetype) D.25297;
  D.25301 = D.25300 + 1073741823;
  D.25302 = D.25301 * 4;
  D.25303 = D.25299 + D.25302;
  D.25304 = *D.25303;
  D.25305 = mono_class_get_generic_type_definition (D.25304);
  if (D.25305 == parent) goto <D.25306>; else goto <D.25294>;
  <D.25306>:
  iftmp.195 = 1;
  goto <D.25295>;
  <D.25294>:
  iftmp.195 = 0;
  <D.25295>:
  D.25292 = iftmp.195;
  return D.25292;
}


mono_class_setup_vtable (struct MonoClass * class)
{
  mono_class_setup_vtable_full (class, 0B);
}


mono_class_setup_vtable_general (struct MonoClass * class, struct MonoMethod * * overrides, int onum, struct GList * in_setup)
{
  struct MonoMethod * * D.25308;
  int D.25313;
  int D.25316;
  const char * D.25319;
  gchar * D.25320;
  void * * D.25323;
  unsigned int i.196;
  unsigned int D.25325;
  void * * D.25326;
  unsigned int D.25327;
  unsigned int max_vtsize.197;
  unsigned int D.25329;
  unsigned int i.198;
  unsigned int D.25331;
  struct MonoClass * D.25332;
  unsigned char D.25335;
  gchar * D.25338;
  int D.25339;
  unsigned int D.25340;
  unsigned int D.25341;
  int D.25342;
  unsigned int max_vtsize.199;
  unsigned int D.25346;
  short unsigned int D.25349;
  struct MonoGenericClass * D.25350;
  unsigned char D.25353;
  int D.25356;
  unsigned int D.25357;
  unsigned int D.25358;
  int D.25359;
  struct MonoMethod * * D.25360;
  struct MonoMethod * * D.25361;
  struct MonoMethod * D.25362;
  struct MonoGenericContext * D.25365;
  int D.25366;
  const char * D.25369;
  struct MonoMethod * * D.25370;
  struct MonoMethod * D.25371;
  short int D.25372;
  struct MonoMethod * * D.25373;
  struct MonoMethod * * D.25376;
  struct MonoMethod * * D.25379;
  struct MonoMethod * D.25380;
  short int D.25381;
  struct MonoMethod * * D.25384;
  struct MonoMethod * D.25385;
  short int D.25386;
  unsigned int i.200;
  struct MonoMethod * * D.25392;
  int D.25393;
  unsigned int D.25394;
  unsigned int D.25395;
  struct MonoClass * * D.25396;
  unsigned int i.201;
  unsigned int D.25398;
  struct MonoClass * * D.25399;
  int D.25402;
  unsigned int D.25403;
  unsigned int D.25404;
  struct MonoMethod * * D.25405;
  int D.25406;
  unsigned int D.25407;
  unsigned int D.25408;
  struct MonoMethod * * D.25409;
  struct MonoMethod * D.25410;
  unsigned int j.202;
  unsigned int D.25412;
  unsigned char D.25414;
  short unsigned int D.25415;
  int D.25416;
  int D.25417;
  short int D.25420;
  short int D.25423;
  int D.25425;
  _Bool D.25426;
  long int D.25427;
  long int D.25428;
  unsigned int stelemref_slot.203;
  unsigned int D.25432;
  struct MonoMethod * * D.25433;
  unsigned int D.25434;
  struct MonoMethod * * D.25435;
  struct MonoClass * D.25438;
  unsigned int D.25439;
  unsigned int D.25440;
  unsigned char D.25442;
  int D.25446;
  unsigned int dslot.204;
  unsigned int D.25448;
  struct MonoMethod * * D.25449;
  sizetype i.205;
  sizetype D.25451;
  sizetype D.25452;
  struct MonoMethod * * D.25453;
  struct MonoMethod * D.25454;
  struct MonoMethod * D.25455;
  short int D.25456;
  struct MonoMethod * D.25459;
  <unnamed type> D.25460;
  struct MonoClass * * D.25464;
  struct MonoClass * * D.25465;
  unsigned char D.25466;
  struct MonoClass * * D.25470;
  unsigned int implemented_interfaces_index.206;
  unsigned int D.25472;
  struct MonoClass * * D.25473;
  struct MonoClass * D.25474;
  short unsigned int D.25477;
  int D.25478;
  struct MonoMethod * * D.25480;
  unsigned int im_index.207;
  unsigned int D.25482;
  struct MonoMethod * * D.25483;
  short int D.25484;
  int D.25485;
  struct MonoMethod * iftmp.208;
  short unsigned int D.25490;
  int D.25491;
  int D.25492;
  unsigned int im_slot.209;
  unsigned int D.25498;
  struct MonoMethod * * D.25499;
  struct MonoMethod * D.25500;
  _Bool D.25501;
  int D.25502;
  int D.25503;
  short int D.25506;
  short int D.25509;
  int D.25515;
  struct MonoMethod * * D.25516;
  unsigned int cm_index.210;
  unsigned int D.25518;
  struct MonoMethod * * D.25519;
  int D.25522;
  short int D.25525;
  _Bool D.25530;
  long int D.25531;
  long int D.25532;
  unsigned int im_index.211;
  unsigned int D.25536;
  short unsigned int D.25537;
  int D.25538;
  unsigned int D.25539;
  unsigned int D.25540;
  unsigned int im_index.212;
  unsigned int D.25544;
  struct MonoMethod * * D.25545;
  short int D.25546;
  int D.25547;
  short unsigned int D.25548;
  int D.25549;
  int D.25550;
  unsigned int im_slot.213;
  unsigned int D.25554;
  struct MonoMethod * * D.25555;
  struct MonoMethod * D.25556;
  unsigned int im_index.214;
  short unsigned int D.25560;
  int D.25561;
  int D.25562;
  int D.19682;
  const char * D.25568;
  const char * D.25569;
  int D.25572;
  short unsigned int D.25577;
  int D.25578;
  int D.25579;
  <unnamed type> D.25582;
  int D.25586;
  int D.25589;
  gchar * D.25592;
  short int D.25593;
  int D.25594;
  _Bool D.25595;
  long int D.25596;
  long int D.25597;
  unsigned char D.25602;
  short int D.25607;
  unsigned int D.25608;
  unsigned int D.25609;
  int cur_slot.215;
  short int D.25617;
  int D.25618;
  unsigned int D.25621;
  unsigned int D.25622;
  struct MonoMethod * * D.25623;
  struct MonoClass * D.25624;
  unsigned int D.25625;
  unsigned int D.25626;
  unsigned char D.25629;
  short int D.25634;
  _Bool D.25635;
  long int D.25636;
  long int D.25637;
  unsigned int D.25640;
  unsigned int D.25641;
  struct MonoMethod * * D.25642;
  <unnamed type> D.25645;
  struct MonoMethod * D.25648;
  struct MonoMethod * * D.25651;
  struct MonoMethod * D.25652;
  short unsigned int D.25662;
  int D.25663;
  int D.25664;
  char * iftmp.216;
  gchar * D.25669;
  int D.25672;
  int D.25673;
  int D.25675;
  _Bool D.25678;
  long int D.25679;
  long int D.25680;
  struct MonoMethod * * D.25687;
  unsigned int D.25688;
  unsigned int D.25689;
  int D.25690;
  int D.25692;
  int mono_print_vtable.217;
  int D.25696;
  guint8 * D.25699;
  int D.25700;
  sizetype D.25701;
  guint8 * D.25702;
  unsigned char D.25703;
  int D.25704;
  int D.25705;
  int D.25706;
  int D.25707;
  struct MonoType * D.25710;
  char * D.25711;
  short int D.25714;
  int D.25715;
  char * D.25716;
  const char * D.25719;
  const char * D.25720;
  struct MonoClass * * D.25721;
  int D.25722;
  int D.25723;
  short unsigned int D.25724;
  int D.25725;
  struct MonoType * D.25726;
  char * D.25727;
  struct MonoClass * * D.25728;
  struct MonoClass * * D.25729;
  int D.25730;
  int D.25731;
  char * D.25732;
  short unsigned int D.25733;
  int D.25734;
  gchar * D.25735;
  struct MonoError error;
  struct MonoClass * k;
  struct MonoClass * ic;
  struct MonoMethod * * vtable;
  int i;
  int max_vtsize;
  int max_iid;
  int cur_slot;
  struct GPtrArray * ifaces;
  struct GHashTable * override_map;
  gboolean security_enabled;
  struct MonoMethod * cm;
  void * class_iter;
  struct GSList * virt_methods;
  struct GSList * l;
  int stelemref_slot;
  void fail = <<< error >>>;

  try
    {
      max_vtsize = 0;
      cur_slot = 0;
      ifaces = 0B;
      override_map = 0B;
      security_enabled = mono_is_security_manager_active ();
      virt_methods = 0B;
      stelemref_slot = 0;
      D.25308 = class->vtable;
      if (D.25308 != 0B) goto <D.25309>; else goto <D.25310>;
      <D.25309>:
      return;
      <D.25310>:
      if (overrides != 0B) goto <D.25311>; else goto <D.25312>;
      <D.25311>:
      D.25313 = verify_class_overrides (class, overrides, onum);
      if (D.25313 == 0) goto <D.25314>; else goto <D.25315>;
      <D.25314>:
      return;
      <D.25315>:
      <D.25312>:
      ifaces = mono_class_get_implemented_interfaces (class, &error);
      D.25316 = mono_error_ok (&error);
      if (D.25316 == 0) goto <D.25317>; else goto <D.25318>;
      <D.25317>:
      {
        char * name;

        name = mono_type_get_full_name (class);
        D.25319 = mono_error_get_message (&error);
        D.25320 = monoeg_g_strdup_printf ("Could not resolve %s interfaces due to %s", name, D.25319);
        mono_class_set_failure (class, 7, D.25320);
        monoeg_g_free (name);
        mono_error_cleanup (&error);
        return;
      }
      <D.25318>:
      if (ifaces != 0B) goto <D.25321>; else goto <D.25322>;
      <D.25321>:
      i = 0;
      goto <D.19591>;
      <D.19590>:
      {
        struct MonoClass * ic;

        D.25323 = ifaces->pdata;
        i.196 = (unsigned int) i;
        D.25325 = i.196 * 4;
        D.25326 = D.25323 + D.25325;
        ic = *D.25326;
        D.25327 = ic->method.count;
        max_vtsize.197 = (unsigned int) max_vtsize;
        D.25329 = D.25327 + max_vtsize.197;
        max_vtsize = (int) D.25329;
      }
      i = i + 1;
      <D.19591>:
      i.198 = (unsigned int) i;
      D.25331 = ifaces->len;
      if (i.198 < D.25331) goto <D.19590>; else goto <D.19592>;
      <D.19592>:
      monoeg_g_ptr_array_free (ifaces, 1);
      ifaces = 0B;
      <D.25322>:
      D.25332 = class->parent;
      if (D.25332 != 0B) goto <D.25333>; else goto <D.25334>;
      <D.25333>:
      D.25332 = class->parent;
      mono_class_init (D.25332);
      D.25332 = class->parent;
      mono_class_setup_vtable_full (D.25332, in_setup);
      D.25332 = class->parent;
      D.25335 = D.25332->exception_type;
      if (D.25335 != 0) goto <D.25336>; else goto <D.25337>;
      <D.25336>:
      {
        char * name;

        D.25332 = class->parent;
        name = mono_type_get_full_name (D.25332);
        D.25338 = monoeg_g_strdup_printf ("Parent %s failed to load", name);
        mono_class_set_failure (class, 7, D.25338);
        monoeg_g_free (name);
        return;
      }
      <D.25337>:
      D.25332 = class->parent;
      D.25339 = D.25332->vtable_size;
      max_vtsize = D.25339 + max_vtsize;
      D.25332 = class->parent;
      cur_slot = D.25332->vtable_size;
      <D.25334>:
      D.25340 = class->method.count;
      max_vtsize.197 = (unsigned int) max_vtsize;
      D.25341 = D.25340 + max_vtsize.197;
      max_vtsize = (int) D.25341;
      D.25342 = mono_class_need_stelemref_method (class);
      if (D.25342 != 0) goto <D.25343>; else goto <D.25344>;
      <D.25343>:
      stelemref_slot = cur_slot;
      max_vtsize = max_vtsize + 1;
      cur_slot = cur_slot + 1;
      <D.25344>:
      max_vtsize.199 = (unsigned int) max_vtsize;
      D.25346 = max_vtsize.199 * 4;
      vtable = __builtin_alloca (D.25346);
      max_vtsize.199 = (unsigned int) max_vtsize;
      D.25346 = max_vtsize.199 * 4;
      memset (vtable, 0, D.25346);
      cur_slot = setup_interface_offsets (class, cur_slot, 1);
      if (cur_slot == -1) goto <D.25347>; else goto <D.25348>;
      <D.25347>:
      return;
      <D.25348>:
      D.25349 = class->max_interface_id;
      max_iid = (int) D.25349;
      D.25350 = class->generic_class;
      if (D.25350 != 0B) goto <D.25351>; else goto <D.25352>;
      <D.25351>:
      {
        struct MonoError error;
        struct MonoClass * gklass;
        struct MonoMethod * * tmp;

        try
          {
            D.25350 = class->generic_class;
            gklass = D.25350->container_class;
            mono_class_setup_vtable_full (gklass, in_setup);
            D.25353 = gklass->exception_type;
            if (D.25353 != 0) goto <D.25354>; else goto <D.25355>;
            <D.25354>:
            mono_class_set_failure (class, 7, 0B);
            return;
            <D.25355>:
            D.25356 = gklass->vtable_size;
            D.25357 = (unsigned int) D.25356;
            D.25358 = D.25357 * 4;
            D.25359 = (int) D.25358;
            tmp = mono_class_alloc0 (class, D.25359);
            D.25356 = gklass->vtable_size;
            class->vtable_size = D.25356;
            i = 0;
            goto <D.19600>;
            <D.19599>:
            D.25360 = gklass->vtable;
            i.196 = (unsigned int) i;
            D.25325 = i.196 * 4;
            D.25361 = D.25360 + D.25325;
            D.25362 = *D.25361;
            if (D.25362 != 0B) goto <D.25363>; else goto <D.25364>;
            <D.25363>:
            {
              struct MonoMethod * inflated;

              D.25360 = gklass->vtable;
              i.196 = (unsigned int) i;
              D.25325 = i.196 * 4;
              D.25361 = D.25360 + D.25325;
              D.25362 = *D.25361;
              D.25365 = mono_class_get_context (class);
              inflated = mono_class_inflate_generic_method_full_checked (D.25362, class, D.25365, &error);
              D.25366 = mono_error_ok (&error);
              if (D.25366 == 0) goto <D.25367>; else goto <D.25368>;
              <D.25367>:
              {
                char * err_msg;

                D.25369 = mono_error_get_message (&error);
                err_msg = monoeg_g_strdup_printf ("Could not inflate method due to %s", D.25369);
                mono_class_set_failure (class, 7, err_msg);
                monoeg_g_free (err_msg);
                mono_error_cleanup (&error);
                return;
              }
              <D.25368>:
              i.196 = (unsigned int) i;
              D.25325 = i.196 * 4;
              D.25370 = tmp + D.25325;
              *D.25370 = inflated;
              i.196 = (unsigned int) i;
              D.25325 = i.196 * 4;
              D.25370 = tmp + D.25325;
              D.25371 = *D.25370;
              D.25360 = gklass->vtable;
              i.196 = (unsigned int) i;
              D.25325 = i.196 * 4;
              D.25361 = D.25360 + D.25325;
              D.25362 = *D.25361;
              D.25372 = D.25362->slot;
              D.25371->slot = D.25372;
            }
            <D.25364>:
            i = i + 1;
            <D.19600>:
            D.25356 = gklass->vtable_size;
            if (D.25356 > i) goto <D.19599>; else goto <D.19601>;
            <D.19601>:
            mono_memory_barrier ();
            class->vtable = tmp;
            D.25373 = class->methods;
            if (D.25373 != 0B) goto <D.25374>; else goto <D.25375>;
            <D.25374>:
            D.25376 = gklass->methods;
            if (D.25376 != 0B) goto <D.25377>; else goto <D.25378>;
            <D.25377>:
            i = 0;
            goto <D.19603>;
            <D.19602>:
            D.25373 = class->methods;
            i.196 = (unsigned int) i;
            D.25325 = i.196 * 4;
            D.25379 = D.25373 + D.25325;
            D.25380 = *D.25379;
            D.25381 = D.25380->slot;
            if (D.25381 == -1) goto <D.25382>; else goto <D.25383>;
            <D.25382>:
            D.25373 = class->methods;
            i.196 = (unsigned int) i;
            D.25325 = i.196 * 4;
            D.25379 = D.25373 + D.25325;
            D.25380 = *D.25379;
            D.25376 = gklass->methods;
            i.196 = (unsigned int) i;
            D.25325 = i.196 * 4;
            D.25384 = D.25376 + D.25325;
            D.25385 = *D.25384;
            D.25386 = D.25385->slot;
            D.25380->slot = D.25386;
            <D.25383>:
            i = i + 1;
            <D.19603>:
            i.200 = (unsigned int) i;
            D.25340 = class->method.count;
            if (i.200 < D.25340) goto <D.19602>; else goto <D.19604>;
            <D.19604>:
            <D.25378>:
            <D.25375>:
            return;
          }
        finally
          {
            error = {CLOBBER};
          }
      }
      <D.25352>:
      D.25332 = class->parent;
      if (D.25332 != 0B) goto <D.25388>; else goto <D.25389>;
      <D.25388>:
      D.25332 = class->parent;
      D.25339 = D.25332->vtable_size;
      if (D.25339 != 0) goto <D.25390>; else goto <D.25391>;
      <D.25390>:
      {
        struct MonoClass * parent;
        int i;

        parent = class->parent;
        D.25392 = parent->vtable;
        D.25393 = parent->vtable_size;
        D.25394 = (unsigned int) D.25393;
        D.25395 = D.25394 * 4;
        memcpy (vtable, D.25392, D.25395);
        i = 0;
        goto <D.19615>;
        <D.19614>:
        {
          struct MonoClass * parent_interface;
          int interface_offset;

          D.25396 = parent->interfaces_packed;
          i.201 = (unsigned int) i;
          D.25398 = i.201 * 4;
          D.25399 = D.25396 + D.25398;
          parent_interface = *D.25399;
          interface_offset = mono_class_interface_offset (class, parent_interface);
          D.25393 = parent->vtable_size;
          if (D.25393 <= interface_offset) goto <D.25400>; else goto <D.25401>;
          <D.25400>:
          {
            int parent_interface_offset;
            int j;

            parent_interface_offset = mono_class_interface_offset (parent, parent_interface);
            mono_class_setup_methods (parent_interface);
            j = 0;
            goto <D.19612>;
            <D.19611>:
            D.25402 = interface_offset + j;
            D.25403 = (unsigned int) D.25402;
            D.25404 = D.25403 * 4;
            D.25405 = vtable + D.25404;
            D.25392 = parent->vtable;
            D.25406 = parent_interface_offset + j;
            D.25407 = (unsigned int) D.25406;
            D.25408 = D.25407 * 4;
            D.25409 = D.25392 + D.25408;
            D.25410 = *D.25409;
            *D.25405 = D.25410;
            j = j + 1;
            <D.19612>:
            j.202 = (unsigned int) j;
            D.25412 = parent_interface->method.count;
            if (j.202 < D.25412) goto <D.25413>; else goto <D.19613>;
            <D.25413>:
            D.25414 = class->exception_type;
            if (D.25414 == 0) goto <D.19611>; else goto <D.19613>;
            <D.19613>:
          }
          <D.25401>:
        }
        i = i + 1;
        <D.19615>:
        D.25415 = parent->interface_offsets_count;
        D.25416 = (int) D.25415;
        if (D.25416 > i) goto <D.19614>; else goto <D.19616>;
        <D.19616>:
      }
      <D.25391>:
      <D.25389>:
      D.25417 = mono_class_need_stelemref_method (class);
      if (D.25417 != 0) goto <D.25418>; else goto <D.25419>;
      <D.25418>:
      {
        struct MonoMethod * method;

        method = mono_marshal_get_virtual_stelemref (class);
        D.25420 = method->slot;
        if (D.25420 == 0) goto <D.25421>; else goto <D.25422>;
        <D.25421>:
        D.25423 = (short int) stelemref_slot;
        method->slot = D.25423;
        goto <D.25424>;
        <D.25422>:
        D.25420 = method->slot;
        D.25425 = (int) D.25420;
        D.25426 = D.25425 != stelemref_slot;
        D.25427 = (long int) D.25426;
        D.25428 = __builtin_expect (D.25427, 0);
        if (D.25428 != 0) goto <D.25429>; else goto <D.25430>;
        <D.25429>:
        monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "class.c", 4263, "method->slot == stelemref_slot");
        <D.25430>:
        <D.25424>:
        stelemref_slot.203 = (unsigned int) stelemref_slot;
        D.25432 = stelemref_slot.203 * 4;
        D.25433 = vtable + D.25432;
        *D.25433 = method;
      }
      <D.25419>:
      i = 0;
      goto <D.19621>;
      <D.19620>:
      {
        struct MonoMethod * decl;

        i.196 = (unsigned int) i;
        D.25434 = i.196 * 8;
        D.25435 = overrides + D.25434;
        decl = *D.25435;
        D.25438 = decl->klass;
        D.25439 = D.25438->flags;
        D.25440 = D.25439 & 32;
        if (D.25440 != 0) goto <D.25436>; else goto <D.25441>;
        <D.25441>:
        D.25438 = decl->klass;
        D.25442 = D.25438->byval_arg.type;
        if (D.25442 == 19) goto <D.25436>; else goto <D.25443>;
        <D.25443>:
        D.25438 = decl->klass;
        D.25442 = D.25438->byval_arg.type;
        if (D.25442 == 30) goto <D.25436>; else goto <D.25437>;
        <D.25436>:
        {
          int dslot;

          dslot = mono_method_get_vtable_slot (decl);
          if (dslot == -1) goto <D.25444>; else goto <D.25445>;
          <D.25444>:
          mono_class_set_failure (class, 7, 0B);
          return;
          <D.25445>:
          D.25438 = decl->klass;
          D.25446 = mono_class_interface_offset (class, D.25438);
          dslot = D.25446 + dslot;
          dslot.204 = (unsigned int) dslot;
          D.25448 = dslot.204 * 4;
          D.25449 = vtable + D.25448;
          i.205 = (sizetype) i;
          D.25451 = i.205 * 8;
          D.25452 = D.25451 + 4;
          D.25453 = overrides + D.25452;
          D.25454 = *D.25453;
          *D.25449 = D.25454;
          dslot.204 = (unsigned int) dslot;
          D.25448 = dslot.204 * 4;
          D.25449 = vtable + D.25448;
          D.25455 = *D.25449;
          D.25456 = (short int) dslot;
          D.25455->slot = D.25456;
          if (override_map == 0B) goto <D.25457>; else goto <D.25458>;
          <D.25457>:
          override_map = monoeg_g_hash_table_new (mono_aligned_addr_hash, 0B);
          <D.25458>:
          i.196 = (unsigned int) i;
          D.25434 = i.196 * 8;
          D.25435 = overrides + D.25434;
          D.25459 = *D.25435;
          i.205 = (sizetype) i;
          D.25451 = i.205 * 8;
          D.25452 = D.25451 + 4;
          D.25453 = overrides + D.25452;
          D.25454 = *D.25453;
          monoeg_g_hash_table_insert_replace (override_map, D.25459, D.25454, 0);
          D.25460 = mono_security_get_mode ();
          if (D.25460 == 1) goto <D.25461>; else goto <D.25462>;
          <D.25461>:
          dslot.204 = (unsigned int) dslot;
          D.25448 = dslot.204 * 4;
          D.25449 = vtable + D.25448;
          D.25455 = *D.25449;
          mono_security_core_clr_check_override (class, D.25455, decl);
          <D.25462>:
        }
        <D.25437>:
      }
      i = i + 1;
      <D.19621>:
      if (i < onum) goto <D.19620>; else goto <D.19622>;
      <D.19622>:
      {
        void * iter;
        struct MonoMethod * cm;

        try
          {
            iter = 0B;
            virt_methods = 0B;
            goto <D.19626>;
            <D.19625>:
            virt_methods = monoeg_g_slist_prepend (virt_methods, cm);
            <D.19626>:
            cm = mono_class_get_virtual_methods (class, &iter);
            if (cm != 0B) goto <D.19625>; else goto <D.19627>;
            <D.19627>:
            D.25414 = class->exception_type;
            if (D.25414 != 0) goto fail; else goto <D.25463>;
            <D.25463>:
          }
        finally
          {
            iter = {CLOBBER};
          }
      }
      i = 0;
      goto <D.19656>;
      <D.19655>:
      {
        struct MonoClass * parent;
        int ic_offset;
        gboolean interface_is_explicitly_implemented_by_class;
        int im_index;

        parent = class->parent;
        D.25464 = class->interfaces_packed;
        i.196 = (unsigned int) i;
        D.25325 = i.196 * 4;
        D.25465 = D.25464 + D.25325;
        ic = *D.25465;
        ic_offset = mono_class_interface_offset (class, ic);
        mono_class_setup_methods (ic);
        D.25466 = ic->exception_type;
        if (D.25466 != 0) goto fail; else goto <D.25467>;
        <D.25467>:
        if (parent != 0B) goto <D.25468>; else goto <D.25469>;
        <D.25468>:
        {
          int implemented_interfaces_index;

          interface_is_explicitly_implemented_by_class = 0;
          implemented_interfaces_index = 0;
          goto <D.19636>;
          <D.19635>:
          D.25470 = class->interfaces;
          implemented_interfaces_index.206 = (unsigned int) implemented_interfaces_index;
          D.25472 = implemented_interfaces_index.206 * 4;
          D.25473 = D.25470 + D.25472;
          D.25474 = *D.25473;
          if (D.25474 == ic) goto <D.25475>; else goto <D.25476>;
          <D.25475>:
          interface_is_explicitly_implemented_by_class = 1;
          goto <D.19634>;
          <D.25476>:
          implemented_interfaces_index = implemented_interfaces_index + 1;
          <D.19636>:
          D.25477 = class->interface_count;
          D.25478 = (int) D.25477;
          if (D.25478 > implemented_interfaces_index) goto <D.19635>; else goto <D.19634>;
          <D.19634>:
        }
        goto <D.25479>;
        <D.25469>:
        interface_is_explicitly_implemented_by_class = 1;
        <D.25479>:
        im_index = 0;
        goto <D.19653>;
        <D.19652>:
        {
          struct MonoMethod * im;
          int im_slot;
          struct MonoMethod * override_im;

          D.25480 = ic->methods;
          im_index.207 = (unsigned int) im_index;
          D.25482 = im_index.207 * 4;
          D.25483 = D.25480 + D.25482;
          im = *D.25483;
          D.25484 = im->slot;
          D.25485 = (int) D.25484;
          im_slot = D.25485 + ic_offset;
          if (override_map != 0B) goto <D.25487>; else goto <D.25488>;
          <D.25487>:
          iftmp.208 = monoeg_g_hash_table_lookup (override_map, im);
          goto <D.25489>;
          <D.25488>:
          iftmp.208 = 0B;
          <D.25489>:
          override_im = iftmp.208;
          D.25490 = im->flags;
          D.25491 = (int) D.25490;
          D.25492 = D.25491 & 16;
          if (D.25492 != 0) goto <D.25493>; else goto <D.25494>;
          <D.25493>:
          // predicted unlikely by continue predictor.
          goto <D.19640>;
          <D.25494>:
          if (override_im == 0B) goto <D.25495>; else goto <D.25496>;
          <D.25495>:
          {
            int cm_index;
            void * iter;
            struct MonoMethod * cm;

            iter = 0B;
            l = virt_methods;
            goto <D.19645>;
            <D.19644>:
            cm = l->data;
            im_slot.209 = (unsigned int) im_slot;
            D.25498 = im_slot.209 * 4;
            D.25499 = vtable + D.25498;
            D.25500 = *D.25499;
            D.25501 = D.25500 == 0B;
            D.25502 = (int) D.25501;
            D.25503 = check_interface_method_override (class, im, cm, 1, interface_is_explicitly_implemented_by_class, D.25502, security_enabled);
            if (D.25503 != 0) goto <D.25504>; else goto <D.25505>;
            <D.25504>:
            im_slot.209 = (unsigned int) im_slot;
            D.25498 = im_slot.209 * 4;
            D.25499 = vtable + D.25498;
            *D.25499 = cm;
            D.25506 = cm->slot;
            if (D.25506 < 0) goto <D.25507>; else goto <D.25508>;
            <D.25507>:
            D.25509 = (short int) im_slot;
            cm->slot = D.25509;
            <D.25508>:
            <D.25505>:
            D.25414 = class->exception_type;
            if (D.25414 != 0) goto fail; else goto <D.25510>;
            <D.25510>:
            l = l->next;
            <D.19645>:
            if (l != 0B) goto <D.19644>; else goto <D.19646>;
            <D.19646>:
            im_slot.209 = (unsigned int) im_slot;
            D.25498 = im_slot.209 * 4;
            D.25499 = vtable + D.25498;
            D.25500 = *D.25499;
            if (D.25500 == 0B) goto <D.25511>; else goto <D.25512>;
            <D.25511>:
            D.25332 = class->parent;
            if (D.25332 != 0B) goto <D.25513>; else goto <D.25514>;
            <D.25513>:
            {
              struct MonoClass * parent;

              parent = class->parent;
              D.25515 = parent->vtable_size;
              cm_index = D.25515 + -1;
              goto <D.19651>;
              <D.19650>:
              {
                struct MonoMethod * cm;

                D.25516 = parent->vtable;
                cm_index.210 = (unsigned int) cm_index;
                D.25518 = cm_index.210 * 4;
                D.25519 = D.25516 + D.25518;
                cm = *D.25519;
                if (cm != 0B) goto <D.25520>; else goto <D.25521>;
                <D.25520>:
                D.25522 = check_interface_method_override (class, im, cm, 0, 0, 1, security_enabled);
                if (D.25522 != 0) goto <D.25523>; else goto <D.25524>;
                <D.25523>:
                im_slot.209 = (unsigned int) im_slot;
                D.25498 = im_slot.209 * 4;
                D.25499 = vtable + D.25498;
                *D.25499 = cm;
                D.25525 = cm->slot;
                if (D.25525 < 0) goto <D.25526>; else goto <D.25527>;
                <D.25526>:
                D.25509 = (short int) im_slot;
                cm->slot = D.25509;
                <D.25527>:
                goto <D.19649>;
                <D.25524>:
                <D.25521>:
                D.25414 = class->exception_type;
                if (D.25414 != 0) goto fail; else goto <D.25528>;
                <D.25528>:
              }
              cm_index = cm_index + -1;
              <D.19651>:
              if (cm_index >= 0) goto <D.19650>; else goto <D.19649>;
              <D.19649>:
            }
            <D.25514>:
            <D.25512>:
          }
          goto <D.25529>;
          <D.25496>:
          im_slot.209 = (unsigned int) im_slot;
          D.25498 = im_slot.209 * 4;
          D.25499 = vtable + D.25498;
          D.25500 = *D.25499;
          D.25530 = D.25500 != override_im;
          D.25531 = (long int) D.25530;
          D.25532 = __builtin_expect (D.25531, 0);
          if (D.25532 != 0) goto <D.25533>; else goto <D.25534>;
          <D.25533>:
          monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "class.c", 4399, "vtable [im_slot] == override_im");
          <D.25534>:
          <D.25529>:
        }
        <D.19640>:
        im_index = im_index + 1;
        <D.19653>:
        im_index.211 = (unsigned int) im_index;
        D.25536 = ic->method.count;
        if (im_index.211 < D.25536) goto <D.19652>; else goto <D.19654>;
        <D.19654>:
      }
      i = i + 1;
      <D.19656>:
      D.25537 = class->interface_offsets_count;
      D.25538 = (int) D.25537;
      if (D.25538 > i) goto <D.19655>; else goto <D.19657>;
      <D.19657>:
      D.25539 = class->flags;
      D.25540 = D.25539 & 128;
      if (D.25540 == 0) goto <D.25541>; else goto <D.25542>;
      <D.25541>:
      i = 0;
      goto <D.19667>;
      <D.19666>:
      {
        int ic_offset;
        int im_index;

        D.25464 = class->interfaces_packed;
        i.196 = (unsigned int) i;
        D.25325 = i.196 * 4;
        D.25465 = D.25464 + D.25325;
        ic = *D.25465;
        ic_offset = mono_class_interface_offset (class, ic);
        im_index = 0;
        goto <D.19664>;
        <D.19663>:
        {
          struct MonoMethod * im;
          int im_slot;

          D.25480 = ic->methods;
          im_index.212 = (unsigned int) im_index;
          D.25544 = im_index.212 * 4;
          D.25545 = D.25480 + D.25544;
          im = *D.25545;
          D.25546 = im->slot;
          D.25547 = (int) D.25546;
          im_slot = D.25547 + ic_offset;
          D.25548 = im->flags;
          D.25549 = (int) D.25548;
          D.25550 = D.25549 & 16;
          if (D.25550 != 0) goto <D.25551>; else goto <D.25552>;
          <D.25551>:
          // predicted unlikely by continue predictor.
          goto <D.19662>;
          <D.25552>:
          im_slot.213 = (unsigned int) im_slot;
          D.25554 = im_slot.213 * 4;
          D.25555 = vtable + D.25554;
          D.25556 = *D.25555;
          if (D.25556 == 0B) goto <D.25557>; else goto <D.25558>;
          <D.25557>:
          print_unimplemented_interface_method_info (class, ic, im, im_slot, overrides, onum);
          goto fail;
          <D.25558>:
        }
        <D.19662>:
        im_index = im_index + 1;
        <D.19664>:
        im_index.214 = (unsigned int) im_index;
        D.25536 = ic->method.count;
        if (im_index.214 < D.25536) goto <D.19663>; else goto <D.19665>;
        <D.19665>:
      }
      i = i + 1;
      <D.19667>:
      D.25537 = class->interface_offsets_count;
      D.25538 = (int) D.25537;
      if (D.25538 > i) goto <D.19666>; else goto <D.19668>;
      <D.19668>:
      <D.25542>:
      class_iter = 0B;
      l = virt_methods;
      goto <D.19692>;
      <D.19691>:
      cm = l->data;
      D.25560 = cm->flags;
      D.25561 = (int) D.25560;
      D.25562 = D.25561 & 256;
      if (D.25562 == 0) goto <D.25563>; else goto <D.25564>;
      <D.25563>:
      {
        int slot;

        slot = -1;
        k = class->parent;
        goto <D.19690>;
        <D.19689>:
        {
          void * k_iter;
          struct MonoMethod * m1;

          try
            {
              k_iter = 0B;
              goto <D.19687>;
              <D.19686>:
              {
                struct MonoMethodSignature * cmsig;
                struct MonoMethodSignature * m1sig;

                cmsig = mono_method_signature (cm);
                m1sig = mono_method_signature (m1);
                if (cmsig == 0B) goto <D.25565>; else goto <D.25567>;
                <D.25567>:
                if (m1sig == 0B) goto <D.25565>; else goto <D.25566>;
                <D.25565>:
                mono_class_set_failure (class, 7, 0B);
                return;
                <D.25566>:
                {
                  size_t __s1_len;
                  size_t __s2_len;

                  D.25568 = cm->name;
                  D.25569 = m1->name;
                  D.19682 = __builtin_strcmp (D.25568, D.25569);
                }
                if (D.19682 == 0) goto <D.25570>; else goto <D.25571>;
                <D.25570>:
                D.25572 = mono_metadata_signature_equal (cmsig, m1sig);
                if (D.25572 != 0) goto <D.25573>; else goto <D.25574>;
                <D.25573>:
                if (security_enabled != 0) goto <D.25575>; else goto <D.25576>;
                <D.25575>:
                D.25577 = m1->flags;
                D.25578 = (int) D.25577;
                D.25579 = D.25578 & 16384;
                if (D.25579 != 0) goto <D.25580>; else goto <D.25581>;
                <D.25580>:
                mono_secman_inheritancedemand_method (cm, m1);
                <D.25581>:
                <D.25576>:
                D.25582 = mono_security_get_mode ();
                if (D.25582 == 1) goto <D.25583>; else goto <D.25584>;
                <D.25583>:
                mono_security_core_clr_check_override (class, cm, m1);
                <D.25584>:
                slot = mono_method_get_vtable_slot (m1);
                if (slot == -1) goto fail; else goto <D.25585>;
                <D.25585>:
                D.25586 = is_wcf_hack_disabled ();
                if (D.25586 != 0) goto <D.25587>; else goto <D.25588>;
                <D.25587>:
                D.25589 = mono_method_can_access_method_full (cm, m1, 0B);
                if (D.25589 == 0) goto <D.25590>; else goto <D.25591>;
                <D.25590>:
                {
                  char * body_name;
                  char * decl_name;

                  body_name = mono_method_full_name (cm, 1);
                  decl_name = mono_method_full_name (m1, 1);
                  D.25592 = monoeg_g_strdup_printf ("Method %s overrides method \'%s\' which is not accessible", body_name, decl_name);
                  mono_class_set_failure (class, 7, D.25592);
                  monoeg_g_free (body_name);
                  monoeg_g_free (decl_name);
                  goto fail;
                }
                <D.25591>:
                <D.25588>:
                D.25593 = cm->slot;
                D.25594 = (int) D.25593;
                D.25595 = D.25594 >= max_vtsize;
                D.25596 = (long int) D.25595;
                D.25597 = __builtin_expect (D.25596, 0);
                if (D.25597 != 0) goto <D.25598>; else goto <D.25599>;
                <D.25598>:
                monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "class.c", 4484, "cm->slot < max_vtsize");
                <D.25599>:
                if (override_map == 0B) goto <D.25600>; else goto <D.25601>;
                <D.25600>:
                override_map = monoeg_g_hash_table_new (mono_aligned_addr_hash, 0B);
                <D.25601>:
                monoeg_g_hash_table_insert_replace (override_map, m1, cm, 0);
                goto <D.19685>;
                <D.25574>:
                <D.25571>:
              }
              <D.19687>:
              m1 = mono_class_get_virtual_methods (k, &k_iter);
              if (m1 != 0B) goto <D.19686>; else goto <D.19685>;
              <D.19685>:
              D.25602 = k->exception_type;
              if (D.25602 != 0) goto fail; else goto <D.25603>;
              <D.25603>:
              if (slot >= 0) goto <D.19688>; else goto <D.25604>;
              <D.25604>:
            }
          finally
            {
              k_iter = {CLOBBER};
            }
        }
        k = k->parent;
        <D.19690>:
        if (k != 0B) goto <D.19689>; else goto <D.19688>;
        <D.19688>:
        if (slot >= 0) goto <D.25605>; else goto <D.25606>;
        <D.25605>:
        D.25607 = (short int) slot;
        cm->slot = D.25607;
        <D.25606>:
      }
      <D.25564>:
      D.25560 = cm->flags;
      D.25608 = (unsigned int) D.25560;
      D.25609 = D.25608 & 288;
      if (D.25609 == 256) goto <D.25610>; else goto <D.25611>;
      <D.25610>:
      D.25593 = cm->slot;
      if (D.25593 >= 0) goto <D.25612>; else goto <D.25613>;
      <D.25612>:
      cm->slot = -1;
      <D.25613>:
      <D.25611>:
      D.25593 = cm->slot;
      if (D.25593 < 0) goto <D.25614>; else goto <D.25615>;
      <D.25614>:
      cur_slot.215 = cur_slot;
      cur_slot = cur_slot.215 + 1;
      D.25617 = (short int) cur_slot.215;
      cm->slot = D.25617;
      <D.25615>:
      D.25560 = cm->flags;
      D.25561 = (int) D.25560;
      D.25618 = D.25561 & 1024;
      if (D.25618 == 0) goto <D.25619>; else goto <D.25620>;
      <D.25619>:
      D.25593 = cm->slot;
      D.25621 = (unsigned int) D.25593;
      D.25622 = D.25621 * 4;
      D.25623 = vtable + D.25622;
      *D.25623 = cm;
      <D.25620>:
      l = l->next;
      <D.19692>:
      if (l != 0B) goto <D.19691>; else goto <D.19693>;
      <D.19693>:
      i = 0;
      goto <D.19696>;
      <D.19695>:
      {
        struct MonoMethod * decl;

        i.196 = (unsigned int) i;
        D.25434 = i.196 * 8;
        D.25435 = overrides + D.25434;
        decl = *D.25435;
        D.25624 = decl->klass;
        D.25625 = D.25624->flags;
        D.25626 = D.25625 & 32;
        if (D.25626 == 0) goto <D.25627>; else goto <D.25628>;
        <D.25627>:
        D.25624 = decl->klass;
        D.25629 = D.25624->byval_arg.type;
        if (D.25629 != 19) goto <D.25630>; else goto <D.25631>;
        <D.25630>:
        D.25624 = decl->klass;
        D.25629 = D.25624->byval_arg.type;
        if (D.25629 != 30) goto <D.25632>; else goto <D.25633>;
        <D.25632>:
        D.25634 = decl->slot;
        D.25635 = D.25634 == -1;
        D.25636 = (long int) D.25635;
        D.25637 = __builtin_expect (D.25636, 0);
        if (D.25637 != 0) goto <D.25638>; else goto <D.25639>;
        <D.25638>:
        monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "class.c", 4519, "decl->slot != -1");
        <D.25639>:
        D.25634 = decl->slot;
        D.25640 = (unsigned int) D.25634;
        D.25641 = D.25640 * 4;
        D.25642 = vtable + D.25641;
        i.205 = (sizetype) i;
        D.25451 = i.205 * 8;
        D.25452 = D.25451 + 4;
        D.25453 = overrides + D.25452;
        D.25454 = *D.25453;
        *D.25642 = D.25454;
        i.205 = (sizetype) i;
        D.25451 = i.205 * 8;
        D.25452 = D.25451 + 4;
        D.25453 = overrides + D.25452;
        D.25454 = *D.25453;
        D.25634 = decl->slot;
        D.25454->slot = D.25634;
        if (override_map == 0B) goto <D.25643>; else goto <D.25644>;
        <D.25643>:
        override_map = monoeg_g_hash_table_new (mono_aligned_addr_hash, 0B);
        <D.25644>:
        i.205 = (sizetype) i;
        D.25451 = i.205 * 8;
        D.25452 = D.25451 + 4;
        D.25453 = overrides + D.25452;
        D.25454 = *D.25453;
        monoeg_g_hash_table_insert_replace (override_map, decl, D.25454, 0);
        D.25645 = mono_security_get_mode ();
        if (D.25645 == 1) goto <D.25646>; else goto <D.25647>;
        <D.25646>:
        D.25634 = decl->slot;
        D.25640 = (unsigned int) D.25634;
        D.25641 = D.25640 * 4;
        D.25642 = vtable + D.25641;
        D.25648 = *D.25642;
        mono_security_core_clr_check_override (class, D.25648, decl);
        <D.25647>:
        <D.25633>:
        <D.25631>:
        <D.25628>:
      }
      i = i + 1;
      <D.19696>:
      if (i < onum) goto <D.19695>; else goto <D.19697>;
      <D.19697>:
      if (override_map != 0B) goto <D.25649>; else goto <D.25650>;
      <D.25649>:
      {
        struct MonoMethod * cm;

        i = 0;
        goto <D.19700>;
        <D.19699>:
        i.196 = (unsigned int) i;
        D.25325 = i.196 * 4;
        D.25651 = vtable + D.25325;
        D.25652 = *D.25651;
        if (D.25652 != 0B) goto <D.25653>; else goto <D.25654>;
        <D.25653>:
        i.196 = (unsigned int) i;
        D.25325 = i.196 * 4;
        D.25651 = vtable + D.25325;
        D.25652 = *D.25651;
        cm = monoeg_g_hash_table_lookup (override_map, D.25652);
        if (cm != 0B) goto <D.25655>; else goto <D.25656>;
        <D.25655>:
        i.196 = (unsigned int) i;
        D.25325 = i.196 * 4;
        D.25651 = vtable + D.25325;
        *D.25651 = cm;
        <D.25656>:
        <D.25654>:
        i = i + 1;
        <D.19700>:
        if (i < max_vtsize) goto <D.19699>; else goto <D.19701>;
        <D.19701>:
        monoeg_g_hash_table_destroy (override_map);
        override_map = 0B;
      }
      <D.25650>:
      monoeg_g_slist_free (virt_methods);
      virt_methods = 0B;
      D.25539 = class->flags;
      D.25540 = D.25539 & 128;
      if (D.25540 == 0) goto <D.25657>; else goto <D.25658>;
      <D.25657>:
      i = 0;
      goto <D.19705>;
      <D.19704>:
      i.196 = (unsigned int) i;
      D.25325 = i.196 * 4;
      D.25651 = vtable + D.25325;
      D.25652 = *D.25651;
      if (D.25652 == 0B) goto <D.25659>; else goto <D.25661>;
      <D.25661>:
      i.196 = (unsigned int) i;
      D.25325 = i.196 * 4;
      D.25651 = vtable + D.25325;
      D.25652 = *D.25651;
      D.25662 = D.25652->flags;
      D.25663 = (int) D.25662;
      D.25664 = D.25663 & 1040;
      if (D.25664 != 0) goto <D.25659>; else goto <D.25660>;
      <D.25659>:
      {
        char * type_name;
        char * method_name;

        type_name = mono_type_get_full_name (class);
        i.196 = (unsigned int) i;
        D.25325 = i.196 * 4;
        D.25651 = vtable + D.25325;
        D.25652 = *D.25651;
        if (D.25652 != 0B) goto <D.25666>; else goto <D.25667>;
        <D.25666>:
        i.196 = (unsigned int) i;
        D.25325 = i.196 * 4;
        D.25651 = vtable + D.25325;
        D.25652 = *D.25651;
        iftmp.216 = mono_method_full_name (D.25652, 1);
        goto <D.25668>;
        <D.25667>:
        iftmp.216 = monoeg_strdup ("none");
        <D.25668>:
        method_name = iftmp.216;
        D.25669 = monoeg_g_strdup_printf ("Type %s has invalid vtable method slot %d with method %s", type_name, i, method_name);
        mono_class_set_failure (class, 7, D.25669);
        monoeg_g_free (type_name);
        monoeg_g_free (method_name);
        return;
      }
      <D.25660>:
      i = i + 1;
      <D.19705>:
      if (i < cur_slot) goto <D.19704>; else goto <D.19706>;
      <D.19706>:
      <D.25658>:
      D.25350 = class->generic_class;
      if (D.25350 != 0B) goto <D.25670>; else goto <D.25671>;
      <D.25670>:
      {
        struct MonoClass * gklass;

        D.25350 = class->generic_class;
        gklass = D.25350->container_class;
        mono_class_init (gklass);
        D.25672 = gklass->vtable_size;
        D.25673 = MAX_EXPR <D.25672, cur_slot>;
        class->vtable_size = D.25673;
      }
      goto <D.25674>;
      <D.25671>:
      D.25675 = class->vtable_size;
      if (D.25675 != 0) goto <D.25676>; else goto <D.25677>;
      <D.25676>:
      D.25675 = class->vtable_size;
      D.25678 = D.25675 != cur_slot;
      D.25679 = (long int) D.25678;
      D.25680 = __builtin_expect (D.25679, 0);
      if (D.25680 != 0) goto <D.25681>; else goto <D.25682>;
      <D.25681>:
      monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "class.c", 4580, "cur_slot == class->vtable_size");
      <D.25682>:
      <D.25677>:
      class->vtable_size = cur_slot;
      <D.25674>:
      D.25332 = class->parent;
      if (D.25332 != 0B) goto <D.25685>; else goto <D.25683>;
      <D.25685>:
      D.25332 = class->parent;
      D.25339 = D.25332->vtable_size;
      D.25675 = class->vtable_size;
      if (D.25339 == D.25675) goto <D.25686>; else goto <D.25683>;
      <D.25686>:
      D.25332 = class->parent;
      D.25687 = D.25332->vtable;
      D.25675 = class->vtable_size;
      D.25688 = (unsigned int) D.25675;
      D.25689 = D.25688 * 4;
      D.25690 = memcmp (D.25687, vtable, D.25689);
      if (D.25690 == 0) goto <D.25691>; else goto <D.25683>;
      <D.25691>:
      mono_memory_barrier ();
      D.25332 = class->parent;
      D.25687 = D.25332->vtable;
      class->vtable = D.25687;
      goto <D.25684>;
      <D.25683>:
      {
        struct MonoMethod * * tmp;

        D.25675 = class->vtable_size;
        D.25688 = (unsigned int) D.25675;
        D.25689 = D.25688 * 4;
        D.25692 = (int) D.25689;
        tmp = mono_class_alloc0 (class, D.25692);
        D.25675 = class->vtable_size;
        D.25688 = (unsigned int) D.25675;
        D.25689 = D.25688 * 4;
        memcpy (tmp, vtable, D.25689);
        mono_memory_barrier ();
        class->vtable = tmp;
      }
      <D.25684>:
      mono_print_vtable.217 = mono_print_vtable;
      if (mono_print_vtable.217 != 0) goto <D.25694>; else goto <D.25695>;
      <D.25694>:
      {
        int icount;

        icount = 0;
        print_implemented_interfaces (class);
        i = 0;
        goto <D.19711>;
        <D.19710>:
        D.25349 = class->max_interface_id;
        D.25696 = (int) D.25349;
        if (D.25696 >= i) goto <D.25697>; else goto <D.25698>;
        <D.25697>:
        D.25699 = class->interface_bitmap;
        D.25700 = i >> 3;
        D.25701 = (sizetype) D.25700;
        D.25702 = D.25699 + D.25701;
        D.25703 = *D.25702;
        D.25704 = (int) D.25703;
        D.25705 = i & 7;
        D.25706 = D.25704 >> D.25705;
        D.25707 = D.25706 & 1;
        if (D.25707 != 0) goto <D.25708>; else goto <D.25709>;
        <D.25708>:
        icount = icount + 1;
        <D.25709>:
        <D.25698>:
        i = i + 1;
        <D.19711>:
        if (i <= max_iid) goto <D.19710>; else goto <D.19712>;
        <D.19712>:
        D.25710 = &class->byval_arg;
        D.25711 = mono_type_full_name (D.25710);
        D.25675 = class->vtable_size;
        printf ("VTable %s (vtable entries = %d, interfaces = %d)\n", D.25711, D.25675, icount);
        i = 0;
        goto <D.19715>;
        <D.19714>:
        {
          struct MonoMethod * cm;

          i.196 = (unsigned int) i;
          D.25325 = i.196 * 4;
          D.25651 = vtable + D.25325;
          cm = *D.25651;
          if (cm != 0B) goto <D.25712>; else goto <D.25713>;
          <D.25712>:
          D.25714 = cm->slot;
          D.25715 = (int) D.25714;
          D.25716 = mono_method_full_name (cm, 1);
          printf ("  slot assigned: %03d, slot index: %03d %s\n", i, D.25715, D.25716);
          <D.25713>:
        }
        i = i + 1;
        <D.19715>:
        if (i < cur_slot) goto <D.19714>; else goto <D.19716>;
        <D.19716>:
        if (icount != 0) goto <D.25717>; else goto <D.25718>;
        <D.25717>:
        D.25719 = class->name_space;
        D.25720 = class->name;
        printf ("Interfaces %s.%s (max_iid = %d)\n", D.25719, D.25720, max_iid);
        i = 0;
        goto <D.19718>;
        <D.19717>:
        D.25470 = class->interfaces;
        i.196 = (unsigned int) i;
        D.25325 = i.196 * 4;
        D.25721 = D.25470 + D.25325;
        ic = *D.25721;
        D.25722 = mono_class_interface_offset (class, ic);
        D.25723 = count_virtual_methods (ic);
        D.25724 = ic->interface_id;
        D.25725 = (int) D.25724;
        D.25726 = &ic->byval_arg;
        D.25727 = mono_type_full_name (D.25726);
        printf ("  slot offset: %03d, method count: %03d, iid: %03d %s\n", D.25722, D.25723, D.25725, D.25727);
        i = i + 1;
        <D.19718>:
        D.25477 = class->interface_count;
        D.25478 = (int) D.25477;
        if (D.25478 > i) goto <D.19717>; else goto <D.19719>;
        <D.19719>:
        k = class->parent;
        goto <D.19724>;
        <D.19723>:
        i = 0;
        goto <D.19721>;
        <D.19720>:
        D.25728 = k->interfaces;
        i.196 = (unsigned int) i;
        D.25325 = i.196 * 4;
        D.25729 = D.25728 + D.25325;
        ic = *D.25729;
        D.25730 = mono_class_interface_offset (class, ic);
        D.25731 = count_virtual_methods (ic);
        D.25724 = ic->interface_id;
        D.25725 = (int) D.25724;
        D.25726 = &ic->byval_arg;
        D.25732 = mono_type_full_name (D.25726);
        printf ("  parent slot offset: %03d, method count: %03d, iid: %03d %s\n", D.25730, D.25731, D.25725, D.25732);
        i = i + 1;
        <D.19721>:
        D.25733 = k->interface_count;
        D.25734 = (int) D.25733;
        if (D.25734 > i) goto <D.19720>; else goto <D.19722>;
        <D.19722>:
        k = k->parent;
        <D.19724>:
        if (k != 0B) goto <D.19723>; else goto <D.19725>;
        <D.19725>:
        <D.25718>:
      }
      <D.25695>:
      return;
      fail:
      {
        char * name;

        name = mono_type_get_full_name (class);
        D.25735 = monoeg_g_strdup_printf ("VTable setup of type %s failed", name);
        mono_class_set_failure (class, 7, D.25735);
        monoeg_g_free (name);
        if (override_map != 0B) goto <D.25736>; else goto <D.25737>;
        <D.25736>:
        monoeg_g_hash_table_destroy (override_map);
        <D.25737>:
        if (virt_methods != 0B) goto <D.25738>; else goto <D.25739>;
        <D.25738>:
        monoeg_g_slist_free (virt_methods);
        <D.25739>:
      }
    }
  finally
    {
      error = {CLOBBER};
    }
}


verify_class_overrides (struct MonoClass * class, struct MonoMethod * * overrides, int onum)
{
  unsigned int i.218;
  unsigned int D.25751;
  struct MonoMethod * * D.25752;
  sizetype i.219;
  sizetype D.25754;
  sizetype D.25755;
  struct MonoMethod * * D.25756;
  struct MonoClass * D.25757;
  struct MonoClass * D.25758;
  struct MonoClass * D.25759;
  gchar * D.25762;
  gboolean D.25763;
  short unsigned int D.25764;
  unsigned int D.25765;
  unsigned int D.25766;
  int D.25769;
  int D.25770;
  gchar * D.25773;
  gchar * D.25775;
  short unsigned int D.25776;
  unsigned int D.25777;
  unsigned int D.25778;
  gchar * D.25783;
  gchar * D.25785;
  struct MonoClass * D.25786;
  int D.25787;
  gchar * D.25790;
  int D.25791;
  int D.25794;
  gchar * D.25797;
  int i;

  i = 0;
  goto <D.19561>;
  <D.19560>:
  {
    struct MonoMethod * decl;
    struct MonoMethod * body;

    i.218 = (unsigned int) i;
    D.25751 = i.218 * 8;
    D.25752 = overrides + D.25751;
    decl = *D.25752;
    i.219 = (sizetype) i;
    D.25754 = i.219 * 8;
    D.25755 = D.25754 + 4;
    D.25756 = overrides + D.25755;
    body = *D.25756;
    D.25757 = body->klass;
    D.25758 = mono_class_get_generic_type_definition (D.25757);
    D.25759 = mono_class_get_generic_type_definition (class);
    if (D.25758 != D.25759) goto <D.25760>; else goto <D.25761>;
    <D.25760>:
    D.25762 = monoeg_strdup ("Method belongs to a different class than the declared one");
    mono_class_set_failure (class, 7, D.25762);
    D.25763 = 0;
    return D.25763;
    <D.25761>:
    D.25764 = body->flags;
    D.25765 = (unsigned int) D.25764;
    D.25766 = D.25765 & 80;
    if (D.25766 != 64) goto <D.25767>; else goto <D.25768>;
    <D.25767>:
    D.25764 = body->flags;
    D.25769 = (int) D.25764;
    D.25770 = D.25769 & 16;
    if (D.25770 != 0) goto <D.25771>; else goto <D.25772>;
    <D.25771>:
    D.25773 = monoeg_strdup ("Method must not be static to override a base type");
    mono_class_set_failure (class, 7, D.25773);
    goto <D.25774>;
    <D.25772>:
    D.25775 = monoeg_strdup ("Method must be virtual to override a base type");
    mono_class_set_failure (class, 7, D.25775);
    <D.25774>:
    D.25763 = 0;
    return D.25763;
    <D.25768>:
    D.25776 = decl->flags;
    D.25777 = (unsigned int) D.25776;
    D.25778 = D.25777 & 80;
    if (D.25778 != 64) goto <D.25779>; else goto <D.25780>;
    <D.25779>:
    D.25764 = body->flags;
    D.25769 = (int) D.25764;
    D.25770 = D.25769 & 16;
    if (D.25770 != 0) goto <D.25781>; else goto <D.25782>;
    <D.25781>:
    D.25783 = monoeg_strdup ("Cannot override a static method in a base type");
    mono_class_set_failure (class, 7, D.25783);
    goto <D.25784>;
    <D.25782>:
    D.25785 = monoeg_strdup ("Cannot override a non virtual method in a base type");
    mono_class_set_failure (class, 7, D.25785);
    <D.25784>:
    D.25763 = 0;
    return D.25763;
    <D.25780>:
    D.25786 = decl->klass;
    D.25787 = mono_class_is_assignable_from_slow (D.25786, class);
    if (D.25787 == 0) goto <D.25788>; else goto <D.25789>;
    <D.25788>:
    D.25790 = monoeg_strdup ("Method overrides a class or interface that extended or implemented by this type");
    mono_class_set_failure (class, 7, D.25790);
    D.25763 = 0;
    return D.25763;
    <D.25789>:
    body = mono_method_get_method_definition (body);
    decl = mono_method_get_method_definition (decl);
    D.25791 = is_wcf_hack_disabled ();
    if (D.25791 != 0) goto <D.25792>; else goto <D.25793>;
    <D.25792>:
    D.25794 = mono_method_can_access_method_full (body, decl, 0B);
    if (D.25794 == 0) goto <D.25795>; else goto <D.25796>;
    <D.25795>:
    {
      char * body_name;
      char * decl_name;

      body_name = mono_method_full_name (body, 1);
      decl_name = mono_method_full_name (decl, 1);
      D.25797 = monoeg_g_strdup_printf ("Method %s overrides method \'%s\' which is not accessible", body_name, decl_name);
      mono_class_set_failure (class, 7, D.25797);
      monoeg_g_free (body_name);
      monoeg_g_free (decl_name);
      D.25763 = 0;
      return D.25763;
    }
    <D.25796>:
    <D.25793>:
  }
  i = i + 1;
  <D.19561>:
  if (i < onum) goto <D.19560>; else goto <D.19562>;
  <D.19562>:
  D.25763 = 1;
  return D.25763;
}


mono_method_get_method_definition (struct MonoMethod * method)
{
  unsigned int D.25799;
  unsigned int D.25800;
  struct MonoMethod * D.25801;

  goto <D.19548>;
  <D.19547>:
  method = MEM[(struct MonoMethodInflated *)method].declaring;
  <D.19548>:
  D.25799 = BIT_FIELD_REF <*method, 32, 160>;
  D.25800 = D.25799 & 4096;
  if (D.25800 != 0) goto <D.19547>; else goto <D.19549>;
  <D.19549>:
  D.25801 = method;
  return D.25801;
}


mono_class_need_stelemref_method (struct MonoClass * class)
{
  gboolean D.25803;
  int iftmp.220;
  unsigned char D.25807;
  struct MonoClass * D.25809;
  struct MonoType * D.25810;
  int D.25811;

  D.25807 = class->rank;
  if (D.25807 == 1) goto <D.25808>; else goto <D.25805>;
  <D.25808>:
  D.25809 = class->element_class;
  D.25810 = &D.25809->byval_arg;
  D.25811 = mono_type_is_reference (D.25810);
  if (D.25811 != 0) goto <D.25812>; else goto <D.25805>;
  <D.25812>:
  iftmp.220 = 1;
  goto <D.25806>;
  <D.25805>:
  iftmp.220 = 0;
  <D.25806>:
  D.25803 = iftmp.220;
  return D.25803;
}


check_interface_method_override (struct MonoClass * class, struct MonoMethod * im, struct MonoMethod * cm, gboolean require_newslot, gboolean interface_is_explicitly_implemented_by_class, gboolean slot_is_empty, gboolean security_enabled)
{
  int D.19453;
  const char * D.25814;
  const char * D.25815;
  short unsigned int D.25818;
  int D.25819;
  int D.25820;
  gboolean D.25823;
  int D.25830;
  gchar * D.25837;
  int D.25838;
  short unsigned int D.25843;
  int D.25844;
  int D.25845;
  <unnamed type> D.25848;
  int D.25851;
  int D.25854;
  gchar * D.25857;
  struct MonoClass * D.25860;
  unsigned char D.25861;
  gchar * D.25867;
  int D.25868;
  struct MonoImage * D.25871;
  struct MonoImage * D.25872;
  int D.19468;
  int iftmp.221;
  int D.19467;
  const char[27] * D.25881;
  unsigned char D.25882;
  int D.25883;
  unsigned char D.25884;
  int D.25885;
  const unsigned char * D.25890;
  unsigned char D.25891;
  int D.25892;
  const unsigned char * D.25893;
  unsigned char D.25894;
  int D.25895;
  const unsigned char * D.25900;
  unsigned char D.25901;
  int D.25902;
  const unsigned char * D.25903;
  unsigned char D.25904;
  int D.25905;
  const unsigned char * D.25910;
  unsigned char D.25911;
  int D.25912;
  const unsigned char * D.25913;
  unsigned char D.25914;
  int D.25915;
  int D.19477;
  int iftmp.222;
  int D.19476;
  const char[14] * D.25923;
  unsigned char D.25924;
  int D.25925;
  unsigned char D.25926;
  int D.25927;
  const unsigned char * D.25932;
  unsigned char D.25933;
  int D.25934;
  const unsigned char * D.25935;
  unsigned char D.25936;
  int D.25937;
  const unsigned char * D.25942;
  unsigned char D.25943;
  int D.25944;
  const unsigned char * D.25945;
  unsigned char D.25946;
  int D.25947;
  const unsigned char * D.25952;
  unsigned char D.25953;
  int D.25954;
  const unsigned char * D.25955;
  unsigned char D.25956;
  int D.25957;
  int D.19486;
  int iftmp.223;
  int D.19485;
  const char[14] * D.25963;
  unsigned char D.25964;
  int D.25965;
  unsigned char D.25966;
  int D.25967;
  const unsigned char * D.25972;
  unsigned char D.25973;
  int D.25974;
  const unsigned char * D.25975;
  unsigned char D.25976;
  int D.25977;
  const unsigned char * D.25982;
  unsigned char D.25983;
  int D.25984;
  const unsigned char * D.25985;
  unsigned char D.25986;
  int D.25987;
  const unsigned char * D.25992;
  unsigned char D.25993;
  int D.25994;
  const unsigned char * D.25995;
  unsigned char D.25996;
  int D.25997;
  int D.19495;
  int iftmp.224;
  int D.19494;
  const char[8] * D.26003;
  unsigned char D.26004;
  int D.26005;
  unsigned char D.26006;
  int D.26007;
  const unsigned char * D.26012;
  unsigned char D.26013;
  int D.26014;
  const unsigned char * D.26015;
  unsigned char D.26016;
  int D.26017;
  const unsigned char * D.26022;
  unsigned char D.26023;
  int D.26024;
  const unsigned char * D.26025;
  unsigned char D.26026;
  int D.26027;
  const unsigned char * D.26032;
  unsigned char D.26033;
  int D.26034;
  const unsigned char * D.26035;
  unsigned char D.26036;
  int D.26037;
  int D.19504;
  int iftmp.225;
  int D.19503;
  const char[16] * D.26043;
  unsigned char D.26044;
  int D.26045;
  unsigned char D.26046;
  int D.26047;
  const unsigned char * D.26052;
  unsigned char D.26053;
  int D.26054;
  const unsigned char * D.26055;
  unsigned char D.26056;
  int D.26057;
  const unsigned char * D.26062;
  unsigned char D.26063;
  int D.26064;
  const unsigned char * D.26065;
  unsigned char D.26066;
  int D.26067;
  const unsigned char * D.26072;
  unsigned char D.26073;
  int D.26074;
  const unsigned char * D.26075;
  unsigned char D.26076;
  int D.26077;
  int D.19513;
  int iftmp.226;
  int D.19512;
  const char[22] * D.26083;
  unsigned char D.26084;
  int D.26085;
  unsigned char D.26086;
  int D.26087;
  const unsigned char * D.26092;
  unsigned char D.26093;
  int D.26094;
  const unsigned char * D.26095;
  unsigned char D.26096;
  int D.26097;
  const unsigned char * D.26102;
  unsigned char D.26103;
  int D.26104;
  const unsigned char * D.26105;
  unsigned char D.26106;
  int D.26107;
  const unsigned char * D.26112;
  unsigned char D.26113;
  int D.26114;
  const unsigned char * D.26115;
  unsigned char D.26116;
  int D.26117;
  unsigned int D.26121;
  char D.26122;
  char * D.26125;
  unsigned int D.26128;
  int D.19522;
  <unnamed type> D.26137;
  int D.26140;
  int D.26143;
  gchar * D.26146;
  struct MonoMethodSignature * cmsig;
  struct MonoMethodSignature * imsig;

  {
    size_t __s1_len;
    size_t __s2_len;

    D.25814 = im->name;
    D.25815 = cm->name;
    D.19453 = __builtin_strcmp (D.25814, D.25815);
  }
  if (D.19453 == 0) goto <D.25816>; else goto <D.25817>;
  <D.25816>:
  D.25818 = cm->flags;
  D.25819 = (int) D.25818;
  D.25820 = D.25819 & 6;
  if (D.25820 == 0) goto <D.25821>; else goto <D.25822>;
  <D.25821>:
  D.25823 = 0;
  return D.25823;
  <D.25822>:
  if (slot_is_empty == 0) goto <D.25824>; else goto <D.25825>;
  <D.25824>:
  if (require_newslot != 0) goto <D.25826>; else goto <D.25827>;
  <D.25826>:
  if (interface_is_explicitly_implemented_by_class == 0) goto <D.25828>; else goto <D.25829>;
  <D.25828>:
  D.25823 = 0;
  return D.25823;
  <D.25829>:
  D.25818 = cm->flags;
  D.25819 = (int) D.25818;
  D.25830 = D.25819 & 256;
  if (D.25830 == 0) goto <D.25831>; else goto <D.25832>;
  <D.25831>:
  D.25823 = 0;
  return D.25823;
  <D.25832>:
  goto <D.25833>;
  <D.25827>:
  <D.25833>:
  <D.25825>:
  cmsig = mono_method_signature (cm);
  imsig = mono_method_signature (im);
  if (cmsig == 0B) goto <D.25834>; else goto <D.25836>;
  <D.25836>:
  if (imsig == 0B) goto <D.25834>; else goto <D.25835>;
  <D.25834>:
  D.25837 = monoeg_strdup ("Could not resolve the signature of a virtual method");
  mono_class_set_failure (class, 7, D.25837);
  D.25823 = 0;
  return D.25823;
  <D.25835>:
  D.25838 = mono_metadata_signature_equal (cmsig, imsig);
  if (D.25838 == 0) goto <D.25839>; else goto <D.25840>;
  <D.25839>:
  D.25823 = 0;
  return D.25823;
  <D.25840>:
  if (security_enabled != 0) goto <D.25841>; else goto <D.25842>;
  <D.25841>:
  D.25843 = im->flags;
  D.25844 = (int) D.25843;
  D.25845 = D.25844 & 16384;
  if (D.25845 != 0) goto <D.25846>; else goto <D.25847>;
  <D.25846>:
  mono_secman_inheritancedemand_method (cm, im);
  <D.25847>:
  <D.25842>:
  D.25848 = mono_security_get_mode ();
  if (D.25848 == 1) goto <D.25849>; else goto <D.25850>;
  <D.25849>:
  mono_security_core_clr_check_override (class, cm, im);
  <D.25850>:
  D.25851 = is_wcf_hack_disabled ();
  if (D.25851 != 0) goto <D.25852>; else goto <D.25853>;
  <D.25852>:
  D.25854 = mono_method_can_access_method_full (cm, im, 0B);
  if (D.25854 == 0) goto <D.25855>; else goto <D.25856>;
  <D.25855>:
  {
    char * body_name;
    char * decl_name;

    body_name = mono_method_full_name (cm, 1);
    decl_name = mono_method_full_name (im, 1);
    D.25857 = monoeg_g_strdup_printf ("Method %s overrides method \'%s\' which is not accessible", body_name, decl_name);
    mono_class_set_failure (class, 7, D.25857);
    monoeg_g_free (body_name);
    monoeg_g_free (decl_name);
    D.25823 = 0;
    return D.25823;
  }
  <D.25856>:
  <D.25853>:
  D.25823 = 1;
  return D.25823;
  <D.25817>:
  {
    struct MonoClass * ic;
    const char * ic_name_space;
    const char * ic_name;
    char * subname;

    ic = im->klass;
    ic_name_space = ic->name_space;
    ic_name = ic->name;
    if (require_newslot == 0) goto <D.25858>; else goto <D.25859>;
    <D.25858>:
    D.25823 = 0;
    return D.25823;
    <D.25859>:
    D.25860 = cm->klass;
    D.25861 = D.25860->rank;
    if (D.25861 == 0) goto <D.25862>; else goto <D.25863>;
    <D.25862>:
    D.25823 = 0;
    return D.25823;
    <D.25863>:
    cmsig = mono_method_signature (cm);
    imsig = mono_method_signature (im);
    if (cmsig == 0B) goto <D.25864>; else goto <D.25866>;
    <D.25866>:
    if (imsig == 0B) goto <D.25864>; else goto <D.25865>;
    <D.25864>:
    D.25867 = monoeg_strdup ("Could not resolve the signature of a virtual method");
    mono_class_set_failure (class, 7, D.25867);
    D.25823 = 0;
    return D.25823;
    <D.25865>:
    D.25868 = mono_metadata_signature_equal (cmsig, imsig);
    if (D.25868 == 0) goto <D.25869>; else goto <D.25870>;
    <D.25869>:
    D.25823 = 0;
    return D.25823;
    <D.25870>:
    D.25871 = mono_class_get_image (ic);
    D.25872 = mono_defaults.corlib;
    if (D.25871 != D.25872) goto <D.25873>; else goto <D.25874>;
    <D.25873>:
    D.25823 = 0;
    return D.25823;
    <D.25874>:
    if (ic_name_space == 0B) goto <D.25875>; else goto <D.25877>;
    <D.25877>:
    {
      size_t __s1_len;
      size_t __s2_len;

      __s2_len = 26;
      if (__s2_len <= 3) goto <D.25879>; else goto <D.25880>;
      <D.25879>:
      {
        const unsigned char * __s2;
        int __result;

        __s2 = ic_name_space;
        D.25881 = "System.Collections.Generic";
        D.25882 = MEM[(const unsigned char *)D.25881];
        D.25883 = (int) D.25882;
        D.25884 = *__s2;
        D.25885 = (int) D.25884;
        __result = D.25883 - D.25885;
        {
          if (__s2_len != 0) goto <D.25886>; else goto <D.25887>;
          <D.25886>:
          if (__result == 0) goto <D.25888>; else goto <D.25889>;
          <D.25888>:
          D.25890 = &MEM[(void *)"System.Collections.Generic" + 1B];
          D.25891 = *D.25890;
          D.25892 = (int) D.25891;
          D.25893 = __s2 + 1;
          D.25894 = *D.25893;
          D.25895 = (int) D.25894;
          __result = D.25892 - D.25895;
          if (__s2_len > 1) goto <D.25896>; else goto <D.25897>;
          <D.25896>:
          if (__result == 0) goto <D.25898>; else goto <D.25899>;
          <D.25898>:
          D.25900 = &MEM[(void *)"System.Collections.Generic" + 2B];
          D.25901 = *D.25900;
          D.25902 = (int) D.25901;
          D.25903 = __s2 + 2;
          D.25904 = *D.25903;
          D.25905 = (int) D.25904;
          __result = D.25902 - D.25905;
          if (__s2_len > 2) goto <D.25906>; else goto <D.25907>;
          <D.25906>:
          if (__result == 0) goto <D.25908>; else goto <D.25909>;
          <D.25908>:
          D.25910 = &MEM[(void *)"System.Collections.Generic" + 3B];
          D.25911 = *D.25910;
          D.25912 = (int) D.25911;
          D.25913 = __s2 + 3;
          D.25914 = *D.25913;
          D.25915 = (int) D.25914;
          __result = D.25912 - D.25915;
          <D.25909>:
          <D.25907>:
          <D.25899>:
          <D.25897>:
          <D.25889>:
          <D.25887>:
        }
        D.19467 = __result;
      }
      iftmp.221 = -D.19467;
      goto <D.25916>;
      <D.25880>:
      iftmp.221 = __builtin_strcmp (ic_name_space, "System.Collections.Generic");
      <D.25916>:
      D.19468 = iftmp.221;
    }
    if (D.19468 != 0) goto <D.25875>; else goto <D.25876>;
    <D.25875>:
    D.25823 = 0;
    return D.25823;
    <D.25876>:
    if (ic_name == 0B) goto <D.25917>; else goto <D.25919>;
    <D.25919>:
    {
      size_t __s1_len;
      size_t __s2_len;

      __s2_len = 13;
      if (__s2_len <= 3) goto <D.25921>; else goto <D.25922>;
      <D.25921>:
      {
        const unsigned char * __s2;
        int __result;

        __s2 = ic_name;
        D.25923 = "IEnumerable`1";
        D.25924 = MEM[(const unsigned char *)D.25923];
        D.25925 = (int) D.25924;
        D.25926 = *__s2;
        D.25927 = (int) D.25926;
        __result = D.25925 - D.25927;
        {
          if (__s2_len != 0) goto <D.25928>; else goto <D.25929>;
          <D.25928>:
          if (__result == 0) goto <D.25930>; else goto <D.25931>;
          <D.25930>:
          D.25932 = &MEM[(void *)"IEnumerable`1" + 1B];
          D.25933 = *D.25932;
          D.25934 = (int) D.25933;
          D.25935 = __s2 + 1;
          D.25936 = *D.25935;
          D.25937 = (int) D.25936;
          __result = D.25934 - D.25937;
          if (__s2_len > 1) goto <D.25938>; else goto <D.25939>;
          <D.25938>:
          if (__result == 0) goto <D.25940>; else goto <D.25941>;
          <D.25940>:
          D.25942 = &MEM[(void *)"IEnumerable`1" + 2B];
          D.25943 = *D.25942;
          D.25944 = (int) D.25943;
          D.25945 = __s2 + 2;
          D.25946 = *D.25945;
          D.25947 = (int) D.25946;
          __result = D.25944 - D.25947;
          if (__s2_len > 2) goto <D.25948>; else goto <D.25949>;
          <D.25948>:
          if (__result == 0) goto <D.25950>; else goto <D.25951>;
          <D.25950>:
          D.25952 = &MEM[(void *)"IEnumerable`1" + 3B];
          D.25953 = *D.25952;
          D.25954 = (int) D.25953;
          D.25955 = __s2 + 3;
          D.25956 = *D.25955;
          D.25957 = (int) D.25956;
          __result = D.25954 - D.25957;
          <D.25951>:
          <D.25949>:
          <D.25941>:
          <D.25939>:
          <D.25931>:
          <D.25929>:
        }
        D.19476 = __result;
      }
      iftmp.222 = -D.19476;
      goto <D.25958>;
      <D.25922>:
      iftmp.222 = __builtin_strcmp (ic_name, "IEnumerable`1");
      <D.25958>:
      D.19477 = iftmp.222;
    }
    if (D.19477 != 0) goto <D.25959>; else goto <D.25918>;
    <D.25959>:
    {
      size_t __s1_len;
      size_t __s2_len;

      __s2_len = 13;
      if (__s2_len <= 3) goto <D.25961>; else goto <D.25962>;
      <D.25961>:
      {
        const unsigned char * __s2;
        int __result;

        __s2 = ic_name;
        D.25963 = "ICollection`1";
        D.25964 = MEM[(const unsigned char *)D.25963];
        D.25965 = (int) D.25964;
        D.25966 = *__s2;
        D.25967 = (int) D.25966;
        __result = D.25965 - D.25967;
        {
          if (__s2_len != 0) goto <D.25968>; else goto <D.25969>;
          <D.25968>:
          if (__result == 0) goto <D.25970>; else goto <D.25971>;
          <D.25970>:
          D.25972 = &MEM[(void *)"ICollection`1" + 1B];
          D.25973 = *D.25972;
          D.25974 = (int) D.25973;
          D.25975 = __s2 + 1;
          D.25976 = *D.25975;
          D.25977 = (int) D.25976;
          __result = D.25974 - D.25977;
          if (__s2_len > 1) goto <D.25978>; else goto <D.25979>;
          <D.25978>:
          if (__result == 0) goto <D.25980>; else goto <D.25981>;
          <D.25980>:
          D.25982 = &MEM[(void *)"ICollection`1" + 2B];
          D.25983 = *D.25982;
          D.25984 = (int) D.25983;
          D.25985 = __s2 + 2;
          D.25986 = *D.25985;
          D.25987 = (int) D.25986;
          __result = D.25984 - D.25987;
          if (__s2_len > 2) goto <D.25988>; else goto <D.25989>;
          <D.25988>:
          if (__result == 0) goto <D.25990>; else goto <D.25991>;
          <D.25990>:
          D.25992 = &MEM[(void *)"ICollection`1" + 3B];
          D.25993 = *D.25992;
          D.25994 = (int) D.25993;
          D.25995 = __s2 + 3;
          D.25996 = *D.25995;
          D.25997 = (int) D.25996;
          __result = D.25994 - D.25997;
          <D.25991>:
          <D.25989>:
          <D.25981>:
          <D.25979>:
          <D.25971>:
          <D.25969>:
        }
        D.19485 = __result;
      }
      iftmp.223 = -D.19485;
      goto <D.25998>;
      <D.25962>:
      iftmp.223 = __builtin_strcmp (ic_name, "ICollection`1");
      <D.25998>:
      D.19486 = iftmp.223;
    }
    if (D.19486 != 0) goto <D.25999>; else goto <D.25918>;
    <D.25999>:
    {
      size_t __s1_len;
      size_t __s2_len;

      __s2_len = 7;
      if (__s2_len <= 3) goto <D.26001>; else goto <D.26002>;
      <D.26001>:
      {
        const unsigned char * __s2;
        int __result;

        __s2 = ic_name;
        D.26003 = "IList`1";
        D.26004 = MEM[(const unsigned char *)D.26003];
        D.26005 = (int) D.26004;
        D.26006 = *__s2;
        D.26007 = (int) D.26006;
        __result = D.26005 - D.26007;
        {
          if (__s2_len != 0) goto <D.26008>; else goto <D.26009>;
          <D.26008>:
          if (__result == 0) goto <D.26010>; else goto <D.26011>;
          <D.26010>:
          D.26012 = &MEM[(void *)"IList`1" + 1B];
          D.26013 = *D.26012;
          D.26014 = (int) D.26013;
          D.26015 = __s2 + 1;
          D.26016 = *D.26015;
          D.26017 = (int) D.26016;
          __result = D.26014 - D.26017;
          if (__s2_len > 1) goto <D.26018>; else goto <D.26019>;
          <D.26018>:
          if (__result == 0) goto <D.26020>; else goto <D.26021>;
          <D.26020>:
          D.26022 = &MEM[(void *)"IList`1" + 2B];
          D.26023 = *D.26022;
          D.26024 = (int) D.26023;
          D.26025 = __s2 + 2;
          D.26026 = *D.26025;
          D.26027 = (int) D.26026;
          __result = D.26024 - D.26027;
          if (__s2_len > 2) goto <D.26028>; else goto <D.26029>;
          <D.26028>:
          if (__result == 0) goto <D.26030>; else goto <D.26031>;
          <D.26030>:
          D.26032 = &MEM[(void *)"IList`1" + 3B];
          D.26033 = *D.26032;
          D.26034 = (int) D.26033;
          D.26035 = __s2 + 3;
          D.26036 = *D.26035;
          D.26037 = (int) D.26036;
          __result = D.26034 - D.26037;
          <D.26031>:
          <D.26029>:
          <D.26021>:
          <D.26019>:
          <D.26011>:
          <D.26009>:
        }
        D.19494 = __result;
      }
      iftmp.224 = -D.19494;
      goto <D.26038>;
      <D.26002>:
      iftmp.224 = __builtin_strcmp (ic_name, "IList`1");
      <D.26038>:
      D.19495 = iftmp.224;
    }
    if (D.19495 != 0) goto <D.26039>; else goto <D.25918>;
    <D.26039>:
    {
      size_t __s1_len;
      size_t __s2_len;

      __s2_len = 15;
      if (__s2_len <= 3) goto <D.26041>; else goto <D.26042>;
      <D.26041>:
      {
        const unsigned char * __s2;
        int __result;

        __s2 = ic_name;
        D.26043 = "IReadOnlyList`1";
        D.26044 = MEM[(const unsigned char *)D.26043];
        D.26045 = (int) D.26044;
        D.26046 = *__s2;
        D.26047 = (int) D.26046;
        __result = D.26045 - D.26047;
        {
          if (__s2_len != 0) goto <D.26048>; else goto <D.26049>;
          <D.26048>:
          if (__result == 0) goto <D.26050>; else goto <D.26051>;
          <D.26050>:
          D.26052 = &MEM[(void *)"IReadOnlyList`1" + 1B];
          D.26053 = *D.26052;
          D.26054 = (int) D.26053;
          D.26055 = __s2 + 1;
          D.26056 = *D.26055;
          D.26057 = (int) D.26056;
          __result = D.26054 - D.26057;
          if (__s2_len > 1) goto <D.26058>; else goto <D.26059>;
          <D.26058>:
          if (__result == 0) goto <D.26060>; else goto <D.26061>;
          <D.26060>:
          D.26062 = &MEM[(void *)"IReadOnlyList`1" + 2B];
          D.26063 = *D.26062;
          D.26064 = (int) D.26063;
          D.26065 = __s2 + 2;
          D.26066 = *D.26065;
          D.26067 = (int) D.26066;
          __result = D.26064 - D.26067;
          if (__s2_len > 2) goto <D.26068>; else goto <D.26069>;
          <D.26068>:
          if (__result == 0) goto <D.26070>; else goto <D.26071>;
          <D.26070>:
          D.26072 = &MEM[(void *)"IReadOnlyList`1" + 3B];
          D.26073 = *D.26072;
          D.26074 = (int) D.26073;
          D.26075 = __s2 + 3;
          D.26076 = *D.26075;
          D.26077 = (int) D.26076;
          __result = D.26074 - D.26077;
          <D.26071>:
          <D.26069>:
          <D.26061>:
          <D.26059>:
          <D.26051>:
          <D.26049>:
        }
        D.19503 = __result;
      }
      iftmp.225 = -D.19503;
      goto <D.26078>;
      <D.26042>:
      iftmp.225 = __builtin_strcmp (ic_name, "IReadOnlyList`1");
      <D.26078>:
      D.19504 = iftmp.225;
    }
    if (D.19504 != 0) goto <D.26079>; else goto <D.25918>;
    <D.26079>:
    {
      size_t __s1_len;
      size_t __s2_len;

      __s2_len = 21;
      if (__s2_len <= 3) goto <D.26081>; else goto <D.26082>;
      <D.26081>:
      {
        const unsigned char * __s2;
        int __result;

        __s2 = ic_name;
        D.26083 = "IReadOnlyCollection`1";
        D.26084 = MEM[(const unsigned char *)D.26083];
        D.26085 = (int) D.26084;
        D.26086 = *__s2;
        D.26087 = (int) D.26086;
        __result = D.26085 - D.26087;
        {
          if (__s2_len != 0) goto <D.26088>; else goto <D.26089>;
          <D.26088>:
          if (__result == 0) goto <D.26090>; else goto <D.26091>;
          <D.26090>:
          D.26092 = &MEM[(void *)"IReadOnlyCollection`1" + 1B];
          D.26093 = *D.26092;
          D.26094 = (int) D.26093;
          D.26095 = __s2 + 1;
          D.26096 = *D.26095;
          D.26097 = (int) D.26096;
          __result = D.26094 - D.26097;
          if (__s2_len > 1) goto <D.26098>; else goto <D.26099>;
          <D.26098>:
          if (__result == 0) goto <D.26100>; else goto <D.26101>;
          <D.26100>:
          D.26102 = &MEM[(void *)"IReadOnlyCollection`1" + 2B];
          D.26103 = *D.26102;
          D.26104 = (int) D.26103;
          D.26105 = __s2 + 2;
          D.26106 = *D.26105;
          D.26107 = (int) D.26106;
          __result = D.26104 - D.26107;
          if (__s2_len > 2) goto <D.26108>; else goto <D.26109>;
          <D.26108>:
          if (__result == 0) goto <D.26110>; else goto <D.26111>;
          <D.26110>:
          D.26112 = &MEM[(void *)"IReadOnlyCollection`1" + 3B];
          D.26113 = *D.26112;
          D.26114 = (int) D.26113;
          D.26115 = __s2 + 3;
          D.26116 = *D.26115;
          D.26117 = (int) D.26116;
          __result = D.26114 - D.26117;
          <D.26111>:
          <D.26109>:
          <D.26101>:
          <D.26099>:
          <D.26091>:
          <D.26089>:
        }
        D.19512 = __result;
      }
      iftmp.226 = -D.19512;
      goto <D.26118>;
      <D.26082>:
      iftmp.226 = __builtin_strcmp (ic_name, "IReadOnlyCollection`1");
      <D.26118>:
      D.19513 = iftmp.226;
    }
    if (D.19513 != 0) goto <D.25917>; else goto <D.25918>;
    <D.25917>:
    D.25823 = 0;
    return D.25823;
    <D.25918>:
    D.25815 = cm->name;
    subname = strstr (D.25815, ic_name_space);
    D.25815 = cm->name;
    if (D.25815 != subname) goto <D.26119>; else goto <D.26120>;
    <D.26119>:
    D.25823 = 0;
    return D.25823;
    <D.26120>:
    D.26121 = strlen (ic_name_space);
    subname = subname + D.26121;
    D.26122 = *subname;
    if (D.26122 != 46) goto <D.26123>; else goto <D.26124>;
    <D.26123>:
    D.25823 = 0;
    return D.25823;
    <D.26124>:
    subname = subname + 1;
    D.26125 = strstr (subname, ic_name);
    if (D.26125 != subname) goto <D.26126>; else goto <D.26127>;
    <D.26126>:
    D.25823 = 0;
    return D.25823;
    <D.26127>:
    D.26128 = strlen (ic_name);
    subname = subname + D.26128;
    D.26122 = *subname;
    if (D.26122 != 46) goto <D.26129>; else goto <D.26130>;
    <D.26129>:
    D.25823 = 0;
    return D.25823;
    <D.26130>:
    subname = subname + 1;
    {
      size_t __s1_len;
      size_t __s2_len;

      D.25814 = im->name;
      D.19522 = __builtin_strcmp (subname, D.25814);
    }
    if (D.19522 != 0) goto <D.26131>; else goto <D.26132>;
    <D.26131>:
    D.25823 = 0;
    return D.25823;
    <D.26132>:
    if (security_enabled != 0) goto <D.26133>; else goto <D.26134>;
    <D.26133>:
    D.25843 = im->flags;
    D.25844 = (int) D.25843;
    D.25845 = D.25844 & 16384;
    if (D.25845 != 0) goto <D.26135>; else goto <D.26136>;
    <D.26135>:
    mono_secman_inheritancedemand_method (cm, im);
    <D.26136>:
    <D.26134>:
    D.26137 = mono_security_get_mode ();
    if (D.26137 == 1) goto <D.26138>; else goto <D.26139>;
    <D.26138>:
    mono_security_core_clr_check_override (class, cm, im);
    <D.26139>:
    D.26140 = is_wcf_hack_disabled ();
    if (D.26140 != 0) goto <D.26141>; else goto <D.26142>;
    <D.26141>:
    D.26143 = mono_method_can_access_method_full (cm, im, 0B);
    if (D.26143 == 0) goto <D.26144>; else goto <D.26145>;
    <D.26144>:
    {
      char * body_name;
      char * decl_name;

      body_name = mono_method_full_name (cm, 1);
      decl_name = mono_method_full_name (im, 1);
      D.26146 = monoeg_g_strdup_printf ("Method %s overrides method \'%s\' which is not accessible", body_name, decl_name);
      mono_class_set_failure (class, 7, D.26146);
      monoeg_g_free (body_name);
      monoeg_g_free (decl_name);
      D.25823 = 0;
      return D.25823;
    }
    <D.26145>:
    <D.26142>:
    D.25823 = 1;
    return D.25823;
  }
}


print_unimplemented_interface_method_info (struct MonoClass * class, struct MonoClass * ic, struct MonoMethod * im, int im_slot, struct MonoMethod * * overrides, int onum)
{
  sizetype index.227;
  sizetype D.26149;
  sizetype D.26150;
  struct MonoMethod * * D.26151;
  struct MonoMethod * D.26152;
  const char * D.26153;
  short int D.26154;
  int D.26155;
  unsigned int index.228;
  unsigned int D.26157;
  struct MonoMethod * * D.26158;
  struct MonoMethod * D.26159;
  const char * D.26160;
  short int D.26161;
  int D.26162;
  struct MonoMethodSignature * D.26163;
  struct MonoType * D.26164;
  struct MonoType * D.26165;
  char * D.26166;
  const char * D.26167;
  unsigned char D.26168;
  struct MonoMethod * * D.26171;
  unsigned int D.26172;
  struct MonoMethod * * D.26173;
  struct MonoMethodSignature * D.26174;
  const char * D.26175;
  unsigned int index.229;
  unsigned int D.26177;
  int index;
  char * method_signature;
  char * type_name;

  index = 0;
  goto <D.19537>;
  <D.19536>:
  index.227 = (sizetype) index;
  D.26149 = index.227 * 8;
  D.26150 = D.26149 + 4;
  D.26151 = overrides + D.26150;
  D.26152 = *D.26151;
  D.26153 = D.26152->name;
  index.227 = (sizetype) index;
  D.26149 = index.227 * 8;
  D.26150 = D.26149 + 4;
  D.26151 = overrides + D.26150;
  D.26152 = *D.26151;
  D.26154 = D.26152->slot;
  D.26155 = (int) D.26154;
  index.228 = (unsigned int) index;
  D.26157 = index.228 * 8;
  D.26158 = overrides + D.26157;
  D.26159 = *D.26158;
  D.26160 = D.26159->name;
  index.228 = (unsigned int) index;
  D.26157 = index.228 * 8;
  D.26158 = overrides + D.26157;
  D.26159 = *D.26158;
  D.26161 = D.26159->slot;
  D.26162 = (int) D.26161;
  mono_trace (16, 2, " at slot %d: %s (%d) overrides %s (%d)\n", im_slot, D.26153, D.26155, D.26160, D.26162);
  index = index + 1;
  <D.19537>:
  if (index < onum) goto <D.19536>; else goto <D.19538>;
  <D.19538>:
  D.26163 = mono_method_signature (im);
  method_signature = mono_signature_get_desc (D.26163, 0);
  D.26164 = &class->byval_arg;
  type_name = mono_type_full_name (D.26164);
  D.26165 = &ic->byval_arg;
  D.26166 = mono_type_get_name (D.26165);
  D.26167 = im->name;
  mono_trace (16, 2, "no implementation for interface method %s::%s(%s) in class %s\n", D.26166, D.26167, method_signature, type_name);
  monoeg_g_free (method_signature);
  monoeg_g_free (type_name);
  mono_class_setup_methods (class);
  D.26168 = class->exception_type;
  if (D.26168 != 0) goto <D.26169>; else goto <D.26170>;
  <D.26169>:
  {
    char * name;

    name = mono_type_get_full_name (class);
    mono_trace (16, 2, "CLASS %s failed to resolve methods\n", name);
    monoeg_g_free (name);
    return;
  }
  <D.26170>:
  index = 0;
  goto <D.19542>;
  <D.19541>:
  {
    struct MonoMethod * cm;

    D.26171 = class->methods;
    index.228 = (unsigned int) index;
    D.26172 = index.228 * 4;
    D.26173 = D.26171 + D.26172;
    cm = *D.26173;
    D.26174 = mono_method_signature (cm);
    method_signature = mono_signature_get_desc (D.26174, 1);
    D.26175 = cm->name;
    mono_trace (16, 2, "METHOD %s(%s)\n", D.26175, method_signature);
    monoeg_g_free (method_signature);
  }
  index = index + 1;
  <D.19542>:
  index.229 = (unsigned int) index;
  D.26177 = class->method.count;
  if (index.229 < D.26177) goto <D.19541>; else goto <D.19543>;
  <D.19543>:
}


is_wcf_hack_disabled ()
{
  int inited.230;
  const gchar * D.26182;
  _Bool D.26183;
  int disabled.231;
  gboolean D.26185;
  static gboolean disabled;
  static gboolean inited = 0;

  inited.230 = inited;
  if (inited.230 == 0) goto <D.26180>; else goto <D.26181>;
  <D.26180>:
  D.26182 = monoeg_g_getenv ("MONO_DISABLE_WCF_HACK");
  D.26183 = D.26182 != 0B;
  disabled.231 = (int) D.26183;
  disabled = disabled.231;
  inited = 1;
  <D.26181>:
  D.26185 = disabled;
  return D.26185;
}


mono_class_get_virtual_methods (struct MonoClass * klass, void * * iter)
{
  struct MonoMethod * D.26189;
  struct MonoMethod * * D.26192;
  unsigned int D.26194;
  struct MonoImage * D.26196;
  unsigned int D.26197;
  unsigned int D.26198;
  struct MonoGenericClass * D.26200;
  void * D.26201;
  struct MonoMethod * D.26207;
  short unsigned int D.26210;
  int D.26211;
  int D.26212;
  unsigned int D.26214;
  unsigned int D.26215;
  struct MonoMethod * * D.26216;
  unsigned int D.26222;
  unsigned int i.232;
  unsigned int D.26224;
  int D.26225;
  unsigned int D.26226;
  unsigned int D.26230;
  unsigned int D.26231;
  int D.26232;
  void * D.26233;
  struct MonoMethod * * method;

  if (iter == 0B) goto <D.26187>; else goto <D.26188>;
  <D.26187>:
  D.26189 = 0B;
  return D.26189;
  <D.26188>:
  D.26192 = klass->methods;
  if (D.26192 != 0B) goto <D.26190>; else goto <D.26193>;
  <D.26193>:
  D.26194 = klass->type_token;
  if (D.26194 == 0) goto <D.26190>; else goto <D.26195>;
  <D.26195>:
  D.26196 = klass->image;
  D.26197 = BIT_FIELD_REF <*D.26196, 32, 128>;
  D.26198 = D.26197 & 8;
  if (D.26198 != 0) goto <D.26190>; else goto <D.26199>;
  <D.26199>:
  D.26200 = klass->generic_class;
  if (D.26200 != 0B) goto <D.26190>; else goto <D.26191>;
  <D.26190>:
  D.26201 = *iter;
  if (D.26201 == 0B) goto <D.26202>; else goto <D.26203>;
  <D.26202>:
  mono_class_setup_methods (klass);
  D.26192 = klass->methods;
  if (D.26192 == 0B) goto <D.26204>; else goto <D.26205>;
  <D.26204>:
  D.26189 = 0B;
  return D.26189;
  <D.26205>:
  method = klass->methods;
  goto <D.26206>;
  <D.26203>:
  method = *iter;
  method = method + 4;
  <D.26206>:
  goto <D.21239>;
  <D.21238>:
  D.26207 = *method;
  if (D.26207 != 0B) goto <D.26208>; else goto <D.26209>;
  <D.26208>:
  D.26207 = *method;
  D.26210 = D.26207->flags;
  D.26211 = (int) D.26210;
  D.26212 = D.26211 & 64;
  if (D.26212 != 0) goto <D.21237>; else goto <D.26213>;
  <D.26213>:
  <D.26209>:
  method = method + 4;
  <D.21239>:
  D.26192 = klass->methods;
  D.26214 = klass->method.count;
  D.26215 = D.26214 * 4;
  D.26216 = D.26192 + D.26215;
  if (D.26216 > method) goto <D.21238>; else goto <D.21237>;
  <D.21237>:
  D.26192 = klass->methods;
  D.26214 = klass->method.count;
  D.26215 = D.26214 * 4;
  D.26216 = D.26192 + D.26215;
  if (D.26216 > method) goto <D.26217>; else goto <D.26218>;
  <D.26217>:
  *iter = method;
  D.26189 = *method;
  return D.26189;
  <D.26218>:
  D.26189 = 0B;
  return D.26189;
  <D.26191>:
  {
    struct MonoMethod * res;
    int i;
    int start_index;

    res = 0B;
    D.26201 = *iter;
    if (D.26201 == 0B) goto <D.26219>; else goto <D.26220>;
    <D.26219>:
    start_index = 0;
    goto <D.26221>;
    <D.26220>:
    D.26201 = *iter;
    start_index = (int) D.26201;
    <D.26221>:
    i = start_index;
    goto <D.21246>;
    <D.21245>:
    {
      guint32 flags;

      D.26196 = klass->image;
      D.26222 = klass->method.first;
      i.232 = (unsigned int) i;
      D.26224 = D.26222 + i.232;
      D.26225 = (int) D.26224;
      flags = mono_metadata_decode_table_row_col (D.26196, 6, D.26225, 2);
      D.26226 = flags & 64;
      if (D.26226 != 0) goto <D.21244>; else goto <D.26227>;
      <D.26227>:
    }
    i = i + 1;
    <D.21246>:
    i.232 = (unsigned int) i;
    D.26214 = klass->method.count;
    if (i.232 < D.26214) goto <D.21245>; else goto <D.21244>;
    <D.21244>:
    i.232 = (unsigned int) i;
    D.26214 = klass->method.count;
    if (i.232 < D.26214) goto <D.26228>; else goto <D.26229>;
    <D.26228>:
    D.26196 = klass->image;
    D.26222 = klass->method.first;
    i.232 = (unsigned int) i;
    D.26224 = D.26222 + i.232;
    D.26230 = D.26224 + 1;
    D.26231 = D.26230 | 100663296;
    res = mono_get_method (D.26196, D.26231, klass);
    D.26232 = i + 1;
    D.26233 = (void *) D.26232;
    *iter = D.26233;
    D.26189 = res;
    return D.26189;
    <D.26229>:
    D.26189 = 0B;
    return D.26189;
  }
}


print_implemented_interfaces (struct MonoClass * klass)
{
  short unsigned int D.26235;
  int D.26236;
  struct MonoClass * * D.26237;
  unsigned int i.233;
  unsigned int D.26239;
  struct MonoClass * * D.26240;
  struct MonoClass * D.26241;
  short unsigned int D.26242;
  int D.26243;
  guint16 * D.26244;
  unsigned int D.26245;
  guint16 * D.26246;
  short unsigned int D.26247;
  int D.26248;
  unsigned int D.26249;
  const char * D.26250;
  const char * D.26251;
  short unsigned int D.26254;
  int D.26255;
  guint8 * D.26257;
  int D.26258;
  sizetype D.26259;
  guint8 * D.26260;
  unsigned char D.26261;
  int D.26262;
  int D.26263;
  int D.26264;
  int D.26265;
  sizetype i.234;
  guint8 * D.26268;
  unsigned char D.26269;
  int D.26270;
  int D.26271;
  int D.26272;
  int D.26273;
  _Bool D.26274;
  int D.26275;
  int D.26276;
  const char * D.26277;
  int D.26278;
  const char * D.26281;
  void * * D.26285;
  void * * D.26286;
  short unsigned int D.26287;
  int D.26288;
  const char * D.26289;
  int D.26290;
  unsigned int D.26291;
  const char * D.26292;
  unsigned int i.235;
  unsigned int D.26294;
  char * name;
  struct MonoError error;
  struct GPtrArray * ifaces;
  int i;
  int ancestor_level;

  try
    {
      ifaces = 0B;
      ancestor_level = 0;
      name = mono_type_get_full_name (klass);
      D.26235 = klass->interface_offsets_count;
      D.26236 = (int) D.26235;
      printf ("Packed interface table for class %s has size %d\n", name, D.26236);
      monoeg_g_free (name);
      i = 0;
      goto <D.19126>;
      <D.19125>:
      D.26237 = klass->interfaces_packed;
      i.233 = (unsigned int) i;
      D.26239 = i.233 * 4;
      D.26240 = D.26237 + D.26239;
      D.26241 = *D.26240;
      D.26242 = D.26241->interface_id;
      D.26243 = (int) D.26242;
      D.26244 = klass->interface_offsets_packed;
      i.233 = (unsigned int) i;
      D.26245 = i.233 * 2;
      D.26246 = D.26244 + D.26245;
      D.26247 = *D.26246;
      D.26248 = (int) D.26247;
      D.26237 = klass->interfaces_packed;
      i.233 = (unsigned int) i;
      D.26239 = i.233 * 4;
      D.26240 = D.26237 + D.26239;
      D.26241 = *D.26240;
      D.26249 = D.26241->method.count;
      D.26237 = klass->interfaces_packed;
      i.233 = (unsigned int) i;
      D.26239 = i.233 * 4;
      D.26240 = D.26237 + D.26239;
      D.26241 = *D.26240;
      D.26250 = D.26241->name_space;
      D.26237 = klass->interfaces_packed;
      i.233 = (unsigned int) i;
      D.26239 = i.233 * 4;
      D.26240 = D.26237 + D.26239;
      D.26241 = *D.26240;
      D.26251 = D.26241->name;
      printf ("  [%03d][UUID %03d][SLOT %03d][SIZE  %03d] interface %s.%s\n", i, D.26243, D.26248, D.26249, D.26250, D.26251);
      i = i + 1;
      <D.19126>:
      D.26235 = klass->interface_offsets_count;
      D.26236 = (int) D.26235;
      if (D.26236 > i) goto <D.19125>; else goto <D.19127>;
      <D.19127>:
      printf ("Interface flags: ");
      i = 0;
      goto <D.19129>;
      <D.19128>:
      D.26254 = klass->max_interface_id;
      D.26255 = (int) D.26254;
      if (D.26255 >= i) goto <D.26256>; else goto <D.26252>;
      <D.26256>:
      D.26257 = klass->interface_bitmap;
      D.26258 = i >> 3;
      D.26259 = (sizetype) D.26258;
      D.26260 = D.26257 + D.26259;
      D.26261 = *D.26260;
      D.26262 = (int) D.26261;
      D.26263 = i & 7;
      D.26264 = D.26262 >> D.26263;
      D.26265 = D.26264 & 1;
      if (D.26265 != 0) goto <D.26266>; else goto <D.26252>;
      <D.26266>:
      printf ("(%d,T)", i);
      goto <D.26253>;
      <D.26252>:
      printf ("(%d,F)", i);
      <D.26253>:
      i = i + 1;
      <D.19129>:
      D.26254 = klass->max_interface_id;
      D.26255 = (int) D.26254;
      if (D.26255 >= i) goto <D.19128>; else goto <D.19130>;
      <D.19130>:
      printf ("\n");
      printf ("Dump interface flags:");
      i = 0;
      goto <D.19132>;
      <D.19131>:
      D.26257 = klass->interface_bitmap;
      i.234 = (sizetype) i;
      D.26268 = D.26257 + i.234;
      D.26269 = *D.26268;
      D.26270 = (int) D.26269;
      printf (" %02X", D.26270);
      i = i + 1;
      <D.19132>:
      D.26254 = klass->max_interface_id;
      D.26255 = (int) D.26254;
      D.26271 = D.26255 + 1;
      D.26272 = D.26271 >> 3;
      D.26254 = klass->max_interface_id;
      D.26255 = (int) D.26254;
      D.26271 = D.26255 + 1;
      D.26273 = D.26271 & 7;
      D.26274 = D.26273 != 0;
      D.26275 = (int) D.26274;
      D.26276 = D.26272 + D.26275;
      if (D.26276 > i) goto <D.19131>; else goto <D.19133>;
      <D.19133>:
      printf ("\n");
      goto <D.19139>;
      <D.19138>:
      D.26277 = klass->name;
      printf ("[LEVEL %d] Implemented interfaces by class %s:\n", ancestor_level, D.26277);
      ifaces = mono_class_get_implemented_interfaces (klass, &error);
      D.26278 = mono_error_ok (&error);
      if (D.26278 == 0) goto <D.26279>; else goto <D.26280>;
      <D.26279>:
      D.26281 = mono_error_get_message (&error);
      printf ("  Type failed due to %s\n", D.26281);
      mono_error_cleanup (&error);
      goto <D.26282>;
      <D.26280>:
      if (ifaces != 0B) goto <D.26283>; else goto <D.26284>;
      <D.26283>:
      i = 0;
      goto <D.19136>;
      <D.19135>:
      {
        struct MonoClass * ic;

        D.26285 = ifaces->pdata;
        i.233 = (unsigned int) i;
        D.26239 = i.233 * 4;
        D.26286 = D.26285 + D.26239;
        ic = *D.26286;
        D.26287 = ic->interface_id;
        D.26288 = (int) D.26287;
        D.26289 = ic->name;
        printf ("  [UIID %d] interface %s\n", D.26288, D.26289);
        D.26287 = ic->interface_id;
        D.26288 = (int) D.26287;
        D.26290 = mono_class_interface_offset (klass, ic);
        D.26291 = ic->method.count;
        D.26292 = ic->name_space;
        D.26289 = ic->name;
        printf ("  [%03d][UUID %03d][SLOT %03d][SIZE  %03d] interface %s.%s\n", i, D.26288, D.26290, D.26291, D.26292, D.26289);
      }
      i = i + 1;
      <D.19136>:
      i.235 = (unsigned int) i;
      D.26294 = ifaces->len;
      if (i.235 < D.26294) goto <D.19135>; else goto <D.19137>;
      <D.19137>:
      monoeg_g_ptr_array_free (ifaces, 1);
      <D.26284>:
      <D.26282>:
      ancestor_level = ancestor_level + 1;
      klass = klass->parent;
      <D.19139>:
      if (klass != 0B) goto <D.19138>; else goto <D.19140>;
      <D.19140>:
    }
  finally
    {
      error = {CLOBBER};
    }
}


printf (const char * restrict __fmt)
{
  int D.26295;

  D.26295 = __printf_chk (1, __fmt, __builtin_va_arg_pack ());
  return D.26295;
}


mono_method_get_vtable_slot (struct MonoMethod * method)
{
  short int D.26297;
  struct MonoClass * D.26300;
  unsigned char D.26301;
  int D.26304;
  struct MonoGenericClass * D.26307;
  _Bool D.26308;
  long int D.26309;
  long int D.26310;
  struct MonoMethod * * D.26313;
  _Bool D.26314;
  long int D.26315;
  long int D.26316;
  unsigned int i.236;
  unsigned int D.26320;
  struct MonoMethod * * D.26321;
  struct MonoMethod * D.26322;
  unsigned int i.237;
  unsigned int D.26325;
  _Bool D.26326;
  long int D.26327;
  long int D.26328;
  struct MonoMethod * * D.26331;
  _Bool D.26332;
  long int D.26333;
  long int D.26334;
  struct MonoMethod * * D.26337;
  struct MonoMethod * D.26338;
  short int D.26339;
  _Bool D.26340;
  long int D.26341;
  long int D.26342;

  D.26297 = method->slot;
  if (D.26297 == -1) goto <D.26298>; else goto <D.26299>;
  <D.26298>:
  D.26300 = method->klass;
  mono_class_setup_vtable (D.26300);
  D.26300 = method->klass;
  D.26301 = D.26300->exception_type;
  if (D.26301 != 0) goto <D.26302>; else goto <D.26303>;
  <D.26302>:
  D.26304 = -1;
  return D.26304;
  <D.26303>:
  D.26297 = method->slot;
  if (D.26297 == -1) goto <D.26305>; else goto <D.26306>;
  <D.26305>:
  {
    struct MonoClass * gklass;
    int i;

    D.26300 = method->klass;
    D.26307 = D.26300->generic_class;
    D.26308 = D.26307 == 0B;
    D.26309 = (long int) D.26308;
    D.26310 = __builtin_expect (D.26309, 0);
    if (D.26310 != 0) goto <D.26311>; else goto <D.26312>;
    <D.26311>:
    monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "class.c", 4676, "method->klass->generic_class");
    <D.26312>:
    D.26300 = method->klass;
    D.26307 = D.26300->generic_class;
    gklass = D.26307->container_class;
    D.26300 = method->klass;
    mono_class_setup_methods (D.26300);
    D.26300 = method->klass;
    D.26313 = D.26300->methods;
    D.26314 = D.26313 == 0B;
    D.26315 = (long int) D.26314;
    D.26316 = __builtin_expect (D.26315, 0);
    if (D.26316 != 0) goto <D.26317>; else goto <D.26318>;
    <D.26317>:
    monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "class.c", 4679, "method->klass->methods");
    <D.26318>:
    i = 0;
    goto <D.19734>;
    <D.19733>:
    D.26300 = method->klass;
    D.26313 = D.26300->methods;
    i.236 = (unsigned int) i;
    D.26320 = i.236 * 4;
    D.26321 = D.26313 + D.26320;
    D.26322 = *D.26321;
    if (D.26322 == method) goto <D.19732>; else goto <D.26323>;
    <D.26323>:
    i = i + 1;
    <D.19734>:
    i.237 = (unsigned int) i;
    D.26300 = method->klass;
    D.26325 = D.26300->method.count;
    if (i.237 < D.26325) goto <D.19733>; else goto <D.19732>;
    <D.19732>:
    i.237 = (unsigned int) i;
    D.26300 = method->klass;
    D.26325 = D.26300->method.count;
    D.26326 = i.237 >= D.26325;
    D.26327 = (long int) D.26326;
    D.26328 = __builtin_expect (D.26327, 0);
    if (D.26328 != 0) goto <D.26329>; else goto <D.26330>;
    <D.26329>:
    monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "class.c", 4684, "i < method->klass->method.count");
    <D.26330>:
    D.26331 = gklass->methods;
    D.26332 = D.26331 == 0B;
    D.26333 = (long int) D.26332;
    D.26334 = __builtin_expect (D.26333, 0);
    if (D.26334 != 0) goto <D.26335>; else goto <D.26336>;
    <D.26335>:
    monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "class.c", 4685, "gklass->methods");
    <D.26336>:
    D.26331 = gklass->methods;
    i.236 = (unsigned int) i;
    D.26320 = i.236 * 4;
    D.26337 = D.26331 + D.26320;
    D.26338 = *D.26337;
    D.26339 = D.26338->slot;
    method->slot = D.26339;
  }
  <D.26306>:
  D.26297 = method->slot;
  D.26340 = D.26297 == -1;
  D.26341 = (long int) D.26340;
  D.26342 = __builtin_expect (D.26341, 0);
  if (D.26342 != 0) goto <D.26343>; else goto <D.26344>;
  <D.26343>:
  monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "class.c", 4688, "method->slot != -1");
  <D.26344>:
  <D.26299>:
  D.26297 = method->slot;
  D.26304 = (int) D.26297;
  return D.26304;
}


mono_method_get_vtable_index (struct MonoMethod * method)
{
  unsigned int D.26346;
  unsigned int D.26347;
  short unsigned int D.26350;
  int D.26351;
  int D.26352;
  struct MonoMethod * D.26355;
  unsigned int D.26356;
  unsigned int D.26357;
  int D.26360;

  D.26346 = BIT_FIELD_REF <*method, 32, 160>;
  D.26347 = D.26346 & 4096;
  if (D.26347 != 0) goto <D.26348>; else goto <D.26349>;
  <D.26348>:
  D.26350 = method->flags;
  D.26351 = (int) D.26350;
  D.26352 = D.26351 & 64;
  if (D.26352 != 0) goto <D.26353>; else goto <D.26354>;
  <D.26353>:
  {
    struct MonoMethodInflated * imethod;

    imethod = method;
    D.26355 = imethod->declaring;
    D.26356 = BIT_FIELD_REF <*D.26355, 32, 160>;
    D.26357 = D.26356 & 2048;
    if (D.26357 != 0) goto <D.26358>; else goto <D.26359>;
    <D.26358>:
    D.26355 = imethod->declaring;
    D.26360 = mono_method_get_vtable_slot (D.26355);
    return D.26360;
    <D.26359>:
  }
  <D.26354>:
  <D.26349>:
  D.26360 = mono_method_get_vtable_slot (method);
  return D.26360;
}


mono_class_init (struct MonoClass * class)
{
  _Bool D.26362;
  long int D.26363;
  long int D.26364;
  unsigned int D.26369;
  unsigned int D.26370;
  unsigned char D.26372;
  mono_bool D.26373;
  _Bool D.26374;
  unsigned int D.26378;
  gchar * D.26381;
  int D.26382;
  int D.26385;
  struct MonoImage * D.26388;
  const char * D.26389;
  const char * D.26390;
  char * D.26391;
  unsigned char D.26394;
  unsigned int D.26396;
  unsigned int D.26397;
  unsigned char D.26400;
  int D.26403;
  struct MonoClass * D.26406;
  unsigned int D.26409;
  unsigned int D.26410;
  long unsigned int D.26413;
  long unsigned int D.26414;
  struct MonoGenericClass * D.26415;
  unsigned int D.26418;
  unsigned int D.26419;
  long unsigned int D.26422;
  long unsigned int D.26423;
  unsigned char D.26424;
  gchar * D.26429;
  unsigned int D.26432;
  unsigned int D.26433;
  unsigned int D.26436;
  short unsigned int D.26437;
  unsigned int D.26440;
  unsigned int D.26441;
  unsigned int D.26447;
  unsigned int D.26448;
  unsigned int D.26450;
  unsigned int D.26453;
  unsigned int D.26454;
  unsigned int D.26457;
  int D.26458;
  unsigned int D.26459;
  int D.26460;
  unsigned int D.26461;
  unsigned char D.26462;
  <unnamed-unsigned:4> D.26463;
  unsigned int D.26464;
  unsigned char D.26465;
  <unnamed-unsigned:1> D.26466;
  <unnamed-unsigned:1> D.26467;
  <unnamed-unsigned:1> D.26468;
  <unnamed-unsigned:1> D.26469;
  unsigned int D.26471;
  struct MonoLoaderError * D.26475;
  unsigned char D.26477;
  guint32 iftmp.238;
  short unsigned int D.26484;
  unsigned int D.26487;
  int D.26488;
  int D.26489;
  unsigned int D.26490;
  unsigned int D.26491;
  struct MonoMethod * default_ghc.239;
  unsigned int D.26497;
  int D.26498;
  <unnamed-unsigned:1> D.26499;
  <unnamed-unsigned:1> D.26500;
  <unnamed-unsigned:1> D.26501;
  struct MonoClass * D.26507;
  struct MonoType * D.26508;
  int D.26509;
  _Bool D.26510;
  int D.26511;
  int D.26514;
  <unnamed-unsigned:1> D.26522;
  int D.26523;
  unsigned char D.26524;
  <unnamed-unsigned:1> D.26525;
  <unnamed-unsigned:1> D.26526;
  unsigned char D.26527;
  int D.26530;
  struct MonoImage * D.26536;
  short unsigned int D.26541;
  int D.26542;
  int D.26543;
  struct MonoMethod * * D.26548;
  unsigned int i.240;
  unsigned int D.26550;
  struct MonoMethod * * D.26551;
  short unsigned int D.26552;
  int D.26553;
  int D.26554;
  int D.19909;
  int iftmp.241;
  int D.19905;
  const char[7] * D.26560;
  unsigned char D.26561;
  int D.26562;
  unsigned char D.26563;
  int D.26564;
  const unsigned char * D.26569;
  unsigned char D.26570;
  int D.26571;
  const unsigned char * D.26572;
  unsigned char D.26573;
  int D.26574;
  const unsigned char * D.26579;
  unsigned char D.26580;
  int D.26581;
  const unsigned char * D.26582;
  unsigned char D.26583;
  int D.26584;
  const unsigned char * D.26589;
  unsigned char D.26590;
  int D.26591;
  const unsigned char * D.26592;
  unsigned char D.26593;
  int D.26594;
  const char * D.26596;
  unsigned int i.242;
  unsigned char D.26602;
  struct MonoLoaderError * D.26605;
  int D.26607;
  struct MonoLoaderError * D.26612;
  int D.26614;
  <unnamed type> D.26618;
  struct MonoLoaderError * D.26621;
  struct MonoLoaderError * D.26626;
  int D.26629;
  gchar * D.26632;
  void (*<T1dfc>) (struct MonoClass *) mono_debugger_class_init_func.243;
  int i;
  struct MonoCachedClassInfo cached_info;
  gboolean has_cached_info;
  void leave = <<< error >>>;

  try
    {
      D.26362 = class == 0B;
      D.26363 = (long int) D.26362;
      D.26364 = __builtin_expect (D.26363, 0);
      if (D.26364 != 0) goto <D.26365>; else goto <D.26366>;
      <D.26365>:
      monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "class.c", 4915, "class");
      <D.26366>:
      D.26369 = BIT_FIELD_REF <*class, 32, 160>;
      D.26370 = D.26369 & 1;
      if (D.26370 != 0) goto <D.26367>; else goto <D.26371>;
      <D.26371>:
      D.26372 = class->exception_type;
      if (D.26372 != 0) goto <D.26367>; else goto <D.26368>;
      <D.26367>:
      D.26372 = class->exception_type;
      D.26374 = D.26372 == 0;
      D.26373 = (mono_bool) D.26374;
      return D.26373;
      <D.26368>:
      mono_loader_lock ();
      D.26369 = BIT_FIELD_REF <*class, 32, 160>;
      D.26370 = D.26369 & 1;
      if (D.26370 != 0) goto <D.26375>; else goto <D.26377>;
      <D.26377>:
      D.26372 = class->exception_type;
      if (D.26372 != 0) goto <D.26375>; else goto <D.26376>;
      <D.26375>:
      mono_loader_unlock ();
      D.26372 = class->exception_type;
      D.26374 = D.26372 == 0;
      D.26373 = (mono_bool) D.26374;
      return D.26373;
      <D.26376>:
      D.26369 = BIT_FIELD_REF <*class, 32, 160>;
      D.26378 = D.26369 & 2;
      if (D.26378 != 0) goto <D.26379>; else goto <D.26380>;
      <D.26379>:
      D.26381 = monoeg_strdup ("Recursive type definition detected");
      mono_class_set_failure (class, 7, D.26381);
      goto leave;
      <D.26380>:
      class->init_pending = 1;
      D.26382 = mono_verifier_is_enabled_for_class (class);
      if (D.26382 != 0) goto <D.26383>; else goto <D.26384>;
      <D.26383>:
      D.26385 = mono_verifier_verify_class (class);
      if (D.26385 == 0) goto <D.26386>; else goto <D.26387>;
      <D.26386>:
      D.26388 = class->image;
      D.26389 = class->name;
      D.26388 = class->image;
      D.26390 = D.26388->assembly_name;
      D.26391 = concat_two_strings_with_zero (D.26388, D.26389, D.26390);
      mono_class_set_failure (class, 7, D.26391);
      goto leave;
      <D.26387>:
      <D.26384>:
      D.26394 = class->byval_arg.type;
      if (D.26394 == 20) goto <D.26392>; else goto <D.26395>;
      <D.26395>:
      D.26394 = class->byval_arg.type;
      if (D.26394 == 29) goto <D.26392>; else goto <D.26393>;
      <D.26392>:
      {
        struct MonoClass * element_class;

        element_class = class->element_class;
        D.26396 = BIT_FIELD_REF <*element_class, 32, 160>;
        D.26397 = D.26396 & 1;
        if (D.26397 == 0) goto <D.26398>; else goto <D.26399>;
        <D.26398>:
        mono_class_init (element_class);
        <D.26399>:
        D.26400 = element_class->exception_type;
        if (D.26400 != 0) goto <D.26401>; else goto <D.26402>;
        <D.26401>:
        mono_class_set_failure (class, 7, 0B);
        goto leave;
        <D.26402>:
      }
      <D.26393>:
      D.26403 = mono_is_security_manager_active ();
      if (D.26403 != 0) goto <D.26404>; else goto <D.26405>;
      <D.26404>:
      D.26406 = class->parent;
      if (D.26406 != 0B) goto <D.26407>; else goto <D.26408>;
      <D.26407>:
      D.26406 = class->parent;
      D.26409 = D.26406->flags;
      D.26410 = D.26409 & 262144;
      if (D.26410 != 0) goto <D.26411>; else goto <D.26412>;
      <D.26411>:
      D.26406 = class->parent;
      mono_secman_inheritancedemand_class (class, D.26406);
      <D.26412>:
      <D.26408>:
      <D.26405>:
      D.26413 = mono_stats.initialized_class_count;
      D.26414 = D.26413 + 1;
      mono_stats.initialized_class_count = D.26414;
      D.26415 = class->generic_class;
      if (D.26415 != 0B) goto <D.26416>; else goto <D.26417>;
      <D.26416>:
      D.26415 = class->generic_class;
      D.26418 = BIT_FIELD_REF <*D.26415, 32, 96>;
      D.26419 = D.26418 & 1;
      if (D.26419 == 0) goto <D.26420>; else goto <D.26421>;
      <D.26420>:
      {
        struct MonoClass * gklass;

        D.26415 = class->generic_class;
        gklass = D.26415->container_class;
        D.26422 = mono_stats.generic_class_count;
        D.26423 = D.26422 + 1;
        mono_stats.generic_class_count = D.26423;
        class->method = gklass->method;
        class->field = gklass->field;
        mono_class_init (gklass);
        D.26424 = gklass->exception_type;
        if (D.26424 == 0) goto <D.26425>; else goto <D.26426>;
        <D.26425>:
        mono_class_setup_methods (gklass);
        <D.26426>:
        D.26424 = gklass->exception_type;
        if (D.26424 != 0) goto <D.26427>; else goto <D.26428>;
        <D.26427>:
        D.26429 = monoeg_g_strdup_printf ("Generic Type Defintion failed to init");
        mono_class_set_failure (class, 7, D.26429);
        goto leave;
        <D.26428>:
        D.26432 = class->flags;
        D.26433 = D.26432 & 32;
        if (D.26433 != 0) goto <D.26430>; else goto <D.26434>;
        <D.26434>:
        D.26394 = class->byval_arg.type;
        if (D.26394 == 19) goto <D.26430>; else goto <D.26435>;
        <D.26435>:
        D.26394 = class->byval_arg.type;
        if (D.26394 == 30) goto <D.26430>; else goto <D.26431>;
        <D.26430>:
        D.26436 = mono_get_unique_iid (class);
        D.26437 = (short unsigned int) D.26436;
        class->interface_id = D.26437;
        <D.26431>:
      }
      <D.26421>:
      <D.26417>:
      D.26406 = class->parent;
      if (D.26406 != 0B) goto <D.26438>; else goto <D.26439>;
      <D.26438>:
      D.26406 = class->parent;
      D.26440 = BIT_FIELD_REF <*D.26406, 32, 160>;
      D.26441 = D.26440 & 1;
      if (D.26441 == 0) goto <D.26442>; else goto <D.26443>;
      <D.26442>:
      D.26406 = class->parent;
      mono_class_init (D.26406);
      <D.26443>:
      <D.26439>:
      has_cached_info = mono_class_get_cached_class_info (class, &cached_info);
      D.26415 = class->generic_class;
      if (D.26415 != 0B) goto <D.26444>; else goto <D.26446>;
      <D.26446>:
      D.26388 = class->image;
      D.26447 = BIT_FIELD_REF <*D.26388, 32, 128>;
      D.26448 = D.26447 & 8;
      if (D.26448 != 0) goto <D.26444>; else goto <D.26449>;
      <D.26449>:
      D.26450 = class->type_token;
      if (D.26450 == 0) goto <D.26444>; else goto <D.26451>;
      <D.26451>:
      if (has_cached_info != 0) goto <D.26452>; else goto <D.26445>;
      <D.26452>:
      D.26453 = BIT_FIELD_REF <cached_info, 32, 32>;
      D.26454 = D.26453 & 8;
      if (D.26454 == 0) goto <D.26444>; else goto <D.26445>;
      <D.26444>:
      class->nested_classes_inited = 1;
      <D.26445>:
      if (has_cached_info != 0) goto <D.26455>; else goto <D.26456>;
      <D.26455>:
      D.26457 = cached_info.instance_size;
      D.26458 = (int) D.26457;
      class->instance_size = D.26458;
      D.26459 = cached_info.class_size;
      D.26460 = (int) D.26459;
      class->sizes.class_size = D.26460;
      D.26461 = cached_info.packing_size;
      D.26462 = (unsigned char) D.26461;
      D.26463 = (<unnamed-unsigned:4>) D.26462;
      class->packing_size = D.26463;
      D.26464 = cached_info.min_align;
      D.26465 = (unsigned char) D.26464;
      class->min_align = D.26465;
      D.26466 = cached_info.blittable;
      class->blittable = D.26466;
      D.26467 = cached_info.has_references;
      class->has_references = D.26467;
      D.26468 = cached_info.has_static_refs;
      class->has_static_refs = D.26468;
      D.26469 = cached_info.no_special_static_fields;
      class->no_special_static_fields = D.26469;
      goto <D.26470>;
      <D.26456>:
      D.26369 = BIT_FIELD_REF <*class, 32, 160>;
      D.26471 = D.26369 & 4;
      if (D.26471 == 0) goto <D.26472>; else goto <D.26473>;
      <D.26472>:
      mono_class_setup_fields (class);
      D.26372 = class->exception_type;
      if (D.26372 != 0) goto leave; else goto <D.26474>;
      <D.26474>:
      D.26475 = mono_loader_get_last_error ();
      if (D.26475 != 0B) goto leave; else goto <D.26476>;
      <D.26476>:
      <D.26473>:
      <D.26470>:
      D.26477 = class->rank;
      if (D.26477 != 0) goto <D.26478>; else goto <D.26479>;
      <D.26478>:
      D.26477 = class->rank;
      if (D.26477 > 1) goto <D.26481>; else goto <D.26482>;
      <D.26481>:
      iftmp.238 = 5;
      goto <D.26483>;
      <D.26482>:
      iftmp.238 = 4;
      <D.26483>:
      class->method.count = iftmp.238;
      D.26484 = class->interface_count;
      if (D.26484 != 0) goto <D.26485>; else goto <D.26486>;
      <D.26485>:
      {
        int count_generic;

        count_generic = generic_array_methods (class);
        D.26487 = class->method.count;
        D.26484 = class->interface_count;
        D.26488 = (int) D.26484;
        D.26489 = D.26488 * count_generic;
        D.26490 = (unsigned int) D.26489;
        D.26491 = D.26487 + D.26490;
        class->method.count = D.26491;
      }
      <D.26486>:
      <D.26479>:
      mono_class_setup_supertypes (class);
      default_ghc.239 = default_ghc;
      if (default_ghc.239 == 0B) goto <D.26493>; else goto <D.26494>;
      <D.26493>:
      initialize_object_slots (class);
      <D.26494>:
      if (has_cached_info != 0) goto <D.26495>; else goto <D.26496>;
      <D.26495>:
      D.26497 = cached_info.vtable_size;
      D.26498 = (int) D.26497;
      class->vtable_size = D.26498;
      D.26499 = cached_info.has_finalize;
      class->has_finalize = D.26499;
      class->has_finalize_inited = 1;
      D.26500 = cached_info.ghcimpl;
      class->ghcimpl = D.26500;
      D.26501 = cached_info.has_cctor;
      class->has_cctor = D.26501;
      goto <D.26502>;
      <D.26496>:
      D.26477 = class->rank;
      if (D.26477 == 1) goto <D.26505>; else goto <D.26503>;
      <D.26505>:
      D.26394 = class->byval_arg.type;
      if (D.26394 == 29) goto <D.26506>; else goto <D.26503>;
      <D.26506>:
      {
        static int szarray_vtable_size[2] = {0};
        int slot;

        D.26507 = class->element_class;
        D.26508 = &D.26507->byval_arg;
        D.26509 = mono_type_is_reference (D.26508);
        D.26510 = D.26509 == 0;
        slot = (int) D.26510;
        D.26511 = szarray_vtable_size[slot];
        if (D.26511 == 0) goto <D.26512>; else goto <D.26513>;
        <D.26512>:
        mono_class_setup_vtable (class);
        D.26514 = class->vtable_size;
        szarray_vtable_size[slot] = D.26514;
        goto <D.26515>;
        <D.26513>:
        D.26511 = szarray_vtable_size[slot];
        class->vtable_size = D.26511;
        <D.26515>:
        class->has_finalize_inited = 1;
      }
      goto <D.26504>;
      <D.26503>:
      D.26415 = class->generic_class;
      if (D.26415 != 0B) goto <D.26518>; else goto <D.26516>;
      <D.26518>:
      D.26432 = class->flags;
      D.26433 = D.26432 & 32;
      if (D.26433 == 0) goto <D.26519>; else goto <D.26516>;
      <D.26519>:
      D.26394 = class->byval_arg.type;
      if (D.26394 != 19) goto <D.26520>; else goto <D.26516>;
      <D.26520>:
      D.26394 = class->byval_arg.type;
      if (D.26394 != 30) goto <D.26521>; else goto <D.26516>;
      <D.26521>:
      {
        struct MonoClass * gklass;

        D.26415 = class->generic_class;
        gklass = D.26415->container_class;
        D.26522 = gklass->ghcimpl;
        class->ghcimpl = D.26522;
        D.26523 = mono_class_has_finalizer (gklass);
        D.26524 = (unsigned char) D.26523;
        D.26525 = (<unnamed-unsigned:1>) D.26524;
        class->has_finalize = D.26525;
        class->has_finalize_inited = 1;
        D.26526 = gklass->has_cctor;
        class->has_cctor = D.26526;
        mono_class_setup_vtable (gklass);
        D.26527 = gklass->exception_type;
        if (D.26527 != 0) goto <D.26528>; else goto <D.26529>;
        <D.26528>:
        mono_class_set_failure (class, 7, 0B);
        goto leave;
        <D.26529>:
        D.26530 = gklass->vtable_size;
        class->vtable_size = D.26530;
      }
      goto <D.26517>;
      <D.26516>:
      D.26432 = class->flags;
      D.26433 = D.26432 & 32;
      if (D.26433 == 0) goto <D.26534>; else goto <D.26531>;
      <D.26534>:
      D.26394 = class->byval_arg.type;
      if (D.26394 != 19) goto <D.26535>; else goto <D.26531>;
      <D.26535>:
      D.26394 = class->byval_arg.type;
      if (D.26394 != 30) goto <D.26532>; else goto <D.26531>;
      <D.26531>:
      D.26388 = class->image;
      D.26536 = mono_defaults.corlib;
      if (D.26388 != D.26536) goto <D.26532>; else goto <D.26533>;
      <D.26532>:
      {
        struct MonoMethod * cmethod;

        cmethod = 0B;
        D.26450 = class->type_token;
        if (D.26450 != 0) goto <D.26537>; else goto <D.26538>;
        <D.26537>:
        cmethod = find_method_in_metadata (class, ".cctor", 0, 2048);
        if (cmethod != 0B) goto <D.26539>; else goto <D.26540>;
        <D.26539>:
        D.26541 = cmethod->flags;
        D.26542 = (int) D.26541;
        D.26543 = D.26542 & 2048;
        if (D.26543 != 0) goto <D.26544>; else goto <D.26545>;
        <D.26544>:
        class->has_cctor = 1;
        <D.26545>:
        <D.26540>:
        goto <D.26546>;
        <D.26538>:
        mono_class_setup_methods (class);
        D.26372 = class->exception_type;
        if (D.26372 != 0) goto leave; else goto <D.26547>;
        <D.26547>:
        i = 0;
        goto <D.19912>;
        <D.19911>:
        {
          struct MonoMethod * method;

          D.26548 = class->methods;
          i.240 = (unsigned int) i;
          D.26550 = i.240 * 4;
          D.26551 = D.26548 + D.26550;
          method = *D.26551;
          D.26552 = method->flags;
          D.26553 = (int) D.26552;
          D.26554 = D.26553 & 2048;
          if (D.26554 != 0) goto <D.26555>; else goto <D.26556>;
          <D.26555>:
          {
            size_t __s1_len;
            size_t __s2_len;

            __s1_len = 6;
            if (__s1_len <= 3) goto <D.26558>; else goto <D.26559>;
            <D.26558>:
            {
              const unsigned char * __s2;
              int __result;

              __s2 = method->name;
              D.26560 = ".cctor";
              D.26561 = MEM[(const unsigned char *)D.26560];
              D.26562 = (int) D.26561;
              D.26563 = *__s2;
              D.26564 = (int) D.26563;
              __result = D.26562 - D.26564;
              {
                if (__s1_len != 0) goto <D.26565>; else goto <D.26566>;
                <D.26565>:
                if (__result == 0) goto <D.26567>; else goto <D.26568>;
                <D.26567>:
                D.26569 = &MEM[(void *)".cctor" + 1B];
                D.26570 = *D.26569;
                D.26571 = (int) D.26570;
                D.26572 = __s2 + 1;
                D.26573 = *D.26572;
                D.26574 = (int) D.26573;
                __result = D.26571 - D.26574;
                if (__s1_len > 1) goto <D.26575>; else goto <D.26576>;
                <D.26575>:
                if (__result == 0) goto <D.26577>; else goto <D.26578>;
                <D.26577>:
                D.26579 = &MEM[(void *)".cctor" + 2B];
                D.26580 = *D.26579;
                D.26581 = (int) D.26580;
                D.26582 = __s2 + 2;
                D.26583 = *D.26582;
                D.26584 = (int) D.26583;
                __result = D.26581 - D.26584;
                if (__s1_len > 2) goto <D.26585>; else goto <D.26586>;
                <D.26585>:
                if (__result == 0) goto <D.26587>; else goto <D.26588>;
                <D.26587>:
                D.26589 = &MEM[(void *)".cctor" + 3B];
                D.26590 = *D.26589;
                D.26591 = (int) D.26590;
                D.26592 = __s2 + 3;
                D.26593 = *D.26592;
                D.26594 = (int) D.26593;
                __result = D.26591 - D.26594;
                <D.26588>:
                <D.26586>:
                <D.26578>:
                <D.26576>:
                <D.26568>:
                <D.26566>:
              }
              D.19905 = __result;
            }
            iftmp.241 = D.19905;
            goto <D.26595>;
            <D.26559>:
            D.26596 = method->name;
            iftmp.241 = __builtin_strcmp (".cctor", D.26596);
            <D.26595>:
            D.19909 = iftmp.241;
          }
          if (D.19909 == 0) goto <D.26597>; else goto <D.26598>;
          <D.26597>:
          class->has_cctor = 1;
          goto <D.19910>;
          <D.26598>:
          <D.26556>:
        }
        i = i + 1;
        <D.19912>:
        i.242 = (unsigned int) i;
        D.26487 = class->method.count;
        if (i.242 < D.26487) goto <D.19911>; else goto <D.19910>;
        <D.19910>:
        <D.26546>:
      }
      <D.26533>:
      <D.26517>:
      <D.26504>:
      <D.26502>:
      D.26406 = class->parent;
      if (D.26406 != 0B) goto <D.26600>; else goto <D.26601>;
      <D.26600>:
      {
        int first_iface_slot;

        D.26406 = class->parent;
        mono_class_init (D.26406);
        D.26406 = class->parent;
        D.26602 = D.26406->exception_type;
        if (D.26602 != 0) goto <D.26603>; else goto <D.26604>;
        <D.26603>:
        mono_class_set_failure (class, 7, 0B);
        goto leave;
        <D.26604>:
        D.26605 = mono_loader_get_last_error ();
        if (D.26605 != 0B) goto leave; else goto <D.26606>;
        <D.26606>:
        D.26406 = class->parent;
        D.26607 = D.26406->vtable_size;
        if (D.26607 == 0) goto <D.26608>; else goto <D.26609>;
        <D.26608>:
        D.26406 = class->parent;
        mono_class_setup_vtable (D.26406);
        D.26406 = class->parent;
        D.26602 = D.26406->exception_type;
        if (D.26602 != 0) goto <D.26610>; else goto <D.26611>;
        <D.26610>:
        mono_class_set_failure (class, 7, 0B);
        goto leave;
        <D.26611>:
        D.26612 = mono_loader_get_last_error ();
        if (D.26612 != 0B) goto leave; else goto <D.26613>;
        <D.26613>:
        <D.26609>:
        D.26406 = class->parent;
        first_iface_slot = D.26406->vtable_size;
        D.26614 = mono_class_need_stelemref_method (class);
        if (D.26614 != 0) goto <D.26615>; else goto <D.26616>;
        <D.26615>:
        first_iface_slot = first_iface_slot + 1;
        <D.26616>:
        setup_interface_offsets (class, first_iface_slot, 1);
      }
      goto <D.26617>;
      <D.26601>:
      setup_interface_offsets (class, 0, 1);
      <D.26617>:
      D.26618 = mono_security_get_mode ();
      if (D.26618 == 1) goto <D.26619>; else goto <D.26620>;
      <D.26619>:
      mono_security_core_clr_check_inheritance (class);
      <D.26620>:
      D.26621 = mono_loader_get_last_error ();
      if (D.26621 != 0B) goto <D.26622>; else goto <D.26623>;
      <D.26622>:
      D.26372 = class->exception_type;
      if (D.26372 == 0) goto <D.26624>; else goto <D.26625>;
      <D.26624>:
      D.26626 = mono_loader_get_last_error ();
      set_failure_from_loader_error (class, D.26626);
      <D.26625>:
      mono_loader_clear_error ();
      <D.26623>:
      D.26415 = class->generic_class;
      if (D.26415 != 0B) goto <D.26627>; else goto <D.26628>;
      <D.26627>:
      D.26629 = mono_verifier_class_is_valid_generic_instantiation (class);
      if (D.26629 == 0) goto <D.26630>; else goto <D.26631>;
      <D.26630>:
      D.26632 = monoeg_strdup ("Invalid generic instantiation");
      mono_class_set_failure (class, 7, D.26632);
      <D.26631>:
      <D.26628>:
      goto leave;
      leave:
      mono_memory_barrier ();
      class->inited = 1;
      class->init_pending = 0;
      mono_loader_unlock ();
      mono_debugger_class_init_func.243 = mono_debugger_class_init_func;
      if (mono_debugger_class_init_func.243 != 0B) goto <D.26634>; else goto <D.26635>;
      <D.26634>:
      mono_debugger_class_init_func.243 = mono_debugger_class_init_func;
      mono_debugger_class_init_func.243 (class);
      <D.26635>:
      D.26372 = class->exception_type;
      D.26374 = D.26372 == 0;
      D.26373 = (mono_bool) D.26374;
      return D.26373;
    }
  finally
    {
      cached_info = {CLOBBER};
    }
}


mono_get_unique_iid (struct MonoClass * class)
{
  int iftmp.244;
  unsigned int D.26641;
  unsigned int D.26642;
  unsigned char D.26644;
  _Bool D.26647;
  long int D.26648;
  long int D.26649;
  struct MonoBitSet * global_interface_bitset.245;
  struct MonoBitSet * global_interface_bitset.246;
  unsigned int D.26658;
  int D.26659;
  unsigned int D.26660;
  unsigned int iid.247;
  struct MonoGenericClass * D.26662;
  struct MonoImage * D.26665;
  struct MonoBitSet * D.26666;
  unsigned int D.26669;
  int D.26672;
  unsigned int D.26673;
  struct MonoBitSet * D.26675;
  int mono_print_vtable.248;
  struct MonoType * D.26679;
  struct MonoGenericInst * D.26683;
  unsigned int D.26684;
  unsigned int D.26685;
  unsigned int D.26687;
  _Bool D.26688;
  long int D.26689;
  long int D.26690;
  char * D.26693;
  _Bool D.26694;
  long int D.26695;
  long int D.26696;
  guint D.26699;
  int iid;

  D.26641 = class->flags;
  D.26642 = D.26641 & 32;
  if (D.26642 == 0) goto <D.26643>; else goto <D.26639>;
  <D.26643>:
  D.26644 = class->byval_arg.type;
  if (D.26644 != 19) goto <D.26645>; else goto <D.26639>;
  <D.26645>:
  D.26644 = class->byval_arg.type;
  if (D.26644 != 30) goto <D.26646>; else goto <D.26639>;
  <D.26646>:
  iftmp.244 = 1;
  goto <D.26640>;
  <D.26639>:
  iftmp.244 = 0;
  <D.26640>:
  D.26647 = iftmp.244 != 0;
  D.26648 = (long int) D.26647;
  D.26649 = __builtin_expect (D.26648, 0);
  if (D.26649 != 0) goto <D.26650>; else goto <D.26651>;
  <D.26650>:
  monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "class.c", 2592, "MONO_CLASS_IS_INTERFACE (class)");
  <D.26651>:
  global_interface_bitset.245 = global_interface_bitset;
  if (global_interface_bitset.245 == 0B) goto <D.26653>; else goto <D.26654>;
  <D.26653>:
  global_interface_bitset.246 = mono_bitset_new (128, 0);
  global_interface_bitset = global_interface_bitset.246;
  <D.26654>:
  global_interface_bitset.245 = global_interface_bitset;
  iid = mono_bitset_find_first_unset (global_interface_bitset.245, -1);
  if (iid < 0) goto <D.26656>; else goto <D.26657>;
  <D.26656>:
  {
    int old_size;
    struct MonoBitSet * new_set;

    global_interface_bitset.245 = global_interface_bitset;
    D.26658 = mono_bitset_size (global_interface_bitset.245);
    old_size = (int) D.26658;
    global_interface_bitset.245 = global_interface_bitset;
    D.26659 = old_size * 2;
    D.26660 = (unsigned int) D.26659;
    new_set = mono_bitset_clone (global_interface_bitset.245, D.26660);
    global_interface_bitset.245 = global_interface_bitset;
    mono_bitset_free (global_interface_bitset.245);
    global_interface_bitset = new_set;
    iid = old_size;
  }
  <D.26657>:
  global_interface_bitset.245 = global_interface_bitset;
  iid.247 = (unsigned int) iid;
  mono_bitset_set (global_interface_bitset.245, iid.247);
  D.26662 = class->generic_class;
  if (D.26662 == 0B) goto <D.26663>; else goto <D.26664>;
  <D.26663>:
  D.26665 = class->image;
  D.26666 = D.26665->interface_bitset;
  if (D.26666 != 0B) goto <D.26667>; else goto <D.26668>;
  <D.26667>:
  iid.247 = (unsigned int) iid;
  D.26665 = class->image;
  D.26666 = D.26665->interface_bitset;
  D.26669 = mono_bitset_size (D.26666);
  if (iid.247 >= D.26669) goto <D.26670>; else goto <D.26671>;
  <D.26670>:
  {
    struct MonoBitSet * new_set;

    D.26665 = class->image;
    D.26666 = D.26665->interface_bitset;
    D.26672 = iid + 1;
    D.26673 = (unsigned int) D.26672;
    new_set = mono_bitset_clone (D.26666, D.26673);
    D.26665 = class->image;
    D.26666 = D.26665->interface_bitset;
    mono_bitset_free (D.26666);
    D.26665 = class->image;
    D.26665->interface_bitset = new_set;
  }
  <D.26671>:
  goto <D.26674>;
  <D.26668>:
  D.26665 = class->image;
  D.26672 = iid + 1;
  D.26673 = (unsigned int) D.26672;
  D.26675 = mono_bitset_new (D.26673, 0);
  D.26665->interface_bitset = D.26675;
  <D.26674>:
  D.26665 = class->image;
  D.26666 = D.26665->interface_bitset;
  iid.247 = (unsigned int) iid;
  mono_bitset_set (D.26666, iid.247);
  <D.26664>:
  mono_print_vtable.248 = mono_print_vtable;
  if (mono_print_vtable.248 != 0) goto <D.26677>; else goto <D.26678>;
  <D.26677>:
  {
    int generic_id;
    char * type_name;

    D.26679 = &class->byval_arg;
    type_name = mono_type_full_name (D.26679);
    D.26662 = class->generic_class;
    if (D.26662 != 0B) goto <D.26682>; else goto <D.26680>;
    <D.26682>:
    D.26662 = class->generic_class;
    D.26683 = D.26662->context.class_inst;
    D.26684 = BIT_FIELD_REF <*D.26683, 32, 32>;
    D.26685 = D.26684 & 4194304;
    if (D.26685 == 0) goto <D.26686>; else goto <D.26680>;
    <D.26686>:
    D.26662 = class->generic_class;
    D.26683 = D.26662->context.class_inst;
    D.26687 = D.26683->id;
    generic_id = (int) D.26687;
    D.26688 = generic_id == 0;
    D.26689 = (long int) D.26688;
    D.26690 = __builtin_expect (D.26689, 0);
    if (D.26690 != 0) goto <D.26691>; else goto <D.26692>;
    <D.26691>:
    monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "class.c", 2627, "generic_id != 0");
    <D.26692>:
    goto <D.26681>;
    <D.26680>:
    generic_id = 0;
    <D.26681>:
    D.26665 = class->image;
    D.26693 = D.26665->name;
    printf ("Interface: assigned id %d to %s|%s|%d\n", iid, D.26693, type_name, generic_id);
    monoeg_g_free (type_name);
  }
  <D.26678>:
  D.26694 = iid > 65535;
  D.26695 = (long int) D.26694;
  D.26696 = __builtin_expect (D.26695, 0);
  if (D.26696 != 0) goto <D.26697>; else goto <D.26698>;
  <D.26697>:
  monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "class.c", 2636, "iid <= 65535");
  <D.26698>:
  D.26699 = (guint) iid;
  return D.26699;
}


mono_class_get_cached_class_info (struct MonoClass * klass, struct MonoCachedClassInfo * res)
{
  gboolean (*<T1e33>) (struct MonoClass *, struct MonoCachedClassInfo *) get_cached_class_info.249;
  gboolean D.26704;

  get_cached_class_info.249 = get_cached_class_info;
  if (get_cached_class_info.249 == 0B) goto <D.26702>; else goto <D.26703>;
  <D.26702>:
  D.26704 = 0;
  return D.26704;
  <D.26703>:
  get_cached_class_info.249 = get_cached_class_info;
  D.26704 = get_cached_class_info.249 (klass, res);
  return D.26704;
}


initialize_object_slots (struct MonoClass * class)
{
  struct MonoMethod * default_ghc.250;
  struct MonoClass * D.26709;
  struct MonoMethod * * D.26712;
  unsigned int i.251;
  unsigned int D.26714;
  struct MonoMethod * * D.26715;
  int D.19756;
  int iftmp.252;
  int D.19755;
  const char[12] * D.26719;
  unsigned char D.26720;
  int D.26721;
  unsigned char D.26722;
  int D.26723;
  const unsigned char * D.26728;
  unsigned char D.26729;
  int D.26730;
  const unsigned char * D.26731;
  unsigned char D.26732;
  int D.26733;
  const unsigned char * D.26738;
  unsigned char D.26739;
  int D.26740;
  const unsigned char * D.26741;
  unsigned char D.26742;
  int D.26743;
  const unsigned char * D.26748;
  unsigned char D.26749;
  int D.26750;
  const unsigned char * D.26751;
  unsigned char D.26752;
  int D.26753;
  const char * D.26755;
  int D.19765;
  int iftmp.253;
  int D.19764;
  const char[9] * D.26762;
  unsigned char D.26763;
  int D.26764;
  unsigned char D.26765;
  int D.26766;
  const unsigned char * D.26771;
  unsigned char D.26772;
  int D.26773;
  const unsigned char * D.26774;
  unsigned char D.26775;
  int D.26776;
  const unsigned char * D.26781;
  unsigned char D.26782;
  int D.26783;
  const unsigned char * D.26784;
  unsigned char D.26785;
  int D.26786;
  const unsigned char * D.26791;
  unsigned char D.26792;
  int D.26793;
  const unsigned char * D.26794;
  unsigned char D.26795;
  int D.26796;
  int D.26800;
  int ghc_slot.254;
  _Bool D.26802;
  long int D.26803;
  long int D.26804;
  unsigned int ghc_slot.255;
  unsigned int D.26808;
  struct MonoMethod * * D.26809;
  struct MonoMethod * default_ghc.256;
  int finalize_slot.257;
  _Bool D.26812;
  long int D.26813;
  long int D.26814;
  unsigned int finalize_slot.258;
  unsigned int D.26818;
  struct MonoMethod * * D.26819;
  struct MonoMethod * default_finalize.259;
  int i;

  default_ghc.250 = default_ghc;
  if (default_ghc.250 != 0B) goto <D.26707>; else goto <D.26708>;
  <D.26707>:
  return;
  <D.26708>:
  D.26709 = mono_defaults.object_class;
  if (D.26709 == class) goto <D.26710>; else goto <D.26711>;
  <D.26710>:
  mono_class_setup_vtable (class);
  i = 0;
  goto <D.19767>;
  <D.19766>:
  {
    struct MonoMethod * cm;

    D.26712 = class->vtable;
    i.251 = (unsigned int) i;
    D.26714 = i.251 * 4;
    D.26715 = D.26712 + D.26714;
    cm = *D.26715;
    {
      size_t __s1_len;
      size_t __s2_len;

      __s2_len = 11;
      if (__s2_len <= 3) goto <D.26717>; else goto <D.26718>;
      <D.26717>:
      {
        const unsigned char * __s2;
        int __result;

        __s2 = cm->name;
        D.26719 = "GetHashCode";
        D.26720 = MEM[(const unsigned char *)D.26719];
        D.26721 = (int) D.26720;
        D.26722 = *__s2;
        D.26723 = (int) D.26722;
        __result = D.26721 - D.26723;
        {
          if (__s2_len != 0) goto <D.26724>; else goto <D.26725>;
          <D.26724>:
          if (__result == 0) goto <D.26726>; else goto <D.26727>;
          <D.26726>:
          D.26728 = &MEM[(void *)"GetHashCode" + 1B];
          D.26729 = *D.26728;
          D.26730 = (int) D.26729;
          D.26731 = __s2 + 1;
          D.26732 = *D.26731;
          D.26733 = (int) D.26732;
          __result = D.26730 - D.26733;
          if (__s2_len > 1) goto <D.26734>; else goto <D.26735>;
          <D.26734>:
          if (__result == 0) goto <D.26736>; else goto <D.26737>;
          <D.26736>:
          D.26738 = &MEM[(void *)"GetHashCode" + 2B];
          D.26739 = *D.26738;
          D.26740 = (int) D.26739;
          D.26741 = __s2 + 2;
          D.26742 = *D.26741;
          D.26743 = (int) D.26742;
          __result = D.26740 - D.26743;
          if (__s2_len > 2) goto <D.26744>; else goto <D.26745>;
          <D.26744>:
          if (__result == 0) goto <D.26746>; else goto <D.26747>;
          <D.26746>:
          D.26748 = &MEM[(void *)"GetHashCode" + 3B];
          D.26749 = *D.26748;
          D.26750 = (int) D.26749;
          D.26751 = __s2 + 3;
          D.26752 = *D.26751;
          D.26753 = (int) D.26752;
          __result = D.26750 - D.26753;
          <D.26747>:
          <D.26745>:
          <D.26737>:
          <D.26735>:
          <D.26727>:
          <D.26725>:
        }
        D.19755 = __result;
      }
      iftmp.252 = -D.19755;
      goto <D.26754>;
      <D.26718>:
      D.26755 = cm->name;
      iftmp.252 = __builtin_strcmp (D.26755, "GetHashCode");
      <D.26754>:
      D.19756 = iftmp.252;
    }
    if (D.19756 == 0) goto <D.26756>; else goto <D.26757>;
    <D.26756>:
    ghc_slot = i;
    goto <D.26758>;
    <D.26757>:
    {
      size_t __s1_len;
      size_t __s2_len;

      __s2_len = 8;
      if (__s2_len <= 3) goto <D.26760>; else goto <D.26761>;
      <D.26760>:
      {
        const unsigned char * __s2;
        int __result;

        __s2 = cm->name;
        D.26762 = "Finalize";
        D.26763 = MEM[(const unsigned char *)D.26762];
        D.26764 = (int) D.26763;
        D.26765 = *__s2;
        D.26766 = (int) D.26765;
        __result = D.26764 - D.26766;
        {
          if (__s2_len != 0) goto <D.26767>; else goto <D.26768>;
          <D.26767>:
          if (__result == 0) goto <D.26769>; else goto <D.26770>;
          <D.26769>:
          D.26771 = &MEM[(void *)"Finalize" + 1B];
          D.26772 = *D.26771;
          D.26773 = (int) D.26772;
          D.26774 = __s2 + 1;
          D.26775 = *D.26774;
          D.26776 = (int) D.26775;
          __result = D.26773 - D.26776;
          if (__s2_len > 1) goto <D.26777>; else goto <D.26778>;
          <D.26777>:
          if (__result == 0) goto <D.26779>; else goto <D.26780>;
          <D.26779>:
          D.26781 = &MEM[(void *)"Finalize" + 2B];
          D.26782 = *D.26781;
          D.26783 = (int) D.26782;
          D.26784 = __s2 + 2;
          D.26785 = *D.26784;
          D.26786 = (int) D.26785;
          __result = D.26783 - D.26786;
          if (__s2_len > 2) goto <D.26787>; else goto <D.26788>;
          <D.26787>:
          if (__result == 0) goto <D.26789>; else goto <D.26790>;
          <D.26789>:
          D.26791 = &MEM[(void *)"Finalize" + 3B];
          D.26792 = *D.26791;
          D.26793 = (int) D.26792;
          D.26794 = __s2 + 3;
          D.26795 = *D.26794;
          D.26796 = (int) D.26795;
          __result = D.26793 - D.26796;
          <D.26790>:
          <D.26788>:
          <D.26780>:
          <D.26778>:
          <D.26770>:
          <D.26768>:
        }
        D.19764 = __result;
      }
      iftmp.253 = -D.19764;
      goto <D.26797>;
      <D.26761>:
      D.26755 = cm->name;
      iftmp.253 = __builtin_strcmp (D.26755, "Finalize");
      <D.26797>:
      D.19765 = iftmp.253;
    }
    if (D.19765 == 0) goto <D.26798>; else goto <D.26799>;
    <D.26798>:
    finalize_slot = i;
    <D.26799>:
    <D.26758>:
  }
  i = i + 1;
  <D.19767>:
  D.26800 = class->vtable_size;
  if (D.26800 > i) goto <D.19766>; else goto <D.19768>;
  <D.19768>:
  ghc_slot.254 = ghc_slot;
  D.26802 = ghc_slot.254 <= 0;
  D.26803 = (long int) D.26802;
  D.26804 = __builtin_expect (D.26803, 0);
  if (D.26804 != 0) goto <D.26805>; else goto <D.26806>;
  <D.26805>:
  monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "class.c", 4736, "ghc_slot > 0");
  <D.26806>:
  D.26712 = class->vtable;
  ghc_slot.254 = ghc_slot;
  ghc_slot.255 = (unsigned int) ghc_slot.254;
  D.26808 = ghc_slot.255 * 4;
  D.26809 = D.26712 + D.26808;
  default_ghc.256 = *D.26809;
  default_ghc = default_ghc.256;
  finalize_slot.257 = finalize_slot;
  D.26812 = finalize_slot.257 <= 0;
  D.26813 = (long int) D.26812;
  D.26814 = __builtin_expect (D.26813, 0);
  if (D.26814 != 0) goto <D.26815>; else goto <D.26816>;
  <D.26815>:
  monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "class.c", 4739, "finalize_slot > 0");
  <D.26816>:
  D.26712 = class->vtable;
  finalize_slot.257 = finalize_slot;
  finalize_slot.258 = (unsigned int) finalize_slot.257;
  D.26818 = finalize_slot.258 * 4;
  D.26819 = D.26712 + D.26818;
  default_finalize.259 = *D.26819;
  default_finalize = default_finalize.259;
  <D.26711>:
}


find_method_in_metadata (struct MonoClass * klass, const char * name, int param_count, int flags)
{
  struct MonoImage * D.26822;
  unsigned int D.26823;
  unsigned int i.260;
  unsigned int D.26825;
  int D.26826;
  int D.21370;
  unsigned int D.26827;
  const char * D.26828;
  unsigned int D.26831;
  unsigned int D.26832;
  short unsigned int D.26837;
  int D.26838;
  unsigned int D.26841;
  struct MonoMethod * D.26842;
  struct MonoMethod * res;
  int i;

  res = 0B;
  i = 0;
  goto <D.21373>;
  <D.21372>:
  {
    guint32 cols[6];
    struct MonoMethod * method;
    struct MonoMethodSignature * sig;

    try
      {
        D.26822 = klass->image;
        D.26823 = klass->method.first;
        i.260 = (unsigned int) i;
        D.26825 = D.26823 + i.260;
        D.26826 = (int) D.26825;
        mono_metadata_decode_table_row (D.26822, 6, D.26826, &cols, 6);
        {
          size_t __s1_len;
          size_t __s2_len;

          D.26822 = klass->image;
          D.26827 = cols[3];
          D.26828 = mono_metadata_string_heap (D.26822, D.26827);
          D.21370 = __builtin_strcmp (D.26828, name);
        }
        if (D.21370 == 0) goto <D.26829>; else goto <D.26830>;
        <D.26829>:
        D.26822 = klass->image;
        D.26823 = klass->method.first;
        i.260 = (unsigned int) i;
        D.26825 = D.26823 + i.260;
        D.26831 = D.26825 + 1;
        D.26832 = D.26831 | 100663296;
        method = mono_get_method (D.26822, D.26832, klass);
        if (param_count == -1) goto <D.26833>; else goto <D.26834>;
        <D.26833>:
        res = method;
        goto <D.21371>;
        <D.26834>:
        sig = mono_method_signature (method);
        if (sig != 0B) goto <D.26835>; else goto <D.26836>;
        <D.26835>:
        D.26837 = sig->param_count;
        D.26838 = (int) D.26837;
        if (D.26838 == param_count) goto <D.26839>; else goto <D.26840>;
        <D.26839>:
        res = method;
        goto <D.21371>;
        <D.26840>:
        <D.26836>:
        <D.26830>:
      }
    finally
      {
        cols = {CLOBBER};
      }
  }
  i = i + 1;
  <D.21373>:
  i.260 = (unsigned int) i;
  D.26841 = klass->method.count;
  if (i.260 < D.26841) goto <D.21372>; else goto <D.21371>;
  <D.21371>:
  D.26842 = res;
  return D.26842;
}


mono_class_has_finalizer (struct MonoClass * klass)
{
  unsigned int D.26846;
  unsigned int D.26847;
  unsigned int D.26850;
  unsigned int D.26851;
  unsigned char D.26854;
  unsigned int D.26859;
  unsigned int D.26860;
  struct MonoClass * D.26865;
  unsigned int D.26867;
  unsigned int D.26868;
  unsigned char D.26872;
  struct MonoLoaderError * D.26874;
  struct MonoMethod * * D.26876;
  int finalize_slot.261;
  unsigned int finalize_slot.262;
  unsigned int D.26879;
  struct MonoMethod * * D.26880;
  int D.26883;
  _Bool D.26884;
  long int D.26885;
  long int D.26886;
  unsigned int D.26891;
  unsigned int D.26892;
  struct MonoMethod * default_finalize.263;
  gboolean D.26898;
  <unnamed-unsigned:1> D.26899;
  void leave = <<< error >>>;

  D.26846 = BIT_FIELD_REF <*klass, 32, 192>;
  D.26847 = D.26846 & 16;
  if (D.26847 == 0) goto <D.26848>; else goto <D.26849>;
  <D.26848>:
  {
    struct MonoClass * class;

    class = klass;
    mono_loader_lock ();
    D.26850 = class->flags;
    D.26851 = D.26850 & 32;
    if (D.26851 == 0) goto <D.26852>; else goto <D.26853>;
    <D.26852>:
    D.26854 = class->byval_arg.type;
    if (D.26854 != 19) goto <D.26855>; else goto <D.26856>;
    <D.26855>:
    D.26854 = class->byval_arg.type;
    if (D.26854 != 30) goto <D.26857>; else goto <D.26858>;
    <D.26857>:
    D.26859 = BIT_FIELD_REF <*class, 32, 160>;
    D.26860 = D.26859 & 8;
    if (D.26860 == 0) goto <D.26861>; else goto <D.26862>;
    <D.26861>:
    {
      struct MonoMethod * cmethod;

      cmethod = 0B;
      D.26865 = class->parent;
      if (D.26865 != 0B) goto <D.26866>; else goto <D.26863>;
      <D.26866>:
      D.26865 = class->parent;
      D.26867 = BIT_FIELD_REF <*D.26865, 32, 160>;
      D.26868 = D.26867 & 2097152;
      if (D.26868 != 0) goto <D.26869>; else goto <D.26863>;
      <D.26869>:
      class->has_finalize = 1;
      goto <D.26864>;
      <D.26863>:
      D.26865 = class->parent;
      if (D.26865 != 0B) goto <D.26870>; else goto <D.26871>;
      <D.26870>:
      mono_class_setup_vtable (class);
      D.26872 = class->exception_type;
      if (D.26872 != 0) goto leave; else goto <D.26873>;
      <D.26873>:
      D.26874 = mono_loader_get_last_error ();
      if (D.26874 != 0B) goto leave; else goto <D.26875>;
      <D.26875>:
      D.26876 = class->vtable;
      finalize_slot.261 = finalize_slot;
      finalize_slot.262 = (unsigned int) finalize_slot.261;
      D.26879 = finalize_slot.262 * 4;
      D.26880 = D.26876 + D.26879;
      cmethod = *D.26880;
      <D.26871>:
      if (cmethod != 0B) goto <D.26881>; else goto <D.26882>;
      <D.26881>:
      D.26883 = class->vtable_size;
      finalize_slot.261 = finalize_slot;
      D.26884 = D.26883 <= finalize_slot.261;
      D.26885 = (long int) D.26884;
      D.26886 = __builtin_expect (D.26885, 0);
      if (D.26886 != 0) goto <D.26887>; else goto <D.26888>;
      <D.26887>:
      monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "class.c", 5201, "class->vtable_size > finalize_slot");
      <D.26888>:
      class->has_finalize = 0;
      D.26865 = class->parent;
      if (D.26865 != 0B) goto <D.26889>; else goto <D.26890>;
      <D.26889>:
      D.26891 = BIT_FIELD_REF <*cmethod, 32, 160>;
      D.26892 = D.26891 & 4096;
      if (D.26892 != 0) goto <D.26893>; else goto <D.26894>;
      <D.26893>:
      cmethod = MEM[(struct MonoMethodInflated *)cmethod].declaring;
      <D.26894>:
      default_finalize.263 = default_finalize;
      if (cmethod != default_finalize.263) goto <D.26896>; else goto <D.26897>;
      <D.26896>:
      class->has_finalize = 1;
      <D.26897>:
      <D.26890>:
      <D.26882>:
      <D.26864>:
    }
    <D.26862>:
    <D.26858>:
    <D.26856>:
    <D.26853>:
    mono_memory_barrier ();
    klass->has_finalize_inited = 1;
    mono_loader_unlock ();
  }
  <D.26849>:
  D.26899 = klass->has_finalize;
  D.26898 = (gboolean) D.26899;
  return D.26898;
  leave:
  mono_loader_unlock ();
  D.26898 = 0;
  return D.26898;
}


mono_is_corlib_image (struct MonoImage * image)
{
  unsigned int D.26901;
  unsigned int D.26902;
  gboolean D.26905;
  int iftmp.264;
  struct MonoAssembly * D.26909;
  int D.19931;
  int iftmp.265;
  int D.19930;
  const char[9] * D.26914;
  unsigned char D.26915;
  int D.26916;
  unsigned char D.26917;
  int D.26918;
  const unsigned char * D.26923;
  unsigned char D.26924;
  int D.26925;
  const unsigned char * D.26926;
  unsigned char D.26927;
  int D.26928;
  const unsigned char * D.26933;
  unsigned char D.26934;
  int D.26935;
  const unsigned char * D.26936;
  unsigned char D.26937;
  int D.26938;
  const unsigned char * D.26943;
  unsigned char D.26944;
  int D.26945;
  const unsigned char * D.26946;
  unsigned char D.26947;
  int D.26948;
  const char * D.26950;
  struct MonoImage * D.26952;
  _Bool D.26953;

  D.26901 = BIT_FIELD_REF <*image, 32, 128>;
  D.26902 = D.26901 & 8;
  if (D.26902 != 0) goto <D.26903>; else goto <D.26904>;
  <D.26903>:
  D.26909 = image->assembly;
  if (D.26909 != 0B) goto <D.26910>; else goto <D.26907>;
  <D.26910>:
  {
    size_t __s1_len;
    size_t __s2_len;

    __s2_len = 8;
    if (__s2_len <= 3) goto <D.26912>; else goto <D.26913>;
    <D.26912>:
    {
      const unsigned char * __s2;
      int __result;

      D.26909 = image->assembly;
      __s2 = D.26909->aname.name;
      D.26914 = "mscorlib";
      D.26915 = MEM[(const unsigned char *)D.26914];
      D.26916 = (int) D.26915;
      D.26917 = *__s2;
      D.26918 = (int) D.26917;
      __result = D.26916 - D.26918;
      {
        if (__s2_len != 0) goto <D.26919>; else goto <D.26920>;
        <D.26919>:
        if (__result == 0) goto <D.26921>; else goto <D.26922>;
        <D.26921>:
        D.26923 = &MEM[(void *)"mscorlib" + 1B];
        D.26924 = *D.26923;
        D.26925 = (int) D.26924;
        D.26926 = __s2 + 1;
        D.26927 = *D.26926;
        D.26928 = (int) D.26927;
        __result = D.26925 - D.26928;
        if (__s2_len > 1) goto <D.26929>; else goto <D.26930>;
        <D.26929>:
        if (__result == 0) goto <D.26931>; else goto <D.26932>;
        <D.26931>:
        D.26933 = &MEM[(void *)"mscorlib" + 2B];
        D.26934 = *D.26933;
        D.26935 = (int) D.26934;
        D.26936 = __s2 + 2;
        D.26937 = *D.26936;
        D.26938 = (int) D.26937;
        __result = D.26935 - D.26938;
        if (__s2_len > 2) goto <D.26939>; else goto <D.26940>;
        <D.26939>:
        if (__result == 0) goto <D.26941>; else goto <D.26942>;
        <D.26941>:
        D.26943 = &MEM[(void *)"mscorlib" + 3B];
        D.26944 = *D.26943;
        D.26945 = (int) D.26944;
        D.26946 = __s2 + 3;
        D.26947 = *D.26946;
        D.26948 = (int) D.26947;
        __result = D.26945 - D.26948;
        <D.26942>:
        <D.26940>:
        <D.26932>:
        <D.26930>:
        <D.26922>:
        <D.26920>:
      }
      D.19930 = __result;
    }
    iftmp.265 = -D.19930;
    goto <D.26949>;
    <D.26913>:
    D.26909 = image->assembly;
    D.26950 = D.26909->aname.name;
    iftmp.265 = __builtin_strcmp (D.26950, "mscorlib");
    <D.26949>:
    D.19931 = iftmp.265;
  }
  if (D.19931 == 0) goto <D.26951>; else goto <D.26907>;
  <D.26951>:
  iftmp.264 = 1;
  goto <D.26908>;
  <D.26907>:
  iftmp.264 = 0;
  <D.26908>:
  D.26905 = iftmp.264;
  return D.26905;
  <D.26904>:
  D.26952 = mono_defaults.corlib;
  D.26953 = D.26952 == image;
  D.26905 = (gboolean) D.26953;
  return D.26905;
}


mono_class_setup_mono_type (struct MonoClass * class)
{
  struct MonoImage * D.26955;
  int D.19946;
  int iftmp.266;
  int D.19945;
  const char[7] * D.26961;
  unsigned char D.26962;
  int D.26963;
  unsigned char D.26964;
  int D.26965;
  const unsigned char * D.26970;
  unsigned char D.26971;
  int D.26972;
  const unsigned char * D.26973;
  unsigned char D.26974;
  int D.26975;
  const unsigned char * D.26980;
  unsigned char D.26981;
  int D.26982;
  const unsigned char * D.26983;
  unsigned char D.26984;
  int D.26985;
  const unsigned char * D.26990;
  unsigned char D.26991;
  int D.26992;
  const unsigned char * D.26993;
  unsigned char D.26994;
  int D.26995;
  int D.19955;
  int iftmp.267;
  int D.19954;
  const char[10] * D.27002;
  unsigned char D.27003;
  int D.27004;
  unsigned char D.27005;
  int D.27006;
  const unsigned char * D.27011;
  unsigned char D.27012;
  int D.27013;
  const unsigned char * D.27014;
  unsigned char D.27015;
  int D.27016;
  const unsigned char * D.27021;
  unsigned char D.27022;
  int D.27023;
  const unsigned char * D.27024;
  unsigned char D.27025;
  int D.27026;
  const unsigned char * D.27031;
  unsigned char D.27032;
  int D.27033;
  const unsigned char * D.27034;
  unsigned char D.27035;
  int D.27036;
  int D.19964;
  int iftmp.268;
  int D.19963;
  const char[5] * D.27044;
  unsigned char D.27045;
  int D.27046;
  unsigned char D.27047;
  int D.27048;
  const unsigned char * D.27053;
  unsigned char D.27054;
  int D.27055;
  const unsigned char * D.27056;
  unsigned char D.27057;
  int D.27058;
  const unsigned char * D.27063;
  unsigned char D.27064;
  int D.27065;
  const unsigned char * D.27066;
  unsigned char D.27067;
  int D.27068;
  const unsigned char * D.27073;
  unsigned char D.27074;
  int D.27075;
  const unsigned char * D.27076;
  unsigned char D.27077;
  int D.27078;
  int D.19973;
  int iftmp.269;
  int D.19972;
  const char[7] * D.27086;
  unsigned char D.27087;
  int D.27088;
  unsigned char D.27089;
  int D.27090;
  const unsigned char * D.27095;
  unsigned char D.27096;
  int D.27097;
  const unsigned char * D.27098;
  unsigned char D.27099;
  int D.27100;
  const unsigned char * D.27105;
  unsigned char D.27106;
  int D.27107;
  const unsigned char * D.27108;
  unsigned char D.27109;
  int D.27110;
  const unsigned char * D.27115;
  unsigned char D.27116;
  int D.27117;
  const unsigned char * D.27118;
  unsigned char D.27119;
  int D.27120;
  unsigned char D.27124;
  int D.19982;
  int iftmp.270;
  int D.19981;
  const char[7] * D.27129;
  unsigned char D.27130;
  int D.27131;
  unsigned char D.27132;
  int D.27133;
  const unsigned char * D.27138;
  unsigned char D.27139;
  int D.27140;
  const unsigned char * D.27141;
  unsigned char D.27142;
  int D.27143;
  const unsigned char * D.27148;
  unsigned char D.27149;
  int D.27150;
  const unsigned char * D.27151;
  unsigned char D.27152;
  int D.27153;
  const unsigned char * D.27158;
  unsigned char D.27159;
  int D.27160;
  const unsigned char * D.27161;
  unsigned char D.27162;
  int D.27163;
  int D.19991;
  int iftmp.271;
  int D.19990;
  const char[15] * D.27171;
  unsigned char D.27172;
  int D.27173;
  unsigned char D.27174;
  int D.27175;
  const unsigned char * D.27180;
  unsigned char D.27181;
  int D.27182;
  const unsigned char * D.27183;
  unsigned char D.27184;
  int D.27185;
  const unsigned char * D.27190;
  unsigned char D.27191;
  int D.27192;
  const unsigned char * D.27193;
  unsigned char D.27194;
  int D.27195;
  const unsigned char * D.27200;
  unsigned char D.27201;
  int D.27202;
  const unsigned char * D.27203;
  unsigned char D.27204;
  int D.27205;
  unsigned int D.27209;
  unsigned int D.27210;
  int D.20001;
  int iftmp.272;
  int D.20000;
  unsigned char D.27218;
  int D.27219;
  const unsigned char * D.27224;
  unsigned char D.27225;
  int D.27226;
  const unsigned char * D.27231;
  unsigned char D.27232;
  int D.27233;
  const unsigned char * D.27238;
  unsigned char D.27239;
  int D.27240;
  char D.27244;
  int D.27245;
  int D.20011;
  int iftmp.273;
  int D.20010;
  const char[8] * D.27249;
  unsigned char D.27250;
  int D.27251;
  unsigned char D.27252;
  int D.27253;
  const unsigned char * D.27258;
  unsigned char D.27259;
  int D.27260;
  const unsigned char * D.27261;
  unsigned char D.27262;
  int D.27263;
  const unsigned char * D.27268;
  unsigned char D.27269;
  int D.27270;
  const unsigned char * D.27271;
  unsigned char D.27272;
  int D.27273;
  const unsigned char * D.27278;
  unsigned char D.27279;
  int D.27280;
  const unsigned char * D.27281;
  unsigned char D.27282;
  int D.27283;
  int D.20020;
  int iftmp.274;
  int D.20019;
  const char[5] * D.27291;
  unsigned char D.27292;
  int D.27293;
  unsigned char D.27294;
  int D.27295;
  const unsigned char * D.27300;
  unsigned char D.27301;
  int D.27302;
  const unsigned char * D.27303;
  unsigned char D.27304;
  int D.27305;
  const unsigned char * D.27310;
  unsigned char D.27311;
  int D.27312;
  const unsigned char * D.27313;
  unsigned char D.27314;
  int D.27315;
  const unsigned char * D.27320;
  unsigned char D.27321;
  int D.27322;
  const unsigned char * D.27323;
  unsigned char D.27324;
  int D.27325;
  int D.20031;
  int iftmp.275;
  int D.20030;
  const char[5] * D.27332;
  unsigned char D.27333;
  int D.27334;
  unsigned char D.27335;
  int D.27336;
  const unsigned char * D.27341;
  unsigned char D.27342;
  int D.27343;
  const unsigned char * D.27344;
  unsigned char D.27345;
  int D.27346;
  const unsigned char * D.27351;
  unsigned char D.27352;
  int D.27353;
  const unsigned char * D.27354;
  unsigned char D.27355;
  int D.27356;
  const unsigned char * D.27361;
  unsigned char D.27362;
  int D.27363;
  const unsigned char * D.27364;
  unsigned char D.27365;
  int D.27366;
  int D.20041;
  int iftmp.276;
  int D.20040;
  const char[7] * D.27373;
  unsigned char D.27374;
  int D.27375;
  unsigned char D.27376;
  int D.27377;
  const unsigned char * D.27382;
  unsigned char D.27383;
  int D.27384;
  const unsigned char * D.27385;
  unsigned char D.27386;
  int D.27387;
  const unsigned char * D.27392;
  unsigned char D.27393;
  int D.27394;
  const unsigned char * D.27395;
  unsigned char D.27396;
  int D.27397;
  const unsigned char * D.27402;
  unsigned char D.27403;
  int D.27404;
  const unsigned char * D.27405;
  unsigned char D.27406;
  int D.27407;
  int D.20051;
  int iftmp.277;
  int D.20050;
  const char[6] * D.27414;
  unsigned char D.27415;
  int D.27416;
  unsigned char D.27417;
  int D.27418;
  const unsigned char * D.27423;
  unsigned char D.27424;
  int D.27425;
  const unsigned char * D.27426;
  unsigned char D.27427;
  int D.27428;
  const unsigned char * D.27433;
  unsigned char D.27434;
  int D.27435;
  const unsigned char * D.27436;
  unsigned char D.27437;
  int D.27438;
  const unsigned char * D.27443;
  unsigned char D.27444;
  int D.27445;
  const unsigned char * D.27446;
  unsigned char D.27447;
  int D.27448;
  int D.20060;
  int iftmp.278;
  int D.20059;
  const char[6] * D.27456;
  unsigned char D.27457;
  int D.27458;
  unsigned char D.27459;
  int D.27460;
  const unsigned char * D.27465;
  unsigned char D.27466;
  int D.27467;
  const unsigned char * D.27468;
  unsigned char D.27469;
  int D.27470;
  const unsigned char * D.27475;
  unsigned char D.27476;
  int D.27477;
  const unsigned char * D.27478;
  unsigned char D.27479;
  int D.27480;
  const unsigned char * D.27485;
  unsigned char D.27486;
  int D.27487;
  const unsigned char * D.27488;
  unsigned char D.27489;
  int D.27490;
  int D.20069;
  int iftmp.279;
  int D.20068;
  const char[6] * D.27498;
  unsigned char D.27499;
  int D.27500;
  unsigned char D.27501;
  int D.27502;
  const unsigned char * D.27507;
  unsigned char D.27508;
  int D.27509;
  const unsigned char * D.27510;
  unsigned char D.27511;
  int D.27512;
  const unsigned char * D.27517;
  unsigned char D.27518;
  int D.27519;
  const unsigned char * D.27520;
  unsigned char D.27521;
  int D.27522;
  const unsigned char * D.27527;
  unsigned char D.27528;
  int D.27529;
  const unsigned char * D.27530;
  unsigned char D.27531;
  int D.27532;
  int D.20078;
  int iftmp.280;
  int D.20077;
  const char[7] * D.27540;
  unsigned char D.27541;
  int D.27542;
  unsigned char D.27543;
  int D.27544;
  const unsigned char * D.27549;
  unsigned char D.27550;
  int D.27551;
  const unsigned char * D.27552;
  unsigned char D.27553;
  int D.27554;
  const unsigned char * D.27559;
  unsigned char D.27560;
  int D.27561;
  const unsigned char * D.27562;
  unsigned char D.27563;
  int D.27564;
  const unsigned char * D.27569;
  unsigned char D.27570;
  int D.27571;
  const unsigned char * D.27572;
  unsigned char D.27573;
  int D.27574;
  int D.20088;
  int iftmp.281;
  int D.20087;
  const char[7] * D.27581;
  unsigned char D.27582;
  int D.27583;
  unsigned char D.27584;
  int D.27585;
  const unsigned char * D.27590;
  unsigned char D.27591;
  int D.27592;
  const unsigned char * D.27593;
  unsigned char D.27594;
  int D.27595;
  const unsigned char * D.27600;
  unsigned char D.27601;
  int D.27602;
  const unsigned char * D.27603;
  unsigned char D.27604;
  int D.27605;
  const unsigned char * D.27610;
  unsigned char D.27611;
  int D.27612;
  const unsigned char * D.27613;
  unsigned char D.27614;
  int D.27615;
  int D.20097;
  int iftmp.282;
  int D.20096;
  const char[6] * D.27623;
  unsigned char D.27624;
  int D.27625;
  unsigned char D.27626;
  int D.27627;
  const unsigned char * D.27632;
  unsigned char D.27633;
  int D.27634;
  const unsigned char * D.27635;
  unsigned char D.27636;
  int D.27637;
  const unsigned char * D.27642;
  unsigned char D.27643;
  int D.27644;
  const unsigned char * D.27645;
  unsigned char D.27646;
  int D.27647;
  const unsigned char * D.27652;
  unsigned char D.27653;
  int D.27654;
  const unsigned char * D.27655;
  unsigned char D.27656;
  int D.27657;
  int D.20107;
  int iftmp.283;
  int D.20106;
  const char[7] * D.27664;
  unsigned char D.27665;
  int D.27666;
  unsigned char D.27667;
  int D.27668;
  const unsigned char * D.27673;
  unsigned char D.27674;
  int D.27675;
  const unsigned char * D.27676;
  unsigned char D.27677;
  int D.27678;
  const unsigned char * D.27683;
  unsigned char D.27684;
  int D.27685;
  const unsigned char * D.27686;
  unsigned char D.27687;
  int D.27688;
  const unsigned char * D.27693;
  unsigned char D.27694;
  int D.27695;
  const unsigned char * D.27696;
  unsigned char D.27697;
  int D.27698;
  int D.20116;
  int iftmp.284;
  int D.20115;
  const char[7] * D.27706;
  unsigned char D.27707;
  int D.27708;
  unsigned char D.27709;
  int D.27710;
  const unsigned char * D.27715;
  unsigned char D.27716;
  int D.27717;
  const unsigned char * D.27718;
  unsigned char D.27719;
  int D.27720;
  const unsigned char * D.27725;
  unsigned char D.27726;
  int D.27727;
  const unsigned char * D.27728;
  unsigned char D.27729;
  int D.27730;
  const unsigned char * D.27735;
  unsigned char D.27736;
  int D.27737;
  const unsigned char * D.27738;
  unsigned char D.27739;
  int D.27740;
  int D.20125;
  int iftmp.285;
  int D.20124;
  const char[7] * D.27748;
  unsigned char D.27749;
  int D.27750;
  unsigned char D.27751;
  int D.27752;
  const unsigned char * D.27757;
  unsigned char D.27758;
  int D.27759;
  const unsigned char * D.27760;
  unsigned char D.27761;
  int D.27762;
  const unsigned char * D.27767;
  unsigned char D.27768;
  int D.27769;
  const unsigned char * D.27770;
  unsigned char D.27771;
  int D.27772;
  const unsigned char * D.27777;
  unsigned char D.27778;
  int D.27779;
  const unsigned char * D.27780;
  unsigned char D.27781;
  int D.27782;
  int D.20134;
  int iftmp.286;
  int D.20133;
  const char[8] * D.27790;
  unsigned char D.27791;
  int D.27792;
  unsigned char D.27793;
  int D.27794;
  const unsigned char * D.27799;
  unsigned char D.27800;
  int D.27801;
  const unsigned char * D.27802;
  unsigned char D.27803;
  int D.27804;
  const unsigned char * D.27809;
  unsigned char D.27810;
  int D.27811;
  const unsigned char * D.27812;
  unsigned char D.27813;
  int D.27814;
  const unsigned char * D.27819;
  unsigned char D.27820;
  int D.27821;
  const unsigned char * D.27822;
  unsigned char D.27823;
  int D.27824;
  int D.20144;
  int iftmp.287;
  int D.20143;
  unsigned char D.27831;
  int D.27832;
  const unsigned char * D.27837;
  unsigned char D.27838;
  int D.27839;
  const unsigned char * D.27844;
  unsigned char D.27845;
  int D.27846;
  const unsigned char * D.27851;
  unsigned char D.27852;
  int D.27853;
  int D.20154;
  int iftmp.288;
  int D.20153;
  const char[5] * D.27860;
  unsigned char D.27861;
  int D.27862;
  unsigned char D.27863;
  int D.27864;
  const unsigned char * D.27869;
  unsigned char D.27870;
  int D.27871;
  const unsigned char * D.27872;
  unsigned char D.27873;
  int D.27874;
  const unsigned char * D.27879;
  unsigned char D.27880;
  int D.27881;
  const unsigned char * D.27882;
  unsigned char D.27883;
  int D.27884;
  const unsigned char * D.27889;
  unsigned char D.27890;
  int D.27891;
  const unsigned char * D.27892;
  unsigned char D.27893;
  int D.27894;
  unsigned char D.27898;
  unsigned int D.27901;
  unsigned int D.27902;
  unsigned int D.27905;
  short unsigned int D.27906;
  const char * name;
  const char * nspace;
  gboolean is_corlib;

  name = class->name;
  nspace = class->name_space;
  D.26955 = class->image;
  is_corlib = mono_is_corlib_image (D.26955);
  class->this_arg.byref = 1;
  class->this_arg.data.klass = class;
  class->this_arg.type = 18;
  class->byval_arg.data.klass = class;
  class->byval_arg.type = 18;
  if (is_corlib != 0) goto <D.26956>; else goto <D.26957>;
  <D.26956>:
  {
    size_t __s1_len;
    size_t __s2_len;

    __s2_len = 6;
    if (__s2_len <= 3) goto <D.26959>; else goto <D.26960>;
    <D.26959>:
    {
      const unsigned char * __s2;
      int __result;

      __s2 = nspace;
      D.26961 = "System";
      D.26962 = MEM[(const unsigned char *)D.26961];
      D.26963 = (int) D.26962;
      D.26964 = *__s2;
      D.26965 = (int) D.26964;
      __result = D.26963 - D.26965;
      {
        if (__s2_len != 0) goto <D.26966>; else goto <D.26967>;
        <D.26966>:
        if (__result == 0) goto <D.26968>; else goto <D.26969>;
        <D.26968>:
        D.26970 = &MEM[(void *)"System" + 1B];
        D.26971 = *D.26970;
        D.26972 = (int) D.26971;
        D.26973 = __s2 + 1;
        D.26974 = *D.26973;
        D.26975 = (int) D.26974;
        __result = D.26972 - D.26975;
        if (__s2_len > 1) goto <D.26976>; else goto <D.26977>;
        <D.26976>:
        if (__result == 0) goto <D.26978>; else goto <D.26979>;
        <D.26978>:
        D.26980 = &MEM[(void *)"System" + 2B];
        D.26981 = *D.26980;
        D.26982 = (int) D.26981;
        D.26983 = __s2 + 2;
        D.26984 = *D.26983;
        D.26985 = (int) D.26984;
        __result = D.26982 - D.26985;
        if (__s2_len > 2) goto <D.26986>; else goto <D.26987>;
        <D.26986>:
        if (__result == 0) goto <D.26988>; else goto <D.26989>;
        <D.26988>:
        D.26990 = &MEM[(void *)"System" + 3B];
        D.26991 = *D.26990;
        D.26992 = (int) D.26991;
        D.26993 = __s2 + 3;
        D.26994 = *D.26993;
        D.26995 = (int) D.26994;
        __result = D.26992 - D.26995;
        <D.26989>:
        <D.26987>:
        <D.26979>:
        <D.26977>:
        <D.26969>:
        <D.26967>:
      }
      D.19945 = __result;
    }
    iftmp.266 = -D.19945;
    goto <D.26996>;
    <D.26960>:
    iftmp.266 = __builtin_strcmp (nspace, "System");
    <D.26996>:
    D.19946 = iftmp.266;
  }
  if (D.19946 == 0) goto <D.26997>; else goto <D.26998>;
  <D.26997>:
  {
    size_t __s1_len;
    size_t __s2_len;

    __s2_len = 9;
    if (__s2_len <= 3) goto <D.27000>; else goto <D.27001>;
    <D.27000>:
    {
      const unsigned char * __s2;
      int __result;

      __s2 = name;
      D.27002 = "ValueType";
      D.27003 = MEM[(const unsigned char *)D.27002];
      D.27004 = (int) D.27003;
      D.27005 = *__s2;
      D.27006 = (int) D.27005;
      __result = D.27004 - D.27006;
      {
        if (__s2_len != 0) goto <D.27007>; else goto <D.27008>;
        <D.27007>:
        if (__result == 0) goto <D.27009>; else goto <D.27010>;
        <D.27009>:
        D.27011 = &MEM[(void *)"ValueType" + 1B];
        D.27012 = *D.27011;
        D.27013 = (int) D.27012;
        D.27014 = __s2 + 1;
        D.27015 = *D.27014;
        D.27016 = (int) D.27015;
        __result = D.27013 - D.27016;
        if (__s2_len > 1) goto <D.27017>; else goto <D.27018>;
        <D.27017>:
        if (__result == 0) goto <D.27019>; else goto <D.27020>;
        <D.27019>:
        D.27021 = &MEM[(void *)"ValueType" + 2B];
        D.27022 = *D.27021;
        D.27023 = (int) D.27022;
        D.27024 = __s2 + 2;
        D.27025 = *D.27024;
        D.27026 = (int) D.27025;
        __result = D.27023 - D.27026;
        if (__s2_len > 2) goto <D.27027>; else goto <D.27028>;
        <D.27027>:
        if (__result == 0) goto <D.27029>; else goto <D.27030>;
        <D.27029>:
        D.27031 = &MEM[(void *)"ValueType" + 3B];
        D.27032 = *D.27031;
        D.27033 = (int) D.27032;
        D.27034 = __s2 + 3;
        D.27035 = *D.27034;
        D.27036 = (int) D.27035;
        __result = D.27033 - D.27036;
        <D.27030>:
        <D.27028>:
        <D.27020>:
        <D.27018>:
        <D.27010>:
        <D.27008>:
      }
      D.19954 = __result;
    }
    iftmp.267 = -D.19954;
    goto <D.27037>;
    <D.27001>:
    iftmp.267 = __builtin_strcmp (name, "ValueType");
    <D.27037>:
    D.19955 = iftmp.267;
  }
  if (D.19955 == 0) goto <D.27038>; else goto <D.27039>;
  <D.27038>:
  class->blittable = 1;
  goto <D.27040>;
  <D.27039>:
  {
    size_t __s1_len;
    size_t __s2_len;

    __s2_len = 4;
    if (__s2_len <= 3) goto <D.27042>; else goto <D.27043>;
    <D.27042>:
    {
      const unsigned char * __s2;
      int __result;

      __s2 = name;
      D.27044 = "Enum";
      D.27045 = MEM[(const unsigned char *)D.27044];
      D.27046 = (int) D.27045;
      D.27047 = *__s2;
      D.27048 = (int) D.27047;
      __result = D.27046 - D.27048;
      {
        if (__s2_len != 0) goto <D.27049>; else goto <D.27050>;
        <D.27049>:
        if (__result == 0) goto <D.27051>; else goto <D.27052>;
        <D.27051>:
        D.27053 = &MEM[(void *)"Enum" + 1B];
        D.27054 = *D.27053;
        D.27055 = (int) D.27054;
        D.27056 = __s2 + 1;
        D.27057 = *D.27056;
        D.27058 = (int) D.27057;
        __result = D.27055 - D.27058;
        if (__s2_len > 1) goto <D.27059>; else goto <D.27060>;
        <D.27059>:
        if (__result == 0) goto <D.27061>; else goto <D.27062>;
        <D.27061>:
        D.27063 = &MEM[(void *)"Enum" + 2B];
        D.27064 = *D.27063;
        D.27065 = (int) D.27064;
        D.27066 = __s2 + 2;
        D.27067 = *D.27066;
        D.27068 = (int) D.27067;
        __result = D.27065 - D.27068;
        if (__s2_len > 2) goto <D.27069>; else goto <D.27070>;
        <D.27069>:
        if (__result == 0) goto <D.27071>; else goto <D.27072>;
        <D.27071>:
        D.27073 = &MEM[(void *)"Enum" + 3B];
        D.27074 = *D.27073;
        D.27075 = (int) D.27074;
        D.27076 = __s2 + 3;
        D.27077 = *D.27076;
        D.27078 = (int) D.27077;
        __result = D.27075 - D.27078;
        <D.27072>:
        <D.27070>:
        <D.27062>:
        <D.27060>:
        <D.27052>:
        <D.27050>:
      }
      D.19963 = __result;
    }
    iftmp.268 = -D.19963;
    goto <D.27079>;
    <D.27043>:
    iftmp.268 = __builtin_strcmp (name, "Enum");
    <D.27079>:
    D.19964 = iftmp.268;
  }
  if (D.19964 == 0) goto <D.27080>; else goto <D.27081>;
  <D.27080>:
  class->valuetype = 0;
  class->enumtype = 0;
  goto <D.27082>;
  <D.27081>:
  {
    size_t __s1_len;
    size_t __s2_len;

    __s2_len = 6;
    if (__s2_len <= 3) goto <D.27084>; else goto <D.27085>;
    <D.27084>:
    {
      const unsigned char * __s2;
      int __result;

      __s2 = name;
      D.27086 = "Object";
      D.27087 = MEM[(const unsigned char *)D.27086];
      D.27088 = (int) D.27087;
      D.27089 = *__s2;
      D.27090 = (int) D.27089;
      __result = D.27088 - D.27090;
      {
        if (__s2_len != 0) goto <D.27091>; else goto <D.27092>;
        <D.27091>:
        if (__result == 0) goto <D.27093>; else goto <D.27094>;
        <D.27093>:
        D.27095 = &MEM[(void *)"Object" + 1B];
        D.27096 = *D.27095;
        D.27097 = (int) D.27096;
        D.27098 = __s2 + 1;
        D.27099 = *D.27098;
        D.27100 = (int) D.27099;
        __result = D.27097 - D.27100;
        if (__s2_len > 1) goto <D.27101>; else goto <D.27102>;
        <D.27101>:
        if (__result == 0) goto <D.27103>; else goto <D.27104>;
        <D.27103>:
        D.27105 = &MEM[(void *)"Object" + 2B];
        D.27106 = *D.27105;
        D.27107 = (int) D.27106;
        D.27108 = __s2 + 2;
        D.27109 = *D.27108;
        D.27110 = (int) D.27109;
        __result = D.27107 - D.27110;
        if (__s2_len > 2) goto <D.27111>; else goto <D.27112>;
        <D.27111>:
        if (__result == 0) goto <D.27113>; else goto <D.27114>;
        <D.27113>:
        D.27115 = &MEM[(void *)"Object" + 3B];
        D.27116 = *D.27115;
        D.27117 = (int) D.27116;
        D.27118 = __s2 + 3;
        D.27119 = *D.27118;
        D.27120 = (int) D.27119;
        __result = D.27117 - D.27120;
        <D.27114>:
        <D.27112>:
        <D.27104>:
        <D.27102>:
        <D.27094>:
        <D.27092>:
      }
      D.19972 = __result;
    }
    iftmp.269 = -D.19972;
    goto <D.27121>;
    <D.27085>:
    iftmp.269 = __builtin_strcmp (name, "Object");
    <D.27121>:
    D.19973 = iftmp.269;
  }
  if (D.19973 == 0) goto <D.27122>; else goto <D.27123>;
  <D.27122>:
  class->byval_arg.type = 28;
  D.27124 = class->byval_arg.type;
  class->this_arg.type = D.27124;
  goto <D.27125>;
  <D.27123>:
  {
    size_t __s1_len;
    size_t __s2_len;

    __s2_len = 6;
    if (__s2_len <= 3) goto <D.27127>; else goto <D.27128>;
    <D.27127>:
    {
      const unsigned char * __s2;
      int __result;

      __s2 = name;
      D.27129 = "String";
      D.27130 = MEM[(const unsigned char *)D.27129];
      D.27131 = (int) D.27130;
      D.27132 = *__s2;
      D.27133 = (int) D.27132;
      __result = D.27131 - D.27133;
      {
        if (__s2_len != 0) goto <D.27134>; else goto <D.27135>;
        <D.27134>:
        if (__result == 0) goto <D.27136>; else goto <D.27137>;
        <D.27136>:
        D.27138 = &MEM[(void *)"String" + 1B];
        D.27139 = *D.27138;
        D.27140 = (int) D.27139;
        D.27141 = __s2 + 1;
        D.27142 = *D.27141;
        D.27143 = (int) D.27142;
        __result = D.27140 - D.27143;
        if (__s2_len > 1) goto <D.27144>; else goto <D.27145>;
        <D.27144>:
        if (__result == 0) goto <D.27146>; else goto <D.27147>;
        <D.27146>:
        D.27148 = &MEM[(void *)"String" + 2B];
        D.27149 = *D.27148;
        D.27150 = (int) D.27149;
        D.27151 = __s2 + 2;
        D.27152 = *D.27151;
        D.27153 = (int) D.27152;
        __result = D.27150 - D.27153;
        if (__s2_len > 2) goto <D.27154>; else goto <D.27155>;
        <D.27154>:
        if (__result == 0) goto <D.27156>; else goto <D.27157>;
        <D.27156>:
        D.27158 = &MEM[(void *)"String" + 3B];
        D.27159 = *D.27158;
        D.27160 = (int) D.27159;
        D.27161 = __s2 + 3;
        D.27162 = *D.27161;
        D.27163 = (int) D.27162;
        __result = D.27160 - D.27163;
        <D.27157>:
        <D.27155>:
        <D.27147>:
        <D.27145>:
        <D.27137>:
        <D.27135>:
      }
      D.19981 = __result;
    }
    iftmp.270 = -D.19981;
    goto <D.27164>;
    <D.27128>:
    iftmp.270 = __builtin_strcmp (name, "String");
    <D.27164>:
    D.19982 = iftmp.270;
  }
  if (D.19982 == 0) goto <D.27165>; else goto <D.27166>;
  <D.27165>:
  class->byval_arg.type = 14;
  D.27124 = class->byval_arg.type;
  class->this_arg.type = D.27124;
  goto <D.27167>;
  <D.27166>:
  {
    size_t __s1_len;
    size_t __s2_len;

    __s2_len = 14;
    if (__s2_len <= 3) goto <D.27169>; else goto <D.27170>;
    <D.27169>:
    {
      const unsigned char * __s2;
      int __result;

      __s2 = name;
      D.27171 = "TypedReference";
      D.27172 = MEM[(const unsigned char *)D.27171];
      D.27173 = (int) D.27172;
      D.27174 = *__s2;
      D.27175 = (int) D.27174;
      __result = D.27173 - D.27175;
      {
        if (__s2_len != 0) goto <D.27176>; else goto <D.27177>;
        <D.27176>:
        if (__result == 0) goto <D.27178>; else goto <D.27179>;
        <D.27178>:
        D.27180 = &MEM[(void *)"TypedReference" + 1B];
        D.27181 = *D.27180;
        D.27182 = (int) D.27181;
        D.27183 = __s2 + 1;
        D.27184 = *D.27183;
        D.27185 = (int) D.27184;
        __result = D.27182 - D.27185;
        if (__s2_len > 1) goto <D.27186>; else goto <D.27187>;
        <D.27186>:
        if (__result == 0) goto <D.27188>; else goto <D.27189>;
        <D.27188>:
        D.27190 = &MEM[(void *)"TypedReference" + 2B];
        D.27191 = *D.27190;
        D.27192 = (int) D.27191;
        D.27193 = __s2 + 2;
        D.27194 = *D.27193;
        D.27195 = (int) D.27194;
        __result = D.27192 - D.27195;
        if (__s2_len > 2) goto <D.27196>; else goto <D.27197>;
        <D.27196>:
        if (__result == 0) goto <D.27198>; else goto <D.27199>;
        <D.27198>:
        D.27200 = &MEM[(void *)"TypedReference" + 3B];
        D.27201 = *D.27200;
        D.27202 = (int) D.27201;
        D.27203 = __s2 + 3;
        D.27204 = *D.27203;
        D.27205 = (int) D.27204;
        __result = D.27202 - D.27205;
        <D.27199>:
        <D.27197>:
        <D.27189>:
        <D.27187>:
        <D.27179>:
        <D.27177>:
      }
      D.19990 = __result;
    }
    iftmp.271 = -D.19990;
    goto <D.27206>;
    <D.27170>:
    iftmp.271 = __builtin_strcmp (name, "TypedReference");
    <D.27206>:
    D.19991 = iftmp.271;
  }
  if (D.19991 == 0) goto <D.27207>; else goto <D.27208>;
  <D.27207>:
  class->byval_arg.type = 22;
  D.27124 = class->byval_arg.type;
  class->this_arg.type = D.27124;
  <D.27208>:
  <D.27167>:
  <D.27125>:
  <D.27082>:
  <D.27040>:
  <D.26998>:
  <D.26957>:
  D.27209 = BIT_FIELD_REF <*class, 32, 160>;
  D.27210 = D.27209 & 8;
  if (D.27210 != 0) goto <D.27211>; else goto <D.27212>;
  <D.27211>:
  {
    int t;

    t = 17;
    if (is_corlib != 0) goto <D.27213>; else goto <D.27214>;
    <D.27213>:
    {
      size_t __s1_len;
      size_t __s2_len;

      __s2_len = 6;
      if (__s2_len <= 3) goto <D.27216>; else goto <D.27217>;
      <D.27216>:
      {
        const unsigned char * __s2;
        int __result;

        __s2 = nspace;
        D.26961 = "System";
        D.26962 = MEM[(const unsigned char *)D.26961];
        D.26963 = (int) D.26962;
        D.27218 = *__s2;
        D.27219 = (int) D.27218;
        __result = D.26963 - D.27219;
        {
          if (__s2_len != 0) goto <D.27220>; else goto <D.27221>;
          <D.27220>:
          if (__result == 0) goto <D.27222>; else goto <D.27223>;
          <D.27222>:
          D.26970 = &MEM[(void *)"System" + 1B];
          D.26971 = *D.26970;
          D.26972 = (int) D.26971;
          D.27224 = __s2 + 1;
          D.27225 = *D.27224;
          D.27226 = (int) D.27225;
          __result = D.26972 - D.27226;
          if (__s2_len > 1) goto <D.27227>; else goto <D.27228>;
          <D.27227>:
          if (__result == 0) goto <D.27229>; else goto <D.27230>;
          <D.27229>:
          D.26980 = &MEM[(void *)"System" + 2B];
          D.26981 = *D.26980;
          D.26982 = (int) D.26981;
          D.27231 = __s2 + 2;
          D.27232 = *D.27231;
          D.27233 = (int) D.27232;
          __result = D.26982 - D.27233;
          if (__s2_len > 2) goto <D.27234>; else goto <D.27235>;
          <D.27234>:
          if (__result == 0) goto <D.27236>; else goto <D.27237>;
          <D.27236>:
          D.26990 = &MEM[(void *)"System" + 3B];
          D.26991 = *D.26990;
          D.26992 = (int) D.26991;
          D.27238 = __s2 + 3;
          D.27239 = *D.27238;
          D.27240 = (int) D.27239;
          __result = D.26992 - D.27240;
          <D.27237>:
          <D.27235>:
          <D.27230>:
          <D.27228>:
          <D.27223>:
          <D.27221>:
        }
        D.20000 = __result;
      }
      iftmp.272 = -D.20000;
      goto <D.27241>;
      <D.27217>:
      iftmp.272 = __builtin_strcmp (nspace, "System");
      <D.27241>:
      D.20001 = iftmp.272;
    }
    if (D.20001 == 0) goto <D.27242>; else goto <D.27243>;
    <D.27242>:
    D.27244 = *name;
    D.27245 = (int) D.27244;
    switch (D.27245) <default: <D.20155>, case 66: <D.20002>, case 67: <D.20022>, case 68: <D.20032>, case 73: <D.20042>, case 83: <D.20079>, case 84: <D.20135>, case 85: <D.20098>, case 86: <D.20145>>
    <D.20002>:
    {
      size_t __s1_len;
      size_t __s2_len;

      __s2_len = 7;
      if (__s2_len <= 3) goto <D.27247>; else goto <D.27248>;
      <D.27247>:
      {
        const unsigned char * __s2;
        int __result;

        __s2 = name;
        D.27249 = "Boolean";
        D.27250 = MEM[(const unsigned char *)D.27249];
        D.27251 = (int) D.27250;
        D.27252 = *__s2;
        D.27253 = (int) D.27252;
        __result = D.27251 - D.27253;
        {
          if (__s2_len != 0) goto <D.27254>; else goto <D.27255>;
          <D.27254>:
          if (__result == 0) goto <D.27256>; else goto <D.27257>;
          <D.27256>:
          D.27258 = &MEM[(void *)"Boolean" + 1B];
          D.27259 = *D.27258;
          D.27260 = (int) D.27259;
          D.27261 = __s2 + 1;
          D.27262 = *D.27261;
          D.27263 = (int) D.27262;
          __result = D.27260 - D.27263;
          if (__s2_len > 1) goto <D.27264>; else goto <D.27265>;
          <D.27264>:
          if (__result == 0) goto <D.27266>; else goto <D.27267>;
          <D.27266>:
          D.27268 = &MEM[(void *)"Boolean" + 2B];
          D.27269 = *D.27268;
          D.27270 = (int) D.27269;
          D.27271 = __s2 + 2;
          D.27272 = *D.27271;
          D.27273 = (int) D.27272;
          __result = D.27270 - D.27273;
          if (__s2_len > 2) goto <D.27274>; else goto <D.27275>;
          <D.27274>:
          if (__result == 0) goto <D.27276>; else goto <D.27277>;
          <D.27276>:
          D.27278 = &MEM[(void *)"Boolean" + 3B];
          D.27279 = *D.27278;
          D.27280 = (int) D.27279;
          D.27281 = __s2 + 3;
          D.27282 = *D.27281;
          D.27283 = (int) D.27282;
          __result = D.27280 - D.27283;
          <D.27277>:
          <D.27275>:
          <D.27267>:
          <D.27265>:
          <D.27257>:
          <D.27255>:
        }
        D.20010 = __result;
      }
      iftmp.273 = -D.20010;
      goto <D.27284>;
      <D.27248>:
      iftmp.273 = __builtin_strcmp (name, "Boolean");
      <D.27284>:
      D.20011 = iftmp.273;
    }
    if (D.20011 == 0) goto <D.27285>; else goto <D.27286>;
    <D.27285>:
    t = 2;
    goto <D.27287>;
    <D.27286>:
    {
      size_t __s1_len;
      size_t __s2_len;

      __s2_len = 4;
      if (__s2_len <= 3) goto <D.27289>; else goto <D.27290>;
      <D.27289>:
      {
        const unsigned char * __s2;
        int __result;

        __s2 = name;
        D.27291 = "Byte";
        D.27292 = MEM[(const unsigned char *)D.27291];
        D.27293 = (int) D.27292;
        D.27294 = *__s2;
        D.27295 = (int) D.27294;
        __result = D.27293 - D.27295;
        {
          if (__s2_len != 0) goto <D.27296>; else goto <D.27297>;
          <D.27296>:
          if (__result == 0) goto <D.27298>; else goto <D.27299>;
          <D.27298>:
          D.27300 = &MEM[(void *)"Byte" + 1B];
          D.27301 = *D.27300;
          D.27302 = (int) D.27301;
          D.27303 = __s2 + 1;
          D.27304 = *D.27303;
          D.27305 = (int) D.27304;
          __result = D.27302 - D.27305;
          if (__s2_len > 1) goto <D.27306>; else goto <D.27307>;
          <D.27306>:
          if (__result == 0) goto <D.27308>; else goto <D.27309>;
          <D.27308>:
          D.27310 = &MEM[(void *)"Byte" + 2B];
          D.27311 = *D.27310;
          D.27312 = (int) D.27311;
          D.27313 = __s2 + 2;
          D.27314 = *D.27313;
          D.27315 = (int) D.27314;
          __result = D.27312 - D.27315;
          if (__s2_len > 2) goto <D.27316>; else goto <D.27317>;
          <D.27316>:
          if (__result == 0) goto <D.27318>; else goto <D.27319>;
          <D.27318>:
          D.27320 = &MEM[(void *)"Byte" + 3B];
          D.27321 = *D.27320;
          D.27322 = (int) D.27321;
          D.27323 = __s2 + 3;
          D.27324 = *D.27323;
          D.27325 = (int) D.27324;
          __result = D.27322 - D.27325;
          <D.27319>:
          <D.27317>:
          <D.27309>:
          <D.27307>:
          <D.27299>:
          <D.27297>:
        }
        D.20019 = __result;
      }
      iftmp.274 = -D.20019;
      goto <D.27326>;
      <D.27290>:
      iftmp.274 = __builtin_strcmp (name, "Byte");
      <D.27326>:
      D.20020 = iftmp.274;
    }
    if (D.20020 == 0) goto <D.27327>; else goto <D.27328>;
    <D.27327>:
    t = 5;
    class->blittable = 1;
    <D.27328>:
    <D.27287>:
    goto <D.20021>;
    <D.20022>:
    {
      size_t __s1_len;
      size_t __s2_len;

      __s2_len = 4;
      if (__s2_len <= 3) goto <D.27330>; else goto <D.27331>;
      <D.27330>:
      {
        const unsigned char * __s2;
        int __result;

        __s2 = name;
        D.27332 = "Char";
        D.27333 = MEM[(const unsigned char *)D.27332];
        D.27334 = (int) D.27333;
        D.27335 = *__s2;
        D.27336 = (int) D.27335;
        __result = D.27334 - D.27336;
        {
          if (__s2_len != 0) goto <D.27337>; else goto <D.27338>;
          <D.27337>:
          if (__result == 0) goto <D.27339>; else goto <D.27340>;
          <D.27339>:
          D.27341 = &MEM[(void *)"Char" + 1B];
          D.27342 = *D.27341;
          D.27343 = (int) D.27342;
          D.27344 = __s2 + 1;
          D.27345 = *D.27344;
          D.27346 = (int) D.27345;
          __result = D.27343 - D.27346;
          if (__s2_len > 1) goto <D.27347>; else goto <D.27348>;
          <D.27347>:
          if (__result == 0) goto <D.27349>; else goto <D.27350>;
          <D.27349>:
          D.27351 = &MEM[(void *)"Char" + 2B];
          D.27352 = *D.27351;
          D.27353 = (int) D.27352;
          D.27354 = __s2 + 2;
          D.27355 = *D.27354;
          D.27356 = (int) D.27355;
          __result = D.27353 - D.27356;
          if (__s2_len > 2) goto <D.27357>; else goto <D.27358>;
          <D.27357>:
          if (__result == 0) goto <D.27359>; else goto <D.27360>;
          <D.27359>:
          D.27361 = &MEM[(void *)"Char" + 3B];
          D.27362 = *D.27361;
          D.27363 = (int) D.27362;
          D.27364 = __s2 + 3;
          D.27365 = *D.27364;
          D.27366 = (int) D.27365;
          __result = D.27363 - D.27366;
          <D.27360>:
          <D.27358>:
          <D.27350>:
          <D.27348>:
          <D.27340>:
          <D.27338>:
        }
        D.20030 = __result;
      }
      iftmp.275 = -D.20030;
      goto <D.27367>;
      <D.27331>:
      iftmp.275 = __builtin_strcmp (name, "Char");
      <D.27367>:
      D.20031 = iftmp.275;
    }
    if (D.20031 == 0) goto <D.27368>; else goto <D.27369>;
    <D.27368>:
    t = 3;
    <D.27369>:
    goto <D.20021>;
    <D.20032>:
    {
      size_t __s1_len;
      size_t __s2_len;

      __s2_len = 6;
      if (__s2_len <= 3) goto <D.27371>; else goto <D.27372>;
      <D.27371>:
      {
        const unsigned char * __s2;
        int __result;

        __s2 = name;
        D.27373 = "Double";
        D.27374 = MEM[(const unsigned char *)D.27373];
        D.27375 = (int) D.27374;
        D.27376 = *__s2;
        D.27377 = (int) D.27376;
        __result = D.27375 - D.27377;
        {
          if (__s2_len != 0) goto <D.27378>; else goto <D.27379>;
          <D.27378>:
          if (__result == 0) goto <D.27380>; else goto <D.27381>;
          <D.27380>:
          D.27382 = &MEM[(void *)"Double" + 1B];
          D.27383 = *D.27382;
          D.27384 = (int) D.27383;
          D.27385 = __s2 + 1;
          D.27386 = *D.27385;
          D.27387 = (int) D.27386;
          __result = D.27384 - D.27387;
          if (__s2_len > 1) goto <D.27388>; else goto <D.27389>;
          <D.27388>:
          if (__result == 0) goto <D.27390>; else goto <D.27391>;
          <D.27390>:
          D.27392 = &MEM[(void *)"Double" + 2B];
          D.27393 = *D.27392;
          D.27394 = (int) D.27393;
          D.27395 = __s2 + 2;
          D.27396 = *D.27395;
          D.27397 = (int) D.27396;
          __result = D.27394 - D.27397;
          if (__s2_len > 2) goto <D.27398>; else goto <D.27399>;
          <D.27398>:
          if (__result == 0) goto <D.27400>; else goto <D.27401>;
          <D.27400>:
          D.27402 = &MEM[(void *)"Double" + 3B];
          D.27403 = *D.27402;
          D.27404 = (int) D.27403;
          D.27405 = __s2 + 3;
          D.27406 = *D.27405;
          D.27407 = (int) D.27406;
          __result = D.27404 - D.27407;
          <D.27401>:
          <D.27399>:
          <D.27391>:
          <D.27389>:
          <D.27381>:
          <D.27379>:
        }
        D.20040 = __result;
      }
      iftmp.276 = -D.20040;
      goto <D.27408>;
      <D.27372>:
      iftmp.276 = __builtin_strcmp (name, "Double");
      <D.27408>:
      D.20041 = iftmp.276;
    }
    if (D.20041 == 0) goto <D.27409>; else goto <D.27410>;
    <D.27409>:
    t = 13;
    class->blittable = 1;
    <D.27410>:
    goto <D.20021>;
    <D.20042>:
    {
      size_t __s1_len;
      size_t __s2_len;

      __s2_len = 5;
      if (__s2_len <= 3) goto <D.27412>; else goto <D.27413>;
      <D.27412>:
      {
        const unsigned char * __s2;
        int __result;

        __s2 = name;
        D.27414 = "Int32";
        D.27415 = MEM[(const unsigned char *)D.27414];
        D.27416 = (int) D.27415;
        D.27417 = *__s2;
        D.27418 = (int) D.27417;
        __result = D.27416 - D.27418;
        {
          if (__s2_len != 0) goto <D.27419>; else goto <D.27420>;
          <D.27419>:
          if (__result == 0) goto <D.27421>; else goto <D.27422>;
          <D.27421>:
          D.27423 = &MEM[(void *)"Int32" + 1B];
          D.27424 = *D.27423;
          D.27425 = (int) D.27424;
          D.27426 = __s2 + 1;
          D.27427 = *D.27426;
          D.27428 = (int) D.27427;
          __result = D.27425 - D.27428;
          if (__s2_len > 1) goto <D.27429>; else goto <D.27430>;
          <D.27429>:
          if (__result == 0) goto <D.27431>; else goto <D.27432>;
          <D.27431>:
          D.27433 = &MEM[(void *)"Int32" + 2B];
          D.27434 = *D.27433;
          D.27435 = (int) D.27434;
          D.27436 = __s2 + 2;
          D.27437 = *D.27436;
          D.27438 = (int) D.27437;
          __result = D.27435 - D.27438;
          if (__s2_len > 2) goto <D.27439>; else goto <D.27440>;
          <D.27439>:
          if (__result == 0) goto <D.27441>; else goto <D.27442>;
          <D.27441>:
          D.27443 = &MEM[(void *)"Int32" + 3B];
          D.27444 = *D.27443;
          D.27445 = (int) D.27444;
          D.27446 = __s2 + 3;
          D.27447 = *D.27446;
          D.27448 = (int) D.27447;
          __result = D.27445 - D.27448;
          <D.27442>:
          <D.27440>:
          <D.27432>:
          <D.27430>:
          <D.27422>:
          <D.27420>:
        }
        D.20050 = __result;
      }
      iftmp.277 = -D.20050;
      goto <D.27449>;
      <D.27413>:
      iftmp.277 = __builtin_strcmp (name, "Int32");
      <D.27449>:
      D.20051 = iftmp.277;
    }
    if (D.20051 == 0) goto <D.27450>; else goto <D.27451>;
    <D.27450>:
    t = 8;
    class->blittable = 1;
    goto <D.27452>;
    <D.27451>:
    {
      size_t __s1_len;
      size_t __s2_len;

      __s2_len = 5;
      if (__s2_len <= 3) goto <D.27454>; else goto <D.27455>;
      <D.27454>:
      {
        const unsigned char * __s2;
        int __result;

        __s2 = name;
        D.27456 = "Int16";
        D.27457 = MEM[(const unsigned char *)D.27456];
        D.27458 = (int) D.27457;
        D.27459 = *__s2;
        D.27460 = (int) D.27459;
        __result = D.27458 - D.27460;
        {
          if (__s2_len != 0) goto <D.27461>; else goto <D.27462>;
          <D.27461>:
          if (__result == 0) goto <D.27463>; else goto <D.27464>;
          <D.27463>:
          D.27465 = &MEM[(void *)"Int16" + 1B];
          D.27466 = *D.27465;
          D.27467 = (int) D.27466;
          D.27468 = __s2 + 1;
          D.27469 = *D.27468;
          D.27470 = (int) D.27469;
          __result = D.27467 - D.27470;
          if (__s2_len > 1) goto <D.27471>; else goto <D.27472>;
          <D.27471>:
          if (__result == 0) goto <D.27473>; else goto <D.27474>;
          <D.27473>:
          D.27475 = &MEM[(void *)"Int16" + 2B];
          D.27476 = *D.27475;
          D.27477 = (int) D.27476;
          D.27478 = __s2 + 2;
          D.27479 = *D.27478;
          D.27480 = (int) D.27479;
          __result = D.27477 - D.27480;
          if (__s2_len > 2) goto <D.27481>; else goto <D.27482>;
          <D.27481>:
          if (__result == 0) goto <D.27483>; else goto <D.27484>;
          <D.27483>:
          D.27485 = &MEM[(void *)"Int16" + 3B];
          D.27486 = *D.27485;
          D.27487 = (int) D.27486;
          D.27488 = __s2 + 3;
          D.27489 = *D.27488;
          D.27490 = (int) D.27489;
          __result = D.27487 - D.27490;
          <D.27484>:
          <D.27482>:
          <D.27474>:
          <D.27472>:
          <D.27464>:
          <D.27462>:
        }
        D.20059 = __result;
      }
      iftmp.278 = -D.20059;
      goto <D.27491>;
      <D.27455>:
      iftmp.278 = __builtin_strcmp (name, "Int16");
      <D.27491>:
      D.20060 = iftmp.278;
    }
    if (D.20060 == 0) goto <D.27492>; else goto <D.27493>;
    <D.27492>:
    t = 6;
    class->blittable = 1;
    goto <D.27494>;
    <D.27493>:
    {
      size_t __s1_len;
      size_t __s2_len;

      __s2_len = 5;
      if (__s2_len <= 3) goto <D.27496>; else goto <D.27497>;
      <D.27496>:
      {
        const unsigned char * __s2;
        int __result;

        __s2 = name;
        D.27498 = "Int64";
        D.27499 = MEM[(const unsigned char *)D.27498];
        D.27500 = (int) D.27499;
        D.27501 = *__s2;
        D.27502 = (int) D.27501;
        __result = D.27500 - D.27502;
        {
          if (__s2_len != 0) goto <D.27503>; else goto <D.27504>;
          <D.27503>:
          if (__result == 0) goto <D.27505>; else goto <D.27506>;
          <D.27505>:
          D.27507 = &MEM[(void *)"Int64" + 1B];
          D.27508 = *D.27507;
          D.27509 = (int) D.27508;
          D.27510 = __s2 + 1;
          D.27511 = *D.27510;
          D.27512 = (int) D.27511;
          __result = D.27509 - D.27512;
          if (__s2_len > 1) goto <D.27513>; else goto <D.27514>;
          <D.27513>:
          if (__result == 0) goto <D.27515>; else goto <D.27516>;
          <D.27515>:
          D.27517 = &MEM[(void *)"Int64" + 2B];
          D.27518 = *D.27517;
          D.27519 = (int) D.27518;
          D.27520 = __s2 + 2;
          D.27521 = *D.27520;
          D.27522 = (int) D.27521;
          __result = D.27519 - D.27522;
          if (__s2_len > 2) goto <D.27523>; else goto <D.27524>;
          <D.27523>:
          if (__result == 0) goto <D.27525>; else goto <D.27526>;
          <D.27525>:
          D.27527 = &MEM[(void *)"Int64" + 3B];
          D.27528 = *D.27527;
          D.27529 = (int) D.27528;
          D.27530 = __s2 + 3;
          D.27531 = *D.27530;
          D.27532 = (int) D.27531;
          __result = D.27529 - D.27532;
          <D.27526>:
          <D.27524>:
          <D.27516>:
          <D.27514>:
          <D.27506>:
          <D.27504>:
        }
        D.20068 = __result;
      }
      iftmp.279 = -D.20068;
      goto <D.27533>;
      <D.27497>:
      iftmp.279 = __builtin_strcmp (name, "Int64");
      <D.27533>:
      D.20069 = iftmp.279;
    }
    if (D.20069 == 0) goto <D.27534>; else goto <D.27535>;
    <D.27534>:
    t = 10;
    class->blittable = 1;
    goto <D.27536>;
    <D.27535>:
    {
      size_t __s1_len;
      size_t __s2_len;

      __s2_len = 6;
      if (__s2_len <= 3) goto <D.27538>; else goto <D.27539>;
      <D.27538>:
      {
        const unsigned char * __s2;
        int __result;

        __s2 = name;
        D.27540 = "IntPtr";
        D.27541 = MEM[(const unsigned char *)D.27540];
        D.27542 = (int) D.27541;
        D.27543 = *__s2;
        D.27544 = (int) D.27543;
        __result = D.27542 - D.27544;
        {
          if (__s2_len != 0) goto <D.27545>; else goto <D.27546>;
          <D.27545>:
          if (__result == 0) goto <D.27547>; else goto <D.27548>;
          <D.27547>:
          D.27549 = &MEM[(void *)"IntPtr" + 1B];
          D.27550 = *D.27549;
          D.27551 = (int) D.27550;
          D.27552 = __s2 + 1;
          D.27553 = *D.27552;
          D.27554 = (int) D.27553;
          __result = D.27551 - D.27554;
          if (__s2_len > 1) goto <D.27555>; else goto <D.27556>;
          <D.27555>:
          if (__result == 0) goto <D.27557>; else goto <D.27558>;
          <D.27557>:
          D.27559 = &MEM[(void *)"IntPtr" + 2B];
          D.27560 = *D.27559;
          D.27561 = (int) D.27560;
          D.27562 = __s2 + 2;
          D.27563 = *D.27562;
          D.27564 = (int) D.27563;
          __result = D.27561 - D.27564;
          if (__s2_len > 2) goto <D.27565>; else goto <D.27566>;
          <D.27565>:
          if (__result == 0) goto <D.27567>; else goto <D.27568>;
          <D.27567>:
          D.27569 = &MEM[(void *)"IntPtr" + 3B];
          D.27570 = *D.27569;
          D.27571 = (int) D.27570;
          D.27572 = __s2 + 3;
          D.27573 = *D.27572;
          D.27574 = (int) D.27573;
          __result = D.27571 - D.27574;
          <D.27568>:
          <D.27566>:
          <D.27558>:
          <D.27556>:
          <D.27548>:
          <D.27546>:
        }
        D.20077 = __result;
      }
      iftmp.280 = -D.20077;
      goto <D.27575>;
      <D.27539>:
      iftmp.280 = __builtin_strcmp (name, "IntPtr");
      <D.27575>:
      D.20078 = iftmp.280;
    }
    if (D.20078 == 0) goto <D.27576>; else goto <D.27577>;
    <D.27576>:
    t = 24;
    class->blittable = 1;
    <D.27577>:
    <D.27536>:
    <D.27494>:
    <D.27452>:
    goto <D.20021>;
    <D.20079>:
    {
      size_t __s1_len;
      size_t __s2_len;

      __s2_len = 6;
      if (__s2_len <= 3) goto <D.27579>; else goto <D.27580>;
      <D.27579>:
      {
        const unsigned char * __s2;
        int __result;

        __s2 = name;
        D.27581 = "Single";
        D.27582 = MEM[(const unsigned char *)D.27581];
        D.27583 = (int) D.27582;
        D.27584 = *__s2;
        D.27585 = (int) D.27584;
        __result = D.27583 - D.27585;
        {
          if (__s2_len != 0) goto <D.27586>; else goto <D.27587>;
          <D.27586>:
          if (__result == 0) goto <D.27588>; else goto <D.27589>;
          <D.27588>:
          D.27590 = &MEM[(void *)"Single" + 1B];
          D.27591 = *D.27590;
          D.27592 = (int) D.27591;
          D.27593 = __s2 + 1;
          D.27594 = *D.27593;
          D.27595 = (int) D.27594;
          __result = D.27592 - D.27595;
          if (__s2_len > 1) goto <D.27596>; else goto <D.27597>;
          <D.27596>:
          if (__result == 0) goto <D.27598>; else goto <D.27599>;
          <D.27598>:
          D.27600 = &MEM[(void *)"Single" + 2B];
          D.27601 = *D.27600;
          D.27602 = (int) D.27601;
          D.27603 = __s2 + 2;
          D.27604 = *D.27603;
          D.27605 = (int) D.27604;
          __result = D.27602 - D.27605;
          if (__s2_len > 2) goto <D.27606>; else goto <D.27607>;
          <D.27606>:
          if (__result == 0) goto <D.27608>; else goto <D.27609>;
          <D.27608>:
          D.27610 = &MEM[(void *)"Single" + 3B];
          D.27611 = *D.27610;
          D.27612 = (int) D.27611;
          D.27613 = __s2 + 3;
          D.27614 = *D.27613;
          D.27615 = (int) D.27614;
          __result = D.27612 - D.27615;
          <D.27609>:
          <D.27607>:
          <D.27599>:
          <D.27597>:
          <D.27589>:
          <D.27587>:
        }
        D.20087 = __result;
      }
      iftmp.281 = -D.20087;
      goto <D.27616>;
      <D.27580>:
      iftmp.281 = __builtin_strcmp (name, "Single");
      <D.27616>:
      D.20088 = iftmp.281;
    }
    if (D.20088 == 0) goto <D.27617>; else goto <D.27618>;
    <D.27617>:
    t = 12;
    class->blittable = 1;
    goto <D.27619>;
    <D.27618>:
    {
      size_t __s1_len;
      size_t __s2_len;

      __s2_len = 5;
      if (__s2_len <= 3) goto <D.27621>; else goto <D.27622>;
      <D.27621>:
      {
        const unsigned char * __s2;
        int __result;

        __s2 = name;
        D.27623 = "SByte";
        D.27624 = MEM[(const unsigned char *)D.27623];
        D.27625 = (int) D.27624;
        D.27626 = *__s2;
        D.27627 = (int) D.27626;
        __result = D.27625 - D.27627;
        {
          if (__s2_len != 0) goto <D.27628>; else goto <D.27629>;
          <D.27628>:
          if (__result == 0) goto <D.27630>; else goto <D.27631>;
          <D.27630>:
          D.27632 = &MEM[(void *)"SByte" + 1B];
          D.27633 = *D.27632;
          D.27634 = (int) D.27633;
          D.27635 = __s2 + 1;
          D.27636 = *D.27635;
          D.27637 = (int) D.27636;
          __result = D.27634 - D.27637;
          if (__s2_len > 1) goto <D.27638>; else goto <D.27639>;
          <D.27638>:
          if (__result == 0) goto <D.27640>; else goto <D.27641>;
          <D.27640>:
          D.27642 = &MEM[(void *)"SByte" + 2B];
          D.27643 = *D.27642;
          D.27644 = (int) D.27643;
          D.27645 = __s2 + 2;
          D.27646 = *D.27645;
          D.27647 = (int) D.27646;
          __result = D.27644 - D.27647;
          if (__s2_len > 2) goto <D.27648>; else goto <D.27649>;
          <D.27648>:
          if (__result == 0) goto <D.27650>; else goto <D.27651>;
          <D.27650>:
          D.27652 = &MEM[(void *)"SByte" + 3B];
          D.27653 = *D.27652;
          D.27654 = (int) D.27653;
          D.27655 = __s2 + 3;
          D.27656 = *D.27655;
          D.27657 = (int) D.27656;
          __result = D.27654 - D.27657;
          <D.27651>:
          <D.27649>:
          <D.27641>:
          <D.27639>:
          <D.27631>:
          <D.27629>:
        }
        D.20096 = __result;
      }
      iftmp.282 = -D.20096;
      goto <D.27658>;
      <D.27622>:
      iftmp.282 = __builtin_strcmp (name, "SByte");
      <D.27658>:
      D.20097 = iftmp.282;
    }
    if (D.20097 == 0) goto <D.27659>; else goto <D.27660>;
    <D.27659>:
    t = 4;
    class->blittable = 1;
    <D.27660>:
    <D.27619>:
    goto <D.20021>;
    <D.20098>:
    {
      size_t __s1_len;
      size_t __s2_len;

      __s2_len = 6;
      if (__s2_len <= 3) goto <D.27662>; else goto <D.27663>;
      <D.27662>:
      {
        const unsigned char * __s2;
        int __result;

        __s2 = name;
        D.27664 = "UInt32";
        D.27665 = MEM[(const unsigned char *)D.27664];
        D.27666 = (int) D.27665;
        D.27667 = *__s2;
        D.27668 = (int) D.27667;
        __result = D.27666 - D.27668;
        {
          if (__s2_len != 0) goto <D.27669>; else goto <D.27670>;
          <D.27669>:
          if (__result == 0) goto <D.27671>; else goto <D.27672>;
          <D.27671>:
          D.27673 = &MEM[(void *)"UInt32" + 1B];
          D.27674 = *D.27673;
          D.27675 = (int) D.27674;
          D.27676 = __s2 + 1;
          D.27677 = *D.27676;
          D.27678 = (int) D.27677;
          __result = D.27675 - D.27678;
          if (__s2_len > 1) goto <D.27679>; else goto <D.27680>;
          <D.27679>:
          if (__result == 0) goto <D.27681>; else goto <D.27682>;
          <D.27681>:
          D.27683 = &MEM[(void *)"UInt32" + 2B];
          D.27684 = *D.27683;
          D.27685 = (int) D.27684;
          D.27686 = __s2 + 2;
          D.27687 = *D.27686;
          D.27688 = (int) D.27687;
          __result = D.27685 - D.27688;
          if (__s2_len > 2) goto <D.27689>; else goto <D.27690>;
          <D.27689>:
          if (__result == 0) goto <D.27691>; else goto <D.27692>;
          <D.27691>:
          D.27693 = &MEM[(void *)"UInt32" + 3B];
          D.27694 = *D.27693;
          D.27695 = (int) D.27694;
          D.27696 = __s2 + 3;
          D.27697 = *D.27696;
          D.27698 = (int) D.27697;
          __result = D.27695 - D.27698;
          <D.27692>:
          <D.27690>:
          <D.27682>:
          <D.27680>:
          <D.27672>:
          <D.27670>:
        }
        D.20106 = __result;
      }
      iftmp.283 = -D.20106;
      goto <D.27699>;
      <D.27663>:
      iftmp.283 = __builtin_strcmp (name, "UInt32");
      <D.27699>:
      D.20107 = iftmp.283;
    }
    if (D.20107 == 0) goto <D.27700>; else goto <D.27701>;
    <D.27700>:
    t = 9;
    class->blittable = 1;
    goto <D.27702>;
    <D.27701>:
    {
      size_t __s1_len;
      size_t __s2_len;

      __s2_len = 6;
      if (__s2_len <= 3) goto <D.27704>; else goto <D.27705>;
      <D.27704>:
      {
        const unsigned char * __s2;
        int __result;

        __s2 = name;
        D.27706 = "UInt16";
        D.27707 = MEM[(const unsigned char *)D.27706];
        D.27708 = (int) D.27707;
        D.27709 = *__s2;
        D.27710 = (int) D.27709;
        __result = D.27708 - D.27710;
        {
          if (__s2_len != 0) goto <D.27711>; else goto <D.27712>;
          <D.27711>:
          if (__result == 0) goto <D.27713>; else goto <D.27714>;
          <D.27713>:
          D.27715 = &MEM[(void *)"UInt16" + 1B];
          D.27716 = *D.27715;
          D.27717 = (int) D.27716;
          D.27718 = __s2 + 1;
          D.27719 = *D.27718;
          D.27720 = (int) D.27719;
          __result = D.27717 - D.27720;
          if (__s2_len > 1) goto <D.27721>; else goto <D.27722>;
          <D.27721>:
          if (__result == 0) goto <D.27723>; else goto <D.27724>;
          <D.27723>:
          D.27725 = &MEM[(void *)"UInt16" + 2B];
          D.27726 = *D.27725;
          D.27727 = (int) D.27726;
          D.27728 = __s2 + 2;
          D.27729 = *D.27728;
          D.27730 = (int) D.27729;
          __result = D.27727 - D.27730;
          if (__s2_len > 2) goto <D.27731>; else goto <D.27732>;
          <D.27731>:
          if (__result == 0) goto <D.27733>; else goto <D.27734>;
          <D.27733>:
          D.27735 = &MEM[(void *)"UInt16" + 3B];
          D.27736 = *D.27735;
          D.27737 = (int) D.27736;
          D.27738 = __s2 + 3;
          D.27739 = *D.27738;
          D.27740 = (int) D.27739;
          __result = D.27737 - D.27740;
          <D.27734>:
          <D.27732>:
          <D.27724>:
          <D.27722>:
          <D.27714>:
          <D.27712>:
        }
        D.20115 = __result;
      }
      iftmp.284 = -D.20115;
      goto <D.27741>;
      <D.27705>:
      iftmp.284 = __builtin_strcmp (name, "UInt16");
      <D.27741>:
      D.20116 = iftmp.284;
    }
    if (D.20116 == 0) goto <D.27742>; else goto <D.27743>;
    <D.27742>:
    t = 7;
    class->blittable = 1;
    goto <D.27744>;
    <D.27743>:
    {
      size_t __s1_len;
      size_t __s2_len;

      __s2_len = 6;
      if (__s2_len <= 3) goto <D.27746>; else goto <D.27747>;
      <D.27746>:
      {
        const unsigned char * __s2;
        int __result;

        __s2 = name;
        D.27748 = "UInt64";
        D.27749 = MEM[(const unsigned char *)D.27748];
        D.27750 = (int) D.27749;
        D.27751 = *__s2;
        D.27752 = (int) D.27751;
        __result = D.27750 - D.27752;
        {
          if (__s2_len != 0) goto <D.27753>; else goto <D.27754>;
          <D.27753>:
          if (__result == 0) goto <D.27755>; else goto <D.27756>;
          <D.27755>:
          D.27757 = &MEM[(void *)"UInt64" + 1B];
          D.27758 = *D.27757;
          D.27759 = (int) D.27758;
          D.27760 = __s2 + 1;
          D.27761 = *D.27760;
          D.27762 = (int) D.27761;
          __result = D.27759 - D.27762;
          if (__s2_len > 1) goto <D.27763>; else goto <D.27764>;
          <D.27763>:
          if (__result == 0) goto <D.27765>; else goto <D.27766>;
          <D.27765>:
          D.27767 = &MEM[(void *)"UInt64" + 2B];
          D.27768 = *D.27767;
          D.27769 = (int) D.27768;
          D.27770 = __s2 + 2;
          D.27771 = *D.27770;
          D.27772 = (int) D.27771;
          __result = D.27769 - D.27772;
          if (__s2_len > 2) goto <D.27773>; else goto <D.27774>;
          <D.27773>:
          if (__result == 0) goto <D.27775>; else goto <D.27776>;
          <D.27775>:
          D.27777 = &MEM[(void *)"UInt64" + 3B];
          D.27778 = *D.27777;
          D.27779 = (int) D.27778;
          D.27780 = __s2 + 3;
          D.27781 = *D.27780;
          D.27782 = (int) D.27781;
          __result = D.27779 - D.27782;
          <D.27776>:
          <D.27774>:
          <D.27766>:
          <D.27764>:
          <D.27756>:
          <D.27754>:
        }
        D.20124 = __result;
      }
      iftmp.285 = -D.20124;
      goto <D.27783>;
      <D.27747>:
      iftmp.285 = __builtin_strcmp (name, "UInt64");
      <D.27783>:
      D.20125 = iftmp.285;
    }
    if (D.20125 == 0) goto <D.27784>; else goto <D.27785>;
    <D.27784>:
    t = 11;
    class->blittable = 1;
    goto <D.27786>;
    <D.27785>:
    {
      size_t __s1_len;
      size_t __s2_len;

      __s2_len = 7;
      if (__s2_len <= 3) goto <D.27788>; else goto <D.27789>;
      <D.27788>:
      {
        const unsigned char * __s2;
        int __result;

        __s2 = name;
        D.27790 = "UIntPtr";
        D.27791 = MEM[(const unsigned char *)D.27790];
        D.27792 = (int) D.27791;
        D.27793 = *__s2;
        D.27794 = (int) D.27793;
        __result = D.27792 - D.27794;
        {
          if (__s2_len != 0) goto <D.27795>; else goto <D.27796>;
          <D.27795>:
          if (__result == 0) goto <D.27797>; else goto <D.27798>;
          <D.27797>:
          D.27799 = &MEM[(void *)"UIntPtr" + 1B];
          D.27800 = *D.27799;
          D.27801 = (int) D.27800;
          D.27802 = __s2 + 1;
          D.27803 = *D.27802;
          D.27804 = (int) D.27803;
          __result = D.27801 - D.27804;
          if (__s2_len > 1) goto <D.27805>; else goto <D.27806>;
          <D.27805>:
          if (__result == 0) goto <D.27807>; else goto <D.27808>;
          <D.27807>:
          D.27809 = &MEM[(void *)"UIntPtr" + 2B];
          D.27810 = *D.27809;
          D.27811 = (int) D.27810;
          D.27812 = __s2 + 2;
          D.27813 = *D.27812;
          D.27814 = (int) D.27813;
          __result = D.27811 - D.27814;
          if (__s2_len > 2) goto <D.27815>; else goto <D.27816>;
          <D.27815>:
          if (__result == 0) goto <D.27817>; else goto <D.27818>;
          <D.27817>:
          D.27819 = &MEM[(void *)"UIntPtr" + 3B];
          D.27820 = *D.27819;
          D.27821 = (int) D.27820;
          D.27822 = __s2 + 3;
          D.27823 = *D.27822;
          D.27824 = (int) D.27823;
          __result = D.27821 - D.27824;
          <D.27818>:
          <D.27816>:
          <D.27808>:
          <D.27806>:
          <D.27798>:
          <D.27796>:
        }
        D.20133 = __result;
      }
      iftmp.286 = -D.20133;
      goto <D.27825>;
      <D.27789>:
      iftmp.286 = __builtin_strcmp (name, "UIntPtr");
      <D.27825>:
      D.20134 = iftmp.286;
    }
    if (D.20134 == 0) goto <D.27826>; else goto <D.27827>;
    <D.27826>:
    t = 25;
    class->blittable = 1;
    <D.27827>:
    <D.27786>:
    <D.27744>:
    <D.27702>:
    goto <D.20021>;
    <D.20135>:
    {
      size_t __s1_len;
      size_t __s2_len;

      __s2_len = 14;
      if (__s2_len <= 3) goto <D.27829>; else goto <D.27830>;
      <D.27829>:
      {
        const unsigned char * __s2;
        int __result;

        __s2 = name;
        D.27171 = "TypedReference";
        D.27172 = MEM[(const unsigned char *)D.27171];
        D.27173 = (int) D.27172;
        D.27831 = *__s2;
        D.27832 = (int) D.27831;
        __result = D.27173 - D.27832;
        {
          if (__s2_len != 0) goto <D.27833>; else goto <D.27834>;
          <D.27833>:
          if (__result == 0) goto <D.27835>; else goto <D.27836>;
          <D.27835>:
          D.27180 = &MEM[(void *)"TypedReference" + 1B];
          D.27181 = *D.27180;
          D.27182 = (int) D.27181;
          D.27837 = __s2 + 1;
          D.27838 = *D.27837;
          D.27839 = (int) D.27838;
          __result = D.27182 - D.27839;
          if (__s2_len > 1) goto <D.27840>; else goto <D.27841>;
          <D.27840>:
          if (__result == 0) goto <D.27842>; else goto <D.27843>;
          <D.27842>:
          D.27190 = &MEM[(void *)"TypedReference" + 2B];
          D.27191 = *D.27190;
          D.27192 = (int) D.27191;
          D.27844 = __s2 + 2;
          D.27845 = *D.27844;
          D.27846 = (int) D.27845;
          __result = D.27192 - D.27846;
          if (__s2_len > 2) goto <D.27847>; else goto <D.27848>;
          <D.27847>:
          if (__result == 0) goto <D.27849>; else goto <D.27850>;
          <D.27849>:
          D.27200 = &MEM[(void *)"TypedReference" + 3B];
          D.27201 = *D.27200;
          D.27202 = (int) D.27201;
          D.27851 = __s2 + 3;
          D.27852 = *D.27851;
          D.27853 = (int) D.27852;
          __result = D.27202 - D.27853;
          <D.27850>:
          <D.27848>:
          <D.27843>:
          <D.27841>:
          <D.27836>:
          <D.27834>:
        }
        D.20143 = __result;
      }
      iftmp.287 = -D.20143;
      goto <D.27854>;
      <D.27830>:
      iftmp.287 = __builtin_strcmp (name, "TypedReference");
      <D.27854>:
      D.20144 = iftmp.287;
    }
    if (D.20144 == 0) goto <D.27855>; else goto <D.27856>;
    <D.27855>:
    t = 22;
    class->blittable = 1;
    <D.27856>:
    goto <D.20021>;
    <D.20145>:
    {
      size_t __s1_len;
      size_t __s2_len;

      __s2_len = 4;
      if (__s2_len <= 3) goto <D.27858>; else goto <D.27859>;
      <D.27858>:
      {
        const unsigned char * __s2;
        int __result;

        __s2 = name;
        D.27860 = "Void";
        D.27861 = MEM[(const unsigned char *)D.27860];
        D.27862 = (int) D.27861;
        D.27863 = *__s2;
        D.27864 = (int) D.27863;
        __result = D.27862 - D.27864;
        {
          if (__s2_len != 0) goto <D.27865>; else goto <D.27866>;
          <D.27865>:
          if (__result == 0) goto <D.27867>; else goto <D.27868>;
          <D.27867>:
          D.27869 = &MEM[(void *)"Void" + 1B];
          D.27870 = *D.27869;
          D.27871 = (int) D.27870;
          D.27872 = __s2 + 1;
          D.27873 = *D.27872;
          D.27874 = (int) D.27873;
          __result = D.27871 - D.27874;
          if (__s2_len > 1) goto <D.27875>; else goto <D.27876>;
          <D.27875>:
          if (__result == 0) goto <D.27877>; else goto <D.27878>;
          <D.27877>:
          D.27879 = &MEM[(void *)"Void" + 2B];
          D.27880 = *D.27879;
          D.27881 = (int) D.27880;
          D.27882 = __s2 + 2;
          D.27883 = *D.27882;
          D.27884 = (int) D.27883;
          __result = D.27881 - D.27884;
          if (__s2_len > 2) goto <D.27885>; else goto <D.27886>;
          <D.27885>:
          if (__result == 0) goto <D.27887>; else goto <D.27888>;
          <D.27887>:
          D.27889 = &MEM[(void *)"Void" + 3B];
          D.27890 = *D.27889;
          D.27891 = (int) D.27890;
          D.27892 = __s2 + 3;
          D.27893 = *D.27892;
          D.27894 = (int) D.27893;
          __result = D.27891 - D.27894;
          <D.27888>:
          <D.27886>:
          <D.27878>:
          <D.27876>:
          <D.27868>:
          <D.27866>:
        }
        D.20153 = __result;
      }
      iftmp.288 = -D.20153;
      goto <D.27895>;
      <D.27859>:
      iftmp.288 = __builtin_strcmp (name, "Void");
      <D.27895>:
      D.20154 = iftmp.288;
    }
    if (D.20154 == 0) goto <D.27896>; else goto <D.27897>;
    <D.27896>:
    t = 1;
    <D.27897>:
    goto <D.20021>;
    <D.20155>:
    goto <D.20021>;
    <D.20021>:
    <D.27243>:
    <D.27214>:
    D.27898 = (unsigned char) t;
    class->byval_arg.type = D.27898;
    D.27124 = class->byval_arg.type;
    class->this_arg.type = D.27124;
  }
  <D.27212>:
  D.27901 = class->flags;
  D.27902 = D.27901 & 32;
  if (D.27902 != 0) goto <D.27899>; else goto <D.27903>;
  <D.27903>:
  D.27124 = class->byval_arg.type;
  if (D.27124 == 19) goto <D.27899>; else goto <D.27904>;
  <D.27904>:
  D.27124 = class->byval_arg.type;
  if (D.27124 == 30) goto <D.27899>; else goto <D.27900>;
  <D.27899>:
  D.27905 = mono_get_unique_iid (class);
  D.27906 = (short unsigned int) D.27905;
  class->interface_id = D.27906;
  <D.27900>:
}


mono_class_setup_parent (struct MonoClass * class, struct MonoClass * parent)
{
  struct MonoImage * D.27908;
  int iftmp.289;
  int D.20173;
  int iftmp.290;
  int D.20172;
  const char[7] * D.27915;
  unsigned char D.27916;
  int D.27917;
  unsigned char D.27918;
  int D.27919;
  const unsigned char * D.27924;
  unsigned char D.27925;
  int D.27926;
  const unsigned char * D.27927;
  unsigned char D.27928;
  int D.27929;
  const unsigned char * D.27934;
  unsigned char D.27935;
  int D.27936;
  const unsigned char * D.27937;
  unsigned char D.27938;
  int D.27939;
  const unsigned char * D.27944;
  unsigned char D.27945;
  int D.27946;
  const unsigned char * D.27947;
  unsigned char D.27948;
  int D.27949;
  const char * D.27951;
  int D.20182;
  int iftmp.291;
  int D.20181;
  const char[7] * D.27959;
  unsigned char D.27960;
  int D.27961;
  unsigned char D.27962;
  int D.27963;
  const unsigned char * D.27968;
  unsigned char D.27969;
  int D.27970;
  const unsigned char * D.27971;
  unsigned char D.27972;
  int D.27973;
  const unsigned char * D.27978;
  unsigned char D.27979;
  int D.27980;
  const unsigned char * D.27981;
  unsigned char D.27982;
  int D.27983;
  const unsigned char * D.27988;
  unsigned char D.27989;
  int D.27990;
  const unsigned char * D.27991;
  unsigned char D.27992;
  int D.27993;
  const char * D.27995;
  int D.20191;
  int iftmp.292;
  int D.20190;
  const char[9] * D.28001;
  unsigned char D.28002;
  int D.28003;
  unsigned char D.28004;
  int D.28005;
  const unsigned char * D.28010;
  unsigned char D.28011;
  int D.28012;
  const unsigned char * D.28013;
  unsigned char D.28014;
  int D.28015;
  const unsigned char * D.28020;
  unsigned char D.28021;
  int D.28022;
  const unsigned char * D.28023;
  unsigned char D.28024;
  int D.28025;
  const unsigned char * D.28030;
  unsigned char D.28031;
  int D.28032;
  const unsigned char * D.28033;
  unsigned char D.28034;
  int D.28035;
  unsigned int D.28041;
  unsigned int D.28042;
  unsigned char D.28044;
  unsigned int D.28047;
  struct MonoClass * D.28050;
  struct MonoGenericClass * D.28055;
  const char * D.28058;
  <unnamed-unsigned:1> D.28061;
  <unnamed-unsigned:1> D.28062;
  <unnamed-unsigned:1> D.28063;
  unsigned int D.28067;
  unsigned int D.28068;
  char D.28071;
  int D.20200;
  int iftmp.293;
  int D.20199;
  const char[19] * D.28077;
  unsigned char D.28078;
  int D.28079;
  unsigned char D.28080;
  int D.28081;
  const unsigned char * D.28086;
  unsigned char D.28087;
  int D.28088;
  const unsigned char * D.28089;
  unsigned char D.28090;
  int D.28091;
  const unsigned char * D.28096;
  unsigned char D.28097;
  int D.28098;
  const unsigned char * D.28099;
  unsigned char D.28100;
  int D.28101;
  const unsigned char * D.28106;
  unsigned char D.28107;
  int D.28108;
  const unsigned char * D.28109;
  unsigned char D.28110;
  int D.28111;
  int D.20209;
  int iftmp.294;
  int D.20208;
  const char[19] * D.28120;
  unsigned char D.28121;
  int D.28122;
  unsigned char D.28123;
  int D.28124;
  const unsigned char * D.28129;
  unsigned char D.28130;
  int D.28131;
  const unsigned char * D.28132;
  unsigned char D.28133;
  int D.28134;
  const unsigned char * D.28139;
  unsigned char D.28140;
  int D.28141;
  const unsigned char * D.28142;
  unsigned char D.28143;
  int D.28144;
  const unsigned char * D.28149;
  unsigned char D.28150;
  int D.28151;
  const unsigned char * D.28152;
  unsigned char D.28153;
  int D.28154;
  int D.20218;
  int iftmp.295;
  int D.20217;
  const char[9] * D.28163;
  unsigned char D.28164;
  int D.28165;
  unsigned char D.28166;
  int D.28167;
  const unsigned char * D.28172;
  unsigned char D.28173;
  int D.28174;
  const unsigned char * D.28175;
  unsigned char D.28176;
  int D.28177;
  const unsigned char * D.28182;
  unsigned char D.28183;
  int D.28184;
  const unsigned char * D.28185;
  unsigned char D.28186;
  int D.28187;
  const unsigned char * D.28192;
  unsigned char D.28193;
  int D.28194;
  const unsigned char * D.28195;
  unsigned char D.28196;
  int D.28197;
  struct MonoClass * D.28203;
  unsigned int D.28204;
  unsigned int D.28205;
  struct MonoImage * D.28207;
  int D.28208;
  int D.20227;
  int iftmp.296;
  int D.20226;
  const char[10] * D.28213;
  unsigned char D.28214;
  int D.28215;
  unsigned char D.28216;
  int D.28217;
  const unsigned char * D.28222;
  unsigned char D.28223;
  int D.28224;
  const unsigned char * D.28225;
  unsigned char D.28226;
  int D.28227;
  const unsigned char * D.28232;
  unsigned char D.28233;
  int D.28234;
  const unsigned char * D.28235;
  unsigned char D.28236;
  int D.28237;
  const unsigned char * D.28242;
  unsigned char D.28243;
  int D.28244;
  const unsigned char * D.28245;
  unsigned char D.28246;
  int D.28247;
  const char * D.28249;
  int D.20236;
  int iftmp.297;
  int D.20235;
  unsigned char D.28254;
  int D.28255;
  const unsigned char * D.28260;
  unsigned char D.28261;
  int D.28262;
  const unsigned char * D.28267;
  unsigned char D.28268;
  int D.28269;
  const unsigned char * D.28274;
  unsigned char D.28275;
  int D.28276;
  const char * D.28278;
  int D.28279;
  int D.20245;
  int iftmp.298;
  int D.20244;
  const char[5] * D.28285;
  unsigned char D.28286;
  int D.28287;
  unsigned char D.28288;
  int D.28289;
  const unsigned char * D.28294;
  unsigned char D.28295;
  int D.28296;
  const unsigned char * D.28297;
  unsigned char D.28298;
  int D.28299;
  const unsigned char * D.28304;
  unsigned char D.28305;
  int D.28306;
  const unsigned char * D.28307;
  unsigned char D.28308;
  int D.28309;
  const unsigned char * D.28314;
  unsigned char D.28315;
  int D.28316;
  const unsigned char * D.28317;
  unsigned char D.28318;
  int D.28319;
  int D.20254;
  int iftmp.299;
  int D.20253;
  unsigned char D.28326;
  int D.28327;
  const unsigned char * D.28332;
  unsigned char D.28333;
  int D.28334;
  const unsigned char * D.28339;
  unsigned char D.28340;
  int D.28341;
  const unsigned char * D.28346;
  unsigned char D.28347;
  int D.28348;
  <unnamed-unsigned:1> D.28352;
  gboolean system_namespace;
  gboolean is_corlib;

  D.27908 = class->image;
  is_corlib = mono_is_corlib_image (D.27908);
  {
    size_t __s1_len;
    size_t __s2_len;

    __s2_len = 6;
    if (__s2_len <= 3) goto <D.27913>; else goto <D.27914>;
    <D.27913>:
    {
      const unsigned char * __s2;
      int __result;

      __s2 = class->name_space;
      D.27915 = "System";
      D.27916 = MEM[(const unsigned char *)D.27915];
      D.27917 = (int) D.27916;
      D.27918 = *__s2;
      D.27919 = (int) D.27918;
      __result = D.27917 - D.27919;
      {
        if (__s2_len != 0) goto <D.27920>; else goto <D.27921>;
        <D.27920>:
        if (__result == 0) goto <D.27922>; else goto <D.27923>;
        <D.27922>:
        D.27924 = &MEM[(void *)"System" + 1B];
        D.27925 = *D.27924;
        D.27926 = (int) D.27925;
        D.27927 = __s2 + 1;
        D.27928 = *D.27927;
        D.27929 = (int) D.27928;
        __result = D.27926 - D.27929;
        if (__s2_len > 1) goto <D.27930>; else goto <D.27931>;
        <D.27930>:
        if (__result == 0) goto <D.27932>; else goto <D.27933>;
        <D.27932>:
        D.27934 = &MEM[(void *)"System" + 2B];
        D.27935 = *D.27934;
        D.27936 = (int) D.27935;
        D.27937 = __s2 + 2;
        D.27938 = *D.27937;
        D.27939 = (int) D.27938;
        __result = D.27936 - D.27939;
        if (__s2_len > 2) goto <D.27940>; else goto <D.27941>;
        <D.27940>:
        if (__result == 0) goto <D.27942>; else goto <D.27943>;
        <D.27942>:
        D.27944 = &MEM[(void *)"System" + 3B];
        D.27945 = *D.27944;
        D.27946 = (int) D.27945;
        D.27947 = __s2 + 3;
        D.27948 = *D.27947;
        D.27949 = (int) D.27948;
        __result = D.27946 - D.27949;
        <D.27943>:
        <D.27941>:
        <D.27933>:
        <D.27931>:
        <D.27923>:
        <D.27921>:
      }
      D.20172 = __result;
    }
    iftmp.290 = -D.20172;
    goto <D.27950>;
    <D.27914>:
    D.27951 = class->name_space;
    iftmp.290 = __builtin_strcmp (D.27951, "System");
    <D.27950>:
    D.20173 = iftmp.290;
  }
  if (D.20173 == 0) goto <D.27952>; else goto <D.27910>;
  <D.27952>:
  if (is_corlib != 0) goto <D.27953>; else goto <D.27910>;
  <D.27953>:
  iftmp.289 = 1;
  goto <D.27911>;
  <D.27910>:
  iftmp.289 = 0;
  <D.27911>:
  system_namespace = iftmp.289;
  if (system_namespace != 0) goto <D.27954>; else goto <D.27955>;
  <D.27954>:
  {
    size_t __s1_len;
    size_t __s2_len;

    __s2_len = 6;
    if (__s2_len <= 3) goto <D.27957>; else goto <D.27958>;
    <D.27957>:
    {
      const unsigned char * __s2;
      int __result;

      __s2 = class->name;
      D.27959 = "Object";
      D.27960 = MEM[(const unsigned char *)D.27959];
      D.27961 = (int) D.27960;
      D.27962 = *__s2;
      D.27963 = (int) D.27962;
      __result = D.27961 - D.27963;
      {
        if (__s2_len != 0) goto <D.27964>; else goto <D.27965>;
        <D.27964>:
        if (__result == 0) goto <D.27966>; else goto <D.27967>;
        <D.27966>:
        D.27968 = &MEM[(void *)"Object" + 1B];
        D.27969 = *D.27968;
        D.27970 = (int) D.27969;
        D.27971 = __s2 + 1;
        D.27972 = *D.27971;
        D.27973 = (int) D.27972;
        __result = D.27970 - D.27973;
        if (__s2_len > 1) goto <D.27974>; else goto <D.27975>;
        <D.27974>:
        if (__result == 0) goto <D.27976>; else goto <D.27977>;
        <D.27976>:
        D.27978 = &MEM[(void *)"Object" + 2B];
        D.27979 = *D.27978;
        D.27980 = (int) D.27979;
        D.27981 = __s2 + 2;
        D.27982 = *D.27981;
        D.27983 = (int) D.27982;
        __result = D.27980 - D.27983;
        if (__s2_len > 2) goto <D.27984>; else goto <D.27985>;
        <D.27984>:
        if (__result == 0) goto <D.27986>; else goto <D.27987>;
        <D.27986>:
        D.27988 = &MEM[(void *)"Object" + 3B];
        D.27989 = *D.27988;
        D.27990 = (int) D.27989;
        D.27991 = __s2 + 3;
        D.27992 = *D.27991;
        D.27993 = (int) D.27992;
        __result = D.27990 - D.27993;
        <D.27987>:
        <D.27985>:
        <D.27977>:
        <D.27975>:
        <D.27967>:
        <D.27965>:
      }
      D.20181 = __result;
    }
    iftmp.291 = -D.20181;
    goto <D.27994>;
    <D.27958>:
    D.27995 = class->name;
    iftmp.291 = __builtin_strcmp (D.27995, "Object");
    <D.27994>:
    D.20182 = iftmp.291;
  }
  if (D.20182 == 0) goto <D.27996>; else goto <D.27997>;
  <D.27996>:
  class->parent = 0B;
  class->instance_size = 8;
  return;
  <D.27997>:
  <D.27955>:
  {
    size_t __s1_len;
    size_t __s2_len;

    __s2_len = 8;
    if (__s2_len <= 3) goto <D.27999>; else goto <D.28000>;
    <D.27999>:
    {
      const unsigned char * __s2;
      int __result;

      __s2 = class->name;
      D.28001 = "<Module>";
      D.28002 = MEM[(const unsigned char *)D.28001];
      D.28003 = (int) D.28002;
      D.28004 = *__s2;
      D.28005 = (int) D.28004;
      __result = D.28003 - D.28005;
      {
        if (__s2_len != 0) goto <D.28006>; else goto <D.28007>;
        <D.28006>:
        if (__result == 0) goto <D.28008>; else goto <D.28009>;
        <D.28008>:
        D.28010 = &MEM[(void *)"<Module>" + 1B];
        D.28011 = *D.28010;
        D.28012 = (int) D.28011;
        D.28013 = __s2 + 1;
        D.28014 = *D.28013;
        D.28015 = (int) D.28014;
        __result = D.28012 - D.28015;
        if (__s2_len > 1) goto <D.28016>; else goto <D.28017>;
        <D.28016>:
        if (__result == 0) goto <D.28018>; else goto <D.28019>;
        <D.28018>:
        D.28020 = &MEM[(void *)"<Module>" + 2B];
        D.28021 = *D.28020;
        D.28022 = (int) D.28021;
        D.28023 = __s2 + 2;
        D.28024 = *D.28023;
        D.28025 = (int) D.28024;
        __result = D.28022 - D.28025;
        if (__s2_len > 2) goto <D.28026>; else goto <D.28027>;
        <D.28026>:
        if (__result == 0) goto <D.28028>; else goto <D.28029>;
        <D.28028>:
        D.28030 = &MEM[(void *)"<Module>" + 3B];
        D.28031 = *D.28030;
        D.28032 = (int) D.28031;
        D.28033 = __s2 + 3;
        D.28034 = *D.28033;
        D.28035 = (int) D.28034;
        __result = D.28032 - D.28035;
        <D.28029>:
        <D.28027>:
        <D.28019>:
        <D.28017>:
        <D.28009>:
        <D.28007>:
      }
      D.20190 = __result;
    }
    iftmp.292 = -D.20190;
    goto <D.28036>;
    <D.28000>:
    D.27995 = class->name;
    iftmp.292 = __builtin_strcmp (D.27995, "<Module>");
    <D.28036>:
    D.20191 = iftmp.292;
  }
  if (D.20191 == 0) goto <D.28037>; else goto <D.28038>;
  <D.28037>:
  class->parent = 0B;
  class->instance_size = 0;
  return;
  <D.28038>:
  D.28041 = class->flags;
  D.28042 = D.28041 & 32;
  if (D.28042 == 0) goto <D.28043>; else goto <D.28039>;
  <D.28043>:
  D.28044 = class->byval_arg.type;
  if (D.28044 != 19) goto <D.28045>; else goto <D.28039>;
  <D.28045>:
  D.28044 = class->byval_arg.type;
  if (D.28044 != 30) goto <D.28046>; else goto <D.28039>;
  <D.28046>:
  D.28041 = class->flags;
  D.28047 = D.28041 & 4096;
  if (D.28047 != 0) goto <D.28048>; else goto <D.28049>;
  <D.28048>:
  init_com_from_comimport (class);
  D.28050 = mono_defaults.object_class;
  if (D.28050 == parent) goto <D.28051>; else goto <D.28052>;
  <D.28051>:
  parent = mono_class_get_com_object_class ();
  <D.28052>:
  <D.28049>:
  if (parent == 0B) goto <D.28053>; else goto <D.28054>;
  <D.28053>:
  parent = mono_defaults.object_class;
  mono_class_set_failure (class, 7, 0B);
  <D.28054>:
  class->parent = parent;
  D.28055 = parent->generic_class;
  if (D.28055 != 0B) goto <D.28056>; else goto <D.28057>;
  <D.28056>:
  D.28058 = parent->name;
  if (D.28058 == 0B) goto <D.28059>; else goto <D.28060>;
  <D.28059>:
  return;
  <D.28060>:
  <D.28057>:
  D.28061 = parent->marshalbyref;
  class->marshalbyref = D.28061;
  D.28062 = parent->contextbound;
  class->contextbound = D.28062;
  D.28063 = parent->delegate;
  class->delegate = D.28063;
  D.28041 = class->flags;
  D.28047 = D.28041 & 4096;
  if (D.28047 != 0) goto <D.28064>; else goto <D.28066>;
  <D.28066>:
  D.28067 = BIT_FIELD_REF <*parent, 32, 160>;
  D.28068 = D.28067 & 1073741824;
  if (D.28068 != 0) goto <D.28064>; else goto <D.28065>;
  <D.28064>:
  class->is_com_object = 1;
  <D.28065>:
  if (system_namespace != 0) goto <D.28069>; else goto <D.28070>;
  <D.28069>:
  D.27995 = class->name;
  D.28071 = *D.27995;
  if (D.28071 == 77) goto <D.28072>; else goto <D.28073>;
  <D.28072>:
  {
    size_t __s1_len;
    size_t __s2_len;

    __s2_len = 18;
    if (__s2_len <= 3) goto <D.28075>; else goto <D.28076>;
    <D.28075>:
    {
      const unsigned char * __s2;
      int __result;

      __s2 = class->name;
      D.28077 = "MarshalByRefObject";
      D.28078 = MEM[(const unsigned char *)D.28077];
      D.28079 = (int) D.28078;
      D.28080 = *__s2;
      D.28081 = (int) D.28080;
      __result = D.28079 - D.28081;
      {
        if (__s2_len != 0) goto <D.28082>; else goto <D.28083>;
        <D.28082>:
        if (__result == 0) goto <D.28084>; else goto <D.28085>;
        <D.28084>:
        D.28086 = &MEM[(void *)"MarshalByRefObject" + 1B];
        D.28087 = *D.28086;
        D.28088 = (int) D.28087;
        D.28089 = __s2 + 1;
        D.28090 = *D.28089;
        D.28091 = (int) D.28090;
        __result = D.28088 - D.28091;
        if (__s2_len > 1) goto <D.28092>; else goto <D.28093>;
        <D.28092>:
        if (__result == 0) goto <D.28094>; else goto <D.28095>;
        <D.28094>:
        D.28096 = &MEM[(void *)"MarshalByRefObject" + 2B];
        D.28097 = *D.28096;
        D.28098 = (int) D.28097;
        D.28099 = __s2 + 2;
        D.28100 = *D.28099;
        D.28101 = (int) D.28100;
        __result = D.28098 - D.28101;
        if (__s2_len > 2) goto <D.28102>; else goto <D.28103>;
        <D.28102>:
        if (__result == 0) goto <D.28104>; else goto <D.28105>;
        <D.28104>:
        D.28106 = &MEM[(void *)"MarshalByRefObject" + 3B];
        D.28107 = *D.28106;
        D.28108 = (int) D.28107;
        D.28109 = __s2 + 3;
        D.28110 = *D.28109;
        D.28111 = (int) D.28110;
        __result = D.28108 - D.28111;
        <D.28105>:
        <D.28103>:
        <D.28095>:
        <D.28093>:
        <D.28085>:
        <D.28083>:
      }
      D.20199 = __result;
    }
    iftmp.293 = -D.20199;
    goto <D.28112>;
    <D.28076>:
    D.27995 = class->name;
    iftmp.293 = __builtin_strcmp (D.27995, "MarshalByRefObject");
    <D.28112>:
    D.20200 = iftmp.293;
  }
  if (D.20200 == 0) goto <D.28113>; else goto <D.28114>;
  <D.28113>:
  class->marshalbyref = 1;
  <D.28114>:
  <D.28073>:
  D.27995 = class->name;
  D.28071 = *D.27995;
  if (D.28071 == 67) goto <D.28115>; else goto <D.28116>;
  <D.28115>:
  {
    size_t __s1_len;
    size_t __s2_len;

    __s2_len = 18;
    if (__s2_len <= 3) goto <D.28118>; else goto <D.28119>;
    <D.28118>:
    {
      const unsigned char * __s2;
      int __result;

      __s2 = class->name;
      D.28120 = "ContextBoundObject";
      D.28121 = MEM[(const unsigned char *)D.28120];
      D.28122 = (int) D.28121;
      D.28123 = *__s2;
      D.28124 = (int) D.28123;
      __result = D.28122 - D.28124;
      {
        if (__s2_len != 0) goto <D.28125>; else goto <D.28126>;
        <D.28125>:
        if (__result == 0) goto <D.28127>; else goto <D.28128>;
        <D.28127>:
        D.28129 = &MEM[(void *)"ContextBoundObject" + 1B];
        D.28130 = *D.28129;
        D.28131 = (int) D.28130;
        D.28132 = __s2 + 1;
        D.28133 = *D.28132;
        D.28134 = (int) D.28133;
        __result = D.28131 - D.28134;
        if (__s2_len > 1) goto <D.28135>; else goto <D.28136>;
        <D.28135>:
        if (__result == 0) goto <D.28137>; else goto <D.28138>;
        <D.28137>:
        D.28139 = &MEM[(void *)"ContextBoundObject" + 2B];
        D.28140 = *D.28139;
        D.28141 = (int) D.28140;
        D.28142 = __s2 + 2;
        D.28143 = *D.28142;
        D.28144 = (int) D.28143;
        __result = D.28141 - D.28144;
        if (__s2_len > 2) goto <D.28145>; else goto <D.28146>;
        <D.28145>:
        if (__result == 0) goto <D.28147>; else goto <D.28148>;
        <D.28147>:
        D.28149 = &MEM[(void *)"ContextBoundObject" + 3B];
        D.28150 = *D.28149;
        D.28151 = (int) D.28150;
        D.28152 = __s2 + 3;
        D.28153 = *D.28152;
        D.28154 = (int) D.28153;
        __result = D.28151 - D.28154;
        <D.28148>:
        <D.28146>:
        <D.28138>:
        <D.28136>:
        <D.28128>:
        <D.28126>:
      }
      D.20208 = __result;
    }
    iftmp.294 = -D.20208;
    goto <D.28155>;
    <D.28119>:
    D.27995 = class->name;
    iftmp.294 = __builtin_strcmp (D.27995, "ContextBoundObject");
    <D.28155>:
    D.20209 = iftmp.294;
  }
  if (D.20209 == 0) goto <D.28156>; else goto <D.28157>;
  <D.28156>:
  class->contextbound = 1;
  <D.28157>:
  <D.28116>:
  D.27995 = class->name;
  D.28071 = *D.27995;
  if (D.28071 == 68) goto <D.28158>; else goto <D.28159>;
  <D.28158>:
  {
    size_t __s1_len;
    size_t __s2_len;

    __s2_len = 8;
    if (__s2_len <= 3) goto <D.28161>; else goto <D.28162>;
    <D.28161>:
    {
      const unsigned char * __s2;
      int __result;

      __s2 = class->name;
      D.28163 = "Delegate";
      D.28164 = MEM[(const unsigned char *)D.28163];
      D.28165 = (int) D.28164;
      D.28166 = *__s2;
      D.28167 = (int) D.28166;
      __result = D.28165 - D.28167;
      {
        if (__s2_len != 0) goto <D.28168>; else goto <D.28169>;
        <D.28168>:
        if (__result == 0) goto <D.28170>; else goto <D.28171>;
        <D.28170>:
        D.28172 = &MEM[(void *)"Delegate" + 1B];
        D.28173 = *D.28172;
        D.28174 = (int) D.28173;
        D.28175 = __s2 + 1;
        D.28176 = *D.28175;
        D.28177 = (int) D.28176;
        __result = D.28174 - D.28177;
        if (__s2_len > 1) goto <D.28178>; else goto <D.28179>;
        <D.28178>:
        if (__result == 0) goto <D.28180>; else goto <D.28181>;
        <D.28180>:
        D.28182 = &MEM[(void *)"Delegate" + 2B];
        D.28183 = *D.28182;
        D.28184 = (int) D.28183;
        D.28185 = __s2 + 2;
        D.28186 = *D.28185;
        D.28187 = (int) D.28186;
        __result = D.28184 - D.28187;
        if (__s2_len > 2) goto <D.28188>; else goto <D.28189>;
        <D.28188>:
        if (__result == 0) goto <D.28190>; else goto <D.28191>;
        <D.28190>:
        D.28192 = &MEM[(void *)"Delegate" + 3B];
        D.28193 = *D.28192;
        D.28194 = (int) D.28193;
        D.28195 = __s2 + 3;
        D.28196 = *D.28195;
        D.28197 = (int) D.28196;
        __result = D.28194 - D.28197;
        <D.28191>:
        <D.28189>:
        <D.28181>:
        <D.28179>:
        <D.28171>:
        <D.28169>:
      }
      D.20217 = __result;
    }
    iftmp.295 = -D.20217;
    goto <D.28198>;
    <D.28162>:
    D.27995 = class->name;
    iftmp.295 = __builtin_strcmp (D.27995, "Delegate");
    <D.28198>:
    D.20218 = iftmp.295;
  }
  if (D.20218 == 0) goto <D.28199>; else goto <D.28200>;
  <D.28199>:
  class->delegate = 1;
  <D.28200>:
  <D.28159>:
  <D.28070>:
  D.28203 = class->parent;
  D.28204 = BIT_FIELD_REF <*D.28203, 32, 160>;
  D.28205 = D.28204 & 16;
  if (D.28205 != 0) goto <D.28201>; else goto <D.28206>;
  <D.28206>:
  D.28203 = class->parent;
  D.28207 = D.28203->image;
  D.28208 = mono_is_corlib_image (D.28207);
  if (D.28208 != 0) goto <D.28209>; else goto <D.28202>;
  <D.28209>:
  {
    size_t __s1_len;
    size_t __s2_len;

    __s2_len = 9;
    if (__s2_len <= 3) goto <D.28211>; else goto <D.28212>;
    <D.28211>:
    {
      const unsigned char * __s2;
      int __result;

      D.28203 = class->parent;
      __s2 = D.28203->name;
      D.28213 = "ValueType";
      D.28214 = MEM[(const unsigned char *)D.28213];
      D.28215 = (int) D.28214;
      D.28216 = *__s2;
      D.28217 = (int) D.28216;
      __result = D.28215 - D.28217;
      {
        if (__s2_len != 0) goto <D.28218>; else goto <D.28219>;
        <D.28218>:
        if (__result == 0) goto <D.28220>; else goto <D.28221>;
        <D.28220>:
        D.28222 = &MEM[(void *)"ValueType" + 1B];
        D.28223 = *D.28222;
        D.28224 = (int) D.28223;
        D.28225 = __s2 + 1;
        D.28226 = *D.28225;
        D.28227 = (int) D.28226;
        __result = D.28224 - D.28227;
        if (__s2_len > 1) goto <D.28228>; else goto <D.28229>;
        <D.28228>:
        if (__result == 0) goto <D.28230>; else goto <D.28231>;
        <D.28230>:
        D.28232 = &MEM[(void *)"ValueType" + 2B];
        D.28233 = *D.28232;
        D.28234 = (int) D.28233;
        D.28235 = __s2 + 2;
        D.28236 = *D.28235;
        D.28237 = (int) D.28236;
        __result = D.28234 - D.28237;
        if (__s2_len > 2) goto <D.28238>; else goto <D.28239>;
        <D.28238>:
        if (__result == 0) goto <D.28240>; else goto <D.28241>;
        <D.28240>:
        D.28242 = &MEM[(void *)"ValueType" + 3B];
        D.28243 = *D.28242;
        D.28244 = (int) D.28243;
        D.28245 = __s2 + 3;
        D.28246 = *D.28245;
        D.28247 = (int) D.28246;
        __result = D.28244 - D.28247;
        <D.28241>:
        <D.28239>:
        <D.28231>:
        <D.28229>:
        <D.28221>:
        <D.28219>:
      }
      D.20226 = __result;
    }
    iftmp.296 = -D.20226;
    goto <D.28248>;
    <D.28212>:
    D.28203 = class->parent;
    D.28249 = D.28203->name;
    iftmp.296 = __builtin_strcmp (D.28249, "ValueType");
    <D.28248>:
    D.20227 = iftmp.296;
  }
  if (D.20227 == 0) goto <D.28250>; else goto <D.28202>;
  <D.28250>:
  {
    size_t __s1_len;
    size_t __s2_len;

    __s2_len = 6;
    if (__s2_len <= 3) goto <D.28252>; else goto <D.28253>;
    <D.28252>:
    {
      const unsigned char * __s2;
      int __result;

      D.28203 = class->parent;
      __s2 = D.28203->name_space;
      D.27915 = "System";
      D.27916 = MEM[(const unsigned char *)D.27915];
      D.27917 = (int) D.27916;
      D.28254 = *__s2;
      D.28255 = (int) D.28254;
      __result = D.27917 - D.28255;
      {
        if (__s2_len != 0) goto <D.28256>; else goto <D.28257>;
        <D.28256>:
        if (__result == 0) goto <D.28258>; else goto <D.28259>;
        <D.28258>:
        D.27924 = &MEM[(void *)"System" + 1B];
        D.27925 = *D.27924;
        D.27926 = (int) D.27925;
        D.28260 = __s2 + 1;
        D.28261 = *D.28260;
        D.28262 = (int) D.28261;
        __result = D.27926 - D.28262;
        if (__s2_len > 1) goto <D.28263>; else goto <D.28264>;
        <D.28263>:
        if (__result == 0) goto <D.28265>; else goto <D.28266>;
        <D.28265>:
        D.27934 = &MEM[(void *)"System" + 2B];
        D.27935 = *D.27934;
        D.27936 = (int) D.27935;
        D.28267 = __s2 + 2;
        D.28268 = *D.28267;
        D.28269 = (int) D.28268;
        __result = D.27936 - D.28269;
        if (__s2_len > 2) goto <D.28270>; else goto <D.28271>;
        <D.28270>:
        if (__result == 0) goto <D.28272>; else goto <D.28273>;
        <D.28272>:
        D.27944 = &MEM[(void *)"System" + 3B];
        D.27945 = *D.27944;
        D.27946 = (int) D.27945;
        D.28274 = __s2 + 3;
        D.28275 = *D.28274;
        D.28276 = (int) D.28275;
        __result = D.27946 - D.28276;
        <D.28273>:
        <D.28271>:
        <D.28266>:
        <D.28264>:
        <D.28259>:
        <D.28257>:
      }
      D.20235 = __result;
    }
    iftmp.297 = -D.20235;
    goto <D.28277>;
    <D.28253>:
    D.28203 = class->parent;
    D.28278 = D.28203->name_space;
    iftmp.297 = __builtin_strcmp (D.28278, "System");
    <D.28277>:
    D.20236 = iftmp.297;
  }
  if (D.20236 == 0) goto <D.28201>; else goto <D.28202>;
  <D.28201>:
  class->valuetype = 1;
  <D.28202>:
  D.28203 = class->parent;
  D.28207 = D.28203->image;
  D.28279 = mono_is_corlib_image (D.28207);
  if (D.28279 != 0) goto <D.28280>; else goto <D.28281>;
  <D.28280>:
  {
    size_t __s1_len;
    size_t __s2_len;

    __s2_len = 4;
    if (__s2_len <= 3) goto <D.28283>; else goto <D.28284>;
    <D.28283>:
    {
      const unsigned char * __s2;
      int __result;

      D.28203 = class->parent;
      __s2 = D.28203->name;
      D.28285 = "Enum";
      D.28286 = MEM[(const unsigned char *)D.28285];
      D.28287 = (int) D.28286;
      D.28288 = *__s2;
      D.28289 = (int) D.28288;
      __result = D.28287 - D.28289;
      {
        if (__s2_len != 0) goto <D.28290>; else goto <D.28291>;
        <D.28290>:
        if (__result == 0) goto <D.28292>; else goto <D.28293>;
        <D.28292>:
        D.28294 = &MEM[(void *)"Enum" + 1B];
        D.28295 = *D.28294;
        D.28296 = (int) D.28295;
        D.28297 = __s2 + 1;
        D.28298 = *D.28297;
        D.28299 = (int) D.28298;
        __result = D.28296 - D.28299;
        if (__s2_len > 1) goto <D.28300>; else goto <D.28301>;
        <D.28300>:
        if (__result == 0) goto <D.28302>; else goto <D.28303>;
        <D.28302>:
        D.28304 = &MEM[(void *)"Enum" + 2B];
        D.28305 = *D.28304;
        D.28306 = (int) D.28305;
        D.28307 = __s2 + 2;
        D.28308 = *D.28307;
        D.28309 = (int) D.28308;
        __result = D.28306 - D.28309;
        if (__s2_len > 2) goto <D.28310>; else goto <D.28311>;
        <D.28310>:
        if (__result == 0) goto <D.28312>; else goto <D.28313>;
        <D.28312>:
        D.28314 = &MEM[(void *)"Enum" + 3B];
        D.28315 = *D.28314;
        D.28316 = (int) D.28315;
        D.28317 = __s2 + 3;
        D.28318 = *D.28317;
        D.28319 = (int) D.28318;
        __result = D.28316 - D.28319;
        <D.28313>:
        <D.28311>:
        <D.28303>:
        <D.28301>:
        <D.28293>:
        <D.28291>:
      }
      D.20244 = __result;
    }
    iftmp.298 = -D.20244;
    goto <D.28320>;
    <D.28284>:
    D.28203 = class->parent;
    D.28249 = D.28203->name;
    iftmp.298 = __builtin_strcmp (D.28249, "Enum");
    <D.28320>:
    D.20245 = iftmp.298;
  }
  if (D.20245 == 0) goto <D.28321>; else goto <D.28322>;
  <D.28321>:
  {
    size_t __s1_len;
    size_t __s2_len;

    __s2_len = 6;
    if (__s2_len <= 3) goto <D.28324>; else goto <D.28325>;
    <D.28324>:
    {
      const unsigned char * __s2;
      int __result;

      D.28203 = class->parent;
      __s2 = D.28203->name_space;
      D.27915 = "System";
      D.27916 = MEM[(const unsigned char *)D.27915];
      D.27917 = (int) D.27916;
      D.28326 = *__s2;
      D.28327 = (int) D.28326;
      __result = D.27917 - D.28327;
      {
        if (__s2_len != 0) goto <D.28328>; else goto <D.28329>;
        <D.28328>:
        if (__result == 0) goto <D.28330>; else goto <D.28331>;
        <D.28330>:
        D.27924 = &MEM[(void *)"System" + 1B];
        D.27925 = *D.27924;
        D.27926 = (int) D.27925;
        D.28332 = __s2 + 1;
        D.28333 = *D.28332;
        D.28334 = (int) D.28333;
        __result = D.27926 - D.28334;
        if (__s2_len > 1) goto <D.28335>; else goto <D.28336>;
        <D.28335>:
        if (__result == 0) goto <D.28337>; else goto <D.28338>;
        <D.28337>:
        D.27934 = &MEM[(void *)"System" + 2B];
        D.27935 = *D.27934;
        D.27936 = (int) D.27935;
        D.28339 = __s2 + 2;
        D.28340 = *D.28339;
        D.28341 = (int) D.28340;
        __result = D.27936 - D.28341;
        if (__s2_len > 2) goto <D.28342>; else goto <D.28343>;
        <D.28342>:
        if (__result == 0) goto <D.28344>; else goto <D.28345>;
        <D.28344>:
        D.27944 = &MEM[(void *)"System" + 3B];
        D.27945 = *D.27944;
        D.27946 = (int) D.27945;
        D.28346 = __s2 + 3;
        D.28347 = *D.28346;
        D.28348 = (int) D.28347;
        __result = D.27946 - D.28348;
        <D.28345>:
        <D.28343>:
        <D.28338>:
        <D.28336>:
        <D.28331>:
        <D.28329>:
      }
      D.20253 = __result;
    }
    iftmp.299 = -D.20253;
    goto <D.28349>;
    <D.28325>:
    D.28203 = class->parent;
    D.28278 = D.28203->name_space;
    iftmp.299 = __builtin_strcmp (D.28278, "System");
    <D.28349>:
    D.20254 = iftmp.299;
  }
  if (D.20254 == 0) goto <D.28350>; else goto <D.28351>;
  <D.28350>:
  class->enumtype = 1;
  D.28352 = class->enumtype;
  class->valuetype = D.28352;
  <D.28351>:
  <D.28322>:
  <D.28281>:
  goto <D.28040>;
  <D.28039>:
  D.28041 = class->flags;
  D.28047 = D.28041 & 4096;
  if (D.28047 != 0) goto <D.28353>; else goto <D.28354>;
  <D.28353>:
  init_com_from_comimport (class);
  <D.28354>:
  class->parent = 0B;
  <D.28040>:
}


init_com_from_comimport (struct MonoClass * class)
{
  <unnamed type> D.28356;
  struct MonoImage * D.28359;
  int D.28360;

  D.28356 = mono_security_get_mode ();
  if (D.28356 == 1) goto <D.28357>; else goto <D.28358>;
  <D.28357>:
  D.28359 = class->image;
  D.28360 = mono_security_core_clr_determine_platform_image (D.28359);
  if (D.28360 == 0) goto <D.28361>; else goto <D.28362>;
  <D.28361>:
  mono_class_set_failure (class, 7, 0B);
  return;
  <D.28362>:
  <D.28358>:
}


mono_class_setup_supertypes (struct MonoClass * class)
{
  struct MonoClass * D.28366;
  struct MonoClass * * D.28369;
  short unsigned int D.28374;
  short unsigned int D.28375;
  int iftmp.300;
  short unsigned int D.28378;
  unsigned int ms.301;
  unsigned int D.28383;
  int D.28384;
  sizetype D.28387;
  sizetype D.28388;
  sizetype D.28389;
  struct MonoClass * * D.28390;
  unsigned int D.28391;
  unsigned int D.28392;
  int ms;
  struct MonoClass * * supertypes;

  {
    void * __tmp;

    __tmp = class->supertypes;
    mono_memory_barrier ();
    supertypes = __tmp;
  }
  if (supertypes != 0B) goto <D.28364>; else goto <D.28365>;
  <D.28364>:
  return;
  <D.28365>:
  D.28366 = class->parent;
  if (D.28366 != 0B) goto <D.28367>; else goto <D.28368>;
  <D.28367>:
  D.28366 = class->parent;
  D.28369 = D.28366->supertypes;
  if (D.28369 == 0B) goto <D.28370>; else goto <D.28371>;
  <D.28370>:
  D.28366 = class->parent;
  mono_class_setup_supertypes (D.28366);
  <D.28371>:
  <D.28368>:
  D.28366 = class->parent;
  if (D.28366 != 0B) goto <D.28372>; else goto <D.28373>;
  <D.28372>:
  D.28366 = class->parent;
  D.28374 = D.28366->idepth;
  D.28375 = D.28374 + 1;
  class->idepth = D.28375;
  goto <D.28376>;
  <D.28373>:
  class->idepth = 1;
  <D.28376>:
  D.28378 = class->idepth;
  if (D.28378 > 5) goto <D.28379>; else goto <D.28380>;
  <D.28379>:
  D.28378 = class->idepth;
  iftmp.300 = (int) D.28378;
  goto <D.28381>;
  <D.28380>:
  iftmp.300 = 6;
  <D.28381>:
  ms = iftmp.300;
  ms.301 = (unsigned int) ms;
  D.28383 = ms.301 * 4;
  D.28384 = (int) D.28383;
  supertypes = mono_class_alloc0 (class, D.28384);
  D.28366 = class->parent;
  if (D.28366 != 0B) goto <D.28385>; else goto <D.28386>;
  <D.28385>:
  D.28378 = class->idepth;
  D.28387 = (sizetype) D.28378;
  D.28388 = D.28387 + 1073741823;
  D.28389 = D.28388 * 4;
  D.28390 = supertypes + D.28389;
  *D.28390 = class;
  D.28366 = class->parent;
  D.28369 = D.28366->supertypes;
  D.28366 = class->parent;
  D.28374 = D.28366->idepth;
  D.28391 = (unsigned int) D.28374;
  D.28392 = D.28391 * 4;
  memcpy (supertypes, D.28369, D.28392);
  goto <D.28393>;
  <D.28386>:
  *supertypes = class;
  <D.28393>:
  mono_memory_barrier ();
  class->supertypes = supertypes;
}


mono_class_is_nullable (struct MonoClass * klass)
{
  gboolean D.28395;
  int iftmp.302;
  struct MonoGenericClass * D.28399;
  struct MonoClass * D.28401;
  struct MonoClass * D.28402;

  D.28399 = klass->generic_class;
  if (D.28399 != 0B) goto <D.28400>; else goto <D.28397>;
  <D.28400>:
  D.28399 = klass->generic_class;
  D.28401 = D.28399->container_class;
  D.28402 = mono_defaults.generic_nullable_class;
  if (D.28401 == D.28402) goto <D.28403>; else goto <D.28397>;
  <D.28403>:
  iftmp.302 = 1;
  goto <D.28398>;
  <D.28397>:
  iftmp.302 = 0;
  <D.28398>:
  D.28395 = iftmp.302;
  return D.28395;
}


mono_class_get_nullable_param (struct MonoClass * klass)
{
  int D.28405;
  _Bool D.28406;
  long int D.28407;
  long int D.28408;
  struct MonoClass * D.28411;
  struct MonoGenericClass * D.28412;
  struct MonoGenericInst * D.28413;
  struct MonoType * D.28414;

  D.28405 = mono_class_is_nullable (klass);
  D.28406 = D.28405 == 0;
  D.28407 = (long int) D.28406;
  D.28408 = __builtin_expect (D.28407, 0);
  if (D.28408 != 0) goto <D.28409>; else goto <D.28410>;
  <D.28409>:
  monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "class.c", 5807, "mono_class_is_nullable (klass)");
  <D.28410>:
  D.28412 = klass->generic_class;
  D.28413 = D.28412->context.class_inst;
  D.28414 = D.28413->type_argv[0];
  D.28411 = mono_class_from_mono_type (D.28414);
  return D.28411;
}


mono_generic_class_get_class (struct MonoGenericClass * gclass)
{
  struct MonoClass * D.28416;
  struct MonoClass * D.28419;
  struct MonoImageSet * D.28422;
  int record_gclass_instantiation.303;
  struct GSList * gclass_recorded_list.304;
  struct GSList * gclass_recorded_list.305;
  struct MonoClass * D.28428;
  const char * D.28431;
  const char * D.28432;
  struct MonoImage * D.28433;
  unsigned int D.28434;
  unsigned int D.28435;
  unsigned int D.28436;
  unsigned char D.28437;
  struct MonoGenericClass * D.28438;
  <unnamed-unsigned:1> D.28439;
  <unnamed-unsigned:1> D.28440;
  struct MonoClass * D.28441;
  int D.28442;
  struct MonoClass * D.28445;
  unsigned int D.28446;
  unsigned int D.28447;
  unsigned int D.28450;
  unsigned int D.28451;
  int D.28454;
  int D.28455;
  unsigned int inflated_classes.306;
  unsigned int inflated_classes.307;
  unsigned int inflated_classes_size.308;
  unsigned int inflated_classes_size.309;
  struct MonoClass * klass;
  struct MonoClass * gklass;

  D.28416 = gclass->cached_class;
  if (D.28416 != 0B) goto <D.28417>; else goto <D.28418>;
  <D.28417>:
  D.28419 = gclass->cached_class;
  return D.28419;
  <D.28418>:
  mono_loader_lock ();
  D.28416 = gclass->cached_class;
  if (D.28416 != 0B) goto <D.28420>; else goto <D.28421>;
  <D.28420>:
  mono_loader_unlock ();
  D.28419 = gclass->cached_class;
  return D.28419;
  <D.28421>:
  D.28422 = gclass->owner;
  klass = mono_image_set_alloc0 (D.28422, 164);
  gklass = gclass->container_class;
  record_gclass_instantiation.303 = record_gclass_instantiation;
  if (record_gclass_instantiation.303 > 0) goto <D.28424>; else goto <D.28425>;
  <D.28424>:
  gclass_recorded_list.304 = gclass_recorded_list;
  gclass_recorded_list.305 = monoeg_g_slist_append (gclass_recorded_list.304, klass);
  gclass_recorded_list = gclass_recorded_list.305;
  <D.28425>:
  D.28428 = gklass->nested_in;
  if (D.28428 != 0B) goto <D.28429>; else goto <D.28430>;
  <D.28429>:
  D.28428 = gklass->nested_in;
  klass->nested_in = D.28428;
  <D.28430>:
  D.28431 = gklass->name;
  klass->name = D.28431;
  D.28432 = gklass->name_space;
  klass->name_space = D.28432;
  mono_profiler_class_event (klass, 0);
  D.28433 = gklass->image;
  klass->image = D.28433;
  D.28434 = gklass->flags;
  klass->flags = D.28434;
  D.28435 = gklass->type_token;
  klass->type_token = D.28435;
  D.28436 = gklass->field.count;
  klass->field.count = D.28436;
  klass->is_inflated = 1;
  klass->generic_class = gclass;
  klass->byval_arg.type = 21;
  D.28437 = klass->byval_arg.type;
  klass->this_arg.type = D.28437;
  klass->byval_arg.data.generic_class = gclass;
  D.28438 = klass->byval_arg.data.generic_class;
  klass->this_arg.data.generic_class = D.28438;
  klass->this_arg.byref = 1;
  D.28439 = gklass->enumtype;
  klass->enumtype = D.28439;
  D.28440 = gklass->valuetype;
  klass->valuetype = D.28440;
  klass->element_class = klass;
  D.28441 = klass->element_class;
  klass->cast_class = D.28441;
  D.28442 = mono_class_is_nullable (klass);
  if (D.28442 != 0) goto <D.28443>; else goto <D.28444>;
  <D.28443>:
  D.28445 = mono_class_get_nullable_param (klass);
  klass->element_class = D.28445;
  D.28441 = klass->element_class;
  klass->cast_class = D.28441;
  <D.28444>:
  mono_generic_class_setup_parent (klass, gklass);
  D.28446 = BIT_FIELD_REF <*gclass, 32, 96>;
  D.28447 = D.28446 & 1;
  if (D.28447 != 0) goto <D.28448>; else goto <D.28449>;
  <D.28448>:
  klass->inited = 1;
  mono_class_setup_supertypes (klass);
  D.28450 = BIT_FIELD_REF <*klass, 32, 160>;
  D.28451 = D.28450 & 16;
  if (D.28451 != 0) goto <D.28452>; else goto <D.28453>;
  <D.28452>:
  D.28454 = gklass->instance_size;
  klass->instance_size = D.28454;
  D.28455 = gklass->sizes.class_size;
  klass->sizes.class_size = D.28455;
  mono_memory_barrier ();
  klass->size_inited = 1;
  <D.28453>:
  <D.28449>:
  mono_memory_barrier ();
  gclass->cached_class = klass;
  mono_profiler_class_loaded (klass, 0);
  inflated_classes.306 = inflated_classes;
  inflated_classes.307 = inflated_classes.306 + 1;
  inflated_classes = inflated_classes.307;
  inflated_classes_size.308 = inflated_classes_size;
  inflated_classes_size.309 = inflated_classes_size.308 + 164;
  inflated_classes_size = inflated_classes_size.309;
  mono_loader_unlock ();
  D.28419 = klass;
  return D.28419;
}


mono_class_from_generic_parameter (struct MonoGenericParam * param, struct MonoImage * image, gboolean is_mvar)
{
  struct MonoGenericParamInfo * iftmp.310;
  struct MonoGenericContainer * D.28464;
  struct MonoClass * D.28468;
  struct MonoClass * D.28471;
  struct MonoImage * iftmp.311;
  struct MonoClass * D.28485;
  struct MonoImage * iftmp.312;
  struct MonoGenericContainer * container;
  struct MonoGenericParamInfo * pinfo;
  struct MonoClass * klass;

  container = param->owner;
  mono_loader_lock ();
  if (container != 0B) goto <D.28461>; else goto <D.28462>;
  <D.28461>:
  D.28464 = param->owner;
  if (D.28464 != 0B) goto <D.28465>; else goto <D.28466>;
  <D.28465>:
  iftmp.310 = &MEM[(struct MonoGenericParamFull *)param].info;
  goto <D.28467>;
  <D.28466>:
  iftmp.310 = 0B;
  <D.28467>:
  pinfo = iftmp.310;
  D.28468 = pinfo->pklass;
  if (D.28468 != 0B) goto <D.28469>; else goto <D.28470>;
  <D.28469>:
  mono_loader_unlock ();
  D.28471 = pinfo->pklass;
  return D.28471;
  <D.28470>:
  goto <D.28472>;
  <D.28462>:
  pinfo = 0B;
  image = 0B;
  klass = get_anon_gparam_class (param, is_mvar);
  if (klass != 0B) goto <D.28473>; else goto <D.28474>;
  <D.28473>:
  mono_loader_unlock ();
  D.28471 = klass;
  return D.28471;
  <D.28474>:
  <D.28472>:
  if (image == 0B) goto <D.28475>; else goto <D.28476>;
  <D.28475>:
  if (container != 0B) goto <D.28477>; else goto <D.28478>;
  <D.28477>:
  if (is_mvar != 0) goto <D.28479>; else goto <D.28480>;
  <D.28479>:
  {
    struct MonoMethod * method;

    method = container->owner.method;
    if (method != 0B) goto <D.28484>; else goto <D.28482>;
    <D.28484>:
    D.28485 = method->klass;
    if (D.28485 != 0B) goto <D.28486>; else goto <D.28482>;
    <D.28486>:
    D.28485 = method->klass;
    iftmp.311 = D.28485->image;
    goto <D.28483>;
    <D.28482>:
    iftmp.311 = 0B;
    <D.28483>:
    image = iftmp.311;
  }
  goto <D.28487>;
  <D.28480>:
  {
    struct MonoClass * klass;

    klass = container->owner.klass;
    if (klass != 0B) goto <D.28489>; else goto <D.28490>;
    <D.28489>:
    iftmp.312 = klass->image;
    goto <D.28491>;
    <D.28490>:
    iftmp.312 = 0B;
    <D.28491>:
    image = iftmp.312;
  }
  <D.28487>:
  <D.28478>:
  <D.28476>:
  klass = make_generic_param_class (param, image, is_mvar, pinfo);
  mono_memory_barrier ();
  if (container != 0B) goto <D.28492>; else goto <D.28493>;
  <D.28492>:
  pinfo->pklass = klass;
  goto <D.28494>;
  <D.28493>:
  set_anon_gparam_class (param, is_mvar, klass);
  <D.28494>:
  mono_loader_unlock ();
  mono_profiler_class_loaded (klass, 0);
  D.28471 = klass;
  return D.28471;
}


get_anon_gparam_class (struct MonoGenericParam * param, gboolean is_mvar)
{
  short unsigned int D.28496;
  unsigned int D.28497;
  short unsigned int D.28498;
  unsigned int D.28499;
  unsigned int D.28500;
  unsigned int D.28501;
  _Bool D.28502;
  long int D.28503;
  long int D.28504;
  struct MonoClass * D.28511;
  struct MonoClass * iftmp.313;
  struct MonoClass * * D.28513;
  unsigned int n.314;
  unsigned int D.28517;
  struct MonoClass * * D.28518;
  struct MonoClass * iftmp.315;
  struct MonoClass * * D.28521;
  struct MonoClass * * D.28524;
  struct GHashTable * iftmp.316;
  struct MonoClass * iftmp.317;
  const void * n.318;
  int n;
  struct MonoImage * image;
  struct GHashTable * ht;

  D.28496 = param->num;
  D.28497 = (unsigned int) D.28496;
  D.28498 = param->serial;
  D.28499 = (unsigned int) D.28498;
  D.28500 = D.28499 << 16;
  D.28501 = D.28497 | D.28500;
  n = (int) D.28501;
  image = param->image;
  D.28502 = image == 0B;
  D.28503 = (long int) D.28502;
  D.28504 = __builtin_expect (D.28503, 0);
  if (D.28504 != 0) goto <D.28505>; else goto <D.28506>;
  <D.28505>:
  monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "class.c", 6028, "image");
  <D.28506>:
  if (n <= 15) goto <D.28507>; else goto <D.28508>;
  <D.28507>:
  if (is_mvar != 0) goto <D.28509>; else goto <D.28510>;
  <D.28509>:
  D.28513 = image->mvar_cache_fast;
  if (D.28513 != 0B) goto <D.28514>; else goto <D.28515>;
  <D.28514>:
  D.28513 = image->mvar_cache_fast;
  n.314 = (unsigned int) n;
  D.28517 = n.314 * 4;
  D.28518 = D.28513 + D.28517;
  iftmp.313 = *D.28518;
  goto <D.28519>;
  <D.28515>:
  iftmp.313 = 0B;
  <D.28519>:
  D.28511 = iftmp.313;
  return D.28511;
  <D.28510>:
  D.28521 = image->var_cache_fast;
  if (D.28521 != 0B) goto <D.28522>; else goto <D.28523>;
  <D.28522>:
  D.28521 = image->var_cache_fast;
  n.314 = (unsigned int) n;
  D.28517 = n.314 * 4;
  D.28524 = D.28521 + D.28517;
  iftmp.315 = *D.28524;
  goto <D.28525>;
  <D.28523>:
  iftmp.315 = 0B;
  <D.28525>:
  D.28511 = iftmp.315;
  return D.28511;
  <D.28508>:
  if (is_mvar != 0) goto <D.28527>; else goto <D.28528>;
  <D.28527>:
  iftmp.316 = image->mvar_cache_slow;
  goto <D.28529>;
  <D.28528>:
  iftmp.316 = image->var_cache_slow;
  <D.28529>:
  ht = iftmp.316;
  if (ht != 0B) goto <D.28531>; else goto <D.28532>;
  <D.28531>:
  n.318 = (const void *) n;
  iftmp.317 = monoeg_g_hash_table_lookup (ht, n.318);
  goto <D.28534>;
  <D.28532>:
  iftmp.317 = 0B;
  <D.28534>:
  D.28511 = iftmp.317;
  return D.28511;
}


make_generic_param_class (struct MonoGenericParam * param, struct MonoImage * image, gboolean is_mvar, struct MonoGenericParamInfo * pinfo)
{
  unsigned int classes_size.319;
  unsigned int classes_size.320;
  const char * D.28542;
  short unsigned int D.28544;
  void * D.28545;
  const char * D.28546;
  const char * iftmp.321;
  struct MonoClass * D.28555;
  const char * iftmp.322;
  struct MonoClass * D.28566;
  struct MonoClass * * D.28570;
  struct MonoClass * D.28571;
  unsigned int D.28572;
  unsigned int D.28573;
  unsigned char D.28575;
  short unsigned int D.28581;
  int D.28582;
  int D.28583;
  struct MonoImage * D.28585;
  struct MonoClass * D.28586;
  struct MonoClass * D.28587;
  int D.28588;
  short unsigned int D.28591;
  short unsigned int D.28592;
  short unsigned int D.28593;
  unsigned int D.28594;
  unsigned int D.28595;
  void * D.28596;
  struct MonoClass * * D.28597;
  int D.28598;
  unsigned int D.28599;
  unsigned int D.28600;
  struct MonoClass * * D.28601;
  unsigned int i.323;
  unsigned int D.28603;
  struct MonoClass * * D.28604;
  struct MonoClass * D.28605;
  struct MonoClass * D.28606;
  unsigned char iftmp.324;
  unsigned char D.28611;
  struct MonoGenericParam * D.28612;
  int iftmp.325;
  unsigned int D.28616;
  struct MonoClass * D.28620;
  unsigned char D.28621;
  gchar * D.28624;
  int D.28626;
  struct MonoClass * D.28627;
  struct MonoClass * klass;
  struct MonoClass * * ptr;
  int count;
  int pos;
  int i;
  struct MonoGenericContainer * container;

  container = param->owner;
  if (image == 0B) goto <D.28536>; else goto <D.28537>;
  <D.28536>:
  image = mono_defaults.corlib;
  <D.28537>:
  klass = mono_image_alloc0 (image, 164);
  classes_size.319 = classes_size;
  classes_size.320 = classes_size.319 + 164;
  classes_size = classes_size.320;
  if (pinfo != 0B) goto <D.28540>; else goto <D.28541>;
  <D.28540>:
  D.28542 = pinfo->name;
  klass->name = D.28542;
  goto <D.28543>;
  <D.28541>:
  {
    int n;

    D.28544 = param->num;
    n = (int) D.28544;
    D.28545 = mono_image_alloc0 (image, 16);
    klass->name = D.28545;
    D.28546 = klass->name;
    sprintf (D.28546, "%d", n);
  }
  <D.28543>:
  if (container != 0B) goto <D.28547>; else goto <D.28548>;
  <D.28547>:
  if (is_mvar != 0) goto <D.28549>; else goto <D.28550>;
  <D.28549>:
  {
    struct MonoMethod * omethod;

    omethod = container->owner.method;
    if (omethod != 0B) goto <D.28554>; else goto <D.28552>;
    <D.28554>:
    D.28555 = omethod->klass;
    if (D.28555 != 0B) goto <D.28556>; else goto <D.28552>;
    <D.28556>:
    D.28555 = omethod->klass;
    iftmp.321 = D.28555->name_space;
    goto <D.28553>;
    <D.28552>:
    iftmp.321 = "";
    <D.28553>:
    klass->name_space = iftmp.321;
  }
  goto <D.28557>;
  <D.28550>:
  {
    struct MonoClass * oklass;

    oklass = container->owner.klass;
    if (oklass != 0B) goto <D.28559>; else goto <D.28560>;
    <D.28559>:
    iftmp.322 = oklass->name_space;
    goto <D.28561>;
    <D.28560>:
    iftmp.322 = "";
    <D.28561>:
    klass->name_space = iftmp.322;
  }
  <D.28557>:
  goto <D.28562>;
  <D.28548>:
  klass->name_space = "";
  <D.28562>:
  mono_profiler_class_event (klass, 0);
  count = 0;
  if (pinfo != 0B) goto <D.28563>; else goto <D.28564>;
  <D.28563>:
  ptr = pinfo->constraints;
  goto <D.20471>;
  <D.20470>:
  ptr = ptr + 4;
  count = count + 1;
  <D.20471>:
  if (ptr != 0B) goto <D.28565>; else goto <D.20472>;
  <D.28565>:
  D.28566 = *ptr;
  if (D.28566 != 0B) goto <D.20470>; else goto <D.20472>;
  <D.20472>:
  <D.28564>:
  pos = 0;
  if (count > 0) goto <D.28569>; else goto <D.28567>;
  <D.28569>:
  D.28570 = pinfo->constraints;
  D.28571 = *D.28570;
  D.28572 = D.28571->flags;
  D.28573 = D.28572 & 32;
  if (D.28573 == 0) goto <D.28574>; else goto <D.28567>;
  <D.28574>:
  D.28570 = pinfo->constraints;
  D.28571 = *D.28570;
  D.28575 = D.28571->byval_arg.type;
  if (D.28575 != 19) goto <D.28576>; else goto <D.28567>;
  <D.28576>:
  D.28570 = pinfo->constraints;
  D.28571 = *D.28570;
  D.28575 = D.28571->byval_arg.type;
  if (D.28575 != 30) goto <D.28577>; else goto <D.28567>;
  <D.28577>:
  D.28570 = pinfo->constraints;
  D.28571 = *D.28570;
  klass->parent = D.28571;
  pos = pos + 1;
  goto <D.28568>;
  <D.28567>:
  if (pinfo != 0B) goto <D.28580>; else goto <D.28578>;
  <D.28580>:
  D.28581 = pinfo->flags;
  D.28582 = (int) D.28581;
  D.28583 = D.28582 & 8;
  if (D.28583 != 0) goto <D.28584>; else goto <D.28578>;
  <D.28584>:
  D.28585 = mono_defaults.corlib;
  D.28586 = mono_class_from_name (D.28585, "System", "ValueType");
  klass->parent = D.28586;
  goto <D.28579>;
  <D.28578>:
  D.28587 = mono_defaults.object_class;
  klass->parent = D.28587;
  <D.28579>:
  <D.28568>:
  D.28588 = count - pos;
  if (D.28588 > 0) goto <D.28589>; else goto <D.28590>;
  <D.28589>:
  D.28591 = (short unsigned int) count;
  D.28592 = (short unsigned int) pos;
  D.28593 = D.28591 - D.28592;
  klass->interface_count = D.28593;
  D.28588 = count - pos;
  D.28594 = (unsigned int) D.28588;
  D.28595 = D.28594 * 4;
  D.28596 = mono_image_alloc0 (image, D.28595);
  klass->interfaces = D.28596;
  klass->interfaces_inited = 1;
  i = pos;
  goto <D.20474>;
  <D.20473>:
  D.28597 = klass->interfaces;
  D.28598 = i - pos;
  D.28599 = (unsigned int) D.28598;
  D.28600 = D.28599 * 4;
  D.28601 = D.28597 + D.28600;
  D.28570 = pinfo->constraints;
  i.323 = (unsigned int) i;
  D.28603 = i.323 * 4;
  D.28604 = D.28570 + D.28603;
  D.28605 = *D.28604;
  *D.28601 = D.28605;
  i = i + 1;
  <D.20474>:
  if (i < count) goto <D.20473>; else goto <D.20475>;
  <D.20475>:
  <D.28590>:
  klass->image = image;
  klass->inited = 1;
  klass->element_class = klass;
  D.28606 = klass->element_class;
  klass->cast_class = D.28606;
  klass->flags = 1;
  if (is_mvar != 0) goto <D.28608>; else goto <D.28609>;
  <D.28608>:
  iftmp.324 = 30;
  goto <D.28610>;
  <D.28609>:
  iftmp.324 = 19;
  <D.28610>:
  klass->byval_arg.type = iftmp.324;
  D.28611 = klass->byval_arg.type;
  klass->this_arg.type = D.28611;
  klass->byval_arg.data.generic_param = param;
  D.28612 = klass->byval_arg.data.generic_param;
  klass->this_arg.data.generic_param = D.28612;
  klass->this_arg.byref = 1;
  if (pinfo != 0B) goto <D.28614>; else goto <D.28615>;
  <D.28614>:
  D.28616 = pinfo->token;
  iftmp.325 = (int) D.28616;
  goto <D.28617>;
  <D.28615>:
  iftmp.325 = 0;
  <D.28617>:
  klass->sizes.generic_param_token = iftmp.325;
  klass->min_align = 1;
  klass->instance_size = 4;
  mono_memory_barrier ();
  klass->size_inited = 1;
  mono_class_setup_supertypes (klass);
  D.28588 = count - pos;
  if (D.28588 > 0) goto <D.28618>; else goto <D.28619>;
  <D.28618>:
  D.28620 = klass->parent;
  mono_class_setup_vtable (D.28620);
  D.28620 = klass->parent;
  D.28621 = D.28620->exception_type;
  if (D.28621 != 0) goto <D.28622>; else goto <D.28623>;
  <D.28622>:
  D.28624 = monoeg_strdup ("Failed to setup parent interfaces");
  mono_class_set_failure (klass, 7, D.28624);
  goto <D.28625>;
  <D.28623>:
  D.28620 = klass->parent;
  D.28626 = D.28620->vtable_size;
  setup_interface_offsets (klass, D.28626, 1);
  <D.28625>:
  <D.28619>:
  D.28627 = klass;
  return D.28627;
}


sprintf (char * restrict __s, const char * restrict __fmt)
{
  int D.28629;
  unsigned int D.28630;

  D.28630 = __builtin_object_size (__s, 1);
  D.28629 = __builtin___sprintf_chk (__s, 1, D.28630, __fmt, __builtin_va_arg_pack ());
  return D.28629;
}


set_anon_gparam_class (struct MonoGenericParam * param, gboolean is_mvar, struct MonoClass * klass)
{
  short unsigned int D.28632;
  unsigned int D.28633;
  short unsigned int D.28634;
  unsigned int D.28635;
  unsigned int D.28636;
  unsigned int D.28637;
  _Bool D.28638;
  long int D.28639;
  long int D.28640;
  struct MonoClass * * D.28647;
  void * D.28650;
  unsigned int n.326;
  unsigned int D.28652;
  struct MonoClass * * D.28653;
  struct MonoClass * * D.28655;
  void * D.28658;
  struct MonoClass * * D.28659;
  struct GHashTable * iftmp.327;
  struct GHashTable * iftmp.328;
  void * n.329;
  int n;
  struct MonoImage * image;
  struct GHashTable * ht;

  D.28632 = param->num;
  D.28633 = (unsigned int) D.28632;
  D.28634 = param->serial;
  D.28635 = (unsigned int) D.28634;
  D.28636 = D.28635 << 16;
  D.28637 = D.28633 | D.28636;
  n = (int) D.28637;
  image = param->image;
  D.28638 = image == 0B;
  D.28639 = (long int) D.28638;
  D.28640 = __builtin_expect (D.28639, 0);
  if (D.28640 != 0) goto <D.28641>; else goto <D.28642>;
  <D.28641>:
  monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "class.c", 6051, "image");
  <D.28642>:
  if (n <= 15) goto <D.28643>; else goto <D.28644>;
  <D.28643>:
  if (is_mvar != 0) goto <D.28645>; else goto <D.28646>;
  <D.28645>:
  D.28647 = image->mvar_cache_fast;
  if (D.28647 == 0B) goto <D.28648>; else goto <D.28649>;
  <D.28648>:
  D.28650 = mono_image_alloc0 (image, 64);
  image->mvar_cache_fast = D.28650;
  <D.28649>:
  D.28647 = image->mvar_cache_fast;
  n.326 = (unsigned int) n;
  D.28652 = n.326 * 4;
  D.28653 = D.28647 + D.28652;
  *D.28653 = klass;
  goto <D.28654>;
  <D.28646>:
  D.28655 = image->var_cache_fast;
  if (D.28655 == 0B) goto <D.28656>; else goto <D.28657>;
  <D.28656>:
  D.28658 = mono_image_alloc0 (image, 64);
  image->var_cache_fast = D.28658;
  <D.28657>:
  D.28655 = image->var_cache_fast;
  n.326 = (unsigned int) n;
  D.28652 = n.326 * 4;
  D.28659 = D.28655 + D.28652;
  *D.28659 = klass;
  <D.28654>:
  return;
  <D.28644>:
  if (is_mvar != 0) goto <D.28661>; else goto <D.28662>;
  <D.28661>:
  iftmp.327 = image->mvar_cache_slow;
  goto <D.28663>;
  <D.28662>:
  iftmp.327 = image->var_cache_slow;
  <D.28663>:
  ht = iftmp.327;
  if (ht == 0B) goto <D.28664>; else goto <D.28665>;
  <D.28664>:
  mono_loader_lock ();
  if (is_mvar != 0) goto <D.28667>; else goto <D.28668>;
  <D.28667>:
  iftmp.328 = image->mvar_cache_slow;
  goto <D.28669>;
  <D.28668>:
  iftmp.328 = image->var_cache_slow;
  <D.28669>:
  ht = iftmp.328;
  if (ht == 0B) goto <D.28670>; else goto <D.28671>;
  <D.28670>:
  ht = monoeg_g_hash_table_new (0B, 0B);
  mono_memory_barrier ();
  if (is_mvar != 0) goto <D.28672>; else goto <D.28673>;
  <D.28672>:
  image->mvar_cache_slow = ht;
  goto <D.28674>;
  <D.28673>:
  image->var_cache_slow = ht;
  <D.28674>:
  <D.28671>:
  mono_loader_unlock ();
  <D.28665>:
  n.329 = (void *) n;
  monoeg_g_hash_table_insert_replace (ht, n.329, klass, 0);
}


mono_ptr_class_get (struct MonoType * type)
{
  struct GHashTable * D.28677;
  struct GHashTable * D.28680;
  struct MonoClass * D.28683;
  unsigned int classes_size.330;
  unsigned int classes_size.331;
  const char * D.28686;
  const char * D.28687;
  char * D.28688;
  struct MonoImage * D.28689;
  unsigned int D.28690;
  unsigned int D.28691;
  struct MonoClass * D.28692;
  unsigned char D.28693;
  struct MonoType * D.28694;
  struct MonoType * D.28695;
  struct MonoClass * result;
  struct MonoClass * el_class;
  struct MonoImage * image;
  char * name;

  el_class = mono_class_from_mono_type (type);
  image = el_class->image;
  mono_loader_lock ();
  D.28677 = image->ptr_cache;
  if (D.28677 == 0B) goto <D.28678>; else goto <D.28679>;
  <D.28678>:
  D.28680 = monoeg_g_hash_table_new (mono_aligned_addr_hash, 0B);
  image->ptr_cache = D.28680;
  <D.28679>:
  D.28677 = image->ptr_cache;
  result = monoeg_g_hash_table_lookup (D.28677, el_class);
  if (result != 0B) goto <D.28681>; else goto <D.28682>;
  <D.28681>:
  mono_loader_unlock ();
  D.28683 = result;
  return D.28683;
  <D.28682>:
  result = mono_image_alloc0 (image, 164);
  classes_size.330 = classes_size;
  classes_size.331 = classes_size.330 + 164;
  classes_size = classes_size.331;
  result->parent = 0B;
  D.28686 = el_class->name_space;
  result->name_space = D.28686;
  D.28687 = el_class->name;
  name = monoeg_g_strdup_printf ("%s*", D.28687);
  D.28688 = mono_image_strdup (image, name);
  result->name = D.28688;
  monoeg_g_free (name);
  mono_profiler_class_event (result, 0);
  D.28689 = el_class->image;
  result->image = D.28689;
  result->inited = 1;
  D.28690 = el_class->flags;
  D.28691 = D.28690 & 7;
  result->flags = D.28691;
  result->instance_size = 4;
  result->element_class = el_class;
  D.28692 = result->element_class;
  result->cast_class = D.28692;
  result->blittable = 1;
  result->byval_arg.type = 15;
  D.28693 = result->byval_arg.type;
  result->this_arg.type = D.28693;
  D.28692 = result->element_class;
  D.28694 = &D.28692->byval_arg;
  result->byval_arg.data.type = D.28694;
  D.28695 = result->byval_arg.data.type;
  result->this_arg.data.type = D.28695;
  result->this_arg.byref = 1;
  mono_class_setup_supertypes (result);
  D.28677 = image->ptr_cache;
  monoeg_g_hash_table_insert_replace (D.28677, el_class, result, 0);
  mono_loader_unlock ();
  mono_profiler_class_loaded (result, 0);
  D.28683 = result;
  return D.28683;
}


mono_class_from_mono_type (struct MonoType * type)
{
  unsigned char D.28697;
  int D.28698;
  struct MonoClass * D.28699;
  struct MonoClass * iftmp.332;
  struct MonoClass * D.28701;
  struct MonoClass * iftmp.333;
  struct MonoClass * iftmp.334;
  struct MonoClass * iftmp.335;
  struct MonoClass * iftmp.336;
  struct MonoClass * iftmp.337;
  struct MonoClass * iftmp.338;
  struct MonoClass * iftmp.339;
  struct MonoClass * iftmp.340;
  struct MonoClass * iftmp.341;
  struct MonoClass * iftmp.342;
  struct MonoClass * iftmp.343;
  struct MonoClass * iftmp.344;
  struct MonoClass * iftmp.345;
  struct MonoClass * iftmp.346;
  struct MonoClass * iftmp.347;
  struct MonoClass * iftmp.348;
  struct MonoClass * iftmp.349;
  struct MonoArrayType * D.28773;
  struct MonoClass * D.28774;
  unsigned char D.28775;
  unsigned int D.28776;
  struct MonoType * D.28777;
  struct MonoMethodSignature * D.28778;
  struct MonoGenericClass * D.28779;
  struct MonoGenericParam * D.28780;

  D.28697 = type->type;
  D.28698 = (int) D.28697;
  switch (D.28698) <default: <D.20543>, case 1: <D.20517>, case 2: <D.20518>, case 3: <D.20519>, case 4: <D.20520>, case 5: <D.20521>, case 6: <D.20522>, case 7: <D.20523>, case 8: <D.20524>, case 9: <D.20525>, case 10: <D.20528>, case 11: <D.20529>, case 12: <D.20530>, case 13: <D.20531>, case 14: <D.20532>, case 15: <D.20535>, case 17: <D.20539>, case 18: <D.20538>, case 19: <D.20541>, case 20: <D.20534>, case 21: <D.20540>, case 22: <D.20533>, case 24: <D.20526>, case 25: <D.20527>, case 27: <D.20536>, case 28: <D.20516>, case 29: <D.20537>, case 30: <D.20542>>
  <D.20516>:
  D.28701 = type->data.klass;
  if (D.28701 != 0B) goto <D.28702>; else goto <D.28703>;
  <D.28702>:
  iftmp.332 = type->data.klass;
  goto <D.28704>;
  <D.28703>:
  iftmp.332 = mono_defaults.object_class;
  <D.28704>:
  D.28699 = iftmp.332;
  return D.28699;
  <D.20517>:
  D.28701 = type->data.klass;
  if (D.28701 != 0B) goto <D.28706>; else goto <D.28707>;
  <D.28706>:
  iftmp.333 = type->data.klass;
  goto <D.28708>;
  <D.28707>:
  iftmp.333 = mono_defaults.void_class;
  <D.28708>:
  D.28699 = iftmp.333;
  return D.28699;
  <D.20518>:
  D.28701 = type->data.klass;
  if (D.28701 != 0B) goto <D.28710>; else goto <D.28711>;
  <D.28710>:
  iftmp.334 = type->data.klass;
  goto <D.28712>;
  <D.28711>:
  iftmp.334 = mono_defaults.boolean_class;
  <D.28712>:
  D.28699 = iftmp.334;
  return D.28699;
  <D.20519>:
  D.28701 = type->data.klass;
  if (D.28701 != 0B) goto <D.28714>; else goto <D.28715>;
  <D.28714>:
  iftmp.335 = type->data.klass;
  goto <D.28716>;
  <D.28715>:
  iftmp.335 = mono_defaults.char_class;
  <D.28716>:
  D.28699 = iftmp.335;
  return D.28699;
  <D.20520>:
  D.28701 = type->data.klass;
  if (D.28701 != 0B) goto <D.28718>; else goto <D.28719>;
  <D.28718>:
  iftmp.336 = type->data.klass;
  goto <D.28720>;
  <D.28719>:
  iftmp.336 = mono_defaults.sbyte_class;
  <D.28720>:
  D.28699 = iftmp.336;
  return D.28699;
  <D.20521>:
  D.28701 = type->data.klass;
  if (D.28701 != 0B) goto <D.28722>; else goto <D.28723>;
  <D.28722>:
  iftmp.337 = type->data.klass;
  goto <D.28724>;
  <D.28723>:
  iftmp.337 = mono_defaults.byte_class;
  <D.28724>:
  D.28699 = iftmp.337;
  return D.28699;
  <D.20522>:
  D.28701 = type->data.klass;
  if (D.28701 != 0B) goto <D.28726>; else goto <D.28727>;
  <D.28726>:
  iftmp.338 = type->data.klass;
  goto <D.28728>;
  <D.28727>:
  iftmp.338 = mono_defaults.int16_class;
  <D.28728>:
  D.28699 = iftmp.338;
  return D.28699;
  <D.20523>:
  D.28701 = type->data.klass;
  if (D.28701 != 0B) goto <D.28730>; else goto <D.28731>;
  <D.28730>:
  iftmp.339 = type->data.klass;
  goto <D.28732>;
  <D.28731>:
  iftmp.339 = mono_defaults.uint16_class;
  <D.28732>:
  D.28699 = iftmp.339;
  return D.28699;
  <D.20524>:
  D.28701 = type->data.klass;
  if (D.28701 != 0B) goto <D.28734>; else goto <D.28735>;
  <D.28734>:
  iftmp.340 = type->data.klass;
  goto <D.28736>;
  <D.28735>:
  iftmp.340 = mono_defaults.int32_class;
  <D.28736>:
  D.28699 = iftmp.340;
  return D.28699;
  <D.20525>:
  D.28701 = type->data.klass;
  if (D.28701 != 0B) goto <D.28738>; else goto <D.28739>;
  <D.28738>:
  iftmp.341 = type->data.klass;
  goto <D.28740>;
  <D.28739>:
  iftmp.341 = mono_defaults.uint32_class;
  <D.28740>:
  D.28699 = iftmp.341;
  return D.28699;
  <D.20526>:
  D.28701 = type->data.klass;
  if (D.28701 != 0B) goto <D.28742>; else goto <D.28743>;
  <D.28742>:
  iftmp.342 = type->data.klass;
  goto <D.28744>;
  <D.28743>:
  iftmp.342 = mono_defaults.int_class;
  <D.28744>:
  D.28699 = iftmp.342;
  return D.28699;
  <D.20527>:
  D.28701 = type->data.klass;
  if (D.28701 != 0B) goto <D.28746>; else goto <D.28747>;
  <D.28746>:
  iftmp.343 = type->data.klass;
  goto <D.28748>;
  <D.28747>:
  iftmp.343 = mono_defaults.uint_class;
  <D.28748>:
  D.28699 = iftmp.343;
  return D.28699;
  <D.20528>:
  D.28701 = type->data.klass;
  if (D.28701 != 0B) goto <D.28750>; else goto <D.28751>;
  <D.28750>:
  iftmp.344 = type->data.klass;
  goto <D.28752>;
  <D.28751>:
  iftmp.344 = mono_defaults.int64_class;
  <D.28752>:
  D.28699 = iftmp.344;
  return D.28699;
  <D.20529>:
  D.28701 = type->data.klass;
  if (D.28701 != 0B) goto <D.28754>; else goto <D.28755>;
  <D.28754>:
  iftmp.345 = type->data.klass;
  goto <D.28756>;
  <D.28755>:
  iftmp.345 = mono_defaults.uint64_class;
  <D.28756>:
  D.28699 = iftmp.345;
  return D.28699;
  <D.20530>:
  D.28701 = type->data.klass;
  if (D.28701 != 0B) goto <D.28758>; else goto <D.28759>;
  <D.28758>:
  iftmp.346 = type->data.klass;
  goto <D.28760>;
  <D.28759>:
  iftmp.346 = mono_defaults.single_class;
  <D.28760>:
  D.28699 = iftmp.346;
  return D.28699;
  <D.20531>:
  D.28701 = type->data.klass;
  if (D.28701 != 0B) goto <D.28762>; else goto <D.28763>;
  <D.28762>:
  iftmp.347 = type->data.klass;
  goto <D.28764>;
  <D.28763>:
  iftmp.347 = mono_defaults.double_class;
  <D.28764>:
  D.28699 = iftmp.347;
  return D.28699;
  <D.20532>:
  D.28701 = type->data.klass;
  if (D.28701 != 0B) goto <D.28766>; else goto <D.28767>;
  <D.28766>:
  iftmp.348 = type->data.klass;
  goto <D.28768>;
  <D.28767>:
  iftmp.348 = mono_defaults.string_class;
  <D.28768>:
  D.28699 = iftmp.348;
  return D.28699;
  <D.20533>:
  D.28701 = type->data.klass;
  if (D.28701 != 0B) goto <D.28770>; else goto <D.28771>;
  <D.28770>:
  iftmp.349 = type->data.klass;
  goto <D.28772>;
  <D.28771>:
  iftmp.349 = mono_defaults.typed_reference_class;
  <D.28772>:
  D.28699 = iftmp.349;
  return D.28699;
  <D.20534>:
  D.28773 = type->data.array;
  D.28774 = D.28773->eklass;
  D.28773 = type->data.array;
  D.28775 = D.28773->rank;
  D.28776 = (unsigned int) D.28775;
  D.28699 = mono_bounded_array_class_get (D.28774, D.28776, 1);
  return D.28699;
  <D.20535>:
  D.28777 = type->data.type;
  D.28699 = mono_ptr_class_get (D.28777);
  return D.28699;
  <D.20536>:
  D.28778 = type->data.method;
  D.28699 = mono_fnptr_class_get (D.28778);
  return D.28699;
  <D.20537>:
  D.28701 = type->data.klass;
  D.28699 = mono_array_class_get (D.28701, 1);
  return D.28699;
  <D.20538>:
  <D.20539>:
  D.28699 = type->data.klass;
  return D.28699;
  <D.20540>:
  D.28779 = type->data.generic_class;
  D.28699 = mono_generic_class_get_class (D.28779);
  return D.28699;
  <D.20541>:
  D.28780 = type->data.generic_param;
  D.28699 = mono_class_from_generic_parameter (D.28780, 0B, 0);
  return D.28699;
  <D.20542>:
  D.28780 = type->data.generic_param;
  D.28699 = mono_class_from_generic_parameter (D.28780, 0B, 1);
  return D.28699;
  <D.20543>:
  D.28697 = type->type;
  D.28698 = (int) D.28697;
  monoeg_g_log (0B, 16, "mono_class_from_mono_type: implement me 0x%02x\n", D.28698);
  monoeg_assertion_message ("* Assertion: should not be reached at %s:%d\n", "class.c", 6305);
  D.28699 = 0B;
  return D.28699;
}


mono_fnptr_class_get (struct MonoMethodSignature * sig)
{
  struct GHashTable * ptr_hash.350;
  struct GHashTable * ptr_hash.351;
  struct MonoClass * D.28788;
  struct MonoImage * D.28789;
  struct MonoClass * D.28790;
  unsigned char D.28791;
  struct MonoMethodSignature * D.28792;
  struct MonoClass * result;
  static struct GHashTable * ptr_hash = 0B;

  mono_loader_lock ();
  ptr_hash.350 = ptr_hash;
  if (ptr_hash.350 == 0B) goto <D.28783>; else goto <D.28784>;
  <D.28783>:
  ptr_hash.351 = monoeg_g_hash_table_new (mono_aligned_addr_hash, 0B);
  ptr_hash = ptr_hash.351;
  <D.28784>:
  ptr_hash.350 = ptr_hash;
  result = monoeg_g_hash_table_lookup (ptr_hash.350, sig);
  if (result != 0B) goto <D.28786>; else goto <D.28787>;
  <D.28786>:
  mono_loader_unlock ();
  D.28788 = result;
  return D.28788;
  <D.28787>:
  result = monoeg_malloc0 (164);
  result->parent = 0B;
  result->name_space = "System";
  result->name = "MonoFNPtrFakeClass";
  mono_profiler_class_event (result, 0);
  D.28789 = mono_defaults.corlib;
  result->image = D.28789;
  result->inited = 1;
  result->flags = 0;
  result->instance_size = 4;
  result->element_class = result;
  D.28790 = result->element_class;
  result->cast_class = D.28790;
  result->blittable = 1;
  result->byval_arg.type = 27;
  D.28791 = result->byval_arg.type;
  result->this_arg.type = D.28791;
  result->byval_arg.data.method = sig;
  D.28792 = result->byval_arg.data.method;
  result->this_arg.data.method = D.28792;
  result->this_arg.byref = 1;
  result->blittable = 1;
  mono_class_setup_supertypes (result);
  ptr_hash.350 = ptr_hash;
  monoeg_g_hash_table_insert_replace (ptr_hash.350, sig, result, 0);
  mono_loader_unlock ();
  mono_profiler_class_loaded (result, 0);
  D.28788 = result;
  return D.28788;
}


mono_bounded_array_class_get (struct MonoClass * eclass, guint32 rank, gboolean bounded)
{
  _Bool D.28794;
  long int D.28795;
  long int D.28796;
  union mono_mutex_t * D.28805;
  _Bool D.28808;
  long int D.28809;
  long int D.28810;
  struct GHashTable * D.28813;
  struct GHashTable * D.28816;
  _Bool D.28819;
  long int D.28820;
  long int D.28821;
  struct MonoClass * D.28826;
  struct GHashTable * D.28827;
  struct GHashTable * D.28830;
  unsigned char D.28833;
  unsigned int D.28834;
  unsigned char D.28837;
  int D.28838;
  int iftmp.352;
  struct MonoAssembly * D.28848;
  unsigned char D.28850;
  const char * D.28852;
  int D.20590;
  int iftmp.353;
  int D.20589;
  const char[9] * D.28857;
  unsigned char D.28858;
  int D.28859;
  unsigned char D.28860;
  int D.28861;
  const unsigned char * D.28866;
  unsigned char D.28867;
  int D.28868;
  const unsigned char * D.28869;
  unsigned char D.28870;
  int D.28871;
  const unsigned char * D.28876;
  unsigned char D.28877;
  int D.28878;
  const unsigned char * D.28879;
  unsigned char D.28880;
  int D.28881;
  const unsigned char * D.28886;
  unsigned char D.28887;
  int D.28888;
  const unsigned char * D.28889;
  unsigned char D.28890;
  int D.28891;
  unsigned int D.28894;
  unsigned int D.28895;
  const char * D.28898;
  const char * D.28899;
  unsigned int D.28900;
  unsigned int nsize.354;
  unsigned int D.28902;
  unsigned int D.28903;
  unsigned int nsize.355;
  sizetype nsize.356;
  char * D.28906;
  sizetype D.28909;
  char * D.28910;
  unsigned int D.28911;
  char * D.28914;
  unsigned int bounded.357;
  unsigned int D.28916;
  char * D.28917;
  sizetype D.28918;
  char * D.28919;
  char * D.28920;
  unsigned int classes_size.358;
  unsigned int classes_size.359;
  struct MonoClass * D.28923;
  int D.28924;
  unsigned char D.28928;
  unsigned int D.28932;
  unsigned int D.28933;
  struct MonoType * D.28935;
  unsigned int D.28939;
  unsigned int D.28941;
  int iftmp.360;
  _Bool D.28947;
  long int D.28948;
  long int D.28949;
  int D.28952;
  struct MonoGenericClass * D.28953;
  unsigned int D.28956;
  unsigned char D.28959;
  int iftmp.361;
  struct MonoType * D.28966;
  int D.28967;
  unsigned int D.28969;
  unsigned char D.28970;
  <unnamed-unsigned:1> D.28971;
  unsigned char D.28972;
  struct MonoClass * D.28975;
  struct MonoClass * D.28977;
  unsigned char D.28978;
  int D.28979;
  struct MonoClass * D.28980;
  struct MonoClass * D.28981;
  struct MonoClass * D.28982;
  struct MonoClass * D.28983;
  unsigned char D.28989;
  struct MonoGenericContainer * D.28992;
  _Bool D.28999;
  long int D.29000;
  long int D.29001;
  _Bool D.29009;
  long int D.29010;
  long int D.29011;
  struct MonoImage * image;
  struct MonoClass * class;
  struct MonoClass * parent;
  struct GSList * list;
  struct GSList * rootlist;
  int nsize;
  char * name;
  gboolean corlib_type;

  parent = 0B;
  rootlist = 0B;
  corlib_type = 0;
  D.28794 = rank > 255;
  D.28795 = (long int) D.28794;
  D.28796 = __builtin_expect (D.28795, 0);
  if (D.28796 != 0) goto <D.28797>; else goto <D.28798>;
  <D.28797>:
  monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "class.c", 6386, "rank <= 255");
  <D.28798>:
  if (rank > 1) goto <D.28799>; else goto <D.28800>;
  <D.28799>:
  bounded = 0;
  <D.28800>:
  image = eclass->image;
  if (rank == 1) goto <D.28803>; else goto <D.28801>;
  <D.28803>:
  if (bounded == 0) goto <D.28804>; else goto <D.28801>;
  <D.28804>:
  {
    int ret;

    D.28805 = &image->szarray_cache_lock.mutex;
    ret = pthread_mutex_lock (D.28805);
    if (ret != 0) goto <D.28806>; else goto <D.28807>;
    <D.28806>:
    monoeg_g_log (0B, 16, "Bad call to mono_mutex_lock result %d", ret);
    <D.28807>:
    D.28808 = ret != 0;
    D.28809 = (long int) D.28808;
    D.28810 = __builtin_expect (D.28809, 0);
    if (D.28810 != 0) goto <D.28811>; else goto <D.28812>;
    <D.28811>:
    monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "class.c", 6400, "ret == 0");
    <D.28812>:
  }
  D.28813 = image->szarray_cache;
  if (D.28813 == 0B) goto <D.28814>; else goto <D.28815>;
  <D.28814>:
  D.28816 = monoeg_g_hash_table_new (mono_aligned_addr_hash, 0B);
  image->szarray_cache = D.28816;
  <D.28815>:
  D.28813 = image->szarray_cache;
  class = monoeg_g_hash_table_lookup (D.28813, eclass);
  {
    int ret;

    D.28805 = &image->szarray_cache_lock.mutex;
    ret = pthread_mutex_unlock (D.28805);
    if (ret != 0) goto <D.28817>; else goto <D.28818>;
    <D.28817>:
    monoeg_g_log (0B, 16, "Bad call to mono_mutex_unlock result %d", ret);
    <D.28818>:
    D.28819 = ret != 0;
    D.28820 = (long int) D.28819;
    D.28821 = __builtin_expect (D.28820, 0);
    if (D.28821 != 0) goto <D.28822>; else goto <D.28823>;
    <D.28822>:
    monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "class.c", 6404, "ret == 0");
    <D.28823>:
  }
  if (class != 0B) goto <D.28824>; else goto <D.28825>;
  <D.28824>:
  D.28826 = class;
  return D.28826;
  <D.28825>:
  mono_loader_lock ();
  goto <D.28802>;
  <D.28801>:
  mono_loader_lock ();
  D.28827 = image->array_cache;
  if (D.28827 == 0B) goto <D.28828>; else goto <D.28829>;
  <D.28828>:
  D.28830 = monoeg_g_hash_table_new (mono_aligned_addr_hash, 0B);
  image->array_cache = D.28830;
  <D.28829>:
  D.28827 = image->array_cache;
  list = monoeg_g_hash_table_lookup (D.28827, eclass);
  rootlist = list;
  if (rootlist != 0B) goto <D.28831>; else goto <D.28832>;
  <D.28831>:
  goto <D.20580>;
  <D.20579>:
  class = list->data;
  D.28833 = class->rank;
  D.28834 = (unsigned int) D.28833;
  if (D.28834 == rank) goto <D.28835>; else goto <D.28836>;
  <D.28835>:
  D.28837 = class->byval_arg.type;
  D.28838 = (int) D.28837;
  if (rank > 1) goto <D.28840>; else goto <D.28843>;
  <D.28843>:
  if (bounded != 0) goto <D.28840>; else goto <D.28841>;
  <D.28840>:
  iftmp.352 = 20;
  goto <D.28842>;
  <D.28841>:
  iftmp.352 = 29;
  <D.28842>:
  if (D.28838 == iftmp.352) goto <D.28844>; else goto <D.28845>;
  <D.28844>:
  mono_loader_unlock ();
  D.28826 = class;
  return D.28826;
  <D.28845>:
  <D.28836>:
  list = list->next;
  <D.20580>:
  if (list != 0B) goto <D.20579>; else goto <D.20581>;
  <D.20581>:
  <D.28832>:
  <D.28802>:
  D.28848 = image->assembly;
  if (D.28848 != 0B) goto <D.28849>; else goto <D.28846>;
  <D.28849>:
  D.28848 = image->assembly;
  D.28850 = D.28848->dynamic;
  if (D.28850 != 0) goto <D.28851>; else goto <D.28846>;
  <D.28851>:
  D.28852 = image->assembly_name;
  if (D.28852 != 0B) goto <D.28853>; else goto <D.28846>;
  <D.28853>:
  {
    size_t __s1_len;
    size_t __s2_len;

    __s2_len = 8;
    if (__s2_len <= 3) goto <D.28855>; else goto <D.28856>;
    <D.28855>:
    {
      const unsigned char * __s2;
      int __result;

      __s2 = image->assembly_name;
      D.28857 = "mscorlib";
      D.28858 = MEM[(const unsigned char *)D.28857];
      D.28859 = (int) D.28858;
      D.28860 = *__s2;
      D.28861 = (int) D.28860;
      __result = D.28859 - D.28861;
      {
        if (__s2_len != 0) goto <D.28862>; else goto <D.28863>;
        <D.28862>:
        if (__result == 0) goto <D.28864>; else goto <D.28865>;
        <D.28864>:
        D.28866 = &MEM[(void *)"mscorlib" + 1B];
        D.28867 = *D.28866;
        D.28868 = (int) D.28867;
        D.28869 = __s2 + 1;
        D.28870 = *D.28869;
        D.28871 = (int) D.28870;
        __result = D.28868 - D.28871;
        if (__s2_len > 1) goto <D.28872>; else goto <D.28873>;
        <D.28872>:
        if (__result == 0) goto <D.28874>; else goto <D.28875>;
        <D.28874>:
        D.28876 = &MEM[(void *)"mscorlib" + 2B];
        D.28877 = *D.28876;
        D.28878 = (int) D.28877;
        D.28879 = __s2 + 2;
        D.28880 = *D.28879;
        D.28881 = (int) D.28880;
        __result = D.28878 - D.28881;
        if (__s2_len > 2) goto <D.28882>; else goto <D.28883>;
        <D.28882>:
        if (__result == 0) goto <D.28884>; else goto <D.28885>;
        <D.28884>:
        D.28886 = &MEM[(void *)"mscorlib" + 3B];
        D.28887 = *D.28886;
        D.28888 = (int) D.28887;
        D.28889 = __s2 + 3;
        D.28890 = *D.28889;
        D.28891 = (int) D.28890;
        __result = D.28888 - D.28891;
        <D.28885>:
        <D.28883>:
        <D.28875>:
        <D.28873>:
        <D.28865>:
        <D.28863>:
      }
      D.20589 = __result;
    }
    iftmp.353 = -D.20589;
    goto <D.28892>;
    <D.28856>:
    D.28852 = image->assembly_name;
    iftmp.353 = __builtin_strcmp (D.28852, "mscorlib");
    <D.28892>:
    D.20590 = iftmp.353;
  }
  if (D.20590 == 0) goto <D.28893>; else goto <D.28846>;
  <D.28893>:
  parent = mono_class_from_name (image, "System", "Array");
  corlib_type = 1;
  goto <D.28847>;
  <D.28846>:
  parent = mono_defaults.array_class;
  D.28894 = BIT_FIELD_REF <*parent, 32, 160>;
  D.28895 = D.28894 & 1;
  if (D.28895 == 0) goto <D.28896>; else goto <D.28897>;
  <D.28896>:
  mono_class_init (parent);
  <D.28897>:
  <D.28847>:
  class = mono_image_alloc0 (image, 164);
  class->image = image;
  D.28898 = eclass->name_space;
  class->name_space = D.28898;
  D.28899 = eclass->name;
  D.28900 = strlen (D.28899);
  nsize = (int) D.28900;
  nsize.354 = (unsigned int) nsize;
  D.28902 = nsize.354 + rank;
  D.28903 = D.28902 + 3;
  name = monoeg_malloc (D.28903);
  D.28899 = eclass->name;
  nsize.355 = (unsigned int) nsize;
  memcpy (name, D.28899, nsize.355);
  nsize.356 = (sizetype) nsize;
  D.28906 = name + nsize.356;
  *D.28906 = 91;
  if (rank > 1) goto <D.28907>; else goto <D.28908>;
  <D.28907>:
  nsize.356 = (sizetype) nsize;
  D.28909 = nsize.356 + 1;
  D.28910 = name + D.28909;
  D.28911 = rank + 4294967295;
  memset (D.28910, 44, D.28911);
  <D.28908>:
  if (bounded != 0) goto <D.28912>; else goto <D.28913>;
  <D.28912>:
  nsize.354 = (unsigned int) nsize;
  D.28902 = nsize.354 + rank;
  D.28914 = name + D.28902;
  *D.28914 = 42;
  <D.28913>:
  nsize.354 = (unsigned int) nsize;
  D.28902 = nsize.354 + rank;
  bounded.357 = (unsigned int) bounded;
  D.28916 = D.28902 + bounded.357;
  D.28917 = name + D.28916;
  *D.28917 = 93;
  nsize.354 = (unsigned int) nsize;
  D.28902 = nsize.354 + rank;
  bounded.357 = (unsigned int) bounded;
  D.28916 = D.28902 + bounded.357;
  D.28918 = D.28916 + 1;
  D.28919 = name + D.28918;
  *D.28919 = 0;
  D.28920 = mono_image_strdup (image, name);
  class->name = D.28920;
  monoeg_g_free (name);
  mono_profiler_class_event (class, 0);
  classes_size.358 = classes_size;
  classes_size.359 = classes_size.358 + 164;
  classes_size = classes_size.359;
  class->type_token = 0;
  class->flags = 8449;
  class->parent = parent;
  D.28923 = class->parent;
  D.28924 = mono_class_instance_size (D.28923);
  class->instance_size = D.28924;
  D.28928 = eclass->byval_arg.type;
  if (D.28928 == 22) goto <D.28925>; else goto <D.28929>;
  <D.28929>:
  D.28928 = eclass->byval_arg.type;
  if (D.28928 == 1) goto <D.28925>; else goto <D.28926>;
  <D.28925>:
  mono_class_set_failure (class, 7, 0B);
  goto <D.28927>;
  <D.28926>:
  D.28932 = BIT_FIELD_REF <*eclass, 32, 160>;
  D.28933 = D.28932 & 16;
  if (D.28933 != 0) goto <D.28934>; else goto <D.28930>;
  <D.28934>:
  D.28935 = mono_class_enum_basetype (eclass);
  if (D.28935 == 0B) goto <D.28936>; else goto <D.28930>;
  <D.28936>:
  D.28939 = eclass->ref_info_handle;
  if (D.28939 == 0) goto <D.28937>; else goto <D.28940>;
  <D.28940>:
  D.28932 = BIT_FIELD_REF <*eclass, 32, 160>;
  D.28941 = D.28932 & 128;
  if (D.28941 != 0) goto <D.28937>; else goto <D.28938>;
  <D.28937>:
  monoeg_g_log (0B, 16, "Only incomplete TypeBuilder objects are allowed to be an enum without base_type");
  D.28939 = eclass->ref_info_handle;
  if (D.28939 == 0) goto <D.28943>; else goto <D.28946>;
  <D.28946>:
  D.28932 = BIT_FIELD_REF <*eclass, 32, 160>;
  D.28941 = D.28932 & 128;
  if (D.28941 != 0) goto <D.28943>; else goto <D.28944>;
  <D.28943>:
  iftmp.360 = 1;
  goto <D.28945>;
  <D.28944>:
  iftmp.360 = 0;
  <D.28945>:
  D.28947 = iftmp.360 != 0;
  D.28948 = (long int) D.28947;
  D.28949 = __builtin_expect (D.28948, 0);
  if (D.28949 != 0) goto <D.28950>; else goto <D.28951>;
  <D.28950>:
  monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "class.c", 6469, "eclass->ref_info_handle && !eclass->wastypebuilder");
  <D.28951>:
  <D.28938>:
  class->sizes.element_size = -1;
  goto <D.28931>;
  <D.28930>:
  D.28952 = mono_class_array_element_size (eclass);
  class->sizes.element_size = D.28952;
  <D.28931>:
  <D.28927>:
  mono_class_setup_supertypes (class);
  D.28953 = eclass->generic_class;
  if (D.28953 != 0B) goto <D.28954>; else goto <D.28955>;
  <D.28954>:
  mono_class_init (eclass);
  <D.28955>:
  D.28932 = BIT_FIELD_REF <*eclass, 32, 160>;
  D.28956 = D.28932 & 4;
  if (D.28956 == 0) goto <D.28957>; else goto <D.28958>;
  <D.28957>:
  mono_class_setup_fields (eclass);
  <D.28958>:
  D.28959 = eclass->exception_type;
  if (D.28959 != 0) goto <D.28960>; else goto <D.28961>;
  <D.28960>:
  mono_class_set_failure (class, 7, 0B);
  <D.28961>:
  D.28966 = &eclass->byval_arg;
  D.28967 = mono_type_is_reference (D.28966);
  if (D.28967 != 0) goto <D.28963>; else goto <D.28968>;
  <D.28968>:
  D.28932 = BIT_FIELD_REF <*eclass, 32, 160>;
  D.28969 = D.28932 & 134217728;
  if (D.28969 != 0) goto <D.28963>; else goto <D.28964>;
  <D.28963>:
  iftmp.361 = 1;
  goto <D.28965>;
  <D.28964>:
  iftmp.361 = 0;
  <D.28965>:
  D.28970 = (unsigned char) iftmp.361;
  D.28971 = (<unnamed-unsigned:1>) D.28970;
  class->has_references = D.28971;
  D.28972 = (unsigned char) rank;
  class->rank = D.28972;
  D.28932 = BIT_FIELD_REF <*eclass, 32, 160>;
  D.28933 = D.28932 & 16;
  if (D.28933 != 0) goto <D.28973>; else goto <D.28974>;
  <D.28973>:
  D.28975 = eclass->element_class;
  class->cast_class = D.28975;
  goto <D.28976>;
  <D.28974>:
  class->cast_class = eclass;
  <D.28976>:
  D.28977 = class->cast_class;
  D.28978 = D.28977->byval_arg.type;
  D.28979 = (int) D.28978;
  switch (D.28979) <default: <D.28984>, case 4: <D.20591>, case 7: <D.20593>, case 9: <D.20594>, case 11: <D.20597>, case 24: <D.20595>, case 25: <D.20596>>
  <D.20591>:
  D.28980 = mono_defaults.byte_class;
  class->cast_class = D.28980;
  goto <D.20592>;
  <D.20593>:
  D.28981 = mono_defaults.int16_class;
  class->cast_class = D.28981;
  goto <D.20592>;
  <D.20594>:
  <D.20595>:
  <D.20596>:
  D.28982 = mono_defaults.int32_class;
  class->cast_class = D.28982;
  goto <D.20592>;
  <D.20597>:
  D.28983 = mono_defaults.int64_class;
  class->cast_class = D.28983;
  goto <D.20592>;
  <D.28984>:
  <D.20592>:
  class->element_class = eclass;
  if (rank > 1) goto <D.28985>; else goto <D.28988>;
  <D.28988>:
  if (bounded != 0) goto <D.28985>; else goto <D.28986>;
  <D.28985>:
  {
    struct MonoArrayType * at;

    at = mono_image_alloc0 (image, 16);
    class->byval_arg.type = 20;
    class->byval_arg.data.array = at;
    at->eklass = eclass;
    D.28989 = (unsigned char) rank;
    at->rank = D.28989;
  }
  goto <D.28987>;
  <D.28986>:
  class->byval_arg.type = 29;
  class->byval_arg.data.klass = eclass;
  <D.28987>:
  class->this_arg = class->byval_arg;
  class->this_arg.byref = 1;
  if (corlib_type != 0) goto <D.28990>; else goto <D.28991>;
  <D.28990>:
  class->inited = 1;
  <D.28991>:
  D.28992 = eclass->generic_container;
  class->generic_container = D.28992;
  if (rank == 1) goto <D.28995>; else goto <D.28993>;
  <D.28995>:
  if (bounded == 0) goto <D.28996>; else goto <D.28993>;
  <D.28996>:
  {
    struct MonoClass * prev_class;

    {
      int ret;

      D.28805 = &image->szarray_cache_lock.mutex;
      ret = pthread_mutex_lock (D.28805);
      if (ret != 0) goto <D.28997>; else goto <D.28998>;
      <D.28997>:
      monoeg_g_log (0B, 16, "Bad call to mono_mutex_lock result %d", ret);
      <D.28998>:
      D.28999 = ret != 0;
      D.29000 = (long int) D.28999;
      D.29001 = __builtin_expect (D.29000, 0);
      if (D.29001 != 0) goto <D.29002>; else goto <D.29003>;
      <D.29002>:
      monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "class.c", 6541, "ret == 0");
      <D.29003>:
    }
    D.28813 = image->szarray_cache;
    prev_class = monoeg_g_hash_table_lookup (D.28813, eclass);
    if (prev_class != 0B) goto <D.29004>; else goto <D.29005>;
    <D.29004>:
    class = prev_class;
    goto <D.29006>;
    <D.29005>:
    D.28813 = image->szarray_cache;
    monoeg_g_hash_table_insert_replace (D.28813, eclass, class, 0);
    <D.29006>:
    {
      int ret;

      D.28805 = &image->szarray_cache_lock.mutex;
      ret = pthread_mutex_unlock (D.28805);
      if (ret != 0) goto <D.29007>; else goto <D.29008>;
      <D.29007>:
      monoeg_g_log (0B, 16, "Bad call to mono_mutex_unlock result %d", ret);
      <D.29008>:
      D.29009 = ret != 0;
      D.29010 = (long int) D.29009;
      D.29011 = __builtin_expect (D.29010, 0);
      if (D.29011 != 0) goto <D.29012>; else goto <D.29013>;
      <D.29012>:
      monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "class.c", 6548, "ret == 0");
      <D.29013>:
    }
  }
  goto <D.28994>;
  <D.28993>:
  list = monoeg_g_slist_append (rootlist, class);
  D.28827 = image->array_cache;
  monoeg_g_hash_table_insert_replace (D.28827, eclass, list, 0);
  <D.28994>:
  mono_loader_unlock ();
  mono_profiler_class_loaded (class, 0);
  D.28826 = class;
  return D.28826;
}


mono_array_class_get (struct MonoClass * eclass, guint32 rank)
{
  struct MonoClass * D.29015;

  D.29015 = mono_bounded_array_class_get (eclass, rank, 0);
  return D.29015;
}


mono_class_instance_size (struct MonoClass * klass)
{
  unsigned int D.29017;
  unsigned int D.29018;
  int32_t D.29021;

  D.29017 = BIT_FIELD_REF <*klass, 32, 160>;
  D.29018 = D.29017 & 4;
  if (D.29018 == 0) goto <D.29019>; else goto <D.29020>;
  <D.29019>:
  mono_class_init (klass);
  <D.29020>:
  D.29021 = klass->instance_size;
  return D.29021;
}


mono_class_min_align (struct MonoClass * klass)
{
  unsigned int D.29023;
  unsigned int D.29024;
  int32_t D.29027;
  unsigned char D.29028;

  D.29023 = BIT_FIELD_REF <*klass, 32, 160>;
  D.29024 = D.29023 & 4;
  if (D.29024 == 0) goto <D.29025>; else goto <D.29026>;
  <D.29025>:
  mono_class_init (klass);
  <D.29026>:
  D.29028 = klass->min_align;
  D.29027 = (int32_t) D.29028;
  return D.29027;
}


mono_class_value_size (struct MonoClass * klass, guint32 * align)
{
  int D.29030;
  unsigned int D.29031;
  unsigned int D.29032;
  unsigned char D.29035;
  unsigned int D.29036;
  int32_t D.29037;
  gint32 size;

  D.29030 = mono_class_instance_size (klass);
  D.29031 = (unsigned int) D.29030;
  D.29032 = D.29031 + 4294967288;
  size = (gint32) D.29032;
  if (align != 0B) goto <D.29033>; else goto <D.29034>;
  <D.29033>:
  D.29035 = klass->min_align;
  D.29036 = (unsigned int) D.29035;
  *align = D.29036;
  <D.29034>:
  D.29037 = size;
  return D.29037;
}


mono_class_data_size (struct MonoClass * klass)
{
  unsigned int D.29039;
  unsigned int D.29040;
  unsigned int D.29043;
  unsigned int D.29044;
  unsigned char D.29047;
  int32_t D.29050;

  D.29039 = BIT_FIELD_REF <*klass, 32, 160>;
  D.29040 = D.29039 & 1;
  if (D.29040 == 0) goto <D.29041>; else goto <D.29042>;
  <D.29041>:
  mono_class_init (klass);
  <D.29042>:
  D.29043 = BIT_FIELD_REF <*klass, 32, 192>;
  D.29044 = D.29043 & 32;
  if (D.29044 == 0) goto <D.29045>; else goto <D.29046>;
  <D.29045>:
  mono_class_setup_fields_locking (klass);
  <D.29046>:
  D.29047 = klass->rank;
  if (D.29047 != 0) goto <D.29048>; else goto <D.29049>;
  <D.29048>:
  D.29050 = 0;
  return D.29050;
  <D.29049>:
  D.29050 = klass->sizes.class_size;
  return D.29050;
}


mono_class_get_field (struct MonoClass * class, guint32 field_token)
{
  int field_token.362;
  unsigned int D.29053;
  _Bool D.29054;
  long int D.29055;
  long int D.29056;
  struct MonoClassField * D.29059;
  int D.29060;
  int idx;

  field_token.362 = (int) field_token;
  idx = field_token.362 & 16777215;
  D.29053 = field_token & 4278190080;
  D.29054 = D.29053 != 67108864;
  D.29055 = (long int) D.29054;
  D.29056 = __builtin_expect (D.29055, 0);
  if (D.29056 != 0) goto <D.29057>; else goto <D.29058>;
  <D.29057>:
  monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "class.c", 6707, "mono_metadata_token_code (field_token) == MONO_TOKEN_FIELD_DEF");
  <D.29058>:
  D.29060 = idx + -1;
  D.29059 = mono_class_get_field_idx (class, D.29060);
  return D.29059;
}


mono_class_get_field_idx (struct MonoClass * class, int idx)
{
  unsigned char D.29062;
  struct MonoClassField * D.29065;
  struct MonoImage * D.29066;
  unsigned int D.29067;
  unsigned int D.29068;
  struct MonoTableInfo * D.29071;
  unsigned int D.29072;
  struct MonoClassField * D.29073;
  unsigned int i.363;
  unsigned int D.29075;
  struct MonoClassField * D.29076;
  const char * D.29077;
  unsigned int i.364;
  unsigned int D.29081;
  unsigned int idx.365;
  unsigned int D.29085;
  unsigned int D.29088;
  unsigned int D.29091;
  unsigned int D.29092;

  mono_class_setup_fields_locking (class);
  D.29062 = class->exception_type;
  if (D.29062 != 0) goto <D.29063>; else goto <D.29064>;
  <D.29063>:
  D.29065 = 0B;
  return D.29065;
  <D.29064>:
  goto <D.20630>;
  <D.20629>:
  D.29066 = class->image;
  D.29067 = BIT_FIELD_REF <*D.29066, 32, 128>;
  D.29068 = D.29067 & 32;
  if (D.29068 != 0) goto <D.29069>; else goto <D.29070>;
  <D.29069>:
  {
    const char * name;
    int i;

    D.29066 = class->image;
    D.29066 = class->image;
    D.29071 = &D.29066->tables[4];
    D.29072 = mono_metadata_decode_row_col (D.29071, idx, 1);
    name = mono_metadata_string_heap (D.29066, D.29072);
    i = 0;
    goto <D.20627>;
    <D.20626>:
    D.29073 = class->fields;
    i.363 = (unsigned int) i;
    D.29075 = i.363 * 16;
    D.29076 = D.29073 + D.29075;
    D.29077 = mono_field_get_name (D.29076);
    if (D.29077 == name) goto <D.29078>; else goto <D.29079>;
    <D.29078>:
    D.29073 = class->fields;
    i.363 = (unsigned int) i;
    D.29075 = i.363 * 16;
    D.29065 = D.29073 + D.29075;
    return D.29065;
    <D.29079>:
    i = i + 1;
    <D.20627>:
    i.364 = (unsigned int) i;
    D.29081 = class->field.count;
    if (i.364 < D.29081) goto <D.20626>; else goto <D.20628>;
    <D.20628>:
    monoeg_assertion_message ("* Assertion: should not be reached at %s:%d\n", "class.c", 6680);
  }
  <D.29070>:
  D.29081 = class->field.count;
  if (D.29081 != 0) goto <D.29082>; else goto <D.29083>;
  <D.29082>:
  idx.365 = (unsigned int) idx;
  D.29085 = class->field.first;
  if (idx.365 >= D.29085) goto <D.29086>; else goto <D.29087>;
  <D.29086>:
  idx.365 = (unsigned int) idx;
  D.29085 = class->field.first;
  D.29081 = class->field.count;
  D.29088 = D.29085 + D.29081;
  if (idx.365 < D.29088) goto <D.29089>; else goto <D.29090>;
  <D.29089>:
  D.29073 = class->fields;
  idx.365 = (unsigned int) idx;
  D.29085 = class->field.first;
  D.29091 = idx.365 - D.29085;
  D.29092 = D.29091 * 16;
  D.29065 = D.29073 + D.29092;
  return D.29065;
  <D.29090>:
  <D.29087>:
  <D.29083>:
  class = class->parent;
  <D.20630>:
  if (class != 0B) goto <D.20629>; else goto <D.20631>;
  <D.20631>:
  D.29065 = 0B;
  return D.29065;
}


mono_class_get_field_from_name (struct MonoClass * klass, const char * name)
{
  struct MonoClassField * D.29094;

  D.29094 = mono_class_get_field_from_name_full (klass, name, 0B);
  return D.29094;
}


mono_class_get_field_from_name_full (struct MonoClass * klass, const char * name, struct MonoType * type)
{
  unsigned char D.29096;
  struct MonoClassField * D.29099;
  struct MonoClassField * D.29100;
  unsigned int i.366;
  unsigned int D.29102;
  int D.20656;
  const char * D.29103;
  struct MonoClassField * D.29108;
  int D.29109;
  unsigned int i.367;
  unsigned int D.29113;
  int i;

  mono_class_setup_fields_locking (klass);
  D.29096 = klass->exception_type;
  if (D.29096 != 0) goto <D.29097>; else goto <D.29098>;
  <D.29097>:
  D.29099 = 0B;
  return D.29099;
  <D.29098>:
  goto <D.20663>;
  <D.20662>:
  i = 0;
  goto <D.20660>;
  <D.20659>:
  {
    struct MonoClassField * field;

    D.29100 = klass->fields;
    i.366 = (unsigned int) i;
    D.29102 = i.366 * 16;
    field = D.29100 + D.29102;
    {
      size_t __s1_len;
      size_t __s2_len;

      D.29103 = mono_field_get_name (field);
      D.20656 = __builtin_strcmp (name, D.29103);
    }
    if (D.20656 != 0) goto <D.29104>; else goto <D.29105>;
    <D.29104>:
    // predicted unlikely by continue predictor.
    goto <D.20657>;
    <D.29105>:
    if (type != 0B) goto <D.29106>; else goto <D.29107>;
    <D.29106>:
    {
      struct MonoType * field_type;

      D.29108 = mono_metadata_get_corresponding_field_from_generic_type_definition (field);
      field_type = D.29108->type;
      D.29109 = mono_metadata_type_equal_full (type, field_type, 1);
      if (D.29109 == 0) goto <D.29110>; else goto <D.29111>;
      <D.29110>:
      // predicted unlikely by continue predictor.
      goto <D.20657>;
      <D.29111>:
    }
    <D.29107>:
    D.29099 = field;
    return D.29099;
  }
  <D.20657>:
  i = i + 1;
  <D.20660>:
  i.367 = (unsigned int) i;
  D.29113 = klass->field.count;
  if (i.367 < D.29113) goto <D.20659>; else goto <D.20661>;
  <D.20661>:
  klass = klass->parent;
  <D.20663>:
  if (klass != 0B) goto <D.20662>; else goto <D.20664>;
  <D.20664>:
  D.29099 = 0B;
  return D.29099;
}


mono_class_get_field_token (struct MonoClassField * field)
{
  struct MonoClassField * D.29115;
  uint32_t D.29118;
  unsigned int i.368;
  unsigned int D.29120;
  struct MonoClassField * D.29121;
  unsigned int D.29124;
  unsigned int i.369;
  unsigned int D.29126;
  unsigned int D.29127;
  struct MonoImage * D.29128;
  unsigned int D.29129;
  unsigned int D.29130;
  unsigned int idx.370;
  unsigned int D.29134;
  int D.29135;
  unsigned int D.29136;
  struct MonoClass * klass;
  int i;

  klass = field->parent;
  mono_class_setup_fields_locking (klass);
  goto <D.20675>;
  <D.20674>:
  D.29115 = klass->fields;
  if (D.29115 == 0B) goto <D.29116>; else goto <D.29117>;
  <D.29116>:
  D.29118 = 0;
  return D.29118;
  <D.29117>:
  i = 0;
  goto <D.20672>;
  <D.20671>:
  D.29115 = klass->fields;
  i.368 = (unsigned int) i;
  D.29120 = i.368 * 16;
  D.29121 = D.29115 + D.29120;
  if (D.29121 == field) goto <D.29122>; else goto <D.29123>;
  <D.29122>:
  {
    int idx;

    D.29124 = klass->field.first;
    i.369 = (unsigned int) i;
    D.29126 = D.29124 + i.369;
    D.29127 = D.29126 + 1;
    idx = (int) D.29127;
    D.29128 = klass->image;
    D.29129 = BIT_FIELD_REF <*D.29128, 32, 128>;
    D.29130 = D.29129 & 32;
    if (D.29130 != 0) goto <D.29131>; else goto <D.29132>;
    <D.29131>:
    D.29128 = klass->image;
    idx.370 = (unsigned int) idx;
    D.29134 = mono_metadata_translate_token_index (D.29128, 4, idx.370);
    idx = (int) D.29134;
    <D.29132>:
    D.29135 = idx | 67108864;
    D.29118 = (uint32_t) D.29135;
    return D.29118;
  }
  <D.29123>:
  i = i + 1;
  <D.20672>:
  i.369 = (unsigned int) i;
  D.29136 = klass->field.count;
  if (i.369 < D.29136) goto <D.20671>; else goto <D.20673>;
  <D.20673>:
  klass = klass->parent;
  <D.20675>:
  if (klass != 0B) goto <D.20674>; else goto <D.20676>;
  <D.20676>:
  monoeg_assertion_message ("* Assertion: should not be reached at %s:%d\n", "class.c", 6800);
  D.29118 = 0;
  return D.29118;
}


mono_class_get_field_default_value (struct MonoClassField * field, MonoTypeEnum * def_type)
{
  struct MonoType * D.29138;
  short unsigned int D.29139;
  signed short D.29140;
  _Bool D.29141;
  long int D.29142;
  long int D.29143;
  struct MonoClassExt * D.29148;
  struct MonoFieldDefaultValue * D.29150;
  unsigned int D.29153;
  unsigned int D.29154;
  int D.29155;
  void * D.29156;
  unsigned int field_index.371;
  unsigned int D.29158;
  struct MonoFieldDefaultValue * D.29159;
  const char * D.29160;
  struct MonoClass * D.29163;
  struct MonoImage * D.29164;
  unsigned int D.29165;
  const char * D.29168;
  int D.29169;
  int D.29170;
  _Bool D.29171;
  long int D.29172;
  long int D.29173;
  struct MonoTableInfo * D.29176;
  unsigned int D.29177;
  int D.29178;
  unsigned int D.29179;
  unsigned int D.29180;
  const char * D.29181;
  <unnamed type> D.29182;
  guint32 cindex;
  guint32 constant_cols[4];
  int field_index;
  struct MonoClass * klass;

  try
    {
      klass = field->parent;
      D.29138 = field->type;
      D.29139 = D.29138->attrs;
      D.29140 = (signed short) D.29139;
      D.29141 = D.29140 >= 0;
      D.29142 = (long int) D.29141;
      D.29143 = __builtin_expect (D.29142, 0);
      if (D.29143 != 0) goto <D.29144>; else goto <D.29145>;
      <D.29144>:
      monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "class.c", 6827, "field->type->attrs & FIELD_ATTRIBUTE_HAS_DEFAULT");
      <D.29145>:
      D.29148 = klass->ext;
      if (D.29148 == 0B) goto <D.29146>; else goto <D.29149>;
      <D.29149>:
      D.29148 = klass->ext;
      D.29150 = D.29148->field_def_values;
      if (D.29150 == 0B) goto <D.29146>; else goto <D.29147>;
      <D.29146>:
      mono_loader_lock ();
      mono_class_alloc_ext (klass);
      D.29148 = klass->ext;
      D.29150 = D.29148->field_def_values;
      if (D.29150 == 0B) goto <D.29151>; else goto <D.29152>;
      <D.29151>:
      D.29148 = klass->ext;
      D.29153 = klass->field.count;
      D.29154 = D.29153 * 8;
      D.29155 = (int) D.29154;
      D.29156 = mono_class_alloc0 (klass, D.29155);
      D.29148->field_def_values = D.29156;
      <D.29152>:
      mono_loader_unlock ();
      <D.29147>:
      field_index = mono_field_get_index (field);
      D.29148 = klass->ext;
      D.29150 = D.29148->field_def_values;
      field_index.371 = (unsigned int) field_index;
      D.29158 = field_index.371 * 8;
      D.29159 = D.29150 + D.29158;
      D.29160 = D.29159->data;
      if (D.29160 == 0B) goto <D.29161>; else goto <D.29162>;
      <D.29161>:
      D.29163 = field->parent;
      D.29164 = D.29163->image;
      D.29165 = mono_class_get_field_token (field);
      cindex = mono_metadata_get_constant_index (D.29164, D.29165, 0);
      if (cindex == 0) goto <D.29166>; else goto <D.29167>;
      <D.29166>:
      D.29168 = 0B;
      return D.29168;
      <D.29167>:
      D.29138 = field->type;
      D.29139 = D.29138->attrs;
      D.29169 = (int) D.29139;
      D.29170 = D.29169 & 256;
      D.29171 = D.29170 != 0;
      D.29172 = (long int) D.29171;
      D.29173 = __builtin_expect (D.29172, 0);
      if (D.29173 != 0) goto <D.29174>; else goto <D.29175>;
      <D.29174>:
      monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "class.c", 6844, "!(field->type->attrs & FIELD_ATTRIBUTE_HAS_FIELD_RVA)");
      <D.29175>:
      D.29163 = field->parent;
      D.29164 = D.29163->image;
      D.29176 = &D.29164->tables[11];
      D.29177 = cindex + 4294967295;
      D.29178 = (int) D.29177;
      mono_metadata_decode_row (D.29176, D.29178, &constant_cols, 4);
      D.29148 = klass->ext;
      D.29150 = D.29148->field_def_values;
      field_index.371 = (unsigned int) field_index;
      D.29158 = field_index.371 * 8;
      D.29159 = D.29150 + D.29158;
      D.29179 = constant_cols[0];
      D.29159->def_type = D.29179;
      D.29148 = klass->ext;
      D.29150 = D.29148->field_def_values;
      field_index.371 = (unsigned int) field_index;
      D.29158 = field_index.371 * 8;
      D.29159 = D.29150 + D.29158;
      D.29163 = field->parent;
      D.29164 = D.29163->image;
      D.29180 = constant_cols[3];
      D.29181 = mono_metadata_blob_heap (D.29164, D.29180);
      D.29159->data = D.29181;
      <D.29162>:
      D.29148 = klass->ext;
      D.29150 = D.29148->field_def_values;
      field_index.371 = (unsigned int) field_index;
      D.29158 = field_index.371 * 8;
      D.29159 = D.29150 + D.29158;
      D.29182 = D.29159->def_type;
      *def_type = D.29182;
      D.29148 = klass->ext;
      D.29150 = D.29148->field_def_values;
      field_index.371 = (unsigned int) field_index;
      D.29158 = field_index.371 * 8;
      D.29159 = D.29150 + D.29158;
      D.29168 = D.29159->data;
      return D.29168;
    }
  finally
    {
      constant_cols = {CLOBBER};
    }
}


mono_field_get_index (struct MonoClassField * field)
{
  int field.372;
  struct MonoClass * D.29186;
  struct MonoClassField * D.29187;
  int D.29188;
  int D.29189;
  int iftmp.373;
  unsigned int index.374;
  unsigned int D.29196;
  _Bool D.29197;
  long int D.29198;
  long int D.29199;
  int D.29202;
  int index;

  field.372 = (int) field;
  D.29186 = field->parent;
  D.29187 = D.29186->fields;
  D.29188 = (int) D.29187;
  D.29189 = field.372 - D.29188;
  index = D.29189 /[ex] 16;
  if (index < 0) goto <D.29191>; else goto <D.29194>;
  <D.29194>:
  index.374 = (unsigned int) index;
  D.29186 = field->parent;
  D.29196 = D.29186->field.count;
  if (index.374 >= D.29196) goto <D.29191>; else goto <D.29192>;
  <D.29191>:
  iftmp.373 = 1;
  goto <D.29193>;
  <D.29192>:
  iftmp.373 = 0;
  <D.29193>:
  D.29197 = iftmp.373 != 0;
  D.29198 = (long int) D.29197;
  D.29199 = __builtin_expect (D.29198, 0);
  if (D.29199 != 0) goto <D.29200>; else goto <D.29201>;
  <D.29200>:
  monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "class.c", 6809, "index >= 0 && index < field->parent->field.count");
  <D.29201>:
  D.29202 = index;
  return D.29202;
}


mono_class_get_property_default_value (struct MonoProperty * property, MonoTypeEnum * def_type)
{
  unsigned int D.29204;
  unsigned int D.29205;
  _Bool D.29206;
  long int D.29207;
  long int D.29208;
  struct MonoImage * D.29211;
  unsigned int D.29212;
  unsigned int D.29213;
  struct MonoClassExt * D.29216;
  struct MonoFieldDefaultValue * D.29217;
  unsigned int prop_index.375;
  unsigned int D.29221;
  struct MonoFieldDefaultValue * D.29222;
  const char * D.29223;
  <unnamed type> D.29226;
  const char * D.29227;
  unsigned int D.29228;
  struct MonoTableInfo * D.29231;
  unsigned int D.29232;
  int D.29233;
  unsigned int D.29234;
  unsigned int D.29235;
  guint32 cindex;
  guint32 constant_cols[4];
  struct MonoClass * klass;

  try
    {
      klass = property->parent;
      D.29204 = property->attrs;
      D.29205 = D.29204 & 4096;
      D.29206 = D.29205 == 0;
      D.29207 = (long int) D.29206;
      D.29208 = __builtin_expect (D.29207, 0);
      if (D.29208 != 0) goto <D.29209>; else goto <D.29210>;
      <D.29209>:
      monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "class.c", 6877, "property->attrs & PROPERTY_ATTRIBUTE_HAS_DEFAULT");
      <D.29210>:
      D.29211 = klass->image;
      D.29212 = BIT_FIELD_REF <*D.29211, 32, 128>;
      D.29213 = D.29212 & 8;
      if (D.29213 != 0) goto <D.29214>; else goto <D.29215>;
      <D.29214>:
      {
        int prop_index;

        prop_index = mono_property_get_index (property);
        D.29216 = klass->ext;
        D.29217 = D.29216->prop_def_values;
        if (D.29217 != 0B) goto <D.29218>; else goto <D.29219>;
        <D.29218>:
        D.29216 = klass->ext;
        D.29217 = D.29216->prop_def_values;
        prop_index.375 = (unsigned int) prop_index;
        D.29221 = prop_index.375 * 8;
        D.29222 = D.29217 + D.29221;
        D.29223 = D.29222->data;
        if (D.29223 != 0B) goto <D.29224>; else goto <D.29225>;
        <D.29224>:
        D.29216 = klass->ext;
        D.29217 = D.29216->prop_def_values;
        prop_index.375 = (unsigned int) prop_index;
        D.29221 = prop_index.375 * 8;
        D.29222 = D.29217 + D.29221;
        D.29226 = D.29222->def_type;
        *def_type = D.29226;
        D.29216 = klass->ext;
        D.29217 = D.29216->prop_def_values;
        prop_index.375 = (unsigned int) prop_index;
        D.29221 = prop_index.375 * 8;
        D.29222 = D.29217 + D.29221;
        D.29227 = D.29222->data;
        return D.29227;
        <D.29225>:
        <D.29219>:
        D.29227 = 0B;
        return D.29227;
      }
      <D.29215>:
      D.29211 = klass->image;
      D.29228 = mono_class_get_property_token (property);
      cindex = mono_metadata_get_constant_index (D.29211, D.29228, 0);
      if (cindex == 0) goto <D.29229>; else goto <D.29230>;
      <D.29229>:
      D.29227 = 0B;
      return D.29227;
      <D.29230>:
      D.29211 = klass->image;
      D.29231 = &D.29211->tables[11];
      D.29232 = cindex + 4294967295;
      D.29233 = (int) D.29232;
      mono_metadata_decode_row (D.29231, D.29233, &constant_cols, 4);
      D.29234 = constant_cols[0];
      *def_type = D.29234;
      D.29211 = klass->image;
      D.29235 = constant_cols[3];
      D.29227 = mono_metadata_blob_heap (D.29211, D.29235);
      return D.29227;
    }
  finally
    {
      constant_cols = {CLOBBER};
    }
}


mono_property_get_index (struct MonoProperty * prop)
{
  int prop.376;
  struct MonoClass * D.29239;
  struct MonoClassExt * D.29240;
  struct MonoProperty * D.29241;
  int D.29242;
  int D.29243;
  int iftmp.377;
  unsigned int index.378;
  unsigned int D.29250;
  _Bool D.29251;
  long int D.29252;
  long int D.29253;
  int D.29256;
  int index;

  prop.376 = (int) prop;
  D.29239 = prop->parent;
  D.29240 = D.29239->ext;
  D.29241 = D.29240->properties;
  D.29242 = (int) D.29241;
  D.29243 = prop.376 - D.29242;
  index = D.29243 /[ex] 20;
  if (index < 0) goto <D.29245>; else goto <D.29248>;
  <D.29248>:
  index.378 = (unsigned int) index;
  D.29239 = prop->parent;
  D.29240 = D.29239->ext;
  D.29250 = D.29240->property.count;
  if (index.378 >= D.29250) goto <D.29245>; else goto <D.29246>;
  <D.29245>:
  iftmp.377 = 1;
  goto <D.29247>;
  <D.29246>:
  iftmp.377 = 0;
  <D.29247>:
  D.29251 = iftmp.377 != 0;
  D.29252 = (long int) D.29251;
  D.29253 = __builtin_expect (D.29252, 0);
  if (D.29253 != 0) goto <D.29254>; else goto <D.29255>;
  <D.29254>:
  monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "class.c", 6860, "index >= 0 && index < prop->parent->ext->property.count");
  <D.29255>:
  D.29256 = index;
  return D.29256;
}


mono_class_get_event_token (struct MonoEvent * event)
{
  struct MonoClassExt * D.29258;
  struct MonoEvent * D.29261;
  unsigned int i.379;
  unsigned int D.29263;
  struct MonoEvent * D.29264;
  uint32_t D.29267;
  unsigned int D.29268;
  unsigned int i.380;
  unsigned int D.29270;
  unsigned int D.29271;
  unsigned int D.29272;
  struct MonoClass * klass;
  int i;

  klass = event->parent;
  goto <D.20710>;
  <D.20709>:
  D.29258 = klass->ext;
  if (D.29258 != 0B) goto <D.29259>; else goto <D.29260>;
  <D.29259>:
  i = 0;
  goto <D.20707>;
  <D.20706>:
  D.29258 = klass->ext;
  D.29261 = D.29258->events;
  i.379 = (unsigned int) i;
  D.29263 = i.379 * 28;
  D.29264 = D.29261 + D.29263;
  if (D.29264 == event) goto <D.29265>; else goto <D.29266>;
  <D.29265>:
  D.29258 = klass->ext;
  D.29268 = D.29258->event.first;
  i.380 = (unsigned int) i;
  D.29270 = D.29268 + i.380;
  D.29271 = D.29270 + 1;
  D.29267 = D.29271 | 335544320;
  return D.29267;
  <D.29266>:
  i = i + 1;
  <D.20707>:
  i.380 = (unsigned int) i;
  D.29258 = klass->ext;
  D.29272 = D.29258->event.count;
  if (i.380 < D.29272) goto <D.20706>; else goto <D.20708>;
  <D.20708>:
  <D.29260>:
  klass = klass->parent;
  <D.20710>:
  if (klass != 0B) goto <D.20709>; else goto <D.20711>;
  <D.20711>:
  monoeg_assertion_message ("* Assertion: should not be reached at %s:%d\n", "class.c", 6917);
  D.29267 = 0;
  return D.29267;
}


mono_class_get_property_from_name (struct MonoClass * klass, const char * name)
{
  int D.20726;
  const char * D.29274;
  struct MonoProperty * D.29277;

  goto <D.20731>;
  <D.20730>:
  {
    struct MonoProperty * p;
    void * iter;

    try
      {
        iter = 0B;
        goto <D.20728>;
        <D.20727>:
        {
          size_t __s1_len;
          size_t __s2_len;

          D.29274 = p->name;
          D.20726 = __builtin_strcmp (name, D.29274);
        }
        if (D.20726 == 0) goto <D.29275>; else goto <D.29276>;
        <D.29275>:
        D.29277 = p;
        return D.29277;
        <D.29276>:
        <D.20728>:
        p = mono_class_get_properties (klass, &iter);
        if (p != 0B) goto <D.20727>; else goto <D.20729>;
        <D.20729>:
        klass = klass->parent;
      }
    finally
      {
        iter = {CLOBBER};
      }
  }
  <D.20731>:
  if (klass != 0B) goto <D.20730>; else goto <D.20732>;
  <D.20732>:
  D.29277 = 0B;
  return D.29277;
}


mono_class_get_property_token (struct MonoProperty * prop)
{
  struct MonoClassExt * D.29281;
  struct MonoProperty * D.29282;
  unsigned int i.381;
  unsigned int D.29284;
  struct MonoProperty * D.29285;
  uint32_t D.29288;
  unsigned int D.29289;
  unsigned int i.382;
  unsigned int D.29291;
  unsigned int D.29292;
  struct MonoClass * klass;

  klass = prop->parent;
  goto <D.20744>;
  <D.20743>:
  {
    struct MonoProperty * p;
    int i;
    void * iter;

    try
      {
        i = 0;
        iter = 0B;
        goto <D.20741>;
        <D.20740>:
        D.29281 = klass->ext;
        D.29282 = D.29281->properties;
        i.381 = (unsigned int) i;
        D.29284 = i.381 * 20;
        D.29285 = D.29282 + D.29284;
        if (D.29285 == prop) goto <D.29286>; else goto <D.29287>;
        <D.29286>:
        D.29281 = klass->ext;
        D.29289 = D.29281->property.first;
        i.382 = (unsigned int) i;
        D.29291 = D.29289 + i.382;
        D.29292 = D.29291 + 1;
        D.29288 = D.29292 | 385875968;
        return D.29288;
        <D.29287>:
        i = i + 1;
        <D.20741>:
        p = mono_class_get_properties (klass, &iter);
        if (p != 0B) goto <D.20740>; else goto <D.20742>;
        <D.20742>:
        klass = klass->parent;
      }
    finally
      {
        iter = {CLOBBER};
      }
  }
  <D.20744>:
  if (klass != 0B) goto <D.20743>; else goto <D.20745>;
  <D.20745>:
  monoeg_assertion_message ("* Assertion: should not be reached at %s:%d\n", "class.c", 6953);
  D.29288 = 0;
  return D.29288;
}


mono_class_name_from_token (struct MonoImage * image, guint32 type_token)
{
  unsigned int D.29296;
  unsigned int D.29297;
  char * D.29300;
  unsigned int D.29301;
  <unnamed-unsigned:24> D.29302;
  unsigned int D.29303;
  unsigned int D.29306;
  int D.29307;
  unsigned int D.29308;
  unsigned int D.29309;
  char D.29310;
  <unnamed-unsigned:24> D.29313;
  unsigned int D.29314;
  unsigned int D.29317;
  int D.29318;
  const char * D.29321;
  int D.29322;
  unsigned int D.29323;
  unsigned int D.29324;
  const char * name;
  const char * nspace;

  D.29296 = BIT_FIELD_REF <*image, 32, 128>;
  D.29297 = D.29296 & 8;
  if (D.29297 != 0) goto <D.29298>; else goto <D.29299>;
  <D.29298>:
  D.29300 = monoeg_g_strdup_printf ("DynamicType 0x%08x", type_token);
  return D.29300;
  <D.29299>:
  D.29301 = type_token & 4278190080;
  switch (D.29301) <default: <D.20763>, case 16777216: <D.20756>, case 33554432: <D.20752>, case 452984832: <D.20762>>
  <D.20752>:
  {
    guint32 cols[6];
    struct MonoTableInfo * tt;
    guint tidx;

    try
      {
        tt = &image->tables[2];
        tidx = type_token & 16777215;
        D.29302 = tt->rows;
        D.29303 = (unsigned int) D.29302;
        if (D.29303 < tidx) goto <D.29304>; else goto <D.29305>;
        <D.29304>:
        D.29300 = monoeg_g_strdup_printf ("Invalid type token 0x%08x", type_token);
        return D.29300;
        <D.29305>:
        D.29306 = tidx + 4294967295;
        D.29307 = (int) D.29306;
        mono_metadata_decode_row (tt, D.29307, &cols, 6);
        D.29308 = cols[1];
        name = mono_metadata_string_heap (image, D.29308);
        D.29309 = cols[2];
        nspace = mono_metadata_string_heap (image, D.29309);
        D.29310 = *nspace;
        if (D.29310 == 0) goto <D.29311>; else goto <D.29312>;
        <D.29311>:
        D.29300 = monoeg_g_strdup_printf ("%s", name);
        return D.29300;
        <D.29312>:
        D.29300 = monoeg_g_strdup_printf ("%s.%s", nspace, name);
        return D.29300;
      }
    finally
      {
        cols = {CLOBBER};
      }
  }
  <D.20756>:
  {
    struct MonoError error;
    guint32 cols[3];
    struct MonoTableInfo * t;
    guint tidx;

    try
      {
        t = &image->tables[1];
        tidx = type_token & 16777215;
        D.29313 = t->rows;
        D.29314 = (unsigned int) D.29313;
        if (D.29314 < tidx) goto <D.29315>; else goto <D.29316>;
        <D.29315>:
        D.29300 = monoeg_g_strdup_printf ("Invalid type token 0x%08x", type_token);
        return D.29300;
        <D.29316>:
        D.29317 = tidx + 4294967295;
        D.29318 = mono_verifier_verify_typeref_row (image, D.29317, &error);
        if (D.29318 == 0) goto <D.29319>; else goto <D.29320>;
        <D.29319>:
        {
          char * msg;

          D.29321 = mono_error_get_message (&error);
          msg = monoeg_g_strdup_printf ("Invalid type token 0x%08x due to \'%s\'", type_token, D.29321);
          mono_error_cleanup (&error);
          D.29300 = msg;
          return D.29300;
        }
        <D.29320>:
        D.29317 = tidx + 4294967295;
        D.29322 = (int) D.29317;
        mono_metadata_decode_row (t, D.29322, &cols, 3);
        D.29323 = cols[1];
        name = mono_metadata_string_heap (image, D.29323);
        D.29324 = cols[2];
        nspace = mono_metadata_string_heap (image, D.29324);
        D.29310 = *nspace;
        if (D.29310 == 0) goto <D.29325>; else goto <D.29326>;
        <D.29325>:
        D.29300 = monoeg_g_strdup_printf ("%s", name);
        return D.29300;
        <D.29326>:
        D.29300 = monoeg_g_strdup_printf ("%s.%s", nspace, name);
        return D.29300;
      }
    finally
      {
        error = {CLOBBER};
        cols = {CLOBBER};
      }
  }
  <D.20762>:
  D.29300 = monoeg_g_strdup_printf ("Typespec 0x%08x", type_token);
  return D.29300;
  <D.20763>:
  D.29300 = monoeg_g_strdup_printf ("Invalid type token 0x%08x", type_token);
  return D.29300;
}


mono_class_get_full (struct MonoImage * image, guint32 type_token, struct MonoGenericContext * context)
{
  unsigned int D.29330;
  unsigned int D.29331;
  unsigned int D.29334;
  unsigned int table.383;
  unsigned int D.29336;
  gchar * D.29341;
  struct MonoClass * D.29342;
  unsigned int D.29343;
  int D.29344;
  int D.29347;
  struct MonoError error;
  struct MonoClass * class;

  try
    {
      class = 0B;
      D.29330 = BIT_FIELD_REF <*image, 32, 128>;
      D.29331 = D.29330 & 8;
      if (D.29331 != 0) goto <D.29332>; else goto <D.29333>;
      <D.29332>:
      {
        int table;

        D.29334 = type_token >> 24;
        table = (int) D.29334;
        table.383 = (unsigned int) table;
        D.29336 = table.383 + 4294967295;
        if (D.29336 > 1) goto <D.29337>; else goto <D.29338>;
        <D.29337>:
        if (table != 27) goto <D.29339>; else goto <D.29340>;
        <D.29339>:
        D.29341 = monoeg_strdup ("Bad type token.");
        mono_loader_set_error_bad_image (D.29341);
        D.29342 = 0B;
        return D.29342;
        <D.29340>:
        <D.29338>:
        D.29342 = mono_lookup_dynamic_token (image, type_token, context);
        return D.29342;
      }
      <D.29333>:
      D.29343 = type_token & 4278190080;
      switch (D.29343) <default: <D.20796>, case 16777216: <D.20794>, case 33554432: <D.20792>, case 452984832: <D.20795>>
      <D.20792>:
      class = mono_class_create_from_typedef (image, type_token, &error);
      D.29344 = mono_error_ok (&error);
      if (D.29344 == 0) goto <D.29345>; else goto <D.29346>;
      <D.29345>:
      mono_loader_set_error_from_mono_error (&error);
      mono_error_cleanup (&error);
      D.29342 = 0B;
      return D.29342;
      <D.29346>:
      goto <D.20793>;
      <D.20794>:
      class = mono_class_from_typeref (image, type_token);
      goto <D.20793>;
      <D.20795>:
      class = mono_class_create_from_typespec (image, type_token, context, &error);
      D.29347 = mono_error_ok (&error);
      if (D.29347 == 0) goto <D.29348>; else goto <D.29349>;
      <D.29348>:
      mono_error_cleanup (&error);
      <D.29349>:
      goto <D.20793>;
      <D.20796>:
      D.29343 = type_token & 4278190080;
      monoeg_g_log (0B, 16, "unknown token type %x", D.29343);
      monoeg_assertion_message ("* Assertion: should not be reached at %s:%d\n", "class.c", 7118);
      <D.20793>:
      if (class == 0B) goto <D.29350>; else goto <D.29351>;
      <D.29350>:
      {
        char * name;
        char * assembly;

        name = mono_class_name_from_token (image, type_token);
        assembly = mono_assembly_name_from_token (image, type_token);
        mono_loader_set_error_type_load (name, assembly);
        monoeg_g_free (name);
        monoeg_g_free (assembly);
      }
      <D.29351>:
      D.29342 = class;
      return D.29342;
    }
  finally
    {
      error = {CLOBBER};
    }
}


mono_class_create_from_typespec (struct MonoImage * image, guint32 type_spec, struct MonoGenericContext * context, struct MonoError * error)
{
  int D.29354;
  struct MonoClass * D.29357;
  int inflated.384;
  struct MonoClass * ret;
  gboolean inflated;
  struct MonoType * t;

  try
    {
      inflated = 0;
      t = mono_type_retrieve_from_typespec (image, type_spec, context, &inflated, error);
      D.29354 = mono_error_ok (error);
      if (D.29354 == 0) goto <D.29355>; else goto <D.29356>;
      <D.29355>:
      D.29357 = 0B;
      return D.29357;
      <D.29356>:
      ret = mono_class_from_mono_type (t);
      inflated.384 = inflated;
      if (inflated.384 != 0) goto <D.29359>; else goto <D.29360>;
      <D.29359>:
      mono_metadata_free_type (t);
      <D.29360>:
      D.29357 = ret;
      return D.29357;
    }
  finally
    {
      inflated = {CLOBBER};
    }
}


mono_type_retrieve_from_typespec (struct MonoImage * image, guint32 type_spec, struct MonoGenericContext * context, gboolean * did_inflate, struct MonoError * error)
{
  struct MonoType * D.29365;
  struct MonoGenericInst * D.29370;
  struct MonoGenericInst * D.29372;
  int D.29373;
  struct MonoType * t;

  t = mono_type_create_from_typespec (image, type_spec);
  mono_error_init (error);
  *did_inflate = 0;
  if (t == 0B) goto <D.29363>; else goto <D.29364>;
  <D.29363>:
  {
    char * name;
    char * assembly;

    name = mono_class_name_from_token (image, type_spec);
    assembly = mono_assembly_name_from_token (image, type_spec);
    mono_error_set_type_load_name (error, name, assembly, "Could not resolve typespec token %08x", type_spec);
    D.29365 = 0B;
    return D.29365;
  }
  <D.29364>:
  if (context != 0B) goto <D.29368>; else goto <D.29369>;
  <D.29368>:
  D.29370 = context->class_inst;
  if (D.29370 != 0B) goto <D.29366>; else goto <D.29371>;
  <D.29371>:
  D.29372 = context->method_inst;
  if (D.29372 != 0B) goto <D.29366>; else goto <D.29367>;
  <D.29366>:
  {
    struct MonoType * inflated;

    inflated = inflate_generic_type (0B, t, context, error);
    D.29373 = mono_error_ok (error);
    if (D.29373 == 0) goto <D.29374>; else goto <D.29375>;
    <D.29374>:
    D.29365 = 0B;
    return D.29365;
    <D.29375>:
    if (inflated != 0B) goto <D.29376>; else goto <D.29377>;
    <D.29376>:
    t = inflated;
    *did_inflate = 1;
    <D.29377>:
  }
  <D.29367>:
  <D.29369>:
  D.29365 = t;
  return D.29365;
}


mono_assembly_name_from_token (struct MonoImage * image, guint32 type_token)
{
  unsigned int D.29379;
  unsigned int D.29380;
  char * D.29383;
  char * D.29384;
  unsigned int D.29385;
  struct MonoAssembly * D.29386;
  struct MonoAssemblyName * D.29389;
  const char * D.29390;
  const char * iftmp.385;
  <unnamed-unsigned:24> D.29397;
  unsigned int D.29398;
  unsigned int D.29401;
  int D.29402;
  const char * D.29405;
  int D.29406;
  unsigned int D.29407;
  unsigned int D.29408;

  D.29379 = BIT_FIELD_REF <*image, 32, 128>;
  D.29380 = D.29379 & 8;
  if (D.29380 != 0) goto <D.29381>; else goto <D.29382>;
  <D.29381>:
  D.29384 = image->name;
  D.29383 = monoeg_g_strdup_printf ("DynamicAssembly %s", D.29384);
  return D.29383;
  <D.29382>:
  D.29385 = type_token & 4278190080;
  switch (D.29385) <default: <D.20783>, case 16777216: <D.20769>, case 33554432: <D.20768>, case 452984832: <D.20782>>
  <D.20768>:
  D.29386 = image->assembly;
  if (D.29386 != 0B) goto <D.29387>; else goto <D.29388>;
  <D.29387>:
  D.29386 = image->assembly;
  D.29389 = &D.29386->aname;
  D.29383 = mono_stringify_assembly_name (D.29389);
  return D.29383;
  <D.29388>:
  D.29390 = image->assembly_name;
  if (D.29390 != 0B) goto <D.29391>; else goto <D.29392>;
  <D.29391>:
  D.29390 = image->assembly_name;
  D.29383 = monoeg_strdup (D.29390);
  return D.29383;
  <D.29392>:
  D.29384 = image->name;
  if (D.29384 != 0B) goto <D.29394>; else goto <D.29395>;
  <D.29394>:
  iftmp.385 = image->name;
  goto <D.29396>;
  <D.29395>:
  iftmp.385 = "[Could not resolve assembly name";
  <D.29396>:
  D.29383 = monoeg_g_strdup_printf ("%s", iftmp.385);
  return D.29383;
  <D.20769>:
  {
    struct MonoError error;
    struct MonoAssemblyName aname;
    guint32 cols[3];
    struct MonoTableInfo * t;
    guint32 idx;

    try
      {
        t = &image->tables[1];
        idx = type_token & 16777215;
        D.29397 = t->rows;
        D.29398 = (unsigned int) D.29397;
        if (D.29398 < idx) goto <D.29399>; else goto <D.29400>;
        <D.29399>:
        D.29383 = monoeg_g_strdup_printf ("Invalid type token 0x%08x", type_token);
        return D.29383;
        <D.29400>:
        D.29401 = idx + 4294967295;
        D.29402 = mono_verifier_verify_typeref_row (image, D.29401, &error);
        if (D.29402 == 0) goto <D.29403>; else goto <D.29404>;
        <D.29403>:
        {
          char * msg;

          D.29405 = mono_error_get_message (&error);
          msg = monoeg_g_strdup_printf ("Invalid type token 0x%08x due to \'%s\'", type_token, D.29405);
          mono_error_cleanup (&error);
          D.29383 = msg;
          return D.29383;
        }
        <D.29404>:
        D.29401 = idx + 4294967295;
        D.29406 = (int) D.29401;
        mono_metadata_decode_row (t, D.29406, &cols, 3);
        D.29407 = cols[0];
        idx = D.29407 >> 2;
        D.29407 = cols[0];
        D.29408 = D.29407 & 3;
        switch (D.29408) <default: <D.20780>, case 0: <D.20776>, case 1: <D.20777>, case 2: <D.20779>, case 3: <D.20778>>
        <D.20776>:
        D.29383 = monoeg_strdup ("");
        return D.29383;
        <D.20777>:
        D.29383 = monoeg_strdup ("");
        return D.29383;
        <D.20778>:
        D.29383 = monoeg_strdup ("");
        return D.29383;
        <D.20779>:
        D.29401 = idx + 4294967295;
        D.29406 = (int) D.29401;
        mono_assembly_get_assemblyref (image, D.29406, &aname);
        D.29383 = mono_stringify_assembly_name (&aname);
        return D.29383;
        <D.20780>:
        monoeg_assertion_message ("* Assertion: should not be reached at %s:%d\n", "class.c", 7058);
        goto <D.20781>;
      }
    finally
      {
        error = {CLOBBER};
        aname = {CLOBBER};
        cols = {CLOBBER};
      }
  }
  <D.20782>:
  D.29383 = monoeg_strdup ("");
  return D.29383;
  <D.20783>:
  monoeg_assertion_message ("* Assertion: should not be reached at %s:%d\n", "class.c", 7066);
  <D.20781>:
  D.29383 = 0B;
  return D.29383;
}


mono_type_get_full (struct MonoImage * image, guint32 type_token, struct MonoGenericContext * context)
{
  unsigned int D.29412;
  unsigned int D.29413;
  struct MonoType * D.29416;
  void * D.29417;
  unsigned int D.29418;
  struct MonoType * iftmp.386;
  int D.29425;
  const char * D.29428;
  int inflated.387;
  struct MonoClass * D.29432;
  unsigned char D.29433;
  unsigned char D.29434;
  struct MonoError error;
  struct MonoType * type;
  gboolean inflated;

  try
    {
      type = 0B;
      inflated = 0;
      D.29412 = BIT_FIELD_REF <*image, 32, 128>;
      D.29413 = D.29412 & 8;
      if (D.29413 != 0) goto <D.29414>; else goto <D.29415>;
      <D.29414>:
      D.29417 = mono_lookup_dynamic_token (image, type_token, context);
      D.29416 = mono_class_get_type (D.29417);
      return D.29416;
      <D.29415>:
      D.29418 = type_token & 4278190080;
      if (D.29418 != 452984832) goto <D.29419>; else goto <D.29420>;
      <D.29419>:
      {
        struct MonoClass * class;

        class = mono_class_get_full (image, type_token, context);
        if (class != 0B) goto <D.29422>; else goto <D.29423>;
        <D.29422>:
        iftmp.386 = mono_class_get_type (class);
        goto <D.29424>;
        <D.29423>:
        iftmp.386 = 0B;
        <D.29424>:
        D.29416 = iftmp.386;
        return D.29416;
      }
      <D.29420>:
      type = mono_type_retrieve_from_typespec (image, type_token, context, &inflated, &error);
      D.29425 = mono_error_ok (&error);
      if (D.29425 == 0) goto <D.29426>; else goto <D.29427>;
      <D.29426>:
      {
        char * name;
        char * assembly;

        name = mono_class_name_from_token (image, type_token);
        assembly = mono_assembly_name_from_token (image, type_token);
        D.29428 = mono_error_get_message (&error);
        monoeg_g_log (0B, 16, "Error loading type %s from %s due to %s", name, assembly, D.29428);
        mono_error_cleanup (&error);
        mono_loader_set_error_type_load (name, assembly);
        D.29416 = 0B;
        return D.29416;
      }
      <D.29427>:
      inflated.387 = inflated;
      if (inflated.387 != 0) goto <D.29430>; else goto <D.29431>;
      <D.29430>:
      {
        struct MonoType * tmp;

        tmp = type;
        D.29432 = mono_class_from_mono_type (type);
        type = mono_class_get_type (D.29432);
        D.29433 = type->type;
        D.29434 = tmp->type;
        if (D.29433 != D.29434) goto <D.29435>; else goto <D.29436>;
        <D.29435>:
        type = tmp;
        goto <D.29437>;
        <D.29436>:
        mono_metadata_free_type (tmp);
        <D.29437>:
      }
      <D.29431>:
      D.29416 = type;
      return D.29416;
    }
  finally
    {
      error = {CLOBBER};
      inflated = {CLOBBER};
    }
}


mono_class_get (struct MonoImage * image, guint32 type_token)
{
  struct MonoClass * D.29440;

  D.29440 = mono_class_get_full (image, type_token, 0B);
  return D.29440;
}


mono_image_init_name_cache (struct MonoImage * image)
{
  struct GHashTable * D.29442;
  struct GHashTable * D.29445;
  unsigned int D.29446;
  unsigned int D.29447;
  unsigned int D.29450;
  int D.29451;
  unsigned int D.29452;
  unsigned int D.29453;
  unsigned int D.29456;
  unsigned int D.29457;
  const void * nspace_index.388;
  void * nspace_index.389;
  void * i.390;
  <unnamed-unsigned:24> D.29463;
  unsigned int D.29464;
  unsigned int D.29465;
  unsigned int D.29466;
  int D.29469;
  int D.29470;
  void * D.29471;
  <unnamed-unsigned:24> D.29472;
  int D.29473;
  struct MonoTableInfo * t;
  guint32 cols[6];
  const char * name;
  const char * nspace;
  guint32 i;
  guint32 visib;
  guint32 nspace_index;
  struct GHashTable * name_cache2;
  struct GHashTable * nspace_table;

  try
    {
      t = &image->tables[2];
      mono_image_lock (image);
      D.29442 = image->name_cache;
      if (D.29442 != 0B) goto <D.29443>; else goto <D.29444>;
      <D.29443>:
      mono_image_unlock (image);
      return;
      <D.29444>:
      D.29445 = monoeg_g_hash_table_new (monoeg_g_str_hash, monoeg_g_str_equal);
      image->name_cache = D.29445;
      D.29446 = BIT_FIELD_REF <*image, 32, 128>;
      D.29447 = D.29446 & 8;
      if (D.29447 != 0) goto <D.29448>; else goto <D.29449>;
      <D.29448>:
      mono_image_unlock (image);
      return;
      <D.29449>:
      name_cache2 = monoeg_g_hash_table_new (0B, 0B);
      i = 1;
      goto <D.20829>;
      <D.20828>:
      D.29450 = i + 4294967295;
      D.29451 = (int) D.29450;
      mono_metadata_decode_row (t, D.29451, &cols, 6);
      D.29452 = cols[0];
      visib = D.29452 & 7;
      D.29453 = visib + 4294967294;
      if (D.29453 <= 5) goto <D.29454>; else goto <D.29455>;
      <D.29454>:
      // predicted unlikely by continue predictor.
      goto <D.20827>;
      <D.29455>:
      D.29456 = cols[1];
      name = mono_metadata_string_heap (image, D.29456);
      D.29457 = cols[2];
      nspace = mono_metadata_string_heap (image, D.29457);
      nspace_index = cols[2];
      nspace_index.388 = (const void *) nspace_index;
      nspace_table = monoeg_g_hash_table_lookup (name_cache2, nspace_index.388);
      if (nspace_table == 0B) goto <D.29459>; else goto <D.29460>;
      <D.29459>:
      nspace_table = monoeg_g_hash_table_new (monoeg_g_str_hash, monoeg_g_str_equal);
      D.29442 = image->name_cache;
      monoeg_g_hash_table_insert_replace (D.29442, nspace, nspace_table, 0);
      nspace_index.389 = (void *) nspace_index;
      monoeg_g_hash_table_insert_replace (name_cache2, nspace_index.389, nspace_table, 0);
      <D.29460>:
      i.390 = (void *) i;
      monoeg_g_hash_table_insert_replace (nspace_table, name, i.390, 0);
      <D.20827>:
      i = i + 1;
      <D.20829>:
      D.29463 = t->rows;
      D.29464 = (unsigned int) D.29463;
      if (D.29464 >= i) goto <D.20828>; else goto <D.20830>;
      <D.20830>:
      {
        struct MonoTableInfo * t;
        guint32 cols[5];
        int i;

        try
          {
            t = &image->tables[39];
            i = 0;
            goto <D.20835>;
            <D.20834>:
            mono_metadata_decode_row (t, i, &cols, 5);
            D.29465 = cols[2];
            name = mono_metadata_string_heap (image, D.29465);
            D.29466 = cols[3];
            nspace = mono_metadata_string_heap (image, D.29466);
            nspace_index = cols[3];
            nspace_index.388 = (const void *) nspace_index;
            nspace_table = monoeg_g_hash_table_lookup (name_cache2, nspace_index.388);
            if (nspace_table == 0B) goto <D.29467>; else goto <D.29468>;
            <D.29467>:
            nspace_table = monoeg_g_hash_table_new (monoeg_g_str_hash, monoeg_g_str_equal);
            D.29442 = image->name_cache;
            monoeg_g_hash_table_insert_replace (D.29442, nspace, nspace_table, 0);
            nspace_index.389 = (void *) nspace_index;
            monoeg_g_hash_table_insert_replace (name_cache2, nspace_index.389, nspace_table, 0);
            <D.29468>:
            D.29469 = i + 1;
            D.29470 = D.29469 | 654311424;
            D.29471 = (void *) D.29470;
            monoeg_g_hash_table_insert_replace (nspace_table, name, D.29471, 0);
            i = i + 1;
            <D.20835>:
            D.29472 = t->rows;
            D.29473 = (int) D.29472;
            if (D.29473 > i) goto <D.20834>; else goto <D.20836>;
            <D.20836>:
          }
        finally
          {
            cols = {CLOBBER};
          }
      }
      monoeg_g_hash_table_destroy (name_cache2);
      mono_image_unlock (image);
    }
  finally
    {
      cols = {CLOBBER};
    }
}


mono_image_add_to_name_cache (struct MonoImage * image, const char * nspace, const char * name, guint32 index)
{
  struct GHashTable * D.29477;
  void * D.29482;
  char * D.29485;
  void * index.391;
  struct GHashTable * nspace_table;
  struct GHashTable * name_cache;
  guint32 old_index;

  mono_image_lock (image);
  D.29477 = image->name_cache;
  if (D.29477 == 0B) goto <D.29478>; else goto <D.29479>;
  <D.29478>:
  mono_image_init_name_cache (image);
  <D.29479>:
  name_cache = image->name_cache;
  nspace_table = monoeg_g_hash_table_lookup (name_cache, nspace);
  if (nspace_table == 0B) goto <D.29480>; else goto <D.29481>;
  <D.29480>:
  nspace_table = monoeg_g_hash_table_new (monoeg_g_str_hash, monoeg_g_str_equal);
  monoeg_g_hash_table_insert_replace (name_cache, nspace, nspace_table, 0);
  <D.29481>:
  D.29482 = monoeg_g_hash_table_lookup (nspace_table, name);
  old_index = (guint32) D.29482;
  if (old_index != 0) goto <D.29483>; else goto <D.29484>;
  <D.29483>:
  D.29485 = image->name;
  monoeg_g_log (0B, 4, "overrwritting old token %x on image %s for type %s::%s", old_index, D.29485, nspace, name);
  <D.20846>:
  goto <D.20846>;
  <D.29484>:
  index.391 = (void *) index;
  monoeg_g_hash_table_insert_replace (nspace_table, name, index.391, 0);
  mono_image_unlock (image);
}


mono_class_from_name_case (struct MonoImage * image, const char * name_space, const char * name)
{
  unsigned int D.29487;
  unsigned int D.29488;
  struct GHashTable * D.29491;
  void * D.29494;
  struct MonoClass * D.29501;
  unsigned int D.29502;
  unsigned int D.29503;
  int D.29504;
  unsigned int D.29505;
  unsigned int D.29506;
  unsigned int D.29509;
  unsigned int D.29510;
  int D.29511;
  int D.29514;
  unsigned int D.29517;
  <unnamed-unsigned:24> D.29518;
  unsigned int D.29519;
  struct MonoTableInfo * t;
  guint32 cols[6];
  const char * n;
  const char * nspace;
  guint32 i;
  guint32 visib;

  try
    {
      t = &image->tables[2];
      D.29487 = BIT_FIELD_REF <*image, 32, 128>;
      D.29488 = D.29487 & 8;
      if (D.29488 != 0) goto <D.29489>; else goto <D.29490>;
      <D.29489>:
      {
        guint32 token;
        struct FindUserData user_data;

        try
          {
            token = 0;
            mono_image_lock (image);
            D.29491 = image->name_cache;
            if (D.29491 == 0B) goto <D.29492>; else goto <D.29493>;
            <D.29492>:
            mono_image_init_name_cache (image);
            <D.29493>:
            user_data.key = name_space;
            user_data.value = 0B;
            D.29491 = image->name_cache;
            monoeg_g_hash_table_foreach (D.29491, find_nocase, &user_data);
            D.29494 = user_data.value;
            if (D.29494 != 0B) goto <D.29495>; else goto <D.29496>;
            <D.29495>:
            {
              struct GHashTable * nspace_table;

              nspace_table = user_data.value;
              user_data.key = name;
              user_data.value = 0B;
              monoeg_g_hash_table_foreach (nspace_table, find_nocase, &user_data);
              D.29494 = user_data.value;
              if (D.29494 != 0B) goto <D.29497>; else goto <D.29498>;
              <D.29497>:
              D.29494 = user_data.value;
              token = (guint32) D.29494;
              <D.29498>:
            }
            <D.29496>:
            mono_image_unlock (image);
            if (token != 0) goto <D.29499>; else goto <D.29500>;
            <D.29499>:
            D.29502 = token | 33554432;
            D.29501 = mono_class_get (image, D.29502);
            return D.29501;
            <D.29500>:
            D.29501 = 0B;
            return D.29501;
          }
        finally
          {
            user_data = {CLOBBER};
          }
      }
      <D.29490>:
      i = 1;
      goto <D.20874>;
      <D.20873>:
      D.29503 = i + 4294967295;
      D.29504 = (int) D.29503;
      mono_metadata_decode_row (t, D.29504, &cols, 6);
      D.29505 = cols[0];
      visib = D.29505 & 7;
      D.29506 = visib + 4294967294;
      if (D.29506 <= 5) goto <D.29507>; else goto <D.29508>;
      <D.29507>:
      // predicted unlikely by continue predictor.
      goto <D.20872>;
      <D.29508>:
      D.29509 = cols[1];
      n = mono_metadata_string_heap (image, D.29509);
      D.29510 = cols[2];
      nspace = mono_metadata_string_heap (image, D.29510);
      D.29511 = monoeg_ascii_strcasecmp (n, name);
      if (D.29511 == 0) goto <D.29512>; else goto <D.29513>;
      <D.29512>:
      D.29514 = monoeg_ascii_strcasecmp (nspace, name_space);
      if (D.29514 == 0) goto <D.29515>; else goto <D.29516>;
      <D.29515>:
      D.29517 = i | 33554432;
      D.29501 = mono_class_get (image, D.29517);
      return D.29501;
      <D.29516>:
      <D.29513>:
      <D.20872>:
      i = i + 1;
      <D.20874>:
      D.29518 = t->rows;
      D.29519 = (unsigned int) D.29518;
      if (D.29519 >= i) goto <D.20873>; else goto <D.20875>;
      <D.20875>:
      D.29501 = 0B;
      return D.29501;
    }
  finally
    {
      cols = {CLOBBER};
    }
}


find_nocase (void * key, void * value, void * user_data)
{
  void * D.29523;
  const void * D.29526;
  int D.29527;
  char * name;
  struct FindUserData * data;

  name = key;
  data = user_data;
  D.29523 = data->value;
  if (D.29523 == 0B) goto <D.29524>; else goto <D.29525>;
  <D.29524>:
  D.29526 = data->key;
  D.29527 = monoeg_ascii_strcasecmp (name, D.29526);
  if (D.29527 == 0) goto <D.29528>; else goto <D.29529>;
  <D.29528>:
  data->value = value;
  <D.29529>:
  <D.29525>:
}


mono_class_from_name (struct MonoImage * image, const char * name_space, const char * name)
{
  int nested.392;
  int name.393;
  unsigned int D.29534;
  struct MonoClass * D.29537;
  int D.29538;
  unsigned int D.29539;
  sizetype pos.394;
  sizetype D.29541;
  gboolean (*<T1e38>) (struct MonoImage *, const char *, const char *, struct MonoClass * *) get_class_from_name.395;
  unsigned int D.29545;
  unsigned int D.29546;
  struct MonoClass * class.396;
  struct MonoClass * class.397;
  struct MonoClass * iftmp.398;
  struct GHashTable * D.29561;
  void * D.29566;
  unsigned int D.29569;
  unsigned int D.29570;
  struct MonoImage * * D.29573;
  unsigned int i.399;
  unsigned int D.29577;
  struct MonoImage * * D.29578;
  struct MonoClass * class.400;
  unsigned int i.401;
  unsigned int D.29583;
  struct MonoClass * class.402;
  unsigned int D.29591;
  unsigned int D.29594;
  int D.29595;
  unsigned int D.29596;
  struct MonoAssembly * D.29599;
  unsigned int D.29600;
  struct MonoClass * class.403;
  unsigned int D.29608;
  int D.29609;
  struct MonoAssembly * * D.29610;
  sizetype D.29611;
  sizetype D.29612;
  struct MonoAssembly * * D.29613;
  struct MonoAssembly * D.29614;
  _Bool D.29615;
  long int D.29616;
  long int D.29617;
  struct MonoImage * D.29622;
  struct MonoClass * class.404;
  struct GHashTable * nspace_table;
  struct MonoImage * loaded_image;
  guint32 token;
  int i;
  struct MonoClass * class;
  char * nested;
  char buf[1024];

  try
    {
      token = 0;
      nested = __builtin_strchr (name, 47);
      if (nested != 0B) goto <D.29530>; else goto <D.29531>;
      <D.29530>:
      {
        int pos;
        int len;

        nested.392 = (int) nested;
        name.393 = (int) name;
        pos = nested.392 - name.393;
        D.29534 = strlen (name);
        len = (int) D.29534;
        if (len > 1023) goto <D.29535>; else goto <D.29536>;
        <D.29535>:
        D.29537 = 0B;
        return D.29537;
        <D.29536>:
        D.29538 = len + 1;
        D.29539 = (unsigned int) D.29538;
        memcpy (&buf, name, D.29539);
        buf[pos] = 0;
        pos.394 = (sizetype) pos;
        D.29541 = pos.394 + 1;
        nested = &buf + D.29541;
        name = &buf;
      }
      <D.29531>:
      get_class_from_name.395 = get_class_from_name;
      if (get_class_from_name.395 != 0B) goto <D.29543>; else goto <D.29544>;
      <D.29543>:
      D.29545 = BIT_FIELD_REF <*image, 32, 4576>;
      D.29546 = D.29545 & 16777215;
      if (D.29546 == 0) goto <D.29547>; else goto <D.29548>;
      <D.29547>:
      {
        gboolean res;

        get_class_from_name.395 = get_class_from_name;
        res = get_class_from_name.395 (image, name_space, name, &class);
        if (res != 0) goto <D.29549>; else goto <D.29550>;
        <D.29549>:
        class.396 = class;
        if (class.396 == 0B) goto <D.29552>; else goto <D.29553>;
        <D.29552>:
        class.397 = search_modules (image, name_space, name);
        class = class.397;
        <D.29553>:
        if (nested != 0B) goto <D.29555>; else goto <D.29556>;
        <D.29555>:
        class.396 = class;
        if (class.396 != 0B) goto <D.29558>; else goto <D.29559>;
        <D.29558>:
        class.396 = class;
        iftmp.398 = return_nested_in (class.396, nested);
        goto <D.29560>;
        <D.29559>:
        iftmp.398 = 0B;
        <D.29560>:
        D.29537 = iftmp.398;
        return D.29537;
        <D.29556>:
        D.29537 = class;
        return D.29537;
        <D.29550>:
      }
      <D.29548>:
      <D.29544>:
      mono_image_lock (image);
      D.29561 = image->name_cache;
      if (D.29561 == 0B) goto <D.29562>; else goto <D.29563>;
      <D.29562>:
      mono_image_init_name_cache (image);
      <D.29563>:
      D.29561 = image->name_cache;
      nspace_table = monoeg_g_hash_table_lookup (D.29561, name_space);
      if (nspace_table != 0B) goto <D.29564>; else goto <D.29565>;
      <D.29564>:
      D.29566 = monoeg_g_hash_table_lookup (nspace_table, name);
      token = (guint32) D.29566;
      <D.29565>:
      mono_image_unlock (image);
      if (token == 0) goto <D.29567>; else goto <D.29568>;
      <D.29567>:
      D.29569 = BIT_FIELD_REF <*image, 32, 128>;
      D.29570 = D.29569 & 8;
      if (D.29570 != 0) goto <D.29571>; else goto <D.29572>;
      <D.29571>:
      D.29573 = image->modules;
      if (D.29573 != 0B) goto <D.29574>; else goto <D.29575>;
      <D.29574>:
      i = 0;
      goto <D.20926>;
      <D.20925>:
      {
        struct MonoImage * module;

        D.29573 = image->modules;
        i.399 = (unsigned int) i;
        D.29577 = i.399 * 4;
        D.29578 = D.29573 + D.29577;
        module = *D.29578;
        class.400 = mono_class_from_name (module, name_space, name);
        class = class.400;
        class.396 = class;
        if (class.396 != 0B) goto <D.29580>; else goto <D.29581>;
        <D.29580>:
        D.29537 = class;
        return D.29537;
        <D.29581>:
      }
      i = i + 1;
      <D.20926>:
      i.401 = (unsigned int) i;
      D.29583 = image->module_count;
      if (i.401 < D.29583) goto <D.20925>; else goto <D.20927>;
      <D.20927>:
      <D.29575>:
      <D.29572>:
      <D.29568>:
      if (token == 0) goto <D.29584>; else goto <D.29585>;
      <D.29584>:
      class.402 = search_modules (image, name_space, name);
      class = class.402;
      class.396 = class;
      if (class.396 != 0B) goto <D.29587>; else goto <D.29588>;
      <D.29587>:
      D.29537 = class;
      return D.29537;
      <D.29588>:
      <D.29585>:
      if (token == 0) goto <D.29589>; else goto <D.29590>;
      <D.29589>:
      D.29537 = 0B;
      return D.29537;
      <D.29590>:
      D.29591 = token >> 24;
      if (D.29591 == 39) goto <D.29592>; else goto <D.29593>;
      <D.29592>:
      {
        struct MonoTableInfo * t;
        guint32 cols[5];
        guint32 idx;
        guint32 impl;

        try
          {
            t = &image->tables[39];
            idx = token & 16777215;
            D.29594 = idx + 4294967295;
            D.29595 = (int) D.29594;
            mono_metadata_decode_row (t, D.29595, &cols, 5);
            impl = cols[4];
            D.29596 = impl & 3;
            if (D.29596 == 0) goto <D.29597>; else goto <D.29598>;
            <D.29597>:
            D.29599 = image->assembly;
            D.29600 = impl >> 2;
            loaded_image = mono_assembly_load_module (D.29599, D.29600);
            if (loaded_image == 0B) goto <D.29601>; else goto <D.29602>;
            <D.29601>:
            D.29537 = 0B;
            return D.29537;
            <D.29602>:
            class.403 = mono_class_from_name (loaded_image, name_space, name);
            class = class.403;
            if (nested != 0B) goto <D.29604>; else goto <D.29605>;
            <D.29604>:
            class.396 = class;
            D.29537 = return_nested_in (class.396, nested);
            return D.29537;
            <D.29605>:
            D.29537 = class;
            return D.29537;
            <D.29598>:
            D.29596 = impl & 3;
            if (D.29596 == 1) goto <D.29606>; else goto <D.29607>;
            <D.29606>:
            {
              guint32 assembly_idx;

              assembly_idx = impl >> 2;
              D.29608 = assembly_idx + 4294967295;
              D.29609 = (int) D.29608;
              mono_assembly_load_reference (image, D.29609);
              D.29610 = image->references;
              D.29611 = assembly_idx + 1073741823;
              D.29612 = D.29611 * 4;
              D.29613 = D.29610 + D.29612;
              D.29614 = *D.29613;
              D.29615 = D.29614 == 0B;
              D.29616 = (long int) D.29615;
              D.29617 = __builtin_expect (D.29616, 0);
              if (D.29617 != 0) goto <D.29618>; else goto <D.29619>;
              <D.29618>:
              monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "class.c", 7552, "image->references [assembly_idx - 1]");
              <D.29619>:
              D.29610 = image->references;
              D.29611 = assembly_idx + 1073741823;
              D.29612 = D.29611 * 4;
              D.29613 = D.29610 + D.29612;
              D.29614 = *D.29613;
              if (D.29614 == 4294967295B) goto <D.29620>; else goto <D.29621>;
              <D.29620>:
              D.29537 = 0B;
              return D.29537;
              <D.29621>:
              D.29610 = image->references;
              D.29611 = assembly_idx + 1073741823;
              D.29612 = D.29611 * 4;
              D.29613 = D.29610 + D.29612;
              D.29614 = *D.29613;
              D.29622 = D.29614->image;
              D.29537 = mono_class_from_name (D.29622, name_space, name);
              return D.29537;
            }
            <D.29607>:
            monoeg_g_log (0B, 4, "not yet implemented");
            <D.20933>:
            goto <D.20933>;
          }
        finally
          {
            cols = {CLOBBER};
          }
      }
      <D.29593>:
      token = token | 33554432;
      class.404 = mono_class_get (image, token);
      class = class.404;
      if (nested != 0B) goto <D.29624>; else goto <D.29625>;
      <D.29624>:
      class.396 = class;
      D.29537 = return_nested_in (class.396, nested);
      return D.29537;
      <D.29625>:
      D.29537 = class;
      return D.29537;
    }
  finally
    {
      class = {CLOBBER};
      buf = {CLOBBER};
    }
}


search_modules (struct MonoImage * image, const char * name_space, const char * name)
{
  unsigned int D.29629;
  int D.29632;
  struct MonoClass * D.29637;
  <unnamed-unsigned:24> D.29638;
  int D.29639;
  struct MonoTableInfo * file_table;
  struct MonoImage * file_image;
  struct MonoClass * class;
  int i;

  file_table = &image->tables[38];
  i = 0;
  goto <D.20907>;
  <D.20906>:
  {
    guint32 cols[3];

    try
      {
        mono_metadata_decode_row (file_table, i, &cols, 3);
        D.29629 = cols[0];
        if (D.29629 == 1) goto <D.29630>; else goto <D.29631>;
        <D.29630>:
        // predicted unlikely by continue predictor.
        goto <D.20905>;
        <D.29631>:
        D.29632 = i + 1;
        file_image = mono_image_load_file_for_image (image, D.29632);
        if (file_image != 0B) goto <D.29633>; else goto <D.29634>;
        <D.29633>:
        class = mono_class_from_name (file_image, name_space, name);
        if (class != 0B) goto <D.29635>; else goto <D.29636>;
        <D.29635>:
        D.29637 = class;
        return D.29637;
        <D.29636>:
        <D.29634>:
      }
    finally
      {
        cols = {CLOBBER};
      }
  }
  <D.20905>:
  i = i + 1;
  <D.20907>:
  D.29638 = file_table->rows;
  D.29639 = (int) D.29638;
  if (D.29639 > i) goto <D.20906>; else goto <D.20908>;
  <D.20908>:
  D.29637 = 0B;
  return D.29637;
}


return_nested_in (struct MonoClass * class, char * nested)
{
  int D.20891;
  const char * D.29646;
  struct MonoClass * D.29651;
  struct MonoClass * found;
  char * s;
  void * iter;

  try
    {
      s = __builtin_strchr (nested, 47);
      iter = 0B;
      if (s != 0B) goto <D.29644>; else goto <D.29645>;
      <D.29644>:
      *s = 0;
      s = s + 1;
      <D.29645>:
      goto <D.20893>;
      <D.20892>:
      {
        size_t __s1_len;
        size_t __s2_len;

        D.29646 = found->name;
        D.20891 = __builtin_strcmp (D.29646, nested);
      }
      if (D.20891 == 0) goto <D.29647>; else goto <D.29648>;
      <D.29647>:
      if (s != 0B) goto <D.29649>; else goto <D.29650>;
      <D.29649>:
      D.29651 = return_nested_in (found, s);
      return D.29651;
      <D.29650>:
      D.29651 = found;
      return D.29651;
      <D.29648>:
      <D.20893>:
      found = mono_class_get_nested_types (class, &iter);
      if (found != 0B) goto <D.20892>; else goto <D.20894>;
      <D.20894>:
      D.29651 = 0B;
      return D.29651;
    }
  finally
    {
      iter = {CLOBBER};
    }
}


mono_class_is_subclass_of (struct MonoClass * klass, struct MonoClass * klassc, gboolean check_interfaces)
{
  unsigned int D.29658;
  unsigned int D.29659;
  unsigned char D.29661;
  unsigned int D.29663;
  unsigned int D.29664;
  unsigned char D.29666;
  short unsigned int D.29669;
  short unsigned int D.29670;
  guint8 * D.29673;
  short unsigned int D.29674;
  sizetype D.29675;
  guint8 * D.29676;
  unsigned char D.29677;
  int D.29678;
  int D.29679;
  int D.29680;
  int D.29681;
  int D.29682;
  mono_bool D.29685;
  struct MonoClass * * D.29695;
  unsigned int i.405;
  unsigned int D.29697;
  struct MonoClass * * D.29698;
  short unsigned int D.29701;
  int D.29702;
  int D.29709;
  struct MonoClass * D.29712;

  if (check_interfaces != 0) goto <D.29657>; else goto <D.29654>;
  <D.29657>:
  D.29658 = klassc->flags;
  D.29659 = D.29658 & 32;
  if (D.29659 != 0) goto <D.29655>; else goto <D.29660>;
  <D.29660>:
  D.29661 = klassc->byval_arg.type;
  if (D.29661 == 19) goto <D.29655>; else goto <D.29662>;
  <D.29662>:
  D.29661 = klassc->byval_arg.type;
  if (D.29661 == 30) goto <D.29655>; else goto <D.29654>;
  <D.29655>:
  D.29663 = klass->flags;
  D.29664 = D.29663 & 32;
  if (D.29664 == 0) goto <D.29665>; else goto <D.29654>;
  <D.29665>:
  D.29666 = klass->byval_arg.type;
  if (D.29666 != 19) goto <D.29667>; else goto <D.29654>;
  <D.29667>:
  D.29666 = klass->byval_arg.type;
  if (D.29666 != 30) goto <D.29668>; else goto <D.29654>;
  <D.29668>:
  D.29669 = klassc->interface_id;
  D.29670 = klass->max_interface_id;
  if (D.29669 <= D.29670) goto <D.29671>; else goto <D.29672>;
  <D.29671>:
  D.29673 = klass->interface_bitmap;
  D.29669 = klassc->interface_id;
  D.29674 = D.29669 >> 3;
  D.29675 = (sizetype) D.29674;
  D.29676 = D.29673 + D.29675;
  D.29677 = *D.29676;
  D.29678 = (int) D.29677;
  D.29669 = klassc->interface_id;
  D.29679 = (int) D.29669;
  D.29680 = D.29679 & 7;
  D.29681 = D.29678 >> D.29680;
  D.29682 = D.29681 & 1;
  if (D.29682 != 0) goto <D.29683>; else goto <D.29684>;
  <D.29683>:
  D.29685 = 1;
  return D.29685;
  <D.29684>:
  <D.29672>:
  goto <D.29656>;
  <D.29654>:
  if (check_interfaces != 0) goto <D.29690>; else goto <D.29686>;
  <D.29690>:
  D.29658 = klassc->flags;
  D.29659 = D.29658 & 32;
  if (D.29659 != 0) goto <D.29687>; else goto <D.29691>;
  <D.29691>:
  D.29661 = klassc->byval_arg.type;
  if (D.29661 == 19) goto <D.29687>; else goto <D.29692>;
  <D.29692>:
  D.29661 = klassc->byval_arg.type;
  if (D.29661 == 30) goto <D.29687>; else goto <D.29686>;
  <D.29687>:
  D.29663 = klass->flags;
  D.29664 = D.29663 & 32;
  if (D.29664 != 0) goto <D.29688>; else goto <D.29693>;
  <D.29693>:
  D.29666 = klass->byval_arg.type;
  if (D.29666 == 19) goto <D.29688>; else goto <D.29694>;
  <D.29694>:
  D.29666 = klass->byval_arg.type;
  if (D.29666 == 30) goto <D.29688>; else goto <D.29686>;
  <D.29688>:
  {
    int i;

    i = 0;
    goto <D.20942>;
    <D.20941>:
    {
      struct MonoClass * ic;

      D.29695 = klass->interfaces;
      i.405 = (unsigned int) i;
      D.29697 = i.405 * 4;
      D.29698 = D.29695 + D.29697;
      ic = *D.29698;
      if (ic == klassc) goto <D.29699>; else goto <D.29700>;
      <D.29699>:
      D.29685 = 1;
      return D.29685;
      <D.29700>:
    }
    i = i + 1;
    <D.20942>:
    D.29701 = klass->interface_count;
    D.29702 = (int) D.29701;
    if (D.29702 > i) goto <D.20941>; else goto <D.20943>;
    <D.20943>:
  }
  goto <D.29689>;
  <D.29686>:
  D.29663 = klass->flags;
  D.29664 = D.29663 & 32;
  if (D.29664 == 0) goto <D.29703>; else goto <D.29704>;
  <D.29703>:
  D.29666 = klass->byval_arg.type;
  if (D.29666 != 19) goto <D.29705>; else goto <D.29706>;
  <D.29705>:
  D.29666 = klass->byval_arg.type;
  if (D.29666 != 30) goto <D.29707>; else goto <D.29708>;
  <D.29707>:
  D.29709 = mono_class_has_parent (klass, klassc);
  if (D.29709 != 0) goto <D.29710>; else goto <D.29711>;
  <D.29710>:
  D.29685 = 1;
  return D.29685;
  <D.29711>:
  <D.29708>:
  <D.29706>:
  <D.29704>:
  <D.29689>:
  <D.29656>:
  D.29712 = mono_defaults.object_class;
  if (D.29712 == klassc) goto <D.29713>; else goto <D.29714>;
  <D.29713>:
  D.29685 = 1;
  return D.29685;
  <D.29714>:
  D.29685 = 0;
  return D.29685;
}


mono_class_has_parent (struct MonoClass * klass, struct MonoClass * parent)
{
  struct MonoClass * * D.29716;
  _Bool D.29717;
  long int D.29718;
  long int D.29719;
  struct MonoClass * * D.29722;
  _Bool D.29723;
  long int D.29724;
  long int D.29725;
  gboolean D.29728;

  D.29716 = klass->supertypes;
  D.29717 = D.29716 == 0B;
  D.29718 = (long int) D.29717;
  D.29719 = __builtin_expect (D.29718, 0);
  if (D.29719 != 0) goto <D.29720>; else goto <D.29721>;
  <D.29720>:
  mono_class_setup_supertypes (klass);
  <D.29721>:
  D.29722 = parent->supertypes;
  D.29723 = D.29722 == 0B;
  D.29724 = (long int) D.29723;
  D.29725 = __builtin_expect (D.29724, 0);
  if (D.29725 != 0) goto <D.29726>; else goto <D.29727>;
  <D.29726>:
  mono_class_setup_supertypes (parent);
  <D.29727>:
  D.29728 = mono_class_has_parent_fast (klass, parent);
  return D.29728;
}


mono_class_has_parent_fast (struct MonoClass * klass, struct MonoClass * parent)
{
  gboolean D.29730;
  int iftmp.406;
  short unsigned int D.29734;
  short unsigned int D.29735;
  struct MonoClass * * D.29737;
  sizetype D.29738;
  sizetype D.29739;
  sizetype D.29740;
  struct MonoClass * * D.29741;
  struct MonoClass * D.29742;

  D.29734 = klass->idepth;
  D.29735 = parent->idepth;
  if (D.29734 >= D.29735) goto <D.29736>; else goto <D.29732>;
  <D.29736>:
  D.29737 = klass->supertypes;
  D.29735 = parent->idepth;
  D.29738 = (sizetype) D.29735;
  D.29739 = D.29738 + 1073741823;
  D.29740 = D.29739 * 4;
  D.29741 = D.29737 + D.29740;
  D.29742 = *D.29741;
  if (D.29742 == parent) goto <D.29743>; else goto <D.29732>;
  <D.29743>:
  iftmp.406 = 1;
  goto <D.29733>;
  <D.29732>:
  iftmp.406 = 0;
  <D.29733>:
  D.29730 = iftmp.406;
  return D.29730;
}


mono_class_has_variant_generic_params (struct MonoClass * klass)
{
  struct MonoGenericClass * D.29745;
  gboolean D.29748;
  struct MonoClass * D.29749;
  struct MonoGenericParamFull * D.29750;
  unsigned int i.407;
  unsigned int D.29752;
  struct MonoGenericParamFull * D.29753;
  short unsigned int D.29754;
  int D.29755;
  int D.29756;
  <unnamed-signed:31> D.29759;
  int D.29760;
  int i;
  struct MonoGenericContainer * container;

  D.29745 = klass->generic_class;
  if (D.29745 == 0B) goto <D.29746>; else goto <D.29747>;
  <D.29746>:
  D.29748 = 0;
  return D.29748;
  <D.29747>:
  D.29745 = klass->generic_class;
  D.29749 = D.29745->container_class;
  container = D.29749->generic_container;
  i = 0;
  goto <D.20953>;
  <D.20952>:
  D.29750 = container->type_params;
  i.407 = (unsigned int) i;
  D.29752 = i.407 * 32;
  D.29753 = D.29750 + D.29752;
  D.29754 = D.29753->info.flags;
  D.29755 = (int) D.29754;
  D.29756 = D.29755 & 3;
  if (D.29756 != 0) goto <D.29757>; else goto <D.29758>;
  <D.29757>:
  D.29748 = 1;
  return D.29748;
  <D.29758>:
  i = i + 1;
  <D.20953>:
  D.29759 = container->type_argc;
  D.29760 = (int) D.29759;
  if (D.29760 > i) goto <D.20952>; else goto <D.20954>;
  <D.20954>:
  D.29748 = 0;
  return D.29748;
}


mono_class_is_variant_compatible (struct MonoClass * klass, struct MonoClass * oklass, gboolean check_for_reference_conv)
{
  gboolean D.29764;
  struct MonoClass * D.29767;
  struct MonoGenericClass * D.29769;
  struct MonoGenericInst * D.29770;
  struct MonoGenericClass * D.29771;
  struct MonoGenericInst * D.29772;
  unsigned int j.408;
  unsigned int D.29774;
  struct MonoType * * D.29775;
  struct MonoType * D.29776;
  struct MonoType * * D.29777;
  struct MonoType * D.29778;
  unsigned int D.29781;
  unsigned int D.29782;
  unsigned int D.29783;
  unsigned int D.29784;
  unsigned int D.29786;
  struct MonoGenericParamFull * D.29790;
  unsigned int D.29791;
  struct MonoGenericParamFull * D.29792;
  short unsigned int D.29793;
  int D.29794;
  int D.29795;
  int D.29798;
  int D.29802;
  int D.29805;
  <unnamed-signed:31> D.29809;
  int D.29810;
  int j;
  struct MonoType * * klass_argv;
  struct MonoType * * oklass_argv;
  struct MonoClass * klass_gtd;
  struct MonoGenericContainer * container;

  klass_gtd = mono_class_get_generic_type_definition (klass);
  container = klass_gtd->generic_container;
  if (klass == oklass) goto <D.29762>; else goto <D.29763>;
  <D.29762>:
  D.29764 = 1;
  return D.29764;
  <D.29763>:
  D.29767 = mono_class_get_generic_type_definition (oklass);
  if (D.29767 != klass_gtd) goto <D.29765>; else goto <D.29768>;
  <D.29768>:
  if (oklass == klass_gtd) goto <D.29765>; else goto <D.29766>;
  <D.29765>:
  D.29764 = 0;
  return D.29764;
  <D.29766>:
  D.29769 = klass->generic_class;
  D.29770 = D.29769->context.class_inst;
  klass_argv = &D.29770->type_argv[0];
  D.29771 = oklass->generic_class;
  D.29772 = D.29771->context.class_inst;
  oklass_argv = &D.29772->type_argv[0];
  j = 0;
  goto <D.20975>;
  <D.20974>:
  {
    struct MonoClass * param1_class;
    struct MonoClass * param2_class;

    j.408 = (unsigned int) j;
    D.29774 = j.408 * 4;
    D.29775 = klass_argv + D.29774;
    D.29776 = *D.29775;
    param1_class = mono_class_from_mono_type (D.29776);
    j.408 = (unsigned int) j;
    D.29774 = j.408 * 4;
    D.29777 = oklass_argv + D.29774;
    D.29778 = *D.29777;
    param2_class = mono_class_from_mono_type (D.29778);
    D.29781 = BIT_FIELD_REF <*param1_class, 32, 160>;
    D.29782 = BIT_FIELD_REF <*param2_class, 32, 160>;
    D.29783 = D.29781 ^ D.29782;
    D.29784 = D.29783 & 8;
    if (D.29784 != 0) goto <D.29779>; else goto <D.29785>;
    <D.29785>:
    D.29781 = BIT_FIELD_REF <*param1_class, 32, 160>;
    D.29786 = D.29781 & 8;
    if (D.29786 != 0) goto <D.29787>; else goto <D.29780>;
    <D.29787>:
    if (param1_class != param2_class) goto <D.29779>; else goto <D.29780>;
    <D.29779>:
    D.29764 = 0;
    return D.29764;
    <D.29780>:
    if (param1_class != param2_class) goto <D.29788>; else goto <D.29789>;
    <D.29788>:
    D.29790 = container->type_params;
    j.408 = (unsigned int) j;
    D.29791 = j.408 * 32;
    D.29792 = D.29790 + D.29791;
    D.29793 = D.29792->info.flags;
    D.29794 = (int) D.29793;
    D.29795 = D.29794 & 1;
    if (D.29795 != 0) goto <D.29796>; else goto <D.29797>;
    <D.29796>:
    D.29798 = mono_gparam_is_reference_conversible (param1_class, param2_class, check_for_reference_conv);
    if (D.29798 == 0) goto <D.29799>; else goto <D.29800>;
    <D.29799>:
    D.29764 = 0;
    return D.29764;
    <D.29800>:
    goto <D.29801>;
    <D.29797>:
    D.29790 = container->type_params;
    j.408 = (unsigned int) j;
    D.29791 = j.408 * 32;
    D.29792 = D.29790 + D.29791;
    D.29793 = D.29792->info.flags;
    D.29794 = (int) D.29793;
    D.29802 = D.29794 & 2;
    if (D.29802 != 0) goto <D.29803>; else goto <D.29804>;
    <D.29803>:
    D.29805 = mono_gparam_is_reference_conversible (param2_class, param1_class, check_for_reference_conv);
    if (D.29805 == 0) goto <D.29806>; else goto <D.29807>;
    <D.29806>:
    D.29764 = 0;
    return D.29764;
    <D.29807>:
    goto <D.29808>;
    <D.29804>:
    D.29764 = 0;
    return D.29764;
    <D.29808>:
    <D.29801>:
    <D.29789>:
  }
  j = j + 1;
  <D.20975>:
  D.29809 = container->type_argc;
  D.29810 = (int) D.29809;
  if (D.29810 > j) goto <D.20974>; else goto <D.20976>;
  <D.20976>:
  D.29764 = 1;
  return D.29764;
}


mono_gparam_is_reference_conversible (struct MonoClass * target, struct MonoClass * candidate, gboolean check_for_reference_conv)
{
  gboolean D.29814;
  struct MonoType * D.29817;
  int D.29818;
  struct MonoType * D.29821;
  int D.29822;
  struct MonoGenericParamInfo * iftmp.409;
  struct MonoGenericContainer * D.29826;
  short unsigned int D.29833;
  int D.29834;
  int D.29835;
  int D.29836;

  if (target == candidate) goto <D.29812>; else goto <D.29813>;
  <D.29812>:
  D.29814 = 1;
  return D.29814;
  <D.29813>:
  if (check_for_reference_conv != 0) goto <D.29815>; else goto <D.29816>;
  <D.29815>:
  D.29817 = &target->byval_arg;
  D.29818 = mono_type_is_generic_argument (D.29817);
  if (D.29818 != 0) goto <D.29819>; else goto <D.29820>;
  <D.29819>:
  D.29821 = &candidate->byval_arg;
  D.29822 = mono_type_is_generic_argument (D.29821);
  if (D.29822 != 0) goto <D.29823>; else goto <D.29824>;
  <D.29823>:
  {
    struct MonoGenericParam * gparam;
    struct MonoGenericParamInfo * pinfo;

    gparam = candidate->byval_arg.data.generic_param;
    D.29826 = gparam->owner;
    if (D.29826 != 0B) goto <D.29827>; else goto <D.29828>;
    <D.29827>:
    iftmp.409 = &MEM[(struct MonoGenericParamFull *)gparam].info;
    goto <D.29829>;
    <D.29828>:
    iftmp.409 = 0B;
    <D.29829>:
    pinfo = iftmp.409;
    if (pinfo == 0B) goto <D.29830>; else goto <D.29832>;
    <D.29832>:
    D.29833 = pinfo->flags;
    D.29834 = (int) D.29833;
    D.29835 = D.29834 & 4;
    if (D.29835 == 0) goto <D.29830>; else goto <D.29831>;
    <D.29830>:
    D.29814 = 0;
    return D.29814;
    <D.29831>:
  }
  <D.29824>:
  <D.29820>:
  <D.29816>:
  D.29836 = mono_class_is_assignable_from (target, candidate);
  if (D.29836 == 0) goto <D.29837>; else goto <D.29838>;
  <D.29837>:
  D.29814 = 0;
  return D.29814;
  <D.29838>:
  D.29814 = 1;
  return D.29814;
}


mono_type_is_generic_argument (struct MonoType * type)
{
  gboolean D.29840;
  int iftmp.410;
  unsigned char D.29845;

  D.29845 = type->type;
  if (D.29845 == 19) goto <D.29842>; else goto <D.29846>;
  <D.29846>:
  D.29845 = type->type;
  if (D.29845 == 30) goto <D.29842>; else goto <D.29843>;
  <D.29842>:
  iftmp.410 = 1;
  goto <D.29844>;
  <D.29843>:
  iftmp.410 = 0;
  <D.29844>:
  D.29840 = iftmp.410;
  return D.29840;
}


mono_class_is_assignable_from (struct MonoClass * klass, struct MonoClass * oklass)
{
  unsigned int D.29848;
  unsigned int D.29849;
  unsigned int D.29852;
  unsigned int D.29853;
  unsigned char D.29858;
  unsigned char D.29860;
  mono_bool D.29861;
  struct MonoType * D.29862;
  int D.29863;
  struct MonoType * D.29866;
  int D.29867;
  unsigned int D.29872;
  unsigned int D.29873;
  unsigned char D.29875;
  unsigned char D.29879;
  struct MonoGenericContainer * D.29881;
  struct MonoGenericParamFull * D.29882;
  short unsigned int D.29883;
  unsigned int D.29884;
  unsigned int D.29885;
  struct MonoGenericParamFull * D.29886;
  unsigned int i.411;
  unsigned int D.29890;
  struct MonoClass * * D.29891;
  struct MonoClass * D.29892;
  int D.29893;
  unsigned int D.29896;
  guint8 * D.29899;
  short unsigned int D.29904;
  short unsigned int D.29905;
  short unsigned int D.29908;
  sizetype D.29909;
  guint8 * D.29910;
  unsigned char D.29911;
  int D.29912;
  int D.29913;
  int D.29914;
  int D.29915;
  int D.29916;
  int D.29919;
  int D.29922;
  struct MonoClass * * D.29925;
  unsigned int i.412;
  unsigned int D.29927;
  struct MonoClass * * D.29928;
  int D.29929;
  short unsigned int D.29932;
  int D.29933;
  unsigned int D.29934;
  int D.29937;
  int D.29940;
  unsigned char D.29944;
  unsigned char D.29947;
  unsigned int D.29952;
  unsigned int D.29953;
  struct MonoClass * D.29958;
  struct MonoClass * D.29960;
  struct MonoClass * D.29962;
  struct MonoClass * D.29963;
  struct MonoClass * D.29964;
  int D.29965;
  int D.29968;

  D.29848 = BIT_FIELD_REF <*klass, 32, 160>;
  D.29849 = D.29848 & 1;
  if (D.29849 == 0) goto <D.29850>; else goto <D.29851>;
  <D.29850>:
  mono_class_init (klass);
  <D.29851>:
  D.29852 = BIT_FIELD_REF <*oklass, 32, 160>;
  D.29853 = D.29852 & 1;
  if (D.29853 == 0) goto <D.29854>; else goto <D.29855>;
  <D.29854>:
  mono_class_init (oklass);
  <D.29855>:
  D.29858 = klass->exception_type;
  if (D.29858 != 0) goto <D.29856>; else goto <D.29859>;
  <D.29859>:
  D.29860 = oklass->exception_type;
  if (D.29860 != 0) goto <D.29856>; else goto <D.29857>;
  <D.29856>:
  D.29861 = 0;
  return D.29861;
  <D.29857>:
  D.29862 = &klass->byval_arg;
  D.29863 = mono_type_is_generic_argument (D.29862);
  if (D.29863 != 0) goto <D.29864>; else goto <D.29865>;
  <D.29864>:
  D.29866 = &oklass->byval_arg;
  D.29867 = mono_type_is_generic_argument (D.29866);
  if (D.29867 == 0) goto <D.29868>; else goto <D.29869>;
  <D.29868>:
  D.29861 = 0;
  return D.29861;
  <D.29869>:
  D.29861 = mono_gparam_is_assignable_from (klass, oklass);
  return D.29861;
  <D.29865>:
  D.29872 = klass->flags;
  D.29873 = D.29872 & 32;
  if (D.29873 != 0) goto <D.29870>; else goto <D.29874>;
  <D.29874>:
  D.29875 = klass->byval_arg.type;
  if (D.29875 == 19) goto <D.29870>; else goto <D.29876>;
  <D.29876>:
  D.29875 = klass->byval_arg.type;
  if (D.29875 == 30) goto <D.29870>; else goto <D.29871>;
  <D.29870>:
  D.29879 = oklass->byval_arg.type;
  if (D.29879 == 19) goto <D.29877>; else goto <D.29880>;
  <D.29880>:
  D.29879 = oklass->byval_arg.type;
  if (D.29879 == 30) goto <D.29877>; else goto <D.29878>;
  <D.29877>:
  {
    struct MonoGenericParam * gparam;
    struct MonoClass * * constraints;
    int i;

    gparam = oklass->byval_arg.data.generic_param;
    D.29881 = gparam->owner;
    D.29882 = D.29881->type_params;
    D.29883 = gparam->num;
    D.29884 = (unsigned int) D.29883;
    D.29885 = D.29884 * 32;
    D.29886 = D.29882 + D.29885;
    constraints = D.29886->info.constraints;
    if (constraints != 0B) goto <D.29887>; else goto <D.29888>;
    <D.29887>:
    i = 0;
    goto <D.21016>;
    <D.21015>:
    i.411 = (unsigned int) i;
    D.29890 = i.411 * 4;
    D.29891 = constraints + D.29890;
    D.29892 = *D.29891;
    D.29893 = mono_class_is_assignable_from (klass, D.29892);
    if (D.29893 != 0) goto <D.29894>; else goto <D.29895>;
    <D.29894>:
    D.29861 = 1;
    return D.29861;
    <D.29895>:
    i = i + 1;
    <D.21016>:
    i.411 = (unsigned int) i;
    D.29890 = i.411 * 4;
    D.29891 = constraints + D.29890;
    D.29892 = *D.29891;
    if (D.29892 != 0B) goto <D.21015>; else goto <D.21017>;
    <D.21017>:
    <D.29888>:
    D.29861 = 0;
    return D.29861;
  }
  <D.29878>:
  D.29896 = oklass->ref_info_handle;
  if (D.29896 != 0) goto <D.29897>; else goto <D.29898>;
  <D.29897>:
  D.29899 = oklass->interface_bitmap;
  if (D.29899 == 0B) goto <D.29900>; else goto <D.29901>;
  <D.29900>:
  D.29861 = mono_reflection_call_is_assignable_to (oklass, klass);
  return D.29861;
  <D.29901>:
  <D.29898>:
  D.29899 = oklass->interface_bitmap;
  if (D.29899 == 0B) goto <D.29902>; else goto <D.29903>;
  <D.29902>:
  D.29861 = 0;
  return D.29861;
  <D.29903>:
  D.29904 = klass->interface_id;
  D.29905 = oklass->max_interface_id;
  if (D.29904 <= D.29905) goto <D.29906>; else goto <D.29907>;
  <D.29906>:
  D.29899 = oklass->interface_bitmap;
  D.29904 = klass->interface_id;
  D.29908 = D.29904 >> 3;
  D.29909 = (sizetype) D.29908;
  D.29910 = D.29899 + D.29909;
  D.29911 = *D.29910;
  D.29912 = (int) D.29911;
  D.29904 = klass->interface_id;
  D.29913 = (int) D.29904;
  D.29914 = D.29913 & 7;
  D.29915 = D.29912 >> D.29914;
  D.29916 = D.29915 & 1;
  if (D.29916 != 0) goto <D.29917>; else goto <D.29918>;
  <D.29917>:
  D.29861 = 1;
  return D.29861;
  <D.29918>:
  <D.29907>:
  D.29919 = mono_class_has_variant_generic_params (klass);
  if (D.29919 != 0) goto <D.29920>; else goto <D.29921>;
  <D.29920>:
  {
    struct MonoError error;
    int i;

    try
      {
        mono_class_setup_interfaces (oklass, &error);
        D.29922 = mono_error_ok (&error);
        if (D.29922 == 0) goto <D.29923>; else goto <D.29924>;
        <D.29923>:
        mono_error_cleanup (&error);
        D.29861 = 0;
        return D.29861;
        <D.29924>:
        i = 0;
        goto <D.21022>;
        <D.21021>:
        {
          struct MonoClass * iface;

          D.29925 = oklass->interfaces_packed;
          i.412 = (unsigned int) i;
          D.29927 = i.412 * 4;
          D.29928 = D.29925 + D.29927;
          iface = *D.29928;
          D.29929 = mono_class_is_variant_compatible (klass, iface, 0);
          if (D.29929 != 0) goto <D.29930>; else goto <D.29931>;
          <D.29930>:
          D.29861 = 1;
          return D.29861;
          <D.29931>:
        }
        i = i + 1;
        <D.21022>:
        D.29932 = oklass->interface_offsets_count;
        D.29933 = (int) D.29932;
        if (D.29933 > i) goto <D.21021>; else goto <D.21023>;
        <D.21023>:
      }
    finally
      {
        error = {CLOBBER};
      }
  }
  <D.29921>:
  D.29861 = 0;
  return D.29861;
  <D.29871>:
  D.29848 = BIT_FIELD_REF <*klass, 32, 160>;
  D.29934 = D.29848 & 16777216;
  if (D.29934 != 0) goto <D.29935>; else goto <D.29936>;
  <D.29935>:
  D.29937 = mono_class_has_variant_generic_params (klass);
  if (D.29937 != 0) goto <D.29938>; else goto <D.29939>;
  <D.29938>:
  D.29940 = mono_class_is_variant_compatible (klass, oklass, 0);
  if (D.29940 != 0) goto <D.29941>; else goto <D.29942>;
  <D.29941>:
  D.29861 = 1;
  return D.29861;
  <D.29942>:
  <D.29939>:
  goto <D.29943>;
  <D.29936>:
  D.29944 = klass->rank;
  if (D.29944 != 0) goto <D.29945>; else goto <D.29946>;
  <D.29945>:
  {
    struct MonoClass * eclass;
    struct MonoClass * eoclass;

    D.29947 = oklass->rank;
    D.29944 = klass->rank;
    if (D.29947 != D.29944) goto <D.29948>; else goto <D.29949>;
    <D.29948>:
    D.29861 = 0;
    return D.29861;
    <D.29949>:
    D.29879 = oklass->byval_arg.type;
    D.29875 = klass->byval_arg.type;
    if (D.29879 != D.29875) goto <D.29950>; else goto <D.29951>;
    <D.29950>:
    D.29861 = 0;
    return D.29861;
    <D.29951>:
    eclass = klass->cast_class;
    eoclass = oklass->cast_class;
    D.29952 = BIT_FIELD_REF <*eoclass, 32, 160>;
    D.29953 = D.29952 & 8;
    if (D.29953 != 0) goto <D.29954>; else goto <D.29955>;
    <D.29954>:
    D.29958 = mono_defaults.enum_class;
    if (D.29958 == eclass) goto <D.29956>; else goto <D.29959>;
    <D.29959>:
    D.29958 = mono_defaults.enum_class;
    D.29960 = D.29958->parent;
    if (D.29960 == eclass) goto <D.29956>; else goto <D.29961>;
    <D.29961>:
    D.29962 = mono_defaults.object_class;
    if (D.29962 == eclass) goto <D.29956>; else goto <D.29957>;
    <D.29956>:
    D.29861 = 0;
    return D.29861;
    <D.29957>:
    <D.29955>:
    D.29963 = klass->cast_class;
    D.29964 = oklass->cast_class;
    D.29861 = mono_class_is_assignable_from (D.29963, D.29964);
    return D.29861;
  }
  <D.29946>:
  D.29965 = mono_class_is_nullable (klass);
  if (D.29965 != 0) goto <D.29966>; else goto <D.29967>;
  <D.29966>:
  D.29968 = mono_class_is_nullable (oklass);
  if (D.29968 != 0) goto <D.29969>; else goto <D.29970>;
  <D.29969>:
  D.29963 = klass->cast_class;
  D.29964 = oklass->cast_class;
  D.29861 = mono_class_is_assignable_from (D.29963, D.29964);
  return D.29861;
  <D.29970>:
  D.29963 = klass->cast_class;
  D.29861 = mono_class_is_assignable_from (D.29963, oklass);
  return D.29861;
  <D.29967>:
  D.29962 = mono_defaults.object_class;
  if (D.29962 == klass) goto <D.29971>; else goto <D.29972>;
  <D.29971>:
  D.29861 = 1;
  return D.29861;
  <D.29972>:
  <D.29943>:
  D.29861 = mono_class_has_parent (oklass, klass);
  return D.29861;
}


mono_gparam_is_assignable_from (struct MonoClass * target, struct MonoClass * candidate)
{
  gboolean D.29978;
  unsigned char D.29979;
  unsigned char D.29980;
  struct MonoGenericParamInfo * iftmp.413;
  struct MonoGenericContainer * D.29984;
  struct MonoGenericParamInfo * iftmp.414;
  struct MonoGenericContainer * D.29989;
  short unsigned int D.29993;
  int D.29994;
  short unsigned int D.29995;
  int D.29996;
  struct MonoClass * * D.29997;
  struct MonoType * D.30002;
  int D.30003;
  unsigned int D.30005;
  unsigned int D.30006;
  unsigned char D.30008;
  int D.30011;
  struct MonoClass * D.30020;
  int D.30021;
  _Bool D.30022;
  int D.30023;
  int D.30024;
  _Bool D.30025;
  int D.30026;
  int D.30027;
  int D.30032;
  int D.30037;
  int D.30040;
  struct MonoClass * * D.30045;
  struct MonoType * D.30048;
  struct MonoType * D.30049;
  int D.30050;
  int D.30055;
  struct MonoType * D.30057;
  int D.30058;
  int D.30061;
  struct MonoClass * D.30065;
  int D.30068;
  struct MonoGenericParam * gparam;
  struct MonoGenericParam * ogparam;
  struct MonoGenericParamInfo * tinfo;
  struct MonoGenericParamInfo * cinfo;
  struct MonoClass * * candidate_class;
  gboolean class_constraint_satisfied;
  gboolean valuetype_constraint_satisfied;
  int tmask;
  int cmask;

  if (target == candidate) goto <D.29976>; else goto <D.29977>;
  <D.29976>:
  D.29978 = 1;
  return D.29978;
  <D.29977>:
  D.29979 = target->byval_arg.type;
  D.29980 = candidate->byval_arg.type;
  if (D.29979 != D.29980) goto <D.29981>; else goto <D.29982>;
  <D.29981>:
  D.29978 = 0;
  return D.29978;
  <D.29982>:
  gparam = target->byval_arg.data.generic_param;
  ogparam = candidate->byval_arg.data.generic_param;
  D.29984 = gparam->owner;
  if (D.29984 != 0B) goto <D.29985>; else goto <D.29986>;
  <D.29985>:
  iftmp.413 = &MEM[(struct MonoGenericParamFull *)gparam].info;
  goto <D.29987>;
  <D.29986>:
  iftmp.413 = 0B;
  <D.29987>:
  tinfo = iftmp.413;
  D.29989 = ogparam->owner;
  if (D.29989 != 0B) goto <D.29990>; else goto <D.29991>;
  <D.29990>:
  iftmp.414 = &MEM[(struct MonoGenericParamFull *)ogparam].info;
  goto <D.29992>;
  <D.29991>:
  iftmp.414 = 0B;
  <D.29992>:
  cinfo = iftmp.414;
  class_constraint_satisfied = 0;
  valuetype_constraint_satisfied = 0;
  D.29993 = tinfo->flags;
  D.29994 = (int) D.29993;
  tmask = D.29994 & 28;
  D.29995 = cinfo->flags;
  D.29996 = (int) D.29995;
  cmask = D.29996 & 28;
  D.29997 = cinfo->constraints;
  if (D.29997 != 0B) goto <D.29998>; else goto <D.29999>;
  <D.29998>:
  candidate_class = cinfo->constraints;
  goto <D.20992>;
  <D.20991>:
  {
    struct MonoClass * cc;

    cc = *candidate_class;
    D.30002 = &cc->byval_arg;
    D.30003 = mono_type_is_reference (D.30002);
    if (D.30003 != 0) goto <D.30004>; else goto <D.30000>;
    <D.30004>:
    D.30005 = cc->flags;
    D.30006 = D.30005 & 32;
    if (D.30006 == 0) goto <D.30007>; else goto <D.30000>;
    <D.30007>:
    D.30008 = cc->byval_arg.type;
    if (D.30008 != 19) goto <D.30009>; else goto <D.30000>;
    <D.30009>:
    D.30008 = cc->byval_arg.type;
    if (D.30008 != 30) goto <D.30010>; else goto <D.30000>;
    <D.30010>:
    class_constraint_satisfied = 1;
    goto <D.30001>;
    <D.30000>:
    D.30002 = &cc->byval_arg;
    D.30011 = mono_type_is_reference (D.30002);
    if (D.30011 == 0) goto <D.30012>; else goto <D.30013>;
    <D.30012>:
    D.30005 = cc->flags;
    D.30006 = D.30005 & 32;
    if (D.30006 == 0) goto <D.30014>; else goto <D.30015>;
    <D.30014>:
    D.30008 = cc->byval_arg.type;
    if (D.30008 != 19) goto <D.30016>; else goto <D.30017>;
    <D.30016>:
    D.30008 = cc->byval_arg.type;
    if (D.30008 != 30) goto <D.30018>; else goto <D.30019>;
    <D.30018>:
    valuetype_constraint_satisfied = 1;
    <D.30019>:
    <D.30017>:
    <D.30015>:
    <D.30013>:
    <D.30001>:
  }
  candidate_class = candidate_class + 4;
  <D.20992>:
  D.30020 = *candidate_class;
  if (D.30020 != 0B) goto <D.20991>; else goto <D.20993>;
  <D.20993>:
  <D.29999>:
  D.30021 = cmask & 4;
  D.30022 = D.30021 != 0;
  D.30023 = (int) D.30022;
  class_constraint_satisfied = D.30023 | class_constraint_satisfied;
  D.30024 = cmask & 8;
  D.30025 = D.30024 != 0;
  D.30026 = (int) D.30025;
  valuetype_constraint_satisfied = D.30026 | valuetype_constraint_satisfied;
  D.30027 = tmask & 4;
  if (D.30027 != 0) goto <D.30028>; else goto <D.30029>;
  <D.30028>:
  if (class_constraint_satisfied == 0) goto <D.30030>; else goto <D.30031>;
  <D.30030>:
  D.29978 = 0;
  return D.29978;
  <D.30031>:
  <D.30029>:
  D.30032 = tmask & 8;
  if (D.30032 != 0) goto <D.30033>; else goto <D.30034>;
  <D.30033>:
  if (valuetype_constraint_satisfied == 0) goto <D.30035>; else goto <D.30036>;
  <D.30035>:
  D.29978 = 0;
  return D.29978;
  <D.30036>:
  <D.30034>:
  D.30037 = tmask & 16;
  if (D.30037 != 0) goto <D.30038>; else goto <D.30039>;
  <D.30038>:
  D.30040 = cmask & 16;
  if (D.30040 == 0) goto <D.30041>; else goto <D.30042>;
  <D.30041>:
  if (valuetype_constraint_satisfied == 0) goto <D.30043>; else goto <D.30044>;
  <D.30043>:
  D.29978 = 0;
  return D.29978;
  <D.30044>:
  <D.30042>:
  <D.30039>:
  D.30045 = tinfo->constraints;
  if (D.30045 != 0B) goto <D.30046>; else goto <D.30047>;
  <D.30046>:
  {
    struct MonoClass * * target_class;

    target_class = tinfo->constraints;
    goto <D.21002>;
    <D.21001>:
    {
      struct MonoClass * tc;

      tc = *target_class;
      D.30048 = &tc->byval_arg;
      D.30049 = &candidate->byval_arg;
      D.30050 = mono_metadata_type_equal (D.30048, D.30049);
      if (D.30050 != 0) goto <D.30051>; else goto <D.30052>;
      <D.30051>:
      // predicted unlikely by continue predictor.
      goto <D.20996>;
      <D.30052>:
      D.29997 = cinfo->constraints;
      if (D.29997 == 0B) goto <D.30053>; else goto <D.30054>;
      <D.30053>:
      D.29978 = 0;
      return D.29978;
      <D.30054>:
      candidate_class = cinfo->constraints;
      goto <D.21000>;
      <D.20999>:
      {
        struct MonoClass * cc;

        cc = *candidate_class;
        D.30055 = mono_class_is_assignable_from (tc, cc);
        if (D.30055 != 0) goto <D.20998>; else goto <D.30056>;
        <D.30056>:
        D.30057 = &cc->byval_arg;
        D.30058 = mono_type_is_generic_argument (D.30057);
        if (D.30058 != 0) goto <D.30059>; else goto <D.30060>;
        <D.30059>:
        D.30061 = mono_gparam_is_assignable_from (target, cc);
        if (D.30061 != 0) goto <D.20998>; else goto <D.30062>;
        <D.30062>:
        <D.30060>:
      }
      candidate_class = candidate_class + 4;
      <D.21000>:
      D.30020 = *candidate_class;
      if (D.30020 != 0B) goto <D.20999>; else goto <D.20998>;
      <D.20998>:
      D.30020 = *candidate_class;
      if (D.30020 == 0B) goto <D.30063>; else goto <D.30064>;
      <D.30063>:
      D.29978 = 0;
      return D.29978;
      <D.30064>:
    }
    <D.20996>:
    target_class = target_class + 4;
    <D.21002>:
    D.30065 = *target_class;
    if (D.30065 != 0B) goto <D.21001>; else goto <D.21003>;
    <D.21003>:
  }
  <D.30047>:
  D.29997 = cinfo->constraints;
  if (D.29997 != 0B) goto <D.30066>; else goto <D.30067>;
  <D.30066>:
  candidate_class = cinfo->constraints;
  goto <D.21006>;
  <D.21005>:
  {
    struct MonoClass * cc;

    cc = *candidate_class;
    D.30068 = mono_class_is_assignable_from (target, cc);
    if (D.30068 != 0) goto <D.30069>; else goto <D.30070>;
    <D.30069>:
    D.29978 = 1;
    return D.29978;
    <D.30070>:
  }
  candidate_class = candidate_class + 4;
  <D.21006>:
  D.30020 = *candidate_class;
  if (D.30020 != 0B) goto <D.21005>; else goto <D.21007>;
  <D.21007>:
  <D.30067>:
  D.29978 = 0;
  return D.29978;
}


mono_class_is_assignable_from_slow (struct MonoClass * target, struct MonoClass * candidate)
{
  gboolean D.30074;
  struct MonoClass * D.30075;
  int D.30078;
  unsigned int D.30083;
  unsigned int D.30084;
  unsigned char D.30086;
  unsigned int D.30088;
  unsigned int D.30089;
  int D.30092;
  unsigned char D.30095;
  unsigned char D.30098;
  unsigned char D.30101;
  unsigned int D.30104;
  unsigned int D.30105;
  struct MonoClass * D.30110;
  struct MonoClass * D.30112;
  struct MonoClass * D.30114;
  struct MonoClass * D.30115;

  if (candidate == target) goto <D.30072>; else goto <D.30073>;
  <D.30072>:
  D.30074 = 1;
  return D.30074;
  <D.30073>:
  D.30075 = mono_defaults.object_class;
  if (D.30075 == target) goto <D.30076>; else goto <D.30077>;
  <D.30076>:
  D.30074 = 1;
  return D.30074;
  <D.30077>:
  D.30078 = mono_class_has_parent (candidate, target);
  if (D.30078 != 0) goto <D.30079>; else goto <D.30080>;
  <D.30079>:
  D.30074 = 1;
  return D.30074;
  <D.30080>:
  D.30083 = target->flags;
  D.30084 = D.30083 & 32;
  if (D.30084 != 0) goto <D.30081>; else goto <D.30085>;
  <D.30085>:
  D.30086 = target->byval_arg.type;
  if (D.30086 == 19) goto <D.30081>; else goto <D.30087>;
  <D.30087>:
  D.30086 = target->byval_arg.type;
  if (D.30086 == 30) goto <D.30081>; else goto <D.30082>;
  <D.30081>:
  D.30074 = mono_class_implement_interface_slow (target, candidate);
  return D.30074;
  <D.30082>:
  D.30088 = BIT_FIELD_REF <*target, 32, 160>;
  D.30089 = D.30088 & 16777216;
  if (D.30089 != 0) goto <D.30090>; else goto <D.30091>;
  <D.30090>:
  D.30092 = mono_class_has_variant_generic_params (target);
  if (D.30092 != 0) goto <D.30093>; else goto <D.30094>;
  <D.30093>:
  D.30074 = mono_class_is_variant_compatible (target, candidate, 0);
  return D.30074;
  <D.30094>:
  <D.30091>:
  D.30095 = target->rank;
  if (D.30095 != 0) goto <D.30096>; else goto <D.30097>;
  <D.30096>:
  {
    struct MonoClass * eclass;
    struct MonoClass * eoclass;

    D.30095 = target->rank;
    D.30098 = candidate->rank;
    if (D.30095 != D.30098) goto <D.30099>; else goto <D.30100>;
    <D.30099>:
    D.30074 = 0;
    return D.30074;
    <D.30100>:
    D.30086 = target->byval_arg.type;
    D.30101 = candidate->byval_arg.type;
    if (D.30086 != D.30101) goto <D.30102>; else goto <D.30103>;
    <D.30102>:
    D.30074 = 0;
    return D.30074;
    <D.30103>:
    eclass = target->cast_class;
    eoclass = candidate->cast_class;
    D.30104 = BIT_FIELD_REF <*eoclass, 32, 160>;
    D.30105 = D.30104 & 8;
    if (D.30105 != 0) goto <D.30106>; else goto <D.30107>;
    <D.30106>:
    D.30110 = mono_defaults.enum_class;
    if (D.30110 == eclass) goto <D.30108>; else goto <D.30111>;
    <D.30111>:
    D.30110 = mono_defaults.enum_class;
    D.30112 = D.30110->parent;
    if (D.30112 == eclass) goto <D.30108>; else goto <D.30113>;
    <D.30113>:
    D.30075 = mono_defaults.object_class;
    if (D.30075 == eclass) goto <D.30108>; else goto <D.30109>;
    <D.30108>:
    D.30074 = 0;
    return D.30074;
    <D.30109>:
    <D.30107>:
    D.30114 = target->cast_class;
    D.30115 = candidate->cast_class;
    D.30074 = mono_class_is_assignable_from_slow (D.30114, D.30115);
    return D.30074;
  }
  <D.30097>:
  D.30074 = 0;
  return D.30074;
}


mono_class_implement_interface_slow (struct MonoClass * target, struct MonoClass * candidate)
{
  unsigned int D.30121;
  unsigned int D.30122;
  unsigned char D.30124;
  int D.30126;
  gboolean D.30129;
  struct MonoImage * D.30133;
  unsigned int D.30134;
  unsigned int D.30135;
  unsigned int D.30137;
  unsigned int D.30138;
  struct MonoArray * D.30142;
  unsigned int D.30145;
  unsigned int D.30146;
  unsigned int j.415;
  char * D.30148;
  struct MonoType * D.30149;
  int D.30156;
  int D.30159;
  int D.30162;
  struct MonoClass * * D.30165;
  unsigned int i.416;
  unsigned int D.30167;
  struct MonoClass * * D.30168;
  struct MonoClass * D.30169;
  int D.30174;
  int D.30177;
  short unsigned int D.30180;
  int D.30181;
  struct MonoError error;
  int i;
  gboolean is_variant;

  try
    {
      is_variant = mono_class_has_variant_generic_params (target);
      if (is_variant != 0) goto <D.30119>; else goto <D.30120>;
      <D.30119>:
      D.30121 = candidate->flags;
      D.30122 = D.30121 & 32;
      if (D.30122 != 0) goto <D.30117>; else goto <D.30123>;
      <D.30123>:
      D.30124 = candidate->byval_arg.type;
      if (D.30124 == 19) goto <D.30117>; else goto <D.30125>;
      <D.30125>:
      D.30124 = candidate->byval_arg.type;
      if (D.30124 == 30) goto <D.30117>; else goto <D.30118>;
      <D.30117>:
      D.30126 = mono_class_is_variant_compatible_slow (target, candidate);
      if (D.30126 != 0) goto <D.30127>; else goto <D.30128>;
      <D.30127>:
      D.30129 = 1;
      return D.30129;
      <D.30128>:
      <D.30118>:
      <D.30120>:
      <D.21058>:
      if (candidate == target) goto <D.30130>; else goto <D.30131>;
      <D.30130>:
      D.30129 = 1;
      return D.30129;
      <D.30131>:
      D.30133 = candidate->image;
      D.30134 = BIT_FIELD_REF <*D.30133, 32, 128>;
      D.30135 = D.30134 & 8;
      if (D.30135 != 0) goto <D.30136>; else goto <D.30132>;
      <D.30136>:
      D.30137 = BIT_FIELD_REF <*candidate, 32, 160>;
      D.30138 = D.30137 & 128;
      if (D.30138 == 0) goto <D.30139>; else goto <D.30132>;
      <D.30139>:
      {
        struct MonoReflectionTypeBuilder * tb;
        int j;

        tb = mono_class_get_ref_info (candidate);
        if (tb != 0B) goto <D.30140>; else goto <D.30141>;
        <D.30140>:
        D.30142 = tb->interfaces;
        if (D.30142 != 0B) goto <D.30143>; else goto <D.30144>;
        <D.30143>:
        D.30142 = tb->interfaces;
        D.30145 = mono_array_length (D.30142);
        D.30146 = D.30145 + 4294967295;
        j = (int) D.30146;
        goto <D.21053>;
        <D.21052>:
        {
          struct MonoReflectionType * iface;
          struct MonoClass * iface_class;

          D.30142 = tb->interfaces;
          j.415 = (unsigned int) j;
          D.30148 = mono_array_addr_with_size (D.30142, 4, j.415);
          iface = MEM[(struct MonoReflectionType * *)D.30148];
          D.30149 = iface->type;
          if (D.30149 == 0B) goto <D.30150>; else goto <D.30151>;
          <D.30150>:
          // predicted unlikely by continue predictor.
          goto <D.21051>;
          <D.30151>:
          D.30149 = iface->type;
          iface_class = mono_class_from_mono_type (D.30149);
          if (iface_class == target) goto <D.30152>; else goto <D.30153>;
          <D.30152>:
          D.30129 = 1;
          return D.30129;
          <D.30153>:
          if (is_variant != 0) goto <D.30154>; else goto <D.30155>;
          <D.30154>:
          D.30156 = mono_class_is_variant_compatible_slow (target, iface_class);
          if (D.30156 != 0) goto <D.30157>; else goto <D.30158>;
          <D.30157>:
          D.30129 = 1;
          return D.30129;
          <D.30158>:
          <D.30155>:
          D.30159 = mono_class_implement_interface_slow (target, iface_class);
          if (D.30159 != 0) goto <D.30160>; else goto <D.30161>;
          <D.30160>:
          D.30129 = 1;
          return D.30129;
          <D.30161>:
        }
        <D.21051>:
        j = j + -1;
        <D.21053>:
        if (j >= 0) goto <D.21052>; else goto <D.21054>;
        <D.21054>:
        <D.30144>:
        <D.30141>:
      }
      goto <D.21057>;
      <D.30132>:
      mono_class_setup_interfaces (candidate, &error);
      D.30162 = mono_error_ok (&error);
      if (D.30162 == 0) goto <D.30163>; else goto <D.30164>;
      <D.30163>:
      mono_error_cleanup (&error);
      D.30129 = 0;
      return D.30129;
      <D.30164>:
      i = 0;
      goto <D.21056>;
      <D.21055>:
      D.30165 = candidate->interfaces;
      i.416 = (unsigned int) i;
      D.30167 = i.416 * 4;
      D.30168 = D.30165 + D.30167;
      D.30169 = *D.30168;
      if (D.30169 == target) goto <D.30170>; else goto <D.30171>;
      <D.30170>:
      D.30129 = 1;
      return D.30129;
      <D.30171>:
      if (is_variant != 0) goto <D.30172>; else goto <D.30173>;
      <D.30172>:
      D.30165 = candidate->interfaces;
      i.416 = (unsigned int) i;
      D.30167 = i.416 * 4;
      D.30168 = D.30165 + D.30167;
      D.30169 = *D.30168;
      D.30174 = mono_class_is_variant_compatible_slow (target, D.30169);
      if (D.30174 != 0) goto <D.30175>; else goto <D.30176>;
      <D.30175>:
      D.30129 = 1;
      return D.30129;
      <D.30176>:
      <D.30173>:
      D.30165 = candidate->interfaces;
      i.416 = (unsigned int) i;
      D.30167 = i.416 * 4;
      D.30168 = D.30165 + D.30167;
      D.30169 = *D.30168;
      D.30177 = mono_class_implement_interface_slow (target, D.30169);
      if (D.30177 != 0) goto <D.30178>; else goto <D.30179>;
      <D.30178>:
      D.30129 = 1;
      return D.30129;
      <D.30179>:
      i = i + 1;
      <D.21056>:
      D.30180 = candidate->interface_count;
      D.30181 = (int) D.30180;
      if (D.30181 > i) goto <D.21055>; else goto <D.21057>;
      <D.21057>:
      candidate = candidate->parent;
      if (candidate != 0B) goto <D.21058>; else goto <D.21059>;
      <D.21059>:
      D.30129 = 0;
      return D.30129;
    }
  finally
    {
      error = {CLOBBER};
    }
}


mono_class_is_variant_compatible_slow (struct MonoClass * klass, struct MonoClass * oklass)
{
  struct MonoClass * D.30186;
  gboolean D.30188;
  struct MonoGenericClass * D.30189;
  struct MonoGenericInst * D.30190;
  struct MonoGenericClass * D.30191;
  struct MonoGenericInst * D.30192;
  unsigned int j.417;
  unsigned int D.30194;
  struct MonoType * * D.30195;
  struct MonoType * D.30196;
  struct MonoType * * D.30197;
  struct MonoType * D.30198;
  unsigned int D.30199;
  unsigned int D.30200;
  unsigned int D.30201;
  unsigned int D.30202;
  struct MonoGenericParamFull * D.30207;
  unsigned int D.30208;
  struct MonoGenericParamFull * D.30209;
  short unsigned int D.30210;
  int D.30211;
  int D.30212;
  int D.30215;
  int D.30219;
  int D.30222;
  <unnamed-signed:31> D.30226;
  int D.30227;
  int j;
  struct MonoType * * klass_argv;
  struct MonoType * * oklass_argv;
  struct MonoClass * klass_gtd;
  struct MonoGenericContainer * container;

  klass_gtd = mono_class_get_generic_type_definition (klass);
  container = klass_gtd->generic_container;
  D.30186 = mono_class_get_generic_type_definition (oklass);
  if (D.30186 != klass_gtd) goto <D.30184>; else goto <D.30187>;
  <D.30187>:
  if (oklass == klass_gtd) goto <D.30184>; else goto <D.30185>;
  <D.30184>:
  D.30188 = 0;
  return D.30188;
  <D.30185>:
  D.30189 = klass->generic_class;
  D.30190 = D.30189->context.class_inst;
  klass_argv = &D.30190->type_argv[0];
  D.30191 = oklass->generic_class;
  D.30192 = D.30191->context.class_inst;
  oklass_argv = &D.30192->type_argv[0];
  j = 0;
  goto <D.21038>;
  <D.21037>:
  {
    struct MonoClass * param1_class;
    struct MonoClass * param2_class;

    j.417 = (unsigned int) j;
    D.30194 = j.417 * 4;
    D.30195 = klass_argv + D.30194;
    D.30196 = *D.30195;
    param1_class = mono_class_from_mono_type (D.30196);
    j.417 = (unsigned int) j;
    D.30194 = j.417 * 4;
    D.30197 = oklass_argv + D.30194;
    D.30198 = *D.30197;
    param2_class = mono_class_from_mono_type (D.30198);
    D.30199 = BIT_FIELD_REF <*param1_class, 32, 160>;
    D.30200 = BIT_FIELD_REF <*param2_class, 32, 160>;
    D.30201 = D.30199 ^ D.30200;
    D.30202 = D.30201 & 8;
    if (D.30202 != 0) goto <D.30203>; else goto <D.30204>;
    <D.30203>:
    D.30188 = 0;
    return D.30188;
    <D.30204>:
    if (param1_class != param2_class) goto <D.30205>; else goto <D.30206>;
    <D.30205>:
    D.30207 = container->type_params;
    j.417 = (unsigned int) j;
    D.30208 = j.417 * 32;
    D.30209 = D.30207 + D.30208;
    D.30210 = D.30209->info.flags;
    D.30211 = (int) D.30210;
    D.30212 = D.30211 & 1;
    if (D.30212 != 0) goto <D.30213>; else goto <D.30214>;
    <D.30213>:
    D.30215 = mono_class_is_assignable_from_slow (param1_class, param2_class);
    if (D.30215 == 0) goto <D.30216>; else goto <D.30217>;
    <D.30216>:
    D.30188 = 0;
    return D.30188;
    <D.30217>:
    goto <D.30218>;
    <D.30214>:
    D.30207 = container->type_params;
    j.417 = (unsigned int) j;
    D.30208 = j.417 * 32;
    D.30209 = D.30207 + D.30208;
    D.30210 = D.30209->info.flags;
    D.30211 = (int) D.30210;
    D.30219 = D.30211 & 2;
    if (D.30219 != 0) goto <D.30220>; else goto <D.30221>;
    <D.30220>:
    D.30222 = mono_class_is_assignable_from_slow (param2_class, param1_class);
    if (D.30222 == 0) goto <D.30223>; else goto <D.30224>;
    <D.30223>:
    D.30188 = 0;
    return D.30188;
    <D.30224>:
    goto <D.30225>;
    <D.30221>:
    D.30188 = 0;
    return D.30188;
    <D.30225>:
    <D.30218>:
    <D.30206>:
  }
  j = j + 1;
  <D.21038>:
  D.30226 = container->type_argc;
  D.30227 = (int) D.30226;
  if (D.30227 > j) goto <D.21037>; else goto <D.21039>;
  <D.21039>:
  D.30188 = 1;
  return D.30188;
}


mono_class_get_cctor (struct MonoClass * klass)
{
  struct MonoImage * D.30229;
  unsigned int D.30230;
  unsigned int D.30231;
  struct MonoMethod * D.30234;
  unsigned int D.30235;
  unsigned int D.30236;
  int D.30239;
  unsigned int D.30242;
  struct MonoGenericClass * D.30243;
  struct MonoMethod * * D.30246;
  struct MonoClass * D.30249;
  struct MonoMethod * D.30250;
  struct MonoCachedClassInfo cached_info;

  try
    {
      D.30229 = klass->image;
      D.30230 = BIT_FIELD_REF <*D.30229, 32, 128>;
      D.30231 = D.30230 & 8;
      if (D.30231 != 0) goto <D.30232>; else goto <D.30233>;
      <D.30232>:
      D.30234 = mono_class_get_method_from_name_flags (klass, ".cctor", -1, 2048);
      return D.30234;
      <D.30233>:
      D.30235 = BIT_FIELD_REF <*klass, 32, 160>;
      D.30236 = D.30235 & 67108864;
      if (D.30236 == 0) goto <D.30237>; else goto <D.30238>;
      <D.30237>:
      D.30234 = 0B;
      return D.30234;
      <D.30238>:
      D.30239 = mono_class_get_cached_class_info (klass, &cached_info);
      if (D.30239 != 0) goto <D.30240>; else goto <D.30241>;
      <D.30240>:
      D.30229 = klass->image;
      D.30242 = cached_info.cctor_token;
      D.30234 = mono_get_method (D.30229, D.30242, klass);
      return D.30234;
      <D.30241>:
      D.30243 = klass->generic_class;
      if (D.30243 != 0B) goto <D.30244>; else goto <D.30245>;
      <D.30244>:
      D.30246 = klass->methods;
      if (D.30246 == 0B) goto <D.30247>; else goto <D.30248>;
      <D.30247>:
      D.30243 = klass->generic_class;
      D.30249 = D.30243->container_class;
      D.30250 = mono_class_get_cctor (D.30249);
      D.30234 = mono_class_get_inflated_method (klass, D.30250);
      return D.30234;
      <D.30248>:
      <D.30245>:
      D.30234 = mono_class_get_method_from_name_flags (klass, ".cctor", -1, 2048);
      return D.30234;
    }
  finally
    {
      cached_info = {CLOBBER};
    }
}


mono_class_get_finalizer (struct MonoClass * klass)
{
  unsigned int D.30253;
  unsigned int D.30254;
  int D.30257;
  struct MonoMethod * D.30260;
  int D.30261;
  struct MonoImage * D.30264;
  unsigned int D.30265;
  struct MonoMethod * * D.30266;
  int finalize_slot.418;
  unsigned int finalize_slot.419;
  unsigned int D.30269;
  struct MonoMethod * * D.30270;
  struct MonoCachedClassInfo cached_info;

  try
    {
      D.30253 = BIT_FIELD_REF <*klass, 32, 160>;
      D.30254 = D.30253 & 1;
      if (D.30254 == 0) goto <D.30255>; else goto <D.30256>;
      <D.30255>:
      mono_class_init (klass);
      <D.30256>:
      D.30257 = mono_class_has_finalizer (klass);
      if (D.30257 == 0) goto <D.30258>; else goto <D.30259>;
      <D.30258>:
      D.30260 = 0B;
      return D.30260;
      <D.30259>:
      D.30261 = mono_class_get_cached_class_info (klass, &cached_info);
      if (D.30261 != 0) goto <D.30262>; else goto <D.30263>;
      <D.30262>:
      D.30264 = cached_info.finalize_image;
      D.30265 = cached_info.finalize_token;
      D.30260 = mono_get_method (D.30264, D.30265, 0B);
      return D.30260;
      <D.30263>:
      mono_class_setup_vtable (klass);
      D.30266 = klass->vtable;
      finalize_slot.418 = finalize_slot;
      finalize_slot.419 = (unsigned int) finalize_slot.418;
      D.30269 = finalize_slot.419 * 4;
      D.30270 = D.30266 + D.30269;
      D.30260 = *D.30270;
      return D.30260;
    }
  finally
    {
      cached_info = {CLOBBER};
    }
}


mono_class_needs_cctor_run (struct MonoClass * klass, struct MonoMethod * caller)
{
  gboolean D.30275;
  _Bool D.30276;
  struct MonoMethod * method;

  method = mono_class_get_cctor (klass);
  if (method != 0B) goto <D.30273>; else goto <D.30274>;
  <D.30273>:
  D.30276 = method != caller;
  D.30275 = (gboolean) D.30276;
  return D.30275;
  <D.30274>:
  D.30275 = 0;
  return D.30275;
}


mono_class_array_element_size (struct MonoClass * klass)
{
  unsigned char D.30278;
  int D.30279;
  int32_t D.30280;
  struct MonoClass * D.30281;
  unsigned int D.30282;
  unsigned int D.30283;
  int D.30286;
  unsigned int D.30287;
  unsigned int D.30288;
  struct MonoGenericClass * D.30289;
  struct MonoClass * D.30290;
  struct MonoType * type;
  void handle_enum = <<< error >>>;

  type = &klass->byval_arg;
  handle_enum:
  D.30278 = type->type;
  D.30279 = (int) D.30278;
  switch (D.30279) <default: <D.21109>, case 1: <D.21108>, case 2: <D.21086>, case 3: <D.21089>, case 4: <D.21084>, case 5: <D.21085>, case 6: <D.21087>, case 7: <D.21088>, case 8: <D.21090>, case 9: <D.21091>, case 10: <D.21103>, case 11: <D.21104>, case 12: <D.21092>, case 13: <D.21105>, case 14: <D.21097>, case 15: <D.21095>, case 17: <D.21106>, case 18: <D.21096>, case 19: <D.21101>, case 20: <D.21100>, case 21: <D.21107>, case 24: <D.21093>, case 25: <D.21094>, case 28: <D.21098>, case 29: <D.21099>, case 30: <D.21102>>
  <D.21084>:
  <D.21085>:
  <D.21086>:
  D.30280 = 1;
  return D.30280;
  <D.21087>:
  <D.21088>:
  <D.21089>:
  D.30280 = 2;
  return D.30280;
  <D.21090>:
  <D.21091>:
  <D.21092>:
  D.30280 = 4;
  return D.30280;
  <D.21093>:
  <D.21094>:
  <D.21095>:
  <D.21096>:
  <D.21097>:
  <D.21098>:
  <D.21099>:
  <D.21100>:
  <D.21101>:
  <D.21102>:
  D.30280 = 4;
  return D.30280;
  <D.21103>:
  <D.21104>:
  <D.21105>:
  D.30280 = 8;
  return D.30280;
  <D.21106>:
  D.30281 = type->data.klass;
  D.30282 = BIT_FIELD_REF <*D.30281, 32, 160>;
  D.30283 = D.30282 & 16;
  if (D.30283 != 0) goto <D.30284>; else goto <D.30285>;
  <D.30284>:
  D.30281 = type->data.klass;
  type = mono_class_enum_basetype (D.30281);
  klass = klass->element_class;
  goto handle_enum;
  <D.30285>:
  D.30286 = mono_class_instance_size (klass);
  D.30287 = (unsigned int) D.30286;
  D.30288 = D.30287 + 4294967288;
  D.30280 = (int32_t) D.30288;
  return D.30280;
  <D.21107>:
  D.30289 = type->data.generic_class;
  D.30290 = D.30289->container_class;
  type = &D.30290->byval_arg;
  goto handle_enum;
  <D.21108>:
  D.30280 = 0;
  return D.30280;
  <D.21109>:
  D.30278 = type->type;
  D.30279 = (int) D.30278;
  monoeg_g_log (0B, 4, "unknown type 0x%02x in mono_class_array_element_size", D.30279);
  <D.21110>:
  goto <D.21110>;
  D.30280 = -1;
  return D.30280;
}


mono_array_element_size (struct MonoClass * ac)
{
  unsigned char D.30292;
  _Bool D.30293;
  long int D.30294;
  long int D.30295;
  int32_t D.30298;

  D.30292 = ac->rank;
  D.30293 = D.30292 == 0;
  D.30294 = (long int) D.30293;
  D.30295 = __builtin_expect (D.30294, 0);
  if (D.30295 != 0) goto <D.30296>; else goto <D.30297>;
  <D.30296>:
  monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "class.c", 8238, "ac->rank");
  <D.30297>:
  D.30298 = ac->sizes.element_size;
  return D.30298;
}


mono_ldtoken (struct MonoImage * image, guint32 token, struct MonoClass * * handle_class, struct MonoGenericContext * context)
{
  unsigned int D.30300;
  unsigned int D.30301;
  struct MonoClass * tmp_handle_class.420;
  _Bool D.30305;
  long int D.30306;
  long int D.30307;
  struct MonoClass * D.30312;
  void * D.30315;
  unsigned int D.30316;
  struct MonoClass * D.30321;
  unsigned int D.30322;
  struct MonoClass * D.30327;
  unsigned int D.30328;
  struct MonoClass * D.30333;
  struct MonoTableInfo * D.30334;
  unsigned int D.30335;
  int D.30336;
  unsigned int D.30337;
  const char * sig.421;
  const char * sig.422;
  char D.30340;

  D.30300 = BIT_FIELD_REF <*image, 32, 128>;
  D.30301 = D.30300 & 8;
  if (D.30301 != 0) goto <D.30302>; else goto <D.30303>;
  <D.30302>:
  {
    struct MonoClass * tmp_handle_class;
    void * obj;

    try
      {
        obj = mono_lookup_dynamic_token_class (image, token, 1, &tmp_handle_class, context);
        tmp_handle_class.420 = tmp_handle_class;
        D.30305 = tmp_handle_class.420 == 0B;
        D.30306 = (long int) D.30305;
        D.30307 = __builtin_expect (D.30306, 0);
        if (D.30307 != 0) goto <D.30308>; else goto <D.30309>;
        <D.30308>:
        monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "class.c", 8250, "tmp_handle_class");
        <D.30309>:
        if (handle_class != 0B) goto <D.30310>; else goto <D.30311>;
        <D.30310>:
        tmp_handle_class.420 = tmp_handle_class;
        *handle_class = tmp_handle_class.420;
        <D.30311>:
        D.30312 = mono_defaults.typehandle_class;
        tmp_handle_class.420 = tmp_handle_class;
        if (D.30312 == tmp_handle_class.420) goto <D.30313>; else goto <D.30314>;
        <D.30313>:
        D.30315 = &MEM[(struct MonoClass *)obj].byval_arg;
        return D.30315;
        <D.30314>:
        D.30315 = obj;
        return D.30315;
      }
    finally
      {
        tmp_handle_class = {CLOBBER};
      }
  }
  <D.30303>:
  D.30316 = token & 4278190080;
  switch (D.30316) <default: <D.21138>, case 16777216: <D.21123>, case 33554432: <D.21122>, case 67108864: <D.21126>, case 100663296: <D.21129>, case 167772160: <D.21132>, case 452984832: <D.21124>, case 721420288: <D.21130>>
  <D.21122>:
  <D.21123>:
  <D.21124>:
  {
    struct MonoType * type;

    if (handle_class != 0B) goto <D.30317>; else goto <D.30318>;
    <D.30317>:
    D.30312 = mono_defaults.typehandle_class;
    *handle_class = D.30312;
    <D.30318>:
    type = mono_type_get_full (image, token, context);
    if (type == 0B) goto <D.30319>; else goto <D.30320>;
    <D.30319>:
    D.30315 = 0B;
    return D.30315;
    <D.30320>:
    D.30321 = mono_class_from_mono_type (type);
    mono_class_init (D.30321);
    D.30315 = type;
    return D.30315;
  }
  <D.21126>:
  {
    struct MonoClass * class;
    guint32 type;

    D.30322 = token & 16777215;
    type = mono_metadata_typedef_from_field (image, D.30322);
    if (type == 0) goto <D.30323>; else goto <D.30324>;
    <D.30323>:
    D.30315 = 0B;
    return D.30315;
    <D.30324>:
    if (handle_class != 0B) goto <D.30325>; else goto <D.30326>;
    <D.30325>:
    D.30327 = mono_defaults.fieldhandle_class;
    *handle_class = D.30327;
    <D.30326>:
    D.30328 = type | 33554432;
    class = mono_class_get_full (image, D.30328, context);
    if (class == 0B) goto <D.30329>; else goto <D.30330>;
    <D.30329>:
    D.30315 = 0B;
    return D.30315;
    <D.30330>:
    mono_class_init (class);
    D.30315 = mono_class_get_field (class, token);
    return D.30315;
  }
  <D.21129>:
  <D.21130>:
  {
    struct MonoMethod * meth;

    meth = mono_get_method_full (image, token, 0B, context);
    if (handle_class != 0B) goto <D.30331>; else goto <D.30332>;
    <D.30331>:
    D.30333 = mono_defaults.methodhandle_class;
    *handle_class = D.30333;
    <D.30332>:
    D.30315 = meth;
    return D.30315;
  }
  <D.21132>:
  {
    guint32 cols[3];
    const char * sig;

    try
      {
        D.30334 = &image->tables[10];
        D.30322 = token & 16777215;
        D.30335 = D.30322 + 4294967295;
        D.30336 = (int) D.30335;
        mono_metadata_decode_row (D.30334, D.30336, &cols, 3);
        D.30337 = cols[2];
        sig.421 = mono_metadata_blob_heap (image, D.30337);
        sig = sig.421;
        sig.422 = sig;
        mono_metadata_decode_blob_size (sig.422, &sig);
        sig.422 = sig;
        D.30340 = *sig.422;
        if (D.30340 == 6) goto <D.30341>; else goto <D.30342>;
        <D.30341>:
        {
          struct MonoClass * klass;
          struct MonoClassField * field;

          try
            {
              field = mono_field_from_token (image, token, &klass, context);
              if (handle_class != 0B) goto <D.30343>; else goto <D.30344>;
              <D.30343>:
              D.30327 = mono_defaults.fieldhandle_class;
              *handle_class = D.30327;
              <D.30344>:
              D.30315 = field;
              return D.30315;
            }
          finally
            {
              klass = {CLOBBER};
            }
        }
        <D.30342>:
        {
          struct MonoMethod * meth;

          meth = mono_get_method_full (image, token, 0B, context);
          if (handle_class != 0B) goto <D.30345>; else goto <D.30346>;
          <D.30345>:
          D.30333 = mono_defaults.methodhandle_class;
          *handle_class = D.30333;
          <D.30346>:
          D.30315 = meth;
          return D.30315;
        }
      }
    finally
      {
        cols = {CLOBBER};
        sig = {CLOBBER};
      }
  }
  <D.21138>:
  monoeg_g_log (0B, 16, "Unknown token 0x%08x in ldtoken", token);
  goto <D.21139>;
  <D.21139>:
  D.30315 = 0B;
  return D.30315;
}


mono_install_lookup_dynamic_token (void * (*MonoLookupDynamicToken) (struct MonoImage *, guint32, gboolean, struct MonoClass * *, struct MonoGenericContext *) func)
{
  lookup_dynamic = func;
}


mono_lookup_dynamic_token (struct MonoImage * image, guint32 token, struct MonoGenericContext * context)
{
  void * D.30351;
  void * (*<T1e2c>) (struct MonoImage *, guint32, gboolean, struct MonoClass * *, struct MonoGenericContext *) lookup_dynamic.423;
  struct MonoClass * handle_class;

  try
    {
      lookup_dynamic.423 = lookup_dynamic;
      D.30351 = lookup_dynamic.423 (image, token, 1, &handle_class, context);
      return D.30351;
    }
  finally
    {
      handle_class = {CLOBBER};
    }
}


mono_lookup_dynamic_token_class (struct MonoImage * image, guint32 token, gboolean valid_token, struct MonoClass * * handle_class, struct MonoGenericContext * context)
{
  void * D.30355;
  void * (*<T1e2c>) (struct MonoImage *, guint32, gboolean, struct MonoClass * *, struct MonoGenericContext *) lookup_dynamic.424;

  lookup_dynamic.424 = lookup_dynamic;
  D.30355 = lookup_dynamic.424 (image, token, valid_token, handle_class, context);
  return D.30355;
}


mono_install_get_cached_class_info (gboolean (*MonoGetCachedClassInfo) (struct MonoClass *, struct MonoCachedClassInfo *) func)
{
  get_cached_class_info = func;
}


mono_install_get_class_from_name (gboolean (*MonoGetClassFromName) (struct MonoImage *, const char *, const char *, struct MonoClass * *) func)
{
  get_class_from_name = func;
}


mono_class_get_image (struct MonoClass * klass)
{
  struct MonoImage * D.30358;

  D.30358 = klass->image;
  return D.30358;
}


mono_class_get_element_class (struct MonoClass * klass)
{
  struct MonoClass * D.30360;

  D.30360 = klass->element_class;
  return D.30360;
}


mono_class_is_valuetype (struct MonoClass * klass)
{
  mono_bool D.30362;
  <unnamed-unsigned:1> D.30363;

  D.30363 = klass->valuetype;
  D.30362 = (mono_bool) D.30363;
  return D.30362;
}


mono_class_is_enum (struct MonoClass * klass)
{
  mono_bool D.30365;
  <unnamed-unsigned:1> D.30366;

  D.30366 = klass->enumtype;
  D.30365 = (mono_bool) D.30366;
  return D.30365;
}


mono_class_enum_basetype (struct MonoClass * klass)
{
  struct MonoClass * D.30368;
  struct MonoType * D.30371;

  D.30368 = klass->element_class;
  if (D.30368 == klass) goto <D.30369>; else goto <D.30370>;
  <D.30369>:
  D.30371 = 0B;
  return D.30371;
  <D.30370>:
  D.30368 = klass->element_class;
  D.30371 = &D.30368->byval_arg;
  return D.30371;
}


mono_class_get_parent (struct MonoClass * klass)
{
  struct MonoClass * D.30373;

  D.30373 = klass->parent;
  return D.30373;
}


mono_class_get_nesting_type (struct MonoClass * klass)
{
  struct MonoClass * D.30375;

  D.30375 = klass->nested_in;
  return D.30375;
}


mono_class_get_rank (struct MonoClass * klass)
{
  int D.30377;
  unsigned char D.30378;

  D.30378 = klass->rank;
  D.30377 = (int) D.30378;
  return D.30377;
}


mono_class_get_flags (struct MonoClass * klass)
{
  uint32_t D.30380;

  D.30380 = klass->flags;
  return D.30380;
}


mono_class_get_name (struct MonoClass * klass)
{
  const char * D.30382;

  D.30382 = klass->name;
  return D.30382;
}


mono_class_get_namespace (struct MonoClass * klass)
{
  const char * D.30384;

  D.30384 = klass->name_space;
  return D.30384;
}


mono_class_get_type (struct MonoClass * klass)
{
  struct MonoType * D.30386;

  D.30386 = &klass->byval_arg;
  return D.30386;
}


mono_class_get_type_token (struct MonoClass * klass)
{
  uint32_t D.30388;

  D.30388 = klass->type_token;
  return D.30388;
}


mono_class_get_byref_type (struct MonoClass * klass)
{
  struct MonoType * D.30390;

  D.30390 = &klass->this_arg;
  return D.30390;
}


mono_class_num_fields (struct MonoClass * klass)
{
  int D.30392;
  unsigned int D.30393;

  D.30393 = klass->field.count;
  D.30392 = (int) D.30393;
  return D.30392;
}


mono_class_num_methods (struct MonoClass * klass)
{
  int D.30395;
  unsigned int D.30396;

  D.30396 = klass->method.count;
  D.30395 = (int) D.30396;
  return D.30395;
}


mono_class_num_properties (struct MonoClass * klass)
{
  int D.30398;
  struct MonoClassExt * D.30399;
  unsigned int D.30400;

  mono_class_setup_properties (klass);
  D.30399 = klass->ext;
  D.30400 = D.30399->property.count;
  D.30398 = (int) D.30400;
  return D.30398;
}


mono_class_setup_properties (struct MonoClass * class)
{
  struct MonoImage * D.30402;
  struct MonoClassExt * D.30403;
  struct MonoProperty * D.30406;
  struct MonoGenericClass * D.30413;
  unsigned char D.30416;
  gchar * D.30419;
  struct MonoClassExt * D.30420;
  unsigned int D.30421;
  unsigned int D.30422;
  unsigned int D.30423;
  int D.30424;
  unsigned int D.30425;
  struct MonoProperty * D.30426;
  struct MonoProperty * D.30427;
  struct MonoMethod * D.30428;
  struct MonoGenericContext * D.30431;
  struct MonoMethod * D.30432;
  struct MonoMethod * D.30433;
  struct MonoGenericContext * D.30436;
  struct MonoMethod * D.30437;
  unsigned int D.30439;
  unsigned int D.30440;
  unsigned int D.30441;
  unsigned int D.30442;
  unsigned int last.425;
  unsigned int first.426;
  unsigned int D.30445;
  unsigned char D.30448;
  unsigned int count.427;
  unsigned int count.428;
  unsigned int D.30453;
  int D.30454;
  int i.429;
  unsigned int first.430;
  unsigned int D.30457;
  unsigned int D.30458;
  struct MonoProperty * D.30459;
  unsigned int D.30460;
  unsigned int D.30461;
  const char * D.30462;
  int j.431;
  unsigned int D.30464;
  unsigned int D.30465;
  unsigned int D.30468;
  struct MonoMethod * * D.30470;
  unsigned int D.30471;
  unsigned int D.30472;
  unsigned int D.30473;
  unsigned int D.30474;
  struct MonoMethod * * D.30475;
  unsigned int endm.432;
  guint startm;
  guint endm;
  guint i;
  guint j;
  guint32 cols[3];
  struct MonoTableInfo * msemt;
  struct MonoProperty * properties;
  guint32 last;

  try
    {
      D.30402 = class->image;
      msemt = &D.30402->tables[24];
      D.30403 = class->ext;
      if (D.30403 != 0B) goto <D.30404>; else goto <D.30405>;
      <D.30404>:
      D.30403 = class->ext;
      D.30406 = D.30403->properties;
      if (D.30406 != 0B) goto <D.30407>; else goto <D.30408>;
      <D.30407>:
      return;
      <D.30408>:
      <D.30405>:
      mono_loader_lock ();
      D.30403 = class->ext;
      if (D.30403 != 0B) goto <D.30409>; else goto <D.30410>;
      <D.30409>:
      D.30403 = class->ext;
      D.30406 = D.30403->properties;
      if (D.30406 != 0B) goto <D.30411>; else goto <D.30412>;
      <D.30411>:
      mono_loader_unlock ();
      return;
      <D.30412>:
      <D.30410>:
      mono_class_alloc_ext (class);
      D.30413 = class->generic_class;
      if (D.30413 != 0B) goto <D.30414>; else goto <D.30415>;
      <D.30414>:
      {
        struct MonoClass * gklass;

        D.30413 = class->generic_class;
        gklass = D.30413->container_class;
        mono_class_init (gklass);
        mono_class_setup_properties (gklass);
        D.30416 = gklass->exception_type;
        if (D.30416 != 0) goto <D.30417>; else goto <D.30418>;
        <D.30417>:
        D.30419 = monoeg_strdup ("Generic type definition failed to load");
        mono_class_set_failure (class, 7, D.30419);
        mono_loader_unlock ();
        return;
        <D.30418>:
        D.30403 = class->ext;
        D.30420 = gklass->ext;
        D.30403->property = D.30420->property;
        D.30403 = class->ext;
        D.30421 = D.30403->property.count;
        D.30422 = D.30421 + 1;
        D.30423 = D.30422 * 20;
        D.30424 = (int) D.30423;
        properties = mono_class_alloc0 (class, D.30424);
        i = 0;
        goto <D.18999>;
        <D.18998>:
        {
          struct MonoProperty * prop;

          D.30425 = i * 20;
          prop = properties + D.30425;
          D.30420 = gklass->ext;
          D.30426 = D.30420->properties;
          D.30425 = i * 20;
          D.30427 = D.30426 + D.30425;
          *prop = *D.30427;
          D.30428 = prop->get;
          if (D.30428 != 0B) goto <D.30429>; else goto <D.30430>;
          <D.30429>:
          D.30428 = prop->get;
          D.30431 = mono_class_get_context (class);
          D.30432 = mono_class_inflate_generic_method_full (D.30428, class, D.30431);
          prop->get = D.30432;
          <D.30430>:
          D.30433 = prop->set;
          if (D.30433 != 0B) goto <D.30434>; else goto <D.30435>;
          <D.30434>:
          D.30433 = prop->set;
          D.30436 = mono_class_get_context (class);
          D.30437 = mono_class_inflate_generic_method_full (D.30433, class, D.30436);
          prop->set = D.30437;
          <D.30435>:
          prop->parent = class;
        }
        i = i + 1;
        <D.18999>:
        D.30403 = class->ext;
        D.30421 = D.30403->property.count;
        if (D.30421 > i) goto <D.18998>; else goto <D.19000>;
        <D.19000>:
      }
      goto <D.30438>;
      <D.30415>:
      {
        int first;
        int count;

        D.30402 = class->image;
        D.30439 = class->type_token;
        D.30440 = D.30439 & 16777215;
        D.30441 = D.30440 + 4294967295;
        D.30442 = mono_metadata_properties_from_typedef (D.30402, D.30441, &last);
        first = (int) D.30442;
        last.425 = last;
        first.426 = (unsigned int) first;
        D.30445 = last.425 - first.426;
        count = (int) D.30445;
        if (count != 0) goto <D.30446>; else goto <D.30447>;
        <D.30446>:
        mono_class_setup_methods (class);
        D.30448 = class->exception_type;
        if (D.30448 != 0) goto <D.30449>; else goto <D.30450>;
        <D.30449>:
        mono_loader_unlock ();
        return;
        <D.30450>:
        <D.30447>:
        D.30403 = class->ext;
        first.426 = (unsigned int) first;
        D.30403->property.first = first.426;
        D.30403 = class->ext;
        count.427 = (unsigned int) count;
        D.30403->property.count = count.427;
        count.428 = (unsigned int) count;
        D.30453 = count.428 * 20;
        D.30454 = (int) D.30453;
        properties = mono_class_alloc0 (class, D.30454);
        i = (guint) first;
        goto <D.19012>;
        <D.19011>:
        D.30402 = class->image;
        i.429 = (int) i;
        mono_metadata_decode_table_row (D.30402, 23, i.429, &cols, 3);
        first.430 = (unsigned int) first;
        D.30457 = i - first.430;
        D.30458 = D.30457 * 20;
        D.30459 = properties + D.30458;
        D.30459->parent = class;
        first.430 = (unsigned int) first;
        D.30457 = i - first.430;
        D.30458 = D.30457 * 20;
        D.30459 = properties + D.30458;
        D.30460 = cols[0];
        D.30459->attrs = D.30460;
        first.430 = (unsigned int) first;
        D.30457 = i - first.430;
        D.30458 = D.30457 * 20;
        D.30459 = properties + D.30458;
        D.30402 = class->image;
        D.30461 = cols[1];
        D.30462 = mono_metadata_string_heap (D.30402, D.30461);
        D.30459->name = D.30462;
        D.30402 = class->image;
        startm = mono_metadata_methods_from_property (D.30402, i, &endm);
        j = startm;
        goto <D.19009>;
        <D.19008>:
        {
          struct MonoMethod * method;

          j.431 = (int) j;
          mono_metadata_decode_row (msemt, j.431, &cols, 3);
          D.30402 = class->image;
          D.30464 = BIT_FIELD_REF <*D.30402, 32, 128>;
          D.30465 = D.30464 & 32;
          if (D.30465 != 0) goto <D.30466>; else goto <D.30467>;
          <D.30466>:
          D.30402 = class->image;
          D.30461 = cols[1];
          D.30468 = D.30461 | 100663296;
          method = mono_get_method (D.30402, D.30468, class);
          goto <D.30469>;
          <D.30467>:
          D.30470 = class->methods;
          D.30461 = cols[1];
          D.30471 = class->method.first;
          D.30472 = D.30461 - D.30471;
          D.30473 = D.30472 + 1073741823;
          D.30474 = D.30473 * 4;
          D.30475 = D.30470 + D.30474;
          method = *D.30475;
          <D.30469>:
          D.30460 = cols[0];
          switch (D.30460) <default: <D.19007>, case 1: <D.19004>, case 2: <D.19006>>
          <D.19004>:
          first.430 = (unsigned int) first;
          D.30457 = i - first.430;
          D.30458 = D.30457 * 20;
          D.30459 = properties + D.30458;
          D.30459->set = method;
          goto <D.19005>;
          <D.19006>:
          first.430 = (unsigned int) first;
          D.30457 = i - first.430;
          D.30458 = D.30457 * 20;
          D.30459 = properties + D.30458;
          D.30459->get = method;
          goto <D.19005>;
          <D.19007>:
          goto <D.19005>;
          <D.19005>:
        }
        j = j + 1;
        <D.19009>:
        endm.432 = endm;
        if (j < endm.432) goto <D.19008>; else goto <D.19010>;
        <D.19010>:
        i = i + 1;
        <D.19012>:
        last.425 = last;
        if (i < last.425) goto <D.19011>; else goto <D.19013>;
        <D.19013>:
      }
      <D.30438>:
      mono_memory_barrier ();
      D.30403 = class->ext;
      D.30403->properties = properties;
      mono_loader_unlock ();
    }
  finally
    {
      endm = {CLOBBER};
      cols = {CLOBBER};
      last = {CLOBBER};
    }
}


mono_class_num_events (struct MonoClass * klass)
{
  int D.30481;
  struct MonoClassExt * D.30482;
  unsigned int D.30483;

  mono_class_setup_events (klass);
  D.30482 = klass->ext;
  D.30483 = D.30482->event.count;
  D.30481 = (int) D.30483;
  return D.30481;
}


mono_class_setup_events (struct MonoClass * class)
{
  struct MonoImage * D.30485;
  struct MonoClassExt * D.30486;
  struct MonoEvent * D.30489;
  struct MonoGenericClass * D.30496;
  unsigned char D.30499;
  gchar * D.30502;
  struct MonoClassExt * D.30503;
  unsigned int D.30504;
  unsigned int D.30505;
  int D.30506;
  void * D.30507;
  unsigned int D.30510;
  struct MonoEvent * D.30511;
  const char * D.30512;
  struct MonoMethod * iftmp.433;
  struct MonoMethod * D.30514;
  struct MonoMethod * iftmp.434;
  struct MonoMethod * D.30519;
  struct MonoMethod * iftmp.435;
  struct MonoMethod * D.30524;
  struct MonoMethod * * iftmp.436;
  struct MonoMethod * * D.30529;
  unsigned int D.30533;
  unsigned int D.30534;
  unsigned int D.30535;
  unsigned int D.30536;
  unsigned int D.30537;
  unsigned int last.437;
  unsigned int first.438;
  unsigned int D.30540;
  unsigned char D.30543;
  gchar * D.30546;
  unsigned int count.439;
  unsigned int first.440;
  unsigned int D.30549;
  unsigned int D.30550;
  int i.441;
  unsigned int D.30552;
  unsigned int D.30553;
  const char * D.30554;
  int j.442;
  unsigned int D.30556;
  unsigned int D.30557;
  unsigned int D.30560;
  struct MonoMethod * * D.30562;
  unsigned int D.30563;
  unsigned int D.30564;
  unsigned int D.30565;
  unsigned int D.30566;
  struct MonoMethod * * D.30567;
  struct MonoMethod * * D.30568;
  void * D.30571;
  unsigned int n.443;
  unsigned int D.30574;
  struct MonoMethod * * D.30575;
  struct MonoMethod * D.30576;
  int D.30577;
  unsigned int D.30578;
  unsigned int D.30579;
  void * D.30580;
  sizetype n.444;
  sizetype D.30582;
  sizetype D.30583;
  struct MonoMethod * * D.30584;
  unsigned int endm.445;
  int first;
  int count;
  guint startm;
  guint endm;
  guint i;
  guint j;
  guint32 cols[3];
  struct MonoTableInfo * msemt;
  guint32 last;
  struct MonoEvent * events;

  try
    {
      D.30485 = class->image;
      msemt = &D.30485->tables[24];
      D.30486 = class->ext;
      if (D.30486 != 0B) goto <D.30487>; else goto <D.30488>;
      <D.30487>:
      D.30486 = class->ext;
      D.30489 = D.30486->events;
      if (D.30489 != 0B) goto <D.30490>; else goto <D.30491>;
      <D.30490>:
      return;
      <D.30491>:
      <D.30488>:
      mono_loader_lock ();
      D.30486 = class->ext;
      if (D.30486 != 0B) goto <D.30492>; else goto <D.30493>;
      <D.30492>:
      D.30486 = class->ext;
      D.30489 = D.30486->events;
      if (D.30489 != 0B) goto <D.30494>; else goto <D.30495>;
      <D.30494>:
      mono_loader_unlock ();
      return;
      <D.30495>:
      <D.30493>:
      mono_class_alloc_ext (class);
      D.30496 = class->generic_class;
      if (D.30496 != 0B) goto <D.30497>; else goto <D.30498>;
      <D.30497>:
      {
        struct MonoClass * gklass;
        struct MonoGenericContext * context;

        D.30496 = class->generic_class;
        gklass = D.30496->container_class;
        mono_class_setup_events (gklass);
        D.30499 = gklass->exception_type;
        if (D.30499 != 0) goto <D.30500>; else goto <D.30501>;
        <D.30500>:
        D.30502 = monoeg_strdup ("Generic type definition failed to load");
        mono_class_set_failure (class, 7, D.30502);
        mono_loader_unlock ();
        return;
        <D.30501>:
        D.30486 = class->ext;
        D.30503 = gklass->ext;
        D.30486->event = D.30503->event;
        D.30486 = class->ext;
        D.30486 = class->ext;
        D.30504 = D.30486->event.count;
        D.30505 = D.30504 * 28;
        D.30506 = (int) D.30505;
        D.30507 = mono_class_alloc0 (class, D.30506);
        D.30486->events = D.30507;
        D.30486 = class->ext;
        D.30504 = D.30486->event.count;
        if (D.30504 != 0) goto <D.30508>; else goto <D.30509>;
        <D.30508>:
        context = mono_class_get_context (class);
        <D.30509>:
        i = 0;
        goto <D.19046>;
        <D.19045>:
        {
          struct MonoEvent * event;
          struct MonoEvent * gevent;

          D.30486 = class->ext;
          D.30489 = D.30486->events;
          D.30510 = i * 28;
          event = D.30489 + D.30510;
          D.30503 = gklass->ext;
          D.30511 = D.30503->events;
          D.30510 = i * 28;
          gevent = D.30511 + D.30510;
          event->parent = class;
          D.30512 = gevent->name;
          event->name = D.30512;
          D.30514 = gevent->add;
          if (D.30514 != 0B) goto <D.30515>; else goto <D.30516>;
          <D.30515>:
          D.30514 = gevent->add;
          iftmp.433 = mono_class_inflate_generic_method_full (D.30514, class, context);
          goto <D.30517>;
          <D.30516>:
          iftmp.433 = 0B;
          <D.30517>:
          event->add = iftmp.433;
          D.30519 = gevent->remove;
          if (D.30519 != 0B) goto <D.30520>; else goto <D.30521>;
          <D.30520>:
          D.30519 = gevent->remove;
          iftmp.434 = mono_class_inflate_generic_method_full (D.30519, class, context);
          goto <D.30522>;
          <D.30521>:
          iftmp.434 = 0B;
          <D.30522>:
          event->remove = iftmp.434;
          D.30524 = gevent->raise;
          if (D.30524 != 0B) goto <D.30525>; else goto <D.30526>;
          <D.30525>:
          D.30524 = gevent->raise;
          iftmp.435 = mono_class_inflate_generic_method_full (D.30524, class, context);
          goto <D.30527>;
          <D.30526>:
          iftmp.435 = 0B;
          <D.30527>:
          event->raise = iftmp.435;
          D.30529 = gevent->other;
          if (D.30529 != 0B) goto <D.30530>; else goto <D.30531>;
          <D.30530>:
          D.30529 = gevent->other;
          iftmp.436 = inflate_method_listz (D.30529, class, context);
          goto <D.30532>;
          <D.30531>:
          iftmp.436 = 0B;
          <D.30532>:
          event->other = iftmp.436;
          D.30533 = gevent->attrs;
          event->attrs = D.30533;
        }
        i = i + 1;
        <D.19046>:
        D.30486 = class->ext;
        D.30504 = D.30486->event.count;
        if (D.30504 > i) goto <D.19045>; else goto <D.19047>;
        <D.19047>:
        mono_loader_unlock ();
        return;
      }
      <D.30498>:
      D.30485 = class->image;
      D.30534 = class->type_token;
      D.30535 = D.30534 & 16777215;
      D.30536 = D.30535 + 4294967295;
      D.30537 = mono_metadata_events_from_typedef (D.30485, D.30536, &last);
      first = (int) D.30537;
      last.437 = last;
      first.438 = (unsigned int) first;
      D.30540 = last.437 - first.438;
      count = (int) D.30540;
      if (count != 0) goto <D.30541>; else goto <D.30542>;
      <D.30541>:
      mono_class_setup_methods (class);
      D.30543 = class->exception_type;
      if (D.30543 != 0) goto <D.30544>; else goto <D.30545>;
      <D.30544>:
      D.30546 = monoeg_strdup ("Generic type definition failed to load");
      mono_class_set_failure (class, 7, D.30546);
      mono_loader_unlock ();
      return;
      <D.30545>:
      <D.30542>:
      D.30486 = class->ext;
      first.438 = (unsigned int) first;
      D.30486->event.first = first.438;
      D.30486 = class->ext;
      count.439 = (unsigned int) count;
      D.30486->event.count = count.439;
      D.30486 = class->ext;
      D.30504 = D.30486->event.count;
      D.30505 = D.30504 * 28;
      D.30506 = (int) D.30505;
      events = mono_class_alloc0 (class, D.30506);
      i = (guint) first;
      goto <D.19064>;
      <D.19063>:
      {
        struct MonoEvent * event;

        first.440 = (unsigned int) first;
        D.30549 = i - first.440;
        D.30550 = D.30549 * 28;
        event = events + D.30550;
        D.30485 = class->image;
        i.441 = (int) i;
        mono_metadata_decode_table_row (D.30485, 20, i.441, &cols, 3);
        event->parent = class;
        D.30552 = cols[0];
        event->attrs = D.30552;
        D.30485 = class->image;
        D.30553 = cols[1];
        D.30554 = mono_metadata_string_heap (D.30485, D.30553);
        event->name = D.30554;
        D.30485 = class->image;
        startm = mono_metadata_methods_from_event (D.30485, i, &endm);
        j = startm;
        goto <D.19061>;
        <D.19060>:
        {
          struct MonoMethod * method;

          j.442 = (int) j;
          mono_metadata_decode_row (msemt, j.442, &cols, 3);
          D.30485 = class->image;
          D.30556 = BIT_FIELD_REF <*D.30485, 32, 128>;
          D.30557 = D.30556 & 32;
          if (D.30557 != 0) goto <D.30558>; else goto <D.30559>;
          <D.30558>:
          D.30485 = class->image;
          D.30553 = cols[1];
          D.30560 = D.30553 | 100663296;
          method = mono_get_method (D.30485, D.30560, class);
          goto <D.30561>;
          <D.30559>:
          D.30562 = class->methods;
          D.30553 = cols[1];
          D.30563 = class->method.first;
          D.30564 = D.30553 - D.30563;
          D.30565 = D.30564 + 1073741823;
          D.30566 = D.30565 * 4;
          D.30567 = D.30562 + D.30566;
          method = *D.30567;
          <D.30561>:
          D.30552 = cols[0];
          switch (D.30552) <default: <D.19059>, case 4: <D.19054>, case 8: <D.19050>, case 16: <D.19052>, case 32: <D.19053>>
          <D.19050>:
          event->add = method;
          goto <D.19051>;
          <D.19052>:
          event->remove = method;
          goto <D.19051>;
          <D.19053>:
          event->raise = method;
          goto <D.19051>;
          <D.19054>:
          {
            int n;

            n = 0;
            D.30568 = event->other;
            if (D.30568 == 0B) goto <D.30569>; else goto <D.30570>;
            <D.30569>:
            D.30571 = monoeg_malloc0 (8);
            event->other = D.30571;
            goto <D.30572>;
            <D.30570>:
            goto <D.19057>;
            <D.19056>:
            n = n + 1;
            <D.19057>:
            D.30568 = event->other;
            n.443 = (unsigned int) n;
            D.30574 = n.443 * 4;
            D.30575 = D.30568 + D.30574;
            D.30576 = *D.30575;
            if (D.30576 != 0B) goto <D.19056>; else goto <D.19058>;
            <D.19058>:
            D.30568 = event->other;
            D.30577 = n + 2;
            D.30578 = (unsigned int) D.30577;
            D.30579 = D.30578 * 4;
            D.30580 = monoeg_realloc (D.30568, D.30579);
            event->other = D.30580;
            <D.30572>:
            D.30568 = event->other;
            n.443 = (unsigned int) n;
            D.30574 = n.443 * 4;
            D.30575 = D.30568 + D.30574;
            *D.30575 = method;
            D.30568 = event->other;
            n.444 = (sizetype) n;
            D.30582 = n.444 + 1;
            D.30583 = D.30582 * 4;
            D.30584 = D.30568 + D.30583;
            *D.30584 = 0B;
            goto <D.19051>;
          }
          <D.19059>:
          goto <D.19051>;
          <D.19051>:
        }
        j = j + 1;
        <D.19061>:
        endm.445 = endm;
        if (j < endm.445) goto <D.19060>; else goto <D.19062>;
        <D.19062>:
      }
      i = i + 1;
      <D.19064>:
      last.437 = last;
      if (i < last.437) goto <D.19063>; else goto <D.19065>;
      <D.19065>:
      mono_memory_barrier ();
      D.30486 = class->ext;
      D.30486->events = events;
      mono_loader_unlock ();
    }
  finally
    {
      endm = {CLOBBER};
      cols = {CLOBBER};
      last = {CLOBBER};
    }
}


inflate_method_listz (struct MonoMethod * * methods, struct MonoClass * class, struct MonoGenericContext * context)
{
  struct MonoMethod * D.30590;
  int D.30591;
  unsigned int D.30592;
  unsigned int D.30593;
  unsigned int count.446;
  unsigned int D.30595;
  struct MonoMethod * * D.30596;
  struct MonoMethod * D.30597;
  struct MonoMethod * * D.30598;
  struct MonoMethod * * om;
  struct MonoMethod * * retval;
  int count;

  om = methods;
  count = 0;
  goto <D.19023>;
  <D.19022>:
  om = om + 4;
  count = count + 1;
  <D.19023>:
  D.30590 = *om;
  if (D.30590 != 0B) goto <D.19022>; else goto <D.19024>;
  <D.19024>:
  D.30591 = count + 1;
  D.30592 = (unsigned int) D.30591;
  D.30593 = D.30592 * 4;
  retval = monoeg_malloc0 (D.30593);
  count = 0;
  om = methods;
  count = 0;
  goto <D.19026>;
  <D.19025>:
  count.446 = (unsigned int) count;
  D.30595 = count.446 * 4;
  D.30596 = retval + D.30595;
  D.30590 = *om;
  D.30597 = mono_class_inflate_generic_method_full (D.30590, class, context);
  *D.30596 = D.30597;
  om = om + 4;
  count = count + 1;
  <D.19026>:
  D.30590 = *om;
  if (D.30590 != 0B) goto <D.19025>; else goto <D.19027>;
  <D.19027>:
  D.30598 = retval;
  return D.30598;
}


mono_class_get_fields (struct MonoClass * klass, void * * iter)
{
  struct MonoClassField * D.30602;
  void * D.30603;
  unsigned char D.30606;
  unsigned int D.30609;
  struct MonoClassField * D.30612;
  unsigned int D.30613;
  struct MonoClassField * D.30614;
  struct MonoClassField * field;

  if (iter == 0B) goto <D.30600>; else goto <D.30601>;
  <D.30600>:
  D.30602 = 0B;
  return D.30602;
  <D.30601>:
  D.30603 = *iter;
  if (D.30603 == 0B) goto <D.30604>; else goto <D.30605>;
  <D.30604>:
  mono_class_setup_fields_locking (klass);
  D.30606 = klass->exception_type;
  if (D.30606 != 0) goto <D.30607>; else goto <D.30608>;
  <D.30607>:
  D.30602 = 0B;
  return D.30602;
  <D.30608>:
  D.30609 = klass->field.count;
  if (D.30609 != 0) goto <D.30610>; else goto <D.30611>;
  <D.30610>:
  D.30612 = klass->fields;
  *iter = D.30612;
  D.30602 = *iter;
  return D.30602;
  <D.30611>:
  D.30602 = 0B;
  return D.30602;
  <D.30605>:
  field = *iter;
  field = field + 16;
  D.30612 = klass->fields;
  D.30609 = klass->field.count;
  D.30613 = D.30609 * 16;
  D.30614 = D.30612 + D.30613;
  if (D.30614 > field) goto <D.30615>; else goto <D.30616>;
  <D.30615>:
  *iter = field;
  D.30602 = *iter;
  return D.30602;
  <D.30616>:
  D.30602 = 0B;
  return D.30602;
}


mono_class_get_methods (struct MonoClass * klass, void * * iter)
{
  struct MonoMethod * D.30620;
  void * D.30621;
  struct MonoMethod * * D.30624;
  unsigned int D.30627;
  unsigned int D.30630;
  struct MonoMethod * * D.30631;
  struct MonoMethod * * method;

  if (iter == 0B) goto <D.30618>; else goto <D.30619>;
  <D.30618>:
  D.30620 = 0B;
  return D.30620;
  <D.30619>:
  D.30621 = *iter;
  if (D.30621 == 0B) goto <D.30622>; else goto <D.30623>;
  <D.30622>:
  mono_class_setup_methods (klass);
  D.30624 = klass->methods;
  if (D.30624 == 0B) goto <D.30625>; else goto <D.30626>;
  <D.30625>:
  D.30620 = 0B;
  return D.30620;
  <D.30626>:
  D.30627 = klass->method.count;
  if (D.30627 != 0) goto <D.30628>; else goto <D.30629>;
  <D.30628>:
  D.30624 = klass->methods;
  *iter = D.30624;
  D.30624 = klass->methods;
  D.30620 = *D.30624;
  return D.30620;
  <D.30629>:
  D.30620 = 0B;
  return D.30620;
  <D.30623>:
  method = *iter;
  method = method + 4;
  D.30624 = klass->methods;
  D.30627 = klass->method.count;
  D.30630 = D.30627 * 4;
  D.30631 = D.30624 + D.30630;
  if (D.30631 > method) goto <D.30632>; else goto <D.30633>;
  <D.30632>:
  *iter = method;
  D.30620 = *method;
  return D.30620;
  <D.30633>:
  D.30620 = 0B;
  return D.30620;
}


mono_class_get_properties (struct MonoClass * klass, void * * iter)
{
  struct MonoProperty * D.30637;
  void * D.30638;
  struct MonoClassExt * D.30641;
  unsigned int D.30642;
  struct MonoProperty * D.30645;
  unsigned int D.30646;
  struct MonoProperty * D.30647;
  struct MonoProperty * property;

  if (iter == 0B) goto <D.30635>; else goto <D.30636>;
  <D.30635>:
  D.30637 = 0B;
  return D.30637;
  <D.30636>:
  D.30638 = *iter;
  if (D.30638 == 0B) goto <D.30639>; else goto <D.30640>;
  <D.30639>:
  mono_class_setup_properties (klass);
  D.30641 = klass->ext;
  D.30642 = D.30641->property.count;
  if (D.30642 != 0) goto <D.30643>; else goto <D.30644>;
  <D.30643>:
  D.30641 = klass->ext;
  D.30645 = D.30641->properties;
  *iter = D.30645;
  D.30637 = *iter;
  return D.30637;
  <D.30644>:
  D.30637 = 0B;
  return D.30637;
  <D.30640>:
  property = *iter;
  property = property + 20;
  D.30641 = klass->ext;
  D.30645 = D.30641->properties;
  D.30641 = klass->ext;
  D.30642 = D.30641->property.count;
  D.30646 = D.30642 * 20;
  D.30647 = D.30645 + D.30646;
  if (D.30647 > property) goto <D.30648>; else goto <D.30649>;
  <D.30648>:
  *iter = property;
  D.30637 = *iter;
  return D.30637;
  <D.30649>:
  D.30637 = 0B;
  return D.30637;
}


mono_class_get_events (struct MonoClass * klass, void * * iter)
{
  struct MonoEvent * D.30653;
  void * D.30654;
  struct MonoClassExt * D.30657;
  unsigned int D.30658;
  struct MonoEvent * D.30661;
  unsigned int D.30662;
  struct MonoEvent * D.30663;
  struct MonoEvent * event;

  if (iter == 0B) goto <D.30651>; else goto <D.30652>;
  <D.30651>:
  D.30653 = 0B;
  return D.30653;
  <D.30652>:
  D.30654 = *iter;
  if (D.30654 == 0B) goto <D.30655>; else goto <D.30656>;
  <D.30655>:
  mono_class_setup_events (klass);
  D.30657 = klass->ext;
  D.30658 = D.30657->event.count;
  if (D.30658 != 0) goto <D.30659>; else goto <D.30660>;
  <D.30659>:
  D.30657 = klass->ext;
  D.30661 = D.30657->events;
  *iter = D.30661;
  D.30653 = *iter;
  return D.30653;
  <D.30660>:
  D.30653 = 0B;
  return D.30653;
  <D.30656>:
  event = *iter;
  event = event + 28;
  D.30657 = klass->ext;
  D.30661 = D.30657->events;
  D.30657 = klass->ext;
  D.30658 = D.30657->event.count;
  D.30662 = D.30658 * 28;
  D.30663 = D.30661 + D.30662;
  if (D.30663 > event) goto <D.30664>; else goto <D.30665>;
  <D.30664>:
  *iter = event;
  D.30653 = *iter;
  return D.30653;
  <D.30665>:
  D.30653 = 0B;
  return D.30653;
}


mono_class_get_interfaces (struct MonoClass * klass, void * * iter)
{
  struct MonoClass * D.30669;
  void * D.30670;
  unsigned int D.30673;
  unsigned int D.30674;
  unsigned int D.30677;
  unsigned int D.30678;
  int D.30681;
  short unsigned int D.30684;
  struct MonoClass * * D.30687;
  unsigned int D.30688;
  unsigned int D.30689;
  struct MonoClass * * D.30690;
  struct MonoError error;
  struct MonoClass * * iface;

  try
    {
      if (iter == 0B) goto <D.30667>; else goto <D.30668>;
      <D.30667>:
      D.30669 = 0B;
      return D.30669;
      <D.30668>:
      D.30670 = *iter;
      if (D.30670 == 0B) goto <D.30671>; else goto <D.30672>;
      <D.30671>:
      D.30673 = BIT_FIELD_REF <*klass, 32, 160>;
      D.30674 = D.30673 & 1;
      if (D.30674 == 0) goto <D.30675>; else goto <D.30676>;
      <D.30675>:
      mono_class_init (klass);
      <D.30676>:
      D.30677 = BIT_FIELD_REF <*klass, 32, 192>;
      D.30678 = D.30677 & 1;
      if (D.30678 == 0) goto <D.30679>; else goto <D.30680>;
      <D.30679>:
      mono_class_setup_interfaces (klass, &error);
      D.30681 = mono_error_ok (&error);
      if (D.30681 == 0) goto <D.30682>; else goto <D.30683>;
      <D.30682>:
      mono_error_cleanup (&error);
      D.30669 = 0B;
      return D.30669;
      <D.30683>:
      <D.30680>:
      D.30684 = klass->interface_count;
      if (D.30684 != 0) goto <D.30685>; else goto <D.30686>;
      <D.30685>:
      D.30687 = klass->interfaces;
      *iter = D.30687;
      D.30687 = klass->interfaces;
      D.30669 = *D.30687;
      return D.30669;
      <D.30686>:
      D.30669 = 0B;
      return D.30669;
      <D.30672>:
      iface = *iter;
      iface = iface + 4;
      D.30687 = klass->interfaces;
      D.30684 = klass->interface_count;
      D.30688 = (unsigned int) D.30684;
      D.30689 = D.30688 * 4;
      D.30690 = D.30687 + D.30689;
      if (D.30690 > iface) goto <D.30691>; else goto <D.30692>;
      <D.30691>:
      *iter = iface;
      D.30669 = *iface;
      return D.30669;
      <D.30692>:
      D.30669 = 0B;
      return D.30669;
    }
  finally
    {
      error = {CLOBBER};
    }
}


mono_class_get_nested_types (struct MonoClass * klass, void * * iter)
{
  struct MonoClass * D.30697;
  unsigned int D.30698;
  unsigned int D.30699;
  unsigned int D.30702;
  struct MonoImage * D.30707;
  unsigned int D.30708;
  struct MonoTableInfo * D.30709;
  int D.30710;
  unsigned int D.30711;
  unsigned int D.30712;
  int D.30713;
  int D.30716;
  unsigned int D.30717;
  unsigned int D.30718;
  struct MonoClassExt * D.30719;
  struct GList * D.30720;
  struct GList * D.30721;
  unsigned int D.30722;
  void * D.30723;
  struct MonoError error;
  struct GList * item;
  int i;

  try
    {
      if (iter == 0B) goto <D.30695>; else goto <D.30696>;
      <D.30695>:
      D.30697 = 0B;
      return D.30697;
      <D.30696>:
      D.30698 = BIT_FIELD_REF <*klass, 32, 160>;
      D.30699 = D.30698 & 2147483648;
      if (D.30699 == 0) goto <D.30700>; else goto <D.30701>;
      <D.30700>:
      D.30702 = klass->type_token;
      if (D.30702 == 0) goto <D.30703>; else goto <D.30704>;
      <D.30703>:
      klass->nested_classes_inited = 1;
      <D.30704>:
      mono_loader_lock ();
      D.30698 = BIT_FIELD_REF <*klass, 32, 160>;
      D.30699 = D.30698 & 2147483648;
      if (D.30699 == 0) goto <D.30705>; else goto <D.30706>;
      <D.30705>:
      D.30707 = klass->image;
      D.30702 = klass->type_token;
      D.30708 = mono_metadata_nesting_typedef (D.30707, D.30702, 1);
      i = (int) D.30708;
      goto <D.21272>;
      <D.21273>:
      {
        struct MonoClass * nclass;
        guint32 cols[2];

        try
          {
            D.30707 = klass->image;
            D.30709 = &D.30707->tables[41];
            D.30710 = i + -1;
            mono_metadata_decode_row (D.30709, D.30710, &cols, 2);
            D.30707 = klass->image;
            D.30711 = cols[0];
            D.30712 = D.30711 | 33554432;
            nclass = mono_class_create_from_typedef (D.30707, D.30712, &error);
            D.30713 = mono_error_ok (&error);
            if (D.30713 == 0) goto <D.30714>; else goto <D.30715>;
            <D.30714>:
            mono_error_cleanup (&error);
            D.30707 = klass->image;
            D.30702 = klass->type_token;
            D.30716 = i + 1;
            D.30717 = (unsigned int) D.30716;
            D.30718 = mono_metadata_nesting_typedef (D.30707, D.30702, D.30717);
            i = (int) D.30718;
            // predicted unlikely by continue predictor.
            goto <D.21272>;
            <D.30715>:
            mono_class_alloc_ext (klass);
            D.30719 = klass->ext;
            D.30707 = klass->image;
            D.30719 = klass->ext;
            D.30720 = D.30719->nested_classes;
            D.30721 = g_list_prepend_image (D.30707, D.30720, nclass);
            D.30719->nested_classes = D.30721;
            D.30707 = klass->image;
            D.30702 = klass->type_token;
            D.30716 = i + 1;
            D.30717 = (unsigned int) D.30716;
            D.30722 = mono_metadata_nesting_typedef (D.30707, D.30702, D.30717);
            i = (int) D.30722;
          }
        finally
          {
            cols = {CLOBBER};
          }
      }
      <D.21272>:
      if (i != 0) goto <D.21273>; else goto <D.21274>;
      <D.21274>:
      <D.30706>:
      mono_memory_barrier ();
      klass->nested_classes_inited = 1;
      mono_loader_unlock ();
      <D.30701>:
      D.30723 = *iter;
      if (D.30723 == 0B) goto <D.30724>; else goto <D.30725>;
      <D.30724>:
      D.30719 = klass->ext;
      if (D.30719 != 0B) goto <D.30727>; else goto <D.30726>;
      <D.30727>:
      D.30719 = klass->ext;
      D.30720 = D.30719->nested_classes;
      if (D.30720 != 0B) goto <D.30728>; else goto <D.30726>;
      <D.30728>:
      D.30719 = klass->ext;
      D.30720 = D.30719->nested_classes;
      *iter = D.30720;
      D.30719 = klass->ext;
      D.30720 = D.30719->nested_classes;
      D.30697 = D.30720->data;
      return D.30697;
      <D.30726>:
      D.30697 = 0B;
      return D.30697;
      <D.30725>:
      item = *iter;
      item = item->next;
      if (item != 0B) goto <D.30729>; else goto <D.30730>;
      <D.30729>:
      *iter = item;
      D.30697 = item->data;
      return D.30697;
      <D.30730>:
      D.30697 = 0B;
      return D.30697;
    }
  finally
    {
      error = {CLOBBER};
    }
}


mono_class_is_delegate (struct MonoClass * klass)
{
  mono_bool D.30735;
  <unnamed-unsigned:1> D.30736;

  D.30736 = klass->delegate;
  D.30735 = (mono_bool) D.30736;
  return D.30735;
}


mono_class_implements_interface (struct MonoClass * klass, struct MonoClass * iface)
{
  mono_bool D.30738;

  D.30738 = mono_class_is_assignable_from (iface, klass);
  return D.30738;
}


mono_field_get_name (struct MonoClassField * field)
{
  const char * D.30740;

  D.30740 = field->name;
  return D.30740;
}


mono_field_get_type (struct MonoClassField * field)
{
  int D.30742;
  const char * D.30745;
  struct MonoType * D.30746;
  struct MonoError error;
  struct MonoType * type;

  try
    {
      type = mono_field_get_type_checked (field, &error);
      D.30742 = mono_error_ok (&error);
      if (D.30742 == 0) goto <D.30743>; else goto <D.30744>;
      <D.30743>:
      D.30745 = mono_error_get_message (&error);
      mono_trace (16, 2, "Could not load field\'s type due to %s", D.30745);
      mono_error_cleanup (&error);
      <D.30744>:
      D.30746 = type;
      return D.30746;
    }
  finally
    {
      error = {CLOBBER};
    }
}


mono_field_get_type_checked (struct MonoClassField * field, struct MonoError * error)
{
  struct MonoType * D.30749;
  struct MonoType * D.30752;

  mono_error_init (error);
  D.30749 = field->type;
  if (D.30749 == 0B) goto <D.30750>; else goto <D.30751>;
  <D.30750>:
  mono_field_resolve_type (field, error);
  <D.30751>:
  D.30752 = field->type;
  return D.30752;
}


mono_field_get_parent (struct MonoClassField * field)
{
  struct MonoClass * D.30754;

  D.30754 = field->parent;
  return D.30754;
}


mono_field_get_flags (struct MonoClassField * field)
{
  struct MonoType * D.30756;
  uint32_t D.30759;
  short unsigned int D.30760;

  D.30756 = field->type;
  if (D.30756 == 0B) goto <D.30757>; else goto <D.30758>;
  <D.30757>:
  D.30759 = mono_field_resolve_flags (field);
  return D.30759;
  <D.30758>:
  D.30756 = field->type;
  D.30760 = D.30756->attrs;
  D.30759 = (uint32_t) D.30760;
  return D.30759;
}


mono_field_resolve_flags (struct MonoClassField * field)
{
  struct MonoClass * iftmp.447;
  struct MonoGenericClass * D.30763;
  int field.448;
  struct MonoClassField * D.30768;
  int D.30769;
  int D.30770;
  struct MonoClassField * D.30773;
  unsigned int field_idx.449;
  unsigned int D.30775;
  guint32 D.30776;
  unsigned int D.30777;
  unsigned int field_idx.450;
  unsigned int D.30779;
  unsigned int D.30780;
  unsigned int D.30781;
  _Bool D.30782;
  long int D.30783;
  long int D.30784;
  struct MonoClass * class;
  struct MonoImage * image;
  struct MonoClass * gtd;
  int field_idx;

  class = field->parent;
  image = class->image;
  D.30763 = class->generic_class;
  if (D.30763 != 0B) goto <D.30764>; else goto <D.30765>;
  <D.30764>:
  iftmp.447 = mono_class_get_generic_type_definition (class);
  goto <D.30766>;
  <D.30765>:
  iftmp.447 = 0B;
  <D.30766>:
  gtd = iftmp.447;
  field.448 = (int) field;
  D.30768 = class->fields;
  D.30769 = (int) D.30768;
  D.30770 = field.448 - D.30769;
  field_idx = D.30770 /[ex] 16;
  if (gtd != 0B) goto <D.30771>; else goto <D.30772>;
  <D.30771>:
  {
    struct MonoClassField * gfield;

    D.30773 = gtd->fields;
    field_idx.449 = (unsigned int) field_idx;
    D.30775 = field_idx.449 * 16;
    gfield = D.30773 + D.30775;
    D.30776 = mono_field_get_flags (gfield);
    return D.30776;
  }
  <D.30772>:
  {
    int idx;

    D.30777 = class->field.first;
    field_idx.450 = (unsigned int) field_idx;
    D.30779 = D.30777 + field_idx.450;
    idx = (int) D.30779;
    D.30780 = BIT_FIELD_REF <*image, 32, 128>;
    D.30781 = D.30780 & 8;
    D.30782 = D.30781 != 0;
    D.30783 = (long int) D.30782;
    D.30784 = __builtin_expect (D.30783, 0);
    if (D.30784 != 0) goto <D.30785>; else goto <D.30786>;
    <D.30785>:
    monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "class.c", 10164, "!image->dynamic");
    <D.30786>:
    D.30776 = mono_metadata_decode_table_row_col (image, 4, idx, 0);
    return D.30776;
  }
}


mono_field_get_offset (struct MonoClassField * field)
{
  uint32_t D.30788;
  int D.30789;

  D.30789 = field->offset;
  D.30788 = (uint32_t) D.30789;
  return D.30788;
}


mono_field_get_data (struct MonoClassField * field)
{
  struct MonoType * D.30791;
  short unsigned int D.30792;
  signed short D.30793;
  const char * D.30796;
  int D.30797;
  int D.30798;

  D.30791 = field->type;
  D.30792 = D.30791->attrs;
  D.30793 = (signed short) D.30792;
  if (D.30793 < 0) goto <D.30794>; else goto <D.30795>;
  <D.30794>:
  {
    MonoTypeEnum def_type;

    try
      {
        D.30796 = mono_class_get_field_default_value (field, &def_type);
        return D.30796;
      }
    finally
      {
        def_type = {CLOBBER};
      }
  }
  <D.30795>:
  D.30791 = field->type;
  D.30792 = D.30791->attrs;
  D.30797 = (int) D.30792;
  D.30798 = D.30797 & 256;
  if (D.30798 != 0) goto <D.30799>; else goto <D.30800>;
  <D.30799>:
  D.30796 = mono_field_get_rva (field);
  return D.30796;
  <D.30800>:
  D.30796 = 0B;
  return D.30796;
}


mono_field_get_rva (struct MonoClassField * field)
{
  struct MonoType * D.30803;
  short unsigned int D.30804;
  int D.30805;
  int D.30806;
  _Bool D.30807;
  long int D.30808;
  long int D.30809;
  struct MonoClassExt * D.30814;
  struct MonoFieldDefaultValue * D.30816;
  unsigned int D.30819;
  unsigned int D.30820;
  int D.30821;
  void * D.30822;
  unsigned int field_index.451;
  unsigned int D.30824;
  struct MonoFieldDefaultValue * D.30825;
  const char * D.30826;
  struct MonoImage * D.30829;
  unsigned int D.30830;
  unsigned int D.30831;
  struct MonoClass * D.30834;
  struct MonoImage * D.30835;
  unsigned int D.30836;
  unsigned int field_index.452;
  unsigned int D.30838;
  unsigned int rva.453;
  const char * D.30842;
  const char * D.30843;
  char * D.30844;
  const char * D.30845;
  guint32 rva;
  int field_index;
  struct MonoClass * klass;

  try
    {
      klass = field->parent;
      D.30803 = field->type;
      D.30804 = D.30803->attrs;
      D.30805 = (int) D.30804;
      D.30806 = D.30805 & 256;
      D.30807 = D.30806 == 0;
      D.30808 = (long int) D.30807;
      D.30809 = __builtin_expect (D.30808, 0);
      if (D.30809 != 0) goto <D.30810>; else goto <D.30811>;
      <D.30810>:
      monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "class.c", 9062, "field->type->attrs & FIELD_ATTRIBUTE_HAS_FIELD_RVA");
      <D.30811>:
      D.30814 = klass->ext;
      if (D.30814 == 0B) goto <D.30812>; else goto <D.30815>;
      <D.30815>:
      D.30814 = klass->ext;
      D.30816 = D.30814->field_def_values;
      if (D.30816 == 0B) goto <D.30812>; else goto <D.30813>;
      <D.30812>:
      mono_loader_lock ();
      mono_class_alloc_ext (klass);
      D.30814 = klass->ext;
      D.30816 = D.30814->field_def_values;
      if (D.30816 == 0B) goto <D.30817>; else goto <D.30818>;
      <D.30817>:
      D.30814 = klass->ext;
      D.30819 = klass->field.count;
      D.30820 = D.30819 * 8;
      D.30821 = (int) D.30820;
      D.30822 = mono_class_alloc0 (klass, D.30821);
      D.30814->field_def_values = D.30822;
      <D.30818>:
      mono_loader_unlock ();
      <D.30813>:
      field_index = mono_field_get_index (field);
      D.30814 = klass->ext;
      D.30816 = D.30814->field_def_values;
      field_index.451 = (unsigned int) field_index;
      D.30824 = field_index.451 * 8;
      D.30825 = D.30816 + D.30824;
      D.30826 = D.30825->data;
      if (D.30826 == 0B) goto <D.30827>; else goto <D.30828>;
      <D.30827>:
      D.30829 = klass->image;
      D.30830 = BIT_FIELD_REF <*D.30829, 32, 128>;
      D.30831 = D.30830 & 8;
      if (D.30831 == 0) goto <D.30832>; else goto <D.30833>;
      <D.30832>:
      D.30834 = field->parent;
      D.30835 = D.30834->image;
      D.30836 = klass->field.first;
      field_index.452 = (unsigned int) field_index;
      D.30838 = D.30836 + field_index.452;
      mono_metadata_field_info (D.30835, D.30838, 0B, &rva, 0B);
      rva.453 = rva;
      if (rva.453 == 0) goto <D.30840>; else goto <D.30841>;
      <D.30840>:
      D.30842 = mono_field_get_name (field);
      D.30834 = field->parent;
      D.30843 = D.30834->name;
      monoeg_g_log (0B, 16, "field %s in %s should have RVA data, but hasn\'t", D.30842, D.30843);
      <D.30841>:
      D.30814 = klass->ext;
      D.30816 = D.30814->field_def_values;
      field_index.451 = (unsigned int) field_index;
      D.30824 = field_index.451 * 8;
      D.30825 = D.30816 + D.30824;
      D.30834 = field->parent;
      D.30835 = D.30834->image;
      rva.453 = rva;
      D.30844 = mono_image_rva_map (D.30835, rva.453);
      D.30825->data = D.30844;
      <D.30833>:
      <D.30828>:
      D.30814 = klass->ext;
      D.30816 = D.30814->field_def_values;
      field_index.451 = (unsigned int) field_index;
      D.30824 = field_index.451 * 8;
      D.30825 = D.30816 + D.30824;
      D.30845 = D.30825->data;
      return D.30845;
    }
  finally
    {
      rva = {CLOBBER};
    }
}


mono_property_get_name (struct MonoProperty * prop)
{
  const char * D.30848;

  D.30848 = prop->name;
  return D.30848;
}


mono_property_get_set_method (struct MonoProperty * prop)
{
  struct MonoMethod * D.30850;

  D.30850 = prop->set;
  return D.30850;
}


mono_property_get_get_method (struct MonoProperty * prop)
{
  struct MonoMethod * D.30852;

  D.30852 = prop->get;
  return D.30852;
}


mono_property_get_parent (struct MonoProperty * prop)
{
  struct MonoClass * D.30854;

  D.30854 = prop->parent;
  return D.30854;
}


mono_property_get_flags (struct MonoProperty * prop)
{
  uint32_t D.30856;

  D.30856 = prop->attrs;
  return D.30856;
}


mono_event_get_name (struct MonoEvent * event)
{
  const char * D.30858;

  D.30858 = event->name;
  return D.30858;
}


mono_event_get_add_method (struct MonoEvent * event)
{
  struct MonoMethod * D.30860;

  D.30860 = event->add;
  return D.30860;
}


mono_event_get_remove_method (struct MonoEvent * event)
{
  struct MonoMethod * D.30862;

  D.30862 = event->remove;
  return D.30862;
}


mono_event_get_raise_method (struct MonoEvent * event)
{
  struct MonoMethod * D.30864;

  D.30864 = event->raise;
  return D.30864;
}


mono_event_get_parent (struct MonoEvent * event)
{
  struct MonoClass * D.30866;

  D.30866 = event->parent;
  return D.30866;
}


mono_event_get_flags (struct MonoEvent * event)
{
  uint32_t D.30868;

  D.30868 = event->attrs;
  return D.30868;
}


mono_class_get_method_from_name (struct MonoClass * klass, const char * name, int param_count)
{
  struct MonoMethod * D.30870;

  D.30870 = mono_class_get_method_from_name_flags (klass, name, param_count, 0);
  return D.30870;
}


mono_class_get_method_from_name_flags (struct MonoClass * klass, const char * name, int param_count, int flags)
{
  struct MonoGenericClass * D.30872;
  struct MonoMethod * * D.30875;
  struct MonoClass * D.30878;
  struct MonoGenericContext * D.30881;
  struct MonoMethod * D.30882;
  unsigned int D.30887;
  struct MonoImage * D.30889;
  unsigned int D.30890;
  unsigned int D.30891;
  unsigned int i.454;
  unsigned int D.30896;
  struct MonoMethod * * D.30897;
  const char * D.30900;
  char D.30901;
  char D.30902;
  int D.21391;
  struct MonoMethodSignature * D.30908;
  short unsigned int D.30909;
  int D.30910;
  short unsigned int D.30911;
  int D.30912;
  int D.30913;
  unsigned int i.455;
  unsigned int D.30917;
  struct MonoMethod * res;
  int i;

  res = 0B;
  mono_class_init (klass);
  D.30872 = klass->generic_class;
  if (D.30872 != 0B) goto <D.30873>; else goto <D.30874>;
  <D.30873>:
  D.30875 = klass->methods;
  if (D.30875 == 0B) goto <D.30876>; else goto <D.30877>;
  <D.30876>:
  D.30872 = klass->generic_class;
  D.30878 = D.30872->container_class;
  res = mono_class_get_method_from_name_flags (D.30878, name, param_count, flags);
  if (res != 0B) goto <D.30879>; else goto <D.30880>;
  <D.30879>:
  D.30881 = mono_class_get_context (klass);
  res = mono_class_inflate_generic_method_full (res, klass, D.30881);
  <D.30880>:
  D.30882 = res;
  return D.30882;
  <D.30877>:
  <D.30874>:
  D.30875 = klass->methods;
  if (D.30875 != 0B) goto <D.30883>; else goto <D.30886>;
  <D.30886>:
  D.30887 = klass->type_token;
  if (D.30887 == 0) goto <D.30883>; else goto <D.30888>;
  <D.30888>:
  D.30889 = klass->image;
  D.30890 = BIT_FIELD_REF <*D.30889, 32, 128>;
  D.30891 = D.30890 & 8;
  if (D.30891 != 0) goto <D.30883>; else goto <D.30892>;
  <D.30892>:
  D.30872 = klass->generic_class;
  if (D.30872 != 0B) goto <D.30883>; else goto <D.30884>;
  <D.30883>:
  mono_class_setup_methods (klass);
  D.30875 = klass->methods;
  if (D.30875 == 0B) goto <D.30893>; else goto <D.30894>;
  <D.30893>:
  D.30882 = 0B;
  return D.30882;
  <D.30894>:
  i = 0;
  goto <D.21394>;
  <D.21393>:
  {
    struct MonoMethod * method;

    D.30875 = klass->methods;
    i.454 = (unsigned int) i;
    D.30896 = i.454 * 4;
    D.30897 = D.30875 + D.30896;
    method = *D.30897;
    D.30900 = method->name;
    D.30901 = *D.30900;
    D.30902 = *name;
    if (D.30901 == D.30902) goto <D.30903>; else goto <D.30904>;
    <D.30903>:
    {
      size_t __s1_len;
      size_t __s2_len;

      D.30900 = method->name;
      D.21391 = __builtin_strcmp (name, D.30900);
    }
    if (D.21391 == 0) goto <D.30905>; else goto <D.30906>;
    <D.30905>:
    if (param_count == -1) goto <D.30898>; else goto <D.30907>;
    <D.30907>:
    D.30908 = mono_method_signature (method);
    D.30909 = D.30908->param_count;
    D.30910 = (int) D.30909;
    if (D.30910 == param_count) goto <D.30898>; else goto <D.30899>;
    <D.30898>:
    D.30911 = method->flags;
    D.30912 = (int) D.30911;
    D.30913 = D.30912 & flags;
    if (D.30913 == flags) goto <D.30914>; else goto <D.30915>;
    <D.30914>:
    res = method;
    goto <D.21392>;
    <D.30915>:
    <D.30899>:
    <D.30906>:
    <D.30904>:
  }
  i = i + 1;
  <D.21394>:
  i.455 = (unsigned int) i;
  D.30917 = klass->method.count;
  if (i.455 < D.30917) goto <D.21393>; else goto <D.21392>;
  <D.21392>:
  goto <D.30885>;
  <D.30884>:
  res = find_method_in_metadata (klass, name, param_count, flags);
  <D.30885>:
  D.30882 = res;
  return D.30882;
}


mono_class_set_failure (struct MonoClass * klass, guint32 ex_type, void * ex_data)
{
  unsigned char D.30919;
  gboolean D.30922;
  unsigned char D.30923;
  struct MonoImage * D.30926;

  D.30919 = klass->exception_type;
  if (D.30919 != 0) goto <D.30920>; else goto <D.30921>;
  <D.30920>:
  D.30922 = 0;
  return D.30922;
  <D.30921>:
  mono_loader_lock ();
  D.30923 = (unsigned char) ex_type;
  klass->exception_type = D.30923;
  if (ex_data != 0B) goto <D.30924>; else goto <D.30925>;
  <D.30924>:
  D.30926 = klass->image;
  mono_image_property_insert (D.30926, klass, 0, ex_data);
  <D.30925>:
  mono_loader_unlock ();
  D.30922 = 1;
  return D.30922;
}


mono_class_get_exception_data (struct MonoClass * klass)
{
  void * D.30928;
  struct MonoImage * D.30929;

  D.30929 = klass->image;
  D.30928 = mono_image_property_lookup (D.30929, klass, 0);
  return D.30928;
}


mono_classes_init ()
{
  mono_counters_register ("Inflated methods size", 2048, &inflated_methods_size);
  mono_counters_register ("Inflated classes", 2048, &inflated_classes);
  mono_counters_register ("Inflated classes size", 2048, &inflated_classes_size);
  mono_counters_register ("MonoClass size", 1024, &classes_size);
  mono_counters_register ("MonoClassExt size", 1024, &class_ext_size);
}


mono_classes_cleanup ()
{
  struct MonoBitSet * global_interface_bitset.456;

  global_interface_bitset.456 = global_interface_bitset;
  if (global_interface_bitset.456 != 0B) goto <D.30932>; else goto <D.30933>;
  <D.30932>:
  global_interface_bitset.456 = global_interface_bitset;
  mono_bitset_free (global_interface_bitset.456);
  <D.30933>:
  global_interface_bitset = 0B;
}


mono_class_get_exception_for_failure (struct MonoClass * klass)
{
  unsigned char D.30934;
  int D.30935;
  guint32 iftmp.457;
  struct MonoImage * D.30940;
  struct MonoAssembly * D.30941;
  struct MonoReflectionAssembly * D.30942;
  struct MonoType * D.30943;
  struct MonoReflectionType * D.30944;
  void * iftmp.458;
  struct MonoMethod * D.30949;
  struct MonoException * D.30950;
  char * iftmp.459;
  struct MonoAssembly * D.30952;
  struct MonoAssemblyName * D.30955;
  struct MonoDomain * D.30957;
  unsigned int D.30958;
  sizetype D.30959;
  unsigned int D.30960;
  sizetype D.30961;
  unsigned int D.30962;
  sizetype D.30963;
  struct MonoDomain * D.30964;
  struct MonoString * D.30965;
  void * exception_data;

  exception_data = mono_class_get_exception_data (klass);
  D.30934 = klass->exception_type;
  D.30935 = (int) D.30934;
  switch (D.30935) <default: <D.21437>, case 2: <D.21413>, case 5: <D.21425>, case 6: <D.21428>, case 7: <D.21420>, case 8: <D.21431>, case 12: <D.21436>>
  <D.21413>:
  {
    struct MonoDomain * domain;
    struct MonoSecurityManager * secman;
    struct MonoMethod * method;
    guint32 error;
    struct MonoObject * exc;
    void * args[4];

    try
      {
        domain = mono_domain_get ();
        secman = mono_security_manager_get_methods ();
        method = exception_data;
        if (method != 0B) goto <D.30937>; else goto <D.30938>;
        <D.30937>:
        iftmp.457 = 2;
        goto <D.30939>;
        <D.30938>:
        iftmp.457 = 1;
        <D.30939>:
        error = iftmp.457;
        exc = 0B;
        args[0] = &error;
        D.30940 = klass->image;
        D.30941 = mono_image_get_assembly (D.30940);
        D.30942 = mono_assembly_get_object (domain, D.30941);
        args[1] = D.30942;
        D.30943 = &klass->byval_arg;
        D.30944 = mono_type_get_object (domain, D.30943);
        args[2] = D.30944;
        if (method != 0B) goto <D.30946>; else goto <D.30947>;
        <D.30946>:
        iftmp.458 = mono_method_get_object (domain, method, 0B);
        goto <D.30948>;
        <D.30947>:
        iftmp.458 = 0B;
        <D.30948>:
        args[3] = iftmp.458;
        D.30949 = secman->inheritsecurityexception;
        mono_runtime_invoke (D.30949, 0B, &args, &exc);
        D.30950 = exc;
        return D.30950;
      }
    finally
      {
        error = {CLOBBER};
        exc = {CLOBBER};
        args = {CLOBBER};
      }
  }
  <D.21420>:
  {
    struct MonoString * name;
    struct MonoException * ex;
    char * str;
    char * astr;

    str = mono_type_get_full_name (klass);
    D.30940 = klass->image;
    D.30952 = D.30940->assembly;
    if (D.30952 != 0B) goto <D.30953>; else goto <D.30954>;
    <D.30953>:
    D.30940 = klass->image;
    D.30952 = D.30940->assembly;
    D.30955 = &D.30952->aname;
    iftmp.459 = mono_stringify_assembly_name (D.30955);
    goto <D.30956>;
    <D.30954>:
    iftmp.459 = 0B;
    <D.30956>:
    astr = iftmp.459;
    D.30957 = mono_domain_get ();
    name = mono_string_new (D.30957, str);
    monoeg_g_free (str);
    ex = mono_get_exception_type_load (name, astr);
    monoeg_g_free (astr);
    D.30950 = ex;
    return D.30950;
  }
  <D.21425>:
  {
    char * class_name;
    char * assembly_name;

    class_name = exception_data;
    D.30958 = strlen (class_name);
    D.30959 = D.30958 + 1;
    assembly_name = class_name + D.30959;
    D.30950 = mono_get_exception_missing_method (class_name, assembly_name);
    return D.30950;
  }
  <D.21428>:
  {
    char * class_name;
    char * member_name;

    class_name = exception_data;
    D.30960 = strlen (class_name);
    D.30961 = D.30960 + 1;
    member_name = class_name + D.30961;
    D.30950 = mono_get_exception_missing_field (class_name, member_name);
    return D.30950;
  }
  <D.21431>:
  {
    char * msg_format;
    char * assembly_name;
    char * msg;
    struct MonoException * ex;

    msg_format = exception_data;
    D.30962 = strlen (msg_format);
    D.30963 = D.30962 + 1;
    assembly_name = msg_format + D.30963;
    msg = monoeg_g_strdup_printf (msg_format, assembly_name);
    D.30964 = mono_domain_get ();
    D.30965 = mono_string_new (D.30964, assembly_name);
    ex = mono_get_exception_file_not_found2 (msg, D.30965);
    monoeg_g_free (msg);
    D.30950 = ex;
    return D.30950;
  }
  <D.21436>:
  D.30950 = mono_get_exception_bad_image_format (exception_data);
  return D.30950;
  <D.21437>:
  {
    struct MonoLoaderError * error;
    struct MonoException * ex;

    error = mono_loader_get_last_error ();
    if (error != 0B) goto <D.30966>; else goto <D.30967>;
    <D.30966>:
    ex = mono_loader_error_prepare_exception (error);
    D.30950 = ex;
    return D.30950;
    <D.30967>:
    D.30950 = 0B;
    return D.30950;
  }
}


mono_class_get_generic_type_definition (struct MonoClass * klass)
{
  struct MonoClass * D.30970;
  struct MonoClass * iftmp.460;
  struct MonoGenericClass * D.30972;

  D.30972 = klass->generic_class;
  if (D.30972 != 0B) goto <D.30973>; else goto <D.30974>;
  <D.30973>:
  D.30972 = klass->generic_class;
  iftmp.460 = D.30972->container_class;
  goto <D.30975>;
  <D.30974>:
  iftmp.460 = klass;
  <D.30975>:
  D.30970 = iftmp.460;
  return D.30970;
}


mono_class_has_parent_and_ignore_generics (struct MonoClass * klass, struct MonoClass * parent)
{
  struct MonoClass * * D.30977;
  unsigned int i.461;
  unsigned int D.30979;
  struct MonoClass * * D.30980;
  struct MonoClass * D.30981;
  struct MonoClass * D.30982;
  gboolean D.30985;
  short unsigned int D.30986;
  int D.30987;
  int i;

  klass = mono_class_get_generic_type_definition (klass);
  parent = mono_class_get_generic_type_definition (parent);
  mono_class_setup_supertypes (klass);
  i = 0;
  goto <D.21455>;
  <D.21454>:
  D.30977 = klass->supertypes;
  i.461 = (unsigned int) i;
  D.30979 = i.461 * 4;
  D.30980 = D.30977 + D.30979;
  D.30981 = *D.30980;
  D.30982 = mono_class_get_generic_type_definition (D.30981);
  if (D.30982 == parent) goto <D.30983>; else goto <D.30984>;
  <D.30983>:
  D.30985 = 1;
  return D.30985;
  <D.30984>:
  i = i + 1;
  <D.21455>:
  D.30986 = klass->idepth;
  D.30987 = (int) D.30986;
  if (D.30987 > i) goto <D.21454>; else goto <D.21456>;
  <D.21456>:
  D.30985 = 0;
  return D.30985;
}


mono_method_can_access_field (struct MonoMethod * method, struct MonoClassField * field)
{
  struct MonoClass * D.30989;
  struct MonoClass * D.30990;
  struct MonoType * D.30991;
  short unsigned int D.30992;
  int D.30993;
  int D.30994;
  struct MonoType * D.30997;
  short unsigned int D.30998;
  int D.30999;
  int D.31000;
  mono_bool D.31003;
  int can;

  D.30989 = method->klass;
  D.30990 = field->parent;
  D.30991 = mono_field_get_type (field);
  D.30992 = D.30991->attrs;
  D.30993 = (int) D.30992;
  D.30994 = D.30993 & 7;
  can = can_access_member (D.30989, D.30990, 0B, D.30994);
  if (can == 0) goto <D.30995>; else goto <D.30996>;
  <D.30995>:
  {
    struct MonoClass * nested;

    D.30989 = method->klass;
    nested = D.30989->nested_in;
    goto <D.21538>;
    <D.21537>:
    D.30990 = field->parent;
    D.30997 = mono_field_get_type (field);
    D.30998 = D.30997->attrs;
    D.30999 = (int) D.30998;
    D.31000 = D.30999 & 7;
    can = can_access_member (nested, D.30990, 0B, D.31000);
    if (can != 0) goto <D.31001>; else goto <D.31002>;
    <D.31001>:
    D.31003 = 1;
    return D.31003;
    <D.31002>:
    nested = nested->nested_in;
    <D.21538>:
    if (nested != 0B) goto <D.21537>; else goto <D.21539>;
    <D.21539>:
  }
  <D.30996>:
  D.31003 = can;
  return D.31003;
}


can_access_member (struct MonoClass * access_klass, struct MonoClass * member_klass, struct MonoClass * context_klass, int access_level)
{
  struct MonoImage * D.31005;
  struct MonoAssembly * D.31006;
  unsigned char D.31009;
  gboolean D.31012;
  struct MonoGenericClass * D.31016;
  struct MonoClass * D.31018;
  struct MonoGenericContainer * D.31019;
  int D.31025;
  struct MonoImage * D.31028;
  _Bool D.31029;
  _Bool D.31030;
  int D.31031;
  struct MonoAssembly * D.31034;
  int D.31035;
  int D.31038;
  int D.31041;
  struct MonoClass * member_generic_def;

  D.31005 = access_klass->image;
  D.31006 = D.31005->assembly;
  if (D.31006 != 0B) goto <D.31007>; else goto <D.31008>;
  <D.31007>:
  D.31005 = access_klass->image;
  D.31006 = D.31005->assembly;
  D.31009 = D.31006->corlib_internal;
  if (D.31009 != 0) goto <D.31010>; else goto <D.31011>;
  <D.31010>:
  D.31012 = 1;
  return D.31012;
  <D.31011>:
  <D.31008>:
  D.31016 = access_klass->generic_class;
  if (D.31016 != 0B) goto <D.31017>; else goto <D.31013>;
  <D.31017>:
  D.31016 = access_klass->generic_class;
  D.31018 = D.31016->container_class;
  if (D.31018 != 0B) goto <D.31014>; else goto <D.31013>;
  <D.31013>:
  D.31019 = access_klass->generic_container;
  if (D.31019 != 0B) goto <D.31014>; else goto <D.31015>;
  <D.31014>:
  member_generic_def = get_generic_definition_class (member_klass);
  if (member_generic_def != 0B) goto <D.31020>; else goto <D.31021>;
  <D.31020>:
  {
    struct MonoClass * access_container;

    D.31019 = access_klass->generic_container;
    if (D.31019 != 0B) goto <D.31022>; else goto <D.31023>;
    <D.31022>:
    access_container = access_klass;
    goto <D.31024>;
    <D.31023>:
    D.31016 = access_klass->generic_class;
    access_container = D.31016->container_class;
    <D.31024>:
    D.31025 = can_access_member (access_container, member_generic_def, context_klass, access_level);
    if (D.31025 != 0) goto <D.31026>; else goto <D.31027>;
    <D.31026>:
    D.31012 = 1;
    return D.31012;
    <D.31027>:
  }
  <D.31021>:
  <D.31015>:
  switch (access_level) <default: <D.31044>, case 0: <D.21524>, case 1: <D.21525>, case 2: <D.21526>, case 3: <D.21527>, case 4: <D.21528>, case 5: <D.21529>, case 6: <D.21530>>
  <D.21524>:
  D.31005 = access_klass->image;
  D.31028 = member_klass->image;
  D.31029 = D.31005 == D.31028;
  D.31012 = (gboolean) D.31029;
  return D.31012;
  <D.21525>:
  D.31030 = access_klass == member_klass;
  D.31012 = (gboolean) D.31030;
  return D.31012;
  <D.21526>:
  D.31031 = is_valid_family_access (access_klass, member_klass, context_klass);
  if (D.31031 != 0) goto <D.31032>; else goto <D.31033>;
  <D.31032>:
  D.31005 = access_klass->image;
  D.31006 = D.31005->assembly;
  D.31028 = member_klass->image;
  D.31034 = D.31028->assembly;
  D.31035 = can_access_internals (D.31006, D.31034);
  if (D.31035 != 0) goto <D.31036>; else goto <D.31037>;
  <D.31036>:
  D.31012 = 1;
  return D.31012;
  <D.31037>:
  <D.31033>:
  D.31012 = 0;
  return D.31012;
  <D.21527>:
  D.31005 = access_klass->image;
  D.31006 = D.31005->assembly;
  D.31028 = member_klass->image;
  D.31034 = D.31028->assembly;
  D.31012 = can_access_internals (D.31006, D.31034);
  return D.31012;
  <D.21528>:
  D.31038 = is_valid_family_access (access_klass, member_klass, context_klass);
  if (D.31038 != 0) goto <D.31039>; else goto <D.31040>;
  <D.31039>:
  D.31012 = 1;
  return D.31012;
  <D.31040>:
  D.31012 = 0;
  return D.31012;
  <D.21529>:
  D.31041 = is_valid_family_access (access_klass, member_klass, context_klass);
  if (D.31041 != 0) goto <D.31042>; else goto <D.31043>;
  <D.31042>:
  D.31012 = 1;
  return D.31012;
  <D.31043>:
  D.31005 = access_klass->image;
  D.31006 = D.31005->assembly;
  D.31028 = member_klass->image;
  D.31034 = D.31028->assembly;
  D.31012 = can_access_internals (D.31006, D.31034);
  return D.31012;
  <D.21530>:
  D.31012 = 1;
  return D.31012;
  <D.31044>:
  D.31012 = 0;
  return D.31012;
}


get_generic_definition_class (struct MonoClass * klass)
{
  struct MonoGenericClass * D.31046;
  struct MonoClass * D.31049;
  struct MonoClass * D.31052;

  goto <D.21485>;
  <D.21484>:
  D.31046 = klass->generic_class;
  if (D.31046 != 0B) goto <D.31047>; else goto <D.31048>;
  <D.31047>:
  D.31046 = klass->generic_class;
  D.31049 = D.31046->container_class;
  if (D.31049 != 0B) goto <D.31050>; else goto <D.31051>;
  <D.31050>:
  D.31046 = klass->generic_class;
  D.31052 = D.31046->container_class;
  return D.31052;
  <D.31051>:
  <D.31048>:
  klass = klass->parent;
  <D.21485>:
  if (klass != 0B) goto <D.21484>; else goto <D.21486>;
  <D.21486>:
  D.31052 = 0B;
  return D.31052;
}


is_valid_family_access (struct MonoClass * access_klass, struct MonoClass * member_klass, struct MonoClass * context_klass)
{
  int D.31054;
  gboolean D.31057;
  int D.31062;

  D.31054 = mono_class_has_parent_and_ignore_generics (access_klass, member_klass);
  if (D.31054 == 0) goto <D.31055>; else goto <D.31056>;
  <D.31055>:
  D.31057 = 0;
  return D.31057;
  <D.31056>:
  if (context_klass == 0B) goto <D.31058>; else goto <D.31059>;
  <D.31058>:
  D.31057 = 1;
  return D.31057;
  <D.31059>:
  if (access_klass != member_klass) goto <D.31060>; else goto <D.31061>;
  <D.31060>:
  D.31062 = mono_class_has_parent_and_ignore_generics (context_klass, access_klass);
  if (D.31062 == 0) goto <D.31063>; else goto <D.31064>;
  <D.31063>:
  D.31057 = 0;
  return D.31057;
  <D.31064>:
  <D.31061>:
  D.31057 = 1;
  return D.31057;
}


can_access_internals (struct MonoAssembly * accessing, struct MonoAssembly * accessed)
{
  gboolean D.31068;
  <unnamed type> D.31072;
  struct MonoImage * D.31075;
  struct MonoImage * D.31076;
  int D.31077;
  const char * D.31080;
  int D.21477;
  const char * D.31083;
  unsigned char D.31086;
  unsigned char D.31089;
  mono_byte[17] * D.31092;
  mono_byte[17] * D.31093;
  int D.31094;
  struct GSList * tmp;

  if (accessing == accessed) goto <D.31066>; else goto <D.31067>;
  <D.31066>:
  D.31068 = 1;
  return D.31068;
  <D.31067>:
  if (accessed == 0B) goto <D.31069>; else goto <D.31071>;
  <D.31071>:
  if (accessing == 0B) goto <D.31069>; else goto <D.31070>;
  <D.31069>:
  D.31068 = 0;
  return D.31068;
  <D.31070>:
  D.31072 = mono_security_get_mode ();
  if (D.31072 == 1) goto <D.31073>; else goto <D.31074>;
  <D.31073>:
  D.31075 = accessing->image;
  D.31076 = accessed->image;
  D.31077 = mono_security_core_clr_can_access_internals (D.31075, D.31076);
  if (D.31077 == 0) goto <D.31078>; else goto <D.31079>;
  <D.31078>:
  D.31068 = 0;
  return D.31068;
  <D.31079>:
  <D.31074>:
  mono_assembly_load_friends (accessed);
  tmp = accessed->friend_assembly_names;
  goto <D.21479>;
  <D.21478>:
  {
    struct MonoAssemblyName * friend;

    friend = tmp->data;
    D.31080 = friend->name;
    if (D.31080 == 0B) goto <D.31081>; else goto <D.31082>;
    <D.31081>:
    // predicted unlikely by continue predictor.
    goto <D.21468>;
    <D.31082>:
    {
      size_t __s1_len;
      size_t __s2_len;

      D.31083 = accessing->aname.name;
      D.31080 = friend->name;
      D.21477 = __builtin_strcmp (D.31083, D.31080);
    }
    if (D.21477 != 0) goto <D.31084>; else goto <D.31085>;
    <D.31084>:
    // predicted unlikely by continue predictor.
    goto <D.21468>;
    <D.31085>:
    D.31086 = friend->public_key_token[0];
    if (D.31086 != 0) goto <D.31087>; else goto <D.31088>;
    <D.31087>:
    D.31089 = accessing->aname.public_key_token[0];
    if (D.31089 == 0) goto <D.31090>; else goto <D.31091>;
    <D.31090>:
    // predicted unlikely by continue predictor.
    goto <D.21468>;
    <D.31091>:
    D.31092 = &friend->public_key_token;
    D.31093 = &accessing->aname.public_key_token;
    D.31094 = mono_public_tokens_are_equal (D.31092, D.31093);
    if (D.31094 == 0) goto <D.31095>; else goto <D.31096>;
    <D.31095>:
    // predicted unlikely by continue predictor.
    goto <D.21468>;
    <D.31096>:
    <D.31088>:
    D.31068 = 1;
    return D.31068;
  }
  <D.21468>:
  tmp = tmp->next;
  <D.21479>:
  if (tmp != 0B) goto <D.21478>; else goto <D.21480>;
  <D.21480>:
  D.31068 = 0;
  return D.31068;
}


mono_method_can_access_method (struct MonoMethod * method, struct MonoMethod * called)
{
  struct MonoClass * D.31098;
  struct MonoClass * D.31099;
  short unsigned int D.31100;
  int D.31101;
  int D.31102;
  mono_bool D.31107;
  unsigned int D.31108;
  unsigned int D.31109;
  int can;

  D.31098 = method->klass;
  D.31099 = called->klass;
  D.31100 = called->flags;
  D.31101 = (int) D.31100;
  D.31102 = D.31101 & 7;
  can = can_access_member (D.31098, D.31099, 0B, D.31102);
  if (can == 0) goto <D.31103>; else goto <D.31104>;
  <D.31103>:
  {
    struct MonoClass * nested;

    D.31098 = method->klass;
    nested = D.31098->nested_in;
    goto <D.21547>;
    <D.21546>:
    D.31099 = called->klass;
    D.31100 = called->flags;
    D.31101 = (int) D.31100;
    D.31102 = D.31101 & 7;
    can = can_access_member (nested, D.31099, 0B, D.31102);
    if (can != 0) goto <D.31105>; else goto <D.31106>;
    <D.31105>:
    D.31107 = 1;
    return D.31107;
    <D.31106>:
    nested = nested->nested_in;
    <D.21547>:
    if (nested != 0B) goto <D.21546>; else goto <D.21548>;
    <D.21548>:
  }
  <D.31104>:
  D.31100 = called->flags;
  D.31108 = (unsigned int) D.31100;
  D.31109 = D.31108 & 96;
  if (D.31109 == 96) goto <D.31110>; else goto <D.31111>;
  <D.31110>:
  D.31107 = 1;
  return D.31107;
  <D.31111>:
  D.31107 = can;
  return D.31107;
}


mono_method_can_access_method_full (struct MonoMethod * method, struct MonoMethod * called, struct MonoClass * context_klass)
{
  short unsigned int D.31113;
  int D.31114;
  int D.31115;
  gboolean D.31121;
  unsigned int D.31127;
  unsigned int D.31128;
  struct MonoGenericInst * D.31131;
  int D.31134;
  struct MonoClass * access_class;
  struct MonoClass * member_class;
  int can;

  access_class = method->klass;
  member_class = called->klass;
  D.31113 = called->flags;
  D.31114 = (int) D.31113;
  D.31115 = D.31114 & 7;
  can = can_access_member (access_class, member_class, context_klass, D.31115);
  if (can == 0) goto <D.31116>; else goto <D.31117>;
  <D.31116>:
  {
    struct MonoClass * nested;

    nested = access_class->nested_in;
    goto <D.21560>;
    <D.21559>:
    D.31113 = called->flags;
    D.31114 = (int) D.31113;
    D.31115 = D.31114 & 7;
    can = can_access_member (nested, member_class, context_klass, D.31115);
    if (can != 0) goto <D.21558>; else goto <D.31118>;
    <D.31118>:
    nested = nested->nested_in;
    <D.21560>:
    if (nested != 0B) goto <D.21559>; else goto <D.21558>;
    <D.21558>:
  }
  <D.31117>:
  if (can == 0) goto <D.31119>; else goto <D.31120>;
  <D.31119>:
  D.31121 = 0;
  return D.31121;
  <D.31120>:
  can = can_access_type (access_class, member_class);
  if (can == 0) goto <D.31122>; else goto <D.31123>;
  <D.31122>:
  {
    struct MonoClass * nested;

    nested = access_class->nested_in;
    goto <D.21564>;
    <D.21563>:
    can = can_access_type (nested, member_class);
    if (can != 0) goto <D.21562>; else goto <D.31124>;
    <D.31124>:
    nested = nested->nested_in;
    <D.21564>:
    if (nested != 0B) goto <D.21563>; else goto <D.21562>;
    <D.21562>:
  }
  <D.31123>:
  if (can == 0) goto <D.31125>; else goto <D.31126>;
  <D.31125>:
  D.31121 = 0;
  return D.31121;
  <D.31126>:
  D.31127 = BIT_FIELD_REF <*called, 32, 160>;
  D.31128 = D.31127 & 4096;
  if (D.31128 != 0) goto <D.31129>; else goto <D.31130>;
  <D.31129>:
  {
    struct MonoMethodInflated * infl;

    infl = called;
    D.31131 = infl->context.method_inst;
    if (D.31131 != 0B) goto <D.31132>; else goto <D.31133>;
    <D.31132>:
    D.31131 = infl->context.method_inst;
    D.31134 = can_access_instantiation (access_class, D.31131);
    if (D.31134 == 0) goto <D.31135>; else goto <D.31136>;
    <D.31135>:
    D.31121 = 0;
    return D.31121;
    <D.31136>:
    <D.31133>:
  }
  <D.31130>:
  D.31121 = 1;
  return D.31121;
}


can_access_type (struct MonoClass * access_klass, struct MonoClass * member_klass)
{
  struct MonoImage * D.31138;
  struct MonoAssembly * D.31139;
  unsigned char D.31142;
  gboolean D.31145;
  struct MonoClass * D.31146;
  unsigned int D.31149;
  unsigned int D.31150;
  struct MonoClass * D.31153;
  unsigned int D.31156;
  unsigned int D.31157;
  unsigned int D.31160;
  int D.31161;
  unsigned char D.31164;
  struct MonoGenericClass * D.31166;
  struct MonoGenericInst * D.31169;
  int D.31170;
  int D.31175;
  struct MonoClass * D.31177;
  int D.31179;
  struct MonoClass * D.31180;
  int D.31183;
  unsigned int access_level.462;
  unsigned int D.31187;
  struct MonoImage * D.31192;
  struct MonoAssembly * D.31193;
  int iftmp.463;
  struct MonoImage * D.31197;
  struct MonoAssembly * D.31198;
  int D.31199;
  int D.31201;
  int iftmp.464;
  int D.31207;
  int D.31209;
  int access_level;

  D.31138 = access_klass->image;
  D.31139 = D.31138->assembly;
  if (D.31139 != 0B) goto <D.31140>; else goto <D.31141>;
  <D.31140>:
  D.31138 = access_klass->image;
  D.31139 = D.31138->assembly;
  D.31142 = D.31139->corlib_internal;
  if (D.31142 != 0) goto <D.31143>; else goto <D.31144>;
  <D.31143>:
  D.31145 = 1;
  return D.31145;
  <D.31144>:
  <D.31141>:
  D.31146 = access_klass->element_class;
  if (D.31146 != 0B) goto <D.31147>; else goto <D.31148>;
  <D.31147>:
  D.31149 = BIT_FIELD_REF <*access_klass, 32, 160>;
  D.31150 = D.31149 & 16;
  if (D.31150 == 0) goto <D.31151>; else goto <D.31152>;
  <D.31151>:
  access_klass = access_klass->element_class;
  <D.31152>:
  <D.31148>:
  D.31153 = member_klass->element_class;
  if (D.31153 != 0B) goto <D.31154>; else goto <D.31155>;
  <D.31154>:
  D.31156 = BIT_FIELD_REF <*member_klass, 32, 160>;
  D.31157 = D.31156 & 16;
  if (D.31157 == 0) goto <D.31158>; else goto <D.31159>;
  <D.31158>:
  member_klass = member_klass->element_class;
  <D.31159>:
  <D.31155>:
  D.31160 = member_klass->flags;
  D.31161 = (int) D.31160;
  access_level = D.31161 & 7;
  D.31164 = member_klass->byval_arg.type;
  if (D.31164 == 19) goto <D.31162>; else goto <D.31165>;
  <D.31165>:
  D.31164 = member_klass->byval_arg.type;
  if (D.31164 == 30) goto <D.31162>; else goto <D.31163>;
  <D.31162>:
  D.31145 = 1;
  return D.31145;
  <D.31163>:
  D.31166 = member_klass->generic_class;
  if (D.31166 != 0B) goto <D.31167>; else goto <D.31168>;
  <D.31167>:
  D.31166 = member_klass->generic_class;
  D.31169 = D.31166->context.class_inst;
  D.31170 = can_access_instantiation (access_klass, D.31169);
  if (D.31170 == 0) goto <D.31171>; else goto <D.31172>;
  <D.31171>:
  D.31145 = 0;
  return D.31145;
  <D.31172>:
  <D.31168>:
  D.31175 = is_nesting_type (access_klass, member_klass);
  if (D.31175 != 0) goto <D.31173>; else goto <D.31176>;
  <D.31176>:
  D.31177 = access_klass->nested_in;
  if (D.31177 != 0B) goto <D.31178>; else goto <D.31174>;
  <D.31178>:
  D.31177 = access_klass->nested_in;
  D.31179 = is_nesting_type (D.31177, member_klass);
  if (D.31179 != 0) goto <D.31173>; else goto <D.31174>;
  <D.31173>:
  D.31145 = 1;
  return D.31145;
  <D.31174>:
  D.31180 = member_klass->nested_in;
  if (D.31180 != 0B) goto <D.31181>; else goto <D.31182>;
  <D.31181>:
  D.31180 = member_klass->nested_in;
  D.31183 = can_access_type (access_klass, D.31180);
  if (D.31183 == 0) goto <D.31184>; else goto <D.31185>;
  <D.31184>:
  D.31145 = 0;
  return D.31145;
  <D.31185>:
  <D.31182>:
  access_level.462 = (unsigned int) access_level;
  D.31187 = access_level.462 + 4294967293;
  if (D.31187 <= 4) goto <D.31188>; else goto <D.31189>;
  <D.31188>:
  D.31180 = member_klass->nested_in;
  if (D.31180 == 0B) goto <D.31190>; else goto <D.31191>;
  <D.31190>:
  D.31145 = 0;
  return D.31145;
  <D.31191>:
  <D.31189>:
  switch (access_level) <default: <D.31210>, case 0: <D.21508>, case 1: <D.21509>, case 2: <D.21510>, case 3: <D.21511>, case 4: <D.21512>, case 5: <D.21513>, case 6: <D.21514>, case 7: <D.21515>>
  <D.21508>:
  D.31138 = access_klass->image;
  D.31139 = D.31138->assembly;
  D.31192 = member_klass->image;
  D.31193 = D.31192->assembly;
  D.31145 = can_access_internals (D.31139, D.31193);
  return D.31145;
  <D.21509>:
  D.31145 = 1;
  return D.31145;
  <D.21510>:
  D.31145 = 1;
  return D.31145;
  <D.21511>:
  D.31145 = is_nesting_type (member_klass, access_klass);
  return D.31145;
  <D.21512>:
  D.31180 = member_klass->nested_in;
  D.31145 = mono_class_has_parent_and_ignore_generics (access_klass, D.31180);
  return D.31145;
  <D.21513>:
  D.31138 = access_klass->image;
  D.31139 = D.31138->assembly;
  D.31192 = member_klass->image;
  D.31193 = D.31192->assembly;
  D.31145 = can_access_internals (D.31139, D.31193);
  return D.31145;
  <D.21514>:
  D.31138 = access_klass->image;
  D.31139 = D.31138->assembly;
  D.31180 = member_klass->nested_in;
  D.31197 = D.31180->image;
  D.31198 = D.31197->assembly;
  D.31199 = can_access_internals (D.31139, D.31198);
  if (D.31199 != 0) goto <D.31200>; else goto <D.31195>;
  <D.31200>:
  D.31180 = member_klass->nested_in;
  D.31201 = mono_class_has_parent_and_ignore_generics (access_klass, D.31180);
  if (D.31201 != 0) goto <D.31202>; else goto <D.31195>;
  <D.31202>:
  iftmp.463 = 1;
  goto <D.31196>;
  <D.31195>:
  iftmp.463 = 0;
  <D.31196>:
  D.31145 = iftmp.463;
  return D.31145;
  <D.21515>:
  D.31138 = access_klass->image;
  D.31139 = D.31138->assembly;
  D.31180 = member_klass->nested_in;
  D.31197 = D.31180->image;
  D.31198 = D.31197->assembly;
  D.31207 = can_access_internals (D.31139, D.31198);
  if (D.31207 != 0) goto <D.31204>; else goto <D.31208>;
  <D.31208>:
  D.31180 = member_klass->nested_in;
  D.31209 = mono_class_has_parent_and_ignore_generics (access_klass, D.31180);
  if (D.31209 != 0) goto <D.31204>; else goto <D.31205>;
  <D.31204>:
  iftmp.464 = 1;
  goto <D.31206>;
  <D.31205>:
  iftmp.464 = 0;
  <D.31206>:
  D.31145 = iftmp.464;
  return D.31145;
  <D.31210>:
  D.31145 = 0;
  return D.31145;
}


is_nesting_type (struct MonoClass * outer_klass, struct MonoClass * inner_klass)
{
  gboolean D.31214;

  outer_klass = mono_class_get_generic_type_definition (outer_klass);
  inner_klass = mono_class_get_generic_type_definition (inner_klass);
  <D.21444>:
  if (outer_klass == inner_klass) goto <D.31212>; else goto <D.31213>;
  <D.31212>:
  D.31214 = 1;
  return D.31214;
  <D.31213>:
  inner_klass = inner_klass->nested_in;
  if (inner_klass != 0B) goto <D.21444>; else goto <D.21445>;
  <D.21445>:
  D.31214 = 0;
  return D.31214;
}


can_access_instantiation (struct MonoClass * access_klass, struct MonoGenericInst * ginst)
{
  unsigned char D.31216;
  int D.31217;
  struct MonoClass * D.31218;
  int D.31219;
  gboolean D.31222;
  struct MonoArrayType * D.31223;
  struct MonoClass * D.31224;
  int D.31225;
  struct MonoType * D.31228;
  struct MonoClass * D.31229;
  int D.31230;
  struct MonoClass * D.31233;
  int D.31234;
  <unnamed-unsigned:22> D.31238;
  int D.31239;
  int i;

  i = 0;
  goto <D.21501>;
  <D.21500>:
  {
    struct MonoType * type;

    type = ginst->type_argv[i];
    D.31216 = type->type;
    D.31217 = (int) D.31216;
    switch (D.31217) <default: <D.31237>, case 15: <D.21496>, case 17: <D.21498>, case 18: <D.21497>, case 20: <D.21495>, case 21: <D.21499>, case 29: <D.21493>>
    <D.21493>:
    D.31218 = type->data.klass;
    D.31219 = can_access_type (access_klass, D.31218);
    if (D.31219 == 0) goto <D.31220>; else goto <D.31221>;
    <D.31220>:
    D.31222 = 0;
    return D.31222;
    <D.31221>:
    goto <D.21494>;
    <D.21495>:
    D.31223 = type->data.array;
    D.31224 = D.31223->eklass;
    D.31225 = can_access_type (access_klass, D.31224);
    if (D.31225 == 0) goto <D.31226>; else goto <D.31227>;
    <D.31226>:
    D.31222 = 0;
    return D.31222;
    <D.31227>:
    goto <D.21494>;
    <D.21496>:
    D.31228 = type->data.type;
    D.31229 = mono_class_from_mono_type (D.31228);
    D.31230 = can_access_type (access_klass, D.31229);
    if (D.31230 == 0) goto <D.31231>; else goto <D.31232>;
    <D.31231>:
    D.31222 = 0;
    return D.31222;
    <D.31232>:
    goto <D.21494>;
    <D.21497>:
    <D.21498>:
    <D.21499>:
    D.31233 = mono_class_from_mono_type (type);
    D.31234 = can_access_type (access_klass, D.31233);
    if (D.31234 == 0) goto <D.31235>; else goto <D.31236>;
    <D.31235>:
    D.31222 = 0;
    return D.31222;
    <D.31236>:
    <D.31237>:
    <D.21494>:
  }
  i = i + 1;
  <D.21501>:
  D.31238 = ginst->type_argc;
  D.31239 = (int) D.31238;
  if (D.31239 > i) goto <D.21500>; else goto <D.21502>;
  <D.21502>:
  D.31222 = 1;
  return D.31222;
}


mono_method_can_access_field_full (struct MonoMethod * method, struct MonoClassField * field, struct MonoClass * context_klass)
{
  struct MonoType * D.31241;
  short unsigned int D.31242;
  int D.31243;
  int D.31244;
  gboolean D.31250;
  struct MonoClass * access_class;
  struct MonoClass * member_class;
  int can;

  access_class = method->klass;
  member_class = field->parent;
  D.31241 = field->type;
  D.31242 = D.31241->attrs;
  D.31243 = (int) D.31242;
  D.31244 = D.31243 & 7;
  can = can_access_member (access_class, member_class, context_klass, D.31244);
  if (can == 0) goto <D.31245>; else goto <D.31246>;
  <D.31245>:
  {
    struct MonoClass * nested;

    nested = access_class->nested_in;
    goto <D.21577>;
    <D.21576>:
    D.31241 = field->type;
    D.31242 = D.31241->attrs;
    D.31243 = (int) D.31242;
    D.31244 = D.31243 & 7;
    can = can_access_member (nested, member_class, context_klass, D.31244);
    if (can != 0) goto <D.21575>; else goto <D.31247>;
    <D.31247>:
    nested = nested->nested_in;
    <D.21577>:
    if (nested != 0B) goto <D.21576>; else goto <D.21575>;
    <D.21575>:
  }
  <D.31246>:
  if (can == 0) goto <D.31248>; else goto <D.31249>;
  <D.31248>:
  D.31250 = 0;
  return D.31250;
  <D.31249>:
  can = can_access_type (access_class, member_class);
  if (can == 0) goto <D.31251>; else goto <D.31252>;
  <D.31251>:
  {
    struct MonoClass * nested;

    nested = access_class->nested_in;
    goto <D.21581>;
    <D.21580>:
    can = can_access_type (nested, member_class);
    if (can != 0) goto <D.21579>; else goto <D.31253>;
    <D.31253>:
    nested = nested->nested_in;
    <D.21581>:
    if (nested != 0B) goto <D.21580>; else goto <D.21579>;
    <D.21579>:
  }
  <D.31252>:
  if (can == 0) goto <D.31254>; else goto <D.31255>;
  <D.31254>:
  D.31250 = 0;
  return D.31250;
  <D.31255>:
  D.31250 = 1;
  return D.31250;
}


mono_class_can_access_class (struct MonoClass * source_class, struct MonoClass * target_class)
{
  gboolean D.31257;

  D.31257 = can_access_type (source_class, target_class);
  return D.31257;
}


mono_type_is_valid_enum_basetype (struct MonoType * type)
{
  unsigned char D.31259;
  int D.31260;
  gboolean D.31261;

  D.31259 = type->type;
  D.31260 = (int) D.31259;
  switch (D.31260) <default: <D.31262>, case 2: <D.21591>, case 3: <D.21594>, case 4: <D.21589>, case 5: <D.21590>, case 6: <D.21592>, case 7: <D.21593>, case 8: <D.21595>, case 9: <D.21596>, case 10: <D.21597>, case 11: <D.21598>, case 24: <D.21599>, case 25: <D.21600>>
  <D.21589>:
  <D.21590>:
  <D.21591>:
  <D.21592>:
  <D.21593>:
  <D.21594>:
  <D.21595>:
  <D.21596>:
  <D.21597>:
  <D.21598>:
  <D.21599>:
  <D.21600>:
  D.31261 = 1;
  return D.31261;
  <D.31262>:
  D.31261 = 0;
  return D.31261;
}


mono_class_is_valid_enum (struct MonoClass * klass)
{
  unsigned int D.31264;
  unsigned int D.31265;
  _Bool D.31266;
  long int D.31267;
  long int D.31268;
  struct MonoClass * D.31273;
  int D.21615;
  int iftmp.465;
  int D.21614;
  const char[5] * D.31278;
  unsigned char D.31279;
  int D.31280;
  unsigned char D.31281;
  int D.31282;
  const unsigned char * D.31287;
  unsigned char D.31288;
  int D.31289;
  const unsigned char * D.31290;
  unsigned char D.31291;
  int D.31292;
  const unsigned char * D.31297;
  unsigned char D.31298;
  int D.31299;
  const unsigned char * D.31300;
  unsigned char D.31301;
  int D.31302;
  const unsigned char * D.31307;
  unsigned char D.31308;
  int D.31309;
  const unsigned char * D.31310;
  unsigned char D.31311;
  int D.31312;
  const char * D.31314;
  int D.21624;
  int iftmp.466;
  int D.21623;
  const char[7] * D.31319;
  unsigned char D.31320;
  int D.31321;
  unsigned char D.31322;
  int D.31323;
  const unsigned char * D.31328;
  unsigned char D.31329;
  int D.31330;
  const unsigned char * D.31331;
  unsigned char D.31332;
  int D.31333;
  const unsigned char * D.31338;
  unsigned char D.31339;
  int D.31340;
  const unsigned char * D.31341;
  unsigned char D.31342;
  int D.31343;
  const unsigned char * D.31348;
  unsigned char D.31349;
  int D.31350;
  const unsigned char * D.31351;
  unsigned char D.31352;
  int D.31353;
  const char * D.31355;
  gboolean D.31356;
  unsigned int D.31357;
  unsigned int D.31358;
  struct MonoType * D.31361;
  short unsigned int D.31362;
  int D.31363;
  int D.31364;
  int D.31369;
  unsigned int D.31374;
  struct MonoClassField * field;
  void * iter;
  gboolean found_base_field;

  try
    {
      iter = 0B;
      found_base_field = 0;
      D.31264 = BIT_FIELD_REF <*klass, 32, 160>;
      D.31265 = D.31264 & 16;
      D.31266 = D.31265 == 0;
      D.31267 = (long int) D.31266;
      D.31268 = __builtin_expect (D.31267, 0);
      if (D.31268 != 0) goto <D.31269>; else goto <D.31270>;
      <D.31269>:
      monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "class.c", 9963, "klass->enumtype");
      <D.31270>:
      D.31273 = klass->parent;
      if (D.31273 == 0B) goto <D.31271>; else goto <D.31274>;
      <D.31274>:
      {
        size_t __s1_len;
        size_t __s2_len;

        __s2_len = 4;
        if (__s2_len <= 3) goto <D.31276>; else goto <D.31277>;
        <D.31276>:
        {
          const unsigned char * __s2;
          int __result;

          D.31273 = klass->parent;
          __s2 = D.31273->name;
          D.31278 = "Enum";
          D.31279 = MEM[(const unsigned char *)D.31278];
          D.31280 = (int) D.31279;
          D.31281 = *__s2;
          D.31282 = (int) D.31281;
          __result = D.31280 - D.31282;
          {
            if (__s2_len != 0) goto <D.31283>; else goto <D.31284>;
            <D.31283>:
            if (__result == 0) goto <D.31285>; else goto <D.31286>;
            <D.31285>:
            D.31287 = &MEM[(void *)"Enum" + 1B];
            D.31288 = *D.31287;
            D.31289 = (int) D.31288;
            D.31290 = __s2 + 1;
            D.31291 = *D.31290;
            D.31292 = (int) D.31291;
            __result = D.31289 - D.31292;
            if (__s2_len > 1) goto <D.31293>; else goto <D.31294>;
            <D.31293>:
            if (__result == 0) goto <D.31295>; else goto <D.31296>;
            <D.31295>:
            D.31297 = &MEM[(void *)"Enum" + 2B];
            D.31298 = *D.31297;
            D.31299 = (int) D.31298;
            D.31300 = __s2 + 2;
            D.31301 = *D.31300;
            D.31302 = (int) D.31301;
            __result = D.31299 - D.31302;
            if (__s2_len > 2) goto <D.31303>; else goto <D.31304>;
            <D.31303>:
            if (__result == 0) goto <D.31305>; else goto <D.31306>;
            <D.31305>:
            D.31307 = &MEM[(void *)"Enum" + 3B];
            D.31308 = *D.31307;
            D.31309 = (int) D.31308;
            D.31310 = __s2 + 3;
            D.31311 = *D.31310;
            D.31312 = (int) D.31311;
            __result = D.31309 - D.31312;
            <D.31306>:
            <D.31304>:
            <D.31296>:
            <D.31294>:
            <D.31286>:
            <D.31284>:
          }
          D.21614 = __result;
        }
        iftmp.465 = -D.21614;
        goto <D.31313>;
        <D.31277>:
        D.31273 = klass->parent;
        D.31314 = D.31273->name;
        iftmp.465 = __builtin_strcmp (D.31314, "Enum");
        <D.31313>:
        D.21615 = iftmp.465;
      }
      if (D.21615 != 0) goto <D.31271>; else goto <D.31315>;
      <D.31315>:
      {
        size_t __s1_len;
        size_t __s2_len;

        __s2_len = 6;
        if (__s2_len <= 3) goto <D.31317>; else goto <D.31318>;
        <D.31317>:
        {
          const unsigned char * __s2;
          int __result;

          D.31273 = klass->parent;
          __s2 = D.31273->name_space;
          D.31319 = "System";
          D.31320 = MEM[(const unsigned char *)D.31319];
          D.31321 = (int) D.31320;
          D.31322 = *__s2;
          D.31323 = (int) D.31322;
          __result = D.31321 - D.31323;
          {
            if (__s2_len != 0) goto <D.31324>; else goto <D.31325>;
            <D.31324>:
            if (__result == 0) goto <D.31326>; else goto <D.31327>;
            <D.31326>:
            D.31328 = &MEM[(void *)"System" + 1B];
            D.31329 = *D.31328;
            D.31330 = (int) D.31329;
            D.31331 = __s2 + 1;
            D.31332 = *D.31331;
            D.31333 = (int) D.31332;
            __result = D.31330 - D.31333;
            if (__s2_len > 1) goto <D.31334>; else goto <D.31335>;
            <D.31334>:
            if (__result == 0) goto <D.31336>; else goto <D.31337>;
            <D.31336>:
            D.31338 = &MEM[(void *)"System" + 2B];
            D.31339 = *D.31338;
            D.31340 = (int) D.31339;
            D.31341 = __s2 + 2;
            D.31342 = *D.31341;
            D.31343 = (int) D.31342;
            __result = D.31340 - D.31343;
            if (__s2_len > 2) goto <D.31344>; else goto <D.31345>;
            <D.31344>:
            if (__result == 0) goto <D.31346>; else goto <D.31347>;
            <D.31346>:
            D.31348 = &MEM[(void *)"System" + 3B];
            D.31349 = *D.31348;
            D.31350 = (int) D.31349;
            D.31351 = __s2 + 3;
            D.31352 = *D.31351;
            D.31353 = (int) D.31352;
            __result = D.31350 - D.31353;
            <D.31347>:
            <D.31345>:
            <D.31337>:
            <D.31335>:
            <D.31327>:
            <D.31325>:
          }
          D.21623 = __result;
        }
        iftmp.466 = -D.21623;
        goto <D.31354>;
        <D.31318>:
        D.31273 = klass->parent;
        D.31355 = D.31273->name_space;
        iftmp.466 = __builtin_strcmp (D.31355, "System");
        <D.31354>:
        D.21624 = iftmp.466;
      }
      if (D.21624 != 0) goto <D.31271>; else goto <D.31272>;
      <D.31271>:
      D.31356 = 0;
      return D.31356;
      <D.31272>:
      D.31357 = klass->flags;
      D.31358 = D.31357 & 24;
      if (D.31358 != 0) goto <D.31359>; else goto <D.31360>;
      <D.31359>:
      D.31356 = 0;
      return D.31356;
      <D.31360>:
      goto <D.21626>;
      <D.21625>:
      D.31361 = field->type;
      D.31362 = D.31361->attrs;
      D.31363 = (int) D.31362;
      D.31364 = D.31363 & 16;
      if (D.31364 == 0) goto <D.31365>; else goto <D.31366>;
      <D.31365>:
      if (found_base_field != 0) goto <D.31367>; else goto <D.31368>;
      <D.31367>:
      D.31356 = 0;
      return D.31356;
      <D.31368>:
      found_base_field = 1;
      D.31361 = field->type;
      D.31369 = mono_type_is_valid_enum_basetype (D.31361);
      if (D.31369 == 0) goto <D.31370>; else goto <D.31371>;
      <D.31370>:
      D.31356 = 0;
      return D.31356;
      <D.31371>:
      <D.31366>:
      <D.21626>:
      field = mono_class_get_fields (klass, &iter);
      if (field != 0B) goto <D.21625>; else goto <D.21627>;
      <D.21627>:
      if (found_base_field == 0) goto <D.31372>; else goto <D.31373>;
      <D.31372>:
      D.31356 = 0;
      return D.31356;
      <D.31373>:
      D.31374 = klass->method.count;
      if (D.31374 != 0) goto <D.31375>; else goto <D.31376>;
      <D.31375>:
      D.31356 = 0;
      return D.31356;
      <D.31376>:
      D.31356 = 1;
      return D.31356;
    }
  finally
    {
      iter = {CLOBBER};
    }
}


mono_generic_class_is_generic_type_definition (struct MonoGenericClass * gklass)
{
  gboolean D.31379;
  struct MonoGenericInst * D.31380;
  struct MonoClass * D.31381;
  struct MonoGenericContainer * D.31382;
  struct MonoGenericInst * D.31383;
  _Bool D.31384;

  D.31380 = gklass->context.class_inst;
  D.31381 = gklass->container_class;
  D.31382 = D.31381->generic_container;
  D.31383 = D.31382->context.class_inst;
  D.31384 = D.31380 == D.31383;
  D.31379 = (gboolean) D.31384;
  return D.31379;
}


mono_class_setup_interface_id (struct MonoClass * class)
{
  unsigned int D.31388;
  unsigned int D.31389;
  unsigned char D.31391;
  short unsigned int D.31393;
  unsigned int D.31396;
  short unsigned int D.31397;

  mono_loader_lock ();
  D.31388 = class->flags;
  D.31389 = D.31388 & 32;
  if (D.31389 != 0) goto <D.31386>; else goto <D.31390>;
  <D.31390>:
  D.31391 = class->byval_arg.type;
  if (D.31391 == 19) goto <D.31386>; else goto <D.31392>;
  <D.31392>:
  D.31391 = class->byval_arg.type;
  if (D.31391 == 30) goto <D.31386>; else goto <D.31387>;
  <D.31386>:
  D.31393 = class->interface_id;
  if (D.31393 == 0) goto <D.31394>; else goto <D.31395>;
  <D.31394>:
  D.31396 = mono_get_unique_iid (class);
  D.31397 = (short unsigned int) D.31396;
  class->interface_id = D.31397;
  <D.31395>:
  <D.31387>:
  mono_loader_unlock ();
}


mono_class_alloc_ext (struct MonoClass * klass)
{
  struct MonoClassExt * D.31398;
  void * D.31401;
  unsigned int class_ext_size.467;
  unsigned int class_ext_size.468;

  D.31398 = klass->ext;
  if (D.31398 == 0B) goto <D.31399>; else goto <D.31400>;
  <D.31399>:
  D.31401 = mono_class_alloc0 (klass, 40);
  klass->ext = D.31401;
  class_ext_size.467 = class_ext_size;
  class_ext_size.468 = class_ext_size.467 + 40;
  class_ext_size = class_ext_size.468;
  <D.31400>:
}


mono_class_setup_interfaces (struct MonoClass * klass, struct MonoError * error)
{
  unsigned int D.31404;
  unsigned int D.31405;
  unsigned char D.31412;
  unsigned char D.31414;
  guint16 iftmp.469;
  struct MonoClass * D.31417;
  struct MonoImage * D.31421;
  short unsigned int D.31422;
  unsigned int D.31423;
  unsigned int D.31424;
  void * D.31425;
  struct MonoClass * D.31426;
  struct MonoType * D.31427;
  struct MonoClass * * D.31428;
  struct MonoClass * D.31429;
  struct MonoClass * D.31430;
  struct MonoClass * * D.31433;
  struct MonoClass * D.31434;
  struct MonoGenericClass * D.31435;
  short unsigned int D.31438;
  int D.31439;
  void * D.31440;
  unsigned int i.470;
  unsigned int D.31442;
  struct MonoClass * * D.31443;
  struct MonoClass * * D.31444;
  struct MonoClass * * D.31445;
  struct MonoClass * D.31446;
  struct MonoGenericContext * D.31447;
  struct MonoClass * D.31448;
  int D.31449;
  gchar * D.31452;
  int D.31453;
  int i;

  mono_error_init (error);
  D.31404 = BIT_FIELD_REF <*klass, 32, 192>;
  D.31405 = D.31404 & 1;
  if (D.31405 != 0) goto <D.31406>; else goto <D.31407>;
  <D.31406>:
  return;
  <D.31407>:
  mono_loader_lock ();
  D.31404 = BIT_FIELD_REF <*klass, 32, 192>;
  D.31405 = D.31404 & 1;
  if (D.31405 != 0) goto <D.31408>; else goto <D.31409>;
  <D.31408>:
  mono_loader_unlock ();
  return;
  <D.31409>:
  D.31412 = klass->rank;
  if (D.31412 == 1) goto <D.31413>; else goto <D.31410>;
  <D.31413>:
  D.31414 = klass->byval_arg.type;
  if (D.31414 != 20) goto <D.31415>; else goto <D.31410>;
  <D.31415>:
  {
    struct MonoType * args[1];

    try
      {
        D.31417 = mono_defaults.generic_ireadonlylist_class;
        if (D.31417 != 0B) goto <D.31418>; else goto <D.31419>;
        <D.31418>:
        iftmp.469 = 2;
        goto <D.31420>;
        <D.31419>:
        iftmp.469 = 1;
        <D.31420>:
        klass->interface_count = iftmp.469;
        D.31421 = klass->image;
        D.31422 = klass->interface_count;
        D.31423 = (unsigned int) D.31422;
        D.31424 = D.31423 * 4;
        D.31425 = mono_image_alloc0 (D.31421, D.31424);
        klass->interfaces = D.31425;
        D.31426 = klass->element_class;
        D.31427 = &D.31426->byval_arg;
        args[0] = D.31427;
        D.31428 = klass->interfaces;
        D.31429 = mono_defaults.generic_ilist_class;
        D.31430 = mono_class_bind_generic_parameters (D.31429, 1, &args, 0);
        *D.31428 = D.31430;
        D.31422 = klass->interface_count;
        if (D.31422 > 1) goto <D.31431>; else goto <D.31432>;
        <D.31431>:
        D.31428 = klass->interfaces;
        D.31433 = D.31428 + 4;
        D.31417 = mono_defaults.generic_ireadonlylist_class;
        D.31434 = mono_class_bind_generic_parameters (D.31417, 1, &args, 0);
        *D.31433 = D.31434;
        <D.31432>:
      }
    finally
      {
        args = {CLOBBER};
      }
  }
  goto <D.31411>;
  <D.31410>:
  D.31435 = klass->generic_class;
  if (D.31435 != 0B) goto <D.31436>; else goto <D.31437>;
  <D.31436>:
  {
    struct MonoClass * gklass;

    D.31435 = klass->generic_class;
    gklass = D.31435->container_class;
    D.31438 = gklass->interface_count;
    klass->interface_count = D.31438;
    D.31422 = klass->interface_count;
    D.31423 = (unsigned int) D.31422;
    D.31424 = D.31423 * 4;
    D.31439 = (int) D.31424;
    D.31440 = mono_class_alloc0 (klass, D.31439);
    klass->interfaces = D.31440;
    i = 0;
    goto <D.21645>;
    <D.21644>:
    D.31428 = klass->interfaces;
    i.470 = (unsigned int) i;
    D.31442 = i.470 * 4;
    D.31443 = D.31428 + D.31442;
    D.31444 = gklass->interfaces;
    i.470 = (unsigned int) i;
    D.31442 = i.470 * 4;
    D.31445 = D.31444 + D.31442;
    D.31446 = *D.31445;
    D.31435 = klass->generic_class;
    D.31447 = mono_generic_class_get_context (D.31435);
    D.31448 = mono_class_inflate_generic_class_checked (D.31446, D.31447, error);
    *D.31443 = D.31448;
    D.31449 = mono_error_ok (error);
    if (D.31449 == 0) goto <D.31450>; else goto <D.31451>;
    <D.31450>:
    D.31452 = monoeg_strdup ("Could not setup the interfaces");
    mono_class_set_failure (klass, 7, D.31452);
    klass->interfaces = 0B;
    return;
    <D.31451>:
    i = i + 1;
    <D.21645>:
    D.31422 = klass->interface_count;
    D.31453 = (int) D.31422;
    if (D.31453 > i) goto <D.21644>; else goto <D.21646>;
    <D.21646>:
  }
  <D.31437>:
  <D.31411>:
  mono_memory_barrier ();
  klass->interfaces_inited = 1;
  mono_loader_unlock ();
}


mono_class_get_fields_lazy (struct MonoClass * klass, void * * iter)
{
  struct MonoClassField * D.31457;
  void * D.31458;
  struct MonoClassField * D.31461;
  unsigned int D.31464;
  unsigned int D.31467;
  struct MonoClassField * D.31468;
  struct MonoClassField * field;

  if (iter == 0B) goto <D.31455>; else goto <D.31456>;
  <D.31455>:
  D.31457 = 0B;
  return D.31457;
  <D.31456>:
  D.31458 = *iter;
  if (D.31458 == 0B) goto <D.31459>; else goto <D.31460>;
  <D.31459>:
  mono_class_setup_basic_field_info_locking (klass);
  D.31461 = klass->fields;
  if (D.31461 == 0B) goto <D.31462>; else goto <D.31463>;
  <D.31462>:
  D.31457 = 0B;
  return D.31457;
  <D.31463>:
  D.31464 = klass->field.count;
  if (D.31464 != 0) goto <D.31465>; else goto <D.31466>;
  <D.31465>:
  D.31461 = klass->fields;
  *iter = D.31461;
  D.31457 = *iter;
  return D.31457;
  <D.31466>:
  D.31457 = 0B;
  return D.31457;
  <D.31460>:
  field = *iter;
  field = field + 16;
  D.31461 = klass->fields;
  D.31464 = klass->field.count;
  D.31467 = D.31464 * 16;
  D.31468 = D.31461 + D.31467;
  if (D.31468 > field) goto <D.31469>; else goto <D.31470>;
  <D.31469>:
  *iter = field;
  D.31457 = *iter;
  return D.31457;
  <D.31470>:
  D.31457 = 0B;
  return D.31457;
}


mono_class_setup_basic_field_info_locking (struct MonoClass * class)
{
  mono_loader_lock ();
  mono_class_setup_basic_field_info (class);
  mono_loader_unlock ();
}


mono_class_full_name (struct MonoClass * klass)
{
  char * D.31472;
  struct MonoType * D.31473;

  D.31473 = &klass->byval_arg;
  D.31472 = mono_type_full_name (D.31473);
  return D.31472;
}


