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

class Trace extends core::Object {
  field core::List<self::Frame> frames = <self::Frame>[];
  synthetic constructor •() → self::Trace
    : super core::Object::•()
    ;
}
class Frame extends core::Object {
  field core::String location = "";
  synthetic constructor •() → self::Frame
    : super core::Object::•()
    ;
}
static method main() → dynamic {
  core::List<self::Trace> traces = <self::Trace>[];
  core::int longest = traces.{core::Iterable::map}<core::int>((self::Trace trace) → core::int {
    return trace.{self::Trace::frames}.{core::Iterable::map}<core::int>((self::Frame frame) → core::int => frame.{self::Frame::location}.{core::String::length}).{core::Iterable::fold}<core::int>(0, math::max<core::int>);
  }).{core::Iterable::fold}<core::int>(0, math::max<core::int>);
}
