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

static method main() → dynamic {
  final core::List<core::int> aList = block {
    final core::List<core::int> #t1 = <core::int>[];
    #t1.{core::List::add}(1);
    if(self::oracle() as{TypeError} core::bool)
      #t1.{core::List::add}(2);
    if(self::oracle() as{TypeError} core::bool)
      #t1.{core::List::add}(3);
    else
      #t1.{core::List::add}(1.{core::int::unary-}());
    if(self::oracle() as{TypeError} core::bool)
      if(self::oracle() as{TypeError} core::bool)
        #t1.{core::List::add}(4);
    for (core::int i in <core::int>[5, 6, 7])
      #t1.{core::List::add}(i);
    for (core::int i in <core::int>[8, 9, 10])
      if(self::oracle() as{TypeError} core::bool)
        #t1.{core::List::add}(i);
    for (core::int i = 11; i.{core::num::<=}(14); i = i.{core::num::+}(1))
      #t1.{core::List::add}(i);
  } =>#t1;
  final core::Set<core::int> aSet = block {
    final core::Set<core::int> #t2 = col::LinkedHashSet::•<core::int>();
    #t2.{core::Set::add}(1);
    if(self::oracle() as{TypeError} core::bool)
      #t2.{core::Set::add}(2);
    if(self::oracle() as{TypeError} core::bool)
      #t2.{core::Set::add}(3);
    else
      #t2.{core::Set::add}(1.{core::int::unary-}());
    if(self::oracle() as{TypeError} core::bool)
      if(self::oracle() as{TypeError} core::bool)
        #t2.{core::Set::add}(4);
    for (core::int i in <core::int>[5, 6, 7])
      #t2.{core::Set::add}(i);
    for (core::int i in <core::int>[8, 9, 10])
      if(self::oracle() as{TypeError} core::bool)
        #t2.{core::Set::add}(i);
    for (core::int i = 11; i.{core::num::<=}(14); i = i.{core::num::+}(1))
      #t2.{core::Set::add}(i);
  } =>#t2;
  final core::Map<core::int, core::int> aMap = block {
    final core::Map<core::int, core::int> #t3 = <core::int, core::int>{};
    #t3.{core::Map::[]=}(1, 1);
    if(self::oracle() as{TypeError} core::bool)
      #t3.{core::Map::[]=}(2, 2);
    if(self::oracle() as{TypeError} core::bool)
      #t3.{core::Map::[]=}(3, 3);
    else
      #t3.{core::Map::[]=}(1.{core::int::unary-}(), 1.{core::int::unary-}());
    if(self::oracle() as{TypeError} core::bool)
      if(self::oracle() as{TypeError} core::bool)
        #t3.{core::Map::[]=}(4, 4);
    for (core::int i in <core::int>[5, 6, 7])
      #t3.{core::Map::[]=}(i, i);
    for (core::int i in <core::int>[8, 9, 10])
      if(self::oracle() as{TypeError} core::bool)
        #t3.{core::Map::[]=}(i, i);
    for (core::int i = 11; i.{core::num::<=}(14); i = i.{core::num::+}(1))
      #t3.{core::Map::[]=}(i, i);
  } =>#t3;
  core::print(aList);
  core::print(aSet);
  core::print(aMap);
}
static method oracle() → dynamic
  return true;
