diff --git a/lib/runtime/dart/_internal.js b/lib/runtime/dart/_internal.js
index 7d3b774..dbd3c3a 100644
--- a/lib/runtime/dart/_internal.js
+++ b/lib/runtime/dart/_internal.js
@@ -1542,49 +1542,49 @@
       'replaceRange'
     ]);
     class FixedLengthListMixin extends core.Object {
-      set [dartx.length](newLength) {
+      set length(newLength) {
         dart.throw(new core.UnsupportedError("Cannot change the length of a fixed-length list"));
       }
-      [dartx.add](value) {
+      add(value) {
         dart.as(value, E);
         dart.throw(new core.UnsupportedError("Cannot add to a fixed-length list"));
       }
-      [dartx.insert](index, value) {
+      insert(index, value) {
         dart.as(value, E);
         dart.throw(new core.UnsupportedError("Cannot add to a fixed-length list"));
       }
-      [dartx.insertAll](at, iterable) {
+      insertAll(at, iterable) {
         dart.as(iterable, core.Iterable$(E));
         dart.throw(new core.UnsupportedError("Cannot add to a fixed-length list"));
       }
-      [dartx.addAll](iterable) {
+      addAll(iterable) {
         dart.as(iterable, core.Iterable$(E));
         dart.throw(new core.UnsupportedError("Cannot add to a fixed-length list"));
       }
-      [dartx.remove](element) {
+      remove(element) {
         dart.throw(new core.UnsupportedError("Cannot remove from a fixed-length list"));
       }
-      [dartx.removeWhere](test) {
+      removeWhere(test) {
         dart.as(test, dart.functionType(core.bool, [E]));
         dart.throw(new core.UnsupportedError("Cannot remove from a fixed-length list"));
       }
-      [dartx.retainWhere](test) {
+      retainWhere(test) {
         dart.as(test, dart.functionType(core.bool, [E]));
         dart.throw(new core.UnsupportedError("Cannot remove from a fixed-length list"));
       }
-      [dartx.clear]() {
+      clear() {
         dart.throw(new core.UnsupportedError("Cannot clear a fixed-length list"));
       }
-      [dartx.removeAt](index) {
+      removeAt(index) {
         dart.throw(new core.UnsupportedError("Cannot remove from a fixed-length list"));
       }
-      [dartx.removeLast]() {
+      removeLast() {
         dart.throw(new core.UnsupportedError("Cannot remove from a fixed-length list"));
       }
-      [dartx.removeRange](start, end) {
+      removeRange(start, end) {
         dart.throw(new core.UnsupportedError("Cannot remove from a fixed-length list"));
       }
-      [dartx.replaceRange](start, end, iterable) {
+      replaceRange(start, end, iterable) {
         dart.as(iterable, core.Iterable$(E));
         dart.throw(new core.UnsupportedError("Cannot remove from a fixed-length list"));
       }
@@ -1605,6 +1605,21 @@
         [dartx.replaceRange]: [dart.void, [core.int, core.int, core.Iterable$(E)]]
       })
     });
+    dart.defineExtensionMembers(FixedLengthListMixin, [
+      'add',
+      'insert',
+      'insertAll',
+      'addAll',
+      'remove',
+      'removeWhere',
+      'retainWhere',
+      'clear',
+      'removeAt',
+      'removeLast',
+      'removeRange',
+      'replaceRange',
+      'length'
+    ]);
     FixedLengthListMixin[dart.owner] = exports;
     return FixedLengthListMixin;
   });
diff --git a/lib/runtime/dart/_native_typed_data.js b/lib/runtime/dart/_native_typed_data.js
index 3b93fce..2e88dfa 100644
--- a/lib/runtime/dart/_native_typed_data.js
+++ b/lib/runtime/dart/_native_typed_data.js
@@ -493,16 +493,16 @@
     'elementSizeInBytes'
   ]);
   class NativeTypedData extends core.Object {
-    get [dartx.buffer]() {
+    get buffer() {
       return this.buffer;
     }
-    get [dartx.lengthInBytes]() {
+    get lengthInBytes() {
       return this.byteLength;
     }
-    get [dartx.offsetInBytes]() {
+    get offsetInBytes() {
       return this.byteOffset;
     }
-    get [dartx.elementSizeInBytes]() {
+    get elementSizeInBytes() {
       return this.BYTES_PER_ELEMENT;
     }
     [_invalidIndex](index, length) {
@@ -538,6 +538,15 @@
       [_checkSublistArguments]: [core.int, [core.int, core.int, core.int]]
     })
   });
+  dart.defineExtensionMembers(NativeTypedData, [
+    _invalidIndex,
+    _checkIndex,
+    _checkSublistArguments,
+    'buffer',
+    'lengthInBytes',
+    'offsetInBytes',
+    'elementSizeInBytes'
+  ]);
   NativeTypedData[dart.owner] = exports;
   function _checkLength(length) {
     if (!(typeof length == 'number')) dart.throw(new core.ArgumentError(`Invalid length ${length}`));
@@ -810,6 +819,7 @@
   dart.setSignature(NativeTypedArray, {
     methods: () => ({[_setRangeFast]: [dart.void, [core.int, core.int, NativeTypedArray, core.int]]})
   });
+  dart.defineExtensionMembers(NativeTypedArray, [_setRangeFast]);
   NativeTypedArray[dart.owner] = exports;
   dart.defineExtensionNames([
     'length',
@@ -818,19 +828,19 @@
     'setRange'
   ]);
   class NativeTypedArrayOfDouble extends dart.mixin(NativeTypedArray, collection.ListMixin$(core.double), _internal.FixedLengthListMixin$(core.double)) {
-    get [dartx.length]() {
+    get length() {
       return this.length;
     }
-    [dartx.get](index) {
+    get(index) {
       this[_checkIndex](index, this[dartx.length]);
       return this[index];
     }
-    [dartx.set](index, value) {
+    set(index, value) {
       this[_checkIndex](index, this[dartx.length]);
       this[index] = value;
       return value;
     }
-    [dartx.setRange](start, end, iterable, skipCount) {
+    setRange(start, end, iterable, skipCount) {
       if (skipCount === void 0) skipCount = 0;
       if (dart.is(iterable, NativeTypedArrayOfDouble)) {
         this[_setRangeFast](start, end, iterable, skipCount);
@@ -846,6 +856,7 @@
       [dartx.setRange]: [dart.void, [core.int, core.int, core.Iterable$(core.double)], [core.int]]
     })
   });
+  dart.defineExtensionMembers(NativeTypedArrayOfDouble, ['get', 'set', 'setRange', 'length']);
   NativeTypedArrayOfDouble[dart.owner] = exports;
   dart.defineExtensionNames([
     'length',
@@ -853,15 +864,15 @@
     'setRange'
   ]);
   class NativeTypedArrayOfInt extends dart.mixin(NativeTypedArray, collection.ListMixin$(core.int), _internal.FixedLengthListMixin$(core.int)) {
-    get [dartx.length]() {
+    get length() {
       return this.length;
     }
-    [dartx.set](index, value) {
+    set(index, value) {
       this[_checkIndex](index, this[dartx.length]);
       this[index] = value;
       return value;
     }
-    [dartx.setRange](start, end, iterable, skipCount) {
+    setRange(start, end, iterable, skipCount) {
       if (skipCount === void 0) skipCount = 0;
       if (dart.is(iterable, NativeTypedArrayOfInt)) {
         this[_setRangeFast](start, end, iterable, skipCount);
@@ -877,6 +888,7 @@
       [dartx.setRange]: [dart.void, [core.int, core.int, core.Iterable$(core.int)], [core.int]]
     })
   });
+  dart.defineExtensionMembers(NativeTypedArrayOfInt, ['set', 'setRange', 'length']);
   NativeTypedArrayOfInt[dart.owner] = exports;
   dart.defineExtensionNames([
     'runtimeType',
diff --git a/lib/runtime/dart/_runtime.js b/lib/runtime/dart/_runtime.js
index 1cd8103..e8dcc6c 100644
--- a/lib/runtime/dart/_runtime.js
+++ b/lib/runtime/dart/_runtime.js
@@ -222,7 +222,9 @@
     });
   }
   function canonicalMember(obj, name) {
-    if (obj != null && obj[_extensionType]) return dartx[name];
+    if (obj != null && obj[_extensionType]) {
+      return typeof name == "symbol" ? name : dartx[name];
+    }
     if (name == 'constructor' || name == 'prototype') {
       name = '+' + name;
     }
@@ -486,7 +488,7 @@
     return value;
   }
   function _ignoreTypeFailure(actual, type) {
-    if (isSubtype(type, core.Iterable) && isSubtype(actual, core.Iterable) || isSubtype(type, async.Future) && isSubtype(actual, async.Future) || isSubtype(type, core.Map) && isSubtype(actual, core.Map) || isSubtype(type, core.Function) && isSubtype(actual, core.Function) || isSubtype(type, async.Stream) && isSubtype(actual, async.Stream) || isSubtype(type, async.StreamSubscription) && isSubtype(actual, async.StreamSubscription)) {
+    if (isSubtype(type, core.Iterable) && isSubtype(actual, core.Iterable) || isSubtype(type, async.Future) && isSubtype(actual, async.Future) || isSubtype(type, core.Map) && isSubtype(actual, core.Map) || isSubtype(type, core.Function) && isSubtype(actual, core.Function) || isSubtype(type, async.Stream) && isSubtype(actual, async.Stream) || isSubtype(type, async.StreamController) && isSubtype(actual, async.StreamController) || isSubtype(type, async.StreamSubscription) && isSubtype(actual, async.StreamSubscription)) {
       if (false) {
         console.warn('Ignoring cast fail from ' + typeName(actual) + ' to ' + typeName(type));
       }
diff --git a/lib/runtime/dart/collection.js b/lib/runtime/dart/collection.js
index a8c5cd4..a38ee45 100644
--- a/lib/runtime/dart/collection.js
+++ b/lib/runtime/dart/collection.js
@@ -1628,16 +1628,16 @@
       'toString'
     ]);
     class ListMixin extends core.Object {
-      get [dartx.iterator]() {
+      get iterator() {
         return new (_internal.ListIterator$(E))(this);
       }
       [Symbol.iterator]() {
         return new dart.JsIterator(this[dartx.iterator]);
       }
-      [dartx.elementAt](index) {
+      elementAt(index) {
         return this[dartx.get](index);
       }
-      [dartx.forEach](action) {
+      forEach(action) {
         dart.as(action, dart.functionType(dart.void, [E]));
         let length = this[dartx.length];
         for (let i = 0; i < dart.notNull(length); i++) {
@@ -1647,26 +1647,26 @@
           }
         }
       }
-      get [dartx.isEmpty]() {
+      get isEmpty() {
         return this[dartx.length] == 0;
       }
-      get [dartx.isNotEmpty]() {
+      get isNotEmpty() {
         return !dart.notNull(this[dartx.isEmpty]);
       }
-      get [dartx.first]() {
+      get first() {
         if (this[dartx.length] == 0) dart.throw(_internal.IterableElementError.noElement());
         return this[dartx.get](0);
       }
-      get [dartx.last]() {
+      get last() {
         if (this[dartx.length] == 0) dart.throw(_internal.IterableElementError.noElement());
         return this[dartx.get](dart.notNull(this[dartx.length]) - 1);
       }
-      get [dartx.single]() {
+      get single() {
         if (this[dartx.length] == 0) dart.throw(_internal.IterableElementError.noElement());
         if (dart.notNull(this[dartx.length]) > 1) dart.throw(_internal.IterableElementError.tooMany());
         return this[dartx.get](0);
       }
-      [dartx.contains](element) {
+      contains(element) {
         let length = this[dartx.length];
         for (let i = 0; i < dart.notNull(this[dartx.length]); i++) {
           if (dart.equals(this[dartx.get](i), element)) return true;
@@ -1676,7 +1676,7 @@
         }
         return false;
       }
-      [dartx.every](test) {
+      every(test) {
         dart.as(test, dart.functionType(core.bool, [E]));
         let length = this[dartx.length];
         for (let i = 0; i < dart.notNull(length); i++) {
@@ -1687,7 +1687,7 @@
         }
         return true;
       }
-      [dartx.any](test) {
+      any(test) {
         dart.as(test, dart.functionType(core.bool, [E]));
         let length = this[dartx.length];
         for (let i = 0; i < dart.notNull(length); i++) {
@@ -1698,7 +1698,7 @@
         }
         return false;
       }
-      [dartx.firstWhere](test, opts) {
+      firstWhere(test, opts) {
         dart.as(test, dart.functionType(core.bool, [E]));
         let orElse = opts && 'orElse' in opts ? opts.orElse : null;
         dart.as(orElse, dart.functionType(E, []));
@@ -1713,7 +1713,7 @@
         if (orElse != null) return orElse();
         dart.throw(_internal.IterableElementError.noElement());
       }
-      [dartx.lastWhere](test, opts) {
+      lastWhere(test, opts) {
         dart.as(test, dart.functionType(core.bool, [E]));
         let orElse = opts && 'orElse' in opts ? opts.orElse : null;
         dart.as(orElse, dart.functionType(E, []));
@@ -1728,7 +1728,7 @@
         if (orElse != null) return orElse();
         dart.throw(_internal.IterableElementError.noElement());
       }
-      [dartx.singleWhere](test) {
+      singleWhere(test) {
         dart.as(test, dart.functionType(core.bool, [E]));
         let length = this[dartx.length];
         let match = null;
@@ -1749,26 +1749,26 @@
         if (matchFound) return match;
         dart.throw(_internal.IterableElementError.noElement());
       }
-      [dartx.join](separator) {
+      join(separator) {
         if (separator === void 0) separator = "";
         if (this[dartx.length] == 0) return "";
         let buffer = new core.StringBuffer();
         buffer.writeAll(this, separator);
         return buffer.toString();
       }
-      [dartx.where](test) {
+      where(test) {
         dart.as(test, dart.functionType(core.bool, [E]));
         return new (_internal.WhereIterable$(E))(this, test);
       }
-      [dartx.map](f) {
+      map(f) {
         dart.as(f, dart.functionType(dart.dynamic, [E]));
         return new (_internal.MappedListIterable$(E, dart.dynamic))(this, f);
       }
-      [dartx.expand](f) {
+      expand(f) {
         dart.as(f, dart.functionType(core.Iterable, [E]));
         return new (_internal.ExpandIterable$(E, dart.dynamic))(this, f);
       }
-      [dartx.reduce](combine) {
+      reduce(combine) {
         dart.as(combine, dart.functionType(E, [E, E]));
         let length = this[dartx.length];
         if (length == 0) dart.throw(_internal.IterableElementError.noElement());
@@ -1781,7 +1781,7 @@
         }
         return value;
       }
-      [dartx.fold](initialValue, combine) {
+      fold(initialValue, combine) {
         dart.as(combine, dart.functionType(dart.dynamic, [dart.dynamic, E]));
         let value = initialValue;
         let length = this[dartx.length];
@@ -1793,21 +1793,21 @@
         }
         return value;
       }
-      [dartx.skip](count) {
+      skip(count) {
         return new (_internal.SubListIterable$(E))(this, count, null);
       }
-      [dartx.skipWhile](test) {
+      skipWhile(test) {
         dart.as(test, dart.functionType(core.bool, [E]));
         return new (_internal.SkipWhileIterable$(E))(this, test);
       }
-      [dartx.take](count) {
+      take(count) {
         return new (_internal.SubListIterable$(E))(this, 0, count);
       }
-      [dartx.takeWhile](test) {
+      takeWhile(test) {
         dart.as(test, dart.functionType(core.bool, [E]));
         return new (_internal.TakeWhileIterable$(E))(this, test);
       }
-      [dartx.toList](opts) {
+      toList(opts) {
         let growable = opts && 'growable' in opts ? opts.growable : true;
         let result = null;
         if (dart.notNull(growable)) {
@@ -1821,14 +1821,14 @@
         }
         return result;
       }
-      [dartx.toSet]() {
+      toSet() {
         let result = core.Set$(E).new();
         for (let i = 0; i < dart.notNull(this[dartx.length]); i++) {
           result.add(this[dartx.get](i));
         }
         return result;
       }
-      [dartx.add](element) {
+      add(element) {
         dart.as(element, E);
         this[dartx.set]((() => {
           let x = this[dartx.length];
@@ -1836,7 +1836,7 @@
           return x;
         })(), element);
       }
-      [dartx.addAll](iterable) {
+      addAll(iterable) {
         dart.as(iterable, core.Iterable$(E));
         for (let element of iterable) {
           this[dartx.set]((() => {
@@ -1846,7 +1846,7 @@
           })(), element);
         }
       }
-      [dartx.remove](element) {
+      remove(element) {
         for (let i = 0; i < dart.notNull(this[dartx.length]); i++) {
           if (dart.equals(this[dartx.get](i), element)) {
             this[dartx.setRange](i, dart.notNull(this[dartx.length]) - 1, this, i + 1);
@@ -1856,11 +1856,11 @@
         }
         return false;
       }
-      [dartx.removeWhere](test) {
+      removeWhere(test) {
         dart.as(test, dart.functionType(core.bool, [E]));
         ListMixin$()._filter(this, test, false);
       }
-      [dartx.retainWhere](test) {
+      retainWhere(test) {
         dart.as(test, dart.functionType(core.bool, [E]));
         ListMixin$()._filter(this, test, true);
       }
@@ -1881,10 +1881,10 @@
           source[dartx.length] = retained[dartx.length];
         }
       }
-      [dartx.clear]() {
+      clear() {
         this[dartx.length] = 0;
       }
-      [dartx.removeLast]() {
+      removeLast() {
         if (this[dartx.length] == 0) {
           dart.throw(_internal.IterableElementError.noElement());
         }
@@ -1892,12 +1892,12 @@
         this[dartx.length] = dart.notNull(this[dartx.length]) - 1;
         return result;
       }
-      [dartx.sort](compare) {
+      sort(compare) {
         if (compare === void 0) compare = null;
         dart.as(compare, dart.functionType(core.int, [E, E]));
         _internal.Sort.sort(this, compare == null ? core.Comparable.compare : compare);
       }
-      [dartx.shuffle](random) {
+      shuffle(random) {
         if (random === void 0) random = null;
         if (random == null) random = math.Random.new();
         let length = this[dartx.length];
@@ -1909,10 +1909,10 @@
           this[dartx.set](pos, tmp);
         }
       }
-      [dartx.asMap]() {
+      asMap() {
         return new (_internal.ListMapView$(E))(this);
       }
-      [dartx.sublist](start, end) {
+      sublist(start, end) {
         if (end === void 0) end = null;
         let listLength = this[dartx.length];
         if (end == null) end = listLength;
@@ -1925,17 +1925,17 @@
         }
         return result;
       }
-      [dartx.getRange](start, end) {
+      getRange(start, end) {
         core.RangeError.checkValidRange(start, end, this[dartx.length]);
         return new (_internal.SubListIterable$(E))(this, start, end);
       }
-      [dartx.removeRange](start, end) {
+      removeRange(start, end) {
         core.RangeError.checkValidRange(start, end, this[dartx.length]);
         let length = dart.notNull(end) - dart.notNull(start);
         this[dartx.setRange](start, dart.notNull(this[dartx.length]) - length, this, end);
         this[dartx.length] = dart.notNull(this[dartx.length]) - length;
       }
-      [dartx.fillRange](start, end, fill) {
+      fillRange(start, end, fill) {
         if (fill === void 0) fill = null;
         dart.as(fill, E);
         core.RangeError.checkValidRange(start, end, this[dartx.length]);
@@ -1943,7 +1943,7 @@
           this[dartx.set](i, fill);
         }
       }
-      [dartx.setRange](start, end, iterable, skipCount) {
+      setRange(start, end, iterable, skipCount) {
         dart.as(iterable, core.Iterable$(E));
         if (skipCount === void 0) skipCount = 0;
         core.RangeError.checkValidRange(start, end, this[dartx.length]);
@@ -1972,7 +1972,7 @@
           }
         }
       }
-      [dartx.replaceRange](start, end, newContents) {
+      replaceRange(start, end, newContents) {
         dart.as(newContents, core.Iterable$(E));
         core.RangeError.checkValidRange(start, end, this[dartx.length]);
         if (!dart.is(newContents, _internal.EfficientLength)) {
@@ -1998,7 +1998,7 @@
           this[dartx.setRange](start, insertEnd, newContents);
         }
       }
-      [dartx.indexOf](element, startIndex) {
+      indexOf(element, startIndex) {
         if (startIndex === void 0) startIndex = 0;
         if (dart.notNull(startIndex) >= dart.notNull(this[dartx.length])) {
           return -1;
@@ -2013,7 +2013,7 @@
         }
         return -1;
       }
-      [dartx.lastIndexOf](element, startIndex) {
+      lastIndexOf(element, startIndex) {
         if (startIndex === void 0) startIndex = null;
         if (startIndex == null) {
           startIndex = dart.notNull(this[dartx.length]) - 1;
@@ -2032,7 +2032,7 @@
         }
         return -1;
       }
-      [dartx.insert](index, element) {
+      insert(index, element) {
         dart.as(element, E);
         core.RangeError.checkValueInInterval(index, 0, this[dartx.length], "index");
         if (index == this[dartx.length]) {
@@ -2044,13 +2044,13 @@
         this[dartx.setRange](dart.notNull(index) + 1, this[dartx.length], this, index);
         this[dartx.set](index, element);
       }
-      [dartx.removeAt](index) {
+      removeAt(index) {
         let result = this[dartx.get](index);
         this[dartx.setRange](index, dart.notNull(this[dartx.length]) - 1, this, dart.notNull(index) + 1);
         this[dartx.length] = dart.notNull(this[dartx.length]) - 1;
         return result;
       }
-      [dartx.insertAll](index, iterable) {
+      insertAll(index, iterable) {
         dart.as(iterable, core.Iterable$(E));
         core.RangeError.checkValueInInterval(index, 0, this[dartx.length], "index");
         if (dart.is(iterable, _internal.EfficientLength)) {
@@ -2061,7 +2061,7 @@
         this[dartx.setRange](dart.notNull(index) + dart.notNull(insertionLength), this[dartx.length], this, index);
         this[dartx.setAll](index, iterable);
       }
-      [dartx.setAll](index, iterable) {
+      setAll(index, iterable) {
         dart.as(iterable, core.Iterable$(E));
         if (dart.is(iterable, core.List)) {
           this[dartx.setRange](index, dart.notNull(index) + dart.notNull(iterable[dartx.length]), iterable);
@@ -2075,7 +2075,7 @@
           }
         }
       }
-      get [dartx.reversed]() {
+      get reversed() {
         return new (_internal.ReversedListIterable$(E))(this);
       }
       toString() {
@@ -2131,6 +2131,58 @@
       statics: () => ({_filter: [dart.void, [core.List, dart.functionType(core.bool, [dart.dynamic]), core.bool]]}),
       names: ['_filter']
     });
+    dart.defineExtensionMembers(ListMixin, [
+      'elementAt',
+      'forEach',
+      'contains',
+      'every',
+      'any',
+      'firstWhere',
+      'lastWhere',
+      'singleWhere',
+      'join',
+      'where',
+      'map',
+      'expand',
+      'reduce',
+      'fold',
+      'skip',
+      'skipWhile',
+      'take',
+      'takeWhile',
+      'toList',
+      'toSet',
+      'add',
+      'addAll',
+      'remove',
+      'removeWhere',
+      'retainWhere',
+      'clear',
+      'removeLast',
+      'sort',
+      'shuffle',
+      'asMap',
+      'sublist',
+      'getRange',
+      'removeRange',
+      'fillRange',
+      'setRange',
+      'replaceRange',
+      'indexOf',
+      'lastIndexOf',
+      'insert',
+      'removeAt',
+      'insertAll',
+      'setAll',
+      'toString',
+      'iterator',
+      'isEmpty',
+      'isNotEmpty',
+      'first',
+      'last',
+      'single',
+      'reversed'
+    ]);
     ListMixin[dart.owner] = exports;
     return ListMixin;
   });
diff --git a/lib/runtime/dart/core.js b/lib/runtime/dart/core.js
index 29a9302..23c4b90 100644
--- a/lib/runtime/dart/core.js
+++ b/lib/runtime/dart/core.js
@@ -1260,7 +1260,7 @@
       [dart.JsSymbol.iterator]() {
         return new dart.JsIterator(this[dartx.iterator]);
       }
-      [dartx.join](separator) {
+      join(separator) {
         if (separator === void 0) separator = "";
         let buffer = new StringBuffer();
         buffer.writeAll(this, separator);
@@ -1274,6 +1274,7 @@
       }),
       methods: () => ({[dartx.join]: [String, [], [String]]})
     });
+    dart.defineExtensionMembers(Iterable, ['join']);
     Iterable[dart.owner] = exports;
     return Iterable;
   });
diff --git a/lib/runtime/dart/html.js b/lib/runtime/dart/html.js
index 5569a61..fba1d5f 100644
--- a/lib/runtime/dart/html.js
+++ b/lib/runtime/dart/html.js
@@ -21,6 +21,10 @@
   let dartx = dart.dartx;
   exports[dart.uri] = 'dart:html';
   dart.export(exports, math, ['Rectangle', 'Point'], []);
+  function convertDartClosureToJS(f) {
+    return f;
+  }
+  dart.fn(convertDartClosureToJS, () => dart.definiteFunctionType(dart.dynamic, [dart.dynamic]));
   dart.copyProperties(exports, {
     get window() {
       return dart.as(window, Window);
@@ -1874,7 +1878,7 @@
     static _() {
       dart.throw(new core.UnsupportedError("Not supported"));
     }
-    get [dartx.onError]() {
+    get onError() {
       return AbstractWorker.errorEvent.forTarget(this);
     }
   }
@@ -1882,6 +1886,7 @@
   dart.setSignature(AbstractWorker, {
     constructors: () => ({_: [AbstractWorker, []]})
   });
+  dart.defineExtensionMembers(AbstractWorker, ['onError']);
   AbstractWorker[dart.metadata] = () => [dart.const(new _metadata.DocsEditable()), dart.const(new _metadata.DomName('AbstractWorker'))];
   AbstractWorker[dart.owner] = exports;
   dart.defineLazyProperties(AbstractWorker, {
@@ -4487,16 +4492,11 @@
     static _() {
       dart.throw(new core.UnsupportedError("Not supported"));
     }
-    get [dartx.nextElementSibling]() {
-      return this.nextElementSibling;
-    }
-    get [dartx.previousElementSibling]() {
-      return this.previousElementSibling;
-    }
   }
   dart.setSignature(ChildNode, {
     constructors: () => ({_: [ChildNode, []]})
   });
+  dart.defineExtensionMembers(ChildNode, ['nextElementSibling', 'previousElementSibling']);
   ChildNode[dart.metadata] = () => [dart.const(new _metadata.DocsEditable()), dart.const(new _metadata.DomName('ChildNode')), dart.const(new _metadata.Experimental())];
   ChildNode[dart.owner] = exports;
   dart.defineExtensionNames([
@@ -6153,2059 +6153,2746 @@
     'zoom'
   ]);
   class CssStyleDeclarationBase extends core.Object {
-    get [dartx.alignContent]() {
+    get alignContent() {
       return this[dartx.getPropertyValue]('align-content');
     }
-    set [dartx.alignContent](value) {
+    set alignContent(value) {
       this[dartx.setProperty]('align-content', value, '');
     }
-    get [dartx.alignItems]() {
+    get alignItems() {
       return this[dartx.getPropertyValue]('align-items');
     }
-    set [dartx.alignItems](value) {
+    set alignItems(value) {
       this[dartx.setProperty]('align-items', value, '');
     }
-    get [dartx.alignSelf]() {
+    get alignSelf() {
       return this[dartx.getPropertyValue]('align-self');
     }
-    set [dartx.alignSelf](value) {
+    set alignSelf(value) {
       this[dartx.setProperty]('align-self', value, '');
     }
-    get [dartx.animation]() {
+    get animation() {
       return this[dartx.getPropertyValue]('animation');
     }
-    set [dartx.animation](value) {
+    set animation(value) {
       this[dartx.setProperty]('animation', value, '');
     }
-    get [dartx.animationDelay]() {
+    get animationDelay() {
       return this[dartx.getPropertyValue]('animation-delay');
     }
-    set [dartx.animationDelay](value) {
+    set animationDelay(value) {
       this[dartx.setProperty]('animation-delay', value, '');
     }
-    get [dartx.animationDirection]() {
+    get animationDirection() {
       return this[dartx.getPropertyValue]('animation-direction');
     }
-    set [dartx.animationDirection](value) {
+    set animationDirection(value) {
       this[dartx.setProperty]('animation-direction', value, '');
     }
-    get [dartx.animationDuration]() {
+    get animationDuration() {
       return this[dartx.getPropertyValue]('animation-duration');
     }
-    set [dartx.animationDuration](value) {
+    set animationDuration(value) {
       this[dartx.setProperty]('animation-duration', value, '');
     }
-    get [dartx.animationFillMode]() {
+    get animationFillMode() {
       return this[dartx.getPropertyValue]('animation-fill-mode');
     }
-    set [dartx.animationFillMode](value) {
+    set animationFillMode(value) {
       this[dartx.setProperty]('animation-fill-mode', value, '');
     }
-    get [dartx.animationIterationCount]() {
+    get animationIterationCount() {
       return this[dartx.getPropertyValue]('animation-iteration-count');
     }
-    set [dartx.animationIterationCount](value) {
+    set animationIterationCount(value) {
       this[dartx.setProperty]('animation-iteration-count', value, '');
     }
-    get [dartx.animationName]() {
+    get animationName() {
       return this[dartx.getPropertyValue]('animation-name');
     }
-    set [dartx.animationName](value) {
+    set animationName(value) {
       this[dartx.setProperty]('animation-name', value, '');
     }
-    get [dartx.animationPlayState]() {
+    get animationPlayState() {
       return this[dartx.getPropertyValue]('animation-play-state');
     }
-    set [dartx.animationPlayState](value) {
+    set animationPlayState(value) {
       this[dartx.setProperty]('animation-play-state', value, '');
     }
-    get [dartx.animationTimingFunction]() {
+    get animationTimingFunction() {
       return this[dartx.getPropertyValue]('animation-timing-function');
     }
-    set [dartx.animationTimingFunction](value) {
+    set animationTimingFunction(value) {
       this[dartx.setProperty]('animation-timing-function', value, '');
     }
-    get [dartx.appRegion]() {
+    get appRegion() {
       return this[dartx.getPropertyValue]('app-region');
     }
-    set [dartx.appRegion](value) {
+    set appRegion(value) {
       this[dartx.setProperty]('app-region', value, '');
     }
-    get [dartx.appearance]() {
+    get appearance() {
       return this[dartx.getPropertyValue]('appearance');
     }
-    set [dartx.appearance](value) {
+    set appearance(value) {
       this[dartx.setProperty]('appearance', value, '');
     }
-    get [dartx.aspectRatio]() {
+    get aspectRatio() {
       return this[dartx.getPropertyValue]('aspect-ratio');
     }
-    set [dartx.aspectRatio](value) {
+    set aspectRatio(value) {
       this[dartx.setProperty]('aspect-ratio', value, '');
     }
-    get [dartx.backfaceVisibility]() {
+    get backfaceVisibility() {
       return this[dartx.getPropertyValue]('backface-visibility');
     }
-    set [dartx.backfaceVisibility](value) {
+    set backfaceVisibility(value) {
       this[dartx.setProperty]('backface-visibility', value, '');
     }
-    get [dartx.background]() {
+    get background() {
       return this[dartx.getPropertyValue]('background');
     }
-    set [dartx.background](value) {
+    set background(value) {
       this[dartx.setProperty]('background', value, '');
     }
-    get [dartx.backgroundAttachment]() {
+    get backgroundAttachment() {
       return this[dartx.getPropertyValue]('background-attachment');
     }
-    set [dartx.backgroundAttachment](value) {
+    set backgroundAttachment(value) {
       this[dartx.setProperty]('background-attachment', value, '');
     }
-    get [dartx.backgroundBlendMode]() {
+    get backgroundBlendMode() {
       return this[dartx.getPropertyValue]('background-blend-mode');
     }
-    set [dartx.backgroundBlendMode](value) {
+    set backgroundBlendMode(value) {
       this[dartx.setProperty]('background-blend-mode', value, '');
     }
-    get [dartx.backgroundClip]() {
+    get backgroundClip() {
       return this[dartx.getPropertyValue]('background-clip');
     }
-    set [dartx.backgroundClip](value) {
+    set backgroundClip(value) {
       this[dartx.setProperty]('background-clip', value, '');
     }
-    get [dartx.backgroundColor]() {
+    get backgroundColor() {
       return this[dartx.getPropertyValue]('background-color');
     }
-    set [dartx.backgroundColor](value) {
+    set backgroundColor(value) {
       this[dartx.setProperty]('background-color', value, '');
     }
-    get [dartx.backgroundComposite]() {
+    get backgroundComposite() {
       return this[dartx.getPropertyValue]('background-composite');
     }
-    set [dartx.backgroundComposite](value) {
+    set backgroundComposite(value) {
       this[dartx.setProperty]('background-composite', value, '');
     }
-    get [dartx.backgroundImage]() {
+    get backgroundImage() {
       return this[dartx.getPropertyValue]('background-image');
     }
-    set [dartx.backgroundImage](value) {
+    set backgroundImage(value) {
       this[dartx.setProperty]('background-image', value, '');
     }
-    get [dartx.backgroundOrigin]() {
+    get backgroundOrigin() {
       return this[dartx.getPropertyValue]('background-origin');
     }
-    set [dartx.backgroundOrigin](value) {
+    set backgroundOrigin(value) {
       this[dartx.setProperty]('background-origin', value, '');
     }
-    get [dartx.backgroundPosition]() {
+    get backgroundPosition() {
       return this[dartx.getPropertyValue]('background-position');
     }
-    set [dartx.backgroundPosition](value) {
+    set backgroundPosition(value) {
       this[dartx.setProperty]('background-position', value, '');
     }
-    get [dartx.backgroundPositionX]() {
+    get backgroundPositionX() {
       return this[dartx.getPropertyValue]('background-position-x');
     }
-    set [dartx.backgroundPositionX](value) {
+    set backgroundPositionX(value) {
       this[dartx.setProperty]('background-position-x', value, '');
     }
-    get [dartx.backgroundPositionY]() {
+    get backgroundPositionY() {
       return this[dartx.getPropertyValue]('background-position-y');
     }
-    set [dartx.backgroundPositionY](value) {
+    set backgroundPositionY(value) {
       this[dartx.setProperty]('background-position-y', value, '');
     }
-    get [dartx.backgroundRepeat]() {
+    get backgroundRepeat() {
       return this[dartx.getPropertyValue]('background-repeat');
     }
-    set [dartx.backgroundRepeat](value) {
+    set backgroundRepeat(value) {
       this[dartx.setProperty]('background-repeat', value, '');
     }
-    get [dartx.backgroundRepeatX]() {
+    get backgroundRepeatX() {
       return this[dartx.getPropertyValue]('background-repeat-x');
     }
-    set [dartx.backgroundRepeatX](value) {
+    set backgroundRepeatX(value) {
       this[dartx.setProperty]('background-repeat-x', value, '');
     }
-    get [dartx.backgroundRepeatY]() {
+    get backgroundRepeatY() {
       return this[dartx.getPropertyValue]('background-repeat-y');
     }
-    set [dartx.backgroundRepeatY](value) {
+    set backgroundRepeatY(value) {
       this[dartx.setProperty]('background-repeat-y', value, '');
     }
-    get [dartx.backgroundSize]() {
+    get backgroundSize() {
       return this[dartx.getPropertyValue]('background-size');
     }
-    set [dartx.backgroundSize](value) {
+    set backgroundSize(value) {
       this[dartx.setProperty]('background-size', value, '');
     }
-    get [dartx.border]() {
+    get border() {
       return this[dartx.getPropertyValue]('border');
     }
-    set [dartx.border](value) {
+    set border(value) {
       this[dartx.setProperty]('border', value, '');
     }
-    get [dartx.borderAfter]() {
+    get borderAfter() {
       return this[dartx.getPropertyValue]('border-after');
     }
-    set [dartx.borderAfter](value) {
+    set borderAfter(value) {
       this[dartx.setProperty]('border-after', value, '');
     }
-    get [dartx.borderAfterColor]() {
+    get borderAfterColor() {
       return this[dartx.getPropertyValue]('border-after-color');
     }
-    set [dartx.borderAfterColor](value) {
+    set borderAfterColor(value) {
       this[dartx.setProperty]('border-after-color', value, '');
     }
-    get [dartx.borderAfterStyle]() {
+    get borderAfterStyle() {
       return this[dartx.getPropertyValue]('border-after-style');
     }
-    set [dartx.borderAfterStyle](value) {
+    set borderAfterStyle(value) {
       this[dartx.setProperty]('border-after-style', value, '');
     }
-    get [dartx.borderAfterWidth]() {
+    get borderAfterWidth() {
       return this[dartx.getPropertyValue]('border-after-width');
     }
-    set [dartx.borderAfterWidth](value) {
+    set borderAfterWidth(value) {
       this[dartx.setProperty]('border-after-width', value, '');
     }
-    get [dartx.borderBefore]() {
+    get borderBefore() {
       return this[dartx.getPropertyValue]('border-before');
     }
-    set [dartx.borderBefore](value) {
+    set borderBefore(value) {
       this[dartx.setProperty]('border-before', value, '');
     }
-    get [dartx.borderBeforeColor]() {
+    get borderBeforeColor() {
       return this[dartx.getPropertyValue]('border-before-color');
     }
-    set [dartx.borderBeforeColor](value) {
+    set borderBeforeColor(value) {
       this[dartx.setProperty]('border-before-color', value, '');
     }
-    get [dartx.borderBeforeStyle]() {
+    get borderBeforeStyle() {
       return this[dartx.getPropertyValue]('border-before-style');
     }
-    set [dartx.borderBeforeStyle](value) {
+    set borderBeforeStyle(value) {
       this[dartx.setProperty]('border-before-style', value, '');
     }
-    get [dartx.borderBeforeWidth]() {
+    get borderBeforeWidth() {
       return this[dartx.getPropertyValue]('border-before-width');
     }
-    set [dartx.borderBeforeWidth](value) {
+    set borderBeforeWidth(value) {
       this[dartx.setProperty]('border-before-width', value, '');
     }
-    get [dartx.borderBottom]() {
+    get borderBottom() {
       return this[dartx.getPropertyValue]('border-bottom');
     }
-    set [dartx.borderBottom](value) {
+    set borderBottom(value) {
       this[dartx.setProperty]('border-bottom', value, '');
     }
-    get [dartx.borderBottomColor]() {
+    get borderBottomColor() {
       return this[dartx.getPropertyValue]('border-bottom-color');
     }
-    set [dartx.borderBottomColor](value) {
+    set borderBottomColor(value) {
       this[dartx.setProperty]('border-bottom-color', value, '');
     }
-    get [dartx.borderBottomLeftRadius]() {
+    get borderBottomLeftRadius() {
       return this[dartx.getPropertyValue]('border-bottom-left-radius');
     }
-    set [dartx.borderBottomLeftRadius](value) {
+    set borderBottomLeftRadius(value) {
       this[dartx.setProperty]('border-bottom-left-radius', value, '');
     }
-    get [dartx.borderBottomRightRadius]() {
+    get borderBottomRightRadius() {
       return this[dartx.getPropertyValue]('border-bottom-right-radius');
     }
-    set [dartx.borderBottomRightRadius](value) {
+    set borderBottomRightRadius(value) {
       this[dartx.setProperty]('border-bottom-right-radius', value, '');
     }
-    get [dartx.borderBottomStyle]() {
+    get borderBottomStyle() {
       return this[dartx.getPropertyValue]('border-bottom-style');
     }
-    set [dartx.borderBottomStyle](value) {
+    set borderBottomStyle(value) {
       this[dartx.setProperty]('border-bottom-style', value, '');
     }
-    get [dartx.borderBottomWidth]() {
+    get borderBottomWidth() {
       return this[dartx.getPropertyValue]('border-bottom-width');
     }
-    set [dartx.borderBottomWidth](value) {
+    set borderBottomWidth(value) {
       this[dartx.setProperty]('border-bottom-width', value, '');
     }
-    get [dartx.borderCollapse]() {
+    get borderCollapse() {
       return this[dartx.getPropertyValue]('border-collapse');
     }
-    set [dartx.borderCollapse](value) {
+    set borderCollapse(value) {
       this[dartx.setProperty]('border-collapse', value, '');
     }
-    get [dartx.borderColor]() {
+    get borderColor() {
       return this[dartx.getPropertyValue]('border-color');
     }
-    set [dartx.borderColor](value) {
+    set borderColor(value) {
       this[dartx.setProperty]('border-color', value, '');
     }
-    get [dartx.borderEnd]() {
+    get borderEnd() {
       return this[dartx.getPropertyValue]('border-end');
     }
-    set [dartx.borderEnd](value) {
+    set borderEnd(value) {
       this[dartx.setProperty]('border-end', value, '');
     }
-    get [dartx.borderEndColor]() {
+    get borderEndColor() {
       return this[dartx.getPropertyValue]('border-end-color');
     }
-    set [dartx.borderEndColor](value) {
+    set borderEndColor(value) {
       this[dartx.setProperty]('border-end-color', value, '');
     }
-    get [dartx.borderEndStyle]() {
+    get borderEndStyle() {
       return this[dartx.getPropertyValue]('border-end-style');
     }
-    set [dartx.borderEndStyle](value) {
+    set borderEndStyle(value) {
       this[dartx.setProperty]('border-end-style', value, '');
     }
-    get [dartx.borderEndWidth]() {
+    get borderEndWidth() {
       return this[dartx.getPropertyValue]('border-end-width');
     }
-    set [dartx.borderEndWidth](value) {
+    set borderEndWidth(value) {
       this[dartx.setProperty]('border-end-width', value, '');
     }
-    get [dartx.borderFit]() {
+    get borderFit() {
       return this[dartx.getPropertyValue]('border-fit');
     }
-    set [dartx.borderFit](value) {
+    set borderFit(value) {
       this[dartx.setProperty]('border-fit', value, '');
     }
-    get [dartx.borderHorizontalSpacing]() {
+    get borderHorizontalSpacing() {
       return this[dartx.getPropertyValue]('border-horizontal-spacing');
     }
-    set [dartx.borderHorizontalSpacing](value) {
+    set borderHorizontalSpacing(value) {
       this[dartx.setProperty]('border-horizontal-spacing', value, '');
     }
-    get [dartx.borderImage]() {
+    get borderImage() {
       return this[dartx.getPropertyValue]('border-image');
     }
-    set [dartx.borderImage](value) {
+    set borderImage(value) {
       this[dartx.setProperty]('border-image', value, '');
     }
-    get [dartx.borderImageOutset]() {
+    get borderImageOutset() {
       return this[dartx.getPropertyValue]('border-image-outset');
     }
-    set [dartx.borderImageOutset](value) {
+    set borderImageOutset(value) {
       this[dartx.setProperty]('border-image-outset', value, '');
     }
-    get [dartx.borderImageRepeat]() {
+    get borderImageRepeat() {
       return this[dartx.getPropertyValue]('border-image-repeat');
     }
-    set [dartx.borderImageRepeat](value) {
+    set borderImageRepeat(value) {
       this[dartx.setProperty]('border-image-repeat', value, '');
     }
-    get [dartx.borderImageSlice]() {
+    get borderImageSlice() {
       return this[dartx.getPropertyValue]('border-image-slice');
     }
-    set [dartx.borderImageSlice](value) {
+    set borderImageSlice(value) {
       this[dartx.setProperty]('border-image-slice', value, '');
     }
-    get [dartx.borderImageSource]() {
+    get borderImageSource() {
       return this[dartx.getPropertyValue]('border-image-source');
     }
-    set [dartx.borderImageSource](value) {
+    set borderImageSource(value) {
       this[dartx.setProperty]('border-image-source', value, '');
     }
-    get [dartx.borderImageWidth]() {
+    get borderImageWidth() {
       return this[dartx.getPropertyValue]('border-image-width');
     }
-    set [dartx.borderImageWidth](value) {
+    set borderImageWidth(value) {
       this[dartx.setProperty]('border-image-width', value, '');
     }
-    get [dartx.borderLeft]() {
+    get borderLeft() {
       return this[dartx.getPropertyValue]('border-left');
     }
-    set [dartx.borderLeft](value) {
+    set borderLeft(value) {
       this[dartx.setProperty]('border-left', value, '');
     }
-    get [dartx.borderLeftColor]() {
+    get borderLeftColor() {
       return this[dartx.getPropertyValue]('border-left-color');
     }
-    set [dartx.borderLeftColor](value) {
+    set borderLeftColor(value) {
       this[dartx.setProperty]('border-left-color', value, '');
     }
-    get [dartx.borderLeftStyle]() {
+    get borderLeftStyle() {
       return this[dartx.getPropertyValue]('border-left-style');
     }
-    set [dartx.borderLeftStyle](value) {
+    set borderLeftStyle(value) {
       this[dartx.setProperty]('border-left-style', value, '');
     }
-    get [dartx.borderLeftWidth]() {
+    get borderLeftWidth() {
       return this[dartx.getPropertyValue]('border-left-width');
     }
-    set [dartx.borderLeftWidth](value) {
+    set borderLeftWidth(value) {
       this[dartx.setProperty]('border-left-width', value, '');
     }
-    get [dartx.borderRadius]() {
+    get borderRadius() {
       return this[dartx.getPropertyValue]('border-radius');
     }
-    set [dartx.borderRadius](value) {
+    set borderRadius(value) {
       this[dartx.setProperty]('border-radius', value, '');
     }
-    get [dartx.borderRight]() {
+    get borderRight() {
       return this[dartx.getPropertyValue]('border-right');
     }
-    set [dartx.borderRight](value) {
+    set borderRight(value) {
       this[dartx.setProperty]('border-right', value, '');
     }
-    get [dartx.borderRightColor]() {
+    get borderRightColor() {
       return this[dartx.getPropertyValue]('border-right-color');
     }
-    set [dartx.borderRightColor](value) {
+    set borderRightColor(value) {
       this[dartx.setProperty]('border-right-color', value, '');
     }
-    get [dartx.borderRightStyle]() {
+    get borderRightStyle() {
       return this[dartx.getPropertyValue]('border-right-style');
     }
-    set [dartx.borderRightStyle](value) {
+    set borderRightStyle(value) {
       this[dartx.setProperty]('border-right-style', value, '');
     }
-    get [dartx.borderRightWidth]() {
+    get borderRightWidth() {
       return this[dartx.getPropertyValue]('border-right-width');
     }
-    set [dartx.borderRightWidth](value) {
+    set borderRightWidth(value) {
       this[dartx.setProperty]('border-right-width', value, '');
     }
-    get [dartx.borderSpacing]() {
+    get borderSpacing() {
       return this[dartx.getPropertyValue]('border-spacing');
     }
-    set [dartx.borderSpacing](value) {
+    set borderSpacing(value) {
       this[dartx.setProperty]('border-spacing', value, '');
     }
-    get [dartx.borderStart]() {
+    get borderStart() {
       return this[dartx.getPropertyValue]('border-start');
     }
-    set [dartx.borderStart](value) {
+    set borderStart(value) {
       this[dartx.setProperty]('border-start', value, '');
     }
-    get [dartx.borderStartColor]() {
+    get borderStartColor() {
       return this[dartx.getPropertyValue]('border-start-color');
     }
-    set [dartx.borderStartColor](value) {
+    set borderStartColor(value) {
       this[dartx.setProperty]('border-start-color', value, '');
     }
-    get [dartx.borderStartStyle]() {
+    get borderStartStyle() {
       return this[dartx.getPropertyValue]('border-start-style');
     }
-    set [dartx.borderStartStyle](value) {
+    set borderStartStyle(value) {
       this[dartx.setProperty]('border-start-style', value, '');
     }
-    get [dartx.borderStartWidth]() {
+    get borderStartWidth() {
       return this[dartx.getPropertyValue]('border-start-width');
     }
-    set [dartx.borderStartWidth](value) {
+    set borderStartWidth(value) {
       this[dartx.setProperty]('border-start-width', value, '');
     }
-    get [dartx.borderStyle]() {
+    get borderStyle() {
       return this[dartx.getPropertyValue]('border-style');
     }
-    set [dartx.borderStyle](value) {
+    set borderStyle(value) {
       this[dartx.setProperty]('border-style', value, '');
     }
-    get [dartx.borderTop]() {
+    get borderTop() {
       return this[dartx.getPropertyValue]('border-top');
     }
-    set [dartx.borderTop](value) {
+    set borderTop(value) {
       this[dartx.setProperty]('border-top', value, '');
     }
-    get [dartx.borderTopColor]() {
+    get borderTopColor() {
       return this[dartx.getPropertyValue]('border-top-color');
     }
-    set [dartx.borderTopColor](value) {
+    set borderTopColor(value) {
       this[dartx.setProperty]('border-top-color', value, '');
     }
-    get [dartx.borderTopLeftRadius]() {
+    get borderTopLeftRadius() {
       return this[dartx.getPropertyValue]('border-top-left-radius');
     }
-    set [dartx.borderTopLeftRadius](value) {
+    set borderTopLeftRadius(value) {
       this[dartx.setProperty]('border-top-left-radius', value, '');
     }
-    get [dartx.borderTopRightRadius]() {
+    get borderTopRightRadius() {
       return this[dartx.getPropertyValue]('border-top-right-radius');
     }
-    set [dartx.borderTopRightRadius](value) {
+    set borderTopRightRadius(value) {
       this[dartx.setProperty]('border-top-right-radius', value, '');
     }
-    get [dartx.borderTopStyle]() {
+    get borderTopStyle() {
       return this[dartx.getPropertyValue]('border-top-style');
     }
-    set [dartx.borderTopStyle](value) {
+    set borderTopStyle(value) {
       this[dartx.setProperty]('border-top-style', value, '');
     }
-    get [dartx.borderTopWidth]() {
+    get borderTopWidth() {
       return this[dartx.getPropertyValue]('border-top-width');
     }
-    set [dartx.borderTopWidth](value) {
+    set borderTopWidth(value) {
       this[dartx.setProperty]('border-top-width', value, '');
     }
-    get [dartx.borderVerticalSpacing]() {
+    get borderVerticalSpacing() {
       return this[dartx.getPropertyValue]('border-vertical-spacing');
     }
-    set [dartx.borderVerticalSpacing](value) {
+    set borderVerticalSpacing(value) {
       this[dartx.setProperty]('border-vertical-spacing', value, '');
     }
-    get [dartx.borderWidth]() {
+    get borderWidth() {
       return this[dartx.getPropertyValue]('border-width');
     }
-    set [dartx.borderWidth](value) {
+    set borderWidth(value) {
       this[dartx.setProperty]('border-width', value, '');
     }
-    get [dartx.bottom]() {
+    get bottom() {
       return this[dartx.getPropertyValue]('bottom');
     }
-    set [dartx.bottom](value) {
+    set bottom(value) {
       this[dartx.setProperty]('bottom', value, '');
     }
-    get [dartx.boxAlign]() {
+    get boxAlign() {
       return this[dartx.getPropertyValue]('box-align');
     }
-    set [dartx.boxAlign](value) {
+    set boxAlign(value) {
       this[dartx.setProperty]('box-align', value, '');
     }
-    get [dartx.boxDecorationBreak]() {
+    get boxDecorationBreak() {
       return this[dartx.getPropertyValue]('box-decoration-break');
     }
-    set [dartx.boxDecorationBreak](value) {
+    set boxDecorationBreak(value) {
       this[dartx.setProperty]('box-decoration-break', value, '');
     }
-    get [dartx.boxDirection]() {
+    get boxDirection() {
       return this[dartx.getPropertyValue]('box-direction');
     }
-    set [dartx.boxDirection](value) {
+    set boxDirection(value) {
       this[dartx.setProperty]('box-direction', value, '');
     }
-    get [dartx.boxFlex]() {
+    get boxFlex() {
       return this[dartx.getPropertyValue]('box-flex');
     }
-    set [dartx.boxFlex](value) {
+    set boxFlex(value) {
       this[dartx.setProperty]('box-flex', value, '');
     }
-    get [dartx.boxFlexGroup]() {
+    get boxFlexGroup() {
       return this[dartx.getPropertyValue]('box-flex-group');
     }
-    set [dartx.boxFlexGroup](value) {
+    set boxFlexGroup(value) {
       this[dartx.setProperty]('box-flex-group', value, '');
     }
-    get [dartx.boxLines]() {
+    get boxLines() {
       return this[dartx.getPropertyValue]('box-lines');
     }
-    set [dartx.boxLines](value) {
+    set boxLines(value) {
       this[dartx.setProperty]('box-lines', value, '');
     }
-    get [dartx.boxOrdinalGroup]() {
+    get boxOrdinalGroup() {
       return this[dartx.getPropertyValue]('box-ordinal-group');
     }
-    set [dartx.boxOrdinalGroup](value) {
+    set boxOrdinalGroup(value) {
       this[dartx.setProperty]('box-ordinal-group', value, '');
     }
-    get [dartx.boxOrient]() {
+    get boxOrient() {
       return this[dartx.getPropertyValue]('box-orient');
     }
-    set [dartx.boxOrient](value) {
+    set boxOrient(value) {
       this[dartx.setProperty]('box-orient', value, '');
     }
-    get [dartx.boxPack]() {
+    get boxPack() {
       return this[dartx.getPropertyValue]('box-pack');
     }
-    set [dartx.boxPack](value) {
+    set boxPack(value) {
       this[dartx.setProperty]('box-pack', value, '');
     }
-    get [dartx.boxReflect]() {
+    get boxReflect() {
       return this[dartx.getPropertyValue]('box-reflect');
     }
-    set [dartx.boxReflect](value) {
+    set boxReflect(value) {
       this[dartx.setProperty]('box-reflect', value, '');
     }
-    get [dartx.boxShadow]() {
+    get boxShadow() {
       return this[dartx.getPropertyValue]('box-shadow');
     }
-    set [dartx.boxShadow](value) {
+    set boxShadow(value) {
       this[dartx.setProperty]('box-shadow', value, '');
     }
-    get [dartx.boxSizing]() {
+    get boxSizing() {
       return this[dartx.getPropertyValue]('box-sizing');
     }
-    set [dartx.boxSizing](value) {
+    set boxSizing(value) {
       this[dartx.setProperty]('box-sizing', value, '');
     }
-    get [dartx.captionSide]() {
+    get captionSide() {
       return this[dartx.getPropertyValue]('caption-side');
     }
-    set [dartx.captionSide](value) {
+    set captionSide(value) {
       this[dartx.setProperty]('caption-side', value, '');
     }
-    get [dartx.clear]() {
+    get clear() {
       return this[dartx.getPropertyValue]('clear');
     }
-    set [dartx.clear](value) {
+    set clear(value) {
       this[dartx.setProperty]('clear', value, '');
     }
-    get [dartx.clip]() {
+    get clip() {
       return this[dartx.getPropertyValue]('clip');
     }
-    set [dartx.clip](value) {
+    set clip(value) {
       this[dartx.setProperty]('clip', value, '');
     }
-    get [dartx.clipPath]() {
+    get clipPath() {
       return this[dartx.getPropertyValue]('clip-path');
     }
-    set [dartx.clipPath](value) {
+    set clipPath(value) {
       this[dartx.setProperty]('clip-path', value, '');
     }
-    get [dartx.color]() {
+    get color() {
       return this[dartx.getPropertyValue]('color');
     }
-    set [dartx.color](value) {
+    set color(value) {
       this[dartx.setProperty]('color', value, '');
     }
-    get [dartx.columnBreakAfter]() {
+    get columnBreakAfter() {
       return this[dartx.getPropertyValue]('column-break-after');
     }
-    set [dartx.columnBreakAfter](value) {
+    set columnBreakAfter(value) {
       this[dartx.setProperty]('column-break-after', value, '');
     }
-    get [dartx.columnBreakBefore]() {
+    get columnBreakBefore() {
       return this[dartx.getPropertyValue]('column-break-before');
     }
-    set [dartx.columnBreakBefore](value) {
+    set columnBreakBefore(value) {
       this[dartx.setProperty]('column-break-before', value, '');
     }
-    get [dartx.columnBreakInside]() {
+    get columnBreakInside() {
       return this[dartx.getPropertyValue]('column-break-inside');
     }
-    set [dartx.columnBreakInside](value) {
+    set columnBreakInside(value) {
       this[dartx.setProperty]('column-break-inside', value, '');
     }
-    get [dartx.columnCount]() {
+    get columnCount() {
       return this[dartx.getPropertyValue]('column-count');
     }
-    set [dartx.columnCount](value) {
+    set columnCount(value) {
       this[dartx.setProperty]('column-count', value, '');
     }
-    get [dartx.columnFill]() {
+    get columnFill() {
       return this[dartx.getPropertyValue]('column-fill');
     }
-    set [dartx.columnFill](value) {
+    set columnFill(value) {
       this[dartx.setProperty]('column-fill', value, '');
     }
-    get [dartx.columnGap]() {
+    get columnGap() {
       return this[dartx.getPropertyValue]('column-gap');
     }
-    set [dartx.columnGap](value) {
+    set columnGap(value) {
       this[dartx.setProperty]('column-gap', value, '');
     }
-    get [dartx.columnRule]() {
+    get columnRule() {
       return this[dartx.getPropertyValue]('column-rule');
     }
-    set [dartx.columnRule](value) {
+    set columnRule(value) {
       this[dartx.setProperty]('column-rule', value, '');
     }
-    get [dartx.columnRuleColor]() {
+    get columnRuleColor() {
       return this[dartx.getPropertyValue]('column-rule-color');
     }
-    set [dartx.columnRuleColor](value) {
+    set columnRuleColor(value) {
       this[dartx.setProperty]('column-rule-color', value, '');
     }
-    get [dartx.columnRuleStyle]() {
+    get columnRuleStyle() {
       return this[dartx.getPropertyValue]('column-rule-style');
     }
-    set [dartx.columnRuleStyle](value) {
+    set columnRuleStyle(value) {
       this[dartx.setProperty]('column-rule-style', value, '');
     }
-    get [dartx.columnRuleWidth]() {
+    get columnRuleWidth() {
       return this[dartx.getPropertyValue]('column-rule-width');
     }
-    set [dartx.columnRuleWidth](value) {
+    set columnRuleWidth(value) {
       this[dartx.setProperty]('column-rule-width', value, '');
     }
-    get [dartx.columnSpan]() {
+    get columnSpan() {
       return this[dartx.getPropertyValue]('column-span');
     }
-    set [dartx.columnSpan](value) {
+    set columnSpan(value) {
       this[dartx.setProperty]('column-span', value, '');
     }
-    get [dartx.columnWidth]() {
+    get columnWidth() {
       return this[dartx.getPropertyValue]('column-width');
     }
-    set [dartx.columnWidth](value) {
+    set columnWidth(value) {
       this[dartx.setProperty]('column-width', value, '');
     }
-    get [dartx.columns]() {
+    get columns() {
       return this[dartx.getPropertyValue]('columns');
     }
-    set [dartx.columns](value) {
+    set columns(value) {
       this[dartx.setProperty]('columns', value, '');
     }
-    get [dartx.content]() {
+    get content() {
       return this[dartx.getPropertyValue]('content');
     }
-    set [dartx.content](value) {
+    set content(value) {
       this[dartx.setProperty]('content', value, '');
     }
-    get [dartx.counterIncrement]() {
+    get counterIncrement() {
       return this[dartx.getPropertyValue]('counter-increment');
     }
-    set [dartx.counterIncrement](value) {
+    set counterIncrement(value) {
       this[dartx.setProperty]('counter-increment', value, '');
     }
-    get [dartx.counterReset]() {
+    get counterReset() {
       return this[dartx.getPropertyValue]('counter-reset');
     }
-    set [dartx.counterReset](value) {
+    set counterReset(value) {
       this[dartx.setProperty]('counter-reset', value, '');
     }
-    get [dartx.cursor]() {
+    get cursor() {
       return this[dartx.getPropertyValue]('cursor');
     }
-    set [dartx.cursor](value) {
+    set cursor(value) {
       this[dartx.setProperty]('cursor', value, '');
     }
-    get [dartx.direction]() {
+    get direction() {
       return this[dartx.getPropertyValue]('direction');
     }
-    set [dartx.direction](value) {
+    set direction(value) {
       this[dartx.setProperty]('direction', value, '');
     }
-    get [dartx.display]() {
+    get display() {
       return this[dartx.getPropertyValue]('display');
     }
-    set [dartx.display](value) {
+    set display(value) {
       this[dartx.setProperty]('display', value, '');
     }
-    get [dartx.emptyCells]() {
+    get emptyCells() {
       return this[dartx.getPropertyValue]('empty-cells');
     }
-    set [dartx.emptyCells](value) {
+    set emptyCells(value) {
       this[dartx.setProperty]('empty-cells', value, '');
     }
-    get [dartx.filter]() {
+    get filter() {
       return this[dartx.getPropertyValue]('filter');
     }
-    set [dartx.filter](value) {
+    set filter(value) {
       this[dartx.setProperty]('filter', value, '');
     }
-    get [dartx.flex]() {
+    get flex() {
       return this[dartx.getPropertyValue]('flex');
     }
-    set [dartx.flex](value) {
+    set flex(value) {
       this[dartx.setProperty]('flex', value, '');
     }
-    get [dartx.flexBasis]() {
+    get flexBasis() {
       return this[dartx.getPropertyValue]('flex-basis');
     }
-    set [dartx.flexBasis](value) {
+    set flexBasis(value) {
       this[dartx.setProperty]('flex-basis', value, '');
     }
-    get [dartx.flexDirection]() {
+    get flexDirection() {
       return this[dartx.getPropertyValue]('flex-direction');
     }
-    set [dartx.flexDirection](value) {
+    set flexDirection(value) {
       this[dartx.setProperty]('flex-direction', value, '');
     }
-    get [dartx.flexFlow]() {
+    get flexFlow() {
       return this[dartx.getPropertyValue]('flex-flow');
     }
-    set [dartx.flexFlow](value) {
+    set flexFlow(value) {
       this[dartx.setProperty]('flex-flow', value, '');
     }
-    get [dartx.flexGrow]() {
+    get flexGrow() {
       return this[dartx.getPropertyValue]('flex-grow');
     }
-    set [dartx.flexGrow](value) {
+    set flexGrow(value) {
       this[dartx.setProperty]('flex-grow', value, '');
     }
-    get [dartx.flexShrink]() {
+    get flexShrink() {
       return this[dartx.getPropertyValue]('flex-shrink');
     }
-    set [dartx.flexShrink](value) {
+    set flexShrink(value) {
       this[dartx.setProperty]('flex-shrink', value, '');
     }
-    get [dartx.flexWrap]() {
+    get flexWrap() {
       return this[dartx.getPropertyValue]('flex-wrap');
     }
-    set [dartx.flexWrap](value) {
+    set flexWrap(value) {
       this[dartx.setProperty]('flex-wrap', value, '');
     }
-    get [dartx.float]() {
+    get float() {
       return this[dartx.getPropertyValue]('float');
     }
-    set [dartx.float](value) {
+    set float(value) {
       this[dartx.setProperty]('float', value, '');
     }
-    get [dartx.font]() {
+    get font() {
       return this[dartx.getPropertyValue]('font');
     }
-    set [dartx.font](value) {
+    set font(value) {
       this[dartx.setProperty]('font', value, '');
     }
-    get [dartx.fontFamily]() {
+    get fontFamily() {
       return this[dartx.getPropertyValue]('font-family');
     }
-    set [dartx.fontFamily](value) {
+    set fontFamily(value) {
       this[dartx.setProperty]('font-family', value, '');
     }
-    get [dartx.fontFeatureSettings]() {
+    get fontFeatureSettings() {
       return this[dartx.getPropertyValue]('font-feature-settings');
     }
-    set [dartx.fontFeatureSettings](value) {
+    set fontFeatureSettings(value) {
       this[dartx.setProperty]('font-feature-settings', value, '');
     }
-    get [dartx.fontKerning]() {
+    get fontKerning() {
       return this[dartx.getPropertyValue]('font-kerning');
     }
-    set [dartx.fontKerning](value) {
+    set fontKerning(value) {
       this[dartx.setProperty]('font-kerning', value, '');
     }
-    get [dartx.fontSize]() {
+    get fontSize() {
       return this[dartx.getPropertyValue]('font-size');
     }
-    set [dartx.fontSize](value) {
+    set fontSize(value) {
       this[dartx.setProperty]('font-size', value, '');
     }
-    get [dartx.fontSizeDelta]() {
+    get fontSizeDelta() {
       return this[dartx.getPropertyValue]('font-size-delta');
     }
-    set [dartx.fontSizeDelta](value) {
+    set fontSizeDelta(value) {
       this[dartx.setProperty]('font-size-delta', value, '');
     }
-    get [dartx.fontSmoothing]() {
+    get fontSmoothing() {
       return this[dartx.getPropertyValue]('font-smoothing');
     }
-    set [dartx.fontSmoothing](value) {
+    set fontSmoothing(value) {
       this[dartx.setProperty]('font-smoothing', value, '');
     }
-    get [dartx.fontStretch]() {
+    get fontStretch() {
       return this[dartx.getPropertyValue]('font-stretch');
     }
-    set [dartx.fontStretch](value) {
+    set fontStretch(value) {
       this[dartx.setProperty]('font-stretch', value, '');
     }
-    get [dartx.fontStyle]() {
+    get fontStyle() {
       return this[dartx.getPropertyValue]('font-style');
     }
-    set [dartx.fontStyle](value) {
+    set fontStyle(value) {
       this[dartx.setProperty]('font-style', value, '');
     }
-    get [dartx.fontVariant]() {
+    get fontVariant() {
       return this[dartx.getPropertyValue]('font-variant');
     }
-    set [dartx.fontVariant](value) {
+    set fontVariant(value) {
       this[dartx.setProperty]('font-variant', value, '');
     }
-    get [dartx.fontVariantLigatures]() {
+    get fontVariantLigatures() {
       return this[dartx.getPropertyValue]('font-variant-ligatures');
     }
-    set [dartx.fontVariantLigatures](value) {
+    set fontVariantLigatures(value) {
       this[dartx.setProperty]('font-variant-ligatures', value, '');
     }
-    get [dartx.fontWeight]() {
+    get fontWeight() {
       return this[dartx.getPropertyValue]('font-weight');
     }
-    set [dartx.fontWeight](value) {
+    set fontWeight(value) {
       this[dartx.setProperty]('font-weight', value, '');
     }
-    get [dartx.grid]() {
+    get grid() {
       return this[dartx.getPropertyValue]('grid');
     }
-    set [dartx.grid](value) {
+    set grid(value) {
       this[dartx.setProperty]('grid', value, '');
     }
-    get [dartx.gridArea]() {
+    get gridArea() {
       return this[dartx.getPropertyValue]('grid-area');
     }
-    set [dartx.gridArea](value) {
+    set gridArea(value) {
       this[dartx.setProperty]('grid-area', value, '');
     }
-    get [dartx.gridAutoColumns]() {
+    get gridAutoColumns() {
       return this[dartx.getPropertyValue]('grid-auto-columns');
     }
-    set [dartx.gridAutoColumns](value) {
+    set gridAutoColumns(value) {
       this[dartx.setProperty]('grid-auto-columns', value, '');
     }
-    get [dartx.gridAutoFlow]() {
+    get gridAutoFlow() {
       return this[dartx.getPropertyValue]('grid-auto-flow');
     }
-    set [dartx.gridAutoFlow](value) {
+    set gridAutoFlow(value) {
       this[dartx.setProperty]('grid-auto-flow', value, '');
     }
-    get [dartx.gridAutoRows]() {
+    get gridAutoRows() {
       return this[dartx.getPropertyValue]('grid-auto-rows');
     }
-    set [dartx.gridAutoRows](value) {
+    set gridAutoRows(value) {
       this[dartx.setProperty]('grid-auto-rows', value, '');
     }
-    get [dartx.gridColumn]() {
+    get gridColumn() {
       return this[dartx.getPropertyValue]('grid-column');
     }
-    set [dartx.gridColumn](value) {
+    set gridColumn(value) {
       this[dartx.setProperty]('grid-column', value, '');
     }
-    get [dartx.gridColumnEnd]() {
+    get gridColumnEnd() {
       return this[dartx.getPropertyValue]('grid-column-end');
     }
-    set [dartx.gridColumnEnd](value) {
+    set gridColumnEnd(value) {
       this[dartx.setProperty]('grid-column-end', value, '');
     }
-    get [dartx.gridColumnStart]() {
+    get gridColumnStart() {
       return this[dartx.getPropertyValue]('grid-column-start');
     }
-    set [dartx.gridColumnStart](value) {
+    set gridColumnStart(value) {
       this[dartx.setProperty]('grid-column-start', value, '');
     }
-    get [dartx.gridRow]() {
+    get gridRow() {
       return this[dartx.getPropertyValue]('grid-row');
     }
-    set [dartx.gridRow](value) {
+    set gridRow(value) {
       this[dartx.setProperty]('grid-row', value, '');
     }
-    get [dartx.gridRowEnd]() {
+    get gridRowEnd() {
       return this[dartx.getPropertyValue]('grid-row-end');
     }
-    set [dartx.gridRowEnd](value) {
+    set gridRowEnd(value) {
       this[dartx.setProperty]('grid-row-end', value, '');
     }
-    get [dartx.gridRowStart]() {
+    get gridRowStart() {
       return this[dartx.getPropertyValue]('grid-row-start');
     }
-    set [dartx.gridRowStart](value) {
+    set gridRowStart(value) {
       this[dartx.setProperty]('grid-row-start', value, '');
     }
-    get [dartx.gridTemplate]() {
+    get gridTemplate() {
       return this[dartx.getPropertyValue]('grid-template');
     }
-    set [dartx.gridTemplate](value) {
+    set gridTemplate(value) {
       this[dartx.setProperty]('grid-template', value, '');
     }
-    get [dartx.gridTemplateAreas]() {
+    get gridTemplateAreas() {
       return this[dartx.getPropertyValue]('grid-template-areas');
     }
-    set [dartx.gridTemplateAreas](value) {
+    set gridTemplateAreas(value) {
       this[dartx.setProperty]('grid-template-areas', value, '');
     }
-    get [dartx.gridTemplateColumns]() {
+    get gridTemplateColumns() {
       return this[dartx.getPropertyValue]('grid-template-columns');
     }
-    set [dartx.gridTemplateColumns](value) {
+    set gridTemplateColumns(value) {
       this[dartx.setProperty]('grid-template-columns', value, '');
     }
-    get [dartx.gridTemplateRows]() {
+    get gridTemplateRows() {
       return this[dartx.getPropertyValue]('grid-template-rows');
     }
-    set [dartx.gridTemplateRows](value) {
+    set gridTemplateRows(value) {
       this[dartx.setProperty]('grid-template-rows', value, '');
     }
-    get [dartx.height]() {
+    get height() {
       return this[dartx.getPropertyValue]('height');
     }
-    set [dartx.height](value) {
+    set height(value) {
       this[dartx.setProperty]('height', value, '');
     }
-    get [dartx.highlight]() {
+    get highlight() {
       return this[dartx.getPropertyValue]('highlight');
     }
-    set [dartx.highlight](value) {
+    set highlight(value) {
       this[dartx.setProperty]('highlight', value, '');
     }
-    get [dartx.hyphenateCharacter]() {
+    get hyphenateCharacter() {
       return this[dartx.getPropertyValue]('hyphenate-character');
     }
-    set [dartx.hyphenateCharacter](value) {
+    set hyphenateCharacter(value) {
       this[dartx.setProperty]('hyphenate-character', value, '');
     }
-    get [dartx.imageRendering]() {
+    get imageRendering() {
       return this[dartx.getPropertyValue]('image-rendering');
     }
-    set [dartx.imageRendering](value) {
+    set imageRendering(value) {
       this[dartx.setProperty]('image-rendering', value, '');
     }
-    get [dartx.isolation]() {
+    get isolation() {
       return this[dartx.getPropertyValue]('isolation');
     }
-    set [dartx.isolation](value) {
+    set isolation(value) {
       this[dartx.setProperty]('isolation', value, '');
     }
-    get [dartx.justifyContent]() {
+    get justifyContent() {
       return this[dartx.getPropertyValue]('justify-content');
     }
-    set [dartx.justifyContent](value) {
+    set justifyContent(value) {
       this[dartx.setProperty]('justify-content', value, '');
     }
-    get [dartx.justifySelf]() {
+    get justifySelf() {
       return this[dartx.getPropertyValue]('justify-self');
     }
-    set [dartx.justifySelf](value) {
+    set justifySelf(value) {
       this[dartx.setProperty]('justify-self', value, '');
     }
-    get [dartx.left]() {
+    get left() {
       return this[dartx.getPropertyValue]('left');
     }
-    set [dartx.left](value) {
+    set left(value) {
       this[dartx.setProperty]('left', value, '');
     }
-    get [dartx.letterSpacing]() {
+    get letterSpacing() {
       return this[dartx.getPropertyValue]('letter-spacing');
     }
-    set [dartx.letterSpacing](value) {
+    set letterSpacing(value) {
       this[dartx.setProperty]('letter-spacing', value, '');
     }
-    get [dartx.lineBoxContain]() {
+    get lineBoxContain() {
       return this[dartx.getPropertyValue]('line-box-contain');
     }
-    set [dartx.lineBoxContain](value) {
+    set lineBoxContain(value) {
       this[dartx.setProperty]('line-box-contain', value, '');
     }
-    get [dartx.lineBreak]() {
+    get lineBreak() {
       return this[dartx.getPropertyValue]('line-break');
     }
-    set [dartx.lineBreak](value) {
+    set lineBreak(value) {
       this[dartx.setProperty]('line-break', value, '');
     }
-    get [dartx.lineClamp]() {
+    get lineClamp() {
       return this[dartx.getPropertyValue]('line-clamp');
     }
-    set [dartx.lineClamp](value) {
+    set lineClamp(value) {
       this[dartx.setProperty]('line-clamp', value, '');
     }
-    get [dartx.lineHeight]() {
+    get lineHeight() {
       return this[dartx.getPropertyValue]('line-height');
     }
-    set [dartx.lineHeight](value) {
+    set lineHeight(value) {
       this[dartx.setProperty]('line-height', value, '');
     }
-    get [dartx.listStyle]() {
+    get listStyle() {
       return this[dartx.getPropertyValue]('list-style');
     }
-    set [dartx.listStyle](value) {
+    set listStyle(value) {
       this[dartx.setProperty]('list-style', value, '');
     }
-    get [dartx.listStyleImage]() {
+    get listStyleImage() {
       return this[dartx.getPropertyValue]('list-style-image');
     }
-    set [dartx.listStyleImage](value) {
+    set listStyleImage(value) {
       this[dartx.setProperty]('list-style-image', value, '');
     }
-    get [dartx.listStylePosition]() {
+    get listStylePosition() {
       return this[dartx.getPropertyValue]('list-style-position');
     }
-    set [dartx.listStylePosition](value) {
+    set listStylePosition(value) {
       this[dartx.setProperty]('list-style-position', value, '');
     }
-    get [dartx.listStyleType]() {
+    get listStyleType() {
       return this[dartx.getPropertyValue]('list-style-type');
     }
-    set [dartx.listStyleType](value) {
+    set listStyleType(value) {
       this[dartx.setProperty]('list-style-type', value, '');
     }
-    get [dartx.locale]() {
+    get locale() {
       return this[dartx.getPropertyValue]('locale');
     }
-    set [dartx.locale](value) {
+    set locale(value) {
       this[dartx.setProperty]('locale', value, '');
     }
-    get [dartx.logicalHeight]() {
+    get logicalHeight() {
       return this[dartx.getPropertyValue]('logical-height');
     }
-    set [dartx.logicalHeight](value) {
+    set logicalHeight(value) {
       this[dartx.setProperty]('logical-height', value, '');
     }
-    get [dartx.logicalWidth]() {
+    get logicalWidth() {
       return this[dartx.getPropertyValue]('logical-width');
     }
-    set [dartx.logicalWidth](value) {
+    set logicalWidth(value) {
       this[dartx.setProperty]('logical-width', value, '');
     }
-    get [dartx.margin]() {
+    get margin() {
       return this[dartx.getPropertyValue]('margin');
     }
-    set [dartx.margin](value) {
+    set margin(value) {
       this[dartx.setProperty]('margin', value, '');
     }
-    get [dartx.marginAfter]() {
+    get marginAfter() {
       return this[dartx.getPropertyValue]('margin-after');
     }
-    set [dartx.marginAfter](value) {
+    set marginAfter(value) {
       this[dartx.setProperty]('margin-after', value, '');
     }
-    get [dartx.marginAfterCollapse]() {
+    get marginAfterCollapse() {
       return this[dartx.getPropertyValue]('margin-after-collapse');
     }
-    set [dartx.marginAfterCollapse](value) {
+    set marginAfterCollapse(value) {
       this[dartx.setProperty]('margin-after-collapse', value, '');
     }
-    get [dartx.marginBefore]() {
+    get marginBefore() {
       return this[dartx.getPropertyValue]('margin-before');
     }
-    set [dartx.marginBefore](value) {
+    set marginBefore(value) {
       this[dartx.setProperty]('margin-before', value, '');
     }
-    get [dartx.marginBeforeCollapse]() {
+    get marginBeforeCollapse() {
       return this[dartx.getPropertyValue]('margin-before-collapse');
     }
-    set [dartx.marginBeforeCollapse](value) {
+    set marginBeforeCollapse(value) {
       this[dartx.setProperty]('margin-before-collapse', value, '');
     }
-    get [dartx.marginBottom]() {
+    get marginBottom() {
       return this[dartx.getPropertyValue]('margin-bottom');
     }
-    set [dartx.marginBottom](value) {
+    set marginBottom(value) {
       this[dartx.setProperty]('margin-bottom', value, '');
     }
-    get [dartx.marginBottomCollapse]() {
+    get marginBottomCollapse() {
       return this[dartx.getPropertyValue]('margin-bottom-collapse');
     }
-    set [dartx.marginBottomCollapse](value) {
+    set marginBottomCollapse(value) {
       this[dartx.setProperty]('margin-bottom-collapse', value, '');
     }
-    get [dartx.marginCollapse]() {
+    get marginCollapse() {
       return this[dartx.getPropertyValue]('margin-collapse');
     }
-    set [dartx.marginCollapse](value) {
+    set marginCollapse(value) {
       this[dartx.setProperty]('margin-collapse', value, '');
     }
-    get [dartx.marginEnd]() {
+    get marginEnd() {
       return this[dartx.getPropertyValue]('margin-end');
     }
-    set [dartx.marginEnd](value) {
+    set marginEnd(value) {
       this[dartx.setProperty]('margin-end', value, '');
     }
-    get [dartx.marginLeft]() {
+    get marginLeft() {
       return this[dartx.getPropertyValue]('margin-left');
     }
-    set [dartx.marginLeft](value) {
+    set marginLeft(value) {
       this[dartx.setProperty]('margin-left', value, '');
     }
-    get [dartx.marginRight]() {
+    get marginRight() {
       return this[dartx.getPropertyValue]('margin-right');
     }
-    set [dartx.marginRight](value) {
+    set marginRight(value) {
       this[dartx.setProperty]('margin-right', value, '');
     }
-    get [dartx.marginStart]() {
+    get marginStart() {
       return this[dartx.getPropertyValue]('margin-start');
     }
-    set [dartx.marginStart](value) {
+    set marginStart(value) {
       this[dartx.setProperty]('margin-start', value, '');
     }
-    get [dartx.marginTop]() {
+    get marginTop() {
       return this[dartx.getPropertyValue]('margin-top');
     }
-    set [dartx.marginTop](value) {
+    set marginTop(value) {
       this[dartx.setProperty]('margin-top', value, '');
     }
-    get [dartx.marginTopCollapse]() {
+    get marginTopCollapse() {
       return this[dartx.getPropertyValue]('margin-top-collapse');
     }
-    set [dartx.marginTopCollapse](value) {
+    set marginTopCollapse(value) {
       this[dartx.setProperty]('margin-top-collapse', value, '');
     }
-    get [dartx.mask]() {
+    get mask() {
       return this[dartx.getPropertyValue]('mask');
     }
-    set [dartx.mask](value) {
+    set mask(value) {
       this[dartx.setProperty]('mask', value, '');
     }
-    get [dartx.maskBoxImage]() {
+    get maskBoxImage() {
       return this[dartx.getPropertyValue]('mask-box-image');
     }
-    set [dartx.maskBoxImage](value) {
+    set maskBoxImage(value) {
       this[dartx.setProperty]('mask-box-image', value, '');
     }
-    get [dartx.maskBoxImageOutset]() {
+    get maskBoxImageOutset() {
       return this[dartx.getPropertyValue]('mask-box-image-outset');
     }
-    set [dartx.maskBoxImageOutset](value) {
+    set maskBoxImageOutset(value) {
       this[dartx.setProperty]('mask-box-image-outset', value, '');
     }
-    get [dartx.maskBoxImageRepeat]() {
+    get maskBoxImageRepeat() {
       return this[dartx.getPropertyValue]('mask-box-image-repeat');
     }
-    set [dartx.maskBoxImageRepeat](value) {
+    set maskBoxImageRepeat(value) {
       this[dartx.setProperty]('mask-box-image-repeat', value, '');
     }
-    get [dartx.maskBoxImageSlice]() {
+    get maskBoxImageSlice() {
       return this[dartx.getPropertyValue]('mask-box-image-slice');
     }
-    set [dartx.maskBoxImageSlice](value) {
+    set maskBoxImageSlice(value) {
       this[dartx.setProperty]('mask-box-image-slice', value, '');
     }
-    get [dartx.maskBoxImageSource]() {
+    get maskBoxImageSource() {
       return this[dartx.getPropertyValue]('mask-box-image-source');
     }
-    set [dartx.maskBoxImageSource](value) {
+    set maskBoxImageSource(value) {
       this[dartx.setProperty]('mask-box-image-source', value, '');
     }
-    get [dartx.maskBoxImageWidth]() {
+    get maskBoxImageWidth() {
       return this[dartx.getPropertyValue]('mask-box-image-width');
     }
-    set [dartx.maskBoxImageWidth](value) {
+    set maskBoxImageWidth(value) {
       this[dartx.setProperty]('mask-box-image-width', value, '');
     }
-    get [dartx.maskClip]() {
+    get maskClip() {
       return this[dartx.getPropertyValue]('mask-clip');
     }
-    set [dartx.maskClip](value) {
+    set maskClip(value) {
       this[dartx.setProperty]('mask-clip', value, '');
     }
-    get [dartx.maskComposite]() {
+    get maskComposite() {
       return this[dartx.getPropertyValue]('mask-composite');
     }
-    set [dartx.maskComposite](value) {
+    set maskComposite(value) {
       this[dartx.setProperty]('mask-composite', value, '');
     }
-    get [dartx.maskImage]() {
+    get maskImage() {
       return this[dartx.getPropertyValue]('mask-image');
     }
-    set [dartx.maskImage](value) {
+    set maskImage(value) {
       this[dartx.setProperty]('mask-image', value, '');
     }
-    get [dartx.maskOrigin]() {
+    get maskOrigin() {
       return this[dartx.getPropertyValue]('mask-origin');
     }
-    set [dartx.maskOrigin](value) {
+    set maskOrigin(value) {
       this[dartx.setProperty]('mask-origin', value, '');
     }
-    get [dartx.maskPosition]() {
+    get maskPosition() {
       return this[dartx.getPropertyValue]('mask-position');
     }
-    set [dartx.maskPosition](value) {
+    set maskPosition(value) {
       this[dartx.setProperty]('mask-position', value, '');
     }
-    get [dartx.maskPositionX]() {
+    get maskPositionX() {
       return this[dartx.getPropertyValue]('mask-position-x');
     }
-    set [dartx.maskPositionX](value) {
+    set maskPositionX(value) {
       this[dartx.setProperty]('mask-position-x', value, '');
     }
-    get [dartx.maskPositionY]() {
+    get maskPositionY() {
       return this[dartx.getPropertyValue]('mask-position-y');
     }
-    set [dartx.maskPositionY](value) {
+    set maskPositionY(value) {
       this[dartx.setProperty]('mask-position-y', value, '');
     }
-    get [dartx.maskRepeat]() {
+    get maskRepeat() {
       return this[dartx.getPropertyValue]('mask-repeat');
     }
-    set [dartx.maskRepeat](value) {
+    set maskRepeat(value) {
       this[dartx.setProperty]('mask-repeat', value, '');
     }
-    get [dartx.maskRepeatX]() {
+    get maskRepeatX() {
       return this[dartx.getPropertyValue]('mask-repeat-x');
     }
-    set [dartx.maskRepeatX](value) {
+    set maskRepeatX(value) {
       this[dartx.setProperty]('mask-repeat-x', value, '');
     }
-    get [dartx.maskRepeatY]() {
+    get maskRepeatY() {
       return this[dartx.getPropertyValue]('mask-repeat-y');
     }
-    set [dartx.maskRepeatY](value) {
+    set maskRepeatY(value) {
       this[dartx.setProperty]('mask-repeat-y', value, '');
     }
-    get [dartx.maskSize]() {
+    get maskSize() {
       return this[dartx.getPropertyValue]('mask-size');
     }
-    set [dartx.maskSize](value) {
+    set maskSize(value) {
       this[dartx.setProperty]('mask-size', value, '');
     }
-    get [dartx.maskSourceType]() {
+    get maskSourceType() {
       return this[dartx.getPropertyValue]('mask-source-type');
     }
-    set [dartx.maskSourceType](value) {
+    set maskSourceType(value) {
       this[dartx.setProperty]('mask-source-type', value, '');
     }
-    get [dartx.maxHeight]() {
+    get maxHeight() {
       return this[dartx.getPropertyValue]('max-height');
     }
-    set [dartx.maxHeight](value) {
+    set maxHeight(value) {
       this[dartx.setProperty]('max-height', value, '');
     }
-    get [dartx.maxLogicalHeight]() {
+    get maxLogicalHeight() {
       return this[dartx.getPropertyValue]('max-logical-height');
     }
-    set [dartx.maxLogicalHeight](value) {
+    set maxLogicalHeight(value) {
       this[dartx.setProperty]('max-logical-height', value, '');
     }
-    get [dartx.maxLogicalWidth]() {
+    get maxLogicalWidth() {
       return this[dartx.getPropertyValue]('max-logical-width');
     }
-    set [dartx.maxLogicalWidth](value) {
+    set maxLogicalWidth(value) {
       this[dartx.setProperty]('max-logical-width', value, '');
     }
-    get [dartx.maxWidth]() {
+    get maxWidth() {
       return this[dartx.getPropertyValue]('max-width');
     }
-    set [dartx.maxWidth](value) {
+    set maxWidth(value) {
       this[dartx.setProperty]('max-width', value, '');
     }
-    get [dartx.maxZoom]() {
+    get maxZoom() {
       return this[dartx.getPropertyValue]('max-zoom');
     }
-    set [dartx.maxZoom](value) {
+    set maxZoom(value) {
       this[dartx.setProperty]('max-zoom', value, '');
     }
-    get [dartx.minHeight]() {
+    get minHeight() {
       return this[dartx.getPropertyValue]('min-height');
     }
-    set [dartx.minHeight](value) {
+    set minHeight(value) {
       this[dartx.setProperty]('min-height', value, '');
     }
-    get [dartx.minLogicalHeight]() {
+    get minLogicalHeight() {
       return this[dartx.getPropertyValue]('min-logical-height');
     }
-    set [dartx.minLogicalHeight](value) {
+    set minLogicalHeight(value) {
       this[dartx.setProperty]('min-logical-height', value, '');
     }
-    get [dartx.minLogicalWidth]() {
+    get minLogicalWidth() {
       return this[dartx.getPropertyValue]('min-logical-width');
     }
-    set [dartx.minLogicalWidth](value) {
+    set minLogicalWidth(value) {
       this[dartx.setProperty]('min-logical-width', value, '');
     }
-    get [dartx.minWidth]() {
+    get minWidth() {
       return this[dartx.getPropertyValue]('min-width');
     }
-    set [dartx.minWidth](value) {
+    set minWidth(value) {
       this[dartx.setProperty]('min-width', value, '');
     }
-    get [dartx.minZoom]() {
+    get minZoom() {
       return this[dartx.getPropertyValue]('min-zoom');
     }
-    set [dartx.minZoom](value) {
+    set minZoom(value) {
       this[dartx.setProperty]('min-zoom', value, '');
     }
-    get [dartx.mixBlendMode]() {
+    get mixBlendMode() {
       return this[dartx.getPropertyValue]('mix-blend-mode');
     }
-    set [dartx.mixBlendMode](value) {
+    set mixBlendMode(value) {
       this[dartx.setProperty]('mix-blend-mode', value, '');
     }
-    get [dartx.objectFit]() {
+    get objectFit() {
       return this[dartx.getPropertyValue]('object-fit');
     }
-    set [dartx.objectFit](value) {
+    set objectFit(value) {
       this[dartx.setProperty]('object-fit', value, '');
     }
-    get [dartx.objectPosition]() {
+    get objectPosition() {
       return this[dartx.getPropertyValue]('object-position');
     }
-    set [dartx.objectPosition](value) {
+    set objectPosition(value) {
       this[dartx.setProperty]('object-position', value, '');
     }
-    get [dartx.opacity]() {
+    get opacity() {
       return this[dartx.getPropertyValue]('opacity');
     }
-    set [dartx.opacity](value) {
+    set opacity(value) {
       this[dartx.setProperty]('opacity', value, '');
     }
-    get [dartx.order]() {
+    get order() {
       return this[dartx.getPropertyValue]('order');
     }
-    set [dartx.order](value) {
+    set order(value) {
       this[dartx.setProperty]('order', value, '');
     }
-    get [dartx.orientation]() {
+    get orientation() {
       return this[dartx.getPropertyValue]('orientation');
     }
-    set [dartx.orientation](value) {
+    set orientation(value) {
       this[dartx.setProperty]('orientation', value, '');
     }
-    get [dartx.orphans]() {
+    get orphans() {
       return this[dartx.getPropertyValue]('orphans');
     }
-    set [dartx.orphans](value) {
+    set orphans(value) {
       this[dartx.setProperty]('orphans', value, '');
     }
-    get [dartx.outline]() {
+    get outline() {
       return this[dartx.getPropertyValue]('outline');
     }
-    set [dartx.outline](value) {
+    set outline(value) {
       this[dartx.setProperty]('outline', value, '');
     }
-    get [dartx.outlineColor]() {
+    get outlineColor() {
       return this[dartx.getPropertyValue]('outline-color');
     }
-    set [dartx.outlineColor](value) {
+    set outlineColor(value) {
       this[dartx.setProperty]('outline-color', value, '');
     }
-    get [dartx.outlineOffset]() {
+    get outlineOffset() {
       return this[dartx.getPropertyValue]('outline-offset');
     }
-    set [dartx.outlineOffset](value) {
+    set outlineOffset(value) {
       this[dartx.setProperty]('outline-offset', value, '');
     }
-    get [dartx.outlineStyle]() {
+    get outlineStyle() {
       return this[dartx.getPropertyValue]('outline-style');
     }
-    set [dartx.outlineStyle](value) {
+    set outlineStyle(value) {
       this[dartx.setProperty]('outline-style', value, '');
     }
-    get [dartx.outlineWidth]() {
+    get outlineWidth() {
       return this[dartx.getPropertyValue]('outline-width');
     }
-    set [dartx.outlineWidth](value) {
+    set outlineWidth(value) {
       this[dartx.setProperty]('outline-width', value, '');
     }
-    get [dartx.overflow]() {
+    get overflow() {
       return this[dartx.getPropertyValue]('overflow');
     }
-    set [dartx.overflow](value) {
+    set overflow(value) {
       this[dartx.setProperty]('overflow', value, '');
     }
-    get [dartx.overflowWrap]() {
+    get overflowWrap() {
       return this[dartx.getPropertyValue]('overflow-wrap');
     }
-    set [dartx.overflowWrap](value) {
+    set overflowWrap(value) {
       this[dartx.setProperty]('overflow-wrap', value, '');
     }
-    get [dartx.overflowX]() {
+    get overflowX() {
       return this[dartx.getPropertyValue]('overflow-x');
     }
-    set [dartx.overflowX](value) {
+    set overflowX(value) {
       this[dartx.setProperty]('overflow-x', value, '');
     }
-    get [dartx.overflowY]() {
+    get overflowY() {
       return this[dartx.getPropertyValue]('overflow-y');
     }
-    set [dartx.overflowY](value) {
+    set overflowY(value) {
       this[dartx.setProperty]('overflow-y', value, '');
     }
-    get [dartx.padding]() {
+    get padding() {
       return this[dartx.getPropertyValue]('padding');
     }
-    set [dartx.padding](value) {
+    set padding(value) {
       this[dartx.setProperty]('padding', value, '');
     }
-    get [dartx.paddingAfter]() {
+    get paddingAfter() {
       return this[dartx.getPropertyValue]('padding-after');
     }
-    set [dartx.paddingAfter](value) {
+    set paddingAfter(value) {
       this[dartx.setProperty]('padding-after', value, '');
     }
-    get [dartx.paddingBefore]() {
+    get paddingBefore() {
       return this[dartx.getPropertyValue]('padding-before');
     }
-    set [dartx.paddingBefore](value) {
+    set paddingBefore(value) {
       this[dartx.setProperty]('padding-before', value, '');
     }
-    get [dartx.paddingBottom]() {
+    get paddingBottom() {
       return this[dartx.getPropertyValue]('padding-bottom');
     }
-    set [dartx.paddingBottom](value) {
+    set paddingBottom(value) {
       this[dartx.setProperty]('padding-bottom', value, '');
     }
-    get [dartx.paddingEnd]() {
+    get paddingEnd() {
       return this[dartx.getPropertyValue]('padding-end');
     }
-    set [dartx.paddingEnd](value) {
+    set paddingEnd(value) {
       this[dartx.setProperty]('padding-end', value, '');
     }
-    get [dartx.paddingLeft]() {
+    get paddingLeft() {
       return this[dartx.getPropertyValue]('padding-left');
     }
-    set [dartx.paddingLeft](value) {
+    set paddingLeft(value) {
       this[dartx.setProperty]('padding-left', value, '');
     }
-    get [dartx.paddingRight]() {
+    get paddingRight() {
       return this[dartx.getPropertyValue]('padding-right');
     }
-    set [dartx.paddingRight](value) {
+    set paddingRight(value) {
       this[dartx.setProperty]('padding-right', value, '');
     }
-    get [dartx.paddingStart]() {
+    get paddingStart() {
       return this[dartx.getPropertyValue]('padding-start');
     }
-    set [dartx.paddingStart](value) {
+    set paddingStart(value) {
       this[dartx.setProperty]('padding-start', value, '');
     }
-    get [dartx.paddingTop]() {
+    get paddingTop() {
       return this[dartx.getPropertyValue]('padding-top');
     }
-    set [dartx.paddingTop](value) {
+    set paddingTop(value) {
       this[dartx.setProperty]('padding-top', value, '');
     }
-    get [dartx.page]() {
+    get page() {
       return this[dartx.getPropertyValue]('page');
     }
-    set [dartx.page](value) {
+    set page(value) {
       this[dartx.setProperty]('page', value, '');
     }
-    get [dartx.pageBreakAfter]() {
+    get pageBreakAfter() {
       return this[dartx.getPropertyValue]('page-break-after');
     }
-    set [dartx.pageBreakAfter](value) {
+    set pageBreakAfter(value) {
       this[dartx.setProperty]('page-break-after', value, '');
     }
-    get [dartx.pageBreakBefore]() {
+    get pageBreakBefore() {
       return this[dartx.getPropertyValue]('page-break-before');
     }
-    set [dartx.pageBreakBefore](value) {
+    set pageBreakBefore(value) {
       this[dartx.setProperty]('page-break-before', value, '');
     }
-    get [dartx.pageBreakInside]() {
+    get pageBreakInside() {
       return this[dartx.getPropertyValue]('page-break-inside');
     }
-    set [dartx.pageBreakInside](value) {
+    set pageBreakInside(value) {
       this[dartx.setProperty]('page-break-inside', value, '');
     }
-    get [dartx.perspective]() {
+    get perspective() {
       return this[dartx.getPropertyValue]('perspective');
     }
-    set [dartx.perspective](value) {
+    set perspective(value) {
       this[dartx.setProperty]('perspective', value, '');
     }
-    get [dartx.perspectiveOrigin]() {
+    get perspectiveOrigin() {
       return this[dartx.getPropertyValue]('perspective-origin');
     }
-    set [dartx.perspectiveOrigin](value) {
+    set perspectiveOrigin(value) {
       this[dartx.setProperty]('perspective-origin', value, '');
     }
-    get [dartx.perspectiveOriginX]() {
+    get perspectiveOriginX() {
       return this[dartx.getPropertyValue]('perspective-origin-x');
     }
-    set [dartx.perspectiveOriginX](value) {
+    set perspectiveOriginX(value) {
       this[dartx.setProperty]('perspective-origin-x', value, '');
     }
-    get [dartx.perspectiveOriginY]() {
+    get perspectiveOriginY() {
       return this[dartx.getPropertyValue]('perspective-origin-y');
     }
-    set [dartx.perspectiveOriginY](value) {
+    set perspectiveOriginY(value) {
       this[dartx.setProperty]('perspective-origin-y', value, '');
     }
-    get [dartx.pointerEvents]() {
+    get pointerEvents() {
       return this[dartx.getPropertyValue]('pointer-events');
     }
-    set [dartx.pointerEvents](value) {
+    set pointerEvents(value) {
       this[dartx.setProperty]('pointer-events', value, '');
     }
-    get [dartx.position]() {
+    get position() {
       return this[dartx.getPropertyValue]('position');
     }
-    set [dartx.position](value) {
+    set position(value) {
       this[dartx.setProperty]('position', value, '');
     }
-    get [dartx.printColorAdjust]() {
+    get printColorAdjust() {
       return this[dartx.getPropertyValue]('print-color-adjust');
     }
-    set [dartx.printColorAdjust](value) {
+    set printColorAdjust(value) {
       this[dartx.setProperty]('print-color-adjust', value, '');
     }
-    get [dartx.quotes]() {
+    get quotes() {
       return this[dartx.getPropertyValue]('quotes');
     }
-    set [dartx.quotes](value) {
+    set quotes(value) {
       this[dartx.setProperty]('quotes', value, '');
     }
-    get [dartx.resize]() {
+    get resize() {
       return this[dartx.getPropertyValue]('resize');
     }
-    set [dartx.resize](value) {
+    set resize(value) {
       this[dartx.setProperty]('resize', value, '');
     }
-    get [dartx.right]() {
+    get right() {
       return this[dartx.getPropertyValue]('right');
     }
-    set [dartx.right](value) {
+    set right(value) {
       this[dartx.setProperty]('right', value, '');
     }
-    get [dartx.rtlOrdering]() {
+    get rtlOrdering() {
       return this[dartx.getPropertyValue]('rtl-ordering');
     }
-    set [dartx.rtlOrdering](value) {
+    set rtlOrdering(value) {
       this[dartx.setProperty]('rtl-ordering', value, '');
     }
-    get [dartx.rubyPosition]() {
+    get rubyPosition() {
       return this[dartx.getPropertyValue]('ruby-position');
     }
-    set [dartx.rubyPosition](value) {
+    set rubyPosition(value) {
       this[dartx.setProperty]('ruby-position', value, '');
     }
-    get [dartx.scrollBehavior]() {
+    get scrollBehavior() {
       return this[dartx.getPropertyValue]('scroll-behavior');
     }
-    set [dartx.scrollBehavior](value) {
+    set scrollBehavior(value) {
       this[dartx.setProperty]('scroll-behavior', value, '');
     }
-    get [dartx.shapeImageThreshold]() {
+    get shapeImageThreshold() {
       return this[dartx.getPropertyValue]('shape-image-threshold');
     }
-    set [dartx.shapeImageThreshold](value) {
+    set shapeImageThreshold(value) {
       this[dartx.setProperty]('shape-image-threshold', value, '');
     }
-    get [dartx.shapeMargin]() {
+    get shapeMargin() {
       return this[dartx.getPropertyValue]('shape-margin');
     }
-    set [dartx.shapeMargin](value) {
+    set shapeMargin(value) {
       this[dartx.setProperty]('shape-margin', value, '');
     }
-    get [dartx.shapeOutside]() {
+    get shapeOutside() {
       return this[dartx.getPropertyValue]('shape-outside');
     }
-    set [dartx.shapeOutside](value) {
+    set shapeOutside(value) {
       this[dartx.setProperty]('shape-outside', value, '');
     }
-    get [dartx.size]() {
+    get size() {
       return this[dartx.getPropertyValue]('size');
     }
-    set [dartx.size](value) {
+    set size(value) {
       this[dartx.setProperty]('size', value, '');
     }
-    get [dartx.speak]() {
+    get speak() {
       return this[dartx.getPropertyValue]('speak');
     }
-    set [dartx.speak](value) {
+    set speak(value) {
       this[dartx.setProperty]('speak', value, '');
     }
-    get [dartx.src]() {
+    get src() {
       return this[dartx.getPropertyValue]('src');
     }
-    set [dartx.src](value) {
+    set src(value) {
       this[dartx.setProperty]('src', value, '');
     }
-    get [dartx.tabSize]() {
+    get tabSize() {
       return this[dartx.getPropertyValue]('tab-size');
     }
-    set [dartx.tabSize](value) {
+    set tabSize(value) {
       this[dartx.setProperty]('tab-size', value, '');
     }
-    get [dartx.tableLayout]() {
+    get tableLayout() {
       return this[dartx.getPropertyValue]('table-layout');
     }
-    set [dartx.tableLayout](value) {
+    set tableLayout(value) {
       this[dartx.setProperty]('table-layout', value, '');
     }
-    get [dartx.tapHighlightColor]() {
+    get tapHighlightColor() {
       return this[dartx.getPropertyValue]('tap-highlight-color');
     }
-    set [dartx.tapHighlightColor](value) {
+    set tapHighlightColor(value) {
       this[dartx.setProperty]('tap-highlight-color', value, '');
     }
-    get [dartx.textAlign]() {
+    get textAlign() {
       return this[dartx.getPropertyValue]('text-align');
     }
-    set [dartx.textAlign](value) {
+    set textAlign(value) {
       this[dartx.setProperty]('text-align', value, '');
     }
-    get [dartx.textAlignLast]() {
+    get textAlignLast() {
       return this[dartx.getPropertyValue]('text-align-last');
     }
-    set [dartx.textAlignLast](value) {
+    set textAlignLast(value) {
       this[dartx.setProperty]('text-align-last', value, '');
     }
-    get [dartx.textCombine]() {
+    get textCombine() {
       return this[dartx.getPropertyValue]('text-combine');
     }
-    set [dartx.textCombine](value) {
+    set textCombine(value) {
       this[dartx.setProperty]('text-combine', value, '');
     }
-    get [dartx.textDecoration]() {
+    get textDecoration() {
       return this[dartx.getPropertyValue]('text-decoration');
     }
-    set [dartx.textDecoration](value) {
+    set textDecoration(value) {
       this[dartx.setProperty]('text-decoration', value, '');
     }
-    get [dartx.textDecorationColor]() {
+    get textDecorationColor() {
       return this[dartx.getPropertyValue]('text-decoration-color');
     }
-    set [dartx.textDecorationColor](value) {
+    set textDecorationColor(value) {
       this[dartx.setProperty]('text-decoration-color', value, '');
     }
-    get [dartx.textDecorationLine]() {
+    get textDecorationLine() {
       return this[dartx.getPropertyValue]('text-decoration-line');
     }
-    set [dartx.textDecorationLine](value) {
+    set textDecorationLine(value) {
       this[dartx.setProperty]('text-decoration-line', value, '');
     }
-    get [dartx.textDecorationStyle]() {
+    get textDecorationStyle() {
       return this[dartx.getPropertyValue]('text-decoration-style');
     }
-    set [dartx.textDecorationStyle](value) {
+    set textDecorationStyle(value) {
       this[dartx.setProperty]('text-decoration-style', value, '');
     }
-    get [dartx.textDecorationsInEffect]() {
+    get textDecorationsInEffect() {
       return this[dartx.getPropertyValue]('text-decorations-in-effect');
     }
-    set [dartx.textDecorationsInEffect](value) {
+    set textDecorationsInEffect(value) {
       this[dartx.setProperty]('text-decorations-in-effect', value, '');
     }
-    get [dartx.textEmphasis]() {
+    get textEmphasis() {
       return this[dartx.getPropertyValue]('text-emphasis');
     }
-    set [dartx.textEmphasis](value) {
+    set textEmphasis(value) {
       this[dartx.setProperty]('text-emphasis', value, '');
     }
-    get [dartx.textEmphasisColor]() {
+    get textEmphasisColor() {
       return this[dartx.getPropertyValue]('text-emphasis-color');
     }
-    set [dartx.textEmphasisColor](value) {
+    set textEmphasisColor(value) {
       this[dartx.setProperty]('text-emphasis-color', value, '');
     }
-    get [dartx.textEmphasisPosition]() {
+    get textEmphasisPosition() {
       return this[dartx.getPropertyValue]('text-emphasis-position');
     }
-    set [dartx.textEmphasisPosition](value) {
+    set textEmphasisPosition(value) {
       this[dartx.setProperty]('text-emphasis-position', value, '');
     }
-    get [dartx.textEmphasisStyle]() {
+    get textEmphasisStyle() {
       return this[dartx.getPropertyValue]('text-emphasis-style');
     }
-    set [dartx.textEmphasisStyle](value) {
+    set textEmphasisStyle(value) {
       this[dartx.setProperty]('text-emphasis-style', value, '');
     }
-    get [dartx.textFillColor]() {
+    get textFillColor() {
       return this[dartx.getPropertyValue]('text-fill-color');
     }
-    set [dartx.textFillColor](value) {
+    set textFillColor(value) {
       this[dartx.setProperty]('text-fill-color', value, '');
     }
-    get [dartx.textIndent]() {
+    get textIndent() {
       return this[dartx.getPropertyValue]('text-indent');
     }
-    set [dartx.textIndent](value) {
+    set textIndent(value) {
       this[dartx.setProperty]('text-indent', value, '');
     }
-    get [dartx.textJustify]() {
+    get textJustify() {
       return this[dartx.getPropertyValue]('text-justify');
     }
-    set [dartx.textJustify](value) {
+    set textJustify(value) {
       this[dartx.setProperty]('text-justify', value, '');
     }
-    get [dartx.textLineThroughColor]() {
+    get textLineThroughColor() {
       return this[dartx.getPropertyValue]('text-line-through-color');
     }
-    set [dartx.textLineThroughColor](value) {
+    set textLineThroughColor(value) {
       this[dartx.setProperty]('text-line-through-color', value, '');
     }
-    get [dartx.textLineThroughMode]() {
+    get textLineThroughMode() {
       return this[dartx.getPropertyValue]('text-line-through-mode');
     }
-    set [dartx.textLineThroughMode](value) {
+    set textLineThroughMode(value) {
       this[dartx.setProperty]('text-line-through-mode', value, '');
     }
-    get [dartx.textLineThroughStyle]() {
+    get textLineThroughStyle() {
       return this[dartx.getPropertyValue]('text-line-through-style');
     }
-    set [dartx.textLineThroughStyle](value) {
+    set textLineThroughStyle(value) {
       this[dartx.setProperty]('text-line-through-style', value, '');
     }
-    get [dartx.textLineThroughWidth]() {
+    get textLineThroughWidth() {
       return this[dartx.getPropertyValue]('text-line-through-width');
     }
-    set [dartx.textLineThroughWidth](value) {
+    set textLineThroughWidth(value) {
       this[dartx.setProperty]('text-line-through-width', value, '');
     }
-    get [dartx.textOrientation]() {
+    get textOrientation() {
       return this[dartx.getPropertyValue]('text-orientation');
     }
-    set [dartx.textOrientation](value) {
+    set textOrientation(value) {
       this[dartx.setProperty]('text-orientation', value, '');
     }
-    get [dartx.textOverflow]() {
+    get textOverflow() {
       return this[dartx.getPropertyValue]('text-overflow');
     }
-    set [dartx.textOverflow](value) {
+    set textOverflow(value) {
       this[dartx.setProperty]('text-overflow', value, '');
     }
-    get [dartx.textOverlineColor]() {
+    get textOverlineColor() {
       return this[dartx.getPropertyValue]('text-overline-color');
     }
-    set [dartx.textOverlineColor](value) {
+    set textOverlineColor(value) {
       this[dartx.setProperty]('text-overline-color', value, '');
     }
-    get [dartx.textOverlineMode]() {
+    get textOverlineMode() {
       return this[dartx.getPropertyValue]('text-overline-mode');
     }
-    set [dartx.textOverlineMode](value) {
+    set textOverlineMode(value) {
       this[dartx.setProperty]('text-overline-mode', value, '');
     }
-    get [dartx.textOverlineStyle]() {
+    get textOverlineStyle() {
       return this[dartx.getPropertyValue]('text-overline-style');
     }
-    set [dartx.textOverlineStyle](value) {
+    set textOverlineStyle(value) {
       this[dartx.setProperty]('text-overline-style', value, '');
     }
-    get [dartx.textOverlineWidth]() {
+    get textOverlineWidth() {
       return this[dartx.getPropertyValue]('text-overline-width');
     }
-    set [dartx.textOverlineWidth](value) {
+    set textOverlineWidth(value) {
       this[dartx.setProperty]('text-overline-width', value, '');
     }
-    get [dartx.textRendering]() {
+    get textRendering() {
       return this[dartx.getPropertyValue]('text-rendering');
     }
-    set [dartx.textRendering](value) {
+    set textRendering(value) {
       this[dartx.setProperty]('text-rendering', value, '');
     }
-    get [dartx.textSecurity]() {
+    get textSecurity() {
       return this[dartx.getPropertyValue]('text-security');
     }
-    set [dartx.textSecurity](value) {
+    set textSecurity(value) {
       this[dartx.setProperty]('text-security', value, '');
     }
-    get [dartx.textShadow]() {
+    get textShadow() {
       return this[dartx.getPropertyValue]('text-shadow');
     }
-    set [dartx.textShadow](value) {
+    set textShadow(value) {
       this[dartx.setProperty]('text-shadow', value, '');
     }
-    get [dartx.textStroke]() {
+    get textStroke() {
       return this[dartx.getPropertyValue]('text-stroke');
     }
-    set [dartx.textStroke](value) {
+    set textStroke(value) {
       this[dartx.setProperty]('text-stroke', value, '');
     }
-    get [dartx.textStrokeColor]() {
+    get textStrokeColor() {
       return this[dartx.getPropertyValue]('text-stroke-color');
     }
-    set [dartx.textStrokeColor](value) {
+    set textStrokeColor(value) {
       this[dartx.setProperty]('text-stroke-color', value, '');
     }
-    get [dartx.textStrokeWidth]() {
+    get textStrokeWidth() {
       return this[dartx.getPropertyValue]('text-stroke-width');
     }
-    set [dartx.textStrokeWidth](value) {
+    set textStrokeWidth(value) {
       this[dartx.setProperty]('text-stroke-width', value, '');
     }
-    get [dartx.textTransform]() {
+    get textTransform() {
       return this[dartx.getPropertyValue]('text-transform');
     }
-    set [dartx.textTransform](value) {
+    set textTransform(value) {
       this[dartx.setProperty]('text-transform', value, '');
     }
-    get [dartx.textUnderlineColor]() {
+    get textUnderlineColor() {
       return this[dartx.getPropertyValue]('text-underline-color');
     }
-    set [dartx.textUnderlineColor](value) {
+    set textUnderlineColor(value) {
       this[dartx.setProperty]('text-underline-color', value, '');
     }
-    get [dartx.textUnderlineMode]() {
+    get textUnderlineMode() {
       return this[dartx.getPropertyValue]('text-underline-mode');
     }
-    set [dartx.textUnderlineMode](value) {
+    set textUnderlineMode(value) {
       this[dartx.setProperty]('text-underline-mode', value, '');
     }
-    get [dartx.textUnderlinePosition]() {
+    get textUnderlinePosition() {
       return this[dartx.getPropertyValue]('text-underline-position');
     }
-    set [dartx.textUnderlinePosition](value) {
+    set textUnderlinePosition(value) {
       this[dartx.setProperty]('text-underline-position', value, '');
     }
-    get [dartx.textUnderlineStyle]() {
+    get textUnderlineStyle() {
       return this[dartx.getPropertyValue]('text-underline-style');
     }
-    set [dartx.textUnderlineStyle](value) {
+    set textUnderlineStyle(value) {
       this[dartx.setProperty]('text-underline-style', value, '');
     }
-    get [dartx.textUnderlineWidth]() {
+    get textUnderlineWidth() {
       return this[dartx.getPropertyValue]('text-underline-width');
     }
-    set [dartx.textUnderlineWidth](value) {
+    set textUnderlineWidth(value) {
       this[dartx.setProperty]('text-underline-width', value, '');
     }
-    get [dartx.top]() {
+    get top() {
       return this[dartx.getPropertyValue]('top');
     }
-    set [dartx.top](value) {
+    set top(value) {
       this[dartx.setProperty]('top', value, '');
     }
-    get [dartx.touchAction]() {
+    get touchAction() {
       return this[dartx.getPropertyValue]('touch-action');
     }
-    set [dartx.touchAction](value) {
+    set touchAction(value) {
       this[dartx.setProperty]('touch-action', value, '');
     }
-    get [dartx.touchActionDelay]() {
+    get touchActionDelay() {
       return this[dartx.getPropertyValue]('touch-action-delay');
     }
-    set [dartx.touchActionDelay](value) {
+    set touchActionDelay(value) {
       this[dartx.setProperty]('touch-action-delay', value, '');
     }
-    get [dartx.transform]() {
+    get transform() {
       return this[dartx.getPropertyValue]('transform');
     }
-    set [dartx.transform](value) {
+    set transform(value) {
       this[dartx.setProperty]('transform', value, '');
     }
-    get [dartx.transformOrigin]() {
+    get transformOrigin() {
       return this[dartx.getPropertyValue]('transform-origin');
     }
-    set [dartx.transformOrigin](value) {
+    set transformOrigin(value) {
       this[dartx.setProperty]('transform-origin', value, '');
     }
-    get [dartx.transformOriginX]() {
+    get transformOriginX() {
       return this[dartx.getPropertyValue]('transform-origin-x');
     }
-    set [dartx.transformOriginX](value) {
+    set transformOriginX(value) {
       this[dartx.setProperty]('transform-origin-x', value, '');
     }
-    get [dartx.transformOriginY]() {
+    get transformOriginY() {
       return this[dartx.getPropertyValue]('transform-origin-y');
     }
-    set [dartx.transformOriginY](value) {
+    set transformOriginY(value) {
       this[dartx.setProperty]('transform-origin-y', value, '');
     }
-    get [dartx.transformOriginZ]() {
+    get transformOriginZ() {
       return this[dartx.getPropertyValue]('transform-origin-z');
     }
-    set [dartx.transformOriginZ](value) {
+    set transformOriginZ(value) {
       this[dartx.setProperty]('transform-origin-z', value, '');
     }
-    get [dartx.transformStyle]() {
+    get transformStyle() {
       return this[dartx.getPropertyValue]('transform-style');
     }
-    set [dartx.transformStyle](value) {
+    set transformStyle(value) {
       this[dartx.setProperty]('transform-style', value, '');
     }
-    get [dartx.transition]() {
+    get transition() {
       return this[dartx.getPropertyValue]('transition');
     }
-    set [dartx.transition](value) {
+    set transition(value) {
       this[dartx.setProperty]('transition', value, '');
     }
-    get [dartx.transitionDelay]() {
+    get transitionDelay() {
       return this[dartx.getPropertyValue]('transition-delay');
     }
-    set [dartx.transitionDelay](value) {
+    set transitionDelay(value) {
       this[dartx.setProperty]('transition-delay', value, '');
     }
-    get [dartx.transitionDuration]() {
+    get transitionDuration() {
       return this[dartx.getPropertyValue]('transition-duration');
     }
-    set [dartx.transitionDuration](value) {
+    set transitionDuration(value) {
       this[dartx.setProperty]('transition-duration', value, '');
     }
-    get [dartx.transitionProperty]() {
+    get transitionProperty() {
       return this[dartx.getPropertyValue]('transition-property');
     }
-    set [dartx.transitionProperty](value) {
+    set transitionProperty(value) {
       this[dartx.setProperty]('transition-property', value, '');
     }
-    get [dartx.transitionTimingFunction]() {
+    get transitionTimingFunction() {
       return this[dartx.getPropertyValue]('transition-timing-function');
     }
-    set [dartx.transitionTimingFunction](value) {
+    set transitionTimingFunction(value) {
       this[dartx.setProperty]('transition-timing-function', value, '');
     }
-    get [dartx.unicodeBidi]() {
+    get unicodeBidi() {
       return this[dartx.getPropertyValue]('unicode-bidi');
     }
-    set [dartx.unicodeBidi](value) {
+    set unicodeBidi(value) {
       this[dartx.setProperty]('unicode-bidi', value, '');
     }
-    get [dartx.unicodeRange]() {
+    get unicodeRange() {
       return this[dartx.getPropertyValue]('unicode-range');
     }
-    set [dartx.unicodeRange](value) {
+    set unicodeRange(value) {
       this[dartx.setProperty]('unicode-range', value, '');
     }
-    get [dartx.userDrag]() {
+    get userDrag() {
       return this[dartx.getPropertyValue]('user-drag');
     }
-    set [dartx.userDrag](value) {
+    set userDrag(value) {
       this[dartx.setProperty]('user-drag', value, '');
     }
-    get [dartx.userModify]() {
+    get userModify() {
       return this[dartx.getPropertyValue]('user-modify');
     }
-    set [dartx.userModify](value) {
+    set userModify(value) {
       this[dartx.setProperty]('user-modify', value, '');
     }
-    get [dartx.userSelect]() {
+    get userSelect() {
       return this[dartx.getPropertyValue]('user-select');
     }
-    set [dartx.userSelect](value) {
+    set userSelect(value) {
       this[dartx.setProperty]('user-select', value, '');
     }
-    get [dartx.userZoom]() {
+    get userZoom() {
       return this[dartx.getPropertyValue]('user-zoom');
     }
-    set [dartx.userZoom](value) {
+    set userZoom(value) {
       this[dartx.setProperty]('user-zoom', value, '');
     }
-    get [dartx.verticalAlign]() {
+    get verticalAlign() {
       return this[dartx.getPropertyValue]('vertical-align');
     }
-    set [dartx.verticalAlign](value) {
+    set verticalAlign(value) {
       this[dartx.setProperty]('vertical-align', value, '');
     }
-    get [dartx.visibility]() {
+    get visibility() {
       return this[dartx.getPropertyValue]('visibility');
     }
-    set [dartx.visibility](value) {
+    set visibility(value) {
       this[dartx.setProperty]('visibility', value, '');
     }
-    get [dartx.whiteSpace]() {
+    get whiteSpace() {
       return this[dartx.getPropertyValue]('white-space');
     }
-    set [dartx.whiteSpace](value) {
+    set whiteSpace(value) {
       this[dartx.setProperty]('white-space', value, '');
     }
-    get [dartx.widows]() {
+    get widows() {
       return this[dartx.getPropertyValue]('widows');
     }
-    set [dartx.widows](value) {
+    set widows(value) {
       this[dartx.setProperty]('widows', value, '');
     }
-    get [dartx.width]() {
+    get width() {
       return this[dartx.getPropertyValue]('width');
     }
-    set [dartx.width](value) {
+    set width(value) {
       this[dartx.setProperty]('width', value, '');
     }
-    get [dartx.willChange]() {
+    get willChange() {
       return this[dartx.getPropertyValue]('will-change');
     }
-    set [dartx.willChange](value) {
+    set willChange(value) {
       this[dartx.setProperty]('will-change', value, '');
     }
-    get [dartx.wordBreak]() {
+    get wordBreak() {
       return this[dartx.getPropertyValue]('word-break');
     }
-    set [dartx.wordBreak](value) {
+    set wordBreak(value) {
       this[dartx.setProperty]('word-break', value, '');
     }
-    get [dartx.wordSpacing]() {
+    get wordSpacing() {
       return this[dartx.getPropertyValue]('word-spacing');
     }
-    set [dartx.wordSpacing](value) {
+    set wordSpacing(value) {
       this[dartx.setProperty]('word-spacing', value, '');
     }
-    get [dartx.wordWrap]() {
+    get wordWrap() {
       return this[dartx.getPropertyValue]('word-wrap');
     }
-    set [dartx.wordWrap](value) {
+    set wordWrap(value) {
       this[dartx.setProperty]('word-wrap', value, '');
     }
-    get [dartx.wrapFlow]() {
+    get wrapFlow() {
       return this[dartx.getPropertyValue]('wrap-flow');
     }
-    set [dartx.wrapFlow](value) {
+    set wrapFlow(value) {
       this[dartx.setProperty]('wrap-flow', value, '');
     }
-    get [dartx.wrapThrough]() {
+    get wrapThrough() {
       return this[dartx.getPropertyValue]('wrap-through');
     }
-    set [dartx.wrapThrough](value) {
+    set wrapThrough(value) {
       this[dartx.setProperty]('wrap-through', value, '');
     }
-    get [dartx.writingMode]() {
+    get writingMode() {
       return this[dartx.getPropertyValue]('writing-mode');
     }
-    set [dartx.writingMode](value) {
+    set writingMode(value) {
       this[dartx.setProperty]('writing-mode', value, '');
     }
-    get [dartx.zIndex]() {
+    get zIndex() {
       return this[dartx.getPropertyValue]('z-index');
     }
-    set [dartx.zIndex](value) {
+    set zIndex(value) {
       this[dartx.setProperty]('z-index', value, '');
     }
-    get [dartx.zoom]() {
+    get zoom() {
       return this[dartx.getPropertyValue]('zoom');
     }
-    set [dartx.zoom](value) {
+    set zoom(value) {
       this[dartx.setProperty]('zoom', value, '');
     }
   }
+  dart.setSignature(CssStyleDeclarationBase, {});
+  dart.defineExtensionMembers(CssStyleDeclarationBase, [
+    'alignContent',
+    'alignContent',
+    'alignItems',
+    'alignItems',
+    'alignSelf',
+    'alignSelf',
+    'animation',
+    'animation',
+    'animationDelay',
+    'animationDelay',
+    'animationDirection',
+    'animationDirection',
+    'animationDuration',
+    'animationDuration',
+    'animationFillMode',
+    'animationFillMode',
+    'animationIterationCount',
+    'animationIterationCount',
+    'animationName',
+    'animationName',
+    'animationPlayState',
+    'animationPlayState',
+    'animationTimingFunction',
+    'animationTimingFunction',
+    'appRegion',
+    'appRegion',
+    'appearance',
+    'appearance',
+    'aspectRatio',
+    'aspectRatio',
+    'backfaceVisibility',
+    'backfaceVisibility',
+    'background',
+    'background',
+    'backgroundAttachment',
+    'backgroundAttachment',
+    'backgroundBlendMode',
+    'backgroundBlendMode',
+    'backgroundClip',
+    'backgroundClip',
+    'backgroundColor',
+    'backgroundColor',
+    'backgroundComposite',
+    'backgroundComposite',
+    'backgroundImage',
+    'backgroundImage',
+    'backgroundOrigin',
+    'backgroundOrigin',
+    'backgroundPosition',
+    'backgroundPosition',
+    'backgroundPositionX',
+    'backgroundPositionX',
+    'backgroundPositionY',
+    'backgroundPositionY',
+    'backgroundRepeat',
+    'backgroundRepeat',
+    'backgroundRepeatX',
+    'backgroundRepeatX',
+    'backgroundRepeatY',
+    'backgroundRepeatY',
+    'backgroundSize',
+    'backgroundSize',
+    'border',
+    'border',
+    'borderAfter',
+    'borderAfter',
+    'borderAfterColor',
+    'borderAfterColor',
+    'borderAfterStyle',
+    'borderAfterStyle',
+    'borderAfterWidth',
+    'borderAfterWidth',
+    'borderBefore',
+    'borderBefore',
+    'borderBeforeColor',
+    'borderBeforeColor',
+    'borderBeforeStyle',
+    'borderBeforeStyle',
+    'borderBeforeWidth',
+    'borderBeforeWidth',
+    'borderBottom',
+    'borderBottom',
+    'borderBottomColor',
+    'borderBottomColor',
+    'borderBottomLeftRadius',
+    'borderBottomLeftRadius',
+    'borderBottomRightRadius',
+    'borderBottomRightRadius',
+    'borderBottomStyle',
+    'borderBottomStyle',
+    'borderBottomWidth',
+    'borderBottomWidth',
+    'borderCollapse',
+    'borderCollapse',
+    'borderColor',
+    'borderColor',
+    'borderEnd',
+    'borderEnd',
+    'borderEndColor',
+    'borderEndColor',
+    'borderEndStyle',
+    'borderEndStyle',
+    'borderEndWidth',
+    'borderEndWidth',
+    'borderFit',
+    'borderFit',
+    'borderHorizontalSpacing',
+    'borderHorizontalSpacing',
+    'borderImage',
+    'borderImage',
+    'borderImageOutset',
+    'borderImageOutset',
+    'borderImageRepeat',
+    'borderImageRepeat',
+    'borderImageSlice',
+    'borderImageSlice',
+    'borderImageSource',
+    'borderImageSource',
+    'borderImageWidth',
+    'borderImageWidth',
+    'borderLeft',
+    'borderLeft',
+    'borderLeftColor',
+    'borderLeftColor',
+    'borderLeftStyle',
+    'borderLeftStyle',
+    'borderLeftWidth',
+    'borderLeftWidth',
+    'borderRadius',
+    'borderRadius',
+    'borderRight',
+    'borderRight',
+    'borderRightColor',
+    'borderRightColor',
+    'borderRightStyle',
+    'borderRightStyle',
+    'borderRightWidth',
+    'borderRightWidth',
+    'borderSpacing',
+    'borderSpacing',
+    'borderStart',
+    'borderStart',
+    'borderStartColor',
+    'borderStartColor',
+    'borderStartStyle',
+    'borderStartStyle',
+    'borderStartWidth',
+    'borderStartWidth',
+    'borderStyle',
+    'borderStyle',
+    'borderTop',
+    'borderTop',
+    'borderTopColor',
+    'borderTopColor',
+    'borderTopLeftRadius',
+    'borderTopLeftRadius',
+    'borderTopRightRadius',
+    'borderTopRightRadius',
+    'borderTopStyle',
+    'borderTopStyle',
+    'borderTopWidth',
+    'borderTopWidth',
+    'borderVerticalSpacing',
+    'borderVerticalSpacing',
+    'borderWidth',
+    'borderWidth',
+    'bottom',
+    'bottom',
+    'boxAlign',
+    'boxAlign',
+    'boxDecorationBreak',
+    'boxDecorationBreak',
+    'boxDirection',
+    'boxDirection',
+    'boxFlex',
+    'boxFlex',
+    'boxFlexGroup',
+    'boxFlexGroup',
+    'boxLines',
+    'boxLines',
+    'boxOrdinalGroup',
+    'boxOrdinalGroup',
+    'boxOrient',
+    'boxOrient',
+    'boxPack',
+    'boxPack',
+    'boxReflect',
+    'boxReflect',
+    'boxShadow',
+    'boxShadow',
+    'boxSizing',
+    'boxSizing',
+    'captionSide',
+    'captionSide',
+    'clear',
+    'clear',
+    'clip',
+    'clip',
+    'clipPath',
+    'clipPath',
+    'color',
+    'color',
+    'columnBreakAfter',
+    'columnBreakAfter',
+    'columnBreakBefore',
+    'columnBreakBefore',
+    'columnBreakInside',
+    'columnBreakInside',
+    'columnCount',
+    'columnCount',
+    'columnFill',
+    'columnFill',
+    'columnGap',
+    'columnGap',
+    'columnRule',
+    'columnRule',
+    'columnRuleColor',
+    'columnRuleColor',
+    'columnRuleStyle',
+    'columnRuleStyle',
+    'columnRuleWidth',
+    'columnRuleWidth',
+    'columnSpan',
+    'columnSpan',
+    'columnWidth',
+    'columnWidth',
+    'columns',
+    'columns',
+    'content',
+    'content',
+    'counterIncrement',
+    'counterIncrement',
+    'counterReset',
+    'counterReset',
+    'cursor',
+    'cursor',
+    'direction',
+    'direction',
+    'display',
+    'display',
+    'emptyCells',
+    'emptyCells',
+    'filter',
+    'filter',
+    'flex',
+    'flex',
+    'flexBasis',
+    'flexBasis',
+    'flexDirection',
+    'flexDirection',
+    'flexFlow',
+    'flexFlow',
+    'flexGrow',
+    'flexGrow',
+    'flexShrink',
+    'flexShrink',
+    'flexWrap',
+    'flexWrap',
+    'float',
+    'float',
+    'font',
+    'font',
+    'fontFamily',
+    'fontFamily',
+    'fontFeatureSettings',
+    'fontFeatureSettings',
+    'fontKerning',
+    'fontKerning',
+    'fontSize',
+    'fontSize',
+    'fontSizeDelta',
+    'fontSizeDelta',
+    'fontSmoothing',
+    'fontSmoothing',
+    'fontStretch',
+    'fontStretch',
+    'fontStyle',
+    'fontStyle',
+    'fontVariant',
+    'fontVariant',
+    'fontVariantLigatures',
+    'fontVariantLigatures',
+    'fontWeight',
+    'fontWeight',
+    'grid',
+    'grid',
+    'gridArea',
+    'gridArea',
+    'gridAutoColumns',
+    'gridAutoColumns',
+    'gridAutoFlow',
+    'gridAutoFlow',
+    'gridAutoRows',
+    'gridAutoRows',
+    'gridColumn',
+    'gridColumn',
+    'gridColumnEnd',
+    'gridColumnEnd',
+    'gridColumnStart',
+    'gridColumnStart',
+    'gridRow',
+    'gridRow',
+    'gridRowEnd',
+    'gridRowEnd',
+    'gridRowStart',
+    'gridRowStart',
+    'gridTemplate',
+    'gridTemplate',
+    'gridTemplateAreas',
+    'gridTemplateAreas',
+    'gridTemplateColumns',
+    'gridTemplateColumns',
+    'gridTemplateRows',
+    'gridTemplateRows',
+    'height',
+    'height',
+    'highlight',
+    'highlight',
+    'hyphenateCharacter',
+    'hyphenateCharacter',
+    'imageRendering',
+    'imageRendering',
+    'isolation',
+    'isolation',
+    'justifyContent',
+    'justifyContent',
+    'justifySelf',
+    'justifySelf',
+    'left',
+    'left',
+    'letterSpacing',
+    'letterSpacing',
+    'lineBoxContain',
+    'lineBoxContain',
+    'lineBreak',
+    'lineBreak',
+    'lineClamp',
+    'lineClamp',
+    'lineHeight',
+    'lineHeight',
+    'listStyle',
+    'listStyle',
+    'listStyleImage',
+    'listStyleImage',
+    'listStylePosition',
+    'listStylePosition',
+    'listStyleType',
+    'listStyleType',
+    'locale',
+    'locale',
+    'logicalHeight',
+    'logicalHeight',
+    'logicalWidth',
+    'logicalWidth',
+    'margin',
+    'margin',
+    'marginAfter',
+    'marginAfter',
+    'marginAfterCollapse',
+    'marginAfterCollapse',
+    'marginBefore',
+    'marginBefore',
+    'marginBeforeCollapse',
+    'marginBeforeCollapse',
+    'marginBottom',
+    'marginBottom',
+    'marginBottomCollapse',
+    'marginBottomCollapse',
+    'marginCollapse',
+    'marginCollapse',
+    'marginEnd',
+    'marginEnd',
+    'marginLeft',
+    'marginLeft',
+    'marginRight',
+    'marginRight',
+    'marginStart',
+    'marginStart',
+    'marginTop',
+    'marginTop',
+    'marginTopCollapse',
+    'marginTopCollapse',
+    'mask',
+    'mask',
+    'maskBoxImage',
+    'maskBoxImage',
+    'maskBoxImageOutset',
+    'maskBoxImageOutset',
+    'maskBoxImageRepeat',
+    'maskBoxImageRepeat',
+    'maskBoxImageSlice',
+    'maskBoxImageSlice',
+    'maskBoxImageSource',
+    'maskBoxImageSource',
+    'maskBoxImageWidth',
+    'maskBoxImageWidth',
+    'maskClip',
+    'maskClip',
+    'maskComposite',
+    'maskComposite',
+    'maskImage',
+    'maskImage',
+    'maskOrigin',
+    'maskOrigin',
+    'maskPosition',
+    'maskPosition',
+    'maskPositionX',
+    'maskPositionX',
+    'maskPositionY',
+    'maskPositionY',
+    'maskRepeat',
+    'maskRepeat',
+    'maskRepeatX',
+    'maskRepeatX',
+    'maskRepeatY',
+    'maskRepeatY',
+    'maskSize',
+    'maskSize',
+    'maskSourceType',
+    'maskSourceType',
+    'maxHeight',
+    'maxHeight',
+    'maxLogicalHeight',
+    'maxLogicalHeight',
+    'maxLogicalWidth',
+    'maxLogicalWidth',
+    'maxWidth',
+    'maxWidth',
+    'maxZoom',
+    'maxZoom',
+    'minHeight',
+    'minHeight',
+    'minLogicalHeight',
+    'minLogicalHeight',
+    'minLogicalWidth',
+    'minLogicalWidth',
+    'minWidth',
+    'minWidth',
+    'minZoom',
+    'minZoom',
+    'mixBlendMode',
+    'mixBlendMode',
+    'objectFit',
+    'objectFit',
+    'objectPosition',
+    'objectPosition',
+    'opacity',
+    'opacity',
+    'order',
+    'order',
+    'orientation',
+    'orientation',
+    'orphans',
+    'orphans',
+    'outline',
+    'outline',
+    'outlineColor',
+    'outlineColor',
+    'outlineOffset',
+    'outlineOffset',
+    'outlineStyle',
+    'outlineStyle',
+    'outlineWidth',
+    'outlineWidth',
+    'overflow',
+    'overflow',
+    'overflowWrap',
+    'overflowWrap',
+    'overflowX',
+    'overflowX',
+    'overflowY',
+    'overflowY',
+    'padding',
+    'padding',
+    'paddingAfter',
+    'paddingAfter',
+    'paddingBefore',
+    'paddingBefore',
+    'paddingBottom',
+    'paddingBottom',
+    'paddingEnd',
+    'paddingEnd',
+    'paddingLeft',
+    'paddingLeft',
+    'paddingRight',
+    'paddingRight',
+    'paddingStart',
+    'paddingStart',
+    'paddingTop',
+    'paddingTop',
+    'page',
+    'page',
+    'pageBreakAfter',
+    'pageBreakAfter',
+    'pageBreakBefore',
+    'pageBreakBefore',
+    'pageBreakInside',
+    'pageBreakInside',
+    'perspective',
+    'perspective',
+    'perspectiveOrigin',
+    'perspectiveOrigin',
+    'perspectiveOriginX',
+    'perspectiveOriginX',
+    'perspectiveOriginY',
+    'perspectiveOriginY',
+    'pointerEvents',
+    'pointerEvents',
+    'position',
+    'position',
+    'printColorAdjust',
+    'printColorAdjust',
+    'quotes',
+    'quotes',
+    'resize',
+    'resize',
+    'right',
+    'right',
+    'rtlOrdering',
+    'rtlOrdering',
+    'rubyPosition',
+    'rubyPosition',
+    'scrollBehavior',
+    'scrollBehavior',
+    'shapeImageThreshold',
+    'shapeImageThreshold',
+    'shapeMargin',
+    'shapeMargin',
+    'shapeOutside',
+    'shapeOutside',
+    'size',
+    'size',
+    'speak',
+    'speak',
+    'src',
+    'src',
+    'tabSize',
+    'tabSize',
+    'tableLayout',
+    'tableLayout',
+    'tapHighlightColor',
+    'tapHighlightColor',
+    'textAlign',
+    'textAlign',
+    'textAlignLast',
+    'textAlignLast',
+    'textCombine',
+    'textCombine',
+    'textDecoration',
+    'textDecoration',
+    'textDecorationColor',
+    'textDecorationColor',
+    'textDecorationLine',
+    'textDecorationLine',
+    'textDecorationStyle',
+    'textDecorationStyle',
+    'textDecorationsInEffect',
+    'textDecorationsInEffect',
+    'textEmphasis',
+    'textEmphasis',
+    'textEmphasisColor',
+    'textEmphasisColor',
+    'textEmphasisPosition',
+    'textEmphasisPosition',
+    'textEmphasisStyle',
+    'textEmphasisStyle',
+    'textFillColor',
+    'textFillColor',
+    'textIndent',
+    'textIndent',
+    'textJustify',
+    'textJustify',
+    'textLineThroughColor',
+    'textLineThroughColor',
+    'textLineThroughMode',
+    'textLineThroughMode',
+    'textLineThroughStyle',
+    'textLineThroughStyle',
+    'textLineThroughWidth',
+    'textLineThroughWidth',
+    'textOrientation',
+    'textOrientation',
+    'textOverflow',
+    'textOverflow',
+    'textOverlineColor',
+    'textOverlineColor',
+    'textOverlineMode',
+    'textOverlineMode',
+    'textOverlineStyle',
+    'textOverlineStyle',
+    'textOverlineWidth',
+    'textOverlineWidth',
+    'textRendering',
+    'textRendering',
+    'textSecurity',
+    'textSecurity',
+    'textShadow',
+    'textShadow',
+    'textStroke',
+    'textStroke',
+    'textStrokeColor',
+    'textStrokeColor',
+    'textStrokeWidth',
+    'textStrokeWidth',
+    'textTransform',
+    'textTransform',
+    'textUnderlineColor',
+    'textUnderlineColor',
+    'textUnderlineMode',
+    'textUnderlineMode',
+    'textUnderlinePosition',
+    'textUnderlinePosition',
+    'textUnderlineStyle',
+    'textUnderlineStyle',
+    'textUnderlineWidth',
+    'textUnderlineWidth',
+    'top',
+    'top',
+    'touchAction',
+    'touchAction',
+    'touchActionDelay',
+    'touchActionDelay',
+    'transform',
+    'transform',
+    'transformOrigin',
+    'transformOrigin',
+    'transformOriginX',
+    'transformOriginX',
+    'transformOriginY',
+    'transformOriginY',
+    'transformOriginZ',
+    'transformOriginZ',
+    'transformStyle',
+    'transformStyle',
+    'transition',
+    'transition',
+    'transitionDelay',
+    'transitionDelay',
+    'transitionDuration',
+    'transitionDuration',
+    'transitionProperty',
+    'transitionProperty',
+    'transitionTimingFunction',
+    'transitionTimingFunction',
+    'unicodeBidi',
+    'unicodeBidi',
+    'unicodeRange',
+    'unicodeRange',
+    'userDrag',
+    'userDrag',
+    'userModify',
+    'userModify',
+    'userSelect',
+    'userSelect',
+    'userZoom',
+    'userZoom',
+    'verticalAlign',
+    'verticalAlign',
+    'visibility',
+    'visibility',
+    'whiteSpace',
+    'whiteSpace',
+    'widows',
+    'widows',
+    'width',
+    'width',
+    'willChange',
+    'willChange',
+    'wordBreak',
+    'wordBreak',
+    'wordSpacing',
+    'wordSpacing',
+    'wordWrap',
+    'wordWrap',
+    'wrapFlow',
+    'wrapFlow',
+    'wrapThrough',
+    'wrapThrough',
+    'writingMode',
+    'writingMode',
+    'zIndex',
+    'zIndex',
+    'zoom',
+    'zoom'
+  ]);
   CssStyleDeclarationBase[dart.owner] = exports;
   dart.defineExtensionNames([
     'getPropertyValue',
@@ -12976,71 +13663,71 @@
       'fillRange'
     ]);
     class ImmutableListMixin extends core.Object {
-      get [dartx.iterator]() {
+      get iterator() {
         return new (FixedSizeListIterator$(E))(this);
       }
       [Symbol.iterator]() {
         return new dart.JsIterator(this[dartx.iterator]);
       }
-      [dartx.add](value) {
+      add(value) {
         dart.as(value, E);
         dart.throw(new core.UnsupportedError("Cannot add to immutable List."));
       }
-      [dartx.addAll](iterable) {
+      addAll(iterable) {
         dart.as(iterable, core.Iterable$(E));
         dart.throw(new core.UnsupportedError("Cannot add to immutable List."));
       }
-      [dartx.sort](compare) {
+      sort(compare) {
         if (compare === void 0) compare = null;
         dart.as(compare, dart.functionType(core.int, [E, E]));
         dart.throw(new core.UnsupportedError("Cannot sort immutable List."));
       }
-      [dartx.shuffle](random) {
+      shuffle(random) {
         if (random === void 0) random = null;
         dart.throw(new core.UnsupportedError("Cannot shuffle immutable List."));
       }
-      [dartx.insert](index, element) {
+      insert(index, element) {
         dart.as(element, E);
         dart.throw(new core.UnsupportedError("Cannot add to immutable List."));
       }
-      [dartx.insertAll](index, iterable) {
+      insertAll(index, iterable) {
         dart.as(iterable, core.Iterable$(E));
         dart.throw(new core.UnsupportedError("Cannot add to immutable List."));
       }
-      [dartx.setAll](index, iterable) {
+      setAll(index, iterable) {
         dart.as(iterable, core.Iterable$(E));
         dart.throw(new core.UnsupportedError("Cannot modify an immutable List."));
       }
-      [dartx.removeAt](pos) {
+      removeAt(pos) {
         dart.throw(new core.UnsupportedError("Cannot remove from immutable List."));
       }
-      [dartx.removeLast]() {
+      removeLast() {
         dart.throw(new core.UnsupportedError("Cannot remove from immutable List."));
       }
-      [dartx.remove](object) {
+      remove(object) {
         dart.throw(new core.UnsupportedError("Cannot remove from immutable List."));
       }
-      [dartx.removeWhere](test) {
+      removeWhere(test) {
         dart.as(test, dart.functionType(core.bool, [E]));
         dart.throw(new core.UnsupportedError("Cannot remove from immutable List."));
       }
-      [dartx.retainWhere](test) {
+      retainWhere(test) {
         dart.as(test, dart.functionType(core.bool, [E]));
         dart.throw(new core.UnsupportedError("Cannot remove from immutable List."));
       }
-      [dartx.setRange](start, end, iterable, skipCount) {
+      setRange(start, end, iterable, skipCount) {
         dart.as(iterable, core.Iterable$(E));
         if (skipCount === void 0) skipCount = 0;
         dart.throw(new core.UnsupportedError("Cannot setRange on immutable List."));
       }
-      [dartx.removeRange](start, end) {
+      removeRange(start, end) {
         dart.throw(new core.UnsupportedError("Cannot removeRange on immutable List."));
       }
-      [dartx.replaceRange](start, end, iterable) {
+      replaceRange(start, end, iterable) {
         dart.as(iterable, core.Iterable$(E));
         dart.throw(new core.UnsupportedError("Cannot modify an immutable List."));
       }
-      [dartx.fillRange](start, end, fillValue) {
+      fillRange(start, end, fillValue) {
         if (fillValue === void 0) fillValue = null;
         dart.as(fillValue, E);
         dart.throw(new core.UnsupportedError("Cannot modify an immutable List."));
@@ -13067,6 +13754,25 @@
         [dartx.fillRange]: [dart.void, [core.int, core.int], [E]]
       })
     });
+    dart.defineExtensionMembers(ImmutableListMixin, [
+      'add',
+      'addAll',
+      'sort',
+      'shuffle',
+      'insert',
+      'insertAll',
+      'setAll',
+      'removeAt',
+      'removeLast',
+      'remove',
+      'removeWhere',
+      'retainWhere',
+      'setRange',
+      'removeRange',
+      'replaceRange',
+      'fillRange',
+      'iterator'
+    ]);
     ImmutableListMixin[dart.owner] = exports;
     return ImmutableListMixin;
   });
@@ -15182,7 +15888,6 @@
   dart.setSignature(_GeopositionWrapper, {
     constructors: () => ({_GeopositionWrapper: [_GeopositionWrapper, [dart.dynamic]]})
   });
-  dart.defineExtensionMembers(_GeopositionWrapper, ['coords', 'timestamp']);
   _GeopositionWrapper[dart.owner] = exports;
   dart.defineExtensionNames([
     'coords',
@@ -15263,160 +15968,160 @@
     static _() {
       dart.throw(new core.UnsupportedError("Not supported"));
     }
-    get [dartx.onAbort]() {
+    get onAbort() {
       return GlobalEventHandlers.abortEvent.forTarget(this);
     }
-    get [dartx.onBlur]() {
+    get onBlur() {
       return GlobalEventHandlers.blurEvent.forTarget(this);
     }
-    get [dartx.onCanPlay]() {
+    get onCanPlay() {
       return GlobalEventHandlers.canPlayEvent.forTarget(this);
     }
-    get [dartx.onCanPlayThrough]() {
+    get onCanPlayThrough() {
       return GlobalEventHandlers.canPlayThroughEvent.forTarget(this);
     }
-    get [dartx.onChange]() {
+    get onChange() {
       return GlobalEventHandlers.changeEvent.forTarget(this);
     }
-    get [dartx.onClick]() {
+    get onClick() {
       return GlobalEventHandlers.clickEvent.forTarget(this);
     }
-    get [dartx.onContextMenu]() {
+    get onContextMenu() {
       return GlobalEventHandlers.contextMenuEvent.forTarget(this);
     }
-    get [dartx.onDoubleClick]() {
+    get onDoubleClick() {
       return GlobalEventHandlers.doubleClickEvent.forTarget(this);
     }
-    get [dartx.onDrag]() {
+    get onDrag() {
       return GlobalEventHandlers.dragEvent.forTarget(this);
     }
-    get [dartx.onDragEnd]() {
+    get onDragEnd() {
       return GlobalEventHandlers.dragEndEvent.forTarget(this);
     }
-    get [dartx.onDragEnter]() {
+    get onDragEnter() {
       return GlobalEventHandlers.dragEnterEvent.forTarget(this);
     }
-    get [dartx.onDragLeave]() {
+    get onDragLeave() {
       return GlobalEventHandlers.dragLeaveEvent.forTarget(this);
     }
-    get [dartx.onDragOver]() {
+    get onDragOver() {
       return GlobalEventHandlers.dragOverEvent.forTarget(this);
     }
-    get [dartx.onDragStart]() {
+    get onDragStart() {
       return GlobalEventHandlers.dragStartEvent.forTarget(this);
     }
-    get [dartx.onDrop]() {
+    get onDrop() {
       return GlobalEventHandlers.dropEvent.forTarget(this);
     }
-    get [dartx.onDurationChange]() {
+    get onDurationChange() {
       return GlobalEventHandlers.durationChangeEvent.forTarget(this);
     }
-    get [dartx.onEmptied]() {
+    get onEmptied() {
       return GlobalEventHandlers.emptiedEvent.forTarget(this);
     }
-    get [dartx.onEnded]() {
+    get onEnded() {
       return GlobalEventHandlers.endedEvent.forTarget(this);
     }
-    get [dartx.onError]() {
+    get onError() {
       return GlobalEventHandlers.errorEvent.forTarget(this);
     }
-    get [dartx.onFocus]() {
+    get onFocus() {
       return GlobalEventHandlers.focusEvent.forTarget(this);
     }
-    get [dartx.onInput]() {
+    get onInput() {
       return GlobalEventHandlers.inputEvent.forTarget(this);
     }
-    get [dartx.onInvalid]() {
+    get onInvalid() {
       return GlobalEventHandlers.invalidEvent.forTarget(this);
     }
-    get [dartx.onKeyDown]() {
+    get onKeyDown() {
       return GlobalEventHandlers.keyDownEvent.forTarget(this);
     }
-    get [dartx.onKeyPress]() {
+    get onKeyPress() {
       return GlobalEventHandlers.keyPressEvent.forTarget(this);
     }
-    get [dartx.onKeyUp]() {
+    get onKeyUp() {
       return GlobalEventHandlers.keyUpEvent.forTarget(this);
     }
-    get [dartx.onLoad]() {
+    get onLoad() {
       return GlobalEventHandlers.loadEvent.forTarget(this);
     }
-    get [dartx.onLoadedData]() {
+    get onLoadedData() {
       return GlobalEventHandlers.loadedDataEvent.forTarget(this);
     }
-    get [dartx.onLoadedMetadata]() {
+    get onLoadedMetadata() {
       return GlobalEventHandlers.loadedMetadataEvent.forTarget(this);
     }
-    get [dartx.onMouseDown]() {
+    get onMouseDown() {
       return GlobalEventHandlers.mouseDownEvent.forTarget(this);
     }
-    get [dartx.onMouseEnter]() {
+    get onMouseEnter() {
       return GlobalEventHandlers.mouseEnterEvent.forTarget(this);
     }
-    get [dartx.onMouseLeave]() {
+    get onMouseLeave() {
       return GlobalEventHandlers.mouseLeaveEvent.forTarget(this);
     }
-    get [dartx.onMouseMove]() {
+    get onMouseMove() {
       return GlobalEventHandlers.mouseMoveEvent.forTarget(this);
     }
-    get [dartx.onMouseOut]() {
+    get onMouseOut() {
       return GlobalEventHandlers.mouseOutEvent.forTarget(this);
     }
-    get [dartx.onMouseOver]() {
+    get onMouseOver() {
       return GlobalEventHandlers.mouseOverEvent.forTarget(this);
     }
-    get [dartx.onMouseUp]() {
+    get onMouseUp() {
       return GlobalEventHandlers.mouseUpEvent.forTarget(this);
     }
-    get [dartx.onMouseWheel]() {
+    get onMouseWheel() {
       return GlobalEventHandlers.mouseWheelEvent.forTarget(this);
     }
-    get [dartx.onPause]() {
+    get onPause() {
       return GlobalEventHandlers.pauseEvent.forTarget(this);
     }
-    get [dartx.onPlay]() {
+    get onPlay() {
       return GlobalEventHandlers.playEvent.forTarget(this);
     }
-    get [dartx.onPlaying]() {
+    get onPlaying() {
       return GlobalEventHandlers.playingEvent.forTarget(this);
     }
-    get [dartx.onRateChange]() {
+    get onRateChange() {
       return GlobalEventHandlers.rateChangeEvent.forTarget(this);
     }
-    get [dartx.onReset]() {
+    get onReset() {
       return GlobalEventHandlers.resetEvent.forTarget(this);
     }
-    get [dartx.onResize]() {
+    get onResize() {
       return GlobalEventHandlers.resizeEvent.forTarget(this);
     }
-    get [dartx.onScroll]() {
+    get onScroll() {
       return GlobalEventHandlers.scrollEvent.forTarget(this);
     }
-    get [dartx.onSeeked]() {
+    get onSeeked() {
       return GlobalEventHandlers.seekedEvent.forTarget(this);
     }
-    get [dartx.onSeeking]() {
+    get onSeeking() {
       return GlobalEventHandlers.seekingEvent.forTarget(this);
     }
-    get [dartx.onSelect]() {
+    get onSelect() {
       return GlobalEventHandlers.selectEvent.forTarget(this);
     }
-    get [dartx.onStalled]() {
+    get onStalled() {
       return GlobalEventHandlers.stalledEvent.forTarget(this);
     }
-    get [dartx.onSubmit]() {
+    get onSubmit() {
       return GlobalEventHandlers.submitEvent.forTarget(this);
     }
-    get [dartx.onSuspend]() {
+    get onSuspend() {
       return GlobalEventHandlers.suspendEvent.forTarget(this);
     }
-    get [dartx.onTimeUpdate]() {
+    get onTimeUpdate() {
       return GlobalEventHandlers.timeUpdateEvent.forTarget(this);
     }
-    get [dartx.onVolumeChange]() {
+    get onVolumeChange() {
       return GlobalEventHandlers.volumeChangeEvent.forTarget(this);
     }
-    get [dartx.onWaiting]() {
+    get onWaiting() {
       return GlobalEventHandlers.waitingEvent.forTarget(this);
     }
   }
@@ -15424,6 +16129,60 @@
   dart.setSignature(GlobalEventHandlers, {
     constructors: () => ({_: [GlobalEventHandlers, []]})
   });
+  dart.defineExtensionMembers(GlobalEventHandlers, [
+    'onAbort',
+    'onBlur',
+    'onCanPlay',
+    'onCanPlayThrough',
+    'onChange',
+    'onClick',
+    'onContextMenu',
+    'onDoubleClick',
+    'onDrag',
+    'onDragEnd',
+    'onDragEnter',
+    'onDragLeave',
+    'onDragOver',
+    'onDragStart',
+    'onDrop',
+    'onDurationChange',
+    'onEmptied',
+    'onEnded',
+    'onError',
+    'onFocus',
+    'onInput',
+    'onInvalid',
+    'onKeyDown',
+    'onKeyPress',
+    'onKeyUp',
+    'onLoad',
+    'onLoadedData',
+    'onLoadedMetadata',
+    'onMouseDown',
+    'onMouseEnter',
+    'onMouseLeave',
+    'onMouseMove',
+    'onMouseOut',
+    'onMouseOver',
+    'onMouseUp',
+    'onMouseWheel',
+    'onPause',
+    'onPlay',
+    'onPlaying',
+    'onRateChange',
+    'onReset',
+    'onResize',
+    'onScroll',
+    'onSeeked',
+    'onSeeking',
+    'onSelect',
+    'onStalled',
+    'onSubmit',
+    'onSuspend',
+    'onTimeUpdate',
+    'onVolumeChange',
+    'onWaiting'
+  ]);
   GlobalEventHandlers[dart.metadata] = () => [dart.const(new _metadata.DocsEditable()), dart.const(new _metadata.DomName('GlobalEventHandlers')), dart.const(new _metadata.Experimental())];
   GlobalEventHandlers[dart.owner] = exports;
   dart.defineLazyProperties(GlobalEventHandlers, {
@@ -16317,11 +17076,11 @@
       }
       let xhr = new XDomainRequest();
       xhr.open(method, url);
-      xhr.onload = dart.dcall(/* Unimplemented unknown name */convertDartClosureToJS, dart.fn(e => {
+      xhr.onload = convertDartClosureToJS(dart.fn(e => {
         let response = xhr.responseText;
         completer.complete(response);
       }), 1);
-      xhr.onerror = dart.dcall(/* Unimplemented unknown name */convertDartClosureToJS, dart.fn(e => {
+      xhr.onerror = convertDartClosureToJS(dart.fn(e => {
         completer.completeError(e);
       }), 1);
       xhr.onprogress = {};
@@ -17269,44 +18028,23 @@
       this[dartx.name] = null;
       this[dartx.value] = null;
     }
-    get [dartx.autofocus]() {
-      return this.autofocus;
-    }
-    set [dartx.autofocus](value) {
-      this.autofocus = value;
-    }
-    get [dartx.disabled]() {
-      return this.disabled;
-    }
-    set [dartx.disabled](value) {
-      this.disabled = value;
-    }
-    get [dartx.incremental]() {
-      return this.incremental;
-    }
-    set [dartx.incremental](value) {
-      this.incremental = value;
-    }
-    get [dartx.indeterminate]() {
-      return this.indeterminate;
-    }
-    set [dartx.indeterminate](value) {
-      this.indeterminate = value;
-    }
-    get [dartx.name]() {
-      return this.name;
-    }
-    set [dartx.name](value) {
-      this.name = value;
-    }
-    get [dartx.value]() {
-      return this.value;
-    }
-    set [dartx.value](value) {
-      this.value = value;
-    }
   }
   InputElementBase[dart.implements] = () => [Element];
+  dart.setSignature(InputElementBase, {});
+  dart.defineExtensionMembers(InputElementBase, [
+    'autofocus',
+    'autofocus',
+    'disabled',
+    'disabled',
+    'incremental',
+    'incremental',
+    'indeterminate',
+    'indeterminate',
+    'name',
+    'name',
+    'value',
+    'value'
+  ]);
   InputElementBase[dart.owner] = exports;
   class HiddenInputElement extends core.Object {
     static new() {
@@ -17343,68 +18081,31 @@
       this[dartx.selectionEnd] = null;
       this[dartx.selectionStart] = null;
     }
-    get [dartx.autocomplete]() {
-      return this.autocomplete;
-    }
-    set [dartx.autocomplete](value) {
-      this.autocomplete = value;
-    }
-    get [dartx.maxLength]() {
-      return this.maxLength;
-    }
-    set [dartx.maxLength](value) {
-      this.maxLength = value;
-    }
-    get [dartx.pattern]() {
-      return this.pattern;
-    }
-    set [dartx.pattern](value) {
-      this.pattern = value;
-    }
-    get [dartx.placeholder]() {
-      return this.placeholder;
-    }
-    set [dartx.placeholder](value) {
-      this.placeholder = value;
-    }
-    get [dartx.readOnly]() {
-      return this.readOnly;
-    }
-    set [dartx.readOnly](value) {
-      this.readOnly = value;
-    }
-    get [dartx.required]() {
-      return this.required;
-    }
-    set [dartx.required](value) {
-      this.required = value;
-    }
-    get [dartx.size]() {
-      return this.size;
-    }
-    set [dartx.size](value) {
-      this.size = value;
-    }
-    get [dartx.selectionDirection]() {
-      return this.selectionDirection;
-    }
-    set [dartx.selectionDirection](value) {
-      this.selectionDirection = value;
-    }
-    get [dartx.selectionEnd]() {
-      return this.selectionEnd;
-    }
-    set [dartx.selectionEnd](value) {
-      this.selectionEnd = value;
-    }
-    get [dartx.selectionStart]() {
-      return this.selectionStart;
-    }
-    set [dartx.selectionStart](value) {
-      this.selectionStart = value;
-    }
   }
   TextInputElementBase[dart.implements] = () => [InputElementBase];
+  dart.setSignature(TextInputElementBase, {});
+  dart.defineExtensionMembers(TextInputElementBase, [
+    'autocomplete',
+    'autocomplete',
+    'maxLength',
+    'maxLength',
+    'pattern',
+    'pattern',
+    'placeholder',
+    'placeholder',
+    'readOnly',
+    'readOnly',
+    'required',
+    'required',
+    'size',
+    'size',
+    'selectionDirection',
+    'selectionDirection',
+    'selectionEnd',
+    'selectionEnd',
+    'selectionStart',
+    'selectionStart'
+  ]);
   TextInputElementBase[dart.owner] = exports;
   dart.defineExtensionNames([
     'dirName'
@@ -17413,12 +18114,6 @@
     static new() {
       return InputElement.new({type: 'search'});
     }
-    get [dartx.dirName]() {
-      return this.dirName;
-    }
-    set [dartx.dirName](value) {
-      this.dirName = value;
-    }
     static get supported() {
       return InputElement.new({type: 'search'})[dartx.type] == 'search';
     }
@@ -17427,6 +18122,7 @@
   dart.setSignature(SearchInputElement, {
     constructors: () => ({new: [SearchInputElement, []]})
   });
+  dart.defineExtensionMembers(SearchInputElement, ['dirName', 'dirName']);
   SearchInputElement[dart.metadata] = () => [dart.const(new _metadata.SupportedBrowser(_metadata.SupportedBrowser.CHROME)), dart.const(new _metadata.SupportedBrowser(_metadata.SupportedBrowser.FIREFOX)), dart.const(new _metadata.SupportedBrowser(_metadata.SupportedBrowser.IE, '10')), dart.const(new _metadata.SupportedBrowser(_metadata.SupportedBrowser.SAFARI))];
   SearchInputElement[dart.owner] = exports;
   dart.defineExtensionNames([
@@ -17436,17 +18132,12 @@
     static new() {
       return InputElement.new({type: 'text'});
     }
-    get [dartx.dirName]() {
-      return this.dirName;
-    }
-    set [dartx.dirName](value) {
-      this.dirName = value;
-    }
   }
   TextInputElement[dart.implements] = () => [TextInputElementBase];
   dart.setSignature(TextInputElement, {
     constructors: () => ({new: [TextInputElement, []]})
   });
+  dart.defineExtensionMembers(TextInputElement, ['dirName', 'dirName']);
   TextInputElement[dart.owner] = exports;
   class UrlInputElement extends core.Object {
     static new() {
@@ -17491,60 +18182,6 @@
     static new() {
       return InputElement.new({type: 'email'});
     }
-    get [dartx.autocomplete]() {
-      return this.autocomplete;
-    }
-    set [dartx.autocomplete](value) {
-      this.autocomplete = value;
-    }
-    get [dartx.autofocus]() {
-      return this.autofocus;
-    }
-    set [dartx.autofocus](value) {
-      this.autofocus = value;
-    }
-    get [dartx.maxLength]() {
-      return this.maxLength;
-    }
-    set [dartx.maxLength](value) {
-      this.maxLength = value;
-    }
-    get [dartx.multiple]() {
-      return this.multiple;
-    }
-    set [dartx.multiple](value) {
-      this.multiple = value;
-    }
-    get [dartx.pattern]() {
-      return this.pattern;
-    }
-    set [dartx.pattern](value) {
-      this.pattern = value;
-    }
-    get [dartx.placeholder]() {
-      return this.placeholder;
-    }
-    set [dartx.placeholder](value) {
-      this.placeholder = value;
-    }
-    get [dartx.readOnly]() {
-      return this.readOnly;
-    }
-    set [dartx.readOnly](value) {
-      this.readOnly = value;
-    }
-    get [dartx.required]() {
-      return this.required;
-    }
-    set [dartx.required](value) {
-      this.required = value;
-    }
-    get [dartx.size]() {
-      return this.size;
-    }
-    set [dartx.size](value) {
-      this.size = value;
-    }
     static get supported() {
       return InputElement.new({type: 'email'})[dartx.type] == 'email';
     }
@@ -17553,6 +18190,26 @@
   dart.setSignature(EmailInputElement, {
     constructors: () => ({new: [EmailInputElement, []]})
   });
+  dart.defineExtensionMembers(EmailInputElement, [
+    'autocomplete',
+    'autocomplete',
+    'autofocus',
+    'autofocus',
+    'maxLength',
+    'maxLength',
+    'multiple',
+    'multiple',
+    'pattern',
+    'pattern',
+    'placeholder',
+    'placeholder',
+    'readOnly',
+    'readOnly',
+    'required',
+    'required',
+    'size',
+    'size'
+  ]);
   EmailInputElement[dart.metadata] = () => [dart.const(new _metadata.SupportedBrowser(_metadata.SupportedBrowser.CHROME)), dart.const(new _metadata.SupportedBrowser(_metadata.SupportedBrowser.FIREFOX)), dart.const(new _metadata.SupportedBrowser(_metadata.SupportedBrowser.IE, '10')), dart.const(new _metadata.SupportedBrowser(_metadata.SupportedBrowser.SAFARI))];
   EmailInputElement[dart.owner] = exports;
   class PasswordInputElement extends core.Object {
@@ -17578,32 +18235,19 @@
       this[dartx.step] = null;
       this[dartx.valueAsNumber] = null;
     }
-    get [dartx.max]() {
-      return this.max;
-    }
-    set [dartx.max](value) {
-      this.max = value;
-    }
-    get [dartx.min]() {
-      return this.min;
-    }
-    set [dartx.min](value) {
-      this.min = value;
-    }
-    get [dartx.step]() {
-      return this.step;
-    }
-    set [dartx.step](value) {
-      this.step = value;
-    }
-    get [dartx.valueAsNumber]() {
-      return this.valueAsNumber;
-    }
-    set [dartx.valueAsNumber](value) {
-      this.valueAsNumber = value;
-    }
   }
   RangeInputElementBase[dart.implements] = () => [InputElementBase];
+  dart.setSignature(RangeInputElementBase, {});
+  dart.defineExtensionMembers(RangeInputElementBase, [
+    'max',
+    'max',
+    'min',
+    'min',
+    'step',
+    'step',
+    'valueAsNumber',
+    'valueAsNumber'
+  ]);
   RangeInputElementBase[dart.owner] = exports;
   dart.defineExtensionNames([
     'valueAsDate',
@@ -17614,24 +18258,6 @@
     static new() {
       return InputElement.new({type: 'date'});
     }
-    get [dartx.valueAsDate]() {
-      return this.valueAsDate;
-    }
-    set [dartx.valueAsDate](value) {
-      this.valueAsDate = value;
-    }
-    get [dartx.readOnly]() {
-      return this.readOnly;
-    }
-    set [dartx.readOnly](value) {
-      this.readOnly = value;
-    }
-    get [dartx.required]() {
-      return this.required;
-    }
-    set [dartx.required](value) {
-      this.required = value;
-    }
     static get supported() {
       return InputElement.new({type: 'date'})[dartx.type] == 'date';
     }
@@ -17640,6 +18266,14 @@
   dart.setSignature(DateInputElement, {
     constructors: () => ({new: [DateInputElement, []]})
   });
+  dart.defineExtensionMembers(DateInputElement, [
+    'valueAsDate',
+    'valueAsDate',
+    'readOnly',
+    'readOnly',
+    'required',
+    'required'
+  ]);
   DateInputElement[dart.metadata] = () => [dart.const(new _metadata.SupportedBrowser(_metadata.SupportedBrowser.CHROME, '25')), dart.const(new _metadata.Experimental())];
   DateInputElement[dart.owner] = exports;
   dart.defineExtensionNames([
@@ -17651,24 +18285,6 @@
     static new() {
       return InputElement.new({type: 'month'});
     }
-    get [dartx.valueAsDate]() {
-      return this.valueAsDate;
-    }
-    set [dartx.valueAsDate](value) {
-      this.valueAsDate = value;
-    }
-    get [dartx.readOnly]() {
-      return this.readOnly;
-    }
-    set [dartx.readOnly](value) {
-      this.readOnly = value;
-    }
-    get [dartx.required]() {
-      return this.required;
-    }
-    set [dartx.required](value) {
-      this.required = value;
-    }
     static get supported() {
       return InputElement.new({type: 'month'})[dartx.type] == 'month';
     }
@@ -17677,6 +18293,14 @@
   dart.setSignature(MonthInputElement, {
     constructors: () => ({new: [MonthInputElement, []]})
   });
+  dart.defineExtensionMembers(MonthInputElement, [
+    'valueAsDate',
+    'valueAsDate',
+    'readOnly',
+    'readOnly',
+    'required',
+    'required'
+  ]);
   MonthInputElement[dart.metadata] = () => [dart.const(new _metadata.SupportedBrowser(_metadata.SupportedBrowser.CHROME, '25')), dart.const(new _metadata.Experimental())];
   MonthInputElement[dart.owner] = exports;
   dart.defineExtensionNames([
@@ -17688,24 +18312,6 @@
     static new() {
       return InputElement.new({type: 'week'});
     }
-    get [dartx.valueAsDate]() {
-      return this.valueAsDate;
-    }
-    set [dartx.valueAsDate](value) {
-      this.valueAsDate = value;
-    }
-    get [dartx.readOnly]() {
-      return this.readOnly;
-    }
-    set [dartx.readOnly](value) {
-      this.readOnly = value;
-    }
-    get [dartx.required]() {
-      return this.required;
-    }
-    set [dartx.required](value) {
-      this.required = value;
-    }
     static get supported() {
       return InputElement.new({type: 'week'})[dartx.type] == 'week';
     }
@@ -17714,6 +18320,14 @@
   dart.setSignature(WeekInputElement, {
     constructors: () => ({new: [WeekInputElement, []]})
   });
+  dart.defineExtensionMembers(WeekInputElement, [
+    'valueAsDate',
+    'valueAsDate',
+    'readOnly',
+    'readOnly',
+    'required',
+    'required'
+  ]);
   WeekInputElement[dart.metadata] = () => [dart.const(new _metadata.SupportedBrowser(_metadata.SupportedBrowser.CHROME, '25')), dart.const(new _metadata.Experimental())];
   WeekInputElement[dart.owner] = exports;
   dart.defineExtensionNames([
@@ -17725,24 +18339,6 @@
     static new() {
       return InputElement.new({type: 'time'});
     }
-    get [dartx.valueAsDate]() {
-      return this.valueAsDate;
-    }
-    set [dartx.valueAsDate](value) {
-      this.valueAsDate = value;
-    }
-    get [dartx.readOnly]() {
-      return this.readOnly;
-    }
-    set [dartx.readOnly](value) {
-      this.readOnly = value;
-    }
-    get [dartx.required]() {
-      return this.required;
-    }
-    set [dartx.required](value) {
-      this.required = value;
-    }
     static get supported() {
       return InputElement.new({type: 'time'})[dartx.type] == 'time';
     }
@@ -17751,6 +18347,14 @@
   dart.setSignature(TimeInputElement, {
     constructors: () => ({new: [TimeInputElement, []]})
   });
+  dart.defineExtensionMembers(TimeInputElement, [
+    'valueAsDate',
+    'valueAsDate',
+    'readOnly',
+    'readOnly',
+    'required',
+    'required'
+  ]);
   TimeInputElement[dart.metadata] = () => [dart.const(new _metadata.SupportedBrowser(_metadata.SupportedBrowser.CHROME)), dart.const(new _metadata.Experimental())];
   TimeInputElement[dart.owner] = exports;
   dart.defineExtensionNames([
@@ -17761,18 +18365,6 @@
     static new() {
       return InputElement.new({type: 'datetime-local'});
     }
-    get [dartx.readOnly]() {
-      return this.readOnly;
-    }
-    set [dartx.readOnly](value) {
-      this.readOnly = value;
-    }
-    get [dartx.required]() {
-      return this.required;
-    }
-    set [dartx.required](value) {
-      this.required = value;
-    }
     static get supported() {
       return InputElement.new({type: 'datetime-local'})[dartx.type] == 'datetime-local';
     }
@@ -17781,6 +18373,7 @@
   dart.setSignature(LocalDateTimeInputElement, {
     constructors: () => ({new: [LocalDateTimeInputElement, []]})
   });
+  dart.defineExtensionMembers(LocalDateTimeInputElement, ['readOnly', 'readOnly', 'required', 'required']);
   LocalDateTimeInputElement[dart.metadata] = () => [dart.const(new _metadata.SupportedBrowser(_metadata.SupportedBrowser.CHROME, '25')), dart.const(new _metadata.Experimental())];
   LocalDateTimeInputElement[dart.owner] = exports;
   dart.defineExtensionNames([
@@ -17792,24 +18385,6 @@
     static new() {
       return InputElement.new({type: 'number'});
     }
-    get [dartx.placeholder]() {
-      return this.placeholder;
-    }
-    set [dartx.placeholder](value) {
-      this.placeholder = value;
-    }
-    get [dartx.readOnly]() {
-      return this.readOnly;
-    }
-    set [dartx.readOnly](value) {
-      this.readOnly = value;
-    }
-    get [dartx.required]() {
-      return this.required;
-    }
-    set [dartx.required](value) {
-      this.required = value;
-    }
     static get supported() {
       return InputElement.new({type: 'number'})[dartx.type] == 'number';
     }
@@ -17818,6 +18393,14 @@
   dart.setSignature(NumberInputElement, {
     constructors: () => ({new: [NumberInputElement, []]})
   });
+  dart.defineExtensionMembers(NumberInputElement, [
+    'placeholder',
+    'placeholder',
+    'readOnly',
+    'readOnly',
+    'required',
+    'required'
+  ]);
   NumberInputElement[dart.metadata] = () => [dart.const(new _metadata.SupportedBrowser(_metadata.SupportedBrowser.CHROME)), dart.const(new _metadata.SupportedBrowser(_metadata.SupportedBrowser.IE)), dart.const(new _metadata.SupportedBrowser(_metadata.SupportedBrowser.SAFARI)), dart.const(new _metadata.Experimental())];
   NumberInputElement[dart.owner] = exports;
   class RangeInputElement extends core.Object {
@@ -17842,23 +18425,12 @@
     static new() {
       return InputElement.new({type: 'checkbox'});
     }
-    get [dartx.checked]() {
-      return this.checked;
-    }
-    set [dartx.checked](value) {
-      this.checked = value;
-    }
-    get [dartx.required]() {
-      return this.required;
-    }
-    set [dartx.required](value) {
-      this.required = value;
-    }
   }
   CheckboxInputElement[dart.implements] = () => [InputElementBase];
   dart.setSignature(CheckboxInputElement, {
     constructors: () => ({new: [CheckboxInputElement, []]})
   });
+  dart.defineExtensionMembers(CheckboxInputElement, ['checked', 'checked', 'required', 'required']);
   CheckboxInputElement[dart.owner] = exports;
   dart.defineExtensionNames([
     'checked',
@@ -17868,23 +18440,12 @@
     static new() {
       return InputElement.new({type: 'radio'});
     }
-    get [dartx.checked]() {
-      return this.checked;
-    }
-    set [dartx.checked](value) {
-      this.checked = value;
-    }
-    get [dartx.required]() {
-      return this.required;
-    }
-    set [dartx.required](value) {
-      this.required = value;
-    }
   }
   RadioButtonInputElement[dart.implements] = () => [InputElementBase];
   dart.setSignature(RadioButtonInputElement, {
     constructors: () => ({new: [RadioButtonInputElement, []]})
   });
+  dart.defineExtensionMembers(RadioButtonInputElement, ['checked', 'checked', 'required', 'required']);
   RadioButtonInputElement[dart.owner] = exports;
   dart.defineExtensionNames([
     'accept',
@@ -17896,35 +18457,21 @@
     static new() {
       return InputElement.new({type: 'file'});
     }
-    get [dartx.accept]() {
-      return this.accept;
-    }
-    set [dartx.accept](value) {
-      this.accept = value;
-    }
-    get [dartx.multiple]() {
-      return this.multiple;
-    }
-    set [dartx.multiple](value) {
-      this.multiple = value;
-    }
-    get [dartx.required]() {
-      return this.required;
-    }
-    set [dartx.required](value) {
-      this.required = value;
-    }
-    get [dartx.files]() {
-      return this.files;
-    }
-    set [dartx.files](value) {
-      this.files = value;
-    }
   }
   FileUploadInputElement[dart.implements] = () => [InputElementBase];
   dart.setSignature(FileUploadInputElement, {
     constructors: () => ({new: [FileUploadInputElement, []]})
   });
+  dart.defineExtensionMembers(FileUploadInputElement, [
+    'accept',
+    'accept',
+    'multiple',
+    'multiple',
+    'required',
+    'required',
+    'files',
+    'files'
+  ]);
   FileUploadInputElement[dart.owner] = exports;
   dart.defineExtensionNames([
     'formAction',
@@ -17937,41 +18484,23 @@
     static new() {
       return InputElement.new({type: 'submit'});
     }
-    get [dartx.formAction]() {
-      return this.formAction;
-    }
-    set [dartx.formAction](value) {
-      this.formAction = value;
-    }
-    get [dartx.formEnctype]() {
-      return this.formEnctype;
-    }
-    set [dartx.formEnctype](value) {
-      this.formEnctype = value;
-    }
-    get [dartx.formMethod]() {
-      return this.formMethod;
-    }
-    set [dartx.formMethod](value) {
-      this.formMethod = value;
-    }
-    get [dartx.formNoValidate]() {
-      return this.formNoValidate;
-    }
-    set [dartx.formNoValidate](value) {
-      this.formNoValidate = value;
-    }
-    get [dartx.formTarget]() {
-      return this.formTarget;
-    }
-    set [dartx.formTarget](value) {
-      this.formTarget = value;
-    }
   }
   SubmitButtonInputElement[dart.implements] = () => [InputElementBase];
   dart.setSignature(SubmitButtonInputElement, {
     constructors: () => ({new: [SubmitButtonInputElement, []]})
   });
+  dart.defineExtensionMembers(SubmitButtonInputElement, [
+    'formAction',
+    'formAction',
+    'formEnctype',
+    'formEnctype',
+    'formMethod',
+    'formMethod',
+    'formNoValidate',
+    'formNoValidate',
+    'formTarget',
+    'formTarget'
+  ]);
   SubmitButtonInputElement[dart.owner] = exports;
   dart.defineExtensionNames([
     'alt',
@@ -17988,65 +18517,31 @@
     static new() {
       return InputElement.new({type: 'image'});
     }
-    get [dartx.alt]() {
-      return this.alt;
-    }
-    set [dartx.alt](value) {
-      this.alt = value;
-    }
-    get [dartx.formAction]() {
-      return this.formAction;
-    }
-    set [dartx.formAction](value) {
-      this.formAction = value;
-    }
-    get [dartx.formEnctype]() {
-      return this.formEnctype;
-    }
-    set [dartx.formEnctype](value) {
-      this.formEnctype = value;
-    }
-    get [dartx.formMethod]() {
-      return this.formMethod;
-    }
-    set [dartx.formMethod](value) {
-      this.formMethod = value;
-    }
-    get [dartx.formNoValidate]() {
-      return this.formNoValidate;
-    }
-    set [dartx.formNoValidate](value) {
-      this.formNoValidate = value;
-    }
-    get [dartx.formTarget]() {
-      return this.formTarget;
-    }
-    set [dartx.formTarget](value) {
-      this.formTarget = value;
-    }
-    get [dartx.height]() {
-      return this.height;
-    }
-    set [dartx.height](value) {
-      this.height = value;
-    }
-    get [dartx.src]() {
-      return this.src;
-    }
-    set [dartx.src](value) {
-      this.src = value;
-    }
-    get [dartx.width]() {
-      return this.width;
-    }
-    set [dartx.width](value) {
-      this.width = value;
-    }
   }
   ImageButtonInputElement[dart.implements] = () => [InputElementBase];
   dart.setSignature(ImageButtonInputElement, {
     constructors: () => ({new: [ImageButtonInputElement, []]})
   });
+  dart.defineExtensionMembers(ImageButtonInputElement, [
+    'alt',
+    'alt',
+    'formAction',
+    'formAction',
+    'formEnctype',
+    'formEnctype',
+    'formMethod',
+    'formMethod',
+    'formNoValidate',
+    'formNoValidate',
+    'formTarget',
+    'formTarget',
+    'height',
+    'height',
+    'src',
+    'src',
+    'width',
+    'width'
+  ]);
   ImageButtonInputElement[dart.owner] = exports;
   class ResetButtonInputElement extends core.Object {
     static new() {
@@ -20494,7 +20989,7 @@
     }
     static new(callback) {
       0;
-      return dart.as(new (window.MutationObserver || window.WebKitMutationObserver || window.MozMutationObserver)(dart.dcall(/* Unimplemented unknown name */convertDartClosureToJS, _wrapBinaryZone(callback), 2)), MutationObserver);
+      return dart.as(new (window.MutationObserver || window.WebKitMutationObserver || window.MozMutationObserver)(convertDartClosureToJS(_wrapBinaryZone(callback), 2)), MutationObserver);
     }
   }
   dart.setSignature(MutationObserver, {
@@ -20754,13 +21249,11 @@
     static _() {
       dart.throw(new core.UnsupportedError("Not supported"));
     }
-    get [dartx.hardwareConcurrency]() {
-      return this.hardwareConcurrency;
-    }
   }
   dart.setSignature(NavigatorCpu, {
     constructors: () => ({_: [NavigatorCpu, []]})
   });
+  dart.defineExtensionMembers(NavigatorCpu, ['hardwareConcurrency']);
   NavigatorCpu[dart.metadata] = () => [dart.const(new _metadata.DocsEditable()), dart.const(new _metadata.DomName('NavigatorCPU')), dart.const(new _metadata.Experimental())];
   NavigatorCpu[dart.owner] = exports;
   dart.defineExtensionNames([
@@ -20776,31 +21269,19 @@
     static _() {
       dart.throw(new core.UnsupportedError("Not supported"));
     }
-    get [dartx.appCodeName]() {
-      return this.appCodeName;
-    }
-    get [dartx.appName]() {
-      return this.appName;
-    }
-    get [dartx.appVersion]() {
-      return this.appVersion;
-    }
-    get [dartx.dartEnabled]() {
-      return this.dartEnabled;
-    }
-    get [dartx.platform]() {
-      return this.platform;
-    }
-    get [dartx.product]() {
-      return this.product;
-    }
-    get [dartx.userAgent]() {
-      return this.userAgent;
-    }
   }
   dart.setSignature(NavigatorID, {
     constructors: () => ({_: [NavigatorID, []]})
   });
+  dart.defineExtensionMembers(NavigatorID, [
+    'appCodeName',
+    'appName',
+    'appVersion',
+    'dartEnabled',
+    'platform',
+    'product',
+    'userAgent'
+  ]);
   NavigatorID[dart.metadata] = () => [dart.const(new _metadata.DocsEditable()), dart.const(new _metadata.DomName('NavigatorID')), dart.const(new _metadata.Experimental())];
   NavigatorID[dart.owner] = exports;
   dart.defineExtensionNames([
@@ -20811,16 +21292,11 @@
     static _() {
       dart.throw(new core.UnsupportedError("Not supported"));
     }
-    get [dartx.language]() {
-      return this.language;
-    }
-    get [dartx.languages]() {
-      return this.languages;
-    }
   }
   dart.setSignature(NavigatorLanguage, {
     constructors: () => ({_: [NavigatorLanguage, []]})
   });
+  dart.defineExtensionMembers(NavigatorLanguage, ['language', 'languages']);
   NavigatorLanguage[dart.metadata] = () => [dart.const(new _metadata.DocsEditable()), dart.const(new _metadata.DomName('NavigatorLanguage')), dart.const(new _metadata.Experimental())];
   NavigatorLanguage[dart.owner] = exports;
   dart.defineExtensionNames([
@@ -20830,13 +21306,11 @@
     static _() {
       dart.throw(new core.UnsupportedError("Not supported"));
     }
-    get [dartx.onLine]() {
-      return this.onLine;
-    }
   }
   dart.setSignature(NavigatorOnLine, {
     constructors: () => ({_: [NavigatorOnLine, []]})
   });
+  dart.defineExtensionMembers(NavigatorOnLine, ['onLine']);
   NavigatorOnLine[dart.metadata] = () => [dart.const(new _metadata.DocsEditable()), dart.const(new _metadata.DomName('NavigatorOnLine')), dart.const(new _metadata.Experimental())];
   NavigatorOnLine[dart.owner] = exports;
   dart.defineExtensionNames([
@@ -21870,22 +22344,11 @@
     static _() {
       dart.throw(new core.UnsupportedError("Not supported"));
     }
-    get [_childElementCount]() {
-      return this._childElementCount;
-    }
-    get [_children]() {
-      return this._children;
-    }
-    get [_firstElementChild]() {
-      return this._firstElementChild;
-    }
-    get [_lastElementChild]() {
-      return this._lastElementChild;
-    }
   }
   dart.setSignature(ParentNode, {
     constructors: () => ({_: [ParentNode, []]})
   });
+  dart.defineExtensionMembers(ParentNode, [_childElementCount, _children, _firstElementChild, _lastElementChild]);
   ParentNode[dart.metadata] = () => [dart.const(new _metadata.DocsEditable()), dart.const(new _metadata.DomName('ParentNode')), dart.const(new _metadata.Experimental())];
   ParentNode[dart.owner] = exports;
   dart.defineExtensionNames([
@@ -25202,7 +25665,7 @@
       [dartx.stop]: [dart.void, []]
     })
   });
-  SpeechRecognition[dart.metadata] = () => [dart.const(new _metadata.DomName('SpeechRecognition')), dart.const(new _metadata.SupportedBrowser(_metadata.SupportedBrowser.CHROME, '25')), dart.const(new _metadata.Experimental()), dart.const(new _js_helper.Native("SpeechRecognition"))];
+  SpeechRecognition[dart.metadata] = () => [dart.const(new _metadata.DomName('webkitSpeechRecognition')), dart.const(new _metadata.SupportedBrowser(_metadata.SupportedBrowser.CHROME, '25')), dart.const(new _metadata.Experimental()), dart.const(new _js_helper.Native("webkitSpeechRecognition"))];
   SpeechRecognition[dart.owner] = exports;
   dart.defineLazyProperties(SpeechRecognition, {
     get audioEndEvent() {
@@ -25239,7 +25702,7 @@
       return dart.const(new (EventStreamProvider$(Event))('start'));
     }
   });
-  dart.registerExtension(dart.global.SpeechRecognition, SpeechRecognition);
+  dart.registerExtension(dart.global.webkitSpeechRecognition, SpeechRecognition);
   dart.defineExtensionNames([
     'confidence',
     'transcript'
@@ -27737,73 +28200,33 @@
     static _() {
       dart.throw(new core.UnsupportedError("Not supported"));
     }
-    get [dartx.hash]() {
-      return this.hash;
-    }
-    set [dartx.hash](value) {
-      this.hash = value;
-    }
-    get [dartx.host]() {
-      return this.host;
-    }
-    set [dartx.host](value) {
-      this.host = value;
-    }
-    get [dartx.hostname]() {
-      return this.hostname;
-    }
-    set [dartx.hostname](value) {
-      this.hostname = value;
-    }
-    get [dartx.href]() {
-      return this.href;
-    }
-    set [dartx.href](value) {
-      this.href = value;
-    }
-    get [dartx.origin]() {
-      return this.origin;
-    }
-    get [dartx.password]() {
-      return this.password;
-    }
-    set [dartx.password](value) {
-      this.password = value;
-    }
-    get [dartx.pathname]() {
-      return this.pathname;
-    }
-    set [dartx.pathname](value) {
-      this.pathname = value;
-    }
-    get [dartx.port]() {
-      return this.port;
-    }
-    set [dartx.port](value) {
-      this.port = value;
-    }
-    get [dartx.protocol]() {
-      return this.protocol;
-    }
-    set [dartx.protocol](value) {
-      this.protocol = value;
-    }
-    get [dartx.search]() {
-      return this.search;
-    }
-    set [dartx.search](value) {
-      this.search = value;
-    }
-    get [dartx.username]() {
-      return this.username;
-    }
-    set [dartx.username](value) {
-      this.username = value;
-    }
   }
   dart.setSignature(UrlUtils, {
     constructors: () => ({_: [UrlUtils, []]})
   });
+  dart.defineExtensionMembers(UrlUtils, [
+    'hash',
+    'hash',
+    'host',
+    'host',
+    'hostname',
+    'hostname',
+    'href',
+    'href',
+    'origin',
+    'password',
+    'password',
+    'pathname',
+    'pathname',
+    'port',
+    'port',
+    'protocol',
+    'protocol',
+    'search',
+    'search',
+    'username',
+    'username'
+  ]);
   UrlUtils[dart.metadata] = () => [dart.const(new _metadata.DocsEditable()), dart.const(new _metadata.DomName('URLUtils')), dart.const(new _metadata.Experimental())];
   UrlUtils[dart.owner] = exports;
   dart.defineExtensionNames([
@@ -27821,37 +28244,21 @@
     static _() {
       dart.throw(new core.UnsupportedError("Not supported"));
     }
-    get [dartx.hash]() {
-      return this.hash;
-    }
-    get [dartx.host]() {
-      return this.host;
-    }
-    get [dartx.hostname]() {
-      return this.hostname;
-    }
-    get [dartx.href]() {
-      return this.href;
-    }
-    get [dartx.origin]() {
-      return this.origin;
-    }
-    get [dartx.pathname]() {
-      return this.pathname;
-    }
-    get [dartx.port]() {
-      return this.port;
-    }
-    get [dartx.protocol]() {
-      return this.protocol;
-    }
-    get [dartx.search]() {
-      return this.search;
-    }
   }
   dart.setSignature(UrlUtilsReadOnly, {
     constructors: () => ({_: [UrlUtilsReadOnly, []]})
   });
+  dart.defineExtensionMembers(UrlUtilsReadOnly, [
+    'hash',
+    'host',
+    'hostname',
+    'href',
+    'origin',
+    'pathname',
+    'port',
+    'protocol',
+    'search'
+  ]);
   UrlUtilsReadOnly[dart.metadata] = () => [dart.const(new _metadata.DocsEditable()), dart.const(new _metadata.DomName('URLUtilsReadOnly')), dart.const(new _metadata.Experimental())];
   UrlUtilsReadOnly[dart.owner] = exports;
   dart.defineExtensionNames([
@@ -29631,27 +30038,6 @@
       stopPropagation: [dart.void, []]
     })
   });
-  dart.defineExtensionMembers(_WrappedEvent, [
-    _initEvent,
-    'preventDefault',
-    'stopImmediatePropagation',
-    'stopPropagation',
-    _selector,
-    _selector,
-    'bubbles',
-    'cancelable',
-    'clipboardData',
-    'currentTarget',
-    'defaultPrevented',
-    'eventPhase',
-    'target',
-    'timeStamp',
-    'type',
-    'matchingTarget',
-    'path',
-    _get_currentTarget,
-    _get_target
-  ]);
   _WrappedEvent[dart.owner] = exports;
   class _BeforeUnloadEvent extends _WrappedEvent {
     _BeforeUnloadEvent(base) {
@@ -29672,7 +30058,6 @@
   dart.setSignature(_BeforeUnloadEvent, {
     constructors: () => ({_BeforeUnloadEvent: [_BeforeUnloadEvent, [Event]]})
   });
-  dart.defineExtensionMembers(_BeforeUnloadEvent, ['returnValue', 'returnValue']);
   _BeforeUnloadEvent[dart.owner] = exports;
   const _eventType = Symbol('_eventType');
   class _BeforeUnloadEventStreamProvider extends core.Object {
@@ -29736,31 +30121,40 @@
     static _() {
       dart.throw(new core.UnsupportedError("Not supported"));
     }
-    get [dartx.onHashChange]() {
+    get onHashChange() {
       return WindowEventHandlers.hashChangeEvent.forTarget(this);
     }
-    get [dartx.onMessage]() {
+    get onMessage() {
       return WindowEventHandlers.messageEvent.forTarget(this);
     }
-    get [dartx.onOffline]() {
+    get onOffline() {
       return WindowEventHandlers.offlineEvent.forTarget(this);
     }
-    get [dartx.onOnline]() {
+    get onOnline() {
       return WindowEventHandlers.onlineEvent.forTarget(this);
     }
-    get [dartx.onPopState]() {
+    get onPopState() {
       return WindowEventHandlers.popStateEvent.forTarget(this);
     }
-    get [dartx.onStorage]() {
+    get onStorage() {
       return WindowEventHandlers.storageEvent.forTarget(this);
     }
-    get [dartx.onUnload]() {
+    get onUnload() {
       return WindowEventHandlers.unloadEvent.forTarget(this);
     }
   }
   dart.setSignature(WindowEventHandlers, {
     constructors: () => ({_: [WindowEventHandlers, []]})
   });
+  dart.defineExtensionMembers(WindowEventHandlers, [
+    'onHashChange',
+    'onMessage',
+    'onOffline',
+    'onOnline',
+    'onPopState',
+    'onStorage',
+    'onUnload'
+  ]);
   WindowEventHandlers[dart.metadata] = () => [dart.const(new _metadata.DocsEditable()), dart.const(new _metadata.DomName('WindowEventHandlers')), dart.const(new _metadata.Experimental())];
   WindowEventHandlers[dart.owner] = exports;
   dart.defineLazyProperties(WindowEventHandlers, {
@@ -32900,35 +33294,6 @@
     }),
     names: ['_makeRecord', '_convertToHexString']
   });
-  dart.defineExtensionMembers(KeyEvent, [
-    _initUIEvent,
-    _initKeyboardEvent,
-    'getModifierState',
-    'keyCode',
-    'charCode',
-    'altKey',
-    'which',
-    'currentTarget',
-    'clipboardData',
-    'ctrlKey',
-    'detail',
-    'keyLocation',
-    'layer',
-    'metaKey',
-    'page',
-    'shiftKey',
-    'view',
-    _charCode,
-    _keyCode,
-    _keyIdentifier,
-    _layerX,
-    _layerY,
-    _pageX,
-    _pageY,
-    'location',
-    'repeat',
-    _get_view
-  ]);
   KeyEvent[dart.metadata] = () => [dart.const(new _metadata.Experimental())];
   KeyEvent[dart.owner] = exports;
   dart.defineLazyProperties(KeyEvent, {
@@ -34419,7 +34784,7 @@
       return function() {
         return invokeCallback(this);
       };
-    })(dart.dcall(/* Unimplemented unknown name */convertDartClosureToJS, callback, 1));
+    })(convertDartClosureToJS(callback, 1));
   }
   dart.fn(_makeCallbackMethod);
   function _makeCallbackMethod3(callback) {
@@ -34427,7 +34792,7 @@
       return function(arg1, arg2, arg3) {
         return invokeCallback(this, arg1, arg2, arg3);
       };
-    })(dart.dcall(/* Unimplemented unknown name */convertDartClosureToJS, callback, 4));
+    })(convertDartClosureToJS(callback, 4));
   }
   dart.fn(_makeCallbackMethod3);
   function _registerCustomElement(context, document, tag, type, extendsTagName) {
@@ -34608,18 +34973,12 @@
   dart.defineExtensionMembers(_DOMWindowCrossFrame, [
     'close',
     'postMessage',
-    _addEventListener,
-    'addEventListener',
-    'dispatchEvent',
-    _removeEventListener,
-    'removeEventListener',
     'history',
     'location',
     'closed',
     'opener',
     'parent',
-    'top',
-    'on'
+    'top'
   ]);
   _DOMWindowCrossFrame[dart.owner] = exports;
   class _LocationCrossFrame extends core.Object {
@@ -34940,6 +35299,7 @@
   });
   _ValidatingTreeSanitizer[dart.owner] = exports;
   // Exports:
+  exports.convertDartClosureToJS = convertDartClosureToJS;
   exports.EventTarget = EventTarget;
   exports.Node = Node;
   exports.Element = Element;
diff --git a/lib/runtime/dart/html_common.js b/lib/runtime/dart/html_common.js
index 40a0548..ea0a884 100644
--- a/lib/runtime/dart/html_common.js
+++ b/lib/runtime/dart/html_common.js
@@ -449,22 +449,6 @@
   dart.setSignature(_TypedContextAttributes, {
     constructors: () => ({_TypedContextAttributes: [_TypedContextAttributes, [core.bool, core.bool, core.bool, core.bool, core.bool, core.bool, core.bool]]})
   });
-  dart.defineExtensionMembers(_TypedContextAttributes, [
-    'alpha',
-    'alpha',
-    'antialias',
-    'antialias',
-    'depth',
-    'depth',
-    'premultipliedAlpha',
-    'premultipliedAlpha',
-    'preserveDrawingBuffer',
-    'preserveDrawingBuffer',
-    'stencil',
-    'stencil',
-    'failIfMajorPerformanceCaveat',
-    'failIfMajorPerformanceCaveat'
-  ]);
   _TypedContextAttributes[dart.owner] = exports;
   function convertNativeToDart_ContextAttributes(nativeContextAttributes) {
     if (dart.is(nativeContextAttributes, web_gl.ContextAttributes)) {
@@ -484,7 +468,6 @@
   dart.setSignature(_TypedImageData, {
     constructors: () => ({_TypedImageData: [_TypedImageData, [typed_data.Uint8ClampedList, core.int, core.int]]})
   });
-  dart.defineExtensionMembers(_TypedImageData, ['data', 'height', 'width']);
   _TypedImageData[dart.owner] = exports;
   function convertNativeToDart_ImageData(nativeImageData) {
     0;
@@ -637,8 +620,8 @@
   dart.fn(isJavaScriptPromise, core.bool, [dart.dynamic]);
   function convertNativePromiseToDartFuture(promise) {
     let completer = async.Completer.new();
-    let then = dart.dcall(/* Unimplemented unknown name */convertDartClosureToJS, dart.fn(result => completer.complete(result), dart.void, [dart.dynamic]), 1);
-    let error = dart.dcall(/* Unimplemented unknown name */convertDartClosureToJS, dart.fn(result => completer.completeError(result), dart.void, [dart.dynamic]), 1);
+    let then = html.convertDartClosureToJS(dart.fn(result => completer.complete(result), dart.void, [dart.dynamic]), 1);
+    let error = html.convertDartClosureToJS(dart.fn(result => completer.completeError(result), dart.void, [dart.dynamic]), 1);
     let newPromise = promise.then(then).catch(error);
     return completer.future;
   }
diff --git a/lib/runtime/dart/math.js b/lib/runtime/dart/math.js
index d02cf41..a021567 100644
--- a/lib/runtime/dart/math.js
+++ b/lib/runtime/dart/math.js
@@ -122,10 +122,10 @@
     class _RectangleBase extends core.Object {
       _RectangleBase() {
       }
-      get [dartx.right]() {
+      get right() {
         return dart.notNull(this[dartx.left]) + dart.notNull(this[dartx.width]);
       }
-      get [dartx.bottom]() {
+      get bottom() {
         return dart.notNull(this[dartx.top]) + dart.notNull(this[dartx.height]);
       }
       toString() {
@@ -138,7 +138,7 @@
       get hashCode() {
         return _JenkinsSmiHash.hash4(dart.hashCode(this[dartx.left]), dart.hashCode(this[dartx.top]), dart.hashCode(this[dartx.right]), dart.hashCode(this[dartx.bottom]));
       }
-      [dartx.intersection](other) {
+      intersection(other) {
         dart.as(other, Rectangle$(T));
         let x0 = max(this[dartx.left], other[dartx.left]);
         let x1 = min(dart.notNull(this[dartx.left]) + dart.notNull(this[dartx.width]), dart.notNull(other[dartx.left]) + dart.notNull(other[dartx.width]));
@@ -151,10 +151,10 @@
         }
         return null;
       }
-      [dartx.intersects](other) {
+      intersects(other) {
         return dart.notNull(this[dartx.left]) <= dart.notNull(other[dartx.left]) + dart.notNull(other[dartx.width]) && dart.notNull(other[dartx.left]) <= dart.notNull(this[dartx.left]) + dart.notNull(this[dartx.width]) && dart.notNull(this[dartx.top]) <= dart.notNull(other[dartx.top]) + dart.notNull(other[dartx.height]) && dart.notNull(other[dartx.top]) <= dart.notNull(this[dartx.top]) + dart.notNull(this[dartx.height]);
       }
-      [dartx.boundingBox](other) {
+      boundingBox(other) {
         dart.as(other, Rectangle$(T));
         let right = max(dart.notNull(this[dartx.left]) + dart.notNull(this[dartx.width]), dart.notNull(other[dartx.left]) + dart.notNull(other[dartx.width]));
         let bottom = max(dart.notNull(this[dartx.top]) + dart.notNull(this[dartx.height]), dart.notNull(other[dartx.top]) + dart.notNull(other[dartx.height]));
@@ -162,22 +162,22 @@
         let top = min(this[dartx.top], other[dartx.top]);
         return new (Rectangle$(T))(left, top, dart.notNull(right) - dart.notNull(left), dart.notNull(bottom) - dart.notNull(top));
       }
-      [dartx.containsRectangle](another) {
+      containsRectangle(another) {
         return dart.notNull(this[dartx.left]) <= dart.notNull(another[dartx.left]) && dart.notNull(this[dartx.left]) + dart.notNull(this[dartx.width]) >= dart.notNull(another[dartx.left]) + dart.notNull(another[dartx.width]) && dart.notNull(this[dartx.top]) <= dart.notNull(another[dartx.top]) && dart.notNull(this[dartx.top]) + dart.notNull(this[dartx.height]) >= dart.notNull(another[dartx.top]) + dart.notNull(another[dartx.height]);
       }
-      [dartx.containsPoint](another) {
+      containsPoint(another) {
         return dart.notNull(another.x) >= dart.notNull(this[dartx.left]) && dart.notNull(another.x) <= dart.notNull(this[dartx.left]) + dart.notNull(this[dartx.width]) && dart.notNull(another.y) >= dart.notNull(this[dartx.top]) && dart.notNull(another.y) <= dart.notNull(this[dartx.top]) + dart.notNull(this[dartx.height]);
       }
-      get [dartx.topLeft]() {
+      get topLeft() {
         return new (Point$(T))(this[dartx.left], this[dartx.top]);
       }
-      get [dartx.topRight]() {
+      get topRight() {
         return new (Point$(T))(dart.notNull(this[dartx.left]) + dart.notNull(this[dartx.width]), this[dartx.top]);
       }
-      get [dartx.bottomRight]() {
+      get bottomRight() {
         return new (Point$(T))(dart.notNull(this[dartx.left]) + dart.notNull(this[dartx.width]), dart.notNull(this[dartx.top]) + dart.notNull(this[dartx.height]));
       }
-      get [dartx.bottomLeft]() {
+      get bottomLeft() {
         return new (Point$(T))(this[dartx.left], dart.notNull(this[dartx.top]) + dart.notNull(this[dartx.height]));
       }
     }
@@ -191,6 +191,22 @@
         [dartx.containsPoint]: [core.bool, [Point$(core.num)]]
       })
     });
+    dart.defineExtensionMembers(_RectangleBase, [
+      'toString',
+      '==',
+      'intersection',
+      'intersects',
+      'boundingBox',
+      'containsRectangle',
+      'containsPoint',
+      'right',
+      'bottom',
+      'hashCode',
+      'topLeft',
+      'topRight',
+      'bottomRight',
+      'bottomLeft'
+    ]);
     _RectangleBase[dart.owner] = exports;
     return _RectangleBase;
   });
@@ -203,30 +219,6 @@
       'height'
     ]);
     class Rectangle extends _RectangleBase$(T) {
-      get [dartx.left]() {
-        return this.left;
-      }
-      set [dartx.left](value) {
-        this.left = value;
-      }
-      get [dartx.top]() {
-        return this.top;
-      }
-      set [dartx.top](value) {
-        this.top = value;
-      }
-      get [dartx.width]() {
-        return this.width;
-      }
-      set [dartx.width](value) {
-        this.width = value;
-      }
-      get [dartx.height]() {
-        return this.height;
-      }
-      set [dartx.height](value) {
-        this.height = value;
-      }
       Rectangle(left, top, width, height) {
         this[dartx.left] = left;
         this[dartx.top] = top;
@@ -242,16 +234,22 @@
         return new (Rectangle$(T))(left, top, width, height);
       }
     }
-    dart.virtualField(Rectangle, dartx.left);
-    dart.virtualField(Rectangle, dartx.top);
-    dart.virtualField(Rectangle, dartx.width);
-    dart.virtualField(Rectangle, dartx.height);
     dart.setSignature(Rectangle, {
       constructors: () => ({
         Rectangle: [Rectangle$(T), [T, T, T, T]],
         fromPoints: [Rectangle$(T), [Point$(T), Point$(T)]]
       })
     });
+    dart.defineExtensionMembers(Rectangle, [
+      'left',
+      'left',
+      'top',
+      'top',
+      'width',
+      'width',
+      'height',
+      'height'
+    ]);
     Rectangle[dart.owner] = exports;
     return Rectangle;
   });
@@ -292,8 +290,6 @@
       }
     }
     MutableRectangle[dart.implements] = () => [Rectangle$(T)];
-    dart.virtualField(MutableRectangle, 'left');
-    dart.virtualField(MutableRectangle, 'top');
     dart.setSignature(MutableRectangle, {
       constructors: () => ({
         MutableRectangle: [MutableRectangle$(T), [T, T, T, T]],
diff --git a/lib/runtime/dart/svg.js b/lib/runtime/dart/svg.js
index df9b189..9a247af 100644
--- a/lib/runtime/dart/svg.js
+++ b/lib/runtime/dart/svg.js
@@ -2939,25 +2939,17 @@
     static _() {
       dart.throw(new core.UnsupportedError("Not supported"));
     }
-    get [dartx.height]() {
-      return this.height;
-    }
-    get [dartx.result]() {
-      return this.result;
-    }
-    get [dartx.width]() {
-      return this.width;
-    }
-    get [dartx.x]() {
-      return this.x;
-    }
-    get [dartx.y]() {
-      return this.y;
-    }
   }
   dart.setSignature(FilterPrimitiveStandardAttributes, {
     constructors: () => ({_: [FilterPrimitiveStandardAttributes, []]})
   });
+  dart.defineExtensionMembers(FilterPrimitiveStandardAttributes, [
+    'height',
+    'result',
+    'width',
+    'x',
+    'y'
+  ]);
   FilterPrimitiveStandardAttributes[dart.metadata] = () => [dart.const(new _metadata.DocsEditable()), dart.const(new _metadata.DomName('SVGFilterPrimitiveStandardAttributes')), dart.const(new _metadata.Unstable())];
   FilterPrimitiveStandardAttributes[dart.owner] = exports;
   dart.defineExtensionNames([
@@ -2968,16 +2960,11 @@
     static _() {
       dart.throw(new core.UnsupportedError("Not supported"));
     }
-    get [dartx.preserveAspectRatio]() {
-      return this.preserveAspectRatio;
-    }
-    get [dartx.viewBox]() {
-      return this.viewBox;
-    }
   }
   dart.setSignature(FitToViewBox, {
     constructors: () => ({_: [FitToViewBox, []]})
   });
+  dart.defineExtensionMembers(FitToViewBox, ['preserveAspectRatio', 'viewBox']);
   FitToViewBox[dart.metadata] = () => [dart.const(new _metadata.DocsEditable()), dart.const(new _metadata.DomName('SVGFitToViewBox')), dart.const(new _metadata.Unstable())];
   FitToViewBox[dart.owner] = exports;
   dart.defineExtensionNames([
@@ -5859,19 +5846,11 @@
     static _() {
       dart.throw(new core.UnsupportedError("Not supported"));
     }
-    get [dartx.requiredExtensions]() {
-      return this.requiredExtensions;
-    }
-    get [dartx.requiredFeatures]() {
-      return this.requiredFeatures;
-    }
-    get [dartx.systemLanguage]() {
-      return this.systemLanguage;
-    }
   }
   dart.setSignature(Tests, {
     constructors: () => ({_: [Tests, []]})
   });
+  dart.defineExtensionMembers(Tests, ['requiredExtensions', 'requiredFeatures', 'systemLanguage']);
   Tests[dart.metadata] = () => [dart.const(new _metadata.DocsEditable()), dart.const(new _metadata.DomName('SVGTests')), dart.const(new _metadata.Unstable())];
   Tests[dart.owner] = exports;
   class TextElement extends TextPositioningElement {
@@ -6167,13 +6146,11 @@
     static _() {
       dart.throw(new core.UnsupportedError("Not supported"));
     }
-    get [dartx.href]() {
-      return this.href;
-    }
   }
   dart.setSignature(UriReference, {
     constructors: () => ({_: [UriReference, []]})
   });
+  dart.defineExtensionMembers(UriReference, ['href']);
   UriReference[dart.metadata] = () => [dart.const(new _metadata.DocsEditable()), dart.const(new _metadata.DomName('SVGURIReference')), dart.const(new _metadata.Unstable())];
   UriReference[dart.owner] = exports;
   dart.defineExtensionNames([
@@ -6334,16 +6311,11 @@
     static _() {
       dart.throw(new core.UnsupportedError("Not supported"));
     }
-    get [dartx.zoomAndPan]() {
-      return this.zoomAndPan;
-    }
-    set [dartx.zoomAndPan](value) {
-      this.zoomAndPan = value;
-    }
   }
   dart.setSignature(ZoomAndPan, {
     constructors: () => ({_: [ZoomAndPan, []]})
   });
+  dart.defineExtensionMembers(ZoomAndPan, ['zoomAndPan', 'zoomAndPan']);
   ZoomAndPan[dart.metadata] = () => [dart.const(new _metadata.DocsEditable()), dart.const(new _metadata.DomName('SVGZoomAndPan')), dart.const(new _metadata.Unstable())];
   ZoomAndPan[dart.owner] = exports;
   ZoomAndPan.SVG_ZOOMANDPAN_DISABLE = 1;
diff --git a/lib/src/codegen/js_codegen.dart b/lib/src/codegen/js_codegen.dart
index cfb3997..6117106 100644
--- a/lib/src/codegen/js_codegen.dart
+++ b/lib/src/codegen/js_codegen.dart
@@ -311,6 +311,9 @@
     // Skip the cast if it's not needed.
     if (rules.isSubtypeOf(from, to)) return fromExpr;
 
+    // TODO(vsm): This is dodgy!
+    if (to.isBottom) return fromExpr;
+
     // All Dart number types map to a JS double.
     if (_isNumberInJS(from) && _isNumberInJS(to)) {
       // Make sure to check when converting to int.
@@ -3401,7 +3404,8 @@
       // TODO(vsm): When we canonicalize, we need to treat private symbols
       // correctly.
       var name = js.string(node.components.join('.'), "'");
-      return new JS.New(_emitTypeName(types.symbolType), [name]);
+      return js.call('#.new(#)', [_emitTypeName(types.symbolType), name]);
+      //return new JS.New(_emitTypeName(types.symbolType), [name]);
     }
     return _emitConst(emitSymbol);
   }
@@ -3862,7 +3866,7 @@
 
   String generateLibrary(LibraryUnit unit) {
     // Clone the AST first, so we can mutate it.
-    print(unit.library.element);
+    // print(unit.library.element);
     for (var dir in unit.library.directives) {
       if (dir is LibraryDirective) {
         assert(dir.element != null);
diff --git a/lib/src/server/server.dart b/lib/src/server/server.dart
index 6c7ea36..a86855d 100644
--- a/lib/src/server/server.dart
+++ b/lib/src/server/server.dart
@@ -301,14 +301,14 @@
         for (var packagePath in compiler.options.sourceOptions.packagePaths) {
           var mapped = '/' + packagePath + lookupPath;
           var mappedUri = requestedUri.resolve(mapped);
-          print('Searching for $mappedUri');
+          // print('Searching for $mappedUri');
           var mappedRequest = new shelf.Request(request.method, mappedUri);
           var response = originalHandler(mappedRequest);
           if (response.statusCode != 404) {
             print('Found $mappedUri');
             return response;
           }
-          print('Did not find $mappedUri');
+          //print('Did not find $mappedUri');
         }
         return new shelf.Response.notFound(requestedUri.toString());
       };
diff --git a/tool/input_sdk/lib/html/dart2js/html_dart2js.dart b/tool/input_sdk/lib/html/dart2js/html_dart2js.dart
index 8445e56..eaab653 100644
--- a/tool/input_sdk/lib/html/dart2js/html_dart2js.dart
+++ b/tool/input_sdk/lib/html/dart2js/html_dart2js.dart
@@ -54,7 +54,7 @@
 
 // Not actually used, but imported since dart:html can generate these objects.
 import 'dart:_js_helper' show
-    convertDartClosureToJS, Creates, JavaScriptIndexingBehavior,
+  /*convertDartClosureToJS,*/ Creates, JavaScriptIndexingBehavior,
     JSName, Native, Returns, ForceInline,
     findDispatchTagForInterceptorClass, setNativeSubclassDispatchRecord,
     makeLeafDispatchRecord;
@@ -67,9 +67,7 @@
 
 export 'dart:math' show Rectangle, Point;
 
-
-
-
+/*=T*/ convertDartClosureToJS/*<T>*/(/*=T*/ f) => f;
 
 /**
  * Top-level container for a web page, which is usually a browser tab or window.
@@ -28249,11 +28247,11 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-@DomName('SpeechRecognition')
+@DomName('webkitSpeechRecognition')
 @SupportedBrowser(SupportedBrowser.CHROME, '25')
 @Experimental()
 // https://dvcs.w3.org/hg/speech-api/raw-file/tip/speechapi.html#speechreco-section
-@Native("SpeechRecognition")
+@Native("webkitSpeechRecognition")
 class SpeechRecognition extends EventTarget {
   // To suppress missing implicit constructor warnings.
   factory SpeechRecognition._() { throw new UnsupportedError("Not supported"); }
diff --git a/tool/input_sdk/private/ddc_runtime/classes.dart b/tool/input_sdk/private/ddc_runtime/classes.dart
index fa284f6..5c5cbe2 100644
--- a/tool/input_sdk/private/ddc_runtime/classes.dart
+++ b/tool/input_sdk/private/ddc_runtime/classes.dart
@@ -354,7 +354,9 @@
 })()''');
 
 canonicalMember(obj, name) => JS('', '''(() => {
-  if ($obj != null && $obj[$_extensionType]) return $dartx[$name];
+  if ($obj != null && $obj[$_extensionType]) {
+    return typeof $name == "symbol" ? $name : $dartx[$name];
+  }
   // Check for certain names that we can't use in JS
   if ($name == 'constructor' || $name == 'prototype') {
     $name = '+' + $name;
diff --git a/tool/input_sdk/private/ddc_runtime/operations.dart b/tool/input_sdk/private/ddc_runtime/operations.dart
index b9da664..2cd0b69 100644
--- a/tool/input_sdk/private/ddc_runtime/operations.dart
+++ b/tool/input_sdk/private/ddc_runtime/operations.dart
@@ -158,6 +158,7 @@
       isSubtype($type, $Map) && isSubtype($actual, $Map) ||
       isSubtype($type, $Function) && isSubtype($actual, $Function) ||
       isSubtype($type, $Stream) && isSubtype($actual, $Stream) ||
+      isSubtype($type, $StreamController) && isSubtype($actual, $StreamController) ||
       isSubtype($type, $StreamSubscription) &&
           isSubtype($actual, $StreamSubscription)) {
     if (false) {
diff --git a/tool/sdk_expected_errors.txt b/tool/sdk_expected_errors.txt
index 45ce6b0..9823770 100644
--- a/tool/sdk_expected_errors.txt
+++ b/tool/sdk_expected_errors.txt
@@ -1,19 +1,3 @@
-/usr/local/google/vsm/dev_compiler/tool/generated_sdk/lib/_internal/compiler/js_lib/ddc_runtime/runtime.dart
-/usr/local/google/vsm/dev_compiler/tool/generated_sdk/lib/core/core.dart
-/usr/local/google/vsm/dev_compiler/tool/generated_sdk/lib/convert/convert.dart
-/usr/local/google/vsm/dev_compiler/tool/generated_sdk/lib/async/async.dart
-/usr/local/google/vsm/dev_compiler/tool/generated_sdk/lib/_internal/compiler/js_lib/isolate_helper.dart
-/usr/local/google/vsm/dev_compiler/tool/generated_sdk/lib/_internal/compiler/js_lib/native_typed_data.dart
-/usr/local/google/vsm/dev_compiler/tool/generated_sdk/lib/typed_data/typed_data.dart
-/usr/local/google/vsm/dev_compiler/tool/generated_sdk/lib/isolate/isolate.dart
-/usr/local/google/vsm/dev_compiler/tool/generated_sdk/lib/_internal/compiler/js_lib/shared/embedded_names.dart
-/usr/local/google/vsm/dev_compiler/tool/generated_sdk/lib/collection/collection.dart
-/usr/local/google/vsm/dev_compiler/tool/generated_sdk/lib/internal/internal.dart
-/usr/local/google/vsm/dev_compiler/tool/generated_sdk/lib/_internal/compiler/js_lib/js_primitives.dart
-/usr/local/google/vsm/dev_compiler/tool/generated_sdk/lib/math/math.dart
-/usr/local/google/vsm/dev_compiler/tool/generated_sdk/lib/_internal/compiler/js_lib/js_helper.dart
-/usr/local/google/vsm/dev_compiler/tool/generated_sdk/lib/_internal/compiler/js_lib/interceptors.dart
-/usr/local/google/vsm/dev_compiler/tool/generated_sdk/lib/_internal/compiler/js_lib/foreign_helper.dart
 severe: [AnalyzerMessage] The argument type 'InternalMap' cannot be assigned to the parameter type 'Map' (dart:_isolate_helper/isolate_serialization.dart, line 47, col 47)
 severe: [STATIC_TYPE_ERROR] Type check failed: x (InternalMap) is not of type Map<dynamic, dynamic> (dart:_isolate_helper/isolate_serialization.dart, line 47, col 47)
 severe: [AnalyzerMessage] Missing concrete implementation of 'num.==' (dart:_interceptors/js_number.dart, line 12, col 7)
@@ -256,16 +240,12 @@
 warning: [DOWN_CAST_COMPOSITE] Unsound implicit cast from num to T (dart:math/rectangle.dart, line 232, col 16)
 warning: [DOWN_CAST_COMPOSITE] Unsound implicit cast from num to T (dart:math/rectangle.dart, line 248, col 28)
 warning: [DOWN_CAST_COMPOSITE] Unsound implicit cast from num to T (dart:math/rectangle.dart, line 264, col 30)
-/usr/local/google/vsm/dev_compiler/tool/generated_sdk/lib/_internal/compiler/js_lib/debugger.dart
 warning: [DOWN_CAST_COMPOSITE] Unsound implicit cast from dynamic to List<String> (dart:_debugger, line 25, col 5)
-/usr/local/google/vsm/dev_compiler/tool/generated_sdk/lib/js/dart2js/js_dart2js.dart
 severe: [AnalyzerMessage] The argument type 'Iterable<E>' cannot be assigned to the parameter type 'Iterable<int>' (dart:js, line 424, col 40)
 severe: [STATIC_TYPE_ERROR] Type check failed: iterable.skip(skipCount).take(length) (Iterable<E>) is not of type Iterable<int> (dart:js, line 424, col 40)
 warning: [DOWN_CAST_COMPOSITE] Unsound implicit cast from dynamic to E (dart:js, line 360, col 12)
 warning: [DOWN_CAST_COMPOSITE] Unsound implicit cast from dynamic to E (dart:js, line 406, col 12)
 warning: [DOWN_CAST_COMPOSITE] Unsound implicit cast from dynamic to E (dart:js, line 411, col 12)
-/usr/local/google/vsm/dev_compiler/tool/generated_sdk/lib/mirrors/mirrors.dart
-/usr/local/google/vsm/dev_compiler/tool/generated_sdk/lib/_internal/compiler/js_lib/js_mirrors.dart
 severe: [AnalyzerMessage] Missing concrete implementation of 'ObjectMirror.getField', 'ObjectMirror.invoke', 'ObjectMirror.setField', getter 'DeclarationMirror.isPrivate' and 8 more (dart:_js_mirrors, line 92, col 7)
 severe: [INVALID_METHOD_OVERRIDE] Invalid override. The type of JsLibraryMirror.uri (() → String) is not a subtype of LibraryMirror.uri (() → Uri). (dart:_js_mirrors, line 97, col 3)
 severe: [AnalyzerMessage] The return type 'String' is not assignable to 'Uri' as required by the getter it is overriding from 'LibraryMirror' (dart:_js_mirrors, line 97, col 14)
@@ -273,221 +253,213 @@
 severe: [AnalyzerMessage] '_owner' cannot be used as a setter, it is final (dart:_js_mirrors, line 121, col 5)
 severe: [AnalyzerMessage] '_method' cannot be used to name a constructor and a field in this class (dart:_js_mirrors, line 301, col 3)
 warning: [DOWN_CAST_COMPOSITE] Unsound implicit cast from dynamic to List<Type> (dart:_js_mirrors, line 149, col 31)
-/usr/local/google/vsm/dev_compiler/tool/generated_sdk/lib/html/dart2js/html_dart2js.dart
-/usr/local/google/vsm/dev_compiler/tool/generated_sdk/lib/web_sql/dart2js/web_sql_dart2js.dart
-/usr/local/google/vsm/dev_compiler/tool/generated_sdk/lib/web_audio/dart2js/web_audio_dart2js.dart
-/usr/local/google/vsm/dev_compiler/tool/generated_sdk/lib/svg/dart2js/svg_dart2js.dart
-/usr/local/google/vsm/dev_compiler/tool/generated_sdk/lib/indexed_db/dart2js/indexed_db_dart2js.dart
-/usr/local/google/vsm/dev_compiler/tool/generated_sdk/lib/html/html_common/html_common_dart2js.dart
-/usr/local/google/vsm/dev_compiler/tool/generated_sdk/lib/html/html_common/metadata.dart
-/usr/local/google/vsm/dev_compiler/tool/generated_sdk/lib/web_gl/dart2js/web_gl_dart2js.dart
-severe: [AnalyzerMessage] The setter 'href' is not defined for the class 'Element' (dart:html, line 172, col 25)
-severe: [AnalyzerMessage] The final variable 'origin' must be initialized (dart:html, line 180, col 3)
-severe: [AnalyzerMessage] The final variable 'origin' must be initialized (dart:html, line 747, col 3)
-severe: [AnalyzerMessage] The final variables 'form', 'labels' and '3' more must be initialized (dart:html, line 1378, col 3)
-severe: [AnalyzerMessage] The setter 'width' is not defined for the class 'Element' (dart:html, line 1561, col 26)
-severe: [AnalyzerMessage] The setter 'height' is not defined for the class 'Element' (dart:html, line 1562, col 27)
-severe: [AnalyzerMessage] The method '_initCompositionEvent' is not defined for the class 'Event' (dart:html, line 2631, col 9)
-severe: [AnalyzerMessage] The final variable 'options' must be initialized (dart:html, line 8257, col 3)
-severe: [AnalyzerMessage] The method '_initDeviceOrientationEvent' is not defined for the class 'Event' (dart:html, line 8676, col 7)
-severe: [STATIC_TYPE_ERROR] Type check failed: new _FrozenElementList._wrap(_querySelectorAll(selectors)) (_FrozenElementList) is not of type ElementList<Element> (dart:html, line 9835, col 12)
-severe: [STATIC_TYPE_ERROR] Type check failed: new _FrozenElementList._wrap(_querySelectorAll(selectors)) (_FrozenElementList) is not of type ElementList<Element> (dart:html, line 9964, col 5)
-severe: [INVALID_FIELD_OVERRIDE] Field declaration DomMatrixReadOnly.a cannot be overridden in DomMatrix. (dart:html, line 10233, col 3)
-severe: [INVALID_METHOD_OVERRIDE] Invalid override. The type of DomMatrix.a (() → num) is not a subtype of DomMatrixReadOnly.a (() → double). (dart:html, line 10233, col 3)
-severe: [INVALID_FIELD_OVERRIDE] Field declaration DomMatrixReadOnly.b cannot be overridden in DomMatrix. (dart:html, line 10240, col 3)
-severe: [INVALID_METHOD_OVERRIDE] Invalid override. The type of DomMatrix.b (() → num) is not a subtype of DomMatrixReadOnly.b (() → double). (dart:html, line 10240, col 3)
-severe: [INVALID_FIELD_OVERRIDE] Field declaration DomMatrixReadOnly.c cannot be overridden in DomMatrix. (dart:html, line 10247, col 3)
-severe: [INVALID_METHOD_OVERRIDE] Invalid override. The type of DomMatrix.c (() → num) is not a subtype of DomMatrixReadOnly.c (() → double). (dart:html, line 10247, col 3)
-severe: [INVALID_FIELD_OVERRIDE] Field declaration DomMatrixReadOnly.d cannot be overridden in DomMatrix. (dart:html, line 10254, col 3)
-severe: [INVALID_METHOD_OVERRIDE] Invalid override. The type of DomMatrix.d (() → num) is not a subtype of DomMatrixReadOnly.d (() → double). (dart:html, line 10254, col 3)
-severe: [INVALID_FIELD_OVERRIDE] Field declaration DomMatrixReadOnly.e cannot be overridden in DomMatrix. (dart:html, line 10261, col 3)
-severe: [INVALID_METHOD_OVERRIDE] Invalid override. The type of DomMatrix.e (() → num) is not a subtype of DomMatrixReadOnly.e (() → double). (dart:html, line 10261, col 3)
-severe: [INVALID_FIELD_OVERRIDE] Field declaration DomMatrixReadOnly.f cannot be overridden in DomMatrix. (dart:html, line 10268, col 3)
-severe: [INVALID_METHOD_OVERRIDE] Invalid override. The type of DomMatrix.f (() → num) is not a subtype of DomMatrixReadOnly.f (() → double). (dart:html, line 10268, col 3)
-severe: [INVALID_FIELD_OVERRIDE] Field declaration DomMatrixReadOnly.m11 cannot be overridden in DomMatrix. (dart:html, line 10275, col 3)
-severe: [INVALID_METHOD_OVERRIDE] Invalid override. The type of DomMatrix.m11 (() → num) is not a subtype of DomMatrixReadOnly.m11 (() → double). (dart:html, line 10275, col 3)
-severe: [INVALID_FIELD_OVERRIDE] Field declaration DomMatrixReadOnly.m12 cannot be overridden in DomMatrix. (dart:html, line 10282, col 3)
-severe: [INVALID_METHOD_OVERRIDE] Invalid override. The type of DomMatrix.m12 (() → num) is not a subtype of DomMatrixReadOnly.m12 (() → double). (dart:html, line 10282, col 3)
-severe: [INVALID_FIELD_OVERRIDE] Field declaration DomMatrixReadOnly.m13 cannot be overridden in DomMatrix. (dart:html, line 10289, col 3)
-severe: [INVALID_METHOD_OVERRIDE] Invalid override. The type of DomMatrix.m13 (() → num) is not a subtype of DomMatrixReadOnly.m13 (() → double). (dart:html, line 10289, col 3)
-severe: [INVALID_FIELD_OVERRIDE] Field declaration DomMatrixReadOnly.m14 cannot be overridden in DomMatrix. (dart:html, line 10296, col 3)
-severe: [INVALID_METHOD_OVERRIDE] Invalid override. The type of DomMatrix.m14 (() → num) is not a subtype of DomMatrixReadOnly.m14 (() → double). (dart:html, line 10296, col 3)
-severe: [INVALID_FIELD_OVERRIDE] Field declaration DomMatrixReadOnly.m21 cannot be overridden in DomMatrix. (dart:html, line 10303, col 3)
-severe: [INVALID_METHOD_OVERRIDE] Invalid override. The type of DomMatrix.m21 (() → num) is not a subtype of DomMatrixReadOnly.m21 (() → double). (dart:html, line 10303, col 3)
-severe: [INVALID_FIELD_OVERRIDE] Field declaration DomMatrixReadOnly.m22 cannot be overridden in DomMatrix. (dart:html, line 10310, col 3)
-severe: [INVALID_METHOD_OVERRIDE] Invalid override. The type of DomMatrix.m22 (() → num) is not a subtype of DomMatrixReadOnly.m22 (() → double). (dart:html, line 10310, col 3)
-severe: [INVALID_FIELD_OVERRIDE] Field declaration DomMatrixReadOnly.m23 cannot be overridden in DomMatrix. (dart:html, line 10317, col 3)
-severe: [INVALID_METHOD_OVERRIDE] Invalid override. The type of DomMatrix.m23 (() → num) is not a subtype of DomMatrixReadOnly.m23 (() → double). (dart:html, line 10317, col 3)
-severe: [INVALID_FIELD_OVERRIDE] Field declaration DomMatrixReadOnly.m24 cannot be overridden in DomMatrix. (dart:html, line 10324, col 3)
-severe: [INVALID_METHOD_OVERRIDE] Invalid override. The type of DomMatrix.m24 (() → num) is not a subtype of DomMatrixReadOnly.m24 (() → double). (dart:html, line 10324, col 3)
-severe: [INVALID_FIELD_OVERRIDE] Field declaration DomMatrixReadOnly.m31 cannot be overridden in DomMatrix. (dart:html, line 10331, col 3)
-severe: [INVALID_METHOD_OVERRIDE] Invalid override. The type of DomMatrix.m31 (() → num) is not a subtype of DomMatrixReadOnly.m31 (() → double). (dart:html, line 10331, col 3)
-severe: [INVALID_FIELD_OVERRIDE] Field declaration DomMatrixReadOnly.m32 cannot be overridden in DomMatrix. (dart:html, line 10338, col 3)
-severe: [INVALID_METHOD_OVERRIDE] Invalid override. The type of DomMatrix.m32 (() → num) is not a subtype of DomMatrixReadOnly.m32 (() → double). (dart:html, line 10338, col 3)
-severe: [INVALID_FIELD_OVERRIDE] Field declaration DomMatrixReadOnly.m33 cannot be overridden in DomMatrix. (dart:html, line 10345, col 3)
-severe: [INVALID_METHOD_OVERRIDE] Invalid override. The type of DomMatrix.m33 (() → num) is not a subtype of DomMatrixReadOnly.m33 (() → double). (dart:html, line 10345, col 3)
-severe: [INVALID_FIELD_OVERRIDE] Field declaration DomMatrixReadOnly.m34 cannot be overridden in DomMatrix. (dart:html, line 10352, col 3)
-severe: [INVALID_METHOD_OVERRIDE] Invalid override. The type of DomMatrix.m34 (() → num) is not a subtype of DomMatrixReadOnly.m34 (() → double). (dart:html, line 10352, col 3)
-severe: [INVALID_FIELD_OVERRIDE] Field declaration DomMatrixReadOnly.m41 cannot be overridden in DomMatrix. (dart:html, line 10359, col 3)
-severe: [INVALID_METHOD_OVERRIDE] Invalid override. The type of DomMatrix.m41 (() → num) is not a subtype of DomMatrixReadOnly.m41 (() → double). (dart:html, line 10359, col 3)
-severe: [INVALID_FIELD_OVERRIDE] Field declaration DomMatrixReadOnly.m42 cannot be overridden in DomMatrix. (dart:html, line 10366, col 3)
-severe: [INVALID_METHOD_OVERRIDE] Invalid override. The type of DomMatrix.m42 (() → num) is not a subtype of DomMatrixReadOnly.m42 (() → double). (dart:html, line 10366, col 3)
-severe: [INVALID_FIELD_OVERRIDE] Field declaration DomMatrixReadOnly.m43 cannot be overridden in DomMatrix. (dart:html, line 10373, col 3)
-severe: [INVALID_METHOD_OVERRIDE] Invalid override. The type of DomMatrix.m43 (() → num) is not a subtype of DomMatrixReadOnly.m43 (() → double). (dart:html, line 10373, col 3)
-severe: [INVALID_FIELD_OVERRIDE] Field declaration DomMatrixReadOnly.m44 cannot be overridden in DomMatrix. (dart:html, line 10380, col 3)
-severe: [INVALID_METHOD_OVERRIDE] Invalid override. The type of DomMatrix.m44 (() → num) is not a subtype of DomMatrixReadOnly.m44 (() → double). (dart:html, line 10380, col 3)
-severe: [INVALID_FIELD_OVERRIDE] Field declaration DomPointReadOnly.w cannot be overridden in DomPoint. (dart:html, line 10651, col 3)
-severe: [INVALID_METHOD_OVERRIDE] Invalid override. The type of DomPoint.w (() → num) is not a subtype of DomPointReadOnly.w (() → double). (dart:html, line 10651, col 3)
-severe: [INVALID_FIELD_OVERRIDE] Field declaration DomPointReadOnly.x cannot be overridden in DomPoint. (dart:html, line 10658, col 3)
-severe: [INVALID_METHOD_OVERRIDE] Invalid override. The type of DomPoint.x (() → num) is not a subtype of DomPointReadOnly.x (() → double). (dart:html, line 10658, col 3)
-severe: [INVALID_FIELD_OVERRIDE] Field declaration DomPointReadOnly.y cannot be overridden in DomPoint. (dart:html, line 10665, col 3)
-severe: [INVALID_METHOD_OVERRIDE] Invalid override. The type of DomPoint.y (() → num) is not a subtype of DomPointReadOnly.y (() → double). (dart:html, line 10665, col 3)
-severe: [INVALID_FIELD_OVERRIDE] Field declaration DomPointReadOnly.z cannot be overridden in DomPoint. (dart:html, line 10672, col 3)
-severe: [INVALID_METHOD_OVERRIDE] Invalid override. The type of DomPoint.z (() → num) is not a subtype of DomPointReadOnly.z (() → double). (dart:html, line 10672, col 3)
-severe: [AnalyzerMessage] Missing concrete implementation of setter 'Rectangle.height', setter 'Rectangle.left', setter 'Rectangle.top' and setter 'Rectangle.width' (dart:html, line 10727, col 7)
-severe: [INVALID_METHOD_OVERRIDE] Invalid override. The type of DomStringList.contains ((String) → bool) is not a subtype of Iterable<String>.contains ((Object) → bool). (dart:html, line 10951, col 3)
-severe: [INVALID_METHOD_OVERRIDE] Invalid override. The type of DomStringList.contains ((String) → bool) is not a subtype of ListMixin<String>.contains ((Object) → bool). (dart:html, line 10951, col 3)
-severe: [INVALID_METHOD_OVERRIDE] Invalid override. The type of _FrozenElementList.sort (([(Element, Element) → int]) → void) is not a subtype of ListMixin<dynamic>.sort (([(dynamic, dynamic) → int]) → void). (dart:html, line 11756, col 3)
-severe: [INVALID_METHOD_OVERRIDE] Invalid override. The type of _FrozenElementList.sort (([(Element, Element) → int]) → void) is not a subtype of ListMixin<dynamic>.sort (([(dynamic, dynamic) → int]) → void). (dart:html, line 11756, col 3)
-severe: [AnalyzerMessage] The setter 'classes' is not defined for the class 'Node' (dart:html, line 11782, col 32)
-severe: [AnalyzerMessage] The final variables '_attributes', '_childElementCount' and '20' more must be initialized (dart:html, line 12317, col 3)
-severe: [STATIC_TYPE_ERROR] Type check failed: new _FrozenElementList._wrap(_querySelectorAll(selectors)) (_FrozenElementList) is not of type ElementList<Element> (dart:html, line 12541, col 5)
-severe: [AnalyzerMessage] The setter 'href' is not defined for the class 'Element' (dart:html, line 13233, col 12)
-severe: [AnalyzerMessage] The method 'matches' is not defined for the class 'EventTarget' (dart:html, line 15341, col 18)
-severe: [AnalyzerMessage] The getter 'parent' is not defined for the class 'EventTarget' (dart:html, line 15342, col 23)
-severe: [AnalyzerMessage] The getter 'parent' is not defined for the class 'EventTarget' (dart:html, line 15343, col 56)
-severe: [INVALID_FIELD_OVERRIDE] Field declaration Events._ptr cannot be overridden in ElementEvents. (dart:html, line 15642, col 3)
-severe: [AnalyzerMessage] The final variables 'elements', 'form' and '4' more must be initialized (dart:html, line 15820, col 3)
-severe: [AnalyzerMessage] The final variable 'length' must be initialized (dart:html, line 16719, col 3)
-severe: [INVALID_FIELD_OVERRIDE] Field declaration Document.fullscreenElement cannot be overridden in HtmlDocument. (dart:html, line 18163, col 3)
-severe: [INVALID_FIELD_OVERRIDE] Field declaration Document.fullscreenEnabled cannot be overridden in HtmlDocument. (dart:html, line 18179, col 3)
-severe: [INVALID_FIELD_OVERRIDE] Field declaration Document.hidden cannot be overridden in HtmlDocument. (dart:html, line 18185, col 3)
-severe: [INVALID_FIELD_OVERRIDE] Field declaration Document.visibilityState cannot be overridden in HtmlDocument. (dart:html, line 18192, col 3)
-severe: [INVALID_METHOD_OVERRIDE] Invalid override. The type of HtmlFormControlsCollection.namedItem ((String) → Object) is not a subtype of HtmlCollection.namedItem ((String) → Element). (dart:html, line 18314, col 3)
-severe: [AnalyzerMessage] The method 'convertDartClosureToJS' is not defined for the class 'HttpRequest' (dart:html, line 18659, col 33)
-severe: [AnalyzerMessage] The method 'convertDartClosureToJS' is not defined for the class 'HttpRequest' (dart:html, line 18663, col 34)
-severe: [AnalyzerMessage] The final variable '_get_contentWindow' must be initialized (dart:html, line 19230, col 3)
-severe: [AnalyzerMessage] The setter 'src' is not defined for the class 'Element' (dart:html, line 19358, col 24)
-severe: [AnalyzerMessage] The setter 'width' is not defined for the class 'Element' (dart:html, line 19359, col 26)
-severe: [AnalyzerMessage] The setter 'height' is not defined for the class 'Element' (dart:html, line 19360, col 27)
-severe: [AnalyzerMessage] The final variables 'complete', 'currentSrc' and '2' more must be initialized (dart:html, line 19368, col 3)
-severe: [AnalyzerMessage] The setter 'type' is not defined for the class 'Element' (dart:html, line 19484, col 11)
-severe: [AnalyzerMessage] The final variables '_get_valueAsDate', 'entries' and '6' more must be initialized (dart:html, line 19497, col 3)
-severe: [AnalyzerMessage] The method '_initKeyboardEvent' is not defined for the class 'Event' (dart:html, line 20403, col 7)
-severe: [AnalyzerMessage] The final variables 'form', 'labels' and '4' more must be initialized (dart:html, line 20523, col 3)
-severe: [AnalyzerMessage] The final variables 'control' and 'form' must be initialized (dart:html, line 20629, col 3)
-severe: [AnalyzerMessage] The final variable 'form' must be initialized (dart:html, line 20663, col 3)
-severe: [AnalyzerMessage] The final variables 'import', 'sheet' and '1' more must be initialized (dart:html, line 20689, col 3)
-severe: [AnalyzerMessage] The final variable 'areas' must be initialized (dart:html, line 20887, col 3)
-severe: [AnalyzerMessage] The final variables 'audioDecodedByteCount', 'audioTracks' and '15' more must be initialized (dart:html, line 21092, col 3)
-severe: [AnalyzerMessage] The method '_initMessageEvent' is not defined for the class 'Event' (dart:html, line 22233, col 11)
-severe: [AnalyzerMessage] The final variable 'labels' must be initialized (dart:html, line 22428, col 3)
-severe: [AnalyzerMessage] The method '_initMouseEvent' is not defined for the class 'Event' (dart:html, line 22890, col 11)
-severe: [AnalyzerMessage] The method 'convertDartClosureToJS' is not defined for the class 'MutationObserver' (dart:html, line 23178, col 9)
-severe: [AnalyzerMessage] The final variables '_localName', '_namespaceUri' and '12' more must be initialized (dart:html, line 23805, col 3)
-severe: [AnalyzerMessage] The final variables 'form', 'validationMessage' and '2' more must be initialized (dart:html, line 24598, col 3)
-severe: [AnalyzerMessage] The final variables 'form' and 'index' must be initialized (dart:html, line 24733, col 3)
-severe: [AnalyzerMessage] The final variables 'form', 'htmlFor' and '5' more must be initialized (dart:html, line 24787, col 3)
-severe: [AnalyzerMessage] The final variables 'labels' and 'position' must be initialized (dart:html, line 25757, col 3)
-severe: [AnalyzerMessage] The final variables 'form', 'labels' and '4' more must be initialized (dart:html, line 27207, col 3)
-severe: [AnalyzerMessage] The argument type 'List<Element>' cannot be assigned to the parameter type 'Iterable<OptionElement>' (dart:html, line 27303, col 37)
-severe: [STATIC_TYPE_ERROR] Type check failed: options (List<Element>) is not of type Iterable<OptionElement> (dart:html, line 27303, col 37)
-severe: [INVALID_METHOD_OVERRIDE] Invalid override. The type of SharedWorker.onError (() → Stream<Event>) is not a subtype of AbstractWorker.onError (() → Stream<ErrorEvent>). (dart:html, line 27863, col 3)
-severe: [INVALID_METHOD_OVERRIDE] Invalid override. The type of Storage.containsValue ((String) → bool) is not a subtype of Map<String, String>.containsValue ((Object) → bool). (dart:html, line 28875, col 3)
-severe: [INVALID_METHOD_OVERRIDE] Invalid override. The type of Storage.containsKey ((String) → bool) is not a subtype of Map<String, String>.containsKey ((Object) → bool). (dart:html, line 28877, col 3)
-severe: [INVALID_METHOD_OVERRIDE] Invalid override. The type of Storage.[] ((String) → String) is not a subtype of Map<String, String>.[] ((Object) → String). (dart:html, line 28879, col 3)
-severe: [INVALID_METHOD_OVERRIDE] Invalid override. The type of Storage.remove ((String) → String) is not a subtype of Map<String, String>.remove ((Object) → String). (dart:html, line 28888, col 3)
-severe: [AnalyzerMessage] The method '_initStorageEvent' is not defined for the class 'Event' (dart:html, line 28995, col 7)
-severe: [AnalyzerMessage] The final variable 'sheet' must be initialized (dart:html, line 29134, col 3)
-severe: [AnalyzerMessage] The final variable 'cellIndex' must be initialized (dart:html, line 29256, col 3)
-severe: [AnalyzerMessage] The final variables '_rows' and '_tBodies' must be initialized (dart:html, line 29367, col 3)
-severe: [AnalyzerMessage] The final variables '_cells', 'rowIndex' and '1' more must be initialized (dart:html, line 29477, col 3)
-severe: [AnalyzerMessage] The final variable '_rows' must be initialized (dart:html, line 29544, col 3)
-severe: [AnalyzerMessage] The final variable 'content' must be initialized (dart:html, line 29587, col 3)
-severe: [AnalyzerMessage] The final variables 'form', 'labels' and '5' more must be initialized (dart:html, line 29663, col 3)
-severe: [AnalyzerMessage] The method '_initTextEvent' is not defined for the class 'Event' (dart:html, line 29806, col 7)
-severe: [AnalyzerMessage] The method '_initTouchEvent' is not defined for the class 'Event' (dart:html, line 30466, col 7)
-severe: [AnalyzerMessage] The final variables 'readyState' and 'track' must be initialized (dart:html, line 30616, col 3)
-severe: [AnalyzerMessage] The method '_initUIEvent' is not defined for the class 'Event' (dart:html, line 30796, col 7)
-severe: [AnalyzerMessage] The final variables 'decodedFrameCount', 'droppedFrameCount' and '2' more must be initialized (dart:html, line 31146, col 3)
-severe: [INVALID_METHOD_OVERRIDE] Invalid override. The type of Window.postMessage ((dynamic, String, [List<MessagePort>]) → void) is not a subtype of WindowBase.postMessage ((dynamic, String, [List<dynamic>]) → void). (dart:html, line 32989, col 3)
-severe: [AnalyzerMessage] The return type 'String' is not a 'void', as defined by the method '' (dart:html, line 33901, col 14)
-severe: [INVALID_METHOD_OVERRIDE] Invalid override. The type of Worker.onError (() → Stream<Event>) is not a subtype of AbstractWorker.onError (() → Stream<ErrorEvent>). (dart:html, line 34096, col 3)
-severe: [INVALID_FIELD_OVERRIDE] Field declaration Node.text cannot be overridden in _Attr. (dart:html, line 34598, col 3)
-severe: [INVALID_FIELD_OVERRIDE] Field declaration Node.text= cannot be overridden in _Attr. (dart:html, line 34600, col 3)
-severe: [AnalyzerMessage] Missing concrete implementation of setter 'Rectangle.height', setter 'Rectangle.left', setter 'Rectangle.top' and setter 'Rectangle.width' (dart:html, line 34683, col 7)
-severe: [AnalyzerMessage] Missing concrete implementation of setter 'Rectangle.left' and setter 'Rectangle.top' (dart:html, line 35116, col 7)
-severe: [INVALID_FIELD_OVERRIDE] Field declaration DomRectReadOnly.height cannot be overridden in _DomRect. (dart:html, line 35144, col 3)
-severe: [INVALID_METHOD_OVERRIDE] Invalid override. The type of _DomRect.height (() → num) is not a subtype of DomRectReadOnly.height (() → double). (dart:html, line 35144, col 3)
-severe: [INVALID_FIELD_OVERRIDE] Field declaration DomRectReadOnly.width cannot be overridden in _DomRect. (dart:html, line 35151, col 3)
-severe: [INVALID_METHOD_OVERRIDE] Invalid override. The type of _DomRect.width (() → num) is not a subtype of DomRectReadOnly.width (() → double). (dart:html, line 35151, col 3)
-severe: [INVALID_FIELD_OVERRIDE] Field declaration DomRectReadOnly.x cannot be overridden in _DomRect. (dart:html, line 35158, col 3)
-severe: [INVALID_METHOD_OVERRIDE] Invalid override. The type of _DomRect.x (() → num) is not a subtype of DomRectReadOnly.x (() → double). (dart:html, line 35158, col 3)
-severe: [INVALID_FIELD_OVERRIDE] Field declaration DomRectReadOnly.y cannot be overridden in _DomRect. (dart:html, line 35165, col 3)
-severe: [INVALID_METHOD_OVERRIDE] Invalid override. The type of _DomRect.y (() → num) is not a subtype of DomRectReadOnly.y (() → double). (dart:html, line 35165, col 3)
-severe: [AnalyzerMessage] The method '_initMutationEvent' is not defined for the class 'Event' (dart:html, line 35456, col 11)
-severe: [INVALID_METHOD_OVERRIDE] Invalid override. The type of _AttributeMap.containsValue ((String) → bool) is not a subtype of Map<String, String>.containsValue ((Object) → bool). (dart:html, line 36035, col 3)
-severe: [AnalyzerMessage] The getter 'name' is not defined for the class 'Node' (dart:html, line 36070, col 32)
-severe: [AnalyzerMessage] The getter 'value' is not defined for the class 'Node' (dart:html, line 36082, col 34)
-severe: [INVALID_METHOD_OVERRIDE] Invalid override. The type of _ElementAttributeMap.containsKey ((String) → bool) is not a subtype of Map<String, String>.containsKey ((Object) → bool). (dart:html, line 36113, col 3)
-severe: [INVALID_METHOD_OVERRIDE] Invalid override. The type of _ElementAttributeMap.[] ((String) → String) is not a subtype of Map<String, String>.[] ((Object) → String). (dart:html, line 36117, col 3)
-severe: [INVALID_METHOD_OVERRIDE] Invalid override. The type of _ElementAttributeMap.remove ((String) → String) is not a subtype of Map<String, String>.remove ((Object) → String). (dart:html, line 36125, col 3)
-severe: [INVALID_METHOD_OVERRIDE] Invalid override. The type of _NamespacedAttributeMap.containsKey ((String) → bool) is not a subtype of Map<String, String>.containsKey ((Object) → bool). (dart:html, line 36150, col 3)
-severe: [INVALID_METHOD_OVERRIDE] Invalid override. The type of _NamespacedAttributeMap.[] ((String) → String) is not a subtype of Map<String, String>.[] ((Object) → String). (dart:html, line 36154, col 3)
-severe: [INVALID_METHOD_OVERRIDE] Invalid override. The type of _NamespacedAttributeMap.remove ((String) → String) is not a subtype of Map<String, String>.remove ((Object) → String). (dart:html, line 36162, col 3)
-severe: [INVALID_METHOD_OVERRIDE] Invalid override. The type of _DataAttributeMap.containsValue ((String) → bool) is not a subtype of Map<String, String>.containsValue ((Object) → bool). (dart:html, line 36196, col 3)
-severe: [INVALID_METHOD_OVERRIDE] Invalid override. The type of _DataAttributeMap.containsKey ((String) → bool) is not a subtype of Map<String, String>.containsKey ((Object) → bool). (dart:html, line 36198, col 3)
-severe: [INVALID_METHOD_OVERRIDE] Invalid override. The type of _DataAttributeMap.[] ((String) → String) is not a subtype of Map<String, String>.[] ((Object) → String). (dart:html, line 36200, col 3)
-severe: [INVALID_METHOD_OVERRIDE] Invalid override. The type of _DataAttributeMap.remove ((String) → String) is not a subtype of Map<String, String>.remove ((Object) → String). (dart:html, line 36209, col 3)
-severe: [INVALID_METHOD_OVERRIDE] Invalid override. The type of CssClassSet.contains ((String) → bool) is not a subtype of Set<String>.contains ((Object) → bool). (dart:html, line 36522, col 3)
-severe: [INVALID_METHOD_OVERRIDE] Invalid override. The type of CssClassSet.removeAll ((Iterable<String>) → void) is not a subtype of Set<String>.removeAll ((Iterable<Object>) → void). (dart:html, line 36574, col 3)
-severe: [AnalyzerMessage] The getter 'value' is not defined for the class 'num' (dart:html, line 36621, col 21)
-severe: [AnalyzerMessage] A value of type 'Dimension' cannot be assigned to a variable of type 'num' (dart:html, line 36621, col 44)
-severe: [STATIC_TYPE_ERROR] Type check failed: new Dimension.px(0) (Dimension) is not of type num (dart:html, line 36621, col 44)
-severe: [AnalyzerMessage] The getter 'value' is not defined for the class 'num' (dart:html, line 36639, col 20)
-severe: [AnalyzerMessage] A value of type 'Dimension' cannot be assigned to a variable of type 'num' (dart:html, line 36639, col 42)
-severe: [STATIC_TYPE_ERROR] Type check failed: new Dimension.px(0) (Dimension) is not of type num (dart:html, line 36639, col 42)
-severe: [INVALID_FIELD_OVERRIDE] Field declaration MutableRectangle<num>.left cannot be overridden in CssRect. (dart:html, line 36754, col 3)
-severe: [INVALID_FIELD_OVERRIDE] Field declaration MutableRectangle<num>.top cannot be overridden in CssRect. (dart:html, line 36756, col 3)
-severe: [INVALID_METHOD_OVERRIDE] Invalid override. The type of _ElementCssClassSet.removeAll ((Iterable<String>) → void) is not a subtype of CssClassSetImpl.removeAll ((Iterable<Object>) → void). (dart:html, line 36973, col 3)
-severe: [INVALID_METHOD_OVERRIDE] Invalid override. The type of _ElementCssClassSet.retainAll ((Iterable<String>) → void) is not a subtype of CssClassSetImpl.retainAll ((Iterable<Object>) → void). (dart:html, line 36977, col 3)
-severe: [INVALID_METHOD_OVERRIDE] Invalid override. The type of _ElementCssClassSet.retainAll ((Iterable<String>) → void) is not a subtype of Set<String>.retainAll ((Iterable<Object>) → void). (dart:html, line 36977, col 3)
-severe: [INVALID_METHOD_OVERRIDE] Invalid override. The type of _EventStream.asBroadcastStream (({onListen: (StreamSubscription<dynamic>) → void, onCancel: (StreamSubscription<dynamic>) → void}) → Stream<T>) is not a subtype of Stream<T>.asBroadcastStream (({onListen: (StreamSubscription<T>) → void, onCancel: (StreamSubscription<T>) → void}) → Stream<T>). (dart:html, line 37327, col 3)
-severe: [AnalyzerMessage] Missing concrete implementation of 'Stream.asBroadcastStream' (dart:html, line 37346, col 7)
-severe: [INVALID_METHOD_OVERRIDE] Base class introduces an invalid override. The type of _EventStream.asBroadcastStream (({onListen: (StreamSubscription<dynamic>) → void, onCancel: (StreamSubscription<dynamic>) → void}) → Stream<T>) is not a subtype of Stream<T>.asBroadcastStream (({onListen: (StreamSubscription<T>) → void, onCancel: (StreamSubscription<T>) → void}) → Stream<T>). (dart:html, line 37346, col 48)
-severe: [AnalyzerMessage] The method 'matchesWithAncestors' is not defined for the class 'EventTarget' (dart:html, line 37352, col 31)
-severe: [AnalyzerMessage] The method 'matchesWithAncestors' is not defined for the class 'EventTarget' (dart:html, line 37376, col 31)
-severe: [INVALID_METHOD_OVERRIDE] Invalid override. The type of _ElementListEventStreamImpl.asBroadcastStream (({onListen: (StreamSubscription<dynamic>) → void, onCancel: (StreamSubscription<dynamic>) → void}) → Stream<T>) is not a subtype of Stream<T>.asBroadcastStream (({onListen: (StreamSubscription<T>) → void, onCancel: (StreamSubscription<T>) → void}) → Stream<T>). (dart:html, line 37402, col 3)
-severe: [INVALID_METHOD_OVERRIDE] Invalid override. The type of _ElementListEventStreamImpl.asBroadcastStream (({onListen: (StreamSubscription<dynamic>) → void, onCancel: (StreamSubscription<dynamic>) → void}) → Stream<T>) is not a subtype of Stream<T>.asBroadcastStream (({onListen: (StreamSubscription<T>) → void, onCancel: (StreamSubscription<T>) → void}) → Stream<T>). (dart:html, line 37402, col 3)
-severe: [INVALID_METHOD_OVERRIDE] Invalid override. The type of _CustomEventStreamImpl.asBroadcastStream (({onListen: (StreamSubscription<dynamic>) → void, onCancel: (StreamSubscription<dynamic>) → void}) → Stream<T>) is not a subtype of Stream<T>.asBroadcastStream (({onListen: (StreamSubscription<T>) → void, onCancel: (StreamSubscription<T>) → void}) → Stream<T>). (dart:html, line 37518, col 3)
-severe: [INVALID_METHOD_OVERRIDE] Invalid override. The type of _CustomEventStreamImpl.asBroadcastStream (({onListen: (StreamSubscription<dynamic>) → void, onCancel: (StreamSubscription<dynamic>) → void}) → Stream<T>) is not a subtype of Stream<T>.asBroadcastStream (({onListen: (StreamSubscription<T>) → void, onCancel: (StreamSubscription<T>) → void}) → Stream<T>). (dart:html, line 37518, col 3)
-severe: [AnalyzerMessage] Missing concrete implementation of 'Stream.asBroadcastStream' (dart:html, line 37529, col 7)
-severe: [INVALID_METHOD_OVERRIDE] Base class introduces an invalid override. The type of _CustomEventStreamImpl.asBroadcastStream (({onListen: (StreamSubscription<dynamic>) → void, onCancel: (StreamSubscription<dynamic>) → void}) → Stream<KeyEvent>) is not a subtype of Stream<KeyEvent>.asBroadcastStream (({onListen: (StreamSubscription<KeyEvent>) → void, onCancel: (StreamSubscription<KeyEvent>) → void}) → Stream<KeyEvent>). (dart:html, line 37529, col 33)
-severe: [INVALID_SUPER_INVOCATION] super call must be last in an initializer list (see https://goo.gl/EY6hDP): super(_EVENT_TYPE) (dart:html, line 39057, col 38)
-severe: [AnalyzerMessage] The getter '_shadowCharCode' is not defined for the class 'KeyboardEvent' (dart:html, line 39090, col 21)
-severe: [AnalyzerMessage] The getter '_shadowCharCode' is not defined for the class 'KeyboardEvent' (dart:html, line 39095, col 47)
-severe: [INVALID_SUPER_INVOCATION] super call must be last in an initializer list (see https://goo.gl/EY6hDP): super(uriPolicy, allowedElements: allowedElements, allowedAttributes: allowedAttributes, allowedUriAttributes: allowedUriAttributes) (dart:html, line 39753, col 7)
-severe: [INVALID_SUPER_INVOCATION] super call must be last in an initializer list (see https://goo.gl/EY6hDP): super(null, allowedElements: ['TEMPLATE'], allowedAttributes: _TEMPLATE_ATTRS.map((attr) => 'TEMPLATE::$attr')) (dart:html, line 39790, col 7)
-severe: [AnalyzerMessage] The function 'setNativeSubclassDispatchRecord' is not defined (dart:html, line 40083, col 5)
-severe: [AnalyzerMessage] The function 'convertDartClosureToJS' is not defined (dart:html, line 40111, col 7)
-severe: [AnalyzerMessage] The function 'convertDartClosureToJS' is not defined (dart:html, line 40121, col 7)
-severe: [AnalyzerMessage] The function 'findInterceptorConstructorForType' is not defined (dart:html, line 40140, col 26)
-severe: [AnalyzerMessage] The function 'findConstructorForNativeSubclassType' is not defined (dart:html, line 40147, col 21)
-severe: [AnalyzerMessage] The function 'getNativeInterceptor' is not defined (dart:html, line 40154, col 3)
-severe: [AnalyzerMessage] The function 'findDispatchTagForInterceptorClass' is not defined (dart:html, line 40156, col 26)
-severe: [AnalyzerMessage] The function 'setNativeSubclassDispatchRecord' is not defined (dart:html, line 40190, col 3)
-severe: [AnalyzerMessage] The method 'findInterceptorConstructorForType' is not defined for the class '_JSElementUpgrader' (dart:html, line 40213, col 28)
-severe: [AnalyzerMessage] The method 'findConstructorForNativeSubclassType' is not defined for the class '_JSElementUpgrader' (dart:html, line 40218, col 20)
-severe: [AnalyzerMessage] The method 'getNativeInterceptor' is not defined for the class '_JSElementUpgrader' (dart:html, line 40225, col 5)
-severe: [AnalyzerMessage] The method 'findDispatchTagForInterceptorClass' is not defined for the class '_JSElementUpgrader' (dart:html, line 40227, col 25)
-severe: [AnalyzerMessage] The method 'setNativeSubclassDispatchRecord' is not defined for the class '_JSElementUpgrader' (dart:html, line 40257, col 5)
-severe: [AnalyzerMessage] The method 'makeLeafDispatchRecord' is not defined for the class 'KeyEvent' (dart:html, line 40462, col 12)
-severe: [AnalyzerMessage] The method 'setDispatchProperty' is not defined for the class 'KeyEvent' (dart:html, line 40532, col 5)
-severe: [AnalyzerMessage] The method 'matches' is not defined for the class 'EventTarget' (dart:html, line 40708, col 18)
-severe: [AnalyzerMessage] The getter 'parent' is not defined for the class 'EventTarget' (dart:html, line 40709, col 23)
-severe: [AnalyzerMessage] The getter 'parent' is not defined for the class 'EventTarget' (dart:html, line 40710, col 56)
-severe: [AnalyzerMessage] The function 'convertDartClosureToJS' is not defined (dart:html_common/conversions_dart2js.dart, line 89, col 14)
-severe: [AnalyzerMessage] The function 'convertDartClosureToJS' is not defined (dart:html_common/conversions_dart2js.dart, line 90, col 15)
+severe: [AnalyzerMessage] The setter 'href' is not defined for the class 'Element' (dart:html, line 170, col 25)
+severe: [AnalyzerMessage] The final variable 'origin' must be initialized (dart:html, line 178, col 3)
+severe: [AnalyzerMessage] The final variable 'origin' must be initialized (dart:html, line 745, col 3)
+severe: [AnalyzerMessage] The final variables 'form', 'labels' and '3' more must be initialized (dart:html, line 1376, col 3)
+severe: [AnalyzerMessage] The setter 'width' is not defined for the class 'Element' (dart:html, line 1559, col 26)
+severe: [AnalyzerMessage] The setter 'height' is not defined for the class 'Element' (dart:html, line 1560, col 27)
+severe: [AnalyzerMessage] The method '_initCompositionEvent' is not defined for the class 'Event' (dart:html, line 2629, col 9)
+severe: [AnalyzerMessage] The final variable 'options' must be initialized (dart:html, line 8255, col 3)
+severe: [AnalyzerMessage] The method '_initDeviceOrientationEvent' is not defined for the class 'Event' (dart:html, line 8674, col 7)
+severe: [STATIC_TYPE_ERROR] Type check failed: new _FrozenElementList._wrap(_querySelectorAll(selectors)) (_FrozenElementList) is not of type ElementList<Element> (dart:html, line 9833, col 12)
+severe: [STATIC_TYPE_ERROR] Type check failed: new _FrozenElementList._wrap(_querySelectorAll(selectors)) (_FrozenElementList) is not of type ElementList<Element> (dart:html, line 9962, col 5)
+severe: [INVALID_FIELD_OVERRIDE] Field declaration DomMatrixReadOnly.a cannot be overridden in DomMatrix. (dart:html, line 10231, col 3)
+severe: [INVALID_METHOD_OVERRIDE] Invalid override. The type of DomMatrix.a (() → num) is not a subtype of DomMatrixReadOnly.a (() → double). (dart:html, line 10231, col 3)
+severe: [INVALID_FIELD_OVERRIDE] Field declaration DomMatrixReadOnly.b cannot be overridden in DomMatrix. (dart:html, line 10238, col 3)
+severe: [INVALID_METHOD_OVERRIDE] Invalid override. The type of DomMatrix.b (() → num) is not a subtype of DomMatrixReadOnly.b (() → double). (dart:html, line 10238, col 3)
+severe: [INVALID_FIELD_OVERRIDE] Field declaration DomMatrixReadOnly.c cannot be overridden in DomMatrix. (dart:html, line 10245, col 3)
+severe: [INVALID_METHOD_OVERRIDE] Invalid override. The type of DomMatrix.c (() → num) is not a subtype of DomMatrixReadOnly.c (() → double). (dart:html, line 10245, col 3)
+severe: [INVALID_FIELD_OVERRIDE] Field declaration DomMatrixReadOnly.d cannot be overridden in DomMatrix. (dart:html, line 10252, col 3)
+severe: [INVALID_METHOD_OVERRIDE] Invalid override. The type of DomMatrix.d (() → num) is not a subtype of DomMatrixReadOnly.d (() → double). (dart:html, line 10252, col 3)
+severe: [INVALID_FIELD_OVERRIDE] Field declaration DomMatrixReadOnly.e cannot be overridden in DomMatrix. (dart:html, line 10259, col 3)
+severe: [INVALID_METHOD_OVERRIDE] Invalid override. The type of DomMatrix.e (() → num) is not a subtype of DomMatrixReadOnly.e (() → double). (dart:html, line 10259, col 3)
+severe: [INVALID_FIELD_OVERRIDE] Field declaration DomMatrixReadOnly.f cannot be overridden in DomMatrix. (dart:html, line 10266, col 3)
+severe: [INVALID_METHOD_OVERRIDE] Invalid override. The type of DomMatrix.f (() → num) is not a subtype of DomMatrixReadOnly.f (() → double). (dart:html, line 10266, col 3)
+severe: [INVALID_FIELD_OVERRIDE] Field declaration DomMatrixReadOnly.m11 cannot be overridden in DomMatrix. (dart:html, line 10273, col 3)
+severe: [INVALID_METHOD_OVERRIDE] Invalid override. The type of DomMatrix.m11 (() → num) is not a subtype of DomMatrixReadOnly.m11 (() → double). (dart:html, line 10273, col 3)
+severe: [INVALID_FIELD_OVERRIDE] Field declaration DomMatrixReadOnly.m12 cannot be overridden in DomMatrix. (dart:html, line 10280, col 3)
+severe: [INVALID_METHOD_OVERRIDE] Invalid override. The type of DomMatrix.m12 (() → num) is not a subtype of DomMatrixReadOnly.m12 (() → double). (dart:html, line 10280, col 3)
+severe: [INVALID_FIELD_OVERRIDE] Field declaration DomMatrixReadOnly.m13 cannot be overridden in DomMatrix. (dart:html, line 10287, col 3)
+severe: [INVALID_METHOD_OVERRIDE] Invalid override. The type of DomMatrix.m13 (() → num) is not a subtype of DomMatrixReadOnly.m13 (() → double). (dart:html, line 10287, col 3)
+severe: [INVALID_FIELD_OVERRIDE] Field declaration DomMatrixReadOnly.m14 cannot be overridden in DomMatrix. (dart:html, line 10294, col 3)
+severe: [INVALID_METHOD_OVERRIDE] Invalid override. The type of DomMatrix.m14 (() → num) is not a subtype of DomMatrixReadOnly.m14 (() → double). (dart:html, line 10294, col 3)
+severe: [INVALID_FIELD_OVERRIDE] Field declaration DomMatrixReadOnly.m21 cannot be overridden in DomMatrix. (dart:html, line 10301, col 3)
+severe: [INVALID_METHOD_OVERRIDE] Invalid override. The type of DomMatrix.m21 (() → num) is not a subtype of DomMatrixReadOnly.m21 (() → double). (dart:html, line 10301, col 3)
+severe: [INVALID_FIELD_OVERRIDE] Field declaration DomMatrixReadOnly.m22 cannot be overridden in DomMatrix. (dart:html, line 10308, col 3)
+severe: [INVALID_METHOD_OVERRIDE] Invalid override. The type of DomMatrix.m22 (() → num) is not a subtype of DomMatrixReadOnly.m22 (() → double). (dart:html, line 10308, col 3)
+severe: [INVALID_FIELD_OVERRIDE] Field declaration DomMatrixReadOnly.m23 cannot be overridden in DomMatrix. (dart:html, line 10315, col 3)
+severe: [INVALID_METHOD_OVERRIDE] Invalid override. The type of DomMatrix.m23 (() → num) is not a subtype of DomMatrixReadOnly.m23 (() → double). (dart:html, line 10315, col 3)
+severe: [INVALID_FIELD_OVERRIDE] Field declaration DomMatrixReadOnly.m24 cannot be overridden in DomMatrix. (dart:html, line 10322, col 3)
+severe: [INVALID_METHOD_OVERRIDE] Invalid override. The type of DomMatrix.m24 (() → num) is not a subtype of DomMatrixReadOnly.m24 (() → double). (dart:html, line 10322, col 3)
+severe: [INVALID_FIELD_OVERRIDE] Field declaration DomMatrixReadOnly.m31 cannot be overridden in DomMatrix. (dart:html, line 10329, col 3)
+severe: [INVALID_METHOD_OVERRIDE] Invalid override. The type of DomMatrix.m31 (() → num) is not a subtype of DomMatrixReadOnly.m31 (() → double). (dart:html, line 10329, col 3)
+severe: [INVALID_FIELD_OVERRIDE] Field declaration DomMatrixReadOnly.m32 cannot be overridden in DomMatrix. (dart:html, line 10336, col 3)
+severe: [INVALID_METHOD_OVERRIDE] Invalid override. The type of DomMatrix.m32 (() → num) is not a subtype of DomMatrixReadOnly.m32 (() → double). (dart:html, line 10336, col 3)
+severe: [INVALID_FIELD_OVERRIDE] Field declaration DomMatrixReadOnly.m33 cannot be overridden in DomMatrix. (dart:html, line 10343, col 3)
+severe: [INVALID_METHOD_OVERRIDE] Invalid override. The type of DomMatrix.m33 (() → num) is not a subtype of DomMatrixReadOnly.m33 (() → double). (dart:html, line 10343, col 3)
+severe: [INVALID_FIELD_OVERRIDE] Field declaration DomMatrixReadOnly.m34 cannot be overridden in DomMatrix. (dart:html, line 10350, col 3)
+severe: [INVALID_METHOD_OVERRIDE] Invalid override. The type of DomMatrix.m34 (() → num) is not a subtype of DomMatrixReadOnly.m34 (() → double). (dart:html, line 10350, col 3)
+severe: [INVALID_FIELD_OVERRIDE] Field declaration DomMatrixReadOnly.m41 cannot be overridden in DomMatrix. (dart:html, line 10357, col 3)
+severe: [INVALID_METHOD_OVERRIDE] Invalid override. The type of DomMatrix.m41 (() → num) is not a subtype of DomMatrixReadOnly.m41 (() → double). (dart:html, line 10357, col 3)
+severe: [INVALID_FIELD_OVERRIDE] Field declaration DomMatrixReadOnly.m42 cannot be overridden in DomMatrix. (dart:html, line 10364, col 3)
+severe: [INVALID_METHOD_OVERRIDE] Invalid override. The type of DomMatrix.m42 (() → num) is not a subtype of DomMatrixReadOnly.m42 (() → double). (dart:html, line 10364, col 3)
+severe: [INVALID_FIELD_OVERRIDE] Field declaration DomMatrixReadOnly.m43 cannot be overridden in DomMatrix. (dart:html, line 10371, col 3)
+severe: [INVALID_METHOD_OVERRIDE] Invalid override. The type of DomMatrix.m43 (() → num) is not a subtype of DomMatrixReadOnly.m43 (() → double). (dart:html, line 10371, col 3)
+severe: [INVALID_FIELD_OVERRIDE] Field declaration DomMatrixReadOnly.m44 cannot be overridden in DomMatrix. (dart:html, line 10378, col 3)
+severe: [INVALID_METHOD_OVERRIDE] Invalid override. The type of DomMatrix.m44 (() → num) is not a subtype of DomMatrixReadOnly.m44 (() → double). (dart:html, line 10378, col 3)
+severe: [INVALID_FIELD_OVERRIDE] Field declaration DomPointReadOnly.w cannot be overridden in DomPoint. (dart:html, line 10649, col 3)
+severe: [INVALID_METHOD_OVERRIDE] Invalid override. The type of DomPoint.w (() → num) is not a subtype of DomPointReadOnly.w (() → double). (dart:html, line 10649, col 3)
+severe: [INVALID_FIELD_OVERRIDE] Field declaration DomPointReadOnly.x cannot be overridden in DomPoint. (dart:html, line 10656, col 3)
+severe: [INVALID_METHOD_OVERRIDE] Invalid override. The type of DomPoint.x (() → num) is not a subtype of DomPointReadOnly.x (() → double). (dart:html, line 10656, col 3)
+severe: [INVALID_FIELD_OVERRIDE] Field declaration DomPointReadOnly.y cannot be overridden in DomPoint. (dart:html, line 10663, col 3)
+severe: [INVALID_METHOD_OVERRIDE] Invalid override. The type of DomPoint.y (() → num) is not a subtype of DomPointReadOnly.y (() → double). (dart:html, line 10663, col 3)
+severe: [INVALID_FIELD_OVERRIDE] Field declaration DomPointReadOnly.z cannot be overridden in DomPoint. (dart:html, line 10670, col 3)
+severe: [INVALID_METHOD_OVERRIDE] Invalid override. The type of DomPoint.z (() → num) is not a subtype of DomPointReadOnly.z (() → double). (dart:html, line 10670, col 3)
+severe: [AnalyzerMessage] Missing concrete implementation of setter 'Rectangle.height', setter 'Rectangle.left', setter 'Rectangle.top' and setter 'Rectangle.width' (dart:html, line 10725, col 7)
+severe: [INVALID_METHOD_OVERRIDE] Invalid override. The type of DomStringList.contains ((String) → bool) is not a subtype of Iterable<String>.contains ((Object) → bool). (dart:html, line 10949, col 3)
+severe: [INVALID_METHOD_OVERRIDE] Invalid override. The type of DomStringList.contains ((String) → bool) is not a subtype of ListMixin<String>.contains ((Object) → bool). (dart:html, line 10949, col 3)
+severe: [INVALID_METHOD_OVERRIDE] Invalid override. The type of _FrozenElementList.sort (([(Element, Element) → int]) → void) is not a subtype of ListMixin<dynamic>.sort (([(dynamic, dynamic) → int]) → void). (dart:html, line 11754, col 3)
+severe: [INVALID_METHOD_OVERRIDE] Invalid override. The type of _FrozenElementList.sort (([(Element, Element) → int]) → void) is not a subtype of ListMixin<dynamic>.sort (([(dynamic, dynamic) → int]) → void). (dart:html, line 11754, col 3)
+severe: [AnalyzerMessage] The setter 'classes' is not defined for the class 'Node' (dart:html, line 11780, col 32)
+severe: [AnalyzerMessage] The final variables '_attributes', '_childElementCount' and '20' more must be initialized (dart:html, line 12315, col 3)
+severe: [STATIC_TYPE_ERROR] Type check failed: new _FrozenElementList._wrap(_querySelectorAll(selectors)) (_FrozenElementList) is not of type ElementList<Element> (dart:html, line 12539, col 5)
+severe: [AnalyzerMessage] The setter 'href' is not defined for the class 'Element' (dart:html, line 13231, col 12)
+severe: [AnalyzerMessage] The method 'matches' is not defined for the class 'EventTarget' (dart:html, line 15339, col 18)
+severe: [AnalyzerMessage] The getter 'parent' is not defined for the class 'EventTarget' (dart:html, line 15340, col 23)
+severe: [AnalyzerMessage] The getter 'parent' is not defined for the class 'EventTarget' (dart:html, line 15341, col 56)
+severe: [INVALID_FIELD_OVERRIDE] Field declaration Events._ptr cannot be overridden in ElementEvents. (dart:html, line 15640, col 3)
+severe: [AnalyzerMessage] The final variables 'elements', 'form' and '4' more must be initialized (dart:html, line 15818, col 3)
+severe: [AnalyzerMessage] The final variable 'length' must be initialized (dart:html, line 16717, col 3)
+severe: [INVALID_FIELD_OVERRIDE] Field declaration Document.fullscreenElement cannot be overridden in HtmlDocument. (dart:html, line 18161, col 3)
+severe: [INVALID_FIELD_OVERRIDE] Field declaration Document.fullscreenEnabled cannot be overridden in HtmlDocument. (dart:html, line 18177, col 3)
+severe: [INVALID_FIELD_OVERRIDE] Field declaration Document.hidden cannot be overridden in HtmlDocument. (dart:html, line 18183, col 3)
+severe: [INVALID_FIELD_OVERRIDE] Field declaration Document.visibilityState cannot be overridden in HtmlDocument. (dart:html, line 18190, col 3)
+severe: [INVALID_METHOD_OVERRIDE] Invalid override. The type of HtmlFormControlsCollection.namedItem ((String) → Object) is not a subtype of HtmlCollection.namedItem ((String) → Element). (dart:html, line 18312, col 3)
+severe: [AnalyzerMessage] 1 positional arguments expected, but 2 found (dart:html, line 18657, col 55)
+severe: [AnalyzerMessage] 1 positional arguments expected, but 2 found (dart:html, line 18661, col 56)
+severe: [AnalyzerMessage] The final variable '_get_contentWindow' must be initialized (dart:html, line 19228, col 3)
+severe: [AnalyzerMessage] The setter 'src' is not defined for the class 'Element' (dart:html, line 19356, col 24)
+severe: [AnalyzerMessage] The setter 'width' is not defined for the class 'Element' (dart:html, line 19357, col 26)
+severe: [AnalyzerMessage] The setter 'height' is not defined for the class 'Element' (dart:html, line 19358, col 27)
+severe: [AnalyzerMessage] The final variables 'complete', 'currentSrc' and '2' more must be initialized (dart:html, line 19366, col 3)
+severe: [AnalyzerMessage] The setter 'type' is not defined for the class 'Element' (dart:html, line 19482, col 11)
+severe: [AnalyzerMessage] The final variables '_get_valueAsDate', 'entries' and '6' more must be initialized (dart:html, line 19495, col 3)
+severe: [AnalyzerMessage] The method '_initKeyboardEvent' is not defined for the class 'Event' (dart:html, line 20401, col 7)
+severe: [AnalyzerMessage] The final variables 'form', 'labels' and '4' more must be initialized (dart:html, line 20521, col 3)
+severe: [AnalyzerMessage] The final variables 'control' and 'form' must be initialized (dart:html, line 20627, col 3)
+severe: [AnalyzerMessage] The final variable 'form' must be initialized (dart:html, line 20661, col 3)
+severe: [AnalyzerMessage] The final variables 'import', 'sheet' and '1' more must be initialized (dart:html, line 20687, col 3)
+severe: [AnalyzerMessage] The final variable 'areas' must be initialized (dart:html, line 20885, col 3)
+severe: [AnalyzerMessage] The final variables 'audioDecodedByteCount', 'audioTracks' and '15' more must be initialized (dart:html, line 21090, col 3)
+severe: [AnalyzerMessage] The method '_initMessageEvent' is not defined for the class 'Event' (dart:html, line 22231, col 11)
+severe: [AnalyzerMessage] The final variable 'labels' must be initialized (dart:html, line 22426, col 3)
+severe: [AnalyzerMessage] The method '_initMouseEvent' is not defined for the class 'Event' (dart:html, line 22888, col 11)
+severe: [AnalyzerMessage] 1 positional arguments expected, but 2 found (dart:html, line 23176, col 31)
+severe: [AnalyzerMessage] The final variables '_localName', '_namespaceUri' and '12' more must be initialized (dart:html, line 23803, col 3)
+severe: [AnalyzerMessage] The final variables 'form', 'validationMessage' and '2' more must be initialized (dart:html, line 24596, col 3)
+severe: [AnalyzerMessage] The final variables 'form' and 'index' must be initialized (dart:html, line 24731, col 3)
+severe: [AnalyzerMessage] The final variables 'form', 'htmlFor' and '5' more must be initialized (dart:html, line 24785, col 3)
+severe: [AnalyzerMessage] The final variables 'labels' and 'position' must be initialized (dart:html, line 25755, col 3)
+severe: [AnalyzerMessage] The final variables 'form', 'labels' and '4' more must be initialized (dart:html, line 27205, col 3)
+severe: [AnalyzerMessage] The argument type 'List<Element>' cannot be assigned to the parameter type 'Iterable<OptionElement>' (dart:html, line 27301, col 37)
+severe: [STATIC_TYPE_ERROR] Type check failed: options (List<Element>) is not of type Iterable<OptionElement> (dart:html, line 27301, col 37)
+severe: [INVALID_METHOD_OVERRIDE] Invalid override. The type of SharedWorker.onError (() → Stream<Event>) is not a subtype of AbstractWorker.onError (() → Stream<ErrorEvent>). (dart:html, line 27861, col 3)
+severe: [INVALID_METHOD_OVERRIDE] Invalid override. The type of Storage.containsValue ((String) → bool) is not a subtype of Map<String, String>.containsValue ((Object) → bool). (dart:html, line 28873, col 3)
+severe: [INVALID_METHOD_OVERRIDE] Invalid override. The type of Storage.containsKey ((String) → bool) is not a subtype of Map<String, String>.containsKey ((Object) → bool). (dart:html, line 28875, col 3)
+severe: [INVALID_METHOD_OVERRIDE] Invalid override. The type of Storage.[] ((String) → String) is not a subtype of Map<String, String>.[] ((Object) → String). (dart:html, line 28877, col 3)
+severe: [INVALID_METHOD_OVERRIDE] Invalid override. The type of Storage.remove ((String) → String) is not a subtype of Map<String, String>.remove ((Object) → String). (dart:html, line 28886, col 3)
+severe: [AnalyzerMessage] The method '_initStorageEvent' is not defined for the class 'Event' (dart:html, line 28993, col 7)
+severe: [AnalyzerMessage] The final variable 'sheet' must be initialized (dart:html, line 29132, col 3)
+severe: [AnalyzerMessage] The final variable 'cellIndex' must be initialized (dart:html, line 29254, col 3)
+severe: [AnalyzerMessage] The final variables '_rows' and '_tBodies' must be initialized (dart:html, line 29365, col 3)
+severe: [AnalyzerMessage] The final variables '_cells', 'rowIndex' and '1' more must be initialized (dart:html, line 29475, col 3)
+severe: [AnalyzerMessage] The final variable '_rows' must be initialized (dart:html, line 29542, col 3)
+severe: [AnalyzerMessage] The final variable 'content' must be initialized (dart:html, line 29585, col 3)
+severe: [AnalyzerMessage] The final variables 'form', 'labels' and '5' more must be initialized (dart:html, line 29661, col 3)
+severe: [AnalyzerMessage] The method '_initTextEvent' is not defined for the class 'Event' (dart:html, line 29804, col 7)
+severe: [AnalyzerMessage] The method '_initTouchEvent' is not defined for the class 'Event' (dart:html, line 30464, col 7)
+severe: [AnalyzerMessage] The final variables 'readyState' and 'track' must be initialized (dart:html, line 30614, col 3)
+severe: [AnalyzerMessage] The method '_initUIEvent' is not defined for the class 'Event' (dart:html, line 30794, col 7)
+severe: [AnalyzerMessage] The final variables 'decodedFrameCount', 'droppedFrameCount' and '2' more must be initialized (dart:html, line 31144, col 3)
+severe: [INVALID_METHOD_OVERRIDE] Invalid override. The type of Window.postMessage ((dynamic, String, [List<MessagePort>]) → void) is not a subtype of WindowBase.postMessage ((dynamic, String, [List<dynamic>]) → void). (dart:html, line 32987, col 3)
+severe: [AnalyzerMessage] The return type 'String' is not a 'void', as defined by the method '' (dart:html, line 33899, col 14)
+severe: [INVALID_METHOD_OVERRIDE] Invalid override. The type of Worker.onError (() → Stream<Event>) is not a subtype of AbstractWorker.onError (() → Stream<ErrorEvent>). (dart:html, line 34094, col 3)
+severe: [INVALID_FIELD_OVERRIDE] Field declaration Node.text cannot be overridden in _Attr. (dart:html, line 34596, col 3)
+severe: [INVALID_FIELD_OVERRIDE] Field declaration Node.text= cannot be overridden in _Attr. (dart:html, line 34598, col 3)
+severe: [AnalyzerMessage] Missing concrete implementation of setter 'Rectangle.height', setter 'Rectangle.left', setter 'Rectangle.top' and setter 'Rectangle.width' (dart:html, line 34681, col 7)
+severe: [AnalyzerMessage] Missing concrete implementation of setter 'Rectangle.left' and setter 'Rectangle.top' (dart:html, line 35114, col 7)
+severe: [INVALID_FIELD_OVERRIDE] Field declaration DomRectReadOnly.height cannot be overridden in _DomRect. (dart:html, line 35142, col 3)
+severe: [INVALID_METHOD_OVERRIDE] Invalid override. The type of _DomRect.height (() → num) is not a subtype of DomRectReadOnly.height (() → double). (dart:html, line 35142, col 3)
+severe: [INVALID_FIELD_OVERRIDE] Field declaration DomRectReadOnly.width cannot be overridden in _DomRect. (dart:html, line 35149, col 3)
+severe: [INVALID_METHOD_OVERRIDE] Invalid override. The type of _DomRect.width (() → num) is not a subtype of DomRectReadOnly.width (() → double). (dart:html, line 35149, col 3)
+severe: [INVALID_FIELD_OVERRIDE] Field declaration DomRectReadOnly.x cannot be overridden in _DomRect. (dart:html, line 35156, col 3)
+severe: [INVALID_METHOD_OVERRIDE] Invalid override. The type of _DomRect.x (() → num) is not a subtype of DomRectReadOnly.x (() → double). (dart:html, line 35156, col 3)
+severe: [INVALID_FIELD_OVERRIDE] Field declaration DomRectReadOnly.y cannot be overridden in _DomRect. (dart:html, line 35163, col 3)
+severe: [INVALID_METHOD_OVERRIDE] Invalid override. The type of _DomRect.y (() → num) is not a subtype of DomRectReadOnly.y (() → double). (dart:html, line 35163, col 3)
+severe: [AnalyzerMessage] The method '_initMutationEvent' is not defined for the class 'Event' (dart:html, line 35454, col 11)
+severe: [INVALID_METHOD_OVERRIDE] Invalid override. The type of _AttributeMap.containsValue ((String) → bool) is not a subtype of Map<String, String>.containsValue ((Object) → bool). (dart:html, line 36033, col 3)
+severe: [AnalyzerMessage] The getter 'name' is not defined for the class 'Node' (dart:html, line 36068, col 32)
+severe: [AnalyzerMessage] The getter 'value' is not defined for the class 'Node' (dart:html, line 36080, col 34)
+severe: [INVALID_METHOD_OVERRIDE] Invalid override. The type of _ElementAttributeMap.containsKey ((String) → bool) is not a subtype of Map<String, String>.containsKey ((Object) → bool). (dart:html, line 36111, col 3)
+severe: [INVALID_METHOD_OVERRIDE] Invalid override. The type of _ElementAttributeMap.[] ((String) → String) is not a subtype of Map<String, String>.[] ((Object) → String). (dart:html, line 36115, col 3)
+severe: [INVALID_METHOD_OVERRIDE] Invalid override. The type of _ElementAttributeMap.remove ((String) → String) is not a subtype of Map<String, String>.remove ((Object) → String). (dart:html, line 36123, col 3)
+severe: [INVALID_METHOD_OVERRIDE] Invalid override. The type of _NamespacedAttributeMap.containsKey ((String) → bool) is not a subtype of Map<String, String>.containsKey ((Object) → bool). (dart:html, line 36148, col 3)
+severe: [INVALID_METHOD_OVERRIDE] Invalid override. The type of _NamespacedAttributeMap.[] ((String) → String) is not a subtype of Map<String, String>.[] ((Object) → String). (dart:html, line 36152, col 3)
+severe: [INVALID_METHOD_OVERRIDE] Invalid override. The type of _NamespacedAttributeMap.remove ((String) → String) is not a subtype of Map<String, String>.remove ((Object) → String). (dart:html, line 36160, col 3)
+severe: [INVALID_METHOD_OVERRIDE] Invalid override. The type of _DataAttributeMap.containsValue ((String) → bool) is not a subtype of Map<String, String>.containsValue ((Object) → bool). (dart:html, line 36194, col 3)
+severe: [INVALID_METHOD_OVERRIDE] Invalid override. The type of _DataAttributeMap.containsKey ((String) → bool) is not a subtype of Map<String, String>.containsKey ((Object) → bool). (dart:html, line 36196, col 3)
+severe: [INVALID_METHOD_OVERRIDE] Invalid override. The type of _DataAttributeMap.[] ((String) → String) is not a subtype of Map<String, String>.[] ((Object) → String). (dart:html, line 36198, col 3)
+severe: [INVALID_METHOD_OVERRIDE] Invalid override. The type of _DataAttributeMap.remove ((String) → String) is not a subtype of Map<String, String>.remove ((Object) → String). (dart:html, line 36207, col 3)
+severe: [INVALID_METHOD_OVERRIDE] Invalid override. The type of CssClassSet.contains ((String) → bool) is not a subtype of Set<String>.contains ((Object) → bool). (dart:html, line 36520, col 3)
+severe: [INVALID_METHOD_OVERRIDE] Invalid override. The type of CssClassSet.removeAll ((Iterable<String>) → void) is not a subtype of Set<String>.removeAll ((Iterable<Object>) → void). (dart:html, line 36572, col 3)
+severe: [AnalyzerMessage] The getter 'value' is not defined for the class 'num' (dart:html, line 36619, col 21)
+severe: [AnalyzerMessage] A value of type 'Dimension' cannot be assigned to a variable of type 'num' (dart:html, line 36619, col 44)
+severe: [STATIC_TYPE_ERROR] Type check failed: new Dimension.px(0) (Dimension) is not of type num (dart:html, line 36619, col 44)
+severe: [AnalyzerMessage] The getter 'value' is not defined for the class 'num' (dart:html, line 36637, col 20)
+severe: [AnalyzerMessage] A value of type 'Dimension' cannot be assigned to a variable of type 'num' (dart:html, line 36637, col 42)
+severe: [STATIC_TYPE_ERROR] Type check failed: new Dimension.px(0) (Dimension) is not of type num (dart:html, line 36637, col 42)
+severe: [INVALID_FIELD_OVERRIDE] Field declaration MutableRectangle<num>.left cannot be overridden in CssRect. (dart:html, line 36752, col 3)
+severe: [INVALID_FIELD_OVERRIDE] Field declaration MutableRectangle<num>.top cannot be overridden in CssRect. (dart:html, line 36754, col 3)
+severe: [INVALID_METHOD_OVERRIDE] Invalid override. The type of _ElementCssClassSet.removeAll ((Iterable<String>) → void) is not a subtype of CssClassSetImpl.removeAll ((Iterable<Object>) → void). (dart:html, line 36971, col 3)
+severe: [INVALID_METHOD_OVERRIDE] Invalid override. The type of _ElementCssClassSet.retainAll ((Iterable<String>) → void) is not a subtype of CssClassSetImpl.retainAll ((Iterable<Object>) → void). (dart:html, line 36975, col 3)
+severe: [INVALID_METHOD_OVERRIDE] Invalid override. The type of _ElementCssClassSet.retainAll ((Iterable<String>) → void) is not a subtype of Set<String>.retainAll ((Iterable<Object>) → void). (dart:html, line 36975, col 3)
+severe: [INVALID_METHOD_OVERRIDE] Invalid override. The type of _EventStream.asBroadcastStream (({onListen: (StreamSubscription<dynamic>) → void, onCancel: (StreamSubscription<dynamic>) → void}) → Stream<T>) is not a subtype of Stream<T>.asBroadcastStream (({onListen: (StreamSubscription<T>) → void, onCancel: (StreamSubscription<T>) → void}) → Stream<T>). (dart:html, line 37325, col 3)
+severe: [AnalyzerMessage] Missing concrete implementation of 'Stream.asBroadcastStream' (dart:html, line 37344, col 7)
+severe: [INVALID_METHOD_OVERRIDE] Base class introduces an invalid override. The type of _EventStream.asBroadcastStream (({onListen: (StreamSubscription<dynamic>) → void, onCancel: (StreamSubscription<dynamic>) → void}) → Stream<T>) is not a subtype of Stream<T>.asBroadcastStream (({onListen: (StreamSubscription<T>) → void, onCancel: (StreamSubscription<T>) → void}) → Stream<T>). (dart:html, line 37344, col 48)
+severe: [AnalyzerMessage] The method 'matchesWithAncestors' is not defined for the class 'EventTarget' (dart:html, line 37350, col 31)
+severe: [AnalyzerMessage] The method 'matchesWithAncestors' is not defined for the class 'EventTarget' (dart:html, line 37374, col 31)
+severe: [INVALID_METHOD_OVERRIDE] Invalid override. The type of _ElementListEventStreamImpl.asBroadcastStream (({onListen: (StreamSubscription<dynamic>) → void, onCancel: (StreamSubscription<dynamic>) → void}) → Stream<T>) is not a subtype of Stream<T>.asBroadcastStream (({onListen: (StreamSubscription<T>) → void, onCancel: (StreamSubscription<T>) → void}) → Stream<T>). (dart:html, line 37400, col 3)
+severe: [INVALID_METHOD_OVERRIDE] Invalid override. The type of _ElementListEventStreamImpl.asBroadcastStream (({onListen: (StreamSubscription<dynamic>) → void, onCancel: (StreamSubscription<dynamic>) → void}) → Stream<T>) is not a subtype of Stream<T>.asBroadcastStream (({onListen: (StreamSubscription<T>) → void, onCancel: (StreamSubscription<T>) → void}) → Stream<T>). (dart:html, line 37400, col 3)
+severe: [INVALID_METHOD_OVERRIDE] Invalid override. The type of _CustomEventStreamImpl.asBroadcastStream (({onListen: (StreamSubscription<dynamic>) → void, onCancel: (StreamSubscription<dynamic>) → void}) → Stream<T>) is not a subtype of Stream<T>.asBroadcastStream (({onListen: (StreamSubscription<T>) → void, onCancel: (StreamSubscription<T>) → void}) → Stream<T>). (dart:html, line 37516, col 3)
+severe: [INVALID_METHOD_OVERRIDE] Invalid override. The type of _CustomEventStreamImpl.asBroadcastStream (({onListen: (StreamSubscription<dynamic>) → void, onCancel: (StreamSubscription<dynamic>) → void}) → Stream<T>) is not a subtype of Stream<T>.asBroadcastStream (({onListen: (StreamSubscription<T>) → void, onCancel: (StreamSubscription<T>) → void}) → Stream<T>). (dart:html, line 37516, col 3)
+severe: [AnalyzerMessage] Missing concrete implementation of 'Stream.asBroadcastStream' (dart:html, line 37527, col 7)
+severe: [INVALID_METHOD_OVERRIDE] Base class introduces an invalid override. The type of _CustomEventStreamImpl.asBroadcastStream (({onListen: (StreamSubscription<dynamic>) → void, onCancel: (StreamSubscription<dynamic>) → void}) → Stream<KeyEvent>) is not a subtype of Stream<KeyEvent>.asBroadcastStream (({onListen: (StreamSubscription<KeyEvent>) → void, onCancel: (StreamSubscription<KeyEvent>) → void}) → Stream<KeyEvent>). (dart:html, line 37527, col 33)
+severe: [INVALID_SUPER_INVOCATION] super call must be last in an initializer list (see https://goo.gl/EY6hDP): super(_EVENT_TYPE) (dart:html, line 39055, col 38)
+severe: [AnalyzerMessage] The getter '_shadowCharCode' is not defined for the class 'KeyboardEvent' (dart:html, line 39088, col 21)
+severe: [AnalyzerMessage] The getter '_shadowCharCode' is not defined for the class 'KeyboardEvent' (dart:html, line 39093, col 47)
+severe: [INVALID_SUPER_INVOCATION] super call must be last in an initializer list (see https://goo.gl/EY6hDP): super(uriPolicy, allowedElements: allowedElements, allowedAttributes: allowedAttributes, allowedUriAttributes: allowedUriAttributes) (dart:html, line 39751, col 7)
+severe: [INVALID_SUPER_INVOCATION] super call must be last in an initializer list (see https://goo.gl/EY6hDP): super(null, allowedElements: ['TEMPLATE'], allowedAttributes: _TEMPLATE_ATTRS.map((attr) => 'TEMPLATE::$attr')) (dart:html, line 39788, col 7)
+severe: [AnalyzerMessage] The function 'setNativeSubclassDispatchRecord' is not defined (dart:html, line 40081, col 5)
+severe: [AnalyzerMessage] 1 positional arguments expected, but 2 found (dart:html, line 40109, col 29)
+severe: [AnalyzerMessage] 1 positional arguments expected, but 2 found (dart:html, line 40119, col 29)
+severe: [AnalyzerMessage] The function 'findInterceptorConstructorForType' is not defined (dart:html, line 40138, col 26)
+severe: [AnalyzerMessage] The function 'findConstructorForNativeSubclassType' is not defined (dart:html, line 40145, col 21)
+severe: [AnalyzerMessage] The function 'getNativeInterceptor' is not defined (dart:html, line 40152, col 3)
+severe: [AnalyzerMessage] The function 'findDispatchTagForInterceptorClass' is not defined (dart:html, line 40154, col 26)
+severe: [AnalyzerMessage] The function 'setNativeSubclassDispatchRecord' is not defined (dart:html, line 40188, col 3)
+severe: [AnalyzerMessage] The method 'findInterceptorConstructorForType' is not defined for the class '_JSElementUpgrader' (dart:html, line 40211, col 28)
+severe: [AnalyzerMessage] The method 'findConstructorForNativeSubclassType' is not defined for the class '_JSElementUpgrader' (dart:html, line 40216, col 20)
+severe: [AnalyzerMessage] The method 'getNativeInterceptor' is not defined for the class '_JSElementUpgrader' (dart:html, line 40223, col 5)
+severe: [AnalyzerMessage] The method 'findDispatchTagForInterceptorClass' is not defined for the class '_JSElementUpgrader' (dart:html, line 40225, col 25)
+severe: [AnalyzerMessage] The method 'setNativeSubclassDispatchRecord' is not defined for the class '_JSElementUpgrader' (dart:html, line 40255, col 5)
+severe: [AnalyzerMessage] The method 'makeLeafDispatchRecord' is not defined for the class 'KeyEvent' (dart:html, line 40460, col 12)
+severe: [AnalyzerMessage] The method 'setDispatchProperty' is not defined for the class 'KeyEvent' (dart:html, line 40530, col 5)
+severe: [AnalyzerMessage] The method 'matches' is not defined for the class 'EventTarget' (dart:html, line 40706, col 18)
+severe: [AnalyzerMessage] The getter 'parent' is not defined for the class 'EventTarget' (dart:html, line 40707, col 23)
+severe: [AnalyzerMessage] The getter 'parent' is not defined for the class 'EventTarget' (dart:html, line 40708, col 56)
+severe: [AnalyzerMessage] 1 positional arguments expected, but 2 found (dart:html_common/conversions_dart2js.dart, line 89, col 36)
+severe: [AnalyzerMessage] 1 positional arguments expected, but 2 found (dart:html_common/conversions_dart2js.dart, line 90, col 37)
 severe: [INVALID_METHOD_OVERRIDE] Invalid override. The type of CssClassSetImpl.map (((String) → dynamic) → Iterable<dynamic>) is not a subtype of IterableBase<String>.map (<T>((String) → T) → Iterable<T>). (dart:html_common/css_class_set.dart, line 59, col 3)
 severe: [INVALID_METHOD_OVERRIDE] Invalid override. The type of CssClassSetImpl.expand (((String) → Iterable<dynamic>) → Iterable<dynamic>) is not a subtype of IterableBase<String>.expand (<T>((String) → Iterable<T>) → Iterable<T>). (dart:html_common/css_class_set.dart, line 63, col 3)
 severe: [INVALID_METHOD_OVERRIDE] Invalid override. The type of CssClassSetImpl.fold ((dynamic, (dynamic, String) → dynamic) → dynamic) is not a subtype of IterableBase<String>.fold (<T>(T, (T, String) → T) → T). (dart:html_common/css_class_set.dart, line 79, col 3)
@@ -552,37 +524,37 @@
 severe: [AnalyzerMessage] The final variables 'height', 'href' and '3' more must be initialized (dart:svg, line 6221, col 3)
 severe: [AnalyzerMessage] The final variables 'preserveAspectRatio', 'viewBox' and '1' more must be initialized (dart:svg, line 6266, col 3)
 severe: [AnalyzerMessage] The final variables 'gradientTransform', 'gradientUnits' and '2' more must be initialized (dart:svg, line 6420, col 3)
+warning: [DOWN_CAST_COMPOSITE] Unsound implicit cast from dynamic to List<num> (dart:html, line 2394, col 14)
 warning: [DOWN_CAST_COMPOSITE] Unsound implicit cast from dynamic to List<num> (dart:html, line 2396, col 14)
-warning: [DOWN_CAST_COMPOSITE] Unsound implicit cast from dynamic to List<num> (dart:html, line 2398, col 14)
-warning: [DOWN_CAST_COMPOSITE] Unsound implicit cast from List<dynamic> to Iterable<Element> (dart:html, line 9949, col 21)
-warning: [DOWN_CAST_COMPOSITE] Unsound implicit cast from (dynamic) → bool to (Element) → bool (dart:html, line 11089, col 41)
-warning: [DOWN_CAST_COMPOSITE] Unsound implicit cast from _FrozenElementList to Iterable<Element> (dart:html, line 11770, col 59)
-warning: [DOWN_CAST_COMPOSITE] Unsound implicit cast from _FrozenElementList to Iterable<Element> (dart:html, line 11773, col 35)
-warning: [DOWN_CAST_COMPOSITE] Unsound implicit cast from List<dynamic> to Iterable<Element> (dart:html, line 12525, col 21)
-warning: [DOWN_CAST_COMPOSITE] Unsound implicit cast from List<dynamic> to Iterable<Map<String, dynamic>> (dart:html, line 12759, col 25)
-warning: [DOWN_CAST_COMPOSITE] Unsound implicit cast from dynamic to Stream<Geoposition> (dart:html, line 16996, col 12)
-warning: [DOWN_CAST_COMPOSITE] Unsound implicit cast from List<dynamic> to Iterable<Node> (dart:html, line 23819, col 23)
-warning: [DOWN_CAST_COMPOSITE] Unsound implicit cast from List<dynamic> to Iterable<String> (dart:html, line 28908, col 12)
-warning: [DOWN_CAST_COMPOSITE] Unsound implicit cast from List<dynamic> to Iterable<String> (dart:html, line 28914, col 12)
-warning: [DOWN_CAST_COMPOSITE] Unsound implicit cast from dynamic to List<String> (dart:html, line 31593, col 58)
-warning: [DOWN_CAST_COMPOSITE] Unsound implicit cast from dynamic to (num) → void (dart:html, line 32043, col 35)
-warning: [DOWN_CAST_COMPOSITE] Unsound implicit cast from Stream<dynamic> to Stream<BeforeUnloadEvent> (dart:html, line 33904, col 12)
-warning: [DOWN_CAST_COMPOSITE] Unsound implicit cast from ElementList<dynamic> to Iterable<Element> (dart:html, line 33917, col 44)
-warning: [DOWN_CAST_COMPOSITE] Unsound implicit cast from dynamic to List<Element> (dart:html, line 36661, col 20)
-warning: [DOWN_CAST_COMPOSITE] Unsound implicit cast from ElementList<dynamic> to Iterable<Element> (dart:html, line 37274, col 44)
-warning: [DOWN_CAST_COMPOSITE] Unsound implicit cast from StreamSubscription<dynamic> to StreamSubscription<T> (dart:html, line 37390, col 12)
-warning: [DOWN_CAST_COMPOSITE] Unsound implicit cast from StreamSubscription<dynamic> to StreamSubscription<T> (dart:html, line 37399, col 12)
-warning: [DOWN_CAST_COMPOSITE] Unsound implicit cast from dynamic to (Event) → dynamic (dart:html, line 37469, col 44)
-warning: [DOWN_CAST_COMPOSITE] Unsound implicit cast from dynamic to (Event) → dynamic (dart:html, line 37475, col 47)
-warning: [DOWN_CAST_COMPOSITE] Unsound implicit cast from ElementList<dynamic> to Iterable<Element> (dart:html, line 37619, col 44)
-warning: [DOWN_CAST_COMPOSITE] Unsound implicit cast from dynamic to Iterable<String> (dart:html, line 39536, col 9)
-warning: [DOWN_CAST_COMPOSITE] Unsound implicit cast from dynamic to Iterable<String> (dart:html, line 39537, col 9)
-warning: [DOWN_CAST_COMPOSITE] Unsound implicit cast from dynamic to Iterable<String> (dart:html, line 39574, col 9)
-warning: [DOWN_CAST_COMPOSITE] Unsound implicit cast from dynamic to Iterable<String> (dart:html, line 39575, col 9)
-warning: [DOWN_CAST_COMPOSITE] Unsound implicit cast from dynamic to E (dart:html, line 39896, col 31)
-warning: [DOWN_CAST_COMPOSITE] Unsound implicit cast from dynamic to E (dart:html, line 39910, col 28)
-warning: [DOWN_CAST_COMPOSITE] Unsound implicit cast from List<dynamic> to List<Node> (dart:html, line 39926, col 29)
-warning: [DOWN_CAST_COMPOSITE] Unsound implicit cast from dynamic to E (dart:html, line 39941, col 20)
+warning: [DOWN_CAST_COMPOSITE] Unsound implicit cast from List<dynamic> to Iterable<Element> (dart:html, line 9947, col 21)
+warning: [DOWN_CAST_COMPOSITE] Unsound implicit cast from (dynamic) → bool to (Element) → bool (dart:html, line 11087, col 41)
+warning: [DOWN_CAST_COMPOSITE] Unsound implicit cast from _FrozenElementList to Iterable<Element> (dart:html, line 11768, col 59)
+warning: [DOWN_CAST_COMPOSITE] Unsound implicit cast from _FrozenElementList to Iterable<Element> (dart:html, line 11771, col 35)
+warning: [DOWN_CAST_COMPOSITE] Unsound implicit cast from List<dynamic> to Iterable<Element> (dart:html, line 12523, col 21)
+warning: [DOWN_CAST_COMPOSITE] Unsound implicit cast from List<dynamic> to Iterable<Map<String, dynamic>> (dart:html, line 12757, col 25)
+warning: [DOWN_CAST_COMPOSITE] Unsound implicit cast from dynamic to Stream<Geoposition> (dart:html, line 16994, col 12)
+warning: [DOWN_CAST_COMPOSITE] Unsound implicit cast from List<dynamic> to Iterable<Node> (dart:html, line 23817, col 23)
+warning: [DOWN_CAST_COMPOSITE] Unsound implicit cast from List<dynamic> to Iterable<String> (dart:html, line 28906, col 12)
+warning: [DOWN_CAST_COMPOSITE] Unsound implicit cast from List<dynamic> to Iterable<String> (dart:html, line 28912, col 12)
+warning: [DOWN_CAST_COMPOSITE] Unsound implicit cast from dynamic to List<String> (dart:html, line 31591, col 58)
+warning: [DOWN_CAST_COMPOSITE] Unsound implicit cast from dynamic to (num) → void (dart:html, line 32041, col 35)
+warning: [DOWN_CAST_COMPOSITE] Unsound implicit cast from Stream<dynamic> to Stream<BeforeUnloadEvent> (dart:html, line 33902, col 12)
+warning: [DOWN_CAST_COMPOSITE] Unsound implicit cast from ElementList<dynamic> to Iterable<Element> (dart:html, line 33915, col 44)
+warning: [DOWN_CAST_COMPOSITE] Unsound implicit cast from dynamic to List<Element> (dart:html, line 36659, col 20)
+warning: [DOWN_CAST_COMPOSITE] Unsound implicit cast from ElementList<dynamic> to Iterable<Element> (dart:html, line 37272, col 44)
+warning: [DOWN_CAST_COMPOSITE] Unsound implicit cast from StreamSubscription<dynamic> to StreamSubscription<T> (dart:html, line 37388, col 12)
+warning: [DOWN_CAST_COMPOSITE] Unsound implicit cast from StreamSubscription<dynamic> to StreamSubscription<T> (dart:html, line 37397, col 12)
+warning: [DOWN_CAST_COMPOSITE] Unsound implicit cast from dynamic to (Event) → dynamic (dart:html, line 37467, col 44)
+warning: [DOWN_CAST_COMPOSITE] Unsound implicit cast from dynamic to (Event) → dynamic (dart:html, line 37473, col 47)
+warning: [DOWN_CAST_COMPOSITE] Unsound implicit cast from ElementList<dynamic> to Iterable<Element> (dart:html, line 37617, col 44)
+warning: [DOWN_CAST_COMPOSITE] Unsound implicit cast from dynamic to Iterable<String> (dart:html, line 39534, col 9)
+warning: [DOWN_CAST_COMPOSITE] Unsound implicit cast from dynamic to Iterable<String> (dart:html, line 39535, col 9)
+warning: [DOWN_CAST_COMPOSITE] Unsound implicit cast from dynamic to Iterable<String> (dart:html, line 39572, col 9)
+warning: [DOWN_CAST_COMPOSITE] Unsound implicit cast from dynamic to Iterable<String> (dart:html, line 39573, col 9)
+warning: [DOWN_CAST_COMPOSITE] Unsound implicit cast from dynamic to E (dart:html, line 39894, col 31)
+warning: [DOWN_CAST_COMPOSITE] Unsound implicit cast from dynamic to E (dart:html, line 39908, col 28)
+warning: [DOWN_CAST_COMPOSITE] Unsound implicit cast from List<dynamic> to List<Node> (dart:html, line 39924, col 29)
+warning: [DOWN_CAST_COMPOSITE] Unsound implicit cast from dynamic to E (dart:html, line 39939, col 20)
 warning: [DOWN_CAST_COMPOSITE] Unsound implicit cast from (String) → String to (Object) → String (dart:html_common/css_class_set.dart, line 148, col 44)
 warning: [DOWN_CAST_COMPOSITE] Unsound implicit cast from Future<dynamic> to Future<Database> (dart:indexed_db, line 548, col 14)
 warning: [DOWN_CAST_COMPOSITE] Unsound implicit cast from (dynamic) → void to (Event) → void (dart:indexed_db, line 561, col 34)
