You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
NewEduCoderBuild/42441.2b68ce27.async.js

877 lines
26 KiB

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

"use strict";
(self["webpackChunk"] = self["webpackChunk"] || []).push([[42441],{
/***/ 97774:
/*!******************************************************************************!*\
!*** ./node_modules/_echarts-for-react@2.0.16@echarts-for-react/lib/core.js ***!
\******************************************************************************/
/***/ (function(__unused_webpack_module, exports, __webpack_require__) {
Object.defineProperty(exports, "__esModule", ({
value: true
}));
exports["default"] = undefined;
var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };
var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
var _react = __webpack_require__(/*! react */ 59301);
var _react2 = _interopRequireDefault(_react);
var _propTypes = __webpack_require__(/*! prop-types */ 12708);
var _propTypes2 = _interopRequireDefault(_propTypes);
var _fastDeepEqual = __webpack_require__(/*! fast-deep-equal */ 53291);
var _fastDeepEqual2 = _interopRequireDefault(_fastDeepEqual);
var _sizeSensor = __webpack_require__(/*! size-sensor */ 47242);
var _utils = __webpack_require__(/*! ./utils */ 65429);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }
var EchartsReactCore = function (_Component) {
_inherits(EchartsReactCore, _Component);
function EchartsReactCore(props) {
_classCallCheck(this, EchartsReactCore);
var _this = _possibleConstructorReturn(this, (EchartsReactCore.__proto__ || Object.getPrototypeOf(EchartsReactCore)).call(this, props));
_this.getEchartsInstance = function () {
return _this.echartsLib.getInstanceByDom(_this.echartsElement) || _this.echartsLib.init(_this.echartsElement, _this.props.theme, _this.props.opts);
};
_this.dispose = function () {
if (_this.echartsElement) {
try {
(0, _sizeSensor.clear)(_this.echartsElement);
} catch (e) {
console.warn(e);
}
// dispose echarts instance
_this.echartsLib.dispose(_this.echartsElement);
}
};
_this.rerender = function () {
var _this$props = _this.props,
onEvents = _this$props.onEvents,
onChartReady = _this$props.onChartReady;
var echartObj = _this.renderEchartDom();
_this.bindEvents(echartObj, onEvents || {});
// on chart ready
if (typeof onChartReady === 'function') _this.props.onChartReady(echartObj);
// on resize
if (_this.echartsElement) {
(0, _sizeSensor.bind)(_this.echartsElement, function () {
try {
echartObj.resize();
} catch (e) {
console.warn(e);
}
});
}
};
_this.bindEvents = function (instance, events) {
var _bindEvent = function _bindEvent(eventName, func) {
// ignore the event config which not satisfy
if (typeof eventName === 'string' && typeof func === 'function') {
// binding event
// instance.off(eventName); // 已经 dispose 在重建,所以无需 off 操作
instance.on(eventName, function (param) {
func(param, instance);
});
}
};
// loop and bind
for (var eventName in events) {
if (Object.prototype.hasOwnProperty.call(events, eventName)) {
_bindEvent(eventName, events[eventName]);
}
}
};
_this.renderEchartDom = function () {
// init the echart object
var echartObj = _this.getEchartsInstance();
// set the echart option
echartObj.setOption(_this.props.option, _this.props.notMerge || false, _this.props.lazyUpdate || false);
// set loading mask
if (_this.props.showLoading) echartObj.showLoading(_this.props.loadingOption || null);else echartObj.hideLoading();
return echartObj;
};
_this.echartsLib = props.echarts; // the echarts object.
_this.echartsElement = null; // echarts div element
return _this;
}
// first add
_createClass(EchartsReactCore, [{
key: 'componentDidMount',
value: function componentDidMount() {
this.rerender();
}
// update
}, {
key: 'componentDidUpdate',
value: function componentDidUpdate(prevProps) {
// 判断是否需要 setOption由开发者自己来确定。默认为 true
if (typeof this.props.shouldSetOption === 'function' && !this.props.shouldSetOption(prevProps, this.props)) {
return;
}
// 以下属性修改的时候,需要 dispose 之后再新建
// 1. 切换 theme 的时候
// 2. 修改 opts 的时候
// 3. 修改 onEvents 的时候,这样可以取消所有之前绑定的事件 issue #151
if (!(0, _fastDeepEqual2['default'])(prevProps.theme, this.props.theme) || !(0, _fastDeepEqual2['default'])(prevProps.opts, this.props.opts) || !(0, _fastDeepEqual2['default'])(prevProps.onEvents, this.props.onEvents)) {
this.dispose();
this.rerender(); // 重建
return;
}
// 当这些属性保持不变的时候,不 setOption
var pickKeys = ['option', 'notMerge', 'lazyUpdate', 'showLoading', 'loadingOption'];
if ((0, _fastDeepEqual2['default'])((0, _utils.pick)(this.props, pickKeys), (0, _utils.pick)(prevProps, pickKeys))) {
return;
}
var echartObj = this.renderEchartDom();
// 样式修改的时候,可能会导致大小变化,所以触发一下 resize
if (!(0, _fastDeepEqual2['default'])(prevProps.style, this.props.style) || !(0, _fastDeepEqual2['default'])(prevProps.className, this.props.className)) {
try {
echartObj.resize();
} catch (e) {
console.warn(e);
}
}
}
// remove
}, {
key: 'componentWillUnmount',
value: function componentWillUnmount() {
this.dispose();
}
// return the echart object
// dispose echarts and clear size-sensor
// bind the events
// render the dom
}, {
key: 'render',
value: function render() {
var _this2 = this;
var _props = this.props,
style = _props.style,
className = _props.className;
var newStyle = _extends({
height: 300
}, style);
// for render
return _react2['default'].createElement('div', {
ref: function ref(e) {
_this2.echartsElement = e;
},
style: newStyle,
className: 'echarts-for-react ' + className
});
}
}]);
return EchartsReactCore;
}(_react.Component);
exports["default"] = EchartsReactCore;
EchartsReactCore.propTypes = {
option: _propTypes2['default'].object.isRequired, // eslint-disable-line react/forbid-prop-types
echarts: _propTypes2['default'].object, // eslint-disable-line react/forbid-prop-types
notMerge: _propTypes2['default'].bool,
lazyUpdate: _propTypes2['default'].bool,
style: _propTypes2['default'].object, // eslint-disable-line react/forbid-prop-types
className: _propTypes2['default'].string,
theme: _propTypes2['default'].oneOfType([_propTypes2['default'].string, _propTypes2['default'].object]),
onChartReady: _propTypes2['default'].func,
showLoading: _propTypes2['default'].bool,
loadingOption: _propTypes2['default'].object, // eslint-disable-line react/forbid-prop-types
onEvents: _propTypes2['default'].object, // eslint-disable-line react/forbid-prop-types
opts: _propTypes2['default'].shape({
devicePixelRatio: _propTypes2['default'].number,
renderer: _propTypes2['default'].oneOf(['canvas', 'svg']),
width: _propTypes2['default'].oneOfType([_propTypes2['default'].number, _propTypes2['default'].oneOf([null, undefined, 'auto'])]),
height: _propTypes2['default'].oneOfType([_propTypes2['default'].number, _propTypes2['default'].oneOf([null, undefined, 'auto'])])
}),
shouldSetOption: _propTypes2['default'].func
};
EchartsReactCore.defaultProps = {
echarts: {},
notMerge: false,
lazyUpdate: false,
style: {},
className: '',
theme: null,
onChartReady: function onChartReady() {},
showLoading: false,
loadingOption: null,
onEvents: {},
opts: {},
shouldSetOption: function shouldSetOption() {
return true;
}
};
/***/ }),
/***/ 42441:
/*!*******************************************************************************!*\
!*** ./node_modules/_echarts-for-react@2.0.16@echarts-for-react/lib/index.js ***!
\*******************************************************************************/
/***/ (function(__unused_webpack_module, exports, __webpack_require__) {
var __webpack_unused_export__;
__webpack_unused_export__ = ({
value: true
});
exports.Z = undefined;
var _echarts = __webpack_require__(/*! echarts */ 76411);
var _echarts2 = _interopRequireDefault(_echarts);
var _core = __webpack_require__(/*! ./core */ 97774);
var _core2 = _interopRequireDefault(_core);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }
// export the Component the echarts Object.
var EchartsReact = function (_EchartsReactCore) {
_inherits(EchartsReact, _EchartsReactCore);
function EchartsReact(props) {
_classCallCheck(this, EchartsReact);
var _this = _possibleConstructorReturn(this, (EchartsReact.__proto__ || Object.getPrototypeOf(EchartsReact)).call(this, props));
_this.echartsLib = _echarts2['default'];
return _this;
}
return EchartsReact;
}(_core2['default']);
exports.Z = EchartsReact;
/***/ }),
/***/ 65429:
/*!*******************************************************************************!*\
!*** ./node_modules/_echarts-for-react@2.0.16@echarts-for-react/lib/utils.js ***!
\*******************************************************************************/
/***/ (function(__unused_webpack_module, exports) {
Object.defineProperty(exports, "__esModule", ({
value: true
}));
/* eslint-disable import/prefer-default-export */
var pick = exports.pick = function pick(obj, keys) {
var r = {};
keys.forEach(function (key) {
r[key] = obj[key];
});
return r;
};
/***/ }),
/***/ 53291:
/*!**********************************************************************!*\
!*** ./node_modules/_fast-deep-equal@2.0.1@fast-deep-equal/index.js ***!
\**********************************************************************/
/***/ (function(module) {
var isArray = Array.isArray;
var keyList = Object.keys;
var hasProp = Object.prototype.hasOwnProperty;
module.exports = function equal(a, b) {
if (a === b) return true;
if (a && b && typeof a == 'object' && typeof b == 'object') {
var arrA = isArray(a)
, arrB = isArray(b)
, i
, length
, key;
if (arrA && arrB) {
length = a.length;
if (length != b.length) return false;
for (i = length; i-- !== 0;)
if (!equal(a[i], b[i])) return false;
return true;
}
if (arrA != arrB) return false;
var dateA = a instanceof Date
, dateB = b instanceof Date;
if (dateA != dateB) return false;
if (dateA && dateB) return a.getTime() == b.getTime();
var regexpA = a instanceof RegExp
, regexpB = b instanceof RegExp;
if (regexpA != regexpB) return false;
if (regexpA && regexpB) return a.toString() == b.toString();
var keys = keyList(a);
length = keys.length;
if (length !== keyList(b).length)
return false;
for (i = length; i-- !== 0;)
if (!hasProp.call(b, keys[i])) return false;
for (i = length; i-- !== 0;) {
key = keys[i];
if (!equal(a[key], b[key])) return false;
}
return true;
}
return a!==a && b!==b;
};
/***/ }),
/***/ 27774:
/*!*********************************************************************!*\
!*** ./node_modules/_size-sensor@1.0.2@size-sensor/lib/constant.js ***!
\*********************************************************************/
/***/ (function(__unused_webpack_module, exports) {
Object.defineProperty(exports, "__esModule", ({
value: true
}));
exports.SizeSensorId = exports.SensorTabIndex = exports.SensorClassName = void 0;
/**
* Created by hustcc on 18/6/9.
* Contract: i@hust.cc
*/
var SizeSensorId = 'size-sensor-id';
exports.SizeSensorId = SizeSensorId;
var SensorClassName = 'size-sensor-object';
exports.SensorClassName = SensorClassName;
var SensorTabIndex = '-1';
exports.SensorTabIndex = SensorTabIndex;
/***/ }),
/***/ 79301:
/*!*********************************************************************!*\
!*** ./node_modules/_size-sensor@1.0.2@size-sensor/lib/debounce.js ***!
\*********************************************************************/
/***/ (function(__unused_webpack_module, exports) {
Object.defineProperty(exports, "__esModule", ({
value: true
}));
exports["default"] = void 0;
/**
* Created by hustcc on 18/6/9.
* Contract: i@hust.cc
*/
var _default = function _default(fn) {
var delay = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 60;
var timer = null;
return function () {
var _this = this;
for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
args[_key] = arguments[_key];
}
clearTimeout(timer);
timer = setTimeout(function () {
fn.apply(_this, args);
}, delay);
};
};
exports["default"] = _default;
/***/ }),
/***/ 79789:
/*!***************************************************************!*\
!*** ./node_modules/_size-sensor@1.0.2@size-sensor/lib/id.js ***!
\***************************************************************/
/***/ (function(__unused_webpack_module, exports) {
Object.defineProperty(exports, "__esModule", ({
value: true
}));
exports["default"] = void 0;
/**
* Created by hustcc on 18/6/9.
* Contract: i@hust.cc
*/
var id = 1;
/**
* generate unique id in application
* @return {string}
*/
var _default = function _default() {
return "".concat(id++);
};
exports["default"] = _default;
/***/ }),
/***/ 47242:
/*!******************************************************************!*\
!*** ./node_modules/_size-sensor@1.0.2@size-sensor/lib/index.js ***!
\******************************************************************/
/***/ (function(__unused_webpack_module, exports, __webpack_require__) {
Object.defineProperty(exports, "__esModule", ({
value: true
}));
exports.ver = exports.clear = exports.bind = void 0;
var _sensorPool = __webpack_require__(/*! ./sensorPool */ 95270);
/**
* Created by hustcc on 18/6/9.[高考时间]
* Contract: i@hust.cc
*/
/**
* bind an element with resize callback function
* @param {*} element
* @param {*} cb
*/
var bind = function bind(element, cb) {
var sensor = (0, _sensorPool.getSensor)(element);
// listen with callback
sensor.bind(cb);
// return unbind function
return function () {
sensor.unbind(cb);
};
};
/**
* clear all the listener and sensor of an element
* @param element
*/
exports.bind = bind;
var clear = function clear(element) {
var sensor = (0, _sensorPool.getSensor)(element);
(0, _sensorPool.removeSensor)(sensor);
};
exports.clear = clear;
var ver = "1.0.2";
exports.ver = ver;
/***/ }),
/***/ 95270:
/*!***********************************************************************!*\
!*** ./node_modules/_size-sensor@1.0.2@size-sensor/lib/sensorPool.js ***!
\***********************************************************************/
/***/ (function(__unused_webpack_module, exports, __webpack_require__) {
Object.defineProperty(exports, "__esModule", ({
value: true
}));
exports.removeSensor = exports.getSensor = exports.Sensors = void 0;
var _id = _interopRequireDefault(__webpack_require__(/*! ./id */ 79789));
var _sensors = __webpack_require__(/*! ./sensors */ 57829);
var _constant = __webpack_require__(/*! ./constant */ 27774);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
/**
* Created by hustcc on 18/6/9.
* Contract: i@hust.cc
*/
/**
* all the sensor objects.
* sensor pool
*/
var Sensors = {};
/**
* When destroy the sensor, remove it from the pool
*/
exports.Sensors = Sensors;
function clean(sensorId) {
// exist, then remove from pool
if (sensorId && Sensors[sensorId]) {
delete Sensors[sensorId];
}
}
/**
* get one sensor
* @param element
* @returns {*}
*/
var getSensor = function getSensor(element) {
var sensorId = element.getAttribute(_constant.SizeSensorId);
// 1. if the sensor exists, then use it
if (sensorId && Sensors[sensorId]) {
return Sensors[sensorId];
}
// 2. not exist, then create one
var newId = (0, _id["default"])();
element.setAttribute(_constant.SizeSensorId, newId);
var sensor = (0, _sensors.createSensor)(element, function () {
return clean(newId);
});
// add sensor into pool
Sensors[newId] = sensor;
return sensor;
};
/**
* 移除 sensor
* @param sensor
*/
exports.getSensor = getSensor;
var removeSensor = function removeSensor(sensor) {
var sensorId = sensor.element.getAttribute(_constant.SizeSensorId);
// remove event, dom of the sensor used
sensor.destroy();
clean(sensorId);
};
exports.removeSensor = removeSensor;
/***/ }),
/***/ 57829:
/*!**************************************************************************!*\
!*** ./node_modules/_size-sensor@1.0.2@size-sensor/lib/sensors/index.js ***!
\**************************************************************************/
/***/ (function(__unused_webpack_module, exports, __webpack_require__) {
Object.defineProperty(exports, "__esModule", ({
value: true
}));
exports.createSensor = void 0;
var _object = __webpack_require__(/*! ./object */ 20953);
var _resizeObserver = __webpack_require__(/*! ./resizeObserver */ 55202);
/**
* Created by hustcc on 18/7/5.
* Contract: i@hust.cc
*/
/**
* sensor strategies
*/
// export const createSensor = createObjectSensor;
var createSensor = typeof ResizeObserver !== 'undefined' ? _resizeObserver.createSensor : _object.createSensor;
exports.createSensor = createSensor;
/***/ }),
/***/ 20953:
/*!***************************************************************************!*\
!*** ./node_modules/_size-sensor@1.0.2@size-sensor/lib/sensors/object.js ***!
\***************************************************************************/
/***/ (function(__unused_webpack_module, exports, __webpack_require__) {
Object.defineProperty(exports, "__esModule", ({
value: true
}));
exports.createSensor = void 0;
var _debounce = _interopRequireDefault(__webpack_require__(/*! ../debounce */ 79301));
var _constant = __webpack_require__(/*! ../constant */ 27774);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
/**
* Created by hustcc on 18/6/9.
* Contract: i@hust.cc
*/
var createSensor = function createSensor(element, whenDestroy) {
var sensor = undefined;
// callback
var listeners = [];
/**
* create object DOM of sensor
* @returns {HTMLObjectElement}
*/
var newSensor = function newSensor() {
// adjust style
if (getComputedStyle(element).position === 'static') {
element.style.position = 'relative';
}
var obj = document.createElement('object');
obj.onload = function () {
obj.contentDocument.defaultView.addEventListener('resize', resizeListener);
// 直接触发一次 resize
resizeListener();
};
obj.style.display = 'block';
obj.style.position = 'absolute';
obj.style.top = '0';
obj.style.left = '0';
obj.style.height = '100%';
obj.style.width = '100%';
obj.style.overflow = 'hidden';
obj.style.pointerEvents = 'none';
obj.style.zIndex = '-1';
obj.style.opacity = '0';
obj.setAttribute('class', _constant.SensorClassName);
obj.setAttribute('tabindex', _constant.SensorTabIndex);
obj.type = 'text/html';
// append into dom
element.appendChild(obj);
// for ie, should set data attribute delay, or will be white screen
obj.data = 'about:blank';
return obj;
};
/**
* trigger listeners
*/
var resizeListener = (0, _debounce["default"])(function () {
// trigger all listener
listeners.forEach(function (listener) {
listener(element);
});
});
/**
* listen with one callback function
* @param cb
*/
var bind = function bind(cb) {
// if not exist sensor, then create one
if (!sensor) {
sensor = newSensor();
}
if (listeners.indexOf(cb) === -1) {
listeners.push(cb);
}
};
/**
* destroy all
*/
var destroy = function destroy() {
if (sensor && sensor.parentNode) {
if (sensor.contentDocument) {
// remote event
sensor.contentDocument.defaultView.removeEventListener('resize', resizeListener);
}
// remove dom
sensor.parentNode.removeChild(sensor);
// initial variable
element.removeAttribute(_constant.SizeSensorId);
sensor = undefined;
listeners = [];
whenDestroy && whenDestroy();
}
};
/**
* cancel listener bind
* @param cb
*/
var unbind = function unbind(cb) {
var idx = listeners.indexOf(cb);
if (idx !== -1) {
listeners.splice(idx, 1);
}
// no listener, and sensor is exist
// then destroy the sensor
if (listeners.length === 0 && sensor) {
destroy();
}
};
return {
element: element,
bind: bind,
destroy: destroy,
unbind: unbind
};
};
exports.createSensor = createSensor;
/***/ }),
/***/ 55202:
/*!***********************************************************************************!*\
!*** ./node_modules/_size-sensor@1.0.2@size-sensor/lib/sensors/resizeObserver.js ***!
\***********************************************************************************/
/***/ (function(__unused_webpack_module, exports, __webpack_require__) {
Object.defineProperty(exports, "__esModule", ({
value: true
}));
exports.createSensor = void 0;
var _constant = __webpack_require__(/*! ../constant */ 27774);
var _debounce = _interopRequireDefault(__webpack_require__(/*! ../debounce */ 79301));
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
/**
* Created by hustcc on 18/7/5.
* Contract: i@hust.cc
*/
var createSensor = function createSensor(element, whenDestroy) {
var sensor = undefined;
// callback
var listeners = [];
/**
* trigger listeners
*/
var resizeListener = (0, _debounce["default"])(function () {
// trigger all
listeners.forEach(function (listener) {
listener(element);
});
});
/**
* create ResizeObserver sensor
* @returns
*/
var newSensor = function newSensor() {
var s = new ResizeObserver(resizeListener);
// listen element
s.observe(element);
// trigger once
resizeListener();
return s;
};
/**
* listen with callback
* @param cb
*/
var bind = function bind(cb) {
if (!sensor) {
sensor = newSensor();
}
if (listeners.indexOf(cb) === -1) {
listeners.push(cb);
}
};
/**
* destroy
*/
var destroy = function destroy() {
sensor.disconnect();
listeners = [];
sensor = undefined;
element.removeAttribute(_constant.SizeSensorId);
whenDestroy && whenDestroy();
};
/**
* cancel bind
* @param cb
*/
var unbind = function unbind(cb) {
var idx = listeners.indexOf(cb);
if (idx !== -1) {
listeners.splice(idx, 1);
}
// no listener, and sensor is exist
// then destroy the sensor
if (listeners.length === 0 && sensor) {
destroy();
}
};
return {
element: element,
bind: bind,
destroy: destroy,
unbind: unbind
};
};
exports.createSensor = createSensor;
/***/ })
}]);