text: function _defineProperty(obj, key, value) {
      if (key in obj) {
          Object.defineProperty(obj, key, {
              value: value,
              enumerable: true,
              configurable: true,
              writable: true
          });
      } else {
          obj[key] = value;
      }
      return obj;
  }
  function _objectSpread(target) {
      for(var i = 1; i < arguments.length; i++){
          var source = arguments[i] != null ? arguments[i] : {
          };
          var ownKeys = Object.keys(source);
          if (typeof Object.getOwnPropertySymbols === "function") {
              ownKeys = ownKeys.concat(Object.getOwnPropertySymbols(source).filter(function(sym) {
                  return Object.getOwnPropertyDescriptor(source, sym).enumerable;
              }));
          }
          ownKeys.forEach(function(key) {
              _defineProperty(target, key, source[key]);
          });
      }
      return target;
  }
  function _objectWithoutProperties(source, excluded) {
      if (source == null) return {
      };
      var target = _objectWithoutPropertiesLoose(source, excluded);
      var key, i;
      if (Object.getOwnPropertySymbols) {
          var sourceSymbolKeys = Object.getOwnPropertySymbols(source);
          for(i = 0; i < sourceSymbolKeys.length; i++){
              key = sourceSymbolKeys[i];
              if (excluded.indexOf(key) >= 0) continue;
              if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue;
              target[key] = source[key];
          }
      }
      return target;
  }
  function _objectWithoutPropertiesLoose(source, excluded) {
      if (source == null) return {
      };
      var target = {
      };
      var sourceKeys = Object.keys(source);
      var key, i;
      for(i = 0; i < sourceKeys.length; i++){
          key = sourceKeys[i];
          if (excluded.indexOf(key) >= 0) continue;
          target[key] = source[key];
      }
      return target;
  }
  // @target: es2015
  var array;
  var _iteratorNormalCompletion = true, _didIteratorError = false, _iteratorError = undefined;
  try {
      for(var _iterator = array[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true){
          var _ref = _step.value;
          var x = _ref.x, restOf = _objectWithoutProperties(_ref, ["x"]);
          [
              x,
              restOf
          ];
      }
  } catch (err) {
      _didIteratorError = true;
      _iteratorError = err;
  } finally{
      try {
          if (!_iteratorNormalCompletion && _iterator.return != null) {
              _iterator.return();
          }
      } finally{
          if (_didIteratorError) {
              throw _iteratorError;
          }
      }
  }
  var xx = void 0;
  var rrestOff = void 0;
  var _iteratorNormalCompletion1 = true, _didIteratorError1 = false, _iteratorError1 = undefined;
  try {
      for(var _iterator1 = array[Symbol.iterator](), _step1; !(_iteratorNormalCompletion1 = (_step1 = _iterator1.next()).done); _iteratorNormalCompletion1 = true){
          var _ref = _step1.value;
          var xx = _ref.x, rrestOff = _objectWithoutProperties(_ref, [
              "x"
          ]);
          [
              xx,
              rrestOff
          ];
      }
  } catch (err) {
      _didIteratorError1 = true;
      _iteratorError1 = err;
  } finally{
      try {
          if (!_iteratorNormalCompletion1 && _iterator1.return != null) {
              _iterator1.return();
          }
      } finally{
          if (_didIteratorError1) {
              throw _iteratorError1;
          }
      }
  }
  var _iteratorNormalCompletion3 = true, _didIteratorError3 = false, _iteratorError3 = undefined;
  try {
      for(var _iterator4 = array.map(function(a) {
          return _objectSpread({
          }, a, {
              x: 'a string'
          });
      })[Symbol.iterator](), _step3; !(_iteratorNormalCompletion3 = (_step3 = _iterator4.next()).done); _iteratorNormalCompletion3 = true){
          var norest = _step3.value;
          [
              norest.x,
              norest.y
          ];
      // x is now a string. who knows why.
      }
  } catch (err) {
      _didIteratorError3 = true;
      _iteratorError3 = err;
  } finally{
      try {
          if (!_iteratorNormalCompletion3 && _iterator4.return != null) {
              _iterator4.return();
          }
      } finally{
          if (_didIteratorError3) {
              throw _iteratorError3;
          }
      }
  }
  