__attribute__((visibility ("hidden")))
mono_verifier_set_mode (MiniVerifierMode mode)
{
  verifier_mode = mode;
}


__attribute__((visibility ("hidden")))
mono_verifier_enable_verify_all ()
{
  verify_all = 1;
}


mono_free_verify_list (struct GSList * list)
{
  char * D.20051;
  struct MonoVerifyInfoExtended * info;
  struct GSList * tmp;

  tmp = list;
  goto <D.18291>;
  <D.18290>:
  info = tmp->data;
  D.20051 = info->info.message;
  monoeg_g_free (D.20051);
  monoeg_g_free (info);
  tmp = tmp->next;
  <D.18291>:
  if (tmp != 0B) goto <D.18290>; else goto <D.18292>;
  <D.18292>:
  monoeg_g_slist_free (list);
}


__attribute__((visibility ("hidden")))
mono_verifier_is_signature_compatible (struct MonoMethodSignature * target, struct MonoMethodSignature * candidate)
{
  gboolean D.20052;

  D.20052 = mono_delegate_signature_equal (target, candidate, 0);
  return D.20052;
}


mono_delegate_signature_equal (struct MonoMethodSignature * delegate_sig, struct MonoMethodSignature * method_sig, gboolean is_static_ldftn)
{
  _Bool D.20054;
  short unsigned int D.20055;
  int D.20056;
  int D.20057;
  short unsigned int D.20058;
  int D.20059;
  gboolean D.20062;
  long unsigned int D.20063;
  long unsigned int D.20064;
  long unsigned int D.20065;
  long unsigned int D.20066;
  int D.20069;
  int D.20070;
  struct MonoType * D.20073;
  struct MonoType * D.20074;
  int D.20075;
  int i;
  int method_offset;

  D.20054 = is_static_ldftn != 0;
  method_offset = (int) D.20054;
  D.20055 = delegate_sig->param_count;
  D.20056 = (int) D.20055;
  D.20057 = D.20056 + method_offset;
  D.20058 = method_sig->param_count;
  D.20059 = (int) D.20058;
  if (D.20057 != D.20059) goto <D.20060>; else goto <D.20061>;
  <D.20060>:
  D.20062 = 0;
  return D.20062;
  <D.20061>:
  D.20063 = BIT_FIELD_REF <*delegate_sig, 64, 64>;
  D.20064 = BIT_FIELD_REF <*method_sig, 64, 64>;
  D.20065 = D.20063 ^ D.20064;
  D.20066 = D.20065 & 64512;
  if (D.20066 != 0) goto <D.20067>; else goto <D.20068>;
  <D.20067>:
  D.20062 = 0;
  return D.20062;
  <D.20068>:
  i = 0;
  goto <D.18773>;
  <D.18772>:
  {
    struct MonoType * p1;
    struct MonoType * p2;

    p1 = delegate_sig->params[i];
    D.20069 = i + method_offset;
    p2 = method_sig->params[D.20069];
    D.20070 = mono_delegate_param_equal (p1, p2);
    if (D.20070 == 0) goto <D.20071>; else goto <D.20072>;
    <D.20071>:
    D.20062 = 0;
    return D.20062;
    <D.20072>:
  }
  i = i + 1;
  <D.18773>:
  D.20055 = delegate_sig->param_count;
  D.20056 = (int) D.20055;
  if (D.20056 > i) goto <D.18772>; else goto <D.18774>;
  <D.18774>:
  D.20073 = delegate_sig->ret;
  D.20074 = method_sig->ret;
  D.20075 = mono_delegate_ret_equal (D.20073, D.20074);
  if (D.20075 == 0) goto <D.20076>; else goto <D.20077>;
  <D.20076>:
  D.20062 = 0;
  return D.20062;
  <D.20077>:
  D.20062 = 1;
  return D.20062;
}


mono_delegate_param_equal (struct MonoType * delegate, struct MonoType * method)
{
  int D.20079;
  gboolean D.20082;

  D.20079 = mono_metadata_type_equal_full (delegate, method, 1);
  if (D.20079 != 0) goto <D.20080>; else goto <D.20081>;
  <D.20080>:
  D.20082 = 1;
  return D.20082;
  <D.20081>:
  D.20082 = mono_delegate_type_equal (method, delegate);
  return D.20082;
}


mono_delegate_type_equal (struct MonoType * target, struct MonoType * candidate)
{
  long unsigned int D.20084;
  long unsigned int D.20085;
  long unsigned int D.20086;
  long unsigned int D.20087;
  gboolean D.20090;
  unsigned char D.20091;
  int D.20092;
  unsigned char D.20093;
  _Bool D.20094;
  struct MonoType * D.20097;
  struct MonoType * D.20098;
  struct MonoMethodSignature * D.20101;
  struct MonoMethodSignature * D.20102;
  struct MonoClass * D.20103;
  struct MonoClass * D.20104;
  struct MonoClass * D.20107;
  struct MonoClass * D.20108;
  struct MonoClass * D.20109;
  struct MonoClass * D.20110;
  struct MonoClass * D.20113;
  struct MonoClass * D.20114;
  _Bool D.20115;
  int iftmp.0;
  struct MonoGenericParam * D.20120;
  short unsigned int D.20121;
  struct MonoGenericParam * D.20122;
  short unsigned int D.20123;
  int iftmp.1;

  D.20084 = BIT_FIELD_REF <*candidate, 64, 64>;
  D.20085 = BIT_FIELD_REF <*target, 64, 64>;
  D.20086 = D.20084 ^ D.20085;
  D.20087 = D.20086 & 8589934592;
  if (D.20087 != 0) goto <D.20088>; else goto <D.20089>;
  <D.20088>:
  D.20090 = 0;
  return D.20090;
  <D.20089>:
  D.20091 = target->type;
  D.20092 = (int) D.20091;
  switch (D.20092) <default: <D.18754>, case 1: <D.18725>, case 2: <D.18728>, case 3: <D.18731>, case 4: <D.18726>, case 5: <D.18727>, case 6: <D.18729>, case 7: <D.18730>, case 8: <D.18732>, case 9: <D.18733>, case 10: <D.18734>, case 11: <D.18735>, case 12: <D.18736>, case 13: <D.18737>, case 14: <D.18740>, case 15: <D.18742>, case 17: <D.18751>, case 18: <D.18748>, case 19: <D.18752>, case 20: <D.18750>, case 21: <D.18744>, case 22: <D.18741>, case 24: <D.18738>, case 25: <D.18739>, case 27: <D.18743>, case 28: <D.18747>, case 29: <D.18749>, case 30: <D.18753>>
  <D.18725>:
  <D.18726>:
  <D.18727>:
  <D.18728>:
  <D.18729>:
  <D.18730>:
  <D.18731>:
  <D.18732>:
  <D.18733>:
  <D.18734>:
  <D.18735>:
  <D.18736>:
  <D.18737>:
  <D.18738>:
  <D.18739>:
  <D.18740>:
  <D.18741>:
  D.20093 = candidate->type;
  D.20091 = target->type;
  D.20094 = D.20093 == D.20091;
  D.20090 = (gboolean) D.20094;
  return D.20090;
  <D.18742>:
  D.20093 = candidate->type;
  if (D.20093 != 15) goto <D.20095>; else goto <D.20096>;
  <D.20095>:
  D.20090 = 0;
  return D.20090;
  <D.20096>:
  D.20097 = target->data.type;
  D.20098 = candidate->data.type;
  D.20090 = mono_delegate_type_equal (D.20097, D.20098);
  return D.20090;
  <D.18743>:
  D.20093 = candidate->type;
  if (D.20093 != 27) goto <D.20099>; else goto <D.20100>;
  <D.20099>:
  D.20090 = 0;
  return D.20090;
  <D.20100>:
  D.20101 = mono_type_get_signature (target);
  D.20102 = mono_type_get_signature (candidate);
  D.20090 = mono_delegate_signature_equal (D.20101, D.20102, 0);
  return D.20090;
  <D.18744>:
  {
    struct MonoClass * target_klass;
    struct MonoClass * candidate_klass;

    target_klass = mono_class_from_mono_type (target);
    candidate_klass = mono_class_from_mono_type (candidate);
    D.20090 = verifier_class_is_assignable_from (target_klass, candidate_klass);
    return D.20090;
  }
  <D.18747>:
  D.20090 = mono_type_is_reference (candidate);
  return D.20090;
  <D.18748>:
  D.20103 = target->data.klass;
  D.20104 = mono_class_from_mono_type (candidate);
  D.20090 = verifier_class_is_assignable_from (D.20103, D.20104);
  return D.20090;
  <D.18749>:
  D.20093 = candidate->type;
  if (D.20093 != 29) goto <D.20105>; else goto <D.20106>;
  <D.20105>:
  D.20090 = 0;
  return D.20090;
  <D.20106>:
  D.20107 = mono_class_from_mono_type (target);
  D.20108 = D.20107->element_class;
  D.20109 = mono_class_from_mono_type (candidate);
  D.20110 = D.20109->element_class;
  D.20090 = verifier_class_is_assignable_from (D.20108, D.20110);
  return D.20090;
  <D.18750>:
  D.20093 = candidate->type;
  if (D.20093 != 20) goto <D.20111>; else goto <D.20112>;
  <D.20111>:
  D.20090 = 0;
  return D.20090;
  <D.20112>:
  D.20090 = is_array_type_compatible (target, candidate);
  return D.20090;
  <D.18751>:
  D.20113 = mono_class_from_mono_type (candidate);
  D.20114 = mono_class_from_mono_type (target);
  D.20115 = D.20113 == D.20114;
  D.20090 = (gboolean) D.20115;
  return D.20090;
  <D.18752>:
  D.20093 = candidate->type;
  if (D.20093 == 19) goto <D.20119>; else goto <D.20117>;
  <D.20119>:
  D.20120 = target->data.generic_param;
  D.20121 = D.20120->num;
  D.20122 = candidate->data.generic_param;
  D.20123 = D.20122->num;
  if (D.20121 == D.20123) goto <D.20124>; else goto <D.20117>;
  <D.20124>:
  iftmp.0 = 1;
  goto <D.20118>;
  <D.20117>:
  iftmp.0 = 0;
  <D.20118>:
  D.20090 = iftmp.0;
  return D.20090;
  D.20090 = 0;
  return D.20090;
  <D.18753>:
  D.20093 = candidate->type;
  if (D.20093 == 30) goto <D.20128>; else goto <D.20126>;
  <D.20128>:
  D.20120 = target->data.generic_param;
  D.20121 = D.20120->num;
  D.20122 = candidate->data.generic_param;
  D.20123 = D.20122->num;
  if (D.20121 == D.20123) goto <D.20129>; else goto <D.20126>;
  <D.20129>:
  iftmp.1 = 1;
  goto <D.20127>;
  <D.20126>:
  iftmp.1 = 0;
  <D.20127>:
  D.20090 = iftmp.1;
  return D.20090;
  D.20090 = 0;
  return D.20090;
  <D.18754>:
  monoeg_assertion_message ("* Assertion: should not be reached at %s:%d\n", "verify.c", 2594);
  D.20090 = 0;
  return D.20090;
}


verifier_class_is_assignable_from (struct MonoClass * target, struct MonoClass * candidate)
{
  gboolean D.20133;
  int D.20134;
  unsigned int D.20140;
  unsigned int D.20141;
  unsigned char D.20143;
  unsigned int D.20147;
  unsigned int D.20148;
  unsigned char D.20150;
  int D.20152;
  unsigned char D.20155;
  struct MonoClass * D.20158;
  struct MonoClass * D.20159;
  int D.20160;
  struct MonoClass * D.20163;
  int D.20164;
  struct MonoClass * D.20167;
  int D.20168;
  struct MonoClass * D.20171;
  int D.20172;
  struct MonoClass * D.20175;
  int D.20176;
  int D.20180;
  struct MonoClass * * D.20183;
  long unsigned int D.20184;
  long unsigned int D.20185;
  struct MonoClass * * D.20186;
  int D.20187;
  short unsigned int D.20190;
  int D.20191;
  struct MonoClass * * D.20192;
  struct MonoClass * * D.20193;
  int D.20194;
  short unsigned int D.20197;
  int D.20198;
  struct MonoClass * D.20200;
  long unsigned int D.20201;
  long unsigned int D.20202;
  int D.20205;
  int D.20208;
  struct MonoGenericClass * D.20216;
  struct MonoClass * D.20220;
  struct MonoClass * D.20223;
  struct MonoGenericInst * D.20226;
  struct MonoType * D.20227;
  struct MonoClass * iface_gtd;

  if (target == candidate) goto <D.20131>; else goto <D.20132>;
  <D.20131>:
  D.20133 = 1;
  return D.20133;
  <D.20132>:
  D.20134 = mono_class_has_variant_generic_params (target);
  if (D.20134 != 0) goto <D.20135>; else goto <D.20136>;
  <D.20135>:
  D.20140 = target->flags;
  D.20141 = D.20140 & 32;
  if (D.20141 != 0) goto <D.20137>; else goto <D.20142>;
  <D.20142>:
  D.20143 = target->byval_arg.type;
  if (D.20143 == 19) goto <D.20137>; else goto <D.20144>;
  <D.20144>:
  D.20143 = target->byval_arg.type;
  if (D.20143 == 30) goto <D.20137>; else goto <D.20138>;
  <D.20137>:
  D.20147 = candidate->flags;
  D.20148 = D.20147 & 32;
  if (D.20148 != 0) goto <D.20145>; else goto <D.20149>;
  <D.20149>:
  D.20150 = candidate->byval_arg.type;
  if (D.20150 == 19) goto <D.20145>; else goto <D.20151>;
  <D.20151>:
  D.20150 = candidate->byval_arg.type;
  if (D.20150 == 30) goto <D.20145>; else goto <D.20146>;
  <D.20145>:
  D.20152 = mono_class_is_variant_compatible (target, candidate, 1);
  if (D.20152 != 0) goto <D.20153>; else goto <D.20154>;
  <D.20153>:
  D.20133 = 1;
  return D.20133;
  <D.20154>:
  <D.20146>:
  D.20155 = candidate->rank;
  if (D.20155 == 1) goto <D.20156>; else goto <D.20157>;
  <D.20156>:
  D.20158 = mono_defaults.generic_ilist_class;
  D.20159 = candidate->element_class;
  D.20160 = verifier_inflate_and_check_compat (target, D.20158, D.20159);
  if (D.20160 != 0) goto <D.20161>; else goto <D.20162>;
  <D.20161>:
  D.20133 = 1;
  return D.20133;
  <D.20162>:
  D.20163 = get_icollection_class ();
  D.20159 = candidate->element_class;
  D.20164 = verifier_inflate_and_check_compat (target, D.20163, D.20159);
  if (D.20164 != 0) goto <D.20165>; else goto <D.20166>;
  <D.20165>:
  D.20133 = 1;
  return D.20133;
  <D.20166>:
  D.20167 = get_ienumerable_class ();
  D.20159 = candidate->element_class;
  D.20168 = verifier_inflate_and_check_compat (target, D.20167, D.20159);
  if (D.20168 != 0) goto <D.20169>; else goto <D.20170>;
  <D.20169>:
  D.20133 = 1;
  return D.20133;
  <D.20170>:
  D.20171 = get_ireadonlylist_class ();
  D.20159 = candidate->element_class;
  D.20172 = verifier_inflate_and_check_compat (target, D.20171, D.20159);
  if (D.20172 != 0) goto <D.20173>; else goto <D.20174>;
  <D.20173>:
  D.20133 = 1;
  return D.20133;
  <D.20174>:
  D.20175 = get_ireadonlycollection_class ();
  D.20159 = candidate->element_class;
  D.20176 = verifier_inflate_and_check_compat (target, D.20175, D.20159);
  if (D.20176 != 0) goto <D.20177>; else goto <D.20178>;
  <D.20177>:
  D.20133 = 1;
  return D.20133;
  <D.20178>:
  goto <D.20179>;
  <D.20157>:
  {
    struct MonoError error;
    int i;

    try
      {
        goto <D.18621>;
        <D.18620>:
        mono_class_setup_interfaces (candidate, &error);
        D.20180 = mono_error_ok (&error);
        if (D.20180 == 0) goto <D.20181>; else goto <D.20182>;
        <D.20181>:
        mono_error_cleanup (&error);
        D.20133 = 0;
        return D.20133;
        <D.20182>:
        i = 0;
        goto <D.18614>;
        <D.18613>:
        {
          struct MonoClass * iface;

          D.20183 = candidate->interfaces_packed;
          D.20184 = (long unsigned int) i;
          D.20185 = D.20184 * 8;
          D.20186 = D.20183 + D.20185;
          iface = *D.20186;
          D.20187 = mono_class_is_variant_compatible (target, iface, 1);
          if (D.20187 != 0) goto <D.20188>; else goto <D.20189>;
          <D.20188>:
          D.20133 = 1;
          return D.20133;
          <D.20189>:
        }
        i = i + 1;
        <D.18614>:
        D.20190 = candidate->interface_offsets_count;
        D.20191 = (int) D.20190;
        if (D.20191 > i) goto <D.18613>; else goto <D.18615>;
        <D.18615>:
        i = 0;
        goto <D.18618>;
        <D.18617>:
        {
          struct MonoClass * iface;

          D.20192 = candidate->interfaces;
          D.20184 = (long unsigned int) i;
          D.20185 = D.20184 * 8;
          D.20193 = D.20192 + D.20185;
          iface = *D.20193;
          D.20194 = mono_class_is_variant_compatible (target, iface, 1);
          if (D.20194 != 0) goto <D.20195>; else goto <D.20196>;
          <D.20195>:
          D.20133 = 1;
          return D.20133;
          <D.20196>:
        }
        i = i + 1;
        <D.18618>:
        D.20197 = candidate->interface_count;
        D.20198 = (int) D.20197;
        if (D.20198 > i) goto <D.18617>; else goto <D.18619>;
        <D.18619>:
        candidate = candidate->parent;
        <D.18621>:
        if (candidate != 0B) goto <D.20199>; else goto <D.18622>;
        <D.20199>:
        D.20200 = mono_defaults.object_class;
        if (D.20200 != candidate) goto <D.18620>; else goto <D.18622>;
        <D.18622>:
      }
    finally
      {
        error = {CLOBBER};
      }
  }
  <D.20179>:
  goto <D.20139>;
  <D.20138>:
  D.20201 = BIT_FIELD_REF <*target, 64, 256>;
  D.20202 = D.20201 & 549755813888;
  if (D.20202 != 0) goto <D.20203>; else goto <D.20204>;
  <D.20203>:
  D.20205 = mono_class_is_variant_compatible (target, candidate, 1);
  if (D.20205 != 0) goto <D.20206>; else goto <D.20207>;
  <D.20206>:
  D.20133 = 1;
  return D.20133;
  <D.20207>:
  <D.20204>:
  <D.20139>:
  D.20133 = 0;
  return D.20133;
  <D.20136>:
  D.20208 = mono_class_is_assignable_from (target, candidate);
  if (D.20208 != 0) goto <D.20209>; else goto <D.20210>;
  <D.20209>:
  D.20133 = 1;
  return D.20133;
  <D.20210>:
  D.20140 = target->flags;
  D.20141 = D.20140 & 32;
  if (D.20141 == 0) goto <D.20214>; else goto <D.20211>;
  <D.20214>:
  D.20143 = target->byval_arg.type;
  if (D.20143 != 19) goto <D.20215>; else goto <D.20211>;
  <D.20215>:
  D.20143 = target->byval_arg.type;
  if (D.20143 != 30) goto <D.20212>; else goto <D.20211>;
  <D.20211>:
  D.20216 = target->generic_class;
  if (D.20216 == 0B) goto <D.20212>; else goto <D.20217>;
  <D.20217>:
  D.20155 = candidate->rank;
  if (D.20155 != 1) goto <D.20212>; else goto <D.20213>;
  <D.20212>:
  D.20133 = 0;
  return D.20133;
  <D.20213>:
  D.20216 = target->generic_class;
  iface_gtd = D.20216->container_class;
  D.20158 = mono_defaults.generic_ilist_class;
  if (D.20158 != iface_gtd) goto <D.20218>; else goto <D.20219>;
  <D.20218>:
  D.20220 = get_icollection_class ();
  if (D.20220 != iface_gtd) goto <D.20221>; else goto <D.20222>;
  <D.20221>:
  D.20223 = get_ienumerable_class ();
  if (D.20223 != iface_gtd) goto <D.20224>; else goto <D.20225>;
  <D.20224>:
  D.20133 = 0;
  return D.20133;
  <D.20225>:
  <D.20222>:
  <D.20219>:
  D.20216 = target->generic_class;
  D.20226 = D.20216->context.class_inst;
  D.20227 = D.20226->type_argv[0];
  target = mono_class_from_mono_type (D.20227);
  candidate = candidate->element_class;
  D.20133 = 1;
  return D.20133;
}


get_ireadonlylist_class ()
{
  struct MonoClass * generic_ireadonlylist_class.2;
  struct MonoImage * D.20234;
  struct MonoClass * generic_ireadonlylist_class.3;
  struct MonoClass * D.20236;
  static struct MonoClass * generic_ireadonlylist_class = 0B;

  generic_ireadonlylist_class.2 = generic_ireadonlylist_class;
  if (generic_ireadonlylist_class.2 == 0B) goto <D.20232>; else goto <D.20233>;
  <D.20232>:
  D.20234 = mono_defaults.corlib;
  generic_ireadonlylist_class.3 = mono_class_from_name (D.20234, "System.Collections.Generic", "IReadOnlyList`1");
  generic_ireadonlylist_class = generic_ireadonlylist_class.3;
  <D.20233>:
  D.20236 = generic_ireadonlylist_class;
  return D.20236;
}


get_ireadonlycollection_class ()
{
  struct MonoClass * generic_ireadonlycollection_class.4;
  struct MonoImage * D.20241;
  struct MonoClass * generic_ireadonlycollection_class.5;
  struct MonoClass * D.20243;
  static struct MonoClass * generic_ireadonlycollection_class = 0B;

  generic_ireadonlycollection_class.4 = generic_ireadonlycollection_class;
  if (generic_ireadonlycollection_class.4 == 0B) goto <D.20239>; else goto <D.20240>;
  <D.20239>:
  D.20241 = mono_defaults.corlib;
  generic_ireadonlycollection_class.5 = mono_class_from_name (D.20241, "System.Collections.Generic", "IReadOnlyCollection`1");
  generic_ireadonlycollection_class = generic_ireadonlycollection_class.5;
  <D.20240>:
  D.20243 = generic_ireadonlycollection_class;
  return D.20243;
}


verifier_inflate_and_check_compat (struct MonoClass * target, struct MonoClass * gtd, struct MonoClass * arg)
{
  gboolean D.20247;
  int D.20248;
  struct MonoClass * tmp;

  tmp = inflate_class_one_arg (gtd, arg);
  if (tmp == 0B) goto <D.20245>; else goto <D.20246>;
  <D.20245>:
  D.20247 = 0;
  return D.20247;
  <D.20246>:
  D.20248 = mono_class_is_variant_compatible (target, tmp, 1);
  if (D.20248 != 0) goto <D.20249>; else goto <D.20250>;
  <D.20249>:
  D.20247 = 1;
  return D.20247;
  <D.20250>:
  D.20247 = 0;
  return D.20247;
}


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

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


get_icollection_class ()
{
  struct MonoClass * generic_icollection_class.6;
  struct MonoImage * D.20259;
  struct MonoClass * generic_icollection_class.7;
  struct MonoClass * D.20261;
  static struct MonoClass * generic_icollection_class = 0B;

  generic_icollection_class.6 = generic_icollection_class;
  if (generic_icollection_class.6 == 0B) goto <D.20257>; else goto <D.20258>;
  <D.20257>:
  D.20259 = mono_defaults.corlib;
  generic_icollection_class.7 = mono_class_from_name (D.20259, "System.Collections.Generic", "ICollection`1");
  generic_icollection_class = generic_icollection_class.7;
  <D.20258>:
  D.20261 = generic_icollection_class;
  return D.20261;
}


get_ienumerable_class ()
{
  struct MonoClass * generic_ienumerable_class.8;
  struct MonoImage * D.20266;
  struct MonoClass * generic_ienumerable_class.9;
  struct MonoClass * D.20268;
  static struct MonoClass * generic_ienumerable_class = 0B;

  generic_ienumerable_class.8 = generic_ienumerable_class;
  if (generic_ienumerable_class.8 == 0B) goto <D.20264>; else goto <D.20265>;
  <D.20264>:
  D.20266 = mono_defaults.corlib;
  generic_ienumerable_class.9 = mono_class_from_name (D.20266, "System.Collections.Generic", "IEnumerable`1");
  generic_ienumerable_class = generic_ienumerable_class.9;
  <D.20265>:
  D.20268 = generic_ienumerable_class;
  return D.20268;
}


is_array_type_compatible (struct MonoType * target, struct MonoType * candidate)
{
  unsigned char D.20270;
  _Bool D.20271;
  long int D.20272;
  long int D.20273;
  unsigned char D.20276;
  _Bool D.20277;
  long int D.20278;
  long int D.20279;
  unsigned char D.20282;
  unsigned char D.20283;
  gboolean D.20286;
  struct MonoClass * D.20287;
  struct MonoClass * D.20288;
  struct MonoArrayType * left;
  struct MonoArrayType * right;

  left = target->data.array;
  right = candidate->data.array;
  D.20270 = target->type;
  D.20271 = D.20270 != 20;
  D.20272 = (long int) D.20271;
  D.20273 = __builtin_expect (D.20272, 0);
  if (D.20273 != 0) goto <D.20274>; else goto <D.20275>;
  <D.20274>:
  monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "verify.c", 1880, "target->type == MONO_TYPE_ARRAY");
  <D.20275>:
  D.20276 = candidate->type;
  D.20277 = D.20276 != 20;
  D.20278 = (long int) D.20277;
  D.20279 = __builtin_expect (D.20278, 0);
  if (D.20279 != 0) goto <D.20280>; else goto <D.20281>;
  <D.20280>:
  monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "verify.c", 1881, "candidate->type == MONO_TYPE_ARRAY");
  <D.20281>:
  D.20282 = left->rank;
  D.20283 = right->rank;
  if (D.20282 != D.20283) goto <D.20284>; else goto <D.20285>;
  <D.20284>:
  D.20286 = 0;
  return D.20286;
  <D.20285>:
  D.20287 = left->eklass;
  D.20288 = right->eklass;
  D.20286 = verifier_class_is_assignable_from (D.20287, D.20288);
  return D.20286;
}


mono_delegate_ret_equal (struct MonoType * delegate, struct MonoType * method)
{
  int D.20290;
  gboolean D.20293;

  D.20290 = mono_metadata_type_equal_full (delegate, method, 1);
  if (D.20290 != 0) goto <D.20291>; else goto <D.20292>;
  <D.20291>:
  D.20293 = 1;
  return D.20293;
  <D.20292>:
  D.20293 = mono_delegate_type_equal (delegate, method);
  return D.20293;
}


mono_method_verify (struct MonoMethod * method, int level)
{
  short unsigned int D.20297;
  int D.20298;
  int D.20299;
  short unsigned int D.20301;
  int D.20302;
  int D.20303;
  struct GSList * D.20304;
  struct MonoMethodSignature * D.20305;
  struct MonoMethodSignature * D.20306;
  gchar * D.20309;
  struct GSList * D.20310;
  struct GSList * D.20311;
  long unsigned int D.20312;
  long unsigned int D.20313;
  struct MonoClass * D.20316;
  long unsigned int D.20317;
  long unsigned int D.20318;
  long unsigned int D.20321;
  long unsigned int D.20322;
  gchar * D.20325;
  struct GSList * D.20326;
  struct MonoMethodHeader * D.20327;
  struct MonoMethodHeader * D.20328;
  gchar * D.20331;
  struct GSList * D.20332;
  unsigned int D.20333;
  sizetype D.20334;
  short unsigned int D.20335;
  int D.20336;
  <unnamed-unsigned:1> D.20337;
  int D.20338;
  int D.20339;
  <unnamed-unsigned:15> D.20340;
  int D.20341;
  int D.20342;
  long unsigned int D.20343;
  long unsigned int D.20344;
  void * D.20345;
  int D.20346;
  struct ILCodeDesc * D.20347;
  short unsigned int D.20348;
  int D.20349;
  struct MonoType *[0:] * D.20350;
  unsigned int D.20351;
  unsigned int D.20352;
  void * D.20353;
  int D.20354;
  long unsigned int D.20357;
  long unsigned int D.20358;
  int D.20363;
  int D.20365;
  int D.20366;
  gchar * D.20367;
  struct GSList * D.20368;
  int D.20369;
  int D.20372;
  long unsigned int D.20373;
  long unsigned int D.20374;
  void * D.20375;
  long unsigned int D.20376;
  struct MonoType * * D.20379;
  struct MonoType * iftmp.10;
  long unsigned int D.20381;
  long unsigned int D.20385;
  long unsigned int D.20386;
  struct MonoType * * D.20387;
  struct MonoType *[0:] * D.20388;
  long unsigned int D.20389;
  long unsigned int D.20390;
  long unsigned int D.20391;
  struct MonoGenericContainer * D.20398;
  struct MonoGenericContainer * D.20402;
  struct MonoType * * D.20404;
  long unsigned int D.20405;
  long unsigned int D.20406;
  struct MonoType * * D.20407;
  struct MonoType * D.20408;
  struct MonoGenericContext * D.20409;
  struct MonoType * D.20410;
  int D.20411;
  struct MonoType * iftmp.11;
  gchar * D.20418;
  struct GSList * D.20419;
  struct MonoType * * D.20420;
  struct MonoType * D.20421;
  struct MonoType * D.20422;
  int D.20423;
  struct MonoType * iftmp.12;
  gchar * D.20430;
  struct GSList * D.20431;
  int D.20432;
  int D.20434;
  gchar * D.20437;
  struct GSList * D.20438;
  int D.20439;
  int D.20441;
  gchar * D.20444;
  struct GSList * D.20445;
  struct MonoExceptionClause * D.20447;
  long unsigned int D.20448;
  unsigned int D.20451;
  int D.20452;
  unsigned int D.20453;
  unsigned int D.20455;
  unsigned int D.20456;
  unsigned int D.20458;
  gchar * D.20459;
  struct GSList * D.20460;
  gchar * D.20463;
  struct GSList * D.20464;
  unsigned int D.20467;
  unsigned int D.20469;
  unsigned int D.20470;
  unsigned int D.20472;
  gchar * D.20473;
  struct GSList * D.20474;
  gchar * D.20477;
  struct GSList * D.20478;
  uint32_t iftmp.13;
  unsigned int D.20484;
  gchar * D.20489;
  struct GSList * D.20490;
  unsigned int D.20493;
  gchar * D.20496;
  struct GSList * D.20497;
  gchar * D.20500;
  struct GSList * D.20501;
  long unsigned int D.20502;
  long unsigned int D.20503;
  struct MonoExceptionClause * D.20504;
  <unnamed-unsigned:15> D.20505;
  int D.20506;
  long unsigned int D.20509;
  long unsigned int D.20510;
  struct ILCodeDesc * D.20511;
  short unsigned int D.20512;
  short unsigned int D.20513;
  long unsigned int D.20516;
  long unsigned int D.20517;
  struct ILCodeDesc * D.20518;
  short unsigned int D.20519;
  short unsigned int D.20520;
  long unsigned int D.20523;
  long unsigned int D.20524;
  struct ILCodeDesc * D.20525;
  short unsigned int D.20526;
  short unsigned int D.20527;
  struct MonoClass * D.20530;
  gchar * D.20533;
  struct GSList * D.20534;
  struct MonoType * D.20535;
  int D.20536;
  long unsigned int D.20538;
  long unsigned int D.20539;
  struct ILCodeDesc * D.20540;
  long unsigned int D.20544;
  long unsigned int D.20545;
  struct ILCodeDesc * D.20546;
  struct MonoClass * D.20547;
  int D.20550;
  const char * D.20553;
  gchar * D.20554;
  struct GSList * D.20555;
  _Bool D.20556;
  long int D.20557;
  long int D.20558;
  long int ip.14;
  long int code_start.15;
  long int D.20563;
  int D.20564;
  unsigned int D.20565;
  gchar * D.20568;
  struct GSList * D.20569;
  unsigned char D.20574;
  int D.20575;
  gchar * D.20576;
  struct GSList * D.20577;
  unsigned int op_size.16;
  unsigned int D.20581;
  unsigned int op_size.17;
  unsigned int D.20584;
  gchar * D.20585;
  struct GSList * D.20586;
  int op.18;
  int D.20590;
  const char * D.20593;
  gchar * D.20594;
  struct GSList * D.20595;
  unsigned int D.20596;
  unsigned int D.20597;
  unsigned int D.20598;
  gchar * D.20606;
  struct GSList * D.20607;
  unsigned int D.20610;
  unsigned int D.20611;
  unsigned int D.20612;
  unsigned int D.20617;
  gchar * D.20620;
  struct GSList * D.20621;
  gchar * D.20626;
  struct GSList * D.20627;
  gchar * D.20636;
  struct GSList * D.20637;
  gchar * D.20645;
  struct GSList * D.20646;
  short unsigned int D.20651;
  gchar * D.20656;
  struct GSList * D.20657;
  long unsigned int D.20659;
  long unsigned int D.20660;
  long unsigned int D.20663;
  long unsigned int D.20664;
  struct ILCodeDesc * D.20665;
  short unsigned int D.20666;
  short unsigned int D.20667;
  sizetype D.20668;
  int D.20672;
  long unsigned int D.20673;
  long unsigned int D.20674;
  struct ILCodeDesc * D.20675;
  int D.20676;
  unsigned int D.20677;
  const unsigned char * D.20680;
  long unsigned int ip.19;
  unsigned int D.20683;
  gchar * D.20684;
  struct GSList * D.20685;
  const unsigned char * D.20686;
  unsigned char D.20687;
  unsigned int D.20688;
  _Bool D.20689;
  int D.20690;
  unsigned int D.20691;
  int D.20692;
  int D.20694;
  unsigned int D.20695;
  int D.20696;
  unsigned int D.20697;
  gchar * D.20701;
  struct GSList * D.20702;
  unsigned int D.20703;
  gchar * D.20707;
  struct GSList * D.20708;
  int D.20709;
  struct MonoClass * D.20712;
  struct MonoType * D.20713;
  gchar * D.20717;
  struct GSList * D.20718;
  int D.20719;
  const unsigned char * D.20724;
  gchar * D.20726;
  struct GSList * D.20727;
  int D.20728;
  const unsigned char * D.20733;
  gchar * D.20735;
  struct GSList * D.20736;
  int D.20737;
  struct MonoClass * D.20740;
  struct MonoType * D.20741;
  gchar * D.20745;
  struct GSList * D.20746;
  int D.20747;
  struct MonoClass * D.20750;
  struct MonoType * D.20751;
  gchar * D.20755;
  struct GSList * D.20756;
  int D.20757;
  int D.20760;
  struct MonoClass * D.20763;
  struct MonoType * D.20764;
  gchar * D.20768;
  struct GSList * D.20769;
  signed char D.20770;
  int D.20771;
  int D.20772;
  gchar * D.20776;
  struct GSList * D.20777;
  gchar * D.20781;
  struct GSList * D.20782;
  unsigned int D.20783;
  unsigned int D.20784;
  unsigned int D.20785;
  unsigned int D.20786;
  unsigned int D.20787;
  unsigned int D.20788;
  unsigned int D.20789;
  unsigned int D.20790;
  unsigned int D.20791;
  unsigned int D.20792;
  int D.20793;
  int D.20794;
  gchar * D.20798;
  struct GSList * D.20799;
  gchar * D.20803;
  struct GSList * D.20804;
  _Bool D.20805;
  int D.20806;
  gchar * D.20807;
  struct GSList * D.20808;
  int D.20809;
  int D.20811;
  struct ILStackDesc * D.20813;
  gchar * D.20817;
  struct GSList * D.20818;
  gchar * D.20821;
  struct GSList * D.20822;
  int D.20823;
  gchar * D.20826;
  struct GSList * D.20827;
  gchar * D.20831;
  struct GSList * D.20832;
  gchar * D.20838;
  struct GSList * D.20839;
  _Bool D.20840;
  int D.20841;
  gchar * D.20845;
  struct GSList * D.20846;
  gchar * D.20850;
  struct GSList * D.20851;
  gchar * D.20857;
  struct GSList * D.20858;
  gchar * D.20862;
  struct GSList * D.20863;
  gchar * D.20867;
  struct GSList * D.20868;
  gchar * D.20872;
  struct GSList * D.20873;
  gchar * D.20877;
  struct GSList * D.20878;
  gchar * D.20881;
  struct GSList * D.20882;
  long unsigned int D.20885;
  long unsigned int D.20886;
  const unsigned char * D.20887;
  long unsigned int D.20889;
  gchar * D.20890;
  struct GSList * D.20891;
  int entries.20;
  gchar * D.20896;
  struct GSList * D.20897;
  gchar * D.20901;
  struct GSList * D.20902;
  gchar * D.20906;
  struct GSList * D.20907;
  gchar * D.20911;
  struct GSList * D.20912;
  gchar * D.20916;
  struct GSList * D.20917;
  const char * iftmp.21;
  gchar * D.20922;
  struct GSList * D.20923;
  gchar * D.20927;
  struct GSList * D.20928;
  gchar * D.20932;
  struct GSList * D.20933;
  _Bool D.20934;
  int D.20935;
  gchar * D.20939;
  struct GSList * D.20940;
  _Bool D.20941;
  int D.20942;
  gchar * D.20946;
  struct GSList * D.20947;
  gchar * D.20951;
  struct GSList * D.20952;
  gchar * D.20956;
  struct GSList * D.20957;
  gchar * D.20961;
  struct GSList * D.20962;
  gchar * D.20966;
  struct GSList * D.20967;
  gchar * D.20971;
  struct GSList * D.20972;
  gchar * D.20976;
  struct GSList * D.20977;
  gchar * D.20981;
  struct GSList * D.20982;
  gchar * D.20986;
  struct GSList * D.20987;
  gchar * D.20991;
  struct GSList * D.20992;
  gchar * D.20996;
  struct GSList * D.20997;
  gchar * D.21001;
  struct GSList * D.21002;
  int D.21003;
  gchar * D.21006;
  struct GSList * D.21007;
  gchar * D.21011;
  struct GSList * D.21012;
  unsigned int D.21013;
  int D.21014;
  gchar * D.21018;
  struct GSList * D.21019;
  gchar * D.21023;
  struct GSList * D.21024;
  const unsigned char * D.21027;
  gchar * D.21029;
  struct GSList * D.21030;
  short unsigned int D.21031;
  short unsigned int D.21032;
  int D.21033;
  int D.21034;
  int D.21035;
  int D.21036;
  int D.21037;
  unsigned int D.21038;
  unsigned int D.21039;
  gchar * D.21043;
  struct GSList * D.21044;
  int D.21045;
  long unsigned int D.21047;
  gchar * D.21050;
  struct GSList * D.21051;
  struct ILStackDesc * D.21052;
  struct MonoClass * D.21053;
  struct MonoType * D.21054;
  gchar * D.21058;
  struct GSList * D.21059;
  gchar * D.21063;
  struct GSList * D.21064;
  gchar * D.21068;
  struct GSList * D.21069;
  unsigned int D.21070;
  _Bool D.21071;
  int D.21072;
  gchar * D.21076;
  struct GSList * D.21077;
  _Bool D.21078;
  int D.21079;
  gchar * D.21080;
  struct GSList * D.21081;
  gchar * D.21085;
  struct GSList * D.21086;
  unsigned char D.21089;
  gchar * D.21094;
  struct GSList * D.21095;
  gchar * D.21099;
  struct GSList * D.21100;
  gchar * D.21104;
  struct GSList * D.21105;
  struct MonoType * D.21106;
  unsigned int D.21107;
  unsigned int D.21108;
  int D.21109;
  gchar * D.21114;
  struct GSList * D.21115;
  int D.21118;
  gchar * D.21123;
  struct GSList * D.21124;
  int D.21127;
  gchar * D.21130;
  struct GSList * D.21131;
  gchar * D.21135;
  struct GSList * D.21136;
  gchar * D.21137;
  struct GSList * D.21138;
  gchar * D.21139;
  struct GSList * D.21140;
  long unsigned int D.21145;
  long unsigned int D.21146;
  struct ILCodeDesc * D.21147;
  short unsigned int D.21148;
  short unsigned int D.21149;
  unsigned int D.21150;
  int D.21152;
  unsigned int D.21155;
  gchar * D.21158;
  struct GSList * D.21159;
  unsigned int D.21160;
  gchar * D.21163;
  struct GSList * D.21164;
  unsigned int D.21165;
  gchar * D.21168;
  struct GSList * D.21169;
  unsigned int D.21170;
  gchar * D.21173;
  struct GSList * D.21174;
  gchar * D.21183;
  struct GSList * D.21184;
  long unsigned int D.21185;
  struct ILCodeDesc * D.21186;
  short unsigned int D.21187;
  int D.21188;
  int D.21189;
  int D.21192;
  gchar * D.21195;
  struct GSList * D.21196;
  int D.21197;
  gchar * D.21203;
  struct GSList * D.21204;
  int D.21207;
  int D.21210;
  gchar * D.21216;
  struct GSList * D.21217;
  int D.21220;
  gchar * D.21228;
  struct GSList * D.21229;
  unsigned int i.22;
  struct MonoMethod * D.21234;
  int D.21235;
  int D.21238;
  struct MonoClass * D.21241;
  long unsigned int D.21242;
  long unsigned int D.21243;
  struct MonoClass * D.21250;
  unsigned char D.21252;
  gchar * D.21257;
  struct GSList * D.21258;
  gchar * D.21264;
  struct GSList * D.21265;
  struct ILStackDesc * D.21270;
  unsigned int i.23;
  void * D.21274;
  struct GSList * D.21275;
  struct GSList * D.21276;
  struct ILStackDesc * D.21281;
  struct MonoError error;
  const unsigned char * ip;
  const unsigned char * code_start;
  const unsigned char * end;
  struct MonoSimpleBasicBlock * bb;
  struct MonoSimpleBasicBlock * original_bb;
  int i;
  int n;
  int need_merge;
  int start;
  guint token;
  guint ip_offset;
  guint prefix;
  struct MonoGenericContext * generic_context;
  struct MonoImage * image;
  struct VerifyContext ctx;
  struct GSList * tmp;
  void cleanup = <<< error >>>;

  try
    {
      bb = 0B;
      original_bb = 0B;
      need_merge = 0;
      start = 0;
      ip_offset = 0;
      prefix = 0;
      generic_context = 0B;
      D.20297 = method->iflags;
      D.20298 = (int) D.20297;
      D.20299 = D.20298 & 4099;
      if (D.20299 != 0) goto <D.20295>; else goto <D.20300>;
      <D.20300>:
      D.20301 = method->flags;
      D.20302 = (int) D.20301;
      D.20303 = D.20302 & 9216;
      if (D.20303 != 0) goto <D.20295>; else goto <D.20296>;
      <D.20295>:
      D.20304 = 0B;
      return D.20304;
      <D.20296>:
      memset (&ctx, 0, 168);
      D.20305 = mono_method_signature (method);
      ctx.signature = D.20305;
      D.20306 = ctx.signature;
      if (D.20306 == 0B) goto <D.20307>; else goto <D.20308>;
      <D.20307>:
      {
        struct MonoVerifyInfoExtended * vinfo;

        vinfo = monoeg_malloc (24);
        vinfo->info.status = 1;
        D.20309 = monoeg_g_strdup_printf ("Could not decode method signature");
        vinfo->info.message = D.20309;
        vinfo->exception_type = 3;
        D.20310 = ctx.list;
        D.20311 = monoeg_g_slist_prepend (D.20310, vinfo);
        ctx.list = D.20311;
      }
      ctx.valid = 0;
      D.20304 = ctx.list;
      return D.20304;
      <D.20308>:
      D.20312 = BIT_FIELD_REF <*method, 64, 256>;
      D.20313 = D.20312 & 4503599627370496;
      if (D.20313 == 0) goto <D.20314>; else goto <D.20315>;
      <D.20314>:
      D.20316 = method->klass;
      D.20317 = BIT_FIELD_REF <*D.20316, 64, 256>;
      D.20318 = D.20317 & 536870912;
      if (D.20318 == 0) goto <D.20319>; else goto <D.20320>;
      <D.20319>:
      D.20306 = ctx.signature;
      D.20321 = BIT_FIELD_REF <*D.20306, 64, 64>;
      D.20322 = D.20321 & 32;
      if (D.20322 != 0) goto <D.20323>; else goto <D.20324>;
      <D.20323>:
      {
        struct MonoVerifyInfoExtended * vinfo;

        vinfo = monoeg_malloc (24);
        vinfo->info.status = 1;
        D.20325 = monoeg_g_strdup_printf ("Method and signature don\'t match in terms of genericity");
        vinfo->info.message = D.20325;
        vinfo->exception_type = 3;
        D.20310 = ctx.list;
        D.20326 = monoeg_g_slist_prepend (D.20310, vinfo);
        ctx.list = D.20326;
      }
      ctx.valid = 0;
      D.20304 = ctx.list;
      return D.20304;
      <D.20324>:
      <D.20320>:
      <D.20315>:
      D.20327 = mono_method_get_header (method);
      ctx.header = D.20327;
      D.20328 = ctx.header;
      if (D.20328 == 0B) goto <D.20329>; else goto <D.20330>;
      <D.20329>:
      {
        struct MonoVerifyInfoExtended * vinfo;

        vinfo = monoeg_malloc (24);
        vinfo->info.status = 1;
        D.20331 = monoeg_g_strdup_printf ("Could not decode method header");
        vinfo->info.message = D.20331;
        vinfo->exception_type = 3;
        D.20310 = ctx.list;
        D.20332 = monoeg_g_slist_prepend (D.20310, vinfo);
        ctx.list = D.20332;
      }
      ctx.valid = 0;
      D.20304 = ctx.list;
      return D.20304;
      <D.20330>:
      ctx.method = method;
      D.20328 = ctx.header;
      ip = D.20328->code;
      code_start = ip;
      D.20328 = ctx.header;
      D.20333 = D.20328->code_size;
      D.20334 = (sizetype) D.20333;
      end = ip + D.20334;
      D.20316 = method->klass;
      image = D.20316->image;
      ctx.image = image;
      D.20306 = ctx.signature;
      D.20335 = D.20306->param_count;
      D.20336 = (int) D.20335;
      D.20306 = ctx.signature;
      D.20337 = D.20306->hasthis;
      D.20338 = (int) D.20337;
      D.20339 = D.20336 + D.20338;
      ctx.max_args = D.20339;
      D.20328 = ctx.header;
      D.20340 = D.20328->max_stack;
      D.20341 = (int) D.20340;
      ctx.max_stack = D.20341;
      ctx.valid = 1;
      D.20342 = ctx.valid;
      ctx.verifiable = D.20342;
      ctx.level = level;
      D.20328 = ctx.header;
      D.20333 = D.20328->code_size;
      D.20343 = (long unsigned int) D.20333;
      D.20344 = D.20343 * 16;
      D.20345 = monoeg_malloc (D.20344);
      ctx.code = D.20345;
      D.20328 = ctx.header;
      D.20333 = D.20328->code_size;
      D.20346 = (int) D.20333;
      ctx.code_size = D.20346;
      D.20347 = ctx.code;
      D.20328 = ctx.header;
      D.20333 = D.20328->code_size;
      D.20343 = (long unsigned int) D.20333;
      D.20344 = D.20343 * 16;
      memset (D.20347, 0, D.20344);
      D.20328 = ctx.header;
      D.20348 = D.20328->num_locals;
      D.20349 = (int) D.20348;
      ctx.num_locals = D.20349;
      D.20328 = ctx.header;
      D.20350 = &D.20328->locals;
      D.20328 = ctx.header;
      D.20348 = D.20328->num_locals;
      D.20351 = (unsigned int) D.20348;
      D.20352 = D.20351 * 8;
      D.20353 = monoeg_g_memdup (D.20350, D.20352);
      ctx.locals = D.20353;
      D.20354 = ctx.num_locals;
      if (D.20354 > 0) goto <D.20355>; else goto <D.20356>;
      <D.20355>:
      D.20328 = ctx.header;
      D.20357 = BIT_FIELD_REF <*D.20328, 64, 64>;
      D.20358 = D.20357 & 1;
      if (D.20358 == 0) goto <D.20359>; else goto <D.20360>;
      <D.20359>:
      D.20363 = ctx.verifiable;
      if (D.20363 != 0) goto <D.20361>; else goto <D.20364>;
      <D.20364>:
      D.20365 = ctx.level;
      D.20366 = D.20365 & 128;
      if (D.20366 != 0) goto <D.20361>; else goto <D.20362>;
      <D.20361>:
      {
        struct MonoVerifyInfoExtended * vinfo;

        vinfo = monoeg_malloc (24);
        vinfo->info.status = 8;
        D.20367 = monoeg_g_strdup_printf ("Method with locals variable but without init locals set");
        vinfo->info.message = D.20367;
        vinfo->exception_type = 4;
        D.20310 = ctx.list;
        D.20368 = monoeg_g_slist_prepend (D.20310, vinfo);
        ctx.list = D.20368;
      }
      ctx.verifiable = 0;
      D.20365 = ctx.level;
      D.20369 = D.20365 & 16;
      if (D.20369 != 0) goto <D.20370>; else goto <D.20371>;
      <D.20370>:
      ctx.valid = 0;
      <D.20371>:
      <D.20362>:
      <D.20360>:
      <D.20356>:
      D.20372 = ctx.max_args;
      D.20373 = (long unsigned int) D.20372;
      D.20374 = D.20373 * 8;
      D.20375 = monoeg_malloc (D.20374);
      ctx.params = D.20375;
      D.20306 = ctx.signature;
      D.20321 = BIT_FIELD_REF <*D.20306, 64, 64>;
      D.20376 = D.20321 & 512;
      if (D.20376 != 0) goto <D.20377>; else goto <D.20378>;
      <D.20377>:
      D.20379 = ctx.params;
      D.20316 = method->klass;
      D.20317 = BIT_FIELD_REF <*D.20316, 64, 256>;
      D.20381 = D.20317 & 1152921504606846976;
      if (D.20381 != 0) goto <D.20382>; else goto <D.20383>;
      <D.20382>:
      D.20316 = method->klass;
      iftmp.10 = &D.20316->this_arg;
      goto <D.20384>;
      <D.20383>:
      D.20316 = method->klass;
      iftmp.10 = &D.20316->byval_arg;
      <D.20384>:
      *D.20379 = iftmp.10;
      <D.20378>:
      D.20379 = ctx.params;
      D.20306 = ctx.signature;
      D.20337 = D.20306->hasthis;
      D.20385 = (long unsigned int) D.20337;
      D.20386 = D.20385 * 8;
      D.20387 = D.20379 + D.20386;
      D.20306 = ctx.signature;
      D.20388 = &D.20306->params;
      D.20306 = ctx.signature;
      D.20335 = D.20306->param_count;
      D.20389 = (long unsigned int) D.20335;
      D.20390 = D.20389 * 8;
      memcpy (D.20387, D.20388, D.20390);
      D.20306 = ctx.signature;
      D.20321 = BIT_FIELD_REF <*D.20306, 64, 64>;
      D.20391 = D.20321 & 64;
      if (D.20391 != 0) goto <D.20392>; else goto <D.20393>;
      <D.20392>:
      generic_context = mono_method_get_context (method);
      ctx.generic_context = generic_context;
      <D.20393>:
      if (generic_context == 0B) goto <D.20396>; else goto <D.20397>;
      <D.20396>:
      D.20316 = method->klass;
      D.20398 = D.20316->generic_container;
      if (D.20398 != 0B) goto <D.20394>; else goto <D.20399>;
      <D.20399>:
      D.20312 = BIT_FIELD_REF <*method, 64, 256>;
      D.20313 = D.20312 & 4503599627370496;
      if (D.20313 != 0) goto <D.20394>; else goto <D.20395>;
      <D.20394>:
      D.20312 = BIT_FIELD_REF <*method, 64, 256>;
      D.20313 = D.20312 & 4503599627370496;
      if (D.20313 != 0) goto <D.20400>; else goto <D.20401>;
      <D.20400>:
      D.20402 = mono_method_get_generic_container (method);
      generic_context = &D.20402->context;
      ctx.generic_context = generic_context;
      goto <D.20403>;
      <D.20401>:
      D.20316 = method->klass;
      D.20398 = D.20316->generic_container;
      generic_context = &D.20398->context;
      ctx.generic_context = generic_context;
      <D.20403>:
      <D.20395>:
      <D.20397>:
      i = 0;
      goto <D.19530>;
      <D.19529>:
      {
        struct MonoType * uninflated;

        D.20404 = ctx.locals;
        D.20405 = (long unsigned int) i;
        D.20406 = D.20405 * 8;
        D.20407 = D.20404 + D.20406;
        uninflated = *D.20407;
        D.20404 = ctx.locals;
        D.20405 = (long unsigned int) i;
        D.20406 = D.20405 * 8;
        D.20407 = D.20404 + D.20406;
        D.20404 = ctx.locals;
        D.20405 = (long unsigned int) i;
        D.20406 = D.20405 * 8;
        D.20407 = D.20404 + D.20406;
        D.20408 = *D.20407;
        D.20409 = ctx.generic_context;
        D.20410 = mono_class_inflate_generic_type_checked (D.20408, D.20409, &error);
        *D.20407 = D.20410;
        D.20411 = mono_error_ok (&error);
        if (D.20411 == 0) goto <D.20412>; else goto <D.20413>;
        <D.20412>:
        {
          char * name;

          D.20404 = ctx.locals;
          D.20405 = (long unsigned int) i;
          D.20406 = D.20405 * 8;
          D.20407 = D.20404 + D.20406;
          D.20408 = *D.20407;
          if (D.20408 != 0B) goto <D.20415>; else goto <D.20416>;
          <D.20415>:
          D.20404 = ctx.locals;
          D.20405 = (long unsigned int) i;
          D.20406 = D.20405 * 8;
          D.20407 = D.20404 + D.20406;
          iftmp.11 = *D.20407;
          goto <D.20417>;
          <D.20416>:
          iftmp.11 = uninflated;
          <D.20417>:
          name = mono_type_full_name (iftmp.11);
          {
            struct MonoVerifyInfoExtended * vinfo;

            vinfo = monoeg_malloc (24);
            vinfo->info.status = 1;
            D.20418 = monoeg_g_strdup_printf ("Invalid local %d of type %s", i, name);
            vinfo->info.message = D.20418;
            vinfo->exception_type = 3;
            D.20310 = ctx.list;
            D.20419 = monoeg_g_slist_prepend (D.20310, vinfo);
            ctx.list = D.20419;
          }
          ctx.valid = 0;
          monoeg_g_free (name);
          mono_error_cleanup (&error);
          ctx.num_locals = i;
          ctx.max_args = 0;
          goto cleanup;
        }
        <D.20413>:
      }
      i = i + 1;
      <D.19530>:
      D.20354 = ctx.num_locals;
      if (D.20354 > i) goto <D.19529>; else goto <D.19531>;
      <D.19531>:
      i = 0;
      goto <D.19536>;
      <D.19535>:
      {
        struct MonoType * uninflated;

        D.20379 = ctx.params;
        D.20405 = (long unsigned int) i;
        D.20406 = D.20405 * 8;
        D.20420 = D.20379 + D.20406;
        uninflated = *D.20420;
        D.20379 = ctx.params;
        D.20405 = (long unsigned int) i;
        D.20406 = D.20405 * 8;
        D.20420 = D.20379 + D.20406;
        D.20379 = ctx.params;
        D.20405 = (long unsigned int) i;
        D.20406 = D.20405 * 8;
        D.20420 = D.20379 + D.20406;
        D.20421 = *D.20420;
        D.20409 = ctx.generic_context;
        D.20422 = mono_class_inflate_generic_type_checked (D.20421, D.20409, &error);
        *D.20420 = D.20422;
        D.20423 = mono_error_ok (&error);
        if (D.20423 == 0) goto <D.20424>; else goto <D.20425>;
        <D.20424>:
        {
          char * name;

          D.20379 = ctx.params;
          D.20405 = (long unsigned int) i;
          D.20406 = D.20405 * 8;
          D.20420 = D.20379 + D.20406;
          D.20421 = *D.20420;
          if (D.20421 != 0B) goto <D.20427>; else goto <D.20428>;
          <D.20427>:
          D.20379 = ctx.params;
          D.20405 = (long unsigned int) i;
          D.20406 = D.20405 * 8;
          D.20420 = D.20379 + D.20406;
          iftmp.12 = *D.20420;
          goto <D.20429>;
          <D.20428>:
          iftmp.12 = uninflated;
          <D.20429>:
          name = mono_type_full_name (iftmp.12);
          {
            struct MonoVerifyInfoExtended * vinfo;

            vinfo = monoeg_malloc (24);
            vinfo->info.status = 1;
            D.20430 = monoeg_g_strdup_printf ("Invalid parameter %d of type %s", i, name);
            vinfo->info.message = D.20430;
            vinfo->exception_type = 3;
            D.20310 = ctx.list;
            D.20431 = monoeg_g_slist_prepend (D.20310, vinfo);
            ctx.list = D.20431;
          }
          ctx.valid = 0;
          monoeg_g_free (name);
          mono_error_cleanup (&error);
          ctx.max_args = i;
          goto cleanup;
        }
        <D.20425>:
      }
      i = i + 1;
      <D.19536>:
      D.20372 = ctx.max_args;
      if (D.20372 > i) goto <D.19535>; else goto <D.19537>;
      <D.19537>:
      stack_init (&ctx, &ctx.eval);
      i = 0;
      goto <D.19542>;
      <D.19541>:
      D.20404 = ctx.locals;
      D.20405 = (long unsigned int) i;
      D.20406 = D.20405 * 8;
      D.20407 = D.20404 + D.20406;
      D.20408 = *D.20407;
      D.20432 = mono_type_is_valid_in_context (&ctx, D.20408);
      if (D.20432 == 0) goto <D.19538>; else goto <D.20433>;
      <D.20433>:
      D.20404 = ctx.locals;
      D.20405 = (long unsigned int) i;
      D.20406 = D.20405 * 8;
      D.20407 = D.20404 + D.20406;
      D.20408 = *D.20407;
      D.20434 = get_stack_type (D.20408);
      if (D.20434 == 0) goto <D.20435>; else goto <D.20436>;
      <D.20435>:
      {
        char * name;

        D.20404 = ctx.locals;
        D.20405 = (long unsigned int) i;
        D.20406 = D.20405 * 8;
        D.20407 = D.20404 + D.20406;
        D.20408 = *D.20407;
        name = mono_type_full_name (D.20408);
        {
          struct MonoVerifyInfoExtended * vinfo;

          vinfo = monoeg_malloc (24);
          vinfo->info.status = 1;
          D.20437 = monoeg_g_strdup_printf ("Invalid local %i of type %s", i, name);
          vinfo->info.message = D.20437;
          vinfo->exception_type = 3;
          D.20310 = ctx.list;
          D.20438 = monoeg_g_slist_prepend (D.20310, vinfo);
          ctx.list = D.20438;
        }
        ctx.valid = 0;
        monoeg_g_free (name);
        goto <D.19538>;
      }
      <D.20436>:
      i = i + 1;
      <D.19542>:
      D.20354 = ctx.num_locals;
      if (D.20354 > i) goto <D.19541>; else goto <D.19538>;
      <D.19538>:
      i = 0;
      goto <D.19547>;
      <D.19546>:
      D.20379 = ctx.params;
      D.20405 = (long unsigned int) i;
      D.20406 = D.20405 * 8;
      D.20420 = D.20379 + D.20406;
      D.20421 = *D.20420;
      D.20439 = mono_type_is_valid_in_context (&ctx, D.20421);
      if (D.20439 == 0) goto <D.19543>; else goto <D.20440>;
      <D.20440>:
      D.20379 = ctx.params;
      D.20405 = (long unsigned int) i;
      D.20406 = D.20405 * 8;
      D.20420 = D.20379 + D.20406;
      D.20421 = *D.20420;
      D.20441 = get_stack_type (D.20421);
      if (D.20441 == 0) goto <D.20442>; else goto <D.20443>;
      <D.20442>:
      {
        char * name;

        D.20379 = ctx.params;
        D.20405 = (long unsigned int) i;
        D.20406 = D.20405 * 8;
        D.20420 = D.20379 + D.20406;
        D.20421 = *D.20420;
        name = mono_type_full_name (D.20421);
        {
          struct MonoVerifyInfoExtended * vinfo;

          vinfo = monoeg_malloc (24);
          vinfo->info.status = 1;
          D.20444 = monoeg_g_strdup_printf ("Invalid parameter %i of type %s", i, name);
          vinfo->info.message = D.20444;
          vinfo->exception_type = 3;
          D.20310 = ctx.list;
          D.20445 = monoeg_g_slist_prepend (D.20310, vinfo);
          ctx.list = D.20445;
        }
        ctx.valid = 0;
        monoeg_g_free (name);
        goto <D.19543>;
      }
      <D.20443>:
      i = i + 1;
      <D.19547>:
      D.20372 = ctx.max_args;
      if (D.20372 > i) goto <D.19546>; else goto <D.19543>;
      <D.19543>:
      D.20342 = ctx.valid;
      if (D.20342 == 0) goto cleanup; else goto <D.20446>;
      <D.20446>:
      i = 0;
      goto <D.19562>;
      <D.19561>:
      {
        struct MonoExceptionClause * clause;

        D.20328 = ctx.header;
        D.20447 = D.20328->clauses;
        D.20405 = (long unsigned int) i;
        D.20448 = D.20405 * 32;
        clause = D.20447 + D.20448;
        D.20451 = clause->try_offset;
        D.20452 = ctx.code_size;
        D.20453 = (unsigned int) D.20452;
        if (D.20451 > D.20453) goto <D.20449>; else goto <D.20454>;
        <D.20454>:
        D.20451 = clause->try_offset;
        D.20455 = clause->try_len;
        D.20456 = D.20451 + D.20455;
        D.20452 = ctx.code_size;
        D.20453 = (unsigned int) D.20452;
        if (D.20456 > D.20453) goto <D.20449>; else goto <D.20457>;
        <D.20457>:
        D.20455 = clause->try_len;
        D.20458 = ~D.20455;
        D.20451 = clause->try_offset;
        if (D.20458 < D.20451) goto <D.20449>; else goto <D.20450>;
        <D.20449>:
        {
          struct MonoVerifyInfoExtended * vinfo;

          vinfo = monoeg_malloc (24);
          vinfo->info.status = 1;
          D.20451 = clause->try_offset;
          D.20459 = monoeg_g_strdup_printf ("try clause out of bounds at 0x%04x", D.20451);
          vinfo->info.message = D.20459;
          vinfo->exception_type = 3;
          D.20310 = ctx.list;
          D.20460 = monoeg_g_slist_prepend (D.20310, vinfo);
          ctx.list = D.20460;
        }
        ctx.valid = 0;
        <D.20450>:
        D.20455 = clause->try_len;
        if (D.20455 == 0) goto <D.20461>; else goto <D.20462>;
        <D.20461>:
        {
          struct MonoVerifyInfoExtended * vinfo;

          vinfo = monoeg_malloc (24);
          vinfo->info.status = 1;
          D.20451 = clause->try_offset;
          D.20463 = monoeg_g_strdup_printf ("try clause len <= 0 at 0x%04x", D.20451);
          vinfo->info.message = D.20463;
          vinfo->exception_type = 3;
          D.20310 = ctx.list;
          D.20464 = monoeg_g_slist_prepend (D.20310, vinfo);
          ctx.list = D.20464;
        }
        ctx.valid = 0;
        <D.20462>:
        D.20467 = clause->handler_offset;
        D.20452 = ctx.code_size;
        D.20453 = (unsigned int) D.20452;
        if (D.20467 > D.20453) goto <D.20465>; else goto <D.20468>;
        <D.20468>:
        D.20467 = clause->handler_offset;
        D.20469 = clause->handler_len;
        D.20470 = D.20467 + D.20469;
        D.20452 = ctx.code_size;
        D.20453 = (unsigned int) D.20452;
        if (D.20470 > D.20453) goto <D.20465>; else goto <D.20471>;
        <D.20471>:
        D.20469 = clause->handler_len;
        D.20472 = ~D.20469;
        D.20467 = clause->handler_offset;
        if (D.20472 < D.20467) goto <D.20465>; else goto <D.20466>;
        <D.20465>:
        {
          struct MonoVerifyInfoExtended * vinfo;

          vinfo = monoeg_malloc (24);
          vinfo->info.status = 1;
          D.20451 = clause->try_offset;
          D.20473 = monoeg_g_strdup_printf ("handler clause out of bounds at 0x%04x", D.20451);
          vinfo->info.message = D.20473;
          vinfo->exception_type = 3;
          D.20310 = ctx.list;
          D.20474 = monoeg_g_slist_prepend (D.20310, vinfo);
          ctx.list = D.20474;
        }
        ctx.valid = 0;
        <D.20466>:
        D.20469 = clause->handler_len;
        if (D.20469 == 0) goto <D.20475>; else goto <D.20476>;
        <D.20475>:
        {
          struct MonoVerifyInfoExtended * vinfo;

          vinfo = monoeg_malloc (24);
          vinfo->info.status = 1;
          D.20451 = clause->try_offset;
          D.20477 = monoeg_g_strdup_printf ("handler clause len <= 0 at 0x%04x", D.20451);
          vinfo->info.message = D.20477;
          vinfo->exception_type = 3;
          D.20310 = ctx.list;
          D.20478 = monoeg_g_slist_prepend (D.20310, vinfo);
          ctx.list = D.20478;
        }
        ctx.valid = 0;
        <D.20476>:
        D.20451 = clause->try_offset;
        D.20467 = clause->handler_offset;
        if (D.20451 < D.20467) goto <D.20481>; else goto <D.20482>;
        <D.20481>:
        D.20451 = clause->try_offset;
        D.20455 = clause->try_len;
        D.20456 = D.20451 + D.20455;
        D.20484 = clause->flags;
        if (D.20484 == 1) goto <D.20485>; else goto <D.20486>;
        <D.20485>:
        iftmp.13 = clause->data.filter_offset;
        goto <D.20487>;
        <D.20486>:
        iftmp.13 = clause->handler_offset;
        <D.20487>:
        if (D.20456 > iftmp.13) goto <D.20479>; else goto <D.20488>;
        <D.20488>:
        D.20455 = clause->try_len;
        D.20458 = ~D.20455;
        D.20451 = clause->try_offset;
        if (D.20458 < D.20451) goto <D.20479>; else goto <D.20480>;
        <D.20479>:
        {
          struct MonoVerifyInfoExtended * vinfo;

          vinfo = monoeg_malloc (24);
          vinfo->info.status = 1;
          D.20451 = clause->try_offset;
          D.20467 = clause->handler_offset;
          D.20489 = monoeg_g_strdup_printf ("try block (at 0x%04x) includes handler block (at 0x%04x)", D.20451, D.20467);
          vinfo->info.message = D.20489;
          vinfo->exception_type = 3;
          D.20310 = ctx.list;
          D.20490 = monoeg_g_slist_prepend (D.20310, vinfo);
          ctx.list = D.20490;
        }
        ctx.valid = 0;
        <D.20480>:
        <D.20482>:
        D.20484 = clause->flags;
        if (D.20484 == 1) goto <D.20491>; else goto <D.20492>;
        <D.20491>:
        D.20493 = clause->data.filter_offset;
        D.20452 = ctx.code_size;
        D.20453 = (unsigned int) D.20452;
        if (D.20493 > D.20453) goto <D.20494>; else goto <D.20495>;
        <D.20494>:
        {
          struct MonoVerifyInfoExtended * vinfo;

          vinfo = monoeg_malloc (24);
          vinfo->info.status = 1;
          D.20451 = clause->try_offset;
          D.20496 = monoeg_g_strdup_printf ("filter clause out of bounds at 0x%04x", D.20451);
          vinfo->info.message = D.20496;
          vinfo->exception_type = 3;
          D.20310 = ctx.list;
          D.20497 = monoeg_g_slist_prepend (D.20310, vinfo);
          ctx.list = D.20497;
        }
        ctx.valid = 0;
        <D.20495>:
        D.20493 = clause->data.filter_offset;
        D.20467 = clause->handler_offset;
        if (D.20493 >= D.20467) goto <D.20498>; else goto <D.20499>;
        <D.20498>:
        {
          struct MonoVerifyInfoExtended * vinfo;

          vinfo = monoeg_malloc (24);
          vinfo->info.status = 1;
          D.20493 = clause->data.filter_offset;
          D.20500 = monoeg_g_strdup_printf ("filter clause must come before the handler clause at 0x%04x", D.20493);
          vinfo->info.message = D.20500;
          vinfo->exception_type = 3;
          D.20310 = ctx.list;
          D.20501 = monoeg_g_slist_prepend (D.20310, vinfo);
          ctx.list = D.20501;
        }
        ctx.valid = 0;
        <D.20499>:
        <D.20492>:
        n = i + 1;
        goto <D.19557>;
        <D.19556>:
        D.20328 = ctx.header;
        D.20447 = D.20328->clauses;
        D.20502 = (long unsigned int) n;
        D.20503 = D.20502 * 32;
        D.20504 = D.20447 + D.20503;
        verify_clause_relationship (&ctx, clause, D.20504);
        n = n + 1;
        <D.19557>:
        D.20328 = ctx.header;
        D.20505 = D.20328->num_clauses;
        D.20506 = (int) D.20505;
        if (D.20506 > n) goto <D.20507>; else goto <D.19558>;
        <D.20507>:
        D.20342 = ctx.valid;
        if (D.20342 != 0) goto <D.19556>; else goto <D.19558>;
        <D.19558>:
        D.20342 = ctx.valid;
        if (D.20342 == 0) goto <D.19559>; else goto <D.20508>;
        <D.20508>:
        D.20347 = ctx.code;
        D.20451 = clause->try_offset;
        D.20509 = (long unsigned int) D.20451;
        D.20510 = D.20509 * 16;
        D.20511 = D.20347 + D.20510;
        D.20347 = ctx.code;
        D.20451 = clause->try_offset;
        D.20509 = (long unsigned int) D.20451;
        D.20510 = D.20509 * 16;
        D.20511 = D.20347 + D.20510;
        D.20512 = D.20511->flags;
        D.20513 = D.20512 | 2;
        D.20511->flags = D.20513;
        D.20451 = clause->try_offset;
        D.20455 = clause->try_len;
        D.20456 = D.20451 + D.20455;
        D.20452 = ctx.code_size;
        D.20453 = (unsigned int) D.20452;
        if (D.20456 < D.20453) goto <D.20514>; else goto <D.20515>;
        <D.20514>:
        D.20347 = ctx.code;
        D.20451 = clause->try_offset;
        D.20455 = clause->try_len;
        D.20456 = D.20451 + D.20455;
        D.20516 = (long unsigned int) D.20456;
        D.20517 = D.20516 * 16;
        D.20518 = D.20347 + D.20517;
        D.20347 = ctx.code;
        D.20451 = clause->try_offset;
        D.20455 = clause->try_len;
        D.20456 = D.20451 + D.20455;
        D.20516 = (long unsigned int) D.20456;
        D.20517 = D.20516 * 16;
        D.20518 = D.20347 + D.20517;
        D.20519 = D.20518->flags;
        D.20520 = D.20519 | 2;
        D.20518->flags = D.20520;
        <D.20515>:
        D.20467 = clause->handler_offset;
        D.20469 = clause->handler_len;
        D.20470 = D.20467 + D.20469;
        D.20452 = ctx.code_size;
        D.20453 = (unsigned int) D.20452;
        if (D.20470 < D.20453) goto <D.20521>; else goto <D.20522>;
        <D.20521>:
        D.20347 = ctx.code;
        D.20467 = clause->handler_offset;
        D.20469 = clause->handler_len;
        D.20470 = D.20467 + D.20469;
        D.20523 = (long unsigned int) D.20470;
        D.20524 = D.20523 * 16;
        D.20525 = D.20347 + D.20524;
        D.20347 = ctx.code;
        D.20467 = clause->handler_offset;
        D.20469 = clause->handler_len;
        D.20470 = D.20467 + D.20469;
        D.20523 = (long unsigned int) D.20470;
        D.20524 = D.20523 * 16;
        D.20525 = D.20347 + D.20524;
        D.20526 = D.20525->flags;
        D.20527 = D.20526 | 2;
        D.20525->flags = D.20527;
        <D.20522>:
        D.20484 = clause->flags;
        if (D.20484 == 0) goto <D.20528>; else goto <D.20529>;
        <D.20528>:
        D.20530 = clause->data.catch_class;
        if (D.20530 == 0B) goto <D.20531>; else goto <D.20532>;
        <D.20531>:
        {
          struct MonoVerifyInfoExtended * vinfo;

          vinfo = monoeg_malloc (24);
          vinfo->info.status = 1;
          D.20533 = monoeg_g_strdup_printf ("Catch clause %d with invalid type", i);
          vinfo->info.message = D.20533;
          vinfo->exception_type = 3;
          D.20310 = ctx.list;
          D.20534 = monoeg_g_slist_prepend (D.20310, vinfo);
          ctx.list = D.20534;
        }
        ctx.valid = 0;
        goto <D.19559>;
        <D.20532>:
        D.20530 = clause->data.catch_class;
        D.20535 = &D.20530->byval_arg;
        D.20536 = mono_type_is_valid_in_context (&ctx, D.20535);
        if (D.20536 == 0) goto <D.19559>; else goto <D.20537>;
        <D.20537>:
        D.20347 = ctx.code;
        D.20467 = clause->handler_offset;
        D.20538 = (long unsigned int) D.20467;
        D.20539 = D.20538 * 16;
        D.20540 = D.20347 + D.20539;
        D.20530 = clause->data.catch_class;
        init_stack_with_value_at_exception_boundary (&ctx, D.20540, D.20530);
        goto <D.20541>;
        <D.20529>:
        D.20484 = clause->flags;
        if (D.20484 == 1) goto <D.20542>; else goto <D.20543>;
        <D.20542>:
        D.20347 = ctx.code;
        D.20493 = clause->data.filter_offset;
        D.20544 = (long unsigned int) D.20493;
        D.20545 = D.20544 * 16;
        D.20546 = D.20347 + D.20545;
        D.20547 = mono_defaults.exception_class;
        init_stack_with_value_at_exception_boundary (&ctx, D.20546, D.20547);
        D.20347 = ctx.code;
        D.20467 = clause->handler_offset;
        D.20538 = (long unsigned int) D.20467;
        D.20539 = D.20538 * 16;
        D.20540 = D.20347 + D.20539;
        D.20547 = mono_defaults.exception_class;
        init_stack_with_value_at_exception_boundary (&ctx, D.20540, D.20547);
        <D.20543>:
        <D.20541>:
      }
      i = i + 1;
      <D.19562>:
      D.20328 = ctx.header;
      D.20505 = D.20328->num_clauses;
      D.20506 = (int) D.20505;
      if (D.20506 > i) goto <D.20548>; else goto <D.19559>;
      <D.20548>:
      D.20342 = ctx.valid;
      if (D.20342 != 0) goto <D.19561>; else goto <D.19559>;
      <D.19559>:
      D.20342 = ctx.valid;
      if (D.20342 == 0) goto cleanup; else goto <D.20549>;
      <D.20549>:
      bb = mono_basic_block_split (method, &error);
      original_bb = bb;
      D.20550 = mono_error_ok (&error);
      if (D.20550 == 0) goto <D.20551>; else goto <D.20552>;
      <D.20551>:
      {
        struct MonoVerifyInfoExtended * vinfo;

        vinfo = monoeg_malloc (24);
        vinfo->info.status = 1;
        D.20553 = mono_error_get_message (&error);
        D.20554 = monoeg_g_strdup_printf ("Invalid branch target: %s", D.20553);
        vinfo->info.message = D.20554;
        vinfo->exception_type = 3;
        D.20310 = ctx.list;
        D.20555 = monoeg_g_slist_prepend (D.20310, vinfo);
        ctx.list = D.20555;
      }
      ctx.valid = 0;
      mono_error_cleanup (&error);
      goto cleanup;
      <D.20552>:
      D.20556 = bb == 0B;
      D.20557 = (long int) D.20556;
      D.20558 = __builtin_expect (D.20557, 0);
      if (D.20558 != 0) goto <D.20559>; else goto <D.20560>;
      <D.20559>:
      monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "verify.c", 5001, "bb");
      <D.20560>:
      goto <D.19581>;
      <D.19891>:
      {
        int op_size;

        ip.14 = (long int) ip;
        code_start.15 = (long int) code_start;
        D.20563 = ip.14 - code_start.15;
        ip_offset = (guint) D.20563;
        {
          const unsigned char * ip_copy;
          int op;

          try
            {
              ip_copy = ip;
              D.20564 = bb->end;
              D.20565 = (unsigned int) D.20564;
              if (D.20565 < ip_offset) goto <D.20566>; else goto <D.20567>;
              <D.20566>:
              {
                struct MonoVerifyInfoExtended * vinfo;

                vinfo = monoeg_malloc (24);
                vinfo->info.status = 1;
                D.20564 = bb->end;
                D.20568 = monoeg_g_strdup_printf ("Branch or EH block at [0x%04x] targets middle instruction at 0x%04x", D.20564, ip_offset);
                vinfo->info.message = D.20568;
                vinfo->exception_type = 3;
                D.20310 = ctx.list;
                D.20569 = monoeg_g_slist_prepend (D.20310, vinfo);
                ctx.list = D.20569;
              }
              ctx.valid = 0;
              goto cleanup;
              <D.20567>:
              D.20564 = bb->end;
              D.20565 = (unsigned int) D.20564;
              if (D.20565 == ip_offset) goto <D.20570>; else goto <D.20571>;
              <D.20570>:
              bb = bb->next;
              <D.20571>:
              op_size = mono_opcode_value_and_size (&ip_copy, end, &op);
              if (op_size == -1) goto <D.20572>; else goto <D.20573>;
              <D.20572>:
              {
                struct MonoVerifyInfoExtended * vinfo;

                vinfo = monoeg_malloc (24);
                vinfo->info.status = 1;
                D.20574 = *ip;
                D.20575 = (int) D.20574;
                D.20576 = monoeg_g_strdup_printf ("Invalid instruction %x at 0x%04x", D.20575, ip_offset);
                vinfo->info.message = D.20576;
                vinfo->exception_type = 3;
                D.20310 = ctx.list;
                D.20577 = monoeg_g_slist_prepend (D.20310, vinfo);
                ctx.list = D.20577;
              }
              ctx.valid = 0;
              goto cleanup;
              <D.20573>:
              op_size.16 = (unsigned int) op_size;
              D.20581 = ip_offset + op_size.16;
              D.20564 = bb->end;
              D.20565 = (unsigned int) D.20564;
              if (D.20581 > D.20565) goto <D.20578>; else goto <D.20582>;
              <D.20582>:
              op_size.17 = (unsigned int) op_size;
              D.20584 = ~op_size.17;
              if (D.20584 < ip_offset) goto <D.20578>; else goto <D.20579>;
              <D.20578>:
              {
                struct MonoVerifyInfoExtended * vinfo;

                vinfo = monoeg_malloc (24);
                vinfo->info.status = 1;
                D.20585 = monoeg_g_strdup_printf ("Branch or EH block targets middle of instruction at 0x%04x", ip_offset);
                vinfo->info.message = D.20585;
                vinfo->exception_type = 3;
                D.20310 = ctx.list;
                D.20586 = monoeg_g_slist_prepend (D.20310, vinfo);
                ctx.list = D.20586;
              }
              ctx.valid = 0;
              goto cleanup;
              <D.20579>:
              op_size.16 = (unsigned int) op_size;
              D.20581 = ip_offset + op_size.16;
              D.20564 = bb->end;
              D.20565 = (unsigned int) D.20564;
              if (D.20581 == D.20565) goto <D.20587>; else goto <D.20588>;
              <D.20587>:
              op.18 = op;
              D.20590 = mono_opcode_is_prefix (op.18);
              if (D.20590 != 0) goto <D.20591>; else goto <D.20592>;
              <D.20591>:
              {
                struct MonoVerifyInfoExtended * vinfo;

                vinfo = monoeg_malloc (24);
                vinfo->info.status = 1;
                op.18 = op;
                D.20593 = mono_opcode_name (op.18);
                D.20594 = monoeg_g_strdup_printf ("Branch or EH block targets between prefix \'%s\' and instruction at 0x%04x", D.20593, ip_offset);
                vinfo->info.message = D.20594;
                vinfo->exception_type = 3;
                D.20310 = ctx.list;
                D.20595 = monoeg_g_slist_prepend (D.20310, vinfo);
                ctx.list = D.20595;
              }
              ctx.valid = 0;
              goto cleanup;
              <D.20592>:
              <D.20588>:
            }
          finally
            {
              ip_copy = {CLOBBER};
              op = {CLOBBER};
            }
        }
        ip.14 = (long int) ip;
        code_start.15 = (long int) code_start;
        D.20563 = ip.14 - code_start.15;
        ip_offset = (guint) D.20563;
        ctx.ip_offset = ip_offset;
        i = 0;
        goto <D.19579>;
        <D.19578>:
        {
          struct MonoExceptionClause * clause;

          D.20328 = ctx.header;
          D.20447 = D.20328->clauses;
          D.20405 = (long unsigned int) i;
          D.20448 = D.20405 * 32;
          clause = D.20447 + D.20448;
          D.20596 = clause->try_offset;
          D.20597 = clause->try_len;
          D.20598 = D.20596 + D.20597;
          if (D.20598 == ip_offset) goto <D.20599>; else goto <D.20600>;
          <D.20599>:
          if (start == 0) goto <D.20601>; else goto <D.20602>;
          <D.20601>:
          D.20363 = ctx.verifiable;
          if (D.20363 != 0) goto <D.20603>; else goto <D.20605>;
          <D.20605>:
          D.20365 = ctx.level;
          D.20366 = D.20365 & 128;
          if (D.20366 != 0) goto <D.20603>; else goto <D.20604>;
          <D.20603>:
          {
            struct MonoVerifyInfoExtended * vinfo;

            vinfo = monoeg_malloc (24);
            vinfo->info.status = 8;
            D.20606 = monoeg_g_strdup_printf ("fallthru off try block at 0x%04x", ip_offset);
            vinfo->info.message = D.20606;
            vinfo->exception_type = 4;
            D.20310 = ctx.list;
            D.20607 = monoeg_g_slist_prepend (D.20310, vinfo);
            ctx.list = D.20607;
          }
          ctx.verifiable = 0;
          D.20365 = ctx.level;
          D.20369 = D.20365 & 16;
          if (D.20369 != 0) goto <D.20608>; else goto <D.20609>;
          <D.20608>:
          ctx.valid = 0;
          <D.20609>:
          <D.20604>:
          start = 1;
          <D.20602>:
          <D.20600>:
          D.20610 = clause->handler_offset;
          D.20611 = clause->handler_len;
          D.20612 = D.20610 + D.20611;
          if (D.20612 == ip_offset) goto <D.20613>; else goto <D.20614>;
          <D.20613>:
          if (start == 0) goto <D.20615>; else goto <D.20616>;
          <D.20615>:
          D.20617 = clause->flags;
          if (D.20617 == 1) goto <D.20618>; else goto <D.20619>;
          <D.20618>:
          {
            struct MonoVerifyInfoExtended * vinfo;

            vinfo = monoeg_malloc (24);
            vinfo->info.status = 1;
            D.20620 = monoeg_g_strdup_printf ("fallout of handler block at 0x%04x", ip_offset);
            vinfo->info.message = D.20620;
            vinfo->exception_type = 3;
            D.20310 = ctx.list;
            D.20621 = monoeg_g_slist_prepend (D.20310, vinfo);
            ctx.list = D.20621;
          }
          ctx.valid = 0;
          goto <D.20622>;
          <D.20619>:
          D.20363 = ctx.verifiable;
          if (D.20363 != 0) goto <D.20623>; else goto <D.20625>;
          <D.20625>:
          D.20365 = ctx.level;
          D.20366 = D.20365 & 128;
          if (D.20366 != 0) goto <D.20623>; else goto <D.20624>;
          <D.20623>:
          {
            struct MonoVerifyInfoExtended * vinfo;

            vinfo = monoeg_malloc (24);
            vinfo->info.status = 8;
            D.20626 = monoeg_g_strdup_printf ("fallout of handler block at 0x%04x", ip_offset);
            vinfo->info.message = D.20626;
            vinfo->exception_type = 4;
            D.20310 = ctx.list;
            D.20627 = monoeg_g_slist_prepend (D.20310, vinfo);
            ctx.list = D.20627;
          }
          ctx.verifiable = 0;
          D.20365 = ctx.level;
          D.20369 = D.20365 & 16;
          if (D.20369 != 0) goto <D.20628>; else goto <D.20629>;
          <D.20628>:
          ctx.valid = 0;
          <D.20629>:
          <D.20624>:
          <D.20622>:
          start = 1;
          <D.20616>:
          <D.20614>:
          D.20617 = clause->flags;
          if (D.20617 == 1) goto <D.20630>; else goto <D.20631>;
          <D.20630>:
          D.20610 = clause->handler_offset;
          if (D.20610 == ip_offset) goto <D.20632>; else goto <D.20633>;
          <D.20632>:
          if (start == 0) goto <D.20634>; else goto <D.20635>;
          <D.20634>:
          {
            struct MonoVerifyInfoExtended * vinfo;

            vinfo = monoeg_malloc (24);
            vinfo->info.status = 1;
            D.20636 = monoeg_g_strdup_printf ("fallout of filter block at 0x%04x", ip_offset);
            vinfo->info.message = D.20636;
            vinfo->exception_type = 3;
            D.20310 = ctx.list;
            D.20637 = monoeg_g_slist_prepend (D.20310, vinfo);
            ctx.list = D.20637;
          }
          ctx.valid = 0;
          start = 1;
          <D.20635>:
          <D.20633>:
          <D.20631>:
          D.20610 = clause->handler_offset;
          if (D.20610 == ip_offset) goto <D.20638>; else goto <D.20639>;
          <D.20638>:
          if (start == 0) goto <D.20640>; else goto <D.20641>;
          <D.20640>:
          D.20363 = ctx.verifiable;
          if (D.20363 != 0) goto <D.20642>; else goto <D.20644>;
          <D.20644>:
          D.20365 = ctx.level;
          D.20366 = D.20365 & 128;
          if (D.20366 != 0) goto <D.20642>; else goto <D.20643>;
          <D.20642>:
          {
            struct MonoVerifyInfoExtended * vinfo;

            vinfo = monoeg_malloc (24);
            vinfo->info.status = 8;
            D.20645 = monoeg_g_strdup_printf ("fallthru handler block at 0x%04x", ip_offset);
            vinfo->info.message = D.20645;
            vinfo->exception_type = 4;
            D.20310 = ctx.list;
            D.20646 = monoeg_g_slist_prepend (D.20310, vinfo);
            ctx.list = D.20646;
          }
          ctx.verifiable = 0;
          D.20365 = ctx.level;
          D.20369 = D.20365 & 16;
          if (D.20369 != 0) goto <D.20647>; else goto <D.20648>;
          <D.20647>:
          ctx.valid = 0;
          <D.20648>:
          <D.20643>:
          start = 1;
          <D.20641>:
          <D.20639>:
          D.20596 = clause->try_offset;
          if (D.20596 == ip_offset) goto <D.20649>; else goto <D.20650>;
          <D.20649>:
          D.20651 = ctx.eval.size;
          if (D.20651 != 0) goto <D.20652>; else goto <D.20653>;
          <D.20652>:
          if (start == 0) goto <D.20654>; else goto <D.20655>;
          <D.20654>:
          {
            struct MonoVerifyInfoExtended * vinfo;

            vinfo = monoeg_malloc (24);
            vinfo->info.status = 1;
            D.20656 = monoeg_g_strdup_printf ("Try to enter try block with a non-empty stack at 0x%04x", ip_offset);
            vinfo->info.message = D.20656;
            vinfo->exception_type = 3;
            D.20310 = ctx.list;
            D.20657 = monoeg_g_slist_prepend (D.20310, vinfo);
            ctx.list = D.20657;
          }
          ctx.valid = 0;
          start = 1;
          <D.20655>:
          <D.20653>:
          <D.20650>:
        }
        i = i + 1;
        <D.19579>:
        D.20328 = ctx.header;
        D.20505 = D.20328->num_clauses;
        D.20506 = (int) D.20505;
        if (D.20506 > i) goto <D.20658>; else goto <D.19580>;
        <D.20658>:
        D.20342 = ctx.valid;
        if (D.20342 != 0) goto <D.19578>; else goto <D.19580>;
        <D.19580>:
        D.20659 = BIT_FIELD_REF <*bb, 64, 384>;
        D.20660 = D.20659 & 4611686018427387904;
        if (D.20660 != 0) goto <D.20661>; else goto <D.20662>;
        <D.20661>:
        D.20347 = ctx.code;
        D.20663 = (long unsigned int) ip_offset;
        D.20664 = D.20663 * 16;
        D.20665 = D.20347 + D.20664;
        D.20347 = ctx.code;
        D.20663 = (long unsigned int) ip_offset;
        D.20664 = D.20663 * 16;
        D.20665 = D.20347 + D.20664;
        D.20666 = D.20665->flags;
        D.20667 = D.20666 | 1;
        D.20665->flags = D.20667;
        D.20668 = (sizetype) op_size;
        ip = ip + D.20668;
        // predicted unlikely by continue predictor.
        goto <D.19581>;
        <D.20662>:
        D.20342 = ctx.valid;
        if (D.20342 == 0) goto <D.19582>; else goto <D.20669>;
        <D.20669>:
        if (need_merge != 0) goto <D.20670>; else goto <D.20671>;
        <D.20670>:
        D.20347 = ctx.code;
        D.20672 = ctx.target;
        D.20673 = (long unsigned int) D.20672;
        D.20674 = D.20673 * 16;
        D.20675 = D.20347 + D.20674;
        merge_stacks (&ctx, &ctx.eval, D.20675, 0, 1);
        need_merge = 0;
        <D.20671>:
        D.20347 = ctx.code;
        D.20663 = (long unsigned int) ip_offset;
        D.20664 = D.20663 * 16;
        D.20665 = D.20347 + D.20664;
        merge_stacks (&ctx, &ctx.eval, D.20665, start, 0);
        start = 0;
        D.20574 = *ip;
        D.20575 = (int) D.20574;
        switch (D.20575) <default: <D.19885>, case 0: <D.19583>, case 1: <D.19584>, case 2: <D.19586>, case 3: <D.19587>, case 4: <D.19588>, case 5: <D.19589>, case 6: <D.19614>, case 7: <D.19615>, case 8: <D.19616>, case 9: <D.19617>, case 10: <D.19618>, case 11: <D.19619>, case 12: <D.19620>, case 13: <D.19621>, case 14: <D.19590>, case 15: <D.19591>, case 16: <D.19624>, case 17: <D.19671>, case 18: <D.19672>, case 19: <D.19622>, case 20: <D.19646>, case 21: <D.19626>, case 22: <D.19627>, case 23: <D.19628>, case 24: <D.19629>, case 25: <D.19630>, case 26: <D.19631>, case 27: <D.19632>, case 28: <D.19633>, case 29: <D.19634>, case 30: <D.19635>, case 31: <D.19636>, case 32: <D.19638>, case 33: <D.19640>, case 34: <D.19642>, case 35: <D.19644>, case 36: <D.19674>, case 37: <D.19676>, case 38: <D.19612>, case 39: <D.19678>, case 40: <D.19683>, case 41: <D.19686>, case 42: <D.19613>, case 43: <D.19689>, case 44: <D.19691>, case 45: <D.19692>, case 46: <D.19647>, case 47: <D.19650>, case 48: <D.19651>, case 49: <D.19652>, case 50: <D.19653>, case 51: <D.19648>, case 52: <D.19654>, case 53: <D.19655>, case 54: <D.19656>, case 55: <D.19657>, case 56: <D.19694>, case 57: <D.19696>, case 58: <D.19697>, case 59: <D.19659>, case 60: <D.19662>, case 61: <D.19663>, case 62: <D.19664>, case 63: <D.19665>, case 64: <D.19660>, case 65: <D.19666>, case 66: <D.19667>, case 67: <D.19668>, case 68: <D.19669>, case 69: <D.19699>, case 70: <D.19704>, case 71: <D.19705>, case 72: <D.19706>, case 73: <D.19707>, case 74: <D.19708>, case 75: <D.19709>, case 76: <D.19710>, case 77: <D.19711>, case 78: <D.19712>, case 79: <D.19713>, case 80: <D.19714>, case 81: <D.19715>, case 82: <D.19716>, case 83: <D.19717>, case 84: <D.19718>, case 85: <D.19719>, case 86: <D.19720>, case 87: <D.19721>, case 88: <D.19599>, case 89: <D.19600>, case 90: <D.19601>, case 91: <D.19602>, case 92: <D.19605>, case 93: <D.19603>, case 94: <D.19607>, case 95: <D.19604>, case 96: <D.19606>, case 97: <D.19608>, case 98: <D.19609>, case 99: <D.19610>, case 100: <D.19611>, case 101: <D.19724>, case 102: <D.19723>, case 103: <D.19725>, case 104: <D.19726>, case 105: <D.19727>, case 106: <D.19731>, case 107: <D.19733>, case 108: <D.19734>, case 109: <D.19730>, case 110: <D.19732>, case 111: <D.19684>, case 112: <D.19738>, case 113: <D.19740>, case 114: <D.19742>, case 115: <D.19744>, case 116: <D.19746>, case 117: <D.19747>, case 118: <D.19735>, case 119: <D.19749>, case 120: <D.19750>, case 121: <D.19752>, case 122: <D.19754>, case 123: <D.19755>, case 124: <D.19756>, case 125: <D.19761>, case 126: <D.19758>, case 127: <D.19759>, case 128: <D.19763>, case 129: <D.19765>, case 130: <D.19767>, case 131: <D.19768>, case 132: <D.19769>, case 133: <D.19773>, case 134: <D.19770>, case 135: <D.19771>, case 136: <D.19772>, case 137: <D.19774>, case 138: <D.19775>, case 139: <D.19776>, case 140: <D.19777>, case 141: <D.19779>, case 142: <D.19781>, case 143: <D.19782>, case 144: <D.19784>, case 145: <D.19785>, case 146: <D.19786>, case 147: <D.19787>, case 148: <D.19788>, case 149: <D.19789>, case 150: <D.19790>, case 151: <D.19791>, case 152: <D.19792>, case 153: <D.19793>, case 154: <D.19794>, case 155: <D.19795>, case 156: <D.19796>, case 157: <D.19797>, case 158: <D.19798>, case 159: <D.19799>, case 160: <D.19800>, case 161: <D.19801>, case 162: <D.19802>, case 163: <D.19803>, case 164: <D.19805>, case 165: <D.19807>, case 179: <D.19809>, case 180: <D.19810>, case 181: <D.19811>, case 182: <D.19812>, case 183: <D.19813>, case 184: <D.19814>, case 185: <D.19815>, case 186: <D.19816>, case 194: <D.19819>, case 195: <D.19821>, case 198: <D.19822>, case 208: <D.19824>, case 209: <D.19729>, case 210: <D.19728>, case 211: <D.19736>, case 212: <D.19817>, case 213: <D.19818>, case 214: <D.19595>, case 215: <D.19593>, case 216: <D.19597>, case 217: <D.19598>, case 218: <D.19596>, case 219: <D.19594>, case 220: <D.19826>, case 221: <D.19828>, case 222: <D.19830>, case 223: <D.19722>, case 224: <D.19737>, case 254: <D.19832>>
        <D.19583>:
        <D.19584>:
        ip = ip + 1;
        goto <D.19585>;
        <D.19586>:
        <D.19587>:
        <D.19588>:
        <D.19589>:
        D.20574 = *ip;
        D.20575 = (int) D.20574;
        D.20676 = D.20575 + -2;
        D.20677 = (unsigned int) D.20676;
        push_arg (&ctx, D.20677, 0);
        ip = ip + 1;
        goto <D.19585>;
        <D.19590>:
        <D.19591>:
        D.20680 = ip + 2;
        if (D.20680 > end) goto <D.20678>; else goto <D.20681>;
        <D.20681>:
        ip.19 = (long unsigned int) ip;
        if (ip.19 > 18446744073709551613) goto <D.20678>; else goto <D.20679>;
        <D.20678>:
        {
          struct MonoVerifyInfoExtended * vinfo;

          vinfo = monoeg_malloc (24);
          vinfo->info.status = 1;
          D.20574 = *ip;
          D.20575 = (int) D.20574;
          D.20683 = ctx.ip_offset;
          D.20684 = monoeg_g_strdup_printf ("Code overrun starting with 0x%x at 0x%04x", D.20575, D.20683);
          vinfo->info.message = D.20684;
          vinfo->exception_type = 3;
          D.20310 = ctx.list;
          D.20685 = monoeg_g_slist_prepend (D.20310, vinfo);
          ctx.list = D.20685;
        }
        ctx.valid = 0;
        goto <D.19585>;
        <D.20679>:
        D.20686 = ip + 1;
        D.20687 = *D.20686;
        D.20688 = (unsigned int) D.20687;
        D.20574 = *ip;
        D.20689 = D.20574 == 15;
        D.20690 = (int) D.20689;
        push_arg (&ctx, D.20688, D.20690);
        ip = ip + 2;
        goto <D.19585>;
        <D.19593>:
        D.20574 = *ip;
        D.20691 = (unsigned int) D.20574;
        do_binop (&ctx, D.20691, &add_ovf_un_table);
        ip = ip + 1;
        goto <D.19585>;
        <D.19594>:
        D.20574 = *ip;
        D.20691 = (unsigned int) D.20574;
        do_binop (&ctx, D.20691, &sub_ovf_un_table);
        ip = ip + 1;
        goto <D.19585>;
        <D.19595>:
        <D.19596>:
        <D.19597>:
        <D.19598>:
        D.20574 = *ip;
        D.20691 = (unsigned int) D.20574;
        do_binop (&ctx, D.20691, &bin_ovf_table);
        ip = ip + 1;
        goto <D.19585>;
        <D.19599>:
        D.20574 = *ip;
        D.20691 = (unsigned int) D.20574;
        do_binop (&ctx, D.20691, &add_table);
        ip = ip + 1;
        goto <D.19585>;
        <D.19600>:
        D.20574 = *ip;
        D.20691 = (unsigned int) D.20574;
        do_binop (&ctx, D.20691, &sub_table);
        ip = ip + 1;
        goto <D.19585>;
        <D.19601>:
        <D.19602>:
        <D.19603>:
        D.20574 = *ip;
        D.20691 = (unsigned int) D.20574;
        do_binop (&ctx, D.20691, &bin_op_table);
        ip = ip + 1;
        goto <D.19585>;
        <D.19604>:
        <D.19605>:
        <D.19606>:
        <D.19607>:
        <D.19608>:
        D.20574 = *ip;
        D.20691 = (unsigned int) D.20574;
        do_binop (&ctx, D.20691, &int_bin_op_table);
        ip = ip + 1;
        goto <D.19585>;
        <D.19609>:
        <D.19610>:
        <D.19611>:
        D.20574 = *ip;
        D.20691 = (unsigned int) D.20574;
        do_binop (&ctx, D.20691, &shift_op_table);
        ip = ip + 1;
        goto <D.19585>;
        <D.19612>:
        D.20692 = check_underflow (&ctx, 1);
        if (D.20692 == 0) goto <D.19585>; else goto <D.20693>;
        <D.20693>:
        stack_pop_safe (&ctx);
        ip = ip + 1;
        goto <D.19585>;
        <D.19613>:
        do_ret (&ctx);
        ip = ip + 1;
        start = 1;
        goto <D.19585>;
        <D.19614>:
        <D.19615>:
        <D.19616>:
        <D.19617>:
        D.20574 = *ip;
        D.20575 = (int) D.20574;
        D.20694 = D.20575 + -6;
        D.20695 = (unsigned int) D.20694;
        push_local (&ctx, D.20695, 0);
        ip = ip + 1;
        goto <D.19585>;
        <D.19618>:
        <D.19619>:
        <D.19620>:
        <D.19621>:
        D.20574 = *ip;
        D.20575 = (int) D.20574;
        D.20696 = D.20575 + -10;
        D.20697 = (unsigned int) D.20696;
        store_local (&ctx, D.20697);
        ip = ip + 1;
        goto <D.19585>;
        <D.19622>:
        D.20680 = ip + 2;
        if (D.20680 > end) goto <D.20698>; else goto <D.20700>;
        <D.20700>:
        ip.19 = (long unsigned int) ip;
        if (ip.19 > 18446744073709551613) goto <D.20698>; else goto <D.20699>;
        <D.20698>:
        {
          struct MonoVerifyInfoExtended * vinfo;

          vinfo = monoeg_malloc (24);
          vinfo->info.status = 1;
          D.20574 = *ip;
          D.20575 = (int) D.20574;
          D.20683 = ctx.ip_offset;
          D.20701 = monoeg_g_strdup_printf ("Code overrun starting with 0x%x at 0x%04x", D.20575, D.20683);
          vinfo->info.message = D.20701;
          vinfo->exception_type = 3;
          D.20310 = ctx.list;
          D.20702 = monoeg_g_slist_prepend (D.20310, vinfo);
          ctx.list = D.20702;
        }
        ctx.valid = 0;
        goto <D.19585>;
        <D.20699>:
        D.20686 = ip + 1;
        D.20687 = *D.20686;
        D.20703 = (unsigned int) D.20687;
        store_local (&ctx, D.20703);
        ip = ip + 2;
        goto <D.19585>;
        <D.19624>:
        D.20680 = ip + 2;
        if (D.20680 > end) goto <D.20704>; else goto <D.20706>;
        <D.20706>:
        ip.19 = (long unsigned int) ip;
        if (ip.19 > 18446744073709551613) goto <D.20704>; else goto <D.20705>;
        <D.20704>:
        {
          struct MonoVerifyInfoExtended * vinfo;

          vinfo = monoeg_malloc (24);
          vinfo->info.status = 1;
          D.20574 = *ip;
          D.20575 = (int) D.20574;
          D.20683 = ctx.ip_offset;
          D.20707 = monoeg_g_strdup_printf ("Code overrun starting with 0x%x at 0x%04x", D.20575, D.20683);
          vinfo->info.message = D.20707;
          vinfo->exception_type = 3;
          D.20310 = ctx.list;
          D.20708 = monoeg_g_slist_prepend (D.20310, vinfo);
          ctx.list = D.20708;
        }
        ctx.valid = 0;
        goto <D.19585>;
        <D.20705>:
        D.20686 = ip + 1;
        D.20687 = *D.20686;
        D.20703 = (unsigned int) D.20687;
        store_arg (&ctx, D.20703);
        ip = ip + 2;
        goto <D.19585>;
        <D.19626>:
        <D.19627>:
        <D.19628>:
        <D.19629>:
        <D.19630>:
        <D.19631>:
        <D.19632>:
        <D.19633>:
        <D.19634>:
        <D.19635>:
        D.20709 = check_overflow (&ctx);
        if (D.20709 != 0) goto <D.20710>; else goto <D.20711>;
        <D.20710>:
        D.20712 = mono_defaults.int32_class;
        D.20713 = &D.20712->byval_arg;
        stack_push_val (&ctx, 1, D.20713);
        <D.20711>:
        ip = ip + 1;
        goto <D.19585>;
        <D.19636>:
        D.20680 = ip + 2;
        if (D.20680 > end) goto <D.20714>; else goto <D.20716>;
        <D.20716>:
        ip.19 = (long unsigned int) ip;
        if (ip.19 > 18446744073709551613) goto <D.20714>; else goto <D.20715>;
        <D.20714>:
        {
          struct MonoVerifyInfoExtended * vinfo;

          vinfo = monoeg_malloc (24);
          vinfo->info.status = 1;
          D.20574 = *ip;
          D.20575 = (int) D.20574;
          D.20683 = ctx.ip_offset;
          D.20717 = monoeg_g_strdup_printf ("Code overrun starting with 0x%x at 0x%04x", D.20575, D.20683);
          vinfo->info.message = D.20717;
          vinfo->exception_type = 3;
          D.20310 = ctx.list;
          D.20718 = monoeg_g_slist_prepend (D.20310, vinfo);
          ctx.list = D.20718;
        }
        ctx.valid = 0;
        goto <D.19585>;
        <D.20715>:
        D.20719 = check_overflow (&ctx);
        if (D.20719 != 0) goto <D.20720>; else goto <D.20721>;
        <D.20720>:
        D.20712 = mono_defaults.int32_class;
        D.20713 = &D.20712->byval_arg;
        stack_push_val (&ctx, 1, D.20713);
        <D.20721>:
        ip = ip + 2;
        goto <D.19585>;
        <D.19638>:
        D.20724 = ip + 5;
        if (D.20724 > end) goto <D.20722>; else goto <D.20725>;
        <D.20725>:
        ip.19 = (long unsigned int) ip;
        if (ip.19 > 18446744073709551610) goto <D.20722>; else goto <D.20723>;
        <D.20722>:
        {
          struct MonoVerifyInfoExtended * vinfo;

          vinfo = monoeg_malloc (24);
          vinfo->info.status = 1;
          D.20574 = *ip;
          D.20575 = (int) D.20574;
          D.20683 = ctx.ip_offset;
          D.20726 = monoeg_g_strdup_printf ("Code overrun starting with 0x%x at 0x%04x", D.20575, D.20683);
          vinfo->info.message = D.20726;
          vinfo->exception_type = 3;
          D.20310 = ctx.list;
          D.20727 = monoeg_g_slist_prepend (D.20310, vinfo);
          ctx.list = D.20727;
        }
        ctx.valid = 0;
        goto <D.19585>;
        <D.20723>:
        D.20728 = check_overflow (&ctx);
        if (D.20728 != 0) goto <D.20729>; else goto <D.20730>;
        <D.20729>:
        D.20712 = mono_defaults.int32_class;
        D.20713 = &D.20712->byval_arg;
        stack_push_val (&ctx, 1, D.20713);
        <D.20730>:
        ip = ip + 5;
        goto <D.19585>;
        <D.19640>:
        D.20733 = ip + 9;
        if (D.20733 > end) goto <D.20731>; else goto <D.20734>;
        <D.20734>:
        ip.19 = (long unsigned int) ip;
        if (ip.19 > 18446744073709551606) goto <D.20731>; else goto <D.20732>;
        <D.20731>:
        {
          struct MonoVerifyInfoExtended * vinfo;

          vinfo = monoeg_malloc (24);
          vinfo->info.status = 1;
          D.20574 = *ip;
          D.20575 = (int) D.20574;
          D.20683 = ctx.ip_offset;
          D.20735 = monoeg_g_strdup_printf ("Code overrun starting with 0x%x at 0x%04x", D.20575, D.20683);
          vinfo->info.message = D.20735;
          vinfo->exception_type = 3;
          D.20310 = ctx.list;
          D.20736 = monoeg_g_slist_prepend (D.20310, vinfo);
          ctx.list = D.20736;
        }
        ctx.valid = 0;
        goto <D.19585>;
        <D.20732>:
        D.20737 = check_overflow (&ctx);
        if (D.20737 != 0) goto <D.20738>; else goto <D.20739>;
        <D.20738>:
        D.20740 = mono_defaults.int64_class;
        D.20741 = &D.20740->byval_arg;
        stack_push_val (&ctx, 2, D.20741);
        <D.20739>:
        ip = ip + 9;
        goto <D.19585>;
        <D.19642>:
        D.20724 = ip + 5;
        if (D.20724 > end) goto <D.20742>; else goto <D.20744>;
        <D.20744>:
        ip.19 = (long unsigned int) ip;
        if (ip.19 > 18446744073709551610) goto <D.20742>; else goto <D.20743>;
        <D.20742>:
        {
          struct MonoVerifyInfoExtended * vinfo;

          vinfo = monoeg_malloc (24);
          vinfo->info.status = 1;
          D.20574 = *ip;
          D.20575 = (int) D.20574;
          D.20683 = ctx.ip_offset;
          D.20745 = monoeg_g_strdup_printf ("Code overrun starting with 0x%x at 0x%04x", D.20575, D.20683);
          vinfo->info.message = D.20745;
          vinfo->exception_type = 3;
          D.20310 = ctx.list;
          D.20746 = monoeg_g_slist_prepend (D.20310, vinfo);
          ctx.list = D.20746;
        }
        ctx.valid = 0;
        goto <D.19585>;
        <D.20743>:
        D.20747 = check_overflow (&ctx);
        if (D.20747 != 0) goto <D.20748>; else goto <D.20749>;
        <D.20748>:
        D.20750 = mono_defaults.double_class;
        D.20751 = &D.20750->byval_arg;
        stack_push_val (&ctx, 4, D.20751);
        <D.20749>:
        ip = ip + 5;
        goto <D.19585>;
        <D.19644>:
        D.20733 = ip + 9;
        if (D.20733 > end) goto <D.20752>; else goto <D.20754>;
        <D.20754>:
        ip.19 = (long unsigned int) ip;
        if (ip.19 > 18446744073709551606) goto <D.20752>; else goto <D.20753>;
        <D.20752>:
        {
          struct MonoVerifyInfoExtended * vinfo;

          vinfo = monoeg_malloc (24);
          vinfo->info.status = 1;
          D.20574 = *ip;
          D.20575 = (int) D.20574;
          D.20683 = ctx.ip_offset;
          D.20755 = monoeg_g_strdup_printf ("Code overrun starting with 0x%x at 0x%04x", D.20575, D.20683);
          vinfo->info.message = D.20755;
          vinfo->exception_type = 3;
          D.20310 = ctx.list;
          D.20756 = monoeg_g_slist_prepend (D.20310, vinfo);
          ctx.list = D.20756;
        }
        ctx.valid = 0;
        goto <D.19585>;
        <D.20753>:
        D.20757 = check_overflow (&ctx);
        if (D.20757 != 0) goto <D.20758>; else goto <D.20759>;
        <D.20758>:
        D.20750 = mono_defaults.double_class;
        D.20751 = &D.20750->byval_arg;
        stack_push_val (&ctx, 4, D.20751);
        <D.20759>:
        ip = ip + 9;
        goto <D.19585>;
        <D.19646>:
        D.20760 = check_overflow (&ctx);
        if (D.20760 != 0) goto <D.20761>; else goto <D.20762>;
        <D.20761>:
        D.20763 = mono_defaults.object_class;
        D.20764 = &D.20763->byval_arg;
        stack_push_val (&ctx, 1030, D.20764);
        <D.20762>:
        ip = ip + 1;
        goto <D.19585>;
        <D.19647>:
        <D.19648>:
        D.20680 = ip + 2;
        if (D.20680 > end) goto <D.20765>; else goto <D.20767>;
        <D.20767>:
        ip.19 = (long unsigned int) ip;
        if (ip.19 > 18446744073709551613) goto <D.20765>; else goto <D.20766>;
        <D.20765>:
        {
          struct MonoVerifyInfoExtended * vinfo;

          vinfo = monoeg_malloc (24);
          vinfo->info.status = 1;
          D.20574 = *ip;
          D.20575 = (int) D.20574;
          D.20683 = ctx.ip_offset;
          D.20768 = monoeg_g_strdup_printf ("Code overrun starting with 0x%x at 0x%04x", D.20575, D.20683);
          vinfo->info.message = D.20768;
          vinfo->exception_type = 3;
          D.20310 = ctx.list;
          D.20769 = monoeg_g_slist_prepend (D.20310, vinfo);
          ctx.list = D.20769;
        }
        ctx.valid = 0;
        goto <D.19585>;
        <D.20766>:
        D.20686 = ip + 1;
        D.20687 = *D.20686;
        D.20770 = (signed char) D.20687;
        D.20771 = (int) D.20770;
        D.20772 = D.20771 + 2;
        do_branch_op (&ctx, D.20772, &cmp_br_eq_op);
        ip = ip + 2;
        need_merge = 1;
        goto <D.19585>;
        <D.19650>:
        <D.19651>:
        <D.19652>:
        <D.19653>:
        <D.19654>:
        <D.19655>:
        <D.19656>:
        <D.19657>:
        D.20680 = ip + 2;
        if (D.20680 > end) goto <D.20773>; else goto <D.20775>;
        <D.20775>:
        ip.19 = (long unsigned int) ip;
        if (ip.19 > 18446744073709551613) goto <D.20773>; else goto <D.20774>;
        <D.20773>:
        {
          struct MonoVerifyInfoExtended * vinfo;

          vinfo = monoeg_malloc (24);
          vinfo->info.status = 1;
          D.20574 = *ip;
          D.20575 = (int) D.20574;
          D.20683 = ctx.ip_offset;
          D.20776 = monoeg_g_strdup_printf ("Code overrun starting with 0x%x at 0x%04x", D.20575, D.20683);
          vinfo->info.message = D.20776;
          vinfo->exception_type = 3;
          D.20310 = ctx.list;
          D.20777 = monoeg_g_slist_prepend (D.20310, vinfo);
          ctx.list = D.20777;
        }
        ctx.valid = 0;
        goto <D.19585>;
        <D.20774>:
        D.20686 = ip + 1;
        D.20687 = *D.20686;
        D.20770 = (signed char) D.20687;
        D.20771 = (int) D.20770;
        D.20772 = D.20771 + 2;
        do_branch_op (&ctx, D.20772, &cmp_br_op);
        ip = ip + 2;
        need_merge = 1;
        goto <D.19585>;
        <D.19659>:
        <D.19660>:
        D.20724 = ip + 5;
        if (D.20724 > end) goto <D.20778>; else goto <D.20780>;
        <D.20780>:
        ip.19 = (long unsigned int) ip;
        if (ip.19 > 18446744073709551610) goto <D.20778>; else goto <D.20779>;
        <D.20778>:
        {
          struct MonoVerifyInfoExtended * vinfo;

          vinfo = monoeg_malloc (24);
          vinfo->info.status = 1;
          D.20574 = *ip;
          D.20575 = (int) D.20574;
          D.20683 = ctx.ip_offset;
          D.20781 = monoeg_g_strdup_printf ("Code overrun starting with 0x%x at 0x%04x", D.20575, D.20683);
          vinfo->info.message = D.20781;
          vinfo->exception_type = 3;
          D.20310 = ctx.list;
          D.20782 = monoeg_g_slist_prepend (D.20310, vinfo);
          ctx.list = D.20782;
        }
        ctx.valid = 0;
        goto <D.19585>;
        <D.20779>:
        D.20686 = ip + 1;
        D.20783 = MEM[(const guint32 *)D.20686];
        D.20784 = D.20783 << 24;
        D.20686 = ip + 1;
        D.20783 = MEM[(const guint32 *)D.20686];
        D.20785 = D.20783 >> 8;
        D.20786 = D.20785 & 65280;
        D.20787 = D.20784 | D.20786;
        D.20686 = ip + 1;
        D.20783 = MEM[(const guint32 *)D.20686];
        D.20788 = D.20783 << 8;
        D.20789 = D.20788 & 16711680;
        D.20790 = D.20787 | D.20789;
        D.20686 = ip + 1;
        D.20783 = MEM[(const guint32 *)D.20686];
        D.20791 = D.20783 >> 24;
        D.20792 = D.20790 | D.20791;
        D.20793 = (int) D.20792;
        D.20794 = D.20793 + 5;
        do_branch_op (&ctx, D.20794, &cmp_br_eq_op);
        ip = ip + 5;
        need_merge = 1;
        goto <D.19585>;
        <D.19662>:
        <D.19663>:
        <D.19664>:
        <D.19665>:
        <D.19666>:
        <D.19667>:
        <D.19668>:
        <D.19669>:
        D.20724 = ip + 5;
        if (D.20724 > end) goto <D.20795>; else goto <D.20797>;
        <D.20797>:
        ip.19 = (long unsigned int) ip;
        if (ip.19 > 18446744073709551610) goto <D.20795>; else goto <D.20796>;
        <D.20795>:
        {
          struct MonoVerifyInfoExtended * vinfo;

          vinfo = monoeg_malloc (24);
          vinfo->info.status = 1;
          D.20574 = *ip;
          D.20575 = (int) D.20574;
          D.20683 = ctx.ip_offset;
          D.20798 = monoeg_g_strdup_printf ("Code overrun starting with 0x%x at 0x%04x", D.20575, D.20683);
          vinfo->info.message = D.20798;
          vinfo->exception_type = 3;
          D.20310 = ctx.list;
          D.20799 = monoeg_g_slist_prepend (D.20310, vinfo);
          ctx.list = D.20799;
        }
        ctx.valid = 0;
        goto <D.19585>;
        <D.20796>:
        D.20686 = ip + 1;
        D.20783 = MEM[(const guint32 *)D.20686];
        D.20784 = D.20783 << 24;
        D.20686 = ip + 1;
        D.20783 = MEM[(const guint32 *)D.20686];
        D.20785 = D.20783 >> 8;
        D.20786 = D.20785 & 65280;
        D.20787 = D.20784 | D.20786;
        D.20686 = ip + 1;
        D.20783 = MEM[(const guint32 *)D.20686];
        D.20788 = D.20783 << 8;
        D.20789 = D.20788 & 16711680;
        D.20790 = D.20787 | D.20789;
        D.20686 = ip + 1;
        D.20783 = MEM[(const guint32 *)D.20686];
        D.20791 = D.20783 >> 24;
        D.20792 = D.20790 | D.20791;
        D.20793 = (int) D.20792;
        D.20794 = D.20793 + 5;
        do_branch_op (&ctx, D.20794, &cmp_br_op);
        ip = ip + 5;
        need_merge = 1;
        goto <D.19585>;
        <D.19671>:
        <D.19672>:
        D.20680 = ip + 2;
        if (D.20680 > end) goto <D.20800>; else goto <D.20802>;
        <D.20802>:
        ip.19 = (long unsigned int) ip;
        if (ip.19 > 18446744073709551613) goto <D.20800>; else goto <D.20801>;
        <D.20800>:
        {
          struct MonoVerifyInfoExtended * vinfo;

          vinfo = monoeg_malloc (24);
          vinfo->info.status = 1;
          D.20574 = *ip;
          D.20575 = (int) D.20574;
          D.20683 = ctx.ip_offset;
          D.20803 = monoeg_g_strdup_printf ("Code overrun starting with 0x%x at 0x%04x", D.20575, D.20683);
          vinfo->info.message = D.20803;
          vinfo->exception_type = 3;
          D.20310 = ctx.list;
          D.20804 = monoeg_g_slist_prepend (D.20310, vinfo);
          ctx.list = D.20804;
        }
        ctx.valid = 0;
        goto <D.19585>;
        <D.20801>:
        D.20686 = ip + 1;
        D.20687 = *D.20686;
        D.20703 = (unsigned int) D.20687;
        D.20574 = *ip;
        D.20805 = D.20574 == 18;
        D.20806 = (int) D.20805;
        push_local (&ctx, D.20703, D.20806);
        ip = ip + 2;
        goto <D.19585>;
        <D.19674>:
        {
          struct MonoVerifyInfoExtended * vinfo;

          vinfo = monoeg_malloc (24);
          vinfo->info.status = 1;
          D.20807 = monoeg_g_strdup_printf ("Use of the `unused\' opcode");
          vinfo->info.message = D.20807;
          vinfo->exception_type = 3;
          D.20310 = ctx.list;
          D.20808 = monoeg_g_slist_prepend (D.20310, vinfo);
          ctx.list = D.20808;
        }
        ctx.valid = 0;
        ip = ip + 1;
        goto <D.19585>;
        <D.19676>:
        {
          struct ILStackDesc * top;

          D.20809 = check_underflow (&ctx, 1);
          if (D.20809 == 0) goto <D.19585>; else goto <D.20810>;
          <D.20810>:
          D.20811 = check_overflow (&ctx);
          if (D.20811 == 0) goto <D.19585>; else goto <D.20812>;
          <D.20812>:
          top = stack_push (&ctx);
          D.20813 = stack_peek (&ctx, 1);
          copy_stack_value (top, D.20813);
          ip = ip + 1;
          goto <D.19585>;
        }
        <D.19678>:
        D.20724 = ip + 5;
        if (D.20724 > end) goto <D.20814>; else goto <D.20816>;
        <D.20816>:
        ip.19 = (long unsigned int) ip;
        if (ip.19 > 18446744073709551610) goto <D.20814>; else goto <D.20815>;
        <D.20814>:
        {
          struct MonoVerifyInfoExtended * vinfo;

          vinfo = monoeg_malloc (24);
          vinfo->info.status = 1;
          D.20574 = *ip;
          D.20575 = (int) D.20574;
          D.20683 = ctx.ip_offset;
          D.20817 = monoeg_g_strdup_printf ("Code overrun starting with 0x%x at 0x%04x", D.20575, D.20683);
          vinfo->info.message = D.20817;
          vinfo->exception_type = 3;
          D.20310 = ctx.list;
          D.20818 = monoeg_g_slist_prepend (D.20310, vinfo);
          ctx.list = D.20818;
        }
        ctx.valid = 0;
        goto <D.19585>;
        <D.20815>:
        D.20651 = ctx.eval.size;
        if (D.20651 != 0) goto <D.20819>; else goto <D.20820>;
        <D.20819>:
        {
          struct MonoVerifyInfoExtended * vinfo;

          vinfo = monoeg_malloc (24);
          vinfo->info.status = 1;
          D.20821 = monoeg_g_strdup_printf ("Eval stack must be empty in jmp at 0x%04x", ip_offset);
          vinfo->info.message = D.20821;
          vinfo->exception_type = 3;
          D.20310 = ctx.list;
          D.20822 = monoeg_g_slist_prepend (D.20310, vinfo);
          ctx.list = D.20822;
        }
        ctx.valid = 0;
        <D.20820>:
        D.20686 = ip + 1;
        D.20783 = MEM[(const guint32 *)D.20686];
        D.20784 = D.20783 << 24;
        D.20686 = ip + 1;
        D.20783 = MEM[(const guint32 *)D.20686];
        D.20785 = D.20783 >> 8;
        D.20786 = D.20785 & 65280;
        D.20787 = D.20784 | D.20786;
        D.20686 = ip + 1;
        D.20783 = MEM[(const guint32 *)D.20686];
        D.20788 = D.20783 << 8;
        D.20789 = D.20788 & 16711680;
        D.20790 = D.20787 | D.20789;
        D.20686 = ip + 1;
        D.20783 = MEM[(const guint32 *)D.20686];
        D.20791 = D.20783 >> 24;
        token = D.20790 | D.20791;
        D.20328 = ctx.header;
        D.20823 = in_any_block (D.20328, ip_offset);
        if (D.20823 != 0) goto <D.20824>; else goto <D.20825>;
        <D.20824>:
        {
          struct MonoVerifyInfoExtended * vinfo;

          vinfo = monoeg_malloc (24);
          vinfo->info.status = 1;
          D.20826 = monoeg_g_strdup_printf ("jmp cannot escape exception blocks at 0x%04x", ip_offset);
          vinfo->info.message = D.20826;
          vinfo->exception_type = 3;
          D.20310 = ctx.list;
          D.20827 = monoeg_g_slist_prepend (D.20310, vinfo);
          ctx.list = D.20827;
        }
        ctx.valid = 0;
        <D.20825>:
        D.20363 = ctx.verifiable;
        if (D.20363 != 0) goto <D.20828>; else goto <D.20830>;
        <D.20830>:
        D.20365 = ctx.level;
        D.20366 = D.20365 & 128;
        if (D.20366 != 0) goto <D.20828>; else goto <D.20829>;
        <D.20828>:
        {
          struct MonoVerifyInfoExtended * vinfo;

          vinfo = monoeg_malloc (24);
          vinfo->info.status = 8;
          D.20683 = ctx.ip_offset;
          D.20831 = monoeg_g_strdup_printf ("Intruction jmp is not verifiable at 0x%04x", D.20683);
          vinfo->info.message = D.20831;
          vinfo->exception_type = 4;
          D.20310 = ctx.list;
          D.20832 = monoeg_g_slist_prepend (D.20310, vinfo);
          ctx.list = D.20832;
        }
        ctx.verifiable = 0;
        D.20365 = ctx.level;
        D.20369 = D.20365 & 16;
        if (D.20369 != 0) goto <D.20833>; else goto <D.20834>;
        <D.20833>:
        ctx.valid = 0;
        <D.20834>:
        <D.20829>:
        ip = ip + 5;
        goto <D.19585>;
        <D.19683>:
        <D.19684>:
        D.20724 = ip + 5;
        if (D.20724 > end) goto <D.20835>; else goto <D.20837>;
        <D.20837>:
        ip.19 = (long unsigned int) ip;
        if (ip.19 > 18446744073709551610) goto <D.20835>; else goto <D.20836>;
        <D.20835>:
        {
          struct MonoVerifyInfoExtended * vinfo;

          vinfo = monoeg_malloc (24);
          vinfo->info.status = 1;
          D.20574 = *ip;
          D.20575 = (int) D.20574;
          D.20683 = ctx.ip_offset;
          D.20838 = monoeg_g_strdup_printf ("Code overrun starting with 0x%x at 0x%04x", D.20575, D.20683);
          vinfo->info.message = D.20838;
          vinfo->exception_type = 3;
          D.20310 = ctx.list;
          D.20839 = monoeg_g_slist_prepend (D.20310, vinfo);
          ctx.list = D.20839;
        }
        ctx.valid = 0;
        goto <D.19585>;
        <D.20836>:
        D.20686 = ip + 1;
        D.20783 = MEM[(const guint32 *)D.20686];
        D.20784 = D.20783 << 24;
        D.20686 = ip + 1;
        D.20783 = MEM[(const guint32 *)D.20686];
        D.20785 = D.20783 >> 8;
        D.20786 = D.20785 & 65280;
        D.20787 = D.20784 | D.20786;
        D.20686 = ip + 1;
        D.20783 = MEM[(const guint32 *)D.20686];
        D.20788 = D.20783 << 8;
        D.20789 = D.20788 & 16711680;
        D.20790 = D.20787 | D.20789;
        D.20686 = ip + 1;
        D.20783 = MEM[(const guint32 *)D.20686];
        D.20791 = D.20783 >> 24;
        D.20792 = D.20790 | D.20791;
        D.20793 = (int) D.20792;
        D.20574 = *ip;
        D.20840 = D.20574 == 111;
        D.20841 = (int) D.20840;
        do_invoke_method (&ctx, D.20793, D.20841);
        ip = ip + 5;
        goto <D.19585>;
        <D.19686>:
        D.20724 = ip + 5;
        if (D.20724 > end) goto <D.20842>; else goto <D.20844>;
        <D.20844>:
        ip.19 = (long unsigned int) ip;
        if (ip.19 > 18446744073709551610) goto <D.20842>; else goto <D.20843>;
        <D.20842>:
        {
          struct MonoVerifyInfoExtended * vinfo;

          vinfo = monoeg_malloc (24);
          vinfo->info.status = 1;
          D.20574 = *ip;
          D.20575 = (int) D.20574;
          D.20683 = ctx.ip_offset;
          D.20845 = monoeg_g_strdup_printf ("Code overrun starting with 0x%x at 0x%04x", D.20575, D.20683);
          vinfo->info.message = D.20845;
          vinfo->exception_type = 3;
          D.20310 = ctx.list;
          D.20846 = monoeg_g_slist_prepend (D.20310, vinfo);
          ctx.list = D.20846;
        }
        ctx.valid = 0;
        goto <D.19585>;
        <D.20843>:
        D.20686 = ip + 1;
        D.20783 = MEM[(const guint32 *)D.20686];
        D.20784 = D.20783 << 24;
        D.20686 = ip + 1;
        D.20783 = MEM[(const guint32 *)D.20686];
        D.20785 = D.20783 >> 8;
        D.20786 = D.20785 & 65280;
        D.20787 = D.20784 | D.20786;
        D.20686 = ip + 1;
        D.20783 = MEM[(const guint32 *)D.20686];
        D.20788 = D.20783 << 8;
        D.20789 = D.20788 & 16711680;
        D.20790 = D.20787 | D.20789;
        D.20686 = ip + 1;
        D.20783 = MEM[(const guint32 *)D.20686];
        D.20791 = D.20783 >> 24;
        token = D.20790 | D.20791;
        D.20363 = ctx.verifiable;
        if (D.20363 != 0) goto <D.20847>; else goto <D.20849>;
        <D.20849>:
        D.20365 = ctx.level;
        D.20366 = D.20365 & 128;
        if (D.20366 != 0) goto <D.20847>; else goto <D.20848>;
        <D.20847>:
        {
          struct MonoVerifyInfoExtended * vinfo;

          vinfo = monoeg_malloc (24);
          vinfo->info.status = 8;
          D.20683 = ctx.ip_offset;
          D.20850 = monoeg_g_strdup_printf ("Intruction calli is not verifiable at 0x%04x", D.20683);
          vinfo->info.message = D.20850;
          vinfo->exception_type = 4;
          D.20310 = ctx.list;
          D.20851 = monoeg_g_slist_prepend (D.20310, vinfo);
          ctx.list = D.20851;
        }
        ctx.verifiable = 0;
        D.20365 = ctx.level;
        D.20369 = D.20365 & 16;
        if (D.20369 != 0) goto <D.20852>; else goto <D.20853>;
        <D.20852>:
        ctx.valid = 0;
        <D.20853>:
        <D.20848>:
        ip = ip + 5;
        goto <D.19585>;
        <D.19689>:
        D.20680 = ip + 2;
        if (D.20680 > end) goto <D.20854>; else goto <D.20856>;
        <D.20856>:
        ip.19 = (long unsigned int) ip;
        if (ip.19 > 18446744073709551613) goto <D.20854>; else goto <D.20855>;
        <D.20854>:
        {
          struct MonoVerifyInfoExtended * vinfo;

          vinfo = monoeg_malloc (24);
          vinfo->info.status = 1;
          D.20574 = *ip;
          D.20575 = (int) D.20574;
          D.20683 = ctx.ip_offset;
          D.20857 = monoeg_g_strdup_printf ("Code overrun starting with 0x%x at 0x%04x", D.20575, D.20683);
          vinfo->info.message = D.20857;
          vinfo->exception_type = 3;
          D.20310 = ctx.list;
          D.20858 = monoeg_g_slist_prepend (D.20310, vinfo);
          ctx.list = D.20858;
        }
        ctx.valid = 0;
        goto <D.19585>;
        <D.20855>:
        D.20686 = ip + 1;
        D.20687 = *D.20686;
        D.20770 = (signed char) D.20687;
        D.20771 = (int) D.20770;
        D.20772 = D.20771 + 2;
        do_static_branch (&ctx, D.20772);
        need_merge = 1;
        ip = ip + 2;
        start = 1;
        goto <D.19585>;
        <D.19691>:
        <D.19692>:
        D.20680 = ip + 2;
        if (D.20680 > end) goto <D.20859>; else goto <D.20861>;
        <D.20861>:
        ip.19 = (long unsigned int) ip;
        if (ip.19 > 18446744073709551613) goto <D.20859>; else goto <D.20860>;
        <D.20859>:
        {
          struct MonoVerifyInfoExtended * vinfo;

          vinfo = monoeg_malloc (24);
          vinfo->info.status = 1;
          D.20574 = *ip;
          D.20575 = (int) D.20574;
          D.20683 = ctx.ip_offset;
          D.20862 = monoeg_g_strdup_printf ("Code overrun starting with 0x%x at 0x%04x", D.20575, D.20683);
          vinfo->info.message = D.20862;
          vinfo->exception_type = 3;
          D.20310 = ctx.list;
          D.20863 = monoeg_g_slist_prepend (D.20310, vinfo);
          ctx.list = D.20863;
        }
        ctx.valid = 0;
        goto <D.19585>;
        <D.20860>:
        D.20686 = ip + 1;
        D.20687 = *D.20686;
        D.20770 = (signed char) D.20687;
        D.20771 = (int) D.20770;
        D.20772 = D.20771 + 2;
        do_boolean_branch_op (&ctx, D.20772);
        ip = ip + 2;
        need_merge = 1;
        goto <D.19585>;
        <D.19694>:
        D.20724 = ip + 5;
        if (D.20724 > end) goto <D.20864>; else goto <D.20866>;
        <D.20866>:
        ip.19 = (long unsigned int) ip;
        if (ip.19 > 18446744073709551610) goto <D.20864>; else goto <D.20865>;
        <D.20864>:
        {
          struct MonoVerifyInfoExtended * vinfo;

          vinfo = monoeg_malloc (24);
          vinfo->info.status = 1;
          D.20574 = *ip;
          D.20575 = (int) D.20574;
          D.20683 = ctx.ip_offset;
          D.20867 = monoeg_g_strdup_printf ("Code overrun starting with 0x%x at 0x%04x", D.20575, D.20683);
          vinfo->info.message = D.20867;
          vinfo->exception_type = 3;
          D.20310 = ctx.list;
          D.20868 = monoeg_g_slist_prepend (D.20310, vinfo);
          ctx.list = D.20868;
        }
        ctx.valid = 0;
        goto <D.19585>;
        <D.20865>:
        D.20686 = ip + 1;
        D.20783 = MEM[(const guint32 *)D.20686];
        D.20784 = D.20783 << 24;
        D.20686 = ip + 1;
        D.20783 = MEM[(const guint32 *)D.20686];
        D.20785 = D.20783 >> 8;
        D.20786 = D.20785 & 65280;
        D.20787 = D.20784 | D.20786;
        D.20686 = ip + 1;
        D.20783 = MEM[(const guint32 *)D.20686];
        D.20788 = D.20783 << 8;
        D.20789 = D.20788 & 16711680;
        D.20790 = D.20787 | D.20789;
        D.20686 = ip + 1;
        D.20783 = MEM[(const guint32 *)D.20686];
        D.20791 = D.20783 >> 24;
        D.20792 = D.20790 | D.20791;
        D.20793 = (int) D.20792;
        D.20794 = D.20793 + 5;
        do_static_branch (&ctx, D.20794);
        need_merge = 1;
        ip = ip + 5;
        start = 1;
        goto <D.19585>;
        <D.19696>:
        <D.19697>:
        D.20724 = ip + 5;
        if (D.20724 > end) goto <D.20869>; else goto <D.20871>;
        <D.20871>:
        ip.19 = (long unsigned int) ip;
        if (ip.19 > 18446744073709551610) goto <D.20869>; else goto <D.20870>;
        <D.20869>:
        {
          struct MonoVerifyInfoExtended * vinfo;

          vinfo = monoeg_malloc (24);
          vinfo->info.status = 1;
          D.20574 = *ip;
          D.20575 = (int) D.20574;
          D.20683 = ctx.ip_offset;
          D.20872 = monoeg_g_strdup_printf ("Code overrun starting with 0x%x at 0x%04x", D.20575, D.20683);
          vinfo->info.message = D.20872;
          vinfo->exception_type = 3;
          D.20310 = ctx.list;
          D.20873 = monoeg_g_slist_prepend (D.20310, vinfo);
          ctx.list = D.20873;
        }
        ctx.valid = 0;
        goto <D.19585>;
        <D.20870>:
        D.20686 = ip + 1;
        D.20783 = MEM[(const guint32 *)D.20686];
        D.20784 = D.20783 << 24;
        D.20686 = ip + 1;
        D.20783 = MEM[(const guint32 *)D.20686];
        D.20785 = D.20783 >> 8;
        D.20786 = D.20785 & 65280;
        D.20787 = D.20784 | D.20786;
        D.20686 = ip + 1;
        D.20783 = MEM[(const guint32 *)D.20686];
        D.20788 = D.20783 << 8;
        D.20789 = D.20788 & 16711680;
        D.20790 = D.20787 | D.20789;
        D.20686 = ip + 1;
        D.20783 = MEM[(const guint32 *)D.20686];
        D.20791 = D.20783 >> 24;
        D.20792 = D.20790 | D.20791;
        D.20793 = (int) D.20792;
        D.20794 = D.20793 + 5;
        do_boolean_branch_op (&ctx, D.20794);
        ip = ip + 5;
        need_merge = 1;
        goto <D.19585>;
        <D.19699>:
        {
          guint32 entries;

          D.20724 = ip + 5;
          if (D.20724 > end) goto <D.20874>; else goto <D.20876>;
          <D.20876>:
          ip.19 = (long unsigned int) ip;
          if (ip.19 > 18446744073709551610) goto <D.20874>; else goto <D.20875>;
          <D.20874>:
          {
            struct MonoVerifyInfoExtended * vinfo;

            vinfo = monoeg_malloc (24);
            vinfo->info.status = 1;
            D.20574 = *ip;
            D.20575 = (int) D.20574;
            D.20683 = ctx.ip_offset;
            D.20877 = monoeg_g_strdup_printf ("Code overrun starting with 0x%x at 0x%04x", D.20575, D.20683);
            vinfo->info.message = D.20877;
            vinfo->exception_type = 3;
            D.20310 = ctx.list;
            D.20878 = monoeg_g_slist_prepend (D.20310, vinfo);
            ctx.list = D.20878;
          }
          ctx.valid = 0;
          goto <D.19585>;
          <D.20875>:
          D.20686 = ip + 1;
          D.20783 = MEM[(const guint32 *)D.20686];
          D.20784 = D.20783 << 24;
          D.20686 = ip + 1;
          D.20783 = MEM[(const guint32 *)D.20686];
          D.20785 = D.20783 >> 8;
          D.20786 = D.20785 & 65280;
          D.20787 = D.20784 | D.20786;
          D.20686 = ip + 1;
          D.20783 = MEM[(const guint32 *)D.20686];
          D.20788 = D.20783 << 8;
          D.20789 = D.20788 & 16711680;
          D.20790 = D.20787 | D.20789;
          D.20686 = ip + 1;
          D.20783 = MEM[(const guint32 *)D.20686];
          D.20791 = D.20783 >> 24;
          entries = D.20790 | D.20791;
          if (entries > 1073741823) goto <D.20879>; else goto <D.20880>;
          <D.20879>:
          {
            struct MonoVerifyInfoExtended * vinfo;

            vinfo = monoeg_malloc (24);
            vinfo->info.status = 1;
            D.20683 = ctx.ip_offset;
            D.20881 = monoeg_g_strdup_printf ("Too many switch entries %x at 0x%04x", entries, D.20683);
            vinfo->info.message = D.20881;
            vinfo->exception_type = 3;
            D.20310 = ctx.list;
            D.20882 = monoeg_g_slist_prepend (D.20310, vinfo);
            ctx.list = D.20882;
          }
          ctx.valid = 0;
          <D.20880>:
          ip = ip + 5;
          D.20885 = (long unsigned int) entries;
          D.20886 = D.20885 * 4;
          D.20887 = ip + D.20886;
          if (D.20887 > end) goto <D.20883>; else goto <D.20888>;
          <D.20888>:
          D.20885 = (long unsigned int) entries;
          D.20886 = D.20885 * 4;
          D.20889 = ~D.20886;
          ip.19 = (long unsigned int) ip;
          if (D.20889 < ip.19) goto <D.20883>; else goto <D.20884>;
          <D.20883>:
          {
            struct MonoVerifyInfoExtended * vinfo;

            vinfo = monoeg_malloc (24);
            vinfo->info.status = 1;
            D.20574 = *ip;
            D.20575 = (int) D.20574;
            D.20683 = ctx.ip_offset;
            D.20890 = monoeg_g_strdup_printf ("Code overrun starting with 0x%x at 0x%04x", D.20575, D.20683);
            vinfo->info.message = D.20890;
            vinfo->exception_type = 3;
            D.20310 = ctx.list;
            D.20891 = monoeg_g_slist_prepend (D.20310, vinfo);
            ctx.list = D.20891;
          }
          ctx.valid = 0;
          goto <D.19585>;
          <D.20884>:
          entries.20 = (int) entries;
          do_switch (&ctx, entries.20, ip);
          D.20885 = (long unsigned int) entries;
          D.20886 = D.20885 * 4;
          ip = ip + D.20886;
          goto <D.19585>;
        }
        <D.19704>:
        <D.19705>:
        <D.19706>:
        <D.19707>:
        <D.19708>:
        <D.19709>:
        <D.19710>:
        <D.19711>:
        <D.19712>:
        <D.19713>:
        <D.19714>:
        D.20574 = *ip;
        D.20575 = (int) D.20574;
        do_load_indirect (&ctx, D.20575);
        ip = ip + 1;
        goto <D.19585>;
        <D.19715>:
        <D.19716>:
        <D.19717>:
        <D.19718>:
        <D.19719>:
        <D.19720>:
        <D.19721>:
        <D.19722>:
        D.20574 = *ip;
        D.20575 = (int) D.20574;
        do_store_indirect (&ctx, D.20575);
        ip = ip + 1;
        goto <D.19585>;
        <D.19723>:
        <D.19724>:
        D.20574 = *ip;
        D.20575 = (int) D.20574;
        do_unary_math_op (&ctx, D.20575);
        ip = ip + 1;
        goto <D.19585>;
        <D.19725>:
        <D.19726>:
        <D.19727>:
        <D.19728>:
        <D.19729>:
        <D.19730>:
        do_conversion (&ctx, 1);
        ip = ip + 1;
        goto <D.19585>;
        <D.19731>:
        <D.19732>:
        do_conversion (&ctx, 2);
        ip = ip + 1;
        goto <D.19585>;
        <D.19733>:
        <D.19734>:
        <D.19735>:
        do_conversion (&ctx, 4);
        ip = ip + 1;
        goto <D.19585>;
        <D.19736>:
        <D.19737>:
        do_conversion (&ctx, 3);
        ip = ip + 1;
        goto <D.19585>;
        <D.19738>:
        D.20724 = ip + 5;
        if (D.20724 > end) goto <D.20893>; else goto <D.20895>;
        <D.20895>:
        ip.19 = (long unsigned int) ip;
        if (ip.19 > 18446744073709551610) goto <D.20893>; else goto <D.20894>;
        <D.20893>:
        {
          struct MonoVerifyInfoExtended * vinfo;

          vinfo = monoeg_malloc (24);
          vinfo->info.status = 1;
          D.20574 = *ip;
          D.20575 = (int) D.20574;
          D.20683 = ctx.ip_offset;
          D.20896 = monoeg_g_strdup_printf ("Code overrun starting with 0x%x at 0x%04x", D.20575, D.20683);
          vinfo->info.message = D.20896;
          vinfo->exception_type = 3;
          D.20310 = ctx.list;
          D.20897 = monoeg_g_slist_prepend (D.20310, vinfo);
          ctx.list = D.20897;
        }
        ctx.valid = 0;
        goto <D.19585>;
        <D.20894>:
        D.20686 = ip + 1;
        D.20783 = MEM[(const guint32 *)D.20686];
        D.20784 = D.20783 << 24;
        D.20686 = ip + 1;
        D.20783 = MEM[(const guint32 *)D.20686];
        D.20785 = D.20783 >> 8;
        D.20786 = D.20785 & 65280;
        D.20787 = D.20784 | D.20786;
        D.20686 = ip + 1;
        D.20783 = MEM[(const guint32 *)D.20686];
        D.20788 = D.20783 << 8;
        D.20789 = D.20788 & 16711680;
        D.20790 = D.20787 | D.20789;
        D.20686 = ip + 1;
        D.20783 = MEM[(const guint32 *)D.20686];
        D.20791 = D.20783 >> 24;
        D.20792 = D.20790 | D.20791;
        D.20793 = (int) D.20792;
        do_cpobj (&ctx, D.20793);
        ip = ip + 5;
        goto <D.19585>;
        <D.19740>:
        D.20724 = ip + 5;
        if (D.20724 > end) goto <D.20898>; else goto <D.20900>;
        <D.20900>:
        ip.19 = (long unsigned int) ip;
        if (ip.19 > 18446744073709551610) goto <D.20898>; else goto <D.20899>;
        <D.20898>:
        {
          struct MonoVerifyInfoExtended * vinfo;

          vinfo = monoeg_malloc (24);
          vinfo->info.status = 1;
          D.20574 = *ip;
          D.20575 = (int) D.20574;
          D.20683 = ctx.ip_offset;
          D.20901 = monoeg_g_strdup_printf ("Code overrun starting with 0x%x at 0x%04x", D.20575, D.20683);
          vinfo->info.message = D.20901;
          vinfo->exception_type = 3;
          D.20310 = ctx.list;
          D.20902 = monoeg_g_slist_prepend (D.20310, vinfo);
          ctx.list = D.20902;
        }
        ctx.valid = 0;
        goto <D.19585>;
        <D.20899>:
        D.20686 = ip + 1;
        D.20783 = MEM[(const guint32 *)D.20686];
        D.20784 = D.20783 << 24;
        D.20686 = ip + 1;
        D.20783 = MEM[(const guint32 *)D.20686];
        D.20785 = D.20783 >> 8;
        D.20786 = D.20785 & 65280;
        D.20787 = D.20784 | D.20786;
        D.20686 = ip + 1;
        D.20783 = MEM[(const guint32 *)D.20686];
        D.20788 = D.20783 << 8;
        D.20789 = D.20788 & 16711680;
        D.20790 = D.20787 | D.20789;
        D.20686 = ip + 1;
        D.20783 = MEM[(const guint32 *)D.20686];
        D.20791 = D.20783 >> 24;
        D.20792 = D.20790 | D.20791;
        D.20793 = (int) D.20792;
        do_ldobj_value (&ctx, D.20793);
        ip = ip + 5;
        goto <D.19585>;
        <D.19742>:
        D.20724 = ip + 5;
        if (D.20724 > end) goto <D.20903>; else goto <D.20905>;
        <D.20905>:
        ip.19 = (long unsigned int) ip;
        if (ip.19 > 18446744073709551610) goto <D.20903>; else goto <D.20904>;
        <D.20903>:
        {
          struct MonoVerifyInfoExtended * vinfo;

          vinfo = monoeg_malloc (24);
          vinfo->info.status = 1;
          D.20574 = *ip;
          D.20575 = (int) D.20574;
          D.20683 = ctx.ip_offset;
          D.20906 = monoeg_g_strdup_printf ("Code overrun starting with 0x%x at 0x%04x", D.20575, D.20683);
          vinfo->info.message = D.20906;
          vinfo->exception_type = 3;
          D.20310 = ctx.list;
          D.20907 = monoeg_g_slist_prepend (D.20310, vinfo);
          ctx.list = D.20907;
        }
        ctx.valid = 0;
        goto <D.19585>;
        <D.20904>:
        D.20686 = ip + 1;
        D.20783 = MEM[(const guint32 *)D.20686];
        D.20784 = D.20783 << 24;
        D.20686 = ip + 1;
        D.20783 = MEM[(const guint32 *)D.20686];
        D.20785 = D.20783 >> 8;
        D.20786 = D.20785 & 65280;
        D.20787 = D.20784 | D.20786;
        D.20686 = ip + 1;
        D.20783 = MEM[(const guint32 *)D.20686];
        D.20788 = D.20783 << 8;
        D.20789 = D.20788 & 16711680;
        D.20790 = D.20787 | D.20789;
        D.20686 = ip + 1;
        D.20783 = MEM[(const guint32 *)D.20686];
        D.20791 = D.20783 >> 24;
        D.20792 = D.20790 | D.20791;
        do_ldstr (&ctx, D.20792);
        ip = ip + 5;
        goto <D.19585>;
        <D.19744>:
        D.20724 = ip + 5;
        if (D.20724 > end) goto <D.20908>; else goto <D.20910>;
        <D.20910>:
        ip.19 = (long unsigned int) ip;
        if (ip.19 > 18446744073709551610) goto <D.20908>; else goto <D.20909>;
        <D.20908>:
        {
          struct MonoVerifyInfoExtended * vinfo;

          vinfo = monoeg_malloc (24);
          vinfo->info.status = 1;
          D.20574 = *ip;
          D.20575 = (int) D.20574;
          D.20683 = ctx.ip_offset;
          D.20911 = monoeg_g_strdup_printf ("Code overrun starting with 0x%x at 0x%04x", D.20575, D.20683);
          vinfo->info.message = D.20911;
          vinfo->exception_type = 3;
          D.20310 = ctx.list;
          D.20912 = monoeg_g_slist_prepend (D.20310, vinfo);
          ctx.list = D.20912;
        }
        ctx.valid = 0;
        goto <D.19585>;
        <D.20909>:
        D.20686 = ip + 1;
        D.20783 = MEM[(const guint32 *)D.20686];
        D.20784 = D.20783 << 24;
        D.20686 = ip + 1;
        D.20783 = MEM[(const guint32 *)D.20686];
        D.20785 = D.20783 >> 8;
        D.20786 = D.20785 & 65280;
        D.20787 = D.20784 | D.20786;
        D.20686 = ip + 1;
        D.20783 = MEM[(const guint32 *)D.20686];
        D.20788 = D.20783 << 8;
        D.20789 = D.20788 & 16711680;
        D.20790 = D.20787 | D.20789;
        D.20686 = ip + 1;
        D.20783 = MEM[(const guint32 *)D.20686];
        D.20791 = D.20783 >> 24;
        D.20792 = D.20790 | D.20791;
        D.20793 = (int) D.20792;
        do_newobj (&ctx, D.20793);
        ip = ip + 5;
        goto <D.19585>;
        <D.19746>:
        <D.19747>:
        D.20724 = ip + 5;
        if (D.20724 > end) goto <D.20913>; else goto <D.20915>;
        <D.20915>:
        ip.19 = (long unsigned int) ip;
        if (ip.19 > 18446744073709551610) goto <D.20913>; else goto <D.20914>;
        <D.20913>:
        {
          struct MonoVerifyInfoExtended * vinfo;

          vinfo = monoeg_malloc (24);
          vinfo->info.status = 1;
          D.20574 = *ip;
          D.20575 = (int) D.20574;
          D.20683 = ctx.ip_offset;
          D.20916 = monoeg_g_strdup_printf ("Code overrun starting with 0x%x at 0x%04x", D.20575, D.20683);
          vinfo->info.message = D.20916;
          vinfo->exception_type = 3;
          D.20310 = ctx.list;
          D.20917 = monoeg_g_slist_prepend (D.20310, vinfo);
          ctx.list = D.20917;
        }
        ctx.valid = 0;
        goto <D.19585>;
        <D.20914>:
        D.20686 = ip + 1;
        D.20783 = MEM[(const guint32 *)D.20686];
        D.20784 = D.20783 << 24;
        D.20686 = ip + 1;
        D.20783 = MEM[(const guint32 *)D.20686];
        D.20785 = D.20783 >> 8;
        D.20786 = D.20785 & 65280;
        D.20787 = D.20784 | D.20786;
        D.20686 = ip + 1;
        D.20783 = MEM[(const guint32 *)D.20686];
        D.20788 = D.20783 << 8;
        D.20789 = D.20788 & 16711680;
        D.20790 = D.20787 | D.20789;
        D.20686 = ip + 1;
        D.20783 = MEM[(const guint32 *)D.20686];
        D.20791 = D.20783 >> 24;
        D.20792 = D.20790 | D.20791;
        D.20793 = (int) D.20792;
        D.20574 = *ip;
        if (D.20574 == 116) goto <D.20919>; else goto <D.20920>;
        <D.20919>:
        iftmp.21 = "castclass";
        goto <D.20921>;
        <D.20920>:
        iftmp.21 = "isinst";
        <D.20921>:
        do_cast (&ctx, D.20793, iftmp.21);
        ip = ip + 5;
        goto <D.19585>;
        <D.19749>:
        <D.19750>:
        {
          struct MonoVerifyInfoExtended * vinfo;

          vinfo = monoeg_malloc (24);
          vinfo->info.status = 1;
          D.20922 = monoeg_g_strdup_printf ("Use of the `unused\' opcode");
          vinfo->info.message = D.20922;
          vinfo->exception_type = 3;
          D.20310 = ctx.list;
          D.20923 = monoeg_g_slist_prepend (D.20310, vinfo);
          ctx.list = D.20923;
        }
        ctx.valid = 0;
        ip = ip + 1;
        goto <D.19585>;
        <D.19752>:
        D.20724 = ip + 5;
        if (D.20724 > end) goto <D.20924>; else goto <D.20926>;
        <D.20926>:
        ip.19 = (long unsigned int) ip;
        if (ip.19 > 18446744073709551610) goto <D.20924>; else goto <D.20925>;
        <D.20924>:
        {
          struct MonoVerifyInfoExtended * vinfo;

          vinfo = monoeg_malloc (24);
          vinfo->info.status = 1;
          D.20574 = *ip;
          D.20575 = (int) D.20574;
          D.20683 = ctx.ip_offset;
          D.20927 = monoeg_g_strdup_printf ("Code overrun starting with 0x%x at 0x%04x", D.20575, D.20683);
          vinfo->info.message = D.20927;
          vinfo->exception_type = 3;
          D.20310 = ctx.list;
          D.20928 = monoeg_g_slist_prepend (D.20310, vinfo);
          ctx.list = D.20928;
        }
        ctx.valid = 0;
        goto <D.19585>;
        <D.20925>:
        D.20686 = ip + 1;
        D.20783 = MEM[(const guint32 *)D.20686];
        D.20784 = D.20783 << 24;
        D.20686 = ip + 1;
        D.20783 = MEM[(const guint32 *)D.20686];
        D.20785 = D.20783 >> 8;
        D.20786 = D.20785 & 65280;
        D.20787 = D.20784 | D.20786;
        D.20686 = ip + 1;
        D.20783 = MEM[(const guint32 *)D.20686];
        D.20788 = D.20783 << 8;
        D.20789 = D.20788 & 16711680;
        D.20790 = D.20787 | D.20789;
        D.20686 = ip + 1;
        D.20783 = MEM[(const guint32 *)D.20686];
        D.20791 = D.20783 >> 24;
        D.20792 = D.20790 | D.20791;
        D.20793 = (int) D.20792;
        do_unbox_value (&ctx, D.20793);
        ip = ip + 5;
        goto <D.19585>;
        <D.19754>:
        do_throw (&ctx);
        start = 1;
        ip = ip + 1;
        goto <D.19585>;
        <D.19755>:
        <D.19756>:
        D.20724 = ip + 5;
        if (D.20724 > end) goto <D.20929>; else goto <D.20931>;
        <D.20931>:
        ip.19 = (long unsigned int) ip;
        if (ip.19 > 18446744073709551610) goto <D.20929>; else goto <D.20930>;
        <D.20929>:
        {
          struct MonoVerifyInfoExtended * vinfo;

          vinfo = monoeg_malloc (24);
          vinfo->info.status = 1;
          D.20574 = *ip;
          D.20575 = (int) D.20574;
          D.20683 = ctx.ip_offset;
          D.20932 = monoeg_g_strdup_printf ("Code overrun starting with 0x%x at 0x%04x", D.20575, D.20683);
          vinfo->info.message = D.20932;
          vinfo->exception_type = 3;
          D.20310 = ctx.list;
          D.20933 = monoeg_g_slist_prepend (D.20310, vinfo);
          ctx.list = D.20933;
        }
        ctx.valid = 0;
        goto <D.19585>;
        <D.20930>:
        D.20686 = ip + 1;
        D.20783 = MEM[(const guint32 *)D.20686];
        D.20784 = D.20783 << 24;
        D.20686 = ip + 1;
        D.20783 = MEM[(const guint32 *)D.20686];
        D.20785 = D.20783 >> 8;
        D.20786 = D.20785 & 65280;
        D.20787 = D.20784 | D.20786;
        D.20686 = ip + 1;
        D.20783 = MEM[(const guint32 *)D.20686];
        D.20788 = D.20783 << 8;
        D.20789 = D.20788 & 16711680;
        D.20790 = D.20787 | D.20789;
        D.20686 = ip + 1;
        D.20783 = MEM[(const guint32 *)D.20686];
        D.20791 = D.20783 >> 24;
        D.20792 = D.20790 | D.20791;
        D.20793 = (int) D.20792;
        D.20574 = *ip;
        D.20934 = D.20574 == 124;
        D.20935 = (int) D.20934;
        do_push_field (&ctx, D.20793, D.20935);
        ip = ip + 5;
        goto <D.19585>;
        <D.19758>:
        <D.19759>:
        D.20724 = ip + 5;
        if (D.20724 > end) goto <D.20936>; else goto <D.20938>;
        <D.20938>:
        ip.19 = (long unsigned int) ip;
        if (ip.19 > 18446744073709551610) goto <D.20936>; else goto <D.20937>;
        <D.20936>:
        {
          struct MonoVerifyInfoExtended * vinfo;

          vinfo = monoeg_malloc (24);
          vinfo->info.status = 1;
          D.20574 = *ip;
          D.20575 = (int) D.20574;
          D.20683 = ctx.ip_offset;
          D.20939 = monoeg_g_strdup_printf ("Code overrun starting with 0x%x at 0x%04x", D.20575, D.20683);
          vinfo->info.message = D.20939;
          vinfo->exception_type = 3;
          D.20310 = ctx.list;
          D.20940 = monoeg_g_slist_prepend (D.20310, vinfo);
          ctx.list = D.20940;
        }
        ctx.valid = 0;
        goto <D.19585>;
        <D.20937>:
        D.20686 = ip + 1;
        D.20783 = MEM[(const guint32 *)D.20686];
        D.20784 = D.20783 << 24;
        D.20686 = ip + 1;
        D.20783 = MEM[(const guint32 *)D.20686];
        D.20785 = D.20783 >> 8;
        D.20786 = D.20785 & 65280;
        D.20787 = D.20784 | D.20786;
        D.20686 = ip + 1;
        D.20783 = MEM[(const guint32 *)D.20686];
        D.20788 = D.20783 << 8;
        D.20789 = D.20788 & 16711680;
        D.20790 = D.20787 | D.20789;
        D.20686 = ip + 1;
        D.20783 = MEM[(const guint32 *)D.20686];
        D.20791 = D.20783 >> 24;
        D.20792 = D.20790 | D.20791;
        D.20793 = (int) D.20792;
        D.20574 = *ip;
        D.20941 = D.20574 == 127;
        D.20942 = (int) D.20941;
        do_push_static_field (&ctx, D.20793, D.20942);
        ip = ip + 5;
        goto <D.19585>;
        <D.19761>:
        D.20724 = ip + 5;
        if (D.20724 > end) goto <D.20943>; else goto <D.20945>;
        <D.20945>:
        ip.19 = (long unsigned int) ip;
        if (ip.19 > 18446744073709551610) goto <D.20943>; else goto <D.20944>;
        <D.20943>:
        {
          struct MonoVerifyInfoExtended * vinfo;

          vinfo = monoeg_malloc (24);
          vinfo->info.status = 1;
          D.20574 = *ip;
          D.20575 = (int) D.20574;
          D.20683 = ctx.ip_offset;
          D.20946 = monoeg_g_strdup_printf ("Code overrun starting with 0x%x at 0x%04x", D.20575, D.20683);
          vinfo->info.message = D.20946;
          vinfo->exception_type = 3;
          D.20310 = ctx.list;
          D.20947 = monoeg_g_slist_prepend (D.20310, vinfo);
          ctx.list = D.20947;
        }
        ctx.valid = 0;
        goto <D.19585>;
        <D.20944>:
        D.20686 = ip + 1;
        D.20783 = MEM[(const guint32 *)D.20686];
        D.20784 = D.20783 << 24;
        D.20686 = ip + 1;
        D.20783 = MEM[(const guint32 *)D.20686];
        D.20785 = D.20783 >> 8;
        D.20786 = D.20785 & 65280;
        D.20787 = D.20784 | D.20786;
        D.20686 = ip + 1;
        D.20783 = MEM[(const guint32 *)D.20686];
        D.20788 = D.20783 << 8;
        D.20789 = D.20788 & 16711680;
        D.20790 = D.20787 | D.20789;
        D.20686 = ip + 1;
        D.20783 = MEM[(const guint32 *)D.20686];
        D.20791 = D.20783 >> 24;
        D.20792 = D.20790 | D.20791;
        D.20793 = (int) D.20792;
        do_store_field (&ctx, D.20793);
        ip = ip + 5;
        goto <D.19585>;
        <D.19763>:
        D.20724 = ip + 5;
        if (D.20724 > end) goto <D.20948>; else goto <D.20950>;
        <D.20950>:
        ip.19 = (long unsigned int) ip;
        if (ip.19 > 18446744073709551610) goto <D.20948>; else goto <D.20949>;
        <D.20948>:
        {
          struct MonoVerifyInfoExtended * vinfo;

          vinfo = monoeg_malloc (24);
          vinfo->info.status = 1;
          D.20574 = *ip;
          D.20575 = (int) D.20574;
          D.20683 = ctx.ip_offset;
          D.20951 = monoeg_g_strdup_printf ("Code overrun starting with 0x%x at 0x%04x", D.20575, D.20683);
          vinfo->info.message = D.20951;
          vinfo->exception_type = 3;
          D.20310 = ctx.list;
          D.20952 = monoeg_g_slist_prepend (D.20310, vinfo);
          ctx.list = D.20952;
        }
        ctx.valid = 0;
        goto <D.19585>;
        <D.20949>:
        D.20686 = ip + 1;
        D.20783 = MEM[(const guint32 *)D.20686];
        D.20784 = D.20783 << 24;
        D.20686 = ip + 1;
        D.20783 = MEM[(const guint32 *)D.20686];
        D.20785 = D.20783 >> 8;
        D.20786 = D.20785 & 65280;
        D.20787 = D.20784 | D.20786;
        D.20686 = ip + 1;
        D.20783 = MEM[(const guint32 *)D.20686];
        D.20788 = D.20783 << 8;
        D.20789 = D.20788 & 16711680;
        D.20790 = D.20787 | D.20789;
        D.20686 = ip + 1;
        D.20783 = MEM[(const guint32 *)D.20686];
        D.20791 = D.20783 >> 24;
        D.20792 = D.20790 | D.20791;
        D.20793 = (int) D.20792;
        do_store_static_field (&ctx, D.20793);
        ip = ip + 5;
        goto <D.19585>;
        <D.19765>:
        D.20724 = ip + 5;
        if (D.20724 > end) goto <D.20953>; else goto <D.20955>;
        <D.20955>:
        ip.19 = (long unsigned int) ip;
        if (ip.19 > 18446744073709551610) goto <D.20953>; else goto <D.20954>;
        <D.20953>:
        {
          struct MonoVerifyInfoExtended * vinfo;

          vinfo = monoeg_malloc (24);
          vinfo->info.status = 1;
          D.20574 = *ip;
          D.20575 = (int) D.20574;
          D.20683 = ctx.ip_offset;
          D.20956 = monoeg_g_strdup_printf ("Code overrun starting with 0x%x at 0x%04x", D.20575, D.20683);
          vinfo->info.message = D.20956;
          vinfo->exception_type = 3;
          D.20310 = ctx.list;
          D.20957 = monoeg_g_slist_prepend (D.20310, vinfo);
          ctx.list = D.20957;
        }
        ctx.valid = 0;
        goto <D.19585>;
        <D.20954>:
        D.20686 = ip + 1;
        D.20783 = MEM[(const guint32 *)D.20686];
        D.20784 = D.20783 << 24;
        D.20686 = ip + 1;
        D.20783 = MEM[(const guint32 *)D.20686];
        D.20785 = D.20783 >> 8;
        D.20786 = D.20785 & 65280;
        D.20787 = D.20784 | D.20786;
        D.20686 = ip + 1;
        D.20783 = MEM[(const guint32 *)D.20686];
        D.20788 = D.20783 << 8;
        D.20789 = D.20788 & 16711680;
        D.20790 = D.20787 | D.20789;
        D.20686 = ip + 1;
        D.20783 = MEM[(const guint32 *)D.20686];
        D.20791 = D.20783 >> 24;
        D.20792 = D.20790 | D.20791;
        D.20793 = (int) D.20792;
        do_stobj (&ctx, D.20793);
        ip = ip + 5;
        goto <D.19585>;
        <D.19767>:
        <D.19768>:
        <D.19769>:
        <D.19770>:
        <D.19771>:
        <D.19772>:
        do_conversion (&ctx, 1);
        ip = ip + 1;
        goto <D.19585>;
        <D.19773>:
        <D.19774>:
        do_conversion (&ctx, 2);
        ip = ip + 1;
        goto <D.19585>;
        <D.19775>:
        <D.19776>:
        do_conversion (&ctx, 3);
        ip = ip + 1;
        goto <D.19585>;
        <D.19777>:
        D.20724 = ip + 5;
        if (D.20724 > end) goto <D.20958>; else goto <D.20960>;
        <D.20960>:
        ip.19 = (long unsigned int) ip;
        if (ip.19 > 18446744073709551610) goto <D.20958>; else goto <D.20959>;
        <D.20958>:
        {
          struct MonoVerifyInfoExtended * vinfo;

          vinfo = monoeg_malloc (24);
          vinfo->info.status = 1;
          D.20574 = *ip;
          D.20575 = (int) D.20574;
          D.20683 = ctx.ip_offset;
          D.20961 = monoeg_g_strdup_printf ("Code overrun starting with 0x%x at 0x%04x", D.20575, D.20683);
          vinfo->info.message = D.20961;
          vinfo->exception_type = 3;
          D.20310 = ctx.list;
          D.20962 = monoeg_g_slist_prepend (D.20310, vinfo);
          ctx.list = D.20962;
        }
        ctx.valid = 0;
        goto <D.19585>;
        <D.20959>:
        D.20686 = ip + 1;
        D.20783 = MEM[(const guint32 *)D.20686];
        D.20784 = D.20783 << 24;
        D.20686 = ip + 1;
        D.20783 = MEM[(const guint32 *)D.20686];
        D.20785 = D.20783 >> 8;
        D.20786 = D.20785 & 65280;
        D.20787 = D.20784 | D.20786;
        D.20686 = ip + 1;
        D.20783 = MEM[(const guint32 *)D.20686];
        D.20788 = D.20783 << 8;
        D.20789 = D.20788 & 16711680;
        D.20790 = D.20787 | D.20789;
        D.20686 = ip + 1;
        D.20783 = MEM[(const guint32 *)D.20686];
        D.20791 = D.20783 >> 24;
        D.20792 = D.20790 | D.20791;
        D.20793 = (int) D.20792;
        do_box_value (&ctx, D.20793);
        ip = ip + 5;
        goto <D.19585>;
        <D.19779>:
        D.20724 = ip + 5;
        if (D.20724 > end) goto <D.20963>; else goto <D.20965>;
        <D.20965>:
        ip.19 = (long unsigned int) ip;
        if (ip.19 > 18446744073709551610) goto <D.20963>; else goto <D.20964>;
        <D.20963>:
        {
          struct MonoVerifyInfoExtended * vinfo;

          vinfo = monoeg_malloc (24);
          vinfo->info.status = 1;
          D.20574 = *ip;
          D.20575 = (int) D.20574;
          D.20683 = ctx.ip_offset;
          D.20966 = monoeg_g_strdup_printf ("Code overrun starting with 0x%x at 0x%04x", D.20575, D.20683);
          vinfo->info.message = D.20966;
          vinfo->exception_type = 3;
          D.20310 = ctx.list;
          D.20967 = monoeg_g_slist_prepend (D.20310, vinfo);
          ctx.list = D.20967;
        }
        ctx.valid = 0;
        goto <D.19585>;
        <D.20964>:
        D.20686 = ip + 1;
        D.20783 = MEM[(const guint32 *)D.20686];
        D.20784 = D.20783 << 24;
        D.20686 = ip + 1;
        D.20783 = MEM[(const guint32 *)D.20686];
        D.20785 = D.20783 >> 8;
        D.20786 = D.20785 & 65280;
        D.20787 = D.20784 | D.20786;
        D.20686 = ip + 1;
        D.20783 = MEM[(const guint32 *)D.20686];
        D.20788 = D.20783 << 8;
        D.20789 = D.20788 & 16711680;
        D.20790 = D.20787 | D.20789;
        D.20686 = ip + 1;
        D.20783 = MEM[(const guint32 *)D.20686];
        D.20791 = D.20783 >> 24;
        D.20792 = D.20790 | D.20791;
        D.20793 = (int) D.20792;
        do_newarr (&ctx, D.20793);
        ip = ip + 5;
        goto <D.19585>;
        <D.19781>:
        do_ldlen (&ctx);
        ip = ip + 1;
        goto <D.19585>;
        <D.19782>:
        D.20724 = ip + 5;
        if (D.20724 > end) goto <D.20968>; else goto <D.20970>;
        <D.20970>:
        ip.19 = (long unsigned int) ip;
        if (ip.19 > 18446744073709551610) goto <D.20968>; else goto <D.20969>;
        <D.20968>:
        {
          struct MonoVerifyInfoExtended * vinfo;

          vinfo = monoeg_malloc (24);
          vinfo->info.status = 1;
          D.20574 = *ip;
          D.20575 = (int) D.20574;
          D.20683 = ctx.ip_offset;
          D.20971 = monoeg_g_strdup_printf ("Code overrun starting with 0x%x at 0x%04x", D.20575, D.20683);
          vinfo->info.message = D.20971;
          vinfo->exception_type = 3;
          D.20310 = ctx.list;
          D.20972 = monoeg_g_slist_prepend (D.20310, vinfo);
          ctx.list = D.20972;
        }
        ctx.valid = 0;
        goto <D.19585>;
        <D.20969>:
        D.20686 = ip + 1;
        D.20783 = MEM[(const guint32 *)D.20686];
        D.20784 = D.20783 << 24;
        D.20686 = ip + 1;
        D.20783 = MEM[(const guint32 *)D.20686];
        D.20785 = D.20783 >> 8;
        D.20786 = D.20785 & 65280;
        D.20787 = D.20784 | D.20786;
        D.20686 = ip + 1;
        D.20783 = MEM[(const guint32 *)D.20686];
        D.20788 = D.20783 << 8;
        D.20789 = D.20788 & 16711680;
        D.20790 = D.20787 | D.20789;
        D.20686 = ip + 1;
        D.20783 = MEM[(const guint32 *)D.20686];
        D.20791 = D.20783 >> 24;
        D.20792 = D.20790 | D.20791;
        D.20793 = (int) D.20792;
        do_ldelema (&ctx, D.20793);
        ip = ip + 5;
        goto <D.19585>;
        <D.19784>:
        <D.19785>:
        <D.19786>:
        <D.19787>:
        <D.19788>:
        <D.19789>:
        <D.19790>:
        <D.19791>:
        <D.19792>:
        <D.19793>:
        <D.19794>:
        D.20574 = *ip;
        D.20575 = (int) D.20574;
        do_ldelem (&ctx, D.20575, 0);
        ip = ip + 1;
        goto <D.19585>;
        <D.19795>:
        <D.19796>:
        <D.19797>:
        <D.19798>:
        <D.19799>:
        <D.19800>:
        <D.19801>:
        <D.19802>:
        D.20574 = *ip;
        D.20575 = (int) D.20574;
        do_stelem (&ctx, D.20575, 0);
        ip = ip + 1;
        goto <D.19585>;
        <D.19803>:
        D.20724 = ip + 5;
        if (D.20724 > end) goto <D.20973>; else goto <D.20975>;
        <D.20975>:
        ip.19 = (long unsigned int) ip;
        if (ip.19 > 18446744073709551610) goto <D.20973>; else goto <D.20974>;
        <D.20973>:
        {
          struct MonoVerifyInfoExtended * vinfo;

          vinfo = monoeg_malloc (24);
          vinfo->info.status = 1;
          D.20574 = *ip;
          D.20575 = (int) D.20574;
          D.20683 = ctx.ip_offset;
          D.20976 = monoeg_g_strdup_printf ("Code overrun starting with 0x%x at 0x%04x", D.20575, D.20683);
          vinfo->info.message = D.20976;
          vinfo->exception_type = 3;
          D.20310 = ctx.list;
          D.20977 = monoeg_g_slist_prepend (D.20310, vinfo);
          ctx.list = D.20977;
        }
        ctx.valid = 0;
        goto <D.19585>;
        <D.20974>:
        D.20574 = *ip;
        D.20575 = (int) D.20574;
        D.20686 = ip + 1;
        D.20783 = MEM[(const guint32 *)D.20686];
        D.20784 = D.20783 << 24;
        D.20686 = ip + 1;
        D.20783 = MEM[(const guint32 *)D.20686];
        D.20785 = D.20783 >> 8;
        D.20786 = D.20785 & 65280;
        D.20787 = D.20784 | D.20786;
        D.20686 = ip + 1;
        D.20783 = MEM[(const guint32 *)D.20686];
        D.20788 = D.20783 << 8;
        D.20789 = D.20788 & 16711680;
        D.20790 = D.20787 | D.20789;
        D.20686 = ip + 1;
        D.20783 = MEM[(const guint32 *)D.20686];
        D.20791 = D.20783 >> 24;
        D.20792 = D.20790 | D.20791;
        D.20793 = (int) D.20792;
        do_ldelem (&ctx, D.20575, D.20793);
        ip = ip + 5;
        goto <D.19585>;
        <D.19805>:
        D.20724 = ip + 5;
        if (D.20724 > end) goto <D.20978>; else goto <D.20980>;
        <D.20980>:
        ip.19 = (long unsigned int) ip;
        if (ip.19 > 18446744073709551610) goto <D.20978>; else goto <D.20979>;
        <D.20978>:
        {
          struct MonoVerifyInfoExtended * vinfo;

          vinfo = monoeg_malloc (24);
          vinfo->info.status = 1;
          D.20574 = *ip;
          D.20575 = (int) D.20574;
          D.20683 = ctx.ip_offset;
          D.20981 = monoeg_g_strdup_printf ("Code overrun starting with 0x%x at 0x%04x", D.20575, D.20683);
          vinfo->info.message = D.20981;
          vinfo->exception_type = 3;
          D.20310 = ctx.list;
          D.20982 = monoeg_g_slist_prepend (D.20310, vinfo);
          ctx.list = D.20982;
        }
        ctx.valid = 0;
        goto <D.19585>;
        <D.20979>:
        D.20574 = *ip;
        D.20575 = (int) D.20574;
        D.20686 = ip + 1;
        D.20783 = MEM[(const guint32 *)D.20686];
        D.20784 = D.20783 << 24;
        D.20686 = ip + 1;
        D.20783 = MEM[(const guint32 *)D.20686];
        D.20785 = D.20783 >> 8;
        D.20786 = D.20785 & 65280;
        D.20787 = D.20784 | D.20786;
        D.20686 = ip + 1;
        D.20783 = MEM[(const guint32 *)D.20686];
        D.20788 = D.20783 << 8;
        D.20789 = D.20788 & 16711680;
        D.20790 = D.20787 | D.20789;
        D.20686 = ip + 1;
        D.20783 = MEM[(const guint32 *)D.20686];
        D.20791 = D.20783 >> 24;
        D.20792 = D.20790 | D.20791;
        D.20793 = (int) D.20792;
        do_stelem (&ctx, D.20575, D.20793);
        ip = ip + 5;
        goto <D.19585>;
        <D.19807>:
        D.20724 = ip + 5;
        if (D.20724 > end) goto <D.20983>; else goto <D.20985>;
        <D.20985>:
        ip.19 = (long unsigned int) ip;
        if (ip.19 > 18446744073709551610) goto <D.20983>; else goto <D.20984>;
        <D.20983>:
        {
          struct MonoVerifyInfoExtended * vinfo;

          vinfo = monoeg_malloc (24);
          vinfo->info.status = 1;
          D.20574 = *ip;
          D.20575 = (int) D.20574;
          D.20683 = ctx.ip_offset;
          D.20986 = monoeg_g_strdup_printf ("Code overrun starting with 0x%x at 0x%04x", D.20575, D.20683);
          vinfo->info.message = D.20986;
          vinfo->exception_type = 3;
          D.20310 = ctx.list;
          D.20987 = monoeg_g_slist_prepend (D.20310, vinfo);
          ctx.list = D.20987;
        }
        ctx.valid = 0;
        goto <D.19585>;
        <D.20984>:
        D.20686 = ip + 1;
        D.20783 = MEM[(const guint32 *)D.20686];
        D.20784 = D.20783 << 24;
        D.20686 = ip + 1;
        D.20783 = MEM[(const guint32 *)D.20686];
        D.20785 = D.20783 >> 8;
        D.20786 = D.20785 & 65280;
        D.20787 = D.20784 | D.20786;
        D.20686 = ip + 1;
        D.20783 = MEM[(const guint32 *)D.20686];
        D.20788 = D.20783 << 8;
        D.20789 = D.20788 & 16711680;
        D.20790 = D.20787 | D.20789;
        D.20686 = ip + 1;
        D.20783 = MEM[(const guint32 *)D.20686];
        D.20791 = D.20783 >> 24;
        D.20792 = D.20790 | D.20791;
        D.20793 = (int) D.20792;
        do_unbox_any (&ctx, D.20793);
        ip = ip + 5;
        goto <D.19585>;
        <D.19809>:
        <D.19810>:
        <D.19811>:
        <D.19812>:
        <D.19813>:
        <D.19814>:
        do_conversion (&ctx, 1);
        ip = ip + 1;
        goto <D.19585>;
        <D.19815>:
        <D.19816>:
        do_conversion (&ctx, 2);
        ip = ip + 1;
        goto <D.19585>;
        <D.19817>:
        <D.19818>:
        do_conversion (&ctx, 3);
        ip = ip + 1;
        goto <D.19585>;
        <D.19819>:
        D.20724 = ip + 5;
        if (D.20724 > end) goto <D.20988>; else goto <D.20990>;
        <D.20990>:
        ip.19 = (long unsigned int) ip;
        if (ip.19 > 18446744073709551610) goto <D.20988>; else goto <D.20989>;
        <D.20988>:
        {
          struct MonoVerifyInfoExtended * vinfo;

          vinfo = monoeg_malloc (24);
          vinfo->info.status = 1;
          D.20574 = *ip;
          D.20575 = (int) D.20574;
          D.20683 = ctx.ip_offset;
          D.20991 = monoeg_g_strdup_printf ("Code overrun starting with 0x%x at 0x%04x", D.20575, D.20683);
          vinfo->info.message = D.20991;
          vinfo->exception_type = 3;
          D.20310 = ctx.list;
          D.20992 = monoeg_g_slist_prepend (D.20310, vinfo);
          ctx.list = D.20992;
        }
        ctx.valid = 0;
        goto <D.19585>;
        <D.20989>:
        D.20686 = ip + 1;
        D.20783 = MEM[(const guint32 *)D.20686];
        D.20784 = D.20783 << 24;
        D.20686 = ip + 1;
        D.20783 = MEM[(const guint32 *)D.20686];
        D.20785 = D.20783 >> 8;
        D.20786 = D.20785 & 65280;
        D.20787 = D.20784 | D.20786;
        D.20686 = ip + 1;
        D.20783 = MEM[(const guint32 *)D.20686];
        D.20788 = D.20783 << 8;
        D.20789 = D.20788 & 16711680;
        D.20790 = D.20787 | D.20789;
        D.20686 = ip + 1;
        D.20783 = MEM[(const guint32 *)D.20686];
        D.20791 = D.20783 >> 24;
        D.20792 = D.20790 | D.20791;
        D.20793 = (int) D.20792;
        do_refanyval (&ctx, D.20793);
        ip = ip + 5;
        goto <D.19585>;
        <D.19821>:
        do_ckfinite (&ctx);
        ip = ip + 1;
        goto <D.19585>;
        <D.19822>:
        D.20724 = ip + 5;
        if (D.20724 > end) goto <D.20993>; else goto <D.20995>;
        <D.20995>:
        ip.19 = (long unsigned int) ip;
        if (ip.19 > 18446744073709551610) goto <D.20993>; else goto <D.20994>;
        <D.20993>:
        {
          struct MonoVerifyInfoExtended * vinfo;

          vinfo = monoeg_malloc (24);
          vinfo->info.status = 1;
          D.20574 = *ip;
          D.20575 = (int) D.20574;
          D.20683 = ctx.ip_offset;
          D.20996 = monoeg_g_strdup_printf ("Code overrun starting with 0x%x at 0x%04x", D.20575, D.20683);
          vinfo->info.message = D.20996;
          vinfo->exception_type = 3;
          D.20310 = ctx.list;
          D.20997 = monoeg_g_slist_prepend (D.20310, vinfo);
          ctx.list = D.20997;
        }
        ctx.valid = 0;
        goto <D.19585>;
        <D.20994>:
        D.20686 = ip + 1;
        D.20783 = MEM[(const guint32 *)D.20686];
        D.20784 = D.20783 << 24;
        D.20686 = ip + 1;
        D.20783 = MEM[(const guint32 *)D.20686];
        D.20785 = D.20783 >> 8;
        D.20786 = D.20785 & 65280;
        D.20787 = D.20784 | D.20786;
        D.20686 = ip + 1;
        D.20783 = MEM[(const guint32 *)D.20686];
        D.20788 = D.20783 << 8;
        D.20789 = D.20788 & 16711680;
        D.20790 = D.20787 | D.20789;
        D.20686 = ip + 1;
        D.20783 = MEM[(const guint32 *)D.20686];
        D.20791 = D.20783 >> 24;
        D.20792 = D.20790 | D.20791;
        D.20793 = (int) D.20792;
        do_mkrefany (&ctx, D.20793);
        ip = ip + 5;
        goto <D.19585>;
        <D.19824>:
        D.20724 = ip + 5;
        if (D.20724 > end) goto <D.20998>; else goto <D.21000>;
        <D.21000>:
        ip.19 = (long unsigned int) ip;
        if (ip.19 > 18446744073709551610) goto <D.20998>; else goto <D.20999>;
        <D.20998>:
        {
          struct MonoVerifyInfoExtended * vinfo;

          vinfo = monoeg_malloc (24);
          vinfo->info.status = 1;
          D.20574 = *ip;
          D.20575 = (int) D.20574;
          D.20683 = ctx.ip_offset;
          D.21001 = monoeg_g_strdup_printf ("Code overrun starting with 0x%x at 0x%04x", D.20575, D.20683);
          vinfo->info.message = D.21001;
          vinfo->exception_type = 3;
          D.20310 = ctx.list;
          D.21002 = monoeg_g_slist_prepend (D.20310, vinfo);
          ctx.list = D.21002;
        }
        ctx.valid = 0;
        goto <D.19585>;
        <D.20999>:
        D.20686 = ip + 1;
        D.20783 = MEM[(const guint32 *)D.20686];
        D.20784 = D.20783 << 24;
        D.20686 = ip + 1;
        D.20783 = MEM[(const guint32 *)D.20686];
        D.20785 = D.20783 >> 8;
        D.20786 = D.20785 & 65280;
        D.20787 = D.20784 | D.20786;
        D.20686 = ip + 1;
        D.20783 = MEM[(const guint32 *)D.20686];
        D.20788 = D.20783 << 8;
        D.20789 = D.20788 & 16711680;
        D.20790 = D.20787 | D.20789;
        D.20686 = ip + 1;
        D.20783 = MEM[(const guint32 *)D.20686];
        D.20791 = D.20783 >> 24;
        D.20792 = D.20790 | D.20791;
        D.20793 = (int) D.20792;
        do_load_token (&ctx, D.20793);
        ip = ip + 5;
        goto <D.19585>;
        <D.19826>:
        D.20328 = ctx.header;
        D.21003 = is_correct_endfinally (D.20328, ip_offset);
        if (D.21003 == 0) goto <D.21004>; else goto <D.21005>;
        <D.21004>:
        {
          struct MonoVerifyInfoExtended * vinfo;

          vinfo = monoeg_malloc (24);
          vinfo->info.status = 1;
          D.20683 = ctx.ip_offset;
          D.21006 = monoeg_g_strdup_printf ("endfinally must be used inside a finally/fault handler at 0x%04x", D.20683);
          vinfo->info.message = D.21006;
          vinfo->exception_type = 3;
          D.20310 = ctx.list;
          D.21007 = monoeg_g_slist_prepend (D.20310, vinfo);
          ctx.list = D.21007;
        }
        ctx.valid = 0;
        <D.21005>:
        ctx.eval.size = 0;
        start = 1;
        ip = ip + 1;
        goto <D.19585>;
        <D.19828>:
        D.20724 = ip + 5;
        if (D.20724 > end) goto <D.21008>; else goto <D.21010>;
        <D.21010>:
        ip.19 = (long unsigned int) ip;
        if (ip.19 > 18446744073709551610) goto <D.21008>; else goto <D.21009>;
        <D.21008>:
        {
          struct MonoVerifyInfoExtended * vinfo;

          vinfo = monoeg_malloc (24);
          vinfo->info.status = 1;
          D.20574 = *ip;
          D.20575 = (int) D.20574;
          D.20683 = ctx.ip_offset;
          D.21011 = monoeg_g_strdup_printf ("Code overrun starting with 0x%x at 0x%04x", D.20575, D.20683);
          vinfo->info.message = D.21011;
          vinfo->exception_type = 3;
          D.20310 = ctx.list;
          D.21012 = monoeg_g_slist_prepend (D.20310, vinfo);
          ctx.list = D.21012;
        }
        ctx.valid = 0;
        goto <D.19585>;
        <D.21009>:
        D.20686 = ip + 1;
        D.20783 = MEM[(const guint32 *)D.20686];
        D.20784 = D.20783 << 24;
        D.20686 = ip + 1;
        D.20783 = MEM[(const guint32 *)D.20686];
        D.20785 = D.20783 >> 8;
        D.20786 = D.20785 & 65280;
        D.20787 = D.20784 | D.20786;
        D.20686 = ip + 1;
        D.20783 = MEM[(const guint32 *)D.20686];
        D.20788 = D.20783 << 8;
        D.20789 = D.20788 & 16711680;
        D.20790 = D.20787 | D.20789;
        D.20686 = ip + 1;
        D.20783 = MEM[(const guint32 *)D.20686];
        D.20791 = D.20783 >> 24;
        D.20792 = D.20790 | D.20791;
        D.21013 = D.20792 + 5;
        D.21014 = (int) D.21013;
        do_leave (&ctx, D.21014);
        ip = ip + 5;
        start = 1;
        need_merge = 1;
        goto <D.19585>;
        <D.19830>:
        D.20680 = ip + 2;
        if (D.20680 > end) goto <D.21015>; else goto <D.21017>;
        <D.21017>:
        ip.19 = (long unsigned int) ip;
        if (ip.19 > 18446744073709551613) goto <D.21015>; else goto <D.21016>;
        <D.21015>:
        {
          struct MonoVerifyInfoExtended * vinfo;

          vinfo = monoeg_malloc (24);
          vinfo->info.status = 1;
          D.20574 = *ip;
          D.20575 = (int) D.20574;
          D.20683 = ctx.ip_offset;
          D.21018 = monoeg_g_strdup_printf ("Code overrun starting with 0x%x at 0x%04x", D.20575, D.20683);
          vinfo->info.message = D.21018;
          vinfo->exception_type = 3;
          D.20310 = ctx.list;
          D.21019 = monoeg_g_slist_prepend (D.20310, vinfo);
          ctx.list = D.21019;
        }
        ctx.valid = 0;
        goto <D.19585>;
        <D.21016>:
        D.20686 = ip + 1;
        D.20687 = *D.20686;
        D.20770 = (signed char) D.20687;
        D.20771 = (int) D.20770;
        D.20772 = D.20771 + 2;
        do_leave (&ctx, D.20772);
        ip = ip + 2;
        start = 1;
        need_merge = 1;
        goto <D.19585>;
        <D.19832>:
        D.20680 = ip + 2;
        if (D.20680 > end) goto <D.21020>; else goto <D.21022>;
        <D.21022>:
        ip.19 = (long unsigned int) ip;
        if (ip.19 > 18446744073709551613) goto <D.21020>; else goto <D.21021>;
        <D.21020>:
        {
          struct MonoVerifyInfoExtended * vinfo;

          vinfo = monoeg_malloc (24);
          vinfo->info.status = 1;
          D.20574 = *ip;
          D.20575 = (int) D.20574;
          D.20683 = ctx.ip_offset;
          D.21023 = monoeg_g_strdup_printf ("Code overrun starting with 0x%x at 0x%04x", D.20575, D.20683);
          vinfo->info.message = D.21023;
          vinfo->exception_type = 3;
          D.20310 = ctx.list;
          D.21024 = monoeg_g_slist_prepend (D.20310, vinfo);
          ctx.list = D.21024;
        }
        ctx.valid = 0;
        goto <D.19585>;
        <D.21021>:
        ip = ip + 1;
        D.20574 = *ip;
        D.20575 = (int) D.20574;
        switch (D.20575) <default: <D.19883>, case 0: <D.19844>, case 1: <D.19837>, case 2: <D.19838>, case 3: <D.19839>, case 4: <D.19840>, case 5: <D.19841>, case 6: <D.19846>, case 7: <D.19848>, case 8: <D.19857>, case 9: <D.19850>, case 10: <D.19851>, case 11: <D.19842>, case 12: <D.19853>, case 13: <D.19854>, case 14: <D.19834>, case 15: <D.19856>, case 16: <D.19858>, case 17: <D.19862>, case 18: <D.19863>, case 19: <D.19865>, case 20: <D.19866>, case 21: <D.19868>, case 22: <D.19870>, case 23: <D.19873>, case 24: <D.19875>, case 25: <D.19877>, case 26: <D.19878>, case 27: <D.19860>, case 28: <D.19880>, case 29: <D.19882>, case 30: <D.19872>, case 34: <D.19859>>
        <D.19834>:
        D.21027 = ip + 3;
        if (D.21027 > end) goto <D.21025>; else goto <D.21028>;
        <D.21028>:
        ip.19 = (long unsigned int) ip;
        if (ip.19 > 18446744073709551612) goto <D.21025>; else goto <D.21026>;
        <D.21025>:
        {
          struct MonoVerifyInfoExtended * vinfo;

          vinfo = monoeg_malloc (24);
          vinfo->info.status = 1;
          D.20574 = *ip;
          D.20575 = (int) D.20574;
          D.20683 = ctx.ip_offset;
          D.21029 = monoeg_g_strdup_printf ("Code overrun starting with 0x%x at 0x%04x", D.20575, D.20683);
          vinfo->info.message = D.21029;
          vinfo->exception_type = 3;
          D.20310 = ctx.list;
          D.21030 = monoeg_g_slist_prepend (D.20310, vinfo);
          ctx.list = D.21030;
        }
        ctx.valid = 0;
        goto <D.19836>;
        <D.21026>:
        D.20686 = ip + 1;
        D.21031 = MEM[(const guint16 *)D.20686];
        D.21032 = D.21031 >> 8;
        D.21033 = (int) D.21032;
        D.20686 = ip + 1;
        D.21031 = MEM[(const guint16 *)D.20686];
        D.21034 = (int) D.21031;
        D.21035 = D.21034 << 8;
        D.21036 = D.21035 & 65535;
        D.21037 = D.21033 | D.21036;
        D.21038 = (unsigned int) D.21037;
        store_local (&ctx, D.21038);
        ip = ip + 3;
        goto <D.19836>;
        <D.19837>:
        D.20574 = *ip;
        D.21039 = (unsigned int) D.20574;
        do_cmp_op (&ctx, &cmp_br_eq_op, D.21039);
        ip = ip + 1;
        goto <D.19836>;
        <D.19838>:
        <D.19839>:
        <D.19840>:
        <D.19841>:
        D.20574 = *ip;
        D.21039 = (unsigned int) D.20574;
        do_cmp_op (&ctx, &cmp_br_op, D.21039);
        ip = ip + 1;
        goto <D.19836>;
        <D.19842>:
        D.21027 = ip + 3;
        if (D.21027 > end) goto <D.21040>; else goto <D.21042>;
        <D.21042>:
        ip.19 = (long unsigned int) ip;
        if (ip.19 > 18446744073709551612) goto <D.21040>; else goto <D.21041>;
        <D.21040>:
        {
          struct MonoVerifyInfoExtended * vinfo;

          vinfo = monoeg_malloc (24);
          vinfo->info.status = 1;
          D.20574 = *ip;
          D.20575 = (int) D.20574;
          D.20683 = ctx.ip_offset;
          D.21043 = monoeg_g_strdup_printf ("Code overrun starting with 0x%x at 0x%04x", D.20575, D.20683);
          vinfo->info.message = D.21043;
          vinfo->exception_type = 3;
          D.20310 = ctx.list;
          D.21044 = monoeg_g_slist_prepend (D.20310, vinfo);
          ctx.list = D.21044;
        }
        ctx.valid = 0;
        goto <D.19836>;
        <D.21041>:
        D.20686 = ip + 1;
        D.21031 = MEM[(const guint16 *)D.20686];
        D.21032 = D.21031 >> 8;
        D.21033 = (int) D.21032;
        D.20686 = ip + 1;
        D.21031 = MEM[(const guint16 *)D.20686];
        D.21034 = (int) D.21031;
        D.21035 = D.21034 << 8;
        D.21036 = D.21035 & 65535;
        D.21037 = D.21033 | D.21036;
        D.21038 = (unsigned int) D.21037;
        store_arg (&ctx, D.21038);
        ip = ip + 3;
        goto <D.19836>;
        <D.19844>:
        D.21045 = check_overflow (&ctx);
        if (D.21045 == 0) goto <D.19836>; else goto <D.21046>;
        <D.21046>:
        D.20306 = ctx.signature;
        D.20321 = BIT_FIELD_REF <*D.20306, 64, 64>;
        D.21047 = D.20321 & 64512;
        if (D.21047 != 5120) goto <D.21048>; else goto <D.21049>;
        <D.21048>:
        {
          struct MonoVerifyInfoExtended * vinfo;

          vinfo = monoeg_malloc (24);
          vinfo->info.status = 1;
          D.20683 = ctx.ip_offset;
          D.21050 = monoeg_g_strdup_printf ("Cannot use arglist on method without VARGARG calling convention at 0x%04x", D.20683);
          vinfo->info.message = D.21050;
          vinfo->exception_type = 3;
          D.20310 = ctx.list;
          D.21051 = monoeg_g_slist_prepend (D.20310, vinfo);
          ctx.list = D.21051;
        }
        ctx.valid = 0;
        <D.21049>:
        D.21052 = stack_push (&ctx);
        D.21053 = mono_defaults.argumenthandle_class;
        D.21054 = &D.21053->byval_arg;
        set_stack_value (&ctx, D.21052, D.21054, 0);
        ip = ip + 1;
        goto <D.19836>;
        <D.19846>:
        D.20724 = ip + 5;
        if (D.20724 > end) goto <D.21055>; else goto <D.21057>;
        <D.21057>:
        ip.19 = (long unsigned int) ip;
        if (ip.19 > 18446744073709551610) goto <D.21055>; else goto <D.21056>;
        <D.21055>:
        {
          struct MonoVerifyInfoExtended * vinfo;

          vinfo = monoeg_malloc (24);
          vinfo->info.status = 1;
          D.20574 = *ip;
          D.20575 = (int) D.20574;
          D.20683 = ctx.ip_offset;
          D.21058 = monoeg_g_strdup_printf ("Code overrun starting with 0x%x at 0x%04x", D.20575, D.20683);
          vinfo->info.message = D.21058;
          vinfo->exception_type = 3;
          D.20310 = ctx.list;
          D.21059 = monoeg_g_slist_prepend (D.20310, vinfo);
          ctx.list = D.21059;
        }
        ctx.valid = 0;
        goto <D.19836>;
        <D.21056>:
        D.20686 = ip + 1;
        D.20783 = MEM[(const guint32 *)D.20686];
        D.20784 = D.20783 << 24;
        D.20686 = ip + 1;
        D.20783 = MEM[(const guint32 *)D.20686];
        D.20785 = D.20783 >> 8;
        D.20786 = D.20785 & 65280;
        D.20787 = D.20784 | D.20786;
        D.20686 = ip + 1;
        D.20783 = MEM[(const guint32 *)D.20686];
        D.20788 = D.20783 << 8;
        D.20789 = D.20788 & 16711680;
        D.20790 = D.20787 | D.20789;
        D.20686 = ip + 1;
        D.20783 = MEM[(const guint32 *)D.20686];
        D.20791 = D.20783 >> 24;
        D.20792 = D.20790 | D.20791;
        do_load_function_ptr (&ctx, D.20792, 0);
        ip = ip + 5;
        goto <D.19836>;
        <D.19848>:
        D.20724 = ip + 5;
        if (D.20724 > end) goto <D.21060>; else goto <D.21062>;
        <D.21062>:
        ip.19 = (long unsigned int) ip;
        if (ip.19 > 18446744073709551610) goto <D.21060>; else goto <D.21061>;
        <D.21060>:
        {
          struct MonoVerifyInfoExtended * vinfo;

          vinfo = monoeg_malloc (24);
          vinfo->info.status = 1;
          D.20574 = *ip;
          D.20575 = (int) D.20574;
          D.20683 = ctx.ip_offset;
          D.21063 = monoeg_g_strdup_printf ("Code overrun starting with 0x%x at 0x%04x", D.20575, D.20683);
          vinfo->info.message = D.21063;
          vinfo->exception_type = 3;
          D.20310 = ctx.list;
          D.21064 = monoeg_g_slist_prepend (D.20310, vinfo);
          ctx.list = D.21064;
        }
        ctx.valid = 0;
        goto <D.19836>;
        <D.21061>:
        D.20686 = ip + 1;
        D.20783 = MEM[(const guint32 *)D.20686];
        D.20784 = D.20783 << 24;
        D.20686 = ip + 1;
        D.20783 = MEM[(const guint32 *)D.20686];
        D.20785 = D.20783 >> 8;
        D.20786 = D.20785 & 65280;
        D.20787 = D.20784 | D.20786;
        D.20686 = ip + 1;
        D.20783 = MEM[(const guint32 *)D.20686];
        D.20788 = D.20783 << 8;
        D.20789 = D.20788 & 16711680;
        D.20790 = D.20787 | D.20789;
        D.20686 = ip + 1;
        D.20783 = MEM[(const guint32 *)D.20686];
        D.20791 = D.20783 >> 24;
        D.20792 = D.20790 | D.20791;
        do_load_function_ptr (&ctx, D.20792, 1);
        ip = ip + 5;
        goto <D.19836>;
        <D.19850>:
        <D.19851>:
        D.21027 = ip + 3;
        if (D.21027 > end) goto <D.21065>; else goto <D.21067>;
        <D.21067>:
        ip.19 = (long unsigned int) ip;
        if (ip.19 > 18446744073709551612) goto <D.21065>; else goto <D.21066>;
        <D.21065>:
        {
          struct MonoVerifyInfoExtended * vinfo;

          vinfo = monoeg_malloc (24);
          vinfo->info.status = 1;
          D.20574 = *ip;
          D.20575 = (int) D.20574;
          D.20683 = ctx.ip_offset;
          D.21068 = monoeg_g_strdup_printf ("Code overrun starting with 0x%x at 0x%04x", D.20575, D.20683);
          vinfo->info.message = D.21068;
          vinfo->exception_type = 3;
          D.20310 = ctx.list;
          D.21069 = monoeg_g_slist_prepend (D.20310, vinfo);
          ctx.list = D.21069;
        }
        ctx.valid = 0;
        goto <D.19836>;
        <D.21066>:
        D.20686 = ip + 1;
        D.21031 = MEM[(const guint16 *)D.20686];
        D.21032 = D.21031 >> 8;
        D.21033 = (int) D.21032;
        D.20686 = ip + 1;
        D.21031 = MEM[(const guint16 *)D.20686];
        D.21034 = (int) D.21031;
        D.21035 = D.21034 << 8;
        D.21036 = D.21035 & 65535;
        D.21037 = D.21033 | D.21036;
        D.21070 = (unsigned int) D.21037;
        D.20574 = *ip;
        D.21071 = D.20574 == 10;
        D.21072 = (int) D.21071;
        push_arg (&ctx, D.21070, D.21072);
        ip = ip + 3;
        goto <D.19836>;
        <D.19853>:
        <D.19854>:
        D.21027 = ip + 3;
        if (D.21027 > end) goto <D.21073>; else goto <D.21075>;
        <D.21075>:
        ip.19 = (long unsigned int) ip;
        if (ip.19 > 18446744073709551612) goto <D.21073>; else goto <D.21074>;
        <D.21073>:
        {
          struct MonoVerifyInfoExtended * vinfo;

          vinfo = monoeg_malloc (24);
          vinfo->info.status = 1;
          D.20574 = *ip;
          D.20575 = (int) D.20574;
          D.20683 = ctx.ip_offset;
          D.21076 = monoeg_g_strdup_printf ("Code overrun starting with 0x%x at 0x%04x", D.20575, D.20683);
          vinfo->info.message = D.21076;
          vinfo->exception_type = 3;
          D.20310 = ctx.list;
          D.21077 = monoeg_g_slist_prepend (D.20310, vinfo);
          ctx.list = D.21077;
        }
        ctx.valid = 0;
        goto <D.19836>;
        <D.21074>:
        D.20686 = ip + 1;
        D.21031 = MEM[(const guint16 *)D.20686];
        D.21032 = D.21031 >> 8;
        D.21033 = (int) D.21032;
        D.20686 = ip + 1;
        D.21031 = MEM[(const guint16 *)D.20686];
        D.21034 = (int) D.21031;
        D.21035 = D.21034 << 8;
        D.21036 = D.21035 & 65535;
        D.21037 = D.21033 | D.21036;
        D.21038 = (unsigned int) D.21037;
        D.20574 = *ip;
        D.21078 = D.20574 == 13;
        D.21079 = (int) D.21078;
        push_local (&ctx, D.21038, D.21079);
        ip = ip + 3;
        goto <D.19836>;
        <D.19856>:
        do_localloc (&ctx);
        ip = ip + 1;
        goto <D.19836>;
        <D.19857>:
        <D.19858>:
        <D.19859>:
        <D.19860>:
        {
          struct MonoVerifyInfoExtended * vinfo;

          vinfo = monoeg_malloc (24);
          vinfo->info.status = 1;
          D.21080 = monoeg_g_strdup_printf ("Use of the `unused\' opcode");
          vinfo->info.message = D.21080;
          vinfo->exception_type = 3;
          D.20310 = ctx.list;
          D.21081 = monoeg_g_slist_prepend (D.20310, vinfo);
          ctx.list = D.21081;
        }
        ctx.valid = 0;
        ip = ip + 1;
        goto <D.19836>;
        <D.19862>:
        do_endfilter (&ctx);
        start = 1;
        ip = ip + 1;
        goto <D.19836>;
        <D.19863>:
        D.20680 = ip + 2;
        if (D.20680 > end) goto <D.21082>; else goto <D.21084>;
        <D.21084>:
        ip.19 = (long unsigned int) ip;
        if (ip.19 > 18446744073709551613) goto <D.21082>; else goto <D.21083>;
        <D.21082>:
        {
          struct MonoVerifyInfoExtended * vinfo;

          vinfo = monoeg_malloc (24);
          vinfo->info.status = 1;
          D.20574 = *ip;
          D.20575 = (int) D.20574;
          D.20683 = ctx.ip_offset;
          D.21085 = monoeg_g_strdup_printf ("Code overrun starting with 0x%x at 0x%04x", D.20575, D.20683);
          vinfo->info.message = D.21085;
          vinfo->exception_type = 3;
          D.20310 = ctx.list;
          D.21086 = monoeg_g_slist_prepend (D.20310, vinfo);
          ctx.list = D.21086;
        }
        ctx.valid = 0;
        goto <D.19836>;
        <D.21083>:
        prefix = prefix | 1;
        ip = ip + 2;
        goto <D.19836>;
        <D.19865>:
        prefix = prefix | 2;
        ip = ip + 1;
        goto <D.19836>;
        <D.19866>:
        prefix = prefix | 4;
        ip = ip + 1;
        if (ip < end) goto <D.21087>; else goto <D.21088>;
        <D.21087>:
        D.20574 = *ip;
        D.21089 = D.20574 + 216;
        if (D.21089 > 1) goto <D.21090>; else goto <D.21091>;
        <D.21090>:
        D.20574 = *ip;
        if (D.20574 != 111) goto <D.21092>; else goto <D.21093>;
        <D.21092>:
        {
          struct MonoVerifyInfoExtended * vinfo;

          vinfo = monoeg_malloc (24);
          vinfo->info.status = 1;
          D.21094 = monoeg_g_strdup_printf ("tail prefix must be used only with call opcodes at 0x%04x", ip_offset);
          vinfo->info.message = D.21094;
          vinfo->exception_type = 3;
          D.20310 = ctx.list;
          D.21095 = monoeg_g_slist_prepend (D.20310, vinfo);
          ctx.list = D.21095;
        }
        ctx.valid = 0;
        <D.21093>:
        <D.21091>:
        <D.21088>:
        goto <D.19836>;
        <D.19868>:
        D.20724 = ip + 5;
        if (D.20724 > end) goto <D.21096>; else goto <D.21098>;
        <D.21098>:
        ip.19 = (long unsigned int) ip;
        if (ip.19 > 18446744073709551610) goto <D.21096>; else goto <D.21097>;
        <D.21096>:
        {
          struct MonoVerifyInfoExtended * vinfo;

          vinfo = monoeg_malloc (24);
          vinfo->info.status = 1;
          D.20574 = *ip;
          D.20575 = (int) D.20574;
          D.20683 = ctx.ip_offset;
          D.21099 = monoeg_g_strdup_printf ("Code overrun starting with 0x%x at 0x%04x", D.20575, D.20683);
          vinfo->info.message = D.21099;
          vinfo->exception_type = 3;
          D.20310 = ctx.list;
          D.21100 = monoeg_g_slist_prepend (D.20310, vinfo);
          ctx.list = D.21100;
        }
        ctx.valid = 0;
        goto <D.19836>;
        <D.21097>:
        D.20686 = ip + 1;
        D.20783 = MEM[(const guint32 *)D.20686];
        D.20784 = D.20783 << 24;
        D.20686 = ip + 1;
        D.20783 = MEM[(const guint32 *)D.20686];
        D.20785 = D.20783 >> 8;
        D.20786 = D.20785 & 65280;
        D.20787 = D.20784 | D.20786;
        D.20686 = ip + 1;
        D.20783 = MEM[(const guint32 *)D.20686];
        D.20788 = D.20783 << 8;
        D.20789 = D.20788 & 16711680;
        D.20790 = D.20787 | D.20789;
        D.20686 = ip + 1;
        D.20783 = MEM[(const guint32 *)D.20686];
        D.20791 = D.20783 >> 24;
        D.20792 = D.20790 | D.20791;
        D.20793 = (int) D.20792;
        do_initobj (&ctx, D.20793);
        ip = ip + 5;
        goto <D.19836>;
        <D.19870>:
        D.20724 = ip + 5;
        if (D.20724 > end) goto <D.21101>; else goto <D.21103>;
        <D.21103>:
        ip.19 = (long unsigned int) ip;
        if (ip.19 > 18446744073709551610) goto <D.21101>; else goto <D.21102>;
        <D.21101>:
        {
          struct MonoVerifyInfoExtended * vinfo;

          vinfo = monoeg_malloc (24);
          vinfo->info.status = 1;
          D.20574 = *ip;
          D.20575 = (int) D.20574;
          D.20683 = ctx.ip_offset;
          D.21104 = monoeg_g_strdup_printf ("Code overrun starting with 0x%x at 0x%04x", D.20575, D.20683);
          vinfo->info.message = D.21104;
          vinfo->exception_type = 3;
          D.20310 = ctx.list;
          D.21105 = monoeg_g_slist_prepend (D.20310, vinfo);
          ctx.list = D.21105;
        }
        ctx.valid = 0;
        goto <D.19836>;
        <D.21102>:
        D.20686 = ip + 1;
        D.20783 = MEM[(const guint32 *)D.20686];
        D.20784 = D.20783 << 24;
        D.20686 = ip + 1;
        D.20783 = MEM[(const guint32 *)D.20686];
        D.20785 = D.20783 >> 8;
        D.20786 = D.20785 & 65280;
        D.20787 = D.20784 | D.20786;
        D.20686 = ip + 1;
        D.20783 = MEM[(const guint32 *)D.20686];
        D.20788 = D.20783 << 8;
        D.20789 = D.20788 & 16711680;
        D.20790 = D.20787 | D.20789;
        D.20686 = ip + 1;
        D.20783 = MEM[(const guint32 *)D.20686];
        D.20791 = D.20783 >> 24;
        D.20792 = D.20790 | D.20791;
        D.20793 = (int) D.20792;
        D.21106 = get_boxable_mono_type (&ctx, D.20793, "constrained.");
        ctx.constrained_type = D.21106;
        prefix = prefix | 8;
        ip = ip + 5;
        goto <D.19836>;
        <D.19872>:
        prefix = prefix | 16;
        ip = ip + 1;
        goto <D.19836>;
        <D.19873>:
        D.21107 = ctx.prefix_set;
        D.21108 = D.21107 & 4294967292;
        ctx.prefix_set = D.21108;
        D.21109 = check_underflow (&ctx, 3);
        if (D.21109 == 0) goto <D.19836>; else goto <D.21110>;
        <D.21110>:
        D.20363 = ctx.verifiable;
        if (D.20363 != 0) goto <D.21111>; else goto <D.21113>;
        <D.21113>:
        D.20365 = ctx.level;
        D.20366 = D.20365 & 128;
        if (D.20366 != 0) goto <D.21111>; else goto <D.21112>;
        <D.21111>:
        {
          struct MonoVerifyInfoExtended * vinfo;

          vinfo = monoeg_malloc (24);
          vinfo->info.status = 8;
          D.20683 = ctx.ip_offset;
          D.21114 = monoeg_g_strdup_printf ("Instruction cpblk is not verifiable at 0x%04x", D.20683);
          vinfo->info.message = D.21114;
          vinfo->exception_type = 4;
          D.20310 = ctx.list;
          D.21115 = monoeg_g_slist_prepend (D.20310, vinfo);
          ctx.list = D.21115;
        }
        ctx.verifiable = 0;
        D.20365 = ctx.level;
        D.20369 = D.20365 & 16;
        if (D.20369 != 0) goto <D.21116>; else goto <D.21117>;
        <D.21116>:
        ctx.valid = 0;
        <D.21117>:
        <D.21112>:
        ip = ip + 1;
        goto <D.19836>;
        <D.19875>:
        D.21107 = ctx.prefix_set;
        D.21108 = D.21107 & 4294967292;
        ctx.prefix_set = D.21108;
        D.21118 = check_underflow (&ctx, 3);
        if (D.21118 == 0) goto <D.19836>; else goto <D.21119>;
        <D.21119>:
        D.20363 = ctx.verifiable;
        if (D.20363 != 0) goto <D.21120>; else goto <D.21122>;
        <D.21122>:
        D.20365 = ctx.level;
        D.20366 = D.20365 & 128;
        if (D.20366 != 0) goto <D.21120>; else goto <D.21121>;
        <D.21120>:
        {
          struct MonoVerifyInfoExtended * vinfo;

          vinfo = monoeg_malloc (24);
          vinfo->info.status = 8;
          D.20683 = ctx.ip_offset;
          D.21123 = monoeg_g_strdup_printf ("Instruction initblk is not verifiable at 0x%04x", D.20683);
          vinfo->info.message = D.21123;
          vinfo->exception_type = 4;
          D.20310 = ctx.list;
          D.21124 = monoeg_g_slist_prepend (D.20310, vinfo);
          ctx.list = D.21124;
        }
        ctx.verifiable = 0;
        D.20365 = ctx.level;
        D.20369 = D.20365 & 16;
        if (D.20369 != 0) goto <D.21125>; else goto <D.21126>;
        <D.21125>:
        ctx.valid = 0;
        <D.21126>:
        <D.21121>:
        ip = ip + 1;
        goto <D.19836>;
        <D.19877>:
        ip = ip + 2;
        goto <D.19836>;
        <D.19878>:
        D.20328 = ctx.header;
        D.21127 = is_correct_rethrow (D.20328, ip_offset);
        if (D.21127 == 0) goto <D.21128>; else goto <D.21129>;
        <D.21128>:
        {
          struct MonoVerifyInfoExtended * vinfo;

          vinfo = monoeg_malloc (24);
          vinfo->info.status = 1;
          D.20683 = ctx.ip_offset;
          D.21130 = monoeg_g_strdup_printf ("rethrow must be used inside a catch handler at 0x%04x", D.20683);
          vinfo->info.message = D.21130;
          vinfo->exception_type = 3;
          D.20310 = ctx.list;
          D.21131 = monoeg_g_slist_prepend (D.20310, vinfo);
          ctx.list = D.21131;
        }
        ctx.valid = 0;
        <D.21129>:
        ctx.eval.size = 0;
        start = 1;
        ip = ip + 1;
        goto <D.19836>;
        <D.19880>:
        D.20724 = ip + 5;
        if (D.20724 > end) goto <D.21132>; else goto <D.21134>;
        <D.21134>:
        ip.19 = (long unsigned int) ip;
        if (ip.19 > 18446744073709551610) goto <D.21132>; else goto <D.21133>;
        <D.21132>:
        {
          struct MonoVerifyInfoExtended * vinfo;

          vinfo = monoeg_malloc (24);
          vinfo->info.status = 1;
          D.20574 = *ip;
          D.20575 = (int) D.20574;
          D.20683 = ctx.ip_offset;
          D.21135 = monoeg_g_strdup_printf ("Code overrun starting with 0x%x at 0x%04x", D.20575, D.20683);
          vinfo->info.message = D.21135;
          vinfo->exception_type = 3;
          D.20310 = ctx.list;
          D.21136 = monoeg_g_slist_prepend (D.20310, vinfo);
          ctx.list = D.21136;
        }
        ctx.valid = 0;
        goto <D.19836>;
        <D.21133>:
        D.20686 = ip + 1;
        D.20783 = MEM[(const guint32 *)D.20686];
        D.20784 = D.20783 << 24;
        D.20686 = ip + 1;
        D.20783 = MEM[(const guint32 *)D.20686];
        D.20785 = D.20783 >> 8;
        D.20786 = D.20785 & 65280;
        D.20787 = D.20784 | D.20786;
        D.20686 = ip + 1;
        D.20783 = MEM[(const guint32 *)D.20686];
        D.20788 = D.20783 << 8;
        D.20789 = D.20788 & 16711680;
        D.20790 = D.20787 | D.20789;
        D.20686 = ip + 1;
        D.20783 = MEM[(const guint32 *)D.20686];
        D.20791 = D.20783 >> 24;
        D.20792 = D.20790 | D.20791;
        D.20793 = (int) D.20792;
        do_sizeof (&ctx, D.20793);
        ip = ip + 5;
        goto <D.19836>;
        <D.19882>:
        do_refanytype (&ctx);
        ip = ip + 1;
        goto <D.19836>;
        <D.19883>:
        {
          struct MonoVerifyInfoExtended * vinfo;

          vinfo = monoeg_malloc (24);
          vinfo->info.status = 1;
          D.20574 = *ip;
          D.20575 = (int) D.20574;
          D.20683 = ctx.ip_offset;
          D.21137 = monoeg_g_strdup_printf ("Invalid instruction FE %x at 0x%04x", D.20575, D.20683);
          vinfo->info.message = D.21137;
          vinfo->exception_type = 3;
          D.20310 = ctx.list;
          D.21138 = monoeg_g_slist_prepend (D.20310, vinfo);
          ctx.list = D.21138;
        }
        ctx.valid = 0;
        ip = ip + 1;
        <D.19836>:
        goto <D.19585>;
        <D.19885>:
        {
          struct MonoVerifyInfoExtended * vinfo;

          vinfo = monoeg_malloc (24);
          vinfo->info.status = 1;
          D.20574 = *ip;
          D.20575 = (int) D.20574;
          D.20683 = ctx.ip_offset;
          D.21139 = monoeg_g_strdup_printf ("Invalid instruction %x at 0x%04x", D.20575, D.20683);
          vinfo->info.message = D.21139;
          vinfo->exception_type = 3;
          D.20310 = ctx.list;
          D.21140 = monoeg_g_slist_prepend (D.20310, vinfo);
          ctx.list = D.21140;
        }
        ctx.valid = 0;
        ip = ip + 1;
        <D.19585>:
        if (prefix != 0) goto <D.21141>; else goto <D.21142>;
        <D.21141>:
        D.21107 = ctx.prefix_set;
        if (D.21107 == 0) goto <D.21143>; else goto <D.21144>;
        <D.21143>:
        D.20347 = ctx.code;
        D.20683 = ctx.ip_offset;
        D.21145 = (long unsigned int) D.20683;
        D.21146 = D.21145 * 16;
        D.21147 = D.20347 + D.21146;
        D.20347 = ctx.code;
        D.20683 = ctx.ip_offset;
        D.21145 = (long unsigned int) D.20683;
        D.21146 = D.21145 * 16;
        D.21147 = D.20347 + D.21146;
        D.21148 = D.21147->flags;
        D.21149 = D.21148 | 1;
        D.21147->flags = D.21149;
        <D.21144>:
        D.21107 = ctx.prefix_set;
        D.21150 = D.21107 | prefix;
        ctx.prefix_set = D.21150;
        ctx.has_flags = 1;
        prefix = 0;
        goto <D.21151>;
        <D.21142>:
        D.21152 = ctx.has_flags;
        if (D.21152 == 0) goto <D.21153>; else goto <D.21154>;
        <D.21153>:
        D.20347 = ctx.code;
        D.20683 = ctx.ip_offset;
        D.21145 = (long unsigned int) D.20683;
        D.21146 = D.21145 * 16;
        D.21147 = D.20347 + D.21146;
        D.20347 = ctx.code;
        D.20683 = ctx.ip_offset;
        D.21145 = (long unsigned int) D.20683;
        D.21146 = D.21145 * 16;
        D.21147 = D.20347 + D.21146;
        D.21148 = D.21147->flags;
        D.21149 = D.21148 | 1;
        D.21147->flags = D.21149;
        <D.21154>:
        D.21107 = ctx.prefix_set;
        D.21155 = D.21107 & 8;
        if (D.21155 != 0) goto <D.21156>; else goto <D.21157>;
        <D.21156>:
        {
          struct MonoVerifyInfoExtended * vinfo;

          vinfo = monoeg_malloc (24);
          vinfo->info.status = 1;
          D.20683 = ctx.ip_offset;
          D.21158 = monoeg_g_strdup_printf ("Invalid instruction after constrained prefix at 0x%04x", D.20683);
          vinfo->info.message = D.21158;
          vinfo->exception_type = 3;
          D.20310 = ctx.list;
          D.21159 = monoeg_g_slist_prepend (D.20310, vinfo);
          ctx.list = D.21159;
        }
        ctx.valid = 0;
        <D.21157>:
        D.21107 = ctx.prefix_set;
        D.21160 = D.21107 & 16;
        if (D.21160 != 0) goto <D.21161>; else goto <D.21162>;
        <D.21161>:
        {
          struct MonoVerifyInfoExtended * vinfo;

          vinfo = monoeg_malloc (24);
          vinfo->info.status = 1;
          D.20683 = ctx.ip_offset;
          D.21163 = monoeg_g_strdup_printf ("Invalid instruction after readonly prefix at 0x%04x", D.20683);
          vinfo->info.message = D.21163;
          vinfo->exception_type = 3;
          D.20310 = ctx.list;
          D.21164 = monoeg_g_slist_prepend (D.20310, vinfo);
          ctx.list = D.21164;
        }
        ctx.valid = 0;
        <D.21162>:
        D.21107 = ctx.prefix_set;
        D.21165 = D.21107 & 2;
        if (D.21165 != 0) goto <D.21166>; else goto <D.21167>;
        <D.21166>:
        {
          struct MonoVerifyInfoExtended * vinfo;

          vinfo = monoeg_malloc (24);
          vinfo->info.status = 1;
          D.20683 = ctx.ip_offset;
          D.21168 = monoeg_g_strdup_printf ("Invalid instruction after volatile prefix at 0x%04x", D.20683);
          vinfo->info.message = D.21168;
          vinfo->exception_type = 3;
          D.20310 = ctx.list;
          D.21169 = monoeg_g_slist_prepend (D.20310, vinfo);
          ctx.list = D.21169;
        }
        ctx.valid = 0;
        <D.21167>:
        D.21107 = ctx.prefix_set;
        D.21170 = D.21107 & 1;
        if (D.21170 != 0) goto <D.21171>; else goto <D.21172>;
        <D.21171>:
        {
          struct MonoVerifyInfoExtended * vinfo;

          vinfo = monoeg_malloc (24);
          vinfo->info.status = 1;
          D.20683 = ctx.ip_offset;
          D.21173 = monoeg_g_strdup_printf ("Invalid instruction after unaligned prefix at 0x%04x", D.20683);
          vinfo->info.message = D.21173;
          vinfo->exception_type = 3;
          D.20310 = ctx.list;
          D.21174 = monoeg_g_slist_prepend (D.20310, vinfo);
          ctx.list = D.21174;
        }
        ctx.valid = 0;
        <D.21172>:
        prefix = 0;
        ctx.prefix_set = prefix;
        ctx.has_flags = 0;
        <D.21151>:
      }
      <D.19581>:
      if (ip < end) goto <D.21175>; else goto <D.19582>;
      <D.21175>:
      D.20342 = ctx.valid;
      if (D.20342 != 0) goto <D.19891>; else goto <D.19582>;
      <D.19582>:
      if (ip != end) goto <D.21176>; else goto <D.21178>;
      <D.21178>:
      if (start == 0) goto <D.21176>; else goto <D.21177>;
      <D.21176>:
      D.20363 = ctx.verifiable;
      if (D.20363 != 0) goto <D.21179>; else goto <D.21180>;
      <D.21179>:
      D.20310 = ctx.list;
      if (D.20310 == 0B) goto <D.21181>; else goto <D.21182>;
      <D.21181>:
      {
        struct MonoVerifyInfoExtended * vinfo;

        vinfo = monoeg_malloc (24);
        vinfo->info.status = 1;
        D.21183 = monoeg_g_strdup_printf ("Run ahead of method code at 0x%04x", ip_offset);
        vinfo->info.message = D.21183;
        vinfo->exception_type = 3;
        D.20310 = ctx.list;
        D.21184 = monoeg_g_slist_prepend (D.20310, vinfo);
        ctx.list = D.21184;
      }
      ctx.valid = 0;
      <D.21182>:
      <D.21180>:
      <D.21177>:
      i = 0;
      goto <D.19898>;
      <D.19897>:
      D.20347 = ctx.code;
      D.20405 = (long unsigned int) i;
      D.21185 = D.20405 * 16;
      D.21186 = D.20347 + D.21185;
      D.21187 = D.21186->flags;
      D.21188 = (int) D.21187;
      D.21189 = D.21188 & 2;
      if (D.21189 != 0) goto <D.21190>; else goto <D.21191>;
      <D.21190>:
      D.20347 = ctx.code;
      D.20405 = (long unsigned int) i;
      D.21185 = D.20405 * 16;
      D.21186 = D.20347 + D.21185;
      D.21187 = D.21186->flags;
      D.21188 = (int) D.21187;
      D.21192 = D.21188 & 1;
      if (D.21192 == 0) goto <D.21193>; else goto <D.21194>;
      <D.21193>:
      {
        struct MonoVerifyInfoExtended * vinfo;

        vinfo = monoeg_malloc (24);
        vinfo->info.status = 1;
        D.21195 = monoeg_g_strdup_printf ("Branch or exception block target middle of intruction at 0x%04x", i);
        vinfo->info.message = D.21195;
        vinfo->exception_type = 3;
        D.20310 = ctx.list;
        D.21196 = monoeg_g_slist_prepend (D.20310, vinfo);
        ctx.list = D.21196;
      }
      ctx.valid = 0;
      <D.21194>:
      D.20347 = ctx.code;
      D.20405 = (long unsigned int) i;
      D.21185 = D.20405 * 16;
      D.21186 = D.20347 + D.21185;
      D.21187 = D.21186->flags;
      D.21188 = (int) D.21187;
      D.21197 = D.21188 & 16;
      if (D.21197 != 0) goto <D.21198>; else goto <D.21199>;
      <D.21198>:
      D.20363 = ctx.verifiable;
      if (D.20363 != 0) goto <D.21200>; else goto <D.21202>;
      <D.21202>:
      D.20365 = ctx.level;
      D.20366 = D.20365 & 128;
      if (D.20366 != 0) goto <D.21200>; else goto <D.21201>;
      <D.21200>:
      {
        struct MonoVerifyInfoExtended * vinfo;

        vinfo = monoeg_malloc (24);
        vinfo->info.status = 8;
        D.21203 = monoeg_g_strdup_printf ("Branch to delegate code sequence at 0x%04x", i);
        vinfo->info.message = D.21203;
        vinfo->exception_type = 4;
        D.20310 = ctx.list;
        D.21204 = monoeg_g_slist_prepend (D.20310, vinfo);
        ctx.list = D.21204;
      }
      ctx.verifiable = 0;
      D.20365 = ctx.level;
      D.20369 = D.20365 & 16;
      if (D.20369 != 0) goto <D.21205>; else goto <D.21206>;
      <D.21205>:
      ctx.valid = 0;
      <D.21206>:
      <D.21201>:
      <D.21199>:
      <D.21191>:
      D.20347 = ctx.code;
      D.20405 = (long unsigned int) i;
      D.21185 = D.20405 * 16;
      D.21186 = D.20347 + D.21185;
      D.21187 = D.21186->flags;
      D.21188 = (int) D.21187;
      D.21207 = D.21188 & 32;
      if (D.21207 != 0) goto <D.21208>; else goto <D.21209>;
      <D.21208>:
      D.21210 = ctx.has_this_store;
      if (D.21210 != 0) goto <D.21211>; else goto <D.21212>;
      <D.21211>:
      D.20363 = ctx.verifiable;
      if (D.20363 != 0) goto <D.21213>; else goto <D.21215>;
      <D.21215>:
      D.20365 = ctx.level;
      D.20366 = D.20365 & 128;
      if (D.20366 != 0) goto <D.21213>; else goto <D.21214>;
      <D.21213>:
      {
        struct MonoVerifyInfoExtended * vinfo;

        vinfo = monoeg_malloc (24);
        vinfo->info.status = 8;
        D.21216 = monoeg_g_strdup_printf ("Invalid ldftn with virtual function in method with stdarg 0 at  0x%04x", i);
        vinfo->info.message = D.21216;
        vinfo->exception_type = 4;
        D.20310 = ctx.list;
        D.21217 = monoeg_g_slist_prepend (D.20310, vinfo);
        ctx.list = D.21217;
      }
      ctx.verifiable = 0;
      D.20365 = ctx.level;
      D.20369 = D.20365 & 16;
      if (D.20369 != 0) goto <D.21218>; else goto <D.21219>;
      <D.21218>:
      ctx.valid = 0;
      <D.21219>:
      <D.21214>:
      <D.21212>:
      <D.21209>:
      D.20347 = ctx.code;
      D.20405 = (long unsigned int) i;
      D.21185 = D.20405 * 16;
      D.21186 = D.20347 + D.21185;
      D.21187 = D.21186->flags;
      D.21188 = (int) D.21187;
      D.21220 = D.21188 & 64;
      if (D.21220 != 0) goto <D.21221>; else goto <D.21222>;
      <D.21221>:
      D.21210 = ctx.has_this_store;
      if (D.21210 != 0) goto <D.21223>; else goto <D.21224>;
      <D.21223>:
      D.20363 = ctx.verifiable;
      if (D.20363 != 0) goto <D.21225>; else goto <D.21227>;
      <D.21227>:
      D.20365 = ctx.level;
      D.20366 = D.20365 & 128;
      if (D.20366 != 0) goto <D.21225>; else goto <D.21226>;
      <D.21225>:
      {
        struct MonoVerifyInfoExtended * vinfo;

        vinfo = monoeg_malloc (24);
        vinfo->info.status = 8;
        D.21228 = monoeg_g_strdup_printf ("Invalid call to a non-final virtual function in method with stdarg.0 or ldarga.0 at  0x%04x", i);
        vinfo->info.message = D.21228;
        vinfo->exception_type = 4;
        D.20310 = ctx.list;
        D.21229 = monoeg_g_slist_prepend (D.20310, vinfo);
        ctx.list = D.21229;
      }
      ctx.verifiable = 0;
      D.20365 = ctx.level;
      D.20369 = D.20365 & 16;
      if (D.20369 != 0) goto <D.21230>; else goto <D.21231>;
      <D.21230>:
      ctx.valid = 0;
      <D.21231>:
      <D.21226>:
      <D.21224>:
      <D.21222>:
      i = i + 1;
      <D.19898>:
      D.20452 = ctx.code_size;
      if (D.20452 > i) goto <D.21232>; else goto <D.19899>;
      <D.21232>:
      i.22 = (unsigned int) i;
      if (i.22 < ip_offset) goto <D.19897>; else goto <D.19899>;
      <D.19899>:
      D.21234 = ctx.method;
      D.21235 = mono_method_is_constructor (D.21234);
      if (D.21235 != 0) goto <D.21236>; else goto <D.21237>;
      <D.21236>:
      D.21238 = ctx.super_ctor_called;
      if (D.21238 == 0) goto <D.21239>; else goto <D.21240>;
      <D.21239>:
      D.21234 = ctx.method;
      D.21241 = D.21234->klass;
      D.21242 = BIT_FIELD_REF <*D.21241, 64, 256>;
      D.21243 = D.21242 & 1152921504606846976;
      if (D.21243 == 0) goto <D.21244>; else goto <D.21245>;
      <D.21244>:
      D.21234 = ctx.method;
      D.21241 = D.21234->klass;
      D.20763 = mono_defaults.object_class;
      if (D.21241 != D.20763) goto <D.21246>; else goto <D.21247>;
      <D.21246>:
      {
        char * method_name;
        char * type;

        D.21234 = ctx.method;
        method_name = mono_method_full_name (D.21234, 1);
        D.21234 = ctx.method;
        D.21241 = D.21234->klass;
        type = mono_type_get_full_name (D.21241);
        D.21234 = ctx.method;
        D.21241 = D.21234->klass;
        D.21250 = D.21241->parent;
        if (D.21250 != 0B) goto <D.21251>; else goto <D.21248>;
        <D.21251>:
        D.21234 = ctx.method;
        D.21241 = D.21234->klass;
        D.21250 = D.21241->parent;
        D.21252 = D.21250->exception_type;
        if (D.21252 != 0) goto <D.21253>; else goto <D.21248>;
        <D.21253>:
        D.20363 = ctx.verifiable;
        if (D.20363 != 0) goto <D.21254>; else goto <D.21256>;
        <D.21256>:
        D.20365 = ctx.level;
        D.20366 = D.20365 & 128;
        if (D.20366 != 0) goto <D.21254>; else goto <D.21255>;
        <D.21254>:
        {
          struct MonoVerifyInfoExtended * vinfo;

          vinfo = monoeg_malloc (24);
          vinfo->info.status = 8;
          D.21257 = monoeg_g_strdup_printf ("Constructor %s for type %s not calling base type ctor due to a TypeLoadException on base type.", method_name, type);
          vinfo->info.message = D.21257;
          vinfo->exception_type = 4;
          D.20310 = ctx.list;
          D.21258 = monoeg_g_slist_prepend (D.20310, vinfo);
          ctx.list = D.21258;
        }
        ctx.verifiable = 0;
        D.20365 = ctx.level;
        D.20369 = D.20365 & 16;
        if (D.20369 != 0) goto <D.21259>; else goto <D.21260>;
        <D.21259>:
        ctx.valid = 0;
        <D.21260>:
        <D.21255>:
        goto <D.21249>;
        <D.21248>:
        D.20363 = ctx.verifiable;
        if (D.20363 != 0) goto <D.21261>; else goto <D.21263>;
        <D.21263>:
        D.20365 = ctx.level;
        D.20366 = D.20365 & 128;
        if (D.20366 != 0) goto <D.21261>; else goto <D.21262>;
        <D.21261>:
        {
          struct MonoVerifyInfoExtended * vinfo;

          vinfo = monoeg_malloc (24);
          vinfo->info.status = 8;
          D.21264 = monoeg_g_strdup_printf ("Constructor %s for type %s not calling base type ctor.", method_name, type);
          vinfo->info.message = D.21264;
          vinfo->exception_type = 4;
          D.20310 = ctx.list;
          D.21265 = monoeg_g_slist_prepend (D.20310, vinfo);
          ctx.list = D.21265;
        }
        ctx.verifiable = 0;
        D.20365 = ctx.level;
        D.20369 = D.20365 & 16;
        if (D.20369 != 0) goto <D.21266>; else goto <D.21267>;
        <D.21266>:
        ctx.valid = 0;
        <D.21267>:
        <D.21262>:
        <D.21249>:
        monoeg_g_free (method_name);
        monoeg_g_free (type);
      }
      <D.21247>:
      <D.21245>:
      <D.21240>:
      <D.21237>:
      cleanup:
      D.20347 = ctx.code;
      if (D.20347 != 0B) goto <D.21268>; else goto <D.21269>;
      <D.21268>:
      i = 0;
      goto <D.19905>;
      <D.19904>:
      D.20347 = ctx.code;
      D.20405 = (long unsigned int) i;
      D.21185 = D.20405 * 16;
      D.21186 = D.20347 + D.21185;
      D.21270 = D.21186->stack;
      if (D.21270 != 0B) goto <D.21271>; else goto <D.21272>;
      <D.21271>:
      D.20347 = ctx.code;
      D.20405 = (long unsigned int) i;
      D.21185 = D.20405 * 16;
      D.21186 = D.20347 + D.21185;
      D.21270 = D.21186->stack;
      monoeg_g_free (D.21270);
      <D.21272>:
      i = i + 1;
      <D.19905>:
      D.20328 = ctx.header;
      D.20333 = D.20328->code_size;
      i.23 = (unsigned int) i;
      if (D.20333 > i.23) goto <D.19904>; else goto <D.19906>;
      <D.19906>:
      <D.21269>:
      tmp = ctx.funptrs;
      goto <D.19908>;
      <D.19907>:
      D.21274 = tmp->data;
      monoeg_g_free (D.21274);
      tmp = tmp->next;
      <D.19908>:
      if (tmp != 0B) goto <D.19907>; else goto <D.19909>;
      <D.19909>:
      D.21275 = ctx.funptrs;
      monoeg_g_slist_free (D.21275);
      tmp = ctx.exception_types;
      goto <D.19911>;
      <D.19910>:
      D.21274 = tmp->data;
      mono_metadata_free_type (D.21274);
      tmp = tmp->next;
      <D.19911>:
      if (tmp != 0B) goto <D.19910>; else goto <D.19912>;
      <D.19912>:
      D.21276 = ctx.exception_types;
      monoeg_g_slist_free (D.21276);
      i = 0;
      goto <D.19914>;
      <D.19913>:
      D.20404 = ctx.locals;
      D.20405 = (long unsigned int) i;
      D.20406 = D.20405 * 8;
      D.20407 = D.20404 + D.20406;
      D.20408 = *D.20407;
      if (D.20408 != 0B) goto <D.21277>; else goto <D.21278>;
      <D.21277>:
      D.20404 = ctx.locals;
      D.20405 = (long unsigned int) i;
      D.20406 = D.20405 * 8;
      D.20407 = D.20404 + D.20406;
      D.20408 = *D.20407;
      mono_metadata_free_type (D.20408);
      <D.21278>:
      i = i + 1;
      <D.19914>:
      D.20354 = ctx.num_locals;
      if (D.20354 > i) goto <D.19913>; else goto <D.19915>;
      <D.19915>:
      i = 0;
      goto <D.19917>;
      <D.19916>:
      D.20379 = ctx.params;
      D.20405 = (long unsigned int) i;
      D.20406 = D.20405 * 8;
      D.20420 = D.20379 + D.20406;
      D.20421 = *D.20420;
      if (D.20421 != 0B) goto <D.21279>; else goto <D.21280>;
      <D.21279>:
      D.20379 = ctx.params;
      D.20405 = (long unsigned int) i;
      D.20406 = D.20405 * 8;
      D.20420 = D.20379 + D.20406;
      D.20421 = *D.20420;
      mono_metadata_free_type (D.20421);
      <D.21280>:
      i = i + 1;
      <D.19917>:
      D.20372 = ctx.max_args;
      if (D.20372 > i) goto <D.19916>; else goto <D.19918>;
      <D.19918>:
      D.21281 = ctx.eval.stack;
      if (D.21281 != 0B) goto <D.21282>; else goto <D.21283>;
      <D.21282>:
      D.21281 = ctx.eval.stack;
      monoeg_g_free (D.21281);
      <D.21283>:
      D.20347 = ctx.code;
      if (D.20347 != 0B) goto <D.21284>; else goto <D.21285>;
      <D.21284>:
      D.20347 = ctx.code;
      monoeg_g_free (D.20347);
      <D.21285>:
      D.20404 = ctx.locals;
      monoeg_g_free (D.20404);
      D.20379 = ctx.params;
      monoeg_g_free (D.20379);
      mono_basic_block_free (original_bb);
      D.20328 = ctx.header;
      mono_metadata_free_mh (D.20328);
      D.20304 = ctx.list;
      return D.20304;
    }
  finally
    {
      error = {CLOBBER};
      ctx = {CLOBBER};
    }
}


__attribute__((__artificial__, __gnu_inline__, __always_inline__, __nothrow__, __leaf__))
memset (void * __dest, int __ch, size_t __len)
{
  void * D.21290;
  long unsigned int D.21291;

  D.21291 = __builtin_object_size (__dest, 0);
  D.21290 = __builtin___memset_chk (__dest, __ch, __len, D.21291);
  return D.21290;
}


__attribute__((__artificial__, __gnu_inline__, __always_inline__, __nothrow__, __leaf__))
memcpy (void * restrict __dest, const void * restrict __src, size_t __len)
{
  void * D.21293;
  long unsigned int D.21294;

  D.21294 = __builtin_object_size (__dest, 0);
  D.21293 = __builtin___memcpy_chk (__dest, __src, __len, D.21294);
  return D.21293;
}


stack_init (struct VerifyContext * ctx, struct ILCodeDesc * state)
{
  short unsigned int D.21296;
  int D.21297;
  int D.21298;
  short unsigned int D.21301;
  short unsigned int D.21302;

  D.21296 = state->flags;
  D.21297 = (int) D.21296;
  D.21298 = D.21297 & 4;
  if (D.21298 != 0) goto <D.21299>; else goto <D.21300>;
  <D.21299>:
  return;
  <D.21300>:
  state->max_size = 0;
  D.21301 = state->max_size;
  state->size = D.21301;
  D.21296 = state->flags;
  D.21302 = D.21296 | 4;
  state->flags = D.21302;
}


get_stack_type (struct MonoType * type)
{
  unsigned char D.21304;
  long unsigned int D.21305;
  long unsigned int D.21306;
  int D.21309;
  int D.21310;
  int mask;
  int type_kind;
  void handle_enum = <<< error >>>;

  mask = 0;
  D.21304 = type->type;
  type_kind = (int) D.21304;
  D.21305 = BIT_FIELD_REF <*type, 64, 64>;
  D.21306 = D.21305 & 8589934592;
  if (D.21306 != 0) goto <D.21307>; else goto <D.21308>;
  <D.21307>:
  mask = 256;
  <D.21308>:
  handle_enum:
  switch (type_kind) <default: <D.18527>, case 2: <D.18503>, case 3: <D.18506>, case 4: <D.18501>, case 5: <D.18502>, case 6: <D.18504>, case 7: <D.18505>, case 8: <D.18507>, case 9: <D.18508>, case 10: <D.18521>, case 11: <D.18522>, case 12: <D.18523>, case 13: <D.18524>, case 14: <D.18517>, case 15: <D.18512>, case 17: <D.18526>, case 18: <D.18516>, case 19: <D.18514>, case 20: <D.18520>, case 21: <D.18525>, case 22: <D.18513>, case 24: <D.18509>, case 25: <D.18510>, case 27: <D.18511>, case 28: <D.18518>, case 29: <D.18519>, case 30: <D.18515>>
  <D.18501>:
  <D.18502>:
  <D.18503>:
  <D.18504>:
  <D.18505>:
  <D.18506>:
  <D.18507>:
  <D.18508>:
  D.21309 = mask | 1;
  return D.21309;
  <D.18509>:
  <D.18510>:
  D.21309 = mask | 3;
  return D.21309;
  <D.18511>:
  <D.18512>:
  <D.18513>:
  D.21309 = mask | 5;
  return D.21309;
  <D.18514>:
  <D.18515>:
  <D.18516>:
  <D.18517>:
  <D.18518>:
  <D.18519>:
  <D.18520>:
  D.21309 = mask | 6;
  return D.21309;
  <D.18521>:
  <D.18522>:
  D.21309 = mask | 2;
  return D.21309;
  <D.18523>:
  <D.18524>:
  D.21309 = mask | 4;
  return D.21309;
  <D.18525>:
  <D.18526>:
  D.21310 = mono_type_is_enum_type (type);
  if (D.21310 != 0) goto <D.21311>; else goto <D.21312>;
  <D.21311>:
  type = mono_type_get_underlying_type_any (type);
  if (type == 0B) goto <D.21313>; else goto <D.21314>;
  <D.21313>:
  D.21309 = 0;
  return D.21309;
  <D.21314>:
  D.21304 = type->type;
  type_kind = (int) D.21304;
  goto handle_enum;
  <D.21312>:
  D.21309 = mask | 6;
  return D.21309;
  <D.18527>:
  D.21309 = 0;
  return D.21309;
}


mono_type_is_enum_type (struct MonoType * type)
{
  unsigned char D.21316;
  struct MonoClass * D.21319;
  long unsigned int D.21320;
  long unsigned int D.21321;
  gboolean D.21324;
  struct MonoGenericClass * D.21327;
  struct MonoClass * D.21328;
  long unsigned int D.21329;
  long unsigned int D.21330;

  D.21316 = type->type;
  if (D.21316 == 17) goto <D.21317>; else goto <D.21318>;
  <D.21317>:
  D.21319 = type->data.klass;
  D.21320 = BIT_FIELD_REF <*D.21319, 64, 256>;
  D.21321 = D.21320 & 576460752303423488;
  if (D.21321 != 0) goto <D.21322>; else goto <D.21323>;
  <D.21322>:
  D.21324 = 1;
  return D.21324;
  <D.21323>:
  <D.21318>:
  D.21316 = type->type;
  if (D.21316 == 21) goto <D.21325>; else goto <D.21326>;
  <D.21325>:
  D.21327 = type->data.generic_class;
  D.21328 = D.21327->container_class;
  D.21329 = BIT_FIELD_REF <*D.21328, 64, 256>;
  D.21330 = D.21329 & 576460752303423488;
  if (D.21330 != 0) goto <D.21331>; else goto <D.21332>;
  <D.21331>:
  D.21324 = 1;
  return D.21324;
  <D.21332>:
  <D.21326>:
  D.21324 = 0;
  return D.21324;
}


mono_type_get_underlying_type_any (struct MonoType * type)
{
  unsigned char D.21334;
  struct MonoClass * D.21337;
  long unsigned int D.21338;
  long unsigned int D.21339;
  struct MonoType * D.21342;
  struct MonoGenericClass * D.21345;
  struct MonoClass * D.21346;
  long unsigned int D.21347;
  long unsigned int D.21348;

  D.21334 = type->type;
  if (D.21334 == 17) goto <D.21335>; else goto <D.21336>;
  <D.21335>:
  D.21337 = type->data.klass;
  D.21338 = BIT_FIELD_REF <*D.21337, 64, 256>;
  D.21339 = D.21338 & 576460752303423488;
  if (D.21339 != 0) goto <D.21340>; else goto <D.21341>;
  <D.21340>:
  D.21337 = type->data.klass;
  D.21342 = mono_class_enum_basetype (D.21337);
  return D.21342;
  <D.21341>:
  <D.21336>:
  D.21334 = type->type;
  if (D.21334 == 21) goto <D.21343>; else goto <D.21344>;
  <D.21343>:
  D.21345 = type->data.generic_class;
  D.21346 = D.21345->container_class;
  D.21347 = BIT_FIELD_REF <*D.21346, 64, 256>;
  D.21348 = D.21347 & 576460752303423488;
  if (D.21348 != 0) goto <D.21349>; else goto <D.21350>;
  <D.21349>:
  D.21345 = type->data.generic_class;
  D.21346 = D.21345->container_class;
  D.21342 = mono_class_enum_basetype (D.21346);
  return D.21342;
  <D.21350>:
  <D.21344>:
  D.21342 = type;
  return D.21342;
}


verify_clause_relationship (struct VerifyContext * ctx, struct MonoExceptionClause * clause, struct MonoExceptionClause * to_test)
{
  unsigned int D.21352;
  unsigned int D.21355;
  unsigned int D.21356;
  int D.21357;
  gchar * D.21360;
  struct GSList * D.21361;
  struct GSList * D.21362;
  int D.21363;
  gchar * D.21366;
  struct GSList * D.21367;
  unsigned int D.21368;
  unsigned int D.21369;
  unsigned int D.21372;
  unsigned int D.21373;
  uint32_t iftmp.24;
  unsigned int D.21377;
  unsigned int D.21381;
  unsigned int D.21382;
  unsigned int D.21383;
  int D.21384;
  gchar * D.21387;
  struct GSList * D.21388;
  gchar * D.21392;
  struct GSList * D.21393;
  unsigned int D.21396;
  int D.21397;
  uint32_t iftmp.25;
  int D.21403;
  int D.21404;
  gchar * D.21407;
  struct GSList * D.21408;

  D.21352 = to_test->flags;
  if (D.21352 == 1) goto <D.21353>; else goto <D.21354>;
  <D.21353>:
  D.21355 = to_test->data.filter_offset;
  D.21356 = to_test->handler_offset;
  D.21357 = is_clause_inside_range (clause, D.21355, D.21356);
  if (D.21357 != 0) goto <D.21358>; else goto <D.21359>;
  <D.21358>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (24);
    vinfo->info.status = 1;
    D.21360 = monoeg_g_strdup_printf ("Exception clause inside filter");
    vinfo->info.message = D.21360;
    vinfo->exception_type = 3;
    D.21361 = ctx->list;
    D.21362 = monoeg_g_slist_prepend (D.21361, vinfo);
    ctx->list = D.21362;
  }
  ctx->valid = 0;
  return;
  <D.21359>:
  <D.21354>:
  D.21363 = is_clause_nested (clause, to_test);
  if (D.21363 != 0) goto <D.21364>; else goto <D.21365>;
  <D.21364>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (24);
    vinfo->info.status = 1;
    D.21366 = monoeg_g_strdup_printf ("Nested exception clause appears after enclosing clause");
    vinfo->info.message = D.21366;
    vinfo->exception_type = 3;
    D.21361 = ctx->list;
    D.21367 = monoeg_g_slist_prepend (D.21361, vinfo);
    ctx->list = D.21367;
  }
  ctx->valid = 0;
  return;
  <D.21365>:
  D.21368 = clause->try_offset;
  D.21369 = to_test->try_offset;
  if (D.21368 == D.21369) goto <D.21370>; else goto <D.21371>;
  <D.21370>:
  D.21372 = clause->try_len;
  D.21373 = to_test->try_len;
  if (D.21372 == D.21373) goto <D.21374>; else goto <D.21375>;
  <D.21374>:
  D.21377 = clause->flags;
  if (D.21377 == 1) goto <D.21378>; else goto <D.21379>;
  <D.21378>:
  iftmp.24 = clause->data.filter_offset;
  goto <D.21380>;
  <D.21379>:
  iftmp.24 = clause->handler_offset;
  <D.21380>:
  D.21381 = clause->handler_offset;
  D.21382 = clause->handler_len;
  D.21383 = D.21381 + D.21382;
  D.21384 = is_clause_in_range (to_test, iftmp.24, D.21383);
  if (D.21384 != 0) goto <D.21385>; else goto <D.21386>;
  <D.21385>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (24);
    vinfo->info.status = 1;
    D.21387 = monoeg_g_strdup_printf ("Exception handlers overlap");
    vinfo->info.message = D.21387;
    vinfo->exception_type = 3;
    D.21361 = ctx->list;
    D.21388 = monoeg_g_slist_prepend (D.21361, vinfo);
    ctx->list = D.21388;
  }
  ctx->valid = 0;
  return;
  <D.21386>:
  D.21377 = clause->flags;
  if (D.21377 > 1) goto <D.21389>; else goto <D.21391>;
  <D.21391>:
  D.21352 = to_test->flags;
  if (D.21352 > 1) goto <D.21389>; else goto <D.21390>;
  <D.21389>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (24);
    vinfo->info.status = 1;
    D.21392 = monoeg_g_strdup_printf ("Exception clauses with shared protected block are neither catch or filter");
    vinfo->info.message = D.21392;
    vinfo->exception_type = 3;
    D.21361 = ctx->list;
    D.21393 = monoeg_g_slist_prepend (D.21361, vinfo);
    ctx->list = D.21393;
  }
  ctx->valid = 0;
  return;
  <D.21390>:
  return;
  <D.21375>:
  <D.21371>:
  D.21368 = clause->try_offset;
  D.21368 = clause->try_offset;
  D.21372 = clause->try_len;
  D.21396 = D.21368 + D.21372;
  D.21397 = is_clause_in_range (to_test, D.21368, D.21396);
  if (D.21397 != 0) goto <D.21394>; else goto <D.21398>;
  <D.21398>:
  D.21377 = clause->flags;
  if (D.21377 == 1) goto <D.21400>; else goto <D.21401>;
  <D.21400>:
  iftmp.25 = clause->data.filter_offset;
  goto <D.21402>;
  <D.21401>:
  iftmp.25 = clause->handler_offset;
  <D.21402>:
  D.21381 = clause->handler_offset;
  D.21382 = clause->handler_len;
  D.21383 = D.21381 + D.21382;
  D.21403 = is_clause_in_range (to_test, iftmp.25, D.21383);
  if (D.21403 != 0) goto <D.21394>; else goto <D.21395>;
  <D.21394>:
  D.21404 = is_clause_nested (to_test, clause);
  if (D.21404 == 0) goto <D.21405>; else goto <D.21406>;
  <D.21405>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (24);
    vinfo->info.status = 1;
    D.21407 = monoeg_g_strdup_printf ("Exception clauses overlap");
    vinfo->info.message = D.21407;
    vinfo->exception_type = 3;
    D.21361 = ctx->list;
    D.21408 = monoeg_g_slist_prepend (D.21361, vinfo);
    ctx->list = D.21408;
  }
  ctx->valid = 0;
  <D.21406>:
  <D.21395>:
}


is_clause_inside_range (struct MonoExceptionClause * clause, guint32 start, guint32 end)
{
  unsigned int D.21412;
  unsigned int D.21414;
  unsigned int D.21415;
  gboolean D.21416;
  uint32_t iftmp.26;
  unsigned int D.21420;
  unsigned int D.21425;
  unsigned int D.21426;
  unsigned int D.21427;

  D.21412 = clause->try_offset;
  if (D.21412 < start) goto <D.21410>; else goto <D.21413>;
  <D.21413>:
  D.21412 = clause->try_offset;
  D.21414 = clause->try_len;
  D.21415 = D.21412 + D.21414;
  if (D.21415 > end) goto <D.21410>; else goto <D.21411>;
  <D.21410>:
  D.21416 = 0;
  return D.21416;
  <D.21411>:
  D.21420 = clause->flags;
  if (D.21420 == 1) goto <D.21421>; else goto <D.21422>;
  <D.21421>:
  iftmp.26 = clause->data.filter_offset;
  goto <D.21423>;
  <D.21422>:
  iftmp.26 = clause->handler_offset;
  <D.21423>:
  if (iftmp.26 < start) goto <D.21417>; else goto <D.21424>;
  <D.21424>:
  D.21425 = clause->handler_offset;
  D.21426 = clause->handler_len;
  D.21427 = D.21425 + D.21426;
  if (D.21427 > end) goto <D.21417>; else goto <D.21418>;
  <D.21417>:
  D.21416 = 0;
  return D.21416;
  <D.21418>:
  D.21416 = 1;
  return D.21416;
}


is_clause_in_range (struct MonoExceptionClause * clause, guint32 start, guint32 end)
{
  unsigned int D.21429;
  gboolean D.21434;
  uint32_t iftmp.27;
  unsigned int D.21436;
  uint32_t iftmp.28;

  D.21429 = clause->try_offset;
  if (D.21429 >= start) goto <D.21430>; else goto <D.21431>;
  <D.21430>:
  D.21429 = clause->try_offset;
  if (D.21429 < end) goto <D.21432>; else goto <D.21433>;
  <D.21432>:
  D.21434 = 1;
  return D.21434;
  <D.21433>:
  <D.21431>:
  D.21436 = clause->flags;
  if (D.21436 == 1) goto <D.21437>; else goto <D.21438>;
  <D.21437>:
  iftmp.27 = clause->data.filter_offset;
  goto <D.21439>;
  <D.21438>:
  iftmp.27 = clause->handler_offset;
  <D.21439>:
  if (iftmp.27 >= start) goto <D.21440>; else goto <D.21441>;
  <D.21440>:
  D.21436 = clause->flags;
  if (D.21436 == 1) goto <D.21443>; else goto <D.21444>;
  <D.21443>:
  iftmp.28 = clause->data.filter_offset;
  goto <D.21445>;
  <D.21444>:
  iftmp.28 = clause->handler_offset;
  <D.21445>:
  if (iftmp.28 < end) goto <D.21446>; else goto <D.21447>;
  <D.21446>:
  D.21434 = 1;
  return D.21434;
  <D.21447>:
  <D.21441>:
  D.21434 = 0;
  return D.21434;
}


is_clause_nested (struct MonoExceptionClause * clause, struct MonoExceptionClause * nested)
{
  unsigned int D.21449;
  unsigned int D.21452;
  unsigned int D.21453;
  int D.21454;
  gboolean D.21457;
  int iftmp.29;
  unsigned int D.21462;
  unsigned int D.21463;
  unsigned int D.21464;
  int D.21465;
  unsigned int D.21467;
  unsigned int D.21468;
  int D.21469;

  D.21449 = clause->flags;
  if (D.21449 == 1) goto <D.21450>; else goto <D.21451>;
  <D.21450>:
  D.21452 = clause->data.filter_offset;
  D.21453 = clause->handler_offset;
  D.21454 = is_clause_inside_range (nested, D.21452, D.21453);
  if (D.21454 != 0) goto <D.21455>; else goto <D.21456>;
  <D.21455>:
  D.21457 = 1;
  return D.21457;
  <D.21456>:
  <D.21451>:
  D.21462 = clause->try_offset;
  D.21462 = clause->try_offset;
  D.21463 = clause->try_len;
  D.21464 = D.21462 + D.21463;
  D.21465 = is_clause_inside_range (nested, D.21462, D.21464);
  if (D.21465 != 0) goto <D.21459>; else goto <D.21466>;
  <D.21466>:
  D.21453 = clause->handler_offset;
  D.21453 = clause->handler_offset;
  D.21467 = clause->handler_len;
  D.21468 = D.21453 + D.21467;
  D.21469 = is_clause_inside_range (nested, D.21453, D.21468);
  if (D.21469 != 0) goto <D.21459>; else goto <D.21460>;
  <D.21459>:
  iftmp.29 = 1;
  goto <D.21461>;
  <D.21460>:
  iftmp.29 = 0;
  <D.21461>:
  D.21457 = iftmp.29;
  return D.21457;
}


mono_type_is_valid_in_context (struct VerifyContext * ctx, struct MonoType * type)
{
  unsigned int D.21473;
  gchar * D.21474;
  struct GSList * D.21475;
  struct GSList * D.21476;
  gboolean D.21477;
  int D.21478;
  const char * iftmp.30;
  char D.21482;
  const char * iftmp.31;
  unsigned char D.21486;
  const char * iftmp.32;
  gchar * D.21495;
  struct GSList * D.21496;
  struct MonoLoaderError * D.21499;
  unsigned char D.21501;
  struct MonoGenericClass * D.21504;
  int D.21506;
  const char * D.21508;
  const char * D.21509;
  gchar * D.21510;
  struct GSList * D.21511;
  gchar * D.21512;
  struct GSList * D.21513;
  struct MonoClass * D.21516;
  unsigned char D.21517;
  gchar * D.21520;
  struct GSList * D.21521;
  int D.21524;
  gchar * D.21527;
  struct GSList * D.21528;
  int D.21529;
  gchar * D.21532;
  struct GSList * D.21533;
  struct MonoClass * klass;

  if (type == 0B) goto <D.21471>; else goto <D.21472>;
  <D.21471>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (24);
    vinfo->info.status = 1;
    D.21473 = ctx->ip_offset;
    D.21474 = monoeg_g_strdup_printf ("Invalid null type at 0x%04x", D.21473);
    vinfo->info.message = D.21474;
    vinfo->exception_type = 12;
    D.21475 = ctx->list;
    D.21476 = monoeg_g_slist_prepend (D.21475, vinfo);
    ctx->list = D.21476;
  }
  ctx->valid = 0;
  D.21477 = 0;
  return D.21477;
  <D.21472>:
  D.21478 = is_valid_type_in_context (ctx, type);
  if (D.21478 == 0) goto <D.21479>; else goto <D.21480>;
  <D.21479>:
  {
    char * str;

    str = mono_type_full_name (type);
    {
      struct MonoVerifyInfoExtended * vinfo;

      vinfo = monoeg_malloc (24);
      vinfo->info.status = 1;
      D.21482 = *str;
      if (D.21482 != 33) goto <D.21483>; else goto <D.21484>;
      <D.21483>:
      D.21486 = type->type;
      if (D.21486 == 19) goto <D.21487>; else goto <D.21488>;
      <D.21487>:
      iftmp.31 = "!";
      goto <D.21489>;
      <D.21488>:
      iftmp.31 = "!!";
      <D.21489>:
      iftmp.30 = iftmp.31;
      goto <D.21490>;
      <D.21484>:
      iftmp.30 = "";
      <D.21490>:
      D.21486 = type->type;
      if (D.21486 == 19) goto <D.21492>; else goto <D.21493>;
      <D.21492>:
      iftmp.32 = "class";
      goto <D.21494>;
      <D.21493>:
      iftmp.32 = "method";
      <D.21494>:
      D.21473 = ctx->ip_offset;
      D.21495 = monoeg_g_strdup_printf ("Invalid generic type (%s%s) (argument out of range or %s is not generic) at 0x%04x", iftmp.30, str, iftmp.32, D.21473);
      vinfo->info.message = D.21495;
      vinfo->exception_type = 12;
      D.21475 = ctx->list;
      D.21496 = monoeg_g_slist_prepend (D.21475, vinfo);
      ctx->list = D.21496;
    }
    ctx->valid = 0;
    monoeg_g_free (str);
    D.21477 = 0;
    return D.21477;
  }
  <D.21480>:
  klass = mono_class_from_mono_type (type);
  mono_class_init (klass);
  D.21499 = mono_loader_get_last_error ();
  if (D.21499 != 0B) goto <D.21497>; else goto <D.21500>;
  <D.21500>:
  D.21501 = klass->exception_type;
  if (D.21501 != 0) goto <D.21497>; else goto <D.21498>;
  <D.21497>:
  D.21504 = klass->generic_class;
  if (D.21504 != 0B) goto <D.21505>; else goto <D.21502>;
  <D.21505>:
  D.21506 = mono_class_is_valid_generic_instantiation (0B, klass);
  if (D.21506 == 0) goto <D.21507>; else goto <D.21502>;
  <D.21507>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (24);
    vinfo->info.status = 1;
    D.21508 = klass->name_space;
    D.21509 = klass->name;
    D.21473 = ctx->ip_offset;
    D.21510 = monoeg_g_strdup_printf ("Invalid generic instantiation of type %s.%s at 0x%04x", D.21508, D.21509, D.21473);
    vinfo->info.message = D.21510;
    vinfo->exception_type = 7;
    D.21475 = ctx->list;
    D.21511 = monoeg_g_slist_prepend (D.21475, vinfo);
    ctx->list = D.21511;
  }
  ctx->valid = 0;
  goto <D.21503>;
  <D.21502>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (24);
    vinfo->info.status = 1;
    D.21508 = klass->name_space;
    D.21509 = klass->name;
    D.21473 = ctx->ip_offset;
    D.21512 = monoeg_g_strdup_printf ("Could not load type %s.%s at 0x%04x", D.21508, D.21509, D.21473);
    vinfo->info.message = D.21512;
    vinfo->exception_type = 7;
    D.21475 = ctx->list;
    D.21513 = monoeg_g_slist_prepend (D.21475, vinfo);
    ctx->list = D.21513;
  }
  ctx->valid = 0;
  <D.21503>:
  mono_loader_clear_error ();
  D.21477 = 0;
  return D.21477;
  <D.21498>:
  D.21504 = klass->generic_class;
  if (D.21504 != 0B) goto <D.21514>; else goto <D.21515>;
  <D.21514>:
  D.21504 = klass->generic_class;
  D.21516 = D.21504->container_class;
  D.21517 = D.21516->exception_type;
  if (D.21517 != 0) goto <D.21518>; else goto <D.21519>;
  <D.21518>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (24);
    vinfo->info.status = 1;
    D.21508 = klass->name_space;
    D.21509 = klass->name;
    D.21473 = ctx->ip_offset;
    D.21520 = monoeg_g_strdup_printf ("Could not load type %s.%s at 0x%04x", D.21508, D.21509, D.21473);
    vinfo->info.message = D.21520;
    vinfo->exception_type = 7;
    D.21475 = ctx->list;
    D.21521 = monoeg_g_slist_prepend (D.21475, vinfo);
    ctx->list = D.21521;
  }
  ctx->valid = 0;
  D.21477 = 0;
  return D.21477;
  <D.21519>:
  <D.21515>:
  D.21504 = klass->generic_class;
  if (D.21504 == 0B) goto <D.21522>; else goto <D.21523>;
  <D.21522>:
  D.21477 = 1;
  return D.21477;
  <D.21523>:
  D.21524 = mono_class_is_valid_generic_instantiation (ctx, klass);
  if (D.21524 == 0) goto <D.21525>; else goto <D.21526>;
  <D.21525>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (24);
    vinfo->info.status = 1;
    D.21508 = klass->name_space;
    D.21509 = klass->name;
    D.21473 = ctx->ip_offset;
    D.21527 = monoeg_g_strdup_printf ("Invalid generic type instantiation of type %s.%s at 0x%04x", D.21508, D.21509, D.21473);
    vinfo->info.message = D.21527;
    vinfo->exception_type = 7;
    D.21475 = ctx->list;
    D.21528 = monoeg_g_slist_prepend (D.21475, vinfo);
    ctx->list = D.21528;
  }
  ctx->valid = 0;
  D.21477 = 0;
  return D.21477;
  <D.21526>:
  D.21529 = mono_class_repect_method_constraints (ctx, klass);
  if (D.21529 == 0) goto <D.21530>; else goto <D.21531>;
  <D.21530>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (24);
    vinfo->info.status = 1;
    D.21508 = klass->name_space;
    D.21509 = klass->name;
    D.21473 = ctx->ip_offset;
    D.21532 = monoeg_g_strdup_printf ("Invalid generic type instantiation of type %s.%s (generic args don\'t respect target\'s constraints) at 0x%04x", D.21508, D.21509, D.21473);
    vinfo->info.message = D.21532;
    vinfo->exception_type = 7;
    D.21475 = ctx->list;
    D.21533 = monoeg_g_slist_prepend (D.21475, vinfo);
    ctx->list = D.21533;
  }
  ctx->valid = 0;
  D.21477 = 0;
  return D.21477;
  <D.21531>:
  D.21477 = 1;
  return D.21477;
}


is_valid_type_in_context (struct VerifyContext * ctx, struct MonoType * type)
{
  gboolean D.21535;
  struct MonoGenericContext * D.21536;

  D.21536 = ctx->generic_context;
  D.21535 = mono_type_is_valid_type_in_context (type, D.21536);
  return D.21535;
}


mono_type_is_valid_type_in_context (struct MonoType * type, struct MonoGenericContext * context)
{
  gboolean D.21538;

  D.21538 = mono_type_is_valid_type_in_context_full (type, context, 0);
  return D.21538;
}


mono_type_is_valid_type_in_context_full (struct MonoType * type, struct MonoGenericContext * context, gboolean check_gtd)
{
  unsigned char D.21540;
  int D.21541;
  gboolean D.21544;
  struct MonoGenericInst * iftmp.33;
  struct MonoGenericParam * D.21552;
  short unsigned int D.21553;
  int D.21554;
  <unnamed-unsigned:22> D.21555;
  int D.21556;
  struct MonoClass * D.21557;
  struct MonoType * D.21558;
  struct MonoArrayType * D.21559;
  struct MonoClass * D.21560;
  struct MonoType * D.21561;
  struct MonoType * D.21562;
  struct MonoGenericClass * D.21563;
  long unsigned int D.21564;
  long unsigned int D.21565;
  struct MonoType * D.21567;
  int D.21568;
  unsigned char D.21571;
  struct MonoType * D.21574;
  struct MonoGenericContainer * D.21577;
  int i;
  struct MonoGenericInst * inst;

  D.21540 = type->type;
  D.21541 = (int) D.21540;
  switch (D.21541) <default: <D.21580>, case 15: <D.18064>, case 17: <D.18070>, case 18: <D.18069>, case 19: <D.18059>, case 20: <D.18063>, case 21: <D.18065>, case 29: <D.18062>, case 30: <D.18060>>
  <D.18059>:
  <D.18060>:
  if (context == 0B) goto <D.21542>; else goto <D.21543>;
  <D.21542>:
  D.21544 = 0;
  return D.21544;
  <D.21543>:
  D.21540 = type->type;
  if (D.21540 == 19) goto <D.21546>; else goto <D.21547>;
  <D.21546>:
  iftmp.33 = context->class_inst;
  goto <D.21548>;
  <D.21547>:
  iftmp.33 = context->method_inst;
  <D.21548>:
  inst = iftmp.33;
  if (inst == 0B) goto <D.21549>; else goto <D.21551>;
  <D.21551>:
  D.21552 = type->data.generic_param;
  D.21553 = D.21552->num;
  D.21554 = (int) D.21553;
  D.21555 = inst->type_argc;
  D.21556 = (int) D.21555;
  if (D.21554 >= D.21556) goto <D.21549>; else goto <D.21550>;
  <D.21549>:
  D.21544 = 0;
  return D.21544;
  <D.21550>:
  goto <D.18061>;
  <D.18062>:
  D.21557 = type->data.klass;
  D.21558 = &D.21557->byval_arg;
  D.21544 = mono_type_is_valid_type_in_context_full (D.21558, context, check_gtd);
  return D.21544;
  <D.18063>:
  D.21559 = type->data.array;
  D.21560 = D.21559->eklass;
  D.21561 = &D.21560->byval_arg;
  D.21544 = mono_type_is_valid_type_in_context_full (D.21561, context, check_gtd);
  return D.21544;
  <D.18064>:
  D.21562 = type->data.type;
  D.21544 = mono_type_is_valid_type_in_context_full (D.21562, context, check_gtd);
  return D.21544;
  <D.18065>:
  D.21563 = type->data.generic_class;
  inst = D.21563->context.class_inst;
  D.21564 = BIT_FIELD_REF <*inst, 64, 0>;
  D.21565 = D.21564 & 512;
  if (D.21565 == 0) goto <D.18061>; else goto <D.21566>;
  <D.21566>:
  i = 0;
  goto <D.18067>;
  <D.18066>:
  D.21567 = inst->type_argv[i];
  D.21568 = mono_type_is_valid_type_in_context_full (D.21567, context, check_gtd);
  if (D.21568 == 0) goto <D.21569>; else goto <D.21570>;
  <D.21569>:
  D.21544 = 0;
  return D.21544;
  <D.21570>:
  i = i + 1;
  <D.18067>:
  D.21555 = inst->type_argc;
  D.21556 = (int) D.21555;
  if (D.21556 > i) goto <D.18066>; else goto <D.18068>;
  <D.18068>:
  goto <D.18061>;
  <D.18069>:
  <D.18070>:
  {
    struct MonoClass * klass;

    klass = type->data.klass;
    D.21571 = klass->byval_arg.type;
    D.21540 = type->type;
    if (D.21571 != D.21540) goto <D.21572>; else goto <D.21573>;
    <D.21572>:
    D.21574 = &klass->byval_arg;
    D.21544 = mono_type_is_valid_type_in_context_full (D.21574, context, check_gtd);
    return D.21544;
    <D.21573>:
    if (check_gtd != 0) goto <D.21575>; else goto <D.21576>;
    <D.21575>:
    D.21577 = klass->generic_container;
    if (D.21577 != 0B) goto <D.21578>; else goto <D.21579>;
    <D.21578>:
    D.21544 = 0;
    return D.21544;
    <D.21579>:
    <D.21576>:
    goto <D.18061>;
  }
  <D.21580>:
  <D.18061>:
  D.21544 = 1;
  return D.21544;
}


mono_class_is_valid_generic_instantiation (struct VerifyContext * ctx, struct MonoClass * klass)
{
  struct MonoClass * D.21582;
  int D.21585;
  gboolean D.21588;
  struct MonoGenericContext * D.21589;
  struct MonoGenericClass * gklass;
  struct MonoGenericInst * ginst;
  struct MonoGenericContainer * gc;

  gklass = klass->generic_class;
  ginst = gklass->context.class_inst;
  D.21582 = gklass->container_class;
  gc = D.21582->generic_container;
  if (ctx != 0B) goto <D.21583>; else goto <D.21584>;
  <D.21583>:
  D.21585 = is_valid_generic_instantiation_in_context (ctx, ginst, 1);
  if (D.21585 == 0) goto <D.21586>; else goto <D.21587>;
  <D.21586>:
  D.21588 = 0;
  return D.21588;
  <D.21587>:
  <D.21584>:
  D.21589 = &gklass->context;
  D.21588 = is_valid_generic_instantiation (gc, D.21589, ginst);
  return D.21588;
}


is_valid_generic_instantiation_in_context (struct VerifyContext * ctx, struct MonoGenericInst * ginst, gboolean check_gtd)
{
  struct MonoGenericContext * D.21591;
  int D.21592;
  gboolean D.21595;
  <unnamed-unsigned:22> D.21596;
  int D.21597;
  int i;

  i = 0;
  goto <D.18155>;
  <D.18154>:
  {
    struct MonoType * type;

    type = ginst->type_argv[i];
    D.21591 = ctx->generic_context;
    D.21592 = mono_type_is_valid_type_in_context_full (type, D.21591, 1);
    if (D.21592 == 0) goto <D.21593>; else goto <D.21594>;
    <D.21593>:
    D.21595 = 0;
    return D.21595;
    <D.21594>:
  }
  i = i + 1;
  <D.18155>:
  D.21596 = ginst->type_argc;
  D.21597 = (int) D.21596;
  if (D.21597 > i) goto <D.18154>; else goto <D.18156>;
  <D.18156>:
  D.21595 = 1;
  return D.21595;
}


is_valid_generic_instantiation (struct MonoGenericContainer * gc, struct MonoGenericContext * context, struct MonoGenericInst * ginst)
{
  <unnamed-unsigned:22> D.21599;
  int D.21600;
  <unnamed-signed:31> D.21601;
  int D.21602;
  gboolean D.21605;
  struct MonoGenericParamFull * D.21606;
  long unsigned int D.21607;
  long unsigned int D.21608;
  struct MonoGenericParamFull * D.21609;
  int D.21610;
  struct MonoGenericContainer * D.21613;
  unsigned char D.21616;
  long unsigned int D.21619;
  long unsigned int D.21620;
  struct MonoGenericClass * D.21623;
  long unsigned int D.21626;
  long unsigned int D.21627;
  int D.21630;
  struct MonoClass * * D.21633;
  short unsigned int D.21636;
  int D.21637;
  int D.21638;
  int D.21643;
  long unsigned int D.21646;
  int D.21648;
  int D.21649;
  int D.21654;
  int D.21659;
  struct MonoType * D.21664;
  int D.21665;
  int D.21668;
  struct MonoClass * D.21671;
  struct MonoError error;
  int i;

  try
    {
      D.21599 = ginst->type_argc;
      D.21600 = (int) D.21599;
      D.21601 = gc->type_argc;
      D.21602 = (int) D.21601;
      if (D.21600 != D.21602) goto <D.21603>; else goto <D.21604>;
      <D.21603>:
      D.21605 = 0;
      return D.21605;
      <D.21604>:
      i = 0;
      goto <D.18101>;
      <D.18100>:
      {
        struct MonoGenericParamInfo * param_info;
        struct MonoClass * paramClass;
        struct MonoClass * * constraints;
        struct MonoType * param_type;

        D.21606 = gc->type_params;
        D.21607 = (long unsigned int) i;
        D.21608 = D.21607 * 56;
        D.21609 = D.21606 + D.21608;
        param_info = &D.21609->info;
        param_type = ginst->type_argv[i];
        D.21610 = mono_type_is_generic_argument (param_type);
        if (D.21610 != 0) goto <D.21611>; else goto <D.21612>;
        <D.21611>:
        // predicted unlikely by continue predictor.
        goto <D.18094>;
        <D.21612>:
        paramClass = mono_class_from_mono_type (param_type);
        D.21613 = paramClass->generic_container;
        if (D.21613 != 0B) goto <D.21614>; else goto <D.21615>;
        <D.21614>:
        D.21616 = param_type->type;
        if (D.21616 != 21) goto <D.21617>; else goto <D.21618>;
        <D.21617>:
        D.21619 = BIT_FIELD_REF <*ginst, 64, 0>;
        D.21620 = D.21619 & 512;
        if (D.21620 == 0) goto <D.21621>; else goto <D.21622>;
        <D.21621>:
        D.21605 = 0;
        return D.21605;
        <D.21622>:
        <D.21618>:
        <D.21615>:
        D.21623 = paramClass->generic_class;
        if (D.21623 != 0B) goto <D.21624>; else goto <D.21625>;
        <D.21624>:
        D.21626 = BIT_FIELD_REF <*paramClass, 64, 256>;
        D.21627 = D.21626 & 9223372036854775808;
        if (D.21627 == 0) goto <D.21628>; else goto <D.21629>;
        <D.21628>:
        D.21630 = mono_class_is_valid_generic_instantiation (0B, paramClass);
        if (D.21630 == 0) goto <D.21631>; else goto <D.21632>;
        <D.21631>:
        D.21605 = 0;
        return D.21605;
        <D.21632>:
        <D.21629>:
        <D.21625>:
        D.21633 = param_info->constraints;
        if (D.21633 == 0B) goto <D.21634>; else goto <D.21635>;
        <D.21634>:
        D.21636 = param_info->flags;
        D.21637 = (int) D.21636;
        D.21638 = D.21637 & 28;
        if (D.21638 == 0) goto <D.21639>; else goto <D.21640>;
        <D.21639>:
        // predicted unlikely by continue predictor.
        goto <D.18094>;
        <D.21640>:
        <D.21635>:
        D.21636 = param_info->flags;
        D.21637 = (int) D.21636;
        D.21643 = D.21637 & 8;
        if (D.21643 != 0) goto <D.21644>; else goto <D.21645>;
        <D.21644>:
        D.21626 = BIT_FIELD_REF <*paramClass, 64, 256>;
        D.21646 = D.21626 & 1152921504606846976;
        if (D.21646 == 0) goto <D.21641>; else goto <D.21647>;
        <D.21647>:
        D.21648 = mono_class_is_nullable (paramClass);
        if (D.21648 != 0) goto <D.21641>; else goto <D.21642>;
        <D.21641>:
        D.21605 = 0;
        return D.21605;
        <D.21642>:
        <D.21645>:
        D.21636 = param_info->flags;
        D.21637 = (int) D.21636;
        D.21649 = D.21637 & 4;
        if (D.21649 != 0) goto <D.21650>; else goto <D.21651>;
        <D.21650>:
        D.21626 = BIT_FIELD_REF <*paramClass, 64, 256>;
        D.21646 = D.21626 & 1152921504606846976;
        if (D.21646 != 0) goto <D.21652>; else goto <D.21653>;
        <D.21652>:
        D.21605 = 0;
        return D.21605;
        <D.21653>:
        <D.21651>:
        D.21636 = param_info->flags;
        D.21637 = (int) D.21636;
        D.21654 = D.21637 & 16;
        if (D.21654 != 0) goto <D.21655>; else goto <D.21656>;
        <D.21655>:
        D.21626 = BIT_FIELD_REF <*paramClass, 64, 256>;
        D.21646 = D.21626 & 1152921504606846976;
        if (D.21646 == 0) goto <D.21657>; else goto <D.21658>;
        <D.21657>:
        D.21659 = mono_class_has_default_constructor (paramClass);
        if (D.21659 == 0) goto <D.21660>; else goto <D.21661>;
        <D.21660>:
        D.21605 = 0;
        return D.21605;
        <D.21661>:
        <D.21658>:
        <D.21656>:
        D.21633 = param_info->constraints;
        if (D.21633 == 0B) goto <D.21662>; else goto <D.21663>;
        <D.21662>:
        // predicted unlikely by continue predictor.
        goto <D.18094>;
        <D.21663>:
        constraints = param_info->constraints;
        goto <D.18098>;
        <D.18097>:
        {
          struct MonoClass * ctr;
          struct MonoType * inflated;

          ctr = *constraints;
          D.21664 = &ctr->byval_arg;
          inflated = mono_class_inflate_generic_type_checked (D.21664, context, &error);
          D.21665 = mono_error_ok (&error);
          if (D.21665 == 0) goto <D.21666>; else goto <D.21667>;
          <D.21666>:
          mono_error_cleanup (&error);
          D.21605 = 0;
          return D.21605;
          <D.21667>:
          ctr = mono_class_from_mono_type (inflated);
          mono_metadata_free_type (inflated);
          D.21668 = mono_class_is_assignable_from_slow (ctr, paramClass);
          if (D.21668 == 0) goto <D.21669>; else goto <D.21670>;
          <D.21669>:
          D.21605 = 0;
          return D.21605;
          <D.21670>:
        }
        constraints = constraints + 8;
        <D.18098>:
        D.21671 = *constraints;
        if (D.21671 != 0B) goto <D.18097>; else goto <D.18099>;
        <D.18099>:
      }
      <D.18094>:
      i = i + 1;
      <D.18101>:
      D.21601 = gc->type_argc;
      D.21602 = (int) D.21601;
      if (D.21602 > i) goto <D.18100>; else goto <D.18102>;
      <D.18102>:
      D.21605 = 1;
      return D.21605;
    }
  finally
    {
      error = {CLOBBER};
    }
}


mono_type_is_generic_argument (struct MonoType * type)
{
  gboolean D.21674;
  int iftmp.34;
  unsigned char D.21679;

  D.21679 = type->type;
  if (D.21679 == 19) goto <D.21676>; else goto <D.21680>;
  <D.21680>:
  D.21679 = type->type;
  if (D.21679 == 30) goto <D.21676>; else goto <D.21677>;
  <D.21676>:
  iftmp.34 = 1;
  goto <D.21678>;
  <D.21677>:
  iftmp.34 = 0;
  <D.21678>:
  D.21674 = iftmp.34;
  return D.21674;
}


mono_class_has_default_constructor (struct MonoClass * klass)
{
  unsigned char D.21682;
  gboolean D.21685;
  struct MonoMethod * * D.21686;
  long unsigned int D.21687;
  long unsigned int D.21688;
  struct MonoMethod * * D.21689;
  int D.21690;
  struct MonoMethodSignature * D.21693;
  struct MonoMethodSignature * D.21696;
  short unsigned int D.21697;
  short unsigned int D.21700;
  int D.21701;
  int D.21702;
  unsigned int D.21705;
  unsigned int i.35;
  struct MonoMethod * method;
  int i;

  mono_class_setup_methods (klass);
  D.21682 = klass->exception_type;
  if (D.21682 != 0) goto <D.21683>; else goto <D.21684>;
  <D.21683>:
  D.21685 = 0;
  return D.21685;
  <D.21684>:
  i = 0;
  goto <D.18050>;
  <D.18049>:
  D.21686 = klass->methods;
  D.21687 = (long unsigned int) i;
  D.21688 = D.21687 * 8;
  D.21689 = D.21686 + D.21688;
  method = *D.21689;
  D.21690 = mono_method_is_constructor (method);
  if (D.21690 != 0) goto <D.21691>; else goto <D.21692>;
  <D.21691>:
  D.21693 = mono_method_signature (method);
  if (D.21693 != 0B) goto <D.21694>; else goto <D.21695>;
  <D.21694>:
  D.21696 = mono_method_signature (method);
  D.21697 = D.21696->param_count;
  if (D.21697 == 0) goto <D.21698>; else goto <D.21699>;
  <D.21698>:
  D.21700 = method->flags;
  D.21701 = (int) D.21700;
  D.21702 = D.21701 & 7;
  if (D.21702 == 6) goto <D.21703>; else goto <D.21704>;
  <D.21703>:
  D.21685 = 1;
  return D.21685;
  <D.21704>:
  <D.21699>:
  <D.21695>:
  <D.21692>:
  i = i + 1;
  <D.18050>:
  D.21705 = klass->method.count;
  i.35 = (unsigned int) i;
  if (D.21705 > i.35) goto <D.18049>; else goto <D.18051>;
  <D.18051>:
  D.21685 = 0;
  return D.21685;
}


mono_class_repect_method_constraints (struct VerifyContext * ctx, struct MonoClass * klass)
{
  struct MonoClass * D.21708;
  gboolean D.21709;
  int iftmp.36;
  struct MonoGenericContext * D.21715;
  int D.21716;
  struct MonoGenericClass * gklass;
  struct MonoGenericInst * ginst;
  struct MonoGenericContainer * gc;

  gklass = klass->generic_class;
  ginst = gklass->context.class_inst;
  D.21708 = gklass->container_class;
  gc = D.21708->generic_container;
  if (gc == 0B) goto <D.21711>; else goto <D.21714>;
  <D.21714>:
  D.21715 = &gklass->context;
  D.21716 = generic_arguments_respect_constraints (ctx, gc, D.21715, ginst);
  if (D.21716 != 0) goto <D.21711>; else goto <D.21712>;
  <D.21711>:
  iftmp.36 = 1;
  goto <D.21713>;
  <D.21712>:
  iftmp.36 = 0;
  <D.21713>:
  D.21709 = iftmp.36;
  return D.21709;
}


generic_arguments_respect_constraints (struct VerifyContext * ctx, struct MonoGenericContainer * gc, struct MonoGenericContext * context, struct MonoGenericInst * ginst)
{
  struct MonoGenericParamFull * D.21718;
  long unsigned int D.21719;
  long unsigned int D.21720;
  int D.21721;
  int D.21724;
  gboolean D.21727;
  int D.21728;
  <unnamed-unsigned:22> D.21731;
  int D.21732;
  int i;

  i = 0;
  goto <D.18170>;
  <D.18169>:
  {
    struct MonoType * type;
    struct MonoGenericParam * target;
    struct MonoGenericParam * candidate;
    struct MonoClass * candidate_class;

    type = ginst->type_argv[i];
    D.21718 = gc->type_params;
    D.21719 = (long unsigned int) i;
    D.21720 = D.21719 * 56;
    target = D.21718 + D.21720;
    D.21721 = mono_type_is_generic_argument (type);
    if (D.21721 == 0) goto <D.21722>; else goto <D.21723>;
    <D.21722>:
    // predicted unlikely by continue predictor.
    goto <D.18168>;
    <D.21723>:
    D.21724 = is_valid_type_in_context (ctx, type);
    if (D.21724 == 0) goto <D.21725>; else goto <D.21726>;
    <D.21725>:
    D.21727 = 0;
    return D.21727;
    <D.21726>:
    candidate = verifier_get_generic_param_from_type (ctx, type);
    candidate_class = mono_class_from_mono_type (type);
    D.21728 = mono_generic_param_is_constraint_compatible (ctx, target, candidate, candidate_class, context);
    if (D.21728 == 0) goto <D.21729>; else goto <D.21730>;
    <D.21729>:
    D.21727 = 0;
    return D.21727;
    <D.21730>:
  }
  <D.18168>:
  i = i + 1;
  <D.18170>:
  D.21731 = ginst->type_argc;
  D.21732 = (int) D.21731;
  if (D.21732 > i) goto <D.18169>; else goto <D.18171>;
  <D.18171>:
  D.21727 = 1;
  return D.21727;
}


verifier_get_generic_param_from_type (struct VerifyContext * ctx, struct MonoType * type)
{
  struct MonoGenericParam * D.21734;
  short unsigned int D.21735;
  unsigned char D.21736;
  struct MonoGenericClass * D.21739;
  long unsigned int D.21743;
  long unsigned int D.21744;
  struct MonoGenericParam * D.21749;
  struct MonoGenericParamFull * D.21750;
  long unsigned int D.21751;
  long unsigned int D.21752;
  struct MonoGenericContainer * gc;
  struct MonoMethod * method;
  int num;

  method = ctx->method;
  D.21734 = type->data.generic_param;
  D.21735 = D.21734->num;
  num = (int) D.21735;
  D.21736 = type->type;
  if (D.21736 == 19) goto <D.21737>; else goto <D.21738>;
  <D.21737>:
  {
    struct MonoClass * gtd;

    gtd = method->klass;
    D.21739 = gtd->generic_class;
    if (D.21739 != 0B) goto <D.21740>; else goto <D.21741>;
    <D.21740>:
    D.21739 = gtd->generic_class;
    gtd = D.21739->container_class;
    <D.21741>:
    gc = gtd->generic_container;
  }
  goto <D.21742>;
  <D.21738>:
  {
    struct MonoMethod * gmd;

    gmd = method;
    D.21743 = BIT_FIELD_REF <*method, 64, 256>;
    D.21744 = D.21743 & 2251799813685248;
    if (D.21744 != 0) goto <D.21745>; else goto <D.21746>;
    <D.21745>:
    gmd = MEM[(struct MonoMethodInflated *)method].declaring;
    <D.21746>:
    gc = mono_method_get_generic_container (gmd);
  }
  <D.21742>:
  if (gc == 0B) goto <D.21747>; else goto <D.21748>;
  <D.21747>:
  D.21749 = 0B;
  return D.21749;
  <D.21748>:
  D.21750 = gc->type_params;
  D.21751 = (long unsigned int) num;
  D.21752 = D.21751 * 56;
  D.21749 = D.21750 + D.21752;
  return D.21749;
}


mono_generic_param_is_constraint_compatible (struct VerifyContext * ctx, struct MonoGenericParam * target, struct MonoGenericParam * candidate, struct MonoClass * candidate_param_class, struct MonoGenericContext * context)
{
  struct MonoGenericParamInfo * iftmp.37;
  struct MonoGenericContainer * D.21755;
  struct MonoGenericParamInfo * iftmp.38;
  struct MonoGenericContainer * D.21760;
  short unsigned int D.21764;
  int D.21765;
  short unsigned int D.21766;
  int D.21767;
  struct MonoClass * * D.21768;
  struct MonoClass * D.21771;
  struct MonoType * D.21772;
  struct MonoGenericContext * D.21773;
  gboolean D.21776;
  struct MonoType * D.21779;
  int D.21780;
  unsigned int D.21782;
  unsigned int D.21783;
  unsigned char D.21785;
  int D.21788;
  int D.21797;
  _Bool D.21798;
  int D.21799;
  int D.21800;
  _Bool D.21801;
  int D.21802;
  int D.21803;
  int D.21808;
  int D.21813;
  int D.21816;
  struct MonoClass * * D.21821;
  struct MonoClass * D.21824;
  struct MonoType * D.21825;
  struct MonoType * D.21828;
  struct MonoType * D.21829;
  int D.21830;
  int D.21837;
  struct MonoType * D.21839;
  int D.21840;
  int D.21843;
  struct MonoGenericParamInfo * tinfo;
  struct MonoGenericParamInfo * cinfo;
  struct MonoClass * * candidate_class;
  gboolean class_constraint_satisfied;
  gboolean valuetype_constraint_satisfied;
  int tmask;
  int cmask;

  D.21755 = target->owner;
  if (D.21755 != 0B) goto <D.21756>; else goto <D.21757>;
  <D.21756>:
  iftmp.37 = &MEM[(struct MonoGenericParamFull *)target].info;
  goto <D.21758>;
  <D.21757>:
  iftmp.37 = 0B;
  <D.21758>:
  tinfo = iftmp.37;
  D.21760 = candidate->owner;
  if (D.21760 != 0B) goto <D.21761>; else goto <D.21762>;
  <D.21761>:
  iftmp.38 = &MEM[(struct MonoGenericParamFull *)candidate].info;
  goto <D.21763>;
  <D.21762>:
  iftmp.38 = 0B;
  <D.21763>:
  cinfo = iftmp.38;
  class_constraint_satisfied = 0;
  valuetype_constraint_satisfied = 0;
  D.21764 = tinfo->flags;
  D.21765 = (int) D.21764;
  tmask = D.21765 & 28;
  D.21766 = cinfo->flags;
  D.21767 = (int) D.21766;
  cmask = D.21767 & 28;
  D.21768 = cinfo->constraints;
  if (D.21768 != 0B) goto <D.21769>; else goto <D.21770>;
  <D.21769>:
  candidate_class = cinfo->constraints;
  goto <D.18120>;
  <D.18119>:
  {
    struct MonoClass * cc;
    struct MonoType * inflated;

    D.21771 = *candidate_class;
    D.21772 = &D.21771->byval_arg;
    D.21773 = ctx->generic_context;
    inflated = verifier_inflate_type (ctx, D.21772, D.21773);
    if (inflated == 0B) goto <D.21774>; else goto <D.21775>;
    <D.21774>:
    D.21776 = 0;
    return D.21776;
    <D.21775>:
    cc = mono_class_from_mono_type (inflated);
    mono_metadata_free_type (inflated);
    D.21779 = &cc->byval_arg;
    D.21780 = mono_type_is_reference (D.21779);
    if (D.21780 != 0) goto <D.21781>; else goto <D.21777>;
    <D.21781>:
    D.21782 = cc->flags;
    D.21783 = D.21782 & 32;
    if (D.21783 == 0) goto <D.21784>; else goto <D.21777>;
    <D.21784>:
    D.21785 = cc->byval_arg.type;
    if (D.21785 != 19) goto <D.21786>; else goto <D.21777>;
    <D.21786>:
    D.21785 = cc->byval_arg.type;
    if (D.21785 != 30) goto <D.21787>; else goto <D.21777>;
    <D.21787>:
    class_constraint_satisfied = 1;
    goto <D.21778>;
    <D.21777>:
    D.21779 = &cc->byval_arg;
    D.21788 = mono_type_is_reference (D.21779);
    if (D.21788 == 0) goto <D.21789>; else goto <D.21790>;
    <D.21789>:
    D.21782 = cc->flags;
    D.21783 = D.21782 & 32;
    if (D.21783 == 0) goto <D.21791>; else goto <D.21792>;
    <D.21791>:
    D.21785 = cc->byval_arg.type;
    if (D.21785 != 19) goto <D.21793>; else goto <D.21794>;
    <D.21793>:
    D.21785 = cc->byval_arg.type;
    if (D.21785 != 30) goto <D.21795>; else goto <D.21796>;
    <D.21795>:
    valuetype_constraint_satisfied = 1;
    <D.21796>:
    <D.21794>:
    <D.21792>:
    <D.21790>:
    <D.21778>:
  }
  candidate_class = candidate_class + 8;
  <D.18120>:
  D.21771 = *candidate_class;
  if (D.21771 != 0B) goto <D.18119>; else goto <D.18121>;
  <D.18121>:
  <D.21770>:
  D.21797 = cmask & 4;
  D.21798 = D.21797 != 0;
  D.21799 = (int) D.21798;
  class_constraint_satisfied = D.21799 | class_constraint_satisfied;
  D.21800 = cmask & 8;
  D.21801 = D.21800 != 0;
  D.21802 = (int) D.21801;
  valuetype_constraint_satisfied = D.21802 | valuetype_constraint_satisfied;
  D.21803 = tmask & 4;
  if (D.21803 != 0) goto <D.21804>; else goto <D.21805>;
  <D.21804>:
  if (class_constraint_satisfied == 0) goto <D.21806>; else goto <D.21807>;
  <D.21806>:
  D.21776 = 0;
  return D.21776;
  <D.21807>:
  <D.21805>:
  D.21808 = tmask & 8;
  if (D.21808 != 0) goto <D.21809>; else goto <D.21810>;
  <D.21809>:
  if (valuetype_constraint_satisfied == 0) goto <D.21811>; else goto <D.21812>;
  <D.21811>:
  D.21776 = 0;
  return D.21776;
  <D.21812>:
  <D.21810>:
  D.21813 = tmask & 16;
  if (D.21813 != 0) goto <D.21814>; else goto <D.21815>;
  <D.21814>:
  D.21816 = cmask & 16;
  if (D.21816 == 0) goto <D.21817>; else goto <D.21818>;
  <D.21817>:
  if (valuetype_constraint_satisfied == 0) goto <D.21819>; else goto <D.21820>;
  <D.21819>:
  D.21776 = 0;
  return D.21776;
  <D.21820>:
  <D.21818>:
  <D.21815>:
  D.21821 = tinfo->constraints;
  if (D.21821 != 0B) goto <D.21822>; else goto <D.21823>;
  <D.21822>:
  {
    struct MonoClass * * target_class;

    target_class = tinfo->constraints;
    goto <D.18132>;
    <D.18131>:
    {
      struct MonoClass * tc;
      struct MonoType * inflated;

      D.21824 = *target_class;
      D.21825 = &D.21824->byval_arg;
      inflated = verifier_inflate_type (ctx, D.21825, context);
      if (inflated == 0B) goto <D.21826>; else goto <D.21827>;
      <D.21826>:
      D.21776 = 0;
      return D.21776;
      <D.21827>:
      tc = mono_class_from_mono_type (inflated);
      mono_metadata_free_type (inflated);
      D.21828 = &tc->byval_arg;
      D.21829 = &candidate_param_class->byval_arg;
      D.21830 = mono_metadata_type_equal (D.21828, D.21829);
      if (D.21830 != 0) goto <D.21831>; else goto <D.21832>;
      <D.21831>:
      // predicted unlikely by continue predictor.
      goto <D.18125>;
      <D.21832>:
      D.21768 = cinfo->constraints;
      if (D.21768 == 0B) goto <D.21833>; else goto <D.21834>;
      <D.21833>:
      D.21776 = 0;
      return D.21776;
      <D.21834>:
      candidate_class = cinfo->constraints;
      goto <D.18130>;
      <D.18129>:
      {
        struct MonoClass * cc;

        D.21771 = *candidate_class;
        D.21772 = &D.21771->byval_arg;
        D.21773 = ctx->generic_context;
        inflated = verifier_inflate_type (ctx, D.21772, D.21773);
        if (inflated == 0B) goto <D.21835>; else goto <D.21836>;
        <D.21835>:
        D.21776 = 0;
        return D.21776;
        <D.21836>:
        cc = mono_class_from_mono_type (inflated);
        mono_metadata_free_type (inflated);
        D.21837 = verifier_class_is_assignable_from (tc, cc);
        if (D.21837 != 0) goto <D.18127>; else goto <D.21838>;
        <D.21838>:
        D.21839 = &cc->byval_arg;
        D.21840 = mono_type_is_generic_argument (D.21839);
        if (D.21840 != 0) goto <D.21841>; else goto <D.21842>;
        <D.21841>:
        {
          struct MonoGenericParam * other_candidate;

          D.21839 = &cc->byval_arg;
          other_candidate = verifier_get_generic_param_from_type (ctx, D.21839);
          D.21843 = mono_generic_param_is_constraint_compatible (ctx, target, other_candidate, cc, context);
          if (D.21843 != 0) goto <D.18127>; else goto <D.21844>;
          <D.21844>:
        }
        <D.21842>:
      }
      candidate_class = candidate_class + 8;
      <D.18130>:
      D.21771 = *candidate_class;
      if (D.21771 != 0B) goto <D.18129>; else goto <D.18127>;
      <D.18127>:
      D.21771 = *candidate_class;
      if (D.21771 == 0B) goto <D.21845>; else goto <D.21846>;
      <D.21845>:
      D.21776 = 0;
      return D.21776;
      <D.21846>:
    }
    <D.18125>:
    target_class = target_class + 8;
    <D.18132>:
    D.21824 = *target_class;
    if (D.21824 != 0B) goto <D.18131>; else goto <D.18133>;
    <D.18133>:
  }
  <D.21823>:
  D.21776 = 1;
  return D.21776;
}


verifier_inflate_type (struct VerifyContext * ctx, struct MonoType * type, struct MonoGenericContext * context)
{
  int D.21848;
  struct MonoType * D.21851;
  struct MonoError error;
  struct MonoType * result;

  try
    {
      result = mono_class_inflate_generic_type_checked (type, context, &error);
      D.21848 = mono_error_ok (&error);
      if (D.21848 == 0) goto <D.21849>; else goto <D.21850>;
      <D.21849>:
      mono_error_cleanup (&error);
      D.21851 = 0B;
      return D.21851;
      <D.21850>:
      D.21851 = result;
      return D.21851;
    }
  finally
    {
      error = {CLOBBER};
    }
}


init_stack_with_value_at_exception_boundary (struct VerifyContext * ctx, struct ILCodeDesc * code, struct MonoClass * klass)
{
  struct MonoType * D.21854;
  struct MonoGenericContext * D.21855;
  int D.21856;
  gchar * D.21859;
  struct GSList * D.21860;
  struct GSList * D.21861;
  int D.21862;
  unsigned int D.21865;
  gchar * D.21866;
  struct GSList * D.21867;
  struct ILStackDesc * D.21868;
  struct GSList * D.21869;
  struct GSList * D.21870;
  short unsigned int D.21871;
  short unsigned int D.21872;
  int D.21873;
  int D.21876;
  int D.21877;
  struct MonoError error;
  struct MonoType * type;

  try
    {
      D.21854 = &klass->byval_arg;
      D.21855 = ctx->generic_context;
      type = mono_class_inflate_generic_type_checked (D.21854, D.21855, &error);
      D.21856 = mono_error_ok (&error);
      if (D.21856 == 0) goto <D.21857>; else goto <D.21858>;
      <D.21857>:
      {
        char * name;

        name = mono_type_get_full_name (klass);
        {
          struct MonoVerifyInfoExtended * vinfo;

          vinfo = monoeg_malloc (24);
          vinfo->info.status = 1;
          D.21859 = monoeg_g_strdup_printf ("Invalid class %s used for exception", name);
          vinfo->info.message = D.21859;
          vinfo->exception_type = 3;
          D.21860 = ctx->list;
          D.21861 = monoeg_g_slist_prepend (D.21860, vinfo);
          ctx->list = D.21861;
        }
        ctx->valid = 0;
        monoeg_g_free (name);
        mono_error_cleanup (&error);
        return;
      }
      <D.21858>:
      D.21862 = ctx->max_stack;
      if (D.21862 == 0) goto <D.21863>; else goto <D.21864>;
      <D.21863>:
      {
        struct MonoVerifyInfoExtended * vinfo;

        vinfo = monoeg_malloc (24);
        vinfo->info.status = 1;
        D.21865 = ctx->ip_offset;
        D.21866 = monoeg_g_strdup_printf ("Stack overflow at 0x%04x", D.21865);
        vinfo->info.message = D.21866;
        vinfo->exception_type = 3;
        D.21860 = ctx->list;
        D.21867 = monoeg_g_slist_prepend (D.21860, vinfo);
        ctx->list = D.21867;
      }
      ctx->valid = 0;
      return;
      <D.21864>:
      stack_init (ctx, code);
      ensure_stack_size (code, 1);
      D.21868 = code->stack;
      set_stack_value (ctx, D.21868, type, 0);
      D.21869 = ctx->exception_types;
      D.21870 = monoeg_g_slist_prepend (D.21869, type);
      ctx->exception_types = D.21870;
      code->size = 1;
      D.21871 = code->flags;
      D.21872 = D.21871 | 2;
      code->flags = D.21872;
      D.21873 = mono_type_is_generic_argument (type);
      if (D.21873 != 0) goto <D.21874>; else goto <D.21875>;
      <D.21874>:
      D.21868 = code->stack;
      D.21868 = code->stack;
      D.21876 = D.21868->stype;
      D.21877 = D.21876 | 4096;
      D.21868->stype = D.21877;
      <D.21875>:
    }
  finally
    {
      error = {CLOBBER};
    }
}


ensure_stack_size (struct ILCodeDesc * stack, int required)
{
  short unsigned int D.21881;
  int D.21882;
  int D.21885;
  int D.21886;
  short unsigned int D.21887;
  int D.21888;
  _Bool D.21889;
  long int D.21890;
  long int D.21891;
  _Bool D.21894;
  long int D.21895;
  long int D.21896;
  long unsigned int D.21899;
  long unsigned int D.21900;
  struct ILStackDesc * D.21901;
  long unsigned int D.21906;
  long unsigned int D.21907;
  short unsigned int D.21908;
  int new_size;
  struct ILStackDesc * tmp;

  new_size = 8;
  D.21881 = stack->max_size;
  D.21882 = (int) D.21881;
  if (D.21882 > required) goto <D.21883>; else goto <D.21884>;
  <D.21883>:
  return;
  <D.21884>:
  D.21881 = stack->max_size;
  D.21882 = (int) D.21881;
  D.21885 = D.21882 * 2;
  D.21886 = MAX_EXPR <D.21885, required>;
  new_size = MAX_EXPR <D.21886, 8>;
  D.21887 = stack->size;
  D.21888 = (int) D.21887;
  D.21889 = D.21888 > new_size;
  D.21890 = (long int) D.21889;
  D.21891 = __builtin_expect (D.21890, 0);
  if (D.21891 != 0) goto <D.21892>; else goto <D.21893>;
  <D.21892>:
  monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "verify.c", 1499, "new_size >= stack->size");
  <D.21893>:
  D.21894 = new_size < required;
  D.21895 = (long int) D.21894;
  D.21896 = __builtin_expect (D.21895, 0);
  if (D.21896 != 0) goto <D.21897>; else goto <D.21898>;
  <D.21897>:
  monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "verify.c", 1500, "new_size >= required");
  <D.21898>:
  D.21899 = (long unsigned int) new_size;
  D.21900 = D.21899 * 24;
  tmp = monoeg_malloc0 (D.21900);
  D.21901 = stack->stack;
  if (D.21901 != 0B) goto <D.21902>; else goto <D.21903>;
  <D.21902>:
  D.21887 = stack->size;
  if (D.21887 != 0) goto <D.21904>; else goto <D.21905>;
  <D.21904>:
  D.21901 = stack->stack;
  D.21887 = stack->size;
  D.21906 = (long unsigned int) D.21887;
  D.21907 = D.21906 * 24;
  memcpy (tmp, D.21901, D.21907);
  <D.21905>:
  D.21901 = stack->stack;
  monoeg_g_free (D.21901);
  <D.21903>:
  stack->stack = tmp;
  D.21908 = (short unsigned int) new_size;
  stack->max_size = D.21908;
}


mono_opcode_is_prefix (int op)
{
  gboolean D.21910;

  switch (op) <default: <D.21911>, case 274: <D.19495>, case 275: <D.19496>, case 276: <D.19497>, case 278: <D.19498>, case 286: <D.19499>>
  <D.19495>:
  <D.19496>:
  <D.19497>:
  <D.19498>:
  <D.19499>:
  D.21910 = 1;
  return D.21910;
  <D.21911>:
  D.21910 = 0;
  return D.21910;
}


merge_stacks (struct VerifyContext * ctx, struct ILCodeDesc * from, struct ILCodeDesc * to, gboolean start, gboolean external)
{
  short unsigned int D.21915;
  struct ILCodeDesc * D.21919;
  int D.21920;
  int D.21921;
  short unsigned int D.21924;
  short unsigned int D.21925;
  int D.21928;
  int D.21929;
  unsigned int D.21930;
  gchar * D.21931;
  struct GSList * D.21932;
  struct GSList * D.21933;
  struct ILStackDesc * D.21934;
  long unsigned int D.21935;
  long unsigned int D.21936;
  struct ILStackDesc * D.21937;
  int D.21938;
  int D.21941;
  int D.21944;
  int D.21947;
  int D.21950;
  int D.21955;
  int D.21957;
  int D.21960;
  int D.21962;
  int D.21963;
  gchar * D.21964;
  struct GSList * D.21965;
  int D.21966;
  struct MonoClass * D.21970;
  long unsigned int D.21971;
  long unsigned int D.21972;
  struct MonoClass * D.21974;
  long unsigned int D.21975;
  long unsigned int D.21976;
  int D.21978;
  int D.21980;
  int iftmp.39;
  short unsigned int D.21983;
  short unsigned int D.21984;
  int D.21987;
  int D.21989;
  struct MonoClass * * D.21990;
  long unsigned int D.21991;
  long unsigned int D.21992;
  struct MonoClass * * D.21993;
  struct MonoClass * D.21994;
  struct MonoType * D.21995;
  struct MonoClass * * D.21996;
  struct MonoClass * * D.21997;
  struct MonoClass * D.21998;
  struct MonoType * D.21999;
  int D.22000;
  int D.22003;
  const char * D.22009;
  gchar * D.22010;
  struct GSList * D.22011;
  int D.22014;
  const char * D.22020;
  gchar * D.22021;
  struct GSList * D.22022;
  unsigned int D.22025;
  unsigned int D.22026;
  int D.22029;
  struct MonoClass * * D.22032;
  struct MonoClass * * D.22033;
  struct MonoClass * D.22034;
  int D.22035;
  short unsigned int D.22038;
  int D.22039;
  unsigned int D.22040;
  unsigned int D.22041;
  int D.22044;
  struct MonoClass * * D.22047;
  struct MonoClass * * D.22048;
  struct MonoClass * D.22049;
  int D.22050;
  short unsigned int D.22053;
  int D.22054;
  int D.22057;
  int D.22059;
  gchar * D.22063;
  struct GSList * D.22064;
  struct MonoType * D.22067;
  int D.22068;
  _Bool D.22069;
  long int D.22070;
  long int D.22071;
  struct MonoType * D.22074;
  int D.22075;
  int D.22076;
  short unsigned int D.22079;
  short unsigned int D.22080;
  struct MonoError error;
  int i;
  int j;
  void end_verify = <<< error >>>;
  void match_found = <<< error >>>;

  try
    {
      stack_init (ctx, to);
      if (start != 0) goto <D.21913>; else goto <D.21914>;
      <D.21913>:
      D.21915 = to->flags;
      if (D.21915 == 0) goto <D.21916>; else goto <D.21917>;
      <D.21916>:
      from->size = 0;
      goto <D.21918>;
      <D.21917>:
      D.21919 = &ctx->eval;
      stack_copy (D.21919, to);
      <D.21918>:
      goto end_verify;
      <D.21914>:
      D.21915 = to->flags;
      D.21920 = (int) D.21915;
      D.21921 = D.21920 & 8;
      if (D.21921 == 0) goto <D.21922>; else goto <D.21923>;
      <D.21922>:
      D.21919 = &ctx->eval;
      stack_copy (to, D.21919);
      goto end_verify;
      <D.21923>:
      D.21924 = from->size;
      D.21925 = to->size;
      if (D.21924 != D.21925) goto <D.21926>; else goto <D.21927>;
      <D.21926>:
      {
        struct MonoVerifyInfoExtended * vinfo;

        vinfo = monoeg_malloc (24);
        vinfo->info.status = 1;
        D.21924 = from->size;
        D.21928 = (int) D.21924;
        D.21925 = to->size;
        D.21929 = (int) D.21925;
        D.21930 = ctx->ip_offset;
        D.21931 = monoeg_g_strdup_printf ("Could not merge stacks, different sizes (%d x %d) at 0x%04x", D.21928, D.21929, D.21930);
        vinfo->info.message = D.21931;
        vinfo->exception_type = 3;
        D.21932 = ctx->list;
        D.21933 = monoeg_g_slist_prepend (D.21932, vinfo);
        ctx->list = D.21933;
      }
      ctx->valid = 0;
      goto end_verify;
      <D.21927>:
      i = 0;
      goto <D.19466>;
      <D.19465>:
      {
        struct ILStackDesc * new_slot;
        struct ILStackDesc * old_slot;
        struct MonoType * new_type;
        struct MonoType * old_type;
        struct MonoClass * old_class;
        struct MonoClass * new_class;
        struct MonoClass * match_class;

        D.21934 = from->stack;
        D.21935 = (long unsigned int) i;
        D.21936 = D.21935 * 24;
        new_slot = D.21934 + D.21936;
        D.21937 = to->stack;
        D.21935 = (long unsigned int) i;
        D.21936 = D.21935 * 24;
        old_slot = D.21937 + D.21936;
        new_type = mono_type_from_stack_slot (new_slot);
        old_type = mono_type_from_stack_slot (old_slot);
        old_class = mono_class_from_mono_type (old_type);
        new_class = mono_class_from_mono_type (new_type);
        match_class = 0B;
        D.21938 = verify_stack_type_compatibility (ctx, old_type, new_slot);
        if (D.21938 != 0) goto <D.21939>; else goto <D.21940>;
        <D.21939>:
        copy_stack_value (new_slot, old_slot);
        // predicted unlikely by continue predictor.
        goto <D.19446>;
        <D.21940>:
        D.21941 = verify_stack_type_compatibility (ctx, new_type, old_slot);
        if (D.21941 != 0) goto <D.21942>; else goto <D.21943>;
        <D.21942>:
        copy_stack_value (old_slot, new_slot);
        // predicted unlikely by continue predictor.
        goto <D.19446>;
        <D.21943>:
        D.21944 = stack_slot_is_boxed_value (old_slot);
        if (D.21944 != 0) goto <D.21945>; else goto <D.21946>;
        <D.21945>:
        D.21947 = stack_slot_is_boxed_value (new_slot);
        if (D.21947 != 0) goto <D.21948>; else goto <D.21949>;
        <D.21948>:
        D.21950 = mono_metadata_type_equal (old_type, new_type);
        if (D.21950 != 0) goto <D.21951>; else goto <D.21952>;
        <D.21951>:
        copy_stack_value (new_slot, old_slot);
        // predicted unlikely by continue predictor.
        goto <D.19446>;
        <D.21952>:
        <D.21949>:
        <D.21946>:
        D.21955 = mono_type_is_generic_argument (old_type);
        if (D.21955 != 0) goto <D.21953>; else goto <D.21956>;
        <D.21956>:
        D.21957 = mono_type_is_generic_argument (new_type);
        if (D.21957 != 0) goto <D.21953>; else goto <D.21954>;
        <D.21953>:
        {
          char * old_name;
          char * new_name;

          old_name = stack_slot_full_name (old_slot);
          new_name = stack_slot_full_name (new_slot);
          D.21960 = ctx->verifiable;
          if (D.21960 != 0) goto <D.21958>; else goto <D.21961>;
          <D.21961>:
          D.21962 = ctx->level;
          D.21963 = D.21962 & 128;
          if (D.21963 != 0) goto <D.21958>; else goto <D.21959>;
          <D.21958>:
          {
            struct MonoVerifyInfoExtended * vinfo;

            vinfo = monoeg_malloc (24);
            vinfo->info.status = 8;
            D.21930 = ctx->ip_offset;
            D.21964 = monoeg_g_strdup_printf ("Could not merge stack at depth %d, types not compatible: %s X %s at 0x%04x", i, old_name, new_name, D.21930);
            vinfo->info.message = D.21964;
            vinfo->exception_type = 4;
            D.21932 = ctx->list;
            D.21965 = monoeg_g_slist_prepend (D.21932, vinfo);
            ctx->list = D.21965;
          }
          ctx->verifiable = 0;
          D.21962 = ctx->level;
          D.21966 = D.21962 & 16;
          if (D.21966 != 0) goto <D.21967>; else goto <D.21968>;
          <D.21967>:
          ctx->valid = 0;
          <D.21968>:
          <D.21959>:
          monoeg_g_free (old_name);
          monoeg_g_free (new_name);
          goto end_verify;
        }
        <D.21954>:
        D.21970 = mono_class_from_mono_type (old_type);
        D.21971 = BIT_FIELD_REF <*D.21970, 64, 256>;
        D.21972 = D.21971 & 1152921504606846976;
        if (D.21972 == 0) goto <D.21973>; else goto <D.21969>;
        <D.21973>:
        D.21974 = mono_class_from_mono_type (new_type);
        D.21975 = BIT_FIELD_REF <*D.21974, 64, 256>;
        D.21976 = D.21975 & 1152921504606846976;
        if (D.21976 == 0) goto <D.21977>; else goto <D.21969>;
        <D.21977>:
        D.21978 = stack_slot_is_managed_pointer (old_slot);
        if (D.21978 == 0) goto <D.21979>; else goto <D.21969>;
        <D.21979>:
        D.21980 = stack_slot_is_managed_pointer (new_slot);
        if (D.21980 == 0) goto <D.21981>; else goto <D.21969>;
        <D.21981>:
        mono_class_setup_supertypes (old_class);
        mono_class_setup_supertypes (new_class);
        D.21983 = old_class->idepth;
        D.21984 = new_class->idepth;
        if (D.21983 < D.21984) goto <D.21985>; else goto <D.21986>;
        <D.21985>:
        D.21983 = old_class->idepth;
        D.21987 = (int) D.21983;
        iftmp.39 = D.21987 + -1;
        goto <D.21988>;
        <D.21986>:
        D.21984 = new_class->idepth;
        D.21989 = (int) D.21984;
        iftmp.39 = D.21989 + -1;
        <D.21988>:
        j = iftmp.39;
        goto <D.19452>;
        <D.19451>:
        D.21990 = old_class->supertypes;
        D.21991 = (long unsigned int) j;
        D.21992 = D.21991 * 8;
        D.21993 = D.21990 + D.21992;
        D.21994 = *D.21993;
        D.21995 = &D.21994->byval_arg;
        D.21996 = new_class->supertypes;
        D.21991 = (long unsigned int) j;
        D.21992 = D.21991 * 8;
        D.21997 = D.21996 + D.21992;
        D.21998 = *D.21997;
        D.21999 = &D.21998->byval_arg;
        D.22000 = mono_metadata_type_equal (D.21995, D.21999);
        if (D.22000 != 0) goto <D.22001>; else goto <D.22002>;
        <D.22001>:
        D.21990 = old_class->supertypes;
        D.21991 = (long unsigned int) j;
        D.21992 = D.21991 * 8;
        D.21993 = D.21990 + D.21992;
        match_class = *D.21993;
        goto match_found;
        <D.22002>:
        j = j + -1;
        <D.19452>:
        if (j > 0) goto <D.19451>; else goto <D.19453>;
        <D.19453>:
        mono_class_setup_interfaces (old_class, &error);
        D.22003 = mono_error_ok (&error);
        if (D.22003 == 0) goto <D.22004>; else goto <D.22005>;
        <D.22004>:
        D.21960 = ctx->verifiable;
        if (D.21960 != 0) goto <D.22006>; else goto <D.22008>;
        <D.22008>:
        D.21962 = ctx->level;
        D.21963 = D.21962 & 128;
        if (D.21963 != 0) goto <D.22006>; else goto <D.22007>;
        <D.22006>:
        {
          struct MonoVerifyInfoExtended * vinfo;

          vinfo = monoeg_malloc (24);
          vinfo->info.status = 8;
          D.22009 = mono_error_get_message (&error);
          D.21930 = ctx->ip_offset;
          D.22010 = monoeg_g_strdup_printf ("Cannot merge stacks due to a TypeLoadException %s at 0x%04x", D.22009, D.21930);
          vinfo->info.message = D.22010;
          vinfo->exception_type = 4;
          D.21932 = ctx->list;
          D.22011 = monoeg_g_slist_prepend (D.21932, vinfo);
          ctx->list = D.22011;
        }
        ctx->verifiable = 0;
        D.21962 = ctx->level;
        D.21966 = D.21962 & 16;
        if (D.21966 != 0) goto <D.22012>; else goto <D.22013>;
        <D.22012>:
        ctx->valid = 0;
        <D.22013>:
        <D.22007>:
        mono_error_cleanup (&error);
        goto end_verify;
        <D.22005>:
        mono_class_setup_interfaces (new_class, &error);
        D.22014 = mono_error_ok (&error);
        if (D.22014 == 0) goto <D.22015>; else goto <D.22016>;
        <D.22015>:
        D.21960 = ctx->verifiable;
        if (D.21960 != 0) goto <D.22017>; else goto <D.22019>;
        <D.22019>:
        D.21962 = ctx->level;
        D.21963 = D.21962 & 128;
        if (D.21963 != 0) goto <D.22017>; else goto <D.22018>;
        <D.22017>:
        {
          struct MonoVerifyInfoExtended * vinfo;

          vinfo = monoeg_malloc (24);
          vinfo->info.status = 8;
          D.22020 = mono_error_get_message (&error);
          D.21930 = ctx->ip_offset;
          D.22021 = monoeg_g_strdup_printf ("Cannot merge stacks due to a TypeLoadException %s at 0x%04x", D.22020, D.21930);
          vinfo->info.message = D.22021;
          vinfo->exception_type = 4;
          D.21932 = ctx->list;
          D.22022 = monoeg_g_slist_prepend (D.21932, vinfo);
          ctx->list = D.22022;
        }
        ctx->verifiable = 0;
        D.21962 = ctx->level;
        D.21966 = D.21962 & 16;
        if (D.21966 != 0) goto <D.22023>; else goto <D.22024>;
        <D.22023>:
        ctx->valid = 0;
        <D.22024>:
        <D.22018>:
        mono_error_cleanup (&error);
        goto end_verify;
        <D.22016>:
        D.22025 = old_class->flags;
        D.22026 = D.22025 & 32;
        if (D.22026 != 0) goto <D.22027>; else goto <D.22028>;
        <D.22027>:
        D.22029 = verifier_class_is_assignable_from (old_class, new_class);
        if (D.22029 != 0) goto <D.22030>; else goto <D.22031>;
        <D.22030>:
        match_class = old_class;
        goto match_found;
        <D.22031>:
        j = 0;
        goto <D.19457>;
        <D.19456>:
        D.22032 = old_class->interfaces;
        D.21991 = (long unsigned int) j;
        D.21992 = D.21991 * 8;
        D.22033 = D.22032 + D.21992;
        D.22034 = *D.22033;
        D.22035 = verifier_class_is_assignable_from (D.22034, new_class);
        if (D.22035 != 0) goto <D.22036>; else goto <D.22037>;
        <D.22036>:
        D.22032 = old_class->interfaces;
        D.21991 = (long unsigned int) j;
        D.21992 = D.21991 * 8;
        D.22033 = D.22032 + D.21992;
        match_class = *D.22033;
        goto match_found;
        <D.22037>:
        j = j + 1;
        <D.19457>:
        D.22038 = old_class->interface_count;
        D.22039 = (int) D.22038;
        if (D.22039 > j) goto <D.19456>; else goto <D.19458>;
        <D.19458>:
        <D.22028>:
        D.22040 = new_class->flags;
        D.22041 = D.22040 & 32;
        if (D.22041 != 0) goto <D.22042>; else goto <D.22043>;
        <D.22042>:
        D.22044 = verifier_class_is_assignable_from (new_class, old_class);
        if (D.22044 != 0) goto <D.22045>; else goto <D.22046>;
        <D.22045>:
        match_class = new_class;
        goto match_found;
        <D.22046>:
        j = 0;
        goto <D.19460>;
        <D.19459>:
        D.22047 = new_class->interfaces;
        D.21991 = (long unsigned int) j;
        D.21992 = D.21991 * 8;
        D.22048 = D.22047 + D.21992;
        D.22049 = *D.22048;
        D.22050 = verifier_class_is_assignable_from (D.22049, old_class);
        if (D.22050 != 0) goto <D.22051>; else goto <D.22052>;
        <D.22051>:
        D.22047 = new_class->interfaces;
        D.21991 = (long unsigned int) j;
        D.21992 = D.21991 * 8;
        D.22048 = D.22047 + D.21992;
        match_class = *D.22048;
        goto match_found;
        <D.22052>:
        j = j + 1;
        <D.19460>:
        D.22053 = new_class->interface_count;
        D.22054 = (int) D.22053;
        if (D.22054 > j) goto <D.19459>; else goto <D.19461>;
        <D.19461>:
        <D.22043>:
        match_class = mono_defaults.object_class;
        goto match_found;
        <D.21969>:
        D.22057 = is_compatible_boxed_valuetype (ctx, old_type, new_type, new_slot, 0);
        if (D.22057 != 0) goto <D.22055>; else goto <D.22058>;
        <D.22058>:
        D.22059 = is_compatible_boxed_valuetype (ctx, new_type, old_type, old_slot, 0);
        if (D.22059 != 0) goto <D.22055>; else goto <D.22056>;
        <D.22055>:
        match_class = mono_defaults.object_class;
        goto match_found;
        <D.22056>:
        {
          char * old_name;
          char * new_name;

          old_name = stack_slot_full_name (old_slot);
          new_name = stack_slot_full_name (new_slot);
          D.21960 = ctx->verifiable;
          if (D.21960 != 0) goto <D.22060>; else goto <D.22062>;
          <D.22062>:
          D.21962 = ctx->level;
          D.21963 = D.21962 & 128;
          if (D.21963 != 0) goto <D.22060>; else goto <D.22061>;
          <D.22060>:
          {
            struct MonoVerifyInfoExtended * vinfo;

            vinfo = monoeg_malloc (24);
            vinfo->info.status = 8;
            D.21930 = ctx->ip_offset;
            D.22063 = monoeg_g_strdup_printf ("Could not merge stack at depth %d, types not compatible: %s X %s at 0x%04x", i, old_name, new_name, D.21930);
            vinfo->info.message = D.22063;
            vinfo->exception_type = 4;
            D.21932 = ctx->list;
            D.22064 = monoeg_g_slist_prepend (D.21932, vinfo);
            ctx->list = D.22064;
          }
          ctx->verifiable = 0;
          D.21962 = ctx->level;
          D.21966 = D.21962 & 16;
          if (D.21966 != 0) goto <D.22065>; else goto <D.22066>;
          <D.22065>:
          ctx->valid = 0;
          <D.22066>:
          <D.22061>:
          monoeg_g_free (old_name);
          monoeg_g_free (new_name);
        }
        D.22067 = &new_class->byval_arg;
        D.22068 = stack_slot_is_managed_pointer (old_slot);
        set_stack_value (ctx, old_slot, D.22067, D.22068);
        goto end_verify;
        match_found:
        D.22069 = match_class == 0B;
        D.22070 = (long int) D.22069;
        D.22071 = __builtin_expect (D.22070, 0);
        if (D.22071 != 0) goto <D.22072>; else goto <D.22073>;
        <D.22072>:
        monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "verify.c", 4668, "match_class");
        <D.22073>:
        D.22074 = &match_class->byval_arg;
        D.22075 = stack_slot_is_managed_pointer (old_slot);
        set_stack_value (ctx, old_slot, D.22074, D.22075);
        D.22074 = &match_class->byval_arg;
        D.22076 = stack_slot_is_managed_pointer (old_slot);
        set_stack_value (ctx, new_slot, D.22074, D.22076);
        // predicted unlikely by continue predictor.
        goto <D.19446>;
      }
      <D.19446>:
      i = i + 1;
      <D.19466>:
      D.21924 = from->size;
      D.21928 = (int) D.21924;
      if (D.21928 > i) goto <D.19465>; else goto <D.19467>;
      <D.19467>:
      end_verify:
      if (external != 0) goto <D.22077>; else goto <D.22078>;
      <D.22077>:
      D.21915 = to->flags;
      D.22079 = D.21915 | 2;
      to->flags = D.22079;
      <D.22078>:
      D.21915 = to->flags;
      D.22080 = D.21915 | 8;
      to->flags = D.22080;
    }
  finally
    {
      error = {CLOBBER};
    }
}


stack_copy (struct ILCodeDesc * to, struct ILCodeDesc * from)
{
  short unsigned int D.22081;
  int D.22082;
  struct ILStackDesc * D.22085;
  struct ILStackDesc * D.22086;
  long unsigned int D.22087;
  long unsigned int D.22088;

  D.22081 = from->size;
  D.22082 = (int) D.22081;
  ensure_stack_size (to, D.22082);
  D.22081 = from->size;
  to->size = D.22081;
  D.22081 = from->size;
  if (D.22081 != 0) goto <D.22083>; else goto <D.22084>;
  <D.22083>:
  D.22085 = to->stack;
  D.22086 = from->stack;
  D.22081 = from->size;
  D.22087 = (long unsigned int) D.22081;
  D.22088 = D.22087 * 24;
  memcpy (D.22085, D.22086, D.22088);
  <D.22084>:
}


mono_type_from_stack_slot (struct ILStackDesc * slot)
{
  int D.22089;
  struct MonoType * D.22092;
  struct MonoType * D.22093;

  D.22089 = stack_slot_is_managed_pointer (slot);
  if (D.22089 != 0) goto <D.22090>; else goto <D.22091>;
  <D.22090>:
  D.22093 = slot->type;
  D.22092 = mono_type_get_type_byref (D.22093);
  return D.22092;
  <D.22091>:
  D.22092 = slot->type;
  return D.22092;
}


mono_type_get_type_byref (struct MonoType * type)
{
  long unsigned int D.22095;
  long unsigned int D.22096;
  struct MonoType * D.22099;
  struct MonoClass * D.22100;

  D.22095 = BIT_FIELD_REF <*type, 64, 64>;
  D.22096 = D.22095 & 8589934592;
  if (D.22096 != 0) goto <D.22097>; else goto <D.22098>;
  <D.22097>:
  D.22099 = type;
  return D.22099;
  <D.22098>:
  D.22100 = mono_class_from_mono_type (type);
  D.22099 = &D.22100->this_arg;
  return D.22099;
}


verify_stack_type_compatibility (struct VerifyContext * ctx, struct MonoType * type, struct ILStackDesc * stack)
{
  int D.22102;

  D.22102 = verify_stack_type_compatibility_full (ctx, type, stack, 0, 0);
  return D.22102;
}


verify_stack_type_compatibility_full (struct VerifyContext * ctx, struct MonoType * type, struct ILStackDesc * stack, gboolean drop_byref, gboolean valuetype_must_be_boxed)
{
  int D.22104;
  long unsigned int D.22107;
  long unsigned int D.22108;
  int D.22111;
  int D.22114;
  int D.22115;
  int D.22120;
  int D.22123;
  int D.22128;
  struct MonoType * D.22133;
  struct MonoType * candidate;

  candidate = mono_type_from_stack_slot (stack);
  D.22104 = mono_type_is_reference (type);
  if (D.22104 != 0) goto <D.22105>; else goto <D.22106>;
  <D.22105>:
  D.22107 = BIT_FIELD_REF <*type, 64, 64>;
  D.22108 = D.22107 & 8589934592;
  if (D.22108 == 0) goto <D.22109>; else goto <D.22110>;
  <D.22109>:
  D.22111 = stack_slot_is_null_literal (stack);
  if (D.22111 != 0) goto <D.22112>; else goto <D.22113>;
  <D.22112>:
  D.22114 = 1;
  return D.22114;
  <D.22113>:
  <D.22110>:
  <D.22106>:
  D.22115 = is_compatible_boxed_valuetype (ctx, type, candidate, stack, 1);
  if (D.22115 != 0) goto <D.22116>; else goto <D.22117>;
  <D.22116>:
  D.22114 = 1;
  return D.22114;
  <D.22117>:
  if (valuetype_must_be_boxed != 0) goto <D.22118>; else goto <D.22119>;
  <D.22118>:
  D.22120 = stack_slot_is_boxed_value (stack);
  if (D.22120 == 0) goto <D.22121>; else goto <D.22122>;
  <D.22121>:
  D.22123 = mono_type_is_reference (candidate);
  if (D.22123 == 0) goto <D.22124>; else goto <D.22125>;
  <D.22124>:
  D.22114 = 0;
  return D.22114;
  <D.22125>:
  <D.22122>:
  <D.22119>:
  if (valuetype_must_be_boxed == 0) goto <D.22126>; else goto <D.22127>;
  <D.22126>:
  D.22128 = stack_slot_is_boxed_value (stack);
  if (D.22128 != 0) goto <D.22129>; else goto <D.22130>;
  <D.22129>:
  D.22114 = 0;
  return D.22114;
  <D.22130>:
  <D.22127>:
  if (drop_byref != 0) goto <D.22131>; else goto <D.22132>;
  <D.22131>:
  D.22133 = mono_type_get_type_byval (candidate);
  D.22114 = verify_type_compatibility_full (ctx, type, D.22133, 0);
  return D.22114;
  <D.22132>:
  D.22114 = verify_type_compatibility_full (ctx, type, candidate, 0);
  return D.22114;
}


stack_slot_is_null_literal (struct ILStackDesc * value)
{
  gboolean D.22135;
  int D.22136;
  int D.22137;
  _Bool D.22138;

  D.22136 = value->stype;
  D.22137 = D.22136 & 1024;
  D.22138 = D.22137 != 0;
  D.22135 = (gboolean) D.22138;
  return D.22135;
}


mono_type_get_type_byval (struct MonoType * type)
{
  long unsigned int D.22140;
  long unsigned int D.22141;
  struct MonoType * D.22144;
  struct MonoClass * D.22145;

  D.22140 = BIT_FIELD_REF <*type, 64, 64>;
  D.22141 = D.22140 & 8589934592;
  if (D.22141 == 0) goto <D.22142>; else goto <D.22143>;
  <D.22142>:
  D.22144 = type;
  return D.22144;
  <D.22143>:
  D.22145 = mono_class_from_mono_type (type);
  D.22144 = &D.22145->byval_arg;
  return D.22144;
}


verify_type_compatibility_full (struct VerifyContext * ctx, struct MonoType * target, struct MonoType * candidate, gboolean strict)
{
  long unsigned int D.22147;
  long unsigned int D.22148;
  long unsigned int D.22149;
  long unsigned int D.22150;
  int D.22153;
  long unsigned int D.22156;
  int D.22161;
  int D.22163;
  int D.22164;
  unsigned int D.22165;
  gchar * D.22166;
  struct GSList * D.22167;
  struct GSList * D.22168;
  int D.22169;
  gboolean D.22172;
  <unnamed-unsigned:1> D.22173;
  int D.22174;
  unsigned char D.22175;
  int D.22176;
  unsigned char D.22177;
  _Bool D.22178;
  int iftmp.40;
  unsigned char D.22185;
  int iftmp.41;
  unsigned char D.22193;
  unsigned char D.22195;
  _Bool D.22196;
  unsigned char D.22197;
  _Bool D.22198;
  int iftmp.42;
  int iftmp.43;
  int D.22211;
  unsigned char D.22212;
  _Bool D.22213;
  _Bool D.22216;
  unsigned char D.22217;
  _Bool D.22218;
  int iftmp.44;
  int iftmp.45;
  int D.22231;
  struct MonoType * D.22234;
  struct MonoType * D.22235;
  int iftmp.46;
  int D.22241;
  long unsigned int D.22243;
  long unsigned int D.22244;
  long unsigned int D.22245;
  long unsigned int D.22246;
  int D.22248;
  int D.22253;
  int D.22256;
  int D.22259;
  _Bool D.22262;
  _Bool D.22263;
  int D.22264;
  struct MonoClass * D.22269;
  struct MonoClass * D.22270;
  _Bool D.22275;
  int D.22280;
  struct MonoGenericParam * D.22287;
  short unsigned int D.22288;
  struct MonoGenericParam * D.22289;
  short unsigned int D.22290;
  _Bool D.22291;
  struct MonoType * original_candidate;
  void handle_enum = <<< error >>>;

  original_candidate = candidate;
  D.22147 = BIT_FIELD_REF <*candidate, 64, 64>;
  D.22148 = BIT_FIELD_REF <*target, 64, 64>;
  D.22149 = D.22147 ^ D.22148;
  D.22150 = D.22149 & 8589934592;
  if (D.22150 != 0) goto <D.22151>; else goto <D.22152>;
  <D.22151>:
  D.22153 = get_stack_type (candidate);
  if (D.22153 == 3) goto <D.22154>; else goto <D.22155>;
  <D.22154>:
  D.22148 = BIT_FIELD_REF <*target, 64, 64>;
  D.22156 = D.22148 & 8589934592;
  if (D.22156 != 0) goto <D.22157>; else goto <D.22158>;
  <D.22157>:
  D.22161 = ctx->verifiable;
  if (D.22161 != 0) goto <D.22159>; else goto <D.22162>;
  <D.22162>:
  D.22163 = ctx->level;
  D.22164 = D.22163 & 128;
  if (D.22164 != 0) goto <D.22159>; else goto <D.22160>;
  <D.22159>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (24);
    vinfo->info.status = 8;
    D.22165 = ctx->ip_offset;
    D.22166 = monoeg_g_strdup_printf ("using byref native int at 0x%04x", D.22165);
    vinfo->info.message = D.22166;
    vinfo->exception_type = 4;
    D.22167 = ctx->list;
    D.22168 = monoeg_g_slist_prepend (D.22167, vinfo);
    ctx->list = D.22168;
  }
  ctx->verifiable = 0;
  D.22163 = ctx->level;
  D.22169 = D.22163 & 16;
  if (D.22169 != 0) goto <D.22170>; else goto <D.22171>;
  <D.22170>:
  ctx->valid = 0;
  <D.22171>:
  <D.22160>:
  D.22172 = 1;
  return D.22172;
  <D.22158>:
  <D.22155>:
  D.22172 = 0;
  return D.22172;
  <D.22152>:
  D.22173 = target->byref;
  D.22174 = (int) D.22173;
  strict = D.22174 | strict;
  candidate = mono_type_get_underlying_type_any (candidate);
  handle_enum:
  D.22175 = target->type;
  D.22176 = (int) D.22175;
  switch (D.22176) <default: <D.18671>, case 1: <D.18632>, case 2: <D.18635>, case 3: <D.18638>, case 4: <D.18633>, case 5: <D.18634>, case 6: <D.18636>, case 7: <D.18637>, case 8: <D.18639>, case 9: <D.18640>, case 10: <D.18643>, case 11: <D.18644>, case 12: <D.18645>, case 13: <D.18646>, case 14: <D.18658>, case 15: <D.18651>, case 17: <D.18666>, case 18: <D.18659>, case 19: <D.18669>, case 20: <D.18664>, case 21: <D.18655>, case 22: <D.18665>, case 24: <D.18647>, case 25: <D.18648>, case 27: <D.18652>, case 28: <D.18660>, case 29: <D.18661>, case 30: <D.18670>>
  <D.18632>:
  D.22177 = candidate->type;
  D.22178 = D.22177 == 1;
  D.22172 = (gboolean) D.22178;
  return D.22172;
  <D.18633>:
  <D.18634>:
  <D.18635>:
  if (strict != 0) goto <D.22179>; else goto <D.22180>;
  <D.22179>:
  D.22177 = candidate->type;
  D.22185 = D.22177 + 252;
  if (D.22185 <= 1) goto <D.22182>; else goto <D.22186>;
  <D.22186>:
  D.22177 = candidate->type;
  if (D.22177 == 2) goto <D.22182>; else goto <D.22183>;
  <D.22182>:
  iftmp.40 = 1;
  goto <D.22184>;
  <D.22183>:
  iftmp.40 = 0;
  <D.22184>:
  D.22172 = iftmp.40;
  return D.22172;
  <D.22180>:
  <D.18636>:
  <D.18637>:
  <D.18638>:
  if (strict != 0) goto <D.22187>; else goto <D.22188>;
  <D.22187>:
  D.22177 = candidate->type;
  D.22193 = D.22177 + 250;
  if (D.22193 <= 1) goto <D.22190>; else goto <D.22194>;
  <D.22194>:
  D.22177 = candidate->type;
  if (D.22177 == 3) goto <D.22190>; else goto <D.22191>;
  <D.22190>:
  iftmp.41 = 1;
  goto <D.22192>;
  <D.22191>:
  iftmp.41 = 0;
  <D.22192>:
  D.22172 = iftmp.41;
  return D.22172;
  <D.22188>:
  <D.18639>:
  <D.18640>:
  {
    gboolean is_native_int;
    gboolean is_int4;

    D.22177 = candidate->type;
    D.22195 = D.22177 + 232;
    D.22196 = D.22195 <= 1;
    is_native_int = (gboolean) D.22196;
    D.22177 = candidate->type;
    D.22197 = D.22177 + 248;
    D.22198 = D.22197 <= 1;
    is_int4 = (gboolean) D.22198;
    if (strict != 0) goto <D.22199>; else goto <D.22200>;
    <D.22199>:
    if (is_native_int != 0) goto <D.22202>; else goto <D.22205>;
    <D.22205>:
    if (is_int4 != 0) goto <D.22202>; else goto <D.22203>;
    <D.22202>:
    iftmp.42 = 1;
    goto <D.22204>;
    <D.22203>:
    iftmp.42 = 0;
    <D.22204>:
    D.22172 = iftmp.42;
    return D.22172;
    <D.22200>:
    if (is_native_int != 0) goto <D.22207>; else goto <D.22210>;
    <D.22210>:
    D.22211 = get_stack_type (candidate);
    if (D.22211 == 1) goto <D.22207>; else goto <D.22208>;
    <D.22207>:
    iftmp.43 = 1;
    goto <D.22209>;
    <D.22208>:
    iftmp.43 = 0;
    <D.22209>:
    D.22172 = iftmp.43;
    return D.22172;
  }
  <D.18643>:
  <D.18644>:
  D.22177 = candidate->type;
  D.22212 = D.22177 + 246;
  D.22213 = D.22212 <= 1;
  D.22172 = (gboolean) D.22213;
  return D.22172;
  <D.18645>:
  <D.18646>:
  if (strict != 0) goto <D.22214>; else goto <D.22215>;
  <D.22214>:
  D.22177 = candidate->type;
  D.22175 = target->type;
  D.22216 = D.22177 == D.22175;
  D.22172 = (gboolean) D.22216;
  return D.22172;
  <D.22215>:
  D.22177 = candidate->type;
  D.22217 = D.22177 + 244;
  D.22218 = D.22217 <= 1;
  D.22172 = (gboolean) D.22218;
  return D.22172;
  <D.18647>:
  <D.18648>:
  {
    gboolean is_native_int;
    gboolean is_int4;

    D.22177 = candidate->type;
    D.22195 = D.22177 + 232;
    D.22196 = D.22195 <= 1;
    is_native_int = (gboolean) D.22196;
    D.22177 = candidate->type;
    D.22197 = D.22177 + 248;
    D.22198 = D.22197 <= 1;
    is_int4 = (gboolean) D.22198;
    if (strict != 0) goto <D.22219>; else goto <D.22220>;
    <D.22219>:
    if (is_native_int != 0) goto <D.22222>; else goto <D.22225>;
    <D.22225>:
    if (is_int4 != 0) goto <D.22222>; else goto <D.22223>;
    <D.22222>:
    iftmp.44 = 1;
    goto <D.22224>;
    <D.22223>:
    iftmp.44 = 0;
    <D.22224>:
    D.22172 = iftmp.44;
    return D.22172;
    <D.22220>:
    if (is_native_int != 0) goto <D.22227>; else goto <D.22230>;
    <D.22230>:
    D.22231 = get_stack_type (candidate);
    if (D.22231 == 1) goto <D.22227>; else goto <D.22228>;
    <D.22227>:
    iftmp.45 = 1;
    goto <D.22229>;
    <D.22228>:
    iftmp.45 = 0;
    <D.22229>:
    D.22172 = iftmp.45;
    return D.22172;
  }
  <D.18651>:
  D.22177 = candidate->type;
  if (D.22177 != 15) goto <D.22232>; else goto <D.22233>;
  <D.22232>:
  D.22172 = 0;
  return D.22172;
  <D.22233>:
  D.22234 = target->data.type;
  D.22235 = candidate->data.type;
  D.22172 = verify_type_compatibility_full (ctx, D.22234, D.22235, 1);
  return D.22172;
  <D.18652>:
  {
    struct MonoMethodSignature * left;
    struct MonoMethodSignature * right;

    D.22177 = candidate->type;
    if (D.22177 != 27) goto <D.22236>; else goto <D.22237>;
    <D.22236>:
    D.22172 = 0;
    return D.22172;
    <D.22237>:
    left = mono_type_get_signature (target);
    right = mono_type_get_signature (candidate);
    D.22241 = mono_metadata_signature_equal (left, right);
    if (D.22241 != 0) goto <D.22242>; else goto <D.22239>;
    <D.22242>:
    D.22243 = BIT_FIELD_REF <*left, 64, 64>;
    D.22244 = BIT_FIELD_REF <*right, 64, 64>;
    D.22245 = D.22243 ^ D.22244;
    D.22246 = D.22245 & 64512;
    if (D.22246 == 0) goto <D.22247>; else goto <D.22239>;
    <D.22247>:
    iftmp.46 = 1;
    goto <D.22240>;
    <D.22239>:
    iftmp.46 = 0;
    <D.22240>:
    D.22172 = iftmp.46;
    return D.22172;
  }
  <D.18655>:
  {
    struct MonoClass * target_klass;
    struct MonoClass * candidate_klass;

    D.22248 = mono_type_is_enum_type (target);
    if (D.22248 != 0) goto <D.22249>; else goto <D.22250>;
    <D.22249>:
    target = mono_type_get_underlying_type_any (target);
    if (target == 0B) goto <D.22251>; else goto <D.22252>;
    <D.22251>:
    D.22172 = 0;
    return D.22172;
    <D.22252>:
    goto handle_enum;
    <D.22250>:
    D.22253 = mono_type_is_generic_argument (original_candidate);
    if (D.22253 != 0) goto <D.22254>; else goto <D.22255>;
    <D.22254>:
    D.22172 = 0;
    return D.22172;
    <D.22255>:
    target_klass = mono_class_from_mono_type (target);
    candidate_klass = mono_class_from_mono_type (candidate);
    D.22256 = mono_class_is_nullable (target_klass);
    if (D.22256 != 0) goto <D.22257>; else goto <D.22258>;
    <D.22257>:
    D.22259 = mono_class_is_nullable (candidate_klass);
    if (D.22259 == 0) goto <D.22260>; else goto <D.22261>;
    <D.22260>:
    D.22172 = 0;
    return D.22172;
    <D.22261>:
    D.22262 = target_klass == candidate_klass;
    D.22172 = (gboolean) D.22262;
    return D.22172;
    <D.22258>:
    D.22172 = verifier_class_is_assignable_from (target_klass, candidate_klass);
    return D.22172;
  }
  <D.18658>:
  D.22177 = candidate->type;
  D.22263 = D.22177 == 14;
  D.22172 = (gboolean) D.22263;
  return D.22172;
  <D.18659>:
  D.22264 = mono_type_is_generic_argument (original_candidate);
  if (D.22264 != 0) goto <D.22265>; else goto <D.22266>;
  <D.22265>:
  D.22172 = 0;
  return D.22172;
  <D.22266>:
  D.22177 = candidate->type;
  if (D.22177 == 17) goto <D.22267>; else goto <D.22268>;
  <D.22267>:
  D.22172 = 0;
  return D.22172;
  <D.22268>:
  D.22269 = target->data.klass;
  D.22270 = mono_class_from_mono_type (original_candidate);
  D.22172 = verifier_class_is_assignable_from (D.22269, D.22270);
  return D.22172;
  <D.18660>:
  D.22172 = mono_type_is_reference (candidate);
  return D.22172;
  <D.18661>:
  {
    struct MonoClass * left;
    struct MonoClass * right;

    D.22177 = candidate->type;
    if (D.22177 != 29) goto <D.22271>; else goto <D.22272>;
    <D.22271>:
    D.22172 = 0;
    return D.22172;
    <D.22272>:
    left = mono_class_from_mono_type (target);
    right = mono_class_from_mono_type (candidate);
    D.22172 = verifier_class_is_assignable_from (left, right);
    return D.22172;
  }
  <D.18664>:
  D.22177 = candidate->type;
  if (D.22177 != 20) goto <D.22273>; else goto <D.22274>;
  <D.22273>:
  D.22172 = 0;
  return D.22172;
  <D.22274>:
  D.22172 = is_array_type_compatible (target, candidate);
  return D.22172;
  <D.18665>:
  D.22177 = candidate->type;
  D.22275 = D.22177 == 22;
  D.22172 = (gboolean) D.22275;
  return D.22172;
  <D.18666>:
  {
    struct MonoClass * target_klass;
    struct MonoClass * candidate_klass;

    D.22177 = candidate->type;
    if (D.22177 == 18) goto <D.22276>; else goto <D.22277>;
    <D.22276>:
    D.22172 = 0;
    return D.22172;
    <D.22277>:
    target_klass = mono_class_from_mono_type (target);
    candidate_klass = mono_class_from_mono_type (candidate);
    if (target_klass == candidate_klass) goto <D.22278>; else goto <D.22279>;
    <D.22278>:
    D.22172 = 1;
    return D.22172;
    <D.22279>:
    D.22280 = mono_type_is_enum_type (target);
    if (D.22280 != 0) goto <D.22281>; else goto <D.22282>;
    <D.22281>:
    target = mono_type_get_underlying_type_any (target);
    if (target == 0B) goto <D.22283>; else goto <D.22284>;
    <D.22283>:
    D.22172 = 0;
    return D.22172;
    <D.22284>:
    goto handle_enum;
    <D.22282>:
    D.22172 = 0;
    return D.22172;
  }
  <D.18669>:
  D.22177 = candidate->type;
  if (D.22177 != 19) goto <D.22285>; else goto <D.22286>;
  <D.22285>:
  D.22172 = 0;
  return D.22172;
  <D.22286>:
  D.22287 = candidate->data.generic_param;
  D.22288 = D.22287->num;
  D.22289 = target->data.generic_param;
  D.22290 = D.22289->num;
  D.22291 = D.22288 == D.22290;
  D.22172 = (gboolean) D.22291;
  return D.22172;
  <D.18670>:
  D.22177 = candidate->type;
  if (D.22177 != 30) goto <D.22292>; else goto <D.22293>;
  <D.22292>:
  D.22172 = 0;
  return D.22172;
  <D.22293>:
  D.22287 = candidate->data.generic_param;
  D.22288 = D.22287->num;
  D.22289 = target->data.generic_param;
  D.22290 = D.22289->num;
  D.22291 = D.22288 == D.22290;
  D.22172 = (gboolean) D.22291;
  return D.22172;
  <D.18671>:
  monoeg_assertion_message ("* Assertion: should not be reached at %s:%d\n", "verify.c", 2389);
  D.22172 = 0;
  return D.22172;
  D.22172 = 1;
  return D.22172;
}


stack_slot_is_boxed_value (struct ILStackDesc * value)
{
  gboolean D.22295;
  int D.22296;
  int D.22297;
  _Bool D.22298;

  D.22296 = value->stype;
  D.22297 = D.22296 & 4096;
  D.22298 = D.22297 != 0;
  D.22295 = (gboolean) D.22298;
  return D.22295;
}


is_compatible_boxed_valuetype (struct VerifyContext * ctx, struct MonoType * type, struct MonoType * candidate, struct ILStackDesc * stack, gboolean strict)
{
  int D.22300;
  gboolean D.22303;
  long unsigned int D.22306;
  long unsigned int D.22307;
  long unsigned int D.22309;
  long unsigned int D.22310;
  int D.22311;
  struct MonoGenericParamInfo * iftmp.47;
  struct MonoGenericContainer * D.22317;
  struct MonoClass * D.22321;
  int D.22322;
  int D.22326;
  int iftmp.48;
  int D.22334;
  struct MonoClass * D.22336;
  struct MonoClass * D.22337;
  int D.22338;

  D.22300 = stack_slot_is_boxed_value (stack);
  if (D.22300 == 0) goto <D.22301>; else goto <D.22302>;
  <D.22301>:
  D.22303 = 0;
  return D.22303;
  <D.22302>:
  D.22306 = BIT_FIELD_REF <*type, 64, 64>;
  D.22307 = D.22306 & 8589934592;
  if (D.22307 != 0) goto <D.22304>; else goto <D.22308>;
  <D.22308>:
  D.22309 = BIT_FIELD_REF <*candidate, 64, 64>;
  D.22310 = D.22309 & 8589934592;
  if (D.22310 != 0) goto <D.22304>; else goto <D.22305>;
  <D.22304>:
  D.22303 = 0;
  return D.22303;
  <D.22305>:
  D.22311 = mono_type_is_generic_argument (candidate);
  if (D.22311 != 0) goto <D.22312>; else goto <D.22313>;
  <D.22312>:
  {
    struct MonoGenericParam * param;
    struct MonoClass * * class;

    param = get_generic_param (ctx, candidate);
    if (param == 0B) goto <D.22314>; else goto <D.22315>;
    <D.22314>:
    D.22303 = 0;
    return D.22303;
    <D.22315>:
    D.22317 = param->owner;
    if (D.22317 != 0B) goto <D.22318>; else goto <D.22319>;
    <D.22318>:
    iftmp.47 = &MEM[(struct MonoGenericParamFull *)param].info;
    goto <D.22320>;
    <D.22319>:
    iftmp.47 = 0B;
    <D.22320>:
    class = iftmp.47->constraints;
    goto <D.18706>;
    <D.18705>:
    D.22321 = *class;
    D.22322 = recursive_boxed_constraint_type_check (ctx, type, D.22321, 256);
    if (D.22322 != 0) goto <D.22323>; else goto <D.22324>;
    <D.22323>:
    D.22303 = 1;
    return D.22303;
    <D.22324>:
    class = class + 8;
    <D.18706>:
    if (class != 0B) goto <D.22325>; else goto <D.18707>;
    <D.22325>:
    D.22321 = *class;
    if (D.22321 != 0B) goto <D.18705>; else goto <D.18707>;
    <D.18707>:
  }
  <D.22313>:
  D.22326 = mono_type_is_generic_argument (type);
  if (D.22326 != 0) goto <D.22327>; else goto <D.22328>;
  <D.22327>:
  D.22303 = 0;
  return D.22303;
  <D.22328>:
  if (strict == 0) goto <D.22329>; else goto <D.22330>;
  <D.22329>:
  D.22303 = 1;
  return D.22303;
  <D.22330>:
  D.22334 = mono_type_is_reference (type);
  if (D.22334 != 0) goto <D.22335>; else goto <D.22332>;
  <D.22335>:
  D.22336 = mono_class_from_mono_type (type);
  D.22337 = mono_class_from_mono_type (candidate);
  D.22338 = verifier_class_is_assignable_from (D.22336, D.22337);
  if (D.22338 != 0) goto <D.22339>; else goto <D.22332>;
  <D.22339>:
  iftmp.48 = 1;
  goto <D.22333>;
  <D.22332>:
  iftmp.48 = 0;
  <D.22333>:
  D.22303 = iftmp.48;
  return D.22303;
}


get_generic_param (struct VerifyContext * ctx, struct MonoType * param)
{
  struct MonoGenericParam * D.22341;
  unsigned char D.22342;
  struct MonoGenericContext * D.22347;
  struct MonoGenericInst * D.22348;
  <unnamed-unsigned:22> D.22350;
  int D.22351;
  int D.22352;
  gchar * D.22353;
  struct GSList * D.22354;
  struct GSList * D.22355;
  struct MonoGenericParam * D.22356;
  struct MonoType * D.22357;
  struct MonoGenericInst * D.22360;
  <unnamed-unsigned:22> D.22362;
  int D.22363;
  gchar * D.22364;
  struct GSList * D.22365;
  struct MonoType * D.22366;
  guint16 param_num;

  D.22341 = param->data.generic_param;
  param_num = D.22341->num;
  D.22342 = param->type;
  if (D.22342 == 19) goto <D.22343>; else goto <D.22344>;
  <D.22343>:
  D.22347 = ctx->generic_context;
  D.22348 = D.22347->class_inst;
  if (D.22348 == 0B) goto <D.22345>; else goto <D.22349>;
  <D.22349>:
  D.22347 = ctx->generic_context;
  D.22348 = D.22347->class_inst;
  D.22350 = D.22348->type_argc;
  D.22351 = (int) D.22350;
  D.22352 = (int) param_num;
  if (D.22351 <= D.22352) goto <D.22345>; else goto <D.22346>;
  <D.22345>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (24);
    vinfo->info.status = 1;
    D.22352 = (int) param_num;
    D.22353 = monoeg_g_strdup_printf ("Invalid generic type argument %d", D.22352);
    vinfo->info.message = D.22353;
    vinfo->exception_type = 3;
    D.22354 = ctx->list;
    D.22355 = monoeg_g_slist_prepend (D.22354, vinfo);
    ctx->list = D.22355;
  }
  ctx->valid = 0;
  D.22356 = 0B;
  return D.22356;
  <D.22346>:
  D.22347 = ctx->generic_context;
  D.22348 = D.22347->class_inst;
  D.22352 = (int) param_num;
  D.22357 = D.22348->type_argv[D.22352];
  D.22356 = D.22357->data.generic_param;
  return D.22356;
  <D.22344>:
  D.22347 = ctx->generic_context;
  D.22360 = D.22347->method_inst;
  if (D.22360 == 0B) goto <D.22358>; else goto <D.22361>;
  <D.22361>:
  D.22347 = ctx->generic_context;
  D.22360 = D.22347->method_inst;
  D.22362 = D.22360->type_argc;
  D.22363 = (int) D.22362;
  D.22352 = (int) param_num;
  if (D.22363 <= D.22352) goto <D.22358>; else goto <D.22359>;
  <D.22358>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (24);
    vinfo->info.status = 1;
    D.22352 = (int) param_num;
    D.22364 = monoeg_g_strdup_printf ("Invalid generic method argument %d", D.22352);
    vinfo->info.message = D.22364;
    vinfo->exception_type = 3;
    D.22354 = ctx->list;
    D.22365 = monoeg_g_slist_prepend (D.22354, vinfo);
    ctx->list = D.22365;
  }
  ctx->valid = 0;
  D.22356 = 0B;
  return D.22356;
  <D.22359>:
  D.22347 = ctx->generic_context;
  D.22360 = D.22347->method_inst;
  D.22352 = (int) param_num;
  D.22366 = D.22360->type_argv[D.22352];
  D.22356 = D.22366->data.generic_param;
  return D.22356;
}


recursive_boxed_constraint_type_check (struct VerifyContext * ctx, struct MonoType * type, struct MonoClass * constraint_class, int recursion_level)
{
  gboolean D.22370;
  struct MonoType * D.22371;
  int D.22372;
  int D.22375;
  struct MonoGenericParamInfo * iftmp.49;
  struct MonoGenericContainer * D.22381;
  struct MonoClass * D.22385;
  int D.22386;
  int D.22387;
  struct MonoType * constraint_type;

  constraint_type = &constraint_class->byval_arg;
  if (recursion_level <= 0) goto <D.22368>; else goto <D.22369>;
  <D.22368>:
  D.22370 = 0;
  return D.22370;
  <D.22369>:
  D.22371 = mono_type_get_type_byval (constraint_type);
  D.22372 = verify_type_compatibility_full (ctx, type, D.22371, 0);
  if (D.22372 != 0) goto <D.22373>; else goto <D.22374>;
  <D.22373>:
  D.22370 = 1;
  return D.22370;
  <D.22374>:
  D.22375 = mono_type_is_generic_argument (constraint_type);
  if (D.22375 != 0) goto <D.22376>; else goto <D.22377>;
  <D.22376>:
  {
    struct MonoGenericParam * param;
    struct MonoClass * * class;

    param = get_generic_param (ctx, constraint_type);
    if (param == 0B) goto <D.22378>; else goto <D.22379>;
    <D.22378>:
    D.22370 = 0;
    return D.22370;
    <D.22379>:
    D.22381 = param->owner;
    if (D.22381 != 0B) goto <D.22382>; else goto <D.22383>;
    <D.22382>:
    iftmp.49 = &MEM[(struct MonoGenericParamFull *)param].info;
    goto <D.22384>;
    <D.22383>:
    iftmp.49 = 0B;
    <D.22384>:
    class = iftmp.49->constraints;
    goto <D.18694>;
    <D.18693>:
    D.22385 = *class;
    D.22386 = recursion_level + -1;
    D.22387 = recursive_boxed_constraint_type_check (ctx, type, D.22385, D.22386);
    if (D.22387 != 0) goto <D.22388>; else goto <D.22389>;
    <D.22388>:
    D.22370 = 1;
    return D.22370;
    <D.22389>:
    class = class + 8;
    <D.18694>:
    if (class != 0B) goto <D.22390>; else goto <D.18695>;
    <D.22390>:
    D.22385 = *class;
    if (D.22385 != 0B) goto <D.18693>; else goto <D.18695>;
    <D.18695>:
  }
  <D.22377>:
  D.22370 = 0;
  return D.22370;
}


stack_slot_full_name (struct ILStackDesc * value)
{
  struct MonoType * D.22392;
  char * D.22393;
  char * type_name;
  char * stack_name;
  char * res;

  D.22392 = value->type;
  type_name = mono_type_full_name (D.22392);
  stack_name = stack_slot_stack_type_full_name (value);
  res = monoeg_g_strdup_printf ("%s (%s)", type_name, stack_name);
  monoeg_g_free (type_name);
  monoeg_g_free (stack_name);
  D.22393 = res;
  return D.22393;
}


stack_slot_stack_type_full_name (struct ILStackDesc * value)
{
  int D.22395;
  int D.22396;
  int D.22399;
  int D.22404;
  int D.22409;
  int D.22414;
  int D.22419;
  struct MonoType * D.22424;
  int D.22425;
  int D.22428;
  const char * D.22437;
  char * D.22438;
  struct GString * str;
  char * result;
  gboolean has_pred;
  gboolean first;

  str = monoeg_g_string_new ("");
  has_pred = 0;
  first = 1;
  D.22395 = value->stype;
  D.22396 = D.22395 & 15;
  D.22395 = value->stype;
  if (D.22396 != D.22395) goto <D.22397>; else goto <D.22398>;
  <D.22397>:
  monoeg_g_string_append (str, "[");
  D.22399 = stack_slot_is_this_pointer (value);
  if (D.22399 != 0) goto <D.22400>; else goto <D.22401>;
  <D.22400>:
  if (first == 0) goto <D.22402>; else goto <D.22403>;
  <D.22402>:
  monoeg_g_string_append (str, ", ");
  <D.22403>:
  monoeg_g_string_append (str, "this");
  first = 0;
  <D.22401>:
  D.22404 = stack_slot_is_boxed_value (value);
  if (D.22404 != 0) goto <D.22405>; else goto <D.22406>;
  <D.22405>:
  if (first == 0) goto <D.22407>; else goto <D.22408>;
  <D.22407>:
  monoeg_g_string_append (str, ", ");
  <D.22408>:
  monoeg_g_string_append (str, "boxed");
  first = 0;
  <D.22406>:
  D.22409 = stack_slot_is_null_literal (value);
  if (D.22409 != 0) goto <D.22410>; else goto <D.22411>;
  <D.22410>:
  if (first == 0) goto <D.22412>; else goto <D.22413>;
  <D.22412>:
  monoeg_g_string_append (str, ", ");
  <D.22413>:
  monoeg_g_string_append (str, "null");
  first = 0;
  <D.22411>:
  D.22414 = stack_slot_is_managed_mutability_pointer (value);
  if (D.22414 != 0) goto <D.22415>; else goto <D.22416>;
  <D.22415>:
  if (first == 0) goto <D.22417>; else goto <D.22418>;
  <D.22417>:
  monoeg_g_string_append (str, ", ");
  <D.22418>:
  monoeg_g_string_append (str, "cmmp");
  first = 0;
  <D.22416>:
  D.22419 = stack_slot_is_managed_pointer (value);
  if (D.22419 != 0) goto <D.22420>; else goto <D.22421>;
  <D.22420>:
  if (first == 0) goto <D.22422>; else goto <D.22423>;
  <D.22422>:
  monoeg_g_string_append (str, ", ");
  <D.22423>:
  monoeg_g_string_append (str, "mp");
  first = 0;
  <D.22421>:
  has_pred = 1;
  <D.22398>:
  D.22424 = value->type;
  D.22425 = mono_type_is_generic_argument (D.22424);
  if (D.22425 != 0) goto <D.22426>; else goto <D.22427>;
  <D.22426>:
  D.22428 = stack_slot_is_boxed_value (value);
  if (D.22428 == 0) goto <D.22429>; else goto <D.22430>;
  <D.22429>:
  if (has_pred == 0) goto <D.22431>; else goto <D.22432>;
  <D.22431>:
  monoeg_g_string_append (str, "[");
  <D.22432>:
  if (first == 0) goto <D.22433>; else goto <D.22434>;
  <D.22433>:
  monoeg_g_string_append (str, ", ");
  <D.22434>:
  monoeg_g_string_append (str, "unboxed");
  has_pred = 1;
  <D.22430>:
  <D.22427>:
  if (has_pred != 0) goto <D.22435>; else goto <D.22436>;
  <D.22435>:
  monoeg_g_string_append (str, "] ");
  <D.22436>:
  D.22437 = stack_slot_get_name (value);
  monoeg_g_string_append (str, D.22437);
  result = str->str;
  monoeg_g_string_free (str, 0);
  D.22438 = result;
  return D.22438;
}


stack_slot_is_this_pointer (struct ILStackDesc * value)
{
  gboolean D.22440;
  int D.22441;
  int D.22442;
  _Bool D.22443;

  D.22441 = value->stype;
  D.22442 = D.22441 & 2048;
  D.22443 = D.22442 != 0;
  D.22440 = (gboolean) D.22443;
  return D.22440;
}


__attribute__((__unused__))
stack_slot_is_managed_mutability_pointer (struct ILStackDesc * value)
{
  gboolean D.22445;
  int D.22446;
  int D.22447;
  _Bool D.22448;

  D.22446 = value->stype;
  D.22447 = D.22446 & 512;
  D.22448 = D.22447 != 0;
  D.22445 = (gboolean) D.22448;
  return D.22445;
}


stack_slot_get_name (struct ILStackDesc * value)
{
  const char * D.22450;
  int D.22451;
  int D.22452;

  D.22451 = value->stype;
  D.22452 = D.22451 & 15;
  D.22450 = type_names[D.22452];
  return D.22450;
}


stack_slot_is_managed_pointer (struct ILStackDesc * value)
{
  gboolean D.22454;
  int D.22455;
  int D.22456;
  _Bool D.22457;

  D.22455 = value->stype;
  D.22456 = D.22455 & 256;
  D.22457 = D.22456 != 0;
  D.22454 = (gboolean) D.22457;
  return D.22454;
}


do_binop (struct VerifyContext * ctx, unsigned int opcode, const unsigned char[6] * table)
{
  int D.22459;
  int D.22462;
  int D.22465;
  long unsigned int D.22468;
  long unsigned int D.22469;
  const unsigned char[6] * D.22470;
  int D.22475;
  int D.22477;
  int D.22478;
  const char * D.22479;
  const char * D.22480;
  gchar * D.22481;
  struct GSList * D.22482;
  struct GSList * D.22483;
  int D.22484;
  signed char res.50;
  const char * D.22493;
  const char * D.22494;
  gchar * D.22495;
  struct GSList * D.22496;
  int D.22508;
  struct ILStackDesc * a;
  struct ILStackDesc * b;
  struct ILStackDesc * top;
  int idxa;
  int idxb;
  int complexMerge;
  unsigned char res;

  complexMerge = 0;
  D.22459 = check_underflow (ctx, 2);
  if (D.22459 == 0) goto <D.22460>; else goto <D.22461>;
  <D.22460>:
  return;
  <D.22461>:
  b = stack_pop (ctx);
  a = stack_pop (ctx);
  idxa = stack_slot_get_underlying_type (a);
  D.22462 = stack_slot_is_managed_pointer (a);
  if (D.22462 != 0) goto <D.22463>; else goto <D.22464>;
  <D.22463>:
  idxa = 5;
  complexMerge = 1;
  <D.22464>:
  idxb = stack_slot_get_underlying_type (b);
  D.22465 = stack_slot_is_managed_pointer (b);
  if (D.22465 != 0) goto <D.22466>; else goto <D.22467>;
  <D.22466>:
  idxb = 5;
  complexMerge = 2;
  <D.22467>:
  idxa = idxa + -1;
  idxb = idxb + -1;
  D.22468 = (long unsigned int) idxa;
  D.22469 = D.22468 * 6;
  D.22470 = table + D.22469;
  res = *D.22470[idxb];
  top = stack_push (ctx);
  if (res == 0) goto <D.22471>; else goto <D.22472>;
  <D.22471>:
  D.22475 = ctx->verifiable;
  if (D.22475 != 0) goto <D.22473>; else goto <D.22476>;
  <D.22476>:
  D.22477 = ctx->level;
  D.22478 = D.22477 & 128;
  if (D.22478 != 0) goto <D.22473>; else goto <D.22474>;
  <D.22473>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (24);
    vinfo->info.status = 8;
    D.22479 = stack_slot_get_name (a);
    D.22480 = stack_slot_get_name (b);
    D.22481 = monoeg_g_strdup_printf ("Binary instruction applyed to ill formed stack (%s x %s)", D.22479, D.22480);
    vinfo->info.message = D.22481;
    vinfo->exception_type = 4;
    D.22482 = ctx->list;
    D.22483 = monoeg_g_slist_prepend (D.22482, vinfo);
    ctx->list = D.22483;
  }
  ctx->verifiable = 0;
  D.22477 = ctx->level;
  D.22484 = D.22477 & 16;
  if (D.22484 != 0) goto <D.22485>; else goto <D.22486>;
  <D.22485>:
  ctx->valid = 0;
  <D.22486>:
  <D.22474>:
  copy_stack_value (top, a);
  return;
  <D.22472>:
  res.50 = (signed char) res;
  if (res.50 < 0) goto <D.22488>; else goto <D.22489>;
  <D.22488>:
  D.22475 = ctx->verifiable;
  if (D.22475 != 0) goto <D.22490>; else goto <D.22492>;
  <D.22492>:
  D.22477 = ctx->level;
  D.22478 = D.22477 & 128;
  if (D.22478 != 0) goto <D.22490>; else goto <D.22491>;
  <D.22490>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (24);
    vinfo->info.status = 8;
    D.22493 = stack_slot_get_name (a);
    D.22494 = stack_slot_get_name (b);
    D.22495 = monoeg_g_strdup_printf ("Binary instruction is not verifiable (%s x %s)", D.22493, D.22494);
    vinfo->info.message = D.22495;
    vinfo->exception_type = 4;
    D.22482 = ctx->list;
    D.22496 = monoeg_g_slist_prepend (D.22482, vinfo);
    ctx->list = D.22496;
  }
  ctx->verifiable = 0;
  D.22477 = ctx->level;
  D.22484 = D.22477 & 16;
  if (D.22484 != 0) goto <D.22497>; else goto <D.22498>;
  <D.22497>:
  ctx->valid = 0;
  <D.22498>:
  <D.22491>:
  res = res & 127;
  <D.22489>:
  if (complexMerge != 0) goto <D.22501>; else goto <D.22499>;
  <D.22501>:
  if (res == 5) goto <D.22502>; else goto <D.22499>;
  <D.22502>:
  if (complexMerge == 1) goto <D.22503>; else goto <D.22504>;
  <D.22503>:
  copy_stack_value (top, a);
  goto <D.22505>;
  <D.22504>:
  if (complexMerge == 2) goto <D.22506>; else goto <D.22507>;
  <D.22506>:
  copy_stack_value (top, b);
  <D.22507>:
  <D.22505>:
  goto <D.22500>;
  <D.22499>:
  D.22508 = (int) res;
  top->stype = D.22508;
  <D.22500>:
}


stack_pop (struct VerifyContext * ctx)
{
  short unsigned int D.22510;
  _Bool D.22511;
  long int D.22512;
  long int D.22513;
  struct ILStackDesc * D.22516;
  short unsigned int D.22517;
  long unsigned int D.22518;
  long unsigned int D.22519;
  int D.22520;
  int D.22521;
  int D.22526;
  int D.22528;
  int D.22529;
  unsigned int D.22530;
  gchar * D.22531;
  struct GSList * D.22532;
  struct GSList * D.22533;
  int D.22534;
  struct ILStackDesc * D.22537;
  struct ILStackDesc * ret;

  D.22510 = ctx->eval.size;
  D.22511 = D.22510 == 0;
  D.22512 = (long int) D.22511;
  D.22513 = __builtin_expect (D.22512, 0);
  if (D.22513 != 0) goto <D.22514>; else goto <D.22515>;
  <D.22514>:
  monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "verify.c", 1610, "ctx->eval.size > 0");
  <D.22515>:
  D.22516 = ctx->eval.stack;
  D.22510 = ctx->eval.size;
  D.22517 = D.22510 + 65535;
  ctx->eval.size = D.22517;
  D.22510 = ctx->eval.size;
  D.22518 = (long unsigned int) D.22510;
  D.22519 = D.22518 * 24;
  ret = D.22516 + D.22519;
  D.22520 = ret->stype;
  D.22521 = D.22520 & 8192;
  if (D.22521 != 0) goto <D.22522>; else goto <D.22523>;
  <D.22522>:
  D.22526 = ctx->verifiable;
  if (D.22526 != 0) goto <D.22524>; else goto <D.22527>;
  <D.22527>:
  D.22528 = ctx->level;
  D.22529 = D.22528 & 128;
  if (D.22529 != 0) goto <D.22524>; else goto <D.22525>;
  <D.22524>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (24);
    vinfo->info.status = 8;
    D.22530 = ctx->ip_offset;
    D.22531 = monoeg_g_strdup_printf ("Found use of uninitialized \'this ptr\' ref at 0x%04x", D.22530);
    vinfo->info.message = D.22531;
    vinfo->exception_type = 4;
    D.22532 = ctx->list;
    D.22533 = monoeg_g_slist_prepend (D.22532, vinfo);
    ctx->list = D.22533;
  }
  ctx->verifiable = 0;
  D.22528 = ctx->level;
  D.22534 = D.22528 & 16;
  if (D.22534 != 0) goto <D.22535>; else goto <D.22536>;
  <D.22535>:
  ctx->valid = 0;
  <D.22536>:
  <D.22525>:
  <D.22523>:
  D.22537 = ret;
  return D.22537;
}


stack_slot_get_underlying_type (struct ILStackDesc * value)
{
  gint32 D.22539;
  int D.22540;

  D.22540 = value->stype;
  D.22539 = D.22540 & 15;
  return D.22539;
}


stack_pop_safe (struct VerifyContext * ctx)
{
  short unsigned int D.22542;
  _Bool D.22543;
  long int D.22544;
  long int D.22545;
  struct ILStackDesc * D.22548;
  struct ILStackDesc * D.22549;
  short unsigned int D.22550;
  long unsigned int D.22551;
  long unsigned int D.22552;

  D.22542 = ctx->eval.size;
  D.22543 = D.22542 == 0;
  D.22544 = (long int) D.22543;
  D.22545 = __builtin_expect (D.22544, 0);
  if (D.22545 != 0) goto <D.22546>; else goto <D.22547>;
  <D.22546>:
  monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "verify.c", 1623, "ctx->eval.size > 0");
  <D.22547>:
  D.22549 = ctx->eval.stack;
  D.22542 = ctx->eval.size;
  D.22550 = D.22542 + 65535;
  ctx->eval.size = D.22550;
  D.22542 = ctx->eval.size;
  D.22551 = (long unsigned int) D.22542;
  D.22552 = D.22551 * 24;
  D.22548 = D.22549 + D.22552;
  return D.22548;
}


do_ret (struct VerifyContext * ctx)
{
  struct MonoMethodSignature * D.22554;
  unsigned char D.22555;
  int D.22558;
  struct MonoType * D.22561;
  int D.22562;
  int D.22567;
  int D.22569;
  int D.22570;
  unsigned int D.22571;
  gchar * D.22572;
  struct GSList * D.22573;
  struct GSList * D.22574;
  int D.22575;
  long unsigned int D.22580;
  long unsigned int D.22581;
  int D.22584;
  int D.22586;
  gchar * D.22590;
  struct GSList * D.22591;
  short unsigned int D.22594;
  int D.22600;
  gchar * D.22601;
  struct GSList * D.22602;
  struct MonoMethodHeader * D.22605;
  int D.22606;
  gchar * D.22612;
  struct GSList * D.22613;
  struct MonoType * ret;

  D.22554 = ctx->signature;
  ret = D.22554->ret;
  D.22555 = ret->type;
  if (D.22555 != 1) goto <D.22556>; else goto <D.22557>;
  <D.22556>:
  {
    struct ILStackDesc * top;

    D.22558 = check_underflow (ctx, 1);
    if (D.22558 == 0) goto <D.22559>; else goto <D.22560>;
    <D.22559>:
    return;
    <D.22560>:
    top = stack_pop (ctx);
    D.22554 = ctx->signature;
    D.22561 = D.22554->ret;
    D.22562 = verify_stack_type_compatibility (ctx, D.22561, top);
    if (D.22562 == 0) goto <D.22563>; else goto <D.22564>;
    <D.22563>:
    {
      char * ret_type;
      char * stack_type;

      D.22554 = ctx->signature;
      D.22561 = D.22554->ret;
      ret_type = mono_type_full_name (D.22561);
      stack_type = stack_slot_full_name (top);
      D.22567 = ctx->verifiable;
      if (D.22567 != 0) goto <D.22565>; else goto <D.22568>;
      <D.22568>:
      D.22569 = ctx->level;
      D.22570 = D.22569 & 128;
      if (D.22570 != 0) goto <D.22565>; else goto <D.22566>;
      <D.22565>:
      {
        struct MonoVerifyInfoExtended * vinfo;

        vinfo = monoeg_malloc (24);
        vinfo->info.status = 8;
        D.22571 = ctx->ip_offset;
        D.22572 = monoeg_g_strdup_printf ("Incompatible return value on stack with method signature, expected \'%s\' but got \'%s\' at 0x%04x", ret_type, stack_type, D.22571);
        vinfo->info.message = D.22572;
        vinfo->exception_type = 4;
        D.22573 = ctx->list;
        D.22574 = monoeg_g_slist_prepend (D.22573, vinfo);
        ctx->list = D.22574;
      }
      ctx->verifiable = 0;
      D.22569 = ctx->level;
      D.22575 = D.22569 & 16;
      if (D.22575 != 0) goto <D.22576>; else goto <D.22577>;
      <D.22576>:
      ctx->valid = 0;
      <D.22577>:
      <D.22566>:
      monoeg_g_free (stack_type);
      monoeg_g_free (ret_type);
      return;
    }
    <D.22564>:
    D.22580 = BIT_FIELD_REF <*ret, 64, 64>;
    D.22581 = D.22580 & 8589934592;
    if (D.22581 != 0) goto <D.22578>; else goto <D.22582>;
    <D.22582>:
    D.22555 = ret->type;
    if (D.22555 == 22) goto <D.22578>; else goto <D.22583>;
    <D.22583>:
    D.22584 = mono_type_is_value_type (ret, "System", "ArgIterator");
    if (D.22584 != 0) goto <D.22578>; else goto <D.22585>;
    <D.22585>:
    D.22586 = mono_type_is_value_type (ret, "System", "RuntimeArgumentHandle");
    if (D.22586 != 0) goto <D.22578>; else goto <D.22579>;
    <D.22578>:
    D.22567 = ctx->verifiable;
    if (D.22567 != 0) goto <D.22587>; else goto <D.22589>;
    <D.22589>:
    D.22569 = ctx->level;
    D.22570 = D.22569 & 128;
    if (D.22570 != 0) goto <D.22587>; else goto <D.22588>;
    <D.22587>:
    {
      struct MonoVerifyInfoExtended * vinfo;

      vinfo = monoeg_malloc (24);
      vinfo->info.status = 8;
      D.22571 = ctx->ip_offset;
      D.22590 = monoeg_g_strdup_printf ("Method returns byref, TypedReference, ArgIterator or RuntimeArgumentHandle at 0x%04x", D.22571);
      vinfo->info.message = D.22590;
      vinfo->exception_type = 4;
      D.22573 = ctx->list;
      D.22591 = monoeg_g_slist_prepend (D.22573, vinfo);
      ctx->list = D.22591;
    }
    ctx->verifiable = 0;
    D.22569 = ctx->level;
    D.22575 = D.22569 & 16;
    if (D.22575 != 0) goto <D.22592>; else goto <D.22593>;
    <D.22592>:
    ctx->valid = 0;
    <D.22593>:
    <D.22588>:
    <D.22579>:
  }
  <D.22557>:
  D.22594 = ctx->eval.size;
  if (D.22594 != 0) goto <D.22595>; else goto <D.22596>;
  <D.22595>:
  D.22567 = ctx->verifiable;
  if (D.22567 != 0) goto <D.22597>; else goto <D.22599>;
  <D.22599>:
  D.22569 = ctx->level;
  D.22570 = D.22569 & 128;
  if (D.22570 != 0) goto <D.22597>; else goto <D.22598>;
  <D.22597>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (24);
    vinfo->info.status = 8;
    D.22594 = ctx->eval.size;
    D.22600 = (int) D.22594;
    D.22571 = ctx->ip_offset;
    D.22601 = monoeg_g_strdup_printf ("Stack not empty (%d) after ret at 0x%04x", D.22600, D.22571);
    vinfo->info.message = D.22601;
    vinfo->exception_type = 4;
    D.22573 = ctx->list;
    D.22602 = monoeg_g_slist_prepend (D.22573, vinfo);
    ctx->list = D.22602;
  }
  ctx->verifiable = 0;
  D.22569 = ctx->level;
  D.22575 = D.22569 & 16;
  if (D.22575 != 0) goto <D.22603>; else goto <D.22604>;
  <D.22603>:
  ctx->valid = 0;
  <D.22604>:
  <D.22598>:
  <D.22596>:
  D.22605 = ctx->header;
  D.22571 = ctx->ip_offset;
  D.22606 = in_any_block (D.22605, D.22571);
  if (D.22606 != 0) goto <D.22607>; else goto <D.22608>;
  <D.22607>:
  D.22567 = ctx->verifiable;
  if (D.22567 != 0) goto <D.22609>; else goto <D.22611>;
  <D.22611>:
  D.22569 = ctx->level;
  D.22570 = D.22569 & 128;
  if (D.22570 != 0) goto <D.22609>; else goto <D.22610>;
  <D.22609>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (24);
    vinfo->info.status = 8;
    D.22571 = ctx->ip_offset;
    D.22612 = monoeg_g_strdup_printf ("ret cannot escape exception blocks at 0x%04x", D.22571);
    vinfo->info.message = D.22612;
    vinfo->exception_type = 4;
    D.22573 = ctx->list;
    D.22613 = monoeg_g_slist_prepend (D.22573, vinfo);
    ctx->list = D.22613;
  }
  ctx->verifiable = 0;
  D.22569 = ctx->level;
  D.22575 = D.22569 & 16;
  if (D.22575 != 0) goto <D.22614>; else goto <D.22615>;
  <D.22614>:
  ctx->valid = 0;
  <D.22615>:
  <D.22610>:
  <D.22608>:
}


mono_type_is_value_type (struct MonoType * type, const char * namespace, const char * name)
{
  gboolean D.22617;
  int iftmp.51;
  unsigned char D.22621;
  struct MonoClass * D.22623;
  const char * D.22624;
  int D.22625;
  const char * D.22627;
  int D.22628;

  D.22621 = type->type;
  if (D.22621 == 17) goto <D.22622>; else goto <D.22619>;
  <D.22622>:
  D.22623 = type->data.klass;
  D.22624 = D.22623->name_space;
  D.22625 = strcmp (namespace, D.22624);
  if (D.22625 == 0) goto <D.22626>; else goto <D.22619>;
  <D.22626>:
  D.22623 = type->data.klass;
  D.22627 = D.22623->name;
  D.22628 = strcmp (name, D.22627);
  if (D.22628 == 0) goto <D.22629>; else goto <D.22619>;
  <D.22629>:
  iftmp.51 = 1;
  goto <D.22620>;
  <D.22619>:
  iftmp.51 = 0;
  <D.22620>:
  D.22617 = iftmp.51;
  return D.22617;
}


__attribute__((__gnu_inline__, nothrow, leaf, pure))
strcmp (const char * __s1, const char * __s2)
{
  int iftmp.52;
  int iftmp.53;
  int D.22639;
  char * __p1;
  char * __p2;
  int __ret;

  __p1 = __s1;
  __p2 = __s2;
  __asm__ __volatile__("   slr   0,0
0: clst  %1,%2
   jo    0b
   ipm   %0
   srl   %0,28" : "=d" __ret, "=&a" __p1, "=&a" __p2 : "1" __p1, "2" __p2 : "0", "memory", "cc");
  if (__ret != 0) goto <D.22632>; else goto <D.22633>;
  <D.22632>:
  if (__ret == 1) goto <D.22635>; else goto <D.22636>;
  <D.22635>:
  iftmp.53 = -1;
  goto <D.22637>;
  <D.22636>:
  iftmp.53 = 1;
  <D.22637>:
  iftmp.52 = iftmp.53;
  goto <D.22638>;
  <D.22633>:
  iftmp.52 = 0;
  <D.22638>:
  __ret = iftmp.52;
  D.22639 = __ret;
  return D.22639;
}


stack_push_val (struct VerifyContext * ctx, int stype, struct MonoType * type)
{
  struct ILStackDesc * D.22641;
  struct ILStackDesc * top;

  top = stack_push (ctx);
  top->stype = stype;
  top->type = type;
  D.22641 = top;
  return D.22641;
}


do_branch_op (struct VerifyContext * ctx, int delta, const unsigned char[6] * table)
{
  unsigned int D.22643;
  unsigned int delta.54;
  unsigned int D.22645;
  int D.22649;
  gchar * D.22650;
  struct GSList * D.22651;
  struct GSList * D.22652;
  struct MonoMethodHeader * D.22653;
  unsigned int target.55;
  int D.22655;
  int D.22658;
  int D.22660;
  int D.22661;
  gchar * D.22662;
  struct GSList * D.22663;
  int D.22664;
  gchar * D.22667;
  struct GSList * D.22668;
  int D.22670;
  int D.22673;
  int D.22676;
  int D.22682;
  int D.22684;
  long unsigned int D.22685;
  long unsigned int D.22686;
  const unsigned char[6] * D.22687;
  const char * D.22693;
  const char * D.22694;
  gchar * D.22695;
  struct GSList * D.22696;
  signed char res.56;
  const char * D.22706;
  const char * D.22707;
  gchar * D.22708;
  struct GSList * D.22709;
  struct ILStackDesc * a;
  struct ILStackDesc * b;
  int idxa;
  int idxb;
  unsigned char res;
  int target;

  D.22643 = ctx->ip_offset;
  delta.54 = (unsigned int) delta;
  D.22645 = D.22643 + delta.54;
  target = (int) D.22645;
  if (target < 0) goto <D.22646>; else goto <D.22648>;
  <D.22648>:
  D.22649 = ctx->code_size;
  if (D.22649 <= target) goto <D.22646>; else goto <D.22647>;
  <D.22646>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (24);
    vinfo->info.status = 1;
    D.22643 = ctx->ip_offset;
    D.22650 = monoeg_g_strdup_printf ("Branch target out of code at 0x%04x", D.22643);
    vinfo->info.message = D.22650;
    vinfo->exception_type = 3;
    D.22651 = ctx->list;
    D.22652 = monoeg_g_slist_prepend (D.22651, vinfo);
    ctx->list = D.22652;
  }
  ctx->valid = 0;
  return;
  <D.22647>:
  D.22653 = ctx->header;
  D.22643 = ctx->ip_offset;
  target.55 = (unsigned int) target;
  D.22655 = is_valid_cmp_branch_instruction (D.22653, D.22643, target.55);
  switch (D.22655) <default: <D.22669>, case 1: <D.18889>, case 2: <D.18892>>
  <D.18889>:
  D.22658 = ctx->verifiable;
  if (D.22658 != 0) goto <D.22656>; else goto <D.22659>;
  <D.22659>:
  D.22660 = ctx->level;
  D.22661 = D.22660 & 128;
  if (D.22661 != 0) goto <D.22656>; else goto <D.22657>;
  <D.22656>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (24);
    vinfo->info.status = 8;
    D.22643 = ctx->ip_offset;
    D.22662 = monoeg_g_strdup_printf ("Branch target escapes out of exception block at 0x%04x", D.22643);
    vinfo->info.message = D.22662;
    vinfo->exception_type = 4;
    D.22651 = ctx->list;
    D.22663 = monoeg_g_slist_prepend (D.22651, vinfo);
    ctx->list = D.22663;
  }
  ctx->verifiable = 0;
  D.22660 = ctx->level;
  D.22664 = D.22660 & 16;
  if (D.22664 != 0) goto <D.22665>; else goto <D.22666>;
  <D.22665>:
  ctx->valid = 0;
  <D.22666>:
  <D.22657>:
  goto <D.18891>;
  <D.18892>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (24);
    vinfo->info.status = 1;
    D.22643 = ctx->ip_offset;
    D.22667 = monoeg_g_strdup_printf ("Branch target escapes out of exception block at 0x%04x", D.22643);
    vinfo->info.message = D.22667;
    vinfo->exception_type = 3;
    D.22651 = ctx->list;
    D.22668 = monoeg_g_slist_prepend (D.22651, vinfo);
    ctx->list = D.22668;
  }
  ctx->valid = 0;
  return;
  <D.22669>:
  <D.18891>:
  ctx->target = target;
  D.22670 = check_underflow (ctx, 2);
  if (D.22670 == 0) goto <D.22671>; else goto <D.22672>;
  <D.22671>:
  return;
  <D.22672>:
  b = stack_pop (ctx);
  a = stack_pop (ctx);
  idxa = stack_slot_get_underlying_type (a);
  D.22673 = stack_slot_is_managed_pointer (a);
  if (D.22673 != 0) goto <D.22674>; else goto <D.22675>;
  <D.22674>:
  idxa = 5;
  <D.22675>:
  idxb = stack_slot_get_underlying_type (b);
  D.22676 = stack_slot_is_managed_pointer (b);
  if (D.22676 != 0) goto <D.22677>; else goto <D.22678>;
  <D.22677>:
  idxb = 5;
  <D.22678>:
  D.22682 = stack_slot_is_complex_type_not_reference_type (a);
  if (D.22682 != 0) goto <D.22679>; else goto <D.22683>;
  <D.22683>:
  D.22684 = stack_slot_is_complex_type_not_reference_type (b);
  if (D.22684 != 0) goto <D.22679>; else goto <D.22680>;
  <D.22679>:
  res = 0;
  goto <D.22681>;
  <D.22680>:
  idxa = idxa + -1;
  idxb = idxb + -1;
  D.22685 = (long unsigned int) idxa;
  D.22686 = D.22685 * 6;
  D.22687 = table + D.22686;
  res = *D.22687[idxb];
  <D.22681>:
  if (res == 0) goto <D.22688>; else goto <D.22689>;
  <D.22688>:
  D.22658 = ctx->verifiable;
  if (D.22658 != 0) goto <D.22690>; else goto <D.22692>;
  <D.22692>:
  D.22660 = ctx->level;
  D.22661 = D.22660 & 128;
  if (D.22661 != 0) goto <D.22690>; else goto <D.22691>;
  <D.22690>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (24);
    vinfo->info.status = 8;
    D.22693 = stack_slot_get_name (a);
    D.22694 = stack_slot_get_name (b);
    D.22643 = ctx->ip_offset;
    D.22695 = monoeg_g_strdup_printf ("Compare and Branch instruction applyed to ill formed stack (%s x %s) at 0x%04x", D.22693, D.22694, D.22643);
    vinfo->info.message = D.22695;
    vinfo->exception_type = 4;
    D.22651 = ctx->list;
    D.22696 = monoeg_g_slist_prepend (D.22651, vinfo);
    ctx->list = D.22696;
  }
  ctx->verifiable = 0;
  D.22660 = ctx->level;
  D.22664 = D.22660 & 16;
  if (D.22664 != 0) goto <D.22697>; else goto <D.22698>;
  <D.22697>:
  ctx->valid = 0;
  <D.22698>:
  <D.22691>:
  goto <D.22699>;
  <D.22689>:
  res.56 = (signed char) res;
  if (res.56 < 0) goto <D.22701>; else goto <D.22702>;
  <D.22701>:
  D.22658 = ctx->verifiable;
  if (D.22658 != 0) goto <D.22703>; else goto <D.22705>;
  <D.22705>:
  D.22660 = ctx->level;
  D.22661 = D.22660 & 128;
  if (D.22661 != 0) goto <D.22703>; else goto <D.22704>;
  <D.22703>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (24);
    vinfo->info.status = 8;
    D.22706 = stack_slot_get_name (a);
    D.22707 = stack_slot_get_name (b);
    D.22643 = ctx->ip_offset;
    D.22708 = monoeg_g_strdup_printf ("Compare and Branch instruction is not verifiable (%s x %s) at 0x%04x", D.22706, D.22707, D.22643);
    vinfo->info.message = D.22708;
    vinfo->exception_type = 4;
    D.22651 = ctx->list;
    D.22709 = monoeg_g_slist_prepend (D.22651, vinfo);
    ctx->list = D.22709;
  }
  ctx->verifiable = 0;
  D.22660 = ctx->level;
  D.22664 = D.22660 & 16;
  if (D.22664 != 0) goto <D.22710>; else goto <D.22711>;
  <D.22710>:
  ctx->valid = 0;
  <D.22711>:
  <D.22704>:
  res = res & 127;
  <D.22702>:
  <D.22699>:
}


is_valid_cmp_branch_instruction (struct MonoMethodHeader * header, guint offset, guint target)
{
  struct MonoExceptionClause * D.22713;
  long unsigned int D.22714;
  long unsigned int D.22715;
  unsigned int D.22718;
  unsigned int D.22721;
  unsigned int D.22724;
  unsigned int D.22725;
  int D.22729;
  unsigned int D.22730;
  int iftmp.57;
  unsigned int D.22737;
  unsigned int D.22738;
  _Bool D.22740;
  int iftmp.58;
  _Bool D.22746;
  _Bool D.22747;
  int iftmp.59;
  _Bool D.22755;
  int iftmp.60;
  _Bool D.22761;
  _Bool D.22762;
  int iftmp.61;
  unsigned int D.22769;
  _Bool D.22772;
  int iftmp.62;
  _Bool D.22779;
  _Bool D.22780;
  <unnamed-unsigned:15> D.22783;
  int D.22784;
  int i;
  struct MonoExceptionClause * clause;

  i = 0;
  goto <D.18329>;
  <D.18328>:
  D.22713 = header->clauses;
  D.22714 = (long unsigned int) i;
  D.22715 = D.22714 * 32;
  clause = D.22713 + D.22715;
  D.22718 = clause->flags;
  if (D.22718 != 0) goto <D.22719>; else goto <D.22720>;
  <D.22719>:
  D.22721 = clause->handler_offset;
  if (D.22721 <= offset) goto <D.22722>; else goto <D.22723>;
  <D.22722>:
  D.22721 = clause->handler_offset;
  D.22724 = clause->handler_len;
  D.22725 = D.22721 + D.22724;
  if (D.22725 > offset) goto <D.22726>; else goto <D.22727>;
  <D.22726>:
  D.22721 = clause->handler_offset;
  if (D.22721 > target) goto <D.22716>; else goto <D.22728>;
  <D.22728>:
  D.22721 = clause->handler_offset;
  D.22724 = clause->handler_len;
  D.22725 = D.22721 + D.22724;
  if (D.22725 <= target) goto <D.22716>; else goto <D.22717>;
  <D.22716>:
  D.22729 = 1;
  return D.22729;
  <D.22717>:
  <D.22727>:
  <D.22723>:
  <D.22720>:
  D.22730 = clause->try_offset;
  if (D.22730 != target) goto <D.22731>; else goto <D.22732>;
  <D.22731>:
  D.22730 = clause->try_offset;
  if (D.22730 <= offset) goto <D.22736>; else goto <D.22734>;
  <D.22736>:
  D.22730 = clause->try_offset;
  D.22737 = clause->try_len;
  D.22738 = D.22730 + D.22737;
  if (D.22738 > offset) goto <D.22739>; else goto <D.22734>;
  <D.22739>:
  iftmp.57 = 1;
  goto <D.22735>;
  <D.22734>:
  iftmp.57 = 0;
  <D.22735>:
  D.22740 = (_Bool) iftmp.57;
  D.22730 = clause->try_offset;
  if (D.22730 <= target) goto <D.22744>; else goto <D.22742>;
  <D.22744>:
  D.22730 = clause->try_offset;
  D.22737 = clause->try_len;
  D.22738 = D.22730 + D.22737;
  if (D.22738 > target) goto <D.22745>; else goto <D.22742>;
  <D.22745>:
  iftmp.58 = 1;
  goto <D.22743>;
  <D.22742>:
  iftmp.58 = 0;
  <D.22743>:
  D.22746 = (_Bool) iftmp.58;
  D.22747 = D.22740 ^ D.22746;
  if (D.22747 != 0) goto <D.22748>; else goto <D.22749>;
  <D.22748>:
  D.22729 = 2;
  return D.22729;
  <D.22749>:
  <D.22732>:
  D.22721 = clause->handler_offset;
  if (D.22721 <= offset) goto <D.22753>; else goto <D.22751>;
  <D.22753>:
  D.22721 = clause->handler_offset;
  D.22724 = clause->handler_len;
  D.22725 = D.22721 + D.22724;
  if (D.22725 > offset) goto <D.22754>; else goto <D.22751>;
  <D.22754>:
  iftmp.59 = 1;
  goto <D.22752>;
  <D.22751>:
  iftmp.59 = 0;
  <D.22752>:
  D.22755 = (_Bool) iftmp.59;
  D.22721 = clause->handler_offset;
  if (D.22721 <= target) goto <D.22759>; else goto <D.22757>;
  <D.22759>:
  D.22721 = clause->handler_offset;
  D.22724 = clause->handler_len;
  D.22725 = D.22721 + D.22724;
  if (D.22725 > target) goto <D.22760>; else goto <D.22757>;
  <D.22760>:
  iftmp.60 = 1;
  goto <D.22758>;
  <D.22757>:
  iftmp.60 = 0;
  <D.22758>:
  D.22761 = (_Bool) iftmp.60;
  D.22762 = D.22755 ^ D.22761;
  if (D.22762 != 0) goto <D.22763>; else goto <D.22764>;
  <D.22763>:
  D.22729 = 2;
  return D.22729;
  <D.22764>:
  D.22718 = clause->flags;
  if (D.22718 == 1) goto <D.22768>; else goto <D.22766>;
  <D.22768>:
  D.22769 = clause->data.filter_offset;
  if (D.22769 <= offset) goto <D.22770>; else goto <D.22766>;
  <D.22770>:
  D.22721 = clause->handler_offset;
  if (D.22721 > offset) goto <D.22771>; else goto <D.22766>;
  <D.22771>:
  iftmp.61 = 1;
  goto <D.22767>;
  <D.22766>:
  iftmp.61 = 0;
  <D.22767>:
  D.22772 = (_Bool) iftmp.61;
  D.22718 = clause->flags;
  if (D.22718 == 1) goto <D.22776>; else goto <D.22774>;
  <D.22776>:
  D.22769 = clause->data.filter_offset;
  if (D.22769 <= target) goto <D.22777>; else goto <D.22774>;
  <D.22777>:
  D.22721 = clause->handler_offset;
  if (D.22721 > target) goto <D.22778>; else goto <D.22774>;
  <D.22778>:
  iftmp.62 = 1;
  goto <D.22775>;
  <D.22774>:
  iftmp.62 = 0;
  <D.22775>:
  D.22779 = (_Bool) iftmp.62;
  D.22780 = D.22772 ^ D.22779;
  if (D.22780 != 0) goto <D.22781>; else goto <D.22782>;
  <D.22781>:
  D.22729 = 2;
  return D.22729;
  <D.22782>:
  i = i + 1;
  <D.18329>:
  D.22783 = header->num_clauses;
  D.22784 = (int) D.22783;
  if (D.22784 > i) goto <D.18328>; else goto <D.18330>;
  <D.18330>:
  D.22729 = 0;
  return D.22729;
}


stack_slot_is_complex_type_not_reference_type (struct ILStackDesc * slot)
{
  gboolean D.22786;
  int iftmp.63;
  int D.22790;
  struct MonoType * D.22792;
  int D.22793;
  int D.22795;

  D.22790 = stack_slot_get_type (slot);
  if (D.22790 == 6) goto <D.22791>; else goto <D.22788>;
  <D.22791>:
  D.22792 = slot->type;
  D.22793 = mono_type_is_reference (D.22792);
  if (D.22793 == 0) goto <D.22794>; else goto <D.22788>;
  <D.22794>:
  D.22795 = stack_slot_is_boxed_value (slot);
  if (D.22795 == 0) goto <D.22796>; else goto <D.22788>;
  <D.22796>:
  iftmp.63 = 1;
  goto <D.22789>;
  <D.22788>:
  iftmp.63 = 0;
  <D.22789>:
  D.22786 = iftmp.63;
  return D.22786;
}


stack_slot_get_type (struct ILStackDesc * value)
{
  gint32 D.22798;
  int D.22799;

  D.22799 = value->stype;
  D.22798 = D.22799 & 271;
  return D.22798;
}


stack_peek (struct VerifyContext * ctx, int distance)
{
  short unsigned int D.22801;
  int D.22802;
  int D.22803;
  _Bool D.22804;
  long int D.22805;
  long int D.22806;
  struct ILStackDesc * D.22809;
  struct ILStackDesc * D.22810;
  int D.22811;
  int D.22812;
  long unsigned int D.22813;
  long unsigned int D.22814;

  D.22801 = ctx->eval.size;
  D.22802 = (int) D.22801;
  D.22803 = D.22802 - distance;
  D.22804 = D.22803 <= 0;
  D.22805 = (long int) D.22804;
  D.22806 = __builtin_expect (D.22805, 0);
  if (D.22806 != 0) goto <D.22807>; else goto <D.22808>;
  <D.22807>:
  monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "verify.c", 1631, "ctx->eval.size - distance > 0");
  <D.22808>:
  D.22810 = ctx->eval.stack;
  D.22801 = ctx->eval.size;
  D.22802 = (int) D.22801;
  D.22811 = D.22802 + -1;
  D.22812 = D.22811 - distance;
  D.22813 = (long unsigned int) D.22812;
  D.22814 = D.22813 * 24;
  D.22809 = D.22810 + D.22814;
  return D.22809;
}


copy_stack_value (struct ILStackDesc * to, struct ILStackDesc * from)
{
  int D.22816;
  struct MonoType * D.22817;
  struct MonoMethod * D.22818;

  D.22816 = from->stype;
  to->stype = D.22816;
  D.22817 = from->type;
  to->type = D.22817;
  D.22818 = from->method;
  to->method = D.22818;
}


in_any_block (struct MonoMethodHeader * header, guint offset)
{
  struct MonoExceptionClause * D.22819;
  long unsigned int D.22820;
  long unsigned int D.22821;
  unsigned int D.22822;
  unsigned int D.22825;
  unsigned int D.22826;
  int D.22829;
  unsigned int D.22830;
  unsigned int D.22833;
  unsigned int D.22834;
  unsigned int D.22837;
  unsigned int D.22840;
  <unnamed-unsigned:15> D.22845;
  int D.22846;
  int i;
  struct MonoExceptionClause * clause;

  i = 0;
  goto <D.18300>;
  <D.18299>:
  D.22819 = header->clauses;
  D.22820 = (long unsigned int) i;
  D.22821 = D.22820 * 32;
  clause = D.22819 + D.22821;
  D.22822 = clause->try_offset;
  if (D.22822 <= offset) goto <D.22823>; else goto <D.22824>;
  <D.22823>:
  D.22822 = clause->try_offset;
  D.22825 = clause->try_len;
  D.22826 = D.22822 + D.22825;
  if (D.22826 > offset) goto <D.22827>; else goto <D.22828>;
  <D.22827>:
  D.22829 = 1;
  return D.22829;
  <D.22828>:
  <D.22824>:
  D.22830 = clause->handler_offset;
  if (D.22830 <= offset) goto <D.22831>; else goto <D.22832>;
  <D.22831>:
  D.22830 = clause->handler_offset;
  D.22833 = clause->handler_len;
  D.22834 = D.22830 + D.22833;
  if (D.22834 > offset) goto <D.22835>; else goto <D.22836>;
  <D.22835>:
  D.22829 = 1;
  return D.22829;
  <D.22836>:
  <D.22832>:
  D.22837 = clause->flags;
  if (D.22837 == 1) goto <D.22838>; else goto <D.22839>;
  <D.22838>:
  D.22840 = clause->data.filter_offset;
  if (D.22840 <= offset) goto <D.22841>; else goto <D.22842>;
  <D.22841>:
  D.22830 = clause->handler_offset;
  if (D.22830 > offset) goto <D.22843>; else goto <D.22844>;
  <D.22843>:
  D.22829 = 1;
  return D.22829;
  <D.22844>:
  <D.22842>:
  <D.22839>:
  i = i + 1;
  <D.18300>:
  D.22845 = header->num_clauses;
  D.22846 = (int) D.22845;
  if (D.22846 > i) goto <D.18299>; else goto <D.18301>;
  <D.18301>:
  D.22829 = 0;
  return D.22829;
}


do_invoke_method (struct VerifyContext * ctx, int method_token, gboolean virtual)
{
  unsigned int D.22848;
  int D.22849;
  const char * iftmp.64;
  unsigned int D.22858;
  struct MonoClass * D.22859;
  long unsigned int D.22860;
  long unsigned int D.22861;
  int D.22866;
  int D.22868;
  int D.22869;
  unsigned int D.22870;
  gchar * D.22871;
  struct GSList * D.22872;
  struct GSList * D.22873;
  int D.22874;
  short unsigned int D.22877;
  int D.22878;
  int D.22879;
  gchar * D.22885;
  struct GSList * D.22886;
  int D.22890;
  gchar * D.22896;
  struct GSList * D.22897;
  unsigned int D.22900;
  unsigned int D.22901;
  unsigned int D.22904;
  unsigned int D.22905;
  struct ILCodeDesc * D.22908;
  long unsigned int D.22909;
  long unsigned int D.22910;
  struct ILCodeDesc * D.22911;
  short unsigned int D.22912;
  short unsigned int D.22913;
  struct MonoImage * D.22914;
  unsigned int method_token.65;
  struct MonoGenericContext * D.22916;
  const char * D.22921;
  gchar * D.22922;
  struct GSList * D.22923;
  short unsigned int D.22924;
  int D.22925;
  <unnamed-unsigned:1> D.22926;
  int D.22927;
  int D.22928;
  struct MonoType * D.22931;
  int D.22932;
  gchar * D.22938;
  struct GSList * D.22939;
  int D.22942;
  const char * iftmp.66;
  gchar * D.22952;
  struct GSList * D.22953;
  unsigned int D.22956;
  int D.22959;
  const char * iftmp.67;
  gchar * D.22966;
  struct GSList * D.22967;
  long unsigned int D.22968;
  long unsigned int D.22969;
  int D.22974;
  int D.22977;
  struct MonoMethod * D.22980;
  int D.22981;
  gchar * D.22987;
  struct GSList * D.22988;
  struct MonoClass * D.22993;
  struct MonoClass * D.22994;
  gchar * D.23002;
  struct GSList * D.23003;
  int D.23008;
  int D.23009;
  gchar * D.23015;
  struct GSList * D.23016;
  struct MonoType * D.23019;
  struct MonoType * D.23020;
  int D.23021;
  int D.23022;
  int D.23025;
  int D.23030;
  gchar * D.23036;
  struct GSList * D.23037;
  int D.23044;
  gchar * D.23050;
  struct GSList * D.23051;
  struct MonoType * D.23054;
  struct MonoType * D.23055;
  struct MonoType * D.23056;
  int D.23057;
  gchar * D.23063;
  struct GSList * D.23064;
  int D.23067;
  int D.23068;
  struct MonoClass * D.23071;
  long unsigned int D.23072;
  long unsigned int D.23073;
  gchar * D.23079;
  struct GSList * D.23080;
  struct MonoClass * D.23085;
  long unsigned int D.23086;
  long unsigned int D.23087;
  int D.23092;
  gchar * D.23098;
  struct GSList * D.23099;
  struct MonoClass * D.23104;
  long unsigned int D.23105;
  long unsigned int D.23106;
  int D.23109;
  gchar * D.23115;
  struct GSList * D.23116;
  int D.23123;
  int D.23125;
  gchar * D.23129;
  struct GSList * D.23130;
  int D.23133;
  gchar * D.23139;
  struct GSList * D.23140;
  int D.23143;
  struct MonoClass * D.23146;
  int D.23147;
  gchar * D.23153;
  struct GSList * D.23154;
  int D.23160;
  gchar * D.23166;
  struct GSList * D.23167;
  struct MonoType * D.23170;
  unsigned char D.23171;
  int D.23174;
  int D.23177;
  unsigned int D.23180;
  unsigned char D.23183;
  int D.23186;
  unsigned int D.23189;
  int D.23190;
  struct MonoMethodSignature * D.23193;
  struct MonoType * D.23194;
  int D.23195;
  gchar * D.23201;
  struct GSList * D.23202;
  struct MonoMethodHeader * D.23205;
  const unsigned char * D.23206;
  unsigned int D.23207;
  sizetype D.23208;
  const unsigned char * D.23209;
  unsigned char D.23210;
  gchar * D.23216;
  struct GSList * D.23217;
  int param_count;
  int i;
  struct MonoMethodSignature * sig;
  struct ILStackDesc * value;
  struct MonoMethod * method;
  gboolean virt_check_this;
  gboolean constrained;

  virt_check_this = 0;
  D.22848 = ctx->prefix_set;
  D.22849 = (int) D.22848;
  constrained = D.22849 & 8;
  if (virtual != 0) goto <D.22851>; else goto <D.22852>;
  <D.22851>:
  iftmp.64 = "callvirt";
  goto <D.22853>;
  <D.22852>:
  iftmp.64 = "call";
  <D.22853>:
  method = verifier_load_method (ctx, method_token, iftmp.64);
  if (method == 0B) goto <D.22854>; else goto <D.22855>;
  <D.22854>:
  return;
  <D.22855>:
  if (virtual != 0) goto <D.22856>; else goto <D.22857>;
  <D.22856>:
  D.22848 = ctx->prefix_set;
  D.22858 = D.22848 & 4294967287;
  ctx->prefix_set = D.22858;
  D.22859 = method->klass;
  D.22860 = BIT_FIELD_REF <*D.22859, 64, 256>;
  D.22861 = D.22860 & 1152921504606846976;
  if (D.22861 != 0) goto <D.22862>; else goto <D.22863>;
  <D.22862>:
  D.22866 = ctx->verifiable;
  if (D.22866 != 0) goto <D.22864>; else goto <D.22867>;
  <D.22867>:
  D.22868 = ctx->level;
  D.22869 = D.22868 & 128;
  if (D.22869 != 0) goto <D.22864>; else goto <D.22865>;
  <D.22864>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (24);
    vinfo->info.status = 8;
    D.22870 = ctx->ip_offset;
    D.22871 = monoeg_g_strdup_printf ("Cannot use callvirtual with valuetype method at 0x%04x", D.22870);
    vinfo->info.message = D.22871;
    vinfo->exception_type = 4;
    D.22872 = ctx->list;
    D.22873 = monoeg_g_slist_prepend (D.22872, vinfo);
    ctx->list = D.22873;
  }
  ctx->verifiable = 0;
  D.22868 = ctx->level;
  D.22874 = D.22868 & 16;
  if (D.22874 != 0) goto <D.22875>; else goto <D.22876>;
  <D.22875>:
  ctx->valid = 0;
  <D.22876>:
  <D.22865>:
  <D.22863>:
  D.22877 = method->flags;
  D.22878 = (int) D.22877;
  D.22879 = D.22878 & 16;
  if (D.22879 != 0) goto <D.22880>; else goto <D.22881>;
  <D.22880>:
  D.22866 = ctx->verifiable;
  if (D.22866 != 0) goto <D.22882>; else goto <D.22884>;
  <D.22884>:
  D.22868 = ctx->level;
  D.22869 = D.22868 & 128;
  if (D.22869 != 0) goto <D.22882>; else goto <D.22883>;
  <D.22882>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (24);
    vinfo->info.status = 8;
    D.22870 = ctx->ip_offset;
    D.22885 = monoeg_g_strdup_printf ("Cannot use callvirtual with static method at 0x%04x", D.22870);
    vinfo->info.message = D.22885;
    vinfo->exception_type = 4;
    D.22872 = ctx->list;
    D.22886 = monoeg_g_slist_prepend (D.22872, vinfo);
    ctx->list = D.22886;
  }
  ctx->verifiable = 0;
  D.22868 = ctx->level;
  D.22874 = D.22868 & 16;
  if (D.22874 != 0) goto <D.22887>; else goto <D.22888>;
  <D.22887>:
  ctx->valid = 0;
  <D.22888>:
  <D.22883>:
  <D.22881>:
  goto <D.22889>;
  <D.22857>:
  D.22877 = method->flags;
  D.22878 = (int) D.22877;
  D.22890 = D.22878 & 1024;
  if (D.22890 != 0) goto <D.22891>; else goto <D.22892>;
  <D.22891>:
  D.22866 = ctx->verifiable;
  if (D.22866 != 0) goto <D.22893>; else goto <D.22895>;
  <D.22895>:
  D.22868 = ctx->level;
  D.22869 = D.22868 & 128;
  if (D.22869 != 0) goto <D.22893>; else goto <D.22894>;
  <D.22893>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (24);
    vinfo->info.status = 8;
    D.22870 = ctx->ip_offset;
    D.22896 = monoeg_g_strdup_printf ("Cannot use call with an abstract method at 0x%04x", D.22870);
    vinfo->info.message = D.22896;
    vinfo->exception_type = 4;
    D.22872 = ctx->list;
    D.22897 = monoeg_g_slist_prepend (D.22872, vinfo);
    ctx->list = D.22897;
  }
  ctx->verifiable = 0;
  D.22868 = ctx->level;
  D.22874 = D.22868 & 16;
  if (D.22874 != 0) goto <D.22898>; else goto <D.22899>;
  <D.22898>:
  ctx->valid = 0;
  <D.22899>:
  <D.22894>:
  <D.22892>:
  D.22877 = method->flags;
  D.22900 = (unsigned int) D.22877;
  D.22901 = D.22900 & 96;
  if (D.22901 == 64) goto <D.22902>; else goto <D.22903>;
  <D.22902>:
  D.22859 = method->klass;
  D.22904 = D.22859->flags;
  D.22905 = D.22904 & 256;
  if (D.22905 == 0) goto <D.22906>; else goto <D.22907>;
  <D.22906>:
  virt_check_this = 1;
  D.22908 = ctx->code;
  D.22870 = ctx->ip_offset;
  D.22909 = (long unsigned int) D.22870;
  D.22910 = D.22909 * 16;
  D.22911 = D.22908 + D.22910;
  D.22908 = ctx->code;
  D.22870 = ctx->ip_offset;
  D.22909 = (long unsigned int) D.22870;
  D.22910 = D.22909 * 16;
  D.22911 = D.22908 + D.22910;
  D.22912 = D.22911->flags;
  D.22913 = D.22912 | 64;
  D.22911->flags = D.22913;
  <D.22907>:
  <D.22903>:
  <D.22889>:
  D.22914 = ctx->image;
  method_token.65 = (unsigned int) method_token;
  D.22916 = ctx->generic_context;
  sig = mono_method_get_signature_full (method, D.22914, method_token.65, D.22916);
  if (sig == 0B) goto <D.22917>; else goto <D.22918>;
  <D.22917>:
  D.22914 = ctx->image;
  method_token.65 = (unsigned int) method_token;
  sig = mono_method_get_signature (method, D.22914, method_token.65);
  <D.22918>:
  if (sig == 0B) goto <D.22919>; else goto <D.22920>;
  <D.22919>:
  {
    char * name;

    D.22859 = method->klass;
    name = mono_type_get_full_name (D.22859);
    {
      struct MonoVerifyInfoExtended * vinfo;

      vinfo = monoeg_malloc (24);
      vinfo->info.status = 1;
      D.22921 = method->name;
      D.22870 = ctx->ip_offset;
      D.22922 = monoeg_g_strdup_printf ("Could not resolve signature of %s:%s at 0x%04x", name, D.22921, D.22870);
      vinfo->info.message = D.22922;
      vinfo->exception_type = 3;
      D.22872 = ctx->list;
      D.22923 = monoeg_g_slist_prepend (D.22872, vinfo);
      ctx->list = D.22923;
    }
    ctx->valid = 0;
    monoeg_g_free (name);
    return;
  }
  <D.22920>:
  D.22924 = sig->param_count;
  D.22925 = (int) D.22924;
  D.22926 = sig->hasthis;
  D.22927 = (int) D.22926;
  param_count = D.22925 + D.22927;
  D.22928 = check_underflow (ctx, param_count);
  if (D.22928 == 0) goto <D.22929>; else goto <D.22930>;
  <D.22929>:
  return;
  <D.22930>:
  D.22924 = sig->param_count;
  D.22925 = (int) D.22924;
  i = D.22925 + -1;
  goto <D.18942>;
  <D.18941>:
  value = stack_pop (ctx);
  D.22931 = sig->params[i];
  D.22932 = verify_stack_type_compatibility (ctx, D.22931, value);
  if (D.22932 == 0) goto <D.22933>; else goto <D.22934>;
  <D.22933>:
  {
    char * stack_name;
    char * sig_name;

    stack_name = stack_slot_full_name (value);
    D.22931 = sig->params[i];
    sig_name = mono_type_full_name (D.22931);
    D.22866 = ctx->verifiable;
    if (D.22866 != 0) goto <D.22935>; else goto <D.22937>;
    <D.22937>:
    D.22868 = ctx->level;
    D.22869 = D.22868 & 128;
    if (D.22869 != 0) goto <D.22935>; else goto <D.22936>;
    <D.22935>:
    {
      struct MonoVerifyInfoExtended * vinfo;

      vinfo = monoeg_malloc (24);
      vinfo->info.status = 8;
      D.22870 = ctx->ip_offset;
      D.22938 = monoeg_g_strdup_printf ("Incompatible parameter with function signature: Calling method with signature (%s) but for argument %d there is a (%s) on stack at 0x%04x", sig_name, i, stack_name, D.22870);
      vinfo->info.message = D.22938;
      vinfo->exception_type = 4;
      D.22872 = ctx->list;
      D.22939 = monoeg_g_slist_prepend (D.22872, vinfo);
      ctx->list = D.22939;
    }
    ctx->verifiable = 0;
    D.22868 = ctx->level;
    D.22874 = D.22868 & 16;
    if (D.22874 != 0) goto <D.22940>; else goto <D.22941>;
    <D.22940>:
    ctx->valid = 0;
    <D.22941>:
    <D.22936>:
    monoeg_g_free (stack_name);
    monoeg_g_free (sig_name);
  }
  <D.22934>:
  D.22942 = stack_slot_is_managed_mutability_pointer (value);
  if (D.22942 != 0) goto <D.22943>; else goto <D.22944>;
  <D.22943>:
  D.22866 = ctx->verifiable;
  if (D.22866 != 0) goto <D.22945>; else goto <D.22947>;
  <D.22947>:
  D.22868 = ctx->level;
  D.22869 = D.22868 & 128;
  if (D.22869 != 0) goto <D.22945>; else goto <D.22946>;
  <D.22945>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (24);
    vinfo->info.status = 8;
    if (virtual != 0) goto <D.22949>; else goto <D.22950>;
    <D.22949>:
    iftmp.66 = "callvirt";
    goto <D.22951>;
    <D.22950>:
    iftmp.66 = "call";
    <D.22951>:
    D.22870 = ctx->ip_offset;
    D.22952 = monoeg_g_strdup_printf ("Cannot use a readonly pointer as argument of %s at 0x%04x", iftmp.66, D.22870);
    vinfo->info.message = D.22952;
    vinfo->exception_type = 4;
    D.22872 = ctx->list;
    D.22953 = monoeg_g_slist_prepend (D.22872, vinfo);
    ctx->list = D.22953;
  }
  ctx->verifiable = 0;
  D.22868 = ctx->level;
  D.22874 = D.22868 & 16;
  if (D.22874 != 0) goto <D.22954>; else goto <D.22955>;
  <D.22954>:
  ctx->valid = 0;
  <D.22955>:
  <D.22946>:
  <D.22944>:
  D.22848 = ctx->prefix_set;
  D.22956 = D.22848 & 4;
  if (D.22956 != 0) goto <D.22957>; else goto <D.22958>;
  <D.22957>:
  D.22959 = stack_slot_is_managed_pointer (value);
  if (D.22959 != 0) goto <D.22960>; else goto <D.22961>;
  <D.22960>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (24);
    vinfo->info.status = 1;
    if (virtual != 0) goto <D.22963>; else goto <D.22964>;
    <D.22963>:
    iftmp.67 = "callvirt";
    goto <D.22965>;
    <D.22964>:
    iftmp.67 = "call";
    <D.22965>:
    D.22870 = ctx->ip_offset;
    D.22966 = monoeg_g_strdup_printf ("Cannot  pass a byref argument to a tail %s at 0x%04x", iftmp.67, D.22870);
    vinfo->info.message = D.22966;
    vinfo->exception_type = 3;
    D.22872 = ctx->list;
    D.22967 = monoeg_g_slist_prepend (D.22872, vinfo);
    ctx->list = D.22967;
  }
  ctx->valid = 0;
  return;
  <D.22961>:
  <D.22958>:
  i = i + -1;
  <D.18942>:
  if (i >= 0) goto <D.18941>; else goto <D.18943>;
  <D.18943>:
  D.22968 = BIT_FIELD_REF <*sig, 64, 64>;
  D.22969 = D.22968 & 512;
  if (D.22969 != 0) goto <D.22970>; else goto <D.22971>;
  <D.22970>:
  {
    struct MonoType * type;
    struct ILStackDesc copy;

    try
      {
        D.22859 = method->klass;
        type = &D.22859->byval_arg;
        D.22974 = mono_method_is_constructor (method);
        if (D.22974 != 0) goto <D.22975>; else goto <D.22972>;
        <D.22975>:
        D.22859 = method->klass;
        D.22860 = BIT_FIELD_REF <*D.22859, 64, 256>;
        D.22861 = D.22860 & 1152921504606846976;
        if (D.22861 == 0) goto <D.22976>; else goto <D.22972>;
        <D.22976>:
        D.22868 = ctx->level;
        D.22977 = D.22868 & 32;
        if (D.22977 == 0) goto <D.22978>; else goto <D.22979>;
        <D.22978>:
        D.22980 = ctx->method;
        D.22981 = mono_method_is_constructor (D.22980);
        if (D.22981 == 0) goto <D.22982>; else goto <D.22983>;
        <D.22982>:
        D.22866 = ctx->verifiable;
        if (D.22866 != 0) goto <D.22984>; else goto <D.22986>;
        <D.22986>:
        D.22868 = ctx->level;
        D.22869 = D.22868 & 128;
        if (D.22869 != 0) goto <D.22984>; else goto <D.22985>;
        <D.22984>:
        {
          struct MonoVerifyInfoExtended * vinfo;

          vinfo = monoeg_malloc (24);
          vinfo->info.status = 8;
          D.22870 = ctx->ip_offset;
          D.22987 = monoeg_g_strdup_printf ("Cannot call a constructor outside one at 0x%04x", D.22870);
          vinfo->info.message = D.22987;
          vinfo->exception_type = 4;
          D.22872 = ctx->list;
          D.22988 = monoeg_g_slist_prepend (D.22872, vinfo);
          ctx->list = D.22988;
        }
        ctx->verifiable = 0;
        D.22868 = ctx->level;
        D.22874 = D.22868 & 16;
        if (D.22874 != 0) goto <D.22989>; else goto <D.22990>;
        <D.22989>:
        ctx->valid = 0;
        <D.22990>:
        <D.22985>:
        <D.22983>:
        <D.22979>:
        D.22868 = ctx->level;
        D.22977 = D.22868 & 32;
        if (D.22977 == 0) goto <D.22991>; else goto <D.22992>;
        <D.22991>:
        D.22859 = method->klass;
        D.22980 = ctx->method;
        D.22993 = D.22980->klass;
        D.22994 = D.22993->parent;
        if (D.22859 != D.22994) goto <D.22995>; else goto <D.22996>;
        <D.22995>:
        D.22859 = method->klass;
        D.22980 = ctx->method;
        D.22993 = D.22980->klass;
        if (D.22859 != D.22993) goto <D.22997>; else goto <D.22998>;
        <D.22997>:
        D.22866 = ctx->verifiable;
        if (D.22866 != 0) goto <D.22999>; else goto <D.23001>;
        <D.23001>:
        D.22868 = ctx->level;
        D.22869 = D.22868 & 128;
        if (D.22869 != 0) goto <D.22999>; else goto <D.23000>;
        <D.22999>:
        {
          struct MonoVerifyInfoExtended * vinfo;

          vinfo = monoeg_malloc (24);
          vinfo->info.status = 8;
          D.22870 = ctx->ip_offset;
          D.23002 = monoeg_g_strdup_printf ("Cannot call a constructor of a type different from this or super at 0x%04x", D.22870);
          vinfo->info.message = D.23002;
          vinfo->exception_type = 4;
          D.22872 = ctx->list;
          D.23003 = monoeg_g_slist_prepend (D.22872, vinfo);
          ctx->list = D.23003;
        }
        ctx->verifiable = 0;
        D.22868 = ctx->level;
        D.22874 = D.22868 & 16;
        if (D.22874 != 0) goto <D.23004>; else goto <D.23005>;
        <D.23004>:
        ctx->valid = 0;
        <D.23005>:
        <D.23000>:
        <D.22998>:
        <D.22996>:
        <D.22992>:
        ctx->super_ctor_called = 1;
        value = stack_pop_safe (ctx);
        D.22868 = ctx->level;
        D.22977 = D.22868 & 32;
        if (D.22977 == 0) goto <D.23006>; else goto <D.23007>;
        <D.23006>:
        D.23008 = value->stype;
        D.23009 = D.23008 & 2048;
        if (D.23009 == 0) goto <D.23010>; else goto <D.23011>;
        <D.23010>:
        D.22866 = ctx->verifiable;
        if (D.22866 != 0) goto <D.23012>; else goto <D.23014>;
        <D.23014>:
        D.22868 = ctx->level;
        D.22869 = D.22868 & 128;
        if (D.22869 != 0) goto <D.23012>; else goto <D.23013>;
        <D.23012>:
        {
          struct MonoVerifyInfoExtended * vinfo;

          vinfo = monoeg_malloc (24);
          vinfo->info.status = 8;
          D.22870 = ctx->ip_offset;
          D.23015 = monoeg_g_strdup_printf ("Invalid \'this ptr\' argument for constructor at 0x%04x", D.22870);
          vinfo->info.message = D.23015;
          vinfo->exception_type = 4;
          D.22872 = ctx->list;
          D.23016 = monoeg_g_slist_prepend (D.22872, vinfo);
          ctx->list = D.23016;
        }
        ctx->verifiable = 0;
        D.22868 = ctx->level;
        D.22874 = D.22868 & 16;
        if (D.22874 != 0) goto <D.23017>; else goto <D.23018>;
        <D.23017>:
        ctx->valid = 0;
        <D.23018>:
        <D.23013>:
        <D.23011>:
        <D.23007>:
        goto <D.22973>;
        <D.22972>:
        value = stack_pop (ctx);
        <D.22973>:
        copy_stack_value (&copy, value);
        D.23019 = copy.type;
        D.23020 = mono_type_get_type_byval (D.23019);
        copy.type = D.23020;
        D.23021 = copy.stype;
        D.23022 = D.23021 & -257;
        copy.stype = D.23022;
        if (virt_check_this != 0) goto <D.23023>; else goto <D.23024>;
        <D.23023>:
        D.23025 = stack_slot_is_this_pointer (value);
        if (D.23025 == 0) goto <D.23026>; else goto <D.23027>;
        <D.23026>:
        D.22859 = method->klass;
        D.22860 = BIT_FIELD_REF <*D.22859, 64, 256>;
        D.22861 = D.22860 & 1152921504606846976;
        if (D.22861 == 0) goto <D.23028>; else goto <D.23029>;
        <D.23028>:
        D.23030 = stack_slot_is_boxed_value (value);
        if (D.23030 == 0) goto <D.23031>; else goto <D.23032>;
        <D.23031>:
        D.22866 = ctx->verifiable;
        if (D.22866 != 0) goto <D.23033>; else goto <D.23035>;
        <D.23035>:
        D.22868 = ctx->level;
        D.22869 = D.22868 & 128;
        if (D.22869 != 0) goto <D.23033>; else goto <D.23034>;
        <D.23033>:
        {
          struct MonoVerifyInfoExtended * vinfo;

          vinfo = monoeg_malloc (24);
          vinfo->info.status = 8;
          D.22870 = ctx->ip_offset;
          D.23036 = monoeg_g_strdup_printf ("Cannot use the call opcode with a non-final virtual method on an object different than the \'this\' pointer at 0x%04x", D.22870);
          vinfo->info.message = D.23036;
          vinfo->exception_type = 4;
          D.22872 = ctx->list;
          D.23037 = monoeg_g_slist_prepend (D.22872, vinfo);
          ctx->list = D.23037;
        }
        ctx->verifiable = 0;
        D.22868 = ctx->level;
        D.22874 = D.22868 & 16;
        if (D.22874 != 0) goto <D.23038>; else goto <D.23039>;
        <D.23038>:
        ctx->valid = 0;
        <D.23039>:
        <D.23034>:
        <D.23032>:
        <D.23029>:
        <D.23027>:
        <D.23024>:
        if (constrained != 0) goto <D.23042>; else goto <D.23040>;
        <D.23042>:
        if (virtual != 0) goto <D.23043>; else goto <D.23040>;
        <D.23043>:
        D.23044 = stack_slot_is_managed_pointer (value);
        if (D.23044 == 0) goto <D.23045>; else goto <D.23046>;
        <D.23045>:
        D.22866 = ctx->verifiable;
        if (D.22866 != 0) goto <D.23047>; else goto <D.23049>;
        <D.23049>:
        D.22868 = ctx->level;
        D.22869 = D.22868 & 128;
        if (D.22869 != 0) goto <D.23047>; else goto <D.23048>;
        <D.23047>:
        {
          struct MonoVerifyInfoExtended * vinfo;

          vinfo = monoeg_malloc (24);
          vinfo->info.status = 8;
          D.22870 = ctx->ip_offset;
          D.23050 = monoeg_g_strdup_printf ("Object is not a managed pointer for a constrained call at 0x%04x", D.22870);
          vinfo->info.message = D.23050;
          vinfo->exception_type = 4;
          D.22872 = ctx->list;
          D.23051 = monoeg_g_slist_prepend (D.22872, vinfo);
          ctx->list = D.23051;
        }
        ctx->verifiable = 0;
        D.22868 = ctx->level;
        D.22874 = D.22868 & 16;
        if (D.22874 != 0) goto <D.23052>; else goto <D.23053>;
        <D.23052>:
        ctx->valid = 0;
        <D.23053>:
        <D.23048>:
        <D.23046>:
        D.23054 = value->type;
        D.23055 = mono_type_get_type_byval (D.23054);
        D.23056 = ctx->constrained_type;
        D.23057 = mono_metadata_type_equal_full (D.23055, D.23056, 1);
        if (D.23057 == 0) goto <D.23058>; else goto <D.23059>;
        <D.23058>:
        D.22866 = ctx->verifiable;
        if (D.22866 != 0) goto <D.23060>; else goto <D.23062>;
        <D.23062>:
        D.22868 = ctx->level;
        D.22869 = D.22868 & 128;
        if (D.22869 != 0) goto <D.23060>; else goto <D.23061>;
        <D.23060>:
        {
          struct MonoVerifyInfoExtended * vinfo;

          vinfo = monoeg_malloc (24);
          vinfo->info.status = 8;
          D.22870 = ctx->ip_offset;
          D.23063 = monoeg_g_strdup_printf ("Object not compatible with constrained type at 0x%04x", D.22870);
          vinfo->info.message = D.23063;
          vinfo->exception_type = 4;
          D.22872 = ctx->list;
          D.23064 = monoeg_g_slist_prepend (D.22872, vinfo);
          ctx->list = D.23064;
        }
        ctx->verifiable = 0;
        D.22868 = ctx->level;
        D.22874 = D.22868 & 16;
        if (D.22874 != 0) goto <D.23065>; else goto <D.23066>;
        <D.23065>:
        ctx->valid = 0;
        <D.23066>:
        <D.23061>:
        <D.23059>:
        D.23021 = copy.stype;
        D.23067 = D.23021 | 4096;
        copy.stype = D.23067;
        goto <D.23041>;
        <D.23040>:
        D.23068 = stack_slot_is_managed_pointer (value);
        if (D.23068 != 0) goto <D.23069>; else goto <D.23070>;
        <D.23069>:
        D.23054 = value->type;
        D.23071 = mono_class_from_mono_type (D.23054);
        D.23072 = BIT_FIELD_REF <*D.23071, 64, 256>;
        D.23073 = D.23072 & 1152921504606846976;
        if (D.23073 == 0) goto <D.23074>; else goto <D.23075>;
        <D.23074>:
        D.22866 = ctx->verifiable;
        if (D.22866 != 0) goto <D.23076>; else goto <D.23078>;
        <D.23078>:
        D.22868 = ctx->level;
        D.22869 = D.22868 & 128;
        if (D.22869 != 0) goto <D.23076>; else goto <D.23077>;
        <D.23076>:
        {
          struct MonoVerifyInfoExtended * vinfo;

          vinfo = monoeg_malloc (24);
          vinfo->info.status = 8;
          D.22870 = ctx->ip_offset;
          D.23079 = monoeg_g_strdup_printf ("Cannot call a reference type using a managed pointer to the this arg at 0x%04x", D.22870);
          vinfo->info.message = D.23079;
          vinfo->exception_type = 4;
          D.22872 = ctx->list;
          D.23080 = monoeg_g_slist_prepend (D.22872, vinfo);
          ctx->list = D.23080;
        }
        ctx->verifiable = 0;
        D.22868 = ctx->level;
        D.22874 = D.22868 & 16;
        if (D.22874 != 0) goto <D.23081>; else goto <D.23082>;
        <D.23081>:
        ctx->valid = 0;
        <D.23082>:
        <D.23077>:
        <D.23075>:
        <D.23070>:
        if (virtual == 0) goto <D.23083>; else goto <D.23084>;
        <D.23083>:
        D.23054 = value->type;
        D.23085 = mono_class_from_mono_type (D.23054);
        D.23086 = BIT_FIELD_REF <*D.23085, 64, 256>;
        D.23087 = D.23086 & 1152921504606846976;
        if (D.23087 != 0) goto <D.23088>; else goto <D.23089>;
        <D.23088>:
        D.22859 = method->klass;
        D.22860 = BIT_FIELD_REF <*D.22859, 64, 256>;
        D.22861 = D.22860 & 1152921504606846976;
        if (D.22861 == 0) goto <D.23090>; else goto <D.23091>;
        <D.23090>:
        D.23092 = stack_slot_is_boxed_value (value);
        if (D.23092 == 0) goto <D.23093>; else goto <D.23094>;
        <D.23093>:
        D.22866 = ctx->verifiable;
        if (D.22866 != 0) goto <D.23095>; else goto <D.23097>;
        <D.23097>:
        D.22868 = ctx->level;
        D.22869 = D.22868 & 128;
        if (D.22869 != 0) goto <D.23095>; else goto <D.23096>;
        <D.23095>:
        {
          struct MonoVerifyInfoExtended * vinfo;

          vinfo = monoeg_malloc (24);
          vinfo->info.status = 8;
          D.22870 = ctx->ip_offset;
          D.23098 = monoeg_g_strdup_printf ("Cannot call a valuetype baseclass at 0x%04x", D.22870);
          vinfo->info.message = D.23098;
          vinfo->exception_type = 4;
          D.22872 = ctx->list;
          D.23099 = monoeg_g_slist_prepend (D.22872, vinfo);
          ctx->list = D.23099;
        }
        ctx->verifiable = 0;
        D.22868 = ctx->level;
        D.22874 = D.22868 & 16;
        if (D.22874 != 0) goto <D.23100>; else goto <D.23101>;
        <D.23100>:
        ctx->valid = 0;
        <D.23101>:
        <D.23096>:
        <D.23094>:
        <D.23091>:
        <D.23089>:
        <D.23084>:
        if (virtual != 0) goto <D.23102>; else goto <D.23103>;
        <D.23102>:
        D.23054 = value->type;
        D.23104 = mono_class_from_mono_type (D.23054);
        D.23105 = BIT_FIELD_REF <*D.23104, 64, 256>;
        D.23106 = D.23105 & 1152921504606846976;
        if (D.23106 != 0) goto <D.23107>; else goto <D.23108>;
        <D.23107>:
        D.23109 = stack_slot_is_boxed_value (value);
        if (D.23109 == 0) goto <D.23110>; else goto <D.23111>;
        <D.23110>:
        D.22866 = ctx->verifiable;
        if (D.22866 != 0) goto <D.23112>; else goto <D.23114>;
        <D.23114>:
        D.22868 = ctx->level;
        D.22869 = D.22868 & 128;
        if (D.22869 != 0) goto <D.23112>; else goto <D.23113>;
        <D.23112>:
        {
          struct MonoVerifyInfoExtended * vinfo;

          vinfo = monoeg_malloc (24);
          vinfo->info.status = 8;
          D.22870 = ctx->ip_offset;
          D.23115 = monoeg_g_strdup_printf ("Cannot use a valuetype with callvirt at 0x%04x", D.22870);
          vinfo->info.message = D.23115;
          vinfo->exception_type = 4;
          D.22872 = ctx->list;
          D.23116 = monoeg_g_slist_prepend (D.22872, vinfo);
          ctx->list = D.23116;
        }
        ctx->verifiable = 0;
        D.22868 = ctx->level;
        D.22874 = D.22868 & 16;
        if (D.22874 != 0) goto <D.23117>; else goto <D.23118>;
        <D.23117>:
        ctx->valid = 0;
        <D.23118>:
        <D.23113>:
        <D.23111>:
        <D.23108>:
        <D.23103>:
        D.22859 = method->klass;
        D.22860 = BIT_FIELD_REF <*D.22859, 64, 256>;
        D.22861 = D.22860 & 1152921504606846976;
        if (D.22861 != 0) goto <D.23121>; else goto <D.23122>;
        <D.23121>:
        D.23123 = stack_slot_is_boxed_value (value);
        if (D.23123 != 0) goto <D.23119>; else goto <D.23124>;
        <D.23124>:
        D.23125 = stack_slot_is_managed_pointer (value);
        if (D.23125 == 0) goto <D.23119>; else goto <D.23120>;
        <D.23119>:
        D.22866 = ctx->verifiable;
        if (D.22866 != 0) goto <D.23126>; else goto <D.23128>;
        <D.23128>:
        D.22868 = ctx->level;
        D.22869 = D.22868 & 128;
        if (D.22869 != 0) goto <D.23126>; else goto <D.23127>;
        <D.23126>:
        {
          struct MonoVerifyInfoExtended * vinfo;

          vinfo = monoeg_malloc (24);
          vinfo->info.status = 8;
          D.22870 = ctx->ip_offset;
          D.23129 = monoeg_g_strdup_printf ("Cannot use a boxed or literal valuetype to call a valuetype method at 0x%04x", D.22870);
          vinfo->info.message = D.23129;
          vinfo->exception_type = 4;
          D.22872 = ctx->list;
          D.23130 = monoeg_g_slist_prepend (D.22872, vinfo);
          ctx->list = D.23130;
        }
        ctx->verifiable = 0;
        D.22868 = ctx->level;
        D.22874 = D.22868 & 16;
        if (D.22874 != 0) goto <D.23131>; else goto <D.23132>;
        <D.23131>:
        ctx->valid = 0;
        <D.23132>:
        <D.23127>:
        <D.23120>:
        <D.23122>:
        <D.23041>:
        D.23133 = verify_stack_type_compatibility (ctx, type, &copy);
        if (D.23133 == 0) goto <D.23134>; else goto <D.23135>;
        <D.23134>:
        {
          char * expected;
          char * effective;
          char * method_name;

          expected = mono_type_full_name (type);
          effective = stack_slot_full_name (&copy);
          method_name = mono_method_full_name (method, 1);
          D.22866 = ctx->verifiable;
          if (D.22866 != 0) goto <D.23136>; else goto <D.23138>;
          <D.23138>:
          D.22868 = ctx->level;
          D.22869 = D.22868 & 128;
          if (D.22869 != 0) goto <D.23136>; else goto <D.23137>;
          <D.23136>:
          {
            struct MonoVerifyInfoExtended * vinfo;

            vinfo = monoeg_malloc (24);
            vinfo->info.status = 8;
            D.22870 = ctx->ip_offset;
            D.23139 = monoeg_g_strdup_printf ("Incompatible this argument on stack with method signature expected \'%s\' but got \'%s\' for a call to \'%s\' at 0x%04x", expected, effective, method_name, D.22870);
            vinfo->info.message = D.23139;
            vinfo->exception_type = 4;
            D.22872 = ctx->list;
            D.23140 = monoeg_g_slist_prepend (D.22872, vinfo);
            ctx->list = D.23140;
          }
          ctx->verifiable = 0;
          D.22868 = ctx->level;
          D.22874 = D.22868 & 16;
          if (D.22874 != 0) goto <D.23141>; else goto <D.23142>;
          <D.23141>:
          ctx->valid = 0;
          <D.23142>:
          <D.23137>:
          monoeg_g_free (method_name);
          monoeg_g_free (effective);
          monoeg_g_free (expected);
        }
        <D.23135>:
        D.22868 = ctx->level;
        D.23143 = D.22868 & 64;
        if (D.23143 == 0) goto <D.23144>; else goto <D.23145>;
        <D.23144>:
        D.22980 = ctx->method;
        D.23054 = value->type;
        D.23146 = mono_class_from_mono_type (D.23054);
        D.23147 = mono_method_can_access_method_full (D.22980, method, D.23146);
        if (D.23147 == 0) goto <D.23148>; else goto <D.23149>;
        <D.23148>:
        {
          char * name;

          name = mono_method_full_name (method, 1);
          D.22866 = ctx->verifiable;
          if (D.22866 != 0) goto <D.23150>; else goto <D.23152>;
          <D.23152>:
          D.22868 = ctx->level;
          D.22869 = D.22868 & 128;
          if (D.22869 != 0) goto <D.23150>; else goto <D.23151>;
          <D.23150>:
          {
            struct MonoVerifyInfoExtended * vinfo;

            vinfo = monoeg_malloc (24);
            vinfo->info.status = 8;
            D.22870 = ctx->ip_offset;
            D.23153 = monoeg_g_strdup_printf ("Method %s is not accessible at 0x%04x", name, D.22870);
            vinfo->info.message = D.23153;
            vinfo->exception_type = 9;
            D.22872 = ctx->list;
            D.23154 = monoeg_g_slist_prepend (D.22872, vinfo);
            ctx->list = D.23154;
          }
          ctx->verifiable = 0;
          D.22868 = ctx->level;
          D.22874 = D.22868 & 16;
          if (D.22874 != 0) goto <D.23155>; else goto <D.23156>;
          <D.23155>:
          ctx->valid = 0;
          <D.23156>:
          <D.23151>:
          monoeg_g_free (name);
        }
        <D.23149>:
        <D.23145>:
      }
    finally
      {
        copy = {CLOBBER};
      }
  }
  goto <D.23157>;
  <D.22971>:
  D.22868 = ctx->level;
  D.23143 = D.22868 & 64;
  if (D.23143 == 0) goto <D.23158>; else goto <D.23159>;
  <D.23158>:
  D.22980 = ctx->method;
  D.23160 = mono_method_can_access_method_full (D.22980, method, 0B);
  if (D.23160 == 0) goto <D.23161>; else goto <D.23162>;
  <D.23161>:
  {
    char * name;

    name = mono_method_full_name (method, 1);
    D.22866 = ctx->verifiable;
    if (D.22866 != 0) goto <D.23163>; else goto <D.23165>;
    <D.23165>:
    D.22868 = ctx->level;
    D.22869 = D.22868 & 128;
    if (D.22869 != 0) goto <D.23163>; else goto <D.23164>;
    <D.23163>:
    {
      struct MonoVerifyInfoExtended * vinfo;

      vinfo = monoeg_malloc (24);
      vinfo->info.status = 8;
      D.22870 = ctx->ip_offset;
      D.23166 = monoeg_g_strdup_printf ("Method %s is not accessible at 0x%04x", name, D.22870);
      vinfo->info.message = D.23166;
      vinfo->exception_type = 9;
      D.22872 = ctx->list;
      D.23167 = monoeg_g_slist_prepend (D.22872, vinfo);
      ctx->list = D.23167;
    }
    ctx->verifiable = 0;
    D.22868 = ctx->level;
    D.22874 = D.22868 & 16;
    if (D.22874 != 0) goto <D.23168>; else goto <D.23169>;
    <D.23168>:
    ctx->valid = 0;
    <D.23169>:
    <D.23164>:
    monoeg_g_free (name);
  }
  <D.23162>:
  <D.23159>:
  <D.23157>:
  D.23170 = sig->ret;
  D.23171 = D.23170->type;
  if (D.23171 != 1) goto <D.23172>; else goto <D.23173>;
  <D.23172>:
  D.23170 = sig->ret;
  D.23174 = mono_type_is_valid_in_context (ctx, D.23170);
  if (D.23174 == 0) goto <D.23175>; else goto <D.23176>;
  <D.23175>:
  return;
  <D.23176>:
  D.23177 = check_overflow (ctx);
  if (D.23177 != 0) goto <D.23178>; else goto <D.23179>;
  <D.23178>:
  value = stack_push (ctx);
  D.23170 = sig->ret;
  set_stack_value (ctx, value, D.23170, 0);
  D.22848 = ctx->prefix_set;
  D.23180 = D.22848 & 16;
  if (D.23180 != 0) goto <D.23181>; else goto <D.23182>;
  <D.23181>:
  D.22859 = method->klass;
  D.23183 = D.22859->rank;
  if (D.23183 != 0) goto <D.23184>; else goto <D.23185>;
  <D.23184>:
  D.22921 = method->name;
  D.23186 = strcmp (D.22921, "Address");
  if (D.23186 == 0) goto <D.23187>; else goto <D.23188>;
  <D.23187>:
  D.22848 = ctx->prefix_set;
  D.23189 = D.22848 & 4294967279;
  ctx->prefix_set = D.23189;
  D.23008 = value->stype;
  D.23190 = D.23008 | 512;
  value->stype = D.23190;
  <D.23188>:
  <D.23185>:
  <D.23182>:
  <D.23179>:
  <D.23173>:
  D.22848 = ctx->prefix_set;
  D.22956 = D.22848 & 4;
  if (D.22956 != 0) goto <D.23191>; else goto <D.23192>;
  <D.23191>:
  D.22980 = ctx->method;
  D.23193 = mono_method_signature (D.22980);
  D.23194 = D.23193->ret;
  D.23170 = sig->ret;
  D.23195 = mono_delegate_ret_equal (D.23194, D.23170);
  if (D.23195 == 0) goto <D.23196>; else goto <D.23197>;
  <D.23196>:
  D.22866 = ctx->verifiable;
  if (D.22866 != 0) goto <D.23198>; else goto <D.23200>;
  <D.23200>:
  D.22868 = ctx->level;
  D.22869 = D.22868 & 128;
  if (D.22869 != 0) goto <D.23198>; else goto <D.23199>;
  <D.23198>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (24);
    vinfo->info.status = 8;
    D.22870 = ctx->ip_offset;
    D.23201 = monoeg_g_strdup_printf ("Tail call with incompatible return type at 0x%04x", D.22870);
    vinfo->info.message = D.23201;
    vinfo->exception_type = 4;
    D.22872 = ctx->list;
    D.23202 = monoeg_g_slist_prepend (D.22872, vinfo);
    ctx->list = D.23202;
  }
  ctx->verifiable = 0;
  D.22868 = ctx->level;
  D.22874 = D.22868 & 16;
  if (D.22874 != 0) goto <D.23203>; else goto <D.23204>;
  <D.23203>:
  ctx->valid = 0;
  <D.23204>:
  <D.23199>:
  <D.23197>:
  D.23205 = ctx->header;
  D.23206 = D.23205->code;
  D.22870 = ctx->ip_offset;
  D.23207 = D.22870 + 5;
  D.23208 = (sizetype) D.23207;
  D.23209 = D.23206 + D.23208;
  D.23210 = *D.23209;
  if (D.23210 != 42) goto <D.23211>; else goto <D.23212>;
  <D.23211>:
  D.22866 = ctx->verifiable;
  if (D.22866 != 0) goto <D.23213>; else goto <D.23215>;
  <D.23215>:
  D.22868 = ctx->level;
  D.22869 = D.22868 & 128;
  if (D.22869 != 0) goto <D.23213>; else goto <D.23214>;
  <D.23213>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (24);
    vinfo->info.status = 8;
    D.22870 = ctx->ip_offset;
    D.23216 = monoeg_g_strdup_printf ("Tail call not followed by ret at 0x%04x", D.22870);
    vinfo->info.message = D.23216;
    vinfo->exception_type = 4;
    D.22872 = ctx->list;
    D.23217 = monoeg_g_slist_prepend (D.22872, vinfo);
    ctx->list = D.23217;
  }
  ctx->verifiable = 0;
  D.22868 = ctx->level;
  D.22874 = D.22868 & 16;
  if (D.22874 != 0) goto <D.23218>; else goto <D.23219>;
  <D.23218>:
  ctx->valid = 0;
  <D.23219>:
  <D.23214>:
  <D.23212>:
  <D.23192>:
}


verifier_load_method (struct VerifyContext * ctx, int token, const char * opcode)
{
  struct MonoMethod * D.23221;
  long unsigned int D.23222;
  long unsigned int D.23223;
  unsigned int token.68;
  int D.23231;
  struct MonoImage * D.23234;
  unsigned int token.69;
  int D.23236;
  unsigned int D.23237;
  gchar * D.23238;
  struct GSList * D.23239;
  struct GSList * D.23240;
  struct MonoMethod * D.23241;
  unsigned int token.70;
  struct MonoGenericContext * D.23243;
  struct MonoLoaderError * D.23247;
  gchar * D.23248;
  struct GSList * D.23249;
  <unnamed type> D.23250;
  struct MonoMethod * method;

  D.23221 = ctx->method;
  D.23222 = BIT_FIELD_REF <*D.23221, 64, 256>;
  D.23223 = D.23222 & 4467570830351532032;
  if (D.23223 != 0) goto <D.23224>; else goto <D.23225>;
  <D.23224>:
  D.23221 = ctx->method;
  token.68 = (unsigned int) token;
  method = mono_method_get_wrapper_data (D.23221, token.68);
  goto <D.23227>;
  <D.23225>:
  D.23231 = token >> 24;
  if (D.23231 != 6) goto <D.23232>; else goto <D.23228>;
  <D.23232>:
  D.23231 = token >> 24;
  if (D.23231 != 10) goto <D.23233>; else goto <D.23228>;
  <D.23233>:
  D.23231 = token >> 24;
  if (D.23231 != 43) goto <D.23229>; else goto <D.23228>;
  <D.23228>:
  D.23234 = ctx->image;
  token.69 = (unsigned int) token;
  D.23236 = token_bounds_check (D.23234, token.69);
  if (D.23236 == 0) goto <D.23229>; else goto <D.23230>;
  <D.23229>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (24);
    vinfo->info.status = 1;
    D.23237 = ctx->ip_offset;
    D.23238 = monoeg_g_strdup_printf ("Invalid method token 0x%08x for %s at 0x%04x", token, opcode, D.23237);
    vinfo->info.message = D.23238;
    vinfo->exception_type = 12;
    D.23239 = ctx->list;
    D.23240 = monoeg_g_slist_prepend (D.23239, vinfo);
    ctx->list = D.23240;
  }
  ctx->valid = 0;
  D.23241 = 0B;
  return D.23241;
  <D.23230>:
  D.23234 = ctx->image;
  token.70 = (unsigned int) token;
  D.23243 = ctx->generic_context;
  method = mono_get_method_full (D.23234, token.70, 0B, D.23243);
  <D.23227>:
  if (method == 0B) goto <D.23244>; else goto <D.23246>;
  <D.23246>:
  D.23247 = mono_loader_get_last_error ();
  if (D.23247 != 0B) goto <D.23244>; else goto <D.23245>;
  <D.23244>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (24);
    vinfo->info.status = 1;
    D.23237 = ctx->ip_offset;
    D.23248 = monoeg_g_strdup_printf ("Cannot load method from token 0x%08x for %s at 0x%04x", token, opcode, D.23237);
    vinfo->info.message = D.23248;
    vinfo->exception_type = 12;
    D.23239 = ctx->list;
    D.23249 = monoeg_g_slist_prepend (D.23239, vinfo);
    ctx->list = D.23249;
  }
  ctx->valid = 0;
  mono_loader_clear_error ();
  D.23241 = 0B;
  return D.23241;
  <D.23245>:
  D.23250 = mono_method_is_valid_in_context (ctx, method);
  if (D.23250 == 2) goto <D.23251>; else goto <D.23252>;
  <D.23251>:
  D.23241 = 0B;
  return D.23241;
  <D.23252>:
  D.23241 = method;
  return D.23241;
}


token_bounds_check (struct MonoImage * image, guint32 token)
{
  long unsigned int D.23254;
  long unsigned int D.23255;
  gboolean D.23258;
  int iftmp.71;
  unsigned int D.23262;
  <unnamed-unsigned:24> D.23263;
  unsigned int D.23264;
  unsigned int D.23265;

  D.23254 = BIT_FIELD_REF <*image, 64, 192>;
  D.23255 = D.23254 & 268435456;
  if (D.23255 != 0) goto <D.23256>; else goto <D.23257>;
  <D.23256>:
  D.23258 = mono_reflection_is_valid_dynamic_token (image, token);
  return D.23258;
  <D.23257>:
  D.23262 = token >> 24;
  D.23263 = image->tables[D.23262].rows;
  D.23264 = (unsigned int) D.23263;
  D.23265 = token & 16777215;
  if (D.23264 >= D.23265) goto <D.23266>; else goto <D.23260>;
  <D.23266>:
  D.23265 = token & 16777215;
  if (D.23265 != 0) goto <D.23267>; else goto <D.23260>;
  <D.23267>:
  iftmp.71 = 1;
  goto <D.23261>;
  <D.23260>:
  iftmp.71 = 0;
  <D.23261>:
  D.23258 = iftmp.71;
  return D.23258;
}


mono_method_is_valid_in_context (struct VerifyContext * ctx, struct MonoMethod * method)
{
  struct MonoClass * D.23269;
  struct MonoType * D.23270;
  int D.23271;
  verify_result_t D.23274;
  long unsigned int D.23275;
  long unsigned int D.23276;
  int D.23279;
  const char * D.23282;
  const char * D.23283;
  const char * D.23284;
  unsigned int D.23285;
  gchar * D.23286;
  struct GSList * D.23287;
  struct GSList * D.23288;
  int D.23289;
  int D.23294;
  int D.23296;
  int D.23297;
  gchar * D.23298;
  struct GSList * D.23299;
  int D.23300;

  D.23269 = method->klass;
  D.23270 = &D.23269->byval_arg;
  D.23271 = mono_type_is_valid_in_context (ctx, D.23270);
  if (D.23271 == 0) goto <D.23272>; else goto <D.23273>;
  <D.23272>:
  D.23274 = 2;
  return D.23274;
  <D.23273>:
  D.23275 = BIT_FIELD_REF <*method, 64, 256>;
  D.23276 = D.23275 & 2251799813685248;
  if (D.23276 == 0) goto <D.23277>; else goto <D.23278>;
  <D.23277>:
  D.23274 = 0;
  return D.23274;
  <D.23278>:
  D.23279 = mono_method_is_valid_generic_instantiation (ctx, method);
  if (D.23279 == 0) goto <D.23280>; else goto <D.23281>;
  <D.23280>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (24);
    vinfo->info.status = 1;
    D.23269 = method->klass;
    D.23282 = D.23269->name_space;
    D.23269 = method->klass;
    D.23283 = D.23269->name;
    D.23284 = method->name;
    D.23285 = ctx->ip_offset;
    D.23286 = monoeg_g_strdup_printf ("Invalid generic method instantiation of method %s.%s::%s at 0x%04x", D.23282, D.23283, D.23284, D.23285);
    vinfo->info.message = D.23286;
    vinfo->exception_type = 4;
    D.23287 = ctx->list;
    D.23288 = monoeg_g_slist_prepend (D.23287, vinfo);
    ctx->list = D.23288;
  }
  ctx->valid = 0;
  D.23274 = 2;
  return D.23274;
  <D.23281>:
  D.23289 = mono_method_repect_method_constraints (ctx, method);
  if (D.23289 == 0) goto <D.23290>; else goto <D.23291>;
  <D.23290>:
  D.23294 = ctx->verifiable;
  if (D.23294 != 0) goto <D.23292>; else goto <D.23295>;
  <D.23295>:
  D.23296 = ctx->level;
  D.23297 = D.23296 & 128;
  if (D.23297 != 0) goto <D.23292>; else goto <D.23293>;
  <D.23292>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (24);
    vinfo->info.status = 8;
    D.23269 = method->klass;
    D.23282 = D.23269->name_space;
    D.23269 = method->klass;
    D.23283 = D.23269->name;
    D.23284 = method->name;
    D.23285 = ctx->ip_offset;
    D.23298 = monoeg_g_strdup_printf ("Invalid generic method instantiation of method %s.%s::%s (generic args don\'t respect target\'s constraints) at 0x%04x", D.23282, D.23283, D.23284, D.23285);
    vinfo->info.message = D.23298;
    vinfo->exception_type = 4;
    D.23287 = ctx->list;
    D.23299 = monoeg_g_slist_prepend (D.23287, vinfo);
    ctx->list = D.23299;
  }
  ctx->verifiable = 0;
  D.23296 = ctx->level;
  D.23300 = D.23296 & 16;
  if (D.23300 != 0) goto <D.23301>; else goto <D.23302>;
  <D.23301>:
  ctx->valid = 0;
  <D.23302>:
  <D.23293>:
  D.23274 = 1;
  return D.23274;
  <D.23291>:
  D.23274 = 0;
  return D.23274;
}


mono_method_is_valid_generic_instantiation (struct VerifyContext * ctx, struct MonoMethod * method)
{
  struct MonoMethod * D.23304;
  gboolean D.23307;
  int D.23310;
  struct MonoGenericContext * D.23313;
  struct MonoMethodInflated * gmethod;
  struct MonoGenericInst * ginst;
  struct MonoGenericContainer * gc;

  gmethod = method;
  ginst = gmethod->context.method_inst;
  D.23304 = gmethod->declaring;
  gc = mono_method_get_generic_container (D.23304);
  if (gc == 0B) goto <D.23305>; else goto <D.23306>;
  <D.23305>:
  D.23307 = 1;
  return D.23307;
  <D.23306>:
  if (ctx != 0B) goto <D.23308>; else goto <D.23309>;
  <D.23308>:
  D.23310 = is_valid_generic_instantiation_in_context (ctx, ginst, 1);
  if (D.23310 == 0) goto <D.23311>; else goto <D.23312>;
  <D.23311>:
  D.23307 = 0;
  return D.23307;
  <D.23312>:
  <D.23309>:
  D.23313 = &gmethod->context;
  D.23307 = is_valid_generic_instantiation (gc, D.23313, ginst);
  return D.23307;
}


mono_method_repect_method_constraints (struct VerifyContext * ctx, struct MonoMethod * method)
{
  struct MonoMethod * D.23315;
  gboolean D.23316;
  int iftmp.72;
  struct MonoGenericContext * D.23322;
  int D.23323;
  struct MonoMethodInflated * gmethod;
  struct MonoGenericInst * ginst;
  struct MonoGenericContainer * gc;

  gmethod = method;
  ginst = gmethod->context.method_inst;
  D.23315 = gmethod->declaring;
  gc = mono_method_get_generic_container (D.23315);
  if (gc == 0B) goto <D.23318>; else goto <D.23321>;
  <D.23321>:
  D.23322 = &gmethod->context;
  D.23323 = generic_arguments_respect_constraints (ctx, gc, D.23322, ginst);
  if (D.23323 != 0) goto <D.23318>; else goto <D.23319>;
  <D.23318>:
  iftmp.72 = 1;
  goto <D.23320>;
  <D.23319>:
  iftmp.72 = 0;
  <D.23320>:
  D.23316 = iftmp.72;
  return D.23316;
}


do_static_branch (struct VerifyContext * ctx, int delta)
{
  unsigned int D.23325;
  unsigned int delta.73;
  unsigned int D.23327;
  int D.23331;
  gchar * D.23332;
  struct GSList * D.23333;
  struct GSList * D.23334;
  struct MonoMethodHeader * D.23335;
  unsigned int target.74;
  int D.23337;
  int D.23340;
  int D.23342;
  int D.23343;
  gchar * D.23344;
  struct GSList * D.23345;
  int D.23346;
  gchar * D.23349;
  struct GSList * D.23350;
  int target;

  D.23325 = ctx->ip_offset;
  delta.73 = (unsigned int) delta;
  D.23327 = D.23325 + delta.73;
  target = (int) D.23327;
  if (target < 0) goto <D.23328>; else goto <D.23330>;
  <D.23330>:
  D.23331 = ctx->code_size;
  if (D.23331 <= target) goto <D.23328>; else goto <D.23329>;
  <D.23328>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (24);
    vinfo->info.status = 1;
    D.23325 = ctx->ip_offset;
    D.23332 = monoeg_g_strdup_printf ("branch target out of code at 0x%04x", D.23325);
    vinfo->info.message = D.23332;
    vinfo->exception_type = 3;
    D.23333 = ctx->list;
    D.23334 = monoeg_g_slist_prepend (D.23333, vinfo);
    ctx->list = D.23334;
  }
  ctx->valid = 0;
  return;
  <D.23329>:
  D.23335 = ctx->header;
  D.23325 = ctx->ip_offset;
  target.74 = (unsigned int) target;
  D.23337 = is_valid_branch_instruction (D.23335, D.23325, target.74);
  switch (D.23337) <default: <D.23351>, case 1: <D.19339>, case 2: <D.19342>>
  <D.19339>:
  D.23340 = ctx->verifiable;
  if (D.23340 != 0) goto <D.23338>; else goto <D.23341>;
  <D.23341>:
  D.23342 = ctx->level;
  D.23343 = D.23342 & 128;
  if (D.23343 != 0) goto <D.23338>; else goto <D.23339>;
  <D.23338>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (24);
    vinfo->info.status = 8;
    D.23325 = ctx->ip_offset;
    D.23344 = monoeg_g_strdup_printf ("Branch target escapes out of exception block at 0x%04x", D.23325);
    vinfo->info.message = D.23344;
    vinfo->exception_type = 4;
    D.23333 = ctx->list;
    D.23345 = monoeg_g_slist_prepend (D.23333, vinfo);
    ctx->list = D.23345;
  }
  ctx->verifiable = 0;
  D.23342 = ctx->level;
  D.23346 = D.23342 & 16;
  if (D.23346 != 0) goto <D.23347>; else goto <D.23348>;
  <D.23347>:
  ctx->valid = 0;
  <D.23348>:
  <D.23339>:
  goto <D.19341>;
  <D.19342>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (24);
    vinfo->info.status = 1;
    D.23325 = ctx->ip_offset;
    D.23349 = monoeg_g_strdup_printf ("Branch target escapes out of exception block at 0x%04x", D.23325);
    vinfo->info.message = D.23349;
    vinfo->exception_type = 3;
    D.23333 = ctx->list;
    D.23350 = monoeg_g_slist_prepend (D.23333, vinfo);
    ctx->list = D.23350;
  }
  ctx->valid = 0;
  goto <D.19341>;
  <D.23351>:
  <D.19341>:
  ctx->target = target;
}


is_valid_branch_instruction (struct MonoMethodHeader * header, guint offset, guint target)
{
  struct MonoExceptionClause * D.23353;
  long unsigned int D.23354;
  long unsigned int D.23355;
  unsigned int D.23359;
  unsigned int D.23361;
  unsigned int D.23363;
  unsigned int D.23364;
  int D.23369;
  unsigned int D.23370;
  int iftmp.75;
  unsigned int D.23377;
  unsigned int D.23378;
  _Bool D.23380;
  int iftmp.76;
  _Bool D.23386;
  _Bool D.23387;
  int iftmp.77;
  _Bool D.23395;
  int iftmp.78;
  _Bool D.23401;
  _Bool D.23402;
  int iftmp.79;
  unsigned int D.23409;
  _Bool D.23412;
  int iftmp.80;
  _Bool D.23419;
  _Bool D.23420;
  <unnamed-unsigned:15> D.23423;
  int D.23424;
  int i;
  struct MonoExceptionClause * clause;

  i = 0;
  goto <D.18319>;
  <D.18318>:
  D.23353 = header->clauses;
  D.23354 = (long unsigned int) i;
  D.23355 = D.23354 * 32;
  clause = D.23353 + D.23355;
  D.23359 = clause->flags;
  if (D.23359 == 2) goto <D.23358>; else goto <D.23360>;
  <D.23360>:
  D.23359 = clause->flags;
  if (D.23359 == 4) goto <D.23358>; else goto <D.23357>;
  <D.23358>:
  D.23361 = clause->handler_offset;
  if (D.23361 > offset) goto <D.23356>; else goto <D.23362>;
  <D.23362>:
  D.23361 = clause->handler_offset;
  D.23363 = clause->handler_len;
  D.23364 = D.23361 + D.23363;
  if (D.23364 <= offset) goto <D.23356>; else goto <D.23357>;
  <D.23356>:
  D.23361 = clause->handler_offset;
  if (D.23361 <= target) goto <D.23365>; else goto <D.23366>;
  <D.23365>:
  D.23361 = clause->handler_offset;
  D.23363 = clause->handler_len;
  D.23364 = D.23361 + D.23363;
  if (D.23364 > target) goto <D.23367>; else goto <D.23368>;
  <D.23367>:
  D.23369 = 2;
  return D.23369;
  <D.23368>:
  <D.23366>:
  <D.23357>:
  D.23370 = clause->try_offset;
  if (D.23370 != target) goto <D.23371>; else goto <D.23372>;
  <D.23371>:
  D.23370 = clause->try_offset;
  if (D.23370 <= offset) goto <D.23376>; else goto <D.23374>;
  <D.23376>:
  D.23370 = clause->try_offset;
  D.23377 = clause->try_len;
  D.23378 = D.23370 + D.23377;
  if (D.23378 > offset) goto <D.23379>; else goto <D.23374>;
  <D.23379>:
  iftmp.75 = 1;
  goto <D.23375>;
  <D.23374>:
  iftmp.75 = 0;
  <D.23375>:
  D.23380 = (_Bool) iftmp.75;
  D.23370 = clause->try_offset;
  if (D.23370 <= target) goto <D.23384>; else goto <D.23382>;
  <D.23384>:
  D.23370 = clause->try_offset;
  D.23377 = clause->try_len;
  D.23378 = D.23370 + D.23377;
  if (D.23378 > target) goto <D.23385>; else goto <D.23382>;
  <D.23385>:
  iftmp.76 = 1;
  goto <D.23383>;
  <D.23382>:
  iftmp.76 = 0;
  <D.23383>:
  D.23386 = (_Bool) iftmp.76;
  D.23387 = D.23380 ^ D.23386;
  if (D.23387 != 0) goto <D.23388>; else goto <D.23389>;
  <D.23388>:
  D.23369 = 1;
  return D.23369;
  <D.23389>:
  <D.23372>:
  D.23361 = clause->handler_offset;
  if (D.23361 <= offset) goto <D.23393>; else goto <D.23391>;
  <D.23393>:
  D.23361 = clause->handler_offset;
  D.23363 = clause->handler_len;
  D.23364 = D.23361 + D.23363;
  if (D.23364 > offset) goto <D.23394>; else goto <D.23391>;
  <D.23394>:
  iftmp.77 = 1;
  goto <D.23392>;
  <D.23391>:
  iftmp.77 = 0;
  <D.23392>:
  D.23395 = (_Bool) iftmp.77;
  D.23361 = clause->handler_offset;
  if (D.23361 <= target) goto <D.23399>; else goto <D.23397>;
  <D.23399>:
  D.23361 = clause->handler_offset;
  D.23363 = clause->handler_len;
  D.23364 = D.23361 + D.23363;
  if (D.23364 > target) goto <D.23400>; else goto <D.23397>;
  <D.23400>:
  iftmp.78 = 1;
  goto <D.23398>;
  <D.23397>:
  iftmp.78 = 0;
  <D.23398>:
  D.23401 = (_Bool) iftmp.78;
  D.23402 = D.23395 ^ D.23401;
  if (D.23402 != 0) goto <D.23403>; else goto <D.23404>;
  <D.23403>:
  D.23369 = 1;
  return D.23369;
  <D.23404>:
  D.23359 = clause->flags;
  if (D.23359 == 1) goto <D.23408>; else goto <D.23406>;
  <D.23408>:
  D.23409 = clause->data.filter_offset;
  if (D.23409 <= offset) goto <D.23410>; else goto <D.23406>;
  <D.23410>:
  D.23361 = clause->handler_offset;
  if (D.23361 > offset) goto <D.23411>; else goto <D.23406>;
  <D.23411>:
  iftmp.79 = 1;
  goto <D.23407>;
  <D.23406>:
  iftmp.79 = 0;
  <D.23407>:
  D.23412 = (_Bool) iftmp.79;
  D.23359 = clause->flags;
  if (D.23359 == 1) goto <D.23416>; else goto <D.23414>;
  <D.23416>:
  D.23409 = clause->data.filter_offset;
  if (D.23409 <= target) goto <D.23417>; else goto <D.23414>;
  <D.23417>:
  D.23361 = clause->handler_offset;
  if (D.23361 > target) goto <D.23418>; else goto <D.23414>;
  <D.23418>:
  iftmp.80 = 1;
  goto <D.23415>;
  <D.23414>:
  iftmp.80 = 0;
  <D.23415>:
  D.23419 = (_Bool) iftmp.80;
  D.23420 = D.23412 ^ D.23419;
  if (D.23420 != 0) goto <D.23421>; else goto <D.23422>;
  <D.23421>:
  D.23369 = 1;
  return D.23369;
  <D.23422>:
  i = i + 1;
  <D.18319>:
  D.23423 = header->num_clauses;
  D.23424 = (int) D.23423;
  if (D.23424 > i) goto <D.18318>; else goto <D.18320>;
  <D.18320>:
  D.23369 = 0;
  return D.23369;
}


do_boolean_branch_op (struct VerifyContext * ctx, int delta)
{
  unsigned int D.23426;
  unsigned int delta.81;
  unsigned int D.23428;
  int D.23432;
  gchar * D.23433;
  struct GSList * D.23434;
  struct GSList * D.23435;
  struct MonoMethodHeader * D.23436;
  unsigned int target.82;
  int D.23438;
  int D.23441;
  int D.23443;
  int D.23444;
  gchar * D.23445;
  struct GSList * D.23446;
  int D.23447;
  gchar * D.23450;
  struct GSList * D.23451;
  int D.23453;
  int D.23456;
  const char * D.23462;
  gchar * D.23463;
  struct GSList * D.23464;
  int target;
  struct ILStackDesc * top;

  D.23426 = ctx->ip_offset;
  delta.81 = (unsigned int) delta;
  D.23428 = D.23426 + delta.81;
  target = (int) D.23428;
  if (target < 0) goto <D.23429>; else goto <D.23431>;
  <D.23431>:
  D.23432 = ctx->code_size;
  if (D.23432 <= target) goto <D.23429>; else goto <D.23430>;
  <D.23429>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (24);
    vinfo->info.status = 1;
    D.23426 = ctx->ip_offset;
    D.23433 = monoeg_g_strdup_printf ("Boolean branch target out of code at 0x%04x", D.23426);
    vinfo->info.message = D.23433;
    vinfo->exception_type = 3;
    D.23434 = ctx->list;
    D.23435 = monoeg_g_slist_prepend (D.23434, vinfo);
    ctx->list = D.23435;
  }
  ctx->valid = 0;
  return;
  <D.23430>:
  D.23436 = ctx->header;
  D.23426 = ctx->ip_offset;
  target.82 = (unsigned int) target;
  D.23438 = is_valid_branch_instruction (D.23436, D.23426, target.82);
  switch (D.23438) <default: <D.23452>, case 1: <D.18868>, case 2: <D.18871>>
  <D.18868>:
  D.23441 = ctx->verifiable;
  if (D.23441 != 0) goto <D.23439>; else goto <D.23442>;
  <D.23442>:
  D.23443 = ctx->level;
  D.23444 = D.23443 & 128;
  if (D.23444 != 0) goto <D.23439>; else goto <D.23440>;
  <D.23439>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (24);
    vinfo->info.status = 8;
    D.23426 = ctx->ip_offset;
    D.23445 = monoeg_g_strdup_printf ("Branch target escapes out of exception block at 0x%04x", D.23426);
    vinfo->info.message = D.23445;
    vinfo->exception_type = 4;
    D.23434 = ctx->list;
    D.23446 = monoeg_g_slist_prepend (D.23434, vinfo);
    ctx->list = D.23446;
  }
  ctx->verifiable = 0;
  D.23443 = ctx->level;
  D.23447 = D.23443 & 16;
  if (D.23447 != 0) goto <D.23448>; else goto <D.23449>;
  <D.23448>:
  ctx->valid = 0;
  <D.23449>:
  <D.23440>:
  goto <D.18870>;
  <D.18871>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (24);
    vinfo->info.status = 1;
    D.23426 = ctx->ip_offset;
    D.23450 = monoeg_g_strdup_printf ("Branch target escapes out of exception block at 0x%04x", D.23426);
    vinfo->info.message = D.23450;
    vinfo->exception_type = 3;
    D.23434 = ctx->list;
    D.23451 = monoeg_g_slist_prepend (D.23434, vinfo);
    ctx->list = D.23451;
  }
  ctx->valid = 0;
  return;
  <D.23452>:
  <D.18870>:
  ctx->target = target;
  D.23453 = check_underflow (ctx, 1);
  if (D.23453 == 0) goto <D.23454>; else goto <D.23455>;
  <D.23454>:
  return;
  <D.23455>:
  top = stack_pop (ctx);
  D.23456 = is_valid_bool_arg (top);
  if (D.23456 == 0) goto <D.23457>; else goto <D.23458>;
  <D.23457>:
  D.23441 = ctx->verifiable;
  if (D.23441 != 0) goto <D.23459>; else goto <D.23461>;
  <D.23461>:
  D.23443 = ctx->level;
  D.23444 = D.23443 & 128;
  if (D.23444 != 0) goto <D.23459>; else goto <D.23460>;
  <D.23459>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (24);
    vinfo->info.status = 8;
    D.23462 = stack_slot_get_name (top);
    D.23426 = ctx->ip_offset;
    D.23463 = monoeg_g_strdup_printf ("Argument type %s not valid for brtrue/brfalse at 0x%04x", D.23462, D.23426);
    vinfo->info.message = D.23463;
    vinfo->exception_type = 4;
    D.23434 = ctx->list;
    D.23464 = monoeg_g_slist_prepend (D.23434, vinfo);
    ctx->list = D.23464;
  }
  ctx->verifiable = 0;
  D.23443 = ctx->level;
  D.23447 = D.23443 & 16;
  if (D.23447 != 0) goto <D.23465>; else goto <D.23466>;
  <D.23465>:
  ctx->valid = 0;
  <D.23466>:
  <D.23460>:
  <D.23458>:
  check_unmanaged_pointer (ctx, top);
}


is_valid_bool_arg (struct ILStackDesc * arg)
{
  int D.23470;
  int D.23472;
  int D.23474;
  gboolean D.23475;
  int D.23476;
  struct MonoType * D.23477;
  _Bool D.23478;
  long int D.23479;
  long int D.23480;
  unsigned char D.23483;
  int D.23484;
  struct MonoGenericClass * D.23485;
  struct MonoClass * D.23486;
  long unsigned int D.23487;
  long unsigned int D.23488;
  _Bool D.23489;

  D.23470 = stack_slot_is_managed_pointer (arg);
  if (D.23470 != 0) goto <D.23468>; else goto <D.23471>;
  <D.23471>:
  D.23472 = stack_slot_is_boxed_value (arg);
  if (D.23472 != 0) goto <D.23468>; else goto <D.23473>;
  <D.23473>:
  D.23474 = stack_slot_is_null_literal (arg);
  if (D.23474 != 0) goto <D.23468>; else goto <D.23469>;
  <D.23468>:
  D.23475 = 1;
  return D.23475;
  <D.23469>:
  D.23476 = stack_slot_get_underlying_type (arg);
  switch (D.23476) <default: <D.18394>, case 1: <D.18381>, case 2: <D.18382>, case 3: <D.18383>, case 5: <D.18384>, case 6: <D.18385>>
  <D.18381>:
  <D.18382>:
  <D.18383>:
  <D.18384>:
  D.23475 = 1;
  return D.23475;
  <D.18385>:
  D.23477 = arg->type;
  D.23478 = D.23477 == 0B;
  D.23479 = (long int) D.23478;
  D.23480 = __builtin_expect (D.23479, 0);
  if (D.23480 != 0) goto <D.23481>; else goto <D.23482>;
  <D.23481>:
  monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "verify.c", 1433, "arg->type");
  <D.23482>:
  D.23477 = arg->type;
  D.23483 = D.23477->type;
  D.23484 = (int) D.23483;
  switch (D.23484) <default: <D.23490>, case 14: <D.18387>, case 15: <D.18392>, case 18: <D.18386>, case 20: <D.18390>, case 21: <D.18393>, case 27: <D.18391>, case 28: <D.18388>, case 29: <D.18389>>
  <D.18386>:
  <D.18387>:
  <D.18388>:
  <D.18389>:
  <D.18390>:
  <D.18391>:
  <D.18392>:
  D.23475 = 1;
  return D.23475;
  <D.18393>:
  D.23477 = arg->type;
  D.23485 = D.23477->data.generic_class;
  D.23486 = D.23485->container_class;
  D.23487 = BIT_FIELD_REF <*D.23486, 64, 256>;
  D.23488 = D.23487 & 1152921504606846976;
  D.23489 = D.23488 == 0;
  D.23475 = (gboolean) D.23489;
  return D.23475;
  <D.23490>:
  <D.18394>:
  D.23475 = 0;
  return D.23475;
}


check_unmanaged_pointer (struct VerifyContext * ctx, struct ILStackDesc * value)
{
  int D.23492;
  int D.23497;
  int D.23499;
  int D.23500;
  unsigned int D.23501;
  gchar * D.23502;
  struct GSList * D.23503;
  struct GSList * D.23504;
  int D.23505;
  gboolean D.23508;

  D.23492 = stack_slot_get_type (value);
  if (D.23492 == 5) goto <D.23493>; else goto <D.23494>;
  <D.23493>:
  D.23497 = ctx->verifiable;
  if (D.23497 != 0) goto <D.23495>; else goto <D.23498>;
  <D.23498>:
  D.23499 = ctx->level;
  D.23500 = D.23499 & 128;
  if (D.23500 != 0) goto <D.23495>; else goto <D.23496>;
  <D.23495>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (24);
    vinfo->info.status = 8;
    D.23501 = ctx->ip_offset;
    D.23502 = monoeg_g_strdup_printf ("Unmanaged pointer is not a verifiable type at 0x%04x", D.23501);
    vinfo->info.message = D.23502;
    vinfo->exception_type = 4;
    D.23503 = ctx->list;
    D.23504 = monoeg_g_slist_prepend (D.23503, vinfo);
    ctx->list = D.23504;
  }
  ctx->verifiable = 0;
  D.23499 = ctx->level;
  D.23505 = D.23499 & 16;
  if (D.23505 != 0) goto <D.23506>; else goto <D.23507>;
  <D.23506>:
  ctx->valid = 0;
  <D.23507>:
  <D.23496>:
  D.23508 = 0;
  return D.23508;
  <D.23494>:
  D.23508 = 1;
  return D.23508;
}


do_switch (struct VerifyContext * ctx, int count, const unsigned char * data)
{
  unsigned int D.23510;
  int D.23511;
  unsigned int D.23512;
  unsigned int D.23513;
  unsigned int D.23514;
  int D.23515;
  int D.23518;
  int D.23521;
  int D.23526;
  int D.23528;
  int D.23529;
  gchar * D.23530;
  struct GSList * D.23531;
  struct GSList * D.23532;
  int D.23533;
  int D.23536;
  sizetype D.23537;
  const unsigned char * D.23538;
  unsigned int D.23539;
  unsigned int D.23540;
  unsigned int D.23541;
  unsigned int D.23542;
  unsigned int D.23543;
  unsigned int D.23544;
  unsigned int D.23545;
  unsigned int D.23546;
  unsigned int D.23547;
  unsigned int D.23548;
  unsigned int base.83;
  unsigned int D.23550;
  int D.23554;
  gchar * D.23555;
  struct GSList * D.23556;
  struct MonoMethodHeader * D.23557;
  unsigned int target.84;
  int D.23559;
  gchar * D.23563;
  struct GSList * D.23564;
  gchar * D.23567;
  struct GSList * D.23568;
  struct ILCodeDesc * D.23570;
  struct ILCodeDesc * D.23571;
  long unsigned int D.23572;
  long unsigned int D.23573;
  struct ILCodeDesc * D.23574;
  int i;
  int base;
  struct ILStackDesc * value;

  D.23510 = ctx->ip_offset;
  D.23511 = count * 4;
  D.23512 = (unsigned int) D.23511;
  D.23513 = D.23510 + D.23512;
  D.23514 = D.23513 + 5;
  base = (int) D.23514;
  D.23515 = check_underflow (ctx, 1);
  if (D.23515 == 0) goto <D.23516>; else goto <D.23517>;
  <D.23516>:
  return;
  <D.23517>:
  value = stack_pop (ctx);
  D.23518 = stack_slot_get_type (value);
  if (D.23518 != 1) goto <D.23519>; else goto <D.23520>;
  <D.23519>:
  D.23521 = stack_slot_get_type (value);
  if (D.23521 != 3) goto <D.23522>; else goto <D.23523>;
  <D.23522>:
  D.23526 = ctx->verifiable;
  if (D.23526 != 0) goto <D.23524>; else goto <D.23527>;
  <D.23527>:
  D.23528 = ctx->level;
  D.23529 = D.23528 & 128;
  if (D.23529 != 0) goto <D.23524>; else goto <D.23525>;
  <D.23524>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (24);
    vinfo->info.status = 8;
    D.23510 = ctx->ip_offset;
    D.23530 = monoeg_g_strdup_printf ("Invalid argument to switch at 0x%04x", D.23510);
    vinfo->info.message = D.23530;
    vinfo->exception_type = 4;
    D.23531 = ctx->list;
    D.23532 = monoeg_g_slist_prepend (D.23531, vinfo);
    ctx->list = D.23532;
  }
  ctx->verifiable = 0;
  D.23528 = ctx->level;
  D.23533 = D.23528 & 16;
  if (D.23533 != 0) goto <D.23534>; else goto <D.23535>;
  <D.23534>:
  ctx->valid = 0;
  <D.23535>:
  <D.23525>:
  <D.23523>:
  <D.23520>:
  i = 0;
  goto <D.19361>;
  <D.19360>:
  {
    int target;

    D.23536 = i * 4;
    D.23537 = (sizetype) D.23536;
    D.23538 = data + D.23537;
    D.23539 = MEM[(const guint32 *)D.23538];
    D.23540 = D.23539 << 24;
    D.23536 = i * 4;
    D.23537 = (sizetype) D.23536;
    D.23538 = data + D.23537;
    D.23539 = MEM[(const guint32 *)D.23538];
    D.23541 = D.23539 >> 8;
    D.23542 = D.23541 & 65280;
    D.23543 = D.23540 | D.23542;
    D.23536 = i * 4;
    D.23537 = (sizetype) D.23536;
    D.23538 = data + D.23537;
    D.23539 = MEM[(const guint32 *)D.23538];
    D.23544 = D.23539 << 8;
    D.23545 = D.23544 & 16711680;
    D.23546 = D.23543 | D.23545;
    D.23536 = i * 4;
    D.23537 = (sizetype) D.23536;
    D.23538 = data + D.23537;
    D.23539 = MEM[(const guint32 *)D.23538];
    D.23547 = D.23539 >> 24;
    D.23548 = D.23546 | D.23547;
    base.83 = (unsigned int) base;
    D.23550 = D.23548 + base.83;
    target = (int) D.23550;
    if (target < 0) goto <D.23551>; else goto <D.23553>;
    <D.23553>:
    D.23554 = ctx->code_size;
    if (D.23554 <= target) goto <D.23551>; else goto <D.23552>;
    <D.23551>:
    {
      struct MonoVerifyInfoExtended * vinfo;

      vinfo = monoeg_malloc (24);
      vinfo->info.status = 1;
      D.23510 = ctx->ip_offset;
      D.23555 = monoeg_g_strdup_printf ("Switch target %x out of code at 0x%04x", i, D.23510);
      vinfo->info.message = D.23555;
      vinfo->exception_type = 3;
      D.23531 = ctx->list;
      D.23556 = monoeg_g_slist_prepend (D.23531, vinfo);
      ctx->list = D.23556;
    }
    ctx->valid = 0;
    return;
    <D.23552>:
    D.23557 = ctx->header;
    D.23510 = ctx->ip_offset;
    target.84 = (unsigned int) target;
    D.23559 = is_valid_branch_instruction (D.23557, D.23510, target.84);
    switch (D.23559) <default: <D.23569>, case 1: <D.19355>, case 2: <D.19358>>
    <D.19355>:
    D.23526 = ctx->verifiable;
    if (D.23526 != 0) goto <D.23560>; else goto <D.23562>;
    <D.23562>:
    D.23528 = ctx->level;
    D.23529 = D.23528 & 128;
    if (D.23529 != 0) goto <D.23560>; else goto <D.23561>;
    <D.23560>:
    {
      struct MonoVerifyInfoExtended * vinfo;

      vinfo = monoeg_malloc (24);
      vinfo->info.status = 8;
      D.23510 = ctx->ip_offset;
      D.23563 = monoeg_g_strdup_printf ("Switch target %x escapes out of exception block at 0x%04x", i, D.23510);
      vinfo->info.message = D.23563;
      vinfo->exception_type = 4;
      D.23531 = ctx->list;
      D.23564 = monoeg_g_slist_prepend (D.23531, vinfo);
      ctx->list = D.23564;
    }
    ctx->verifiable = 0;
    D.23528 = ctx->level;
    D.23533 = D.23528 & 16;
    if (D.23533 != 0) goto <D.23565>; else goto <D.23566>;
    <D.23565>:
    ctx->valid = 0;
    <D.23566>:
    <D.23561>:
    goto <D.19357>;
    <D.19358>:
    {
      struct MonoVerifyInfoExtended * vinfo;

      vinfo = monoeg_malloc (24);
      vinfo->info.status = 1;
      D.23510 = ctx->ip_offset;
      D.23567 = monoeg_g_strdup_printf ("Switch target %x escapes out of exception block at 0x%04x", i, D.23510);
      vinfo->info.message = D.23567;
      vinfo->exception_type = 3;
      D.23531 = ctx->list;
      D.23568 = monoeg_g_slist_prepend (D.23531, vinfo);
      ctx->list = D.23568;
    }
    ctx->valid = 0;
    return;
    <D.23569>:
    <D.19357>:
    D.23570 = &ctx->eval;
    D.23571 = ctx->code;
    D.23572 = (long unsigned int) target;
    D.23573 = D.23572 * 16;
    D.23574 = D.23571 + D.23573;
    merge_stacks (ctx, D.23570, D.23574, 0, 1);
  }
  i = i + 1;
  <D.19361>:
  if (i < count) goto <D.19360>; else goto <D.19362>;
  <D.19362>:
}


do_load_indirect (struct VerifyContext * ctx, int opcode)
{
  unsigned int D.23576;
  unsigned int D.23577;
  int D.23578;
  int D.23581;
  int D.23586;
  int D.23588;
  int D.23589;
  unsigned int D.23590;
  gchar * D.23591;
  struct GSList * D.23592;
  struct GSList * D.23593;
  int D.23594;
  struct ILStackDesc * D.23597;
  struct MonoType * D.23598;
  int D.23603;
  struct MonoType * D.23605;
  struct MonoClass * D.23606;
  long unsigned int D.23607;
  long unsigned int D.23608;
  gchar * D.23612;
  struct GSList * D.23613;
  struct ILStackDesc * D.23616;
  struct MonoType * D.23617;
  struct MonoType * D.23619;
  struct MonoType * D.23620;
  int D.23621;
  gchar * D.23627;
  struct GSList * D.23628;
  struct ILStackDesc * D.23631;
  struct MonoType * D.23632;
  struct ILStackDesc * value;

  D.23576 = ctx->prefix_set;
  D.23577 = D.23576 & 4294967292;
  ctx->prefix_set = D.23577;
  D.23578 = check_underflow (ctx, 1);
  if (D.23578 == 0) goto <D.23579>; else goto <D.23580>;
  <D.23579>:
  return;
  <D.23580>:
  value = stack_pop (ctx);
  D.23581 = stack_slot_is_managed_pointer (value);
  if (D.23581 == 0) goto <D.23582>; else goto <D.23583>;
  <D.23582>:
  D.23586 = ctx->verifiable;
  if (D.23586 != 0) goto <D.23584>; else goto <D.23587>;
  <D.23587>:
  D.23588 = ctx->level;
  D.23589 = D.23588 & 128;
  if (D.23589 != 0) goto <D.23584>; else goto <D.23585>;
  <D.23584>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (24);
    vinfo->info.status = 8;
    D.23590 = ctx->ip_offset;
    D.23591 = monoeg_g_strdup_printf ("Load indirect not using a manager pointer at 0x%04x", D.23590);
    vinfo->info.message = D.23591;
    vinfo->exception_type = 4;
    D.23592 = ctx->list;
    D.23593 = monoeg_g_slist_prepend (D.23592, vinfo);
    ctx->list = D.23593;
  }
  ctx->verifiable = 0;
  D.23588 = ctx->level;
  D.23594 = D.23588 & 16;
  if (D.23594 != 0) goto <D.23595>; else goto <D.23596>;
  <D.23595>:
  ctx->valid = 0;
  <D.23596>:
  <D.23585>:
  D.23597 = stack_push (ctx);
  D.23598 = mono_type_from_opcode (opcode);
  set_stack_value (ctx, D.23597, D.23598, 0);
  return;
  <D.23583>:
  if (opcode == 80) goto <D.23599>; else goto <D.23600>;
  <D.23599>:
  D.23603 = stack_slot_get_underlying_type (value);
  if (D.23603 != 6) goto <D.23601>; else goto <D.23604>;
  <D.23604>:
  D.23605 = value->type;
  D.23606 = mono_class_from_mono_type (D.23605);
  D.23607 = BIT_FIELD_REF <*D.23606, 64, 256>;
  D.23608 = D.23607 & 1152921504606846976;
  if (D.23608 != 0) goto <D.23601>; else goto <D.23602>;
  <D.23601>:
  D.23586 = ctx->verifiable;
  if (D.23586 != 0) goto <D.23609>; else goto <D.23611>;
  <D.23611>:
  D.23588 = ctx->level;
  D.23589 = D.23588 & 128;
  if (D.23589 != 0) goto <D.23609>; else goto <D.23610>;
  <D.23609>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (24);
    vinfo->info.status = 8;
    D.23590 = ctx->ip_offset;
    D.23612 = monoeg_g_strdup_printf ("Invalid type at stack for ldind_ref expected object byref operation at 0x%04x", D.23590);
    vinfo->info.message = D.23612;
    vinfo->exception_type = 4;
    D.23592 = ctx->list;
    D.23613 = monoeg_g_slist_prepend (D.23592, vinfo);
    ctx->list = D.23613;
  }
  ctx->verifiable = 0;
  D.23588 = ctx->level;
  D.23594 = D.23588 & 16;
  if (D.23594 != 0) goto <D.23614>; else goto <D.23615>;
  <D.23614>:
  ctx->valid = 0;
  <D.23615>:
  <D.23610>:
  <D.23602>:
  D.23616 = stack_push (ctx);
  D.23605 = value->type;
  D.23617 = mono_type_get_type_byval (D.23605);
  set_stack_value (ctx, D.23616, D.23617, 0);
  goto <D.23618>;
  <D.23600>:
  D.23619 = mono_type_from_opcode (opcode);
  D.23605 = value->type;
  D.23620 = mono_type_get_type_byval (D.23605);
  D.23621 = verify_type_compatibility_full (ctx, D.23619, D.23620, 1);
  if (D.23621 == 0) goto <D.23622>; else goto <D.23623>;
  <D.23622>:
  D.23586 = ctx->verifiable;
  if (D.23586 != 0) goto <D.23624>; else goto <D.23626>;
  <D.23626>:
  D.23588 = ctx->level;
  D.23589 = D.23588 & 128;
  if (D.23589 != 0) goto <D.23624>; else goto <D.23625>;
  <D.23624>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (24);
    vinfo->info.status = 8;
    D.23590 = ctx->ip_offset;
    D.23627 = monoeg_g_strdup_printf ("Invalid type at stack for ldind 0x%x operation at 0x%04x", opcode, D.23590);
    vinfo->info.message = D.23627;
    vinfo->exception_type = 4;
    D.23592 = ctx->list;
    D.23628 = monoeg_g_slist_prepend (D.23592, vinfo);
    ctx->list = D.23628;
  }
  ctx->verifiable = 0;
  D.23588 = ctx->level;
  D.23594 = D.23588 & 16;
  if (D.23594 != 0) goto <D.23629>; else goto <D.23630>;
  <D.23629>:
  ctx->valid = 0;
  <D.23630>:
  <D.23625>:
  <D.23623>:
  D.23631 = stack_push (ctx);
  D.23632 = mono_type_from_opcode (opcode);
  set_stack_value (ctx, D.23631, D.23632, 0);
  <D.23618>:
}


mono_type_from_opcode (int opcode)
{
  struct MonoType * D.23634;
  struct MonoClass * D.23635;
  struct MonoClass * D.23636;
  struct MonoClass * D.23637;
  struct MonoClass * D.23638;
  struct MonoClass * D.23639;
  struct MonoClass * D.23640;
  struct MonoClass * D.23641;
  struct MonoClass * D.23642;

  switch (opcode) <default: <D.19231>, case 70: <D.19193>, case 71: <D.19194>, case 72: <D.19199>, case 73: <D.19200>, case 74: <D.19205>, case 75: <D.19206>, case 76: <D.19211>, case 77: <D.19223>, case 78: <D.19215>, case 79: <D.19219>, case 80: <D.19227>, case 81: <D.19228>, case 82: <D.19195>, case 83: <D.19201>, case 84: <D.19207>, case 85: <D.19212>, case 86: <D.19216>, case 87: <D.19220>, case 144: <D.19196>, case 145: <D.19197>, case 146: <D.19202>, case 147: <D.19203>, case 148: <D.19208>, case 149: <D.19209>, case 150: <D.19213>, case 151: <D.19225>, case 152: <D.19217>, case 153: <D.19221>, case 154: <D.19229>, case 155: <D.19226>, case 156: <D.19198>, case 157: <D.19204>, case 158: <D.19210>, case 159: <D.19214>, case 160: <D.19218>, case 161: <D.19222>, case 162: <D.19230>, case 223: <D.19224>>
  <D.19193>:
  <D.19194>:
  <D.19195>:
  <D.19196>:
  <D.19197>:
  <D.19198>:
  D.23635 = mono_defaults.sbyte_class;
  D.23634 = &D.23635->byval_arg;
  return D.23634;
  <D.19199>:
  <D.19200>:
  <D.19201>:
  <D.19202>:
  <D.19203>:
  <D.19204>:
  D.23636 = mono_defaults.int16_class;
  D.23634 = &D.23636->byval_arg;
  return D.23634;
  <D.19205>:
  <D.19206>:
  <D.19207>:
  <D.19208>:
  <D.19209>:
  <D.19210>:
  D.23637 = mono_defaults.int32_class;
  D.23634 = &D.23637->byval_arg;
  return D.23634;
  <D.19211>:
  <D.19212>:
  <D.19213>:
  <D.19214>:
  D.23638 = mono_defaults.int64_class;
  D.23634 = &D.23638->byval_arg;
  return D.23634;
  <D.19215>:
  <D.19216>:
  <D.19217>:
  <D.19218>:
  D.23639 = mono_defaults.single_class;
  D.23634 = &D.23639->byval_arg;
  return D.23634;
  <D.19219>:
  <D.19220>:
  <D.19221>:
  <D.19222>:
  D.23640 = mono_defaults.double_class;
  D.23634 = &D.23640->byval_arg;
  return D.23634;
  <D.19223>:
  <D.19224>:
  <D.19225>:
  <D.19226>:
  D.23641 = mono_defaults.int_class;
  D.23634 = &D.23641->byval_arg;
  return D.23634;
  <D.19227>:
  <D.19228>:
  <D.19229>:
  <D.19230>:
  D.23642 = mono_defaults.object_class;
  D.23634 = &D.23642->byval_arg;
  return D.23634;
  <D.19231>:
  monoeg_g_log (0B, 4, "unknown opcode %02x in mono_type_from_opcode ", opcode);
  <D.19232>:
  goto <D.19232>;
  D.23634 = 0B;
  return D.23634;
}


do_store_indirect (struct VerifyContext * ctx, int opcode)
{
  unsigned int D.23644;
  unsigned int D.23645;
  int D.23646;
  int D.23649;
  int D.23652;
  int D.23657;
  int D.23659;
  int D.23660;
  unsigned int D.23661;
  gchar * D.23662;
  struct GSList * D.23663;
  struct GSList * D.23664;
  int D.23665;
  int D.23668;
  gchar * D.23674;
  struct GSList * D.23675;
  struct MonoType * D.23678;
  struct MonoType * D.23679;
  struct MonoType * D.23680;
  int D.23681;
  gchar * D.23687;
  struct GSList * D.23688;
  struct MonoType * D.23691;
  int D.23692;
  gchar * D.23698;
  struct GSList * D.23699;
  struct ILStackDesc * addr;
  struct ILStackDesc * val;

  D.23644 = ctx->prefix_set;
  D.23645 = D.23644 & 4294967292;
  ctx->prefix_set = D.23645;
  D.23646 = check_underflow (ctx, 2);
  if (D.23646 == 0) goto <D.23647>; else goto <D.23648>;
  <D.23647>:
  return;
  <D.23648>:
  val = stack_pop (ctx);
  addr = stack_pop (ctx);
  check_unmanaged_pointer (ctx, addr);
  D.23649 = stack_slot_is_managed_pointer (addr);
  if (D.23649 == 0) goto <D.23650>; else goto <D.23651>;
  <D.23650>:
  D.23652 = stack_slot_get_type (addr);
  if (D.23652 != 5) goto <D.23653>; else goto <D.23654>;
  <D.23653>:
  D.23657 = ctx->verifiable;
  if (D.23657 != 0) goto <D.23655>; else goto <D.23658>;
  <D.23658>:
  D.23659 = ctx->level;
  D.23660 = D.23659 & 128;
  if (D.23660 != 0) goto <D.23655>; else goto <D.23656>;
  <D.23655>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (24);
    vinfo->info.status = 8;
    D.23661 = ctx->ip_offset;
    D.23662 = monoeg_g_strdup_printf ("Invalid non-pointer argument to stind at 0x%04x", D.23661);
    vinfo->info.message = D.23662;
    vinfo->exception_type = 4;
    D.23663 = ctx->list;
    D.23664 = monoeg_g_slist_prepend (D.23663, vinfo);
    ctx->list = D.23664;
  }
  ctx->verifiable = 0;
  D.23659 = ctx->level;
  D.23665 = D.23659 & 16;
  if (D.23665 != 0) goto <D.23666>; else goto <D.23667>;
  <D.23666>:
  ctx->valid = 0;
  <D.23667>:
  <D.23656>:
  return;
  <D.23654>:
  <D.23651>:
  D.23668 = stack_slot_is_managed_mutability_pointer (addr);
  if (D.23668 != 0) goto <D.23669>; else goto <D.23670>;
  <D.23669>:
  D.23657 = ctx->verifiable;
  if (D.23657 != 0) goto <D.23671>; else goto <D.23673>;
  <D.23673>:
  D.23659 = ctx->level;
  D.23660 = D.23659 & 128;
  if (D.23660 != 0) goto <D.23671>; else goto <D.23672>;
  <D.23671>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (24);
    vinfo->info.status = 8;
    D.23661 = ctx->ip_offset;
    D.23674 = monoeg_g_strdup_printf ("Cannot use a readonly pointer with stind at 0x%04x", D.23661);
    vinfo->info.message = D.23674;
    vinfo->exception_type = 4;
    D.23663 = ctx->list;
    D.23675 = monoeg_g_slist_prepend (D.23663, vinfo);
    ctx->list = D.23675;
  }
  ctx->verifiable = 0;
  D.23659 = ctx->level;
  D.23665 = D.23659 & 16;
  if (D.23665 != 0) goto <D.23676>; else goto <D.23677>;
  <D.23676>:
  ctx->valid = 0;
  <D.23677>:
  <D.23672>:
  return;
  <D.23670>:
  D.23678 = mono_type_from_opcode (opcode);
  D.23679 = addr->type;
  D.23680 = mono_type_get_type_byval (D.23679);
  D.23681 = verify_type_compatibility_full (ctx, D.23678, D.23680, 1);
  if (D.23681 == 0) goto <D.23682>; else goto <D.23683>;
  <D.23682>:
  D.23657 = ctx->verifiable;
  if (D.23657 != 0) goto <D.23684>; else goto <D.23686>;
  <D.23686>:
  D.23659 = ctx->level;
  D.23660 = D.23659 & 128;
  if (D.23660 != 0) goto <D.23684>; else goto <D.23685>;
  <D.23684>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (24);
    vinfo->info.status = 8;
    D.23661 = ctx->ip_offset;
    D.23687 = monoeg_g_strdup_printf ("Invalid addr type at stack for stind 0x%x operation at 0x%04x", opcode, D.23661);
    vinfo->info.message = D.23687;
    vinfo->exception_type = 4;
    D.23663 = ctx->list;
    D.23688 = monoeg_g_slist_prepend (D.23663, vinfo);
    ctx->list = D.23688;
  }
  ctx->verifiable = 0;
  D.23659 = ctx->level;
  D.23665 = D.23659 & 16;
  if (D.23665 != 0) goto <D.23689>; else goto <D.23690>;
  <D.23689>:
  ctx->valid = 0;
  <D.23690>:
  <D.23685>:
  <D.23683>:
  D.23691 = mono_type_from_opcode (opcode);
  D.23692 = verify_stack_type_compatibility (ctx, D.23691, val);
  if (D.23692 == 0) goto <D.23693>; else goto <D.23694>;
  <D.23693>:
  D.23657 = ctx->verifiable;
  if (D.23657 != 0) goto <D.23695>; else goto <D.23697>;
  <D.23697>:
  D.23659 = ctx->level;
  D.23660 = D.23659 & 128;
  if (D.23660 != 0) goto <D.23695>; else goto <D.23696>;
  <D.23695>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (24);
    vinfo->info.status = 8;
    D.23661 = ctx->ip_offset;
    D.23698 = monoeg_g_strdup_printf ("Invalid value type at stack for stind 0x%x operation at 0x%04x", opcode, D.23661);
    vinfo->info.message = D.23698;
    vinfo->exception_type = 4;
    D.23663 = ctx->list;
    D.23699 = monoeg_g_slist_prepend (D.23663, vinfo);
    ctx->list = D.23699;
  }
  ctx->verifiable = 0;
  D.23659 = ctx->level;
  D.23665 = D.23659 & 16;
  if (D.23665 != 0) goto <D.23700>; else goto <D.23701>;
  <D.23700>:
  ctx->valid = 0;
  <D.23701>:
  <D.23696>:
  <D.23694>:
}


do_unary_math_op (struct VerifyContext * ctx, int op)
{
  int D.23703;
  int D.23706;
  struct MonoType * D.23708;
  int D.23709;
  int D.23713;
  int D.23715;
  int D.23716;
  unsigned int D.23717;
  gchar * D.23718;
  struct GSList * D.23719;
  struct GSList * D.23720;
  int D.23721;
  struct ILStackDesc * value;

  D.23703 = check_underflow (ctx, 1);
  if (D.23703 == 0) goto <D.23704>; else goto <D.23705>;
  <D.23704>:
  return;
  <D.23705>:
  value = stack_pop (ctx);
  D.23706 = stack_slot_get_type (value);
  switch (D.23706) <default: <D.19059>, case 1: <D.19053>, case 2: <D.19054>, case 3: <D.19055>, case 4: <D.19057>, case 6: <D.19058>>
  <D.19053>:
  <D.19054>:
  <D.19055>:
  goto <D.19056>;
  <D.19057>:
  if (op == 101) goto <D.19056>; else goto <D.23707>;
  <D.23707>:
  <D.19058>:
  D.23708 = value->type;
  D.23709 = mono_type_is_enum_type (D.23708);
  if (D.23709 != 0) goto <D.19056>; else goto <D.23710>;
  <D.23710>:
  <D.19059>:
  D.23713 = ctx->verifiable;
  if (D.23713 != 0) goto <D.23711>; else goto <D.23714>;
  <D.23714>:
  D.23715 = ctx->level;
  D.23716 = D.23715 & 128;
  if (D.23716 != 0) goto <D.23711>; else goto <D.23712>;
  <D.23711>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (24);
    vinfo->info.status = 8;
    D.23717 = ctx->ip_offset;
    D.23718 = monoeg_g_strdup_printf ("Invalid type at stack for unary not at 0x%04x", D.23717);
    vinfo->info.message = D.23718;
    vinfo->exception_type = 4;
    D.23719 = ctx->list;
    D.23720 = monoeg_g_slist_prepend (D.23719, vinfo);
    ctx->list = D.23720;
  }
  ctx->verifiable = 0;
  D.23715 = ctx->level;
  D.23721 = D.23715 & 16;
  if (D.23721 != 0) goto <D.23722>; else goto <D.23723>;
  <D.23722>:
  ctx->valid = 0;
  <D.23723>:
  <D.23712>:
  <D.19056>:
  stack_push_stack_val (ctx, value);
}


stack_push_stack_val (struct VerifyContext * ctx, struct ILStackDesc * value)
{
  struct ILStackDesc * D.23726;
  struct ILStackDesc * top;

  top = stack_push (ctx);
  copy_stack_value (top, value);
  D.23726 = top;
  return D.23726;
}


do_cpobj (struct VerifyContext * ctx, int token)
{
  int D.23730;
  int D.23733;
  int D.23738;
  int D.23740;
  int D.23741;
  unsigned int D.23742;
  gchar * D.23743;
  struct GSList * D.23744;
  struct GSList * D.23745;
  int D.23746;
  int D.23749;
  gchar * D.23755;
  struct GSList * D.23756;
  int D.23759;
  gchar * D.23765;
  struct GSList * D.23766;
  struct MonoType * D.23769;
  struct MonoType * D.23770;
  int D.23771;
  gchar * D.23777;
  struct GSList * D.23778;
  struct MonoType * D.23781;
  struct MonoType * D.23782;
  int D.23783;
  gchar * D.23789;
  struct GSList * D.23790;
  struct ILStackDesc * dest;
  struct ILStackDesc * src;
  struct MonoType * type;

  type = get_boxable_mono_type (ctx, token, "cpobj");
  if (type == 0B) goto <D.23728>; else goto <D.23729>;
  <D.23728>:
  return;
  <D.23729>:
  D.23730 = check_underflow (ctx, 2);
  if (D.23730 == 0) goto <D.23731>; else goto <D.23732>;
  <D.23731>:
  return;
  <D.23732>:
  src = stack_pop (ctx);
  dest = stack_pop (ctx);
  D.23733 = stack_slot_is_managed_pointer (src);
  if (D.23733 == 0) goto <D.23734>; else goto <D.23735>;
  <D.23734>:
  D.23738 = ctx->verifiable;
  if (D.23738 != 0) goto <D.23736>; else goto <D.23739>;
  <D.23739>:
  D.23740 = ctx->level;
  D.23741 = D.23740 & 128;
  if (D.23741 != 0) goto <D.23736>; else goto <D.23737>;
  <D.23736>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (24);
    vinfo->info.status = 8;
    D.23742 = ctx->ip_offset;
    D.23743 = monoeg_g_strdup_printf ("Invalid source of cpobj operation at 0x%04x", D.23742);
    vinfo->info.message = D.23743;
    vinfo->exception_type = 4;
    D.23744 = ctx->list;
    D.23745 = monoeg_g_slist_prepend (D.23744, vinfo);
    ctx->list = D.23745;
  }
  ctx->verifiable = 0;
  D.23740 = ctx->level;
  D.23746 = D.23740 & 16;
  if (D.23746 != 0) goto <D.23747>; else goto <D.23748>;
  <D.23747>:
  ctx->valid = 0;
  <D.23748>:
  <D.23737>:
  <D.23735>:
  D.23749 = stack_slot_is_managed_pointer (dest);
  if (D.23749 == 0) goto <D.23750>; else goto <D.23751>;
  <D.23750>:
  D.23738 = ctx->verifiable;
  if (D.23738 != 0) goto <D.23752>; else goto <D.23754>;
  <D.23754>:
  D.23740 = ctx->level;
  D.23741 = D.23740 & 128;
  if (D.23741 != 0) goto <D.23752>; else goto <D.23753>;
  <D.23752>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (24);
    vinfo->info.status = 8;
    D.23742 = ctx->ip_offset;
    D.23755 = monoeg_g_strdup_printf ("Invalid destination of cpobj operation at 0x%04x", D.23742);
    vinfo->info.message = D.23755;
    vinfo->exception_type = 4;
    D.23744 = ctx->list;
    D.23756 = monoeg_g_slist_prepend (D.23744, vinfo);
    ctx->list = D.23756;
  }
  ctx->verifiable = 0;
  D.23740 = ctx->level;
  D.23746 = D.23740 & 16;
  if (D.23746 != 0) goto <D.23757>; else goto <D.23758>;
  <D.23757>:
  ctx->valid = 0;
  <D.23758>:
  <D.23753>:
  <D.23751>:
  D.23759 = stack_slot_is_managed_mutability_pointer (dest);
  if (D.23759 != 0) goto <D.23760>; else goto <D.23761>;
  <D.23760>:
  D.23738 = ctx->verifiable;
  if (D.23738 != 0) goto <D.23762>; else goto <D.23764>;
  <D.23764>:
  D.23740 = ctx->level;
  D.23741 = D.23740 & 128;
  if (D.23741 != 0) goto <D.23762>; else goto <D.23763>;
  <D.23762>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (24);
    vinfo->info.status = 8;
    D.23742 = ctx->ip_offset;
    D.23765 = monoeg_g_strdup_printf ("Cannot use a readonly pointer with cpobj at 0x%04x", D.23742);
    vinfo->info.message = D.23765;
    vinfo->exception_type = 4;
    D.23744 = ctx->list;
    D.23766 = monoeg_g_slist_prepend (D.23744, vinfo);
    ctx->list = D.23766;
  }
  ctx->verifiable = 0;
  D.23740 = ctx->level;
  D.23746 = D.23740 & 16;
  if (D.23746 != 0) goto <D.23767>; else goto <D.23768>;
  <D.23767>:
  ctx->valid = 0;
  <D.23768>:
  <D.23763>:
  <D.23761>:
  D.23769 = src->type;
  D.23770 = mono_type_get_type_byval (D.23769);
  D.23771 = verify_type_compatibility (ctx, type, D.23770);
  if (D.23771 == 0) goto <D.23772>; else goto <D.23773>;
  <D.23772>:
  D.23738 = ctx->verifiable;
  if (D.23738 != 0) goto <D.23774>; else goto <D.23776>;
  <D.23776>:
  D.23740 = ctx->level;
  D.23741 = D.23740 & 128;
  if (D.23741 != 0) goto <D.23774>; else goto <D.23775>;
  <D.23774>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (24);
    vinfo->info.status = 8;
    D.23742 = ctx->ip_offset;
    D.23777 = monoeg_g_strdup_printf ("Token and source types of cpobj don\'t match at 0x%04x", D.23742);
    vinfo->info.message = D.23777;
    vinfo->exception_type = 4;
    D.23744 = ctx->list;
    D.23778 = monoeg_g_slist_prepend (D.23744, vinfo);
    ctx->list = D.23778;
  }
  ctx->verifiable = 0;
  D.23740 = ctx->level;
  D.23746 = D.23740 & 16;
  if (D.23746 != 0) goto <D.23779>; else goto <D.23780>;
  <D.23779>:
  ctx->valid = 0;
  <D.23780>:
  <D.23775>:
  <D.23773>:
  D.23781 = dest->type;
  D.23782 = mono_type_get_type_byval (D.23781);
  D.23783 = verify_type_compatibility (ctx, D.23782, type);
  if (D.23783 == 0) goto <D.23784>; else goto <D.23785>;
  <D.23784>:
  D.23738 = ctx->verifiable;
  if (D.23738 != 0) goto <D.23786>; else goto <D.23788>;
  <D.23788>:
  D.23740 = ctx->level;
  D.23741 = D.23740 & 128;
  if (D.23741 != 0) goto <D.23786>; else goto <D.23787>;
  <D.23786>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (24);
    vinfo->info.status = 8;
    D.23742 = ctx->ip_offset;
    D.23789 = monoeg_g_strdup_printf ("Destination and token types of cpobj don\'t match at 0x%04x", D.23742);
    vinfo->info.message = D.23789;
    vinfo->exception_type = 4;
    D.23744 = ctx->list;
    D.23790 = monoeg_g_slist_prepend (D.23744, vinfo);
    ctx->list = D.23790;
  }
  ctx->verifiable = 0;
  D.23740 = ctx->level;
  D.23746 = D.23740 & 16;
  if (D.23746 != 0) goto <D.23791>; else goto <D.23792>;
  <D.23791>:
  ctx->valid = 0;
  <D.23792>:
  <D.23787>:
  <D.23785>:
}


verify_type_compatibility (struct VerifyContext * ctx, struct MonoType * target, struct MonoType * candidate)
{
  gboolean D.23794;

  D.23794 = verify_type_compatibility_full (ctx, target, candidate, 0);
  return D.23794;
}


do_ldobj_value (struct VerifyContext * ctx, int token)
{
  unsigned int D.23796;
  unsigned int D.23797;
  int D.23800;
  int D.23805;
  int D.23808;
  int D.23811;
  struct MonoType * D.23813;
  unsigned char D.23814;
  const char * D.23815;
  unsigned int D.23816;
  gchar * D.23817;
  struct GSList * D.23818;
  struct GSList * D.23819;
  int D.23820;
  int D.23825;
  int D.23827;
  int D.23828;
  gchar * D.23829;
  struct GSList * D.23830;
  int D.23831;
  struct MonoType * D.23834;
  int D.23835;
  gchar * D.23841;
  struct GSList * D.23842;
  struct ILStackDesc * D.23845;
  struct ILStackDesc * value;
  struct MonoType * type;

  type = get_boxable_mono_type (ctx, token, "ldobj");
  D.23796 = ctx->prefix_set;
  D.23797 = D.23796 & 4294967292;
  ctx->prefix_set = D.23797;
  if (type == 0B) goto <D.23798>; else goto <D.23799>;
  <D.23798>:
  return;
  <D.23799>:
  D.23800 = check_underflow (ctx, 1);
  if (D.23800 == 0) goto <D.23801>; else goto <D.23802>;
  <D.23801>:
  return;
  <D.23802>:
  value = stack_pop (ctx);
  D.23805 = stack_slot_is_managed_pointer (value);
  if (D.23805 == 0) goto <D.23806>; else goto <D.23807>;
  <D.23806>:
  D.23808 = stack_slot_get_type (value);
  if (D.23808 != 3) goto <D.23809>; else goto <D.23810>;
  <D.23809>:
  D.23811 = stack_slot_get_type (value);
  if (D.23811 != 5) goto <D.23803>; else goto <D.23812>;
  <D.23812>:
  D.23813 = value->type;
  D.23814 = D.23813->type;
  if (D.23814 == 27) goto <D.23803>; else goto <D.23804>;
  <D.23803>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (24);
    vinfo->info.status = 1;
    D.23815 = stack_slot_get_name (value);
    D.23816 = ctx->ip_offset;
    D.23817 = monoeg_g_strdup_printf ("Invalid argument %s to ldobj at 0x%04x", D.23815, D.23816);
    vinfo->info.message = D.23817;
    vinfo->exception_type = 3;
    D.23818 = ctx->list;
    D.23819 = monoeg_g_slist_prepend (D.23818, vinfo);
    ctx->list = D.23819;
  }
  ctx->valid = 0;
  return;
  <D.23804>:
  <D.23810>:
  <D.23807>:
  D.23820 = stack_slot_get_type (value);
  if (D.23820 == 3) goto <D.23821>; else goto <D.23822>;
  <D.23821>:
  D.23825 = ctx->verifiable;
  if (D.23825 != 0) goto <D.23823>; else goto <D.23826>;
  <D.23826>:
  D.23827 = ctx->level;
  D.23828 = D.23827 & 128;
  if (D.23828 != 0) goto <D.23823>; else goto <D.23824>;
  <D.23823>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (24);
    vinfo->info.status = 8;
    D.23816 = ctx->ip_offset;
    D.23829 = monoeg_g_strdup_printf ("Using native pointer to ldobj at 0x%04x", D.23816);
    vinfo->info.message = D.23829;
    vinfo->exception_type = 4;
    D.23818 = ctx->list;
    D.23830 = monoeg_g_slist_prepend (D.23818, vinfo);
    ctx->list = D.23830;
  }
  ctx->verifiable = 0;
  D.23827 = ctx->level;
  D.23831 = D.23827 & 16;
  if (D.23831 != 0) goto <D.23832>; else goto <D.23833>;
  <D.23832>:
  ctx->valid = 0;
  <D.23833>:
  <D.23824>:
  <D.23822>:
  D.23813 = value->type;
  D.23834 = mono_type_get_type_byval (D.23813);
  D.23835 = verify_type_compatibility_full (ctx, type, D.23834, 1);
  if (D.23835 == 0) goto <D.23836>; else goto <D.23837>;
  <D.23836>:
  D.23825 = ctx->verifiable;
  if (D.23825 != 0) goto <D.23838>; else goto <D.23840>;
  <D.23840>:
  D.23827 = ctx->level;
  D.23828 = D.23827 & 128;
  if (D.23828 != 0) goto <D.23838>; else goto <D.23839>;
  <D.23838>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (24);
    vinfo->info.status = 8;
    D.23816 = ctx->ip_offset;
    D.23841 = monoeg_g_strdup_printf ("Invalid type at stack for ldojb operation at 0x%04x", D.23816);
    vinfo->info.message = D.23841;
    vinfo->exception_type = 4;
    D.23818 = ctx->list;
    D.23842 = monoeg_g_slist_prepend (D.23818, vinfo);
    ctx->list = D.23842;
  }
  ctx->verifiable = 0;
  D.23827 = ctx->level;
  D.23831 = D.23827 & 16;
  if (D.23831 != 0) goto <D.23843>; else goto <D.23844>;
  <D.23843>:
  ctx->valid = 0;
  <D.23844>:
  <D.23839>:
  <D.23837>:
  D.23845 = stack_push (ctx);
  set_stack_value (ctx, D.23845, type, 0);
}


do_ldstr (struct VerifyContext * ctx, guint32 token)
{
  struct MonoMethod * D.23847;
  long unsigned int D.23848;
  long unsigned int D.23849;
  struct MonoImage * D.23852;
  long unsigned int D.23853;
  long unsigned int D.23854;
  unsigned int D.23857;
  unsigned int D.23860;
  gchar * D.23861;
  struct GSList * D.23862;
  struct GSList * D.23863;
  unsigned int D.23864;
  int D.23865;
  struct GSList * error.85;
  struct GSList * D.23871;
  gchar * D.23872;
  struct GSList * D.23873;
  int D.23874;
  struct MonoClass * D.23877;
  struct MonoType * D.23878;
  struct GSList * error;

  try
    {
      error = 0B;
      D.23847 = ctx->method;
      D.23848 = BIT_FIELD_REF <*D.23847, 64, 256>;
      D.23849 = D.23848 & 4467570830351532032;
      if (D.23849 == 0) goto <D.23850>; else goto <D.23851>;
      <D.23850>:
      D.23852 = ctx->image;
      D.23853 = BIT_FIELD_REF <*D.23852, 64, 192>;
      D.23854 = D.23853 & 268435456;
      if (D.23854 == 0) goto <D.23855>; else goto <D.23856>;
      <D.23855>:
      D.23857 = token & 4278190080;
      if (D.23857 != 1879048192) goto <D.23858>; else goto <D.23859>;
      <D.23858>:
      {
        struct MonoVerifyInfoExtended * vinfo;

        vinfo = monoeg_malloc (24);
        vinfo->info.status = 1;
        D.23860 = ctx->ip_offset;
        D.23861 = monoeg_g_strdup_printf ("Invalid string token %x at 0x%04x", token, D.23860);
        vinfo->info.message = D.23861;
        vinfo->exception_type = 12;
        D.23862 = ctx->list;
        D.23863 = monoeg_g_slist_prepend (D.23862, vinfo);
        ctx->list = D.23863;
      }
      ctx->valid = 0;
      return;
      <D.23859>:
      D.23852 = ctx->image;
      D.23864 = token & 16777215;
      D.23865 = mono_verifier_verify_string_signature (D.23852, D.23864, &error);
      if (D.23865 == 0) goto <D.23866>; else goto <D.23867>;
      <D.23866>:
      error.85 = error;
      if (error.85 != 0B) goto <D.23869>; else goto <D.23870>;
      <D.23869>:
      D.23862 = ctx->list;
      error.85 = error;
      D.23871 = monoeg_g_slist_concat (D.23862, error.85);
      ctx->list = D.23871;
      <D.23870>:
      {
        struct MonoVerifyInfoExtended * vinfo;

        vinfo = monoeg_malloc (24);
        vinfo->info.status = 1;
        D.23860 = ctx->ip_offset;
        D.23872 = monoeg_g_strdup_printf ("Invalid string index %x at 0x%04x", token, D.23860);
        vinfo->info.message = D.23872;
        vinfo->exception_type = 12;
        D.23862 = ctx->list;
        D.23873 = monoeg_g_slist_prepend (D.23862, vinfo);
        ctx->list = D.23873;
      }
      ctx->valid = 0;
      return;
      <D.23867>:
      <D.23856>:
      <D.23851>:
      D.23874 = check_overflow (ctx);
      if (D.23874 != 0) goto <D.23875>; else goto <D.23876>;
      <D.23875>:
      D.23877 = mono_defaults.string_class;
      D.23878 = &D.23877->byval_arg;
      stack_push_val (ctx, 6, D.23878);
      <D.23876>:
    }
  finally
    {
      error = {CLOBBER};
    }
}


do_newobj (struct VerifyContext * ctx, int token)
{
  int D.23884;
  unsigned int D.23887;
  gchar * D.23888;
  struct GSList * D.23889;
  struct GSList * D.23890;
  struct MonoClass * D.23891;
  unsigned int D.23892;
  unsigned int D.23893;
  int D.23898;
  int D.23900;
  int D.23901;
  gchar * D.23902;
  struct GSList * D.23903;
  int D.23904;
  int D.23907;
  struct MonoMethod * D.23910;
  int D.23911;
  gchar * D.23917;
  struct GSList * D.23918;
  gchar * D.23923;
  struct GSList * D.23924;
  long unsigned int D.23925;
  long unsigned int D.23926;
  gchar * D.23929;
  struct GSList * D.23930;
  short unsigned int D.23931;
  int D.23932;
  int D.23933;
  struct MonoClass * D.23936;
  struct MonoClass * D.23937;
  _Bool D.23938;
  gchar * D.23943;
  struct GSList * D.23944;
  struct MonoType * D.23946;
  int D.23947;
  gchar * D.23953;
  struct GSList * D.23954;
  int D.23957;
  gchar * D.23963;
  struct GSList * D.23964;
  int D.23967;
  struct ILStackDesc * D.23970;
  struct MonoType * D.23971;
  struct ILStackDesc * value;
  int i;
  struct MonoMethodSignature * sig;
  struct MonoMethod * method;
  gboolean is_delegate;

  is_delegate = 0;
  method = verifier_load_method (ctx, token, "newobj");
  if (method == 0B) goto <D.23882>; else goto <D.23883>;
  <D.23882>:
  return;
  <D.23883>:
  D.23884 = mono_method_is_constructor (method);
  if (D.23884 == 0) goto <D.23885>; else goto <D.23886>;
  <D.23885>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (24);
    vinfo->info.status = 1;
    D.23887 = ctx->ip_offset;
    D.23888 = monoeg_g_strdup_printf ("Method from token 0x%08x not a constructor at 0x%04x", token, D.23887);
    vinfo->info.message = D.23888;
    vinfo->exception_type = 3;
    D.23889 = ctx->list;
    D.23890 = monoeg_g_slist_prepend (D.23889, vinfo);
    ctx->list = D.23890;
  }
  ctx->valid = 0;
  return;
  <D.23886>:
  D.23891 = method->klass;
  D.23892 = D.23891->flags;
  D.23893 = D.23892 & 160;
  if (D.23893 != 0) goto <D.23894>; else goto <D.23895>;
  <D.23894>:
  D.23898 = ctx->verifiable;
  if (D.23898 != 0) goto <D.23896>; else goto <D.23899>;
  <D.23899>:
  D.23900 = ctx->level;
  D.23901 = D.23900 & 128;
  if (D.23901 != 0) goto <D.23896>; else goto <D.23897>;
  <D.23896>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (24);
    vinfo->info.status = 8;
    D.23887 = ctx->ip_offset;
    D.23902 = monoeg_g_strdup_printf ("Trying to instantiate an abstract or interface type at 0x%04x", D.23887);
    vinfo->info.message = D.23902;
    vinfo->exception_type = 4;
    D.23889 = ctx->list;
    D.23903 = monoeg_g_slist_prepend (D.23889, vinfo);
    ctx->list = D.23903;
  }
  ctx->verifiable = 0;
  D.23900 = ctx->level;
  D.23904 = D.23900 & 16;
  if (D.23904 != 0) goto <D.23905>; else goto <D.23906>;
  <D.23905>:
  ctx->valid = 0;
  <D.23906>:
  <D.23897>:
  <D.23895>:
  D.23900 = ctx->level;
  D.23907 = D.23900 & 64;
  if (D.23907 == 0) goto <D.23908>; else goto <D.23909>;
  <D.23908>:
  D.23910 = ctx->method;
  D.23911 = mono_method_can_access_method_full (D.23910, method, 0B);
  if (D.23911 == 0) goto <D.23912>; else goto <D.23913>;
  <D.23912>:
  {
    char * from;
    char * to;

    D.23910 = ctx->method;
    from = mono_method_full_name (D.23910, 1);
    to = mono_method_full_name (method, 1);
    D.23898 = ctx->verifiable;
    if (D.23898 != 0) goto <D.23914>; else goto <D.23916>;
    <D.23916>:
    D.23900 = ctx->level;
    D.23901 = D.23900 & 128;
    if (D.23901 != 0) goto <D.23914>; else goto <D.23915>;
    <D.23914>:
    {
      struct MonoVerifyInfoExtended * vinfo;

      vinfo = monoeg_malloc (24);
      vinfo->info.status = 8;
      D.23887 = ctx->ip_offset;
      D.23917 = monoeg_g_strdup_printf ("Constructor %s not visible from %s at 0x%04x", to, from, D.23887);
      vinfo->info.message = D.23917;
      vinfo->exception_type = 9;
      D.23889 = ctx->list;
      D.23918 = monoeg_g_slist_prepend (D.23889, vinfo);
      ctx->list = D.23918;
    }
    ctx->verifiable = 0;
    D.23900 = ctx->level;
    D.23904 = D.23900 & 16;
    if (D.23904 != 0) goto <D.23919>; else goto <D.23920>;
    <D.23919>:
    ctx->valid = 0;
    <D.23920>:
    <D.23915>:
    monoeg_g_free (from);
    monoeg_g_free (to);
  }
  <D.23913>:
  <D.23909>:
  sig = mono_method_signature (method);
  if (sig == 0B) goto <D.23921>; else goto <D.23922>;
  <D.23921>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (24);
    vinfo->info.status = 1;
    D.23887 = ctx->ip_offset;
    D.23923 = monoeg_g_strdup_printf ("Invalid constructor signature to newobj at 0x%04x", D.23887);
    vinfo->info.message = D.23923;
    vinfo->exception_type = 3;
    D.23889 = ctx->list;
    D.23924 = monoeg_g_slist_prepend (D.23889, vinfo);
    ctx->list = D.23924;
  }
  ctx->valid = 0;
  return;
  <D.23922>:
  D.23925 = BIT_FIELD_REF <*sig, 64, 64>;
  D.23926 = D.23925 & 512;
  if (D.23926 == 0) goto <D.23927>; else goto <D.23928>;
  <D.23927>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (24);
    vinfo->info.status = 1;
    D.23887 = ctx->ip_offset;
    D.23929 = monoeg_g_strdup_printf ("Invalid constructor signature missing hasthis at 0x%04x", D.23887);
    vinfo->info.message = D.23929;
    vinfo->exception_type = 3;
    D.23889 = ctx->list;
    D.23930 = monoeg_g_slist_prepend (D.23889, vinfo);
    ctx->list = D.23930;
  }
  ctx->valid = 0;
  return;
  <D.23928>:
  D.23931 = sig->param_count;
  D.23932 = (int) D.23931;
  D.23933 = check_underflow (ctx, D.23932);
  if (D.23933 == 0) goto <D.23934>; else goto <D.23935>;
  <D.23934>:
  return;
  <D.23935>:
  D.23891 = method->klass;
  D.23936 = D.23891->parent;
  D.23937 = mono_defaults.multicastdelegate_class;
  D.23938 = D.23936 == D.23937;
  is_delegate = (gboolean) D.23938;
  if (is_delegate != 0) goto <D.23939>; else goto <D.23940>;
  <D.23939>:
  {
    struct ILStackDesc * funptr;

    D.23931 = sig->param_count;
    if (D.23931 != 2) goto <D.23941>; else goto <D.23942>;
    <D.23941>:
    {
      struct MonoVerifyInfoExtended * vinfo;

      vinfo = monoeg_malloc (24);
      vinfo->info.status = 1;
      D.23887 = ctx->ip_offset;
      D.23943 = monoeg_g_strdup_printf ("Invalid delegate constructor at 0x%04x", D.23887);
      vinfo->info.message = D.23943;
      vinfo->exception_type = 3;
      D.23889 = ctx->list;
      D.23944 = monoeg_g_slist_prepend (D.23889, vinfo);
      ctx->list = D.23944;
    }
    ctx->valid = 0;
    return;
    <D.23942>:
    funptr = stack_pop (ctx);
    value = stack_pop (ctx);
    D.23891 = method->klass;
    verify_delegate_compatibility (ctx, D.23891, value, funptr);
  }
  goto <D.23945>;
  <D.23940>:
  D.23931 = sig->param_count;
  D.23932 = (int) D.23931;
  i = D.23932 + -1;
  goto <D.19171>;
  <D.19170>:
  value = stack_pop (ctx);
  D.23946 = sig->params[i];
  D.23947 = verify_stack_type_compatibility (ctx, D.23946, value);
  if (D.23947 == 0) goto <D.23948>; else goto <D.23949>;
  <D.23948>:
  {
    char * stack_name;
    char * sig_name;

    stack_name = stack_slot_full_name (value);
    D.23946 = sig->params[i];
    sig_name = mono_type_full_name (D.23946);
    D.23898 = ctx->verifiable;
    if (D.23898 != 0) goto <D.23950>; else goto <D.23952>;
    <D.23952>:
    D.23900 = ctx->level;
    D.23901 = D.23900 & 128;
    if (D.23901 != 0) goto <D.23950>; else goto <D.23951>;
    <D.23950>:
    {
      struct MonoVerifyInfoExtended * vinfo;

      vinfo = monoeg_malloc (24);
      vinfo->info.status = 8;
      D.23887 = ctx->ip_offset;
      D.23953 = monoeg_g_strdup_printf ("Incompatible parameter value with constructor signature: %s X %s at 0x%04x", sig_name, stack_name, D.23887);
      vinfo->info.message = D.23953;
      vinfo->exception_type = 4;
      D.23889 = ctx->list;
      D.23954 = monoeg_g_slist_prepend (D.23889, vinfo);
      ctx->list = D.23954;
    }
    ctx->verifiable = 0;
    D.23900 = ctx->level;
    D.23904 = D.23900 & 16;
    if (D.23904 != 0) goto <D.23955>; else goto <D.23956>;
    <D.23955>:
    ctx->valid = 0;
    <D.23956>:
    <D.23951>:
    monoeg_g_free (stack_name);
    monoeg_g_free (sig_name);
  }
  <D.23949>:
  D.23957 = stack_slot_is_managed_mutability_pointer (value);
  if (D.23957 != 0) goto <D.23958>; else goto <D.23959>;
  <D.23958>:
  D.23898 = ctx->verifiable;
  if (D.23898 != 0) goto <D.23960>; else goto <D.23962>;
  <D.23962>:
  D.23900 = ctx->level;
  D.23901 = D.23900 & 128;
  if (D.23901 != 0) goto <D.23960>; else goto <D.23961>;
  <D.23960>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (24);
    vinfo->info.status = 8;
    D.23887 = ctx->ip_offset;
    D.23963 = monoeg_g_strdup_printf ("Cannot use a readonly pointer as argument of newobj at 0x%04x", D.23887);
    vinfo->info.message = D.23963;
    vinfo->exception_type = 4;
    D.23889 = ctx->list;
    D.23964 = monoeg_g_slist_prepend (D.23889, vinfo);
    ctx->list = D.23964;
  }
  ctx->verifiable = 0;
  D.23900 = ctx->level;
  D.23904 = D.23900 & 16;
  if (D.23904 != 0) goto <D.23965>; else goto <D.23966>;
  <D.23965>:
  ctx->valid = 0;
  <D.23966>:
  <D.23961>:
  <D.23959>:
  i = i + -1;
  <D.19171>:
  if (i >= 0) goto <D.19170>; else goto <D.19172>;
  <D.19172>:
  <D.23945>:
  D.23967 = check_overflow (ctx);
  if (D.23967 != 0) goto <D.23968>; else goto <D.23969>;
  <D.23968>:
  D.23970 = stack_push (ctx);
  D.23891 = method->klass;
  D.23971 = &D.23891->byval_arg;
  set_stack_value (ctx, D.23970, D.23971, 0);
  <D.23969>:
}


verify_delegate_compatibility (struct VerifyContext * ctx, struct MonoClass * delegate, struct ILStackDesc * value, struct ILStackDesc * funptr)
{
  struct MonoMethodHeader * D.23973;
  int D.23976;
  struct MonoMethod * D.23978;
  int D.23981;
  int D.23983;
  int D.23984;
  unsigned int D.23985;
  gchar * D.23986;
  struct GSList * D.23987;
  struct GSList * D.23988;
  int D.23989;
  struct MonoMethodSignature * D.23995;
  gchar * D.23996;
  struct GSList * D.23997;
  struct MonoMethodSignature * D.24001;
  gchar * D.24002;
  struct GSList * D.24003;
  int iftmp.86;
  unsigned int D.24008;
  sizetype D.24009;
  const guint8 * D.24010;
  unsigned char D.24011;
  struct ILCodeDesc * D.24013;
  long unsigned int D.24014;
  long unsigned int D.24015;
  struct ILCodeDesc * D.24016;
  short unsigned int D.24017;
  int D.24018;
  int D.24019;
  unsigned int D.24021;
  sizetype D.24022;
  const guint8 * D.24023;
  unsigned char D.24024;
  short unsigned int D.24026;
  int D.24027;
  int D.24028;
  struct MonoMethodSignature * D.24032;
  short unsigned int D.24033;
  int D.24034;
  int D.24035;
  struct MonoMethodSignature * D.24036;
  short unsigned int D.24037;
  int D.24038;
  _Bool D.24039;
  struct MonoMethodSignature * D.24040;
  struct MonoMethodSignature * D.24041;
  int D.24042;
  struct MonoMethodSignature * D.24045;
  struct MonoMethodSignature * D.24046;
  gchar * D.24050;
  struct GSList * D.24051;
  unsigned int D.24063;
  sizetype D.24064;
  const guint8 * D.24065;
  unsigned char D.24066;
  long unsigned int D.24068;
  long unsigned int D.24069;
  struct ILCodeDesc * D.24070;
  short unsigned int D.24071;
  int D.24072;
  int D.24073;
  short unsigned int D.24078;
  gchar * D.24082;
  struct GSList * D.24083;
  long unsigned int D.24086;
  long unsigned int D.24087;
  struct ILCodeDesc * D.24088;
  short unsigned int D.24089;
  short unsigned int D.24090;
  struct MonoMethodSignature * D.24095;
  short unsigned int D.24096;
  struct MonoMethodSignature * D.24098;
  struct MonoType * D.24099;
  int D.24100;
  gchar * D.24104;
  struct GSList * D.24105;
  int D.24111;
  gchar * D.24119;
  struct GSList * D.24120;
  struct MonoClass * D.24124;
  struct MonoType * D.24125;
  int D.24126;
  int D.24129;
  gchar * D.24135;
  struct GSList * D.24136;
  int D.24139;
  gchar * D.24145;
  struct GSList * D.24146;
  struct MonoMethod * invoke;
  struct MonoMethod * method;
  const guint8 * ip;
  guint32 ip_offset;
  gboolean is_static_ldftn;
  gboolean is_first_arg_bound;

  D.23973 = ctx->header;
  ip = D.23973->code;
  ip_offset = ctx->ip_offset;
  is_static_ldftn = 0;
  is_first_arg_bound = 0;
  D.23976 = stack_slot_get_type (funptr);
  if (D.23976 != 5) goto <D.23974>; else goto <D.23977>;
  <D.23977>:
  D.23978 = funptr->method;
  if (D.23978 == 0B) goto <D.23974>; else goto <D.23975>;
  <D.23974>:
  D.23981 = ctx->verifiable;
  if (D.23981 != 0) goto <D.23979>; else goto <D.23982>;
  <D.23982>:
  D.23983 = ctx->level;
  D.23984 = D.23983 & 128;
  if (D.23984 != 0) goto <D.23979>; else goto <D.23980>;
  <D.23979>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (24);
    vinfo->info.status = 8;
    D.23985 = ctx->ip_offset;
    D.23986 = monoeg_g_strdup_printf ("Invalid function pointer parameter for delegate constructor at 0x%04x", D.23985);
    vinfo->info.message = D.23986;
    vinfo->exception_type = 4;
    D.23987 = ctx->list;
    D.23988 = monoeg_g_slist_prepend (D.23987, vinfo);
    ctx->list = D.23988;
  }
  ctx->verifiable = 0;
  D.23983 = ctx->level;
  D.23989 = D.23983 & 16;
  if (D.23989 != 0) goto <D.23990>; else goto <D.23991>;
  <D.23990>:
  ctx->valid = 0;
  <D.23991>:
  <D.23980>:
  return;
  <D.23975>:
  invoke = mono_get_delegate_invoke (delegate);
  method = funptr->method;
  if (method == 0B) goto <D.23992>; else goto <D.23994>;
  <D.23994>:
  D.23995 = mono_method_signature (method);
  if (D.23995 == 0B) goto <D.23992>; else goto <D.23993>;
  <D.23992>:
  {
    char * name;

    name = mono_type_get_full_name (delegate);
    {
      struct MonoVerifyInfoExtended * vinfo;

      vinfo = monoeg_malloc (24);
      vinfo->info.status = 1;
      D.23985 = ctx->ip_offset;
      D.23996 = monoeg_g_strdup_printf ("Invalid method on stack to create delegate %s construction at 0x%04x", name, D.23985);
      vinfo->info.message = D.23996;
      vinfo->exception_type = 3;
      D.23987 = ctx->list;
      D.23997 = monoeg_g_slist_prepend (D.23987, vinfo);
      ctx->list = D.23997;
    }
    ctx->valid = 0;
    monoeg_g_free (name);
    return;
  }
  <D.23993>:
  if (invoke == 0B) goto <D.23998>; else goto <D.24000>;
  <D.24000>:
  D.24001 = mono_method_signature (invoke);
  if (D.24001 == 0B) goto <D.23998>; else goto <D.23999>;
  <D.23998>:
  {
    char * name;

    name = mono_type_get_full_name (delegate);
    {
      struct MonoVerifyInfoExtended * vinfo;

      vinfo = monoeg_malloc (24);
      vinfo->info.status = 1;
      D.23985 = ctx->ip_offset;
      D.24002 = monoeg_g_strdup_printf ("Delegate type %s with bad Invoke method at 0x%04x", name, D.23985);
      vinfo->info.message = D.24002;
      vinfo->exception_type = 3;
      D.23987 = ctx->list;
      D.24003 = monoeg_g_slist_prepend (D.23987, vinfo);
      ctx->list = D.24003;
    }
    ctx->valid = 0;
    monoeg_g_free (name);
    return;
  }
  <D.23999>:
  if (ip_offset > 5) goto <D.24007>; else goto <D.24005>;
  <D.24007>:
  D.24008 = ip_offset + 4294967290;
  D.24009 = (sizetype) D.24008;
  D.24010 = ip + D.24009;
  D.24011 = *D.24010;
  if (D.24011 == 254) goto <D.24012>; else goto <D.24005>;
  <D.24012>:
  D.24013 = ctx->code;
  D.24008 = ip_offset + 4294967290;
  D.24014 = (long unsigned int) D.24008;
  D.24015 = D.24014 * 16;
  D.24016 = D.24013 + D.24015;
  D.24017 = D.24016->flags;
  D.24018 = (int) D.24017;
  D.24019 = D.24018 & 1;
  if (D.24019 != 0) goto <D.24020>; else goto <D.24005>;
  <D.24020>:
  D.24021 = ip_offset + 4294967291;
  D.24022 = (sizetype) D.24021;
  D.24023 = ip + D.24022;
  D.24024 = *D.24023;
  if (D.24024 == 6) goto <D.24025>; else goto <D.24005>;
  <D.24025>:
  D.24026 = method->flags;
  D.24027 = (int) D.24026;
  D.24028 = D.24027 & 16;
  if (D.24028 != 0) goto <D.24029>; else goto <D.24005>;
  <D.24029>:
  iftmp.86 = 1;
  goto <D.24006>;
  <D.24005>:
  iftmp.86 = 0;
  <D.24006>:
  is_static_ldftn = iftmp.86;
  if (is_static_ldftn != 0) goto <D.24030>; else goto <D.24031>;
  <D.24030>:
  D.24032 = mono_method_signature (invoke);
  D.24033 = D.24032->param_count;
  D.24034 = (int) D.24033;
  D.24035 = D.24034 + 1;
  D.24036 = mono_method_signature (method);
  D.24037 = D.24036->param_count;
  D.24038 = (int) D.24037;
  D.24039 = D.24035 == D.24038;
  is_first_arg_bound = (gboolean) D.24039;
  <D.24031>:
  D.24040 = mono_method_signature (invoke);
  D.24041 = mono_method_signature (method);
  D.24042 = mono_delegate_signature_equal (D.24040, D.24041, is_first_arg_bound);
  if (D.24042 == 0) goto <D.24043>; else goto <D.24044>;
  <D.24043>:
  {
    char * fun_sig;
    char * invoke_sig;

    D.24045 = mono_method_signature (method);
    fun_sig = mono_signature_get_desc (D.24045, 0);
    D.24046 = mono_method_signature (invoke);
    invoke_sig = mono_signature_get_desc (D.24046, 0);
    D.23981 = ctx->verifiable;
    if (D.23981 != 0) goto <D.24047>; else goto <D.24049>;
    <D.24049>:
    D.23983 = ctx->level;
    D.23984 = D.23983 & 128;
    if (D.23984 != 0) goto <D.24047>; else goto <D.24048>;
    <D.24047>:
    {
      struct MonoVerifyInfoExtended * vinfo;

      vinfo = monoeg_malloc (24);
      vinfo->info.status = 8;
      D.23985 = ctx->ip_offset;
      D.24050 = monoeg_g_strdup_printf ("Function pointer signature \'%s\' doesn\'t match delegate\'s signature \'%s\' at 0x%04x", fun_sig, invoke_sig, D.23985);
      vinfo->info.message = D.24050;
      vinfo->exception_type = 4;
      D.23987 = ctx->list;
      D.24051 = monoeg_g_slist_prepend (D.23987, vinfo);
      ctx->list = D.24051;
    }
    ctx->verifiable = 0;
    D.23983 = ctx->level;
    D.23989 = D.23983 & 16;
    if (D.23989 != 0) goto <D.24052>; else goto <D.24053>;
    <D.24052>:
    ctx->valid = 0;
    <D.24053>:
    <D.24048>:
    monoeg_g_free (fun_sig);
    monoeg_g_free (invoke_sig);
  }
  <D.24044>:
  if (ip_offset > 5) goto <D.24056>; else goto <D.24054>;
  <D.24056>:
  D.24008 = ip_offset + 4294967290;
  D.24009 = (sizetype) D.24008;
  D.24010 = ip + D.24009;
  D.24011 = *D.24010;
  if (D.24011 == 254) goto <D.24057>; else goto <D.24054>;
  <D.24057>:
  D.24013 = ctx->code;
  D.24008 = ip_offset + 4294967290;
  D.24014 = (long unsigned int) D.24008;
  D.24015 = D.24014 * 16;
  D.24016 = D.24013 + D.24015;
  D.24017 = D.24016->flags;
  D.24018 = (int) D.24017;
  D.24019 = D.24018 & 1;
  if (D.24019 != 0) goto <D.24058>; else goto <D.24054>;
  <D.24058>:
  D.24021 = ip_offset + 4294967291;
  D.24022 = (sizetype) D.24021;
  D.24023 = ip + D.24022;
  D.24024 = *D.24023;
  if (D.24024 == 6) goto <D.24059>; else goto <D.24054>;
  <D.24059>:
  verify_ldftn_delegate (ctx, delegate, value, funptr);
  goto <D.24055>;
  <D.24054>:
  if (ip_offset > 6) goto <D.24062>; else goto <D.24060>;
  <D.24062>:
  D.24063 = ip_offset + 4294967289;
  D.24064 = (sizetype) D.24063;
  D.24065 = ip + D.24064;
  D.24066 = *D.24065;
  if (D.24066 == 37) goto <D.24067>; else goto <D.24060>;
  <D.24067>:
  D.24013 = ctx->code;
  D.24063 = ip_offset + 4294967289;
  D.24068 = (long unsigned int) D.24063;
  D.24069 = D.24068 * 16;
  D.24070 = D.24013 + D.24069;
  D.24071 = D.24070->flags;
  D.24072 = (int) D.24071;
  D.24073 = D.24072 & 1;
  if (D.24073 != 0) goto <D.24074>; else goto <D.24060>;
  <D.24074>:
  D.24008 = ip_offset + 4294967290;
  D.24009 = (sizetype) D.24008;
  D.24010 = ip + D.24009;
  D.24011 = *D.24010;
  if (D.24011 == 254) goto <D.24075>; else goto <D.24060>;
  <D.24075>:
  D.24013 = ctx->code;
  D.24008 = ip_offset + 4294967290;
  D.24014 = (long unsigned int) D.24008;
  D.24015 = D.24014 * 16;
  D.24016 = D.24013 + D.24015;
  D.24017 = D.24016->flags;
  D.24018 = (int) D.24017;
  D.24019 = D.24018 & 1;
  if (D.24019 != 0) goto <D.24076>; else goto <D.24060>;
  <D.24076>:
  D.24021 = ip_offset + 4294967291;
  D.24022 = (sizetype) D.24021;
  D.24023 = ip + D.24022;
  D.24024 = *D.24023;
  if (D.24024 == 7) goto <D.24077>; else goto <D.24060>;
  <D.24077>:
  D.24013 = ctx->code;
  D.24008 = ip_offset + 4294967290;
  D.24014 = (long unsigned int) D.24008;
  D.24015 = D.24014 * 16;
  D.24016 = D.24013 + D.24015;
  D.24013 = ctx->code;
  D.24008 = ip_offset + 4294967290;
  D.24014 = (long unsigned int) D.24008;
  D.24015 = D.24014 * 16;
  D.24016 = D.24013 + D.24015;
  D.24017 = D.24016->flags;
  D.24078 = D.24017 | 16;
  D.24016->flags = D.24078;
  goto <D.24061>;
  <D.24060>:
  D.23981 = ctx->verifiable;
  if (D.23981 != 0) goto <D.24079>; else goto <D.24081>;
  <D.24081>:
  D.23983 = ctx->level;
  D.23984 = D.23983 & 128;
  if (D.23984 != 0) goto <D.24079>; else goto <D.24080>;
  <D.24079>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (24);
    vinfo->info.status = 8;
    D.23985 = ctx->ip_offset;
    D.24082 = monoeg_g_strdup_printf ("Invalid code sequence for delegate creation at 0x%04x", D.23985);
    vinfo->info.message = D.24082;
    vinfo->exception_type = 4;
    D.23987 = ctx->list;
    D.24083 = monoeg_g_slist_prepend (D.23987, vinfo);
    ctx->list = D.24083;
  }
  ctx->verifiable = 0;
  D.23983 = ctx->level;
  D.23989 = D.23983 & 16;
  if (D.23989 != 0) goto <D.24084>; else goto <D.24085>;
  <D.24084>:
  ctx->valid = 0;
  <D.24085>:
  <D.24080>:
  <D.24061>:
  <D.24055>:
  D.24013 = ctx->code;
  D.24086 = (long unsigned int) ip_offset;
  D.24087 = D.24086 * 16;
  D.24088 = D.24013 + D.24087;
  D.24013 = ctx->code;
  D.24086 = (long unsigned int) ip_offset;
  D.24087 = D.24086 * 16;
  D.24088 = D.24013 + D.24087;
  D.24089 = D.24088->flags;
  D.24090 = D.24089 | 16;
  D.24088->flags = D.24090;
  if (is_first_arg_bound != 0) goto <D.24091>; else goto <D.24092>;
  <D.24091>:
  D.24095 = mono_method_signature (method);
  D.24096 = D.24095->param_count;
  if (D.24096 == 0) goto <D.24093>; else goto <D.24097>;
  <D.24097>:
  D.24098 = mono_method_signature (method);
  D.24099 = D.24098->params[0];
  D.24100 = verify_stack_type_compatibility_full (ctx, D.24099, value, 0, 1);
  if (D.24100 == 0) goto <D.24093>; else goto <D.24094>;
  <D.24093>:
  D.23981 = ctx->verifiable;
  if (D.23981 != 0) goto <D.24101>; else goto <D.24103>;
  <D.24103>:
  D.23983 = ctx->level;
  D.23984 = D.23983 & 128;
  if (D.23984 != 0) goto <D.24101>; else goto <D.24102>;
  <D.24101>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (24);
    vinfo->info.status = 8;
    D.23985 = ctx->ip_offset;
    D.24104 = monoeg_g_strdup_printf ("This object not compatible with function pointer for delegate creation at 0x%04x", D.23985);
    vinfo->info.message = D.24104;
    vinfo->exception_type = 4;
    D.23987 = ctx->list;
    D.24105 = monoeg_g_slist_prepend (D.23987, vinfo);
    ctx->list = D.24105;
  }
  ctx->verifiable = 0;
  D.23983 = ctx->level;
  D.23989 = D.23983 & 16;
  if (D.23989 != 0) goto <D.24106>; else goto <D.24107>;
  <D.24106>:
  ctx->valid = 0;
  <D.24107>:
  <D.24102>:
  <D.24094>:
  goto <D.24108>;
  <D.24092>:
  D.24026 = method->flags;
  D.24027 = (int) D.24026;
  D.24028 = D.24027 & 16;
  if (D.24028 != 0) goto <D.24109>; else goto <D.24110>;
  <D.24109>:
  D.24111 = stack_slot_is_null_literal (value);
  if (D.24111 == 0) goto <D.24112>; else goto <D.24113>;
  <D.24112>:
  if (is_first_arg_bound == 0) goto <D.24114>; else goto <D.24115>;
  <D.24114>:
  D.23981 = ctx->verifiable;
  if (D.23981 != 0) goto <D.24116>; else goto <D.24118>;
  <D.24118>:
  D.23983 = ctx->level;
  D.23984 = D.23983 & 128;
  if (D.23984 != 0) goto <D.24116>; else goto <D.24117>;
  <D.24116>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (24);
    vinfo->info.status = 8;
    D.23985 = ctx->ip_offset;
    D.24119 = monoeg_g_strdup_printf ("Non-null this args used with static function for delegate creation at 0x%04x", D.23985);
    vinfo->info.message = D.24119;
    vinfo->exception_type = 4;
    D.23987 = ctx->list;
    D.24120 = monoeg_g_slist_prepend (D.23987, vinfo);
    ctx->list = D.24120;
  }
  ctx->verifiable = 0;
  D.23983 = ctx->level;
  D.23989 = D.23983 & 16;
  if (D.23989 != 0) goto <D.24121>; else goto <D.24122>;
  <D.24121>:
  ctx->valid = 0;
  <D.24122>:
  <D.24117>:
  <D.24115>:
  <D.24113>:
  goto <D.24123>;
  <D.24110>:
  D.24124 = method->klass;
  D.24125 = &D.24124->byval_arg;
  D.24126 = verify_stack_type_compatibility_full (ctx, D.24125, value, 0, 1);
  if (D.24126 == 0) goto <D.24127>; else goto <D.24128>;
  <D.24127>:
  D.24129 = stack_slot_is_null_literal (value);
  if (D.24129 == 0) goto <D.24130>; else goto <D.24131>;
  <D.24130>:
  D.23981 = ctx->verifiable;
  if (D.23981 != 0) goto <D.24132>; else goto <D.24134>;
  <D.24134>:
  D.23983 = ctx->level;
  D.23984 = D.23983 & 128;
  if (D.23984 != 0) goto <D.24132>; else goto <D.24133>;
  <D.24132>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (24);
    vinfo->info.status = 8;
    D.23985 = ctx->ip_offset;
    D.24135 = monoeg_g_strdup_printf ("This object not compatible with function pointer for delegate creation at 0x%04x", D.23985);
    vinfo->info.message = D.24135;
    vinfo->exception_type = 4;
    D.23987 = ctx->list;
    D.24136 = monoeg_g_slist_prepend (D.23987, vinfo);
    ctx->list = D.24136;
  }
  ctx->verifiable = 0;
  D.23983 = ctx->level;
  D.23989 = D.23983 & 16;
  if (D.23989 != 0) goto <D.24137>; else goto <D.24138>;
  <D.24137>:
  ctx->valid = 0;
  <D.24138>:
  <D.24133>:
  <D.24131>:
  <D.24128>:
  <D.24123>:
  <D.24108>:
  D.24139 = stack_slot_get_type (value);
  if (D.24139 != 6) goto <D.24140>; else goto <D.24141>;
  <D.24140>:
  D.23981 = ctx->verifiable;
  if (D.23981 != 0) goto <D.24142>; else goto <D.24144>;
  <D.24144>:
  D.23983 = ctx->level;
  D.23984 = D.23983 & 128;
  if (D.23984 != 0) goto <D.24142>; else goto <D.24143>;
  <D.24142>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (24);
    vinfo->info.status = 8;
    D.23985 = ctx->ip_offset;
    D.24145 = monoeg_g_strdup_printf ("Invalid first parameter for delegate creation at 0x%04x", D.23985);
    vinfo->info.message = D.24145;
    vinfo->exception_type = 4;
    D.23987 = ctx->list;
    D.24146 = monoeg_g_slist_prepend (D.23987, vinfo);
    ctx->list = D.24146;
  }
  ctx->verifiable = 0;
  D.23983 = ctx->level;
  D.23989 = D.23983 & 16;
  if (D.23989 != 0) goto <D.24147>; else goto <D.24148>;
  <D.24147>:
  ctx->valid = 0;
  <D.24148>:
  <D.24143>:
  <D.24141>:
}


verify_ldftn_delegate (struct VerifyContext * ctx, struct MonoClass * delegate, struct ILStackDesc * value, struct ILStackDesc * funptr)
{
  short unsigned int D.24150;
  unsigned int D.24151;
  unsigned int D.24152;
  struct MonoClass * D.24155;
  unsigned int D.24156;
  unsigned int D.24157;
  int D.24160;
  int D.24163;
  int D.24164;
  int D.24167;
  int D.24172;
  int D.24174;
  unsigned int D.24175;
  gchar * D.24176;
  struct GSList * D.24177;
  struct GSList * D.24178;
  struct MonoMethod * D.24181;
  short unsigned int D.24182;
  int D.24183;
  int D.24184;
  gchar * D.24190;
  struct GSList * D.24191;
  int D.24194;
  gchar * D.24200;
  struct GSList * D.24201;
  struct ILCodeDesc * D.24204;
  long unsigned int D.24205;
  long unsigned int D.24206;
  struct ILCodeDesc * D.24207;
  short unsigned int D.24208;
  short unsigned int D.24209;
  struct MonoMethod * method;

  method = funptr->method;
  D.24150 = method->flags;
  D.24151 = (unsigned int) D.24150;
  D.24152 = D.24151 & 96;
  if (D.24152 == 64) goto <D.24153>; else goto <D.24154>;
  <D.24153>:
  D.24155 = method->klass;
  D.24156 = D.24155->flags;
  D.24157 = D.24156 & 256;
  if (D.24157 == 0) goto <D.24158>; else goto <D.24159>;
  <D.24158>:
  D.24160 = stack_slot_is_boxed_value (value);
  if (D.24160 == 0) goto <D.24161>; else goto <D.24162>;
  <D.24161>:
  D.24163 = ctx->level;
  D.24164 = D.24163 & 16;
  if (D.24164 != 0) goto <D.24165>; else goto <D.24166>;
  <D.24165>:
  D.24167 = ctx->has_this_store;
  if (D.24167 != 0) goto <D.24168>; else goto <D.24169>;
  <D.24168>:
  D.24172 = ctx->verifiable;
  if (D.24172 != 0) goto <D.24170>; else goto <D.24173>;
  <D.24173>:
  D.24163 = ctx->level;
  D.24174 = D.24163 & 128;
  if (D.24174 != 0) goto <D.24170>; else goto <D.24171>;
  <D.24170>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (24);
    vinfo->info.status = 8;
    D.24175 = ctx->ip_offset;
    D.24176 = monoeg_g_strdup_printf ("Invalid ldftn with virtual function in method with stdarg 0 at  0x%04x", D.24175);
    vinfo->info.message = D.24176;
    vinfo->exception_type = 4;
    D.24177 = ctx->list;
    D.24178 = monoeg_g_slist_prepend (D.24177, vinfo);
    ctx->list = D.24178;
  }
  ctx->verifiable = 0;
  D.24163 = ctx->level;
  D.24164 = D.24163 & 16;
  if (D.24164 != 0) goto <D.24179>; else goto <D.24180>;
  <D.24179>:
  ctx->valid = 0;
  <D.24180>:
  <D.24171>:
  <D.24169>:
  <D.24166>:
  D.24181 = ctx->method;
  D.24182 = D.24181->flags;
  D.24183 = (int) D.24182;
  D.24184 = D.24183 & 16;
  if (D.24184 != 0) goto <D.24185>; else goto <D.24186>;
  <D.24185>:
  D.24172 = ctx->verifiable;
  if (D.24172 != 0) goto <D.24187>; else goto <D.24189>;
  <D.24189>:
  D.24163 = ctx->level;
  D.24174 = D.24163 & 128;
  if (D.24174 != 0) goto <D.24187>; else goto <D.24188>;
  <D.24187>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (24);
    vinfo->info.status = 8;
    D.24175 = ctx->ip_offset;
    D.24190 = monoeg_g_strdup_printf ("Invalid ldftn with virtual function at 0x%04x", D.24175);
    vinfo->info.message = D.24190;
    vinfo->exception_type = 4;
    D.24177 = ctx->list;
    D.24191 = monoeg_g_slist_prepend (D.24177, vinfo);
    ctx->list = D.24191;
  }
  ctx->verifiable = 0;
  D.24163 = ctx->level;
  D.24164 = D.24163 & 16;
  if (D.24164 != 0) goto <D.24192>; else goto <D.24193>;
  <D.24192>:
  ctx->valid = 0;
  <D.24193>:
  <D.24188>:
  <D.24186>:
  D.24194 = stack_slot_is_this_pointer (value);
  if (D.24194 == 0) goto <D.24195>; else goto <D.24196>;
  <D.24195>:
  D.24172 = ctx->verifiable;
  if (D.24172 != 0) goto <D.24197>; else goto <D.24199>;
  <D.24199>:
  D.24163 = ctx->level;
  D.24174 = D.24163 & 128;
  if (D.24174 != 0) goto <D.24197>; else goto <D.24198>;
  <D.24197>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (24);
    vinfo->info.status = 8;
    D.24175 = ctx->ip_offset;
    D.24200 = monoeg_g_strdup_printf ("Invalid object argument, it is not the this pointer, to ldftn with virtual method at  0x%04x", D.24175);
    vinfo->info.message = D.24200;
    vinfo->exception_type = 4;
    D.24177 = ctx->list;
    D.24201 = monoeg_g_slist_prepend (D.24177, vinfo);
    ctx->list = D.24201;
  }
  ctx->verifiable = 0;
  D.24163 = ctx->level;
  D.24164 = D.24163 & 16;
  if (D.24164 != 0) goto <D.24202>; else goto <D.24203>;
  <D.24202>:
  ctx->valid = 0;
  <D.24203>:
  <D.24198>:
  <D.24196>:
  D.24204 = ctx->code;
  D.24175 = ctx->ip_offset;
  D.24205 = (long unsigned int) D.24175;
  D.24206 = D.24205 * 16;
  D.24207 = D.24204 + D.24206;
  D.24204 = ctx->code;
  D.24175 = ctx->ip_offset;
  D.24205 = (long unsigned int) D.24175;
  D.24206 = D.24205 * 16;
  D.24207 = D.24204 + D.24206;
  D.24208 = D.24207->flags;
  D.24209 = D.24208 | 32;
  D.24207->flags = D.24209;
  <D.24162>:
  <D.24159>:
  <D.24154>:
}


do_cast (struct VerifyContext * ctx, int token, const char * opcode)
{
  int D.24210;
  long unsigned int D.24215;
  long unsigned int D.24216;
  unsigned int D.24219;
  gchar * D.24220;
  struct GSList * D.24221;
  struct GSList * D.24222;
  int D.24223;
  int D.24228;
  int D.24230;
  int D.24231;
  gchar * D.24232;
  struct GSList * D.24233;
  int D.24234;
  struct MonoType * D.24238;
  int D.24239;
  gchar * D.24247;
  struct GSList * D.24248;
  unsigned char D.24251;
  int D.24252;
  gchar * D.24256;
  struct GSList * D.24257;
  int iftmp.87;
  int D.24266;
  struct MonoClass * D.24268;
  long unsigned int D.24269;
  long unsigned int D.24270;
  int iftmp.88;
  struct ILStackDesc * value;
  struct MonoType * type;
  gboolean is_boxed;
  gboolean do_box;

  D.24210 = check_underflow (ctx, 1);
  if (D.24210 == 0) goto <D.24211>; else goto <D.24212>;
  <D.24211>:
  return;
  <D.24212>:
  type = get_boxable_mono_type (ctx, token, opcode);
  if (type == 0B) goto <D.24213>; else goto <D.24214>;
  <D.24213>:
  return;
  <D.24214>:
  D.24215 = BIT_FIELD_REF <*type, 64, 64>;
  D.24216 = D.24215 & 8589934592;
  if (D.24216 != 0) goto <D.24217>; else goto <D.24218>;
  <D.24217>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (24);
    vinfo->info.status = 1;
    D.24219 = ctx->ip_offset;
    D.24220 = monoeg_g_strdup_printf ("Invalid %s type at 0x%04x", opcode, D.24219);
    vinfo->info.message = D.24220;
    vinfo->exception_type = 3;
    D.24221 = ctx->list;
    D.24222 = monoeg_g_slist_prepend (D.24221, vinfo);
    ctx->list = D.24222;
  }
  ctx->valid = 0;
  return;
  <D.24218>:
  value = stack_pop (ctx);
  is_boxed = stack_slot_is_boxed_value (value);
  D.24223 = stack_slot_is_managed_pointer (value);
  if (D.24223 != 0) goto <D.24224>; else goto <D.24225>;
  <D.24224>:
  D.24228 = ctx->verifiable;
  if (D.24228 != 0) goto <D.24226>; else goto <D.24229>;
  <D.24229>:
  D.24230 = ctx->level;
  D.24231 = D.24230 & 128;
  if (D.24231 != 0) goto <D.24226>; else goto <D.24227>;
  <D.24226>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (24);
    vinfo->info.status = 8;
    D.24219 = ctx->ip_offset;
    D.24232 = monoeg_g_strdup_printf ("Invalid value for %s at 0x%04x", opcode, D.24219);
    vinfo->info.message = D.24232;
    vinfo->exception_type = 4;
    D.24221 = ctx->list;
    D.24233 = monoeg_g_slist_prepend (D.24221, vinfo);
    ctx->list = D.24233;
  }
  ctx->verifiable = 0;
  D.24230 = ctx->level;
  D.24234 = D.24230 & 16;
  if (D.24234 != 0) goto <D.24235>; else goto <D.24236>;
  <D.24235>:
  ctx->valid = 0;
  <D.24236>:
  <D.24227>:
  goto <D.24237>;
  <D.24225>:
  D.24238 = value->type;
  D.24239 = mono_type_is_reference (D.24238);
  if (D.24239 == 0) goto <D.24240>; else goto <D.24241>;
  <D.24240>:
  if (is_boxed == 0) goto <D.24242>; else goto <D.24243>;
  <D.24242>:
  {
    char * name;

    name = stack_slot_full_name (value);
    D.24228 = ctx->verifiable;
    if (D.24228 != 0) goto <D.24244>; else goto <D.24246>;
    <D.24246>:
    D.24230 = ctx->level;
    D.24231 = D.24230 & 128;
    if (D.24231 != 0) goto <D.24244>; else goto <D.24245>;
    <D.24244>:
    {
      struct MonoVerifyInfoExtended * vinfo;

      vinfo = monoeg_malloc (24);
      vinfo->info.status = 8;
      D.24219 = ctx->ip_offset;
      D.24247 = monoeg_g_strdup_printf ("Expected a reference type on stack for %s but found %s at 0x%04x", opcode, name, D.24219);
      vinfo->info.message = D.24247;
      vinfo->exception_type = 4;
      D.24221 = ctx->list;
      D.24248 = monoeg_g_slist_prepend (D.24221, vinfo);
      ctx->list = D.24248;
    }
    ctx->verifiable = 0;
    D.24230 = ctx->level;
    D.24234 = D.24230 & 16;
    if (D.24234 != 0) goto <D.24249>; else goto <D.24250>;
    <D.24249>:
    ctx->valid = 0;
    <D.24250>:
    <D.24245>:
    monoeg_g_free (name);
  }
  <D.24243>:
  <D.24241>:
  <D.24237>:
  D.24238 = value->type;
  D.24251 = D.24238->type;
  D.24252 = (int) D.24251;
  switch (D.24252) <default: <D.24260>, case 15: <D.19187>, case 22: <D.19188>, case 27: <D.19186>>
  <D.19186>:
  <D.19187>:
  <D.19188>:
  D.24228 = ctx->verifiable;
  if (D.24228 != 0) goto <D.24253>; else goto <D.24255>;
  <D.24255>:
  D.24230 = ctx->level;
  D.24231 = D.24230 & 128;
  if (D.24231 != 0) goto <D.24253>; else goto <D.24254>;
  <D.24253>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (24);
    vinfo->info.status = 8;
    D.24219 = ctx->ip_offset;
    D.24256 = monoeg_g_strdup_printf ("Invalid value for %s at 0x%04x", opcode, D.24219);
    vinfo->info.message = D.24256;
    vinfo->exception_type = 4;
    D.24221 = ctx->list;
    D.24257 = monoeg_g_slist_prepend (D.24221, vinfo);
    ctx->list = D.24257;
  }
  ctx->verifiable = 0;
  D.24230 = ctx->level;
  D.24234 = D.24230 & 16;
  if (D.24234 != 0) goto <D.24258>; else goto <D.24259>;
  <D.24258>:
  ctx->valid = 0;
  <D.24259>:
  <D.24254>:
  <D.24260>:
  if (is_boxed != 0) goto <D.24262>; else goto <D.24265>;
  <D.24265>:
  D.24266 = mono_type_is_generic_argument (type);
  if (D.24266 != 0) goto <D.24262>; else goto <D.24267>;
  <D.24267>:
  D.24268 = mono_class_from_mono_type (type);
  D.24269 = BIT_FIELD_REF <*D.24268, 64, 256>;
  D.24270 = D.24269 & 1152921504606846976;
  if (D.24270 != 0) goto <D.24262>; else goto <D.24263>;
  <D.24262>:
  iftmp.87 = 1;
  goto <D.24264>;
  <D.24263>:
  iftmp.87 = 0;
  <D.24264>:
  do_box = iftmp.87;
  if (do_box != 0) goto <D.24272>; else goto <D.24273>;
  <D.24272>:
  iftmp.88 = 4102;
  goto <D.24274>;
  <D.24273>:
  iftmp.88 = 6;
  <D.24274>:
  stack_push_val (ctx, iftmp.88, type);
}


do_unbox_value (struct VerifyContext * ctx, int klass_token)
{
  int D.24278;
  struct MonoClass * D.24281;
  long unsigned int D.24282;
  long unsigned int D.24283;
  int D.24288;
  int D.24290;
  int D.24291;
  unsigned int D.24292;
  gchar * D.24293;
  struct GSList * D.24294;
  struct GSList * D.24295;
  int D.24296;
  int D.24301;
  int D.24303;
  struct MonoType * D.24305;
  struct MonoClass * D.24306;
  long unsigned int D.24307;
  long unsigned int D.24308;
  const char * D.24312;
  gchar * D.24313;
  struct GSList * D.24314;
  struct MonoType * D.24317;
  int D.24318;
  int D.24319;
  struct ILStackDesc * value;
  struct MonoType * type;

  type = get_boxable_mono_type (ctx, klass_token, "unbox");
  if (type == 0B) goto <D.24276>; else goto <D.24277>;
  <D.24276>:
  return;
  <D.24277>:
  D.24278 = check_underflow (ctx, 1);
  if (D.24278 == 0) goto <D.24279>; else goto <D.24280>;
  <D.24279>:
  return;
  <D.24280>:
  D.24281 = mono_class_from_mono_type (type);
  D.24282 = BIT_FIELD_REF <*D.24281, 64, 256>;
  D.24283 = D.24282 & 1152921504606846976;
  if (D.24283 == 0) goto <D.24284>; else goto <D.24285>;
  <D.24284>:
  D.24288 = ctx->verifiable;
  if (D.24288 != 0) goto <D.24286>; else goto <D.24289>;
  <D.24289>:
  D.24290 = ctx->level;
  D.24291 = D.24290 & 128;
  if (D.24291 != 0) goto <D.24286>; else goto <D.24287>;
  <D.24286>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (24);
    vinfo->info.status = 8;
    D.24292 = ctx->ip_offset;
    D.24293 = monoeg_g_strdup_printf ("Invalid reference type for unbox at 0x%04x", D.24292);
    vinfo->info.message = D.24293;
    vinfo->exception_type = 4;
    D.24294 = ctx->list;
    D.24295 = monoeg_g_slist_prepend (D.24294, vinfo);
    ctx->list = D.24295;
  }
  ctx->verifiable = 0;
  D.24290 = ctx->level;
  D.24296 = D.24290 & 16;
  if (D.24296 != 0) goto <D.24297>; else goto <D.24298>;
  <D.24297>:
  ctx->valid = 0;
  <D.24298>:
  <D.24287>:
  <D.24285>:
  value = stack_pop (ctx);
  D.24301 = stack_slot_get_type (value);
  if (D.24301 != 6) goto <D.24299>; else goto <D.24302>;
  <D.24302>:
  D.24303 = stack_slot_is_boxed_value (value);
  if (D.24303 == 0) goto <D.24304>; else goto <D.24300>;
  <D.24304>:
  D.24305 = value->type;
  D.24306 = mono_class_from_mono_type (D.24305);
  D.24307 = BIT_FIELD_REF <*D.24306, 64, 256>;
  D.24308 = D.24307 & 1152921504606846976;
  if (D.24308 != 0) goto <D.24299>; else goto <D.24300>;
  <D.24299>:
  D.24288 = ctx->verifiable;
  if (D.24288 != 0) goto <D.24309>; else goto <D.24311>;
  <D.24311>:
  D.24290 = ctx->level;
  D.24291 = D.24290 & 128;
  if (D.24291 != 0) goto <D.24309>; else goto <D.24310>;
  <D.24309>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (24);
    vinfo->info.status = 8;
    D.24312 = stack_slot_get_name (value);
    D.24292 = ctx->ip_offset;
    D.24313 = monoeg_g_strdup_printf ("Invalid type %s at stack for unbox operation at 0x%04x", D.24312, D.24292);
    vinfo->info.message = D.24313;
    vinfo->exception_type = 4;
    D.24294 = ctx->list;
    D.24314 = monoeg_g_slist_prepend (D.24294, vinfo);
    ctx->list = D.24314;
  }
  ctx->verifiable = 0;
  D.24290 = ctx->level;
  D.24296 = D.24290 & 16;
  if (D.24296 != 0) goto <D.24315>; else goto <D.24316>;
  <D.24315>:
  ctx->valid = 0;
  <D.24316>:
  <D.24310>:
  <D.24300>:
  value = stack_push (ctx);
  D.24317 = mono_type_get_type_byref (type);
  set_stack_value (ctx, value, D.24317, 0);
  D.24318 = value->stype;
  D.24319 = D.24318 | 512;
  value->stype = D.24319;
}


do_throw (struct VerifyContext * ctx)
{
  int D.24321;
  int D.24326;
  int D.24329;
  struct MonoType * D.24331;
  struct MonoClass * D.24332;
  long unsigned int D.24333;
  long unsigned int D.24334;
  int D.24337;
  int D.24339;
  int D.24340;
  unsigned int D.24341;
  gchar * D.24342;
  struct GSList * D.24343;
  struct GSList * D.24344;
  int D.24345;
  int D.24348;
  int D.24351;
  gchar * D.24357;
  struct GSList * D.24358;
  struct ILStackDesc * exception;

  D.24321 = check_underflow (ctx, 1);
  if (D.24321 == 0) goto <D.24322>; else goto <D.24323>;
  <D.24322>:
  return;
  <D.24323>:
  exception = stack_pop (ctx);
  D.24326 = stack_slot_is_null_literal (exception);
  if (D.24326 == 0) goto <D.24327>; else goto <D.24328>;
  <D.24327>:
  D.24329 = stack_slot_get_type (exception);
  if (D.24329 != 6) goto <D.24324>; else goto <D.24330>;
  <D.24330>:
  D.24331 = exception->type;
  D.24332 = mono_class_from_mono_type (D.24331);
  D.24333 = BIT_FIELD_REF <*D.24332, 64, 256>;
  D.24334 = D.24333 & 1152921504606846976;
  if (D.24334 != 0) goto <D.24324>; else goto <D.24325>;
  <D.24324>:
  D.24337 = ctx->verifiable;
  if (D.24337 != 0) goto <D.24335>; else goto <D.24338>;
  <D.24338>:
  D.24339 = ctx->level;
  D.24340 = D.24339 & 128;
  if (D.24340 != 0) goto <D.24335>; else goto <D.24336>;
  <D.24335>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (24);
    vinfo->info.status = 8;
    D.24341 = ctx->ip_offset;
    D.24342 = monoeg_g_strdup_printf ("Invalid type on stack for throw, expected reference type at 0x%04x", D.24341);
    vinfo->info.message = D.24342;
    vinfo->exception_type = 4;
    D.24343 = ctx->list;
    D.24344 = monoeg_g_slist_prepend (D.24343, vinfo);
    ctx->list = D.24344;
  }
  ctx->verifiable = 0;
  D.24339 = ctx->level;
  D.24345 = D.24339 & 16;
  if (D.24345 != 0) goto <D.24346>; else goto <D.24347>;
  <D.24346>:
  ctx->valid = 0;
  <D.24347>:
  <D.24336>:
  <D.24325>:
  <D.24328>:
  D.24331 = exception->type;
  D.24348 = mono_type_is_generic_argument (D.24331);
  if (D.24348 != 0) goto <D.24349>; else goto <D.24350>;
  <D.24349>:
  D.24351 = stack_slot_is_boxed_value (exception);
  if (D.24351 == 0) goto <D.24352>; else goto <D.24353>;
  <D.24352>:
  {
    char * name;

    D.24331 = exception->type;
    name = mono_type_full_name (D.24331);
    D.24337 = ctx->verifiable;
    if (D.24337 != 0) goto <D.24354>; else goto <D.24356>;
    <D.24356>:
    D.24339 = ctx->level;
    D.24340 = D.24339 & 128;
    if (D.24340 != 0) goto <D.24354>; else goto <D.24355>;
    <D.24354>:
    {
      struct MonoVerifyInfoExtended * vinfo;

      vinfo = monoeg_malloc (24);
      vinfo->info.status = 8;
      D.24341 = ctx->ip_offset;
      D.24357 = monoeg_g_strdup_printf ("Invalid type on stack for throw, expected reference type but found unboxed %s  at 0x%04x ", name, D.24341);
      vinfo->info.message = D.24357;
      vinfo->exception_type = 4;
      D.24343 = ctx->list;
      D.24358 = monoeg_g_slist_prepend (D.24343, vinfo);
      ctx->list = D.24358;
    }
    ctx->verifiable = 0;
    D.24339 = ctx->level;
    D.24345 = D.24339 & 16;
    if (D.24345 != 0) goto <D.24359>; else goto <D.24360>;
    <D.24359>:
    ctx->valid = 0;
    <D.24360>:
    <D.24355>:
    monoeg_g_free (name);
  }
  <D.24353>:
  <D.24350>:
  ctx->eval.size = 0;
}


do_push_field (struct VerifyContext * ctx, int token, gboolean take_addr)
{
  unsigned int D.24364;
  unsigned int D.24365;
  int D.24366;
  const char * iftmp.89;
  int D.24373;
  struct MonoClassField * field.90;
  struct MonoClass * D.24379;
  long unsigned int D.24380;
  long unsigned int D.24381;
  int D.24384;
  int D.24389;
  int D.24391;
  int D.24392;
  unsigned int D.24393;
  gchar * D.24394;
  struct GSList * D.24395;
  struct GSList * D.24396;
  int D.24397;
  struct MonoType * D.24404;
  short unsigned int D.24405;
  int D.24406;
  int D.24407;
  struct MonoMethod * D.24410;
  struct MonoClass * D.24411;
  int D.24413;
  gchar * D.24417;
  struct GSList * D.24418;
  struct ILStackDesc * D.24421;
  struct ILStackDesc * obj;
  struct MonoClassField * field;

  try
    {
      if (take_addr == 0) goto <D.24362>; else goto <D.24363>;
      <D.24362>:
      D.24364 = ctx->prefix_set;
      D.24365 = D.24364 & 4294967292;
      ctx->prefix_set = D.24365;
      <D.24363>:
      D.24366 = check_underflow (ctx, 1);
      if (D.24366 == 0) goto <D.24367>; else goto <D.24368>;
      <D.24367>:
      return;
      <D.24368>:
      obj = stack_pop_safe (ctx);
      if (take_addr != 0) goto <D.24370>; else goto <D.24371>;
      <D.24370>:
      iftmp.89 = "ldflda";
      goto <D.24372>;
      <D.24371>:
      iftmp.89 = "ldfld";
      <D.24372>:
      D.24373 = check_is_valid_type_for_field_ops (ctx, token, obj, &field, iftmp.89);
      if (D.24373 == 0) goto <D.24374>; else goto <D.24375>;
      <D.24374>:
      return;
      <D.24375>:
      if (take_addr != 0) goto <D.24376>; else goto <D.24377>;
      <D.24376>:
      field.90 = field;
      D.24379 = field.90->parent;
      D.24380 = BIT_FIELD_REF <*D.24379, 64, 256>;
      D.24381 = D.24380 & 1152921504606846976;
      if (D.24381 != 0) goto <D.24382>; else goto <D.24383>;
      <D.24382>:
      D.24384 = stack_slot_is_managed_pointer (obj);
      if (D.24384 == 0) goto <D.24385>; else goto <D.24386>;
      <D.24385>:
      D.24389 = ctx->verifiable;
      if (D.24389 != 0) goto <D.24387>; else goto <D.24390>;
      <D.24390>:
      D.24391 = ctx->level;
      D.24392 = D.24391 & 128;
      if (D.24392 != 0) goto <D.24387>; else goto <D.24388>;
      <D.24387>:
      {
        struct MonoVerifyInfoExtended * vinfo;

        vinfo = monoeg_malloc (24);
        vinfo->info.status = 8;
        D.24393 = ctx->ip_offset;
        D.24394 = monoeg_g_strdup_printf ("Cannot take the address of a temporary value-type at 0x%04x", D.24393);
        vinfo->info.message = D.24394;
        vinfo->exception_type = 4;
        D.24395 = ctx->list;
        D.24396 = monoeg_g_slist_prepend (D.24395, vinfo);
        ctx->list = D.24396;
      }
      ctx->verifiable = 0;
      D.24391 = ctx->level;
      D.24397 = D.24391 & 16;
      if (D.24397 != 0) goto <D.24398>; else goto <D.24399>;
      <D.24398>:
      ctx->valid = 0;
      <D.24399>:
      <D.24388>:
      <D.24386>:
      <D.24383>:
      <D.24377>:
      if (take_addr != 0) goto <D.24402>; else goto <D.24403>;
      <D.24402>:
      field.90 = field;
      D.24404 = field.90->type;
      D.24405 = D.24404->attrs;
      D.24406 = (int) D.24405;
      D.24407 = D.24406 & 32;
      if (D.24407 != 0) goto <D.24408>; else goto <D.24409>;
      <D.24408>:
      field.90 = field;
      D.24379 = field.90->parent;
      D.24410 = ctx->method;
      D.24411 = D.24410->klass;
      if (D.24379 != D.24411) goto <D.24400>; else goto <D.24412>;
      <D.24412>:
      D.24410 = ctx->method;
      D.24413 = mono_method_is_constructor (D.24410);
      if (D.24413 == 0) goto <D.24400>; else goto <D.24401>;
      <D.24400>:
      D.24389 = ctx->verifiable;
      if (D.24389 != 0) goto <D.24414>; else goto <D.24416>;
      <D.24416>:
      D.24391 = ctx->level;
      D.24392 = D.24391 & 128;
      if (D.24392 != 0) goto <D.24414>; else goto <D.24415>;
      <D.24414>:
      {
        struct MonoVerifyInfoExtended * vinfo;

        vinfo = monoeg_malloc (24);
        vinfo->info.status = 8;
        D.24393 = ctx->ip_offset;
        D.24417 = monoeg_g_strdup_printf ("Cannot take the address of a init-only field at 0x%04x", D.24393);
        vinfo->info.message = D.24417;
        vinfo->exception_type = 4;
        D.24395 = ctx->list;
        D.24418 = monoeg_g_slist_prepend (D.24395, vinfo);
        ctx->list = D.24418;
      }
      ctx->verifiable = 0;
      D.24391 = ctx->level;
      D.24397 = D.24391 & 16;
      if (D.24397 != 0) goto <D.24419>; else goto <D.24420>;
      <D.24419>:
      ctx->valid = 0;
      <D.24420>:
      <D.24415>:
      <D.24401>:
      <D.24409>:
      <D.24403>:
      D.24421 = stack_push (ctx);
      field.90 = field;
      D.24404 = field.90->type;
      set_stack_value (ctx, D.24421, D.24404, take_addr);
    }
  finally
    {
      field = {CLOBBER};
    }
}


check_is_valid_type_for_field_ops (struct VerifyContext * ctx, int token, struct ILStackDesc * obj, struct MonoClassField * * ret_field, const char * opcode)
{
  gboolean D.24427;
  int iftmp.91;
  int D.24432;
  int D.24434;
  struct MonoClass * D.24436;
  struct MonoType * D.24437;
  int D.24438;
  struct MonoType * D.24439;
  unsigned char D.24440;
  unsigned int D.24443;
  gchar * D.24444;
  struct GSList * D.24445;
  struct GSList * D.24446;
  struct MonoType * D.24447;
  _Bool D.24448;
  long int D.24449;
  long int D.24450;
  int D.24455;
  int D.24460;
  int D.24462;
  int D.24463;
  gchar * D.24464;
  struct GSList * D.24465;
  int D.24466;
  int D.24469;
  struct MonoMethod * D.24472;
  int D.24473;
  gchar * D.24479;
  struct GSList * D.24480;
  long unsigned int D.24484;
  long unsigned int D.24485;
  int D.24488;
  gchar * D.24494;
  struct GSList * D.24495;
  int D.24500;
  gchar * D.24506;
  struct GSList * D.24507;
  int D.24510;
  int D.24513;
  gchar * D.24519;
  struct GSList * D.24520;
  struct MonoClass * D.24525;
  int D.24526;
  gchar * D.24532;
  struct GSList * D.24533;
  struct MonoClassField * field;
  struct MonoClass * klass;
  gboolean is_pointer;

  try
    {
      field = verifier_load_field (ctx, token, &klass, opcode);
      if (field == 0B) goto <D.24425>; else goto <D.24426>;
      <D.24425>:
      D.24427 = 0;
      return D.24427;
      <D.24426>:
      *ret_field = field;
      D.24432 = stack_slot_get_type (obj);
      if (D.24432 == 5) goto <D.24429>; else goto <D.24433>;
      <D.24433>:
      D.24434 = stack_slot_get_type (obj);
      if (D.24434 == 3) goto <D.24435>; else goto <D.24430>;
      <D.24435>:
      D.24436 = field->parent;
      D.24437 = &D.24436->byval_arg;
      D.24438 = get_stack_type (D.24437);
      if (D.24438 == 0) goto <D.24429>; else goto <D.24430>;
      <D.24429>:
      iftmp.91 = 1;
      goto <D.24431>;
      <D.24430>:
      iftmp.91 = 0;
      <D.24431>:
      is_pointer = iftmp.91;
      D.24439 = field->type;
      D.24440 = D.24439->type;
      if (D.24440 == 22) goto <D.24441>; else goto <D.24442>;
      <D.24441>:
      {
        struct MonoVerifyInfoExtended * vinfo;

        vinfo = monoeg_malloc (24);
        vinfo->info.status = 1;
        D.24443 = ctx->ip_offset;
        D.24444 = monoeg_g_strdup_printf ("Typedbyref field is an unverfiable type at 0x%04x", D.24443);
        vinfo->info.message = D.24444;
        vinfo->exception_type = 3;
        D.24445 = ctx->list;
        D.24446 = monoeg_g_slist_prepend (D.24445, vinfo);
        ctx->list = D.24446;
      }
      ctx->valid = 0;
      D.24427 = 0;
      return D.24427;
      <D.24442>:
      D.24447 = obj->type;
      D.24448 = D.24447 == 0B;
      D.24449 = (long int) D.24448;
      D.24450 = __builtin_expect (D.24449, 0);
      if (D.24450 != 0) goto <D.24451>; else goto <D.24452>;
      <D.24451>:
      monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "verify.c", 3369, "obj->type");
      <D.24452>:
      if (is_pointer != 0) goto <D.24453>; else goto <D.24454>;
      <D.24453>:
      D.24455 = stack_slot_get_underlying_type (obj);
      if (D.24455 == 3) goto <D.24456>; else goto <D.24457>;
      <D.24456>:
      D.24460 = ctx->verifiable;
      if (D.24460 != 0) goto <D.24458>; else goto <D.24461>;
      <D.24461>:
      D.24462 = ctx->level;
      D.24463 = D.24462 & 128;
      if (D.24463 != 0) goto <D.24458>; else goto <D.24459>;
      <D.24458>:
      {
        struct MonoVerifyInfoExtended * vinfo;

        vinfo = monoeg_malloc (24);
        vinfo->info.status = 8;
        D.24443 = ctx->ip_offset;
        D.24464 = monoeg_g_strdup_printf ("Native int is not a verifiable type to reference a field at 0x%04x", D.24443);
        vinfo->info.message = D.24464;
        vinfo->exception_type = 4;
        D.24445 = ctx->list;
        D.24465 = monoeg_g_slist_prepend (D.24445, vinfo);
        ctx->list = D.24465;
      }
      ctx->verifiable = 0;
      D.24462 = ctx->level;
      D.24466 = D.24462 & 16;
      if (D.24466 != 0) goto <D.24467>; else goto <D.24468>;
      <D.24467>:
      ctx->valid = 0;
      <D.24468>:
      <D.24459>:
      <D.24457>:
      D.24462 = ctx->level;
      D.24469 = D.24462 & 64;
      if (D.24469 == 0) goto <D.24470>; else goto <D.24471>;
      <D.24470>:
      D.24472 = ctx->method;
      D.24473 = mono_method_can_access_field_full (D.24472, field, 0B);
      if (D.24473 == 0) goto <D.24474>; else goto <D.24475>;
      <D.24474>:
      D.24460 = ctx->verifiable;
      if (D.24460 != 0) goto <D.24476>; else goto <D.24478>;
      <D.24478>:
      D.24462 = ctx->level;
      D.24463 = D.24462 & 128;
      if (D.24463 != 0) goto <D.24476>; else goto <D.24477>;
      <D.24476>:
      {
        struct MonoVerifyInfoExtended * vinfo;

        vinfo = monoeg_malloc (24);
        vinfo->info.status = 8;
        D.24443 = ctx->ip_offset;
        D.24479 = monoeg_g_strdup_printf ("Type at stack is not accessible at 0x%04x", D.24443);
        vinfo->info.message = D.24479;
        vinfo->exception_type = 10;
        D.24445 = ctx->list;
        D.24480 = monoeg_g_slist_prepend (D.24445, vinfo);
        ctx->list = D.24480;
      }
      ctx->verifiable = 0;
      D.24462 = ctx->level;
      D.24466 = D.24462 & 16;
      if (D.24466 != 0) goto <D.24481>; else goto <D.24482>;
      <D.24481>:
      ctx->valid = 0;
      <D.24482>:
      <D.24477>:
      <D.24475>:
      <D.24471>:
      goto <D.24483>;
      <D.24454>:
      D.24436 = field->parent;
      D.24484 = BIT_FIELD_REF <*D.24436, 64, 256>;
      D.24485 = D.24484 & 1152921504606846976;
      if (D.24485 == 0) goto <D.24486>; else goto <D.24487>;
      <D.24486>:
      D.24488 = stack_slot_is_managed_pointer (obj);
      if (D.24488 != 0) goto <D.24489>; else goto <D.24490>;
      <D.24489>:
      D.24460 = ctx->verifiable;
      if (D.24460 != 0) goto <D.24491>; else goto <D.24493>;
      <D.24493>:
      D.24462 = ctx->level;
      D.24463 = D.24462 & 128;
      if (D.24463 != 0) goto <D.24491>; else goto <D.24492>;
      <D.24491>:
      {
        struct MonoVerifyInfoExtended * vinfo;

        vinfo = monoeg_malloc (24);
        vinfo->info.status = 8;
        D.24443 = ctx->ip_offset;
        D.24494 = monoeg_g_strdup_printf ("Type at stack is a managed pointer to a reference type and is not compatible to reference the field at 0x%04x", D.24443);
        vinfo->info.message = D.24494;
        vinfo->exception_type = 4;
        D.24445 = ctx->list;
        D.24495 = monoeg_g_slist_prepend (D.24445, vinfo);
        ctx->list = D.24495;
      }
      ctx->verifiable = 0;
      D.24462 = ctx->level;
      D.24466 = D.24462 & 16;
      if (D.24466 != 0) goto <D.24496>; else goto <D.24497>;
      <D.24496>:
      ctx->valid = 0;
      <D.24497>:
      <D.24492>:
      <D.24490>:
      <D.24487>:
      D.24436 = field->parent;
      D.24484 = BIT_FIELD_REF <*D.24436, 64, 256>;
      D.24485 = D.24484 & 1152921504606846976;
      if (D.24485 != 0) goto <D.24498>; else goto <D.24499>;
      <D.24498>:
      D.24500 = stack_slot_is_boxed_value (obj);
      if (D.24500 != 0) goto <D.24501>; else goto <D.24502>;
      <D.24501>:
      D.24460 = ctx->verifiable;
      if (D.24460 != 0) goto <D.24503>; else goto <D.24505>;
      <D.24505>:
      D.24462 = ctx->level;
      D.24463 = D.24462 & 128;
      if (D.24463 != 0) goto <D.24503>; else goto <D.24504>;
      <D.24503>:
      {
        struct MonoVerifyInfoExtended * vinfo;

        vinfo = monoeg_malloc (24);
        vinfo->info.status = 8;
        D.24443 = ctx->ip_offset;
        D.24506 = monoeg_g_strdup_printf ("Type at stack is a boxed valuetype and is not compatible to reference the field at 0x%04x", D.24443);
        vinfo->info.message = D.24506;
        vinfo->exception_type = 4;
        D.24445 = ctx->list;
        D.24507 = monoeg_g_slist_prepend (D.24445, vinfo);
        ctx->list = D.24507;
      }
      ctx->verifiable = 0;
      D.24462 = ctx->level;
      D.24466 = D.24462 & 16;
      if (D.24466 != 0) goto <D.24508>; else goto <D.24509>;
      <D.24508>:
      ctx->valid = 0;
      <D.24509>:
      <D.24504>:
      <D.24502>:
      <D.24499>:
      D.24510 = stack_slot_is_null_literal (obj);
      if (D.24510 == 0) goto <D.24511>; else goto <D.24512>;
      <D.24511>:
      D.24436 = field->parent;
      D.24437 = &D.24436->byval_arg;
      D.24513 = verify_stack_type_compatibility_full (ctx, D.24437, obj, 1, 0);
      if (D.24513 == 0) goto <D.24514>; else goto <D.24515>;
      <D.24514>:
      {
        char * found;
        char * expected;

        found = stack_slot_full_name (obj);
        D.24436 = field->parent;
        D.24437 = &D.24436->byval_arg;
        expected = mono_type_full_name (D.24437);
        D.24460 = ctx->verifiable;
        if (D.24460 != 0) goto <D.24516>; else goto <D.24518>;
        <D.24518>:
        D.24462 = ctx->level;
        D.24463 = D.24462 & 128;
        if (D.24463 != 0) goto <D.24516>; else goto <D.24517>;
        <D.24516>:
        {
          struct MonoVerifyInfoExtended * vinfo;

          vinfo = monoeg_malloc (24);
          vinfo->info.status = 8;
          D.24443 = ctx->ip_offset;
          D.24519 = monoeg_g_strdup_printf ("Expected type \'%s\' but found \'%s\' referencing the \'this\' argument at 0x%04x", expected, found, D.24443);
          vinfo->info.message = D.24519;
          vinfo->exception_type = 4;
          D.24445 = ctx->list;
          D.24520 = monoeg_g_slist_prepend (D.24445, vinfo);
          ctx->list = D.24520;
        }
        ctx->verifiable = 0;
        D.24462 = ctx->level;
        D.24466 = D.24462 & 16;
        if (D.24466 != 0) goto <D.24521>; else goto <D.24522>;
        <D.24521>:
        ctx->valid = 0;
        <D.24522>:
        <D.24517>:
        monoeg_g_free (found);
        monoeg_g_free (expected);
      }
      <D.24515>:
      <D.24512>:
      D.24462 = ctx->level;
      D.24469 = D.24462 & 64;
      if (D.24469 == 0) goto <D.24523>; else goto <D.24524>;
      <D.24523>:
      D.24472 = ctx->method;
      D.24447 = obj->type;
      D.24525 = mono_class_from_mono_type (D.24447);
      D.24526 = mono_method_can_access_field_full (D.24472, field, D.24525);
      if (D.24526 == 0) goto <D.24527>; else goto <D.24528>;
      <D.24527>:
      D.24460 = ctx->verifiable;
      if (D.24460 != 0) goto <D.24529>; else goto <D.24531>;
      <D.24531>:
      D.24462 = ctx->level;
      D.24463 = D.24462 & 128;
      if (D.24463 != 0) goto <D.24529>; else goto <D.24530>;
      <D.24529>:
      {
        struct MonoVerifyInfoExtended * vinfo;

        vinfo = monoeg_malloc (24);
        vinfo->info.status = 8;
        D.24443 = ctx->ip_offset;
        D.24532 = monoeg_g_strdup_printf ("Type at stack is not accessible at 0x%04x", D.24443);
        vinfo->info.message = D.24532;
        vinfo->exception_type = 10;
        D.24445 = ctx->list;
        D.24533 = monoeg_g_slist_prepend (D.24445, vinfo);
        ctx->list = D.24533;
      }
      ctx->verifiable = 0;
      D.24462 = ctx->level;
      D.24466 = D.24462 & 16;
      if (D.24466 != 0) goto <D.24534>; else goto <D.24535>;
      <D.24534>:
      ctx->valid = 0;
      <D.24535>:
      <D.24530>:
      <D.24528>:
      <D.24524>:
      <D.24483>:
      check_unmanaged_pointer (ctx, obj);
      D.24427 = 1;
      return D.24427;
    }
  finally
    {
      klass = {CLOBBER};
    }
}


verifier_load_field (struct VerifyContext * ctx, int token, struct MonoClass * * out_klass, const char * opcode)
{
  struct MonoMethod * D.24538;
  long unsigned int D.24539;
  long unsigned int D.24540;
  unsigned int token.92;
  struct MonoClass * iftmp.93;
  int D.24552;
  struct MonoImage * D.24554;
  unsigned int token.94;
  int D.24556;
  unsigned int D.24557;
  gchar * D.24558;
  struct GSList * D.24559;
  struct GSList * D.24560;
  struct MonoClassField * D.24561;
  unsigned int token.95;
  struct MonoGenericContext * D.24563;
  struct MonoClass * D.24567;
  struct MonoClass * klass.96;
  struct MonoLoaderError * D.24571;
  gchar * D.24572;
  struct GSList * D.24573;
  struct MonoType * D.24574;
  int D.24575;
  unsigned int D.24578;
  unsigned int D.24579;
  const char * D.24582;
  gchar * D.24583;
  struct GSList * D.24584;
  struct MonoClassField * field;
  struct MonoClass * klass;

  try
    {
      klass = 0B;
      D.24538 = ctx->method;
      D.24539 = BIT_FIELD_REF <*D.24538, 64, 256>;
      D.24540 = D.24539 & 4467570830351532032;
      if (D.24540 != 0) goto <D.24541>; else goto <D.24542>;
      <D.24541>:
      D.24538 = ctx->method;
      token.92 = (unsigned int) token;
      field = mono_method_get_wrapper_data (D.24538, token.92);
      if (field != 0B) goto <D.24545>; else goto <D.24546>;
      <D.24545>:
      iftmp.93 = field->parent;
      goto <D.24547>;
      <D.24546>:
      iftmp.93 = 0B;
      <D.24547>:
      klass = iftmp.93;
      goto <D.24548>;
      <D.24542>:
      D.24552 = token >> 24;
      if (D.24552 != 4) goto <D.24553>; else goto <D.24549>;
      <D.24553>:
      D.24552 = token >> 24;
      if (D.24552 != 10) goto <D.24550>; else goto <D.24549>;
      <D.24549>:
      D.24554 = ctx->image;
      token.94 = (unsigned int) token;
      D.24556 = token_bounds_check (D.24554, token.94);
      if (D.24556 == 0) goto <D.24550>; else goto <D.24551>;
      <D.24550>:
      {
        struct MonoVerifyInfoExtended * vinfo;

        vinfo = monoeg_malloc (24);
        vinfo->info.status = 1;
        D.24557 = ctx->ip_offset;
        D.24558 = monoeg_g_strdup_printf ("Invalid field token 0x%08x for %s at 0x%04x", token, opcode, D.24557);
        vinfo->info.message = D.24558;
        vinfo->exception_type = 12;
        D.24559 = ctx->list;
        D.24560 = monoeg_g_slist_prepend (D.24559, vinfo);
        ctx->list = D.24560;
      }
      ctx->valid = 0;
      D.24561 = 0B;
      return D.24561;
      <D.24551>:
      D.24554 = ctx->image;
      token.95 = (unsigned int) token;
      D.24563 = ctx->generic_context;
      field = mono_field_from_token (D.24554, token.95, &klass, D.24563);
      <D.24548>:
      if (field == 0B) goto <D.24564>; else goto <D.24566>;
      <D.24566>:
      D.24567 = field->parent;
      if (D.24567 == 0B) goto <D.24564>; else goto <D.24568>;
      <D.24568>:
      klass.96 = klass;
      if (klass.96 == 0B) goto <D.24564>; else goto <D.24570>;
      <D.24570>:
      D.24571 = mono_loader_get_last_error ();
      if (D.24571 != 0B) goto <D.24564>; else goto <D.24565>;
      <D.24564>:
      {
        struct MonoVerifyInfoExtended * vinfo;

        vinfo = monoeg_malloc (24);
        vinfo->info.status = 1;
        D.24557 = ctx->ip_offset;
        D.24572 = monoeg_g_strdup_printf ("Cannot load field from token 0x%08x for %s at 0x%04x", token, opcode, D.24557);
        vinfo->info.message = D.24572;
        vinfo->exception_type = 12;
        D.24559 = ctx->list;
        D.24573 = monoeg_g_slist_prepend (D.24559, vinfo);
        ctx->list = D.24573;
      }
      ctx->valid = 0;
      mono_loader_clear_error ();
      D.24561 = 0B;
      return D.24561;
      <D.24565>:
      klass.96 = klass;
      D.24574 = &klass.96->byval_arg;
      D.24575 = mono_type_is_valid_in_context (ctx, D.24574);
      if (D.24575 == 0) goto <D.24576>; else goto <D.24577>;
      <D.24576>:
      D.24561 = 0B;
      return D.24561;
      <D.24577>:
      D.24578 = mono_field_get_flags (field);
      D.24579 = D.24578 & 64;
      if (D.24579 != 0) goto <D.24580>; else goto <D.24581>;
      <D.24580>:
      {
        char * type_name;

        D.24567 = field->parent;
        type_name = mono_type_get_full_name (D.24567);
        {
          struct MonoVerifyInfoExtended * vinfo;

          vinfo = monoeg_malloc (24);
          vinfo->info.status = 1;
          D.24582 = field->name;
          D.24557 = ctx->ip_offset;
          D.24583 = monoeg_g_strdup_printf ("Cannot reference literal field %s::%s at 0x%04x", type_name, D.24582, D.24557);
          vinfo->info.message = D.24583;
          vinfo->exception_type = 3;
          D.24559 = ctx->list;
          D.24584 = monoeg_g_slist_prepend (D.24559, vinfo);
          ctx->list = D.24584;
        }
        ctx->valid = 0;
        monoeg_g_free (type_name);
        D.24561 = 0B;
        return D.24561;
      }
      <D.24581>:
      klass.96 = klass;
      *out_klass = klass.96;
      D.24561 = field;
      return D.24561;
    }
  finally
    {
      klass = {CLOBBER};
    }
}


do_push_static_field (struct VerifyContext * ctx, int token, gboolean take_addr)
{
  int D.24587;
  unsigned int D.24592;
  unsigned int D.24593;
  const char * iftmp.97;
  struct MonoType * D.24600;
  short unsigned int D.24601;
  int D.24602;
  int D.24603;
  unsigned int D.24606;
  gchar * D.24607;
  struct GSList * D.24608;
  struct GSList * D.24609;
  int D.24614;
  struct MonoClass * D.24617;
  struct MonoMethod * D.24618;
  struct MonoClass * D.24619;
  short unsigned int D.24621;
  int D.24622;
  int D.24623;
  const char * D.24625;
  int D.24626;
  int D.24629;
  int D.24631;
  int D.24632;
  gchar * D.24633;
  struct GSList * D.24634;
  int D.24635;
  int D.24638;
  int D.24641;
  gchar * D.24647;
  struct GSList * D.24648;
  struct ILStackDesc * D.24651;
  struct MonoClassField * field;
  struct MonoClass * klass;

  try
    {
      D.24587 = check_overflow (ctx);
      if (D.24587 == 0) goto <D.24588>; else goto <D.24589>;
      <D.24588>:
      return;
      <D.24589>:
      if (take_addr == 0) goto <D.24590>; else goto <D.24591>;
      <D.24590>:
      D.24592 = ctx->prefix_set;
      D.24593 = D.24592 & 4294967293;
      ctx->prefix_set = D.24593;
      <D.24591>:
      if (take_addr != 0) goto <D.24595>; else goto <D.24596>;
      <D.24595>:
      iftmp.97 = "ldsflda";
      goto <D.24597>;
      <D.24596>:
      iftmp.97 = "ldsfld";
      <D.24597>:
      field = verifier_load_field (ctx, token, &klass, iftmp.97);
      if (field == 0B) goto <D.24598>; else goto <D.24599>;
      <D.24598>:
      return;
      <D.24599>:
      D.24600 = field->type;
      D.24601 = D.24600->attrs;
      D.24602 = (int) D.24601;
      D.24603 = D.24602 & 16;
      if (D.24603 == 0) goto <D.24604>; else goto <D.24605>;
      <D.24604>:
      {
        struct MonoVerifyInfoExtended * vinfo;

        vinfo = monoeg_malloc (24);
        vinfo->info.status = 1;
        D.24606 = ctx->ip_offset;
        D.24607 = monoeg_g_strdup_printf ("Cannot load non static field at 0x%04x", D.24606);
        vinfo->info.message = D.24607;
        vinfo->exception_type = 3;
        D.24608 = ctx->list;
        D.24609 = monoeg_g_slist_prepend (D.24608, vinfo);
        ctx->list = D.24609;
      }
      ctx->valid = 0;
      return;
      <D.24605>:
      if (take_addr != 0) goto <D.24612>; else goto <D.24613>;
      <D.24612>:
      D.24600 = field->type;
      D.24601 = D.24600->attrs;
      D.24602 = (int) D.24601;
      D.24614 = D.24602 & 32;
      if (D.24614 != 0) goto <D.24615>; else goto <D.24616>;
      <D.24615>:
      D.24617 = field->parent;
      D.24618 = ctx->method;
      D.24619 = D.24618->klass;
      if (D.24617 != D.24619) goto <D.24610>; else goto <D.24620>;
      <D.24620>:
      D.24618 = ctx->method;
      D.24621 = D.24618->flags;
      D.24622 = (int) D.24621;
      D.24623 = D.24622 & 2064;
      if (D.24623 == 0) goto <D.24610>; else goto <D.24624>;
      <D.24624>:
      D.24618 = ctx->method;
      D.24625 = D.24618->name;
      D.24626 = strcmp (".cctor", D.24625);
      if (D.24626 != 0) goto <D.24610>; else goto <D.24611>;
      <D.24610>:
      D.24629 = ctx->verifiable;
      if (D.24629 != 0) goto <D.24627>; else goto <D.24630>;
      <D.24630>:
      D.24631 = ctx->level;
      D.24632 = D.24631 & 128;
      if (D.24632 != 0) goto <D.24627>; else goto <D.24628>;
      <D.24627>:
      {
        struct MonoVerifyInfoExtended * vinfo;

        vinfo = monoeg_malloc (24);
        vinfo->info.status = 8;
        D.24606 = ctx->ip_offset;
        D.24633 = monoeg_g_strdup_printf ("Cannot take the address of a init-only field at 0x%04x", D.24606);
        vinfo->info.message = D.24633;
        vinfo->exception_type = 4;
        D.24608 = ctx->list;
        D.24634 = monoeg_g_slist_prepend (D.24608, vinfo);
        ctx->list = D.24634;
      }
      ctx->verifiable = 0;
      D.24631 = ctx->level;
      D.24635 = D.24631 & 16;
      if (D.24635 != 0) goto <D.24636>; else goto <D.24637>;
      <D.24636>:
      ctx->valid = 0;
      <D.24637>:
      <D.24628>:
      <D.24611>:
      <D.24616>:
      <D.24613>:
      D.24631 = ctx->level;
      D.24638 = D.24631 & 64;
      if (D.24638 == 0) goto <D.24639>; else goto <D.24640>;
      <D.24639>:
      D.24618 = ctx->method;
      D.24641 = mono_method_can_access_field_full (D.24618, field, 0B);
      if (D.24641 == 0) goto <D.24642>; else goto <D.24643>;
      <D.24642>:
      D.24629 = ctx->verifiable;
      if (D.24629 != 0) goto <D.24644>; else goto <D.24646>;
      <D.24646>:
      D.24631 = ctx->level;
      D.24632 = D.24631 & 128;
      if (D.24632 != 0) goto <D.24644>; else goto <D.24645>;
      <D.24644>:
      {
        struct MonoVerifyInfoExtended * vinfo;

        vinfo = monoeg_malloc (24);
        vinfo->info.status = 8;
        D.24606 = ctx->ip_offset;
        D.24647 = monoeg_g_strdup_printf ("Type at stack is not accessible at 0x%04x", D.24606);
        vinfo->info.message = D.24647;
        vinfo->exception_type = 10;
        D.24608 = ctx->list;
        D.24648 = monoeg_g_slist_prepend (D.24608, vinfo);
        ctx->list = D.24648;
      }
      ctx->verifiable = 0;
      D.24631 = ctx->level;
      D.24635 = D.24631 & 16;
      if (D.24635 != 0) goto <D.24649>; else goto <D.24650>;
      <D.24649>:
      ctx->valid = 0;
      <D.24650>:
      <D.24645>:
      <D.24643>:
      <D.24640>:
      D.24651 = stack_push (ctx);
      D.24600 = field->type;
      set_stack_value (ctx, D.24651, D.24600, take_addr);
    }
  finally
    {
      klass = {CLOBBER};
    }
}


do_store_field (struct VerifyContext * ctx, int token)
{
  unsigned int D.24655;
  unsigned int D.24656;
  int D.24657;
  int D.24660;
  struct MonoClassField * field.98;
  struct MonoType * D.24664;
  int D.24665;
  int D.24670;
  int D.24672;
  int D.24673;
  const char * D.24674;
  unsigned int D.24675;
  gchar * D.24676;
  struct GSList * D.24677;
  struct GSList * D.24678;
  int D.24679;
  struct ILStackDesc * value;
  struct ILStackDesc * obj;
  struct MonoClassField * field;

  try
    {
      D.24655 = ctx->prefix_set;
      D.24656 = D.24655 & 4294967292;
      ctx->prefix_set = D.24656;
      D.24657 = check_underflow (ctx, 2);
      if (D.24657 == 0) goto <D.24658>; else goto <D.24659>;
      <D.24658>:
      return;
      <D.24659>:
      value = stack_pop (ctx);
      obj = stack_pop_safe (ctx);
      D.24660 = check_is_valid_type_for_field_ops (ctx, token, obj, &field, "stfld");
      if (D.24660 == 0) goto <D.24661>; else goto <D.24662>;
      <D.24661>:
      return;
      <D.24662>:
      field.98 = field;
      D.24664 = field.98->type;
      D.24665 = verify_stack_type_compatibility (ctx, D.24664, value);
      if (D.24665 == 0) goto <D.24666>; else goto <D.24667>;
      <D.24666>:
      D.24670 = ctx->verifiable;
      if (D.24670 != 0) goto <D.24668>; else goto <D.24671>;
      <D.24671>:
      D.24672 = ctx->level;
      D.24673 = D.24672 & 128;
      if (D.24673 != 0) goto <D.24668>; else goto <D.24669>;
      <D.24668>:
      {
        struct MonoVerifyInfoExtended * vinfo;

        vinfo = monoeg_malloc (24);
        vinfo->info.status = 8;
        D.24674 = stack_slot_get_name (value);
        D.24675 = ctx->ip_offset;
        D.24676 = monoeg_g_strdup_printf ("Incompatible type %s in field store at 0x%04x", D.24674, D.24675);
        vinfo->info.message = D.24676;
        vinfo->exception_type = 4;
        D.24677 = ctx->list;
        D.24678 = monoeg_g_slist_prepend (D.24677, vinfo);
        ctx->list = D.24678;
      }
      ctx->verifiable = 0;
      D.24672 = ctx->level;
      D.24679 = D.24672 & 16;
      if (D.24679 != 0) goto <D.24680>; else goto <D.24681>;
      <D.24680>:
      ctx->valid = 0;
      <D.24681>:
      <D.24669>:
      <D.24667>:
    }
  finally
    {
      field = {CLOBBER};
    }
}


do_store_static_field (struct VerifyContext * ctx, int token)
{
  unsigned int D.24685;
  unsigned int D.24686;
  int D.24687;
  struct MonoType * D.24692;
  short unsigned int D.24693;
  int D.24694;
  int D.24695;
  unsigned int D.24698;
  gchar * D.24699;
  struct GSList * D.24700;
  struct GSList * D.24701;
  unsigned char D.24702;
  gchar * D.24705;
  struct GSList * D.24706;
  int D.24707;
  int D.24708;
  struct MonoMethod * D.24711;
  int D.24712;
  int D.24717;
  int D.24719;
  gchar * D.24720;
  struct GSList * D.24721;
  int D.24722;
  int D.24725;
  gchar * D.24731;
  struct GSList * D.24732;
  struct MonoClassField * field;
  struct MonoClass * klass;
  struct ILStackDesc * value;

  try
    {
      D.24685 = ctx->prefix_set;
      D.24686 = D.24685 & 4294967293;
      ctx->prefix_set = D.24686;
      D.24687 = check_underflow (ctx, 1);
      if (D.24687 == 0) goto <D.24688>; else goto <D.24689>;
      <D.24688>:
      return;
      <D.24689>:
      value = stack_pop (ctx);
      field = verifier_load_field (ctx, token, &klass, "stsfld");
      if (field == 0B) goto <D.24690>; else goto <D.24691>;
      <D.24690>:
      return;
      <D.24691>:
      D.24692 = field->type;
      D.24693 = D.24692->attrs;
      D.24694 = (int) D.24693;
      D.24695 = D.24694 & 16;
      if (D.24695 == 0) goto <D.24696>; else goto <D.24697>;
      <D.24696>:
      {
        struct MonoVerifyInfoExtended * vinfo;

        vinfo = monoeg_malloc (24);
        vinfo->info.status = 1;
        D.24698 = ctx->ip_offset;
        D.24699 = monoeg_g_strdup_printf ("Cannot store non static field at 0x%04x", D.24698);
        vinfo->info.message = D.24699;
        vinfo->exception_type = 3;
        D.24700 = ctx->list;
        D.24701 = monoeg_g_slist_prepend (D.24700, vinfo);
        ctx->list = D.24701;
      }
      ctx->valid = 0;
      return;
      <D.24697>:
      D.24692 = field->type;
      D.24702 = D.24692->type;
      if (D.24702 == 22) goto <D.24703>; else goto <D.24704>;
      <D.24703>:
      {
        struct MonoVerifyInfoExtended * vinfo;

        vinfo = monoeg_malloc (24);
        vinfo->info.status = 1;
        D.24698 = ctx->ip_offset;
        D.24705 = monoeg_g_strdup_printf ("Typedbyref field is an unverfiable type in store static field at 0x%04x", D.24698);
        vinfo->info.message = D.24705;
        vinfo->exception_type = 3;
        D.24700 = ctx->list;
        D.24706 = monoeg_g_slist_prepend (D.24700, vinfo);
        ctx->list = D.24706;
      }
      ctx->valid = 0;
      return;
      <D.24704>:
      D.24707 = ctx->level;
      D.24708 = D.24707 & 64;
      if (D.24708 == 0) goto <D.24709>; else goto <D.24710>;
      <D.24709>:
      D.24711 = ctx->method;
      D.24712 = mono_method_can_access_field_full (D.24711, field, 0B);
      if (D.24712 == 0) goto <D.24713>; else goto <D.24714>;
      <D.24713>:
      D.24717 = ctx->verifiable;
      if (D.24717 != 0) goto <D.24715>; else goto <D.24718>;
      <D.24718>:
      D.24707 = ctx->level;
      D.24719 = D.24707 & 128;
      if (D.24719 != 0) goto <D.24715>; else goto <D.24716>;
      <D.24715>:
      {
        struct MonoVerifyInfoExtended * vinfo;

        vinfo = monoeg_malloc (24);
        vinfo->info.status = 8;
        D.24698 = ctx->ip_offset;
        D.24720 = monoeg_g_strdup_printf ("Type at stack is not accessible at 0x%04x", D.24698);
        vinfo->info.message = D.24720;
        vinfo->exception_type = 10;
        D.24700 = ctx->list;
        D.24721 = monoeg_g_slist_prepend (D.24700, vinfo);
        ctx->list = D.24721;
      }
      ctx->verifiable = 0;
      D.24707 = ctx->level;
      D.24722 = D.24707 & 16;
      if (D.24722 != 0) goto <D.24723>; else goto <D.24724>;
      <D.24723>:
      ctx->valid = 0;
      <D.24724>:
      <D.24716>:
      <D.24714>:
      <D.24710>:
      D.24692 = field->type;
      D.24725 = verify_stack_type_compatibility (ctx, D.24692, value);
      if (D.24725 == 0) goto <D.24726>; else goto <D.24727>;
      <D.24726>:
      {
        char * stack_name;
        char * field_name;

        stack_name = stack_slot_full_name (value);
        D.24692 = field->type;
        field_name = mono_type_full_name (D.24692);
        D.24717 = ctx->verifiable;
        if (D.24717 != 0) goto <D.24728>; else goto <D.24730>;
        <D.24730>:
        D.24707 = ctx->level;
        D.24719 = D.24707 & 128;
        if (D.24719 != 0) goto <D.24728>; else goto <D.24729>;
        <D.24728>:
        {
          struct MonoVerifyInfoExtended * vinfo;

          vinfo = monoeg_malloc (24);
          vinfo->info.status = 8;
          D.24698 = ctx->ip_offset;
          D.24731 = monoeg_g_strdup_printf ("Incompatible type in static field store expected \'%s\' but found \'%s\' at 0x%04x", field_name, stack_name, D.24698);
          vinfo->info.message = D.24731;
          vinfo->exception_type = 4;
          D.24700 = ctx->list;
          D.24732 = monoeg_g_slist_prepend (D.24700, vinfo);
          ctx->list = D.24732;
        }
        ctx->verifiable = 0;
        D.24707 = ctx->level;
        D.24722 = D.24707 & 16;
        if (D.24722 != 0) goto <D.24733>; else goto <D.24734>;
        <D.24733>:
        ctx->valid = 0;
        <D.24734>:
        <D.24729>:
        monoeg_g_free (field_name);
        monoeg_g_free (stack_name);
      }
      <D.24727>:
    }
  finally
    {
      klass = {CLOBBER};
    }
}


do_stobj (struct VerifyContext * ctx, int token)
{
  unsigned int D.24738;
  unsigned int D.24739;
  int D.24742;
  int D.24745;
  int D.24750;
  int D.24752;
  int D.24753;
  unsigned int D.24754;
  gchar * D.24755;
  struct GSList * D.24756;
  struct GSList * D.24757;
  int D.24758;
  int D.24761;
  gchar * D.24767;
  struct GSList * D.24768;
  int D.24771;
  struct MonoType * D.24774;
  int D.24775;
  int D.24778;
  gchar * D.24784;
  struct GSList * D.24785;
  int D.24788;
  gchar * D.24794;
  struct GSList * D.24795;
  struct MonoType * D.24798;
  struct MonoType * D.24799;
  int D.24800;
  gchar * D.24806;
  struct GSList * D.24807;
  struct ILStackDesc * dest;
  struct ILStackDesc * src;
  struct MonoType * type;

  type = get_boxable_mono_type (ctx, token, "stobj");
  D.24738 = ctx->prefix_set;
  D.24739 = D.24738 & 4294967292;
  ctx->prefix_set = D.24739;
  if (type == 0B) goto <D.24740>; else goto <D.24741>;
  <D.24740>:
  return;
  <D.24741>:
  D.24742 = check_underflow (ctx, 2);
  if (D.24742 == 0) goto <D.24743>; else goto <D.24744>;
  <D.24743>:
  return;
  <D.24744>:
  src = stack_pop (ctx);
  dest = stack_pop (ctx);
  D.24745 = stack_slot_is_managed_mutability_pointer (dest);
  if (D.24745 != 0) goto <D.24746>; else goto <D.24747>;
  <D.24746>:
  D.24750 = ctx->verifiable;
  if (D.24750 != 0) goto <D.24748>; else goto <D.24751>;
  <D.24751>:
  D.24752 = ctx->level;
  D.24753 = D.24752 & 128;
  if (D.24753 != 0) goto <D.24748>; else goto <D.24749>;
  <D.24748>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (24);
    vinfo->info.status = 8;
    D.24754 = ctx->ip_offset;
    D.24755 = monoeg_g_strdup_printf ("Cannot use a readonly pointer with stobj at 0x%04x", D.24754);
    vinfo->info.message = D.24755;
    vinfo->exception_type = 4;
    D.24756 = ctx->list;
    D.24757 = monoeg_g_slist_prepend (D.24756, vinfo);
    ctx->list = D.24757;
  }
  ctx->verifiable = 0;
  D.24752 = ctx->level;
  D.24758 = D.24752 & 16;
  if (D.24758 != 0) goto <D.24759>; else goto <D.24760>;
  <D.24759>:
  ctx->valid = 0;
  <D.24760>:
  <D.24749>:
  <D.24747>:
  D.24761 = stack_slot_is_managed_pointer (dest);
  if (D.24761 == 0) goto <D.24762>; else goto <D.24763>;
  <D.24762>:
  D.24750 = ctx->verifiable;
  if (D.24750 != 0) goto <D.24764>; else goto <D.24766>;
  <D.24766>:
  D.24752 = ctx->level;
  D.24753 = D.24752 & 128;
  if (D.24753 != 0) goto <D.24764>; else goto <D.24765>;
  <D.24764>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (24);
    vinfo->info.status = 8;
    D.24754 = ctx->ip_offset;
    D.24767 = monoeg_g_strdup_printf ("Invalid destination of stobj operation at 0x%04x", D.24754);
    vinfo->info.message = D.24767;
    vinfo->exception_type = 4;
    D.24756 = ctx->list;
    D.24768 = monoeg_g_slist_prepend (D.24756, vinfo);
    ctx->list = D.24768;
  }
  ctx->verifiable = 0;
  D.24752 = ctx->level;
  D.24758 = D.24752 & 16;
  if (D.24758 != 0) goto <D.24769>; else goto <D.24770>;
  <D.24769>:
  ctx->valid = 0;
  <D.24770>:
  <D.24765>:
  <D.24763>:
  D.24771 = stack_slot_is_boxed_value (src);
  if (D.24771 != 0) goto <D.24772>; else goto <D.24773>;
  <D.24772>:
  D.24774 = src->type;
  D.24775 = mono_type_is_reference (D.24774);
  if (D.24775 == 0) goto <D.24776>; else goto <D.24777>;
  <D.24776>:
  D.24778 = mono_type_is_reference (type);
  if (D.24778 == 0) goto <D.24779>; else goto <D.24780>;
  <D.24779>:
  D.24750 = ctx->verifiable;
  if (D.24750 != 0) goto <D.24781>; else goto <D.24783>;
  <D.24783>:
  D.24752 = ctx->level;
  D.24753 = D.24752 & 128;
  if (D.24753 != 0) goto <D.24781>; else goto <D.24782>;
  <D.24781>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (24);
    vinfo->info.status = 8;
    D.24754 = ctx->ip_offset;
    D.24784 = monoeg_g_strdup_printf ("Cannot use stobj with a boxed source value that is not a reference type at 0x%04x", D.24754);
    vinfo->info.message = D.24784;
    vinfo->exception_type = 4;
    D.24756 = ctx->list;
    D.24785 = monoeg_g_slist_prepend (D.24756, vinfo);
    ctx->list = D.24785;
  }
  ctx->verifiable = 0;
  D.24752 = ctx->level;
  D.24758 = D.24752 & 16;
  if (D.24758 != 0) goto <D.24786>; else goto <D.24787>;
  <D.24786>:
  ctx->valid = 0;
  <D.24787>:
  <D.24782>:
  <D.24780>:
  <D.24777>:
  <D.24773>:
  D.24788 = verify_stack_type_compatibility (ctx, type, src);
  if (D.24788 == 0) goto <D.24789>; else goto <D.24790>;
  <D.24789>:
  {
    char * type_name;
    char * src_name;

    type_name = mono_type_full_name (type);
    src_name = stack_slot_full_name (src);
    D.24750 = ctx->verifiable;
    if (D.24750 != 0) goto <D.24791>; else goto <D.24793>;
    <D.24793>:
    D.24752 = ctx->level;
    D.24753 = D.24752 & 128;
    if (D.24753 != 0) goto <D.24791>; else goto <D.24792>;
    <D.24791>:
    {
      struct MonoVerifyInfoExtended * vinfo;

      vinfo = monoeg_malloc (24);
      vinfo->info.status = 8;
      D.24754 = ctx->ip_offset;
      D.24794 = monoeg_g_strdup_printf ("Token \'%s\' and source \'%s\' of stobj don\'t match \' at 0x%04x", type_name, src_name, D.24754);
      vinfo->info.message = D.24794;
      vinfo->exception_type = 4;
      D.24756 = ctx->list;
      D.24795 = monoeg_g_slist_prepend (D.24756, vinfo);
      ctx->list = D.24795;
    }
    ctx->verifiable = 0;
    D.24752 = ctx->level;
    D.24758 = D.24752 & 16;
    if (D.24758 != 0) goto <D.24796>; else goto <D.24797>;
    <D.24796>:
    ctx->valid = 0;
    <D.24797>:
    <D.24792>:
    monoeg_g_free (type_name);
    monoeg_g_free (src_name);
  }
  <D.24790>:
  D.24798 = dest->type;
  D.24799 = mono_type_get_type_byval (D.24798);
  D.24800 = verify_type_compatibility (ctx, D.24799, type);
  if (D.24800 == 0) goto <D.24801>; else goto <D.24802>;
  <D.24801>:
  D.24750 = ctx->verifiable;
  if (D.24750 != 0) goto <D.24803>; else goto <D.24805>;
  <D.24805>:
  D.24752 = ctx->level;
  D.24753 = D.24752 & 128;
  if (D.24753 != 0) goto <D.24803>; else goto <D.24804>;
  <D.24803>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (24);
    vinfo->info.status = 8;
    D.24754 = ctx->ip_offset;
    D.24806 = monoeg_g_strdup_printf ("Destination and token types of stobj don\'t match at 0x%04x", D.24754);
    vinfo->info.message = D.24806;
    vinfo->exception_type = 4;
    D.24756 = ctx->list;
    D.24807 = monoeg_g_slist_prepend (D.24756, vinfo);
    ctx->list = D.24807;
  }
  ctx->verifiable = 0;
  D.24752 = ctx->level;
  D.24758 = D.24752 & 16;
  if (D.24758 != 0) goto <D.24808>; else goto <D.24809>;
  <D.24808>:
  ctx->valid = 0;
  <D.24809>:
  <D.24804>:
  <D.24802>:
}


do_box_value (struct VerifyContext * ctx, int klass_token)
{
  int D.24813;
  int D.24816;
  struct MonoType * D.24819;
  int D.24820;
  int D.24823;
  struct ILStackDesc * D.24826;
  int D.24827;
  int D.24828;
  int D.24829;
  int D.24834;
  int D.24836;
  int D.24837;
  unsigned int D.24838;
  gchar * D.24839;
  struct GSList * D.24840;
  struct GSList * D.24841;
  int D.24842;
  int D.24845;
  struct MonoClass * D.24848;
  struct ILStackDesc * value;
  struct MonoType * type;
  struct MonoClass * klass;

  type = get_boxable_mono_type (ctx, klass_token, "box");
  if (type == 0B) goto <D.24811>; else goto <D.24812>;
  <D.24811>:
  return;
  <D.24812>:
  D.24813 = check_underflow (ctx, 1);
  if (D.24813 == 0) goto <D.24814>; else goto <D.24815>;
  <D.24814>:
  return;
  <D.24815>:
  value = stack_pop (ctx);
  D.24816 = stack_slot_get_underlying_type (value);
  if (D.24816 == 6) goto <D.24817>; else goto <D.24818>;
  <D.24817>:
  D.24819 = value->type;
  D.24820 = mono_type_is_reference (D.24819);
  if (D.24820 != 0) goto <D.24821>; else goto <D.24822>;
  <D.24821>:
  D.24823 = mono_type_is_reference (type);
  if (D.24823 != 0) goto <D.24824>; else goto <D.24825>;
  <D.24824>:
  D.24826 = stack_push_stack_val (ctx, value);
  D.24827 = D.24826->stype;
  D.24828 = D.24827 | 4096;
  D.24826->stype = D.24828;
  return;
  <D.24825>:
  <D.24822>:
  <D.24818>:
  D.24829 = verify_stack_type_compatibility (ctx, type, value);
  if (D.24829 == 0) goto <D.24830>; else goto <D.24831>;
  <D.24830>:
  D.24834 = ctx->verifiable;
  if (D.24834 != 0) goto <D.24832>; else goto <D.24835>;
  <D.24835>:
  D.24836 = ctx->level;
  D.24837 = D.24836 & 128;
  if (D.24837 != 0) goto <D.24832>; else goto <D.24833>;
  <D.24832>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (24);
    vinfo->info.status = 8;
    D.24838 = ctx->ip_offset;
    D.24839 = monoeg_g_strdup_printf ("Invalid type at stack for boxing operation at 0x%04x", D.24838);
    vinfo->info.message = D.24839;
    vinfo->exception_type = 4;
    D.24840 = ctx->list;
    D.24841 = monoeg_g_slist_prepend (D.24840, vinfo);
    ctx->list = D.24841;
  }
  ctx->verifiable = 0;
  D.24836 = ctx->level;
  D.24842 = D.24836 & 16;
  if (D.24842 != 0) goto <D.24843>; else goto <D.24844>;
  <D.24843>:
  ctx->valid = 0;
  <D.24844>:
  <D.24833>:
  <D.24831>:
  klass = mono_class_from_mono_type (type);
  D.24845 = mono_class_is_nullable (klass);
  if (D.24845 != 0) goto <D.24846>; else goto <D.24847>;
  <D.24846>:
  D.24848 = mono_class_get_nullable_param (klass);
  type = &D.24848->byval_arg;
  <D.24847>:
  stack_push_val (ctx, 4102, type);
}


do_newarr (struct VerifyContext * ctx, int token)
{
  int D.24852;
  int D.24855;
  int D.24858;
  int D.24863;
  int D.24865;
  int D.24866;
  const char * D.24867;
  unsigned int D.24868;
  gchar * D.24869;
  struct GSList * D.24870;
  struct GSList * D.24871;
  int D.24872;
  struct ILStackDesc * D.24875;
  struct MonoClass * D.24876;
  struct MonoClass * D.24877;
  struct MonoType * D.24878;
  struct ILStackDesc * value;
  struct MonoType * type;

  type = get_boxable_mono_type (ctx, token, "newarr");
  if (type == 0B) goto <D.24850>; else goto <D.24851>;
  <D.24850>:
  return;
  <D.24851>:
  D.24852 = check_underflow (ctx, 1);
  if (D.24852 == 0) goto <D.24853>; else goto <D.24854>;
  <D.24853>:
  return;
  <D.24854>:
  value = stack_pop (ctx);
  D.24855 = stack_slot_get_type (value);
  if (D.24855 != 1) goto <D.24856>; else goto <D.24857>;
  <D.24856>:
  D.24858 = stack_slot_get_type (value);
  if (D.24858 != 3) goto <D.24859>; else goto <D.24860>;
  <D.24859>:
  D.24863 = ctx->verifiable;
  if (D.24863 != 0) goto <D.24861>; else goto <D.24864>;
  <D.24864>:
  D.24865 = ctx->level;
  D.24866 = D.24865 & 128;
  if (D.24866 != 0) goto <D.24861>; else goto <D.24862>;
  <D.24861>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (24);
    vinfo->info.status = 8;
    D.24867 = stack_slot_get_name (value);
    D.24868 = ctx->ip_offset;
    D.24869 = monoeg_g_strdup_printf ("Array size type on stack (%s) is not a verifiable type at 0x%04x", D.24867, D.24868);
    vinfo->info.message = D.24869;
    vinfo->exception_type = 4;
    D.24870 = ctx->list;
    D.24871 = monoeg_g_slist_prepend (D.24870, vinfo);
    ctx->list = D.24871;
  }
  ctx->verifiable = 0;
  D.24865 = ctx->level;
  D.24872 = D.24865 & 16;
  if (D.24872 != 0) goto <D.24873>; else goto <D.24874>;
  <D.24873>:
  ctx->valid = 0;
  <D.24874>:
  <D.24862>:
  <D.24860>:
  <D.24857>:
  D.24875 = stack_push (ctx);
  D.24876 = mono_class_from_mono_type (type);
  D.24877 = mono_array_class_get (D.24876, 1);
  D.24878 = mono_class_get_type (D.24877);
  set_stack_value (ctx, D.24875, D.24878, 0);
}


do_ldlen (struct VerifyContext * ctx)
{
  int D.24880;
  int D.24885;
  struct MonoType * D.24887;
  unsigned char D.24888;
  int D.24891;
  int D.24893;
  int D.24894;
  unsigned int D.24895;
  gchar * D.24896;
  struct GSList * D.24897;
  struct GSList * D.24898;
  int D.24899;
  struct MonoClass * D.24902;
  struct MonoType * D.24903;
  struct ILStackDesc * value;

  D.24880 = check_underflow (ctx, 1);
  if (D.24880 == 0) goto <D.24881>; else goto <D.24882>;
  <D.24881>:
  return;
  <D.24882>:
  value = stack_pop (ctx);
  D.24885 = stack_slot_get_type (value);
  if (D.24885 != 6) goto <D.24883>; else goto <D.24886>;
  <D.24886>:
  D.24887 = value->type;
  D.24888 = D.24887->type;
  if (D.24888 != 29) goto <D.24883>; else goto <D.24884>;
  <D.24883>:
  D.24891 = ctx->verifiable;
  if (D.24891 != 0) goto <D.24889>; else goto <D.24892>;
  <D.24892>:
  D.24893 = ctx->level;
  D.24894 = D.24893 & 128;
  if (D.24894 != 0) goto <D.24889>; else goto <D.24890>;
  <D.24889>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (24);
    vinfo->info.status = 8;
    D.24895 = ctx->ip_offset;
    D.24896 = monoeg_g_strdup_printf ("Invalid array type for ldlen at 0x%04x", D.24895);
    vinfo->info.message = D.24896;
    vinfo->exception_type = 4;
    D.24897 = ctx->list;
    D.24898 = monoeg_g_slist_prepend (D.24897, vinfo);
    ctx->list = D.24898;
  }
  ctx->verifiable = 0;
  D.24893 = ctx->level;
  D.24899 = D.24893 & 16;
  if (D.24899 != 0) goto <D.24900>; else goto <D.24901>;
  <D.24900>:
  ctx->valid = 0;
  <D.24901>:
  <D.24890>:
  <D.24884>:
  D.24902 = mono_defaults.int_class;
  D.24903 = &D.24902->byval_arg;
  stack_push_val (ctx, 3, D.24903);
}


do_ldelema (struct VerifyContext * ctx, int klass_token)
{
  int D.24907;
  int D.24910;
  int D.24913;
  int D.24918;
  int D.24920;
  int D.24921;
  const char * D.24922;
  unsigned int D.24923;
  gchar * D.24924;
  struct GSList * D.24925;
  struct GSList * D.24926;
  int D.24927;
  int D.24930;
  int D.24936;
  struct MonoType * D.24938;
  unsigned char D.24939;
  const char * D.24943;
  gchar * D.24944;
  struct GSList * D.24945;
  int D.24951;
  int D.24953;
  struct MonoClass * D.24954;
  struct MonoType * D.24955;
  gchar * D.24961;
  struct GSList * D.24962;
  unsigned int D.24965;
  unsigned int D.24966;
  unsigned int D.24969;
  int D.24970;
  int D.24971;
  struct ILStackDesc * index;
  struct ILStackDesc * array;
  struct ILStackDesc * res;
  struct MonoType * type;
  gboolean valid;

  type = get_boxable_mono_type (ctx, klass_token, "ldelema");
  if (type == 0B) goto <D.24905>; else goto <D.24906>;
  <D.24905>:
  return;
  <D.24906>:
  D.24907 = check_underflow (ctx, 2);
  if (D.24907 == 0) goto <D.24908>; else goto <D.24909>;
  <D.24908>:
  return;
  <D.24909>:
  index = stack_pop (ctx);
  array = stack_pop (ctx);
  D.24910 = stack_slot_get_type (index);
  if (D.24910 != 1) goto <D.24911>; else goto <D.24912>;
  <D.24911>:
  D.24913 = stack_slot_get_type (index);
  if (D.24913 != 3) goto <D.24914>; else goto <D.24915>;
  <D.24914>:
  D.24918 = ctx->verifiable;
  if (D.24918 != 0) goto <D.24916>; else goto <D.24919>;
  <D.24919>:
  D.24920 = ctx->level;
  D.24921 = D.24920 & 128;
  if (D.24921 != 0) goto <D.24916>; else goto <D.24917>;
  <D.24916>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (24);
    vinfo->info.status = 8;
    D.24922 = stack_slot_get_name (index);
    D.24923 = ctx->ip_offset;
    D.24924 = monoeg_g_strdup_printf ("Index type(%s) for ldelema is not an int or a native int at 0x%04x", D.24922, D.24923);
    vinfo->info.message = D.24924;
    vinfo->exception_type = 4;
    D.24925 = ctx->list;
    D.24926 = monoeg_g_slist_prepend (D.24925, vinfo);
    ctx->list = D.24926;
  }
  ctx->verifiable = 0;
  D.24920 = ctx->level;
  D.24927 = D.24920 & 16;
  if (D.24927 != 0) goto <D.24928>; else goto <D.24929>;
  <D.24928>:
  ctx->valid = 0;
  <D.24929>:
  <D.24917>:
  <D.24915>:
  <D.24912>:
  D.24930 = stack_slot_is_null_literal (array);
  if (D.24930 == 0) goto <D.24931>; else goto <D.24932>;
  <D.24931>:
  D.24936 = stack_slot_get_type (array);
  if (D.24936 != 6) goto <D.24933>; else goto <D.24937>;
  <D.24937>:
  D.24938 = array->type;
  D.24939 = D.24938->type;
  if (D.24939 != 29) goto <D.24933>; else goto <D.24934>;
  <D.24933>:
  D.24918 = ctx->verifiable;
  if (D.24918 != 0) goto <D.24940>; else goto <D.24942>;
  <D.24942>:
  D.24920 = ctx->level;
  D.24921 = D.24920 & 128;
  if (D.24921 != 0) goto <D.24940>; else goto <D.24941>;
  <D.24940>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (24);
    vinfo->info.status = 8;
    D.24943 = stack_slot_get_name (array);
    D.24923 = ctx->ip_offset;
    D.24944 = monoeg_g_strdup_printf ("Invalid array type(%s) for ldelema at 0x%04x", D.24943, D.24923);
    vinfo->info.message = D.24944;
    vinfo->exception_type = 4;
    D.24925 = ctx->list;
    D.24945 = monoeg_g_slist_prepend (D.24925, vinfo);
    ctx->list = D.24945;
  }
  ctx->verifiable = 0;
  D.24920 = ctx->level;
  D.24927 = D.24920 & 16;
  if (D.24927 != 0) goto <D.24946>; else goto <D.24947>;
  <D.24946>:
  ctx->valid = 0;
  <D.24947>:
  <D.24941>:
  goto <D.24935>;
  <D.24934>:
  D.24951 = get_stack_type (type);
  if (D.24951 == 1) goto <D.24948>; else goto <D.24952>;
  <D.24952>:
  D.24953 = get_stack_type (type);
  if (D.24953 == 3) goto <D.24948>; else goto <D.24949>;
  <D.24948>:
  D.24938 = array->type;
  D.24954 = D.24938->data.klass;
  D.24955 = &D.24954->byval_arg;
  valid = verify_type_compatibility_full (ctx, type, D.24955, 1);
  goto <D.24950>;
  <D.24949>:
  D.24938 = array->type;
  D.24954 = D.24938->data.klass;
  D.24955 = &D.24954->byval_arg;
  valid = mono_metadata_type_equal (type, D.24955);
  <D.24950>:
  if (valid == 0) goto <D.24956>; else goto <D.24957>;
  <D.24956>:
  D.24918 = ctx->verifiable;
  if (D.24918 != 0) goto <D.24958>; else goto <D.24960>;
  <D.24960>:
  D.24920 = ctx->level;
  D.24921 = D.24920 & 128;
  if (D.24921 != 0) goto <D.24958>; else goto <D.24959>;
  <D.24958>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (24);
    vinfo->info.status = 8;
    D.24923 = ctx->ip_offset;
    D.24961 = monoeg_g_strdup_printf ("Invalid array type on stack for ldelema at 0x%04x", D.24923);
    vinfo->info.message = D.24961;
    vinfo->exception_type = 4;
    D.24925 = ctx->list;
    D.24962 = monoeg_g_slist_prepend (D.24925, vinfo);
    ctx->list = D.24962;
  }
  ctx->verifiable = 0;
  D.24920 = ctx->level;
  D.24927 = D.24920 & 16;
  if (D.24927 != 0) goto <D.24963>; else goto <D.24964>;
  <D.24963>:
  ctx->valid = 0;
  <D.24964>:
  <D.24959>:
  <D.24957>:
  <D.24935>:
  <D.24932>:
  res = stack_push (ctx);
  set_stack_value (ctx, res, type, 1);
  D.24965 = ctx->prefix_set;
  D.24966 = D.24965 & 16;
  if (D.24966 != 0) goto <D.24967>; else goto <D.24968>;
  <D.24967>:
  D.24965 = ctx->prefix_set;
  D.24969 = D.24965 & 4294967279;
  ctx->prefix_set = D.24969;
  D.24970 = res->stype;
  D.24971 = D.24970 | 512;
  res->stype = D.24971;
  <D.24968>:
}


do_ldelem (struct VerifyContext * ctx, int opcode, int token)
{
  int D.24973;
  unsigned int D.24980;
  gchar * D.24981;
  struct GSList * D.24982;
  struct GSList * D.24983;
  int D.24985;
  int D.24988;
  int D.24993;
  int D.24995;
  int D.24996;
  const char * D.24997;
  gchar * D.24998;
  struct GSList * D.24999;
  int D.25000;
  int D.25003;
  int D.25009;
  struct MonoType * D.25011;
  unsigned char D.25012;
  const char * D.25016;
  gchar * D.25017;
  struct GSList * D.25018;
  struct MonoClass * D.25023;
  long unsigned int D.25024;
  long unsigned int D.25025;
  gchar * D.25031;
  struct GSList * D.25032;
  int D.25036;
  unsigned char D.25042;
  unsigned char D.25043;
  unsigned char D.25045;
  unsigned char D.25046;
  unsigned char D.25047;
  unsigned char D.25049;
  gchar * D.25053;
  struct GSList * D.25054;
  int D.25057;
  gchar * D.25063;
  struct GSList * D.25064;
  struct ILStackDesc * D.25067;
  struct ILStackDesc * index;
  struct ILStackDesc * array;
  struct MonoType * type;

  D.24973 = check_underflow (ctx, 2);
  if (D.24973 == 0) goto <D.24974>; else goto <D.24975>;
  <D.24974>:
  return;
  <D.24975>:
  if (opcode == 163) goto <D.24976>; else goto <D.24977>;
  <D.24976>:
  type = verifier_load_type (ctx, token, "ldelem.any");
  if (type == 0B) goto <D.24978>; else goto <D.24979>;
  <D.24978>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (24);
    vinfo->info.status = 1;
    D.24980 = ctx->ip_offset;
    D.24981 = monoeg_g_strdup_printf ("Type (0x%08x) not found at 0x%04x", token, D.24980);
    vinfo->info.message = D.24981;
    vinfo->exception_type = 3;
    D.24982 = ctx->list;
    D.24983 = monoeg_g_slist_prepend (D.24982, vinfo);
    ctx->list = D.24983;
  }
  ctx->valid = 0;
  return;
  <D.24979>:
  goto <D.24984>;
  <D.24977>:
  type = mono_type_from_opcode (opcode);
  <D.24984>:
  index = stack_pop (ctx);
  array = stack_pop (ctx);
  D.24985 = stack_slot_get_type (index);
  if (D.24985 != 1) goto <D.24986>; else goto <D.24987>;
  <D.24986>:
  D.24988 = stack_slot_get_type (index);
  if (D.24988 != 3) goto <D.24989>; else goto <D.24990>;
  <D.24989>:
  D.24993 = ctx->verifiable;
  if (D.24993 != 0) goto <D.24991>; else goto <D.24994>;
  <D.24994>:
  D.24995 = ctx->level;
  D.24996 = D.24995 & 128;
  if (D.24996 != 0) goto <D.24991>; else goto <D.24992>;
  <D.24991>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (24);
    vinfo->info.status = 8;
    D.24997 = stack_slot_get_name (index);
    D.24980 = ctx->ip_offset;
    D.24998 = monoeg_g_strdup_printf ("Index type(%s) for ldelem.X is not an int or a native int at 0x%04x", D.24997, D.24980);
    vinfo->info.message = D.24998;
    vinfo->exception_type = 4;
    D.24982 = ctx->list;
    D.24999 = monoeg_g_slist_prepend (D.24982, vinfo);
    ctx->list = D.24999;
  }
  ctx->verifiable = 0;
  D.24995 = ctx->level;
  D.25000 = D.24995 & 16;
  if (D.25000 != 0) goto <D.25001>; else goto <D.25002>;
  <D.25001>:
  ctx->valid = 0;
  <D.25002>:
  <D.24992>:
  <D.24990>:
  <D.24987>:
  D.25003 = stack_slot_is_null_literal (array);
  if (D.25003 == 0) goto <D.25004>; else goto <D.25005>;
  <D.25004>:
  D.25009 = stack_slot_get_type (array);
  if (D.25009 != 6) goto <D.25006>; else goto <D.25010>;
  <D.25010>:
  D.25011 = array->type;
  D.25012 = D.25011->type;
  if (D.25012 != 29) goto <D.25006>; else goto <D.25007>;
  <D.25006>:
  D.24993 = ctx->verifiable;
  if (D.24993 != 0) goto <D.25013>; else goto <D.25015>;
  <D.25015>:
  D.24995 = ctx->level;
  D.24996 = D.24995 & 128;
  if (D.24996 != 0) goto <D.25013>; else goto <D.25014>;
  <D.25013>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (24);
    vinfo->info.status = 8;
    D.25016 = stack_slot_get_name (array);
    D.24980 = ctx->ip_offset;
    D.25017 = monoeg_g_strdup_printf ("Invalid array type(%s) for ldelem.X at 0x%04x", D.25016, D.24980);
    vinfo->info.message = D.25017;
    vinfo->exception_type = 4;
    D.24982 = ctx->list;
    D.25018 = monoeg_g_slist_prepend (D.24982, vinfo);
    ctx->list = D.25018;
  }
  ctx->verifiable = 0;
  D.24995 = ctx->level;
  D.25000 = D.24995 & 16;
  if (D.25000 != 0) goto <D.25019>; else goto <D.25020>;
  <D.25019>:
  ctx->valid = 0;
  <D.25020>:
  <D.25014>:
  goto <D.25008>;
  <D.25007>:
  if (opcode == 154) goto <D.25021>; else goto <D.25022>;
  <D.25021>:
  D.25011 = array->type;
  D.25023 = D.25011->data.klass;
  D.25024 = BIT_FIELD_REF <*D.25023, 64, 256>;
  D.25025 = D.25024 & 1152921504606846976;
  if (D.25025 != 0) goto <D.25026>; else goto <D.25027>;
  <D.25026>:
  D.24993 = ctx->verifiable;
  if (D.24993 != 0) goto <D.25028>; else goto <D.25030>;
  <D.25030>:
  D.24995 = ctx->level;
  D.24996 = D.24995 & 128;
  if (D.24996 != 0) goto <D.25028>; else goto <D.25029>;
  <D.25028>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (24);
    vinfo->info.status = 8;
    D.24980 = ctx->ip_offset;
    D.25031 = monoeg_g_strdup_printf ("Invalid array type is not a reference type for ldelem.ref 0x%04x", D.24980);
    vinfo->info.message = D.25031;
    vinfo->exception_type = 4;
    D.24982 = ctx->list;
    D.25032 = monoeg_g_slist_prepend (D.24982, vinfo);
    ctx->list = D.25032;
  }
  ctx->verifiable = 0;
  D.24995 = ctx->level;
  D.25000 = D.24995 & 16;
  if (D.25000 != 0) goto <D.25033>; else goto <D.25034>;
  <D.25033>:
  ctx->valid = 0;
  <D.25034>:
  <D.25029>:
  <D.25027>:
  D.25011 = array->type;
  D.25023 = D.25011->data.klass;
  type = &D.25023->byval_arg;
  goto <D.25035>;
  <D.25022>:
  {
    struct MonoType * candidate;

    D.25011 = array->type;
    D.25023 = D.25011->data.klass;
    candidate = &D.25023->byval_arg;
    D.24995 = ctx->level;
    D.25036 = D.24995 & 32;
    if (D.25036 == 0) goto <D.25037>; else goto <D.25038>;
    <D.25037>:
    {
      struct MonoType * underlying_type;
      struct MonoType * underlying_candidate;

      underlying_type = mono_type_get_underlying_type_any (type);
      underlying_candidate = mono_type_get_underlying_type_any (candidate);
      D.25042 = underlying_type->type;
      D.25043 = D.25042 + 248;
      if (D.25043 <= 1) goto <D.25044>; else goto <D.25039>;
      <D.25044>:
      D.25045 = underlying_candidate->type;
      D.25046 = D.25045 + 232;
      if (D.25046 <= 1) goto <D.25040>; else goto <D.25039>;
      <D.25039>:
      D.25045 = underlying_candidate->type;
      D.25047 = D.25045 + 248;
      if (D.25047 <= 1) goto <D.25048>; else goto <D.25041>;
      <D.25048>:
      D.25042 = underlying_type->type;
      D.25049 = D.25042 + 232;
      if (D.25049 <= 1) goto <D.25040>; else goto <D.25041>;
      <D.25040>:
      D.24993 = ctx->verifiable;
      if (D.24993 != 0) goto <D.25050>; else goto <D.25052>;
      <D.25052>:
      D.24995 = ctx->level;
      D.24996 = D.24995 & 128;
      if (D.24996 != 0) goto <D.25050>; else goto <D.25051>;
      <D.25050>:
      {
        struct MonoVerifyInfoExtended * vinfo;

        vinfo = monoeg_malloc (24);
        vinfo->info.status = 8;
        D.24980 = ctx->ip_offset;
        D.25053 = monoeg_g_strdup_printf ("Invalid array type on stack for ldelem.X at 0x%04x", D.24980);
        vinfo->info.message = D.25053;
        vinfo->exception_type = 4;
        D.24982 = ctx->list;
        D.25054 = monoeg_g_slist_prepend (D.24982, vinfo);
        ctx->list = D.25054;
      }
      ctx->verifiable = 0;
      D.24995 = ctx->level;
      D.25000 = D.24995 & 16;
      if (D.25000 != 0) goto <D.25055>; else goto <D.25056>;
      <D.25055>:
      ctx->valid = 0;
      <D.25056>:
      <D.25051>:
      <D.25041>:
    }
    <D.25038>:
    D.25057 = verify_type_compatibility_full (ctx, type, candidate, 1);
    if (D.25057 == 0) goto <D.25058>; else goto <D.25059>;
    <D.25058>:
    D.24993 = ctx->verifiable;
    if (D.24993 != 0) goto <D.25060>; else goto <D.25062>;
    <D.25062>:
    D.24995 = ctx->level;
    D.24996 = D.24995 & 128;
    if (D.24996 != 0) goto <D.25060>; else goto <D.25061>;
    <D.25060>:
    {
      struct MonoVerifyInfoExtended * vinfo;

      vinfo = monoeg_malloc (24);
      vinfo->info.status = 8;
      D.24980 = ctx->ip_offset;
      D.25063 = monoeg_g_strdup_printf ("Invalid array type on stack for ldelem.X at 0x%04x", D.24980);
      vinfo->info.message = D.25063;
      vinfo->exception_type = 4;
      D.24982 = ctx->list;
      D.25064 = monoeg_g_slist_prepend (D.24982, vinfo);
      ctx->list = D.25064;
    }
    ctx->verifiable = 0;
    D.24995 = ctx->level;
    D.25000 = D.24995 & 16;
    if (D.25000 != 0) goto <D.25065>; else goto <D.25066>;
    <D.25065>:
    ctx->valid = 0;
    <D.25066>:
    <D.25061>:
    <D.25059>:
  }
  <D.25035>:
  <D.25008>:
  <D.25005>:
  D.25067 = stack_push (ctx);
  set_stack_value (ctx, D.25067, type, 0);
}


verifier_load_type (struct VerifyContext * ctx, int token, const char * opcode)
{
  struct MonoMethod * D.25069;
  long unsigned int D.25070;
  long unsigned int D.25071;
  unsigned int token.99;
  struct MonoType * iftmp.100;
  int D.25083;
  unsigned int D.25084;
  unsigned int D.25085;
  struct MonoImage * D.25087;
  unsigned int token.101;
  int D.25089;
  unsigned int D.25090;
  gchar * D.25091;
  struct GSList * D.25092;
  struct GSList * D.25093;
  struct MonoType * D.25094;
  struct MonoGenericContext * D.25095;
  struct MonoLoaderError * D.25099;
  gchar * D.25100;
  struct GSList * D.25101;
  int D.25102;
  struct MonoType * type;

  D.25069 = ctx->method;
  D.25070 = BIT_FIELD_REF <*D.25069, 64, 256>;
  D.25071 = D.25070 & 4467570830351532032;
  if (D.25071 != 0) goto <D.25072>; else goto <D.25073>;
  <D.25072>:
  {
    struct MonoClass * class;

    D.25069 = ctx->method;
    token.99 = (unsigned int) token;
    class = mono_method_get_wrapper_data (D.25069, token.99);
    if (class != 0B) goto <D.25076>; else goto <D.25077>;
    <D.25076>:
    iftmp.100 = &class->byval_arg;
    goto <D.25078>;
    <D.25077>:
    iftmp.100 = 0B;
    <D.25078>:
    type = iftmp.100;
  }
  goto <D.25079>;
  <D.25073>:
  D.25083 = token >> 24;
  D.25084 = (unsigned int) D.25083;
  D.25085 = D.25084 + 4294967295;
  if (D.25085 > 1) goto <D.25086>; else goto <D.25080>;
  <D.25086>:
  D.25083 = token >> 24;
  if (D.25083 != 27) goto <D.25081>; else goto <D.25080>;
  <D.25080>:
  D.25087 = ctx->image;
  token.101 = (unsigned int) token;
  D.25089 = token_bounds_check (D.25087, token.101);
  if (D.25089 == 0) goto <D.25081>; else goto <D.25082>;
  <D.25081>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (24);
    vinfo->info.status = 1;
    D.25090 = ctx->ip_offset;
    D.25091 = monoeg_g_strdup_printf ("Invalid type token 0x%08x at 0x%04x", token, D.25090);
    vinfo->info.message = D.25091;
    vinfo->exception_type = 12;
    D.25092 = ctx->list;
    D.25093 = monoeg_g_slist_prepend (D.25092, vinfo);
    ctx->list = D.25093;
  }
  ctx->valid = 0;
  D.25094 = 0B;
  return D.25094;
  <D.25082>:
  D.25087 = ctx->image;
  token.101 = (unsigned int) token;
  D.25095 = ctx->generic_context;
  type = mono_type_get_full (D.25087, token.101, D.25095);
  <D.25079>:
  if (type == 0B) goto <D.25096>; else goto <D.25098>;
  <D.25098>:
  D.25099 = mono_loader_get_last_error ();
  if (D.25099 != 0B) goto <D.25096>; else goto <D.25097>;
  <D.25096>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (24);
    vinfo->info.status = 1;
    D.25090 = ctx->ip_offset;
    D.25100 = monoeg_g_strdup_printf ("Cannot load type from token 0x%08x for %s at 0x%04x", token, opcode, D.25090);
    vinfo->info.message = D.25100;
    vinfo->exception_type = 12;
    D.25092 = ctx->list;
    D.25101 = monoeg_g_slist_prepend (D.25092, vinfo);
    ctx->list = D.25101;
  }
  ctx->valid = 0;
  mono_loader_clear_error ();
  D.25094 = 0B;
  return D.25094;
  <D.25097>:
  D.25102 = mono_type_is_valid_in_context (ctx, type);
  if (D.25102 == 0) goto <D.25103>; else goto <D.25104>;
  <D.25103>:
  D.25094 = 0B;
  return D.25094;
  <D.25104>:
  D.25094 = type;
  return D.25094;
}


do_stelem (struct VerifyContext * ctx, int opcode, int token)
{
  int D.25106;
  unsigned int D.25113;
  gchar * D.25114;
  struct GSList * D.25115;
  struct GSList * D.25116;
  int D.25118;
  int D.25121;
  int D.25126;
  int D.25128;
  int D.25129;
  const char * D.25130;
  gchar * D.25131;
  struct GSList * D.25132;
  int D.25133;
  int D.25136;
  int D.25142;
  struct MonoType * D.25144;
  unsigned char D.25145;
  const char * D.25149;
  gchar * D.25150;
  struct GSList * D.25151;
  struct MonoClass * D.25156;
  long unsigned int D.25157;
  long unsigned int D.25158;
  gchar * D.25164;
  struct GSList * D.25165;
  struct MonoType * D.25169;
  int D.25170;
  gchar * D.25176;
  struct GSList * D.25177;
  int D.25182;
  struct MonoType * D.25185;
  struct MonoClass * D.25186;
  long unsigned int D.25187;
  long unsigned int D.25188;
  gchar * D.25194;
  struct GSList * D.25195;
  int D.25201;
  gchar * D.25207;
  struct GSList * D.25208;
  int D.25211;
  int D.25214;
  int D.25217;
  gchar * D.25223;
  struct GSList * D.25224;
  struct ILStackDesc * index;
  struct ILStackDesc * array;
  struct ILStackDesc * value;
  struct MonoType * type;

  D.25106 = check_underflow (ctx, 3);
  if (D.25106 == 0) goto <D.25107>; else goto <D.25108>;
  <D.25107>:
  return;
  <D.25108>:
  if (opcode == 164) goto <D.25109>; else goto <D.25110>;
  <D.25109>:
  type = verifier_load_type (ctx, token, "stelem.any");
  if (type == 0B) goto <D.25111>; else goto <D.25112>;
  <D.25111>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (24);
    vinfo->info.status = 1;
    D.25113 = ctx->ip_offset;
    D.25114 = monoeg_g_strdup_printf ("Type (0x%08x) not found at 0x%04x", token, D.25113);
    vinfo->info.message = D.25114;
    vinfo->exception_type = 3;
    D.25115 = ctx->list;
    D.25116 = monoeg_g_slist_prepend (D.25115, vinfo);
    ctx->list = D.25116;
  }
  ctx->valid = 0;
  return;
  <D.25112>:
  goto <D.25117>;
  <D.25110>:
  type = mono_type_from_opcode (opcode);
  <D.25117>:
  value = stack_pop (ctx);
  index = stack_pop (ctx);
  array = stack_pop (ctx);
  D.25118 = stack_slot_get_type (index);
  if (D.25118 != 1) goto <D.25119>; else goto <D.25120>;
  <D.25119>:
  D.25121 = stack_slot_get_type (index);
  if (D.25121 != 3) goto <D.25122>; else goto <D.25123>;
  <D.25122>:
  D.25126 = ctx->verifiable;
  if (D.25126 != 0) goto <D.25124>; else goto <D.25127>;
  <D.25127>:
  D.25128 = ctx->level;
  D.25129 = D.25128 & 128;
  if (D.25129 != 0) goto <D.25124>; else goto <D.25125>;
  <D.25124>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (24);
    vinfo->info.status = 8;
    D.25130 = stack_slot_get_name (index);
    D.25113 = ctx->ip_offset;
    D.25131 = monoeg_g_strdup_printf ("Index type(%s) for stdelem.X is not an int or a native int at 0x%04x", D.25130, D.25113);
    vinfo->info.message = D.25131;
    vinfo->exception_type = 4;
    D.25115 = ctx->list;
    D.25132 = monoeg_g_slist_prepend (D.25115, vinfo);
    ctx->list = D.25132;
  }
  ctx->verifiable = 0;
  D.25128 = ctx->level;
  D.25133 = D.25128 & 16;
  if (D.25133 != 0) goto <D.25134>; else goto <D.25135>;
  <D.25134>:
  ctx->valid = 0;
  <D.25135>:
  <D.25125>:
  <D.25123>:
  <D.25120>:
  D.25136 = stack_slot_is_null_literal (array);
  if (D.25136 == 0) goto <D.25137>; else goto <D.25138>;
  <D.25137>:
  D.25142 = stack_slot_get_type (array);
  if (D.25142 != 6) goto <D.25139>; else goto <D.25143>;
  <D.25143>:
  D.25144 = array->type;
  D.25145 = D.25144->type;
  if (D.25145 != 29) goto <D.25139>; else goto <D.25140>;
  <D.25139>:
  D.25126 = ctx->verifiable;
  if (D.25126 != 0) goto <D.25146>; else goto <D.25148>;
  <D.25148>:
  D.25128 = ctx->level;
  D.25129 = D.25128 & 128;
  if (D.25129 != 0) goto <D.25146>; else goto <D.25147>;
  <D.25146>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (24);
    vinfo->info.status = 8;
    D.25149 = stack_slot_get_name (array);
    D.25113 = ctx->ip_offset;
    D.25150 = monoeg_g_strdup_printf ("Invalid array type(%s) for stelem.X at 0x%04x", D.25149, D.25113);
    vinfo->info.message = D.25150;
    vinfo->exception_type = 4;
    D.25115 = ctx->list;
    D.25151 = monoeg_g_slist_prepend (D.25115, vinfo);
    ctx->list = D.25151;
  }
  ctx->verifiable = 0;
  D.25128 = ctx->level;
  D.25133 = D.25128 & 16;
  if (D.25133 != 0) goto <D.25152>; else goto <D.25153>;
  <D.25152>:
  ctx->valid = 0;
  <D.25153>:
  <D.25147>:
  goto <D.25141>;
  <D.25140>:
  if (opcode == 162) goto <D.25154>; else goto <D.25155>;
  <D.25154>:
  D.25144 = array->type;
  D.25156 = D.25144->data.klass;
  D.25157 = BIT_FIELD_REF <*D.25156, 64, 256>;
  D.25158 = D.25157 & 1152921504606846976;
  if (D.25158 != 0) goto <D.25159>; else goto <D.25160>;
  <D.25159>:
  D.25126 = ctx->verifiable;
  if (D.25126 != 0) goto <D.25161>; else goto <D.25163>;
  <D.25163>:
  D.25128 = ctx->level;
  D.25129 = D.25128 & 128;
  if (D.25129 != 0) goto <D.25161>; else goto <D.25162>;
  <D.25161>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (24);
    vinfo->info.status = 8;
    D.25113 = ctx->ip_offset;
    D.25164 = monoeg_g_strdup_printf ("Invalid array type is not a reference type for stelem.ref 0x%04x", D.25113);
    vinfo->info.message = D.25164;
    vinfo->exception_type = 4;
    D.25115 = ctx->list;
    D.25165 = monoeg_g_slist_prepend (D.25115, vinfo);
    ctx->list = D.25165;
  }
  ctx->verifiable = 0;
  D.25128 = ctx->level;
  D.25133 = D.25128 & 16;
  if (D.25133 != 0) goto <D.25166>; else goto <D.25167>;
  <D.25166>:
  ctx->valid = 0;
  <D.25167>:
  <D.25162>:
  <D.25160>:
  goto <D.25168>;
  <D.25155>:
  D.25144 = array->type;
  D.25156 = D.25144->data.klass;
  D.25169 = &D.25156->byval_arg;
  D.25170 = verify_type_compatibility_full (ctx, D.25169, type, 1);
  if (D.25170 == 0) goto <D.25171>; else goto <D.25172>;
  <D.25171>:
  D.25126 = ctx->verifiable;
  if (D.25126 != 0) goto <D.25173>; else goto <D.25175>;
  <D.25175>:
  D.25128 = ctx->level;
  D.25129 = D.25128 & 128;
  if (D.25129 != 0) goto <D.25173>; else goto <D.25174>;
  <D.25173>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (24);
    vinfo->info.status = 8;
    D.25113 = ctx->ip_offset;
    D.25176 = monoeg_g_strdup_printf ("Invalid array type on stack for stdelem.X at 0x%04x", D.25113);
    vinfo->info.message = D.25176;
    vinfo->exception_type = 4;
    D.25115 = ctx->list;
    D.25177 = monoeg_g_slist_prepend (D.25115, vinfo);
    ctx->list = D.25177;
  }
  ctx->verifiable = 0;
  D.25128 = ctx->level;
  D.25133 = D.25128 & 16;
  if (D.25133 != 0) goto <D.25178>; else goto <D.25179>;
  <D.25178>:
  ctx->valid = 0;
  <D.25179>:
  <D.25174>:
  <D.25172>:
  <D.25168>:
  <D.25141>:
  <D.25138>:
  if (opcode == 162) goto <D.25180>; else goto <D.25181>;
  <D.25180>:
  D.25182 = stack_slot_is_boxed_value (value);
  if (D.25182 == 0) goto <D.25183>; else goto <D.25184>;
  <D.25183>:
  D.25185 = value->type;
  D.25186 = mono_class_from_mono_type (D.25185);
  D.25187 = BIT_FIELD_REF <*D.25186, 64, 256>;
  D.25188 = D.25187 & 1152921504606846976;
  if (D.25188 != 0) goto <D.25189>; else goto <D.25190>;
  <D.25189>:
  D.25126 = ctx->verifiable;
  if (D.25126 != 0) goto <D.25191>; else goto <D.25193>;
  <D.25193>:
  D.25128 = ctx->level;
  D.25129 = D.25128 & 128;
  if (D.25129 != 0) goto <D.25191>; else goto <D.25192>;
  <D.25191>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (24);
    vinfo->info.status = 8;
    D.25113 = ctx->ip_offset;
    D.25194 = monoeg_g_strdup_printf ("Invalid value is not a reference type for stelem.ref 0x%04x", D.25113);
    vinfo->info.message = D.25194;
    vinfo->exception_type = 4;
    D.25115 = ctx->list;
    D.25195 = monoeg_g_slist_prepend (D.25115, vinfo);
    ctx->list = D.25195;
  }
  ctx->verifiable = 0;
  D.25128 = ctx->level;
  D.25133 = D.25128 & 16;
  if (D.25133 != 0) goto <D.25196>; else goto <D.25197>;
  <D.25196>:
  ctx->valid = 0;
  <D.25197>:
  <D.25192>:
  <D.25190>:
  <D.25184>:
  goto <D.25198>;
  <D.25181>:
  if (opcode != 162) goto <D.25199>; else goto <D.25200>;
  <D.25199>:
  D.25201 = verify_stack_type_compatibility (ctx, type, value);
  if (D.25201 == 0) goto <D.25202>; else goto <D.25203>;
  <D.25202>:
  D.25126 = ctx->verifiable;
  if (D.25126 != 0) goto <D.25204>; else goto <D.25206>;
  <D.25206>:
  D.25128 = ctx->level;
  D.25129 = D.25128 & 128;
  if (D.25129 != 0) goto <D.25204>; else goto <D.25205>;
  <D.25204>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (24);
    vinfo->info.status = 8;
    D.25113 = ctx->ip_offset;
    D.25207 = monoeg_g_strdup_printf ("Invalid value on stack for stdelem.X at 0x%04x", D.25113);
    vinfo->info.message = D.25207;
    vinfo->exception_type = 4;
    D.25115 = ctx->list;
    D.25208 = monoeg_g_slist_prepend (D.25115, vinfo);
    ctx->list = D.25208;
  }
  ctx->verifiable = 0;
  D.25128 = ctx->level;
  D.25133 = D.25128 & 16;
  if (D.25133 != 0) goto <D.25209>; else goto <D.25210>;
  <D.25209>:
  ctx->valid = 0;
  <D.25210>:
  <D.25205>:
  <D.25203>:
  D.25211 = stack_slot_is_boxed_value (value);
  if (D.25211 != 0) goto <D.25212>; else goto <D.25213>;
  <D.25212>:
  D.25185 = value->type;
  D.25214 = mono_type_is_reference (D.25185);
  if (D.25214 == 0) goto <D.25215>; else goto <D.25216>;
  <D.25215>:
  D.25217 = mono_type_is_reference (type);
  if (D.25217 == 0) goto <D.25218>; else goto <D.25219>;
  <D.25218>:
  D.25126 = ctx->verifiable;
  if (D.25126 != 0) goto <D.25220>; else goto <D.25222>;
  <D.25222>:
  D.25128 = ctx->level;
  D.25129 = D.25128 & 128;
  if (D.25129 != 0) goto <D.25220>; else goto <D.25221>;
  <D.25220>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (24);
    vinfo->info.status = 8;
    D.25113 = ctx->ip_offset;
    D.25223 = monoeg_g_strdup_printf ("Cannot use stobj with a boxed source value that is not a reference type at 0x%04x", D.25113);
    vinfo->info.message = D.25223;
    vinfo->exception_type = 4;
    D.25115 = ctx->list;
    D.25224 = monoeg_g_slist_prepend (D.25115, vinfo);
    ctx->list = D.25224;
  }
  ctx->verifiable = 0;
  D.25128 = ctx->level;
  D.25133 = D.25128 & 16;
  if (D.25133 != 0) goto <D.25225>; else goto <D.25226>;
  <D.25225>:
  ctx->valid = 0;
  <D.25226>:
  <D.25221>:
  <D.25219>:
  <D.25216>:
  <D.25213>:
  <D.25200>:
  <D.25198>:
}


do_unbox_any (struct VerifyContext * ctx, int klass_token)
{
  int D.25230;
  int D.25235;
  int D.25237;
  struct MonoType * D.25239;
  struct MonoClass * D.25240;
  long unsigned int D.25241;
  long unsigned int D.25242;
  int D.25245;
  int D.25247;
  int D.25248;
  const char * D.25249;
  unsigned int D.25250;
  gchar * D.25251;
  struct GSList * D.25252;
  struct GSList * D.25253;
  int D.25254;
  struct ILStackDesc * D.25257;
  struct ILStackDesc * value;
  struct MonoType * type;

  type = get_boxable_mono_type (ctx, klass_token, "unbox.any");
  if (type == 0B) goto <D.25228>; else goto <D.25229>;
  <D.25228>:
  return;
  <D.25229>:
  D.25230 = check_underflow (ctx, 1);
  if (D.25230 == 0) goto <D.25231>; else goto <D.25232>;
  <D.25231>:
  return;
  <D.25232>:
  value = stack_pop (ctx);
  D.25235 = stack_slot_get_type (value);
  if (D.25235 != 6) goto <D.25233>; else goto <D.25236>;
  <D.25236>:
  D.25237 = stack_slot_is_boxed_value (value);
  if (D.25237 == 0) goto <D.25238>; else goto <D.25234>;
  <D.25238>:
  D.25239 = value->type;
  D.25240 = mono_class_from_mono_type (D.25239);
  D.25241 = BIT_FIELD_REF <*D.25240, 64, 256>;
  D.25242 = D.25241 & 1152921504606846976;
  if (D.25242 != 0) goto <D.25233>; else goto <D.25234>;
  <D.25233>:
  D.25245 = ctx->verifiable;
  if (D.25245 != 0) goto <D.25243>; else goto <D.25246>;
  <D.25246>:
  D.25247 = ctx->level;
  D.25248 = D.25247 & 128;
  if (D.25248 != 0) goto <D.25243>; else goto <D.25244>;
  <D.25243>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (24);
    vinfo->info.status = 8;
    D.25249 = stack_slot_get_name (value);
    D.25250 = ctx->ip_offset;
    D.25251 = monoeg_g_strdup_printf ("Invalid type %s at stack for unbox.any operation at 0x%04x", D.25249, D.25250);
    vinfo->info.message = D.25251;
    vinfo->exception_type = 4;
    D.25252 = ctx->list;
    D.25253 = monoeg_g_slist_prepend (D.25252, vinfo);
    ctx->list = D.25253;
  }
  ctx->verifiable = 0;
  D.25247 = ctx->level;
  D.25254 = D.25247 & 16;
  if (D.25254 != 0) goto <D.25255>; else goto <D.25256>;
  <D.25255>:
  ctx->valid = 0;
  <D.25256>:
  <D.25244>:
  <D.25234>:
  D.25257 = stack_push (ctx);
  set_stack_value (ctx, D.25257, type, 0);
}


do_conversion (struct VerifyContext * ctx, int kind)
{
  int D.25259;
  int D.25262;
  int D.25265;
  int D.25267;
  int D.25268;
  const char * D.25269;
  unsigned int D.25270;
  gchar * D.25271;
  struct GSList * D.25272;
  struct GSList * D.25273;
  int D.25274;
  struct MonoClass * D.25277;
  struct MonoType * D.25278;
  struct MonoClass * D.25279;
  struct MonoType * D.25280;
  struct MonoClass * D.25281;
  struct MonoType * D.25282;
  struct MonoClass * D.25283;
  struct MonoType * D.25284;
  struct ILStackDesc * value;

  D.25259 = check_underflow (ctx, 1);
  if (D.25259 == 0) goto <D.25260>; else goto <D.25261>;
  <D.25260>:
  return;
  <D.25261>:
  value = stack_pop (ctx);
  D.25262 = stack_slot_get_type (value);
  switch (D.25262) <default: <D.19071>, case 1: <D.19066>, case 2: <D.19067>, case 3: <D.19068>, case 4: <D.19069>>
  <D.19066>:
  <D.19067>:
  <D.19068>:
  <D.19069>:
  goto <D.19070>;
  <D.19071>:
  D.25265 = ctx->verifiable;
  if (D.25265 != 0) goto <D.25263>; else goto <D.25266>;
  <D.25266>:
  D.25267 = ctx->level;
  D.25268 = D.25267 & 128;
  if (D.25268 != 0) goto <D.25263>; else goto <D.25264>;
  <D.25263>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (24);
    vinfo->info.status = 8;
    D.25269 = stack_slot_get_name (value);
    D.25270 = ctx->ip_offset;
    D.25271 = monoeg_g_strdup_printf ("Invalid type (%s) at stack for conversion operation. Numeric type expected at 0x%04x", D.25269, D.25270);
    vinfo->info.message = D.25271;
    vinfo->exception_type = 4;
    D.25272 = ctx->list;
    D.25273 = monoeg_g_slist_prepend (D.25272, vinfo);
    ctx->list = D.25273;
  }
  ctx->verifiable = 0;
  D.25267 = ctx->level;
  D.25274 = D.25267 & 16;
  if (D.25274 != 0) goto <D.25275>; else goto <D.25276>;
  <D.25275>:
  ctx->valid = 0;
  <D.25276>:
  <D.25264>:
  <D.19070>:
  switch (kind) <default: <D.19078>, case 1: <D.19073>, case 2: <D.19075>, case 3: <D.19077>, case 4: <D.19076>>
  <D.19073>:
  D.25277 = mono_defaults.int32_class;
  D.25278 = &D.25277->byval_arg;
  stack_push_val (ctx, 1, D.25278);
  goto <D.19074>;
  <D.19075>:
  D.25279 = mono_defaults.int64_class;
  D.25280 = &D.25279->byval_arg;
  stack_push_val (ctx, 2, D.25280);
  goto <D.19074>;
  <D.19076>:
  D.25281 = mono_defaults.double_class;
  D.25282 = &D.25281->byval_arg;
  stack_push_val (ctx, 4, D.25282);
  goto <D.19074>;
  <D.19077>:
  D.25283 = mono_defaults.int_class;
  D.25284 = &D.25283->byval_arg;
  stack_push_val (ctx, 3, D.25284);
  goto <D.19074>;
  <D.19078>:
  monoeg_g_log (0B, 4, "unknown type %02x in conversion", kind);
  <D.19079>:
  goto <D.19079>;
  <D.19074>:
}


do_refanyval (struct VerifyContext * ctx, int token)
{
  int D.25287;
  int D.25294;
  struct MonoType * D.25296;
  unsigned char D.25297;
  const char * D.25298;
  unsigned int D.25299;
  gchar * D.25300;
  struct GSList * D.25301;
  struct GSList * D.25302;
  struct ILStackDesc * D.25303;
  struct ILStackDesc * top;
  struct MonoType * type;

  D.25287 = check_underflow (ctx, 1);
  if (D.25287 == 0) goto <D.25288>; else goto <D.25289>;
  <D.25288>:
  return;
  <D.25289>:
  type = get_boxable_mono_type (ctx, token, "refanyval");
  if (type == 0B) goto <D.25290>; else goto <D.25291>;
  <D.25290>:
  return;
  <D.25291>:
  top = stack_pop (ctx);
  D.25294 = top->stype;
  if (D.25294 != 5) goto <D.25292>; else goto <D.25295>;
  <D.25295>:
  D.25296 = top->type;
  D.25297 = D.25296->type;
  if (D.25297 != 22) goto <D.25292>; else goto <D.25293>;
  <D.25292>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (24);
    vinfo->info.status = 1;
    D.25298 = stack_slot_get_name (top);
    D.25299 = ctx->ip_offset;
    D.25300 = monoeg_g_strdup_printf ("Expected a typedref as argument for refanyval, but found %s at 0x%04x", D.25298, D.25299);
    vinfo->info.message = D.25300;
    vinfo->exception_type = 3;
    D.25301 = ctx->list;
    D.25302 = monoeg_g_slist_prepend (D.25301, vinfo);
    ctx->list = D.25302;
  }
  ctx->valid = 0;
  <D.25293>:
  D.25303 = stack_push (ctx);
  set_stack_value (ctx, D.25303, type, 1);
}


do_ckfinite (struct VerifyContext * ctx)
{
  int D.25305;
  int D.25308;
  const char * D.25311;
  unsigned int D.25312;
  gchar * D.25313;
  struct GSList * D.25314;
  struct GSList * D.25315;
  struct ILStackDesc * top;

  D.25305 = check_underflow (ctx, 1);
  if (D.25305 == 0) goto <D.25306>; else goto <D.25307>;
  <D.25306>:
  return;
  <D.25307>:
  top = stack_pop (ctx);
  D.25308 = stack_slot_get_underlying_type (top);
  if (D.25308 != 4) goto <D.25309>; else goto <D.25310>;
  <D.25309>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (24);
    vinfo->info.status = 1;
    D.25311 = stack_slot_get_name (top);
    D.25312 = ctx->ip_offset;
    D.25313 = monoeg_g_strdup_printf ("Expected float32 or float64 on stack for ckfinit but found %s at 0x%04x", D.25311, D.25312);
    vinfo->info.message = D.25313;
    vinfo->exception_type = 3;
    D.25314 = ctx->list;
    D.25315 = monoeg_g_slist_prepend (D.25314, vinfo);
    ctx->list = D.25315;
  }
  ctx->valid = 0;
  <D.25310>:
  stack_push_stack_val (ctx, top);
}


do_mkrefany (struct VerifyContext * ctx, int token)
{
  int D.25317;
  int D.25322;
  int D.25327;
  int D.25329;
  int D.25330;
  unsigned int D.25331;
  gchar * D.25332;
  struct GSList * D.25333;
  struct GSList * D.25334;
  int D.25335;
  int D.25338;
  const char * D.25344;
  gchar * D.25345;
  struct GSList * D.25346;
  struct MonoType * D.25350;
  int D.25351;
  int D.25354;
  gchar * D.25360;
  struct GSList * D.25361;
  int D.25364;
  int D.25367;
  gchar * D.25373;
  struct GSList * D.25374;
  struct ILStackDesc * D.25377;
  struct MonoClass * D.25378;
  struct MonoType * D.25379;
  struct ILStackDesc * top;
  struct MonoType * type;

  D.25317 = check_underflow (ctx, 1);
  if (D.25317 == 0) goto <D.25318>; else goto <D.25319>;
  <D.25318>:
  return;
  <D.25319>:
  type = get_boxable_mono_type (ctx, token, "refanyval");
  if (type == 0B) goto <D.25320>; else goto <D.25321>;
  <D.25320>:
  return;
  <D.25321>:
  top = stack_pop (ctx);
  D.25322 = stack_slot_is_managed_mutability_pointer (top);
  if (D.25322 != 0) goto <D.25323>; else goto <D.25324>;
  <D.25323>:
  D.25327 = ctx->verifiable;
  if (D.25327 != 0) goto <D.25325>; else goto <D.25328>;
  <D.25328>:
  D.25329 = ctx->level;
  D.25330 = D.25329 & 128;
  if (D.25330 != 0) goto <D.25325>; else goto <D.25326>;
  <D.25325>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (24);
    vinfo->info.status = 8;
    D.25331 = ctx->ip_offset;
    D.25332 = monoeg_g_strdup_printf ("Cannot use a readonly pointer with mkrefany at 0x%04x", D.25331);
    vinfo->info.message = D.25332;
    vinfo->exception_type = 4;
    D.25333 = ctx->list;
    D.25334 = monoeg_g_slist_prepend (D.25333, vinfo);
    ctx->list = D.25334;
  }
  ctx->verifiable = 0;
  D.25329 = ctx->level;
  D.25335 = D.25329 & 16;
  if (D.25335 != 0) goto <D.25336>; else goto <D.25337>;
  <D.25336>:
  ctx->valid = 0;
  <D.25337>:
  <D.25326>:
  <D.25324>:
  D.25338 = stack_slot_is_managed_pointer (top);
  if (D.25338 == 0) goto <D.25339>; else goto <D.25340>;
  <D.25339>:
  D.25327 = ctx->verifiable;
  if (D.25327 != 0) goto <D.25341>; else goto <D.25343>;
  <D.25343>:
  D.25329 = ctx->level;
  D.25330 = D.25329 & 128;
  if (D.25330 != 0) goto <D.25341>; else goto <D.25342>;
  <D.25341>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (24);
    vinfo->info.status = 8;
    D.25344 = stack_slot_get_name (top);
    D.25331 = ctx->ip_offset;
    D.25345 = monoeg_g_strdup_printf ("Expected a managed pointer for mkrefany, but found %s at 0x%04x", D.25344, D.25331);
    vinfo->info.message = D.25345;
    vinfo->exception_type = 4;
    D.25333 = ctx->list;
    D.25346 = monoeg_g_slist_prepend (D.25333, vinfo);
    ctx->list = D.25346;
  }
  ctx->verifiable = 0;
  D.25329 = ctx->level;
  D.25335 = D.25329 & 16;
  if (D.25335 != 0) goto <D.25347>; else goto <D.25348>;
  <D.25347>:
  ctx->valid = 0;
  <D.25348>:
  <D.25342>:
  goto <D.25349>;
  <D.25340>:
  {
    struct MonoType * stack_type;

    D.25350 = top->type;
    stack_type = mono_type_get_type_byval (D.25350);
    D.25351 = mono_type_is_reference (type);
    if (D.25351 != 0) goto <D.25352>; else goto <D.25353>;
    <D.25352>:
    D.25354 = mono_metadata_type_equal (type, stack_type);
    if (D.25354 == 0) goto <D.25355>; else goto <D.25356>;
    <D.25355>:
    D.25327 = ctx->verifiable;
    if (D.25327 != 0) goto <D.25357>; else goto <D.25359>;
    <D.25359>:
    D.25329 = ctx->level;
    D.25330 = D.25329 & 128;
    if (D.25330 != 0) goto <D.25357>; else goto <D.25358>;
    <D.25357>:
    {
      struct MonoVerifyInfoExtended * vinfo;

      vinfo = monoeg_malloc (24);
      vinfo->info.status = 8;
      D.25331 = ctx->ip_offset;
      D.25360 = monoeg_g_strdup_printf ("Type not compatible for mkrefany at 0x%04x", D.25331);
      vinfo->info.message = D.25360;
      vinfo->exception_type = 4;
      D.25333 = ctx->list;
      D.25361 = monoeg_g_slist_prepend (D.25333, vinfo);
      ctx->list = D.25361;
    }
    ctx->verifiable = 0;
    D.25329 = ctx->level;
    D.25335 = D.25329 & 16;
    if (D.25335 != 0) goto <D.25362>; else goto <D.25363>;
    <D.25362>:
    ctx->valid = 0;
    <D.25363>:
    <D.25358>:
    <D.25356>:
    <D.25353>:
    D.25364 = mono_type_is_reference (type);
    if (D.25364 == 0) goto <D.25365>; else goto <D.25366>;
    <D.25365>:
    D.25367 = verify_type_compatibility_full (ctx, type, stack_type, 1);
    if (D.25367 == 0) goto <D.25368>; else goto <D.25369>;
    <D.25368>:
    D.25327 = ctx->verifiable;
    if (D.25327 != 0) goto <D.25370>; else goto <D.25372>;
    <D.25372>:
    D.25329 = ctx->level;
    D.25330 = D.25329 & 128;
    if (D.25330 != 0) goto <D.25370>; else goto <D.25371>;
    <D.25370>:
    {
      struct MonoVerifyInfoExtended * vinfo;

      vinfo = monoeg_malloc (24);
      vinfo->info.status = 8;
      D.25331 = ctx->ip_offset;
      D.25373 = monoeg_g_strdup_printf ("Type not compatible for mkrefany at 0x%04x", D.25331);
      vinfo->info.message = D.25373;
      vinfo->exception_type = 4;
      D.25333 = ctx->list;
      D.25374 = monoeg_g_slist_prepend (D.25333, vinfo);
      ctx->list = D.25374;
    }
    ctx->verifiable = 0;
    D.25329 = ctx->level;
    D.25335 = D.25329 & 16;
    if (D.25335 != 0) goto <D.25375>; else goto <D.25376>;
    <D.25375>:
    ctx->valid = 0;
    <D.25376>:
    <D.25371>:
    <D.25369>:
    <D.25366>:
  }
  <D.25349>:
  D.25377 = stack_push (ctx);
  D.25378 = mono_defaults.typed_reference_class;
  D.25379 = &D.25378->byval_arg;
  set_stack_value (ctx, D.25377, D.25379, 0);
}


do_load_token (struct VerifyContext * ctx, int token)
{
  int D.25381;
  struct MonoMethod * D.25384;
  long unsigned int D.25385;
  long unsigned int D.25386;
  unsigned int token.102;
  int D.25390;
  unsigned int D.25391;
  void * handle_class.103;
  struct MonoClass * D.25393;
  struct MonoClass * handle_class.104;
  unsigned int token.105;
  unsigned int D.25399;
  struct MonoImage * D.25400;
  int D.25401;
  int D.25404;
  unsigned int D.25405;
  gchar * D.25406;
  struct GSList * D.25407;
  struct GSList * D.25408;
  int D.25409;
  gchar * D.25410;
  struct GSList * D.25411;
  unsigned int token.106;
  struct MonoGenericContext * D.25413;
  gchar * D.25416;
  struct GSList * D.25417;
  struct MonoClass * D.25421;
  struct MonoClass * D.25425;
  struct MonoClass * D.25428;
  struct MonoType * D.25429;
  gchar * D.25431;
  struct GSList * D.25432;
  struct MonoType * D.25433;
  void * handle;
  struct MonoClass * handle_class;

  try
    {
      D.25381 = check_overflow (ctx);
      if (D.25381 == 0) goto <D.25382>; else goto <D.25383>;
      <D.25382>:
      return;
      <D.25383>:
      D.25384 = ctx->method;
      D.25385 = BIT_FIELD_REF <*D.25384, 64, 256>;
      D.25386 = D.25385 & 4467570830351532032;
      if (D.25386 != 0) goto <D.25387>; else goto <D.25388>;
      <D.25387>:
      D.25384 = ctx->method;
      token.102 = (unsigned int) token;
      handle = mono_method_get_wrapper_data (D.25384, token.102);
      D.25384 = ctx->method;
      D.25390 = token + 1;
      D.25391 = (unsigned int) D.25390;
      handle_class.103 = mono_method_get_wrapper_data (D.25384, D.25391);
      handle_class = handle_class.103;
      D.25393 = mono_defaults.typehandle_class;
      handle_class.104 = handle_class;
      if (D.25393 == handle_class.104) goto <D.25395>; else goto <D.25396>;
      <D.25395>:
      handle = &MEM[(struct MonoClass *)handle].byval_arg;
      <D.25396>:
      goto <D.25397>;
      <D.25388>:
      token.105 = (unsigned int) token;
      D.25399 = token.105 & 4278190080;
      switch (D.25399) <default: <D.19095>, case 16777216: <D.19087>, case 33554432: <D.19086>, case 67108864: <D.19089>, case 100663296: <D.19090>, case 167772160: <D.19092>, case 452984832: <D.19088>, case 721420288: <D.19091>>
      <D.19086>:
      <D.19087>:
      <D.19088>:
      <D.19089>:
      <D.19090>:
      <D.19091>:
      <D.19092>:
      D.25400 = ctx->image;
      token.102 = (unsigned int) token;
      D.25401 = token_bounds_check (D.25400, token.102);
      if (D.25401 == 0) goto <D.25402>; else goto <D.25403>;
      <D.25402>:
      {
        struct MonoVerifyInfoExtended * vinfo;

        vinfo = monoeg_malloc (24);
        vinfo->info.status = 1;
        D.25404 = token & 16777215;
        D.25405 = ctx->ip_offset;
        D.25406 = monoeg_g_strdup_printf ("Table index out of range 0x%x for token %x for ldtoken at 0x%04x", D.25404, token, D.25405);
        vinfo->info.message = D.25406;
        vinfo->exception_type = 3;
        D.25407 = ctx->list;
        D.25408 = monoeg_g_slist_prepend (D.25407, vinfo);
        ctx->list = D.25408;
      }
      ctx->valid = 0;
      return;
      <D.25403>:
      goto <D.19094>;
      <D.19095>:
      {
        struct MonoVerifyInfoExtended * vinfo;

        vinfo = monoeg_malloc (24);
        vinfo->info.status = 1;
        D.25409 = token >> 24;
        D.25405 = ctx->ip_offset;
        D.25410 = monoeg_g_strdup_printf ("Invalid table 0x%x for token 0x%x for ldtoken at 0x%04x", D.25409, token, D.25405);
        vinfo->info.message = D.25410;
        vinfo->exception_type = 3;
        D.25407 = ctx->list;
        D.25411 = monoeg_g_slist_prepend (D.25407, vinfo);
        ctx->list = D.25411;
      }
      ctx->valid = 0;
      return;
      <D.19094>:
      D.25400 = ctx->image;
      token.106 = (unsigned int) token;
      D.25413 = ctx->generic_context;
      handle = mono_ldtoken (D.25400, token.106, &handle_class, D.25413);
      <D.25397>:
      if (handle == 0B) goto <D.25414>; else goto <D.25415>;
      <D.25414>:
      {
        struct MonoVerifyInfoExtended * vinfo;

        vinfo = monoeg_malloc (24);
        vinfo->info.status = 1;
        D.25405 = ctx->ip_offset;
        D.25416 = monoeg_g_strdup_printf ("Invalid token 0x%x for ldtoken at 0x%04x", token, D.25405);
        vinfo->info.message = D.25416;
        vinfo->exception_type = 3;
        D.25407 = ctx->list;
        D.25417 = monoeg_g_slist_prepend (D.25407, vinfo);
        ctx->list = D.25417;
      }
      ctx->valid = 0;
      return;
      <D.25415>:
      D.25393 = mono_defaults.typehandle_class;
      handle_class.104 = handle_class;
      if (D.25393 == handle_class.104) goto <D.25418>; else goto <D.25419>;
      <D.25418>:
      mono_type_is_valid_in_context (ctx, handle);
      goto <D.25420>;
      <D.25419>:
      D.25421 = mono_defaults.methodhandle_class;
      handle_class.104 = handle_class;
      if (D.25421 == handle_class.104) goto <D.25422>; else goto <D.25423>;
      <D.25422>:
      mono_method_is_valid_in_context (ctx, handle);
      goto <D.25424>;
      <D.25423>:
      D.25425 = mono_defaults.fieldhandle_class;
      handle_class.104 = handle_class;
      if (D.25425 == handle_class.104) goto <D.25426>; else goto <D.25427>;
      <D.25426>:
      D.25428 = MEM[(struct MonoClassField *)handle].parent;
      D.25429 = &D.25428->byval_arg;
      mono_type_is_valid_in_context (ctx, D.25429);
      goto <D.25430>;
      <D.25427>:
      {
        struct MonoVerifyInfoExtended * vinfo;

        vinfo = monoeg_malloc (24);
        vinfo->info.status = 1;
        D.25405 = ctx->ip_offset;
        D.25431 = monoeg_g_strdup_printf ("Invalid ldtoken type %x at 0x%04x", token, D.25405);
        vinfo->info.message = D.25431;
        vinfo->exception_type = 12;
        D.25407 = ctx->list;
        D.25432 = monoeg_g_slist_prepend (D.25407, vinfo);
        ctx->list = D.25432;
      }
      ctx->valid = 0;
      <D.25430>:
      <D.25424>:
      <D.25420>:
      handle_class.104 = handle_class;
      D.25433 = mono_class_get_type (handle_class.104);
      stack_push_val (ctx, 6, D.25433);
    }
  finally
    {
      handle_class = {CLOBBER};
    }
}


is_correct_endfinally (struct MonoMethodHeader * header, guint offset)
{
  struct MonoExceptionClause * D.25437;
  long unsigned int D.25438;
  long unsigned int D.25439;
  unsigned int D.25442;
  unsigned int D.25445;
  unsigned int D.25446;
  unsigned int D.25449;
  int D.25451;
  <unnamed-unsigned:15> D.25452;
  int D.25453;
  int i;
  struct MonoExceptionClause * clause;

  i = 0;
  goto <D.18357>;
  <D.18356>:
  D.25437 = header->clauses;
  D.25438 = (long unsigned int) i;
  D.25439 = D.25438 * 32;
  clause = D.25437 + D.25439;
  D.25442 = clause->handler_offset;
  if (D.25442 <= offset) goto <D.25443>; else goto <D.25444>;
  <D.25443>:
  D.25442 = clause->handler_offset;
  D.25445 = clause->handler_len;
  D.25446 = D.25442 + D.25445;
  if (D.25446 > offset) goto <D.25447>; else goto <D.25448>;
  <D.25447>:
  D.25449 = clause->flags;
  if (D.25449 == 4) goto <D.25440>; else goto <D.25450>;
  <D.25450>:
  D.25449 = clause->flags;
  if (D.25449 == 2) goto <D.25440>; else goto <D.25441>;
  <D.25440>:
  D.25451 = 1;
  return D.25451;
  <D.25441>:
  <D.25448>:
  <D.25444>:
  i = i + 1;
  <D.18357>:
  D.25452 = header->num_clauses;
  D.25453 = (int) D.25452;
  if (D.25453 > i) goto <D.18356>; else goto <D.18358>;
  <D.18358>:
  D.25451 = 0;
  return D.25451;
}


do_leave (struct VerifyContext * ctx, int delta)
{
  unsigned int D.25455;
  int D.25456;
  int D.25459;
  gchar * D.25461;
  struct GSList * D.25462;
  struct GSList * D.25463;
  struct MonoMethodHeader * D.25464;
  unsigned int target.107;
  int D.25466;
  int D.25471;
  int D.25473;
  int D.25474;
  gchar * D.25475;
  struct GSList * D.25476;
  int D.25477;
  int target;

  D.25455 = ctx->ip_offset;
  D.25456 = (int) D.25455;
  target = D.25456 + delta;
  D.25459 = ctx->code_size;
  if (D.25459 <= target) goto <D.25457>; else goto <D.25460>;
  <D.25460>:
  if (target < 0) goto <D.25457>; else goto <D.25458>;
  <D.25457>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (24);
    vinfo->info.status = 1;
    D.25455 = ctx->ip_offset;
    D.25461 = monoeg_g_strdup_printf ("Branch target out of code at 0x%04x", D.25455);
    vinfo->info.message = D.25461;
    vinfo->exception_type = 3;
    D.25462 = ctx->list;
    D.25463 = monoeg_g_slist_prepend (D.25462, vinfo);
    ctx->list = D.25463;
  }
  ctx->valid = 0;
  <D.25458>:
  D.25464 = ctx->header;
  D.25455 = ctx->ip_offset;
  target.107 = (unsigned int) target;
  D.25466 = is_correct_leave (D.25464, D.25455, target.107);
  if (D.25466 == 0) goto <D.25467>; else goto <D.25468>;
  <D.25467>:
  D.25471 = ctx->verifiable;
  if (D.25471 != 0) goto <D.25469>; else goto <D.25472>;
  <D.25472>:
  D.25473 = ctx->level;
  D.25474 = D.25473 & 128;
  if (D.25474 != 0) goto <D.25469>; else goto <D.25470>;
  <D.25469>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (24);
    vinfo->info.status = 8;
    D.25455 = ctx->ip_offset;
    D.25475 = monoeg_g_strdup_printf ("Leave not allowed in finally block at 0x%04x", D.25455);
    vinfo->info.message = D.25475;
    vinfo->exception_type = 4;
    D.25462 = ctx->list;
    D.25476 = monoeg_g_slist_prepend (D.25462, vinfo);
    ctx->list = D.25476;
  }
  ctx->verifiable = 0;
  D.25473 = ctx->level;
  D.25477 = D.25473 & 16;
  if (D.25477 != 0) goto <D.25478>; else goto <D.25479>;
  <D.25478>:
  ctx->valid = 0;
  <D.25479>:
  <D.25470>:
  <D.25468>:
  ctx->eval.size = 0;
  ctx->target = target;
}


is_correct_leave (struct MonoMethodHeader * header, guint offset, guint target)
{
  struct MonoExceptionClause * D.25480;
  long unsigned int D.25481;
  long unsigned int D.25482;
  unsigned int D.25485;
  unsigned int D.25488;
  unsigned int D.25491;
  unsigned int D.25492;
  int D.25496;
  unsigned int D.25499;
  <unnamed-unsigned:15> D.25504;
  int D.25505;
  int i;
  struct MonoExceptionClause * clause;

  i = 0;
  goto <D.18339>;
  <D.18338>:
  D.25480 = header->clauses;
  D.25481 = (long unsigned int) i;
  D.25482 = D.25481 * 32;
  clause = D.25480 + D.25482;
  D.25485 = clause->flags;
  if (D.25485 == 2) goto <D.25486>; else goto <D.25487>;
  <D.25486>:
  D.25488 = clause->handler_offset;
  if (D.25488 <= offset) goto <D.25489>; else goto <D.25490>;
  <D.25489>:
  D.25488 = clause->handler_offset;
  D.25491 = clause->handler_len;
  D.25492 = D.25488 + D.25491;
  if (D.25492 > offset) goto <D.25493>; else goto <D.25494>;
  <D.25493>:
  D.25488 = clause->handler_offset;
  if (D.25488 > target) goto <D.25483>; else goto <D.25495>;
  <D.25495>:
  D.25488 = clause->handler_offset;
  D.25491 = clause->handler_len;
  D.25492 = D.25488 + D.25491;
  if (D.25492 <= target) goto <D.25483>; else goto <D.25484>;
  <D.25483>:
  D.25496 = 0;
  return D.25496;
  <D.25484>:
  <D.25494>:
  <D.25490>:
  <D.25487>:
  D.25485 = clause->flags;
  if (D.25485 == 1) goto <D.25497>; else goto <D.25498>;
  <D.25497>:
  D.25499 = clause->data.filter_offset;
  if (D.25499 <= offset) goto <D.25500>; else goto <D.25501>;
  <D.25500>:
  D.25488 = clause->handler_offset;
  if (D.25488 > offset) goto <D.25502>; else goto <D.25503>;
  <D.25502>:
  D.25496 = 0;
  return D.25496;
  <D.25503>:
  <D.25501>:
  <D.25498>:
  i = i + 1;
  <D.18339>:
  D.25504 = header->num_clauses;
  D.25505 = (int) D.25504;
  if (D.25505 > i) goto <D.18338>; else goto <D.18340>;
  <D.18340>:
  D.25496 = 1;
  return D.25496;
}


store_local (struct VerifyContext * ctx, guint32 arg)
{
  int D.25507;
  unsigned int D.25508;
  unsigned int D.25511;
  unsigned int D.25512;
  gchar * D.25513;
  struct GSList * D.25514;
  struct GSList * D.25515;
  int D.25516;
  struct MonoType * * D.25519;
  long unsigned int D.25520;
  long unsigned int D.25521;
  struct MonoType * * D.25522;
  struct MonoType * D.25523;
  long unsigned int D.25524;
  long unsigned int D.25525;
  int D.25528;
  int D.25533;
  int D.25535;
  int D.25536;
  gchar * D.25537;
  struct GSList * D.25538;
  int D.25539;
  int D.25542;
  gchar * D.25548;
  struct GSList * D.25549;
  struct ILStackDesc * value;

  D.25507 = ctx->num_locals;
  D.25508 = (unsigned int) D.25507;
  if (D.25508 <= arg) goto <D.25509>; else goto <D.25510>;
  <D.25509>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (24);
    vinfo->info.status = 1;
    D.25511 = arg + 1;
    D.25512 = ctx->ip_offset;
    D.25513 = monoeg_g_strdup_printf ("Method doesn\'t have local var %d at 0x%04x", D.25511, D.25512);
    vinfo->info.message = D.25513;
    vinfo->exception_type = 3;
    D.25514 = ctx->list;
    D.25515 = monoeg_g_slist_prepend (D.25514, vinfo);
    ctx->list = D.25515;
  }
  ctx->valid = 0;
  return;
  <D.25510>:
  D.25516 = check_underflow (ctx, 1);
  if (D.25516 == 0) goto <D.25517>; else goto <D.25518>;
  <D.25517>:
  return;
  <D.25518>:
  value = stack_pop (ctx);
  D.25519 = ctx->locals;
  D.25520 = (long unsigned int) arg;
  D.25521 = D.25520 * 8;
  D.25522 = D.25519 + D.25521;
  D.25523 = *D.25522;
  D.25524 = BIT_FIELD_REF <*D.25523, 64, 64>;
  D.25525 = D.25524 & 8589934592;
  if (D.25525 != 0) goto <D.25526>; else goto <D.25527>;
  <D.25526>:
  D.25528 = stack_slot_is_managed_mutability_pointer (value);
  if (D.25528 != 0) goto <D.25529>; else goto <D.25530>;
  <D.25529>:
  D.25533 = ctx->verifiable;
  if (D.25533 != 0) goto <D.25531>; else goto <D.25534>;
  <D.25534>:
  D.25535 = ctx->level;
  D.25536 = D.25535 & 128;
  if (D.25536 != 0) goto <D.25531>; else goto <D.25532>;
  <D.25531>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (24);
    vinfo->info.status = 8;
    D.25512 = ctx->ip_offset;
    D.25537 = monoeg_g_strdup_printf ("Cannot use a readonly managed reference when storing on a local variable at 0x%04x", D.25512);
    vinfo->info.message = D.25537;
    vinfo->exception_type = 4;
    D.25514 = ctx->list;
    D.25538 = monoeg_g_slist_prepend (D.25514, vinfo);
    ctx->list = D.25538;
  }
  ctx->verifiable = 0;
  D.25535 = ctx->level;
  D.25539 = D.25535 & 16;
  if (D.25539 != 0) goto <D.25540>; else goto <D.25541>;
  <D.25540>:
  ctx->valid = 0;
  <D.25541>:
  <D.25532>:
  <D.25530>:
  <D.25527>:
  D.25519 = ctx->locals;
  D.25520 = (long unsigned int) arg;
  D.25521 = D.25520 * 8;
  D.25522 = D.25519 + D.25521;
  D.25523 = *D.25522;
  D.25542 = verify_stack_type_compatibility (ctx, D.25523, value);
  if (D.25542 == 0) goto <D.25543>; else goto <D.25544>;
  <D.25543>:
  {
    char * expected;
    char * found;

    D.25519 = ctx->locals;
    D.25520 = (long unsigned int) arg;
    D.25521 = D.25520 * 8;
    D.25522 = D.25519 + D.25521;
    D.25523 = *D.25522;
    expected = mono_type_full_name (D.25523);
    found = stack_slot_full_name (value);
    D.25533 = ctx->verifiable;
    if (D.25533 != 0) goto <D.25545>; else goto <D.25547>;
    <D.25547>:
    D.25535 = ctx->level;
    D.25536 = D.25535 & 128;
    if (D.25536 != 0) goto <D.25545>; else goto <D.25546>;
    <D.25545>:
    {
      struct MonoVerifyInfoExtended * vinfo;

      vinfo = monoeg_malloc (24);
      vinfo->info.status = 8;
      D.25512 = ctx->ip_offset;
      D.25548 = monoeg_g_strdup_printf ("Incompatible type \'%s\' on stack cannot be stored to local %d with type \'%s\' at 0x%04x", found, arg, expected, D.25512);
      vinfo->info.message = D.25548;
      vinfo->exception_type = 4;
      D.25514 = ctx->list;
      D.25549 = monoeg_g_slist_prepend (D.25514, vinfo);
      ctx->list = D.25549;
    }
    ctx->verifiable = 0;
    D.25535 = ctx->level;
    D.25539 = D.25535 & 16;
    if (D.25539 != 0) goto <D.25550>; else goto <D.25551>;
    <D.25550>:
    ctx->valid = 0;
    <D.25551>:
    <D.25546>:
    monoeg_g_free (expected);
    monoeg_g_free (found);
  }
  <D.25544>:
}


do_cmp_op (struct VerifyContext * ctx, const unsigned char[6] * table, guint32 opcode)
{
  int D.25553;
  int D.25558;
  int D.25561;
  struct MonoClass * D.25564;
  struct MonoType * D.25565;
  int D.25566;
  int D.25569;
  int D.25575;
  int D.25577;
  long unsigned int D.25578;
  long unsigned int D.25579;
  const unsigned char[6] * D.25580;
  int D.25585;
  int D.25587;
  int D.25588;
  const char * D.25589;
  const char * D.25590;
  unsigned int D.25591;
  gchar * D.25592;
  struct GSList * D.25593;
  struct GSList * D.25594;
  int D.25595;
  signed char res.108;
  const char * D.25605;
  const char * D.25606;
  gchar * D.25607;
  struct GSList * D.25608;
  struct ILStackDesc * a;
  struct ILStackDesc * b;
  int idxa;
  int idxb;
  unsigned char res;

  D.25553 = check_underflow (ctx, 2);
  if (D.25553 == 0) goto <D.25554>; else goto <D.25555>;
  <D.25554>:
  return;
  <D.25555>:
  b = stack_pop (ctx);
  a = stack_pop (ctx);
  if (opcode == 3) goto <D.25556>; else goto <D.25557>;
  <D.25556>:
  D.25558 = stack_slot_get_type (a);
  if (D.25558 == 6) goto <D.25559>; else goto <D.25560>;
  <D.25559>:
  D.25561 = stack_slot_get_type (b);
  if (D.25561 == 6) goto <D.25562>; else goto <D.25563>;
  <D.25562>:
  D.25564 = mono_defaults.int32_class;
  D.25565 = &D.25564->byval_arg;
  stack_push_val (ctx, 1, D.25565);
  return;
  <D.25563>:
  <D.25560>:
  <D.25557>:
  idxa = stack_slot_get_underlying_type (a);
  D.25566 = stack_slot_is_managed_pointer (a);
  if (D.25566 != 0) goto <D.25567>; else goto <D.25568>;
  <D.25567>:
  idxa = 5;
  <D.25568>:
  idxb = stack_slot_get_underlying_type (b);
  D.25569 = stack_slot_is_managed_pointer (b);
  if (D.25569 != 0) goto <D.25570>; else goto <D.25571>;
  <D.25570>:
  idxb = 5;
  <D.25571>:
  D.25575 = stack_slot_is_complex_type_not_reference_type (a);
  if (D.25575 != 0) goto <D.25572>; else goto <D.25576>;
  <D.25576>:
  D.25577 = stack_slot_is_complex_type_not_reference_type (b);
  if (D.25577 != 0) goto <D.25572>; else goto <D.25573>;
  <D.25572>:
  res = 0;
  goto <D.25574>;
  <D.25573>:
  idxa = idxa + -1;
  idxb = idxb + -1;
  D.25578 = (long unsigned int) idxa;
  D.25579 = D.25578 * 6;
  D.25580 = table + D.25579;
  res = *D.25580[idxb];
  <D.25574>:
  if (res == 0) goto <D.25581>; else goto <D.25582>;
  <D.25581>:
  D.25585 = ctx->verifiable;
  if (D.25585 != 0) goto <D.25583>; else goto <D.25586>;
  <D.25586>:
  D.25587 = ctx->level;
  D.25588 = D.25587 & 128;
  if (D.25588 != 0) goto <D.25583>; else goto <D.25584>;
  <D.25583>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (24);
    vinfo->info.status = 8;
    D.25589 = stack_slot_get_name (a);
    D.25590 = stack_slot_get_name (b);
    D.25591 = ctx->ip_offset;
    D.25592 = monoeg_g_strdup_printf ("Compare instruction applyed to ill formed stack (%s x %s) at 0x%04x", D.25589, D.25590, D.25591);
    vinfo->info.message = D.25592;
    vinfo->exception_type = 4;
    D.25593 = ctx->list;
    D.25594 = monoeg_g_slist_prepend (D.25593, vinfo);
    ctx->list = D.25594;
  }
  ctx->verifiable = 0;
  D.25587 = ctx->level;
  D.25595 = D.25587 & 16;
  if (D.25595 != 0) goto <D.25596>; else goto <D.25597>;
  <D.25596>:
  ctx->valid = 0;
  <D.25597>:
  <D.25584>:
  goto <D.25598>;
  <D.25582>:
  res.108 = (signed char) res;
  if (res.108 < 0) goto <D.25600>; else goto <D.25601>;
  <D.25600>:
  D.25585 = ctx->verifiable;
  if (D.25585 != 0) goto <D.25602>; else goto <D.25604>;
  <D.25604>:
  D.25587 = ctx->level;
  D.25588 = D.25587 & 128;
  if (D.25588 != 0) goto <D.25602>; else goto <D.25603>;
  <D.25602>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (24);
    vinfo->info.status = 8;
    D.25605 = stack_slot_get_name (a);
    D.25606 = stack_slot_get_name (b);
    D.25591 = ctx->ip_offset;
    D.25607 = monoeg_g_strdup_printf ("Compare instruction is not verifiable (%s x %s) at 0x%04x", D.25605, D.25606, D.25591);
    vinfo->info.message = D.25607;
    vinfo->exception_type = 4;
    D.25593 = ctx->list;
    D.25608 = monoeg_g_slist_prepend (D.25593, vinfo);
    ctx->list = D.25608;
  }
  ctx->verifiable = 0;
  D.25587 = ctx->level;
  D.25595 = D.25587 & 16;
  if (D.25595 != 0) goto <D.25609>; else goto <D.25610>;
  <D.25609>:
  ctx->valid = 0;
  <D.25610>:
  <D.25603>:
  res = res & 127;
  <D.25601>:
  <D.25598>:
  D.25564 = mono_defaults.int32_class;
  D.25565 = &D.25564->byval_arg;
  stack_push_val (ctx, 1, D.25565);
}


store_arg (struct VerifyContext * ctx, guint32 arg)
{
  int D.25612;
  unsigned int D.25613;
  int D.25618;
  int D.25620;
  int D.25621;
  unsigned int D.25622;
  unsigned int D.25623;
  gchar * D.25624;
  struct GSList * D.25625;
  struct GSList * D.25626;
  int D.25627;
  int D.25630;
  int D.25633;
  struct MonoType * * D.25636;
  long unsigned int D.25637;
  long unsigned int D.25638;
  struct MonoType * * D.25639;
  struct MonoType * D.25640;
  int D.25641;
  const char * D.25647;
  gchar * D.25648;
  struct GSList * D.25649;
  struct MonoMethod * D.25654;
  short unsigned int D.25655;
  int D.25656;
  int D.25657;
  struct ILStackDesc * value;

  D.25612 = ctx->max_args;
  D.25613 = (unsigned int) D.25612;
  if (D.25613 <= arg) goto <D.25614>; else goto <D.25615>;
  <D.25614>:
  D.25618 = ctx->verifiable;
  if (D.25618 != 0) goto <D.25616>; else goto <D.25619>;
  <D.25619>:
  D.25620 = ctx->level;
  D.25621 = D.25620 & 128;
  if (D.25621 != 0) goto <D.25616>; else goto <D.25617>;
  <D.25616>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (24);
    vinfo->info.status = 8;
    D.25622 = arg + 1;
    D.25623 = ctx->ip_offset;
    D.25624 = monoeg_g_strdup_printf ("Method doesn\'t have argument %d at 0x%04x", D.25622, D.25623);
    vinfo->info.message = D.25624;
    vinfo->exception_type = 4;
    D.25625 = ctx->list;
    D.25626 = monoeg_g_slist_prepend (D.25625, vinfo);
    ctx->list = D.25626;
  }
  ctx->verifiable = 0;
  D.25620 = ctx->level;
  D.25627 = D.25620 & 16;
  if (D.25627 != 0) goto <D.25628>; else goto <D.25629>;
  <D.25628>:
  ctx->valid = 0;
  <D.25629>:
  <D.25617>:
  D.25630 = check_underflow (ctx, 1);
  if (D.25630 != 0) goto <D.25631>; else goto <D.25632>;
  <D.25631>:
  stack_pop (ctx);
  <D.25632>:
  return;
  <D.25615>:
  D.25633 = check_underflow (ctx, 1);
  if (D.25633 != 0) goto <D.25634>; else goto <D.25635>;
  <D.25634>:
  value = stack_pop (ctx);
  D.25636 = ctx->params;
  D.25637 = (long unsigned int) arg;
  D.25638 = D.25637 * 8;
  D.25639 = D.25636 + D.25638;
  D.25640 = *D.25639;
  D.25641 = verify_stack_type_compatibility (ctx, D.25640, value);
  if (D.25641 == 0) goto <D.25642>; else goto <D.25643>;
  <D.25642>:
  D.25618 = ctx->verifiable;
  if (D.25618 != 0) goto <D.25644>; else goto <D.25646>;
  <D.25646>:
  D.25620 = ctx->level;
  D.25621 = D.25620 & 128;
  if (D.25621 != 0) goto <D.25644>; else goto <D.25645>;
  <D.25644>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (24);
    vinfo->info.status = 8;
    D.25647 = stack_slot_get_name (value);
    D.25623 = ctx->ip_offset;
    D.25648 = monoeg_g_strdup_printf ("Incompatible type %s in argument store at 0x%04x", D.25647, D.25623);
    vinfo->info.message = D.25648;
    vinfo->exception_type = 4;
    D.25625 = ctx->list;
    D.25649 = monoeg_g_slist_prepend (D.25625, vinfo);
    ctx->list = D.25649;
  }
  ctx->verifiable = 0;
  D.25620 = ctx->level;
  D.25627 = D.25620 & 16;
  if (D.25627 != 0) goto <D.25650>; else goto <D.25651>;
  <D.25650>:
  ctx->valid = 0;
  <D.25651>:
  <D.25645>:
  <D.25643>:
  <D.25635>:
  if (arg == 0) goto <D.25652>; else goto <D.25653>;
  <D.25652>:
  D.25654 = ctx->method;
  D.25655 = D.25654->flags;
  D.25656 = (int) D.25655;
  D.25657 = D.25656 & 16;
  if (D.25657 == 0) goto <D.25658>; else goto <D.25659>;
  <D.25658>:
  ctx->has_this_store = 1;
  <D.25659>:
  <D.25653>:
}


check_overflow (struct VerifyContext * ctx)
{
  short unsigned int D.25661;
  int D.25662;
  int D.25663;
  int D.25666;
  unsigned int D.25667;
  gchar * D.25668;
  struct GSList * D.25669;
  struct GSList * D.25670;
  int D.25671;

  D.25661 = ctx->eval.size;
  D.25662 = (int) D.25661;
  D.25663 = ctx->max_stack;
  if (D.25662 >= D.25663) goto <D.25664>; else goto <D.25665>;
  <D.25664>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (24);
    vinfo->info.status = 1;
    D.25661 = ctx->eval.size;
    D.25662 = (int) D.25661;
    D.25666 = D.25662 + 1;
    D.25667 = ctx->ip_offset;
    D.25668 = monoeg_g_strdup_printf ("Method doesn\'t have stack-depth %d at 0x%04x", D.25666, D.25667);
    vinfo->info.message = D.25668;
    vinfo->exception_type = 3;
    D.25669 = ctx->list;
    D.25670 = monoeg_g_slist_prepend (D.25669, vinfo);
    ctx->list = D.25670;
  }
  ctx->valid = 0;
  D.25671 = 0;
  return D.25671;
  <D.25665>:
  D.25671 = 1;
  return D.25671;
}


stack_push (struct VerifyContext * ctx)
{
  short unsigned int D.25673;
  int D.25674;
  int D.25675;
  _Bool D.25676;
  long int D.25677;
  long int D.25678;
  short unsigned int D.25681;
  _Bool D.25682;
  long int D.25683;
  long int D.25684;
  struct ILCodeDesc * D.25687;
  int D.25688;
  struct ILStackDesc * D.25689;
  struct ILStackDesc * D.25690;
  short unsigned int D.25691;
  short unsigned int D.25692;
  long unsigned int D.25693;
  long unsigned int D.25694;

  D.25673 = ctx->eval.size;
  D.25674 = (int) D.25673;
  D.25675 = ctx->max_stack;
  D.25676 = D.25674 >= D.25675;
  D.25677 = (long int) D.25676;
  D.25678 = __builtin_expect (D.25677, 0);
  if (D.25678 != 0) goto <D.25679>; else goto <D.25680>;
  <D.25679>:
  monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "verify.c", 1589, "ctx->eval.size < ctx->max_stack");
  <D.25680>:
  D.25673 = ctx->eval.size;
  D.25681 = ctx->eval.max_size;
  D.25682 = D.25673 > D.25681;
  D.25683 = (long int) D.25682;
  D.25684 = __builtin_expect (D.25683, 0);
  if (D.25684 != 0) goto <D.25685>; else goto <D.25686>;
  <D.25685>:
  monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "verify.c", 1590, "ctx->eval.size <= ctx->eval.max_size");
  <D.25686>:
  D.25687 = &ctx->eval;
  D.25673 = ctx->eval.size;
  D.25674 = (int) D.25673;
  D.25688 = D.25674 + 1;
  ensure_stack_size (D.25687, D.25688);
  D.25690 = ctx->eval.stack;
  D.25673 = ctx->eval.size;
  D.25691 = D.25673;
  D.25692 = D.25691 + 1;
  ctx->eval.size = D.25692;
  D.25693 = (long unsigned int) D.25691;
  D.25694 = D.25693 * 24;
  D.25689 = D.25690 + D.25694;
  return D.25689;
}


set_stack_value (struct VerifyContext * ctx, struct ILStackDesc * stack, struct MonoType * type, int take_addr)
{
  unsigned char D.25696;
  long unsigned int D.25699;
  long unsigned int D.25700;
  int D.25702;
  int D.25703;
  int D.25704;
  int D.25705;
  int D.25706;
  int D.25707;
  int D.25708;
  int D.25713;
  unsigned int D.25714;
  gchar * D.25715;
  struct GSList * D.25716;
  struct GSList * D.25717;
  gboolean D.25718;
  gchar * D.25719;
  struct GSList * D.25720;
  int mask;
  int type_kind;
  void handle_enum = <<< error >>>;

  mask = 0;
  D.25696 = type->type;
  type_kind = (int) D.25696;
  D.25699 = BIT_FIELD_REF <*type, 64, 64>;
  D.25700 = D.25699 & 8589934592;
  if (D.25700 != 0) goto <D.25697>; else goto <D.25701>;
  <D.25701>:
  if (take_addr != 0) goto <D.25697>; else goto <D.25698>;
  <D.25697>:
  mask = 256;
  <D.25698>:
  handle_enum:
  stack->type = type;
  switch (type_kind) <default: <D.18566>, case 2: <D.18539>, case 3: <D.18542>, case 4: <D.18537>, case 5: <D.18538>, case 6: <D.18540>, case 7: <D.18541>, case 8: <D.18543>, case 9: <D.18544>, case 10: <D.18558>, case 11: <D.18559>, case 12: <D.18560>, case 13: <D.18561>, case 14: <D.18552>, case 15: <D.18549>, case 17: <D.18563>, case 18: <D.18551>, case 19: <D.18556>, case 20: <D.18555>, case 21: <D.18562>, case 22: <D.18550>, case 24: <D.18546>, case 25: <D.18547>, case 27: <D.18548>, case 28: <D.18553>, case 29: <D.18554>, case 30: <D.18557>>
  <D.18537>:
  <D.18538>:
  <D.18539>:
  <D.18540>:
  <D.18541>:
  <D.18542>:
  <D.18543>:
  <D.18544>:
  D.25702 = mask | 1;
  stack->stype = D.25702;
  goto <D.18545>;
  <D.18546>:
  <D.18547>:
  D.25703 = mask | 3;
  stack->stype = D.25703;
  goto <D.18545>;
  <D.18548>:
  <D.18549>:
  <D.18550>:
  D.25704 = mask | 5;
  stack->stype = D.25704;
  goto <D.18545>;
  <D.18551>:
  <D.18552>:
  <D.18553>:
  <D.18554>:
  <D.18555>:
  <D.18556>:
  <D.18557>:
  D.25705 = mask | 6;
  stack->stype = D.25705;
  goto <D.18545>;
  <D.18558>:
  <D.18559>:
  D.25706 = mask | 2;
  stack->stype = D.25706;
  goto <D.18545>;
  <D.18560>:
  <D.18561>:
  D.25707 = mask | 4;
  stack->stype = D.25707;
  goto <D.18545>;
  <D.18562>:
  <D.18563>:
  D.25708 = mono_type_is_enum_type (type);
  if (D.25708 != 0) goto <D.25709>; else goto <D.25710>;
  <D.25709>:
  {
    struct MonoType * utype;

    utype = mono_type_get_underlying_type_any (type);
    if (utype == 0B) goto <D.25711>; else goto <D.25712>;
    <D.25711>:
    {
      struct MonoVerifyInfoExtended * vinfo;

      vinfo = monoeg_malloc (24);
      vinfo->info.status = 1;
      D.25696 = type->type;
      D.25713 = (int) D.25696;
      D.25714 = ctx->ip_offset;
      D.25715 = monoeg_g_strdup_printf ("Could not resolve underlying type of %x at %d", D.25713, D.25714);
      vinfo->info.message = D.25715;
      vinfo->exception_type = 3;
      D.25716 = ctx->list;
      D.25717 = monoeg_g_slist_prepend (D.25716, vinfo);
      ctx->list = D.25717;
    }
    ctx->valid = 0;
    D.25718 = 0;
    return D.25718;
    <D.25712>:
    type = utype;
    D.25696 = type->type;
    type_kind = (int) D.25696;
    goto handle_enum;
  }
  <D.25710>:
  D.25705 = mask | 6;
  stack->stype = D.25705;
  goto <D.18545>;
  <D.18566>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (24);
    vinfo->info.status = 1;
    D.25696 = type->type;
    D.25713 = (int) D.25696;
    D.25714 = ctx->ip_offset;
    D.25719 = monoeg_g_strdup_printf ("Illegal value set on stack 0x%02x at %d", D.25713, D.25714);
    vinfo->info.message = D.25719;
    vinfo->exception_type = 3;
    D.25716 = ctx->list;
    D.25720 = monoeg_g_slist_prepend (D.25716, vinfo);
    ctx->list = D.25720;
  }
  ctx->valid = 0;
  D.25718 = 0;
  return D.25718;
  <D.18545>:
  D.25718 = 1;
  return D.25718;
}


do_load_function_ptr (struct VerifyContext * ctx, guint32 token, gboolean virtual)
{
  int D.25724;
  int D.25729;
  struct MonoMethod * D.25732;
  long unsigned int D.25733;
  long unsigned int D.25734;
  unsigned int D.25739;
  gchar * D.25740;
  struct GSList * D.25741;
  struct GSList * D.25742;
  unsigned int D.25747;
  struct MonoImage * D.25750;
  int D.25751;
  gchar * D.25752;
  struct GSList * D.25753;
  int token.109;
  const char * iftmp.110;
  int D.25761;
  int D.25766;
  int D.25768;
  int D.25769;
  gchar * D.25770;
  struct GSList * D.25771;
  int D.25772;
  int D.25779;
  struct MonoType * D.25781;
  unsigned char D.25782;
  gchar * D.25786;
  struct GSList * D.25787;
  short unsigned int D.25790;
  int D.25791;
  int D.25792;
  gchar * D.25798;
  struct GSList * D.25799;
  struct MonoClass * D.25802;
  struct MonoType * D.25803;
  int D.25804;
  gchar * D.25810;
  struct GSList * D.25811;
  int D.25814;
  int D.25817;
  gchar * D.25823;
  struct GSList * D.25824;
  struct MonoType * D.25827;
  struct ILStackDesc * top;
  struct MonoMethod * method;

  if (virtual != 0) goto <D.25722>; else goto <D.25723>;
  <D.25722>:
  D.25724 = check_underflow (ctx, 1);
  if (D.25724 == 0) goto <D.25725>; else goto <D.25726>;
  <D.25725>:
  return;
  <D.25726>:
  <D.25723>:
  if (virtual == 0) goto <D.25727>; else goto <D.25728>;
  <D.25727>:
  D.25729 = check_overflow (ctx);
  if (D.25729 == 0) goto <D.25730>; else goto <D.25731>;
  <D.25730>:
  return;
  <D.25731>:
  <D.25728>:
  D.25732 = ctx->method;
  D.25733 = BIT_FIELD_REF <*D.25732, 64, 256>;
  D.25734 = D.25733 & 4467570830351532032;
  if (D.25734 != 0) goto <D.25735>; else goto <D.25736>;
  <D.25735>:
  D.25732 = ctx->method;
  method = mono_method_get_wrapper_data (D.25732, token);
  if (method == 0B) goto <D.25737>; else goto <D.25738>;
  <D.25737>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (24);
    vinfo->info.status = 1;
    D.25739 = ctx->ip_offset;
    D.25740 = monoeg_g_strdup_printf ("Invalid token %x for ldftn  at 0x%04x", token, D.25739);
    vinfo->info.message = D.25740;
    vinfo->exception_type = 12;
    D.25741 = ctx->list;
    D.25742 = monoeg_g_slist_prepend (D.25741, vinfo);
    ctx->list = D.25742;
  }
  ctx->valid = 0;
  return;
  <D.25738>:
  goto <D.25743>;
  <D.25736>:
  D.25747 = token >> 24;
  if (D.25747 != 6) goto <D.25748>; else goto <D.25744>;
  <D.25748>:
  D.25747 = token >> 24;
  if (D.25747 != 10) goto <D.25749>; else goto <D.25744>;
  <D.25749>:
  D.25747 = token >> 24;
  if (D.25747 != 43) goto <D.25745>; else goto <D.25744>;
  <D.25744>:
  D.25750 = ctx->image;
  D.25751 = token_bounds_check (D.25750, token);
  if (D.25751 == 0) goto <D.25745>; else goto <D.25746>;
  <D.25745>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (24);
    vinfo->info.status = 1;
    D.25739 = ctx->ip_offset;
    D.25752 = monoeg_g_strdup_printf ("Invalid token %x for ldftn  at 0x%04x", token, D.25739);
    vinfo->info.message = D.25752;
    vinfo->exception_type = 12;
    D.25741 = ctx->list;
    D.25753 = monoeg_g_slist_prepend (D.25741, vinfo);
    ctx->list = D.25753;
  }
  ctx->valid = 0;
  return;
  <D.25746>:
  token.109 = (int) token;
  if (virtual != 0) goto <D.25756>; else goto <D.25757>;
  <D.25756>:
  iftmp.110 = "ldvirtfrn";
  goto <D.25758>;
  <D.25757>:
  iftmp.110 = "ldftn";
  <D.25758>:
  method = verifier_load_method (ctx, token.109, iftmp.110);
  if (method == 0B) goto <D.25759>; else goto <D.25760>;
  <D.25759>:
  return;
  <D.25760>:
  <D.25743>:
  D.25761 = mono_method_is_constructor (method);
  if (D.25761 != 0) goto <D.25762>; else goto <D.25763>;
  <D.25762>:
  D.25766 = ctx->verifiable;
  if (D.25766 != 0) goto <D.25764>; else goto <D.25767>;
  <D.25767>:
  D.25768 = ctx->level;
  D.25769 = D.25768 & 128;
  if (D.25769 != 0) goto <D.25764>; else goto <D.25765>;
  <D.25764>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (24);
    vinfo->info.status = 8;
    D.25739 = ctx->ip_offset;
    D.25770 = monoeg_g_strdup_printf ("Cannot use ldftn with a constructor at 0x%04x", D.25739);
    vinfo->info.message = D.25770;
    vinfo->exception_type = 4;
    D.25741 = ctx->list;
    D.25771 = monoeg_g_slist_prepend (D.25741, vinfo);
    ctx->list = D.25771;
  }
  ctx->verifiable = 0;
  D.25768 = ctx->level;
  D.25772 = D.25768 & 16;
  if (D.25772 != 0) goto <D.25773>; else goto <D.25774>;
  <D.25773>:
  ctx->valid = 0;
  <D.25774>:
  <D.25765>:
  <D.25763>:
  if (virtual != 0) goto <D.25775>; else goto <D.25776>;
  <D.25775>:
  {
    struct ILStackDesc * top;

    top = stack_pop (ctx);
    D.25779 = stack_slot_get_type (top);
    if (D.25779 != 6) goto <D.25777>; else goto <D.25780>;
    <D.25780>:
    D.25781 = top->type;
    D.25782 = D.25781->type;
    if (D.25782 == 17) goto <D.25777>; else goto <D.25778>;
    <D.25777>:
    D.25766 = ctx->verifiable;
    if (D.25766 != 0) goto <D.25783>; else goto <D.25785>;
    <D.25785>:
    D.25768 = ctx->level;
    D.25769 = D.25768 & 128;
    if (D.25769 != 0) goto <D.25783>; else goto <D.25784>;
    <D.25783>:
    {
      struct MonoVerifyInfoExtended * vinfo;

      vinfo = monoeg_malloc (24);
      vinfo->info.status = 8;
      D.25739 = ctx->ip_offset;
      D.25786 = monoeg_g_strdup_printf ("Invalid argument to ldvirtftn at 0x%04x", D.25739);
      vinfo->info.message = D.25786;
      vinfo->exception_type = 4;
      D.25741 = ctx->list;
      D.25787 = monoeg_g_slist_prepend (D.25741, vinfo);
      ctx->list = D.25787;
    }
    ctx->verifiable = 0;
    D.25768 = ctx->level;
    D.25772 = D.25768 & 16;
    if (D.25772 != 0) goto <D.25788>; else goto <D.25789>;
    <D.25788>:
    ctx->valid = 0;
    <D.25789>:
    <D.25784>:
    <D.25778>:
    D.25790 = method->flags;
    D.25791 = (int) D.25790;
    D.25792 = D.25791 & 16;
    if (D.25792 != 0) goto <D.25793>; else goto <D.25794>;
    <D.25793>:
    D.25766 = ctx->verifiable;
    if (D.25766 != 0) goto <D.25795>; else goto <D.25797>;
    <D.25797>:
    D.25768 = ctx->level;
    D.25769 = D.25768 & 128;
    if (D.25769 != 0) goto <D.25795>; else goto <D.25796>;
    <D.25795>:
    {
      struct MonoVerifyInfoExtended * vinfo;

      vinfo = monoeg_malloc (24);
      vinfo->info.status = 8;
      D.25739 = ctx->ip_offset;
      D.25798 = monoeg_g_strdup_printf ("Cannot use ldvirtftn with a constructor at 0x%04x", D.25739);
      vinfo->info.message = D.25798;
      vinfo->exception_type = 4;
      D.25741 = ctx->list;
      D.25799 = monoeg_g_slist_prepend (D.25741, vinfo);
      ctx->list = D.25799;
    }
    ctx->verifiable = 0;
    D.25768 = ctx->level;
    D.25772 = D.25768 & 16;
    if (D.25772 != 0) goto <D.25800>; else goto <D.25801>;
    <D.25800>:
    ctx->valid = 0;
    <D.25801>:
    <D.25796>:
    <D.25794>:
    D.25802 = method->klass;
    D.25803 = &D.25802->byval_arg;
    D.25804 = verify_stack_type_compatibility (ctx, D.25803, top);
    if (D.25804 == 0) goto <D.25805>; else goto <D.25806>;
    <D.25805>:
    D.25766 = ctx->verifiable;
    if (D.25766 != 0) goto <D.25807>; else goto <D.25809>;
    <D.25809>:
    D.25768 = ctx->level;
    D.25769 = D.25768 & 128;
    if (D.25769 != 0) goto <D.25807>; else goto <D.25808>;
    <D.25807>:
    {
      struct MonoVerifyInfoExtended * vinfo;

      vinfo = monoeg_malloc (24);
      vinfo->info.status = 8;
      D.25739 = ctx->ip_offset;
      D.25810 = monoeg_g_strdup_printf ("Unexpected object for ldvirtftn at 0x%04x", D.25739);
      vinfo->info.message = D.25810;
      vinfo->exception_type = 4;
      D.25741 = ctx->list;
      D.25811 = monoeg_g_slist_prepend (D.25741, vinfo);
      ctx->list = D.25811;
    }
    ctx->verifiable = 0;
    D.25768 = ctx->level;
    D.25772 = D.25768 & 16;
    if (D.25772 != 0) goto <D.25812>; else goto <D.25813>;
    <D.25812>:
    ctx->valid = 0;
    <D.25813>:
    <D.25808>:
    <D.25806>:
  }
  <D.25776>:
  D.25768 = ctx->level;
  D.25814 = D.25768 & 64;
  if (D.25814 == 0) goto <D.25815>; else goto <D.25816>;
  <D.25815>:
  D.25732 = ctx->method;
  D.25817 = mono_method_can_access_method_full (D.25732, method, 0B);
  if (D.25817 == 0) goto <D.25818>; else goto <D.25819>;
  <D.25818>:
  D.25766 = ctx->verifiable;
  if (D.25766 != 0) goto <D.25820>; else goto <D.25822>;
  <D.25822>:
  D.25768 = ctx->level;
  D.25769 = D.25768 & 128;
  if (D.25769 != 0) goto <D.25820>; else goto <D.25821>;
  <D.25820>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (24);
    vinfo->info.status = 8;
    D.25739 = ctx->ip_offset;
    D.25823 = monoeg_g_strdup_printf ("Loaded method is not visible for ldftn/ldvirtftn at 0x%04x", D.25739);
    vinfo->info.message = D.25823;
    vinfo->exception_type = 9;
    D.25741 = ctx->list;
    D.25824 = monoeg_g_slist_prepend (D.25741, vinfo);
    ctx->list = D.25824;
  }
  ctx->verifiable = 0;
  D.25768 = ctx->level;
  D.25772 = D.25768 & 16;
  if (D.25772 != 0) goto <D.25825>; else goto <D.25826>;
  <D.25825>:
  ctx->valid = 0;
  <D.25826>:
  <D.25821>:
  <D.25819>:
  <D.25816>:
  D.25827 = mono_type_create_fnptr_from_mono_method (ctx, method);
  top = stack_push_val (ctx, 5, D.25827);
  top->method = method;
}


mono_type_create_fnptr_from_mono_method (struct VerifyContext * ctx, struct MonoMethod * method)
{
  struct MonoMethodSignature * D.25829;
  struct GSList * D.25830;
  struct GSList * D.25831;
  struct MonoType * D.25832;
  struct MonoType * res;

  res = monoeg_malloc0 (16);
  D.25829 = mono_method_signature (method);
  res->data.method = D.25829;
  res->type = 27;
  D.25830 = ctx->funptrs;
  D.25831 = monoeg_g_slist_prepend (D.25830, res);
  ctx->funptrs = D.25831;
  D.25832 = res;
  return D.25832;
}


push_arg (struct VerifyContext * ctx, unsigned int arg, int take_addr)
{
  int D.25834;
  unsigned int D.25835;
  unsigned int D.25840;
  gchar * D.25841;
  struct GSList * D.25842;
  struct GSList * D.25843;
  int D.25847;
  int D.25849;
  int D.25850;
  gchar * D.25851;
  struct GSList * D.25852;
  int D.25853;
  int D.25856;
  struct MonoClass * D.25859;
  struct MonoType * D.25860;
  int D.25862;
  struct MonoType * * D.25865;
  long unsigned int D.25866;
  long unsigned int D.25867;
  struct MonoType * * D.25868;
  struct MonoType * D.25869;
  long unsigned int D.25870;
  long unsigned int D.25871;
  unsigned int D.25879;
  gchar * D.25880;
  struct GSList * D.25881;
  int D.25884;
  struct MonoMethod * D.25889;
  short unsigned int D.25890;
  int D.25891;
  int D.25892;
  int D.25898;
  int D.25899;
  int D.25900;
  int D.25903;
  struct MonoClass * D.25906;
  long unsigned int D.25907;
  long unsigned int D.25908;
  int D.25911;
  struct ILStackDesc * top;

  D.25834 = ctx->max_args;
  D.25835 = (unsigned int) D.25834;
  if (D.25835 <= arg) goto <D.25836>; else goto <D.25837>;
  <D.25836>:
  if (take_addr != 0) goto <D.25838>; else goto <D.25839>;
  <D.25838>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (24);
    vinfo->info.status = 1;
    D.25840 = arg + 1;
    D.25841 = monoeg_g_strdup_printf ("Method doesn\'t have argument %d", D.25840);
    vinfo->info.message = D.25841;
    vinfo->exception_type = 3;
    D.25842 = ctx->list;
    D.25843 = monoeg_g_slist_prepend (D.25842, vinfo);
    ctx->list = D.25843;
  }
  ctx->valid = 0;
  goto <D.25844>;
  <D.25839>:
  D.25847 = ctx->verifiable;
  if (D.25847 != 0) goto <D.25845>; else goto <D.25848>;
  <D.25848>:
  D.25849 = ctx->level;
  D.25850 = D.25849 & 128;
  if (D.25850 != 0) goto <D.25845>; else goto <D.25846>;
  <D.25845>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (24);
    vinfo->info.status = 8;
    D.25840 = arg + 1;
    D.25851 = monoeg_g_strdup_printf ("Method doesn\'t have argument %d", D.25840);
    vinfo->info.message = D.25851;
    vinfo->exception_type = 4;
    D.25842 = ctx->list;
    D.25852 = monoeg_g_slist_prepend (D.25842, vinfo);
    ctx->list = D.25852;
  }
  ctx->verifiable = 0;
  D.25849 = ctx->level;
  D.25853 = D.25849 & 16;
  if (D.25853 != 0) goto <D.25854>; else goto <D.25855>;
  <D.25854>:
  ctx->valid = 0;
  <D.25855>:
  <D.25846>:
  D.25856 = check_overflow (ctx);
  if (D.25856 != 0) goto <D.25857>; else goto <D.25858>;
  <D.25857>:
  D.25859 = mono_defaults.int32_class;
  D.25860 = &D.25859->byval_arg;
  stack_push_val (ctx, 1, D.25860);
  <D.25858>:
  <D.25844>:
  goto <D.25861>;
  <D.25837>:
  D.25862 = check_overflow (ctx);
  if (D.25862 != 0) goto <D.25863>; else goto <D.25864>;
  <D.25863>:
  D.25865 = ctx->params;
  D.25866 = (long unsigned int) arg;
  D.25867 = D.25866 * 8;
  D.25868 = D.25865 + D.25867;
  D.25869 = *D.25868;
  check_unverifiable_type (ctx, D.25869);
  D.25865 = ctx->params;
  D.25866 = (long unsigned int) arg;
  D.25867 = D.25866 * 8;
  D.25868 = D.25865 + D.25867;
  D.25869 = *D.25868;
  D.25870 = BIT_FIELD_REF <*D.25869, 64, 64>;
  D.25871 = D.25870 & 8589934592;
  if (D.25871 != 0) goto <D.25872>; else goto <D.25873>;
  <D.25872>:
  if (take_addr != 0) goto <D.25874>; else goto <D.25875>;
  <D.25874>:
  D.25847 = ctx->verifiable;
  if (D.25847 != 0) goto <D.25876>; else goto <D.25878>;
  <D.25878>:
  D.25849 = ctx->level;
  D.25850 = D.25849 & 128;
  if (D.25850 != 0) goto <D.25876>; else goto <D.25877>;
  <D.25876>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (24);
    vinfo->info.status = 8;
    D.25879 = ctx->ip_offset;
    D.25880 = monoeg_g_strdup_printf ("ByRef of ByRef at 0x%04x", D.25879);
    vinfo->info.message = D.25880;
    vinfo->exception_type = 4;
    D.25842 = ctx->list;
    D.25881 = monoeg_g_slist_prepend (D.25842, vinfo);
    ctx->list = D.25881;
  }
  ctx->verifiable = 0;
  D.25849 = ctx->level;
  D.25853 = D.25849 & 16;
  if (D.25853 != 0) goto <D.25882>; else goto <D.25883>;
  <D.25882>:
  ctx->valid = 0;
  <D.25883>:
  <D.25877>:
  <D.25875>:
  <D.25873>:
  top = stack_push (ctx);
  D.25865 = ctx->params;
  D.25866 = (long unsigned int) arg;
  D.25867 = D.25866 * 8;
  D.25868 = D.25865 + D.25867;
  D.25869 = *D.25868;
  D.25884 = set_stack_value (ctx, top, D.25869, take_addr);
  if (D.25884 == 0) goto <D.25885>; else goto <D.25886>;
  <D.25885>:
  return;
  <D.25886>:
  if (arg == 0) goto <D.25887>; else goto <D.25888>;
  <D.25887>:
  D.25889 = ctx->method;
  D.25890 = D.25889->flags;
  D.25891 = (int) D.25890;
  D.25892 = D.25891 & 16;
  if (D.25892 == 0) goto <D.25893>; else goto <D.25894>;
  <D.25893>:
  if (take_addr != 0) goto <D.25895>; else goto <D.25896>;
  <D.25895>:
  ctx->has_this_store = 1;
  goto <D.25897>;
  <D.25896>:
  D.25898 = top->stype;
  D.25899 = D.25898 | 2048;
  top->stype = D.25899;
  <D.25897>:
  D.25889 = ctx->method;
  D.25900 = mono_method_is_constructor (D.25889);
  if (D.25900 != 0) goto <D.25901>; else goto <D.25902>;
  <D.25901>:
  D.25903 = ctx->super_ctor_called;
  if (D.25903 == 0) goto <D.25904>; else goto <D.25905>;
  <D.25904>:
  D.25889 = ctx->method;
  D.25906 = D.25889->klass;
  D.25907 = BIT_FIELD_REF <*D.25906, 64, 256>;
  D.25908 = D.25907 & 1152921504606846976;
  if (D.25908 == 0) goto <D.25909>; else goto <D.25910>;
  <D.25909>:
  D.25898 = top->stype;
  D.25911 = D.25898 | 8192;
  top->stype = D.25911;
  <D.25910>:
  <D.25905>:
  <D.25902>:
  <D.25894>:
  <D.25888>:
  <D.25864>:
  <D.25861>:
}


check_unverifiable_type (struct VerifyContext * ctx, struct MonoType * type)
{
  unsigned char D.25915;
  int D.25919;
  int D.25921;
  int D.25922;
  unsigned int D.25923;
  gchar * D.25924;
  struct GSList * D.25925;
  struct GSList * D.25926;
  int D.25927;
  gboolean D.25930;

  D.25915 = type->type;
  if (D.25915 == 15) goto <D.25913>; else goto <D.25916>;
  <D.25916>:
  D.25915 = type->type;
  if (D.25915 == 27) goto <D.25913>; else goto <D.25914>;
  <D.25913>:
  D.25919 = ctx->verifiable;
  if (D.25919 != 0) goto <D.25917>; else goto <D.25920>;
  <D.25920>:
  D.25921 = ctx->level;
  D.25922 = D.25921 & 128;
  if (D.25922 != 0) goto <D.25917>; else goto <D.25918>;
  <D.25917>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (24);
    vinfo->info.status = 8;
    D.25923 = ctx->ip_offset;
    D.25924 = monoeg_g_strdup_printf ("Unmanaged pointer is not a verifiable type at 0x%04x", D.25923);
    vinfo->info.message = D.25924;
    vinfo->exception_type = 4;
    D.25925 = ctx->list;
    D.25926 = monoeg_g_slist_prepend (D.25925, vinfo);
    ctx->list = D.25926;
  }
  ctx->verifiable = 0;
  D.25921 = ctx->level;
  D.25927 = D.25921 & 16;
  if (D.25927 != 0) goto <D.25928>; else goto <D.25929>;
  <D.25928>:
  ctx->valid = 0;
  <D.25929>:
  <D.25918>:
  D.25930 = 0;
  return D.25930;
  <D.25914>:
  D.25930 = 1;
  return D.25930;
}


push_local (struct VerifyContext * ctx, guint32 arg, int take_addr)
{
  int D.25932;
  unsigned int D.25933;
  unsigned int D.25936;
  gchar * D.25937;
  struct GSList * D.25938;
  struct GSList * D.25939;
  int D.25941;
  struct MonoType * * D.25944;
  long unsigned int D.25945;
  long unsigned int D.25946;
  struct MonoType * * D.25947;
  struct MonoType * D.25948;
  long unsigned int D.25949;
  long unsigned int D.25950;
  int D.25957;
  int D.25959;
  int D.25960;
  unsigned int D.25961;
  gchar * D.25962;
  struct GSList * D.25963;
  int D.25964;
  struct ILStackDesc * D.25967;

  D.25932 = ctx->num_locals;
  D.25933 = (unsigned int) D.25932;
  if (D.25933 <= arg) goto <D.25934>; else goto <D.25935>;
  <D.25934>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (24);
    vinfo->info.status = 1;
    D.25936 = arg + 1;
    D.25937 = monoeg_g_strdup_printf ("Method doesn\'t have local %d", D.25936);
    vinfo->info.message = D.25937;
    vinfo->exception_type = 3;
    D.25938 = ctx->list;
    D.25939 = monoeg_g_slist_prepend (D.25938, vinfo);
    ctx->list = D.25939;
  }
  ctx->valid = 0;
  goto <D.25940>;
  <D.25935>:
  D.25941 = check_overflow (ctx);
  if (D.25941 != 0) goto <D.25942>; else goto <D.25943>;
  <D.25942>:
  D.25944 = ctx->locals;
  D.25945 = (long unsigned int) arg;
  D.25946 = D.25945 * 8;
  D.25947 = D.25944 + D.25946;
  D.25948 = *D.25947;
  check_unverifiable_type (ctx, D.25948);
  D.25944 = ctx->locals;
  D.25945 = (long unsigned int) arg;
  D.25946 = D.25945 * 8;
  D.25947 = D.25944 + D.25946;
  D.25948 = *D.25947;
  D.25949 = BIT_FIELD_REF <*D.25948, 64, 64>;
  D.25950 = D.25949 & 8589934592;
  if (D.25950 != 0) goto <D.25951>; else goto <D.25952>;
  <D.25951>:
  if (take_addr != 0) goto <D.25953>; else goto <D.25954>;
  <D.25953>:
  D.25957 = ctx->verifiable;
  if (D.25957 != 0) goto <D.25955>; else goto <D.25958>;
  <D.25958>:
  D.25959 = ctx->level;
  D.25960 = D.25959 & 128;
  if (D.25960 != 0) goto <D.25955>; else goto <D.25956>;
  <D.25955>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (24);
    vinfo->info.status = 8;
    D.25961 = ctx->ip_offset;
    D.25962 = monoeg_g_strdup_printf ("ByRef of ByRef at 0x%04x", D.25961);
    vinfo->info.message = D.25962;
    vinfo->exception_type = 4;
    D.25938 = ctx->list;
    D.25963 = monoeg_g_slist_prepend (D.25938, vinfo);
    ctx->list = D.25963;
  }
  ctx->verifiable = 0;
  D.25959 = ctx->level;
  D.25964 = D.25959 & 16;
  if (D.25964 != 0) goto <D.25965>; else goto <D.25966>;
  <D.25965>:
  ctx->valid = 0;
  <D.25966>:
  <D.25956>:
  <D.25954>:
  <D.25952>:
  D.25967 = stack_push (ctx);
  D.25944 = ctx->locals;
  D.25945 = (long unsigned int) arg;
  D.25946 = D.25945 * 8;
  D.25947 = D.25944 + D.25946;
  D.25948 = *D.25947;
  set_stack_value (ctx, D.25967, D.25948, take_addr);
  <D.25943>:
  <D.25940>:
}


do_localloc (struct VerifyContext * ctx)
{
  short unsigned int D.25968;
  unsigned int D.25971;
  gchar * D.25972;
  struct GSList * D.25973;
  struct GSList * D.25974;
  struct MonoMethodHeader * D.25975;
  int D.25976;
  gchar * D.25979;
  struct GSList * D.25980;
  struct ILStackDesc * D.25981;
  struct MonoClass * D.25982;
  struct MonoType * D.25983;
  int D.25986;
  int D.25988;
  int D.25989;
  gchar * D.25990;
  struct GSList * D.25991;
  int D.25992;
  struct ILStackDesc * top;

  D.25968 = ctx->eval.size;
  if (D.25968 != 1) goto <D.25969>; else goto <D.25970>;
  <D.25969>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (24);
    vinfo->info.status = 1;
    D.25971 = ctx->ip_offset;
    D.25972 = monoeg_g_strdup_printf ("Stack must have only size item in localloc at 0x%04x", D.25971);
    vinfo->info.message = D.25972;
    vinfo->exception_type = 3;
    D.25973 = ctx->list;
    D.25974 = monoeg_g_slist_prepend (D.25973, vinfo);
    ctx->list = D.25974;
  }
  ctx->valid = 0;
  return;
  <D.25970>:
  D.25975 = ctx->header;
  D.25971 = ctx->ip_offset;
  D.25976 = in_any_exception_block (D.25975, D.25971);
  if (D.25976 != 0) goto <D.25977>; else goto <D.25978>;
  <D.25977>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (24);
    vinfo->info.status = 1;
    D.25971 = ctx->ip_offset;
    D.25979 = monoeg_g_strdup_printf ("Stack must have only size item in localloc at 0x%04x", D.25971);
    vinfo->info.message = D.25979;
    vinfo->exception_type = 3;
    D.25973 = ctx->list;
    D.25980 = monoeg_g_slist_prepend (D.25973, vinfo);
    ctx->list = D.25980;
  }
  ctx->valid = 0;
  return;
  <D.25978>:
  top = stack_pop (ctx);
  D.25981 = stack_push (ctx);
  D.25982 = mono_defaults.int_class;
  D.25983 = &D.25982->byval_arg;
  set_stack_value (ctx, D.25981, D.25983, 0);
  D.25986 = ctx->verifiable;
  if (D.25986 != 0) goto <D.25984>; else goto <D.25987>;
  <D.25987>:
  D.25988 = ctx->level;
  D.25989 = D.25988 & 128;
  if (D.25989 != 0) goto <D.25984>; else goto <D.25985>;
  <D.25984>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (24);
    vinfo->info.status = 8;
    D.25971 = ctx->ip_offset;
    D.25990 = monoeg_g_strdup_printf ("Instruction localloc in never verifiable at 0x%04x", D.25971);
    vinfo->info.message = D.25990;
    vinfo->exception_type = 4;
    D.25973 = ctx->list;
    D.25991 = monoeg_g_slist_prepend (D.25973, vinfo);
    ctx->list = D.25991;
  }
  ctx->verifiable = 0;
  D.25988 = ctx->level;
  D.25992 = D.25988 & 16;
  if (D.25992 != 0) goto <D.25993>; else goto <D.25994>;
  <D.25993>:
  ctx->valid = 0;
  <D.25994>:
  <D.25985>:
}


in_any_exception_block (struct MonoMethodHeader * header, guint offset)
{
  struct MonoExceptionClause * D.25996;
  long unsigned int D.25997;
  long unsigned int D.25998;
  unsigned int D.25999;
  unsigned int D.26002;
  unsigned int D.26003;
  gboolean D.26006;
  unsigned int D.26007;
  unsigned int D.26010;
  <unnamed-unsigned:15> D.26015;
  int D.26016;
  int i;
  struct MonoExceptionClause * clause;

  i = 0;
  goto <D.18309>;
  <D.18308>:
  D.25996 = header->clauses;
  D.25997 = (long unsigned int) i;
  D.25998 = D.25997 * 32;
  clause = D.25996 + D.25998;
  D.25999 = clause->handler_offset;
  if (D.25999 <= offset) goto <D.26000>; else goto <D.26001>;
  <D.26000>:
  D.25999 = clause->handler_offset;
  D.26002 = clause->handler_len;
  D.26003 = D.25999 + D.26002;
  if (D.26003 > offset) goto <D.26004>; else goto <D.26005>;
  <D.26004>:
  D.26006 = 1;
  return D.26006;
  <D.26005>:
  <D.26001>:
  D.26007 = clause->flags;
  if (D.26007 == 1) goto <D.26008>; else goto <D.26009>;
  <D.26008>:
  D.26010 = clause->data.filter_offset;
  if (D.26010 <= offset) goto <D.26011>; else goto <D.26012>;
  <D.26011>:
  D.25999 = clause->handler_offset;
  if (D.25999 > offset) goto <D.26013>; else goto <D.26014>;
  <D.26013>:
  D.26006 = 1;
  return D.26006;
  <D.26014>:
  <D.26012>:
  <D.26009>:
  i = i + 1;
  <D.18309>:
  D.26015 = header->num_clauses;
  D.26016 = (int) D.26015;
  if (D.26016 > i) goto <D.18308>; else goto <D.18310>;
  <D.18310>:
  D.26006 = 0;
  return D.26006;
}


do_endfilter (struct VerifyContext * ctx)
{
  int D.26018;
  int D.26019;
  short unsigned int D.26022;
  int D.26027;
  int D.26029;
  unsigned int D.26030;
  gchar * D.26031;
  struct GSList * D.26032;
  struct GSList * D.26033;
  int D.26034;
  struct ILStackDesc * D.26039;
  int D.26040;
  gchar * D.26046;
  struct GSList * D.26047;
  unsigned int D.26054;
  unsigned int D.26055;
  gchar * D.26058;
  struct GSList * D.26059;
  unsigned int D.26066;
  unsigned int D.26067;
  gchar * D.26068;
  struct GSList * D.26069;
  int D.26074;
  gchar * D.26076;
  struct GSList * D.26077;
  gchar * D.26081;
  struct GSList * D.26082;
  struct MonoExceptionClause * clause;

  D.26018 = ctx->level;
  D.26019 = D.26018 & 32;
  if (D.26019 == 0) goto <D.26020>; else goto <D.26021>;
  <D.26020>:
  D.26022 = ctx->eval.size;
  if (D.26022 != 1) goto <D.26023>; else goto <D.26024>;
  <D.26023>:
  D.26027 = ctx->verifiable;
  if (D.26027 != 0) goto <D.26025>; else goto <D.26028>;
  <D.26028>:
  D.26018 = ctx->level;
  D.26029 = D.26018 & 128;
  if (D.26029 != 0) goto <D.26025>; else goto <D.26026>;
  <D.26025>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (24);
    vinfo->info.status = 8;
    D.26030 = ctx->ip_offset;
    D.26031 = monoeg_g_strdup_printf ("Stack size must have one item for endfilter at 0x%04x", D.26030);
    vinfo->info.message = D.26031;
    vinfo->exception_type = 4;
    D.26032 = ctx->list;
    D.26033 = monoeg_g_slist_prepend (D.26032, vinfo);
    ctx->list = D.26033;
  }
  ctx->verifiable = 0;
  D.26018 = ctx->level;
  D.26034 = D.26018 & 16;
  if (D.26034 != 0) goto <D.26035>; else goto <D.26036>;
  <D.26035>:
  ctx->valid = 0;
  <D.26036>:
  <D.26026>:
  <D.26024>:
  D.26022 = ctx->eval.size;
  if (D.26022 != 0) goto <D.26037>; else goto <D.26038>;
  <D.26037>:
  D.26039 = stack_pop (ctx);
  D.26040 = stack_slot_get_type (D.26039);
  if (D.26040 != 1) goto <D.26041>; else goto <D.26042>;
  <D.26041>:
  D.26027 = ctx->verifiable;
  if (D.26027 != 0) goto <D.26043>; else goto <D.26045>;
  <D.26045>:
  D.26018 = ctx->level;
  D.26029 = D.26018 & 128;
  if (D.26029 != 0) goto <D.26043>; else goto <D.26044>;
  <D.26043>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (24);
    vinfo->info.status = 8;
    D.26030 = ctx->ip_offset;
    D.26046 = monoeg_g_strdup_printf ("Stack item type is not an int32 for endfilter at 0x%04x", D.26030);
    vinfo->info.message = D.26046;
    vinfo->exception_type = 4;
    D.26032 = ctx->list;
    D.26047 = monoeg_g_slist_prepend (D.26032, vinfo);
    ctx->list = D.26047;
  }
  ctx->verifiable = 0;
  D.26018 = ctx->level;
  D.26034 = D.26018 & 16;
  if (D.26034 != 0) goto <D.26048>; else goto <D.26049>;
  <D.26048>:
  ctx->valid = 0;
  <D.26049>:
  <D.26044>:
  <D.26042>:
  <D.26038>:
  <D.26021>:
  D.26030 = ctx->ip_offset;
  clause = is_correct_endfilter (ctx, D.26030);
  if (clause != 0B) goto <D.26050>; else goto <D.26051>;
  <D.26050>:
  D.26018 = ctx->level;
  D.26019 = D.26018 & 32;
  if (D.26019 == 0) goto <D.26052>; else goto <D.26053>;
  <D.26052>:
  D.26030 = ctx->ip_offset;
  D.26054 = clause->handler_offset;
  D.26055 = D.26054 + 4294967294;
  if (D.26030 != D.26055) goto <D.26056>; else goto <D.26057>;
  <D.26056>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (24);
    vinfo->info.status = 1;
    D.26030 = ctx->ip_offset;
    D.26058 = monoeg_g_strdup_printf ("endfilter is not the last instruction of the filter clause at 0x%04x", D.26030);
    vinfo->info.message = D.26058;
    vinfo->exception_type = 3;
    D.26032 = ctx->list;
    D.26059 = monoeg_g_slist_prepend (D.26032, vinfo);
    ctx->list = D.26059;
  }
  ctx->valid = 0;
  <D.26057>:
  goto <D.26060>;
  <D.26053>:
  D.26030 = ctx->ip_offset;
  D.26054 = clause->handler_offset;
  D.26055 = D.26054 + 4294967294;
  if (D.26030 != D.26055) goto <D.26063>; else goto <D.26064>;
  <D.26063>:
  D.26054 = clause->handler_offset;
  D.26030 = ctx->ip_offset;
  if (D.26054 > D.26030) goto <D.26061>; else goto <D.26065>;
  <D.26065>:
  D.26030 = ctx->ip_offset;
  D.26054 = clause->handler_offset;
  D.26066 = clause->handler_len;
  D.26067 = D.26054 + D.26066;
  if (D.26030 >= D.26067) goto <D.26061>; else goto <D.26062>;
  <D.26061>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (24);
    vinfo->info.status = 1;
    D.26030 = ctx->ip_offset;
    D.26068 = monoeg_g_strdup_printf ("endfilter is not the last instruction of the filter clause at 0x%04x", D.26030);
    vinfo->info.message = D.26068;
    vinfo->exception_type = 3;
    D.26032 = ctx->list;
    D.26069 = monoeg_g_slist_prepend (D.26032, vinfo);
    ctx->list = D.26069;
  }
  ctx->valid = 0;
  <D.26062>:
  <D.26064>:
  <D.26060>:
  goto <D.26070>;
  <D.26051>:
  D.26018 = ctx->level;
  D.26019 = D.26018 & 32;
  if (D.26019 == 0) goto <D.26073>; else goto <D.26071>;
  <D.26073>:
  D.26030 = ctx->ip_offset;
  D.26074 = is_unverifiable_endfilter (ctx, D.26030);
  if (D.26074 == 0) goto <D.26075>; else goto <D.26071>;
  <D.26075>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (24);
    vinfo->info.status = 1;
    D.26030 = ctx->ip_offset;
    D.26076 = monoeg_g_strdup_printf ("endfilter outside filter clause at 0x%04x", D.26030);
    vinfo->info.message = D.26076;
    vinfo->exception_type = 3;
    D.26032 = ctx->list;
    D.26077 = monoeg_g_slist_prepend (D.26032, vinfo);
    ctx->list = D.26077;
  }
  ctx->valid = 0;
  goto <D.26072>;
  <D.26071>:
  D.26027 = ctx->verifiable;
  if (D.26027 != 0) goto <D.26078>; else goto <D.26080>;
  <D.26080>:
  D.26018 = ctx->level;
  D.26029 = D.26018 & 128;
  if (D.26029 != 0) goto <D.26078>; else goto <D.26079>;
  <D.26078>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (24);
    vinfo->info.status = 8;
    D.26030 = ctx->ip_offset;
    D.26081 = monoeg_g_strdup_printf ("endfilter outside filter clause at 0x%04x", D.26030);
    vinfo->info.message = D.26081;
    vinfo->exception_type = 4;
    D.26032 = ctx->list;
    D.26082 = monoeg_g_slist_prepend (D.26032, vinfo);
    ctx->list = D.26082;
  }
  ctx->verifiable = 0;
  D.26018 = ctx->level;
  D.26034 = D.26018 & 16;
  if (D.26034 != 0) goto <D.26083>; else goto <D.26084>;
  <D.26083>:
  ctx->valid = 0;
  <D.26084>:
  <D.26079>:
  <D.26072>:
  <D.26070>:
  ctx->eval.size = 0;
}


is_correct_endfilter (struct VerifyContext * ctx, guint offset)
{
  struct MonoMethodHeader * D.26085;
  struct MonoExceptionClause * D.26086;
  long unsigned int D.26087;
  long unsigned int D.26088;
  unsigned int D.26089;
  unsigned int D.26094;
  unsigned int D.26097;
  struct MonoExceptionClause * D.26100;
  int D.26101;
  int D.26102;
  unsigned int D.26107;
  unsigned int D.26108;
  <unnamed-unsigned:15> D.26111;
  int D.26112;
  int i;
  struct MonoExceptionClause * clause;

  i = 0;
  goto <D.18367>;
  <D.18366>:
  D.26085 = ctx->header;
  D.26086 = D.26085->clauses;
  D.26087 = (long unsigned int) i;
  D.26088 = D.26087 * 32;
  clause = D.26086 + D.26088;
  D.26089 = clause->flags;
  if (D.26089 != 1) goto <D.26090>; else goto <D.26091>;
  <D.26090>:
  // predicted unlikely by continue predictor.
  goto <D.18365>;
  <D.26091>:
  D.26089 = clause->flags;
  if (D.26089 == 1) goto <D.26092>; else goto <D.26093>;
  <D.26092>:
  D.26094 = clause->data.filter_offset;
  if (D.26094 <= offset) goto <D.26095>; else goto <D.26096>;
  <D.26095>:
  D.26097 = clause->handler_offset;
  if (D.26097 > offset) goto <D.26098>; else goto <D.26099>;
  <D.26098>:
  D.26100 = clause;
  return D.26100;
  <D.26099>:
  <D.26096>:
  <D.26093>:
  D.26101 = ctx->level;
  D.26102 = D.26101 & 32;
  if (D.26102 != 0) goto <D.26103>; else goto <D.26104>;
  <D.26103>:
  D.26097 = clause->handler_offset;
  if (D.26097 <= offset) goto <D.26105>; else goto <D.26106>;
  <D.26105>:
  D.26097 = clause->handler_offset;
  D.26107 = clause->handler_len;
  D.26108 = D.26097 + D.26107;
  if (D.26108 > offset) goto <D.26109>; else goto <D.26110>;
  <D.26109>:
  D.26100 = clause;
  return D.26100;
  <D.26110>:
  <D.26106>:
  <D.26104>:
  <D.18365>:
  i = i + 1;
  <D.18367>:
  D.26085 = ctx->header;
  D.26111 = D.26085->num_clauses;
  D.26112 = (int) D.26111;
  if (D.26112 > i) goto <D.18366>; else goto <D.18368>;
  <D.18368>:
  D.26100 = 0B;
  return D.26100;
}


is_unverifiable_endfilter (struct VerifyContext * ctx, guint offset)
{
  struct MonoMethodHeader * D.26114;
  struct MonoExceptionClause * D.26115;
  long unsigned int D.26116;
  long unsigned int D.26117;
  unsigned int D.26118;
  unsigned int D.26121;
  unsigned int D.26122;
  int D.26125;
  <unnamed-unsigned:15> D.26126;
  int D.26127;
  int i;
  struct MonoExceptionClause * clause;

  i = 0;
  goto <D.18376>;
  <D.18375>:
  D.26114 = ctx->header;
  D.26115 = D.26114->clauses;
  D.26116 = (long unsigned int) i;
  D.26117 = D.26116 * 32;
  clause = D.26115 + D.26117;
  D.26118 = clause->try_offset;
  if (D.26118 <= offset) goto <D.26119>; else goto <D.26120>;
  <D.26119>:
  D.26118 = clause->try_offset;
  D.26121 = clause->try_len;
  D.26122 = D.26118 + D.26121;
  if (D.26122 > offset) goto <D.26123>; else goto <D.26124>;
  <D.26123>:
  D.26125 = 1;
  return D.26125;
  <D.26124>:
  <D.26120>:
  i = i + 1;
  <D.18376>:
  D.26114 = ctx->header;
  D.26126 = D.26114->num_clauses;
  D.26127 = (int) D.26126;
  if (D.26127 > i) goto <D.18375>; else goto <D.18377>;
  <D.18377>:
  D.26125 = 0;
  return D.26125;
}


do_initobj (struct VerifyContext * ctx, int token)
{
  int D.26131;
  int D.26134;
  int D.26139;
  int D.26141;
  int D.26142;
  unsigned int D.26143;
  gchar * D.26144;
  struct GSList * D.26145;
  struct GSList * D.26146;
  int D.26147;
  int D.26150;
  gchar * D.26156;
  struct GSList * D.26157;
  struct MonoType * D.26160;
  int D.26161;
  int D.26164;
  gchar * D.26170;
  struct GSList * D.26171;
  int D.26175;
  int D.26178;
  gchar * D.26184;
  struct GSList * D.26185;
  int D.26189;
  gchar * D.26195;
  struct GSList * D.26196;
  struct ILStackDesc * obj;
  struct MonoType * stack;
  struct MonoType * type;

  type = get_boxable_mono_type (ctx, token, "initobj");
  if (type == 0B) goto <D.26129>; else goto <D.26130>;
  <D.26129>:
  return;
  <D.26130>:
  D.26131 = check_underflow (ctx, 1);
  if (D.26131 == 0) goto <D.26132>; else goto <D.26133>;
  <D.26132>:
  return;
  <D.26133>:
  obj = stack_pop (ctx);
  D.26134 = stack_slot_is_managed_pointer (obj);
  if (D.26134 == 0) goto <D.26135>; else goto <D.26136>;
  <D.26135>:
  D.26139 = ctx->verifiable;
  if (D.26139 != 0) goto <D.26137>; else goto <D.26140>;
  <D.26140>:
  D.26141 = ctx->level;
  D.26142 = D.26141 & 128;
  if (D.26142 != 0) goto <D.26137>; else goto <D.26138>;
  <D.26137>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (24);
    vinfo->info.status = 8;
    D.26143 = ctx->ip_offset;
    D.26144 = monoeg_g_strdup_printf ("Invalid object address for initobj at 0x%04x", D.26143);
    vinfo->info.message = D.26144;
    vinfo->exception_type = 4;
    D.26145 = ctx->list;
    D.26146 = monoeg_g_slist_prepend (D.26145, vinfo);
    ctx->list = D.26146;
  }
  ctx->verifiable = 0;
  D.26141 = ctx->level;
  D.26147 = D.26141 & 16;
  if (D.26147 != 0) goto <D.26148>; else goto <D.26149>;
  <D.26148>:
  ctx->valid = 0;
  <D.26149>:
  <D.26138>:
  <D.26136>:
  D.26150 = stack_slot_is_managed_mutability_pointer (obj);
  if (D.26150 != 0) goto <D.26151>; else goto <D.26152>;
  <D.26151>:
  D.26139 = ctx->verifiable;
  if (D.26139 != 0) goto <D.26153>; else goto <D.26155>;
  <D.26155>:
  D.26141 = ctx->level;
  D.26142 = D.26141 & 128;
  if (D.26142 != 0) goto <D.26153>; else goto <D.26154>;
  <D.26153>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (24);
    vinfo->info.status = 8;
    D.26143 = ctx->ip_offset;
    D.26156 = monoeg_g_strdup_printf ("Cannot use a readonly pointer with initobj at 0x%04x", D.26143);
    vinfo->info.message = D.26156;
    vinfo->exception_type = 4;
    D.26145 = ctx->list;
    D.26157 = monoeg_g_slist_prepend (D.26145, vinfo);
    ctx->list = D.26157;
  }
  ctx->verifiable = 0;
  D.26141 = ctx->level;
  D.26147 = D.26141 & 16;
  if (D.26147 != 0) goto <D.26158>; else goto <D.26159>;
  <D.26158>:
  ctx->valid = 0;
  <D.26159>:
  <D.26154>:
  <D.26152>:
  D.26160 = obj->type;
  stack = mono_type_get_type_byval (D.26160);
  D.26161 = mono_type_is_reference (stack);
  if (D.26161 != 0) goto <D.26162>; else goto <D.26163>;
  <D.26162>:
  D.26164 = verify_type_compatibility (ctx, stack, type);
  if (D.26164 == 0) goto <D.26165>; else goto <D.26166>;
  <D.26165>:
  D.26139 = ctx->verifiable;
  if (D.26139 != 0) goto <D.26167>; else goto <D.26169>;
  <D.26169>:
  D.26141 = ctx->level;
  D.26142 = D.26141 & 128;
  if (D.26142 != 0) goto <D.26167>; else goto <D.26168>;
  <D.26167>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (24);
    vinfo->info.status = 8;
    D.26143 = ctx->ip_offset;
    D.26170 = monoeg_g_strdup_printf ("Type token of initobj not compatible with value on stack at 0x%04x", D.26143);
    vinfo->info.message = D.26170;
    vinfo->exception_type = 4;
    D.26145 = ctx->list;
    D.26171 = monoeg_g_slist_prepend (D.26145, vinfo);
    ctx->list = D.26171;
  }
  ctx->verifiable = 0;
  D.26141 = ctx->level;
  D.26147 = D.26141 & 16;
  if (D.26147 != 0) goto <D.26172>; else goto <D.26173>;
  <D.26172>:
  ctx->valid = 0;
  <D.26173>:
  <D.26168>:
  goto <D.26174>;
  <D.26166>:
  D.26141 = ctx->level;
  D.26175 = D.26141 & 32;
  if (D.26175 == 0) goto <D.26176>; else goto <D.26177>;
  <D.26176>:
  D.26178 = mono_metadata_type_equal (type, stack);
  if (D.26178 == 0) goto <D.26179>; else goto <D.26180>;
  <D.26179>:
  D.26139 = ctx->verifiable;
  if (D.26139 != 0) goto <D.26181>; else goto <D.26183>;
  <D.26183>:
  D.26141 = ctx->level;
  D.26142 = D.26141 & 128;
  if (D.26142 != 0) goto <D.26181>; else goto <D.26182>;
  <D.26181>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (24);
    vinfo->info.status = 8;
    D.26143 = ctx->ip_offset;
    D.26184 = monoeg_g_strdup_printf ("Type token of initobj not compatible with value on stack at 0x%04x", D.26143);
    vinfo->info.message = D.26184;
    vinfo->exception_type = 4;
    D.26145 = ctx->list;
    D.26185 = monoeg_g_slist_prepend (D.26145, vinfo);
    ctx->list = D.26185;
  }
  ctx->verifiable = 0;
  D.26141 = ctx->level;
  D.26147 = D.26141 & 16;
  if (D.26147 != 0) goto <D.26186>; else goto <D.26187>;
  <D.26186>:
  ctx->valid = 0;
  <D.26187>:
  <D.26182>:
  <D.26180>:
  <D.26177>:
  <D.26174>:
  goto <D.26188>;
  <D.26163>:
  D.26189 = verify_type_compatibility (ctx, stack, type);
  if (D.26189 == 0) goto <D.26190>; else goto <D.26191>;
  <D.26190>:
  {
    char * expected_name;
    char * stack_name;

    expected_name = mono_type_full_name (type);
    stack_name = mono_type_full_name (stack);
    D.26139 = ctx->verifiable;
    if (D.26139 != 0) goto <D.26192>; else goto <D.26194>;
    <D.26194>:
    D.26141 = ctx->level;
    D.26142 = D.26141 & 128;
    if (D.26142 != 0) goto <D.26192>; else goto <D.26193>;
    <D.26192>:
    {
      struct MonoVerifyInfoExtended * vinfo;

      vinfo = monoeg_malloc (24);
      vinfo->info.status = 8;
      D.26143 = ctx->ip_offset;
      D.26195 = monoeg_g_strdup_printf ("Initobj %s not compatible with value on stack %s at 0x%04x", expected_name, stack_name, D.26143);
      vinfo->info.message = D.26195;
      vinfo->exception_type = 4;
      D.26145 = ctx->list;
      D.26196 = monoeg_g_slist_prepend (D.26145, vinfo);
      ctx->list = D.26196;
    }
    ctx->verifiable = 0;
    D.26141 = ctx->level;
    D.26147 = D.26141 & 16;
    if (D.26147 != 0) goto <D.26197>; else goto <D.26198>;
    <D.26197>:
    ctx->valid = 0;
    <D.26198>:
    <D.26193>:
    monoeg_g_free (expected_name);
    monoeg_g_free (stack_name);
  }
  <D.26191>:
  <D.26188>:
}


get_boxable_mono_type (struct VerifyContext * ctx, int token, const char * opcode)
{
  struct MonoType * D.26202;
  long unsigned int D.26203;
  long unsigned int D.26204;
  unsigned char D.26207;
  unsigned int D.26210;
  gchar * D.26211;
  struct GSList * D.26212;
  struct GSList * D.26213;
  gchar * D.26216;
  struct GSList * D.26217;
  int D.26222;
  int D.26224;
  int D.26225;
  gchar * D.26226;
  struct GSList * D.26227;
  int D.26228;
  gchar * D.26233;
  struct GSList * D.26234;
  struct MonoGenericContainer * D.26235;
  gchar * D.26243;
  struct GSList * D.26244;
  struct MonoType * type;
  struct MonoClass * class;

  type = verifier_load_type (ctx, token, opcode);
  if (type == 0B) goto <D.26200>; else goto <D.26201>;
  <D.26200>:
  D.26202 = 0B;
  return D.26202;
  <D.26201>:
  D.26203 = BIT_FIELD_REF <*type, 64, 64>;
  D.26204 = D.26203 & 8589934592;
  if (D.26204 != 0) goto <D.26205>; else goto <D.26206>;
  <D.26205>:
  D.26207 = type->type;
  if (D.26207 != 22) goto <D.26208>; else goto <D.26209>;
  <D.26208>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (24);
    vinfo->info.status = 1;
    D.26210 = ctx->ip_offset;
    D.26211 = monoeg_g_strdup_printf ("Invalid use of byref type for %s at 0x%04x", opcode, D.26210);
    vinfo->info.message = D.26211;
    vinfo->exception_type = 3;
    D.26212 = ctx->list;
    D.26213 = monoeg_g_slist_prepend (D.26212, vinfo);
    ctx->list = D.26213;
  }
  ctx->valid = 0;
  D.26202 = 0B;
  return D.26202;
  <D.26209>:
  <D.26206>:
  D.26207 = type->type;
  if (D.26207 == 1) goto <D.26214>; else goto <D.26215>;
  <D.26214>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (24);
    vinfo->info.status = 1;
    D.26210 = ctx->ip_offset;
    D.26216 = monoeg_g_strdup_printf ("Invalid use of void type for %s at 0x%04x", opcode, D.26210);
    vinfo->info.message = D.26216;
    vinfo->exception_type = 3;
    D.26212 = ctx->list;
    D.26217 = monoeg_g_slist_prepend (D.26212, vinfo);
    ctx->list = D.26217;
  }
  ctx->valid = 0;
  D.26202 = 0B;
  return D.26202;
  <D.26215>:
  D.26207 = type->type;
  if (D.26207 == 22) goto <D.26218>; else goto <D.26219>;
  <D.26218>:
  D.26222 = ctx->verifiable;
  if (D.26222 != 0) goto <D.26220>; else goto <D.26223>;
  <D.26223>:
  D.26224 = ctx->level;
  D.26225 = D.26224 & 128;
  if (D.26225 != 0) goto <D.26220>; else goto <D.26221>;
  <D.26220>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (24);
    vinfo->info.status = 8;
    D.26210 = ctx->ip_offset;
    D.26226 = monoeg_g_strdup_printf ("Invalid use of typedbyref for %s at 0x%04x", opcode, D.26210);
    vinfo->info.message = D.26226;
    vinfo->exception_type = 4;
    D.26212 = ctx->list;
    D.26227 = monoeg_g_slist_prepend (D.26212, vinfo);
    ctx->list = D.26227;
  }
  ctx->verifiable = 0;
  D.26224 = ctx->level;
  D.26228 = D.26224 & 16;
  if (D.26228 != 0) goto <D.26229>; else goto <D.26230>;
  <D.26229>:
  ctx->valid = 0;
  <D.26230>:
  <D.26221>:
  <D.26219>:
  class = mono_class_from_mono_type (type);
  if (class == 0B) goto <D.26231>; else goto <D.26232>;
  <D.26231>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (24);
    vinfo->info.status = 1;
    D.26210 = ctx->ip_offset;
    D.26233 = monoeg_g_strdup_printf ("Could not retrieve type token for %s at 0x%04x", opcode, D.26210);
    vinfo->info.message = D.26233;
    vinfo->exception_type = 3;
    D.26212 = ctx->list;
    D.26234 = monoeg_g_slist_prepend (D.26212, vinfo);
    ctx->list = D.26234;
  }
  ctx->valid = 0;
  <D.26232>:
  D.26235 = class->generic_container;
  if (D.26235 != 0B) goto <D.26236>; else goto <D.26237>;
  <D.26236>:
  D.26207 = type->type;
  if (D.26207 != 21) goto <D.26238>; else goto <D.26239>;
  <D.26238>:
  D.26222 = ctx->verifiable;
  if (D.26222 != 0) goto <D.26240>; else goto <D.26242>;
  <D.26242>:
  D.26224 = ctx->level;
  D.26225 = D.26224 & 128;
  if (D.26225 != 0) goto <D.26240>; else goto <D.26241>;
  <D.26240>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (24);
    vinfo->info.status = 8;
    D.26210 = ctx->ip_offset;
    D.26243 = monoeg_g_strdup_printf ("Cannot use the generic type definition in a boxable type position for %s at 0x%04x", opcode, D.26210);
    vinfo->info.message = D.26243;
    vinfo->exception_type = 4;
    D.26212 = ctx->list;
    D.26244 = monoeg_g_slist_prepend (D.26212, vinfo);
    ctx->list = D.26244;
  }
  ctx->verifiable = 0;
  D.26224 = ctx->level;
  D.26228 = D.26224 & 16;
  if (D.26228 != 0) goto <D.26245>; else goto <D.26246>;
  <D.26245>:
  ctx->valid = 0;
  <D.26246>:
  <D.26241>:
  <D.26239>:
  <D.26237>:
  check_unverifiable_type (ctx, type);
  D.26202 = type;
  return D.26202;
}


check_underflow (struct VerifyContext * ctx, int size)
{
  short unsigned int D.26248;
  int D.26249;
  unsigned int D.26252;
  gchar * D.26253;
  struct GSList * D.26254;
  struct GSList * D.26255;
  int D.26256;

  D.26248 = ctx->eval.size;
  D.26249 = (int) D.26248;
  if (D.26249 < size) goto <D.26250>; else goto <D.26251>;
  <D.26250>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (24);
    vinfo->info.status = 1;
    D.26248 = ctx->eval.size;
    D.26249 = (int) D.26248;
    D.26252 = ctx->ip_offset;
    D.26253 = monoeg_g_strdup_printf ("Stack underflow, required %d, but have %d at 0x%04x", size, D.26249, D.26252);
    vinfo->info.message = D.26253;
    vinfo->exception_type = 3;
    D.26254 = ctx->list;
    D.26255 = monoeg_g_slist_prepend (D.26254, vinfo);
    ctx->list = D.26255;
  }
  ctx->valid = 0;
  D.26256 = 0;
  return D.26256;
  <D.26251>:
  D.26256 = 1;
  return D.26256;
}


is_correct_rethrow (struct MonoMethodHeader * header, guint offset)
{
  struct MonoExceptionClause * D.26258;
  long unsigned int D.26259;
  long unsigned int D.26260;
  unsigned int D.26261;
  unsigned int D.26264;
  unsigned int D.26265;
  int D.26268;
  unsigned int D.26269;
  unsigned int D.26272;
  <unnamed-unsigned:15> D.26277;
  int D.26278;
  int i;
  struct MonoExceptionClause * clause;

  i = 0;
  goto <D.18348>;
  <D.18347>:
  D.26258 = header->clauses;
  D.26259 = (long unsigned int) i;
  D.26260 = D.26259 * 32;
  clause = D.26258 + D.26260;
  D.26261 = clause->handler_offset;
  if (D.26261 <= offset) goto <D.26262>; else goto <D.26263>;
  <D.26262>:
  D.26261 = clause->handler_offset;
  D.26264 = clause->handler_len;
  D.26265 = D.26261 + D.26264;
  if (D.26265 > offset) goto <D.26266>; else goto <D.26267>;
  <D.26266>:
  D.26268 = 1;
  return D.26268;
  <D.26267>:
  <D.26263>:
  D.26269 = clause->flags;
  if (D.26269 == 1) goto <D.26270>; else goto <D.26271>;
  <D.26270>:
  D.26272 = clause->data.filter_offset;
  if (D.26272 <= offset) goto <D.26273>; else goto <D.26274>;
  <D.26273>:
  D.26261 = clause->handler_offset;
  if (D.26261 > offset) goto <D.26275>; else goto <D.26276>;
  <D.26275>:
  D.26268 = 1;
  return D.26268;
  <D.26276>:
  <D.26274>:
  <D.26271>:
  i = i + 1;
  <D.18348>:
  D.26277 = header->num_clauses;
  D.26278 = (int) D.26277;
  if (D.26278 > i) goto <D.18347>; else goto <D.18349>;
  <D.18349>:
  D.26268 = 0;
  return D.26268;
}


do_sizeof (struct VerifyContext * ctx, int token)
{
  long unsigned int D.26282;
  long unsigned int D.26283;
  unsigned char D.26286;
  unsigned int D.26289;
  gchar * D.26290;
  struct GSList * D.26291;
  struct GSList * D.26292;
  gchar * D.26295;
  struct GSList * D.26296;
  int D.26297;
  struct ILStackDesc * D.26300;
  struct MonoClass * D.26301;
  struct MonoType * D.26302;
  struct MonoType * type;

  type = verifier_load_type (ctx, token, "sizeof");
  if (type == 0B) goto <D.26280>; else goto <D.26281>;
  <D.26280>:
  return;
  <D.26281>:
  D.26282 = BIT_FIELD_REF <*type, 64, 64>;
  D.26283 = D.26282 & 8589934592;
  if (D.26283 != 0) goto <D.26284>; else goto <D.26285>;
  <D.26284>:
  D.26286 = type->type;
  if (D.26286 != 22) goto <D.26287>; else goto <D.26288>;
  <D.26287>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (24);
    vinfo->info.status = 1;
    D.26289 = ctx->ip_offset;
    D.26290 = monoeg_g_strdup_printf ("Invalid use of byref type at 0x%04x", D.26289);
    vinfo->info.message = D.26290;
    vinfo->exception_type = 3;
    D.26291 = ctx->list;
    D.26292 = monoeg_g_slist_prepend (D.26291, vinfo);
    ctx->list = D.26292;
  }
  ctx->valid = 0;
  return;
  <D.26288>:
  <D.26285>:
  D.26286 = type->type;
  if (D.26286 == 1) goto <D.26293>; else goto <D.26294>;
  <D.26293>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (24);
    vinfo->info.status = 1;
    D.26289 = ctx->ip_offset;
    D.26295 = monoeg_g_strdup_printf ("Invalid use of void type at 0x%04x", D.26289);
    vinfo->info.message = D.26295;
    vinfo->exception_type = 3;
    D.26291 = ctx->list;
    D.26296 = monoeg_g_slist_prepend (D.26291, vinfo);
    ctx->list = D.26296;
  }
  ctx->valid = 0;
  return;
  <D.26294>:
  D.26297 = check_overflow (ctx);
  if (D.26297 != 0) goto <D.26298>; else goto <D.26299>;
  <D.26298>:
  D.26300 = stack_push (ctx);
  D.26301 = mono_defaults.uint32_class;
  D.26302 = &D.26301->byval_arg;
  set_stack_value (ctx, D.26300, D.26302, 0);
  <D.26299>:
}


do_refanytype (struct VerifyContext * ctx)
{
  int D.26304;
  int D.26309;
  struct MonoType * D.26311;
  unsigned char D.26312;
  const char * D.26313;
  unsigned int D.26314;
  gchar * D.26315;
  struct GSList * D.26316;
  struct GSList * D.26317;
  struct ILStackDesc * D.26318;
  struct MonoClass * D.26319;
  struct MonoType * D.26320;
  struct ILStackDesc * top;

  D.26304 = check_underflow (ctx, 1);
  if (D.26304 == 0) goto <D.26305>; else goto <D.26306>;
  <D.26305>:
  return;
  <D.26306>:
  top = stack_pop (ctx);
  D.26309 = top->stype;
  if (D.26309 != 5) goto <D.26307>; else goto <D.26310>;
  <D.26310>:
  D.26311 = top->type;
  D.26312 = D.26311->type;
  if (D.26312 != 22) goto <D.26307>; else goto <D.26308>;
  <D.26307>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (24);
    vinfo->info.status = 1;
    D.26313 = stack_slot_get_name (top);
    D.26314 = ctx->ip_offset;
    D.26315 = monoeg_g_strdup_printf ("Expected a typedref as argument for refanytype, but found %s at 0x%04x", D.26313, D.26314);
    vinfo->info.message = D.26315;
    vinfo->exception_type = 3;
    D.26316 = ctx->list;
    D.26317 = monoeg_g_slist_prepend (D.26316, vinfo);
    ctx->list = D.26317;
  }
  ctx->valid = 0;
  <D.26308>:
  D.26318 = stack_push (ctx);
  D.26319 = mono_defaults.typehandle_class;
  D.26320 = &D.26319->byval_arg;
  set_stack_value (ctx, D.26318, D.26320, 0);
}


mono_method_is_constructor (struct MonoMethod * method)
{
  gboolean D.26322;
  int iftmp.111;
  short unsigned int D.26326;
  unsigned int D.26327;
  unsigned int D.26328;
  const char * D.26330;
  int D.26331;

  D.26326 = method->flags;
  D.26327 = (unsigned int) D.26326;
  D.26328 = D.26327 & 6160;
  if (D.26328 == 6144) goto <D.26329>; else goto <D.26324>;
  <D.26329>:
  D.26330 = method->name;
  D.26331 = strcmp (".ctor", D.26330);
  if (D.26331 == 0) goto <D.26332>; else goto <D.26324>;
  <D.26332>:
  iftmp.111 = 1;
  goto <D.26325>;
  <D.26324>:
  iftmp.111 = 0;
  <D.26325>:
  D.26322 = iftmp.111;
  return D.26322;
}


mono_verify_corlib ()
{
  char * D.26334;

  D.26334 = 0B;
  return D.26334;
}


__attribute__((visibility ("hidden")))
mono_verifier_is_enabled_for_method (struct MonoMethod * method)
{
  gboolean D.26336;
  int iftmp.112;
  struct MonoClass * D.26341;
  int D.26342;
  long unsigned int D.26344;
  long unsigned int D.26345;

  D.26341 = method->klass;
  D.26342 = mono_verifier_is_enabled_for_class (D.26341);
  if (D.26342 != 0) goto <D.26343>; else goto <D.26338>;
  <D.26343>:
  D.26344 = BIT_FIELD_REF <*method, 64, 256>;
  D.26345 = D.26344 & 4467570830351532032;
  if (D.26345 == 0) goto <D.26339>; else goto <D.26346>;
  <D.26346>:
  D.26344 = BIT_FIELD_REF <*method, 64, 256>;
  D.26345 = D.26344 & 4467570830351532032;
  if (D.26345 == 2449958197289549824) goto <D.26339>; else goto <D.26338>;
  <D.26339>:
  iftmp.112 = 1;
  goto <D.26340>;
  <D.26338>:
  iftmp.112 = 0;
  <D.26340>:
  D.26336 = iftmp.112;
  return D.26336;
}


__attribute__((visibility ("hidden")))
mono_verifier_is_enabled_for_class (struct MonoClass * klass)
{
  gboolean D.26348;
  int iftmp.113;
  int verify_all.114;
  <unnamed type> verifier_mode.115;
  struct MonoImage * D.26358;
  struct MonoAssembly * D.26359;
  unsigned char D.26361;
  struct MonoImage * D.26362;

  verify_all.114 = verify_all;
  if (verify_all.114 != 0) goto <D.26350>; else goto <D.26355>;
  <D.26355>:
  verifier_mode.115 = verifier_mode;
  if (verifier_mode.115 != 0) goto <D.26357>; else goto <D.26351>;
  <D.26357>:
  D.26358 = klass->image;
  D.26359 = D.26358->assembly;
  if (D.26359 == 0B) goto <D.26352>; else goto <D.26360>;
  <D.26360>:
  D.26358 = klass->image;
  D.26359 = D.26358->assembly;
  D.26361 = D.26359->in_gac;
  if (D.26361 == 0) goto <D.26352>; else goto <D.26351>;
  <D.26352>:
  D.26358 = klass->image;
  D.26362 = mono_defaults.corlib;
  if (D.26358 != D.26362) goto <D.26350>; else goto <D.26351>;
  <D.26350>:
  iftmp.113 = 1;
  goto <D.26353>;
  <D.26351>:
  iftmp.113 = 0;
  <D.26353>:
  D.26348 = iftmp.113;
  return D.26348;
}


__attribute__((visibility ("hidden")))
mono_verifier_is_enabled_for_image (struct MonoImage * image)
{
  gboolean D.26364;
  int iftmp.116;
  int verify_all.117;
  <unnamed type> verifier_mode.118;

  verify_all.117 = verify_all;
  if (verify_all.117 != 0) goto <D.26366>; else goto <D.26370>;
  <D.26370>:
  verifier_mode.118 = verifier_mode;
  if (verifier_mode.118 != 0) goto <D.26366>; else goto <D.26367>;
  <D.26366>:
  iftmp.116 = 1;
  goto <D.26368>;
  <D.26367>:
  iftmp.116 = 0;
  <D.26368>:
  D.26364 = iftmp.116;
  return D.26364;
}


__attribute__((visibility ("hidden")))
mono_verifier_is_method_full_trust (struct MonoMethod * method)
{
  gboolean D.26373;
  int iftmp.119;
  struct MonoClass * D.26377;
  int D.26378;
  long unsigned int D.26380;
  long unsigned int D.26381;

  D.26377 = method->klass;
  D.26378 = mono_verifier_is_class_full_trust (D.26377);
  if (D.26378 != 0) goto <D.26379>; else goto <D.26375>;
  <D.26379>:
  D.26380 = BIT_FIELD_REF <*method, 64, 256>;
  D.26381 = D.26380 & 18014398509481984;
  if (D.26381 == 0) goto <D.26382>; else goto <D.26375>;
  <D.26382>:
  iftmp.119 = 1;
  goto <D.26376>;
  <D.26375>:
  iftmp.119 = 0;
  <D.26376>:
  D.26373 = iftmp.119;
  return D.26373;
}


__attribute__((visibility ("hidden")))
mono_verifier_is_class_full_trust (struct MonoClass * klass)
{
  int iftmp.120;
  <unnamed type> D.26385;
  int iftmp.121;
  struct MonoImage * D.26391;
  struct MonoAssembly * D.26392;
  unsigned char D.26394;
  int verify_all.122;
  <unnamed type> verifier_mode.123;
  gboolean D.26403;
  int iftmp.124;
  struct MonoImage * D.26409;
  int iftmp.125;
  gboolean trusted_location;

  D.26385 = mono_security_get_mode ();
  if (D.26385 != 1) goto <D.26386>; else goto <D.26387>;
  <D.26386>:
  D.26391 = klass->image;
  D.26392 = D.26391->assembly;
  if (D.26392 != 0B) goto <D.26393>; else goto <D.26389>;
  <D.26393>:
  D.26391 = klass->image;
  D.26392 = D.26391->assembly;
  D.26394 = D.26392->in_gac;
  if (D.26394 != 0) goto <D.26395>; else goto <D.26389>;
  <D.26395>:
  iftmp.121 = 1;
  goto <D.26390>;
  <D.26389>:
  iftmp.121 = 0;
  <D.26390>:
  iftmp.120 = iftmp.121;
  goto <D.26396>;
  <D.26387>:
  D.26391 = klass->image;
  iftmp.120 = mono_security_core_clr_is_platform_image (D.26391);
  <D.26396>:
  trusted_location = iftmp.120;
  verify_all.122 = verify_all;
  if (verify_all.122 != 0) goto <D.26398>; else goto <D.26399>;
  <D.26398>:
  verifier_mode.123 = verifier_mode;
  if (verifier_mode.123 == 0) goto <D.26401>; else goto <D.26402>;
  <D.26401>:
  if (trusted_location != 0) goto <D.26405>; else goto <D.26408>;
  <D.26408>:
  D.26391 = klass->image;
  D.26409 = mono_defaults.corlib;
  if (D.26391 == D.26409) goto <D.26405>; else goto <D.26406>;
  <D.26405>:
  iftmp.124 = 1;
  goto <D.26407>;
  <D.26406>:
  iftmp.124 = 0;
  <D.26407>:
  D.26403 = iftmp.124;
  return D.26403;
  <D.26402>:
  <D.26399>:
  verifier_mode.123 = verifier_mode;
  if (verifier_mode.123 <= 1) goto <D.26411>; else goto <D.26414>;
  <D.26414>:
  if (trusted_location != 0) goto <D.26411>; else goto <D.26415>;
  <D.26415>:
  D.26391 = klass->image;
  D.26409 = mono_defaults.corlib;
  if (D.26391 == D.26409) goto <D.26411>; else goto <D.26412>;
  <D.26411>:
  iftmp.125 = 1;
  goto <D.26413>;
  <D.26412>:
  iftmp.125 = 0;
  <D.26413>:
  D.26403 = iftmp.125;
  return D.26403;
}


__attribute__((visibility ("hidden")))
mono_method_verify_with_current_settings (struct MonoMethod * method, gboolean skip_visibility, gboolean is_fulltrust)
{
  struct GSList * D.26417;
  int iftmp.126;
  <unnamed type> verifier_mode.127;
  int iftmp.128;
  int D.26427;
  int D.26429;
  int iftmp.129;
  int D.26434;

  verifier_mode.127 = verifier_mode;
  if (verifier_mode.127 != 3) goto <D.26420>; else goto <D.26421>;
  <D.26420>:
  iftmp.126 = 32;
  goto <D.26422>;
  <D.26421>:
  iftmp.126 = 0;
  <D.26422>:
  if (is_fulltrust == 0) goto <D.26426>; else goto <D.26424>;
  <D.26426>:
  D.26427 = mono_verifier_is_method_full_trust (method);
  if (D.26427 == 0) goto <D.26428>; else goto <D.26424>;
  <D.26428>:
  iftmp.128 = 16;
  goto <D.26425>;
  <D.26424>:
  iftmp.128 = 0;
  <D.26425>:
  D.26429 = iftmp.126 | iftmp.128;
  if (skip_visibility != 0) goto <D.26431>; else goto <D.26432>;
  <D.26431>:
  iftmp.129 = 64;
  goto <D.26433>;
  <D.26432>:
  iftmp.129 = 0;
  <D.26433>:
  D.26434 = D.26429 | iftmp.129;
  D.26417 = mono_method_verify (method, D.26434);
  return D.26417;
}


__attribute__((visibility ("hidden")))
mono_verifier_verify_class (struct MonoClass * class)
{
  struct MonoClass * D.26436;
  struct MonoClass * D.26439;
  unsigned int D.26442;
  unsigned int D.26443;
  unsigned char D.26446;
  struct MonoImage * D.26451;
  long unsigned int D.26452;
  long unsigned int D.26453;
  unsigned int D.26456;
  gboolean D.26459;
  unsigned int D.26464;
  unsigned int D.26465;
  unsigned char D.26467;
  struct MonoGenericClass * D.26469;
  struct MonoGenericContainer * D.26472;
  struct MonoGenericClass * D.26475;
  struct MonoGenericContainer * D.26480;
  struct MonoType * D.26483;
  int D.26484;
  unsigned int D.26489;
  int D.26494;
  int D.26497;
  int D.26502;
  int D.26507;
  long unsigned int D.26510;
  long unsigned int D.26511;
  int D.26514;
  int D.26517;

  D.26436 = class->parent;
  if (D.26436 == 0B) goto <D.26437>; else goto <D.26438>;
  <D.26437>:
  D.26439 = mono_defaults.object_class;
  if (D.26439 != class) goto <D.26440>; else goto <D.26441>;
  <D.26440>:
  D.26442 = class->flags;
  D.26443 = D.26442 & 32;
  if (D.26443 == 0) goto <D.26444>; else goto <D.26445>;
  <D.26444>:
  D.26446 = class->byval_arg.type;
  if (D.26446 != 19) goto <D.26447>; else goto <D.26448>;
  <D.26447>:
  D.26446 = class->byval_arg.type;
  if (D.26446 != 30) goto <D.26449>; else goto <D.26450>;
  <D.26449>:
  D.26451 = class->image;
  D.26452 = BIT_FIELD_REF <*D.26451, 64, 192>;
  D.26453 = D.26452 & 268435456;
  if (D.26453 == 0) goto <D.26454>; else goto <D.26455>;
  <D.26454>:
  D.26456 = class->type_token;
  if (D.26456 != 33554433) goto <D.26457>; else goto <D.26458>;
  <D.26457>:
  D.26459 = 0;
  return D.26459;
  <D.26458>:
  <D.26455>:
  <D.26450>:
  <D.26448>:
  <D.26445>:
  <D.26441>:
  <D.26438>:
  D.26436 = class->parent;
  if (D.26436 != 0B) goto <D.26460>; else goto <D.26461>;
  <D.26460>:
  D.26436 = class->parent;
  D.26464 = D.26436->flags;
  D.26465 = D.26464 & 32;
  if (D.26465 != 0) goto <D.26462>; else goto <D.26466>;
  <D.26466>:
  D.26436 = class->parent;
  D.26467 = D.26436->byval_arg.type;
  if (D.26467 == 19) goto <D.26462>; else goto <D.26468>;
  <D.26468>:
  D.26436 = class->parent;
  D.26467 = D.26436->byval_arg.type;
  if (D.26467 == 30) goto <D.26462>; else goto <D.26463>;
  <D.26462>:
  D.26459 = 0;
  return D.26459;
  <D.26463>:
  D.26469 = class->generic_class;
  if (D.26469 == 0B) goto <D.26470>; else goto <D.26471>;
  <D.26470>:
  D.26436 = class->parent;
  D.26472 = D.26436->generic_container;
  if (D.26472 != 0B) goto <D.26473>; else goto <D.26474>;
  <D.26473>:
  D.26459 = 0;
  return D.26459;
  <D.26474>:
  <D.26471>:
  D.26436 = class->parent;
  D.26475 = D.26436->generic_class;
  if (D.26475 != 0B) goto <D.26476>; else goto <D.26477>;
  <D.26476>:
  D.26469 = class->generic_class;
  if (D.26469 == 0B) goto <D.26478>; else goto <D.26479>;
  <D.26478>:
  {
    struct MonoGenericContext * context;

    context = mono_class_get_context (class);
    D.26480 = class->generic_container;
    if (D.26480 != 0B) goto <D.26481>; else goto <D.26482>;
    <D.26481>:
    D.26480 = class->generic_container;
    context = &D.26480->context;
    <D.26482>:
    D.26436 = class->parent;
    D.26483 = &D.26436->byval_arg;
    D.26484 = mono_type_is_valid_type_in_context (D.26483, context);
    if (D.26484 == 0) goto <D.26485>; else goto <D.26486>;
    <D.26485>:
    D.26459 = 0;
    return D.26459;
    <D.26486>:
  }
  <D.26479>:
  <D.26477>:
  <D.26461>:
  D.26480 = class->generic_container;
  if (D.26480 != 0B) goto <D.26487>; else goto <D.26488>;
  <D.26487>:
  D.26442 = class->flags;
  D.26489 = D.26442 & 24;
  if (D.26489 == 16) goto <D.26490>; else goto <D.26491>;
  <D.26490>:
  D.26459 = 0;
  return D.26459;
  <D.26491>:
  <D.26488>:
  D.26480 = class->generic_container;
  if (D.26480 != 0B) goto <D.26492>; else goto <D.26493>;
  <D.26492>:
  D.26494 = verify_generic_parameters (class);
  if (D.26494 == 0) goto <D.26495>; else goto <D.26496>;
  <D.26495>:
  D.26459 = 0;
  return D.26459;
  <D.26496>:
  <D.26493>:
  D.26497 = verify_class_for_overlapping_reference_fields (class);
  if (D.26497 == 0) goto <D.26498>; else goto <D.26499>;
  <D.26498>:
  D.26459 = 0;
  return D.26459;
  <D.26499>:
  D.26469 = class->generic_class;
  if (D.26469 != 0B) goto <D.26500>; else goto <D.26501>;
  <D.26500>:
  D.26502 = mono_class_is_valid_generic_instantiation (0B, class);
  if (D.26502 == 0) goto <D.26503>; else goto <D.26504>;
  <D.26503>:
  D.26459 = 0;
  return D.26459;
  <D.26504>:
  <D.26501>:
  D.26469 = class->generic_class;
  if (D.26469 == 0B) goto <D.26505>; else goto <D.26506>;
  <D.26505>:
  D.26507 = verify_class_fields (class);
  if (D.26507 == 0) goto <D.26508>; else goto <D.26509>;
  <D.26508>:
  D.26459 = 0;
  return D.26459;
  <D.26509>:
  <D.26506>:
  D.26510 = BIT_FIELD_REF <*class, 64, 256>;
  D.26511 = D.26510 & 1152921504606846976;
  if (D.26511 != 0) goto <D.26512>; else goto <D.26513>;
  <D.26512>:
  D.26514 = verify_valuetype_layout (class);
  if (D.26514 == 0) goto <D.26515>; else goto <D.26516>;
  <D.26515>:
  D.26459 = 0;
  return D.26459;
  <D.26516>:
  <D.26513>:
  D.26517 = verify_interfaces (class);
  if (D.26517 == 0) goto <D.26518>; else goto <D.26519>;
  <D.26518>:
  D.26459 = 0;
  return D.26459;
  <D.26519>:
  D.26459 = 1;
  return D.26459;
}


verify_generic_parameters (struct MonoClass * class)
{
  <unnamed-signed:31> D.26521;
  unsigned int D.26522;
  struct MonoGenericParamFull * D.26523;
  long unsigned int D.26524;
  long unsigned int D.26525;
  struct MonoGenericParamFull * D.26526;
  struct MonoClass * * D.26527;
  long unsigned int D.26530;
  long unsigned int D.26531;
  unsigned int i.130;
  unsigned int D.26533;
  long unsigned int D.26534;
  long unsigned int D.26535;
  int D.26536;
  struct MonoGenericContext * D.26538;
  int D.26539;
  int D.26541;
  int D.26544;
  struct MonoGenericClass * D.26546;
  int D.26549;
  struct MonoClass * D.26551;
  int D.26552;
  gboolean D.26553;
  int i;
  struct MonoGenericContainer * gc;
  struct MonoBitSet * used_args;
  void fail = <<< error >>>;

  gc = class->generic_container;
  D.26521 = gc->type_argc;
  D.26522 = (unsigned int) D.26521;
  used_args = mono_bitset_new (D.26522, 0);
  i = 0;
  goto <D.20038>;
  <D.20037>:
  {
    struct MonoGenericParamInfo * param_info;
    struct MonoClass * * constraints;

    D.26523 = gc->type_params;
    D.26524 = (long unsigned int) i;
    D.26525 = D.26524 * 56;
    D.26526 = D.26523 + D.26525;
    param_info = &D.26526->info;
    D.26527 = param_info->constraints;
    if (D.26527 == 0B) goto <D.26528>; else goto <D.26529>;
    <D.26528>:
    // predicted unlikely by continue predictor.
    goto <D.20030>;
    <D.26529>:
    mono_bitset_clear_all (used_args);
    D.26524 = (long unsigned int) i;
    D.26530 = D.26524 / 64;
    D.26531 = used_args->data[D.26530];
    i.130 = (unsigned int) i;
    D.26533 = i.130 & 63;
    D.26534 = 1 << D.26533;
    D.26535 = D.26531 | D.26534;
    used_args->data[D.26530] = D.26535;
    constraints = param_info->constraints;
    goto <D.20035>;
    <D.20034>:
    {
      struct MonoClass * ctr;
      struct MonoType * constraint_type;

      ctr = *constraints;
      constraint_type = &ctr->byval_arg;
      D.26536 = mono_class_can_access_class (class, ctr);
      if (D.26536 == 0) goto fail; else goto <D.26537>;
      <D.26537>:
      D.26538 = &gc->context;
      D.26539 = mono_type_is_valid_type_in_context (constraint_type, D.26538);
      if (D.26539 == 0) goto fail; else goto <D.26540>;
      <D.26540>:
      D.26541 = mono_type_is_generic_argument (constraint_type);
      if (D.26541 != 0) goto <D.26542>; else goto <D.26543>;
      <D.26542>:
      D.26544 = recursive_mark_constraint_args (used_args, gc, constraint_type);
      if (D.26544 == 0) goto fail; else goto <D.26545>;
      <D.26545>:
      <D.26543>:
      D.26546 = ctr->generic_class;
      if (D.26546 != 0B) goto <D.26547>; else goto <D.26548>;
      <D.26547>:
      D.26549 = mono_class_is_valid_generic_instantiation (0B, ctr);
      if (D.26549 == 0) goto fail; else goto <D.26550>;
      <D.26550>:
      <D.26548>:
    }
    constraints = constraints + 8;
    <D.20035>:
    D.26551 = *constraints;
    if (D.26551 != 0B) goto <D.20034>; else goto <D.20036>;
    <D.20036>:
  }
  <D.20030>:
  i = i + 1;
  <D.20038>:
  D.26521 = gc->type_argc;
  D.26552 = (int) D.26521;
  if (D.26552 > i) goto <D.20037>; else goto <D.20039>;
  <D.20039>:
  mono_bitset_free (used_args);
  D.26553 = 1;
  return D.26553;
  fail:
  mono_bitset_free (used_args);
  D.26553 = 0;
  return D.26553;
}


recursive_mark_constraint_args (struct MonoBitSet * used_args, struct MonoGenericContainer * gc, struct MonoType * type)
{
  int D.26555;
  _Bool D.26556;
  long int D.26557;
  long int D.26558;
  struct MonoGenericParam * D.26561;
  short unsigned int D.26562;
  long unsigned int D.26563;
  long unsigned int D.26564;
  long unsigned int D.26565;
  unsigned int idx.131;
  unsigned int D.26567;
  long unsigned int D.26568;
  long unsigned int D.26569;
  gboolean D.26572;
  long unsigned int D.26573;
  long unsigned int D.26574;
  long unsigned int D.26575;
  long unsigned int D.26576;
  struct MonoGenericParamFull * D.26577;
  long unsigned int D.26578;
  struct MonoGenericParamFull * D.26579;
  struct MonoClass * * D.26580;
  int D.26583;
  int D.26586;
  struct MonoClass * D.26589;
  int idx;
  struct MonoClass * * constraints;
  struct MonoGenericParamInfo * param_info;

  D.26555 = mono_type_is_generic_argument (type);
  D.26556 = D.26555 == 0;
  D.26557 = (long int) D.26556;
  D.26558 = __builtin_expect (D.26557, 0);
  if (D.26558 != 0) goto <D.26559>; else goto <D.26560>;
  <D.26559>:
  monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "verify.c", 6206, "mono_type_is_generic_argument (type)");
  <D.26560>:
  D.26561 = type->data.generic_param;
  D.26562 = D.26561->num;
  idx = (int) D.26562;
  D.26563 = (long unsigned int) idx;
  D.26564 = D.26563 / 64;
  D.26565 = used_args->data[D.26564];
  idx.131 = (unsigned int) idx;
  D.26567 = idx.131 & 63;
  D.26568 = D.26565 >> D.26567;
  D.26569 = D.26568 & 1;
  if (D.26569 != 0) goto <D.26570>; else goto <D.26571>;
  <D.26570>:
  D.26572 = 0;
  return D.26572;
  <D.26571>:
  D.26563 = (long unsigned int) idx;
  D.26573 = D.26563 / 64;
  D.26574 = used_args->data[D.26573];
  idx.131 = (unsigned int) idx;
  D.26567 = idx.131 & 63;
  D.26575 = 1 << D.26567;
  D.26576 = D.26574 | D.26575;
  used_args->data[D.26573] = D.26576;
  D.26577 = gc->type_params;
  D.26563 = (long unsigned int) idx;
  D.26578 = D.26563 * 56;
  D.26579 = D.26577 + D.26578;
  param_info = &D.26579->info;
  D.26580 = param_info->constraints;
  if (D.26580 == 0B) goto <D.26581>; else goto <D.26582>;
  <D.26581>:
  D.26572 = 1;
  return D.26572;
  <D.26582>:
  constraints = param_info->constraints;
  goto <D.20020>;
  <D.20019>:
  {
    struct MonoClass * ctr;
    struct MonoType * constraint_type;

    ctr = *constraints;
    constraint_type = &ctr->byval_arg;
    D.26583 = mono_type_is_generic_argument (constraint_type);
    if (D.26583 != 0) goto <D.26584>; else goto <D.26585>;
    <D.26584>:
    D.26586 = recursive_mark_constraint_args (used_args, gc, constraint_type);
    if (D.26586 == 0) goto <D.26587>; else goto <D.26588>;
    <D.26587>:
    D.26572 = 0;
    return D.26572;
    <D.26588>:
    <D.26585>:
  }
  constraints = constraints + 8;
  <D.20020>:
  D.26589 = *constraints;
  if (D.26589 != 0B) goto <D.20019>; else goto <D.20021>;
  <D.20021>:
  D.26572 = 1;
  return D.26572;
}


verify_class_for_overlapping_reference_fields (struct MonoClass * class)
{
  unsigned int D.26591;
  unsigned int D.26592;
  gboolean D.26595;
  struct MonoType * D.26596;
  int D.26597;
  _Bool D.26598;
  short unsigned int D.26602;
  int D.26603;
  int D.26604;
  const char * D.26606;
  int D.26607;
  int D.26608;
  struct MonoClassField * D.26609;
  long unsigned int D.26610;
  long unsigned int D.26611;
  struct MonoType * D.26616;
  short unsigned int D.26617;
  int D.26618;
  int D.26619;
  const char * D.26621;
  int D.26622;
  int D.26624;
  int D.26625;
  int D.26628;
  int D.26631;
  int D.26632;
  unsigned int D.26642;
  unsigned int j.132;
  int i;
  int j;
  void * iter;
  struct MonoClassField * field;
  gboolean is_fulltrust;

  try
    {
      i = 0;
      iter = 0B;
      is_fulltrust = mono_verifier_is_class_full_trust (class);
      D.26591 = class->flags;
      D.26592 = D.26591 & 24;
      if (D.26592 != 16) goto <D.26593>; else goto <D.26594>;
      <D.26593>:
      D.26595 = 1;
      return D.26595;
      <D.26594>:
      goto <D.19957>;
      <D.19964>:
      {
        int fieldEnd;
        gboolean is_valuetype;

        fieldEnd = get_field_end (field);
        D.26596 = field->type;
        D.26597 = mono_type_is_reference (D.26596);
        D.26598 = D.26597 == 0;
        is_valuetype = (gboolean) D.26598;
        i = i + 1;
        D.26596 = field->type;
        D.26602 = D.26596->attrs;
        D.26603 = (int) D.26602;
        D.26604 = D.26603 & 1536;
        if (D.26604 != 0) goto <D.26605>; else goto <D.26599>;
        <D.26605>:
        D.26606 = mono_field_get_name (field);
        D.26607 = strcmp (D.26606, "_Deleted");
        if (D.26607 == 0) goto <D.26600>; else goto <D.26599>;
        <D.26599>:
        D.26596 = field->type;
        D.26602 = D.26596->attrs;
        D.26603 = (int) D.26602;
        D.26608 = D.26603 & 16;
        if (D.26608 != 0) goto <D.26600>; else goto <D.26601>;
        <D.26600>:
        // predicted unlikely by continue predictor.
        goto <D.19957>;
        <D.26601>:
        j = i;
        goto <D.19962>;
        <D.19961>:
        {
          struct MonoClassField * other;
          int otherEnd;

          D.26609 = class->fields;
          D.26610 = (long unsigned int) j;
          D.26611 = D.26610 * 32;
          other = D.26609 + D.26611;
          otherEnd = get_field_end (other);
          D.26616 = other->type;
          D.26617 = D.26616->attrs;
          D.26618 = (int) D.26617;
          D.26619 = D.26618 & 1536;
          if (D.26619 != 0) goto <D.26620>; else goto <D.26612>;
          <D.26620>:
          D.26621 = mono_field_get_name (other);
          D.26622 = strcmp (D.26621, "_Deleted");
          if (D.26622 == 0) goto <D.26613>; else goto <D.26612>;
          <D.26612>:
          if (is_valuetype != 0) goto <D.26623>; else goto <D.26614>;
          <D.26623>:
          D.26616 = other->type;
          D.26624 = mono_type_is_reference (D.26616);
          if (D.26624 == 0) goto <D.26613>; else goto <D.26614>;
          <D.26614>:
          D.26616 = other->type;
          D.26617 = D.26616->attrs;
          D.26618 = (int) D.26617;
          D.26625 = D.26618 & 16;
          if (D.26625 != 0) goto <D.26613>; else goto <D.26615>;
          <D.26613>:
          // predicted unlikely by continue predictor.
          goto <D.19960>;
          <D.26615>:
          if (is_valuetype == 0) goto <D.26626>; else goto <D.26627>;
          <D.26626>:
          D.26616 = other->type;
          D.26628 = mono_type_is_reference (D.26616);
          if (D.26628 != 0) goto <D.26629>; else goto <D.26630>;
          <D.26629>:
          D.26631 = field->offset;
          D.26632 = other->offset;
          if (D.26631 == D.26632) goto <D.26633>; else goto <D.26634>;
          <D.26633>:
          if (is_fulltrust != 0) goto <D.26635>; else goto <D.26636>;
          <D.26635>:
          // predicted unlikely by continue predictor.
          goto <D.19960>;
          <D.26636>:
          <D.26634>:
          <D.26630>:
          <D.26627>:
          D.26631 = field->offset;
          if (D.26631 < otherEnd) goto <D.26640>; else goto <D.26637>;
          <D.26640>:
          if (otherEnd <= fieldEnd) goto <D.26638>; else goto <D.26637>;
          <D.26637>:
          D.26632 = other->offset;
          D.26631 = field->offset;
          if (D.26632 >= D.26631) goto <D.26641>; else goto <D.26639>;
          <D.26641>:
          D.26632 = other->offset;
          if (D.26632 < fieldEnd) goto <D.26638>; else goto <D.26639>;
          <D.26638>:
          D.26595 = 0;
          return D.26595;
          <D.26639>:
        }
        <D.19960>:
        j = j + 1;
        <D.19962>:
        D.26642 = class->field.count;
        j.132 = (unsigned int) j;
        if (D.26642 > j.132) goto <D.19961>; else goto <D.19963>;
        <D.19963>:
      }
      <D.19957>:
      field = mono_class_get_fields (class, &iter);
      if (field != 0B) goto <D.19964>; else goto <D.19965>;
      <D.19965>:
      D.26595 = 1;
      return D.26595;
    }
  finally
    {
      iter = {CLOBBER};
    }
}


get_field_end (struct MonoClassField * field)
{
  struct MonoType * D.26646;
  int D.26649;
  int D.26650;
  int align;
  int size;

  try
    {
      D.26646 = field->type;
      size = mono_type_size (D.26646, &align);
      if (size == 0) goto <D.26647>; else goto <D.26648>;
      <D.26647>:
      size = 4;
      <D.26648>:
      D.26650 = field->offset;
      D.26649 = D.26650 + size;
      return D.26649;
    }
  finally
    {
      align = {CLOBBER};
    }
}


verify_class_fields (struct MonoClass * class)
{
  struct MonoGenericContainer * D.26653;
  struct MonoType * D.26656;
  int D.26657;
  gboolean D.26660;
  void * D.26661;
  void * iter;
  struct MonoClassField * field;
  struct MonoGenericContext * context;
  struct GHashTable * unique_fields;

  try
    {
      iter = 0B;
      context = mono_class_get_context (class);
      unique_fields = monoeg_g_hash_table_new_full (field_hash, field_equals, 0B, 0B);
      D.26653 = class->generic_container;
      if (D.26653 != 0B) goto <D.26654>; else goto <D.26655>;
      <D.26654>:
      D.26653 = class->generic_container;
      context = &D.26653->context;
      <D.26655>:
      goto <D.19984>;
      <D.19983>:
      D.26656 = field->type;
      D.26657 = mono_type_is_valid_type_in_context (D.26656, context);
      if (D.26657 == 0) goto <D.26658>; else goto <D.26659>;
      <D.26658>:
      monoeg_g_hash_table_destroy (unique_fields);
      D.26660 = 0;
      return D.26660;
      <D.26659>:
      D.26661 = monoeg_g_hash_table_lookup (unique_fields, field);
      if (D.26661 != 0B) goto <D.26662>; else goto <D.26663>;
      <D.26662>:
      monoeg_g_hash_table_destroy (unique_fields);
      D.26660 = 0;
      return D.26660;
      <D.26663>:
      monoeg_g_hash_table_insert_replace (unique_fields, field, field, 0);
      <D.19984>:
      field = mono_class_get_fields (class, &iter);
      if (field != 0B) goto <D.19983>; else goto <D.19985>;
      <D.19985>:
      monoeg_g_hash_table_destroy (unique_fields);
      D.26660 = 1;
      return D.26660;
    }
  finally
    {
      iter = {CLOBBER};
    }
}


field_equals (const void * _a, const void * _b)
{
  gboolean D.26666;
  int iftmp.133;
  const char * D.26670;
  const char * D.26671;
  int D.26672;
  struct MonoType * D.26674;
  struct MonoType * D.26675;
  int D.26676;
  const struct MonoClassField * a;
  const struct MonoClassField * b;

  a = _a;
  b = _b;
  D.26670 = a->name;
  D.26671 = b->name;
  D.26672 = strcmp (D.26670, D.26671);
  if (D.26672 == 0) goto <D.26673>; else goto <D.26668>;
  <D.26673>:
  D.26674 = a->type;
  D.26675 = b->type;
  D.26676 = mono_metadata_type_equal (D.26674, D.26675);
  if (D.26676 != 0) goto <D.26677>; else goto <D.26668>;
  <D.26677>:
  iftmp.133 = 1;
  goto <D.26669>;
  <D.26668>:
  iftmp.133 = 0;
  <D.26669>:
  D.26666 = iftmp.133;
  return D.26666;
}


field_hash (const void * key)
{
  guint D.26679;
  const char * D.26680;
  unsigned int D.26681;
  struct MonoType * D.26682;
  unsigned int D.26683;
  const struct MonoClassField * field;

  field = key;
  D.26680 = field->name;
  D.26681 = monoeg_g_str_hash (D.26680);
  D.26682 = field->type;
  D.26683 = mono_metadata_type_hash (D.26682);
  D.26679 = D.26681 ^ D.26683;
  return D.26679;
}


verify_valuetype_layout (struct MonoClass * class)
{
  gboolean D.26685;
  gboolean res;

  res = verify_valuetype_layout_with_target (class, class);
  D.26685 = res;
  return D.26685;
}


verify_valuetype_layout_with_target (struct MonoClass * class, struct MonoClass * target_class)
{
  long unsigned int D.26687;
  long unsigned int D.26688;
  gboolean D.26691;
  unsigned char D.26692;
  unsigned int type.134;
  unsigned int D.26696;
  unsigned int D.26698;
  struct MonoType * D.26699;
  short unsigned int D.26702;
  int D.26703;
  int D.26704;
  struct MonoClass * D.26707;
  int D.26712;
  int type;
  void * iter;
  struct MonoClassField * field;
  struct MonoClass * field_class;

  try
    {
      iter = 0B;
      D.26687 = BIT_FIELD_REF <*class, 64, 256>;
      D.26688 = D.26687 & 1152921504606846976;
      if (D.26688 == 0) goto <D.26689>; else goto <D.26690>;
      <D.26689>:
      D.26691 = 1;
      return D.26691;
      <D.26690>:
      D.26692 = class->byval_arg.type;
      type = (int) D.26692;
      type.134 = (unsigned int) type;
      D.26696 = type.134 + 4294967294;
      if (D.26696 <= 11) goto <D.26693>; else goto <D.26697>;
      <D.26697>:
      type.134 = (unsigned int) type;
      D.26698 = type.134 + 4294967272;
      if (D.26698 <= 1) goto <D.26693>; else goto <D.26694>;
      <D.26693>:
      D.26691 = 1;
      return D.26691;
      <D.26694>:
      goto <D.20002>;
      <D.20003>:
      D.26699 = field->type;
      if (D.26699 == 0B) goto <D.26700>; else goto <D.26701>;
      <D.26700>:
      D.26691 = 0;
      return D.26691;
      <D.26701>:
      D.26699 = field->type;
      D.26702 = D.26699->attrs;
      D.26703 = (int) D.26702;
      D.26704 = D.26703 & 272;
      if (D.26704 != 0) goto <D.26705>; else goto <D.26706>;
      <D.26705>:
      // predicted unlikely by continue predictor.
      goto <D.20002>;
      <D.26706>:
      D.26699 = field->type;
      D.26707 = mono_class_from_mono_type (D.26699);
      field_class = mono_class_get_generic_type_definition (D.26707);
      if (field_class == target_class) goto <D.26708>; else goto <D.26710>;
      <D.26710>:
      if (class == field_class) goto <D.26708>; else goto <D.26711>;
      <D.26711>:
      D.26712 = verify_valuetype_layout_with_target (field_class, target_class);
      if (D.26712 == 0) goto <D.26708>; else goto <D.26709>;
      <D.26708>:
      D.26691 = 0;
      return D.26691;
      <D.26709>:
      <D.20002>:
      field = mono_class_get_fields (class, &iter);
      if (field != 0B) goto <D.20003>; else goto <D.20004>;
      <D.20004>:
      D.26691 = 1;
      return D.26691;
    }
  finally
    {
      iter = {CLOBBER};
    }
}


verify_interfaces (struct MonoClass * class)
{
  struct MonoClass * * D.26715;
  long unsigned int D.26716;
  long unsigned int D.26717;
  struct MonoClass * * D.26718;
  unsigned int D.26719;
  unsigned int D.26720;
  gboolean D.26723;
  short unsigned int D.26724;
  int D.26725;
  int i;

  i = 0;
  goto <D.19992>;
  <D.19991>:
  {
    struct MonoClass * iface;

    D.26715 = class->interfaces;
    D.26716 = (long unsigned int) i;
    D.26717 = D.26716 * 8;
    D.26718 = D.26715 + D.26717;
    iface = *D.26718;
    D.26719 = iface->flags;
    D.26720 = D.26719 & 32;
    if (D.26720 == 0) goto <D.26721>; else goto <D.26722>;
    <D.26721>:
    D.26723 = 0;
    return D.26723;
    <D.26722>:
  }
  i = i + 1;
  <D.19992>:
  D.26724 = class->interface_count;
  D.26725 = (int) D.26724;
  if (D.26725 > i) goto <D.19991>; else goto <D.19993>;
  <D.19993>:
  D.26723 = 1;
  return D.26723;
}


__attribute__((visibility ("hidden")))
mono_verifier_class_is_valid_generic_instantiation (struct MonoClass * class)
{
  gboolean D.26727;

  D.26727 = mono_class_is_valid_generic_instantiation (0B, class);
  return D.26727;
}


__attribute__((visibility ("hidden")))
mono_verifier_is_method_valid_generic_instantiation (struct MonoMethod * method)
{
  long unsigned int D.26729;
  long unsigned int D.26730;
  gboolean D.26733;

  D.26729 = BIT_FIELD_REF <*method, 64, 256>;
  D.26730 = D.26729 & 2251799813685248;
  if (D.26730 == 0) goto <D.26731>; else goto <D.26732>;
  <D.26731>:
  D.26733 = 1;
  return D.26733;
  <D.26732>:
  D.26733 = mono_method_is_valid_generic_instantiation (0B, method);
  return D.26733;
}


