library;
import self as self;
import "dart:core" as core;

static method method1(core::List<dynamic> o) → dynamic {
  #L1:
  {
    final synthesized core::List<dynamic> #0#0 = o;
    {
      if(#0#0.{core::List::length}{core::int} =={core::num::==}{(core::Object) → core::bool} #C1) {
        {
          core::print(o);
        }
      }
    }
  }
  #L2:
  {
    final synthesized core::List<dynamic> #1#0 = o;
    {
      if(#1#0.{core::List::length}{core::int} =={core::num::==}{(core::Object) → core::bool} #C2) {
        {
          core::print(o);
        }
      }
    }
  }
  #L3:
  {
    final synthesized core::List<dynamic> #2#0 = o;
    {
      if(#2#0.{core::List::length}{core::int}.{core::num::>=}(#C1){(core::num) → core::bool}) {
        {
          core::print(o);
        }
      }
    }
  }
  #L4:
  {
    final synthesized core::List<dynamic> #3#0 = o;
    {
      if(#3#0.{core::List::length}{core::int}.{core::num::>=}(#C1){(core::num) → core::bool}) {
        {
          core::print(o);
        }
      }
    }
  }
  #L5:
  {
    final synthesized core::List<dynamic> #4#0 = o;
    {
      if(#4#0.{core::List::length}{core::int}.{core::num::>=}(#C2){(core::num) → core::bool}) {
        {
          core::print(o);
        }
      }
    }
  }
}
static method method2(dynamic o) → dynamic {
  #L6:
  {
    final synthesized dynamic #0#0 = o;
    {
      if(#0#0 is core::List<dynamic> && #0#0{core::List<dynamic>}.{core::List::length}{core::int} =={core::num::==}{(core::Object) → core::bool} #C1) {
        {
          core::print(o{core::List<dynamic>});
        }
      }
    }
  }
  #L7:
  {
    final synthesized dynamic #1#0 = o;
    {
      if(#1#0 is core::List<dynamic> && #1#0{core::List<dynamic>}.{core::List::length}{core::int} =={core::num::==}{(core::Object) → core::bool} #C2) {
        {
          core::print(o{core::List<dynamic>});
        }
      }
    }
  }
  #L8:
  {
    final synthesized dynamic #2#0 = o;
    {
      if(#2#0 is core::List<dynamic> && #2#0{core::List<dynamic>}.{core::List::length}{core::int}.{core::num::>=}(#C1){(core::num) → core::bool}) {
        {
          core::print(o{core::List<dynamic>});
        }
      }
    }
  }
  #L9:
  {
    final synthesized dynamic #3#0 = o;
    {
      if(#3#0 is core::List<dynamic> && #3#0{core::List<dynamic>}.{core::List::length}{core::int}.{core::num::>=}(#C1){(core::num) → core::bool}) {
        {
          core::print(o{core::List<dynamic>});
        }
      }
    }
  }
  #L10:
  {
    final synthesized dynamic #4#0 = o;
    {
      if(#4#0 is core::List<dynamic> && #4#0{core::List<dynamic>}.{core::List::length}{core::int}.{core::num::>=}(#C2){(core::num) → core::bool}) {
        {
          core::print(o{core::List<dynamic>});
        }
      }
    }
  }
}
static method method3(core::List<dynamic> o) → dynamic {
  #L11:
  {
    final synthesized core::List<dynamic> #0#0 = o;
    {
      if(#0#0.{core::List::length}{core::int} =={core::num::==}{(core::Object) → core::bool} #C2 && #C1 =={core::num::==}{(core::Object) → core::bool} #0#0.{core::List::[]}(1){(core::int) → dynamic}) {
        {
          core::print(o);
        }
      }
    }
  }
  #L12:
  {
    final synthesized core::List<dynamic> #1#0 = o;
    {
      if(#1#0.{core::List::length}{core::int} =={core::num::==}{(core::Object) → core::bool} #C2 && #C1 =={core::num::==}{(core::Object) → core::bool} #1#0.{core::List::[]}(0){(core::int) → dynamic}) {
        {
          core::print(o);
        }
      }
    }
  }
  #L13:
  {
    final synthesized core::List<dynamic> #2#0 = o;
    {
      hoisted core::List<dynamic> a;
      if(#2#0.{core::List::length}{core::int}.{core::num::>=}(#C1){(core::num) → core::bool} && (let final core::List<dynamic> #t1 = a = #2#0.{core::List::sublist}(1){(core::int, [core::int?]) → core::List<dynamic>} in true)) {
        {
          core::print(o);
        }
      }
    }
  }
  #L14:
  {
    final synthesized core::List<dynamic> #3#0 = o;
    synthesized core::int #3#1;
    synthesized core::bool #3#1#isSet = false;
    {
      hoisted core::List<dynamic> a;
      if((#3#1#isSet ?{core::int} #3#1{core::int} : let final core::bool* #t2 = #3#1#isSet = true in #3#1 = #3#0.{core::List::length}{core::int}).{core::num::>=}(#C1){(core::num) → core::bool} && (let final core::List<dynamic> #t3 = a = #3#0.{core::List::sublist}(0, (#3#1#isSet ?{core::int} #3#1{core::int} : let final core::bool* #t4 = #3#1#isSet = true in #3#1 = #3#0.{core::List::length}{core::int}).{core::num::-}(1){(core::num) → core::int}){(core::int, [core::int?]) → core::List<dynamic>} in true)) {
        {
          core::print(o);
        }
      }
    }
  }
  #L15:
  {
    final synthesized core::List<dynamic> #4#0 = o;
    {
      if(#4#0.{core::List::length}{core::int}.{core::num::>=}(#C2){(core::num) → core::bool} && #C1 =={core::num::==}{(core::Object) → core::bool} #4#0.{core::List::[]}(0){(core::int) → dynamic}) {
        {
          core::print(o);
        }
      }
    }
  }
  #L16:
  {
    final synthesized core::List<dynamic> #5#0 = o;
    synthesized core::int #5#1;
    synthesized core::bool #5#1#isSet = false;
    {
      if((#5#1#isSet ?{core::int} #5#1{core::int} : let final core::bool* #t5 = #5#1#isSet = true in #5#1 = #5#0.{core::List::length}{core::int}).{core::num::>=}(#C2){(core::num) → core::bool} && #C1 =={core::num::==}{(core::Object) → core::bool} #5#0.{core::List::[]}((#5#1#isSet ?{core::int} #5#1{core::int} : let final core::bool* #t6 = #5#1#isSet = true in #5#1 = #5#0.{core::List::length}{core::int}).{core::num::-}(1){(core::num) → core::int}){(core::int) → dynamic}) {
        {
          core::print(o);
        }
      }
    }
  }
}
static method method4(dynamic o) → dynamic {
  #L17:
  {
    final synthesized dynamic #0#0 = o;
    {
      if(#0#0 is core::List<dynamic> && #0#0{core::List<dynamic>}.{core::List::length}{core::int} =={core::num::==}{(core::Object) → core::bool} #C2 && #C1 =={core::num::==}{(core::Object) → core::bool} #0#0{core::List<dynamic>}.{core::List::[]}(1){(core::int) → dynamic}) {
        {
          core::print(o{core::List<dynamic>});
        }
      }
    }
  }
  #L18:
  {
    final synthesized dynamic #1#0 = o;
    {
      if(#1#0 is core::List<dynamic> && #1#0{core::List<dynamic>}.{core::List::length}{core::int} =={core::num::==}{(core::Object) → core::bool} #C2 && #C1 =={core::num::==}{(core::Object) → core::bool} #1#0{core::List<dynamic>}.{core::List::[]}(0){(core::int) → dynamic}) {
        {
          core::print(o{core::List<dynamic>});
        }
      }
    }
  }
  #L19:
  {
    final synthesized dynamic #2#0 = o;
    {
      hoisted core::List<dynamic> a;
      if(#2#0 is core::List<dynamic> && #2#0{core::List<dynamic>}.{core::List::length}{core::int}.{core::num::>=}(#C1){(core::num) → core::bool} && (let final core::List<dynamic> #t7 = a = #2#0{core::List<dynamic>}.{core::List::sublist}(1){(core::int, [core::int?]) → core::List<dynamic>} in true)) {
        {
          core::print(o{core::List<dynamic>});
        }
      }
    }
  }
  #L20:
  {
    final synthesized dynamic #3#0 = o;
    synthesized core::int #3#2;
    synthesized core::bool #3#2#isSet = false;
    {
      hoisted core::List<dynamic> a;
      if(#3#0 is core::List<dynamic> && (#3#2#isSet ?{core::int} #3#2{core::int} : let final core::bool* #t8 = #3#2#isSet = true in #3#2 = #3#0{core::List<dynamic>}.{core::List::length}{core::int}).{core::num::>=}(#C1){(core::num) → core::bool} && (let final core::List<dynamic> #t9 = a = #3#0{core::List<dynamic>}.{core::List::sublist}(0, (#3#2#isSet ?{core::int} #3#2{core::int} : let final core::bool* #t10 = #3#2#isSet = true in #3#2 = #3#0{core::List<dynamic>}.{core::List::length}{core::int}).{core::num::-}(1){(core::num) → core::int}){(core::int, [core::int?]) → core::List<dynamic>} in true)) {
        {
          core::print(o{core::List<dynamic>});
        }
      }
    }
  }
  #L21:
  {
    final synthesized dynamic #4#0 = o;
    {
      if(#4#0 is core::List<dynamic> && #4#0{core::List<dynamic>}.{core::List::length}{core::int}.{core::num::>=}(#C2){(core::num) → core::bool} && #C1 =={core::num::==}{(core::Object) → core::bool} #4#0{core::List<dynamic>}.{core::List::[]}(0){(core::int) → dynamic}) {
        {
          core::print(o{core::List<dynamic>});
        }
      }
    }
  }
  #L22:
  {
    final synthesized dynamic #5#0 = o;
    synthesized core::int #5#2;
    synthesized core::bool #5#2#isSet = false;
    {
      if(#5#0 is core::List<dynamic> && (#5#2#isSet ?{core::int} #5#2{core::int} : let final core::bool* #t11 = #5#2#isSet = true in #5#2 = #5#0{core::List<dynamic>}.{core::List::length}{core::int}).{core::num::>=}(#C2){(core::num) → core::bool} && #C1 =={core::num::==}{(core::Object) → core::bool} #5#0{core::List<dynamic>}.{core::List::[]}((#5#2#isSet ?{core::int} #5#2{core::int} : let final core::bool* #t12 = #5#2#isSet = true in #5#2 = #5#0{core::List<dynamic>}.{core::List::length}{core::int}).{core::num::-}(1){(core::num) → core::int}){(core::int) → dynamic}) {
        {
          core::print(o{core::List<dynamic>});
        }
      }
    }
  }
}
static method method5(dynamic o) → dynamic {
  #L23:
  {
    final synthesized dynamic #0#0 = o;
    {
      if(#0#0 is core::List<dynamic> && #0#0{core::List<dynamic>}.{core::List::length}{core::int} =={core::num::==}{(core::Object) → core::bool} #C1 && #0#0{core::List<dynamic>}.{core::List::[]}(0){(core::int) → dynamic} is core::int) {
        {
          core::print(o{core::List<dynamic>});
        }
      }
    }
  }
  #L24:
  {
    final synthesized dynamic #1#0 = o;
    {
      if(#1#0 is core::List<dynamic> && #1#0{core::List<dynamic>}.{core::List::length}{core::int} =={core::num::==}{(core::Object) → core::bool} #C2 && #1#0{core::List<dynamic>}.{core::List::[]}(0){(core::int) → dynamic} is core::int && #1#0{core::List<dynamic>}.{core::List::[]}(1){(core::int) → dynamic} is core::String) {
        {
          core::print(o{core::List<dynamic>});
        }
      }
    }
  }
  #L25:
  {
    final synthesized dynamic #2#0 = o;
    {
      if(#2#0 is core::List<dynamic> && #2#0{core::List<dynamic>}.{core::List::length}{core::int}.{core::num::>=}(#C1){(core::num) → core::bool} && #2#0{core::List<dynamic>}.{core::List::[]}(0){(core::int) → dynamic} is core::int) {
        {
          core::print(o{core::List<dynamic>});
        }
      }
    }
  }
  #L26:
  {
    final synthesized dynamic #3#0 = o;
    synthesized core::int #3#2;
    synthesized core::bool #3#2#isSet = false;
    {
      if(#3#0 is core::List<dynamic> && (#3#2#isSet ?{core::int} #3#2{core::int} : let final core::bool* #t13 = #3#2#isSet = true in #3#2 = #3#0{core::List<dynamic>}.{core::List::length}{core::int}).{core::num::>=}(#C1){(core::num) → core::bool} && #3#0{core::List<dynamic>}.{core::List::[]}((#3#2#isSet ?{core::int} #3#2{core::int} : let final core::bool* #t14 = #3#2#isSet = true in #3#2 = #3#0{core::List<dynamic>}.{core::List::length}{core::int}).{core::num::-}(1){(core::num) → core::int}){(core::int) → dynamic} is core::String) {
        {
          core::print(o{core::List<dynamic>});
        }
      }
    }
  }
  #L27:
  {
    final synthesized dynamic #4#0 = o;
    synthesized core::int #4#2;
    synthesized core::bool #4#2#isSet = false;
    {
      if(#4#0 is core::List<dynamic> && (#4#2#isSet ?{core::int} #4#2{core::int} : let final core::bool* #t15 = #4#2#isSet = true in #4#2 = #4#0{core::List<dynamic>}.{core::List::length}{core::int}).{core::num::>=}(#C2){(core::num) → core::bool} && #4#0{core::List<dynamic>}.{core::List::[]}(0){(core::int) → dynamic} is core::String && #4#0{core::List<dynamic>}.{core::List::[]}((#4#2#isSet ?{core::int} #4#2{core::int} : let final core::bool* #t16 = #4#2#isSet = true in #4#2 = #4#0{core::List<dynamic>}.{core::List::length}{core::int}).{core::num::-}(1){(core::num) → core::int}){(core::int) → dynamic} is core::int) {
        {
          core::print(o{core::List<dynamic>});
        }
      }
    }
  }
}

constants  {
  #C1 = 1
  #C2 = 2
}
