From 282261b41b10438b10979bdf721c21fef5f8d1a7 Mon Sep 17 00:00:00 2001
From: Natalie Weizenbaum <nweiz@google.com>
Date: Tue, 4 Oct 2016 17:23:24 -0700
Subject: [PATCH] Add a top-level "dartTest" object to the host.

External tools can use this to communicate with the test runner.
---
 lib/src/runner/browser/static/host.dart    |   25 +-
 lib/src/runner/browser/static/host.dart.js | 1790 ++++++++++++--------
 2 files changed, 1135 insertions(+), 680 deletions(-)

diff --git a/lib/src/runner/browser/static/host.dart b/lib/src/runner/browser/static/host.dart
index 4eb5d958..c802b04a 100644
--- a/lib/src/runner/browser/static/host.dart
+++ b/lib/src/runner/browser/static/host.dart
@@ -20,6 +20,24 @@ class _TestRunner {
 @JS()
 external _TestRunner get testRunner;
 
+/// A class that exposes the test API to JS.
+///
+/// These are exposed so that tools like IDEs can interact with them via remote
+/// debugging.
+@JS()
+@anonymous
+class _JSApi {
+  /// Causes the test runner to resume running, as though the user had clicked
+  /// the "play" button.
+  external Function get resume;
+
+  external factory _JSApi({void resume()});
+}
+
+/// Sets the top-level `dartTest` object so that it's visible to JS.
+@JS("dartTest")
+external set _jsApi(_JSApi api);
+
 /// The iframes created for each loaded test suite, indexed by the suite id.
 final _iframes = new Map<int, IFrameElement>();
 
@@ -110,9 +128,14 @@ void main() {
 
     var play = document.querySelector("#play");
     play.onClick.listen((_) {
-      document.body.classes.remove('paused');
+      if (!document.body.classes.remove('paused')) return;
       serverChannel.sink.add({"command": "resume"});
     });
+
+    _jsApi = new _JSApi(resume: allowInterop(() {
+      if (!document.body.classes.remove('paused')) return;
+      serverChannel.sink.add({"command": "resume"});
+    }));
   }, onError: (error, stackTrace) {
     print("$error\n${new Trace.from(stackTrace).terse}");
   });
diff --git a/lib/src/runner/browser/static/host.dart.js b/lib/src/runner/browser/static/host.dart.js
index d52559d3..ab52b3ca 100644
--- a/lib/src/runner/browser/static/host.dart.js
+++ b/lib/src/runner/browser/static/host.dart.js
@@ -461,6 +461,29 @@
         f.$stubName = getterStubName;
         f.$callName = null;
       }
+      var isReflectable = array.length > unmangledNameIndex;
+      if (isReflectable) {
+        funcs[0].$reflectable = 1;
+        funcs[0].$reflectionInfo = array;
+        for (var i = 1; i < funcs.length; i++) {
+          funcs[i].$reflectable = 2;
+          funcs[i].$reflectionInfo = array;
+        }
+        var mangledNames = isStatic ? init.mangledGlobalNames : init.mangledNames;
+        var unmangledName = array[unmangledNameIndex];
+        var reflectionName = unmangledName;
+        if (getterStubName)
+          mangledNames[getterStubName] = reflectionName;
+        if (isSetter)
+          reflectionName += "=";
+        else if (!isGetter)
+          reflectionName += ":" + (requiredParameterCount + optionalParameterCount);
+        mangledNames[name] = reflectionName;
+        funcs[0].$reflectionName = reflectionName;
+        funcs[0].$metadataIndex = unmangledNameIndex + 1;
+        if (optionalParameterCount)
+          prototype[unmangledName + "*"] = funcs[0];
+      }
     }
     Function.prototype.call$0 = function() {
       return this();
@@ -593,6 +616,9 @@
       toString$0: ["super$Interceptor$toString", function(receiver) {
         return H.Primitives_objectToHumanReadableString(receiver);
       }],
+      noSuchMethod$1: ["super$Interceptor$noSuchMethod", function(receiver, invocation) {
+        throw H.wrapException(P.NoSuchMethodError$(receiver, invocation.get$memberName(), invocation.get$positionalArguments(), invocation.get$namedArguments(), null));
+      }],
       "%": "MediaError|MediaKeyError|PushMessageData|SVGAnimatedLength|SVGAnimatedLengthList|SVGAnimatedNumber|SVGAnimatedNumberList|SVGAnimatedString|SVGAnimatedTransformList"
     },
     JSBool: {
@@ -615,6 +641,9 @@
       },
       get$hashCode: function(receiver) {
         return 0;
+      },
+      noSuchMethod$1: function(receiver, invocation) {
+        return this.super$Interceptor$noSuchMethod(receiver, invocation);
       }
     },
     JavaScriptObject: {
@@ -628,6 +657,9 @@
       waitUntilDone$0: function(receiver) {
         return receiver.waitUntilDone();
       },
+      resume$0: function(receiver) {
+        return receiver.resume();
+      },
       $isJSObject: 1
     },
     PlainJavaScriptObject: {
@@ -689,10 +721,10 @@
         return receiver.pop();
       },
       addAll$1: function(receiver, collection) {
-        var _i;
+        var t1;
         this.checkGrowable$1(receiver, "addAll");
-        for (_i = 0; _i < 2; ++_i)
-          receiver.push(collection[_i]);
+        for (t1 = J.get$iterator$ax(collection); t1.moveNext$0();)
+          receiver.push(t1.get$current());
       },
       clear$0: function(receiver) {
         this.set$length(receiver, 0);
@@ -934,6 +966,11 @@
           t1 = H.setRuntimeTypeInfo(new Array($length), [$E]);
           t1.fixed$length = Array;
           return t1;
+        },
+        JSArray_markUnmodifiableList: function(list) {
+          list.fixed$length = Array;
+          list.immutable$list = Array;
+          return list;
         }
       }
     },
@@ -963,6 +1000,9 @@
     },
     JSNumber: {
       "^": "Interceptor;",
+      get$isNegative: function(receiver) {
+        return receiver === 0 ? 1 / receiver < 0 : receiver < 0;
+      },
       remainder$1: function(receiver, b) {
         return receiver % b;
       },
@@ -1017,8 +1057,16 @@
         return receiver - other;
       },
       $mul: function(receiver, other) {
+        if (typeof other !== "number")
+          throw H.wrapException(H.argumentErrorValue(other));
         return receiver * other;
       },
+      $tdiv: function(receiver, other) {
+        if ((receiver | 0) === receiver)
+          if (other >= 1 || false)
+            return receiver / other | 0;
+        return this._tdivSlow$1(receiver, other);
+      },
       _tdivFast$1: function(receiver, other) {
         return (receiver | 0) === receiver ? receiver / other | 0 : this._tdivSlow$1(receiver, other);
       },
@@ -1033,9 +1081,26 @@
           return Math.ceil(quotient);
         throw H.wrapException(new P.UnsupportedError("Result of truncating division is " + H.S(quotient) + ": " + H.S(receiver) + " ~/ " + other));
       },
+      $shl: function(receiver, other) {
+        if (other < 0)
+          throw H.wrapException(H.argumentErrorValue(other));
+        return other > 31 ? 0 : receiver << other >>> 0;
+      },
       _shlPositive$1: function(receiver, other) {
         return other > 31 ? 0 : receiver << other >>> 0;
       },
+      $shr: function(receiver, other) {
+        var t1;
+        if (other < 0)
+          throw H.wrapException(H.argumentErrorValue(other));
+        if (receiver > 0)
+          t1 = other > 31 ? 0 : receiver >>> other;
+        else {
+          t1 = other > 31 ? 31 : other;
+          t1 = receiver >> t1 >>> 0;
+        }
+        return t1;
+      },
       _shrOtherPositive$1: function(receiver, other) {
         var t1;
         if (receiver > 0)
@@ -1051,6 +1116,14 @@
           throw H.wrapException(H.argumentErrorValue(other));
         return other > 31 ? 0 : receiver >>> other;
       },
+      $and: function(receiver, other) {
+        return (receiver & other) >>> 0;
+      },
+      $xor: function(receiver, other) {
+        if (typeof other !== "number")
+          throw H.wrapException(H.argumentErrorValue(other));
+        return (receiver ^ other) >>> 0;
+      },
       $lt: function(receiver, other) {
         if (typeof other !== "number")
           throw H.wrapException(H.argumentErrorValue(other));
@@ -1828,6 +1901,29 @@
         t2 = J.getInterceptor$asx(t1);
         return t2.elementAt$1(t1, J.$sub$n(J.$sub$n(t2.get$length(t1), 1), index));
       }
+    },
+    Symbol: {
+      "^": "Object;__internal$_name<",
+      $eq: function(_, other) {
+        if (other == null)
+          return false;
+        return other instanceof H.Symbol && J.$eq$(this.__internal$_name, other.__internal$_name);
+      },
+      get$hashCode: function(_) {
+        var hash, t1;
+        hash = this._hashCode;
+        if (hash != null)
+          return hash;
+        t1 = J.get$hashCode$(this.__internal$_name);
+        if (typeof t1 !== "number")
+          return H.iae(t1);
+        hash = 536870911 & 664597 * t1;
+        this._hashCode = hash;
+        return hash;
+      },
+      toString$0: function(_) {
+        return 'Symbol("' + H.S(this.__internal$_name) + '")';
+      }
     }
   }], ["_isolate_helper", "dart:_isolate_helper",, H, {
     "^": "",
@@ -1937,7 +2033,7 @@
         return matches[1];
       throw H.wrapException(new P.UnsupportedError('Cannot extract URI from "' + H.S(stack) + '"'));
     },
-    IsolateNatives__processWorkerMessage: function(sender, e) {
+    IsolateNatives__processWorkerMessage: [function(sender, e) {
       var msg, t1, functionName, entryPoint, args, message, isSpawnUri, startPaused, replyTo, t2, t3, t4, context;
       msg = new H._Deserializer(true, []).deserialize$1(e.data);
       t1 = J.getInterceptor$asx(msg);
@@ -1991,7 +2087,7 @@
         case "error":
           throw H.wrapException(t1.$index(msg, "msg"));
       }
-    },
+    }, null, null, 4, 0, null, 40, 39],
     IsolateNatives__log: function(msg) {
       var trace, t1, t2, exception;
       if (init.globalState.isWorker === true) {
@@ -2044,14 +2140,14 @@
     _Manager: {
       "^": "Object;nextIsolateId,currentManagerId,nextManagerId,currentContext,rootContext,topEventLoop,fromCommandLine,isWorker,supportsWorkers,isolates,mainManager,managers,entry",
       static: {
-        _Manager__serializePrintMessage: function(object) {
+        _Manager__serializePrintMessage: [function(object) {
           var t1 = P.LinkedHashMap__makeLiteral(["command", "print", "msg", object]);
           return new H._Serializer(true, P._LinkedIdentityHashMap__LinkedIdentityHashMap$es6(null, P.$int)).serialize$1(t1);
-        }
+        }, null, null, 2, 0, null, 24]
       }
     },
     _IsolateContext: {
-      "^": "Object;id,ports,weakPorts,isolateStatics<,controlPort<,pauseCapability,terminateCapability,initialized,isPaused,delayedEvents,pauseTokens,doneHandlers,_scheduledControlEvents,_isExecutingEvent,errorsAreFatal,errorPorts",
+      "^": "Object;id,ports,weakPorts,isolateStatics<,controlPort<,pauseCapability,terminateCapability,initialized?,isPaused<,delayedEvents<,pauseTokens,doneHandlers,_scheduledControlEvents,_isExecutingEvent,errorsAreFatal,errorPorts",
       addPause$2: function(authentification, resume) {
         if (!this.pauseCapability.$eq(0, authentification))
           return;
@@ -2161,7 +2257,7 @@
         }
         t1._add$1(this.get$kill());
       },
-      handleUncaughtError$2: function(error, stackTrace) {
+      handleUncaughtError$2: [function(error, stackTrace) {
         var t1, message, t2;
         t1 = this.errorPorts;
         if (t1._collection$_length === 0) {
@@ -2182,7 +2278,7 @@
         message[1] = stackTrace == null ? null : J.toString$0$(stackTrace);
         for (t2 = new P._LinkedHashSetIterator(t1, t1._collection$_modifications, null, null), t2._collection$_cell = t1._collection$_first; t2.moveNext$0();)
           J.send$1$x(t2._collection$_current, message);
-      },
+      }, "call$2", "get$handleUncaughtError", 4, 0, 11],
       eval$1: function(code) {
         var old, result, oldIsExecutingEvent, e, s, exception, t1;
         old = init.globalState.currentContext;
@@ -2214,6 +2310,38 @@
         }
         return result;
       },
+      handleControlMessage$1: function(message) {
+        var t1 = J.getInterceptor$asx(message);
+        switch (t1.$index(message, 0)) {
+          case "pause":
+            this.addPause$2(t1.$index(message, 1), t1.$index(message, 2));
+            break;
+          case "resume":
+            this.removePause$1(t1.$index(message, 1));
+            break;
+          case "add-ondone":
+            this.addDoneListener$2(t1.$index(message, 1), t1.$index(message, 2));
+            break;
+          case "remove-ondone":
+            this.removeDoneListener$1(t1.$index(message, 1));
+            break;
+          case "set-errors-fatal":
+            this.setErrorsFatal$2(t1.$index(message, 1), t1.$index(message, 2));
+            break;
+          case "ping":
+            this.handlePing$3(t1.$index(message, 1), t1.$index(message, 2), t1.$index(message, 3));
+            break;
+          case "kill":
+            this.handleKill$2(t1.$index(message, 1), t1.$index(message, 2));
+            break;
+          case "getErrors":
+            this.errorPorts.add$1(0, t1.$index(message, 1));
+            break;
+          case "stopErrors":
+            this.errorPorts.remove$1(0, t1.$index(message, 1));
+            break;
+        }
+      },
       lookup$1: function(portId) {
         return this.ports.$index(0, portId);
       },
@@ -2255,9 +2383,9 @@
     },
     _IsolateContext_handlePing_respond: {
       "^": "Closure:2;responsePort,response",
-      call$0: function() {
+      call$0: [function() {
         J.send$1$x(this.responsePort, this.response);
-      }
+      }, null, null, 0, 0, null, "call"]
     },
     _EventLoop: {
       "^": "Object;events,_activeJsAsyncCount",
@@ -2330,18 +2458,18 @@
     },
     _EventLoop__runHelper_next: {
       "^": "Closure:2;$this",
-      call$0: function() {
+      call$0: [function() {
         if (!this.$this.runIteration$0())
           return;
         P.Timer_Timer(C.Duration_0, this);
-      }
+      }, null, null, 0, 0, null, "call"]
     },
     _IsolateEvent: {
       "^": "Object;isolate,fn,message>",
       process$0: function() {
         var t1 = this.isolate;
-        if (t1.isPaused) {
-          t1.delayedEvents.push(this);
+        if (t1.get$isPaused()) {
+          t1.get$delayedEvents().push(this);
           return;
         }
         t1.eval$1(this.fn);
@@ -2361,7 +2489,7 @@
       call$0: function() {
         var t1, t2, t3, t4;
         t1 = this.context;
-        t1.initialized = true;
+        t1.set$initialized(true);
         if (this.isSpawnUri !== true)
           this.topLevel.call$1(this.message);
         else {
@@ -2396,38 +2524,7 @@
           return;
         msg = H._clone(message);
         if (isolate.get$controlPort() === t1) {
-          t1 = J.getInterceptor$asx(msg);
-          switch (t1.$index(msg, 0)) {
-            case "pause":
-              isolate.addPause$2(t1.$index(msg, 1), t1.$index(msg, 2));
-              break;
-            case "resume":
-              isolate.removePause$1(t1.$index(msg, 1));
-              break;
-            case "add-ondone":
-              isolate.addDoneListener$2(t1.$index(msg, 1), t1.$index(msg, 2));
-              break;
-            case "remove-ondone":
-              isolate.removeDoneListener$1(t1.$index(msg, 1));
-              break;
-            case "set-errors-fatal":
-              isolate.setErrorsFatal$2(t1.$index(msg, 1), t1.$index(msg, 2));
-              break;
-            case "ping":
-              isolate.handlePing$3(t1.$index(msg, 1), t1.$index(msg, 2), t1.$index(msg, 3));
-              break;
-            case "kill":
-              isolate.handleKill$2(t1.$index(msg, 1), t1.$index(msg, 2));
-              break;
-            case "getErrors":
-              t1 = t1.$index(msg, 1);
-              isolate.errorPorts.add$1(0, t1);
-              break;
-            case "stopErrors":
-              t1 = t1.$index(msg, 1);
-              isolate.errorPorts.remove$1(0, t1);
-              break;
-          }
+          isolate.handleControlMessage$1(msg);
           return;
         }
         init.globalState.topEventLoop.events._add$1(new H._IsolateEvent(isolate, new H._NativeJsSendPort_send_closure(this, msg), "receive"));
@@ -2471,16 +2568,12 @@
       },
       get$hashCode: function(_) {
         var t1, t2, t3;
-        t1 = this._workerId;
-        if (typeof t1 !== "number")
-          return t1.$shl();
-        t2 = this._isolateId;
-        if (typeof t2 !== "number")
-          return t2.$shl();
+        t1 = J.$shl$n(this._workerId, 16);
+        t2 = J.$shl$n(this._isolateId, 8);
         t3 = this._receivePortId;
         if (typeof t3 !== "number")
           return H.iae(t3);
-        return (t1 << 16 ^ t2 << 8 ^ t3) >>> 0;
+        return (t1 ^ t2 ^ t3) >>> 0;
       }
     },
     RawReceivePortImpl: {
@@ -2545,25 +2638,29 @@
     },
     TimerImpl_internalCallback0: {
       "^": "Closure:2;$this,callback",
-      call$0: function() {
+      call$0: [function() {
         this.$this._handle = null;
         --init.globalState.topEventLoop._activeJsAsyncCount;
         this.callback.call$0();
-      }
+      }, null, null, 0, 0, null, "call"]
     },
     TimerImpl$periodic_closure: {
       "^": "Closure:1;$this,callback",
-      call$0: function() {
+      call$0: [function() {
         this.callback.call$1(this.$this);
-      }
+      }, null, null, 0, 0, null, "call"]
     },
     CapabilityImpl: {
       "^": "Object;_id<",
       get$hashCode: function(_) {
-        var hash = this._id;
-        if (typeof hash !== "number")
-          return hash.$shr();
-        hash = C.JSNumber_methods._shrOtherPositive$1(hash, 0) ^ C.JSNumber_methods._tdivFast$1(hash, 4294967296);
+        var hash, t1, t2;
+        hash = this._id;
+        t1 = J.getInterceptor$n(hash);
+        t2 = t1.$shr(hash, 0);
+        t1 = t1.$tdiv(hash, 4294967296);
+        if (typeof t1 !== "number")
+          return H.iae(t1);
+        hash = t2 ^ t1;
         hash = (~hash >>> 0) + (hash << 15 >>> 0) & 4294967295;
         hash = ((hash ^ hash >>> 12) >>> 0) * 5 & 4294967295;
         hash = ((hash ^ hash >>> 4) >>> 0) * 2057 & 4294967295;
@@ -2631,7 +2728,7 @@
         if (!(x instanceof P.Object))
           this.unsupported$1(x);
         return ["dart", init.classIdExtractor(x), this.serializeArrayInPlace$1(init.classFieldsExtractor(x))];
-      }, "call$1", "get$serialize", 2, 0, 0],
+      }, "call$1", "get$serialize", 2, 0, 0, 23],
       unsupported$2: function(x, message) {
         throw H.wrapException(new P.UnsupportedError(H.S(message == null ? "Can't transmit:" : message) + " " + H.S(x)));
       },
@@ -2788,7 +2885,7 @@
           default:
             throw H.wrapException("couldn't deserialize: " + H.S(x));
         }
-      }, "call$1", "get$deserialize", 2, 0, 0],
+      }, "call$1", "get$deserialize", 2, 0, 0, 23],
       deserializeArrayInPlace$1: function(x) {
         var t1, i, t2;
         t1 = J.getInterceptor$asx(x);
@@ -2816,11 +2913,8 @@
         result = P.LinkedHashMap__makeEmpty();
         this.deserializedObjects.push(result);
         keys = J.map$1$ax(keys, this.get$deserialize()).toList$0(0);
-        for (t1 = J.getInterceptor$asx(keys), t2 = J.getInterceptor$asx(values), i = 0; i < t1.get$length(keys); ++i) {
-          if (i >= keys.length)
-            return H.ioore(keys, i);
-          result.$indexSet(0, keys[i], this.deserialize$1(t2.$index(values, i)));
-        }
+        for (t1 = J.getInterceptor$asx(keys), t2 = J.getInterceptor$asx(values), i = 0; i < t1.get$length(keys); ++i)
+          result.$indexSet(0, t1.$index(keys, i), this.deserialize$1(t2.$index(values, i)));
         return result;
       },
       deserializeSendPort$1: function(x) {
@@ -3058,6 +3152,8 @@
     },
     Primitives_stringFromCharCode: function(charCode) {
       var bits;
+      if (typeof charCode !== "number")
+        return H.iae(charCode);
       if (0 <= charCode) {
         if (charCode <= 65535)
           return String.fromCharCode(charCode);
@@ -3083,6 +3179,70 @@
         throw H.wrapException(H.argumentErrorValue(object));
       object[key] = value;
     },
+    Primitives_functionNoSuchMethod: function($function, positionalArguments, namedArguments) {
+      var t1, $arguments, namedArgumentList, t2;
+      t1 = {};
+      t1.argumentCount = 0;
+      $arguments = [];
+      namedArgumentList = [];
+      if (positionalArguments != null) {
+        t2 = J.get$length$asx(positionalArguments);
+        if (typeof t2 !== "number")
+          return H.iae(t2);
+        t1.argumentCount = 0 + t2;
+        C.JSArray_methods.addAll$1($arguments, positionalArguments);
+      }
+      t1.names = "";
+      if (namedArguments != null && !namedArguments.get$isEmpty(namedArguments))
+        namedArguments.forEach$1(0, new H.Primitives_functionNoSuchMethod_closure(t1, $arguments, namedArgumentList));
+      return J.noSuchMethod$1$($function, new H.JSInvocationMirror(C.Symbol_call, "call" + "$" + H.S(t1.argumentCount) + t1.names, 0, $arguments, namedArgumentList, null));
+    },
+    Primitives_applyFunctionWithPositionalArguments: function($function, positionalArguments) {
+      var $arguments, t1;
+      if (positionalArguments != null)
+        $arguments = positionalArguments instanceof Array ? positionalArguments : P.List_List$from(positionalArguments, true, null);
+      else
+        $arguments = [];
+      t1 = $arguments.length;
+      if (t1 === 0) {
+        if (!!$function.call$0)
+          return $function.call$0();
+      } else if (t1 === 1) {
+        if (!!$function.call$1)
+          return $function.call$1($arguments[0]);
+      } else if (t1 === 2) {
+        if (!!$function.call$2)
+          return $function.call$2($arguments[0], $arguments[1]);
+      } else if (t1 === 3) {
+        if (!!$function.call$3)
+          return $function.call$3($arguments[0], $arguments[1], $arguments[2]);
+      } else if (t1 === 4) {
+        if (!!$function.call$4)
+          return $function.call$4($arguments[0], $arguments[1], $arguments[2], $arguments[3]);
+      } else if (t1 === 5)
+        if (!!$function.call$5)
+          return $function.call$5($arguments[0], $arguments[1], $arguments[2], $arguments[3], $arguments[4]);
+      return H.Primitives__genericApplyFunctionWithPositionalArguments($function, $arguments);
+    },
+    Primitives__genericApplyFunctionWithPositionalArguments: function($function, $arguments) {
+      var argumentCount, jsFunction, info, requiredArgumentCount, maxArgumentCount, pos;
+      argumentCount = $arguments.length;
+      jsFunction = $function["call" + "$" + argumentCount];
+      if (jsFunction == null) {
+        jsFunction = J.getInterceptor($function)["call*"];
+        if (jsFunction == null)
+          return H.Primitives_functionNoSuchMethod($function, $arguments, null);
+        info = H.ReflectionInfo_ReflectionInfo(jsFunction);
+        requiredArgumentCount = info.requiredParameterCount;
+        maxArgumentCount = requiredArgumentCount + info.optionalParameterCount;
+        if (info.areOptionalParametersNamed || requiredArgumentCount > argumentCount || maxArgumentCount < argumentCount)
+          return H.Primitives_functionNoSuchMethod($function, $arguments, null);
+        $arguments = P.List_List$from($arguments, true, null);
+        for (pos = argumentCount; pos < maxArgumentCount; ++pos)
+          C.JSArray_methods.add$1($arguments, init.metadata[info.defaultValue$1(0, pos)]);
+      }
+      return jsFunction.apply($function, $arguments);
+    },
     iae: function(argument) {
       throw H.wrapException(H.argumentErrorValue(argument));
     },
@@ -3140,9 +3300,9 @@
         wrapper.toString = H.toStringWrapper;
       return wrapper;
     },
-    toStringWrapper: function() {
+    toStringWrapper: [function() {
       return J.toString$0$(this.dartException);
-    },
+    }, null, null, 0, 0, null],
     throwExpression: function(ex) {
       throw H.wrapException(ex);
     },
@@ -3276,7 +3436,7 @@
       }
       return result;
     },
-    invokeClosure: function(closure, isolate, numberOfArguments, arg1, arg2, arg3, arg4) {
+    invokeClosure: [function(closure, isolate, numberOfArguments, arg1, arg2, arg3, arg4) {
       switch (numberOfArguments) {
         case 0:
           return H._callInIsolate(isolate, new H.invokeClosure_closure(closure));
@@ -3290,7 +3450,7 @@
           return H._callInIsolate(isolate, new H.invokeClosure_closure3(closure, arg1, arg2, arg3, arg4));
       }
       throw H.wrapException(P.Exception_Exception("Unsupported number of arguments for wrapped closure"));
-    },
+    }, null, null, 14, 0, null, 32, 30, 36, 21, 20, 26, 25],
     convertDartClosureToJS: function(closure, arity) {
       var $function;
       if (closure == null)
@@ -3989,6 +4149,12 @@
       suffix = receiver.substring(end);
       return prefix + replacement + suffix;
     },
+    ConstantMapView: {
+      "^": "UnmodifiableMapView;_map,$ti",
+      $asUnmodifiableMapView: Isolate.functionThatReturnsNull,
+      $asMap: Isolate.functionThatReturnsNull,
+      $isMap: 1
+    },
     ConstantMap: {
       "^": "Object;",
       get$isEmpty: function(_) {
@@ -4034,8 +4200,61 @@
         }
       }
     },
+    JSInvocationMirror: {
+      "^": "Object;__js_helper$_memberName,_internalName,_kind,_arguments,_namedArgumentNames,_namedIndices",
+      get$memberName: function() {
+        return this.__js_helper$_memberName;
+      },
+      get$positionalArguments: function() {
+        var t1, argumentCount, list, index;
+        if (this._kind === 1)
+          return C.List_empty0;
+        t1 = this._arguments;
+        argumentCount = t1.length - this._namedArgumentNames.length;
+        if (argumentCount === 0)
+          return C.List_empty0;
+        list = [];
+        for (index = 0; index < argumentCount; ++index) {
+          if (index >= t1.length)
+            return H.ioore(t1, index);
+          list.push(t1[index]);
+        }
+        return J.JSArray_markUnmodifiableList(list);
+      },
+      get$namedArguments: function() {
+        var t1, namedArgumentCount, t2, namedArgumentsStartIndex, t3, map, i, t4, t5;
+        if (this._kind !== 0)
+          return C.Map_empty0;
+        t1 = this._namedArgumentNames;
+        namedArgumentCount = t1.length;
+        t2 = this._arguments;
+        namedArgumentsStartIndex = t2.length - namedArgumentCount;
+        if (namedArgumentCount === 0)
+          return C.Map_empty0;
+        t3 = P.Symbol0;
+        map = new H.JsLinkedHashMap(0, null, null, null, null, null, 0, [t3, null]);
+        for (i = 0; i < namedArgumentCount; ++i) {
+          if (i >= t1.length)
+            return H.ioore(t1, i);
+          t4 = t1[i];
+          t5 = namedArgumentsStartIndex + i;
+          if (t5 < 0 || t5 >= t2.length)
+            return H.ioore(t2, t5);
+          map.$indexSet(0, new H.Symbol(t4), t2[t5]);
+        }
+        return new H.ConstantMapView(map, [t3, null]);
+      }
+    },
     ReflectionInfo: {
       "^": "Object;jsFunction,data>,isAccessor,requiredParameterCount,optionalParameterCount,areOptionalParametersNamed,functionType,cachedSortedIndices",
+      defaultValue$1: function(_, parameter) {
+        var t1 = this.requiredParameterCount;
+        if (typeof parameter !== "number")
+          return parameter.$lt();
+        if (parameter < t1)
+          return;
+        return this.data[3 + parameter - t1];
+      },
       static: {
         ReflectionInfo_ReflectionInfo: function(jsFunction) {
           var data, requiredParametersInfo, optionalParametersInfo;
@@ -4050,6 +4269,16 @@
         }
       }
     },
+    Primitives_functionNoSuchMethod_closure: {
+      "^": "Closure:41;_box_0,$arguments,namedArgumentList",
+      call$2: function($name, argument) {
+        var t1 = this._box_0;
+        t1.names = t1.names + "$" + H.S($name);
+        this.namedArgumentList.push($name);
+        this.$arguments.push(argument);
+        ++t1.argumentCount;
+      }
+    },
     TypeErrorDecoder: {
       "^": "Object;_pattern,_arguments,_argumentsExpr,_expr,_method,_receiver",
       matchTypeError$1: function(message) {
@@ -4245,10 +4474,7 @@
           receiverHashCode = H.Primitives_objectHashCode(this._self);
         else
           receiverHashCode = typeof t1 !== "object" ? J.get$hashCode$(t1) : H.Primitives_objectHashCode(t1);
-        t1 = H.Primitives_objectHashCode(this._target);
-        if (typeof receiverHashCode !== "number")
-          return receiverHashCode.$xor();
-        return (receiverHashCode ^ t1) >>> 0;
+        return J.$xor$n(receiverHashCode, H.Primitives_objectHashCode(this._target));
       },
       toString$0: function(_) {
         var receiver = this._receiver;
@@ -4620,7 +4846,7 @@
       _unlinkCell$1: function(cell) {
         var previous, next;
         previous = cell.get$_previous();
-        next = cell._next;
+        next = cell.get$_next();
         if (previous == null)
           this._first = next;
         else
@@ -4679,12 +4905,12 @@
     },
     JsLinkedHashMap_values_closure: {
       "^": "Closure:0;$this",
-      call$1: function(each) {
+      call$1: [function(each) {
         return this.$this.$index(0, each);
-      }
+      }, null, null, 2, 0, null, 18, "call"]
     },
     LinkedHashMapCell: {
-      "^": "Object;hashMapCellKey<,hashMapCellValue@,_next,_previous<"
+      "^": "Object;hashMapCellKey<,hashMapCellValue@,_next<,_previous<"
     },
     LinkedHashMapKeyIterable: {
       "^": "Iterable;__js_helper$_map,$ti",
@@ -4753,7 +4979,7 @@
       }
     },
     initHooks_closure1: {
-      "^": "Closure:29;prototypeForTag",
+      "^": "Closure:36;prototypeForTag",
       call$1: function(tag) {
         return this.prototypeForTag(tag);
       }
@@ -5335,6 +5561,14 @@
       }($function, 1);
       return $.Zone__current.registerBinaryCallback$1(new P._wrapJsFunctionForAsync_closure($protected));
     },
+    _invokeErrorHandler: function(errorHandler, error, stackTrace) {
+      var t1 = H.getDynamicRuntimeType();
+      t1 = H.buildFunctionType(t1, [t1, t1])._isTest$1(errorHandler);
+      if (t1)
+        return errorHandler.call$2(error, stackTrace);
+      else
+        return errorHandler.call$1(error);
+    },
     _registerErrorHandler: function(errorHandler, zone) {
       var t1 = H.getDynamicRuntimeType();
       t1 = H.buildFunctionType(t1, [t1, t1])._isTest$1(errorHandler);
@@ -5448,12 +5682,12 @@
       }
     },
     _nullDataHandler: [function(value) {
-    }, "call$1", "async___nullDataHandler$closure", 2, 0, 50],
+    }, "call$1", "async___nullDataHandler$closure", 2, 0, 52, 9],
     _nullErrorHandler: [function(error, stackTrace) {
       $.Zone__current.handleUncaughtError$2(error, stackTrace);
     }, function(error) {
       return P._nullErrorHandler(error, null);
-    }, "call$2", "call$1", "async___nullErrorHandler$closure", 2, 2, 6, 0],
+    }, "call$2", "call$1", "async___nullErrorHandler$closure", 2, 2, 6, 5, 3, 4],
     _nullDoneHandler: [function() {
     }, "call$0", "async___nullDoneHandler$closure", 0, 0, 2],
     _runUserCode: function(userCode, onSuccess, onError) {
@@ -5499,7 +5733,7 @@
         error = error != null ? error : new P.NullThrownError();
         stackTrace = replacement.get$stackTrace();
       }
-      sink._async$_addError$2(error, stackTrace);
+      sink._addError$2(error, stackTrace);
     },
     Timer_Timer: function(duration, callback) {
       var t1;
@@ -5532,7 +5766,7 @@
       var t1 = {};
       t1.error = error;
       P._schedulePriorityAsyncCallback(new P._rootHandleUncaughtError_closure(t1, stackTrace));
-    }, "call$5", "async___rootHandleUncaughtError$closure", 10, 0, 19],
+    }, "call$5", "async___rootHandleUncaughtError$closure", 10, 0, 12, 0, 2, 1, 3, 4],
     _rootRun: [function($self, $parent, zone, f) {
       var old, previous, t1;
       if (J.$eq$($.Zone__current, zone))
@@ -5546,7 +5780,7 @@
       } finally {
         $.Zone__current = old;
       }
-    }, "call$4", "async___rootRun$closure", 8, 0, 51],
+    }, "call$4", "async___rootRun$closure", 8, 0, 53, 0, 2, 1, 8],
     _rootRunUnary: [function($self, $parent, zone, f, arg) {
       var old, previous, t1;
       if (J.$eq$($.Zone__current, zone))
@@ -5560,7 +5794,7 @@
       } finally {
         $.Zone__current = old;
       }
-    }, "call$5", "async___rootRunUnary$closure", 10, 0, 52],
+    }, "call$5", "async___rootRunUnary$closure", 10, 0, 54, 0, 2, 1, 8, 12],
     _rootRunBinary: [function($self, $parent, zone, f, arg1, arg2) {
       var old, previous, t1;
       if (J.$eq$($.Zone__current, zone))
@@ -5574,34 +5808,34 @@
       } finally {
         $.Zone__current = old;
       }
-    }, "call$6", "async___rootRunBinary$closure", 12, 0, 53],
+    }, "call$6", "async___rootRunBinary$closure", 12, 0, 55, 0, 2, 1, 8, 21, 20],
     _rootRegisterCallback: [function($self, $parent, zone, f) {
       return f;
-    }, "call$4", "async___rootRegisterCallback$closure", 8, 0, 54],
+    }, "call$4", "async___rootRegisterCallback$closure", 8, 0, 56, 0, 2, 1, 8],
     _rootRegisterUnaryCallback: [function($self, $parent, zone, f) {
       return f;
-    }, "call$4", "async___rootRegisterUnaryCallback$closure", 8, 0, 55],
+    }, "call$4", "async___rootRegisterUnaryCallback$closure", 8, 0, 57, 0, 2, 1, 8],
     _rootRegisterBinaryCallback: [function($self, $parent, zone, f) {
       return f;
-    }, "call$4", "async___rootRegisterBinaryCallback$closure", 8, 0, 56],
+    }, "call$4", "async___rootRegisterBinaryCallback$closure", 8, 0, 58, 0, 2, 1, 8],
     _rootErrorCallback: [function($self, $parent, zone, error, stackTrace) {
       return;
-    }, "call$5", "async___rootErrorCallback$closure", 10, 0, 57],
+    }, "call$5", "async___rootErrorCallback$closure", 10, 0, 59, 0, 2, 1, 3, 4],
     _rootScheduleMicrotask: [function($self, $parent, zone, f) {
       var t1 = C.C__RootZone !== zone;
       if (t1)
         f = zone.bindCallback$2$runGuarded(f, !(!t1 || C.C__RootZone.get$errorZone() === zone.get$errorZone()));
       P._scheduleAsyncCallback(f);
-    }, "call$4", "async___rootScheduleMicrotask$closure", 8, 0, 58],
+    }, "call$4", "async___rootScheduleMicrotask$closure", 8, 0, 60, 0, 2, 1, 8],
     _rootCreateTimer: [function($self, $parent, zone, duration, callback) {
       return P.Timer__createTimer(duration, C.C__RootZone !== zone ? zone.bindCallback$1(callback) : callback);
-    }, "call$5", "async___rootCreateTimer$closure", 10, 0, 59],
+    }, "call$5", "async___rootCreateTimer$closure", 10, 0, 61, 0, 2, 1, 19, 15],
     _rootCreatePeriodicTimer: [function($self, $parent, zone, duration, callback) {
       return P.Timer__createPeriodicTimer(duration, C.C__RootZone !== zone ? zone.bindUnaryCallback$1(callback) : callback);
-    }, "call$5", "async___rootCreatePeriodicTimer$closure", 10, 0, 60],
+    }, "call$5", "async___rootCreatePeriodicTimer$closure", 10, 0, 62, 0, 2, 1, 19, 15],
     _rootPrint: [function($self, $parent, zone, line) {
       H.printString(H.S(line));
-    }, "call$4", "async___rootPrint$closure", 8, 0, 61],
+    }, "call$4", "async___rootPrint$closure", 8, 0, 63, 0, 2, 1, 10],
     _printToZone: [function(line) {
       J.print$1$x($.Zone__current, line);
     }, "call$1", "async___printToZone$closure", 2, 0, 7],
@@ -5637,13 +5871,13 @@
       t1._createTimer = zone.get$_createTimer();
       specification.get$createPeriodicTimer();
       t1._createPeriodicTimer = zone.get$_createPeriodicTimer();
-      specification.get$print(specification);
+      J.get$print$x(specification);
       t1._print = zone.get$_print();
       specification.get$fork();
       t1._fork = zone.get$_fork();
       t1._handleUncaughtError = specification.get$handleUncaughtError() != null ? new P._ZoneFunction(t1, specification.get$handleUncaughtError()) : zone.get$_handleUncaughtError();
       return t1;
-    }, "call$5", "async___rootFork$closure", 10, 0, 62],
+    }, "call$5", "async___rootFork$closure", 10, 0, 64, 0, 2, 1, 27, 28],
     runZoned: function(body, onError, zoneSpecification, zoneValues) {
       var errorHandler, zone;
       errorHandler = new P.runZoned_closure(onError);
@@ -5653,17 +5887,17 @@
     },
     _AsyncRun__initializeScheduleImmediate_internalCallback: {
       "^": "Closure:0;_box_0",
-      call$1: function(_) {
+      call$1: [function(_) {
         var t1, f;
         --init.globalState.topEventLoop._activeJsAsyncCount;
         t1 = this._box_0;
         f = t1.storedCallback;
         t1.storedCallback = null;
         f.call$0();
-      }
+      }, null, null, 2, 0, null, 6, "call"]
     },
     _AsyncRun__initializeScheduleImmediate_closure: {
-      "^": "Closure:30;_box_0,div,span",
+      "^": "Closure:39;_box_0,div,span",
       call$1: function(callback) {
         var t1, t2;
         ++init.globalState.topEventLoop._activeJsAsyncCount;
@@ -5675,35 +5909,35 @@
     },
     _AsyncRun__scheduleImmediateJsOverride_internalCallback: {
       "^": "Closure:1;callback",
-      call$0: function() {
+      call$0: [function() {
         --init.globalState.topEventLoop._activeJsAsyncCount;
         this.callback.call$0();
-      }
+      }, null, null, 0, 0, null, "call"]
     },
     _AsyncRun__scheduleImmediateWithSetImmediate_internalCallback: {
       "^": "Closure:1;callback",
-      call$0: function() {
+      call$0: [function() {
         --init.globalState.topEventLoop._activeJsAsyncCount;
         this.callback.call$0();
-      }
+      }, null, null, 0, 0, null, "call"]
     },
     _awaitOnObject_closure: {
       "^": "Closure:0;bodyFunction",
-      call$1: function(result) {
+      call$1: [function(result) {
         return this.bodyFunction.call$2(0, result);
-      }
+      }, null, null, 2, 0, null, 14, "call"]
     },
     _awaitOnObject_closure0: {
       "^": "Closure:5;bodyFunction",
-      call$2: function(error, stackTrace) {
+      call$2: [function(error, stackTrace) {
         this.bodyFunction.call$2(1, new H.ExceptionAndStackTrace(error, stackTrace));
-      }
+      }, null, null, 4, 0, null, 3, 4, "call"]
     },
     _wrapJsFunctionForAsync_closure: {
-      "^": "Closure:27;$protected",
-      call$2: function(errorCode, result) {
+      "^": "Closure:50;$protected",
+      call$2: [function(errorCode, result) {
         this.$protected(errorCode, result);
-      }
+      }, null, null, 4, 0, null, 31, 14, "call"]
     },
     Future: {
       "^": "Object;$ti"
@@ -5751,13 +5985,13 @@
         t1._complete$1(value);
       }, function($receiver) {
         return this.complete$1($receiver, null);
-      }, "complete$0", "call$1", "call$0", "get$complete", 0, 2, 28, 0],
+      }, "complete$0", "call$1", "call$0", "get$complete", 0, 2, 45, 5, 9],
       _completeError$2: function(error, stackTrace) {
         this.future._completeError$2(error, stackTrace);
       }
     },
     _FutureListener: {
-      "^": "Object;_nextListener<,result,state,callback,errorCallback",
+      "^": "Object;_nextListener@,result>,state,callback,errorCallback<",
       get$_zone: function() {
         return this.result._zone;
       },
@@ -5770,6 +6004,9 @@
       get$handlesComplete: function() {
         return this.state === 8;
       },
+      get$hasErrorCallback: function() {
+        return this.errorCallback != null;
+      },
       handleValue$1: function(sourceResult) {
         return this.result._zone.runUnary$2(this.callback, sourceResult);
       },
@@ -5798,13 +6035,20 @@
       }
     },
     _Future: {
-      "^": "Object;_state<,_zone,_resultOrListeners<,$ti",
+      "^": "Object;_state<,_zone<,_resultOrListeners<,$ti",
       get$_isChained: function() {
         return this._state === 2;
       },
       get$_isComplete: function() {
         return this._state >= 4;
       },
+      get$_hasError: function() {
+        return this._state === 8;
+      },
+      _setChained$1: function(source) {
+        this._state = 2;
+        this._resultOrListeners = source;
+      },
       then$2$onError: function(f, onError) {
         var currentZone = $.Zone__current;
         if (currentZone !== C.C__RootZone) {
@@ -5829,6 +6073,30 @@
         this._addListener$1(new P._FutureListener(null, result, 8, t1 !== C.C__RootZone ? t1.registerCallback$1(action) : action, null));
         return result;
       },
+      _setPendingComplete$0: function() {
+        this._state = 1;
+      },
+      _clearPendingComplete$0: function() {
+        this._state = 0;
+      },
+      get$_error: function() {
+        return this._resultOrListeners;
+      },
+      get$_chainSource: function() {
+        return this._resultOrListeners;
+      },
+      _setValue$1: function(value) {
+        this._state = 4;
+        this._resultOrListeners = value;
+      },
+      _setErrorObject$1: function(error) {
+        this._state = 8;
+        this._resultOrListeners = error;
+      },
+      _cloneResult$1: function(source) {
+        this._state = source.get$_state();
+        this._resultOrListeners = source.get$_resultOrListeners();
+      },
       _addListener$1: function(listener) {
         var t1, source;
         t1 = this._state;
@@ -5842,8 +6110,8 @@
               source._addListener$1(listener);
               return;
             }
-            this._state = source._state;
-            this._resultOrListeners = source._resultOrListeners;
+            this._state = source.get$_state();
+            this._resultOrListeners = source.get$_resultOrListeners();
           }
           this._zone.scheduleMicrotask$1(new P._Future__addListener_closure(this, listener));
         }
@@ -5860,8 +6128,8 @@
           this._resultOrListeners = listeners;
           if (existingListeners != null) {
             for (cursor = listeners; cursor.get$_nextListener() != null;)
-              cursor = cursor._nextListener;
-            cursor._nextListener = existingListeners;
+              cursor = cursor.get$_nextListener();
+            cursor.set$_nextListener(existingListeners);
           }
         } else {
           if (t2 === 2) {
@@ -5870,8 +6138,8 @@
               source._prependListeners$1(listeners);
               return;
             }
-            this._state = source._state;
-            this._resultOrListeners = source._resultOrListeners;
+            this._state = source.get$_state();
+            this._resultOrListeners = source.get$_resultOrListeners();
           }
           t1.listeners = this._reverseListeners$1(listeners);
           this._zone.scheduleMicrotask$1(new P._Future__prependListeners_closure(t1, this));
@@ -5886,7 +6154,7 @@
         var current, prev, next;
         for (current = listeners, prev = null; current != null; prev = current, current = next) {
           next = current.get$_nextListener();
-          current._nextListener = prev;
+          current.set$_nextListener(prev);
         }
         return prev;
       },
@@ -5908,7 +6176,7 @@
         P._Future__propagateToListeners(this, listeners);
       }, function(error) {
         return this._completeError$2(error, null);
-      }, "_completeError$1", "call$2", "call$1", "get$_completeError", 2, 2, 6, 0],
+      }, "_completeError$1", "call$2", "call$1", "get$_completeError", 2, 2, 6, 5, 3, 4],
       _asyncComplete$1: function(value) {
         if (!!J.getInterceptor(value).$isFuture) {
           if (value._state === 8) {
@@ -5929,7 +6197,7 @@
       static: {
         _Future__chainForeignFuture: function(source, target) {
           var e, s, exception, t1;
-          target._state = 1;
+          target._setPendingComplete$0();
           try {
             source.then$2$onError(new P._Future__chainForeignFuture_closure(target), new P._Future__chainForeignFuture_closure0(target));
           } catch (exception) {
@@ -5940,52 +6208,47 @@
           }
         },
         _Future__chainCoreFuture: function(source, target) {
-          var t1, current, listeners;
+          var listeners;
           for (; source.get$_isChained();)
-            source = source._resultOrListeners;
-          t1 = source.get$_isComplete();
-          current = target._resultOrListeners;
-          if (t1) {
-            target._resultOrListeners = null;
-            listeners = target._reverseListeners$1(current);
-            target._state = source._state;
-            target._resultOrListeners = source._resultOrListeners;
+            source = source.get$_chainSource();
+          if (source.get$_isComplete()) {
+            listeners = target._removeListeners$0();
+            target._cloneResult$1(source);
             P._Future__propagateToListeners(target, listeners);
           } else {
-            target._state = 2;
-            target._resultOrListeners = source;
-            source._prependListeners$1(current);
+            listeners = target.get$_resultOrListeners();
+            target._setChained$1(source);
+            source._prependListeners$1(listeners);
           }
         },
         _Future__propagateToListeners: function(source, listeners) {
-          var t1, t2, t3, hasError, asyncError, listeners0, sourceResult, zone, oldZone, t4, result, current;
+          var t1, t2, t3, hasError, asyncError, listeners0, sourceResult, zone, oldZone, t4, result;
           t1 = {};
           t1.source = source;
           for (t2 = source; true;) {
             t3 = {};
-            hasError = t2._state === 8;
+            hasError = t2.get$_hasError();
             if (listeners == null) {
               if (hasError) {
-                asyncError = t2._resultOrListeners;
-                t2._zone.handleUncaughtError$2(J.get$error$x(asyncError), asyncError.get$stackTrace());
+                asyncError = t1.source.get$_error();
+                t1.source.get$_zone().handleUncaughtError$2(J.get$error$x(asyncError), asyncError.get$stackTrace());
               }
               return;
             }
             for (; listeners.get$_nextListener() != null; listeners = listeners0) {
-              listeners0 = listeners._nextListener;
-              listeners._nextListener = null;
+              listeners0 = listeners.get$_nextListener();
+              listeners.set$_nextListener(null);
               P._Future__propagateToListeners(t1.source, listeners);
             }
-            sourceResult = t1.source._resultOrListeners;
+            sourceResult = t1.source.get$_resultOrListeners();
             t3.listenerHasError = hasError;
             t3.listenerValueOrError = sourceResult;
             t2 = !hasError;
             if (!t2 || listeners.get$handlesValue() || listeners.get$handlesComplete()) {
               zone = listeners.get$_zone();
-              if (hasError && !t1.source._zone.inSameErrorZone$1(zone)) {
-                t2 = t1.source;
-                asyncError = t2._resultOrListeners;
-                t2._zone.handleUncaughtError$2(J.get$error$x(asyncError), asyncError.get$stackTrace());
+              if (hasError && !t1.source.get$_zone().inSameErrorZone$1(zone)) {
+                asyncError = t1.source.get$_error();
+                t1.source.get$_zone().handleUncaughtError$2(J.get$error$x(asyncError), asyncError.get$stackTrace());
                 return;
               }
               oldZone = $.Zone__current;
@@ -6005,14 +6268,11 @@
               t2 = t3.listenerValueOrError;
               t4 = J.getInterceptor(t2);
               if (!!t4.$isFuture) {
-                result = listeners.result;
+                result = J.get$result$x(listeners);
                 if (!!t4.$is_Future)
                   if (t2._state >= 4) {
-                    current = result._resultOrListeners;
-                    result._resultOrListeners = null;
-                    listeners = result._reverseListeners$1(current);
-                    result._state = t2._state;
-                    result._resultOrListeners = t2._resultOrListeners;
+                    listeners = result._removeListeners$0();
+                    result._cloneResult$1(t2);
                     t1.source = t2;
                     continue;
                   } else
@@ -6022,17 +6282,14 @@
                 return;
               }
             }
-            result = listeners.result;
+            result = J.get$result$x(listeners);
             listeners = result._removeListeners$0();
             t2 = t3.listenerHasError;
             t3 = t3.listenerValueOrError;
-            if (!t2) {
-              result._state = 4;
-              result._resultOrListeners = t3;
-            } else {
-              result._state = 8;
-              result._resultOrListeners = t3;
-            }
+            if (!t2)
+              result._setValue$1(t3);
+            else
+              result._setErrorObject$1(t3);
             t1.source = result;
             t2 = result;
           }
@@ -6041,61 +6298,60 @@
     },
     _Future__addListener_closure: {
       "^": "Closure:1;$this,listener",
-      call$0: function() {
+      call$0: [function() {
         P._Future__propagateToListeners(this.$this, this.listener);
-      }
+      }, null, null, 0, 0, null, "call"]
     },
     _Future__prependListeners_closure: {
       "^": "Closure:1;_box_0,$this",
-      call$0: function() {
+      call$0: [function() {
         P._Future__propagateToListeners(this.$this, this._box_0.listeners);
-      }
+      }, null, null, 0, 0, null, "call"]
     },
     _Future__chainForeignFuture_closure: {
       "^": "Closure:0;target",
-      call$1: function(value) {
+      call$1: [function(value) {
         var t1 = this.target;
-        t1._state = 0;
+        t1._clearPendingComplete$0();
         t1._complete$1(value);
-      }
+      }, null, null, 2, 0, null, 9, "call"]
     },
     _Future__chainForeignFuture_closure0: {
-      "^": "Closure:32;target",
-      call$2: function(error, stackTrace) {
+      "^": "Closure:40;target",
+      call$2: [function(error, stackTrace) {
         this.target._completeError$2(error, stackTrace);
-      },
-      call$1: function(error) {
+      }, function(error) {
         return this.call$2(error, null);
-      }
+      }, "call$1", null, null, null, 2, 2, null, 5, 3, 4, "call"]
     },
     _Future__chainForeignFuture_closure1: {
       "^": "Closure:1;target,e,s",
-      call$0: function() {
+      call$0: [function() {
         this.target._completeError$2(this.e, this.s);
-      }
+      }, null, null, 0, 0, null, "call"]
     },
     _Future__asyncComplete_closure: {
       "^": "Closure:1;$this,coreFuture",
-      call$0: function() {
+      call$0: [function() {
         P._Future__chainCoreFuture(this.coreFuture, this.$this);
-      }
+      }, null, null, 0, 0, null, "call"]
     },
     _Future__asyncComplete_closure0: {
       "^": "Closure:1;$this,typedValue",
-      call$0: function() {
+      call$0: [function() {
         var t1, listeners;
         t1 = this.$this;
         listeners = t1._removeListeners$0();
         t1._state = 4;
         t1._resultOrListeners = this.typedValue;
         P._Future__propagateToListeners(t1, listeners);
-      }
+      }, null, null, 0, 0, null, "call"]
     },
     _Future__asyncCompleteError_closure: {
       "^": "Closure:1;$this,error,stackTrace",
-      call$0: function() {
+      call$0: [function() {
         this.$this._completeError$2(this.error, this.stackTrace);
-      }
+      }, null, null, 0, 0, null, "call"]
     },
     _Future__propagateToListeners_handleWhenCompleteCallback: {
       "^": "Closure:2;_box_1,_box_0,hasError,listener",
@@ -6109,7 +6365,7 @@
           e = t1;
           s = H.getTraceFromException(exception);
           if (this.hasError) {
-            t1 = J.get$error$x(this._box_1.source._resultOrListeners);
+            t1 = J.get$error$x(this._box_1.source.get$_error());
             t2 = e;
             t2 = t1 == null ? t2 == null : t1 === t2;
             t1 = t2;
@@ -6117,7 +6373,7 @@
             t1 = false;
           t2 = this._box_0;
           if (t1)
-            t2.listenerValueOrError = this._box_1.source._resultOrListeners;
+            t2.listenerValueOrError = this._box_1.source.get$_error();
           else
             t2.listenerValueOrError = new P.AsyncError(e, s);
           t2.listenerHasError = true;
@@ -6141,9 +6397,9 @@
     },
     _Future__propagateToListeners_handleWhenCompleteCallback_closure: {
       "^": "Closure:0;originalSource",
-      call$1: function(_) {
+      call$1: [function(_) {
         return this.originalSource;
-      }
+      }, null, null, 2, 0, null, 6, "call"]
     },
     _Future__propagateToListeners_handleValueCallback: {
       "^": "Closure:2;_box_0,listener,sourceResult",
@@ -6166,9 +6422,9 @@
       call$0: function() {
         var asyncError, e, s, t1, t2, exception, t3, t4;
         try {
-          asyncError = this._box_1.source._resultOrListeners;
+          asyncError = this._box_1.source.get$_error();
           t1 = this.listener;
-          if (t1.matchesErrorTest$1(asyncError) === true && t1.errorCallback != null) {
+          if (t1.matchesErrorTest$1(asyncError) === true && t1.get$hasErrorCallback()) {
             t2 = this._box_0;
             t2.listenerValueOrError = t1.handleError$1(asyncError);
             t2.listenerHasError = false;
@@ -6178,11 +6434,11 @@
           e = t1;
           s = H.getTraceFromException(exception);
           t1 = this._box_1;
-          t2 = J.get$error$x(t1.source._resultOrListeners);
+          t2 = J.get$error$x(t1.source.get$_error());
           t3 = e;
           t4 = this._box_0;
           if (t2 == null ? t3 == null : t2 === t3)
-            t4.listenerValueOrError = t1.source._resultOrListeners;
+            t4.listenerValueOrError = t1.source.get$_error();
           else
             t4.listenerValueOrError = new P.AsyncError(e, s);
           t4.listenerHasError = true;
@@ -6197,6 +6453,12 @@
       map$1: function(_, convert) {
         return new P._MapStream(convert, this, [H.getRuntimeTypeArgument(this, "Stream", 0), null]);
       },
+      handleError$2$test: function(onError, test) {
+        return new P._HandleErrorStream(onError, test, this, [H.getRuntimeTypeArgument(this, "Stream", 0)]);
+      },
+      handleError$1: function(onError) {
+        return this.handleError$2$test(onError, null);
+      },
       pipe$1: function(streamConsumer) {
         return streamConsumer.addStream$1(this).then$1(new P.Stream_pipe_closure(streamConsumer));
       },
@@ -6243,18 +6505,18 @@
     },
     Stream_pipe_closure: {
       "^": "Closure:0;streamConsumer",
-      call$1: function(_) {
+      call$1: [function(_) {
         return this.streamConsumer.close$0(0);
-      }
+      }, null, null, 2, 0, null, 6, "call"]
     },
     Stream_contains_closure: {
       "^": "Closure;_box_0,$this,needle,future",
-      call$1: function(element) {
+      call$1: [function(element) {
         var t1, t2;
         t1 = this._box_0;
         t2 = this.future;
         P._runUserCode(new P.Stream_contains__closure(this.needle, element), new P.Stream_contains__closure0(t1, t2), P._cancelAndErrorClosure(t1.subscription, t2));
-      },
+      }, null, null, 2, 0, null, 22, "call"],
       $signature: function() {
         return H.computeSignature(function(T) {
           return {func: 1, args: [T]};
@@ -6268,7 +6530,7 @@
       }
     },
     Stream_contains__closure0: {
-      "^": "Closure:31;_box_0,future",
+      "^": "Closure:38;_box_0,future",
       call$1: function(isMatch) {
         if (isMatch === true)
           P._cancelAndValue(this._box_0.subscription, this.future, true);
@@ -6276,15 +6538,15 @@
     },
     Stream_contains_closure0: {
       "^": "Closure:1;future",
-      call$0: function() {
+      call$0: [function() {
         this.future._complete$1(false);
-      }
+      }, null, null, 0, 0, null, "call"]
     },
     Stream_forEach_closure: {
       "^": "Closure;_box_0,$this,action,future",
-      call$1: function(element) {
+      call$1: [function(element) {
         P._runUserCode(new P.Stream_forEach__closure(this.action, element), new P.Stream_forEach__closure0(), P._cancelAndErrorClosure(this._box_0.subscription, this.future));
-      },
+      }, null, null, 2, 0, null, 22, "call"],
       $signature: function() {
         return H.computeSignature(function(T) {
           return {func: 1, args: [T]};
@@ -6304,39 +6566,39 @@
     },
     Stream_forEach_closure0: {
       "^": "Closure:1;future",
-      call$0: function() {
+      call$0: [function() {
         this.future._complete$1(null);
-      }
+      }, null, null, 0, 0, null, "call"]
     },
     Stream_length_closure: {
       "^": "Closure:0;_box_0",
-      call$1: function(_) {
+      call$1: [function(_) {
         ++this._box_0.count;
-      }
+      }, null, null, 2, 0, null, 6, "call"]
     },
     Stream_length_closure0: {
       "^": "Closure:1;_box_0,future",
-      call$0: function() {
+      call$0: [function() {
         this.future._complete$1(this._box_0.count);
-      }
+      }, null, null, 0, 0, null, "call"]
     },
     Stream_isEmpty_closure: {
       "^": "Closure:0;_box_0,future",
-      call$1: function(_) {
+      call$1: [function(_) {
         P._cancelAndValue(this._box_0.subscription, this.future, false);
-      }
+      }, null, null, 2, 0, null, 6, "call"]
     },
     Stream_isEmpty_closure0: {
       "^": "Closure:1;future",
-      call$0: function() {
+      call$0: [function() {
         this.future._complete$1(true);
-      }
+      }, null, null, 0, 0, null, "call"]
     },
     Stream_toList_closure: {
       "^": "Closure;$this,result",
-      call$1: function(data) {
+      call$1: [function(data) {
         this.result.push(data);
-      },
+      }, null, null, 2, 0, null, 16, "call"],
       $signature: function() {
         return H.computeSignature(function(T) {
           return {func: 1, args: [T]};
@@ -6345,15 +6607,19 @@
     },
     Stream_toList_closure0: {
       "^": "Closure:1;result,future",
-      call$0: function() {
+      call$0: [function() {
         this.future._complete$1(this.result);
-      }
+      }, null, null, 0, 0, null, "call"]
     },
     StreamSubscription: {
       "^": "Object;"
     },
     _StreamController: {
       "^": "Object;_state<,$ti",
+      get$isPaused: function() {
+        var t1 = this._state;
+        return (t1 & 1) !== 0 ? this.get$_subscription().get$_isInputPaused() : (t1 & 2) === 0;
+      },
       get$_pendingEvents: function() {
         if ((this._state & 8) === 0)
           return this._varData;
@@ -6371,10 +6637,10 @@
         }
         state = this._varData;
         if (state.get$varData() == null)
-          state.varData = new P._StreamImplEvents(null, null, 0, this.$ti);
-        return state.varData;
+          state.set$varData(new P._StreamImplEvents(null, null, 0, this.$ti));
+        return state.get$varData();
       },
-      get$_async$_subscription: function() {
+      get$_subscription: function() {
         if ((this._state & 8) !== 0)
           return this._varData.get$varData();
         return this._varData;
@@ -6400,7 +6666,7 @@
         return H.computeSignature(function(T) {
           return {func: 1, v: true, args: [T]};
         }, this.$receiver, "_StreamController");
-      }],
+      }, 9],
       addError$2: [function(error, stackTrace) {
         var replacement;
         if (this._state >= 4)
@@ -6412,11 +6678,11 @@
           error = error != null ? error : new P.NullThrownError();
           stackTrace = replacement.get$stackTrace();
         }
-        this._async$_addError$2(error, stackTrace);
+        this._addError$2(error, stackTrace);
       }, function(error) {
         return this.addError$2(error, null);
-      }, "addError$1", "call$2", "call$1", "get$addError", 2, 2, 33, 0],
-      close$0: function(_) {
+      }, "addError$1", "call$2", "call$1", "get$addError", 2, 2, 37, 5, 3, 4],
+      close$0: [function(_) {
         var t1 = this._state;
         if ((t1 & 4) !== 0)
           return this._ensureDoneFuture$0();
@@ -6429,7 +6695,7 @@
         else if ((t1 & 3) === 0)
           this._ensurePendingEvents$0().add$1(0, C.C__DelayedDone);
         return this._ensureDoneFuture$0();
-      },
+      }, null, "get$close", 0, 0, null],
       _async$_add$1: function(value) {
         var t1 = this._state;
         if ((t1 & 1) !== 0)
@@ -6437,7 +6703,7 @@
         else if ((t1 & 3) === 0)
           this._ensurePendingEvents$0().add$1(0, new P._DelayedData(value, null, this.$ti));
       },
-      _async$_addError$2: function(error, stackTrace) {
+      _addError$2: function(error, stackTrace) {
         var t1 = this._state;
         if ((t1 & 1) !== 0)
           this._sendError$2(error, stackTrace);
@@ -6457,7 +6723,7 @@
         if ((t2 & 8) !== 0) {
           addState = this._varData;
           addState.set$varData(subscription);
-          addState.addSubscription.resume$0();
+          addState.resume$0(0);
         } else
           this._varData = subscription;
         subscription._setPendingEvents$1(pendingEvents);
@@ -6502,22 +6768,22 @@
     },
     _StreamController__recordCancel_complete: {
       "^": "Closure:2;$this",
-      call$0: function() {
+      call$0: [function() {
         var t1 = this.$this._doneFuture;
         if (t1 != null && t1._state === 0)
           t1._asyncComplete$1(null);
-      }
+      }, null, null, 0, 0, null, "call"]
     },
     _SyncStreamControllerDispatch: {
       "^": "Object;",
       _sendData$1: function(data) {
-        this.get$_async$_subscription()._async$_add$1(data);
+        this.get$_subscription()._async$_add$1(data);
       },
       _sendError$2: function(error, stackTrace) {
-        this.get$_async$_subscription()._async$_addError$2(error, stackTrace);
+        this.get$_subscription()._addError$2(error, stackTrace);
       },
       _sendDone$0: function() {
-        this.get$_async$_subscription()._close$0();
+        this.get$_subscription()._close$0();
       }
     },
     _SyncStreamController: {
@@ -6552,7 +6818,7 @@
       _onResume$0: [function() {
         var t1 = this._controller;
         if ((t1._state & 8) !== 0)
-          t1._varData.resume$0();
+          t1._varData.resume$0(0);
         P._runGuarded(t1.onResume);
       }, "call$0", "get$_onResume", 0, 0, 2]
     },
@@ -6567,13 +6833,13 @@
         return H.computeSignature(function(T) {
           return {func: 1, v: true, args: [T]};
         }, this.$receiver, "_StreamSinkWrapper");
-      }]
+      }, 16]
     },
     _EventSink: {
       "^": "Object;"
     },
     _BufferingStreamSubscription: {
-      "^": "Object;_state<,$ti",
+      "^": "Object;_zone<,_state<,$ti",
       _setPendingEvents$1: function(pendingEvents) {
         if (pendingEvents == null)
           return;
@@ -6596,7 +6862,7 @@
       pause$0: function($receiver) {
         return this.pause$1($receiver, null);
       },
-      resume$0: function() {
+      resume$0: function(_) {
         var t1 = this._state;
         if ((t1 & 8) !== 0)
           return;
@@ -6628,6 +6894,12 @@
         t1 = this._cancelFuture;
         return t1 == null ? $.$get$Future__nullFuture() : t1;
       },
+      get$_isInputPaused: function() {
+        return (this._state & 4) !== 0;
+      },
+      get$isPaused: function() {
+        return this._state >= 128;
+      },
       _cancel$0: function() {
         var t1 = (this._state | 8) >>> 0;
         this._state = t1;
@@ -6646,7 +6918,7 @@
         else
           this._addPending$1(new P._DelayedData(data, null, [null]));
       }],
-      _async$_addError$2: ["super$_BufferingStreamSubscription$_addError", function(error, stackTrace) {
+      _addError$2: ["super$_BufferingStreamSubscription$_addError", function(error, stackTrace) {
         var t1 = this._state;
         if ((t1 & 8) !== 0)
           return;
@@ -6793,7 +7065,7 @@
     },
     _BufferingStreamSubscription__sendError_sendError: {
       "^": "Closure:2;$this,error,stackTrace",
-      call$0: function() {
+      call$0: [function() {
         var t1, t2, t3, t4, t5, t6;
         t1 = this.$this;
         t2 = t1._state;
@@ -6810,11 +7082,11 @@
         else
           t4.runUnaryGuarded$2(t6, t5);
         t1._state = (t1._state & 4294967263) >>> 0;
-      }
+      }, null, null, 0, 0, null, "call"]
     },
     _BufferingStreamSubscription__sendDone_sendDone: {
       "^": "Closure:2;$this",
-      call$0: function() {
+      call$0: [function() {
         var t1, t2;
         t1 = this.$this;
         t2 = t1._state;
@@ -6823,7 +7095,7 @@
         t1._state = (t2 | 42) >>> 0;
         t1._zone.runGuarded$1(t1._onDone);
         t1._state = (t1._state & 4294967263) >>> 0;
-      }
+      }, null, null, 0, 0, null, "call"]
     },
     _StreamImpl: {
       "^": "Stream;$ti",
@@ -6890,7 +7162,7 @@
     },
     _PendingEvents_schedule_closure: {
       "^": "Closure:1;$this,dispatch",
-      call$0: function() {
+      call$0: [function() {
         var t1, oldState, $event, t2;
         t1 = this.$this;
         oldState = t1._state;
@@ -6903,7 +7175,7 @@
         if (t2 == null)
           t1.lastPendingEvent = null;
         $event.perform$1(this.dispatch);
-      }
+      }, null, null, 0, 0, null, "call"]
     },
     _StreamImplEvents: {
       "^": "_PendingEvents;firstPendingEvent,lastPendingEvent,_state,$ti",
@@ -6922,7 +7194,10 @@
       }
     },
     _DoneStreamSubscription: {
-      "^": "Object;_zone,_state<,_onDone",
+      "^": "Object;_zone<,_state<,_onDone",
+      get$isPaused: function() {
+        return this._state >= 4;
+      },
       _schedule$0: function() {
         if ((this._state & 2) !== 0)
           return;
@@ -6935,7 +7210,7 @@
       pause$0: function($receiver) {
         return this.pause$1($receiver, null);
       },
-      resume$0: function() {
+      resume$0: function(_) {
         var t1 = this._state;
         if (t1 >= 4) {
           t1 -= 4;
@@ -6959,7 +7234,7 @@
       }, "call$0", "get$_sendDone", 0, 0, 2]
     },
     _StreamIterator: {
-      "^": "Object;_async$_subscription,_stateData,_isPaused,$ti"
+      "^": "Object;_subscription,_stateData,_isPaused,$ti"
     },
     _EmptyStream: {
       "^": "Stream;$ti",
@@ -6977,9 +7252,9 @@
     },
     _cancelAndError_closure: {
       "^": "Closure:1;future,error,stackTrace",
-      call$0: function() {
+      call$0: [function() {
         return this.future._completeError$2(this.error, this.stackTrace);
-      }
+      }, null, null, 0, 0, null, "call"]
     },
     _cancelAndErrorClosure_closure: {
       "^": "Closure:5;subscription,future",
@@ -6989,9 +7264,9 @@
     },
     _cancelAndValue_closure: {
       "^": "Closure:1;future,value",
-      call$0: function() {
+      call$0: [function() {
         return this.future._complete$1(this.value);
-      }
+      }, null, null, 0, 0, null, "call"]
     },
     _ForwardingStream: {
       "^": "Stream;$ti",
@@ -7011,40 +7286,40 @@
         sink._async$_add$1(data);
       },
       _handleError$3: function(error, stackTrace, sink) {
-        sink._async$_addError$2(error, stackTrace);
+        sink._addError$2(error, stackTrace);
       },
       $asStream: function($S, $T) {
         return [$T];
       }
     },
     _ForwardingStreamSubscription: {
-      "^": "_BufferingStreamSubscription;_stream,_async$_subscription,_async$_onData,_onError,_onDone,_zone,_state,_cancelFuture,_pending,$ti",
+      "^": "_BufferingStreamSubscription;_stream,_subscription,_async$_onData,_onError,_onDone,_zone,_state,_cancelFuture,_pending,$ti",
       _async$_add$1: function(data) {
         if ((this._state & 2) !== 0)
           return;
         this.super$_BufferingStreamSubscription$_add(data);
       },
-      _async$_addError$2: function(error, stackTrace) {
+      _addError$2: function(error, stackTrace) {
         if ((this._state & 2) !== 0)
           return;
         this.super$_BufferingStreamSubscription$_addError(error, stackTrace);
       },
       _onPause$0: [function() {
-        var t1 = this._async$_subscription;
+        var t1 = this._subscription;
         if (t1 == null)
           return;
         t1.pause$0(0);
       }, "call$0", "get$_onPause", 0, 0, 2],
       _onResume$0: [function() {
-        var t1 = this._async$_subscription;
+        var t1 = this._subscription;
         if (t1 == null)
           return;
-        t1.resume$0();
+        t1.resume$0(0);
       }, "call$0", "get$_onResume", 0, 0, 2],
       _onCancel$0: function() {
-        var t1 = this._async$_subscription;
+        var t1 = this._subscription;
         if (t1 != null) {
-          this._async$_subscription = null;
+          this._subscription = null;
           return t1.cancel$0();
         }
         return;
@@ -7055,10 +7330,10 @@
         return H.computeSignature(function(S, T) {
           return {func: 1, v: true, args: [S]};
         }, this.$receiver, "_ForwardingStreamSubscription");
-      }],
+      }, 16],
       _handleError$2: [function(error, stackTrace) {
         this._stream._handleError$3(error, stackTrace, this);
-      }, "call$2", "get$_handleError", 4, 0, 34],
+      }, "call$2", "get$_handleError", 4, 0, 11, 3, 4],
       _handleDone$0: [function() {
         this._close$0();
       }, "call$0", "get$_handleDone", 0, 0, 2],
@@ -7066,7 +7341,7 @@
         var t1, t2;
         t1 = this.get$_handleData();
         t2 = this.get$_handleError();
-        this._async$_subscription = this._stream._async$_source.listen$3$onDone$onError(t1, this.get$_handleDone(), t2);
+        this._subscription = this._stream._async$_source.listen$3$onDone$onError(t1, this.get$_handleDone(), t2);
       },
       $as_BufferingStreamSubscription: function($S, $T) {
         return [$T];
@@ -7100,6 +7375,33 @@
         sink._async$_add$1(outputEvent);
       }
     },
+    _HandleErrorStream: {
+      "^": "_ForwardingStream;_transform,_test,_async$_source,$ti",
+      _handleError$3: function(error, stackTrace, sink) {
+        var matches, e, s, exception, t1;
+        matches = true;
+        if (matches === true)
+          try {
+            P._invokeErrorHandler(this._transform, error, stackTrace);
+          } catch (exception) {
+            t1 = H.unwrapException(exception);
+            e = t1;
+            s = H.getTraceFromException(exception);
+            t1 = e;
+            if (t1 == null ? error == null : t1 === error)
+              sink._addError$2(error, stackTrace);
+            else
+              P._addErrorWithReplacement(sink, e, s);
+            return;
+          }
+        else
+          sink._addError$2(error, stackTrace);
+      },
+      $as_ForwardingStream: function($T) {
+        return [$T, $T];
+      },
+      $asStream: null
+    },
     Timer: {
       "^": "Object;"
     },
@@ -7180,37 +7482,37 @@
         implementation = this._delegationTarget.get$_run();
         implZone = implementation.zone;
         return implementation.$function.call$4(implZone, P._parentDelegate(implZone), zone, f);
-      }, "call$2", "get$run", 4, 0, 36],
+      }, "call$2", "get$run", 4, 0, 34],
       runUnary$3: [function(zone, f, arg) {
         var implementation, implZone;
         implementation = this._delegationTarget.get$_runUnary();
         implZone = implementation.zone;
         return implementation.$function.call$5(implZone, P._parentDelegate(implZone), zone, f, arg);
-      }, "call$3", "get$runUnary", 6, 0, 37],
+      }, "call$3", "get$runUnary", 6, 0, 32],
       runBinary$4: [function(zone, f, arg1, arg2) {
         var implementation, implZone;
         implementation = this._delegationTarget.get$_runBinary();
         implZone = implementation.zone;
         return implementation.$function.call$6(implZone, P._parentDelegate(implZone), zone, f, arg1, arg2);
-      }, "call$4", "get$runBinary", 8, 0, 38],
+      }, "call$4", "get$runBinary", 8, 0, 31],
       registerCallback$2: [function(zone, f) {
         var implementation, implZone;
         implementation = this._delegationTarget.get$_registerCallback();
         implZone = implementation.zone;
         return implementation.$function.call$4(implZone, P._parentDelegate(implZone), zone, f);
-      }, "call$2", "get$registerCallback", 4, 0, 39],
+      }, "call$2", "get$registerCallback", 4, 0, 30],
       registerUnaryCallback$2: [function(zone, f) {
         var implementation, implZone;
         implementation = this._delegationTarget.get$_registerUnaryCallback();
         implZone = implementation.zone;
         return implementation.$function.call$4(implZone, P._parentDelegate(implZone), zone, f);
-      }, "call$2", "get$registerUnaryCallback", 4, 0, 40],
+      }, "call$2", "get$registerUnaryCallback", 4, 0, 29],
       registerBinaryCallback$2: [function(zone, f) {
         var implementation, implZone;
         implementation = this._delegationTarget.get$_registerBinaryCallback();
         implZone = implementation.zone;
         return implementation.$function.call$4(implZone, P._parentDelegate(implZone), zone, f);
-      }, "call$2", "get$registerBinaryCallback", 4, 0, 43],
+      }, "call$2", "get$registerBinaryCallback", 4, 0, 28],
       errorCallback$3: [function(zone, error, stackTrace) {
         var implementation, implZone;
         implementation = this._delegationTarget.get$_errorCallback();
@@ -7218,37 +7520,37 @@
         if (implZone === C.C__RootZone)
           return;
         return implementation.$function.call$5(implZone, P._parentDelegate(implZone), zone, error, stackTrace);
-      }, "call$3", "get$errorCallback", 6, 0, 48],
+      }, "call$3", "get$errorCallback", 6, 0, 33],
       scheduleMicrotask$2: [function(zone, f) {
         var implementation, implZone;
         implementation = this._delegationTarget.get$_scheduleMicrotask();
         implZone = implementation.zone;
         implementation.$function.call$4(implZone, P._parentDelegate(implZone), zone, f);
-      }, "call$2", "get$scheduleMicrotask", 4, 0, 21],
+      }, "call$2", "get$scheduleMicrotask", 4, 0, 23],
       createTimer$3: [function(zone, duration, f) {
         var implementation, implZone;
         implementation = this._delegationTarget.get$_createTimer();
         implZone = implementation.zone;
         return implementation.$function.call$5(implZone, P._parentDelegate(implZone), zone, duration, f);
-      }, "call$3", "get$createTimer", 6, 0, 23],
+      }, "call$3", "get$createTimer", 6, 0, 24],
       createPeriodicTimer$3: [function(zone, period, f) {
         var implementation, implZone;
         implementation = this._delegationTarget.get$_createPeriodicTimer();
         implZone = implementation.zone;
         return implementation.$function.call$5(implZone, P._parentDelegate(implZone), zone, period, f);
-      }, "call$3", "get$createPeriodicTimer", 6, 0, 24],
+      }, "call$3", "get$createPeriodicTimer", 6, 0, 25],
       print$2: [function(_, zone, line) {
         var implementation, implZone;
         implementation = this._delegationTarget.get$_print();
         implZone = implementation.zone;
         implementation.$function.call$4(implZone, P._parentDelegate(implZone), zone, line);
-      }, "call$2", "get$print", 4, 0, 25],
+      }, "call$2", "get$print", 4, 0, 26],
       fork$3: [function(zone, specification, zoneValues) {
         var implementation, implZone;
         implementation = this._delegationTarget.get$_fork();
         implZone = implementation.zone;
         return implementation.$function.call$5(implZone, P._parentDelegate(implZone), zone, specification, zoneValues);
-      }, "call$3", "get$fork", 6, 0, 26]
+      }, "call$3", "get$fork", 6, 0, 27]
     },
     _Zone: {
       "^": "Object;",
@@ -7352,49 +7654,49 @@
         return implementation.$function.call$5(t1, parentDelegate, this, specification, zoneValues);
       }, function() {
         return this.fork$2$specification$zoneValues(null, null);
-      }, "fork$0", "call$2$specification$zoneValues", "call$0", "get$fork", 0, 5, 10, 0, 0],
+      }, "fork$0", "call$2$specification$zoneValues", "call$0", "get$fork", 0, 5, 21, 5, 5],
       run$1: [function(f) {
         var implementation, t1, parentDelegate;
         implementation = this._run;
         t1 = implementation.zone;
         parentDelegate = P._parentDelegate(t1);
         return implementation.$function.call$4(t1, parentDelegate, this, f);
-      }, "call$1", "get$run", 2, 0, 11],
+      }, "call$1", "get$run", 2, 0, 20],
       runUnary$2: [function(f, arg) {
         var implementation, t1, parentDelegate;
         implementation = this._runUnary;
         t1 = implementation.zone;
         parentDelegate = P._parentDelegate(t1);
         return implementation.$function.call$5(t1, parentDelegate, this, f, arg);
-      }, "call$2", "get$runUnary", 4, 0, 12],
+      }, "call$2", "get$runUnary", 4, 0, 19],
       runBinary$3: [function(f, arg1, arg2) {
         var implementation, t1, parentDelegate;
         implementation = this._runBinary;
         t1 = implementation.zone;
         parentDelegate = P._parentDelegate(t1);
         return implementation.$function.call$6(t1, parentDelegate, this, f, arg1, arg2);
-      }, "call$3", "get$runBinary", 6, 0, 13],
+      }, "call$3", "get$runBinary", 6, 0, 18],
       registerCallback$1: [function(callback) {
         var implementation, t1, parentDelegate;
         implementation = this._registerCallback;
         t1 = implementation.zone;
         parentDelegate = P._parentDelegate(t1);
         return implementation.$function.call$4(t1, parentDelegate, this, callback);
-      }, "call$1", "get$registerCallback", 2, 0, 14],
+      }, "call$1", "get$registerCallback", 2, 0, 17],
       registerUnaryCallback$1: [function(callback) {
         var implementation, t1, parentDelegate;
         implementation = this._registerUnaryCallback;
         t1 = implementation.zone;
         parentDelegate = P._parentDelegate(t1);
         return implementation.$function.call$4(t1, parentDelegate, this, callback);
-      }, "call$1", "get$registerUnaryCallback", 2, 0, 9],
+      }, "call$1", "get$registerUnaryCallback", 2, 0, 8],
       registerBinaryCallback$1: [function(callback) {
         var implementation, t1, parentDelegate;
         implementation = this._registerBinaryCallback;
         t1 = implementation.zone;
         parentDelegate = P._parentDelegate(t1);
         return implementation.$function.call$4(t1, parentDelegate, this, callback);
-      }, "call$1", "get$registerBinaryCallback", 2, 0, 15],
+      }, "call$1", "get$registerBinaryCallback", 2, 0, 16],
       errorCallback$2: [function(error, stackTrace) {
         var implementation, implementationZone, parentDelegate;
         implementation = this._errorCallback;
@@ -7403,7 +7705,7 @@
           return;
         parentDelegate = P._parentDelegate(implementationZone);
         return implementation.$function.call$5(implementationZone, parentDelegate, this, error, stackTrace);
-      }, "call$2", "get$errorCallback", 4, 0, 16],
+      }, "call$2", "get$errorCallback", 4, 0, 15],
       scheduleMicrotask$1: [function(f) {
         var implementation, t1, parentDelegate;
         implementation = this._scheduleMicrotask;
@@ -7417,14 +7719,14 @@
         t1 = implementation.zone;
         parentDelegate = P._parentDelegate(t1);
         return implementation.$function.call$5(t1, parentDelegate, this, duration, f);
-      }, "call$2", "get$createTimer", 4, 0, 17],
+      }, "call$2", "get$createTimer", 4, 0, 14],
       createPeriodicTimer$2: [function(duration, f) {
         var implementation, t1, parentDelegate;
         implementation = this._createPeriodicTimer;
         t1 = implementation.zone;
         parentDelegate = P._parentDelegate(t1);
         return implementation.$function.call$5(t1, parentDelegate, this, duration, f);
-      }, "call$2", "get$createPeriodicTimer", 4, 0, 18],
+      }, "call$2", "get$createPeriodicTimer", 4, 0, 13],
       print$1: [function(_, line) {
         var implementation, t1, parentDelegate;
         implementation = this._print;
@@ -7435,21 +7737,21 @@
     },
     _CustomZone_bindCallback_closure: {
       "^": "Closure:1;$this,registered",
-      call$0: function() {
+      call$0: [function() {
         return this.$this.runGuarded$1(this.registered);
-      }
+      }, null, null, 0, 0, null, "call"]
     },
     _CustomZone_bindCallback_closure0: {
       "^": "Closure:1;$this,registered",
-      call$0: function() {
+      call$0: [function() {
         return this.$this.run$1(this.registered);
-      }
+      }, null, null, 0, 0, null, "call"]
     },
     _CustomZone_bindUnaryCallback_closure: {
       "^": "Closure:0;$this,registered",
-      call$1: function(arg) {
+      call$1: [function(arg) {
         return this.$this.runUnaryGuarded$2(this.registered, arg);
-      }
+      }, null, null, 2, 0, null, 12, "call"]
     },
     _rootHandleUncaughtError_closure: {
       "^": "Closure:1;_box_0,stackTrace",
@@ -7602,68 +7904,68 @@
         return P._rootFork(null, null, this, specification, zoneValues);
       }, function() {
         return this.fork$2$specification$zoneValues(null, null);
-      }, "fork$0", "call$2$specification$zoneValues", "call$0", "get$fork", 0, 5, 10, 0, 0],
+      }, "fork$0", "call$2$specification$zoneValues", "call$0", "get$fork", 0, 5, 21, 5, 5],
       run$1: [function(f) {
         if ($.Zone__current === C.C__RootZone)
           return f.call$0();
         return P._rootRun(null, null, this, f);
-      }, "call$1", "get$run", 2, 0, 11],
+      }, "call$1", "get$run", 2, 0, 20],
       runUnary$2: [function(f, arg) {
         if ($.Zone__current === C.C__RootZone)
           return f.call$1(arg);
         return P._rootRunUnary(null, null, this, f, arg);
-      }, "call$2", "get$runUnary", 4, 0, 12],
+      }, "call$2", "get$runUnary", 4, 0, 19],
       runBinary$3: [function(f, arg1, arg2) {
         if ($.Zone__current === C.C__RootZone)
           return f.call$2(arg1, arg2);
         return P._rootRunBinary(null, null, this, f, arg1, arg2);
-      }, "call$3", "get$runBinary", 6, 0, 13],
+      }, "call$3", "get$runBinary", 6, 0, 18],
       registerCallback$1: [function(f) {
         return f;
-      }, "call$1", "get$registerCallback", 2, 0, 14],
+      }, "call$1", "get$registerCallback", 2, 0, 17],
       registerUnaryCallback$1: [function(f) {
         return f;
-      }, "call$1", "get$registerUnaryCallback", 2, 0, 9],
+      }, "call$1", "get$registerUnaryCallback", 2, 0, 8],
       registerBinaryCallback$1: [function(f) {
         return f;
-      }, "call$1", "get$registerBinaryCallback", 2, 0, 15],
+      }, "call$1", "get$registerBinaryCallback", 2, 0, 16],
       errorCallback$2: [function(error, stackTrace) {
         return;
-      }, "call$2", "get$errorCallback", 4, 0, 16],
+      }, "call$2", "get$errorCallback", 4, 0, 15],
       scheduleMicrotask$1: [function(f) {
         P._rootScheduleMicrotask(null, null, this, f);
       }, "call$1", "get$scheduleMicrotask", 2, 0, 4],
       createTimer$2: [function(duration, f) {
         return P.Timer__createTimer(duration, f);
-      }, "call$2", "get$createTimer", 4, 0, 17],
+      }, "call$2", "get$createTimer", 4, 0, 14],
       createPeriodicTimer$2: [function(duration, f) {
         return P.Timer__createPeriodicTimer(duration, f);
-      }, "call$2", "get$createPeriodicTimer", 4, 0, 18],
+      }, "call$2", "get$createPeriodicTimer", 4, 0, 13],
       print$1: [function(_, line) {
         H.printString(line);
       }, "call$1", "get$print", 2, 0, 7]
     },
     _RootZone_bindCallback_closure: {
       "^": "Closure:1;$this,f",
-      call$0: function() {
+      call$0: [function() {
         return this.$this.runGuarded$1(this.f);
-      }
+      }, null, null, 0, 0, null, "call"]
     },
     _RootZone_bindCallback_closure0: {
       "^": "Closure:1;$this,f",
-      call$0: function() {
+      call$0: [function() {
         return this.$this.run$1(this.f);
-      }
+      }, null, null, 0, 0, null, "call"]
     },
     _RootZone_bindUnaryCallback_closure: {
       "^": "Closure:0;$this,f",
-      call$1: function(arg) {
+      call$1: [function(arg) {
         return this.$this.runUnaryGuarded$2(this.f, arg);
-      }
+      }, null, null, 2, 0, null, 12, "call"]
     },
     runZoned_closure: {
-      "^": "Closure:19;onError",
-      call$5: function($self, $parent, zone, error, stackTrace) {
+      "^": "Closure:12;onError",
+      call$5: [function($self, $parent, zone, error, stackTrace) {
         var e, s, t1, t2, exception;
         try {
           t1 = this.onError;
@@ -7685,7 +7987,7 @@
           else
             return $parent.handleUncaughtError$3(zone, e, s);
         }
-      }
+      }, null, null, 10, 0, null, 0, 2, 1, 3, 4, "call"]
     }
   }], ["dart.collection", "dart:collection",, P, {
     "^": "",
@@ -7735,14 +8037,14 @@
       t1.push(iterable);
       try {
         t2 = buffer;
-        t2._contents = P.StringBuffer__writeAll(t2.get$_contents(), iterable, ", ");
+        t2.set$_contents(P.StringBuffer__writeAll(t2.get$_contents(), iterable, ", "));
       } finally {
         if (0 >= t1.length)
           return H.ioore(t1, -1);
         t1.pop();
       }
       t1 = buffer;
-      t1._contents = t1.get$_contents() + rightDelimiter;
+      t1.set$_contents(t1.get$_contents() + rightDelimiter);
       t1 = buffer.get$_contents();
       return t1.charCodeAt(0) == 0 ? t1 : t1;
     },
@@ -7849,11 +8151,11 @@
       try {
         $.$get$_toStringVisiting().push(m);
         t2 = result;
-        t2._contents = t2.get$_contents() + "{";
+        t2.set$_contents(t2.get$_contents() + "{");
         t1.first = true;
         m.forEach$1(0, new P.Maps_mapToString_closure(t1, result));
         t1 = result;
-        t1._contents = t1.get$_contents() + "}";
+        t1.set$_contents(t1.get$_contents() + "}");
       } finally {
         t1 = $.$get$_toStringVisiting();
         if (0 >= t1.length)
@@ -8141,10 +8443,10 @@
         cell = this._collection$_first;
         modifications = this._collection$_modifications;
         for (; cell != null;) {
-          action.call$1(cell._element);
+          action.call$1(cell.get$_element());
           if (modifications !== this._collection$_modifications)
             throw H.wrapException(new P.ConcurrentModificationError(this));
-          cell = cell._collection$_next;
+          cell = cell.get$_collection$_next();
         }
       },
       add$1: function(_, element) {
@@ -8257,7 +8559,7 @@
       _collection$_unlinkCell$1: function(cell) {
         var previous, next;
         previous = cell.get$_collection$_previous();
-        next = cell._collection$_next;
+        next = cell.get$_collection$_next();
         if (previous == null)
           this._collection$_first = next;
         else
@@ -8265,7 +8567,7 @@
         if (next == null)
           this._collection$_last = previous;
         else
-          next._collection$_previous = previous;
+          next.set$_collection$_previous(previous);
         --this._collection$_length;
         this._collection$_modifications = this._collection$_modifications + 1 & 67108863;
       },
@@ -8293,7 +8595,7 @@
       }
     },
     _LinkedHashSetCell: {
-      "^": "Object;_element<,_collection$_next,_collection$_previous<"
+      "^": "Object;_element<,_collection$_next<,_collection$_previous@"
     },
     _LinkedHashSetIterator: {
       "^": "Object;_set,_collection$_modifications,_collection$_cell,_collection$_current",
@@ -8310,8 +8612,8 @@
             this._collection$_current = null;
             return false;
           } else {
-            this._collection$_current = t1._element;
-            this._collection$_cell = t1._collection$_next;
+            this._collection$_current = t1.get$_element();
+            this._collection$_cell = this._collection$_cell.get$_collection$_next();
             return true;
           }
         }
@@ -8319,9 +8621,9 @@
     },
     closure6: {
       "^": "Closure:3;result",
-      call$2: function(k, v) {
+      call$2: [function(k, v) {
         this.result.$indexSet(0, k, v);
-      }
+      }, null, null, 4, 0, null, 33, 34, "call"]
     },
     _HashSetBase: {
       "^": "SetBase;$ti"
@@ -8429,7 +8731,7 @@
         }
       }, function($receiver, start, end, iterable) {
         return this.setRange$4($receiver, start, end, iterable, 0);
-      }, "setRange$3", null, null, "get$setRange", 6, 2, null, 1],
+      }, "setRange$3", null, null, "get$setRange", 6, 2, null, 35],
       replaceRange$3: function(receiver, start, end, newContents) {
         var removeLength, insertLength, t1, t2, delta, insertEnd, newLength;
         P.RangeError_checkValidRange(start, end, this.get$length(receiver), null, null, null);
@@ -8730,7 +9032,7 @@
     },
     _defaultToEncodable: [function(object) {
       return object.toJson$0();
-    }, "call$1", "convert___defaultToEncodable$closure", 2, 0, 0],
+    }, "call$1", "convert___defaultToEncodable$closure", 2, 0, 0, 24],
     _JsonMap: {
       "^": "Object;_original,_processed,_data",
       $index: function(_, key) {
@@ -8877,9 +9179,9 @@
     },
     _JsonMap_values_closure: {
       "^": "Closure:0;$this",
-      call$1: function(each) {
+      call$1: [function(each) {
         return this.$this.$index(0, each);
-      }
+      }, null, null, 2, 0, null, 18, "call"]
     },
     Codec: {
       "^": "Object;"
@@ -9114,7 +9416,7 @@
     },
     _JsonStringifier_writeMap_closure: {
       "^": "Closure:3;_box_0,keyValueList",
-      call$2: function(key, value) {
+      call$2: [function(key, value) {
         var t1, t2, t3, i, t4;
         if (typeof key !== "string")
           this._box_0.allStringKeys = false;
@@ -9131,7 +9433,7 @@
         if (i >= t4)
           return H.ioore(t1, i);
         t1[i] = value;
-      }
+      }, null, null, 4, 0, null, 17, 9, "call"]
     },
     _JsonStringStringifier: {
       "^": "_JsonStringifier;_convert$_sink,_seen,_toEncodable",
@@ -9259,7 +9561,7 @@
             if (this._bufferIndex + 3 >= t2)
               break;
             stringIndex0 = stringIndex + 1;
-            if (this._writeSurrogate$2(codeUnit, C.JSString_methods.codeUnitAt$1(str, stringIndex0)))
+            if (this._writeSurrogate$2(codeUnit, t3.codeUnitAt$1(str, stringIndex0)))
               stringIndex = stringIndex0;
           } else if (codeUnit <= 2047) {
             t4 = this._bufferIndex;
@@ -9336,12 +9638,11 @@
                   if (i === endIndex)
                     break $loop$0;
                   unit = t3.$index(codeUnits, i);
-                  if (typeof unit !== "number")
-                    return unit.$and();
-                  if ((unit & 192) !== 128)
-                    throw H.wrapException(new P.FormatException("Bad UTF-8 encoding 0x" + C.JSNumber_methods.toRadixString$1(unit, 16), null, null));
+                  t5 = J.getInterceptor$n(unit);
+                  if (t5.$and(unit, 192) !== 128)
+                    throw H.wrapException(new P.FormatException("Bad UTF-8 encoding 0x" + t5.toRadixString$1(unit, 16), null, null));
                   else {
-                    value = (value << 6 | unit & 63) >>> 0;
+                    value = (value << 6 | t5.$and(unit, 63)) >>> 0;
                     --expectedUnits;
                     ++i;
                   }
@@ -9375,27 +9676,25 @@
               if (t6.$lt(unit, 0))
                 throw H.wrapException(new P.FormatException("Negative UTF-8 code unit: -0x" + J.toRadixString$1$n(t6.$negate(unit), 16), null, null));
               else {
-                if (typeof unit !== "number")
-                  return unit.$and();
-                if ((unit & 224) === 192) {
-                  value = unit & 31;
+                if (t6.$and(unit, 224) === 192) {
+                  value = t6.$and(unit, 31);
                   expectedUnits = 1;
                   extraUnits = 1;
                   continue $loop$0;
                 }
-                if ((unit & 240) === 224) {
-                  value = unit & 15;
+                if (t6.$and(unit, 240) === 224) {
+                  value = t6.$and(unit, 15);
                   expectedUnits = 2;
                   extraUnits = 2;
                   continue $loop$0;
                 }
-                if ((unit & 248) === 240 && unit < 245) {
-                  value = unit & 7;
+                if (t6.$and(unit, 248) === 240 && t6.$lt(unit, 245)) {
+                  value = t6.$and(unit, 7);
                   expectedUnits = 3;
                   extraUnits = 3;
                   continue $loop$0;
                 }
-                throw H.wrapException(new P.FormatException("Bad UTF-8 encoding 0x" + C.JSNumber_methods.toRadixString$1(unit, 16), null, null));
+                throw H.wrapException(new P.FormatException("Bad UTF-8 encoding 0x" + t6.toRadixString$1(unit, 16), null, null));
               }
             }
             break $loop$0;
@@ -9408,22 +9707,20 @@
       }
     },
     _Utf8Decoder_convert_scanOneByteCharacters: {
-      "^": "Closure:41;endIndex",
+      "^": "Closure:42;endIndex",
       call$2: function(units, from) {
         var to, t1, i, unit;
         to = this.endIndex;
         for (t1 = J.getInterceptor$asx(units), i = from; i < to; ++i) {
           unit = t1.$index(units, i);
-          if (typeof unit !== "number")
-            return unit.$and();
-          if ((unit & 127) !== unit)
+          if (J.$and$n(unit, 127) !== unit)
             return i - from;
         }
         return to - from;
       }
     },
     _Utf8Decoder_convert_addSingleBytes: {
-      "^": "Closure:64;$this,codeUnits,startIndex,endIndex",
+      "^": "Closure:43;$this,codeUnits,startIndex,endIndex",
       call$2: function(from, to) {
         this.$this._stringSink._contents += P.String_String$fromCharCodes(this.codeUnits, from, to);
       }
@@ -9504,10 +9801,7 @@
       return result;
     },
     List_List$unmodifiable: function(elements, $E) {
-      var result = P.List_List$from(elements, false, $E);
-      result.fixed$length = Array;
-      result.immutable$list = Array;
-      return result;
+      return J.JSArray_markUnmodifiableList(P.List_List$from(elements, false, $E));
     },
     print: function(object) {
       var line, t1;
@@ -9542,16 +9836,17 @@
       throw H.wrapException(new P.UnsupportedError("'Uri.base' is not supported"));
     },
     Uri_parse: function(uri, start, end) {
-      var t1, t2, delta, t3, indices, schemeEnd, hostStart, portStart, pathStart, queryStart, fragmentStart, t4, t5, isSimple, scheme, t6, t7, t8, schemeAuth, t9;
+      var t1, t2, t3, delta, indices, schemeEnd, hostStart, portStart, pathStart, queryStart, fragmentStart, t4, t5, isSimple, scheme, t6, t7, t8, schemeAuth, t9;
       end = J.get$length$asx(uri);
       t1 = start + 5;
       t2 = J.getInterceptor$n(end);
       if (t2.$ge(end, t1)) {
-        delta = ((J.codeUnitAt$1$s(uri, start + 4) ^ 58) * 3 | C.JSString_methods.codeUnitAt$1(uri, start) ^ 100 | C.JSString_methods.codeUnitAt$1(uri, start + 1) ^ 97 | C.JSString_methods.codeUnitAt$1(uri, start + 2) ^ 116 | C.JSString_methods.codeUnitAt$1(uri, start + 3) ^ 97) >>> 0;
+        t3 = J.getInterceptor$s(uri);
+        delta = ((t3.codeUnitAt$1(uri, start + 4) ^ 58) * 3 | t3.codeUnitAt$1(uri, start) ^ 100 | t3.codeUnitAt$1(uri, start + 1) ^ 97 | t3.codeUnitAt$1(uri, start + 2) ^ 116 | t3.codeUnitAt$1(uri, start + 3) ^ 97) >>> 0;
         if (delta === 0)
-          return P.UriData__parse(start > 0 || t2.$lt(end, uri.length) ? C.JSString_methods.substring$2(uri, start, end) : uri, 5, null).get$uri();
+          return P.UriData__parse(start > 0 || t2.$lt(end, t3.get$length(uri)) ? t3.substring$2(uri, start, end) : uri, 5, null).get$uri();
         else if (delta === 32)
-          return P.UriData__parse(C.JSString_methods.substring$2(uri, t1, end), 0, null).get$uri();
+          return P.UriData__parse(t3.substring$2(uri, t1, end), 0, null).get$uri();
       }
       t3 = new Array(8);
       t3.fixed$length = Array;
@@ -9606,17 +9901,18 @@
               scheme = null;
               isSimple = false;
             } else {
-              if (t3.$eq(schemeEnd, start + 4))
-                if (J.startsWith$2$s(uri, "file", start)) {
+              if (t3.$eq(schemeEnd, start + 4)) {
+                t1 = J.getInterceptor$s(uri);
+                if (t1.startsWith$2(uri, "file", start)) {
                   if (t5.$le(hostStart, start)) {
-                    if (!C.JSString_methods.startsWith$2(uri, "/", pathStart)) {
+                    if (!t1.startsWith$2(uri, "/", pathStart)) {
                       schemeAuth = "file:///";
                       delta = 3;
                     } else {
                       schemeAuth = "file://";
                       delta = 2;
                     }
-                    uri = schemeAuth + C.JSString_methods.substring$2(uri, pathStart, end);
+                    uri = schemeAuth + t1.substring$2(uri, pathStart, end);
                     schemeEnd = t3.$sub(schemeEnd, start);
                     t1 = delta - start;
                     queryStart = t7.$add(queryStart, t1);
@@ -9627,19 +9923,19 @@
                     portStart = 7;
                     pathStart = 7;
                   } else {
-                    t1 = J.getInterceptor(pathStart);
-                    if (t1.$eq(pathStart, queryStart))
-                      if (start === 0 && t2.$eq(end, uri.length)) {
-                        uri = C.JSString_methods.replaceRange$3(uri, pathStart, queryStart, "/");
+                    t8 = J.getInterceptor(pathStart);
+                    if (t8.$eq(pathStart, queryStart))
+                      if (start === 0 && t2.$eq(end, t1.get$length(uri))) {
+                        uri = t1.replaceRange$3(uri, pathStart, queryStart, "/");
                         queryStart = t7.$add(queryStart, 1);
                         fragmentStart = t4.$add(fragmentStart, 1);
                         end = t2.$add(end, 1);
                       } else {
-                        uri = C.JSString_methods.substring$2(uri, start, pathStart) + "/" + C.JSString_methods.substring$2(uri, queryStart, end);
+                        uri = t1.substring$2(uri, start, pathStart) + "/" + t1.substring$2(uri, queryStart, end);
                         schemeEnd = t3.$sub(schemeEnd, start);
                         hostStart = t5.$sub(hostStart, start);
                         portStart = t6.$sub(portStart, start);
-                        pathStart = t1.$sub(pathStart, start);
+                        pathStart = t8.$sub(pathStart, start);
                         t1 = 1 - start;
                         queryStart = t7.$add(queryStart, t1);
                         fragmentStart = t4.$add(fragmentStart, t1);
@@ -9648,23 +9944,23 @@
                       }
                   }
                   scheme = "file";
-                } else if (C.JSString_methods.startsWith$2(uri, "http", start)) {
-                  if (t6.$gt(portStart, start) && J.$eq$(t6.$add(portStart, 3), pathStart) && C.JSString_methods.startsWith$2(uri, "80", t6.$add(portStart, 1))) {
-                    t1 = start === 0 && t2.$eq(end, uri.length);
-                    t8 = J.getInterceptor$n(pathStart);
-                    if (t1) {
-                      uri = C.JSString_methods.replaceRange$3(uri, portStart, pathStart, "");
-                      pathStart = t8.$sub(pathStart, 3);
+                } else if (t1.startsWith$2(uri, "http", start)) {
+                  if (t6.$gt(portStart, start) && J.$eq$(t6.$add(portStart, 3), pathStart) && t1.startsWith$2(uri, "80", t6.$add(portStart, 1))) {
+                    t8 = start === 0 && t2.$eq(end, t1.get$length(uri));
+                    t9 = J.getInterceptor$n(pathStart);
+                    if (t8) {
+                      uri = t1.replaceRange$3(uri, portStart, pathStart, "");
+                      pathStart = t9.$sub(pathStart, 3);
                       queryStart = t7.$sub(queryStart, 3);
                       fragmentStart = t4.$sub(fragmentStart, 3);
                       end = t2.$sub(end, 3);
                     } else {
-                      uri = C.JSString_methods.substring$2(uri, start, portStart) + C.JSString_methods.substring$2(uri, pathStart, end);
+                      uri = t1.substring$2(uri, start, portStart) + t1.substring$2(uri, pathStart, end);
                       schemeEnd = t3.$sub(schemeEnd, start);
                       hostStart = t5.$sub(hostStart, start);
                       portStart = t6.$sub(portStart, start);
                       t1 = 3 + start;
-                      pathStart = t8.$sub(pathStart, t1);
+                      pathStart = t9.$sub(pathStart, t1);
                       queryStart = t7.$sub(queryStart, t1);
                       fragmentStart = t4.$sub(fragmentStart, t1);
                       end = uri.length;
@@ -9674,7 +9970,7 @@
                   scheme = "http";
                 } else
                   scheme = null;
-              else if (t3.$eq(schemeEnd, t1) && J.startsWith$2$s(uri, "https", start)) {
+              } else if (t3.$eq(schemeEnd, t1) && J.startsWith$2$s(uri, "https", start)) {
                 if (t6.$gt(portStart, start) && J.$eq$(t6.$add(portStart, 4), pathStart) && J.startsWith$2$s(uri, "443", t6.$add(portStart, 1))) {
                   t1 = start === 0 && t2.$eq(end, J.get$length$asx(uri));
                   t8 = J.getInterceptor$asx(uri);
@@ -9686,7 +9982,7 @@
                     fragmentStart = t4.$sub(fragmentStart, 4);
                     end = t2.$sub(end, 3);
                   } else {
-                    uri = t8.substring$2(uri, start, portStart) + C.JSString_methods.substring$2(uri, pathStart, end);
+                    uri = t8.substring$2(uri, start, portStart) + t8.substring$2(uri, pathStart, end);
                     schemeEnd = t3.$sub(schemeEnd, start);
                     hostStart = t5.$sub(hostStart, start);
                     portStart = t6.$sub(portStart, start);
@@ -9723,37 +10019,37 @@
     },
     Uri_decodeComponent: [function(encodedComponent) {
       return P._Uri__uriDecode(encodedComponent, 0, J.get$length$asx(encodedComponent), C.Utf8Codec_false, false);
-    }, "call$1", "core_Uri_decodeComponent$closure", 2, 0, 63],
+    }, "call$1", "core_Uri_decodeComponent$closure", 2, 0, 65, 37],
     Uri_splitQueryString: function(query, encoding) {
       return C.JSArray_methods.fold$2(query.split("&"), P.LinkedHashMap__makeEmpty(), new P.Uri_splitQueryString_closure(encoding));
     },
     Uri__parseIPv4Address: function(host, start, end) {
-      var t1, t2, result, i, partStart, partIndex, t3, $char, part, partIndex0;
+      var t1, t2, result, t3, i, partStart, partIndex, t4, $char, part, partIndex0;
       t1 = new P.Uri__parseIPv4Address_error(host);
       t2 = H._checkLength(4);
       result = new Uint8Array(t2);
-      for (i = start, partStart = i, partIndex = 0; t3 = J.getInterceptor$n(i), t3.$lt(i, end); i = t3.$add(i, 1)) {
-        $char = C.JSString_methods.codeUnitAt$1(host, i);
+      for (t3 = J.getInterceptor$s(host), i = start, partStart = i, partIndex = 0; t4 = J.getInterceptor$n(i), t4.$lt(i, end); i = t4.$add(i, 1)) {
+        $char = t3.codeUnitAt$1(host, i);
         if ($char !== 46) {
           if (($char ^ 48) > 9)
             t1.call$2("invalid character", i);
         } else {
           if (partIndex === 3)
             t1.call$2("IPv4 address should contain exactly 4 parts", i);
-          part = H.Primitives_parseInt(C.JSString_methods.substring$2(host, partStart, i), null, null);
+          part = H.Primitives_parseInt(t3.substring$2(host, partStart, i), null, null);
           if (J.$gt$n(part, 255))
             t1.call$2("each part must be in the range 0..255", partStart);
           partIndex0 = partIndex + 1;
           if (partIndex >= t2)
             return H.ioore(result, partIndex);
           result[partIndex] = part;
-          partStart = t3.$add(i, 1);
+          partStart = t4.$add(i, 1);
           partIndex = partIndex0;
         }
       }
       if (partIndex !== 3)
         t1.call$2("IPv4 address should contain exactly 4 parts", end);
-      part = H.Primitives_parseInt(C.JSString_methods.substring$2(host, partStart, end), null, null);
+      part = H.Primitives_parseInt(t3.substring$2(host, partStart, end), null, null);
       if (J.$gt$n(part, 255))
         t1.call$2("each part must be in the range 0..255", partStart);
       if (partIndex >= t2)
@@ -9762,32 +10058,33 @@
       return result;
     },
     Uri_parseIPv6Address: function(host, start, end) {
-      var t1, t2, parts, i, partStart, wildcardSeen, seenDot, t3, $char, atEnd, isLastWildcard, last, bytes, index, value, wildCardLength, j;
+      var t1, t2, t3, parts, i, partStart, wildcardSeen, seenDot, t4, $char, atEnd, isLastWildcard, last, bytes, index, value, wildCardLength, j;
       if (end == null)
-        end = host.length;
+        end = J.get$length$asx(host);
       t1 = new P.Uri_parseIPv6Address_error(host);
       t2 = new P.Uri_parseIPv6Address_parseHex(host, t1);
-      if (host.length < 2)
+      t3 = J.getInterceptor$asx(host);
+      if (J.$lt$n(t3.get$length(host), 2))
         t1.call$1("address is too short");
       parts = [];
-      for (i = start, partStart = i, wildcardSeen = false, seenDot = false; t3 = J.getInterceptor$n(i), t3.$lt(i, end); i = J.$add$ns(i, 1)) {
-        $char = C.JSString_methods.codeUnitAt$1(host, i);
+      for (i = start, partStart = i, wildcardSeen = false, seenDot = false; t4 = J.getInterceptor$n(i), t4.$lt(i, end); i = J.$add$ns(i, 1)) {
+        $char = t3.codeUnitAt$1(host, i);
         if ($char === 58) {
-          if (t3.$eq(i, start)) {
-            i = t3.$add(i, 1);
-            if (C.JSString_methods.codeUnitAt$1(host, i) !== 58)
+          if (t4.$eq(i, start)) {
+            i = t4.$add(i, 1);
+            if (t3.codeUnitAt$1(host, i) !== 58)
               t1.call$2("invalid start colon.", i);
             partStart = i;
           }
-          t3 = J.getInterceptor(i);
-          if (t3.$eq(i, partStart)) {
+          t4 = J.getInterceptor(i);
+          if (t4.$eq(i, partStart)) {
             if (wildcardSeen)
               t1.call$2("only one wildcard `::` is allowed", i);
             parts.push(-1);
             wildcardSeen = true;
           } else
             parts.push(t2.call$2(partStart, i));
-          partStart = t3.$add(i, 1);
+          partStart = t4.$add(i, 1);
         } else if ($char === 46)
           seenDot = true;
       }
@@ -9802,20 +10099,16 @@
           parts.push(t2.call$2(partStart, end));
         else {
           last = P.Uri__parseIPv4Address(host, partStart, end);
-          t2 = last[0];
-          if (typeof t2 !== "number")
-            return t2.$shl();
+          t2 = J.$shl$n(last[0], 8);
           t3 = last[1];
           if (typeof t3 !== "number")
             return H.iae(t3);
-          parts.push((t2 << 8 | t3) >>> 0);
-          t3 = last[2];
-          if (typeof t3 !== "number")
-            return t3.$shl();
+          parts.push((t2 | t3) >>> 0);
+          t3 = J.$shl$n(last[2], 8);
           t2 = last[3];
           if (typeof t2 !== "number")
             return H.iae(t2);
-          parts.push((t3 << 8 | t2) >>> 0);
+          parts.push((t3 | t2) >>> 0);
         }
       if (wildcardSeen) {
         if (parts.length > 7)
@@ -9825,7 +10118,8 @@
       bytes = new Uint8Array(16);
       for (i = 0, index = 0; i < parts.length; ++i) {
         value = parts[i];
-        if (J.getInterceptor(value).$eq(value, -1)) {
+        t1 = J.getInterceptor(value);
+        if (t1.$eq(value, -1)) {
           wildCardLength = 9 - parts.length;
           for (j = 0; j < wildCardLength; ++j) {
             if (index < 0 || index >= 16)
@@ -9838,16 +10132,15 @@
             index += 2;
           }
         } else {
-          if (typeof value !== "number")
-            return value.$shr();
-          t1 = C.JSNumber_methods._shrOtherPositive$1(value, 8);
+          t2 = t1.$shr(value, 8);
           if (index < 0 || index >= 16)
             return H.ioore(bytes, index);
-          bytes[index] = t1;
-          t1 = index + 1;
-          if (t1 >= 16)
-            return H.ioore(bytes, t1);
-          bytes[t1] = value & 255;
+          bytes[index] = t2;
+          t2 = index + 1;
+          t1 = t1.$and(value, 255);
+          if (t2 >= 16)
+            return H.ioore(bytes, t2);
+          bytes[t2] = t1;
           index += 2;
         }
       }
@@ -9994,16 +10287,28 @@
         table = tables[state];
         $char = t1.codeUnitAt$1(uri, i) ^ 96;
         transition = J.$index$asx(table, $char > 95 ? 31 : $char);
-        if (typeof transition !== "number")
-          return transition.$and();
-        state = transition & 31;
-        t2 = C.JSNumber_methods._shrOtherPositive$1(transition, 5);
+        t2 = J.getInterceptor$n(transition);
+        state = t2.$and(transition, 31);
+        t2 = t2.$shr(transition, 5);
         if (t2 >= 8)
           return H.ioore(indices, t2);
         indices[t2] = i;
       }
       return state;
     },
+    NoSuchMethodError_toString_closure: {
+      "^": "Closure:66;_box_0,sb",
+      call$2: [function(key, value) {
+        var t1, t2, t3;
+        t1 = this.sb;
+        t2 = this._box_0;
+        t1._contents += t2.comma;
+        t3 = t1._contents += H.S(key.get$__internal$_name());
+        t1._contents = t3 + ": ";
+        t1._contents += H.S(P.Error_safeToString(value));
+        t2.comma = ", ";
+      }, null, null, 4, 0, null, 17, 9, "call"]
+    },
     bool: {
       "^": "Object;"
     },
@@ -10087,6 +10392,11 @@
       $mul: function(_, factor) {
         return new P.Duration(C.JSInt_methods.round$0(this._duration * factor));
       },
+      $tdiv: function(_, quotient) {
+        if (quotient === 0)
+          throw H.wrapException(new P.IntegerDivisionByZeroException());
+        return new P.Duration(C.JSInt_methods.$tdiv(this._duration, quotient));
+      },
       $lt: function(_, other) {
         return this._duration < other.get$_duration();
       },
@@ -10133,7 +10443,7 @@
       }
     },
     Duration_toString_sixDigits: {
-      "^": "Closure:20;",
+      "^": "Closure:10;",
       call$1: function(n) {
         if (n >= 100000)
           return "" + n;
@@ -10149,7 +10459,7 @@
       }
     },
     Duration_toString_twoDigits: {
-      "^": "Closure:20;",
+      "^": "Closure:10;",
       call$1: function(n) {
         if (n >= 10)
           return "" + n;
@@ -10293,6 +10603,30 @@
         }
       }
     },
+    NoSuchMethodError: {
+      "^": "Error;_core$_receiver,_memberName,_core$_arguments,_namedArguments,_existingArgumentNames",
+      toString$0: function(_) {
+        var t1, sb, t2, t3, _i, argument, receiverText, actualParameters;
+        t1 = {};
+        sb = new P.StringBuffer("");
+        t1.comma = "";
+        for (t2 = this._core$_arguments, t3 = t2.length, _i = 0; _i < t3; ++_i) {
+          argument = t2[_i];
+          sb._contents += t1.comma;
+          sb._contents += H.S(P.Error_safeToString(argument));
+          t1.comma = ", ";
+        }
+        this._namedArguments.forEach$1(0, new P.NoSuchMethodError_toString_closure(t1, sb));
+        receiverText = P.Error_safeToString(this._core$_receiver);
+        actualParameters = sb.toString$0(0);
+        return "NoSuchMethodError: method not found: '" + H.S(this._memberName.__internal$_name) + "'\nReceiver: " + H.S(receiverText) + "\nArguments: [" + actualParameters + "]";
+      },
+      static: {
+        NoSuchMethodError$: function(receiver, memberName, positionalArguments, namedArguments, existingArgumentNames) {
+          return new P.NoSuchMethodError(receiver, memberName, positionalArguments, namedArguments, existingArgumentNames);
+        }
+      }
+    },
     UnsupportedError: {
       "^": "Error;message>",
       toString$0: function(_) {
@@ -10446,6 +10780,12 @@
         return report + prefix + slice + postfix + "\n" + C.JSString_methods.$mul(" ", offset - start + prefix.length) + "^\n";
       }
     },
+    IntegerDivisionByZeroException: {
+      "^": "Object;",
+      toString$0: function(_) {
+        return "IntegerDivisionByZeroException";
+      }
+    },
     Expando: {
       "^": "Object;name,_jsWeakMapOrKey",
       toString$0: function(_) {
@@ -10591,6 +10931,9 @@
       toString$0: function(_) {
         return H.Primitives_objectToHumanReadableString(this);
       },
+      noSuchMethod$1: function(_, invocation) {
+        throw H.wrapException(P.NoSuchMethodError$(this, invocation.get$memberName(), invocation.get$positionalArguments(), invocation.get$namedArguments(), null));
+      },
       toString: function() {
         return this.toString$0(this);
       }
@@ -10606,7 +10949,7 @@
     },
     "+String": 0,
     StringBuffer: {
-      "^": "Object;_contents<",
+      "^": "Object;_contents@",
       get$length: function(_) {
         return this._contents.length;
       },
@@ -10644,6 +10987,9 @@
         }
       }
     },
+    Symbol0: {
+      "^": "Object;"
+    },
     Uri_splitQueryString_closure: {
       "^": "Closure:3;encoding",
       call$2: function(map, element) {
@@ -10655,7 +11001,7 @@
             J.$indexSet$ax(map, P._Uri__uriDecode(element, 0, t1.get$length(element), this.encoding, true), "");
         } else if (index !== 0) {
           key = t1.substring$2(element, 0, index);
-          value = C.JSString_methods.substring$1(element, index + 1);
+          value = t1.substring$1(element, index + 1);
           t1 = this.encoding;
           J.$indexSet$ax(map, P._Uri__uriDecode(key, 0, key.length, t1, true), P._Uri__uriDecode(value, 0, value.length, t1, true));
         }
@@ -10663,13 +11009,13 @@
       }
     },
     Uri__parseIPv4Address_error: {
-      "^": "Closure:44;host",
+      "^": "Closure:46;host",
       call$2: function(msg, position) {
         throw H.wrapException(new P.FormatException("Illegal IPv4 address, " + msg, this.host, position));
       }
     },
     Uri_parseIPv6Address_error: {
-      "^": "Closure:45;host",
+      "^": "Closure:47;host",
       call$2: function(msg, position) {
         throw H.wrapException(new P.FormatException("Illegal IPv6 address, " + msg, this.host, position));
       },
@@ -10678,12 +11024,12 @@
       }
     },
     Uri_parseIPv6Address_parseHex: {
-      "^": "Closure:46;host,error",
+      "^": "Closure:48;host,error",
       call$2: function(start, end) {
         var value, t1;
         if (J.$gt$n(J.$sub$n(end, start), 4))
           this.error.call$2("an IPv6 part can only contain a maximum of 4 hex digits", start);
-        value = H.Primitives_parseInt(C.JSString_methods.substring$2(this.host, start, end), 16, null);
+        value = H.Primitives_parseInt(J.substring$2$s(this.host, start, end), 16, null);
         t1 = J.getInterceptor$n(value);
         if (t1.$lt(value, 0) || t1.$gt(value, 65535))
           this.error.call$2("each part must be in the range of `0x0..0xFFFF`", start);
@@ -11106,18 +11452,17 @@
         },
         _Uri__makeWindowsFileUrl: function(path, slashTerminated) {
           var t1, pathSegments, pathStart, hostPart;
-          if (J.startsWith$1$s(path, "\\\\?\\"))
-            if (C.JSString_methods.startsWith$2(path, "UNC\\", 4))
-              path = C.JSString_methods.replaceRange$3(path, 0, 7, "\\");
+          t1 = J.getInterceptor$s(path);
+          if (t1.startsWith$1(path, "\\\\?\\"))
+            if (t1.startsWith$2(path, "UNC\\", 4))
+              path = t1.replaceRange$3(path, 0, 7, "\\");
             else {
-              path = C.JSString_methods.substring$1(path, 4);
+              path = t1.substring$1(path, 4);
               if (path.length < 3 || C.JSString_methods.codeUnitAt$1(path, 1) !== 58 || C.JSString_methods.codeUnitAt$1(path, 2) !== 92)
                 throw H.wrapException(P.ArgumentError$("Windows paths with \\\\?\\ prefix must be absolute"));
             }
-          else {
-            H.checkString("\\");
-            path = H.stringReplaceAllUnchecked(path, "/", "\\");
-          }
+          else
+            path = t1.replaceAll$2(path, "/", "\\");
           t1 = path.length;
           if (t1 > 1 && C.JSString_methods.codeUnitAt$1(path, 1) === 58) {
             P._Uri__checkWindowsDriveLetter(C.JSString_methods.codeUnitAt$1(path, 0), true);
@@ -11152,45 +11497,46 @@
           return port;
         },
         _Uri__makeHost: function(host, start, end, strictIPv6) {
-          var t1, t2, i;
+          var t1, t2, t3, i;
           if (host == null)
             return;
           t1 = J.getInterceptor(start);
           if (t1.$eq(start, end))
             return "";
-          if (J.getInterceptor$s(host).codeUnitAt$1(host, start) === 91) {
-            t2 = J.getInterceptor$n(end);
-            if (C.JSString_methods.codeUnitAt$1(host, t2.$sub(end, 1)) !== 93)
+          t2 = J.getInterceptor$s(host);
+          if (t2.codeUnitAt$1(host, start) === 91) {
+            t3 = J.getInterceptor$n(end);
+            if (t2.codeUnitAt$1(host, t3.$sub(end, 1)) !== 93)
               P._Uri__fail(host, start, "Missing end `]` to match `[` in host");
-            P.Uri_parseIPv6Address(host, t1.$add(start, 1), t2.$sub(end, 1));
-            return C.JSString_methods.substring$2(host, start, end).toLowerCase();
+            P.Uri_parseIPv6Address(host, t1.$add(start, 1), t3.$sub(end, 1));
+            return t2.substring$2(host, start, end).toLowerCase();
           }
           for (i = start; t1 = J.getInterceptor$n(i), t1.$lt(i, end); i = t1.$add(i, 1))
-            if (C.JSString_methods.codeUnitAt$1(host, i) === 58) {
+            if (t2.codeUnitAt$1(host, i) === 58) {
               P.Uri_parseIPv6Address(host, start, end);
-              return "[" + host + "]";
+              return "[" + H.S(host) + "]";
             }
           return P._Uri__normalizeRegName(host, start, end);
         },
         _Uri__normalizeRegName: function(host, start, end) {
-          var index, sectionStart, buffer, isNormalized, t1, $char, replacement, t2, slice, sourceLength, tail;
-          for (index = start, sectionStart = index, buffer = null, isNormalized = true; t1 = J.getInterceptor$n(index), t1.$lt(index, end);) {
-            $char = C.JSString_methods.codeUnitAt$1(host, index);
+          var t1, index, sectionStart, buffer, isNormalized, t2, $char, replacement, t3, slice, sourceLength, tail;
+          for (t1 = J.getInterceptor$s(host), index = start, sectionStart = index, buffer = null, isNormalized = true; t2 = J.getInterceptor$n(index), t2.$lt(index, end);) {
+            $char = t1.codeUnitAt$1(host, index);
             if ($char === 37) {
               replacement = P._Uri__normalizeEscape(host, index, true);
-              t2 = replacement == null;
-              if (t2 && isNormalized) {
-                index = t1.$add(index, 3);
+              t3 = replacement == null;
+              if (t3 && isNormalized) {
+                index = t2.$add(index, 3);
                 continue;
               }
               if (buffer == null)
                 buffer = new P.StringBuffer("");
-              slice = C.JSString_methods.substring$2(host, sectionStart, index);
+              slice = t1.substring$2(host, sectionStart, index);
               if (!isNormalized)
                 slice = slice.toLowerCase();
               buffer._contents = buffer._contents + slice;
-              if (t2) {
-                replacement = C.JSString_methods.substring$2(host, index, t1.$add(index, 3));
+              if (t3) {
+                replacement = t1.substring$2(host, index, t2.$add(index, 3));
                 sourceLength = 3;
               } else if (replacement === "%") {
                 replacement = "%25";
@@ -11198,42 +11544,42 @@
               } else
                 sourceLength = 3;
               buffer._contents += replacement;
-              index = t1.$add(index, sourceLength);
+              index = t2.$add(index, sourceLength);
               sectionStart = index;
               isNormalized = true;
             } else {
               if ($char < 127) {
-                t2 = $char >>> 4;
-                if (t2 >= 8)
-                  return H.ioore(C.List_qNA, t2);
-                t2 = (C.List_qNA[t2] & C.JSInt_methods._shlPositive$1(1, $char & 15)) !== 0;
+                t3 = $char >>> 4;
+                if (t3 >= 8)
+                  return H.ioore(C.List_qNA, t3);
+                t3 = (C.List_qNA[t3] & C.JSInt_methods._shlPositive$1(1, $char & 15)) !== 0;
               } else
-                t2 = false;
-              if (t2) {
+                t3 = false;
+              if (t3) {
                 if (isNormalized && 65 <= $char && 90 >= $char) {
                   if (buffer == null)
                     buffer = new P.StringBuffer("");
                   if (J.$lt$n(sectionStart, index)) {
-                    t2 = C.JSString_methods.substring$2(host, sectionStart, index);
-                    buffer._contents = buffer._contents + t2;
+                    t3 = t1.substring$2(host, sectionStart, index);
+                    buffer._contents = buffer._contents + t3;
                     sectionStart = index;
                   }
                   isNormalized = false;
                 }
-                index = t1.$add(index, 1);
+                index = t2.$add(index, 1);
               } else {
                 if ($char <= 93) {
-                  t2 = $char >>> 4;
-                  if (t2 >= 8)
-                    return H.ioore(C.List_2Vk, t2);
-                  t2 = (C.List_2Vk[t2] & C.JSInt_methods._shlPositive$1(1, $char & 15)) !== 0;
+                  t3 = $char >>> 4;
+                  if (t3 >= 8)
+                    return H.ioore(C.List_2Vk, t3);
+                  t3 = (C.List_2Vk[t3] & C.JSInt_methods._shlPositive$1(1, $char & 15)) !== 0;
                 } else
-                  t2 = false;
-                if (t2)
+                  t3 = false;
+                if (t3)
                   P._Uri__fail(host, index, "Invalid character");
                 else {
-                  if (($char & 64512) === 55296 && J.$lt$n(t1.$add(index, 1), end)) {
-                    tail = C.JSString_methods.codeUnitAt$1(host, t1.$add(index, 1));
+                  if (($char & 64512) === 55296 && J.$lt$n(t2.$add(index, 1), end)) {
+                    tail = t1.codeUnitAt$1(host, t2.$add(index, 1));
                     if ((tail & 64512) === 56320) {
                       $char = (65536 | ($char & 1023) << 10 | tail & 1023) >>> 0;
                       sourceLength = 2;
@@ -11243,31 +11589,32 @@
                     sourceLength = 1;
                   if (buffer == null)
                     buffer = new P.StringBuffer("");
-                  slice = C.JSString_methods.substring$2(host, sectionStart, index);
+                  slice = t1.substring$2(host, sectionStart, index);
                   if (!isNormalized)
                     slice = slice.toLowerCase();
                   buffer._contents = buffer._contents + slice;
                   buffer._contents += P._Uri__escapeChar($char);
-                  index = t1.$add(index, sourceLength);
+                  index = t2.$add(index, sourceLength);
                   sectionStart = index;
                 }
               }
             }
           }
           if (buffer == null)
-            return C.JSString_methods.substring$2(host, start, end);
+            return t1.substring$2(host, start, end);
           if (J.$lt$n(sectionStart, end)) {
-            slice = C.JSString_methods.substring$2(host, sectionStart, end);
+            slice = t1.substring$2(host, sectionStart, end);
             buffer._contents += !isNormalized ? slice.toLowerCase() : slice;
           }
           t1 = buffer._contents;
           return t1.charCodeAt(0) == 0 ? t1 : t1;
         },
         _Uri__makeScheme: function(scheme, start, end) {
-          var lowerCase, i, containsUpperCase, codeUnit, t1;
+          var t1, lowerCase, i, containsUpperCase, codeUnit, t2;
           if (start === end)
             return "";
-          lowerCase = J.getInterceptor$s(scheme).codeUnitAt$1(scheme, start) | 32;
+          t1 = J.getInterceptor$s(scheme);
+          lowerCase = t1.codeUnitAt$1(scheme, start) | 32;
           if (!(97 <= lowerCase && lowerCase <= 122))
             P._Uri__fail(scheme, start, "Scheme not starting with alphabetic character");
           if (typeof end !== "number")
@@ -11275,20 +11622,20 @@
           i = start;
           containsUpperCase = false;
           for (; i < end; ++i) {
-            codeUnit = C.JSString_methods.codeUnitAt$1(scheme, i);
+            codeUnit = t1.codeUnitAt$1(scheme, i);
             if (codeUnit < 128) {
-              t1 = codeUnit >>> 4;
-              if (t1 >= 8)
-                return H.ioore(C.List_JYB, t1);
-              t1 = (C.List_JYB[t1] & C.JSInt_methods._shlPositive$1(1, codeUnit & 15)) !== 0;
+              t2 = codeUnit >>> 4;
+              if (t2 >= 8)
+                return H.ioore(C.List_JYB, t2);
+              t2 = (C.List_JYB[t2] & C.JSInt_methods._shlPositive$1(1, codeUnit & 15)) !== 0;
             } else
-              t1 = false;
-            if (!t1)
+              t2 = false;
+            if (!t2)
               P._Uri__fail(scheme, i, "Illegal scheme character");
             if (65 <= codeUnit && codeUnit <= 90)
               containsUpperCase = true;
           }
-          scheme = C.JSString_methods.substring$2(scheme, start, end);
+          scheme = t1.substring$2(scheme, start, end);
           return P._Uri__canonicalizeScheme(containsUpperCase ? scheme.toLowerCase() : scheme);
         },
         _Uri__canonicalizeScheme: function(scheme) {
@@ -11346,28 +11693,29 @@
           return P._Uri__normalize(fragment, start, end, C.List_CVk);
         },
         _Uri__normalizeEscape: function(source, index, lowerCase) {
-          var t1, firstDigit, secondDigit, firstDigitValue, secondDigitValue, value, t2;
+          var t1, t2, firstDigit, secondDigit, firstDigitValue, secondDigitValue, value, t3;
           t1 = J.getInterceptor$ns(index);
-          if (J.$ge$n(t1.$add(index, 2), source.length))
+          t2 = J.getInterceptor$asx(source);
+          if (J.$ge$n(t1.$add(index, 2), t2.get$length(source)))
             return "%";
-          firstDigit = C.JSString_methods.codeUnitAt$1(source, t1.$add(index, 1));
-          secondDigit = C.JSString_methods.codeUnitAt$1(source, t1.$add(index, 2));
+          firstDigit = t2.codeUnitAt$1(source, t1.$add(index, 1));
+          secondDigit = t2.codeUnitAt$1(source, t1.$add(index, 2));
           firstDigitValue = P._Uri__parseHexDigit(firstDigit);
           secondDigitValue = P._Uri__parseHexDigit(secondDigit);
           if (firstDigitValue < 0 || secondDigitValue < 0)
             return "%";
           value = firstDigitValue * 16 + secondDigitValue;
           if (value < 127) {
-            t2 = C.JSInt_methods._shrOtherPositive$1(value, 4);
-            if (t2 >= 8)
-              return H.ioore(C.List_nxB, t2);
-            t2 = (C.List_nxB[t2] & C.JSInt_methods._shlPositive$1(1, value & 15)) !== 0;
+            t3 = C.JSInt_methods._shrOtherPositive$1(value, 4);
+            if (t3 >= 8)
+              return H.ioore(C.List_nxB, t3);
+            t3 = (C.List_nxB[t3] & C.JSInt_methods._shlPositive$1(1, value & 15)) !== 0;
           } else
-            t2 = false;
-          if (t2)
+            t3 = false;
+          if (t3)
             return H.Primitives_stringFromCharCode(lowerCase && 65 <= value && 90 >= value ? (value | 32) >>> 0 : value);
           if (firstDigit >= 97 || secondDigit >= 97)
-            return C.JSString_methods.substring$2(source, index, t1.$add(index, 3)).toUpperCase();
+            return t2.substring$2(source, index, t1.$add(index, 3)).toUpperCase();
           return;
         },
         _Uri__parseHexDigit: function($char) {
@@ -11464,7 +11812,7 @@
                 } else {
                   if (($char & 64512) === 55296)
                     if (J.$lt$n(t2.$add(index, 1), end)) {
-                      tail = C.JSString_methods.codeUnitAt$1(component, t2.$add(index, 1));
+                      tail = t1.codeUnitAt$1(component, t2.$add(index, 1));
                       if ((tail & 64512) === 56320) {
                         $char = (65536 | ($char & 1023) << 10 | tail & 1023) >>> 0;
                         sourceLength = 2;
@@ -11479,7 +11827,7 @@
               }
               if (buffer == null)
                 buffer = new P.StringBuffer("");
-              t3 = C.JSString_methods.substring$2(component, sectionStart, index);
+              t3 = t1.substring$2(component, sectionStart, index);
               buffer._contents = buffer._contents + t3;
               buffer._contents += H.S(replacement);
               index = t2.$add(index, sourceLength);
@@ -11598,9 +11946,9 @@
           return t2.charCodeAt(0) == 0 ? t2 : t2;
         },
         _Uri__hexCharPairToByte: function(s, pos) {
-          var $byte, i, charCode;
-          for ($byte = 0, i = 0; i < 2; ++i) {
-            charCode = C.JSString_methods.codeUnitAt$1(s, pos + i);
+          var t1, $byte, i, charCode;
+          for (t1 = J.getInterceptor$s(s), $byte = 0, i = 0; i < 2; ++i) {
+            charCode = t1.codeUnitAt$1(s, pos + i);
             if (48 <= charCode && charCode <= 57)
               $byte = $byte * 16 + charCode - 48;
             else {
@@ -11617,7 +11965,7 @@
           var t1, i, simple, codeUnit, t2, bytes;
           if (typeof end !== "number")
             return H.iae(end);
-          t1 = J.getInterceptor$s(text);
+          t1 = J.getInterceptor$asx(text);
           i = start;
           while (true) {
             if (!(i < end)) {
@@ -11654,7 +12002,10 @@
               if (codeUnit > 127)
                 throw H.wrapException(P.ArgumentError$("Illegal percent encoding in URI"));
               if (codeUnit === 37) {
-                if (i + 3 > text.length)
+                t2 = t1.get$length(text);
+                if (typeof t2 !== "number")
+                  return H.iae(t2);
+                if (i + 3 > t2)
                   throw H.wrapException(P.ArgumentError$("Truncated URI"));
                 bytes.push(P._Uri__hexCharPairToByte(text, i + 1));
                 i += 2;
@@ -11686,9 +12037,9 @@
     },
     _Uri__makePath_closure: {
       "^": "Closure:0;",
-      call$1: function(s) {
+      call$1: [function(s) {
         return P._Uri__uriEncode(C.List_qg40, s, C.Utf8Codec_false, false);
-      }
+      }, null, null, 2, 0, null, 38, "call"]
     },
     UriData: {
       "^": "Object;_text,_separatorIndices,_uriCache",
@@ -11834,7 +12185,7 @@
       }
     },
     _createTables_build: {
-      "^": "Closure:47;tables",
+      "^": "Closure:49;tables",
       call$2: function(state, defaultTransition) {
         var t1 = this.tables;
         if (state >= t1.length)
@@ -11845,7 +12196,7 @@
       }
     },
     _createTables_setChars: {
-      "^": "Closure:8;",
+      "^": "Closure:9;",
       call$3: function(target, chars, transition) {
         var t1, t2, i;
         for (t1 = chars.length, t2 = J.getInterceptor$ax(target), i = 0; i < t1; ++i)
@@ -11853,7 +12204,7 @@
       }
     },
     _createTables_setRange: {
-      "^": "Closure:8;",
+      "^": "Closure:9;",
       call$3: function(target, range, transition) {
         var i, n, t1;
         for (i = C.JSString_methods.codeUnitAt$1(range, 0), n = C.JSString_methods.codeUnitAt$1(range, 1), t1 = J.getInterceptor$ax(target); i <= n; ++i)
@@ -11947,7 +12298,7 @@
         return t4.$lt(t1, t3.get$length(t2)) ? t3.substring$1(t2, t4.$add(t1, 1)) : "";
       },
       get$origin: function(_) {
-        var t1, t2, isHttp, t3, t4;
+        var t1, t2, isHttp, t3, t4, t5;
         t1 = this._schemeEnd;
         t2 = J.getInterceptor(t1);
         isHttp = t2.$eq(t1, 4) && J.startsWith$1$s(this._uri, "http");
@@ -11963,7 +12314,8 @@
         if (J.$eq$(t3, t2.$add(t1, 3)))
           return J.substring$2$s(this._uri, 0, this._pathStart);
         t4 = this._uri;
-        return J.getInterceptor$s(t4).substring$2(t4, 0, t2.$add(t1, 3)) + C.JSString_methods.substring$2(t4, t3, this._pathStart);
+        t5 = J.getInterceptor$s(t4);
+        return t5.substring$2(t4, 0, t2.$add(t1, 3)) + t5.substring$2(t4, t3, this._pathStart);
       },
       get$queryParameters: function() {
         if (!J.$lt$n(this._queryStart, this._fragmentStart))
@@ -12038,34 +12390,35 @@
           return base.removeFragment$0();
         }
         t2 = ref._uri;
-        if (J.getInterceptor$s(t2).startsWith$2(t2, "/", refStart)) {
-          t3 = base._pathStart;
-          delta = J.$sub$n(t3, refStart);
-          return new P._SimpleUri(J.substring$2$s(base._uri, 0, t3) + C.JSString_methods.substring$1(t2, refStart), base._schemeEnd, base._hostStart, base._portStart, t3, J.$add$ns(t1, delta), J.$add$ns(ref._fragmentStart, delta), base._schemeCache, null);
+        t3 = J.getInterceptor$s(t2);
+        if (t3.startsWith$2(t2, "/", refStart)) {
+          t4 = base._pathStart;
+          delta = J.$sub$n(t4, refStart);
+          return new P._SimpleUri(J.substring$2$s(base._uri, 0, t4) + t3.substring$1(t2, refStart), base._schemeEnd, base._hostStart, base._portStart, t4, J.$add$ns(t1, delta), J.$add$ns(ref._fragmentStart, delta), base._schemeCache, null);
         }
         baseStart = base._pathStart;
         baseEnd = base._queryStart;
-        t3 = J.getInterceptor(baseStart);
-        if (t3.$eq(baseStart, baseEnd) && J.$gt$n(base._hostStart, 0)) {
-          for (; C.JSString_methods.startsWith$2(t2, "../", refStart);)
+        t4 = J.getInterceptor(baseStart);
+        if (t4.$eq(baseStart, baseEnd) && J.$gt$n(base._hostStart, 0)) {
+          for (; t3.startsWith$2(t2, "../", refStart);)
             refStart = J.$add$ns(refStart, 3);
-          delta = J.$add$ns(t3.$sub(baseStart, refStart), 1);
-          return new P._SimpleUri(J.substring$2$s(base._uri, 0, baseStart) + "/" + C.JSString_methods.substring$1(t2, refStart), base._schemeEnd, base._hostStart, base._portStart, baseStart, J.$add$ns(t1, delta), J.$add$ns(ref._fragmentStart, delta), base._schemeCache, null);
+          delta = J.$add$ns(t4.$sub(baseStart, refStart), 1);
+          return new P._SimpleUri(J.substring$2$s(base._uri, 0, baseStart) + "/" + t3.substring$1(t2, refStart), base._schemeEnd, base._hostStart, base._portStart, baseStart, J.$add$ns(t1, delta), J.$add$ns(ref._fragmentStart, delta), base._schemeCache, null);
         }
         baseUri = base._uri;
-        for (t3 = J.getInterceptor$s(baseUri), baseStart0 = baseStart; t3.startsWith$2(baseUri, "../", baseStart0);)
+        for (t4 = J.getInterceptor$s(baseUri), baseStart0 = baseStart; t4.startsWith$2(baseUri, "../", baseStart0);)
           baseStart0 = J.$add$ns(baseStart0, 3);
         backCount = 0;
         while (true) {
-          t3 = J.getInterceptor$ns(refStart);
-          if (!(J.$le$n(t3.$add(refStart, 3), t1) && C.JSString_methods.startsWith$2(t2, "../", refStart)))
+          t5 = J.getInterceptor$ns(refStart);
+          if (!(J.$le$n(t5.$add(refStart, 3), t1) && t3.startsWith$2(t2, "../", refStart)))
             break;
-          refStart = t3.$add(refStart, 3);
+          refStart = t5.$add(refStart, 3);
           ++backCount;
         }
-        for (insert = ""; t4 = J.getInterceptor$n(baseEnd), t4.$gt(baseEnd, baseStart0);) {
-          baseEnd = t4.$sub(baseEnd, 1);
-          if (C.JSString_methods.codeUnitAt$1(baseUri, baseEnd) === 47) {
+        for (insert = ""; t6 = J.getInterceptor$n(baseEnd), t6.$gt(baseEnd, baseStart0);) {
+          baseEnd = t6.$sub(baseEnd, 1);
+          if (t4.codeUnitAt$1(baseUri, baseEnd) === 47) {
             if (backCount === 0) {
               insert = "/";
               break;
@@ -12074,13 +12427,13 @@
             insert = "/";
           }
         }
-        t4 = J.getInterceptor(baseEnd);
-        if (t4.$eq(baseEnd, baseStart0) && !J.$gt$n(base._schemeEnd, 0) && !C.JSString_methods.startsWith$2(baseUri, "/", baseStart)) {
-          refStart = t3.$sub(refStart, backCount * 3);
+        t6 = J.getInterceptor(baseEnd);
+        if (t6.$eq(baseEnd, baseStart0) && !J.$gt$n(base._schemeEnd, 0) && !t4.startsWith$2(baseUri, "/", baseStart)) {
+          refStart = t5.$sub(refStart, backCount * 3);
           insert = "";
         }
-        delta = J.$add$ns(t4.$sub(baseEnd, refStart), insert.length);
-        return new P._SimpleUri(C.JSString_methods.substring$2(baseUri, 0, baseEnd) + insert + C.JSString_methods.substring$1(t2, refStart), base._schemeEnd, base._hostStart, base._portStart, baseStart, J.$add$ns(t1, delta), J.$add$ns(ref._fragmentStart, delta), base._schemeCache, null);
+        delta = J.$add$ns(t6.$sub(baseEnd, refStart), insert.length);
+        return new P._SimpleUri(t4.substring$2(baseUri, 0, baseEnd) + insert + t3.substring$1(t2, refStart), base._schemeEnd, base._hostStart, base._portStart, baseStart, J.$add$ns(t1, delta), J.$add$ns(ref._fragmentStart, delta), base._schemeCache, null);
       },
       toFilePath$1$windows: function(windows) {
         var t1, t2, t3, t4;
@@ -12133,7 +12486,7 @@
         return false;
       },
       _toNonSimple$0: function() {
-        var t1, t2, t3, t4, t5, t6, t7, t8;
+        var t1, t2, t3, t4, t5, t6, t7, t8, t9;
         t1 = this.get$scheme();
         t2 = this.get$userInfo();
         t3 = this._hostStart;
@@ -12145,10 +12498,11 @@
         t4 = this.get$hasPort() ? this.get$port(this) : null;
         t5 = this._uri;
         t6 = this._queryStart;
-        t7 = J.substring$2$s(t5, this._pathStart, t6);
-        t8 = this._fragmentStart;
-        t6 = J.$lt$n(t6, t8) ? this.get$query(this) : null;
-        return new P._Uri(t1, t2, t3, t4, t7, t6, J.$lt$n(t8, t5.length) ? this.get$fragment() : null, null, null, null, null, null);
+        t7 = J.getInterceptor$s(t5);
+        t8 = t7.substring$2(t5, this._pathStart, t6);
+        t9 = this._fragmentStart;
+        t6 = J.$lt$n(t6, t9) ? this.get$query(this) : null;
+        return new P._Uri(t1, t2, t3, t4, t8, t6, J.$lt$n(t9, t7.get$length(t5)) ? this.get$fragment() : null, null, null, null, null, null);
       },
       toString$0: function(_) {
         return this._uri;
@@ -12672,6 +13026,9 @@
       postMessage$2: function($receiver, message, targetOrigin) {
         return this.postMessage$3($receiver, message, targetOrigin, null);
       },
+      print$0: [function(receiver) {
+        return receiver.print();
+      }, "call$0", "get$print", 0, 0, 2],
       $isInterceptor: 1,
       "%": "DOMWindow|Window"
     },
@@ -12827,7 +13184,10 @@
       pause$0: function($receiver) {
         return this.pause$1($receiver, null);
       },
-      resume$0: function() {
+      get$isPaused: function() {
+        return this._pauseCount > 0;
+      },
+      resume$0: function(_) {
         if (this._html$_target == null || this._pauseCount <= 0)
           return;
         --this._pauseCount;
@@ -13028,9 +13388,9 @@
     },
     _StructuredClone_walk_closure: {
       "^": "Closure:3;_box_0,$this",
-      call$2: function(key, value) {
+      call$2: [function(key, value) {
         this._box_0.copy[key] = this.$this.walk$1(value);
-      }
+      }, null, null, 4, 0, null, 17, 9, "call"]
     },
     _AcceptStructuredClone: {
       "^": "Object;",
@@ -13137,22 +13497,46 @@
     },
     convertNativePromiseToDartFuture_closure: {
       "^": "Closure:0;completer",
-      call$1: function(result) {
+      call$1: [function(result) {
         return this.completer.complete$1(0, result);
-      }
+      }, null, null, 2, 0, null, 14, "call"]
     },
     convertNativePromiseToDartFuture_closure0: {
       "^": "Closure:0;completer",
-      call$1: function(result) {
+      call$1: [function(result) {
         return this.completer.completeError$1(result);
-      }
+      }, null, null, 2, 0, null, 14, "call"]
     }
   }], ["dart.dom.indexed_db", "dart:indexed_db",, P, {
     "^": ""
+  }], ["dart.js", "dart:js",, P, {
+    "^": "",
+    _convertDartFunctionFast: function(f) {
+      var existing, ret;
+      existing = f.$dart_jsFunction;
+      if (existing != null)
+        return existing;
+      ret = function(_call, f) {
+        return function() {
+          return _call(f, Array.prototype.slice.apply(arguments));
+        };
+      }(P._callDartFunctionFast, f);
+      ret[$.$get$DART_CLOSURE_PROPERTY_NAME()] = f;
+      f.$dart_jsFunction = ret;
+      return ret;
+    },
+    _callDartFunctionFast: [function(callback, $arguments) {
+      return H.Primitives_applyFunctionWithPositionalArguments(callback, $arguments);
+    }, null, null, 4, 0, null, 15, 29],
+    allowInterop: function(f) {
+      if (typeof f == "function")
+        return f;
+      else
+        return P._convertDartFunctionFast(f);
+    }
   }], ["dart.math", "dart:math",, P, {
     "^": "",
     max: [function(a, b) {
-      var t1;
       if (typeof a !== "number")
         throw H.wrapException(P.ArgumentError$(a));
       if (typeof b !== "number")
@@ -13169,14 +13553,10 @@
           return b;
         return a;
       }
-      if (b === 0)
-        t1 = a === 0 ? 1 / a < 0 : a < 0;
-      else
-        t1 = false;
-      if (t1)
+      if (b === 0 && C.JSNumber_methods.get$isNegative(a))
         return b;
       return a;
-    }, "call$2", "math__max$closure", 4, 0, 42]
+    }, "call$2", "math__max$closure", 4, 0, 44]
   }], ["dart.dom.svg", "dart:svg",, P, {
     "^": "",
     AElement: {
@@ -13190,82 +13570,82 @@
       "%": "SVGAnimateElement|SVGAnimateMotionElement|SVGAnimateTransformElement|SVGAnimationElement|SVGSetElement"
     },
     FEBlendElement: {
-      "^": "SvgElement;",
+      "^": "SvgElement;result=",
       $isInterceptor: 1,
       "%": "SVGFEBlendElement"
     },
     FEColorMatrixElement: {
-      "^": "SvgElement;",
+      "^": "SvgElement;result=",
       $isInterceptor: 1,
       "%": "SVGFEColorMatrixElement"
     },
     FEComponentTransferElement: {
-      "^": "SvgElement;",
+      "^": "SvgElement;result=",
       $isInterceptor: 1,
       "%": "SVGFEComponentTransferElement"
     },
     FECompositeElement: {
-      "^": "SvgElement;",
+      "^": "SvgElement;result=",
       $isInterceptor: 1,
       "%": "SVGFECompositeElement"
     },
     FEConvolveMatrixElement: {
-      "^": "SvgElement;",
+      "^": "SvgElement;result=",
       $isInterceptor: 1,
       "%": "SVGFEConvolveMatrixElement"
     },
     FEDiffuseLightingElement: {
-      "^": "SvgElement;",
+      "^": "SvgElement;result=",
       $isInterceptor: 1,
       "%": "SVGFEDiffuseLightingElement"
     },
     FEDisplacementMapElement: {
-      "^": "SvgElement;",
+      "^": "SvgElement;result=",
       $isInterceptor: 1,
       "%": "SVGFEDisplacementMapElement"
     },
     FEFloodElement: {
-      "^": "SvgElement;",
+      "^": "SvgElement;result=",
       $isInterceptor: 1,
       "%": "SVGFEFloodElement"
     },
     FEGaussianBlurElement: {
-      "^": "SvgElement;",
+      "^": "SvgElement;result=",
       $isInterceptor: 1,
       "%": "SVGFEGaussianBlurElement"
     },
     FEImageElement: {
-      "^": "SvgElement;",
+      "^": "SvgElement;result=",
       $isInterceptor: 1,
       "%": "SVGFEImageElement"
     },
     FEMergeElement: {
-      "^": "SvgElement;",
+      "^": "SvgElement;result=",
       $isInterceptor: 1,
       "%": "SVGFEMergeElement"
     },
     FEMorphologyElement: {
-      "^": "SvgElement;",
+      "^": "SvgElement;result=",
       $isInterceptor: 1,
       "%": "SVGFEMorphologyElement"
     },
     FEOffsetElement: {
-      "^": "SvgElement;",
+      "^": "SvgElement;result=",
       $isInterceptor: 1,
       "%": "SVGFEOffsetElement"
     },
     FESpecularLightingElement: {
-      "^": "SvgElement;",
+      "^": "SvgElement;result=",
       $isInterceptor: 1,
       "%": "SVGFESpecularLightingElement"
     },
     FETileElement: {
-      "^": "SvgElement;",
+      "^": "SvgElement;result=",
       $isInterceptor: 1,
       "%": "SVGFETileElement"
     },
     FETurbulenceElement: {
-      "^": "SvgElement;",
+      "^": "SvgElement;result=",
       $isInterceptor: 1,
       "%": "SVGFETurbulenceElement"
     },
@@ -13409,9 +13789,9 @@
     },
     NullStreamSink_addStream_closure: {
       "^": "Closure:1;$this",
-      call$0: function() {
+      call$0: [function() {
         this.$this._addingStream = false;
-      }
+      }, null, null, 0, 0, null, "call"]
     }
   }], ["", "package:path/path.dart",, D, {
     "^": "",
@@ -13466,7 +13846,7 @@
         var t1;
         M._validateArgList("absolute", [part1, part2, part3, part4, part5, part6, part7]);
         t1 = this.style;
-        t1 = t1.rootLength$1(part1) > 0 && !t1.isRootRelative$1(part1);
+        t1 = J.$gt$n(t1.rootLength$1(part1), 0) && !t1.isRootRelative$1(part1);
         if (t1)
           return part1;
         t1 = this._context$_current;
@@ -13503,7 +13883,7 @@
             }
             buffer._contents = "";
             buffer._contents += parsed.toString$0(0);
-          } else if (t3.rootLength$1(part) > 0) {
+          } else if (J.$gt$n(t3.rootLength$1(part), 0)) {
             isAbsoluteAndNotRootRelative = !t3.isRootRelative$1(part);
             buffer._contents = "";
             buffer._contents += H.S(part);
@@ -13540,22 +13920,27 @@
         return parsed.toString$0(0);
       },
       _needsNormalization$1: function(path) {
-        var codeUnits, t1, root, t2, i, start, previous, t3, previousPrevious, codeUnit, t4;
+        var codeUnits, t1, root, t2, i, start, previous, t3, previousPrevious, t4, codeUnit, t5;
         codeUnits = J.get$codeUnits$s(path);
         t1 = this.style;
         root = t1.rootLength$1(path);
-        if (root !== 0) {
-          if (t1 === $.$get$Style_windows())
-            for (t2 = codeUnits.__internal$_string, i = 0; i < root; ++i)
+        if (!J.$eq$(root, 0)) {
+          if (t1 === $.$get$Style_windows()) {
+            if (typeof root !== "number")
+              return H.iae(root);
+            t2 = codeUnits.__internal$_string;
+            i = 0;
+            for (; i < root; ++i)
               if (C.JSString_methods.codeUnitAt$1(t2, i) === 47)
                 return true;
+          }
           start = root;
           previous = 47;
         } else {
           start = 0;
           previous = null;
         }
-        for (t2 = codeUnits.__internal$_string, t3 = t2.length, i = start, previousPrevious = null; i < t3; ++i, previousPrevious = previous, previous = codeUnit) {
+        for (t2 = codeUnits.__internal$_string, t3 = t2.length, i = start, previousPrevious = null; t4 = J.getInterceptor$n(i), t4.$lt(i, t3); i = t4.$add(i, 1), previousPrevious = previous, previous = codeUnit) {
           codeUnit = C.JSString_methods.codeUnitAt$1(t2, i);
           if (t1.isSeparator$1(codeUnit)) {
             if (t1 === $.$get$Style_windows() && codeUnit === 47)
@@ -13563,10 +13948,10 @@
             if (previous != null && t1.isSeparator$1(previous))
               return true;
             if (previous === 46)
-              t4 = previousPrevious == null || previousPrevious === 46 || t1.isSeparator$1(previousPrevious);
+              t5 = previousPrevious == null || previousPrevious === 46 || t1.isSeparator$1(previousPrevious);
             else
-              t4 = false;
-            if (t4)
+              t5 = false;
+            if (t5)
               return true;
           }
         }
@@ -13584,16 +13969,16 @@
       },
       relative$2$from: function(path, from) {
         var t1, fromParsed, pathParsed, t2, t3;
-        if (this.style.rootLength$1(path) <= 0)
+        if (!J.$gt$n(this.style.rootLength$1(path), 0))
           return this.normalize$1(path);
         t1 = this._context$_current;
         from = t1 != null ? t1 : D.current();
         t1 = this.style;
-        if (t1.rootLength$1(from) <= 0 && t1.rootLength$1(path) > 0)
+        if (!J.$gt$n(t1.rootLength$1(from), 0) && J.$gt$n(t1.rootLength$1(path), 0))
           return this.normalize$1(path);
-        if (t1.rootLength$1(path) <= 0 || t1.isRootRelative$1(path))
+        if (!J.$gt$n(t1.rootLength$1(path), 0) || t1.isRootRelative$1(path))
           path = this.absolute$1(0, path);
-        if (t1.rootLength$1(path) <= 0 && t1.rootLength$1(from) > 0)
+        if (!J.$gt$n(t1.rootLength$1(path), 0) && J.$gt$n(t1.rootLength$1(from), 0))
           throw H.wrapException(new X.PathException('Unable to find a path to "' + H.S(path) + '" from "' + H.S(from) + '".'));
         fromParsed = X.ParsedPath_ParsedPath$parse(from, t1);
         fromParsed.normalize$0();
@@ -13656,7 +14041,7 @@
       toUri$1: function(path) {
         var t1, t2;
         t1 = this.style;
-        if (t1.rootLength$1(path) <= 0)
+        if (!J.$gt$n(t1.rootLength$1(path), 0))
           return t1.relativePathToUri$1(path);
         else {
           t2 = this._context$_current;
@@ -13719,9 +14104,9 @@
     },
     _validateArgList_closure: {
       "^": "Closure:0;",
-      call$1: function(arg) {
+      call$1: [function(arg) {
         return arg == null ? "null" : '"' + H.S(arg) + '"';
-      }
+      }, null, null, 2, 0, null, 12, "call"]
     }
   }], ["", "package:path/src/internal_style.dart",, B, {
     "^": "",
@@ -13729,7 +14114,7 @@
       "^": "Style;",
       getRoot$1: function(path) {
         var $length = this.rootLength$1(path);
-        if ($length > 0)
+        if (J.$gt$n($length, 0))
           return J.substring$2$s(path, 0, $length);
         return this.isRootRelative$1(path) ? J.$index$asx(path, 0) : null;
       },
@@ -13797,7 +14182,14 @@
         this.parts = newParts;
         this.separators = newSeparators;
         t1 = this.root;
-        if (t1 != null && this.style === $.$get$Style_windows())
+        if (t1 != null) {
+          t2 = this.style;
+          t3 = $.$get$Style_windows();
+          t3 = t2 == null ? t3 == null : t2 === t3;
+          t2 = t3;
+        } else
+          t2 = false;
+        if (t2)
           this.root = J.replaceAll$2$s(t1, "/", "\\");
         this.removeTrailingSeparators$0();
       },
@@ -13849,10 +14241,8 @@
             if (!(i < t2))
               break;
             if (style.isSeparator$1(t1.codeUnitAt$1(path, i))) {
-              parts.push(C.JSString_methods.substring$2(path, start, i));
-              if (i >= path.length)
-                return H.ioore(path, i);
-              separators.push(path[i]);
+              parts.push(t1.substring$2(path, start, i));
+              separators.push(t1.$index(path, i));
               start = i + 1;
             }
             ++i;
@@ -13958,7 +14348,7 @@
           return false;
         if (t1.codeUnitAt$1(path, J.$sub$n(t1.get$length(path), 1)) !== 47)
           return true;
-        return C.JSString_methods.endsWith$1(path, "://") && this.rootLength$1(path) === path.length;
+        return t1.endsWith$1(path, "://") && J.$eq$(this.rootLength$1(path), t1.get$length(path));
       },
       rootLength$1: function(path) {
         var t1, index;
@@ -13967,12 +14357,12 @@
           return 0;
         if (t1.codeUnitAt$1(path, 0) === 47)
           return 1;
-        index = C.JSString_methods.indexOf$1(path, "/");
-        if (index > 0 && C.JSString_methods.startsWith$2(path, "://", index - 1)) {
-          index = C.JSString_methods.indexOf$2(path, "/", index + 2);
+        index = t1.indexOf$1(path, "/");
+        if (index > 0 && t1.startsWith$2(path, "://", index - 1)) {
+          index = t1.indexOf$2(path, "/", index + 2);
           if (index > 0)
             return index;
-          return path.length;
+          return t1.get$length(path);
         }
         return 0;
       },
@@ -14008,42 +14398,41 @@
         return !(t1 === 47 || t1 === 92);
       },
       rootLength$1: function(path) {
-        var t1, index;
+        var t1, index, t2;
         t1 = J.getInterceptor$asx(path);
         if (t1.get$isEmpty(path) === true)
           return 0;
         if (t1.codeUnitAt$1(path, 0) === 47)
           return 1;
-        if (C.JSString_methods.codeUnitAt$1(path, 0) === 92) {
-          t1 = path.length;
-          if (t1 < 2 || C.JSString_methods.codeUnitAt$1(path, 1) !== 92)
+        if (t1.codeUnitAt$1(path, 0) === 92) {
+          if (J.$lt$n(t1.get$length(path), 2) || t1.codeUnitAt$1(path, 1) !== 92)
             return 1;
-          index = C.JSString_methods.indexOf$2(path, "\\", 2);
+          index = t1.indexOf$2(path, "\\", 2);
           if (index > 0) {
-            index = C.JSString_methods.indexOf$2(path, "\\", index + 1);
+            index = t1.indexOf$2(path, "\\", index + 1);
             if (index > 0)
               return index;
           }
-          return t1;
+          return t1.get$length(path);
         }
-        if (path.length < 3)
+        if (J.$lt$n(t1.get$length(path), 3))
           return 0;
-        t1 = C.JSString_methods.codeUnitAt$1(path, 0);
-        if (!(t1 >= 65 && t1 <= 90))
-          t1 = t1 >= 97 && t1 <= 122;
+        t2 = t1.codeUnitAt$1(path, 0);
+        if (!(t2 >= 65 && t2 <= 90))
+          t2 = t2 >= 97 && t2 <= 122;
         else
-          t1 = true;
-        if (!t1)
+          t2 = true;
+        if (!t2)
           return 0;
-        if (C.JSString_methods.codeUnitAt$1(path, 1) !== 58)
+        if (t1.codeUnitAt$1(path, 1) !== 58)
           return 0;
-        t1 = C.JSString_methods.codeUnitAt$1(path, 2);
+        t1 = t1.codeUnitAt$1(path, 2);
         if (!(t1 === 47 || t1 === 92))
           return 0;
         return 3;
       },
       isRootRelative$1: function(path) {
-        return this.rootLength$1(path) === 1;
+        return J.$eq$(this.rootLength$1(path), 1);
       },
       pathFromUri$1: function(uri) {
         var path, t1;
@@ -14158,9 +14547,9 @@
     },
     closure3: {
       "^": "Closure:0;",
-      call$1: function(trace) {
+      call$1: [function(trace) {
         return Y.Trace$parseFriendly(trace);
-      }
+      }, null, null, 2, 0, null, 13, "call"]
     },
     Chain_terse_closure: {
       "^": "Closure:0;",
@@ -14170,9 +14559,9 @@
     },
     Chain_foldFrames_closure: {
       "^": "Closure:0;predicate,terse",
-      call$1: function(trace) {
+      call$1: [function(trace) {
         return trace.foldFrames$2$terse(this.predicate, this.terse);
-      }
+      }, null, null, 2, 0, null, 13, "call"]
     },
     Chain_foldFrames_closure0: {
       "^": "Closure:0;terse",
@@ -14194,27 +14583,27 @@
     },
     Chain_toString_closure0: {
       "^": "Closure:0;",
-      call$1: function(trace) {
+      call$1: [function(trace) {
         return new H.MappedListIterable(trace.get$frames(), new U.Chain_toString__closure0(), [null, null]).fold$2(0, 0, P.math__max$closure());
-      }
+      }, null, null, 2, 0, null, 13, "call"]
     },
     Chain_toString__closure0: {
       "^": "Closure:0;",
-      call$1: function(frame) {
+      call$1: [function(frame) {
         return J.get$length$asx(J.get$location$x(frame));
-      }
+      }, null, null, 2, 0, null, 11, "call"]
     },
     Chain_toString_closure: {
       "^": "Closure:0;longest",
-      call$1: function(trace) {
+      call$1: [function(trace) {
         return new H.MappedListIterable(trace.get$frames(), new U.Chain_toString__closure(this.longest), [null, null]).join$0(0);
-      }
+      }, null, null, 2, 0, null, 13, "call"]
     },
     Chain_toString__closure: {
       "^": "Closure:0;longest",
-      call$1: function(frame) {
+      call$1: [function(frame) {
         return J.padRight$1$s(J.get$location$x(frame), this.longest) + "  " + H.S(frame.get$member()) + "\n";
-      }
+      }, null, null, 2, 0, null, 11, "call"]
     }
   }], ["", "package:stack_trace/src/frame.dart",, A, {
     "^": "",
@@ -14269,7 +14658,7 @@
             return P._Uri__Uri$file(uriOrPath, true);
           else if (t1.startsWith$1(uriOrPath, "/"))
             return P._Uri__Uri$file(uriOrPath, false);
-          if (C.JSString_methods.contains$1(uriOrPath, "\\"))
+          if (t1.contains$1(uriOrPath, "\\") === true)
             return $.$get$windows().toUri$1(uriOrPath);
           return P.Uri_parse(uriOrPath, 0, null);
         },
@@ -14617,9 +15006,9 @@
     },
     Trace__parseVM_closure: {
       "^": "Closure:0;",
-      call$1: function(line) {
+      call$1: [function(line) {
         return A.Frame_Frame$parseVM(line);
-      }
+      }, null, null, 2, 0, null, 10, "call"]
     },
     Trace$parseV8_closure: {
       "^": "Closure:0;",
@@ -14629,9 +15018,9 @@
     },
     Trace$parseV8_closure0: {
       "^": "Closure:0;",
-      call$1: function(line) {
+      call$1: [function(line) {
         return A.Frame_Frame$parseV8(line);
-      }
+      }, null, null, 2, 0, null, 10, "call"]
     },
     Trace$parseJSCore_closure: {
       "^": "Closure:0;",
@@ -14641,9 +15030,9 @@
     },
     Trace$parseJSCore_closure0: {
       "^": "Closure:0;",
-      call$1: function(line) {
+      call$1: [function(line) {
         return A.Frame_Frame$parseV8(line);
-      }
+      }, null, null, 2, 0, null, 10, "call"]
     },
     Trace$parseFirefox_closure: {
       "^": "Closure:0;",
@@ -14654,9 +15043,9 @@
     },
     Trace$parseFirefox_closure0: {
       "^": "Closure:0;",
-      call$1: function(line) {
+      call$1: [function(line) {
         return A.Frame_Frame$parseFirefox(line);
-      }
+      }, null, null, 2, 0, null, 10, "call"]
     },
     Trace$parseFriendly_closure: {
       "^": "Closure:0;",
@@ -14666,9 +15055,9 @@
     },
     Trace$parseFriendly_closure0: {
       "^": "Closure:0;",
-      call$1: function(line) {
+      call$1: [function(line) {
         return A.Frame_Frame$parseFriendly(line);
-      }
+      }, null, null, 2, 0, null, 10, "call"]
     },
     Trace_terse_closure: {
       "^": "Closure:0;",
@@ -14692,26 +15081,26 @@
     },
     Trace_foldFrames_closure0: {
       "^": "Closure:0;_box_0",
-      call$1: function(frame) {
+      call$1: [function(frame) {
         if (frame instanceof N.UnparsedFrame || this._box_0.predicate.call$1(frame) !== true)
           return frame;
         return new A.Frame(P.Uri_parse(J.replaceAll$2$s(frame.get$library(), $.$get$_terseRegExp(), ""), 0, null), null, null, frame.get$member());
-      }
+      }, null, null, 2, 0, null, 11, "call"]
     },
     Trace_toString_closure0: {
       "^": "Closure:0;",
-      call$1: function(frame) {
+      call$1: [function(frame) {
         return J.get$length$asx(J.get$location$x(frame));
-      }
+      }, null, null, 2, 0, null, 11, "call"]
     },
     Trace_toString_closure: {
       "^": "Closure:0;longest",
-      call$1: function(frame) {
+      call$1: [function(frame) {
         var t1 = J.getInterceptor(frame);
         if (!!t1.$isUnparsedFrame)
           return H.S(frame) + "\n";
         return J.padRight$1$s(t1.get$location(frame), this.longest) + "  " + H.S(frame.get$member()) + "\n";
-      }
+      }, null, null, 2, 0, null, 11, "call"]
     }
   }], ["", "package:stack_trace/src/unparsed_frame.dart",, N, {
     "^": "",
@@ -14724,10 +15113,10 @@
   }], ["", "package:stream_channel/src/guarantee_channel.dart",, K, {
     "^": "",
     GuaranteeChannel: {
-      "^": "StreamChannelMixin;_sink,_streamController,_subscription,_disconnected,$ti",
+      "^": "StreamChannelMixin;_sink,_streamController,_guarantee_channel$_subscription,_disconnected,$ti",
       _onSinkDisconnected$0: function() {
         this._disconnected = true;
-        var t1 = this._subscription;
+        var t1 = this._guarantee_channel$_subscription;
         if (t1 != null)
           t1.cancel$0();
         this._streamController.close$0(0);
@@ -14756,16 +15145,16 @@
           return;
         t2 = this._box_0.innerStream;
         t3 = t1._streamController;
-        t1._subscription = t2.listen$3$onDone$onError(t3.get$add(t3), new K.GuaranteeChannel__closure(t1), t1._streamController.get$addError());
+        t1._guarantee_channel$_subscription = t2.listen$3$onDone$onError(t3.get$add(t3), new K.GuaranteeChannel__closure(t1), t1._streamController.get$addError());
       }
     },
     GuaranteeChannel__closure: {
       "^": "Closure:1;$this",
-      call$0: function() {
+      call$0: [function() {
         var t1 = this.$this;
         t1._sink._onStreamDisconnected$0();
         t1._streamController.close$0(0);
-      }
+      }, null, null, 0, 0, null, "call"]
     },
     _GuaranteeSink: {
       "^": "Object;_guarantee_channel$_inner,_channel,_doneCompleter,_disconnected,_closed,_addStreamSubscription,_addStreamCompleter,_allowErrors,$ti",
@@ -14789,16 +15178,16 @@
           throw H.wrapException(new P.StateError("Cannot add event while adding stream."));
         if (this._disconnected)
           return;
-        this._addError$2(error, stackTrace);
+        this._guarantee_channel$_addError$2(error, stackTrace);
       }, function(error) {
         return this.addError$2(error, null);
-      }, "addError$1", "call$2", "call$1", "get$addError", 2, 2, 6, 0],
-      _addError$2: [function(error, stackTrace) {
+      }, "addError$1", "call$2", "call$1", "get$addError", 2, 2, 6, 5, 3, 4],
+      _guarantee_channel$_addError$2: [function(error, stackTrace) {
         this._guarantee_channel$_inner._async$_target.addError$2(error, stackTrace);
         return;
       }, function(error) {
-        return this._addError$2(error, null);
-      }, "_addError$1", "call$2", "call$1", "get$_addError", 2, 2, 6, 0],
+        return this._guarantee_channel$_addError$2(error, null);
+      }, "_guarantee_channel$_addError$1", "call$2", "call$1", "get$_guarantee_channel$_addError", 2, 2, 6, 5, 3, 4],
       addStream$1: function(stream) {
         var t1, t2, t3;
         if (this._closed)
@@ -14813,7 +15202,7 @@
         this._addStreamCompleter = new P._SyncCompleter(new P._Future(0, $.Zone__current, null, [null]), [null]);
         t1 = this._guarantee_channel$_inner;
         t1 = t1.get$add(t1);
-        t2 = this.get$_addError();
+        t2 = this.get$_guarantee_channel$_addError();
         t3 = this._addStreamCompleter;
         this._addStreamSubscription = stream.listen$3$onDone$onError(t1, t3.get$complete(t3), t2);
         return this._addStreamCompleter.future.then$1(new K._GuaranteeSink_addStream_closure(this));
@@ -14845,11 +15234,11 @@
     },
     _GuaranteeSink_addStream_closure: {
       "^": "Closure:0;$this",
-      call$1: function(_) {
+      call$1: [function(_) {
         var t1 = this.$this;
         t1._addStreamCompleter = null;
         t1._addStreamSubscription = null;
-      }
+      }, null, null, 2, 0, null, 6, "call"]
     }
   }], ["", "package:stream_channel/src/multi_channel.dart",, D, {
     "^": "",
@@ -14932,19 +15321,19 @@
     },
     _MultiChannel_closure: {
       "^": "Closure:0;$this",
-      call$1: function(message) {
+      call$1: [function(message) {
         return this.$this._multi_channel$_inner._sink.add$1(0, [0, message]);
-      }
+      }, null, null, 2, 0, null, 7, "call"]
     },
     _MultiChannel_closure0: {
       "^": "Closure:1;$this",
-      call$0: function() {
+      call$0: [function() {
         return this.$this._closeChannel$2(0, 0);
-      }
+      }, null, null, 0, 0, null, "call"]
     },
     _MultiChannel_closure1: {
       "^": "Closure:0;$this",
-      call$1: function(message) {
+      call$1: [function(message) {
         var t1, controller;
         t1 = J.getInterceptor$asx(message);
         controller = this.$this._controllers.$index(0, t1.$index(message, 0));
@@ -14955,20 +15344,20 @@
           return;
         }
         controller._local._sink.close$0(0);
-      }
+      }, null, null, 2, 0, null, 7, "call"]
     },
     _MultiChannel_virtualChannel_closure: {
       "^": "Closure:0;_box_0,$this",
-      call$1: function(message) {
+      call$1: [function(message) {
         return this.$this._multi_channel$_inner._sink.add$1(0, [this._box_0.outputId, message]);
-      }
+      }, null, null, 2, 0, null, 7, "call"]
     },
     _MultiChannel_virtualChannel_closure0: {
       "^": "Closure:1;_box_0,$this",
-      call$0: function() {
+      call$0: [function() {
         var t1 = this._box_0;
         return this.$this._closeChannel$2(t1.inputId, t1.outputId);
-      }
+      }, null, null, 0, 0, null, "call"]
     },
     VirtualChannel: {
       "^": "StreamChannelMixin;_parent,id,stream,sink"
@@ -15044,9 +15433,13 @@
       "^": "JavaScriptObject;",
       "%": ""
     },
+    _JSApi: {
+      "^": "JavaScriptObject;",
+      "%": ""
+    },
     main_closure: {
       "^": "Closure:1;",
-      call$0: function() {
+      call$0: [function() {
         var serverChannel, t1;
         serverChannel = M._connectToServer();
         t1 = serverChannel._mainController._foreign._streamController;
@@ -15055,11 +15448,13 @@
         P.Timer_Timer$periodic(P.Duration$(0, 0, 0, 0, 0, 1), new M.main__closure0(serverChannel));
         t1 = J.get$onClick$x(document.querySelector("#play"));
         new W._EventStreamSubscription(0, t1._html$_target, t1._eventType, W._wrapZone(new M.main__closure1(serverChannel)), false, [H.getTypeArgumentByIndex(t1, 0)])._tryResume$0();
-      }
+        t1 = {resume: P.allowInterop(new M.main__closure2(serverChannel))};
+        self.dartTest = t1;
+      }, null, null, 0, 0, null, "call"]
     },
     main__closure: {
       "^": "Closure:0;serverChannel",
-      call$1: function(message) {
+      call$1: [function(message) {
         var t1, suiteChannel, iframeChannel;
         t1 = J.getInterceptor$asx(message);
         if (J.$eq$(t1.$index(message, "command"), "loadSuite")) {
@@ -15079,44 +15474,55 @@
           W._ElementCssClassSet__remove(t1, "paused");
         } else
           J.remove$0$ax($.$get$_iframes().$index(0, t1.$index(message, "id")));
-      }
+      }, null, null, 2, 0, null, 7, "call"]
     },
     main__closure0: {
       "^": "Closure:0;serverChannel",
-      call$1: function(_) {
+      call$1: [function(_) {
         return this.serverChannel._mainController._foreign._sink.add$1(0, P.LinkedHashMap__makeLiteral(["command", "ping"]));
-      }
+      }, null, null, 2, 0, null, 6, "call"]
     },
     main__closure1: {
       "^": "Closure:0;serverChannel",
-      call$1: function(_) {
+      call$1: [function(_) {
         var t1 = document.body;
         t1.toString;
-        W._ElementCssClassSet__remove(t1, "paused");
+        if (!W._ElementCssClassSet__remove(t1, "paused"))
+          return;
         this.serverChannel._mainController._foreign._sink.add$1(0, P.LinkedHashMap__makeLiteral(["command", "resume"]));
-      }
+      }, null, null, 2, 0, null, 6, "call"]
+    },
+    main__closure2: {
+      "^": "Closure:1;serverChannel",
+      call$0: [function() {
+        var t1 = document.body;
+        t1.toString;
+        if (!W._ElementCssClassSet__remove(t1, "paused"))
+          return;
+        this.serverChannel._mainController._foreign._sink.add$1(0, P.LinkedHashMap__makeLiteral(["command", "resume"]));
+      }, null, null, 0, 0, null, "call"]
     },
     main_closure0: {
       "^": "Closure:3;",
-      call$2: function(error, stackTrace) {
+      call$2: [function(error, stackTrace) {
         P.print(H.S(error) + "\n" + H.S(Y.Trace_Trace$from(stackTrace).get$terse()));
-      }
+      }, null, null, 4, 0, null, 3, 4, "call"]
     },
     _connectToServer_closure: {
       "^": "Closure:0;controller",
-      call$1: function(message) {
+      call$1: [function(message) {
         this.controller._local._sink.add$1(0, C.JsonCodec_null_null.decode$1(J.get$data$x(message)));
-      }
+      }, null, null, 2, 0, null, 7, "call"]
     },
     _connectToServer_closure0: {
       "^": "Closure:0;webSocket",
-      call$1: function(message) {
+      call$1: [function(message) {
         return this.webSocket.send(C.JsonCodec_null_null.encode$1(message));
-      }
+      }, null, null, 2, 0, null, 7, "call"]
     },
     _connectToIframe_closure: {
       "^": "Closure:0;iframe,controller,readyCompleter",
-      call$1: function(message) {
+      call$1: [function(message) {
         var t1, t2, t3;
         t1 = J.getInterceptor$x(message);
         t2 = t1.get$origin(message);
@@ -15130,11 +15536,11 @@
           this.readyCompleter.complete$0(0);
         else
           this.controller._local._sink.add$1(0, J.$index$asx(t1.get$data(message), "data"));
-      }
+      }, null, null, 2, 0, null, 7, "call"]
     },
     _connectToIframe_closure0: {
-      "^": "Closure:49;iframe,readyCompleter",
-      call$1: function(message) {
+      "^": "Closure:51;iframe,readyCompleter",
+      call$1: [function(message) {
         var $async$goto = 0, $async$completer = new P.Completer_Completer$sync(), $async$handler = 1, $async$currentError, $async$self = this, t1, t2;
         var $async$call$1 = P._wrapJsFunctionForAsync(function($async$errorCode, $async$result) {
           if ($async$errorCode === 1) {
@@ -15160,7 +15566,7 @@
             }
         });
         return P._asyncHelper(null, $async$call$1, $async$completer);
-      }
+      }, null, null, 2, 0, null, 7, "call"]
     }
   }, 1]];
   setupProgram(dart, 0);
@@ -15298,6 +15704,12 @@
   J.get$parent$x = function(receiver) {
     return J.getInterceptor$x(receiver).get$parent(receiver);
   };
+  J.get$print$x = function(receiver) {
+    return J.getInterceptor$x(receiver).get$print(receiver);
+  };
+  J.get$result$x = function(receiver) {
+    return J.getInterceptor$x(receiver).get$result(receiver);
+  };
   J.get$src$x = function(receiver) {
     return J.getInterceptor$x(receiver).get$src(receiver);
   };
@@ -15306,6 +15718,11 @@
       return receiver + a0;
     return J.getInterceptor$ns(receiver).$add(receiver, a0);
   };
+  J.$and$n = function(receiver, a0) {
+    if (typeof receiver == "number" && typeof a0 == "number")
+      return (receiver & a0) >>> 0;
+    return J.getInterceptor$n(receiver).$and(receiver, a0);
+  };
   J.$ge$n = function(receiver, a0) {
     if (typeof receiver == "number" && typeof a0 == "number")
       return receiver >= a0;
@@ -15344,11 +15761,19 @@
       return receiver * a0;
     return J.getInterceptor$ns(receiver).$mul(receiver, a0);
   };
+  J.$shl$n = function(receiver, a0) {
+    return J.getInterceptor$n(receiver).$shl(receiver, a0);
+  };
   J.$sub$n = function(receiver, a0) {
     if (typeof receiver == "number" && typeof a0 == "number")
       return receiver - a0;
     return J.getInterceptor$n(receiver).$sub(receiver, a0);
   };
+  J.$xor$n = function(receiver, a0) {
+    if (typeof receiver == "number" && typeof a0 == "number")
+      return (receiver ^ a0) >>> 0;
+    return J.getInterceptor$n(receiver).$xor(receiver, a0);
+  };
   J._addEventListener$3$x = function(receiver, a0, a1, a2) {
     return J.getInterceptor$x(receiver)._addEventListener$3(receiver, a0, a1, a2);
   };
@@ -15440,6 +15865,9 @@
       return a0 != null && receiver === a0;
     return J.getInterceptor(receiver).$eq(receiver, a0);
   };
+  J.noSuchMethod$1$ = function(receiver, a0) {
+    return J.getInterceptor(receiver).noSuchMethod$1(receiver, a0);
+  };
   J.toString$0$ = function(receiver) {
     return J.getInterceptor(receiver).toString$0(receiver);
   };
@@ -15611,12 +16039,16 @@
   C.List_WnV = Isolate.makeConstantList(["/", "\\"]);
   C.List_cSk = Isolate.makeConstantList(["/"]);
   C.List_empty = H.setRuntimeTypeInfo(Isolate.makeConstantList([]), [P.String]);
+  C.List_empty0 = Isolate.makeConstantList([]);
   C.List_gRj = Isolate.makeConstantList([0, 0, 32722, 12287, 65534, 34815, 65534, 18431]);
   C.List_nxB = Isolate.makeConstantList([0, 0, 24576, 1023, 65534, 34815, 65534, 18431]);
   C.List_qNA = Isolate.makeConstantList([0, 0, 32754, 11263, 65534, 34815, 65534, 18431]);
   C.List_qg40 = Isolate.makeConstantList([0, 0, 32722, 12287, 65535, 34815, 65534, 18431]);
   C.List_qg4 = Isolate.makeConstantList([0, 0, 65490, 12287, 65535, 34815, 65534, 18431]);
   C.Map_empty = new H.ConstantStringMap(0, {}, C.List_empty, [P.String, P.String]);
+  C.List_empty1 = H.setRuntimeTypeInfo(Isolate.makeConstantList([]), [P.Symbol0]);
+  C.Map_empty0 = new H.ConstantStringMap(0, {}, C.List_empty1, [P.Symbol0, null]);
+  C.Symbol_call = new H.Symbol("call");
   C.Utf8Codec_false = new P.Utf8Codec(false);
   C._ZoneFunction_3bB = new P._ZoneFunction(C.C__RootZone, P.async___rootCreatePeriodicTimer$closure());
   C._ZoneFunction_7G2 = new P._ZoneFunction(C.C__RootZone, P.async___rootRegisterBinaryCallback$closure());
@@ -15804,8 +16236,8 @@
   }, "_currentUrl"]);
   Isolate = Isolate.$finishIsolateConstructor(Isolate);
   $ = new Isolate();
-  init.metadata = [null, 0];
-  init.types = [{func: 1, args: [,]}, {func: 1}, {func: 1, v: true}, {func: 1, args: [,,]}, {func: 1, v: true, args: [{func: 1, v: true}]}, {func: 1, args: [, P.StackTrace]}, {func: 1, v: true, args: [,], opt: [P.StackTrace]}, {func: 1, v: true, args: [P.String]}, {func: 1, v: true, args: [P.Uint8List, P.String, P.$int]}, {func: 1, ret: {func: 1, args: [,]}, args: [{func: 1, args: [,]}]}, {func: 1, ret: P.Zone, named: {specification: P.ZoneSpecification, zoneValues: P.Map}}, {func: 1, args: [{func: 1}]}, {func: 1, args: [{func: 1, args: [,]},,]}, {func: 1, args: [{func: 1, args: [,,]},,,]}, {func: 1, ret: {func: 1}, args: [{func: 1}]}, {func: 1, ret: {func: 1, args: [,,]}, args: [{func: 1, args: [,,]}]}, {func: 1, ret: P.AsyncError, args: [P.Object, P.StackTrace]}, {func: 1, ret: P.Timer, args: [P.Duration, {func: 1, v: true}]}, {func: 1, ret: P.Timer, args: [P.Duration, {func: 1, v: true, args: [P.Timer]}]}, {func: 1, args: [P.Zone, P.ZoneDelegate, P.Zone,, P.StackTrace]}, {func: 1, ret: P.String, args: [P.$int]}, {func: 1, v: true, args: [P.Zone, {func: 1}]}, {func: 1, args: [, P.String]}, {func: 1, ret: P.Timer, args: [P.Zone, P.Duration, {func: 1, v: true}]}, {func: 1, ret: P.Timer, args: [P.Zone, P.Duration, {func: 1, v: true, args: [P.Timer]}]}, {func: 1, v: true, args: [P.Zone, P.String]}, {func: 1, ret: P.Zone, args: [P.Zone, P.ZoneSpecification, P.Map]}, {func: 1, args: [P.$int,,]}, {func: 1, v: true, opt: [,]}, {func: 1, args: [P.String]}, {func: 1, args: [{func: 1, v: true}]}, {func: 1, args: [P.bool]}, {func: 1, args: [,], opt: [,]}, {func: 1, v: true, args: [P.Object], opt: [P.StackTrace]}, {func: 1, v: true, args: [, P.StackTrace]}, {func: 1, args: [P.Zone,, P.StackTrace]}, {func: 1, args: [P.Zone, {func: 1}]}, {func: 1, args: [P.Zone, {func: 1, args: [,]},,]}, {func: 1, args: [P.Zone, {func: 1, args: [,,]},,,]}, {func: 1, ret: {func: 1}, args: [P.Zone, {func: 1}]}, {func: 1, ret: {func: 1, args: [,]}, args: [P.Zone, {func: 1, args: [,]}]}, {func: 1, ret: P.$int, args: [, P.$int]}, {func: 1, ret: P.num, args: [P.num, P.num]}, {func: 1, ret: {func: 1, args: [,,]}, args: [P.Zone, {func: 1, args: [,,]}]}, {func: 1, v: true, args: [P.String, P.$int]}, {func: 1, v: true, args: [P.String], opt: [,]}, {func: 1, ret: P.$int, args: [P.$int, P.$int]}, {func: 1, ret: P.Uint8List, args: [,,]}, {func: 1, ret: P.AsyncError, args: [P.Zone, P.Object, P.StackTrace]}, {func: 1, ret: P.Future, args: [,]}, {func: 1, v: true, args: [,]}, {func: 1, args: [P.Zone, P.ZoneDelegate, P.Zone, {func: 1}]}, {func: 1, args: [P.Zone, P.ZoneDelegate, P.Zone, {func: 1, args: [,]},,]}, {func: 1, args: [P.Zone, P.ZoneDelegate, P.Zone, {func: 1, args: [,,]},,,]}, {func: 1, ret: {func: 1}, args: [P.Zone, P.ZoneDelegate, P.Zone, {func: 1}]}, {func: 1, ret: {func: 1, args: [,]}, args: [P.Zone, P.ZoneDelegate, P.Zone, {func: 1, args: [,]}]}, {func: 1, ret: {func: 1, args: [,,]}, args: [P.Zone, P.ZoneDelegate, P.Zone, {func: 1, args: [,,]}]}, {func: 1, ret: P.AsyncError, args: [P.Zone, P.ZoneDelegate, P.Zone, P.Object, P.StackTrace]}, {func: 1, v: true, args: [P.Zone, P.ZoneDelegate, P.Zone, {func: 1}]}, {func: 1, ret: P.Timer, args: [P.Zone, P.ZoneDelegate, P.Zone, P.Duration, {func: 1, v: true}]}, {func: 1, ret: P.Timer, args: [P.Zone, P.ZoneDelegate, P.Zone, P.Duration, {func: 1, v: true, args: [P.Timer]}]}, {func: 1, v: true, args: [P.Zone, P.ZoneDelegate, P.Zone, P.String]}, {func: 1, ret: P.Zone, args: [P.Zone, P.ZoneDelegate, P.Zone, P.ZoneSpecification, P.Map]}, {func: 1, ret: P.String, args: [P.String]}, {func: 1, v: true, args: [P.$int, P.$int]}];
+  init.metadata = ["self", "zone", "parent", "error", "stackTrace", null, "_", "message", "f", "value", "line", "frame", "arg", "trace", "result", "callback", "data", "key", "each", "duration", "arg2", "arg1", "element", "x", "object", "arg4", "arg3", "specification", "zoneValues", "arguments", "isolate", "errorCode", "closure", "k", "v", 0, "numberOfArguments", "encodedComponent", "s", "e", "sender"];
+  init.types = [{func: 1, args: [,]}, {func: 1}, {func: 1, v: true}, {func: 1, args: [,,]}, {func: 1, v: true, args: [{func: 1, v: true}]}, {func: 1, args: [, P.StackTrace]}, {func: 1, v: true, args: [,], opt: [P.StackTrace]}, {func: 1, v: true, args: [P.String]}, {func: 1, ret: {func: 1, args: [,]}, args: [{func: 1, args: [,]}]}, {func: 1, v: true, args: [P.Uint8List, P.String, P.$int]}, {func: 1, ret: P.String, args: [P.$int]}, {func: 1, v: true, args: [, P.StackTrace]}, {func: 1, args: [P.Zone, P.ZoneDelegate, P.Zone,, P.StackTrace]}, {func: 1, ret: P.Timer, args: [P.Duration, {func: 1, v: true, args: [P.Timer]}]}, {func: 1, ret: P.Timer, args: [P.Duration, {func: 1, v: true}]}, {func: 1, ret: P.AsyncError, args: [P.Object, P.StackTrace]}, {func: 1, ret: {func: 1, args: [,,]}, args: [{func: 1, args: [,,]}]}, {func: 1, ret: {func: 1}, args: [{func: 1}]}, {func: 1, args: [{func: 1, args: [,,]},,,]}, {func: 1, args: [{func: 1, args: [,]},,]}, {func: 1, args: [{func: 1}]}, {func: 1, ret: P.Zone, named: {specification: P.ZoneSpecification, zoneValues: P.Map}}, {func: 1, args: [, P.String]}, {func: 1, v: true, args: [P.Zone, {func: 1}]}, {func: 1, ret: P.Timer, args: [P.Zone, P.Duration, {func: 1, v: true}]}, {func: 1, ret: P.Timer, args: [P.Zone, P.Duration, {func: 1, v: true, args: [P.Timer]}]}, {func: 1, v: true, args: [P.Zone, P.String]}, {func: 1, ret: P.Zone, args: [P.Zone, P.ZoneSpecification, P.Map]}, {func: 1, ret: {func: 1, args: [,,]}, args: [P.Zone, {func: 1, args: [,,]}]}, {func: 1, ret: {func: 1, args: [,]}, args: [P.Zone, {func: 1, args: [,]}]}, {func: 1, ret: {func: 1}, args: [P.Zone, {func: 1}]}, {func: 1, args: [P.Zone, {func: 1, args: [,,]},,,]}, {func: 1, args: [P.Zone, {func: 1, args: [,]},,]}, {func: 1, ret: P.AsyncError, args: [P.Zone, P.Object, P.StackTrace]}, {func: 1, args: [P.Zone, {func: 1}]}, {func: 1, args: [P.Zone,, P.StackTrace]}, {func: 1, args: [P.String]}, {func: 1, v: true, args: [P.Object], opt: [P.StackTrace]}, {func: 1, args: [P.bool]}, {func: 1, args: [{func: 1, v: true}]}, {func: 1, args: [,], opt: [,]}, {func: 1, args: [P.String,,]}, {func: 1, ret: P.$int, args: [, P.$int]}, {func: 1, v: true, args: [P.$int, P.$int]}, {func: 1, ret: P.num, args: [P.num, P.num]}, {func: 1, v: true, opt: [,]}, {func: 1, v: true, args: [P.String, P.$int]}, {func: 1, v: true, args: [P.String], opt: [,]}, {func: 1, ret: P.$int, args: [P.$int, P.$int]}, {func: 1, ret: P.Uint8List, args: [,,]}, {func: 1, args: [P.$int,,]}, {func: 1, ret: P.Future, args: [,]}, {func: 1, v: true, args: [,]}, {func: 1, args: [P.Zone, P.ZoneDelegate, P.Zone, {func: 1}]}, {func: 1, args: [P.Zone, P.ZoneDelegate, P.Zone, {func: 1, args: [,]},,]}, {func: 1, args: [P.Zone, P.ZoneDelegate, P.Zone, {func: 1, args: [,,]},,,]}, {func: 1, ret: {func: 1}, args: [P.Zone, P.ZoneDelegate, P.Zone, {func: 1}]}, {func: 1, ret: {func: 1, args: [,]}, args: [P.Zone, P.ZoneDelegate, P.Zone, {func: 1, args: [,]}]}, {func: 1, ret: {func: 1, args: [,,]}, args: [P.Zone, P.ZoneDelegate, P.Zone, {func: 1, args: [,,]}]}, {func: 1, ret: P.AsyncError, args: [P.Zone, P.ZoneDelegate, P.Zone, P.Object, P.StackTrace]}, {func: 1, v: true, args: [P.Zone, P.ZoneDelegate, P.Zone, {func: 1}]}, {func: 1, ret: P.Timer, args: [P.Zone, P.ZoneDelegate, P.Zone, P.Duration, {func: 1, v: true}]}, {func: 1, ret: P.Timer, args: [P.Zone, P.ZoneDelegate, P.Zone, P.Duration, {func: 1, v: true, args: [P.Timer]}]}, {func: 1, v: true, args: [P.Zone, P.ZoneDelegate, P.Zone, P.String]}, {func: 1, ret: P.Zone, args: [P.Zone, P.ZoneDelegate, P.Zone, P.ZoneSpecification, P.Map]}, {func: 1, ret: P.String, args: [P.String]}, {func: 1, args: [P.Symbol0,,]}];
   function convertToFastObject(properties) {
     function MyClass() {
     }
-- 
GitLab