http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/581eb3a8/pre-build/weex-main-jsfm.js
----------------------------------------------------------------------
diff --git a/pre-build/weex-main-jsfm.js b/pre-build/weex-main-jsfm.js
index 421c2c8..066ce73 100644
--- a/pre-build/weex-main-jsfm.js
+++ b/pre-build/weex-main-jsfm.js
@@ -1,19146 +1,2 @@
-(this.nativeLog || function(s) {console.log(s)})('START JS FRAMEWORK 
0.26.0-beta.0, Build 2018-04-24 21:31. (Vue: 2.5.13-weex.5, Rax: 0.4.20)');
-var global=this; var process={env:{}}; var setTimeout=global.setTimeout;
-
-(function (global, factory) {
-       typeof exports === 'object' && typeof module !== 'undefined' ? 
factory() :
-       typeof define === 'function' && define.amd ? define(factory) :
-       (factory());
-}(this, (function () { 'use strict';
-
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-/* eslint-disable */
-
-// Production steps of ECMA-262, Edition 6, 22.1.2.1
-// Reference: 
https://people.mozilla.org/~jorendorff/es6-draft.html#sec-array.from
-
-/* istanbul ignore if */
-if (!Array.from) {
-  Array.from = (function() {
-    var toStr = Object.prototype.toString;
-    var isCallable = function(fn) {
-      return typeof fn === 'function' || toStr.call(fn) === '[object 
Function]';
-    };
-    var toInteger = function(value) {
-      var number = Number(value);
-      if (isNaN(number)) {
-        return 0;
-      }
-      if (number === 0 || !isFinite(number)) {
-        return number;
-      }
-      return (number > 0 ? 1 : -1) * Math.floor(Math.abs(number));
-    };
-    var maxSafeInteger = Math.pow(2, 53) - 1;
-    var toLength = function(value) {
-      var len = toInteger(value);
-      return Math.min(Math.max(len, 0), maxSafeInteger);
-    };
-
-    // The length property of the from method is 1.
-    return function from(arrayLike/* mapFn, thisArg */) {
-      // 1. Let C be the this value.
-      var C = this;
-
-      // 2. Let items be ToObject(arrayLike).
-      var items = Object(arrayLike);
-
-      // 3. ReturnIfAbrupt(items).
-      if (arrayLike == null) {
-        throw new TypeError('Array.from requires an array-like object - not 
null or undefined');
-      }
-
-      // 4. If mapfn is undefined, then let mapping be false.
-      var mapFn = arguments.length > 1 ? arguments[1] : void undefined;
-      var T;
-      if (typeof mapFn !== 'undefined') {
-        // 5. else
-        // 5. a If IsCallable(mapfn) is false, throw a TypeError exception.
-        if (!isCallable(mapFn)) {
-          throw new TypeError('Array.from: when provided, the second argument 
must be a function');
-        }
-
-        // 5. b. If thisArg was supplied, let T be thisArg; else let T be 
undefined.
-        if (arguments.length > 2) {
-          T = arguments[2];
-        }
-      }
-
-      // 10. Let lenValue be Get(items, "length").
-      // 11. Let len be ToLength(lenValue).
-      var len = toLength(items.length);
-
-      // 13. If IsConstructor(C) is true, then
-      // 13. a. Let A be the result of calling the [[Construct]] internal 
method of C with an argument list containing the single item len.
-      // 14. a. Else, Let A be ArrayCreate(len).
-      var A = isCallable(C) ? Object(new C(len)) : new Array(len);
-
-      // 16. Let k be 0.
-      var k = 0;
-      // 17. Repeat, while k < len… (also steps a - h)
-      var kValue;
-      while (k < len) {
-        kValue = items[k];
-        if (mapFn) {
-          A[k] = typeof T === 'undefined' ? mapFn(kValue, k) : mapFn.call(T, 
kValue, k);
-        } else {
-          A[k] = kValue;
-        }
-        k += 1;
-      }
-      // 18. Let putStatus be Put(A, "length", len, true).
-      A.length = len;
-      // 20. Return A.
-      return A;
-    };
-  }());
-}
-
-function unwrapExports (x) {
-       return x && x.__esModule && Object.prototype.hasOwnProperty.call(x, 
'default') ? x['default'] : x;
-}
-
-function createCommonjsModule(fn, module) {
-       return module = { exports: {} }, fn(module, module.exports), 
module.exports;
-}
-
-var _global = createCommonjsModule(function (module) {
-// https://github.com/zloirock/core-js/issues/86#issuecomment-115759028
-var global = module.exports = typeof window != 'undefined' && window.Math == 
Math
-  ? window : typeof self != 'undefined' && self.Math == Math ? self
-  // eslint-disable-next-line no-new-func
-  : Function('return this')();
-if (typeof __g == 'number') { __g = global; } // eslint-disable-line no-undef
-});
-
-var _core = createCommonjsModule(function (module) {
-var core = module.exports = { version: '2.5.5' };
-if (typeof __e == 'number') { __e = core; } // eslint-disable-line no-undef
-});
-
-var _core_1 = _core.version;
-
-var _isObject = function (it) {
-  return typeof it === 'object' ? it !== null : typeof it === 'function';
-};
-
-var _anObject = function (it) {
-  if (!_isObject(it)) { throw TypeError(it + ' is not an object!'); }
-  return it;
-};
-
-var _fails = function (exec) {
-  try {
-    return !!exec();
-  } catch (e) {
-    return true;
-  }
-};
-
-// Thank's IE8 for his funny defineProperty
-var _descriptors = !_fails(function () {
-  return Object.defineProperty({}, 'a', { get: function () { return 7; } }).a 
!= 7;
-});
-
-var document$1 = _global.document;
-// typeof document.createElement is 'object' in old IE
-var is = _isObject(document$1) && _isObject(document$1.createElement);
-var _domCreate = function (it) {
-  return is ? document$1.createElement(it) : {};
-};
-
-var _ie8DomDefine = !_descriptors && !_fails(function () {
-  return Object.defineProperty(_domCreate('div'), 'a', { get: function () { 
return 7; } }).a != 7;
-});
-
-// 7.1.1 ToPrimitive(input [, PreferredType])
-
-// instead of the ES6 spec version, we didn't implement @@toPrimitive case
-// and the second argument - flag - preferred type is a string
-var _toPrimitive = function (it, S) {
-  if (!_isObject(it)) { return it; }
-  var fn, val;
-  if (S && typeof (fn = it.toString) == 'function' && !_isObject(val = 
fn.call(it))) { return val; }
-  if (typeof (fn = it.valueOf) == 'function' && !_isObject(val = fn.call(it))) 
{ return val; }
-  if (!S && typeof (fn = it.toString) == 'function' && !_isObject(val = 
fn.call(it))) { return val; }
-  throw TypeError("Can't convert object to primitive value");
-};
-
-var dP = Object.defineProperty;
-
-var f = _descriptors ? Object.defineProperty : function defineProperty(O, P, 
Attributes) {
-  _anObject(O);
-  P = _toPrimitive(P, true);
-  _anObject(Attributes);
-  if (_ie8DomDefine) { try {
-    return dP(O, P, Attributes);
-  } catch (e) { /* empty */ } }
-  if ('get' in Attributes || 'set' in Attributes) { throw TypeError('Accessors 
not supported!'); }
-  if ('value' in Attributes) { O[P] = Attributes.value; }
-  return O;
-};
-
-var _objectDp = {
-       f: f
-};
-
-var _propertyDesc = function (bitmap, value) {
-  return {
-    enumerable: !(bitmap & 1),
-    configurable: !(bitmap & 2),
-    writable: !(bitmap & 4),
-    value: value
-  };
-};
-
-var _hide = _descriptors ? function (object, key, value) {
-  return _objectDp.f(object, key, _propertyDesc(1, value));
-} : function (object, key, value) {
-  object[key] = value;
-  return object;
-};
-
-var hasOwnProperty = {}.hasOwnProperty;
-var _has = function (it, key) {
-  return hasOwnProperty.call(it, key);
-};
-
-var id = 0;
-var px = Math.random();
-var _uid = function (key) {
-  return 'Symbol('.concat(key === undefined ? '' : key, ')_', (++id + 
px).toString(36));
-};
-
-var _redefine = createCommonjsModule(function (module) {
-var SRC = _uid('src');
-var TO_STRING = 'toString';
-var $toString = Function[TO_STRING];
-var TPL = ('' + $toString).split(TO_STRING);
-
-_core.inspectSource = function (it) {
-  return $toString.call(it);
-};
-
-(module.exports = function (O, key, val, safe) {
-  var isFunction = typeof val == 'function';
-  if (isFunction) { _has(val, 'name') || _hide(val, 'name', key); }
-  if (O[key] === val) { return; }
-  if (isFunction) { _has(val, SRC) || _hide(val, SRC, O[key] ? '' + O[key] : 
TPL.join(String(key))); }
-  if (O === _global) {
-    O[key] = val;
-  } else if (!safe) {
-    delete O[key];
-    _hide(O, key, val);
-  } else if (O[key]) {
-    O[key] = val;
-  } else {
-    _hide(O, key, val);
-  }
-// add fake Function#toString for correct work wrapped methods / constructors 
with methods like LoDash isNative
-})(Function.prototype, TO_STRING, function toString() {
-  return typeof this == 'function' && this[SRC] || $toString.call(this);
-});
-});
-
-var _aFunction = function (it) {
-  if (typeof it != 'function') { throw TypeError(it + ' is not a function!'); }
-  return it;
-};
-
-// optional / simple context binding
-
-var _ctx = function (fn, that, length) {
-  _aFunction(fn);
-  if (that === undefined) { return fn; }
-  switch (length) {
-    case 1: return function (a) {
-      return fn.call(that, a);
-    };
-    case 2: return function (a, b) {
-      return fn.call(that, a, b);
-    };
-    case 3: return function (a, b, c) {
-      return fn.call(that, a, b, c);
-    };
-  }
-  return function (/* ...args */) {
-    return fn.apply(that, arguments);
-  };
-};
-
-var PROTOTYPE = 'prototype';
-
-var $export = function (type, name, source) {
-  var IS_FORCED = type & $export.F;
-  var IS_GLOBAL = type & $export.G;
-  var IS_STATIC = type & $export.S;
-  var IS_PROTO = type & $export.P;
-  var IS_BIND = type & $export.B;
-  var target = IS_GLOBAL ? _global : IS_STATIC ? _global[name] || 
(_global[name] = {}) : (_global[name] || {})[PROTOTYPE];
-  var exports = IS_GLOBAL ? _core : _core[name] || (_core[name] = {});
-  var expProto = exports[PROTOTYPE] || (exports[PROTOTYPE] = {});
-  var key, own, out, exp;
-  if (IS_GLOBAL) { source = name; }
-  for (key in source) {
-    // contains in native
-    own = !IS_FORCED && target && target[key] !== undefined;
-    // export native or passed
-    out = (own ? target : source)[key];
-    // bind timers to global for call from export context
-    exp = IS_BIND && own ? _ctx(out, _global) : IS_PROTO && typeof out == 
'function' ? _ctx(Function.call, out) : out;
-    // extend global
-    if (target) { _redefine(target, key, out, type & $export.U); }
-    // export
-    if (exports[key] != out) { _hide(exports, key, exp); }
-    if (IS_PROTO && expProto[key] != out) { expProto[key] = out; }
-  }
-};
-_global.core = _core;
-// type bitmap
-$export.F = 1;   // forced
-$export.G = 2;   // global
-$export.S = 4;   // static
-$export.P = 8;   // proto
-$export.B = 16;  // bind
-$export.W = 32;  // wrap
-$export.U = 64;  // safe
-$export.R = 128; // real proto method for `library`
-var _export = $export;
-
-var toString = {}.toString;
-
-var _cof = function (it) {
-  return toString.call(it).slice(8, -1);
-};
-
-// fallback for non-array-like ES3 and non-enumerable old V8 strings
-
-// eslint-disable-next-line no-prototype-builtins
-var _iobject = Object('z').propertyIsEnumerable(0) ? Object : function (it) {
-  return _cof(it) == 'String' ? it.split('') : Object(it);
-};
-
-// 7.2.1 RequireObjectCoercible(argument)
-var _defined = function (it) {
-  if (it == undefined) { throw TypeError("Can't call method on  " + it); }
-  return it;
-};
-
-// to indexed object, toObject with fallback for non-array-like ES3 strings
-
-
-var _toIobject = function (it) {
-  return _iobject(_defined(it));
-};
-
-// 7.1.4 ToInteger
-var ceil = Math.ceil;
-var floor = Math.floor;
-var _toInteger = function (it) {
-  return isNaN(it = +it) ? 0 : (it > 0 ? floor : ceil)(it);
-};
-
-// 7.1.15 ToLength
-
-var min = Math.min;
-var _toLength = function (it) {
-  return it > 0 ? min(_toInteger(it), 0x1fffffffffffff) : 0; // pow(2, 53) - 1 
== 9007199254740991
-};
-
-var max = Math.max;
-var min$1 = Math.min;
-var _toAbsoluteIndex = function (index, length) {
-  index = _toInteger(index);
-  return index < 0 ? max(index + length, 0) : min$1(index, length);
-};
-
-// false -> Array#indexOf
-// true  -> Array#includes
-
-
-
-var _arrayIncludes = function (IS_INCLUDES) {
-  return function ($this, el, fromIndex) {
-    var O = _toIobject($this);
-    var length = _toLength(O.length);
-    var index = _toAbsoluteIndex(fromIndex, length);
-    var value;
-    // Array#includes uses SameValueZero equality algorithm
-    // eslint-disable-next-line no-self-compare
-    if (IS_INCLUDES && el != el) { while (length > index) {
-      value = O[index++];
-      // eslint-disable-next-line no-self-compare
-      if (value != value) { return true; }
-    // Array#indexOf ignores holes, Array#includes - not
-    } } else { for (;length > index; index++) { if (IS_INCLUDES || index in O) 
{
-      if (O[index] === el) { return IS_INCLUDES || index || 0; }
-    } } } return !IS_INCLUDES && -1;
-  };
-};
-
-var SHARED = '__core-js_shared__';
-var store = _global[SHARED] || (_global[SHARED] = {});
-var _shared = function (key) {
-  return store[key] || (store[key] = {});
-};
-
-var shared$2 = _shared('keys');
-
-var _sharedKey = function (key) {
-  return shared$2[key] || (shared$2[key] = _uid(key));
-};
-
-var arrayIndexOf = _arrayIncludes(false);
-var IE_PROTO = _sharedKey('IE_PROTO');
-
-var _objectKeysInternal = function (object, names) {
-  var O = _toIobject(object);
-  var i = 0;
-  var result = [];
-  var key;
-  for (key in O) { if (key != IE_PROTO) { _has(O, key) && result.push(key); } }
-  // Don't enum bug & hidden keys
-  while (names.length > i) { if (_has(O, key = names[i++])) {
-    ~arrayIndexOf(result, key) || result.push(key);
-  } }
-  return result;
-};
-
-// IE 8- don't enum bug keys
-var _enumBugKeys = (
-  
'constructor,hasOwnProperty,isPrototypeOf,propertyIsEnumerable,toLocaleString,toString,valueOf'
-).split(',');
-
-// 19.1.2.14 / 15.2.3.14 Object.keys(O)
-
-
-
-var _objectKeys = Object.keys || function keys(O) {
-  return _objectKeysInternal(O, _enumBugKeys);
-};
-
-var f$1 = Object.getOwnPropertySymbols;
-
-var _objectGops = {
-       f: f$1
-};
-
-var f$2 = {}.propertyIsEnumerable;
-
-var _objectPie = {
-       f: f$2
-};
-
-// 7.1.13 ToObject(argument)
-
-var _toObject = function (it) {
-  return Object(_defined(it));
-};
-
-// 19.1.2.1 Object.assign(target, source, ...)
-
-
-
-
-
-var $assign = Object.assign;
-
-// should work with symbols and should have deterministic property order (V8 
bug)
-var _objectAssign = !$assign || _fails(function () {
-  var A = {};
-  var B = {};
-  // eslint-disable-next-line no-undef
-  var S = Symbol();
-  var K = 'abcdefghijklmnopqrst';
-  A[S] = 7;
-  K.split('').forEach(function (k) { B[k] = k; });
-  return $assign({}, A)[S] != 7 || Object.keys($assign({}, B)).join('') != K;
-}) ? function assign(target, source) {
-  var arguments$1 = arguments;
- // eslint-disable-line no-unused-vars
-  var T = _toObject(target);
-  var aLen = arguments.length;
-  var index = 1;
-  var getSymbols = _objectGops.f;
-  var isEnum = _objectPie.f;
-  while (aLen > index) {
-    var S = _iobject(arguments$1[index++]);
-    var keys = getSymbols ? _objectKeys(S).concat(getSymbols(S)) : 
_objectKeys(S);
-    var length = keys.length;
-    var j = 0;
-    var key;
-    while (length > j) { if (isEnum.call(S, key = keys[j++])) { T[key] = 
S[key]; } }
-  } return T;
-} : $assign;
-
-// 19.1.3.1 Object.assign(target, source)
-
-
-_export(_export.S + _export.F, 'Object', { assign: _objectAssign });
-
-var assign = _core.Object.assign;
-
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-/* eslint-disable */
-
-// https://gist.github.com/WebReflection/5593554
-
-/* istanbul ignore if */
-if (!Object.setPrototypeOf) {
-  Object.setPrototypeOf = (function(Object, magic) {
-    var set;
-    function setPrototypeOf(O, proto) {
-      set.call(O, proto);
-      return O;
-    }
-    try {
-      // this works already in Firefox and Safari
-      set = Object.getOwnPropertyDescriptor(Object.prototype, magic).set;
-      set.call({}, null);
-    } catch (e) {
-      if (
-        // IE < 11 cannot be shimmed
-        Object.prototype !== {}[magic] ||
-        // neither can any browser that actually
-        // implemented __proto__ correctly
-        // (all but old V8 will return here)
-        {__proto__: null}.__proto__ === void 0
-        // this case means null objects cannot be passed
-        // through setPrototypeOf in a reliable way
-        // which means here a **Sham** is needed instead
-      ) {
-        return;
-      }
-      // nodejs 0.8 and 0.10 are (buggy and..) fine here
-      // probably Chrome or some old Mobile stock browser
-      set = function(proto) {
-        this[magic] = proto;
-      };
-      // please note that this will **not** work
-      // in those browsers that do not inherit
-      // __proto__ by mistake from Object.prototype
-      // in these cases we should probably throw an error
-      // or at least be informed about the issue
-      setPrototypeOf.polyfill = setPrototypeOf(
-        setPrototypeOf({}, null),
-        Object.prototype
-      ) instanceof Object;
-      // setPrototypeOf.polyfill === true means it works as meant
-      // setPrototypeOf.polyfill === false means it's not 100% reliable
-      // setPrototypeOf.polyfill === undefined
-      // or
-      // setPrototypeOf.polyfill ==  null means it's not a polyfill
-      // which means it works as expected
-      // we can even delete Object.prototype.__proto__;
-    }
-    return setPrototypeOf;
-  }(Object, '__proto__'));
-}
-
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-// fix Promise Problem on JSContext of iOS7~8
-// @see https://bugs.webkit.org/show_bug.cgi?id=135866
-
-var WXEnvironment$1 = global.WXEnvironment;
-
-/* istanbul ignore next */
-if (WXEnvironment$1 && WXEnvironment$1.platform === 'iOS') {
-  global.Promise = undefined;
-}
-
-var _wks = createCommonjsModule(function (module) {
-var store = _shared('wks');
-
-var Symbol = _global.Symbol;
-var USE_SYMBOL = typeof Symbol == 'function';
-
-var $exports = module.exports = function (name) {
-  return store[name] || (store[name] =
-    USE_SYMBOL && Symbol[name] || (USE_SYMBOL ? Symbol : _uid)('Symbol.' + 
name));
-};
-
-$exports.store = store;
-});
-
-// getting tag from 19.1.3.6 Object.prototype.toString()
-
-var TAG = _wks('toStringTag');
-// ES3 wrong here
-var ARG = _cof(function () { return arguments; }()) == 'Arguments';
-
-// fallback for IE11 Script Access Denied error
-var tryGet = function (it, key) {
-  try {
-    return it[key];
-  } catch (e) { /* empty */ }
-};
-
-var _classof = function (it) {
-  var O, T, B;
-  return it === undefined ? 'Undefined' : it === null ? 'Null'
-    // @@toStringTag case
-    : typeof (T = tryGet(O = Object(it), TAG)) == 'string' ? T
-    // builtinTag case
-    : ARG ? _cof(O)
-    // ES3 arguments fallback
-    : (B = _cof(O)) == 'Object' && typeof O.callee == 'function' ? 'Arguments' 
: B;
-};
-
-// 19.1.3.6 Object.prototype.toString()
-
-var test = {};
-test[_wks('toStringTag')] = 'z';
-if (test + '' != '[object z]') {
-  _redefine(Object.prototype, 'toString', function toString() {
-    return '[object ' + _classof(this) + ']';
-  }, true);
-}
-
-// true  -> String#at
-// false -> String#codePointAt
-var _stringAt = function (TO_STRING) {
-  return function (that, pos) {
-    var s = String(_defined(that));
-    var i = _toInteger(pos);
-    var l = s.length;
-    var a, b;
-    if (i < 0 || i >= l) { return TO_STRING ? '' : undefined; }
-    a = s.charCodeAt(i);
-    return a < 0xd800 || a > 0xdbff || i + 1 === l || (b = s.charCodeAt(i + 
1)) < 0xdc00 || b > 0xdfff
-      ? TO_STRING ? s.charAt(i) : a
-      : TO_STRING ? s.slice(i, i + 2) : (a - 0xd800 << 10) + (b - 0xdc00) + 
0x10000;
-  };
-};
-
-var _library = false;
-
-var _iterators = {};
-
-var _objectDps = _descriptors ? Object.defineProperties : function 
defineProperties(O, Properties) {
-  _anObject(O);
-  var keys = _objectKeys(Properties);
-  var length = keys.length;
-  var i = 0;
-  var P;
-  while (length > i) { _objectDp.f(O, P = keys[i++], Properties[P]); }
-  return O;
-};
-
-var document$2 = _global.document;
-var _html = document$2 && document$2.documentElement;
-
-// 19.1.2.2 / 15.2.3.5 Object.create(O [, Properties])
-
-
-
-var IE_PROTO$1 = _sharedKey('IE_PROTO');
-var Empty = function () { /* empty */ };
-var PROTOTYPE$1 = 'prototype';
-
-// Create object with fake `null` prototype: use iframe Object with cleared 
prototype
-var createDict = function () {
-  // Thrash, waste and sodomy: IE GC bug
-  var iframe = _domCreate('iframe');
-  var i = _enumBugKeys.length;
-  var lt = '<';
-  var gt = '>';
-  var iframeDocument;
-  iframe.style.display = 'none';
-  _html.appendChild(iframe);
-  iframe.src = 'javascript:'; // eslint-disable-line no-script-url
-  // createDict = iframe.contentWindow.Object;
-  // html.removeChild(iframe);
-  iframeDocument = iframe.contentWindow.document;
-  iframeDocument.open();
-  iframeDocument.write(lt + 'script' + gt + 'document.F=Object' + lt + 
'/script' + gt);
-  iframeDocument.close();
-  createDict = iframeDocument.F;
-  while (i--) { delete createDict[PROTOTYPE$1][_enumBugKeys[i]]; }
-  return createDict();
-};
-
-var _objectCreate = Object.create || function create(O, Properties) {
-  var result;
-  if (O !== null) {
-    Empty[PROTOTYPE$1] = _anObject(O);
-    result = new Empty();
-    Empty[PROTOTYPE$1] = null;
-    // add "__proto__" for Object.getPrototypeOf polyfill
-    result[IE_PROTO$1] = O;
-  } else { result = createDict(); }
-  return Properties === undefined ? result : _objectDps(result, Properties);
-};
-
-var def = _objectDp.f;
-
-var TAG$1 = _wks('toStringTag');
-
-var _setToStringTag = function (it, tag, stat) {
-  if (it && !_has(it = stat ? it : it.prototype, TAG$1)) { def(it, TAG$1, { 
configurable: true, value: tag }); }
-};
-
-var IteratorPrototype = {};
-
-// 25.1.2.1.1 %IteratorPrototype%[@@iterator]()
-_hide(IteratorPrototype, _wks('iterator'), function () { return this; });
-
-var _iterCreate = function (Constructor, NAME, next) {
-  Constructor.prototype = _objectCreate(IteratorPrototype, { next: 
_propertyDesc(1, next) });
-  _setToStringTag(Constructor, NAME + ' Iterator');
-};
-
-// 19.1.2.9 / 15.2.3.2 Object.getPrototypeOf(O)
-
-
-var IE_PROTO$2 = _sharedKey('IE_PROTO');
-var ObjectProto = Object.prototype;
-
-var _objectGpo = Object.getPrototypeOf || function (O) {
-  O = _toObject(O);
-  if (_has(O, IE_PROTO$2)) { return O[IE_PROTO$2]; }
-  if (typeof O.constructor == 'function' && O instanceof O.constructor) {
-    return O.constructor.prototype;
-  } return O instanceof Object ? ObjectProto : null;
-};
-
-var ITERATOR = _wks('iterator');
-var BUGGY = !([].keys && 'next' in [].keys()); // Safari has buggy iterators 
w/o `next`
-var FF_ITERATOR = '@@iterator';
-var KEYS = 'keys';
-var VALUES = 'values';
-
-var returnThis = function () { return this; };
-
-var _iterDefine = function (Base, NAME, Constructor, next, DEFAULT, IS_SET, 
FORCED) {
-  _iterCreate(Constructor, NAME, next);
-  var getMethod = function (kind) {
-    if (!BUGGY && kind in proto) { return proto[kind]; }
-    switch (kind) {
-      case KEYS: return function keys() { return new Constructor(this, kind); 
};
-      case VALUES: return function values() { return new Constructor(this, 
kind); };
-    } return function entries() { return new Constructor(this, kind); };
-  };
-  var TAG = NAME + ' Iterator';
-  var DEF_VALUES = DEFAULT == VALUES;
-  var VALUES_BUG = false;
-  var proto = Base.prototype;
-  var $native = proto[ITERATOR] || proto[FF_ITERATOR] || DEFAULT && 
proto[DEFAULT];
-  var $default = $native || getMethod(DEFAULT);
-  var $entries = DEFAULT ? !DEF_VALUES ? $default : getMethod('entries') : 
undefined;
-  var $anyNative = NAME == 'Array' ? proto.entries || $native : $native;
-  var methods, key, IteratorPrototype;
-  // Fix native
-  if ($anyNative) {
-    IteratorPrototype = _objectGpo($anyNative.call(new Base()));
-    if (IteratorPrototype !== Object.prototype && IteratorPrototype.next) {
-      // Set @@toStringTag to native iterators
-      _setToStringTag(IteratorPrototype, TAG, true);
-      // fix for some old engines
-      if (!_library && typeof IteratorPrototype[ITERATOR] != 'function') { 
_hide(IteratorPrototype, ITERATOR, returnThis); }
-    }
-  }
-  // fix Array#{values, @@iterator}.name in V8 / FF
-  if (DEF_VALUES && $native && $native.name !== VALUES) {
-    VALUES_BUG = true;
-    $default = function values() { return $native.call(this); };
-  }
-  // Define iterator
-  if ((!_library || FORCED) && (BUGGY || VALUES_BUG || !proto[ITERATOR])) {
-    _hide(proto, ITERATOR, $default);
-  }
-  // Plug for library
-  _iterators[NAME] = $default;
-  _iterators[TAG] = returnThis;
-  if (DEFAULT) {
-    methods = {
-      values: DEF_VALUES ? $default : getMethod(VALUES),
-      keys: IS_SET ? $default : getMethod(KEYS),
-      entries: $entries
-    };
-    if (FORCED) { for (key in methods) {
-      if (!(key in proto)) { _redefine(proto, key, methods[key]); }
-    } } else { _export(_export.P + _export.F * (BUGGY || VALUES_BUG), NAME, 
methods); }
-  }
-  return methods;
-};
-
-var $at = _stringAt(true);
-
-// 21.1.3.27 String.prototype[@@iterator]()
-_iterDefine(String, 'String', function (iterated) {
-  this._t = String(iterated); // target
-  this._i = 0;                // next index
-// 21.1.5.2.1 %StringIteratorPrototype%.next()
-}, function () {
-  var O = this._t;
-  var index = this._i;
-  var point;
-  if (index >= O.length) { return { value: undefined, done: true }; }
-  point = $at(O, index);
-  this._i += point.length;
-  return { value: point, done: false };
-});
-
-// 22.1.3.31 Array.prototype[@@unscopables]
-var UNSCOPABLES = _wks('unscopables');
-var ArrayProto = Array.prototype;
-if (ArrayProto[UNSCOPABLES] == undefined) { _hide(ArrayProto, UNSCOPABLES, 
{}); }
-var _addToUnscopables = function (key) {
-  ArrayProto[UNSCOPABLES][key] = true;
-};
-
-var _iterStep = function (done, value) {
-  return { value: value, done: !!done };
-};
-
-// 22.1.3.4 Array.prototype.entries()
-// 22.1.3.13 Array.prototype.keys()
-// 22.1.3.29 Array.prototype.values()
-// 22.1.3.30 Array.prototype[@@iterator]()
-var es6_array_iterator = _iterDefine(Array, 'Array', function (iterated, kind) 
{
-  this._t = _toIobject(iterated); // target
-  this._i = 0;                   // next index
-  this._k = kind;                // kind
-// 22.1.5.2.1 %ArrayIteratorPrototype%.next()
-}, function () {
-  var O = this._t;
-  var kind = this._k;
-  var index = this._i++;
-  if (!O || index >= O.length) {
-    this._t = undefined;
-    return _iterStep(1);
-  }
-  if (kind == 'keys') { return _iterStep(0, index); }
-  if (kind == 'values') { return _iterStep(0, O[index]); }
-  return _iterStep(0, [index, O[index]]);
-}, 'values');
-
-// argumentsList[@@iterator] is %ArrayProto_values% (9.4.4.6, 9.4.4.7)
-_iterators.Arguments = _iterators.Array;
-
-_addToUnscopables('keys');
-_addToUnscopables('values');
-_addToUnscopables('entries');
-
-var ITERATOR$1 = _wks('iterator');
-var TO_STRING_TAG = _wks('toStringTag');
-var ArrayValues = _iterators.Array;
-
-var DOMIterables = {
-  CSSRuleList: true, // TODO: Not spec compliant, should be false.
-  CSSStyleDeclaration: false,
-  CSSValueList: false,
-  ClientRectList: false,
-  DOMRectList: false,
-  DOMStringList: false,
-  DOMTokenList: true,
-  DataTransferItemList: false,
-  FileList: false,
-  HTMLAllCollection: false,
-  HTMLCollection: false,
-  HTMLFormElement: false,
-  HTMLSelectElement: false,
-  MediaList: true, // TODO: Not spec compliant, should be false.
-  MimeTypeArray: false,
-  NamedNodeMap: false,
-  NodeList: true,
-  PaintRequestList: false,
-  Plugin: false,
-  PluginArray: false,
-  SVGLengthList: false,
-  SVGNumberList: false,
-  SVGPathSegList: false,
-  SVGPointList: false,
-  SVGStringList: false,
-  SVGTransformList: false,
-  SourceBufferList: false,
-  StyleSheetList: true, // TODO: Not spec compliant, should be false.
-  TextTrackCueList: false,
-  TextTrackList: false,
-  TouchList: false
-};
-
-for (var collections = _objectKeys(DOMIterables), i = 0; i < 
collections.length; i++) {
-  var NAME = collections[i];
-  var explicit = DOMIterables[NAME];
-  var Collection = _global[NAME];
-  var proto = Collection && Collection.prototype;
-  var key;
-  if (proto) {
-    if (!proto[ITERATOR$1]) { _hide(proto, ITERATOR$1, ArrayValues); }
-    if (!proto[TO_STRING_TAG]) { _hide(proto, TO_STRING_TAG, NAME); }
-    _iterators[NAME] = ArrayValues;
-    if (explicit) { for (key in es6_array_iterator) { if (!proto[key]) { 
_redefine(proto, key, es6_array_iterator[key], true); } } }
-  }
-}
-
-var _anInstance = function (it, Constructor, name, forbiddenField) {
-  if (!(it instanceof Constructor) || (forbiddenField !== undefined && 
forbiddenField in it)) {
-    throw TypeError(name + ': incorrect invocation!');
-  } return it;
-};
-
-// call something on iterator step with safe closing on error
-
-var _iterCall = function (iterator, fn, value, entries) {
-  try {
-    return entries ? fn(_anObject(value)[0], value[1]) : fn(value);
-  // 7.4.6 IteratorClose(iterator, completion)
-  } catch (e) {
-    var ret = iterator['return'];
-    if (ret !== undefined) { _anObject(ret.call(iterator)); }
-    throw e;
-  }
-};
-
-// check on default Array iterator
-
-var ITERATOR$2 = _wks('iterator');
-var ArrayProto$1 = Array.prototype;
-
-var _isArrayIter = function (it) {
-  return it !== undefined && (_iterators.Array === it || 
ArrayProto$1[ITERATOR$2] === it);
-};
-
-var ITERATOR$3 = _wks('iterator');
-
-var core_getIteratorMethod = _core.getIteratorMethod = function (it) {
-  if (it != undefined) { return it[ITERATOR$3]
-    || it['@@iterator']
-    || _iterators[_classof(it)]; }
-};
-
-var _forOf = createCommonjsModule(function (module) {
-var BREAK = {};
-var RETURN = {};
-var exports = module.exports = function (iterable, entries, fn, that, 
ITERATOR) {
-  var iterFn = ITERATOR ? function () { return iterable; } : 
core_getIteratorMethod(iterable);
-  var f = _ctx(fn, that, entries ? 2 : 1);
-  var index = 0;
-  var length, step, iterator, result;
-  if (typeof iterFn != 'function') { throw TypeError(iterable + ' is not 
iterable!'); }
-  // fast case for arrays with default iterator
-  if (_isArrayIter(iterFn)) { for (length = _toLength(iterable.length); length 
> index; index++) {
-    result = entries ? f(_anObject(step = iterable[index])[0], step[1]) : 
f(iterable[index]);
-    if (result === BREAK || result === RETURN) { return result; }
-  } } else { for (iterator = iterFn.call(iterable); !(step = 
iterator.next()).done;) {
-    result = _iterCall(iterator, f, step.value, entries);
-    if (result === BREAK || result === RETURN) { return result; }
-  } }
-};
-exports.BREAK = BREAK;
-exports.RETURN = RETURN;
-});
-
-// 7.3.20 SpeciesConstructor(O, defaultConstructor)
-
-
-var SPECIES = _wks('species');
-var _speciesConstructor = function (O, D) {
-  var C = _anObject(O).constructor;
-  var S;
-  return C === undefined || (S = _anObject(C)[SPECIES]) == undefined ? D : 
_aFunction(S);
-};
-
-// fast apply, http://jsperf.lnkit.com/fast-apply/5
-var _invoke = function (fn, args, that) {
-  var un = that === undefined;
-  switch (args.length) {
-    case 0: return un ? fn()
-                      : fn.call(that);
-    case 1: return un ? fn(args[0])
-                      : fn.call(that, args[0]);
-    case 2: return un ? fn(args[0], args[1])
-                      : fn.call(that, args[0], args[1]);
-    case 3: return un ? fn(args[0], args[1], args[2])
-                      : fn.call(that, args[0], args[1], args[2]);
-    case 4: return un ? fn(args[0], args[1], args[2], args[3])
-                      : fn.call(that, args[0], args[1], args[2], args[3]);
-  } return fn.apply(that, args);
-};
-
-var process$2 = _global.process;
-var setTask = _global.setImmediate;
-var clearTask = _global.clearImmediate;
-var MessageChannel$1 = _global.MessageChannel;
-var Dispatch = _global.Dispatch;
-var counter = 0;
-var queue = {};
-var ONREADYSTATECHANGE = 'onreadystatechange';
-var defer;
-var channel;
-var port;
-var run = function () {
-  var id = +this;
-  // eslint-disable-next-line no-prototype-builtins
-  if (queue.hasOwnProperty(id)) {
-    var fn = queue[id];
-    delete queue[id];
-    fn();
-  }
-};
-var listener = function (event) {
-  run.call(event.data);
-};
-// Node.js 0.9+ & IE10+ has setImmediate, otherwise:
-if (!setTask || !clearTask) {
-  setTask = function setImmediate(fn) {
-    var arguments$1 = arguments;
-
-    var args = [];
-    var i = 1;
-    while (arguments.length > i) { args.push(arguments$1[i++]); }
-    queue[++counter] = function () {
-      // eslint-disable-next-line no-new-func
-      _invoke(typeof fn == 'function' ? fn : Function(fn), args);
-    };
-    defer(counter);
-    return counter;
-  };
-  clearTask = function clearImmediate(id) {
-    delete queue[id];
-  };
-  // Node.js 0.8-
-  if (_cof(process$2) == 'process') {
-    defer = function (id) {
-      process$2.nextTick(_ctx(run, id, 1));
-    };
-  // Sphere (JS game engine) Dispatch API
-  } else if (Dispatch && Dispatch.now) {
-    defer = function (id) {
-      Dispatch.now(_ctx(run, id, 1));
-    };
-  // Browsers with MessageChannel, includes WebWorkers
-  } else if (MessageChannel$1) {
-    channel = new MessageChannel$1();
-    port = channel.port2;
-    channel.port1.onmessage = listener;
-    defer = _ctx(port.postMessage, port, 1);
-  // Browsers with postMessage, skip WebWorkers
-  // IE8 has postMessage, but it's sync & typeof its postMessage is 'object'
-  } else if (_global.addEventListener && typeof postMessage == 'function' && 
!_global.importScripts) {
-    defer = function (id) {
-      _global.postMessage(id + '', '*');
-    };
-    _global.addEventListener('message', listener, false);
-  // IE8-
-  } else if (ONREADYSTATECHANGE in _domCreate('script')) {
-    defer = function (id) {
-      _html.appendChild(_domCreate('script'))[ONREADYSTATECHANGE] = function 
() {
-        _html.removeChild(this);
-        run.call(id);
-      };
-    };
-  // Rest old browsers
-  } else {
-    defer = function (id) {
-      setTimeout(_ctx(run, id, 1), 0);
-    };
-  }
-}
-var _task = {
-  set: setTask,
-  clear: clearTask
-};
-
-var macrotask = _task.set;
-var Observer = _global.MutationObserver || _global.WebKitMutationObserver;
-var process$3 = _global.process;
-var Promise$1 = _global.Promise;
-var isNode$1 = _cof(process$3) == 'process';
-
-var _microtask = function () {
-  var head, last, notify;
-
-  var flush = function () {
-    var parent, fn;
-    if (isNode$1 && (parent = process$3.domain)) { parent.exit(); }
-    while (head) {
-      fn = head.fn;
-      head = head.next;
-      try {
-        fn();
-      } catch (e) {
-        if (head) { notify(); }
-        else { last = undefined; }
-        throw e;
-      }
-    } last = undefined;
-    if (parent) { parent.enter(); }
-  };
-
-  // Node.js
-  if (isNode$1) {
-    notify = function () {
-      process$3.nextTick(flush);
-    };
-  // browsers with MutationObserver, except iOS Safari - 
https://github.com/zloirock/core-js/issues/339
-  } else if (Observer && !(_global.navigator && _global.navigator.standalone)) 
{
-    var toggle = true;
-    var node = document.createTextNode('');
-    new Observer(flush).observe(node, { characterData: true }); // 
eslint-disable-line no-new
-    notify = function () {
-      node.data = toggle = !toggle;
-    };
-  // environments with maybe non-completely correct, but existent Promise
-  } else if (Promise$1 && Promise$1.resolve) {
-    var promise = Promise$1.resolve();
-    notify = function () {
-      promise.then(flush);
-    };
-  // for other environments - macrotask based on:
-  // - setImmediate
-  // - MessageChannel
-  // - window.postMessag
-  // - onreadystatechange
-  // - setTimeout
-  } else {
-    notify = function () {
-      // strange IE + webpack dev server bug - use .call(global)
-      macrotask.call(_global, flush);
-    };
-  }
-
-  return function (fn) {
-    var task = { fn: fn, next: undefined };
-    if (last) { last.next = task; }
-    if (!head) {
-      head = task;
-      notify();
-    } last = task;
-  };
-};
-
-// 25.4.1.5 NewPromiseCapability(C)
-
-
-function PromiseCapability(C) {
-  var resolve, reject;
-  this.promise = new C(function ($$resolve, $$reject) {
-    if (resolve !== undefined || reject !== undefined) { throw TypeError('Bad 
Promise constructor'); }
-    resolve = $$resolve;
-    reject = $$reject;
-  });
-  this.resolve = _aFunction(resolve);
-  this.reject = _aFunction(reject);
-}
-
-var f$3 = function (C) {
-  return new PromiseCapability(C);
-};
-
-var _newPromiseCapability = {
-       f: f$3
-};
-
-var _perform = function (exec) {
-  try {
-    return { e: false, v: exec() };
-  } catch (e) {
-    return { e: true, v: e };
-  }
-};
-
-var _promiseResolve = function (C, x) {
-  _anObject(C);
-  if (_isObject(x) && x.constructor === C) { return x; }
-  var promiseCapability = _newPromiseCapability.f(C);
-  var resolve = promiseCapability.resolve;
-  resolve(x);
-  return promiseCapability.promise;
-};
-
-var _redefineAll = function (target, src, safe) {
-  for (var key in src) { _redefine(target, key, src[key], safe); }
-  return target;
-};
-
-var SPECIES$1 = _wks('species');
-
-var _setSpecies = function (KEY) {
-  var C = _global[KEY];
-  if (_descriptors && C && !C[SPECIES$1]) { _objectDp.f(C, SPECIES$1, {
-    configurable: true,
-    get: function () { return this; }
-  }); }
-};
-
-var ITERATOR$4 = _wks('iterator');
-var SAFE_CLOSING = false;
-
-try {
-  var riter = [7][ITERATOR$4]();
-  riter['return'] = function () { SAFE_CLOSING = true; };
-  // eslint-disable-next-line no-throw-literal
-
-} catch (e) { /* empty */ }
-
-var _iterDetect = function (exec, skipClosing) {
-  if (!skipClosing && !SAFE_CLOSING) { return false; }
-  var safe = false;
-  try {
-    var arr = [7];
-    var iter = arr[ITERATOR$4]();
-    iter.next = function () { return { done: safe = true }; };
-    arr[ITERATOR$4] = function () { return iter; };
-    exec(arr);
-  } catch (e) { /* empty */ }
-  return safe;
-};
-
-var task = _task.set;
-var microtask = _microtask();
-
-
-
-var PROMISE = 'Promise';
-var TypeError$1 = _global.TypeError;
-var process$1 = _global.process;
-var $Promise = _global[PROMISE];
-var isNode = _classof(process$1) == 'process';
-var empty = function () { /* empty */ };
-var Internal;
-var newGenericPromiseCapability;
-var OwnPromiseCapability;
-var Wrapper;
-var newPromiseCapability = newGenericPromiseCapability = 
_newPromiseCapability.f;
-
-var USE_NATIVE = !!function () {
-  try {
-    // correct subclassing with @@species support
-    var promise = $Promise.resolve(1);
-    var FakePromise = (promise.constructor = {})[_wks('species')] = function 
(exec) {
-      exec(empty, empty);
-    };
-    // unhandled rejections tracking support, NodeJS Promise without it fails 
@@species test
-    return (isNode || typeof PromiseRejectionEvent == 'function') && 
promise.then(empty) instanceof FakePromise;
-  } catch (e) { /* empty */ }
-}();
-
-// helpers
-var isThenable = function (it) {
-  var then;
-  return _isObject(it) && typeof (then = it.then) == 'function' ? then : false;
-};
-var notify = function (promise, isReject) {
-  if (promise._n) { return; }
-  promise._n = true;
-  var chain = promise._c;
-  microtask(function () {
-    var value = promise._v;
-    var ok = promise._s == 1;
-    var i = 0;
-    var run = function (reaction) {
-      var handler = ok ? reaction.ok : reaction.fail;
-      var resolve = reaction.resolve;
-      var reject = reaction.reject;
-      var domain = reaction.domain;
-      var result, then, exited;
-      try {
-        if (handler) {
-          if (!ok) {
-            if (promise._h == 2) { onHandleUnhandled(promise); }
-            promise._h = 1;
-          }
-          if (handler === true) { result = value; }
-          else {
-            if (domain) { domain.enter(); }
-            result = handler(value); // may throw
-            if (domain) {
-              domain.exit();
-              exited = true;
-            }
-          }
-          if (result === reaction.promise) {
-            reject(TypeError$1('Promise-chain cycle'));
-          } else if (then = isThenable(result)) {
-            then.call(result, resolve, reject);
-          } else { resolve(result); }
-        } else { reject(value); }
-      } catch (e) {
-        if (domain && !exited) { domain.exit(); }
-        reject(e);
-      }
-    };
-    while (chain.length > i) { run(chain[i++]); } // variable length - can't 
use forEach
-    promise._c = [];
-    promise._n = false;
-    if (isReject && !promise._h) { onUnhandled(promise); }
-  });
-};
-var onUnhandled = function (promise) {
-  task.call(_global, function () {
-    var value = promise._v;
-    var unhandled = isUnhandled(promise);
-    var result, handler, console;
-    if (unhandled) {
-      result = _perform(function () {
-        if (isNode) {
-          process$1.emit('unhandledRejection', value, promise);
-        } else if (handler = _global.onunhandledrejection) {
-          handler({ promise: promise, reason: value });
-        } else if ((console = _global.console) && console.error) {
-          console.error('Unhandled promise rejection', value);
-        }
-      });
-      // Browsers should not trigger `rejectionHandled` event if it was 
handled here, NodeJS - should
-      promise._h = isNode || isUnhandled(promise) ? 2 : 1;
-    } promise._a = undefined;
-    if (unhandled && result.e) { throw result.v; }
-  });
-};
-var isUnhandled = function (promise) {
-  return promise._h !== 1 && (promise._a || promise._c).length === 0;
-};
-var onHandleUnhandled = function (promise) {
-  task.call(_global, function () {
-    var handler;
-    if (isNode) {
-      process$1.emit('rejectionHandled', promise);
-    } else if (handler = _global.onrejectionhandled) {
-      handler({ promise: promise, reason: promise._v });
-    }
-  });
-};
-var $reject = function (value) {
-  var promise = this;
-  if (promise._d) { return; }
-  promise._d = true;
-  promise = promise._w || promise; // unwrap
-  promise._v = value;
-  promise._s = 2;
-  if (!promise._a) { promise._a = promise._c.slice(); }
-  notify(promise, true);
-};
-var $resolve = function (value) {
-  var promise = this;
-  var then;
-  if (promise._d) { return; }
-  promise._d = true;
-  promise = promise._w || promise; // unwrap
-  try {
-    if (promise === value) { throw TypeError$1("Promise can't be resolved 
itself"); }
-    if (then = isThenable(value)) {
-      microtask(function () {
-        var wrapper = { _w: promise, _d: false }; // wrap
-        try {
-          then.call(value, _ctx($resolve, wrapper, 1), _ctx($reject, wrapper, 
1));
-        } catch (e) {
-          $reject.call(wrapper, e);
-        }
-      });
-    } else {
-      promise._v = value;
-      promise._s = 1;
-      notify(promise, false);
-    }
-  } catch (e) {
-    $reject.call({ _w: promise, _d: false }, e); // wrap
-  }
-};
-
-// constructor polyfill
-if (!USE_NATIVE) {
-  // 25.4.3.1 Promise(executor)
-  $Promise = function Promise(executor) {
-    _anInstance(this, $Promise, PROMISE, '_h');
-    _aFunction(executor);
-    Internal.call(this);
-    try {
-      executor(_ctx($resolve, this, 1), _ctx($reject, this, 1));
-    } catch (err) {
-      $reject.call(this, err);
-    }
-  };
-  // eslint-disable-next-line no-unused-vars
-  Internal = function Promise(executor) {
-    this._c = [];             // <- awaiting reactions
-    this._a = undefined;      // <- checked in isUnhandled reactions
-    this._s = 0;              // <- state
-    this._d = false;          // <- done
-    this._v = undefined;      // <- value
-    this._h = 0;              // <- rejection state, 0 - default, 1 - handled, 
2 - unhandled
-    this._n = false;          // <- notify
-  };
-  Internal.prototype = _redefineAll($Promise.prototype, {
-    // 25.4.5.3 Promise.prototype.then(onFulfilled, onRejected)
-    then: function then(onFulfilled, onRejected) {
-      var reaction = newPromiseCapability(_speciesConstructor(this, $Promise));
-      reaction.ok = typeof onFulfilled == 'function' ? onFulfilled : true;
-      reaction.fail = typeof onRejected == 'function' && onRejected;
-      reaction.domain = isNode ? process$1.domain : undefined;
-      this._c.push(reaction);
-      if (this._a) { this._a.push(reaction); }
-      if (this._s) { notify(this, false); }
-      return reaction.promise;
-    },
-    // 25.4.5.1 Promise.prototype.catch(onRejected)
-    'catch': function (onRejected) {
-      return this.then(undefined, onRejected);
-    }
-  });
-  OwnPromiseCapability = function () {
-    var promise = new Internal();
-    this.promise = promise;
-    this.resolve = _ctx($resolve, promise, 1);
-    this.reject = _ctx($reject, promise, 1);
-  };
-  _newPromiseCapability.f = newPromiseCapability = function (C) {
-    return C === $Promise || C === Wrapper
-      ? new OwnPromiseCapability(C)
-      : newGenericPromiseCapability(C);
-  };
-}
-
-_export(_export.G + _export.W + _export.F * !USE_NATIVE, { Promise: $Promise 
});
-_setToStringTag($Promise, PROMISE);
-_setSpecies(PROMISE);
-Wrapper = _core[PROMISE];
-
-// statics
-_export(_export.S + _export.F * !USE_NATIVE, PROMISE, {
-  // 25.4.4.5 Promise.reject(r)
-  reject: function reject(r) {
-    var capability = newPromiseCapability(this);
-    var $$reject = capability.reject;
-    $$reject(r);
-    return capability.promise;
-  }
-});
-_export(_export.S + _export.F * (_library || !USE_NATIVE), PROMISE, {
-  // 25.4.4.6 Promise.resolve(x)
-  resolve: function resolve(x) {
-    return _promiseResolve(_library && this === Wrapper ? $Promise : this, x);
-  }
-});
-_export(_export.S + _export.F * !(USE_NATIVE && _iterDetect(function (iter) {
-  $Promise.all(iter)['catch'](empty);
-})), PROMISE, {
-  // 25.4.4.1 Promise.all(iterable)
-  all: function all(iterable) {
-    var C = this;
-    var capability = newPromiseCapability(C);
-    var resolve = capability.resolve;
-    var reject = capability.reject;
-    var result = _perform(function () {
-      var values = [];
-      var index = 0;
-      var remaining = 1;
-      _forOf(iterable, false, function (promise) {
-        var $index = index++;
-        var alreadyCalled = false;
-        values.push(undefined);
-        remaining++;
-        C.resolve(promise).then(function (value) {
-          if (alreadyCalled) { return; }
-          alreadyCalled = true;
-          values[$index] = value;
-          --remaining || resolve(values);
-        }, reject);
-      });
-      --remaining || resolve(values);
-    });
-    if (result.e) { reject(result.v); }
-    return capability.promise;
-  },
-  // 25.4.4.4 Promise.race(iterable)
-  race: function race(iterable) {
-    var C = this;
-    var capability = newPromiseCapability(C);
-    var reject = capability.reject;
-    var result = _perform(function () {
-      _forOf(iterable, false, function (promise) {
-        C.resolve(promise).then(capability.resolve, reject);
-      });
-    });
-    if (result.e) { reject(result.v); }
-    return capability.promise;
-  }
-});
-
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-/**
- * @fileOverview
- * This file will hack `console` methods by `WXEnvironment.logLevel`.
- * So we can control how many and which messages will be sent by change the 
log level.
- * Additionally in native platform the message content must be primitive 
values and
- * using `nativeLog(...args, logLevelMark)` so we create a new `console` 
object in
- * global add a format process for its methods.
- */
-
-var LEVELS = ['off', 'error', 'warn', 'info', 'log', 'debug'];
-var levelMap = {};
-
-var originalConsole = global.console;
-
-/**
- * Hack console for native environment.
- */
-function setNativeConsole () {
-  generateLevelMap();
-
-  /* istanbul ignore next */
-  // mock console in native environment
-  if (global.WXEnvironment && global.WXEnvironment.platform !== 'Web') {
-    global.console = {
-      debug: function () {
-        var args = [], len = arguments.length;
-        while ( len-- ) args[ len ] = arguments[ len ];
-
-        if (checkLevel('debug')) { global.nativeLog.apply(global, 
format(args).concat( ['__DEBUG'] )); }
-      },
-      log: function () {
-        var args = [], len = arguments.length;
-        while ( len-- ) args[ len ] = arguments[ len ];
-
-        if (checkLevel('log')) { global.nativeLog.apply(global, 
format(args).concat( ['__LOG'] )); }
-      },
-      info: function () {
-        var args = [], len = arguments.length;
-        while ( len-- ) args[ len ] = arguments[ len ];
-
-        if (checkLevel('info')) { global.nativeLog.apply(global, 
format(args).concat( ['__INFO'] )); }
-      },
-      warn: function () {
-        var args = [], len = arguments.length;
-        while ( len-- ) args[ len ] = arguments[ len ];
-
-        if (checkLevel('warn')) { global.nativeLog.apply(global, 
format(args).concat( ['__WARN'] )); }
-      },
-      error: function () {
-        var args = [], len = arguments.length;
-        while ( len-- ) args[ len ] = arguments[ len ];
-
-        if (checkLevel('error')) { global.nativeLog.apply(global, 
format(args).concat( ['__ERROR'] )); }
-      }
-    };
-  }
-
-  // Web or Node
-  else {
-    var debug = console.debug;
-    var log = console.log;
-    var info = console.info;
-    var warn = console.warn;
-    var error = console.error;
-    console.__ori__ = { debug: debug, log: log, info: info, warn: warn, error: 
error };
-    console.debug = function () {
-      var args = [], len = arguments.length;
-      while ( len-- ) args[ len ] = arguments[ len ];
-
-      if (checkLevel('debug')) { console.__ori__.debug.apply(console, args); }
-    };
-    console.log = function () {
-      var args = [], len = arguments.length;
-      while ( len-- ) args[ len ] = arguments[ len ];
-
-      if (checkLevel('log')) { console.__ori__.log.apply(console, args); }
-    };
-    console.info = function () {
-      var args = [], len = arguments.length;
-      while ( len-- ) args[ len ] = arguments[ len ];
-
-      if (checkLevel('info')) { console.__ori__.info.apply(console, args); }
-    };
-    console.warn = function () {
-      var args = [], len = arguments.length;
-      while ( len-- ) args[ len ] = arguments[ len ];
-
-      if (checkLevel('warn')) { console.__ori__.warn.apply(console, args); }
-    };
-    console.error = function () {
-      var args = [], len = arguments.length;
-      while ( len-- ) args[ len ] = arguments[ len ];
-
-      if (checkLevel('error')) { console.__ori__.error.apply(console, args); }
-    };
-  }
-}
-
-/**
- * Reset hacked console to original.
- */
-/* istanbul ignore next */
-
-
-/**
- * Generate map for which types of message will be sent in a certain message 
level
- * as the order of LEVELS.
- */
-function generateLevelMap () {
-  LEVELS.forEach(function (level) {
-    var levelIndex = LEVELS.indexOf(level);
-    levelMap[level] = {};
-    LEVELS.forEach(function (type) {
-      var typeIndex = LEVELS.indexOf(type);
-      if (typeIndex <= levelIndex) {
-        levelMap[level][type] = true;
-      }
-    });
-  });
-}
-
-/**
- * Check if a certain type of message will be sent in current log level of env.
- * @param  {string} type
- * @return {boolean}
- */
-function checkLevel (type) {
-  var logLevel = (global.WXEnvironment && global.WXEnvironment.logLevel) || 
'log';
-  return levelMap[logLevel] && levelMap[logLevel][type]
-}
-
-/**
- * Convert all log arguments into primitive values.
- * @param  {array} args
- * @return {array}
- */
-/* istanbul ignore next */
-function format (args) {
-  return args.map(function (v) {
-    var type = Object.prototype.toString.call(v);
-    if (type.toLowerCase() === '[object object]') {
-      v = JSON.stringify(v);
-    }
-    else {
-      v = String(v);
-    }
-    return v
-  })
-}
-
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-/**
- * @fileOverview
- * Polyfill `setTimeout` on Android V8 using native method
- * `setTimeoutNative(callbackId, time)` and JS method
- * `setTimeoutCallback(callbackId)`.
- * This polyfill is only used in virtual-DOM diff & flush agorithm. Not
- * accessed by JS Bundle code (The timer APIs polyfill for JS Bundle is in
- * `html5/default/app/ctrl.js`).
- */
-
-var originalSetTimeout = global.setTimeout;
-var setTimeoutNative = global.setTimeoutNative;
-
-/**
- * Set up native timer
- */
-/* istanbul ignore next */
-function setNativeTimer () {
-  if (typeof setTimeout === 'undefined' &&
-  typeof setTimeoutNative === 'function') {
-    var timeoutMap = {};
-    var timeoutId = 0;
-
-    global.setTimeout = function (cb, time) {
-      timeoutMap[++timeoutId] = cb;
-      setTimeoutNative(timeoutId.toString(), time);
-    };
-
-    global.setTimeoutCallback = function (id) {
-      if (typeof timeoutMap[id] === 'function') {
-        timeoutMap[id]();
-        delete timeoutMap[id];
-      }
-    };
-  }
-}
-
-/* istanbul ignore next */
-
-
-setNativeTimer();
-
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-/**
- * Freeze the prototype of javascript build-in objects.
- */
-/* istanbul ignore next */
-function freezePrototype () {
-  Object.freeze(Object);
-  Object.freeze(Array);
-
-  // Object.freeze(Object.prototype)
-  freezeObjectProto();
-  Object.freeze(Array.prototype);
-  Object.freeze(String.prototype);
-  Object.freeze(Number.prototype);
-  Object.freeze(Boolean.prototype);
-
-  // Object.freeze(Error.prototype)
-  freezeErrorProto();
-  Object.freeze(Date.prototype);
-  Object.freeze(RegExp.prototype);
-}
-
-function freezeObjectProto () {
-  var proto = Object.prototype;
-  var protoName = 'Object.prototype';
-  freezeProtoProperty(proto, '__defineGetter__', protoName);
-  freezeProtoProperty(proto, '__defineSetter__', protoName);
-  freezeProtoProperty(proto, '__lookupGetter__', protoName);
-  freezeProtoProperty(proto, '__lookupSetter__', protoName);
-  freezeProtoProperty(proto, 'constructor', protoName);
-  freezeProtoProperty(proto, 'hasOwnProperty', protoName);
-  freezeProtoProperty(proto, 'isPrototypeOf', protoName);
-  freezeProtoProperty(proto, 'propertyIsEnumerable', protoName);
-  freezeProtoProperty(proto, 'toLocaleString', protoName);
-  freezeProtoProperty(proto, 'toString', protoName);
-  freezeProtoProperty(proto, 'valueOf', protoName);
-  Object.seal(proto);
-}
-
-function freezeErrorProto () {
-  var proto = Error.prototype;
-  var protoName = 'Error.prototype';
-  freezeProtoProperty(proto, 'name', protoName);
-  freezeProtoProperty(proto, 'message', protoName);
-  freezeProtoProperty(proto, 'toString', protoName);
-  freezeProtoProperty(proto, 'constructor', protoName);
-  Object.seal(proto);
-}
-
-function freezeProtoProperty (proto, propertyName, protoName) {
-  if (!proto.hasOwnProperty(propertyName)) {
-    return
-  }
-
-  var origin = proto[propertyName];
-  Object.defineProperty(proto, propertyName, {
-    get: function () {
-      return origin
-    },
-    set: function (value) {
-      if (this === proto) {
-        throw Error(("Cannot assign to read only property " + propertyName + " 
of " + protoName))
-      }
-
-      Object.defineProperty(this, propertyName, {
-        value: value,
-        writable: true
-      });
-
-      return value
-    }
-  });
-}
-
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-setNativeConsole();
-
-var subversion = {"framework":"0.26.0-beta.0","transformer":">=0.1.5 <0.5"};
-
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-function getHookKey (componentId, type, hookName) {
-  return (type + "@" + hookName + "#" + componentId)
-}
-
-/**
- * For general callback management of a certain Weex instance.
- * Because function can not passed into native, so we create callback
- * callback id for each function and pass the callback id into native
- * in fact. And when a callback called from native, we can find the real
- * callback through the callback id we have passed before.
- */
-var CallbackManager = function CallbackManager (instanceId) {
-  this.instanceId = String(instanceId);
-  this.lastCallbackId = 0;
-  this.callbacks = {};
-  this.hooks = {};
-};
-CallbackManager.prototype.add = function add (callback) {
-  this.lastCallbackId++;
-  this.callbacks[this.lastCallbackId] = callback;
-  return this.lastCallbackId
-};
-CallbackManager.prototype.remove = function remove (callbackId) {
-  var callback = this.callbacks[callbackId];
-  delete this.callbacks[callbackId];
-  return callback
-};
-CallbackManager.prototype.registerHook = function registerHook (componentId, 
type, hookName, hookFunction) {
-  // TODO: validate arguments
-  var key = getHookKey(componentId, type, hookName);
-  if (this.hooks[key]) {
-    console.warn(("[JS Framework] Override an existing component hook \"" + 
key + "\"."));
-  }
-  this.hooks[key] = hookFunction;
-};
-CallbackManager.prototype.triggerHook = function triggerHook (componentId, 
type, hookName, args) {
-  // TODO: validate arguments
-  var key = getHookKey(componentId, type, hookName);
-  var hookFunction = this.hooks[key];
-  if (typeof hookFunction !== 'function') {
-    console.error(("[JS Framework] Invalid hook function type (" + (typeof 
hookFunction) + ") on \"" + key + "\"."));
-    return null
-  }
-  var result = null;
-  try {
-    result = hookFunction.apply(null, args || []);
-  }
-  catch (e) {
-    console.error(("[JS Framework] Failed to execute the hook function on \"" 
+ key + "\"."));
-  }
-  return result
-};
-CallbackManager.prototype.consume = function consume (callbackId, data, 
ifKeepAlive) {
-  var callback = this.callbacks[callbackId];
-  if (typeof ifKeepAlive === 'undefined' || ifKeepAlive === false) {
-    delete this.callbacks[callbackId];
-  }
-  if (typeof callback === 'function') {
-    return callback(data)
-  }
-  return new Error(("invalid callback id \"" + callbackId + "\""))
-};
-CallbackManager.prototype.close = function close () {
-  this.callbacks = {};
-  this.hooks = {};
-};
-
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-/**
- * Get a unique id.
- */
-var nextNodeRef = 1;
-function uniqueId () {
-  return (nextNodeRef++).toString()
-}
-
-function typof (v) {
-  var s = Object.prototype.toString.call(v);
-  return s.substring(8, s.length - 1)
-}
-
-function bufferToBase64 (buffer) {
-  if (typeof btoa !== 'function') {
-    return ''
-  }
-  var string = Array.prototype.map.call(
-    new Uint8Array(buffer),
-    function (code) { return String.fromCharCode(code); }
-  ).join('');
-  return btoa(string) // eslint-disable-line no-undef
-}
-
-
-
-/**
- * Detect if the param is falsy or empty
- * @param {any} any
- */
-function isEmpty (any) {
-  if (!any || typeof any !== 'object') {
-    return true
-  }
-
-  for (var key in any) {
-    if (Object.prototype.hasOwnProperty.call(any, key)) {
-      return false
-    }
-  }
-  return true
-}
-
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-var docMap = {};
-
-/**
- * Add a document object into docMap.
- * @param {string} id
- * @param {object} document
- */
-function addDoc (id, doc) {
-  if (id) {
-    docMap[id] = doc;
-  }
-}
-
-/**
- * Get the document object by id.
- * @param {string} id
- */
-function getDoc (id) {
-  return docMap[id]
-}
-
-/**
- * Remove the document from docMap by id.
- * @param {string} id
- */
-function removeDoc (id) {
-  delete docMap[id];
-}
-
-/**
- * @deprecated
- * Get listener by document id.
- * @param {string} id
- * @return {object} listener
- */
-
-
-/**
- * Get TaskCenter instance by id.
- * @param {string} id
- * @return {object} TaskCenter
- */
-function getTaskCenter (id) {
-  var doc = docMap[id];
-  if (doc && doc.taskCenter) {
-    return doc.taskCenter
-  }
-  return null
-}
-
-/**
- * Append body node to documentElement.
- * @param {object} document
- * @param {object} node
- * @param {object} before
- */
-function appendBody (doc, node, before) {
-  var documentElement = doc.documentElement;
-
-  if (documentElement.pureChildren.length > 0 || node.parentNode) {
-    return
-  }
-  var children = documentElement.children;
-  var beforeIndex = children.indexOf(before);
-  if (beforeIndex < 0) {
-    children.push(node);
-  }
-  else {
-    children.splice(beforeIndex, 0, node);
-  }
-
-  if (node.nodeType === 1) {
-    if (node.role === 'body') {
-      node.docId = doc.id;
-      node.ownerDocument = doc;
-      node.parentNode = documentElement;
-      linkParent(node, documentElement);
-    }
-    else {
-      node.children.forEach(function (child) {
-        child.parentNode = node;
-      });
-      setBody(doc, node);
-      node.docId = doc.id;
-      node.ownerDocument = doc;
-      linkParent(node, documentElement);
-      delete doc.nodeMap[node.nodeId];
-    }
-    documentElement.pureChildren.push(node);
-    sendBody(doc, node);
-  }
-  else {
-    node.parentNode = documentElement;
-    doc.nodeMap[node.ref] = node;
-  }
-}
-
-function sendBody (doc, node) {
-  var body = node.toJSON();
-  if (doc && doc.taskCenter && typeof doc.taskCenter.send === 'function') {
-    doc.taskCenter.send('dom', { action: 'createBody' }, [body]);
-  }
-}
-
-/**
- * Set up body node.
- * @param {object} document
- * @param {object} element
- */
-function setBody (doc, el) {
-  el.role = 'body';
-  el.depth = 1;
-  delete doc.nodeMap[el.nodeId];
-  el.ref = '_root';
-  doc.nodeMap._root = el;
-  doc.body = el;
-}
-
-/**
- * Establish the connection between parent and child node.
- * @param {object} child node
- * @param {object} parent node
- */
-function linkParent (node, parent) {
-  node.parentNode = parent;
-  if (parent.docId) {
-    node.docId = parent.docId;
-    node.ownerDocument = parent.ownerDocument;
-    node.ownerDocument.nodeMap[node.nodeId] = node;
-    node.depth = parent.depth + 1;
-  }
-  node.children.forEach(function (child) {
-    linkParent(child, node);
-  });
-}
-
-/**
- * Get the next sibling element.
- * @param {object} node
- */
-function nextElement (node) {
-  while (node) {
-    if (node.nodeType === 1) {
-      return node
-    }
-    node = node.nextSibling;
-  }
-}
-
-/**
- * Get the previous sibling element.
- * @param {object} node
- */
-function previousElement (node) {
-  while (node) {
-    if (node.nodeType === 1) {
-      return node
-    }
-    node = node.previousSibling;
-  }
-}
-
-/**
- * Insert a node into list at the specified index.
- * @param {object} target node
- * @param {array} list
- * @param {number} newIndex
- * @param {boolean} changeSibling
- * @return {number} newIndex
- */
-function insertIndex (target, list, newIndex, changeSibling) {
-  /* istanbul ignore next */
-  if (newIndex < 0) {
-    newIndex = 0;
-  }
-  var before = list[newIndex - 1];
-  var after = list[newIndex];
-  list.splice(newIndex, 0, target);
-  if (changeSibling) {
-    before && (before.nextSibling = target);
-    target.previousSibling = before;
-    target.nextSibling = after;
-    after && (after.previousSibling = target);
-  }
-  return newIndex
-}
-
-/**
- * Move the node to a new index in list.
- * @param {object} target node
- * @param {array} list
- * @param {number} newIndex
- * @param {boolean} changeSibling
- * @return {number} newIndex
- */
-function moveIndex (target, list, newIndex, changeSibling) {
-  var index = list.indexOf(target);
-  /* istanbul ignore next */
-  if (index < 0) {
-    return -1
-  }
-  if (changeSibling) {
-    var before = list[index - 1];
-    var after = list[index + 1];
-    before && (before.nextSibling = after);
-    after && (after.previousSibling = before);
-  }
-  list.splice(index, 1);
-  var newIndexAfter = newIndex;
-  if (index <= newIndex) {
-    newIndexAfter = newIndex - 1;
-  }
-  var beforeNew = list[newIndexAfter - 1];
-  var afterNew = list[newIndexAfter];
-  list.splice(newIndexAfter, 0, target);
-  if (changeSibling) {
-    beforeNew && (beforeNew.nextSibling = target);
-    target.previousSibling = beforeNew;
-    target.nextSibling = afterNew;
-    afterNew && (afterNew.previousSibling = target);
-  }
-  if (index === newIndexAfter) {
-    return -1
-  }
-  return newIndex
-}
-
-/**
- * Remove the node from list.
- * @param {object} target node
- * @param {array} list
- * @param {boolean} changeSibling
- */
-function removeIndex (target, list, changeSibling) {
-  var index = list.indexOf(target);
-  /* istanbul ignore next */
-  if (index < 0) {
-    return
-  }
-  if (changeSibling) {
-    var before = list[index - 1];
-    var after = list[index + 1];
-    before && (before.nextSibling = after);
-    after && (after.previousSibling = before);
-  }
-  list.splice(index, 1);
-}
-
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-var Node = function Node () {
-  this.nodeId = uniqueId();
-  this.ref = this.nodeId;
-  this.children = [];
-  this.pureChildren = [];
-  this.parentNode = null;
-  this.nextSibling = null;
-  this.previousSibling = null;
-};
-
-/**
-* Destroy current node, and remove itself form nodeMap.
-*/
-Node.prototype.destroy = function destroy () {
-  var doc = getDoc(this.docId);
-  if (doc) {
-    delete this.docId;
-    delete doc.nodeMap[this.nodeId];
-  }
-  this.children.forEach(function (child) {
-    child.destroy();
-  });
-};
-
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-var Element$2;
-
-function setElement (El) {
-  Element$2 = El;
-}
-
-/**
- * A map which stores all type of elements.
- * @type {Object}
- */
-var registeredElements = {};
-
-/**
- * Register an extended element type with component methods.
- * @param  {string} type    component type
- * @param  {array}  methods a list of method names
- */
-function registerElement (type, methods) {
-  // Skip when no special component methods.
-  if (!methods || !methods.length) {
-    return
-  }
-
-  // Init constructor.
-  var WeexElement = (function (Element) {
-    function WeexElement () {
-      Element.apply(this, arguments);
-    }if ( Element ) WeexElement.__proto__ = Element;
-    WeexElement.prototype = Object.create( Element && Element.prototype );
-    WeexElement.prototype.constructor = WeexElement;
-
-
-
-    return WeexElement;
-  }(Element$2));
-
-  // Add methods to prototype.
-  methods.forEach(function (methodName) {
-    WeexElement.prototype[methodName] = function () {
-      var args = [], len = arguments.length;
-      while ( len-- ) args[ len ] = arguments[ len ];
-
-      var taskCenter = getTaskCenter(this.docId);
-      if (taskCenter) {
-        return taskCenter.send('component', {
-          ref: this.ref,
-          component: type,
-          method: methodName
-        }, args)
-      }
-    };
-  });
-
-  // Add to element type map.
-  registeredElements[type] = WeexElement;
-}
-
-
-
-function getWeexElement (type) {
-  return registeredElements[type]
-}
-
-
-
-/**
- * Clear all element types. Only for testing.
- */
-
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-var DEFAULT_TAG_NAME = 'div';
-var BUBBLE_EVENTS = [
-  'click', 'longpress', 'touchstart', 'touchmove', 'touchend',
-  'panstart', 'panmove', 'panend', 'horizontalpan', 'verticalpan', 'swipe'
-];
-
-function registerNode (docId, node) {
-  var doc = getDoc(docId);
-  doc.nodeMap[node.nodeId] = node;
-}
-
-var Element = (function (Node$$1) {
-  function Element (type, props, isExtended) {
-    if ( type === void 0 ) type = DEFAULT_TAG_NAME;
-
-    Node$$1.call(this);
-
-    var WeexElement = getWeexElement(type);
-    if (WeexElement && !isExtended) {
-      return new WeexElement(type, props, true)
-    }
-
-    props = props || {};
-    this.nodeType = 1;
-    this.nodeId = uniqueId();
-    this.ref = this.nodeId;
-    this.type = type;
-    this.attr = props.attr || {};
-    this.style = props.style || {};
-    this.classStyle = props.classStyle || {};
-    this.event = {};
-    this.children = [];
-    this.pureChildren = [];
-  }
-
-  if ( Node$$1 ) Element.__proto__ = Node$$1;
-  Element.prototype = Object.create( Node$$1 && Node$$1.prototype );
-  Element.prototype.constructor = Element;
-
-  /**
-   * Append a child node.
-   * @param {object} node
-   * @return {undefined | number} the signal sent by native
-   */
-  Element.prototype.appendChild = function appendChild (node) {
-    if (node.parentNode && node.parentNode !== this) {
-      return
-    }
-    /* istanbul ignore else */
-    if (!node.parentNode) {
-      linkParent(node, this);
-      insertIndex(node, this.children, this.children.length, true);
-      if (this.docId) {
-        registerNode(this.docId, node);
-      }
-      if (node.nodeType === 1) {
-        insertIndex(node, this.pureChildren, this.pureChildren.length);
-        var taskCenter = getTaskCenter(this.docId);
-        if (taskCenter) {
-          return taskCenter.send(
-            'dom',
-            { action: 'addElement' },
-            [this.ref, node.toJSON(), -1]
-          )
-        }
-      }
-    }
-    else {
-      moveIndex(node, this.children, this.children.length, true);
-      if (node.nodeType === 1) {
-        var index = moveIndex(node, this.pureChildren, 
this.pureChildren.length);
-        var taskCenter$1 = getTaskCenter(this.docId);
-        if (taskCenter$1 && index >= 0) {
-          return taskCenter$1.send(
-            'dom',
-            { action: 'moveElement' },
-            [node.ref, this.ref, index]
-          )
-        }
-      }
-    }
-  };
-
-  /**
-   * Insert a node before specified node.
-   * @param {object} node
-   * @param {object} before
-   * @return {undefined | number} the signal sent by native
-   */
-  Element.prototype.insertBefore = function insertBefore (node, before) {
-    if (node.parentNode && node.parentNode !== this) {
-      return
-    }
-    if (node === before || (node.nextSibling && node.nextSibling === before)) {
-      return
-    }
-    if (!node.parentNode) {
-      linkParent(node, this);
-      insertIndex(node, this.children, this.children.indexOf(before), true);
-      if (this.docId) {
-        registerNode(this.docId, node);
-      }
-      if (node.nodeType === 1) {
-        var pureBefore = nextElement(before);
-        var index = insertIndex(
-          node,
-          this.pureChildren,
-          pureBefore
-            ? this.pureChildren.indexOf(pureBefore)
-            : this.pureChildren.length
-        );
-        var taskCenter = getTaskCenter(this.docId);
-        if (taskCenter) {
-          return taskCenter.send(
-            'dom',
-            { action: 'addElement' },
-            [this.ref, node.toJSON(), index]
-          )
-        }
-      }
-    }
-    else {
-      moveIndex(node, this.children, this.children.indexOf(before), true);
-      if (node.nodeType === 1) {
-        var pureBefore$1 = nextElement(before);
-        /* istanbul ignore next */
-        var index$1 = moveIndex(
-          node,
-          this.pureChildren,
-          pureBefore$1
-            ? this.pureChildren.indexOf(pureBefore$1)
-            : this.pureChildren.length
-        );
-        var taskCenter$1 = getTaskCenter(this.docId);
-        if (taskCenter$1 && index$1 >= 0) {
-          return taskCenter$1.send(
-            'dom',
-            { action: 'moveElement' },
-            [node.ref, this.ref, index$1]
-          )
-        }
-      }
-    }
-  };
-
-  /**
-   * Insert a node after specified node.
-   * @param {object} node
-   * @param {object} after
-   * @return {undefined | number} the signal sent by native
-   */
-  Element.prototype.insertAfter = function insertAfter (node, after) {
-    if (node.parentNode && node.parentNode !== this) {
-      return
-    }
-    if (node === after || (node.previousSibling && node.previousSibling === 
after)) {
-      return
-    }
-    if (!node.parentNode) {
-      linkParent(node, this);
-      insertIndex(node, this.children, this.children.indexOf(after) + 1, true);
-      /* istanbul ignore else */
-      if (this.docId) {
-        registerNode(this.docId, node);
-      }
-      if (node.nodeType === 1) {
-        var index = insertIndex(
-          node,
-          this.pureChildren,
-          this.pureChildren.indexOf(previousElement(after)) + 1
-        );
-        var taskCenter = getTaskCenter(this.docId);
-        /* istanbul ignore else */
-        if (taskCenter) {
-          return taskCenter.send(
-            'dom',
-            { action: 'addElement' },
-            [this.ref, node.toJSON(), index]
-          )
-        }
-      }
-    }
-    else {
-      moveIndex(node, this.children, this.children.indexOf(after) + 1, true);
-      if (node.nodeType === 1) {
-        var index$1 = moveIndex(
-          node,
-          this.pureChildren,
-          this.pureChildren.indexOf(previousElement(after)) + 1
-        );
-        var taskCenter$1 = getTaskCenter(this.docId);
-        if (taskCenter$1 && index$1 >= 0) {
-          return taskCenter$1.send(
-            'dom',
-            { action: 'moveElement' },
-            [node.ref, this.ref, index$1]
-          )
-        }
-      }
-    }
-  };
-
-  /**
-   * Remove a child node, and decide whether it should be destroyed.
-   * @param {object} node
-   * @param {boolean} preserved
-   */
-  Element.prototype.removeChild = function removeChild (node, preserved) {
-    if (node.parentNode) {
-      removeIndex(node, this.children, true);
-      if (node.nodeType === 1) {
-        removeIndex(node, this.pureChildren);
-        var taskCenter = getTaskCenter(this.docId);
-        if (taskCenter) {
-          taskCenter.send(
-            'dom',
-            { action: 'removeElement' },
-            [node.ref]
-          );
-        }
-      }
-    }
-    if (!preserved) {
-      node.destroy();
-    }
-  };
-
-  /**
-   * Clear all child nodes.
-   */
-  Element.prototype.clear = function clear () {
-    var taskCenter = getTaskCenter(this.docId);
-    /* istanbul ignore else */
-    if (taskCenter) {
-      this.pureChildren.forEach(function (node) {
-        taskCenter.send(
-          'dom',
-          { action: 'removeElement' },
-          [node.ref]
-        );
-      });
-    }
-    this.children.forEach(function (node) {
-      node.destroy();
-    });
-    this.children.length = 0;
-    this.pureChildren.length = 0;
-  };
-
-  /**
-   * Set an attribute, and decide whether the task should be send to native.
-   * @param {string} key
-   * @param {string | number} value
-   * @param {boolean} silent
-   */
-  Element.prototype.setAttr = function setAttr (key, value, silent) {
-    if (this.attr[key] === value && silent !== false) {
-      return
-    }
-    this.attr[key] = value;
-    var taskCenter = getTaskCenter(this.docId);
-    if (!silent && taskCenter) {
-      var result = {};
-      result[key] = value;
-      taskCenter.send(
-        'dom',
-        { action: 'updateAttrs' },
-        [this.ref, result]
-      );
-    }
-  };
-
-  /**
-   * Set batched attributes.
-   * @param {object} batchedAttrs
-   * @param {boolean} silent
-   */
-  Element.prototype.setAttrs = function setAttrs (batchedAttrs, silent) {
-    var this$1 = this;
-
-    if (isEmpty(batchedAttrs)) { return }
-    var mutations = {};
-    for (var key in batchedAttrs) {
-      if (this$1.attr[key] !== batchedAttrs[key]) {
-        this$1.attr[key] = batchedAttrs[key];
-        mutations[key] = batchedAttrs[key];
-      }
-    }
-    if (!isEmpty(mutations)) {
-      var taskCenter = getTaskCenter(this.docId);
-      if (!silent && taskCenter) {
-        taskCenter.send(
-          'dom',
-          { action: 'updateAttrs' },
-          [this.ref, mutations]
-        );
-      }
-    }
-  };
-
-  /**
-   * Set a style property, and decide whether the task should be send to 
native.
-   * @param {string} key
-   * @param {string | number} value
-   * @param {boolean} silent
-   */
-  Element.prototype.setStyle = function setStyle (key, value, silent) {
-    if (this.style[key] === value && silent !== false) {
-      return
-    }
-    this.style[key] = value;
-    var taskCenter = getTaskCenter(this.docId);
-    if (!silent && taskCenter) {
-      var result = {};
-      result[key] = value;
-      taskCenter.send(
-        'dom',
-        { action: 'updateStyle' },
-        [this.ref, result]
-      );
-    }
-  };
-
-  /**
-   * Set batched style properties.
-   * @param {object} batchedStyles
-   * @param {boolean} silent
-   */
-  Element.prototype.setStyles = function setStyles (batchedStyles, silent) {
-    var this$1 = this;
-
-    if (isEmpty(batchedStyles)) { return }
-    var mutations = {};
-    for (var key in batchedStyles) {
-      if (this$1.style[key] !== batchedStyles[key]) {
-        this$1.style[key] = batchedStyles[key];
-        mutations[key] = batchedStyles[key];
-      }
-    }
-    if (!isEmpty(mutations)) {
-      var taskCenter = getTaskCenter(this.docId);
-      if (!silent && taskCenter) {
-        taskCenter.send(
-          'dom',
-          { action: 'updateStyle' },
-          [this.ref, mutations]
-        );
-      }
-    }
-  };
-
-  /**
-   * Set style properties from class.
-   * @param {object} classStyle
-   */
-  Element.prototype.setClassStyle = function setClassStyle (classStyle) {
-    var this$1 = this;
-
-    // reset previous class style to empty string
-    for (var key in this$1.classStyle) {
-      this$1.classStyle[key] = '';
-    }
-
-    Object.assign(this.classStyle, classStyle);
-    var taskCenter = getTaskCenter(this.docId);
-    if (taskCenter) {
-      taskCenter.send(
-        'dom',
-        { action: 'updateStyle' },
-        [this.ref, this.toStyle()]
-      );
-    }
-  };
-
-  /**
-   * Add an event handler.
-   * @param {string} event type
-   * @param {function} event handler
-   */
-  Element.prototype.addEvent = function addEvent (type, han

<TRUNCATED>

Reply via email to