diff --git a/README b/README new file mode 100644 index 0000000..7da271d --- /dev/null +++ b/README @@ -0,0 +1,57 @@ +app module + hashrate + distribution + report_block + confirm_block + clear + balance + +############# start common ############# +pm2 start app.js --name nexa-hashratev2 -- hashrate nexa +pm2 start app.js --name nexa-reportv2 -- report nexa +pm2 start app.js --name nexa-confirm -- confirm nexa +pm2 start app.js --name nexa-distributionv2 -- distribution nexa +pm2 start app.js --name email -- notice nexa +pm2 start app.js --name nexa-balance -- balance nexa + +pm2 start app.js --name grs-hashratev2 -- hashrate grs +pm2 start app.js --name grs-reportv2 -- report grs +pm2 start app.js --name grs-confirm -- confirm grs +pm2 start app.js --name grs-distributionv2 -- distribution grs +pm2 start app.js --name grs-balance -- balance grs + +pm2 start app.js --name mona-hashratev2 -- hashrate mona +pm2 start app.js --name mona-reportv2 -- report mona +pm2 start app.js --name mona-confirm -- confirm mona +pm2 start app.js --name mona-distributionv2 -- distribution mona +pm2 start app.js --name mona-balance -- balance mona + +pm2 start app.js --name dgbs-hashratev2 -- hashrate dgbs +pm2 start app.js --name dgbs-reportv2 -- report dgbs +pm2 start app.js --name dgbs-confirm -- confirm dgbs +pm2 start app.js --name dgbs-distributionv2 -- distribution dgbs +# pm2 start app.js --name dgbs-balance -- balance dgbs + +pm2 start app.js --name dgbq-hashratev2 -- hashrate dgbq +pm2 start app.js --name dgbq-reportv2 -- report dgbq +pm2 start app.js --name dgbq-confirm -- confirm dgbq +pm2 start app.js --name dgbq-distributionv2 -- distribution dgbq +# pm2 start app.js --name dgbq-balance -- balance dgbq + +pm2 start app.js --name dgbo-hashratev2 -- hashrate dgbo +pm2 start app.js --name dgbo-reportv2 -- report dgbo +pm2 start app.js --name dgbo-confirm -- confirm dgbo +pm2 start app.js --name dgbo-distributionv2 -- distribution dgbo +pm2 start app.js --name dgb-balance -- balance dgbo + +pm2 start app.js --name rxd-hashratev2 -- hashrate rxd +pm2 start app.js --name rxd-reportv2 -- report rxd +pm2 start app.js --name rxd-confirm -- confirm rxd +pm2 start app.js --name rxd-distributionv2 -- distribution rxd +pm2 start app.js --name rxd-balance -- balance rxd + +pm2 start app.js --name enx-hashrate -- hashrate enx +pm2 start app.js --name enx-report -- report enx + +pm2 start app.js --name alph-report -- report alph +pm2 start app.js --name alph-hashrate -- hashrate alph \ No newline at end of file diff --git a/app.js b/app.js new file mode 100644 index 0000000..6b242b0 --- /dev/null +++ b/app.js @@ -0,0 +1,189 @@ +const schedule = require("node-schedule"); +// const executeWithRetry = require("./public/retry") +const Times = require("./public/times"); +const HashRate = require("./src/hashrate"); +const {Report, ReportEnx} = require("./src/report"); +const Confirm = require("./src/confirm"); +const Distribution = require("./src/distribution"); +const { Balance, DGBBlance } = require("./src/blanace"); +const Stats = require("./src/stat"); +const ClearDBData = require("./src/clear") +const Notice = require("./src/notice"); + +const method = process.argv[2]; +const methods = ["hashrate", "report", "clear", "distribution", "confirm", "balance", "stats", "notice"]; + +if (!methods.includes(method)) { + throw `暂不支持${method}方法`; +} + +const coin = process.argv[3]; +const coins = ["nexa", "mona", "grs", "dgbq", "dgbs", "dgbo", "rxd", "enx", "alph"]; +if (!coins.includes(coin)) { + throw `暂不支持${coin}`; +} + +if (method === "hashrate") { + const hashrate = new HashRate(coin); + schedule.scheduleJob({ minute: [0, 5, 10, 15, 20, 25, 30, 35, 40, 45, 50, 55], second: [30] }, async () => { + const ymd_now = Times.utcTime(Date.now().valueOf()); + const ymd = ymd_now.split(":"); + const end_time = ymd[0] + ":" + ymd[1] + ":" + "00"; + await hashrate.insert_hashrate_miners_table(end_time); + const currentMinute = new Date().getMinutes(); + + const data = await hashrate.query_hashrate_miners_accepts(end_time); + if (currentMinute === 0 || currentMinute === 30) { + await hashrate.insert_mhs(data); + await hashrate.insert_mhs_real(data); + } else { + await hashrate.insert_mhs_real(data); + } + }); +} + +if (method === "report") { + let report + if(coin === "enx"){ + report = new ReportEnx(coin); + } else { + report = new Report(coin); + } + let interval = 60000; + if (coin === "rxd") { + interval = 300000; + } else if (coin === "nexa") { + interval = 120000; + } + setInterval(() => { + report.main(); + }, interval); +} + +// if (method === "confirm") { +// // schedule.scheduleJob({hour:[1], minute:[30], second:[0]}, async () =>{ +// // confirm.main(); +// // }) +// let interval = 600000; +// if (coin === "rxd") { +// interval = 1800000; +// } +// const confirm = new Confirm(coin); +// setInterval(() => { +// confirm.main(); +// }, interval); +// } + + +if (method === "confirm") { + const confirm = new Confirm(coin); + schedule.scheduleJob({hour:[1], minute:[30], second:[0]}, async () =>{ + confirm.main(); + }) +} + + +if (method === "distribution") { + const distribution = new Distribution(coin); + schedule.scheduleJob({ hour: [0], minute: [1], second: [0] }, async () => { + const now_ts = Date.now().valueOf(); + const last_ts = now_ts - 1000 * 60 * 60 * 24; + const ymd_now = Times.utcTime(now_ts); + const ymd_last = Times.utcTime(last_ts); + const end_time = ymd_now.split(" ")[0] + " 00:00:00"; + const start_time = ymd_last.split(" ")[0] + " 00:00:00"; + await distribution.main(start_time, end_time); + }); +} + +// if (method === "balance") { +// const special_coins = ["dgbo", "dgbs", "dgbq"]; +// let balance; +// if (special_coins.includes(coin)) { +// balance = new DGBBlance(coin); +// } else { +// balance = new Balance(coin); +// } +// balance +// .main() +// .then(() => { +// console.log("ok"); +// }) +// .catch((err) => { +// console.log(err); +// }) +// .finally(() => { +// process.exit(0); +// }); +// } + + +if (method === "balance") { + const special_coins = ["dgbo", "dgbs", "dgbq"]; + let balance; + if (special_coins.includes(coin)) { + balance = new DGBBlance(coin); + } else { + balance = new Balance(coin); + } + + let hour = 4 + if(coin === "rxd"){ + hour = 9 + } + + async function task(balance) { + let count = 0; // 让 count 成为 task 内部变量,避免多个 schedule 共享 count + const last_height = await balance.node.getblockcount() + while (count < 36) { // 最多执行 36 次 (6小时) + const enable = await balance.query_now_height(last_height); + if (enable) { + await balance.main(); + console.log(`${coin}转账已完成`); + return; // 成功执行后退出循环 + } + console.log(`等待中... (已等待 ${count * 10} 分钟)`); + await balance.sleep(1000 * 60 * 10); // 休眠 10 分钟 + count++; + } + console.log("等待超时,任务结束!"); + } + schedule.scheduleJob({hour: [hour], minute: [10], second: [0]}, async () => { + await task(balance); + }); +} + + +if (method === "stats") { + const stats = new Stats(coin); + stats.caculate_user_should_distribution("2024-11-28 00:00:00"); +} + +if (method === "clear") { + const clear = new ClearDBData(coin); + clear + .clearSharesDB(72) + .then((res) => { + console.log("sharesdb:ok"); + }) + .then(() => { + clear.clearHashrateDB(); + }) + .then(() => { + console.log("hashratedb:ok"); + }) + .catch((err) => { + console.log(err); + }) + .finally(() => { + process.exit(0); + }); + // clear.clearPoolDB("2024-10-11 00:00:00", "2024-12-23 00:00:00") +} + +if (method === "notice") { + const notice = new Notice(coin); + schedule.scheduleJob({hour:[9], minute:[30], second:[0]}, () =>{ + notice.main() + }) +} diff --git a/config/alph.conf b/config/alph.conf new file mode 100644 index 0000000..f6677bb --- /dev/null +++ b/config/alph.conf @@ -0,0 +1,129 @@ +{ + "master":{ + "pooldb":{ + "host": "127.0.0.1", + "user": "m2pool", + "password": "pMJzgwrg@Frt8aDXkQAsTGhG!zy!H8Jd", + "database": "alphpooldb", + "port":3306, + "waitForConnections": true, + "connectionLimit": 20, + "queueLimit": 0 + }, + "sharesdb":{ + "host": "127.0.0.1", + "user": "m2pool", + "password": "pMJzgwrg@Frt8aDXkQAsTGhG!zy!H8Jd", + "database": "alphsharesdb", + "port":3306, + "waitForConnections": true, + "connectionLimit": 20, + "queueLimit": 0 + }, + "distribution":{ + "host": "13.213.4.56", + "user": "pool190", + "password": "pMJzgwrg@Frt8aDXkQAsTGhG!zy!H8Jd", + "database": "distribution", + "port":6789, + "waitForConnections": true, + "connectionLimit": 20, + "queueLimit": 0 + }, + "hashrate":{ + "host": "13.213.4.56", + "user": "pool190", + "password": "pMJzgwrg@Frt8aDXkQAsTGhG!zy!H8Jd", + "database": "hashrate", + "port":6789, + "waitForConnections": true, + "connectionLimit": 20, + "queueLimit": 0 + }, + "users_addresses":{ + "host": "13.214.175.13", + "user": "root", + "password": "m2Pool2024@!", + "database": "pool", + "port":3123, + "waitForConnections": true, + "connectionLimit": 20, + "queueLimit": 0 + }, + "balance":{ + "host": "18.143.153.132", + "user": "app_user", + "password": "8xdZ3~FR$c1mqcxwmLs", + "database": "mydb", + "port":3306, + "waitForConnections": true, + "connectionLimit": 20, + "queueLimit": 0 + } + }, + "slave":{ + "pooldb_slave":{ + "host": "13.213.4.56", + "user": "pool190", + "password": "pMJzgwrg@Frt8aDXkQAsTGhG!zy!H8Jd", + "database": "distribution", + "port":6789, + "waitForConnections": true, + "connectionLimit": 20, + "queueLimit": 0 + }, + "sharesdb_slave":{ + "host": "13.214.176.64", + "user": "m2pool", + "password": "pMJzgwrg@Frt8aDXkQAsTGhG!zy!H8Jd", + "database": "dgbosharesdb", + "port":3306, + "waitForConnections": true, + "connectionLimit": 20, + "queueLimit": 0 + } + }, + "redis_options":{ + "redis1":{ + "host":"localhost", + "port":6379, + "db":9, + "connectTimeout":10000 + } + }, + "node_options":{ + "node1":{ + "rpcUser":"test", + "rpcPassword":"0x09e220e226f2feb7a971a2b6f958e7d4b1c187c8", + "rpcPort":12973, + "rpcHost":"127.0.0.1" + }, + "node2":{ + "rpcUser":"test", + "rpcPassword":"0x09e220e226f2feb7a971a2b6f958e7d4b1c187c8", + "rpcPort":12973, + "rpcHost":"127.0.0.1" + } + }, + "retry_options":{ + "node":{ + "max_retries":10, + "retry_delay":10000 + } + }, + "REPORT_ADDRESS":"1CYKPymfTVex9KZ2i48S3v5cAE7xT6hERG1P6GJiHgWJu", + "MAX_MATURE":500, + "distribution_conf":{ + "PPLNS_SIZE":20000, + "MODEL_PERCENT":{ + "SCORE":0, + "PPLNS":0.7, + "PROPDIF":0.3 + }, + "SCORE_PERCENT":{ + "HASHRATE":1, + "STDDEVS":0 + }, + "POOL_FEE":0.025 + } +} \ No newline at end of file diff --git a/config/dgbo.conf b/config/dgbo.conf new file mode 100644 index 0000000..4a8349b --- /dev/null +++ b/config/dgbo.conf @@ -0,0 +1,128 @@ +{ + "master":{ + "pooldb":{ + "host": "127.0.0.1", + "user": "m2pool", + "password": "pMJzgwrg@Frt8aDXkQAsTGhG!zy!H8Jd", + "database": "dgbopooldb", + "port":3306, + "waitForConnections": true, + "connectionLimit": 20, + "queueLimit": 0 + }, + "sharesdb":{ + "host": "127.0.0.1", + "user": "m2pool", + "password": "pMJzgwrg@Frt8aDXkQAsTGhG!zy!H8Jd", + "database": "dgbosharesdb", + "port":3306, + "waitForConnections": true, + "connectionLimit": 20, + "queueLimit": 0 + }, + "distribution":{ + "host": "13.213.4.56", + "user": "pool190", + "password": "pMJzgwrg@Frt8aDXkQAsTGhG!zy!H8Jd", + "database": "distribution", + "port":6789, + "waitForConnections": true, + "connectionLimit": 20, + "queueLimit": 0 + }, + "hashrate":{ + "host": "13.213.4.56", + "user": "pool190", + "password": "pMJzgwrg@Frt8aDXkQAsTGhG!zy!H8Jd", + "database": "hashrate", + "port":6789, + "waitForConnections": true, + "connectionLimit": 20, + "queueLimit": 0 + }, + "users_addresses":{ + "host": "13.214.175.13", + "user": "root", + "password": "m2Pool2024@!", + "database": "pool", + "port":3123, + "waitForConnections": true, + "connectionLimit": 20, + "queueLimit": 0 + }, + "balance":{ + "host": "18.143.153.132", + "user": "app_user", + "password": "8xdZ3~FR$c1mqcxwmLs", + "database": "mydb", + "port":3306, + "waitForConnections": true, + "connectionLimit": 20, + "queueLimit": 0 + } + }, + "slave":{ + "pooldb_slave":{ + "host": "13.214.176.64", + "user": "m2pool", + "password": "pMJzgwrg@Frt8aDXkQAsTGhG!zy!H8Jd", + "database": "dgbopooldb", + "port":3306, + "waitForConnections": true, + "connectionLimit": 20, + "queueLimit": 0 + }, + "sharesdb_slave":{ + "host": "13.214.176.64", + "user": "m2pool", + "password": "pMJzgwrg@Frt8aDXkQAsTGhG!zy!H8Jd", + "database": "dgbosharesdb", + "port":3306, + "waitForConnections": true, + "connectionLimit": 20, + "queueLimit": 0 + } + }, + "redis_options":{ + "redis1":{ + "host":"localhost", + "port":6379, + "connectTimeout":10000 + } + }, + "node_options":{ + "node1":{ + "rpcUser":"test", + "rpcPassword":"test", + "rpcPort":14022, + "rpcHost":"127.0.0.1" + }, + "node2":{ + "rpcUser":"test", + "rpcPassword":"test", + "rpcPort":14022, + "rpcHost":"13.214.176.64" + } + }, + "retry_options":{ + "node":{ + "max_retries":10, + "retry_delay":10000 + } + }, + "REPORT_ADDRESS":"DSdh4rXmRZizpZh7zKGSsyMqHmFE137G96", + "MAX_MATURE":50, + "distribution_conf":{ + "PPLNS_SIZE":20000, + "MODEL_PERCENT":{ + "SCORE":0, + "PPLNS":0.7, + "PROPDIF":0.3 + }, + "SCORE_PERCENT":{ + "HASHRATE":1, + "STDDEVS":0 + }, + "POOL_FEE":0.025 + } +} \ No newline at end of file diff --git a/config/dgbq.conf b/config/dgbq.conf new file mode 100644 index 0000000..e185a2d --- /dev/null +++ b/config/dgbq.conf @@ -0,0 +1,128 @@ +{ + "master":{ + "pooldb":{ + "host": "127.0.0.1", + "user": "m2pool", + "password": "pMJzgwrg@Frt8aDXkQAsTGhG!zy!H8Jd", + "database": "dgbqpooldb", + "port":3306, + "waitForConnections": true, + "connectionLimit": 20, + "queueLimit": 0 + }, + "sharesdb":{ + "host": "127.0.0.1", + "user": "m2pool", + "password": "pMJzgwrg@Frt8aDXkQAsTGhG!zy!H8Jd", + "database": "dgbqsharesdb", + "port":3306, + "waitForConnections": true, + "connectionLimit": 20, + "queueLimit": 0 + }, + "distribution":{ + "host": "13.213.4.56", + "user": "pool190", + "password": "pMJzgwrg@Frt8aDXkQAsTGhG!zy!H8Jd", + "database": "distribution", + "port":6789, + "waitForConnections": true, + "connectionLimit": 20, + "queueLimit": 0 + }, + "hashrate":{ + "host": "13.213.4.56", + "user": "pool190", + "password": "pMJzgwrg@Frt8aDXkQAsTGhG!zy!H8Jd", + "database": "hashrate", + "port":6789, + "waitForConnections": true, + "connectionLimit": 20, + "queueLimit": 0 + }, + "users_addresses":{ + "host": "13.214.175.13", + "user": "root", + "password": "m2Pool2024@!", + "database": "pool", + "port":3123, + "waitForConnections": true, + "connectionLimit": 20, + "queueLimit": 0 + }, + "balance":{ + "host": "18.143.153.132", + "user": "app_user", + "password": "8xdZ3~FR$c1mqcxwmLs", + "database": "mydb", + "port":3306, + "waitForConnections": true, + "connectionLimit": 20, + "queueLimit": 0 + } + }, + "slave":{ + "pooldb_slave":{ + "host": "13.214.176.64", + "user": "m2pool", + "password": "pMJzgwrg@Frt8aDXkQAsTGhG!zy!H8Jd", + "database": "dgbqpooldb", + "port":3306, + "waitForConnections": true, + "connectionLimit": 20, + "queueLimit": 0 + }, + "sharesdb_slave":{ + "host": "13.214.176.64", + "user": "m2pool", + "password": "pMJzgwrg@Frt8aDXkQAsTGhG!zy!H8Jd", + "database": "dgbqsharesdb", + "port":3306, + "waitForConnections": true, + "connectionLimit": 20, + "queueLimit": 0 + } + }, + "redis_options":{ + "redis1":{ + "host":"localhost", + "port":6379, + "connectTimeout":10000 + } + }, + "node_options":{ + "node1":{ + "rpcUser":"test", + "rpcPassword":"test", + "rpcPort":14022, + "rpcHost":"127.0.0.1" + }, + "node2":{ + "rpcUser":"test", + "rpcPassword":"test", + "rpcPort":14022, + "rpcHost":"13.214.176.64" + } + }, + "retry_options":{ + "node":{ + "max_retries":10, + "retry_delay":10000 + } + }, + "REPORT_ADDRESS":"DK8ZTp89aahJpmnwdZ8LNsAUNoGA6qS43G", + "MAX_MATURE":50, + "distribution_conf":{ + "PPLNS_SIZE":20000, + "MODEL_PERCENT":{ + "SCORE":0, + "PPLNS":0.7, + "PROPDIF":0.3 + }, + "SCORE_PERCENT":{ + "HASHRATE":1, + "STDDEVS":0 + }, + "POOL_FEE":0.025 + } +} \ No newline at end of file diff --git a/config/dgbs.conf b/config/dgbs.conf new file mode 100644 index 0000000..2b07057 --- /dev/null +++ b/config/dgbs.conf @@ -0,0 +1,128 @@ +{ + "master":{ + "pooldb":{ + "host": "127.0.0.1", + "user": "m2pool", + "password": "pMJzgwrg@Frt8aDXkQAsTGhG!zy!H8Jd", + "database": "dgbspooldb", + "port":3306, + "waitForConnections": true, + "connectionLimit": 20, + "queueLimit": 0 + }, + "sharesdb":{ + "host": "127.0.0.1", + "user": "m2pool", + "password": "pMJzgwrg@Frt8aDXkQAsTGhG!zy!H8Jd", + "database": "dgbssharesdb", + "port":3306, + "waitForConnections": true, + "connectionLimit": 20, + "queueLimit": 0 + }, + "distribution":{ + "host": "13.213.4.56", + "user": "pool190", + "password": "pMJzgwrg@Frt8aDXkQAsTGhG!zy!H8Jd", + "database": "distribution", + "port":6789, + "waitForConnections": true, + "connectionLimit": 20, + "queueLimit": 0 + }, + "hashrate":{ + "host": "13.213.4.56", + "user": "pool190", + "password": "pMJzgwrg@Frt8aDXkQAsTGhG!zy!H8Jd", + "database": "hashrate", + "port":6789, + "waitForConnections": true, + "connectionLimit": 20, + "queueLimit": 0 + }, + "users_addresses":{ + "host": "13.214.175.13", + "user": "root", + "password": "m2Pool2024@!", + "database": "pool", + "port":3123, + "waitForConnections": true, + "connectionLimit": 20, + "queueLimit": 0 + }, + "balance":{ + "host": "18.143.153.132", + "user": "app_user", + "password": "8xdZ3~FR$c1mqcxwmLs", + "database": "mydb", + "port":3306, + "waitForConnections": true, + "connectionLimit": 20, + "queueLimit": 0 + } + }, + "slave":{ + "pooldb_slave":{ + "host": "13.214.176.64", + "user": "m2pool", + "password": "pMJzgwrg@Frt8aDXkQAsTGhG!zy!H8Jd", + "database": "dgbspooldb", + "port":3306, + "waitForConnections": true, + "connectionLimit": 20, + "queueLimit": 0 + }, + "sharesdb_slave":{ + "host": "13.214.176.64", + "user": "m2pool", + "password": "pMJzgwrg@Frt8aDXkQAsTGhG!zy!H8Jd", + "database": "dgbssharesdb", + "port":3306, + "waitForConnections": true, + "connectionLimit": 20, + "queueLimit": 0 + } + }, + "redis_options":{ + "redis1":{ + "host":"localhost", + "port":6379, + "connectTimeout":10000 + } + }, + "node_options":{ + "node1":{ + "rpcUser":"test", + "rpcPassword":"test", + "rpcPort":14022, + "rpcHost":"127.0.0.1" + }, + "node2":{ + "rpcUser":"test", + "rpcPassword":"test", + "rpcPort":14022, + "rpcHost":"13.214.176.64" + } + }, + "retry_options":{ + "node":{ + "max_retries":10, + "retry_delay":10000 + } + }, + "REPORT_ADDRESS":"DDQVUDkCNfF5TKjJ5n6jh7BG2wZxr9SNnq", + "MAX_MATURE":50, + "distribution_conf":{ + "PPLNS_SIZE":20000, + "MODEL_PERCENT":{ + "SCORE":0, + "PPLNS":0.7, + "PROPDIF":0.3 + }, + "SCORE_PERCENT":{ + "HASHRATE":1, + "STDDEVS":0 + }, + "POOL_FEE":0.025 + } +} \ No newline at end of file diff --git a/config/enx.conf b/config/enx.conf new file mode 100644 index 0000000..2772106 --- /dev/null +++ b/config/enx.conf @@ -0,0 +1,128 @@ +{ + "master":{ + "pooldb":{ + "host": "127.0.0.1", + "user": "m2pool", + "password": "pMJzgwrg@Frt8aDXkQAsTGhG!zy!H8Jd", + "database": "enxpooldb", + "port":3306, + "waitForConnections": true, + "connectionLimit": 20, + "queueLimit": 0 + }, + "sharesdb":{ + "host": "127.0.0.1", + "user": "m2pool", + "password": "pMJzgwrg@Frt8aDXkQAsTGhG!zy!H8Jd", + "database": "enxsharesdb", + "port":3306, + "waitForConnections": true, + "connectionLimit": 20, + "queueLimit": 0 + }, + "distribution":{ + "host": "13.213.4.56", + "user": "pool190", + "password": "pMJzgwrg@Frt8aDXkQAsTGhG!zy!H8Jd", + "database": "distribution", + "port":6789, + "waitForConnections": true, + "connectionLimit": 20, + "queueLimit": 0 + }, + "hashrate":{ + "host": "13.213.4.56", + "user": "pool190", + "password": "pMJzgwrg@Frt8aDXkQAsTGhG!zy!H8Jd", + "database": "hashrate", + "port":6789, + "waitForConnections": true, + "connectionLimit": 20, + "queueLimit": 0 + }, + "users_addresses":{ + "host": "13.214.175.13", + "user": "root", + "password": "m2Pool2024@!", + "database": "pool", + "port":3123, + "waitForConnections": true, + "connectionLimit": 20, + "queueLimit": 0 + }, + "balance":{ + "host": "18.143.153.132", + "user": "app_user", + "password": "8xdZ3~FR$c1mqcxwmLs", + "database": "mydb", + "port":3306, + "waitForConnections": true, + "connectionLimit": 20, + "queueLimit": 0 + } + }, + "slave":{ + "pooldb_slave":{ + "host": "13.214.176.64", + "user": "m2pool", + "password": "pMJzgwrg@Frt8aDXkQAsTGhG!zy!H8Jd", + "database": "dgbopooldb", + "port":3306, + "waitForConnections": true, + "connectionLimit": 20, + "queueLimit": 0 + }, + "sharesdb_slave":{ + "host": "13.214.176.64", + "user": "m2pool", + "password": "pMJzgwrg@Frt8aDXkQAsTGhG!zy!H8Jd", + "database": "dgbosharesdb", + "port":3306, + "waitForConnections": true, + "connectionLimit": 20, + "queueLimit": 0 + } + }, + "redis_options":{ + "redis1":{ + "host":"localhost", + "port":6379, + "connectTimeout":10000 + } + }, + "node_options":{ + "node1":{ + "rpcUser":"test", + "rpcPassword":"test", + "rpcPort":16110, + "rpcHost":"10.168.1.162" + }, + "node2":{ + "rpcUser":"test", + "rpcPassword":"test", + "rpcPort":16110, + "rpcHost":"10.168.1.162" + } + }, + "retry_options":{ + "node":{ + "max_retries":10, + "retry_delay":10000 + } + }, + "REPORT_ADDRESS":"entropyx:qpe7q43ajzuv42az6kjdu84yrzdhzj33w03kpytfg5lx5yk3x0pd6x0r87hhr", + "MAX_MATURE":1000, + "distribution_conf":{ + "PPLNS_SIZE":20000, + "MODEL_PERCENT":{ + "SCORE":0, + "PPLNS":0.7, + "PROPDIF":0.3 + }, + "SCORE_PERCENT":{ + "HASHRATE":1, + "STDDEVS":0 + }, + "POOL_FEE":0 + } +} \ No newline at end of file diff --git a/config/grs.conf b/config/grs.conf new file mode 100644 index 0000000..63dd5c5 --- /dev/null +++ b/config/grs.conf @@ -0,0 +1,128 @@ +{ + "master":{ + "pooldb":{ + "host": "127.0.0.1", + "user": "m2pool", + "password": "pMJzgwrg@Frt8aDXkQAsTGhG!zy!H8Jd", + "database": "grspooldb", + "port":3306, + "waitForConnections": true, + "connectionLimit": 20, + "queueLimit": 0 + }, + "sharesdb":{ + "host": "127.0.0.1", + "user": "m2pool", + "password": "pMJzgwrg@Frt8aDXkQAsTGhG!zy!H8Jd", + "database": "grssharesdb", + "port":3306, + "waitForConnections": true, + "connectionLimit": 20, + "queueLimit": 0 + }, + "distribution":{ + "host": "13.213.4.56", + "user": "pool190", + "password": "pMJzgwrg@Frt8aDXkQAsTGhG!zy!H8Jd", + "database": "distribution", + "port":6789, + "waitForConnections": true, + "connectionLimit": 20, + "queueLimit": 0 + }, + "hashrate":{ + "host": "13.213.4.56", + "user": "pool190", + "password": "pMJzgwrg@Frt8aDXkQAsTGhG!zy!H8Jd", + "database": "hashrate", + "port":6789, + "waitForConnections": true, + "connectionLimit": 20, + "queueLimit": 0 + }, + "users_addresses":{ + "host": "13.214.175.13", + "user": "root", + "password": "m2Pool2024@!", + "database": "pool", + "port":3123, + "waitForConnections": true, + "connectionLimit": 20, + "queueLimit": 0 + }, + "balance":{ + "host": "18.143.153.132", + "user": "app_user", + "password": "8xdZ3~FR$c1mqcxwmLs", + "database": "mydb", + "port":3306, + "waitForConnections": true, + "connectionLimit": 20, + "queueLimit": 0 + } + }, + "slave":{ + "pooldb_slave":{ + "host": "172.17.0.1", + "user": "m2pool", + "password": "pMJzgwrg@Frt8aDXkQAsTGhG!zy!H8Jd", + "database": "grspooldb", + "port":3307, + "waitForConnections": true, + "connectionLimit": 20, + "queueLimit": 0 + }, + "sharesdb_slave":{ + "host": "172.17.0.1", + "user": "m2pool", + "password": "pMJzgwrg@Frt8aDXkQAsTGhG!zy!H8Jd", + "database": "grssharesdb", + "port":3307, + "waitForConnections": true, + "connectionLimit": 20, + "queueLimit": 0 + } + }, + "redis_options":{ + "redis1":{ + "host":"localhost", + "port":6379, + "connectTimeout":10000 + } + }, + "node_options":{ + "node1":{ + "rpcUser":"test", + "rpcPassword":"test", + "rpcPort":1441, + "rpcHost":"127.0.0.1" + }, + "node2":{ + "rpcUser":"test", + "rpcPassword":"test", + "rpcPort":1441, + "rpcHost":"13.213.4.56" + } + }, + "retry_options":{ + "node":{ + "max_retries":10, + "retry_delay":10000 + } + }, + "REPORT_ADDRESS":"3BZgQAB1tAN6zRcseavQ6vcMtXXiwThTvL", + "MAX_MATURE":20, + "distribution_conf":{ + "PPLNS_SIZE":20000, + "MODEL_PERCENT":{ + "SCORE":0, + "PPLNS":0.7, + "PROPDIF":0.3 + }, + "SCORE_PERCENT":{ + "HASHRATE":1, + "STDDEVS":0 + }, + "POOL_FEE":0.025 + } +} \ No newline at end of file diff --git a/config/mona.conf b/config/mona.conf new file mode 100644 index 0000000..15ad5ea --- /dev/null +++ b/config/mona.conf @@ -0,0 +1,128 @@ +{ + "master":{ + "pooldb":{ + "host": "127.0.0.1", + "user": "m2pool", + "password": "pMJzgwrg@Frt8aDXkQAsTGhG!zy!H8Jd", + "database": "monapooldb", + "port":3306, + "waitForConnections": true, + "connectionLimit": 20, + "queueLimit": 0 + }, + "sharesdb":{ + "host": "127.0.0.1", + "user": "m2pool", + "password": "pMJzgwrg@Frt8aDXkQAsTGhG!zy!H8Jd", + "database": "monasharesdb", + "port":3306, + "waitForConnections": true, + "connectionLimit": 20, + "queueLimit": 0 + }, + "distribution":{ + "host": "13.213.4.56", + "user": "pool190", + "password": "pMJzgwrg@Frt8aDXkQAsTGhG!zy!H8Jd", + "database": "distribution", + "port":6789, + "waitForConnections": true, + "connectionLimit": 20, + "queueLimit": 0 + }, + "hashrate":{ + "host": "13.213.4.56", + "user": "pool190", + "password": "pMJzgwrg@Frt8aDXkQAsTGhG!zy!H8Jd", + "database": "hashrate", + "port":6789, + "waitForConnections": true, + "connectionLimit": 20, + "queueLimit": 0 + }, + "users_addresses":{ + "host": "13.214.175.13", + "user": "root", + "password": "m2Pool2024@!", + "database": "pool", + "port":3123, + "waitForConnections": true, + "connectionLimit": 20, + "queueLimit": 0 + }, + "balance":{ + "host": "18.143.153.132", + "user": "app_user", + "password": "8xdZ3~FR$c1mqcxwmLs", + "database": "mydb", + "port":3306, + "waitForConnections": true, + "connectionLimit": 20, + "queueLimit": 0 + } + }, + "slave":{ + "pooldb_slave":{ + "host": "172.17.0.1", + "user": "m2pool", + "password": "pMJzgwrg@Frt8aDXkQAsTGhG!zy!H8Jd", + "database": "monapooldb", + "port":3307, + "waitForConnections": true, + "connectionLimit": 20, + "queueLimit": 0 + }, + "sharesdb_slave":{ + "host": "172.17.0.1", + "user": "m2pool", + "password": "pMJzgwrg@Frt8aDXkQAsTGhG!zy!H8Jd", + "database": "monasharesdb", + "port":3307, + "waitForConnections": true, + "connectionLimit": 20, + "queueLimit": 0 + } + }, + "redis_options":{ + "redis1":{ + "host":"localhost", + "port":6379, + "connectTimeout":10000 + } + }, + "node_options":{ + "node1":{ + "rpcUser":"test", + "rpcPassword":"test", + "rpcPort":9402, + "rpcHost":"127.0.0.1" + }, + "node2":{ + "rpcUser":"test", + "rpcPassword":"test", + "rpcPort":9402, + "rpcHost":"13.213.4.56" + } + }, + "retry_options":{ + "node":{ + "max_retries":10, + "retry_delay":10000 + } + }, + "REPORT_ADDRESS":"PSq64UuybtHykZvV9eQa77bkkAZyLgLkcG", + "MAX_MATURE":20, + "distribution_conf":{ + "PPLNS_SIZE":20000, + "MODEL_PERCENT":{ + "SCORE":0, + "PPLNS":0.7, + "PROPDIF":0.3 + }, + "SCORE_PERCENT":{ + "HASHRATE":1, + "STDDEVS":0 + }, + "POOL_FEE":0.025 + } +} \ No newline at end of file diff --git a/config/nexa.conf b/config/nexa.conf new file mode 100644 index 0000000..c35d864 --- /dev/null +++ b/config/nexa.conf @@ -0,0 +1,128 @@ +{ + "master":{ + "pooldb":{ + "host": "127.0.0.1", + "user": "m2pool", + "password": "pMJzgwrg@Frt8aDXkQAsTGhG!zy!H8Jd", + "database": "m2pooldb", + "port":3306, + "waitForConnections": true, + "connectionLimit": 20, + "queueLimit": 0 + }, + "sharesdb":{ + "host": "127.0.0.1", + "user": "m2pool", + "password": "pMJzgwrg@Frt8aDXkQAsTGhG!zy!H8Jd", + "database": "sharesdb", + "port":3306, + "waitForConnections": true, + "connectionLimit": 20, + "queueLimit": 0 + }, + "distribution":{ + "host": "127.0.0.1", + "user": "root", + "password": "123456", + "database": "distribution", + "port":6789, + "waitForConnections": true, + "connectionLimit": 20, + "queueLimit": 0 + }, + "hashrate":{ + "host": "127.0.0.1", + "user": "root", + "password": "123456", + "database": "test", + "port":6789, + "waitForConnections": true, + "connectionLimit": 20, + "queueLimit": 0 + }, + "users_addresses":{ + "host": "13.214.175.13", + "user": "root", + "password": "m2Pool2024@!", + "database": "pool", + "port":3123, + "waitForConnections": true, + "connectionLimit": 20, + "queueLimit": 0 + }, + "balance":{ + "host": "18.143.153.132", + "user": "app_user", + "password": "8xdZ3~FR$c1mqcxwmLs", + "database": "mydb", + "port":3306, + "waitForConnections": true, + "connectionLimit": 20, + "queueLimit": 0 + } + }, + "slave":{ + "pooldb_slave":{ + "host": "172.17.0.1", + "user": "m2pool", + "password": "pMJzgwrg@Frt8aDXkQAsTGhG!zy!H8Jd", + "database": "m2pooldb", + "port":3307, + "waitForConnections": true, + "connectionLimit": 20, + "queueLimit": 0 + }, + "sharesdb_slave":{ + "host": "172.17.0.1", + "user": "m2pool", + "password": "pMJzgwrg@Frt8aDXkQAsTGhG!zy!H8Jd", + "database": "sharesdb", + "port":3307, + "waitForConnections": true, + "connectionLimit": 20, + "queueLimit": 0 + } + }, + "redis_options":{ + "redis1":{ + "host":"localhost", + "port":6379, + "connectTimeout":10000 + } + }, + "node_options":{ + "node1":{ + "rpcUser":"test", + "rpcPassword":"test", + "rpcPort":7227, + "rpcHost":"127.0.0.1" + }, + "node2":{ + "rpcUser":"test", + "rpcPassword":"test", + "rpcPort":7227, + "rpcHost":"18.139.85.190" + } + }, + "retry_options":{ + "node":{ + "max_retries":10, + "retry_delay":10000 + } + }, + "REPORT_ADDRESS":"nexa:nqtsq5g54692xaxstwa8je7u6g83uy2x0mlgl52w75uvrsg4", + "MAX_MATURE":20, + "distribution_conf":{ + "PPLNS_SIZE":20000, + "MODEL_PERCENT":{ + "SCORE":0, + "PPLNS":0.7, + "PROPDIF":0.3 + }, + "SCORE_PERCENT":{ + "HASHRATE":1, + "STDDEVS":0 + }, + "POOL_FEE":0.025 + } +} \ No newline at end of file diff --git a/config/rxd.conf b/config/rxd.conf new file mode 100644 index 0000000..a92c94a --- /dev/null +++ b/config/rxd.conf @@ -0,0 +1,128 @@ +{ + "master":{ + "pooldb":{ + "host": "127.0.0.1", + "user": "m2pool", + "password": "pMJzgwrg@Frt8aDXkQAsTGhG!zy!H8Jd", + "database": "rxdpooldb", + "port":3306, + "waitForConnections": true, + "connectionLimit": 20, + "queueLimit": 0 + }, + "sharesdb":{ + "host": "127.0.0.1", + "user": "m2pool", + "password": "pMJzgwrg@Frt8aDXkQAsTGhG!zy!H8Jd", + "database": "rxdsharesdb", + "port":3306, + "waitForConnections": true, + "connectionLimit": 20, + "queueLimit": 0 + }, + "distribution":{ + "host": "13.213.4.56", + "user": "pool190", + "password": "pMJzgwrg@Frt8aDXkQAsTGhG!zy!H8Jd", + "database": "distribution", + "port":6789, + "waitForConnections": true, + "connectionLimit": 20, + "queueLimit": 0 + }, + "hashrate":{ + "host": "13.213.4.56", + "user": "pool190", + "password": "pMJzgwrg@Frt8aDXkQAsTGhG!zy!H8Jd", + "database": "hashrate", + "port":6789, + "waitForConnections": true, + "connectionLimit": 20, + "queueLimit": 0 + }, + "users_addresses":{ + "host": "13.214.175.13", + "user": "root", + "password": "m2Pool2024@!", + "database": "pool", + "port":3123, + "waitForConnections": true, + "connectionLimit": 20, + "queueLimit": 0 + }, + "balance":{ + "host": "18.143.153.132", + "user": "app_user", + "password": "8xdZ3~FR$c1mqcxwmLs", + "database": "mydb", + "port":3306, + "waitForConnections": true, + "connectionLimit": 20, + "queueLimit": 0 + } + }, + "slave":{ + "pooldb_slave":{ + "host": "172.17.0.1", + "user": "m2pool", + "password": "pMJzgwrg@Frt8aDXkQAsTGhG!zy!H8Jd", + "database": "dgbopooldb", + "port":3307, + "waitForConnections": true, + "connectionLimit": 20, + "queueLimit": 0 + }, + "sharesdb_slave":{ + "host": "172.17.0.1", + "user": "m2pool", + "password": "pMJzgwrg@Frt8aDXkQAsTGhG!zy!H8Jd", + "database": "dgbosharesdb", + "port":3307, + "waitForConnections": true, + "connectionLimit": 20, + "queueLimit": 0 + } + }, + "redis_options":{ + "redis1":{ + "host":"localhost", + "port":6379, + "connectTimeout":10000 + } + }, + "node_options":{ + "node1":{ + "rpcUser":"test", + "rpcPassword":"test", + "rpcPort":7332, + "rpcHost":"127.0.0.1" + }, + "node2":{ + "rpcUser":"test", + "rpcPassword":"test", + "rpcPort":7332, + "rpcHost":"18.141.161.129" + } + }, + "retry_options":{ + "node":{ + "max_retries":10, + "retry_delay":10000 + } + }, + "REPORT_ADDRESS":"1MBm1CZGSxa8DbDRjNVigyYXo24gU3AEfv", + "MAX_MATURE":10, + "distribution_conf":{ + "PPLNS_SIZE":20000, + "MODEL_PERCENT":{ + "SCORE":0, + "PPLNS":0.7, + "PROPDIF":0.3 + }, + "SCORE_PERCENT":{ + "HASHRATE":1, + "STDDEVS":0 + }, + "POOL_FEE":0.025 + } +} \ No newline at end of file diff --git a/config/test.conf b/config/test.conf new file mode 100644 index 0000000..c35d864 --- /dev/null +++ b/config/test.conf @@ -0,0 +1,128 @@ +{ + "master":{ + "pooldb":{ + "host": "127.0.0.1", + "user": "m2pool", + "password": "pMJzgwrg@Frt8aDXkQAsTGhG!zy!H8Jd", + "database": "m2pooldb", + "port":3306, + "waitForConnections": true, + "connectionLimit": 20, + "queueLimit": 0 + }, + "sharesdb":{ + "host": "127.0.0.1", + "user": "m2pool", + "password": "pMJzgwrg@Frt8aDXkQAsTGhG!zy!H8Jd", + "database": "sharesdb", + "port":3306, + "waitForConnections": true, + "connectionLimit": 20, + "queueLimit": 0 + }, + "distribution":{ + "host": "127.0.0.1", + "user": "root", + "password": "123456", + "database": "distribution", + "port":6789, + "waitForConnections": true, + "connectionLimit": 20, + "queueLimit": 0 + }, + "hashrate":{ + "host": "127.0.0.1", + "user": "root", + "password": "123456", + "database": "test", + "port":6789, + "waitForConnections": true, + "connectionLimit": 20, + "queueLimit": 0 + }, + "users_addresses":{ + "host": "13.214.175.13", + "user": "root", + "password": "m2Pool2024@!", + "database": "pool", + "port":3123, + "waitForConnections": true, + "connectionLimit": 20, + "queueLimit": 0 + }, + "balance":{ + "host": "18.143.153.132", + "user": "app_user", + "password": "8xdZ3~FR$c1mqcxwmLs", + "database": "mydb", + "port":3306, + "waitForConnections": true, + "connectionLimit": 20, + "queueLimit": 0 + } + }, + "slave":{ + "pooldb_slave":{ + "host": "172.17.0.1", + "user": "m2pool", + "password": "pMJzgwrg@Frt8aDXkQAsTGhG!zy!H8Jd", + "database": "m2pooldb", + "port":3307, + "waitForConnections": true, + "connectionLimit": 20, + "queueLimit": 0 + }, + "sharesdb_slave":{ + "host": "172.17.0.1", + "user": "m2pool", + "password": "pMJzgwrg@Frt8aDXkQAsTGhG!zy!H8Jd", + "database": "sharesdb", + "port":3307, + "waitForConnections": true, + "connectionLimit": 20, + "queueLimit": 0 + } + }, + "redis_options":{ + "redis1":{ + "host":"localhost", + "port":6379, + "connectTimeout":10000 + } + }, + "node_options":{ + "node1":{ + "rpcUser":"test", + "rpcPassword":"test", + "rpcPort":7227, + "rpcHost":"127.0.0.1" + }, + "node2":{ + "rpcUser":"test", + "rpcPassword":"test", + "rpcPort":7227, + "rpcHost":"18.139.85.190" + } + }, + "retry_options":{ + "node":{ + "max_retries":10, + "retry_delay":10000 + } + }, + "REPORT_ADDRESS":"nexa:nqtsq5g54692xaxstwa8je7u6g83uy2x0mlgl52w75uvrsg4", + "MAX_MATURE":20, + "distribution_conf":{ + "PPLNS_SIZE":20000, + "MODEL_PERCENT":{ + "SCORE":0, + "PPLNS":0.7, + "PROPDIF":0.3 + }, + "SCORE_PERCENT":{ + "HASHRATE":1, + "STDDEVS":0 + }, + "POOL_FEE":0.025 + } +} \ No newline at end of file diff --git a/lib/mysql.js b/lib/mysql.js new file mode 100644 index 0000000..6808448 --- /dev/null +++ b/lib/mysql.js @@ -0,0 +1,88 @@ +const mysql = require("mysql2/promise"); + +class DBPool { + constructor(coin, options) { + this.coin = coin; + this.pool = mysql.createPool(options); + } + + /** + * 非事务SQL操作 + * @param {String} sql + * @param {Array} values + * @returns + */ + async exec(sql, values = []) { + const con = await this.pool.getConnection(); + try { + const [data] = await con.query(sql, values); + return data; + } catch (err) { + throw err; + } finally { + con.release(); + } + } + /** + * 单独SQL事务操作 + * @param {String} sql + * @param {Array} values + * @returns + */ + async exec_transaction(sql, values = []) { + const con = await this.pool.getConnection(); + try { + await con.beginTransaction(); + const [data] = await con.query(sql, values); + await con.commit(); + return data; + } catch (err) { + await con.rollback(); + throw err; + } finally { + con.release(); + } + } + + /** + * 执行一系列 SQL 操作,合并到一个事务中。 + * @param {Array} params [{sql:"", param:[param1, param2, ...]}] + */ + async exec_transaction_together(params) { + const con = await this.pool.getConnection(); + try { + await con.beginTransaction(); + + // 确保所有查询都完成后再提交事务 + for (const { sql, param } of params) { + await con.query(sql, param); + } + + await con.commit(); + } catch (err) { + await con.rollback(); + throw err; + } finally { + con.release(); + } + } + + async exec_write_lock(sql, values = [], table_name) { + const con = await this.pool.getConnection(); + try { + await con.beginTransaction(); + // 使用模板字符串而不是占位符来构建 LOCK TABLES 语句 + await con.query(`LOCK TABLES ${table_name} WRITE`); + await con.query(sql, values); + await con.commit(); + } catch (err) { + await con.rollback(); + throw err; + } finally { + await con.query("UNLOCK TABLES"); + con.release(); + } + } +} + +module.exports = DBPool \ No newline at end of file diff --git a/lib/node.js b/lib/node.js new file mode 100644 index 0000000..514c616 --- /dev/null +++ b/lib/node.js @@ -0,0 +1,511 @@ +const axios = require("axios"); +const ClientWarapper = require("kaspa-rpc-client").ClientWrapper + +class BaseRPCNode { + constructor(NODE_OPTION) { + const { rpcUser, rpcHost, rpcPassword, rpcPort } = NODE_OPTION; + const request_Rpc = axios.create({ + baseURL: `http://${rpcHost}:${rpcPort}`, // 修正为 baseURL + auth: { + username: rpcUser, + password: rpcPassword, + }, + timeout: 5000, // 超时时间,5秒 + }); + this.request_Rpc = request_Rpc; + } + async callRpcMethod(method, params = []) { + try { + const response = await this.request_Rpc.post("/", { + jsonrpc: "1.0", + id: "testnet", + method: method, + params: params, + }); + return response.data.result; + } catch (error) { + console.error("RPC Error:", error.response ? error.response.data : error.message); + throw error; + } + } + async getblockcount() { + try { + // const blockhash = await getblockhash(height); + const data = await this.callRpcMethod("getblockcount", []); + return data; + } catch (err) { + throw err; + } + } + async getblockhash(height) { + try { + const data = await this.callRpcMethod("getblockhash", [height]); + return data; + } catch (err) { + throw err; + } + } + async getblock(param) { + try { + let data; + if (typeof param === "string") { + data = await this.callRpcMethod("getblock", [param, 2]); + } else if (typeof param === "number") { + const hash = await this.getblockhash(param); + data = await this.callRpcMethod("getblock", [hash, 2]); + } + return data; + } catch (err) { + throw err; + } + } +} + +class NEXARPCNode extends BaseRPCNode { + constructor(NODE_OPTION) { + super(NODE_OPTION); // 调用父类构造函数 + } + + async verify_wallet(address) { + try { + const data = await this.callRpcMethod("getreceivedbyaddress", [address]); + return true; + } catch (err) { + return false; + } + } + + async getblock(height) { + try { + // const blockhash = await getblockhash(height); + const data = await this.callRpcMethod("getblock", [height, 2]); + return data; + } catch (err) { + throw err; + } + } + /** + * 校验是否是本矿池报块 + * @param {Number} height 报块高度 + * @param {String} address 矿池报块钱包地址 + * @returns + */ + async verify_block(height, address) { + try { + const block_data = await this.getblock(height); + const { tx } = block_data; + for (let item of tx) { + if (item.vin.length === 0) { + const { addresses } = item.vout[0].scriptPubKey; + if (address === addresses[0]) { + return block_data; + } else { + return false; + } + } + } + } catch (err) { + throw err; + } + } + + block(block_data) { + try { + // const block_data = await this.getblock(height); + const { tx, time, hash, height } = block_data; + let block_fees = 0; + let block_reward = 0; + for (let item of tx) { + if (item.vin.length === 0) { + // coinbase交易 + block_reward = item.sends; + } else { + block_fees += item.fee; + } + } + const result = { height, hash, time, block_reward, block_fees }; + return result; + } catch (err) { + throw err; + } + } +} + +class GRSRPCNode extends BaseRPCNode { + constructor(NODE_OPTION) { + super(NODE_OPTION); // 调用父类构造函数 + } + async verify_block(_height, REPORT_ADDRESS) { + try { + const block_data = await this.getblock(_height); + const { tx } = block_data; + for (let item of tx) { + const { vin, vout } = item; + if (vin[0].coinbase) { + for (let value of vout) { + if (value.scriptPubKey.address) { + if (value.scriptPubKey.address === REPORT_ADDRESS) { + return block_data; + } else { + return false; + } + } + } + } + } + } catch (err) { + throw err; + } + } + + block(data) { + const { hash, tx, height, time } = data; + // const littleEndian = Buffer.from(Buffer.from(hash, "hex").reverse()); + let reward = 0; + let fees = 0; + for (let item of tx) { + const { vin, vout } = item; + if (vin[0].coinbase) { + for (let value of vout) { + reward += value.value; + } + } else { + const { fee } = item; + fees += fee; + } + } + // console.log(littleEndian.toString("hex")," ", hash); + + return { height, hash, time, block_reward: reward, block_fees: fees }; + } +} + +class MONARPCNode extends BaseRPCNode { + constructor(NODE_OPTION) { + super(NODE_OPTION); // 调用父类构造函数 + } + + async verify_block(_height, REPORT_ADDRESS) { + try { + const block_data = await this.getblock(_height); + const { tx } = block_data; + for (let item of tx) { + const { vin, vout } = item; + if (vin[0].coinbase) { + for (let value of vout) { + if (value.scriptPubKey.addresses) { + if (value.scriptPubKey.addresses["0"] === REPORT_ADDRESS) { + return block_data; + } else { + return false; + } + } + } + } + } + } catch (err) { + throw err; + } + } + + block(data) { + const { hash, tx, height, time } = data; + + let reward = 0; + for (let item of tx) { + const { vin, vout } = item; + if (vin[0].coinbase) { + for (let value of vout) { + if (value.scriptPubKey.addresses) { + reward += value.value; + } + } + } + } + return { height, hash, time, block_reward: reward, block_fees: null }; + } +} + +class DGBRPCNode extends BaseRPCNode { + constructor(NODE_OPTION) { + super(NODE_OPTION); // 调用父类构造函数 + } + + async verify_block(_height, REPORT_ADDRESS) { + try { + const block_data = await this.getblock(_height); + const { tx, pow_algo } = block_data; + // if (algorithm === pow_algo) { + for (let item of tx) { + const { vin, vout } = item; + if (vin[0].coinbase) { + for (let value of vout) { + if (value.scriptPubKey.addresses) { + if (value.scriptPubKey.addresses[0] === REPORT_ADDRESS) { + return block_data; + } + } + } + } + // } + } + return false; + } catch (err) { + throw err; + } + } + + async verify_block_with_alogo(_height, REPORT_ADDRESS, algorithm) { + try { + const block_data = await this.getblock(_height); + const { tx, pow_algo } = block_data; + if (algorithm === pow_algo) { + for (let item of tx) { + const { vin, vout } = item; + if (vin[0].coinbase) { + for (let value of vout) { + if (value.scriptPubKey.addresses) { + if (value.scriptPubKey.addresses[0] === REPORT_ADDRESS) { + return block_data; + } + } + } + } + } + } + return false; + } catch (err) { + throw err; + } + } + + block(data) { + const { hash, tx, height, time } = data; + let reward = 0; + for (let item of tx) { + const { vin, vout } = item; + if (vin[0].coinbase) { + for (let value of vout) { + if (value.scriptPubKey.addresses) { + reward += value.value; + } + } + } + } + return { height, hash, time, block_reward: reward, block_fees: null }; + } +} + +class RXDRPCNode extends BaseRPCNode { + constructor(NODE_OPTION) { + super(NODE_OPTION); + } + + async verify_block(_height, REPORT_ADDRESS) { + try { + const block_data = await this.getblock(_height); + const { tx } = block_data; + for (let { vin, vout } of tx) { + if (vin[0].coinbase) { + for (let { scriptPubKey } of vout) { + if (scriptPubKey.addresses[0] === REPORT_ADDRESS) { + const hash = await this.getblockhash(_height); + const blockstats = await this.callRpcMethod("getblockstats", [hash]); + const { blockhash, height, time, subsidy, totalfee } = blockstats; + return { height, hash: blockhash, time, block_reward: subsidy + totalfee, block_fees: totalfee }; + } + } + } + } + return false; + } catch (err) { + throw err; + } + } + + block(data) { + return data; + } +} + +class ENXNode { + constructor(NODE_OPTION) { + const { rpcHost, rpcPort } = NODE_OPTION; + this.rpcHost = rpcHost; + this.rpcPort = rpcPort; + + this.state = false + } + + async init (){ + try{ + const warapper = new ClientWarapper({ + hosts: [`${this.rpcHost}:${this.rpcPort}`], + verbose: true + }) + await warapper.initialize() + this.client = await warapper.getClient() + this.state = true + } catch (err){ + throw err + } + } + + async getblockcount(){ + if(!this.state){ + console.log("节点未初始化"); + return + } + try{ + const data = await this.client.getBlockDagInfo() + const {virtualDaaScore} = data + return Number(virtualDaaScore) + } catch(err){ + throw err + } + } + /** + * + * @param {Number} start_height + * @param {String} REPORT_ADDRESS + * @returns + * +{ + address: 'entropyx:qpe7q43ajzuv42az6kjdu84yrzdhzj33w03kpytfg5lx5yk3x0pd6x0r87hhr', + outpoint: { + transactionId: '9341ecd11e3cccb06ff09ad8f604aee80f9777aafa0f8858a5501c2736b31cb2', + index: 0 + }, + utxoEntry: { + amount: '50000000000', + scriptPublicKey: { + version: 0, + scriptPublicKey: '2073e0563d90b8caaba2d5a4de1ea4189b714a3173e3609169453e6a12d133c2ddac' + }, + blockDaaScore: '2776996', + isCoinbase: false + } +} + */ + async getTransactions(start_height, REPORT_ADDRESS){ + if(!this.state){ + console.log("节点未初始化"); + return + } + try{ + const {entries} = await this.client.getUtxosByAddresses({addresses:[REPORT_ADDRESS]}) + const blocks = [] + for(let item of entries){ + if(Number(item.utxoEntry.blockDaaScore) > start_height && item.utxoEntry.isCoinbase){ + blocks.push({ + height: Number(item.utxoEntry.blockDaaScore), + amount: Number(item.utxoEntry.amount) / 10 ** 8, + }) + } + } + return blocks + } catch(err){ + throw err + } + } +} + + + +class HttpNode { + constructor(NODE_OPTION){ + const { rpcHost, rpcPassword, rpcPort } = NODE_OPTION; + this.host = rpcHost + this.prot = rpcPort + this.api_key = rpcPassword + } + + async Get(api = "", params = {}){ + const url = `http://${this.host}:${this.prot}/${api}` + try{ + const res = await axios.get(url, { params, headers: { "x-api-key": this.api_key } }) + return res.data + } catch (err){ + throw err + } + } + + async Post(api = "", params = {}){ + const url = `http://${this.host}:${this.prot}/${api}` + try{ + const res = await axios.post(url, params, { headers: { "x-api-key": this.api_key } }) + return res.data + } catch (err){ + throw err + } + } +} + +class ALPHRPCNode extends HttpNode { + constructor(NODE_OPTION) { + super(NODE_OPTION); + } + + async getblockcount(){ + try{ + const result = await this.Get("blockflow/chain-info", {fromGroup:0, toGroup:0}) + return result.currentHeight + } catch(err){ + throw err + } + } + + async getblockhash(height){ + try{ + const result = await this.Get("blockflow/hashes", {fromGroup:0, toGroup:0, height}) + return result.headers[0] + } catch(err){ + throw err + } + } + + async getblock(block_hash){ + try{ + const result = await this.Get(`blockflow/blocks/${block_hash}`) + return result + } catch(err){ + throw err + } + } + + async verify_block(height, REPORT_ADDRESS){ + try{ + const block_hash = await this.getblockhash(height) + const block = await this.getblock(block_hash) + const {transactions, timestamp} = block + const coinbaseTx = transactions[transactions.length - 1].unsigned + if (coinbaseTx.inputs.length === 0) { + const {fixedOutputs} = coinbaseTx + if(fixedOutputs.length === 1){ + const {attoAlphAmount, address } = fixedOutputs[0] + if(address === REPORT_ADDRESS){ + return {height, hash: block_hash, time:Math.trunc(timestamp / 1000), block_reward: Number(attoAlphAmount), block_fees: null }; + } + } + } + return false + } catch(err){ + throw err + } + } + + block(data){ + return data + } +} + + +module.exports = { + NEXARPCNode, + GRSRPCNode, + MONARPCNode, + DGBRPCNode, + RXDRPCNode, + ENXNode, + ALPHRPCNode +}; diff --git a/lib/redis.js b/lib/redis.js new file mode 100644 index 0000000..32b94d6 --- /dev/null +++ b/lib/redis.js @@ -0,0 +1,26 @@ +const Redis = require("ioredis"); + +class Cache { + constructor(options) { + this.redis = new Redis(options); + } + + async set(key, value) { + try { + await this.redis.set(key, value); + } catch (err) { + throw err; + } + } + + async get(key) { + try { + const data = await this.redis.get(key); + return JSON.parse(data); + } catch (err) { + throw err; + } + } +} + +module.exports = Cache; diff --git a/m2pool_backend_app b/m2pool_backend_app new file mode 160000 index 0000000..d880f55 --- /dev/null +++ b/m2pool_backend_app @@ -0,0 +1 @@ +Subproject commit d880f559f8f1171d4ba66d4b6aa06a265a802233 diff --git a/public/baseResponse.js b/public/baseResponse.js new file mode 100644 index 0000000..24e0b57 --- /dev/null +++ b/public/baseResponse.js @@ -0,0 +1,28 @@ +class SuccessResponse { + constructor(data) { + if (data) { + this.code = 0; + this.msg = "Success"; + this.data = data; + } else { + this.code = 0; + this.msg = "Success"; + } + } + } + + class ErrorResponse { + constructor(data) { + if (data) { + this.code = -1; + this.msg = "Error"; + this.data = data; + } else { + this.code = -1; + this.msg = "Error"; + } + } + } + + module.exports = { SuccessResponse, ErrorResponse }; + \ No newline at end of file diff --git a/public/distribution-hashrate.js b/public/distribution-hashrate.js new file mode 100644 index 0000000..c80d9e8 --- /dev/null +++ b/public/distribution-hashrate.js @@ -0,0 +1,10 @@ +/** + * 计算算力占比 + * @param {Array} list [{user:"user1", mhs24h:100}, {user:"user2", mhs24h:320}] + * @returns + */ +module.exports = (list) => { + const total_hashrate = list.reduce((sum, user) => sum + user.mhs24h, 0); + const users_weight = list.map((user) => ({ user: user.user, mhs24h: user.mhs24h, weight: user.mhs24h / total_hashrate })); + return users_weight +}; diff --git a/public/distribution-shares.js b/public/distribution-shares.js new file mode 100644 index 0000000..f3d697a --- /dev/null +++ b/public/distribution-shares.js @@ -0,0 +1,49 @@ +/** + * 截取小数点后dots位 + * @param {Number} number 要截取的小数 + * @param {Number} dots 小数点位数 + * @returns + */ +function truncateToTenDecimals(number, dots) { + const str = number.toString(); + const decimalIndex = str.indexOf("."); + // 如果没有小数部分,直接返回原始数值 + if (decimalIndex === -1) { + return str; + } + // 截取到小数点后 10 位 + const truncatedStr = str.slice(0, decimalIndex + dots + 1); + return Number(truncatedStr); + } + + /** + * 根据shares队列计算每个user本轮次的分配占比 + * @param {Array} data [{user:"user1", pool_diff:100, miner_diff:100}, ] + * @returns {"1x1":{totalWeight:10, weightRatio:0.1}} + */ + function calculate_shares_weight(data) { + // Step 1: 按照 user 分类计算每个 user 的总 weight + const userWeights = data.reduce((acc, item) => { + const weight = item.miner_diff / item.pool_diff; + if (!acc[item.user]) { + acc[item.user] = { totalWeight: 0, data: [] }; + } + acc[item.user].totalWeight += weight; + acc[item.user].data.push(item); + return acc; + }, {}); + + // Step 2: 计算所有 user 的总 weight + const totalWeight = Object.values(userWeights).reduce((acc, user) => acc + user.totalWeight, 0); + + // Step 3: 计算每个 user 的 weight 占总 weight 的比重并返回所需格式 + const userWeightRatios = Object.keys(userWeights).reduce((acc, user) => { + const weightRatio = truncateToTenDecimals(userWeights[user].totalWeight / totalWeight, 10); + acc[user] = Number(weightRatio); + return acc; + }, {}); + + return userWeightRatios; + } + module.exports = { calculate_shares_weight, truncateToTenDecimals }; + \ No newline at end of file diff --git a/public/endian.js b/public/endian.js new file mode 100644 index 0000000..4b3856d --- /dev/null +++ b/public/endian.js @@ -0,0 +1,7 @@ +const changeEndian = (hex) =>{ + const buffer = Buffer.from(hex, 'hex'); + const endian = Buffer.from(buffer.reverse()) + const result = endian.toString("hex") + return result +} +module.exports = changeEndian \ No newline at end of file diff --git a/public/index.sql b/public/index.sql new file mode 100644 index 0000000..64ba8dc --- /dev/null +++ b/public/index.sql @@ -0,0 +1,513 @@ +-- 矿工历史算力表 +CREATE TABLE IF NOT EXISTS nexa_mhsv2( + id INT NOT NULL PRIMARY KEY AUTO_INCREMENT, + user VARCHAR(64) NOT NULL, + miner VARCHAR(64) NOT NULL, + date DATETIME NOT NULL, + mhs30m DECIMAL(32, 6) NOT NULL, + mhs24h DECIMAL(32, 6) NOT NULL, + state VARCHAR(15) NOT NULL, + last_submit DATETIME NOT NULL +); + +CREATE TABLE IF NOT EXISTS nexa_mhs_realv2( + id INT NOT NULL PRIMARY KEY AUTO_INCREMENT, + user VARCHAR(64) NOT NULL, + miner VARCHAR(64) NOT NULL, + date DATETIME NOT NULL, + mhs30m DECIMAL(32, 6) NOT NULL, + mhs24h DECIMAL(32, 6) NOT NULL, + state VARCHAR(15) NOT NULL, + last_submit DATETIME NOT NULL +); + +CREATE TABLE IF NOT EXISTS nexa_minersv2( + id INT NOT NULL PRIMARY KEY AUTO_INCREMENT, + user VARCHAR(64) NOT NULL, + miner VARCHAR(64) NOT NULL, + date DATETIME NOT NULL, + accepts DECIMAL(16,8) NOT NULL, + state VARCHAR(10) NOT NULL, + last_submit DATETIME NOT NULL +); + +-- 矿工历史算力表 +CREATE TABLE IF NOT EXISTS grs_mhsv2( + id INT NOT NULL PRIMARY KEY AUTO_INCREMENT, + user VARCHAR(64) NOT NULL, + miner VARCHAR(64) NOT NULL, + date DATETIME NOT NULL, + mhs30m DECIMAL(32, 6) NOT NULL, + mhs24h DECIMAL(32, 6) NOT NULL, + state VARCHAR(15) NOT NULL, + last_submit DATETIME NOT NULL +); + +CREATE TABLE IF NOT EXISTS grs_mhs_realv2( + id INT NOT NULL PRIMARY KEY AUTO_INCREMENT, + user VARCHAR(64) NOT NULL, + miner VARCHAR(64) NOT NULL, + date DATETIME NOT NULL, + mhs30m DECIMAL(32, 6) NOT NULL, + mhs24h DECIMAL(32, 6) NOT NULL, + state VARCHAR(15) NOT NULL, + last_submit DATETIME NOT NULL +); + +CREATE TABLE IF NOT EXISTS grs_minersv2( + id INT NOT NULL PRIMARY KEY AUTO_INCREMENT, + user VARCHAR(64) NOT NULL, + miner VARCHAR(64) NOT NULL, + date DATETIME NOT NULL, + accepts DECIMAL(16,8) NOT NULL, + state VARCHAR(10) NOT NULL, + last_submit DATETIME NOT NULL +); + +-- 矿工历史算力表 +CREATE TABLE IF NOT EXISTS mona_mhsv2( + id INT NOT NULL PRIMARY KEY AUTO_INCREMENT, + user VARCHAR(64) NOT NULL, + miner VARCHAR(64) NOT NULL, + date DATETIME NOT NULL, + mhs30m DECIMAL(32, 6) NOT NULL, + mhs24h DECIMAL(32, 6) NOT NULL, + state VARCHAR(15) NOT NULL, + last_submit DATETIME NOT NULL +); + +CREATE TABLE IF NOT EXISTS mona_mhs_realv2( + id INT NOT NULL PRIMARY KEY AUTO_INCREMENT, + user VARCHAR(64) NOT NULL, + miner VARCHAR(64) NOT NULL, + date DATETIME NOT NULL, + mhs30m DECIMAL(32, 6) NOT NULL, + mhs24h DECIMAL(32, 6) NOT NULL, + state VARCHAR(15) NOT NULL, + last_submit DATETIME NOT NULL +); + +CREATE TABLE IF NOT EXISTS mona_minersv2( + id INT NOT NULL PRIMARY KEY AUTO_INCREMENT, + user VARCHAR(64) NOT NULL, + miner VARCHAR(64) NOT NULL, + date DATETIME NOT NULL, + accepts DECIMAL(16,8) NOT NULL, + state VARCHAR(10) NOT NULL, + last_submit DATETIME NOT NULL +); + +-- 矿工历史算力表 +CREATE TABLE IF NOT EXISTS dgbs_mhsv2( + id INT NOT NULL PRIMARY KEY AUTO_INCREMENT, + user VARCHAR(64) NOT NULL, + miner VARCHAR(64) NOT NULL, + date DATETIME NOT NULL, + mhs30m DECIMAL(32, 6) NOT NULL, + mhs24h DECIMAL(32, 6) NOT NULL, + state VARCHAR(15) NOT NULL, + last_submit DATETIME NOT NULL +); + +CREATE TABLE IF NOT EXISTS dgbs_mhs_realv2( + id INT NOT NULL PRIMARY KEY AUTO_INCREMENT, + user VARCHAR(64) NOT NULL, + miner VARCHAR(64) NOT NULL, + date DATETIME NOT NULL, + mhs30m DECIMAL(32, 6) NOT NULL, + mhs24h DECIMAL(32, 6) NOT NULL, + state VARCHAR(15) NOT NULL, + last_submit DATETIME NOT NULL +); + +CREATE TABLE IF NOT EXISTS dgbs_minersv2( + id INT NOT NULL PRIMARY KEY AUTO_INCREMENT, + user VARCHAR(64) NOT NULL, + miner VARCHAR(64) NOT NULL, + date DATETIME NOT NULL, + accepts DECIMAL(16,8) NOT NULL, + state VARCHAR(10) NOT NULL, + last_submit DATETIME NOT NULL +); + +-- 矿工历史算力表 +CREATE TABLE IF NOT EXISTS dgbq_mhsv2( + id INT NOT NULL PRIMARY KEY AUTO_INCREMENT, + user VARCHAR(64) NOT NULL, + miner VARCHAR(64) NOT NULL, + date DATETIME NOT NULL, + mhs30m DECIMAL(32, 6) NOT NULL, + mhs24h DECIMAL(32, 6) NOT NULL, + state VARCHAR(15) NOT NULL, + last_submit DATETIME NOT NULL +); + +CREATE TABLE IF NOT EXISTS dgbq_mhs_realv2( + id INT NOT NULL PRIMARY KEY AUTO_INCREMENT, + user VARCHAR(64) NOT NULL, + miner VARCHAR(64) NOT NULL, + date DATETIME NOT NULL, + mhs30m DECIMAL(32, 6) NOT NULL, + mhs24h DECIMAL(32, 6) NOT NULL, + state VARCHAR(15) NOT NULL, + last_submit DATETIME NOT NULL +); + +CREATE TABLE IF NOT EXISTS dgbq_minersv2( + id INT NOT NULL PRIMARY KEY AUTO_INCREMENT, + user VARCHAR(64) NOT NULL, + miner VARCHAR(64) NOT NULL, + date DATETIME NOT NULL, + accepts DECIMAL(16,8) NOT NULL, + state VARCHAR(10) NOT NULL, + last_submit DATETIME NOT NULL +); + +-- 矿工历史算力表 +CREATE TABLE IF NOT EXISTS dgbo_mhsv2( + id INT NOT NULL PRIMARY KEY AUTO_INCREMENT, + user VARCHAR(64) NOT NULL, + miner VARCHAR(64) NOT NULL, + date DATETIME NOT NULL, + mhs30m DECIMAL(32, 6) NOT NULL, + mhs24h DECIMAL(32, 6) NOT NULL, + state VARCHAR(15) NOT NULL, + last_submit DATETIME NOT NULL +); + +CREATE TABLE IF NOT EXISTS dgbo_mhs_realv2( + id INT NOT NULL PRIMARY KEY AUTO_INCREMENT, + user VARCHAR(64) NOT NULL, + miner VARCHAR(64) NOT NULL, + date DATETIME NOT NULL, + mhs30m DECIMAL(32, 6) NOT NULL, + mhs24h DECIMAL(32, 6) NOT NULL, + state VARCHAR(15) NOT NULL, + last_submit DATETIME NOT NULL +); + +CREATE TABLE IF NOT EXISTS dgbo_minersv2( + id INT NOT NULL PRIMARY KEY AUTO_INCREMENT, + user VARCHAR(64) NOT NULL, + miner VARCHAR(64) NOT NULL, + date DATETIME NOT NULL, + accepts DECIMAL(16,8) NOT NULL, + state VARCHAR(10) NOT NULL, + last_submit DATETIME NOT NULL +); + +CREATE TABLE IF NOT EXISTS nexa_blkreportprofitv2( + date DATETIME NOT NULL, + height INT NOT NULL PRIMARY KEY, + hash VARCHAR(255) NOT NULL, + reward DECIMAL(18,8) NOT NULL, + fees DECIMAL(18,8), + state TINYINT NOT NULL +); + +CREATE TABLE IF NOT EXISTS mona_blkreportprofitv2( + date DATETIME NOT NULL, + height INT NOT NULL PRIMARY KEY, + hash VARCHAR(255) NOT NULL, + reward DECIMAL(18,8) NOT NULL, + fees DECIMAL(18,8), + state TINYINT NOT NULL +); + +CREATE TABLE IF NOT EXISTS grs_blkreportprofitv2( + date DATETIME NOT NULL, + height INT NOT NULL PRIMARY KEY, + hash VARCHAR(255) NOT NULL, + reward DECIMAL(18,8) NOT NULL, + fees DECIMAL(18,8), + state TINYINT NOT NULL +); + +CREATE TABLE IF NOT EXISTS dgbq_blkreportprofitv2( + date DATETIME NOT NULL, + height INT NOT NULL PRIMARY KEY, + hash VARCHAR(255) NOT NULL, + reward DECIMAL(18,8) NOT NULL, + fees DECIMAL(18,8), + state TINYINT NOT NULL +); + +CREATE TABLE IF NOT EXISTS dgbo_blkreportprofitv2( + date DATETIME NOT NULL, + height INT NOT NULL PRIMARY KEY, + hash VARCHAR(255) NOT NULL, + reward DECIMAL(18,8) NOT NULL, + fees DECIMAL(18,8), + state TINYINT NOT NULL +); + +CREATE TABLE IF NOT EXISTS dgbs_blkreportprofitv2( + date DATETIME NOT NULL, + height INT NOT NULL PRIMARY KEY, + hash VARCHAR(255) NOT NULL, + reward DECIMAL(18,8) NOT NULL, + fees DECIMAL(18,8), + state TINYINT NOT NULL +); + + + +-- 矿工历史算力表 +CREATE TABLE IF NOT EXISTS rxd_mhsv2( + id INT NOT NULL PRIMARY KEY AUTO_INCREMENT, + user VARCHAR(64) NOT NULL, + miner VARCHAR(64) NOT NULL, + date DATETIME NOT NULL, + mhs30m DECIMAL(32, 6) NOT NULL, + mhs24h DECIMAL(32, 6) NOT NULL, + state VARCHAR(15) NOT NULL, + last_submit DATETIME NOT NULL +); + +CREATE TABLE IF NOT EXISTS rxd_mhs_realv2( + id INT NOT NULL PRIMARY KEY AUTO_INCREMENT, + user VARCHAR(64) NOT NULL, + miner VARCHAR(64) NOT NULL, + date DATETIME NOT NULL, + mhs30m DECIMAL(32, 6) NOT NULL, + mhs24h DECIMAL(32, 6) NOT NULL, + state VARCHAR(15) NOT NULL, + last_submit DATETIME NOT NULL +); + +CREATE TABLE IF NOT EXISTS rxd_minersv2( + id INT NOT NULL PRIMARY KEY AUTO_INCREMENT, + user VARCHAR(64) NOT NULL, + miner VARCHAR(64) NOT NULL, + date DATETIME NOT NULL, + accepts DECIMAL(16,8) NOT NULL, + state VARCHAR(10) NOT NULL, + last_submit DATETIME NOT NULL +); + + +CREATE TABLE IF NOT EXISTS rxd_blkreportprofitv2( + date DATETIME NOT NULL, + height INT NOT NULL PRIMARY KEY, + hash VARCHAR(255) NOT NULL, + reward DECIMAL(18,8) NOT NULL, + fees DECIMAL(18,8), + state TINYINT NOT NULL +); + +-- 矿工历史算力表 +CREATE TABLE IF NOT EXISTS enx_mhsv2( + id INT NOT NULL PRIMARY KEY AUTO_INCREMENT, + user VARCHAR(64) NOT NULL, + miner VARCHAR(64) NOT NULL, + date DATETIME NOT NULL, + mhs30m DECIMAL(32, 6) NOT NULL, + mhs24h DECIMAL(32, 6) NOT NULL, + state VARCHAR(15) NOT NULL, + last_submit DATETIME NOT NULL +); + +CREATE TABLE IF NOT EXISTS enx_mhs_realv2( + id INT NOT NULL PRIMARY KEY AUTO_INCREMENT, + user VARCHAR(64) NOT NULL, + miner VARCHAR(64) NOT NULL, + date DATETIME NOT NULL, + mhs30m DECIMAL(32, 6) NOT NULL, + mhs24h DECIMAL(32, 6) NOT NULL, + state VARCHAR(15) NOT NULL, + last_submit DATETIME NOT NULL +); + +CREATE TABLE IF NOT EXISTS enx_minersv2( + id INT NOT NULL PRIMARY KEY AUTO_INCREMENT, + user VARCHAR(64) NOT NULL, + miner VARCHAR(64) NOT NULL, + date DATETIME NOT NULL, + accepts DECIMAL(16,8) NOT NULL, + state VARCHAR(10) NOT NULL, + last_submit DATETIME NOT NULL +); + + +CREATE TABLE IF NOT EXISTS enx_blkreportprofitv2( + date DATETIME NOT NULL, + height INT NOT NULL PRIMARY KEY, + hash VARCHAR(255) NOT NULL, + reward DECIMAL(18,8) NOT NULL, + fees DECIMAL(18,8), + state TINYINT NOT NULL +); + +-- 矿工历史算力表 +CREATE TABLE IF NOT EXISTS alph_mhsv2( + id INT NOT NULL PRIMARY KEY AUTO_INCREMENT, + user VARCHAR(64) NOT NULL, + miner VARCHAR(64) NOT NULL, + date DATETIME NOT NULL, + mhs30m DECIMAL(32, 6) NOT NULL, + mhs24h DECIMAL(32, 6) NOT NULL, + state VARCHAR(15) NOT NULL, + last_submit DATETIME NOT NULL +); + +CREATE TABLE IF NOT EXISTS alph_mhs_realv2( + id INT NOT NULL PRIMARY KEY AUTO_INCREMENT, + user VARCHAR(64) NOT NULL, + miner VARCHAR(64) NOT NULL, + date DATETIME NOT NULL, + mhs30m DECIMAL(32, 6) NOT NULL, + mhs24h DECIMAL(32, 6) NOT NULL, + state VARCHAR(15) NOT NULL, + last_submit DATETIME NOT NULL +); + +CREATE TABLE IF NOT EXISTS alph_minersv2( + id INT NOT NULL PRIMARY KEY AUTO_INCREMENT, + user VARCHAR(64) NOT NULL, + miner VARCHAR(64) NOT NULL, + date DATETIME NOT NULL, + accepts DECIMAL(16,8) NOT NULL, + state VARCHAR(10) NOT NULL, + last_submit DATETIME NOT NULL +); + + +CREATE TABLE IF NOT EXISTS alph_blkreportprofitv2( + date DATETIME NOT NULL, + height INT NOT NULL PRIMARY KEY, + hash VARCHAR(255) NOT NULL, + reward DECIMAL(32,8) NOT NULL, + fees DECIMAL(32,8), + state TINYINT NOT NULL +); + + +CREATE TABLE IF NOT EXISTS `alph_pool_blkstats` ( + `id` INT(10) NOT NULL AUTO_INCREMENT, + `date` DATETIME NOT NULL, + `height` INT(10), + `hash` VARCHAR(128), + `pow` VARCHAR(128), + `net_target` VARCHAR(128), + `submit` VARCHAR(64), + `success` TINYINT(1), + `accepts` DECIMAL(32,6), + `rejects` DECIMAL(32,6), + `reward` DECIMAL(32,6), + `fee` DECIMAL(32,6), + `nonce` VARCHAR(64), + `subidx` INT(10), + PRIMARY KEY (`id`) +); + +CREATE TABLE `alph_miners` ( + `id` INT(10) NOT NULL AUTO_INCREMENT, + `date` DATETIME NOT NULL, + `fromip` VARCHAR(64), + `state` VARCHAR(64), + `online` DATETIME, + `offline` DATETIME, + `retry` INT(10), + `duration` DECIMAL(12,6), + `protocol` VARCHAR(64), + `user` VARCHAR(128), + `miner` VARCHAR(128), + `refindex` VARCHAR(128), + `diff` DECIMAL(32,6), + `height` INT(10), + `accepts` DECIMAL(32,6), + `rejects` DECIMAL(32,6), + `ratio` DECIMAL(32,6), + `staleds` DECIMAL(32,6), + `lows` DECIMAL(32,6), + `duplicates` DECIMAL(32,6), + `formats` DECIMAL(32,6), + `others` DECIMAL(32,6), + `is_disabled` TINYINT(1), + `last_submit` DATETIME, + `submits` INT(10), + `blocks` INT(10), + `orphans` INT(10), + `orphan_ratio` DECIMAL(32,6), + PRIMARY KEY (`id`) +); + +CREATE TABLE `alph_miners_stats` ( + `id` INT(10) NOT NULL AUTO_INCREMENT, + `date` DATETIME NOT NULL, + `user` VARCHAR(128), + `miner` VARCHAR(128), + `refindex` VARCHAR(128), + `shares5m` DECIMAL(32,6), + `shares15m` DECIMAL(32,6), + `shares30m` DECIMAL(32,6), + `shares1h` DECIMAL(32,6), + `shares3h` DECIMAL(32,6), + `shares6h` DECIMAL(32,6), + `shares12h` DECIMAL(32,6), + `shares24h` DECIMAL(32,6), + `shares48h` DECIMAL(32,6), + `rejects5m` DECIMAL(32,6), + `rejects15m` DECIMAL(32,6), + `rejects30m` DECIMAL(32,6), + `rejects1h` DECIMAL(32,6), + `rejects3h` DECIMAL(32,6), + `rejects6h` DECIMAL(32,6), + `rejects12h` DECIMAL(32,6), + `rejects24h` DECIMAL(32,6), + `rejects48h` DECIMAL(32,6), + `mhs5m` DECIMAL(32,6), + `mhs15m` DECIMAL(32,6), + `mhs30m` DECIMAL(32,6), + `mhs1h` DECIMAL(32,6), + `mhs3h` DECIMAL(32,6), + `mhs6h` DECIMAL(32,6), + `mhs12h` DECIMAL(32,6), + `mhs24h` DECIMAL(32,6), + `mhs48h` DECIMAL(32,6), + `ratio5m` DECIMAL(32,6), + `ratio15m` DECIMAL(32,6), + `ratio30m` DECIMAL(32,6), + `ratio1h` DECIMAL(32,6), + `ratio3h` DECIMAL(32,6), + `ratio6h` DECIMAL(32,6), + `ratio12h` DECIMAL(32,6), + `ratio24h` DECIMAL(32,6), + `ratio48h` DECIMAL(32,6), + PRIMARY KEY (`id`) +); + +CREATE TABLE `alph_blk_height_detail` ( + `id` INT(10) NOT NULL AUTO_INCREMENT, + `date` DATETIME NOT NULL, + `from` INT(10), + `to` INT(10), + PRIMARY KEY (`id`) +); + +CREATE TABLE `alph_blk_detail` ( + `id` INT(10) NOT NULL AUTO_INCREMENT, + `date` DATETIME NOT NULL, + `height` INT(10), + `hash` VARCHAR(128), + `user` VARCHAR(128), + `miner` VARCHAR(128), + `refindex` VARCHAR(128), + `success` TINYINT(1), + `miner_diff` DECIMAL(32,6), + `pool_diff` DECIMAL(32,6), + `nonce` VARCHAR(64), + `subidx` INT(10), + PRIMARY KEY (`id`) +); + +CREATE TABLE `alph_blk_new` ( + `id` INT(10) NOT NULL AUTO_INCREMENT, + `date` DATETIME NOT NULL, + `height` INT(10), + `hash` VARCHAR(128), + `success` TINYINT(1), + `nonce` VARCHAR(64), + `subidx` INT(10), + PRIMARY KEY (`id`) +); \ No newline at end of file diff --git a/public/retry.js b/public/retry.js new file mode 100644 index 0000000..bfb5db9 --- /dev/null +++ b/public/retry.js @@ -0,0 +1,33 @@ +/** + * 异步任务重试器 + * @param {Function} task 异步任务 + * @param {Number} maxRetries 最大重试次数 + * @param {Number} delay 重试间隔(秒) + * @returns + */ +async function executeWithRetry(task, maxRetries, delay) { + let attempts = 0; + + while (attempts < maxRetries) { + try { + // 尝试执行异步任务 + const result = await task(); + // console.log("任务成功"); + return result; // 成功时返回结果 + } catch (error) { + attempts++; + console.error(`尝试 ${attempts} 失败:`, error.message); + + if (attempts >= maxRetries) { + console.error("已达最大重试次数,任务失败。"); + throw error; // 达到最大重试次数时抛出错误 + } + + console.log(`等待 ${delay} 秒后重试...`); + // 等待指定时间后再重试 + await new Promise((resolve) => setTimeout(resolve, delay * 1000)); + } + } +} + +module.exports = executeWithRetry \ No newline at end of file diff --git a/public/score.js b/public/score.js new file mode 100644 index 0000000..48d335e --- /dev/null +++ b/public/score.js @@ -0,0 +1,48 @@ +// 计算标准差 +function caculate_standar_deviation(data) { + // 计算数学期望(均值) + const calculateMean = (values) => { + const total = values.reduce((acc, value) => acc + parseFloat(value), 0); + return total / values.length; + }; + + // 计算标准差 + const calculateStandardDeviation = (values, mean) => { + const variance = values.reduce((acc, value) => acc + Math.pow(parseFloat(value) - mean, 2), 0) / values.length; + return Math.sqrt(variance); + }; + + // 计算每个用户的标准差 + const results = Object.keys(data).reduce((acc, user) => { + const values = data[user]; + const mean = calculateMean(values); + const stddev = calculateStandardDeviation(values, mean); + acc[user] = stddev; + return acc; + }, {}); + return results; +} + +/** + * 计算每个用户最终得分,满分为100分 + * @param {Array} alluser_mhs24h 每个用户过去24小时平均算力 + * @param {Number} hash_percent 24小时平均算力权重 + * @returns 每个用户最终得分 + */ +function score(alluser_mhs24h, hash_percent = 1) { + // 提取 mhs24h 数值 + const hashrateValues = alluser_mhs24h.map((obj) => obj.mhs24h); + + // 计算总和 + const totalHashrate = hashrateValues.reduce((sum, value) => sum + value, 0); + + const result = {}; + + // 计算每个用户的算力占比 + for (let { user, mhs24h } of alluser_mhs24h) { + result[user] = (mhs24h / totalHashrate) * hash_percent; + } + + return result; +} +module.exports = { caculate_standar_deviation, score }; diff --git a/public/times.js b/public/times.js new file mode 100644 index 0000000..8b97f1c --- /dev/null +++ b/public/times.js @@ -0,0 +1,52 @@ +class Times { + static bjTime(dateForm) { + if (dateForm === "") { + //解决deteForm为空传1970-01-01 00:00:00 + return ""; + } else { + var dateee = new Date(dateForm).toJSON(); + var date = new Date(+new Date(dateee) + 8 * 3600 * 1000) + .toISOString() + .replace(/T/g, " ") + .replace(/\.[\d]{3}Z/, ""); + return date; + } + } + + static utcTime(dateForm) { + if (dateForm === "") { + //解决deteForm为空传1970-01-01 00:00:00 + return ""; + } else { + var dateee = new Date(dateForm).toJSON(); + var date = new Date(+new Date(dateee)) + .toISOString() + .replace(/T/g, " ") + .replace(/\.[\d]{3}Z/, ""); + return date; + } + } + + static times() { + const date = new Date(); + const y = date.getFullYear(); + const M = String(date.getMonth() + 1).padStart(2, '0'); + const d = String(date.getDate()).padStart(2, '0'); + const h = String(date.getHours()).padStart(2, '0'); + const m = String(date.getMinutes()).padStart(2, '0'); + const s = String(date.getSeconds()).padStart(2, '0'); + + return [ + `${y}-${M}-${d} ${h}:${m}`, // 格式:YYYY-MM-DD HH:mm + `${y}-${M}-${d} ${h}:${m}:${s}`, // 格式:YYYY-MM-DD HH:mm:ss + `${y}-${M}-${d}`, // 格式:YYYY-MM-DD + `${m}`, // 分钟格式:mm + `${h}`, // 小时格式:HH + `${d}` // 日期格式:DD + ]; + } + + } + + module.exports = Times; + \ No newline at end of file diff --git a/src/blanace.js b/src/blanace.js new file mode 100644 index 0000000..e620e9f --- /dev/null +++ b/src/blanace.js @@ -0,0 +1,239 @@ +const Times = require("../public/times"); +// const executeWithRetry = require("./public/retry") +const Init = require("./init"); + +class Balance extends Init { + constructor(coin) { + const method = "balance"; + super(coin, method); + } + + async query_min_height() { + try { + const sql = `select MIN(max_height) AS min_height from wallet_in where coin = ? and state = ?; `; + const result = await this.distribution.exec(sql, [this.coin, 0]); + return result; + } catch (err) { + throw err; + } + } + + async query_transaction_state(height) { + try { + const sql = `SELECT * FROM sendinfo WHERE coin = ? AND height >= ?;`; + const result = await this.balancedb.exec(sql, [this.coin, height]); + return result; + } catch (err) { + throw err; + } + } + + async query_now_height(last_height){ + try{ + const [chain_height, [db_height]] = await Promise.all([this.node.getblockcount(), this.query_min_height()]) + return chain_height > db_height.min_height + this.MAX_MATURE && chain_height > last_height + 2// 在成熟高度基础上再+2高度,防止pool_account转账未更新 + } catch(err){ + throw err + } + } + + async update_wallet_in(ids) { + try { + const sql = `UPDATE wallet_in SET state = 1 WHERE id IN (?);`; + await this.distribution.exec_transaction(sql, [ids]); + } catch (err) { + throw err; + } + } + + async insert_wallet_out_AND_update_wallet_in(data) { + try { + let sql = `INSERT INTO wallet_outv2(coin, user, address, date, max_height, tx_id, amount, tx_fee) VALUES `; + const values = []; + let id = []; + data.forEach((item) => { + const { username, qty, fee, txid, time, userid, height, ids } = item; + if (txid) { + id = id.concat(ids.split(",")); + values.push(this.coin, userid, username, Times.utcTime(time * 1000), height, txid, qty, fee); + sql += `(?,?,?,?,?,?,?,?), `; + } + }); + if (values.length === 0) { + console.log(`${Date.now()}: ${this.coin}无新增转账`); + return; + } + sql = sql.slice(0, -2); + const wallet_in_sql = `UPDATE wallet_in SET state = 1 WHERE id IN (?);`; + await Promise.all([this.distribution.exec_transaction(sql, values)], this.distribution.exec_transaction(wallet_in_sql, [id])); + } catch (err) { + throw err; + } + } + + async main() { + try { + const min_height = await this.query_min_height(); + if (min_height.length === 0 || !min_height[0].min_height) { + console.log(`${Times.bjTime(Date.now().valueOf())}: ${this.coin}无需要更新的数据`); + return true; + } + const need_update_data = await this.query_transaction_state(min_height[0].min_height); + if (need_update_data.length === 0) { + console.log(`${Times.bjTime(Date.now().valueOf())}: ${this.coin}钱包暂无转账信息`); + // await executeWithRetry(this.main(), 12, 60 * 5); + return true; + } + await this.insert_wallet_out_AND_update_wallet_in(need_update_data); + return false + } catch (err) { + throw err; + } + } +} + +class DGBBlance extends Init { + constructor(coin) { + const method = "balance"; + super(coin, method); + } + + async query_min_height() { + try { + const sql = `select MIN(max_height) AS min_height from wallet_in where coin like "dgb%" and state = ?; `; + const result = await this.distribution.exec(sql, [0]); + return result; + } catch (err) { + throw err; + } + } + + async check_height() { + try { + const my_sql = ` + SELECT height FROM dgbs_blkreportprofitv2 WHERE date >= "2024-11-26 00:00:00" and date < "2024-11-27 00:00:00" + UNION + SELECT height FROM dgbo_blkreportprofitv2 WHERE date >= "2024-11-26 00:00:00" and date < "2024-11-27 00:00:00" + UNION + SELECT height FROM dgbq_blkreportprofitv2 WHERE date >= "2024-11-26 00:00:00" and date < "2024-11-27 00:00:00";`; + const balance_sql = `SELECT height FROM balanceinfo WHERE height > 20402916 AND height <= 20408691;`; + const [my_data, balance_data] = await Promise.all([this.distribution.exec(my_sql), this.balancedb.exec(balance_sql)]); + const my_result = []; + const balance_result = []; + for (let item of my_data) { + my_result.push(item.height); + } + for (let item of balance_data) { + balance_result.push(item.height); + } + // 找出 array1 中不在 array2 的元素 + const onlyInArray1 = my_result.filter((item) => !balance_result.includes(item)); + + // 找出 array2 中不在 array1 的元素 + const onlyInArray2 = balance_result.filter((item) => !my_result.includes(item)); + + // 合并结果 + const difference = [...onlyInArray1, ...onlyInArray2]; + return difference; + console.log(difference); // 输出: [1, 2, 5, 6] + // for(let item of difference){ + // if(!my_result.includes(item)){ + // console.log(`${item}不在池子报块中`); + // } else { + // console.log(`${item}不在钱包报块中`); + // } + // } + } catch (err) { + throw err; + } + } + + async query_now_height(last_height){ + try{ + const sql = `SELECT MAX(max_height) AS max_height FROM wallet_in WHERE coin Like "dgb%" AND state = ?;` + const [chain_height, [db_height]] = await Promise.all([this.node.getblockcount(), this.distribution.exec(sql, [0])]) + return chain_height > db_height.max_height + this.MAX_MATURE && chain_height > last_height + 2 + } catch(err){ + throw err + } + } + + async query_transaction_state(height) { + try { + const sql = `SELECT * FROM sendinfo WHERE coin LIKE "dgb%" AND height >= ?;`; + const result = await this.balancedb.exec(sql, [height]); + return result; + } catch (err) { + throw err; + } + } + + async query_coin(id) { + try { + const sql = `SELECT coin FROM wallet_in WHERE id = ?;`; + const result = await this.distribution.exec(sql, [id]); + return result; + } catch (err) { + throw err; + } + } + + async update_wallet_in(ids) { + try { + const sql = `UPDATE wallet_in SET state = 1 WHERE id IN (?);`; + await this.distribution.exec_transaction(sql, [ids]); + return; + } catch (err) { + throw err; + } + } + + async insert_wallet_out_AND_update_wallet_in(data) { + try { + let sql = `INSERT INTO wallet_outv2(coin, user, address, date, max_height, tx_id, amount, tx_fee) VALUES `; + const values = []; + let id = []; + data.forEach((item) => { + const { coin, username, qty, fee, txid, time, userid, height, ids } = item; + if (txid) { + id = id.concat(ids.split(",")); + values.push(coin, userid, username, Times.utcTime(time * 1000), height, txid, qty, fee); + sql += `(?,?,?,?,?,?,?,?), `; + } + }); + sql = sql.slice(0, -2); + const wallet_in_sql = `UPDATE wallet_in SET state = 1 WHERE id IN (?);`; + await Promise.all([this.distribution.exec_transaction(wallet_in_sql, [id]), this.distribution.exec_transaction(sql, values)]); + return; + } catch (err) { + throw err; + } + } + + async main() { + try { + const min_height = await this.query_min_height(); + if (min_height.length === 0 || !min_height[0].min_height) { + console.log(`${Date.now()}: dgb无需要更新的数据`); + return true + } + const need_update_data = await this.query_transaction_state(min_height[0].min_height); + if (need_update_data.length === 0) { + console.log(`${Date.now()}: dgb转账未完成`); + return true + } + const data = []; + for (let item of need_update_data) { + const { username, qty, fee, txid, time, userid, height, ids } = item; + const coin = await this.query_coin(ids.split(",")[0]); + data.push({ coin: coin[0].coin, username, qty, fee, txid, time, userid, height, ids }); + } + await this.insert_wallet_out_AND_update_wallet_in(data); + return false + } catch (err) { + throw err; + } + } +} + +module.exports = { Balance, DGBBlance }; diff --git a/src/clear.js b/src/clear.js new file mode 100644 index 0000000..30a88e0 --- /dev/null +++ b/src/clear.js @@ -0,0 +1,92 @@ +const Times = require("../public/times"); +const Init = require("./init"); + +class ClearDBData extends Init { + constructor(coin) { + const method = "clear" + super(coin, method); + } + + /** + * 删除X小时前的sharesdb数据,hours必须大于24小时 + * @param {Number} hours + * @returns + */ + async clearSharesDB(hours) { + if(hours < 24){ + console.log(`sharesdb最多只能删除24小时之前的数据`); + return + } + try { + // 修正查询语句,去掉 'from' 和 'to' 字段的单引号 + const query_sharesdb_table_sql = ` + SELECT \`from\`, \`to\` + FROM ${this.coin}_blk_height_detail + WHERE date <= NOW() - INTERVAL ? HOUR; + `; + + // 获取需要删除的高度范围 + const need_del_height = await this.sharesdb.exec(query_sharesdb_table_sql, [hours]); + if (need_del_height.length === 0) { + console.log(`${Date.now()}:${this.coin}暂无需要清理的shares detail`); + return; + } + + // 生成删除表的 SQL 语句 + let delete_sql = `DROP TABLE IF EXISTS `; + need_del_height.forEach((item) => { + const { from, to } = item; + const table = `${this.coin}_block_detail_${from}_${Number((to - 1).toFixed(0))}`; + delete_sql += `${table}, `; + }); + delete_sql = delete_sql.slice(0, -2) + ";"; // 去掉最后的逗号并加上分号 + // 执行删除表的 SQL 语句 + await this.sharesdb.exec(delete_sql); + } catch (err) { + throw err; + } + } + + /** + * 删除pooldb,只支持0时刻 + * @param {*} start_time 开始时间 yyyy-MM-dd hh-mm-ss格式 例如"2024-11-11 00:00:00" + * @param {*} end_time 同上 + * @returns + */ + async clearPoolDB(start_time, end_time){ + try{ + const interval = 86400000 // 1天的毫秒数 + const start_ts = new Date(start_time).valueOf() + const end_ts = new Date(end_time).valueOf() + const count = Number((end_ts - start_ts).toFixed(0)) / interval + if (!Number.isInteger(count)){ + console.log(`给定的${start_time}和${end_time}有误!`); + return + } + let sql = `DROP TABLE IF EXISTS ` + for(let i=0; i 0; + } + + // 查询当前所有满足查验要求的报块,即 <= 最高成熟高度 且 状态为待定(0)的报块 + async query_need_update_data(mature_height) { + try { + const sql = `SELECT height FROM ${this.coin}_blkreportprofitv2 WHERE height <= ? AND state = ?;`; + const data = await this.distribution.exec(sql, [mature_height, 0]); + if (!data || data.length === 0) { + console.log(`${mature_height}高度之前暂无需要更新的报块`); + return false; + } + return data.map(item => item.height); + } catch (err) { + throw err; + } + } + + // 查询当前最高成熟高度,即当前最新高度 - MAX_MATURE + async query_maxture_height() { + try { + const now_height = await this.node.getblockcount(); + const max_height = Number(now_height) - this.MAX_MATURE; + if (!this.isPositiveInteger(max_height)) { + console.log(`当前节点最大高度为${now_height}, 当前成熟高度为${max_height}`); + return false; + } else { + return max_height; + } + } catch (err) { + throw err; + } + } + + // 通过报块地址,校验高度是否为本矿池报块 + async verify_block(height) { + try { + return await this.node.verify_block(height, this.REPORT_ADDRESS); + } catch (err) { + throw err; + } + } + // 根据校验通过和校验失败的高度更新blkreportprofit表,1为成功,2为失败 + async update_blkreporprofit_state(suc_heights, err_heights) { + try { + const sql = `UPDATE ${this.coin}_blkreportprofitv2 SET state = ? WHERE height IN (?);`; + if (err_heights.length === 0 && suc_heights.length !== 0) { + // 只有 suc_heights 更新 + await this.distribution.exec_transaction(sql, [1, suc_heights]); + } else if (err_heights.length !== 0 && suc_heights.length === 0) { + // 只有 err_heights 更新 + await this.distribution.exec_transaction(sql, [2, err_heights]); + } else if (err_heights.length !== 0 && suc_heights.length !== 0) { + // 同时更新 suc_heights 和 err_heights + await Promise.all([ + this.distribution.exec_transaction(sql, [1, suc_heights]), + this.distribution.exec_transaction(sql, [2, err_heights]), + ]); + } + return; + } catch (err) { + throw err; + } + } + + + /** + * 1,查验区块链最高成熟高度 + * 2,查验blk表中所有<=最高成熟高度 且 状态为待定(0)的区块 + * 3,遍历这些区块高度,并通过node.verify方法校验 + * 4,将校验通过(正常报块)和校验不通过(孤块)分为两组 + * 5,将正常报块组的状态改为1,将孤块组状态改为2 + * @returns + */ + async main() { + try { + const mature_max_height = await this.query_maxture_height(); + if (!mature_max_height) { + return; + } + const need_update_heights = await this.query_need_update_data(mature_max_height); + if (!need_update_heights) { + return; + } + const suc_heights = []; + const err_heights = []; + for (let item of need_update_heights) { + const verify_result = await this.verify_block(item); + if (!verify_result) { + err_heights.push(item); + } else { + suc_heights.push(item); + } + } + if(err_heights.length === 0 && need_update_heights.length !== 0){ + console.log(`${mature_max_height}之前有新报块,且无孤块`); + } else if(err_heights.length !== 0 && need_update_heights.length === 0){ + console.log(`${mature_max_height}之前有新报块,但这些报块都是孤块`); + } else if(err_heights.length !== 0 && need_update_heights.length !== 0){ + console.log(`${mature_max_height}之前有新报块,且其中有孤块`); + } + await this.update_blkreporprofit_state(suc_heights, err_heights); + return + } catch (err) { + throw err; + } + } + } + +module.exports = Confirm \ No newline at end of file diff --git a/src/distribution.js b/src/distribution.js new file mode 100644 index 0000000..b2f60f5 --- /dev/null +++ b/src/distribution.js @@ -0,0 +1,376 @@ +const Times = require("../public/times"); +const Decimal = require("decimal"); +const Init = require("./init"); + +/** + * 查询规定窗口期内的总报块奖励,查询规定窗口期各个挖矿账户24小时平均算力 + * 通过各个账户24小时平均算力,计算出各个账户的算力占比 + * 根据算力占比对总报块奖励进行分配 + * 将分配的结果写入wallet_in表 + */ +class Distribution extends Init { + constructor(coin) { + const method = "distribution"; + super(coin, method); + } + /** + * 计算每个用户最终得分,满分为100分 + * @param {Array} alluser_mhs24h 每个用户过去24小时平均算力 + * @param {Number} hash_percent 24小时平均算力权重 + * @returns 每个用户最终得分 + */ + score(alluser_mhs24h, hash_percent = 1) { + // 提取 mhs24h 数值 + const hashrateValues = alluser_mhs24h.map((obj) => obj.mhs24h); + // 计算总和 + const totalHashrate = hashrateValues.reduce((sum, value) => sum + value, 0); + const result = {}; + // 计算每个用户的算力占比 + for (let { user, mhs24h } of alluser_mhs24h) { + result[user] = (mhs24h / totalHashrate) * hash_percent; + } + return result; + } + + /** + * 查询指定日期用户的24小时总算力 + * @param {Date} date 采用yyyy-MM-dd格式(只支持0时刻),例如"2024-11-11" + */ + async query_last_day_hashrate(date) { + try { + const sql = `SELECT user, SUM(mhs24h) AS mhs24h FROM ${this.coin}_mhsv2 WHERE date = ? GROUP BY user;`; + const data = await this.hashratedb.exec(sql, [date + " 00:00:00"]); + if (data.length === 0) { + return false; + } else { + const result = []; + for (let item of data) { + const { user, mhs24h } = item; + result.push({ user, mhs24h: Number(mhs24h) }); + } + return result; + } + } catch (err) { + throw err; + } + } + + /** + * 查询指定日期报块总奖励 + * @param {Date} start_time 采用yyyy-MM-dd格式,例如"2024-11-11" + * @param {Date} end_time 同上 + * @return {Number} 昨日总奖励 + */ + async query_last_day_reward(start_time, end_time) { + try { + const sql = `SELECT MAX(height) AS max_height, SUM(reward) AS reward FROM ${this.coin}_blkreportprofitv2 WHERE date >= ? AND date < ? AND state = ?;`; + const data = await this.distributiondb.exec(sql, [start_time, end_time, 1]); + if (data.length === 0 || !data[0].reward) { + return 0; + } else { + data[0].reward = Number(data[0].reward); + return data; + } + } catch (err) { + throw err; + } + } + /** + * 校验昨天所有报块是否成熟 + * @param {Date} start_time 采用yyyy-MM-dd hh:mm:ss格式,例如"2024-11-11 00:00:00" + * @param {Date} end_time 同上 + * @returns + */ + async query_last_day_if_mature(start_time, end_time) { + try { + const sql = `SELECT count(*) AS count FROM ${this.coin}_blkreportprofitv2 WHERE date >= ? AND date < ? AND state = ?;`; + let data; + + // 使用循环替代递归 + do { + await this.sleep(1000 * 60 * 15); // 等待 15 分钟 + data = await this.distributiondb.exec(sql, [start_time, end_time, 0]); + + // 动态获取当前小时 + const currentHour = Number(Times.times()[4]); + if(this.coin === "rxd"){ + if (currentHour >= 9) { + console.log("已超过凌晨 9 点,停止检查。"); + return false; + } + } else { + if (currentHour >= 4) { + console.log("已超过凌晨 4 点,停止检查。"); + return false; + } + } + } while (data[0].count !== 0); + + return true; + } catch (err) { + throw err; + } + } + + /** + * 查询当前挖矿账户状态,包括起付额和钱包地址 + * @returns + */ + async query_users_address() { + try { + const sql = ` + SELECT + a.miner_user AS 'user', + b.balance AS 'address', + b.amount AS 'amount', + b.active AS 'state' + FROM + user_account_balance b + LEFT JOIN user_miner_account a ON b.ma_id = a.id + WHERE + a.coin = ? + AND b.status = 0;`; + const data = await this.users_addresses.exec(sql, [this.coin]); + if (!data || data.length === 0) { + return false; + } + return data; + } catch (err) { + throw err; + } + } + + /** + * 校验报块 + * @param {Number} height + * @returns + */ + async verify_block(height) { + try { + const data = await this.node.verify_block(height, this.REPORT_ADDRESS); + if (data && typeof data === "object") { + return this.node.block(data); + } + return false; + } catch (err) { + throw err; + } + } + + /** + * 将漏掉的报块插入到数据库中 + * @param {Array} data [{time: 1708256800, height: 123456, hash: "0x1234567890", reward: 100, fees: 10}] + */ + async insert_blkreportprofit(data) { + try { + let sql = `INSERT INTO ${this.coin}_blkreportprofitv2 (date, height, hash, reward, fees, state) VALUES `; + const values = []; + data.forEach((item) => { + const { time, height, hash, block_reward, block_fees } = item; + sql += `(?,?,?,?,?,?), `; + values.push(Times.utcTime(time * 1000), height, hash, block_reward, block_fees, 1); + }); + sql = sql.slice(0, -2); + await this.distributiondb.exec_transaction(sql, values); + } catch (err) { + throw err; + } + } + + /** + * 校验昨日是否有漏掉报块的情况 + * @param {Date} date 当前时间 + * @returns + */ + async check_last_data_blk(date) { + try { + const ts = new Date(date).valueOf() - 86400000; // 前一天 + const yMd = Times.utcTime(ts).split(" ")[0]; // "2024-10-11" + const ymd = yMd.split("-"); // ["2024", "10", "11"] + const table_name = `${this.coin}_pool_blkstats_${ymd[0]}${ymd[1]}${ymd[2]}`; + const confirm_if_table = `SHOW TABLES LIKE '${table_name}';`; + const confirm_result = await this.pooldb.exec(confirm_if_table); + if (!confirm_result || confirm_result.length === 0) { + console.log(`pool_blkstats表未更新,退出本次执行,请手动校验`); + return false; + } + const heights = []; + const query_blk_pool_sql = `SELECT height FROM ${table_name} WHERE DATE(date) >= ?;`; + const [master_data, slave_data] = await Promise.all([this.pooldb.exec(query_blk_pool_sql, [yMd]), this.pooldb_slave.exec(`SELECT height FROM ${this.coin}_pool_blkstats WHERE DATE(date) >= ?;`, [yMd])]) + const pool_data = master_data.concat(slave_data); + for (let item of pool_data) { + heights.push(item.height); + } + const blkreport_heighs = []; + const query_blkreport_sql = `SELECT height FROM ${this.coin}_blkreportprofitv2 WHERE DATE(date) = ? AND state = ?;`; + const blkreport_data = await this.distributiondb.exec(query_blkreport_sql, [yMd, 1]); + for (let item of blkreport_data) { + blkreport_heighs.push(item.height); + } + const setB = new Set(blkreport_heighs); + const need_check_heights = heights.filter((item) => !setB.has(item)); + + if (need_check_heights.length === 0) { + console.log(`${this.coin}check 完成,没有需要重新校验的区块`); + return true; + } + const need_insert_data = []; + for (let height of need_check_heights) { + const result = await this.verify_block(height); + if (result) { + need_insert_data.push(result); + } + } + if (need_insert_data.length === 0) { + console.log(`${this.coin}check 完成,没有需要insert的区块`); + return true; + } + await this.insert_blkreportprofit(need_insert_data); + console.log(`${this.coin}check 完成,已将${this.coin}漏掉的报块全部插入blk表中!`); + return true; + } catch (err) { + throw err; + } + } + + /** + * 更新wallet_in表中不满足起付额的用户状态 + * @param {Array} min_amount [{"user": amount}] + * @returns + */ + async update_state(min_amount) { + try { + const sql = `SELECT user, SUM(amount) AS profit FROM wallet_in WHERE coin = ? AND state = ? GROUP BY user;`; + const data = await this.distributiondb.exec(sql, [this.coin, 2]); // [] + if (!data || data.length === 0) { + return + } + const need_update_state = []; + for (let item of data) { + if (item.profit >= min_amount[item.user]) { + need_update_state.push(item.user); + } + } + if (need_update_state.length === 0) { + console.log(`${this.coin}无需要更新状态的用户(2->0)`); + return; + } + const values = []; + let update_sql = `UPDATE wallet_in SET state = ? WHERE coin = ? AND user = ?;`; + need_update_state.forEach(async (item) => { + const { user } = item; + update_sql += `(?, ?, ?), `; + values.push(0, this.coin, user); + }); + update_sql = update_sql.slice(0, -2); + await this.distributiondb.exec_transaction(update_sql, values); + } catch (err) { + throw err; + } + } + + /** + * 将最终分配数据插入wallet_in表中 + * @param {Array} data [{coin, user, address, create_date, should_out_date, max_height, amount, state}] + */ + async insert_wallet_in(data) { + try { + let sql = `INSERT INTO wallet_in(coin, user, address, create_date, should_out_date, max_height, amount, state) VALUES `; + const values = []; + data.forEach((item) => { + const { coin, user, address, create_date, should_out_date, max_height, amount, state } = item; + values.push(coin, user, address, create_date, should_out_date, max_height, amount, state); + sql += `(?,?,?,?,?,?,?,?), `; + }); + sql = sql.slice(0, -2); + await this.distributiondb.exec_transaction(sql, values); + } catch (err) { + throw err; + } + } + async main(start_time, end_time) { + try { + const _if = await this.query_last_day_if_mature(start_time, end_time); + if (!_if) { + return; + } + const check_result = await this.check_last_data_blk(end_time) + if (!check_result) { + return; + } + const [last_day_mhs24h, last_day_reward, users_address] = await Promise.all([this.query_last_day_hashrate(end_time), this.query_last_day_reward(start_time, end_time), this.query_users_address()]); + if (!last_day_mhs24h || !last_day_reward || !users_address || !check_result) { + console.log(`查询错误`); + console.log("last_day_mhs24h:", last_day_mhs24h); + console.log("last_day_reward:", last_day_reward); + console.log("users_address:", users_address); + return; + } + const min_amount = {}; + const score_ratio = this.score(last_day_mhs24h, 1); + const reward = Number(last_day_reward[0].reward) * (1 - this.POOL_FEE); + const max_height = last_day_reward[0].max_height; + let should_out_date; // 实际转账时间 + let accuracy; // user保留小数位数,100为2位,以此类推 + let count // pool_account 保留小数位数 + if (this.coin === "nexa") { + should_out_date = Times.utcTime(new Date(end_time).valueOf() + 1000 * 60 * 60 * 24 * 7); + accuracy = 100; + count = 2 + } else if (this.coin === "rxd") { + accuracy = 100; + should_out_date = end_time; + count = 2 + } else { + should_out_date = end_time; + accuracy = 100000000; + count = 8 + } + let user_profit = 0; + const result = []; + let pool_account_address; + for (let user in score_ratio) { + const profit = Math.floor(score_ratio[user] * reward * accuracy) / accuracy; + if(profit === 0){ + continue + } + user_profit += profit; + for (let item of users_address) { + if (item.user === "pool_account") { + pool_account_address = item.address; + } + if (user === item.user) { + min_amount[item.user] = item.min_amount; // 今天有变动的账户才会更新最小提现金额 + let state; + if (profit >= item.amount && item.state === 0) { + // 账号激活自动提现且当天收益满足起付额,state用0 + state = 0; + } else if (profit < item.amount && item.state === 0) { + // 账号激活自动提现但当天收益不满足起付额,state用2 + state = 2; + } else if (profit >= item.amount && item.state === 1) { + // 账号未激活自动提现但当天收益满足起付额,state用3 + state = 3; + } else { + // 账号未激活自动提现且当天收益不满足起付额,state用4 + state = 4; + } + result.push({ coin: this.coin, user, address: item.address, create_date: end_time, should_out_date, max_height, amount: profit, state }); + } + } + } + const num1 = new Decimal(last_day_reward[0].reward); + const num2 = new Decimal(user_profit); + const pool_account_amount = num1.sub(num2).toString(); + result.push({ coin: this.coin, user: "pool_account", address: pool_account_address, create_date: end_time, should_out_date, max_height, amount: Number(Number(pool_account_amount).toFixed(count)), state: 0 }); + console.log(result); + await this.insert_wallet_in(result); + await this.update_state(min_amount); + return; + } catch (err) { + throw err; + } + } +} + +module.exports = Distribution; \ No newline at end of file diff --git a/src/hashrate.js b/src/hashrate.js new file mode 100644 index 0000000..555167f --- /dev/null +++ b/src/hashrate.js @@ -0,0 +1,366 @@ +const Times = require("../public/times"); +// const executeWithRetry = require("./public/retry") +const Init = require("./init"); + +class HashRate extends Init { + constructor(coin) { + const method = "hashrate"; + super(coin, method); + this.diffOneShareHashsAvg = 2 ** 32 - 1; + } + + /** + * 计算hash + * @param {Number} accepts 时段内接受总数 + * @param {Number} seconds 时段秒数 + * @param {String} unit H/s、KH/s、MH/s、GH/s、TH/s、PH/s、EH/s + * @returns + */ + calculate_hashrate(accepts, seconds, unit) { + let num; + switch (unit) { + case "H/s": + num = 1; + break; + case "KH/s": + num = 1_000; + break; + case "MH/s": + num = 1_000_000; + break; + case "GH/s": + num = 1_000_000_000; + break; + case "TH/s": + num = 1_000_000_000_000; + break; + case "PH/s": + num = 1_000_000_000_000_000; + break; + case "EH/s": + num = 10 ** 18; + break; + default: + throw `${unit}不是已知单位`; + } + const hashrate = (accepts * this.diffOneShareHashsAvg) / seconds / num; + if(this.coin === "alph"){ + return hashrate * 4 + } else { + return hashrate; + } + } + + /** + * 将主、备查询出来的数据合并 + * @param {*} data [{user:"", miner:"", accepts:100},{user:"", miner:"", accepts:100}...] + * @returns + */ + merge(data) { + // 创建一个 Map 来存储 user 和 miner 组合的结果 + const results = new Map(); + + data.forEach((item) => { + const key = `${item.user}-${item.miner}`; + + if (results.has(key)) { + const existing = results.get(key); + existing.accepts += parseFloat(item.accepts); + if (new Date(item.last_submit) > new Date(existing.last_submit)) { + existing.last_submit = item.last_submit; + } + results.set(key, existing); + } else { + results.set(key, { + user: item.user, + miner: item.miner, + accepts: parseFloat(item.accepts), + last_submit: item.last_submit, + }); + } + }); + + // 将结果转换为数组 + const resultArray = Array.from(results.values()); + return resultArray; + } + + /** + * 查询主库符合时段的表名 + * @param {String} start_time + * @param {String} end_time + * @returns + */ + async query_table(start_time, end_time) { + try { + const sql = `(SELECT date, \`from\`, \`to\` FROM ${this.coin}_blk_height_detail WHERE date >= ? ORDER BY date LIMIT 1) UNION (SELECT date, \`from\`, \`to\` FROM ${this.coin}_blk_height_detail WHERE date >= ? AND date < ?) ORDER BY date;`; + const data = await this.sharesdb.exec(sql, [end_time, start_time, end_time]) + const result = []; + if (data.length !== 0) { + for (let item of data) { + result.push(`${this.coin}_block_detail_${item.from}_${Math.trunc(item.to - 1)}`); + } + } + result.push(`${this.coin}_blk_detail`); + return result; + } catch (err) { + console.log(err); + return []; + } + } + + /** + * 查询从库符合时段的表名 + * @param {String} start_time + * @param {String} end_time + * @returns + */ + async query_slave_table(start_time, end_time) { + try { + const sql = `(SELECT date, \`from\`, \`to\` FROM ${this.coin}_blk_height_detail WHERE date >= ? ORDER BY date LIMIT 1) UNION (SELECT date, \`from\`, \`to\` FROM ${this.coin}_blk_height_detail WHERE date >= ? AND date < ?) ORDER BY date;`; + const data = await this.sharesdb_slave.exec(sql, [end_time, start_time, end_time]) + const result = []; + if (data.length !== 0) { + for (let item of data) { + result.push(`${this.coin}_block_detail_${item.from}_${Math.trunc(item.to - 1)}`); + } + } + result.push(`${this.coin}_blk_detail`); + return result; + } catch (err) { + console.log(err); + return []; + } + } + + // 查询时段内accepts,主从同时查询 + async query_accepts(start_time, end_time, enable) { + try { + if (this.count === undefined) this.count = 0; + if (enable) { + const [tables_name, slave_tables_name] = await Promise.all([this.query_table(start_time, end_time), this.query_slave_table(start_time, end_time)]); + + // 查询主库符合条件的数据 + let sql = ``; + if (tables_name.length <= 1) { + sql = `SELECT MAX(date) AS last_submit, user, miner, SUM(miner_diff) AS accepts FROM ${this.coin}_blk_detail WHERE date >= "${start_time}" AND date < "${end_time}" GROUP BY user, miner;`; + } else { + sql = `SELECT MAX(date) AS last_submit, user, miner, SUM(miner_diff) AS accepts FROM ( `; + for (let i = 0; i < tables_name.length; i++) { + if (i < tables_name.length - 1) { + sql += `SELECT date, user, miner, miner_diff, pool_diff FROM ${tables_name[i]} WHERE date >= "${start_time}" AND date < "${end_time}" \nUNION ALL\n`; + } else { + sql += `SELECT date, user, miner, miner_diff, pool_diff FROM ${tables_name[i]} WHERE date >= "${start_time}" AND date < "${end_time}") AS combined_tables GROUP BY user, miner;`; + } + } + } + let slave_sql = ``; + if (slave_tables_name.length <= 1) { + slave_sql = `SELECT MAX(date) AS last_submit, user, miner, SUM(miner_diff) AS accepts FROM ${this.coin}_blk_detail WHERE date >= "${start_time}" AND date < "${end_time}" GROUP BY user, miner;`; + } else { + slave_sql = `SELECT MAX(date) AS last_submit, user, miner, SUM(miner_diff) AS accepts FROM ( `; + for (let i = 0; i < slave_tables_name.length; i++) { + if (i < slave_tables_name.length - 1) { + slave_sql += `SELECT date, user, miner, miner_diff, pool_diff FROM ${slave_tables_name[i]} WHERE date >= "${start_time}" AND date < "${end_time}" \nUNION ALL\n`; + } else { + slave_sql += `SELECT date, user, miner, miner_diff, pool_diff FROM ${slave_tables_name[i]} WHERE date >= "${start_time}" AND date < "${end_time}") AS combined_tables GROUP BY user, miner;`; + } + } + } + + // // 执行查询,并将结果合并 + const [accepts_data, slave_accepts] = await Promise.all([this.sharesdb.exec(sql), this.sharesdb_slave.exec(slave_sql)]); + const accepts = this.merge(accepts_data.concat(slave_accepts)); // 合并主备accepts + return accepts; + } else { + const tables_name = await this.query_table(start_time, end_time); + let sql = ``; + if (tables_name.length <= 1) { + sql = `SELECT MAX(date) AS last_submit, user, miner, SUM(miner_diff) AS accepts FROM ${this.coin}_blk_detail WHERE date >= "${start_time}" AND date < "${end_time}" GROUP BY user, miner;`; + } else { + sql = `SELECT MAX(date) AS last_submit, user, miner, SUM(miner_diff) AS accepts FROM ( `; + for (let i = 0; i < tables_name.length; i++) { + if (i < tables_name.length - 1) { + sql += `SELECT date, user, miner, miner_diff, pool_diff FROM ${tables_name[i]} WHERE date >= "${start_time}" AND date < "${end_time}" \nUNION ALL\n`; + } else { + sql += `SELECT date, user, miner, miner_diff, pool_diff FROM ${tables_name[i]} WHERE date >= "${start_time}" AND date < "${end_time}") AS combined_tables GROUP BY user, miner;`; + } + } + } + const accepts_data = await this.sharesdb.exec(sql); + const slave_accepts = []; + const accepts = this.merge(accepts_data.concat(slave_accepts)); // 合并主备accepts + return accepts; + } + } catch (err) { + console.error(`Error in query_accepts: ${err.message}`); + await this.sleep(1000 * 15); + if (this.count > 3) { // 重试4次,1分钟 + this.count = 0; + throw err; + } + this.count++; + return this.query_accepts(start_time, end_time, enable); + } + } + + // 查询当天miners状态,排除掉超过1天没有提交的矿工 + async query_miners(time) { + try { + const sql = `SELECT date, user, miner, state, ratio, last_submit FROM ${this.coin}_miners WHERE last_submit >= DATE(?) - INTERVAL 1 DAY;`; + const miners_state = await this.pooldb.exec(sql, [time]); + return miners_state; + } catch (err) { + throw err; + } + } + + async insert_mhs(data) { + if (data.length === 0 || !data || data.size === 0) { + console.log(Date.now(), ":30分钟没有新增矿机提交数据"); + return; + } + try { + let sql = `INSERT INTO ${this.coin}_mhsv2 (user, miner, date, mhs30m, mhs24h, state, last_submit) VALUES `; + const values = []; + data.forEach((item) => { + const { user, miner, date, mhs30m, mhs24h, state, last_submit } = item; + sql += `(?, ?, ?, ?, ?, ?, ?), `; + values.push(user, miner, date, mhs30m, mhs24h, state, last_submit); + }); + sql = sql.slice(0, -2); + await this.hashratedb.exec_transaction(sql, values); + } catch (err) { + throw err; + } + } + + async insert_mhs_real(data) { + if (data.length === 0 || !data || data.size === 0) { + console.log(Date.now(), ":5分钟没有新增矿机提交数据"); + return; + } + try { + const del_sql = `DELETE FROM ${this.coin}_mhs_realv2 WHERE id > 0;`; + let sql = `INSERT INTO ${this.coin}_mhs_realv2 (user, miner, date, mhs30m, mhs24h, state, last_submit) VALUES `; + const values = []; + data.forEach((item) => { + const { user, miner, date, mhs30m, mhs24h, state, last_submit } = item; + sql += `(?, ?, ?, ?, ?, ? ,?), `; + values.push(user, miner, date, mhs30m, mhs24h, state, last_submit); + }); + sql = sql.slice(0, -2); + // sql += ` AS new_values ON DUPLICATE KEY UPDATE date = new_values.date, mhs30m = new_values.mhs30m, mhs24h = new_values.mhs24h, state = new_values.state, last_submit = new_values.last_submit;`; + const sqls = [{ sql: del_sql }, { sql, param: values }]; + await this.hashratedb.exec_transaction_together(sqls); + } catch (err) { + // 处理错误 + console.error("Transaction failed: ", err); + throw err; + } + } + + async query_hashrate_miners_accepts(end_time) { + try { + const ymd_last_30m = Times.utcTime(new Date(end_time).valueOf() - 1000 * 60 * 30); + const ymd_last_24h = Times.utcTime(new Date(end_time).valueOf() - 1000 * 60 * 60 * 24); + const state_sql = `SELECT t1.* +FROM ${this.coin}_minersv2 t1 +INNER JOIN ( + SELECT user, miner, MAX(date) AS max_date + FROM ${this.coin}_minersv2 + WHERE date <= ? + GROUP BY user, miner +) t2 +ON t1.user = t2.user AND t1.miner = t2.miner AND t1.date = t2.max_date;`; + const mhs30m_sql = `SELECT SUM(accepts) AS accepts_30min, user, miner FROM ${this.coin}_minersv2 WHERE date >= ? AND date < ? GROUP BY user, miner;`; + const mhs24h_sql = `SELECT SUM(accepts) AS accepts_24h, user, miner FROM ${this.coin}_minersv2 WHERE date >= ? AND date < ? GROUP BY user, miner;`; + const [state, mhs30m, mhs24h] = await Promise.all([this.hashratedb.exec(state_sql, [end_time]), this.hashratedb.exec(mhs30m_sql, [ymd_last_30m, end_time]), this.hashratedb.exec(mhs24h_sql, [ymd_last_24h, end_time])]); + + const hashrate_map = new Map(); + + state.forEach((item) => { + const { date, user, miner, state, last_submit } = item; + hashrate_map.set(`${user}:${miner}`, { date: end_time, user, miner, state, last_submit, mhs30m: 0, mhs24h: 0 }); + }); + + mhs30m.forEach((item) => { + const { accepts_30min, user, miner } = item; + + const values = hashrate_map.get(`${user}:${miner}`); + + values.mhs30m = this.calculate_hashrate(accepts_30min, 60 * 30, "MH/s"); + + hashrate_map.set(`${user}:${miner}`, values); + }); + mhs24h.forEach((item) => { + const { accepts_24h, user, miner } = item; + const values = hashrate_map.get(`${user}:${miner}`); + + values.mhs24h = this.calculate_hashrate(accepts_24h, 60 * 60 * 24, "MH/s"); + + hashrate_map.set(`${user}:${miner}`, values); + }); + return hashrate_map; + } catch (err) { + throw err; + } + } + + async insert_hashrate_miners_table(end_time) { + try { + const ymd = end_time.split(":"); + const date = ymd[0] + ":" + ymd[1] + ":" + "00"; + // 计算最近5分钟accepts,最新矿机状态 + const start_time = Times.utcTime(new Date(end_time).valueOf() - 1000 * 60 * 5); + let enable = (await this.redis.get(`${this.coin}:enable`)) || false; + + let [accepts, miners_state] = await Promise.all([this.query_accepts(start_time, end_time, enable), this.query_miners(end_time)]); + + // 创建nexa_miners表所需要的map + const miners_map = new Map(); + // 判断各种情况 + if (accepts.length === 0 && miners_state.length === 0) { + // 历史上没有矿工接入 + return; + } else if (accepts.length !== 0 && miners_state.length === 0) { + // 主库出了问题,基本不可能出现这种情况 + return; + } else if (accepts.length === 0 && miners_state.length !== 0) { + // 最近5分钟没有矿工接入,直接将m2pooldb-nexa_miners表中所有矿工的accepts更新为0,并放入nexa_miners表需要的map中 + miners_state.forEach((item) => { + const { user, miner, state, last_submit } = item; + miners_map.set(`${user}:${miner}`, { date, user, miner, state: "offline", last_submit, accepts: 0 }); + }); + } else { + // 先找到所有最近5分钟有提交的矿机 + accepts.forEach((item) => { + const { user, miner, accepts, last_submit } = item; + miners_map.set(`${user}:${miner}`, { date, user, miner, accepts, last_submit, state: "online" }); + }); + // 再将stats表有记录矿机,但最近5分钟没有提交的矿机合并进去 + miners_state.forEach((item) => { + const { user, miner, state, last_submit } = item; + if (!miners_map.get(`${user}:${miner}`)) { + miners_map.set(`${user}:${miner}`, { date, user, miner, accepts: 0, last_submit, state }); + } + }); + } + // 将指定时段内的数据插入nexa_miners表 + let insert_miners_table_sql = `INSERT INTO ${this.coin}_minersv2(user, miner, date, accepts, state, last_submit) VALUES `; + const miners_table_values = []; + miners_map.forEach((item) => { + const { user, miner, date, accepts, state, last_submit } = item; + insert_miners_table_sql += `(?, ?, ?, ?, ?, ?), `; + miners_table_values.push(user, miner, date, accepts, state, last_submit); + }); + insert_miners_table_sql = insert_miners_table_sql.slice(0, -2); + await this.hashratedb.exec_transaction(insert_miners_table_sql, miners_table_values); + return; + } catch (err) { + throw err; + } + } +} + +module.exports = HashRate diff --git a/src/init.js b/src/init.js new file mode 100644 index 0000000..bdaf619 --- /dev/null +++ b/src/init.js @@ -0,0 +1,96 @@ +const fs = require("fs") +const DBPool = require("../lib/mysql"); +const Cache = require("../lib/redis"); +const { NEXARPCNode, GRSRPCNode, MONARPCNode, DGBRPCNode, RXDRPCNode, ENXNode, ALPHRPCNode } = require("../lib/node"); + +class Init{ + constructor(coin, method){ + this.coin = coin + const config = fs.readFileSync(`./config/${coin}.conf`, "utf-8") + const {master, slave, redis_options, node_options, distribution_conf, MAX_MATURE, REPORT_ADDRESS} = JSON.parse(config) + const {pooldb, sharesdb, distribution, hashrate, users_addresses, balance} = master + const {pooldb_slave, sharesdb_slave} = slave + const {node1, node2} = node_options + const {redis1} = redis_options + const {POOL_FEE} = distribution_conf + const node_map = { + mona: MONARPCNode, + nexa: NEXARPCNode, + grs: GRSRPCNode, + dgbs: DGBRPCNode, + dgbq: DGBRPCNode, + dgbo: DGBRPCNode, + rxd: RXDRPCNode, + enx: ENXNode, + alph: ALPHRPCNode + }; + + switch (method){ + case "hashrate": + this.sharesdb = new DBPool(coin, sharesdb) + this.sharesdb_slave = new DBPool(coin, sharesdb_slave) + this.pooldb = new DBPool(coin, pooldb) + this.redis = new Cache(redis1) + // this.pooldb_slave = new DBPool(coin, pooldb_slave) + this.hashratedb = new DBPool(coin, hashrate) + break + case "report": + if(this.coin === "enx"){ + this.distribution = new DBPool(coin, distribution) + this.pooldb = new DBPool(coin, pooldb) + } else { + this.REPORT_ADDRESS = REPORT_ADDRESS + this.node = new node_map[coin](node2) + this.distribution = new DBPool(coin, distribution) + this.redis = new Cache(redis1) + } + break + case "clear": + this.pooldb = new DBPool(coin, pooldb) + this.sharesdb = new DBPool(coin, sharesdb) + this.hashratedb = new DBPool(coin, hashrate) + break + case "distribution": + this.pooldb = new DBPool(coin, pooldb) + this.pooldb_slave = new DBPool(coin, pooldb_slave) + this.hashratedb = new DBPool(coin, hashrate) + this.distributiondb = new DBPool(coin, distribution) + this.users_addresses = new DBPool(coin, users_addresses) + this.node = new node_map[coin](node2) + this.REPORT_ADDRESS = REPORT_ADDRESS + this.POOL_FEE = POOL_FEE + console.log(`当前手续费率为:${POOL_FEE}`); + // this.balance = new DBPool(coin, balance) + break + case "balance": + this.distribution = new DBPool(coin, distribution) + this.balancedb = new DBPool(coin, balance) + this.node = new node_map[coin](node2) + this.MAX_MATURE = MAX_MATURE + break + case "confirm": + this.MAX_MATURE = MAX_MATURE + this.REPORT_ADDRESS = REPORT_ADDRESS + this.node = new node_map[coin](node2) + this.distribution = new DBPool(coin, distribution) + this.pooldb = new DBPool(coin, pooldb) + break + case "stats": + this.pooldb = new DBPool(coin, pooldb) + this.hashratedb = new DBPool(coin, hashrate) + this.distribution = new DBPool(coin, distribution) + break + case "notice": + this.distribution = new DBPool(coin, distribution) + break + default: + throw `暂不支持${method}方法 init` + } + } + + sleep(ms) { + return new Promise((resolve) => setTimeout(resolve, ms)); + } +} + +module.exports = Init \ No newline at end of file diff --git a/src/notice.js b/src/notice.js new file mode 100644 index 0000000..c2fbcf1 --- /dev/null +++ b/src/notice.js @@ -0,0 +1,85 @@ +const Init = require("./init"); +const nodemailer = require("nodemailer"); +const Times = require("../public/times"); + +const conf = { + create_config: { + service: "qq", + secureConnection: true, + port: 465, + auth: { + user: "393768033@qq.com", + // pass: "hyaefuvaiudcbihj", + pass:"anuflpiziamwcaia", + }, + }, + symbol:["nexa", "rxd", "dgbs", "dgbq", "dgbo", "grs", "mona", "enx"], + receiver: "709387953@qq.com, liarsars@gmail.com" +}; + +class Notice extends Init { + constructor(coin) { + super(coin, "notice"); + this.conf = conf; + this.transporter = nodemailer.createTransport(conf.create_config); + } + + construct_mail(receiver, subject, text, html) { + return { + from: this.transporter.options.auth.user, + to: receiver, + subject: subject, + text: text, + html: html + }; + } + + async send_mail(mailOptions) { + if (!mailOptions.to) { + throw new Error("未指定收件人"); + } + try { + const info = await this.transporter.sendMail(mailOptions); + console.log(`${Date.now()} 检测到未转账信息!邮件ID: ${info.messageId}`); + } catch (err) { + console.error("邮件发送失败:", err); + } + } + + async query_walletout(date) { + try { + const sql = `SELECT * FROM wallet_outv2 WHERE DATE(date) = ?;`; + const data = await this.distribution.exec(sql, [date]); + return data.length > 0 ? data : false; + } catch (err) { + throw err; + } + } + + async main() { + try { + const date = Times.times()[2]; + const data = await this.query_walletout(date); + + if (!data) return; + + const symbol = new Set(data.map(item => item.coin)); + + const transfer_err_coins = (this.conf.symbol || []).filter(item => !symbol.has(item)); + + if (transfer_err_coins.length === 0) return; + + const subject = `今日有未转账币种`; + const text = `今日有未转账币种`; + const html = `今日未转账币种:${transfer_err_coins.join(", ")}

测试数据

`; + + const mailOptions = this.construct_mail(this.conf.receiver, subject, text, html); + await this.send_mail(mailOptions); + return + } catch (err) { + console.error("主任务执行错误:", err); + } + } +} + +module.exports = Notice \ No newline at end of file diff --git a/src/report.js b/src/report.js new file mode 100644 index 0000000..c18eeaf --- /dev/null +++ b/src/report.js @@ -0,0 +1,182 @@ +const Times = require("../public/times"); +const Init = require("./init"); + +class Report extends Init { + constructor(coin) { + const method = "report"; + super(coin, method); + } + + async query_mysql_last_height() { + try { + const sql = `SELECT MAX(height) AS max_height FROM ${this.coin}_blkreportprofitv2;`; + const data = await this.distribution.exec(sql); + if (!data || data.length === 0) { + throw `${this.coin}当前无报块记录`; + } + return data[0].max_height; + } catch (err) { + throw err; + } + } + + async query_redis_last_height() { + try { + const data = await this.redis.get(`${this.coin}:last_check`); + if (!data) { + const result = await this.query_mysql_last_height(); + await this.redis.set(`${this.coin}:last_check`, result); + console.log(`redis中无${this.coin} last_check数据,采用最后一个报块高度!`); + return result; + } + return Number(data); + } catch (err) { + throw err; + } + } + + async query_chain_last_height() { + try { + const data = await this.node.getblockcount(); + return Number(data); + } catch (err) { + throw err; + } + } + + async insert_blkreportprofit(data) { + try { + let sql = `INSERT INTO ${this.coin}_blkreportprofitv2 (date, height, hash, reward, fees, state) VALUES `; + const values = []; + for (let item of data) { + const { date, height, hash, reward, fees } = item; + values.push(date, height, hash, reward, fees, 0); + sql += `(?,?,?,?,?,?), `; + } + sql = sql.slice(0, -2); + await this.distribution.exec_transaction(sql, values); + } catch (err) { + throw err; + } + } + + async main() { + try { + const [redis_height, chain_height] = await Promise.all([this.query_redis_last_height(), this.query_chain_last_height()]); + // 区块链高度小于last_check高度,节点同步出错 + if (chain_height < redis_height) { + console.log(`${this.coin}节点同步出错,节点高度${chain_height},last_check${redis_height}`); + return; + } + if (chain_height === redis_height) { + console.log(`${this.coin}当前节点和last_check高度一致,无需校验`); + return; + } + const suc_data = []; + for (let i = redis_height + 1; i <= chain_height; i++) { + const check_result = await this.node.verify_block(i, this.REPORT_ADDRESS); + if (check_result) { + const block = this.node.block(check_result); + const { height, hash, time, block_reward, block_fees } = block; + suc_data.push({ date: Times.utcTime(time * 1000), height, hash, reward: block_reward, fees: block_fees }); + } + } + if (suc_data.length === 0) { + console.log(`${redis_height} - ${chain_height} 无报块`); + await this.redis.set(`${this.coin}:last_check`, chain_height); + return; + } + await this.insert_blkreportprofit(suc_data); + await this.redis.set(`${this.coin}:last_check`, chain_height); + return; + } catch (err) { + throw err; + } + } +} + +class ReportEnx extends Report { + constructor(coin) { + const method = "report"; + super(coin, method); + } + + async query_blkstats(height) { + try { + const yesterday = Times.utcTime(new Date().valueOf() - 24 * 60 * 60 * 1000) + .split(" ")[0] + .replace(/\-/g, ""); + const table1 = "enx_pool_blkstats"; + const table2 = `enx_pool_blkstats_${yesterday}`; + + const queryTableExistSql = `SHOW TABLES LIKE ?;`; + const existData = await this.pooldb.exec(queryTableExistSql, [table2]); + + if (existData.length === 0) { + const sql = `SELECT date, height, hash FROM ?? WHERE height > ?;`; + return await this.pooldb.exec(sql, [table1, height]); + } else { + const sql = `SELECT date, height, hash FROM ?? WHERE height > ? + UNION ALL + SELECT date, height, hash FROM ?? WHERE height > ?;`; + return await this.pooldb.exec(sql, [table1, height, table2, height]); + } + } catch (err) { + throw err; + } + } + + + async query_blkreportprofit() { + try { + const sql = `SELECT MAX(height) AS max_height FROM ${this.coin}_blkreportprofitv2;`; + const result = await this.distribution.exec(sql); + if (result.length === 0 || result[0].max_height === null) { + return 0; + } else { + return result[0].max_height; + } + } catch (err) { + throw err; + } + } + + async insertinto_blkreportprofit(data) { + try { + let sql = `INSERT INTO ${this.coin}_blkreportprofitv2 (date, height, hash, reward, fees, state) VALUES `; + const values = []; + for (let item of data) { + const { date, height, hash, reward } = item; + values.push(date, height, hash, reward, 0, 1); + sql += `(?,?,?,?,?,?), `; + } + sql = sql.slice(0, -2); + await this.distribution.exec_transaction(sql, values); + } catch (err) { + throw err; + } + } + async main() { + // const start_time = Times.utcTime(new Date().valueOf()); + const last_height = await this.query_blkreportprofit(); + const data = await this.query_blkstats(last_height); + + if (data.length === 0) { + console.log(`${this.coin} 无报块`); + return; + } + const block_data = [] + for(let item of data){ + const {date, height, hash} = item + block_data.push({date, height, hash, reward:333}) + } + + await this.insertinto_blkreportprofit(block_data); + return + } +} + +module.exports = { + Report, + ReportEnx, +} diff --git a/src/stat.js b/src/stat.js new file mode 100644 index 0000000..0c10212 --- /dev/null +++ b/src/stat.js @@ -0,0 +1,112 @@ +const Times = require("../public/times"); +const Init = require("./init"); + +/** + * earliest date : 2024-11-26 00:00:00 + */ +class Stats extends Init { + constructor(coin) { + const method = "stats"; + super(coin, method); + } + + async query_pooldb_mhs24h(date) { + try { + const yMd = Times.utcTime(new Date(date).valueOf() - 1000 * 60 * 60 * 24).split(" ")[0]; + const table_date = yMd.replace(/\-/g, ""); + let table = `${this.coin}_miners_stats_${table_date}`; + console.log(table); + + const sql = `SELECT user, SUM(mhs24h) AS mhs24h FROM ${table} WHERE date >= ? AND date <= ? GROUP BY user;`; + const start = yMd + " 23:55:00"; + const end = yMd + " 23:59:59"; + const data = await this.pooldb.exec(sql, [start, end]); + if (data.length === 0) { + return false; + } + const result = []; + for (let item of data) { + const { user, mhs24h } = item; + result.push({ user, mhs24h: Number(mhs24h) }); + } + return result; + } catch (err) { + throw err; + } + } + + async query_hashratedb_mhs24h(date) { + try { + const sql = `SELECT user, SUM(mhs24h) AS mhs24h FROM ${this.coin}_mhsv2 WHERE date = ? GROUP BY user;`; + const data = await this.hashratedb.exec(sql, [date]); + if (!data || data.length === 0) { + return false; + } + const result = []; + for (let item of data) { + const { user, mhs24h } = item; + result.push({ user, mhs24h: Number(mhs24h) }); + } + return result; + } catch (err) { + throw err; + } + } + + async query_distribution_data(date) { + try { + const sql = `SELECT user, amount FROM wallet_in WHERE coin = ? AND create_date = ? AND user != "pool_account";`; + const data = await this.distribution.exec(sql, [this.coin, date]); + if (!data || data.length === 0) { + return false; + } + const result = []; + for (let item of data) { + const { user, amount } = item; + result.push({ user, amount: Number(amount) }); + } + return result; + } catch (err) { + throw err; + } + } + + caculate_mhs24h_percent(data) { + const totalAmount = data.reduce((acc, item) => acc + item.mhs24h, 0); + const result = data.map((item) => ({ + user: item.user, + mhs24h: item.mhs24h, + percentage: Number((item.mhs24h / totalAmount).toFixed(4)), // 保留两位小数 + })); + return result; + } + + caculate_distribution_percent(data) { + const totalAmount = data.reduce((acc, item) => acc + item.amount, 0); + const result = data.map((item) => ({ + user: item.user, + should_receive: Number((item.amount / 0.95).toFixed(8)), + actual_receive: item.amount, + percentage: Number(((item.amount / totalAmount)).toFixed(4)), // 保留两位小数 + })); + return result; + } + + async caculate_user_should_distribution(date) { + try { + const [user_mhs24h, user_distribution] = await Promise.all([this.query_hashratedb_mhs24h(date), this.query_distribution_data(date)]); + const mhs24h_percent = this.caculate_mhs24h_percent(user_mhs24h) + const distribution_percent = this.caculate_distribution_percent(user_distribution) + let fees = 0 + for(let item of distribution_percent){ + const {user, should_receive, actual_receive, percentage} = item + fees += should_receive - actual_receive + } + console.log(fees); + } catch (err) { + throw err; + } + } +} + +module.exports = Stats; diff --git a/src/web/elementui/axios.min.js b/src/web/elementui/axios.min.js new file mode 100644 index 0000000..906df9e --- /dev/null +++ b/src/web/elementui/axios.min.js @@ -0,0 +1,2 @@ +!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t():"function"==typeof define&&define.amd?define(t):(e="undefined"!=typeof globalThis?globalThis:e||self).axios=t()}(this,(function(){"use strict";function e(e){var r,n;function o(r,n){try{var a=e[r](n),u=a.value,s=u instanceof t;Promise.resolve(s?u.v:u).then((function(t){if(s){var n="return"===r?"return":"next";if(!u.k||t.done)return o(n,t);t=e[n](t).value}i(a.done?"return":"normal",t)}),(function(e){o("throw",e)}))}catch(e){i("throw",e)}}function i(e,t){switch(e){case"return":r.resolve({value:t,done:!0});break;case"throw":r.reject(t);break;default:r.resolve({value:t,done:!1})}(r=r.next)?o(r.key,r.arg):n=null}this._invoke=function(e,t){return new Promise((function(i,a){var u={key:e,arg:t,resolve:i,reject:a,next:null};n?n=n.next=u:(r=n=u,o(e,t))}))},"function"!=typeof e.return&&(this.return=void 0)}function t(e,t){this.v=e,this.k=t}function r(e){var r={},n=!1;function o(r,o){return n=!0,o=new Promise((function(t){t(e[r](o))})),{done:!1,value:new t(o,1)}}return r["undefined"!=typeof Symbol&&Symbol.iterator||"@@iterator"]=function(){return this},r.next=function(e){return n?(n=!1,e):o("next",e)},"function"==typeof e.throw&&(r.throw=function(e){if(n)throw n=!1,e;return o("throw",e)}),"function"==typeof e.return&&(r.return=function(e){return n?(n=!1,e):o("return",e)}),r}function n(e){var t,r,n,i=2;for("undefined"!=typeof Symbol&&(r=Symbol.asyncIterator,n=Symbol.iterator);i--;){if(r&&null!=(t=e[r]))return t.call(e);if(n&&null!=(t=e[n]))return new o(t.call(e));r="@@asyncIterator",n="@@iterator"}throw new TypeError("Object is not async iterable")}function o(e){function t(e){if(Object(e)!==e)return Promise.reject(new TypeError(e+" is not an object."));var t=e.done;return Promise.resolve(e.value).then((function(e){return{value:e,done:t}}))}return o=function(e){this.s=e,this.n=e.next},o.prototype={s:null,n:null,next:function(){return t(this.n.apply(this.s,arguments))},return:function(e){var r=this.s.return;return void 0===r?Promise.resolve({value:e,done:!0}):t(r.apply(this.s,arguments))},throw:function(e){var r=this.s.return;return void 0===r?Promise.reject(e):t(r.apply(this.s,arguments))}},new o(e)}function i(e){return new t(e,0)}function a(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function u(e){for(var t=1;t=0;--i){var a=this.tryEntries[i],u=a.completion;if("root"===a.tryLoc)return o("end");if(a.tryLoc<=this.prev){var s=n.call(a,"catchLoc"),c=n.call(a,"finallyLoc");if(s&&c){if(this.prev=0;--r){var o=this.tryEntries[r];if(o.tryLoc<=this.prev&&n.call(o,"finallyLoc")&&this.prev=0;--t){var r=this.tryEntries[t];if(r.finallyLoc===e)return this.complete(r.completion,r.afterLoc),j(r),y}},catch:function(e){for(var t=this.tryEntries.length-1;t>=0;--t){var r=this.tryEntries[t];if(r.tryLoc===e){var n=r.completion;if("throw"===n.type){var o=n.arg;j(r)}return o}}throw new Error("illegal catch attempt")},delegateYield:function(t,r,n){return this.delegate={iterator:L(t),resultName:r,nextLoc:n},"next"===this.method&&(this.arg=e),y}},t}function c(e){var t=function(e,t){if("object"!=typeof e||!e)return e;var r=e[Symbol.toPrimitive];if(void 0!==r){var n=r.call(e,t||"default");if("object"!=typeof n)return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"==typeof t?t:String(t)}function f(e){return f="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},f(e)}function l(t){return function(){return new e(t.apply(this,arguments))}}function h(e,t,r,n,o,i,a){try{var u=e[i](a),s=u.value}catch(e){return void r(e)}u.done?t(s):Promise.resolve(s).then(n,o)}function p(e){return function(){var t=this,r=arguments;return new Promise((function(n,o){var i=e.apply(t,r);function a(e){h(i,n,o,a,u,"next",e)}function u(e){h(i,n,o,a,u,"throw",e)}a(void 0)}))}}function d(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function v(e,t){for(var r=0;re.length)&&(t=e.length);for(var r=0,n=new Array(t);r2&&void 0!==arguments[2]?arguments[2]:{},i=o.allOwnKeys,a=void 0!==i&&i;if(null!=e)if("object"!==f(e)&&(e=[e]),N(e))for(r=0,n=e.length;r0;)if(t===(r=n[o]).toLowerCase())return r;return null}var Q="undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:"undefined"!=typeof window?window:global,Z=function(e){return!_(e)&&e!==Q};var ee,te=(ee="undefined"!=typeof Uint8Array&&A(Uint8Array),function(e){return ee&&e instanceof ee}),re=P("HTMLFormElement"),ne=function(e){var t=Object.prototype.hasOwnProperty;return function(e,r){return t.call(e,r)}}(),oe=P("RegExp"),ie=function(e,t){var r=Object.getOwnPropertyDescriptors(e),n={};$(r,(function(r,o){var i;!1!==(i=t(r,o,e))&&(n[o]=i||r)})),Object.defineProperties(e,n)},ae="abcdefghijklmnopqrstuvwxyz",ue="0123456789",se={DIGIT:ue,ALPHA:ae,ALPHA_DIGIT:ae+ae.toUpperCase()+ue};var ce,fe,le,he,pe=P("AsyncFunction"),de=(ce="function"==typeof setImmediate,fe=U(Q.postMessage),ce?setImmediate:fe?(le="axios@".concat(Math.random()),he=[],Q.addEventListener("message",(function(e){var t=e.source,r=e.data;t===Q&&r===le&&he.length&&he.shift()()}),!1),function(e){he.push(e),Q.postMessage(le,"*")}):function(e){return setTimeout(e)}),ve="undefined"!=typeof queueMicrotask?queueMicrotask.bind(Q):"undefined"!=typeof process&&process.nextTick||de,ye={isArray:N,isArrayBuffer:C,isBuffer:function(e){return null!==e&&!_(e)&&null!==e.constructor&&!_(e.constructor)&&U(e.constructor.isBuffer)&&e.constructor.isBuffer(e)},isFormData:function(e){var t;return e&&("function"==typeof FormData&&e instanceof FormData||U(e.append)&&("formdata"===(t=j(e))||"object"===t&&U(e.toString)&&"[object FormData]"===e.toString()))},isArrayBufferView:function(e){return"undefined"!=typeof ArrayBuffer&&ArrayBuffer.isView?ArrayBuffer.isView(e):e&&e.buffer&&C(e.buffer)},isString:F,isNumber:B,isBoolean:function(e){return!0===e||!1===e},isObject:D,isPlainObject:I,isReadableStream:G,isRequest:K,isResponse:V,isHeaders:X,isUndefined:_,isDate:q,isFile:M,isBlob:z,isRegExp:oe,isFunction:U,isStream:function(e){return D(e)&&U(e.pipe)},isURLSearchParams:J,isTypedArray:te,isFileList:H,forEach:$,merge:function e(){for(var t=Z(this)&&this||{},r=t.caseless,n={},o=function(t,o){var i=r&&Y(n,o)||o;I(n[i])&&I(t)?n[i]=e(n[i],t):I(t)?n[i]=e({},t):N(t)?n[i]=t.slice():n[i]=t},i=0,a=arguments.length;i3&&void 0!==arguments[3]?arguments[3]:{},o=n.allOwnKeys;return $(t,(function(t,n){r&&U(t)?e[n]=R(t,r):e[n]=t}),{allOwnKeys:o}),e},trim:function(e){return e.trim?e.trim():e.replace(/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,"")},stripBOM:function(e){return 65279===e.charCodeAt(0)&&(e=e.slice(1)),e},inherits:function(e,t,r,n){e.prototype=Object.create(t.prototype,n),e.prototype.constructor=e,Object.defineProperty(e,"super",{value:t.prototype}),r&&Object.assign(e.prototype,r)},toFlatObject:function(e,t,r,n){var o,i,a,u={};if(t=t||{},null==e)return t;do{for(i=(o=Object.getOwnPropertyNames(e)).length;i-- >0;)a=o[i],n&&!n(a,e,t)||u[a]||(t[a]=e[a],u[a]=!0);e=!1!==r&&A(e)}while(e&&(!r||r(e,t))&&e!==Object.prototype);return t},kindOf:j,kindOfTest:P,endsWith:function(e,t,r){e=String(e),(void 0===r||r>e.length)&&(r=e.length),r-=t.length;var n=e.indexOf(t,r);return-1!==n&&n===r},toArray:function(e){if(!e)return null;if(N(e))return e;var t=e.length;if(!B(t))return null;for(var r=new Array(t);t-- >0;)r[t]=e[t];return r},forEachEntry:function(e,t){for(var r,n=(e&&e[Symbol.iterator]).call(e);(r=n.next())&&!r.done;){var o=r.value;t.call(e,o[0],o[1])}},matchAll:function(e,t){for(var r,n=[];null!==(r=e.exec(t));)n.push(r);return n},isHTMLForm:re,hasOwnProperty:ne,hasOwnProp:ne,reduceDescriptors:ie,freezeMethods:function(e){ie(e,(function(t,r){if(U(e)&&-1!==["arguments","caller","callee"].indexOf(r))return!1;var n=e[r];U(n)&&(t.enumerable=!1,"writable"in t?t.writable=!1:t.set||(t.set=function(){throw Error("Can not rewrite read-only method '"+r+"'")}))}))},toObjectSet:function(e,t){var r={},n=function(e){e.forEach((function(e){r[e]=!0}))};return N(e)?n(e):n(String(e).split(t)),r},toCamelCase:function(e){return e.toLowerCase().replace(/[-_\s]([a-z\d])(\w*)/g,(function(e,t,r){return t.toUpperCase()+r}))},noop:function(){},toFiniteNumber:function(e,t){return null!=e&&Number.isFinite(e=+e)?e:t},findKey:Y,global:Q,isContextDefined:Z,ALPHABET:se,generateString:function(){for(var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:16,t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:se.ALPHA_DIGIT,r="",n=t.length;e--;)r+=t[Math.random()*n|0];return r},isSpecCompliantForm:function(e){return!!(e&&U(e.append)&&"FormData"===e[Symbol.toStringTag]&&e[Symbol.iterator])},toJSONObject:function(e){var t=new Array(10);return function e(r,n){if(D(r)){if(t.indexOf(r)>=0)return;if(!("toJSON"in r)){t[n]=r;var o=N(r)?[]:{};return $(r,(function(t,r){var i=e(t,n+1);!_(i)&&(o[r]=i)})),t[n]=void 0,o}}return r}(e,0)},isAsyncFn:pe,isThenable:function(e){return e&&(D(e)||U(e))&&U(e.then)&&U(e.catch)},setImmediate:de,asap:ve};function me(e,t,r,n,o){Error.call(this),Error.captureStackTrace?Error.captureStackTrace(this,this.constructor):this.stack=(new Error).stack,this.message=e,this.name="AxiosError",t&&(this.code=t),r&&(this.config=r),n&&(this.request=n),o&&(this.response=o,this.status=o.status?o.status:null)}ye.inherits(me,Error,{toJSON:function(){return{message:this.message,name:this.name,description:this.description,number:this.number,fileName:this.fileName,lineNumber:this.lineNumber,columnNumber:this.columnNumber,stack:this.stack,config:ye.toJSONObject(this.config),code:this.code,status:this.status}}});var be=me.prototype,ge={};["ERR_BAD_OPTION_VALUE","ERR_BAD_OPTION","ECONNABORTED","ETIMEDOUT","ERR_NETWORK","ERR_FR_TOO_MANY_REDIRECTS","ERR_DEPRECATED","ERR_BAD_RESPONSE","ERR_BAD_REQUEST","ERR_CANCELED","ERR_NOT_SUPPORT","ERR_INVALID_URL"].forEach((function(e){ge[e]={value:e}})),Object.defineProperties(me,ge),Object.defineProperty(be,"isAxiosError",{value:!0}),me.from=function(e,t,r,n,o,i){var a=Object.create(be);return ye.toFlatObject(e,a,(function(e){return e!==Error.prototype}),(function(e){return"isAxiosError"!==e})),me.call(a,e.message,t,r,n,o),a.cause=e,a.name=e.name,i&&Object.assign(a,i),a};function we(e){return ye.isPlainObject(e)||ye.isArray(e)}function Ee(e){return ye.endsWith(e,"[]")?e.slice(0,-2):e}function Oe(e,t,r){return e?e.concat(t).map((function(e,t){return e=Ee(e),!r&&t?"["+e+"]":e})).join(r?".":""):t}var Se=ye.toFlatObject(ye,{},null,(function(e){return/^is[A-Z]/.test(e)}));function xe(e,t,r){if(!ye.isObject(e))throw new TypeError("target must be an object");t=t||new FormData;var n=(r=ye.toFlatObject(r,{metaTokens:!0,dots:!1,indexes:!1},!1,(function(e,t){return!ye.isUndefined(t[e])}))).metaTokens,o=r.visitor||c,i=r.dots,a=r.indexes,u=(r.Blob||"undefined"!=typeof Blob&&Blob)&&ye.isSpecCompliantForm(t);if(!ye.isFunction(o))throw new TypeError("visitor must be a function");function s(e){if(null===e)return"";if(ye.isDate(e))return e.toISOString();if(!u&&ye.isBlob(e))throw new me("Blob is not supported. Use a Buffer instead.");return ye.isArrayBuffer(e)||ye.isTypedArray(e)?u&&"function"==typeof Blob?new Blob([e]):Buffer.from(e):e}function c(e,r,o){var u=e;if(e&&!o&&"object"===f(e))if(ye.endsWith(r,"{}"))r=n?r:r.slice(0,-2),e=JSON.stringify(e);else if(ye.isArray(e)&&function(e){return ye.isArray(e)&&!e.some(we)}(e)||(ye.isFileList(e)||ye.endsWith(r,"[]"))&&(u=ye.toArray(e)))return r=Ee(r),u.forEach((function(e,n){!ye.isUndefined(e)&&null!==e&&t.append(!0===a?Oe([r],n,i):null===a?r:r+"[]",s(e))})),!1;return!!we(e)||(t.append(Oe(o,r,i),s(e)),!1)}var l=[],h=Object.assign(Se,{defaultVisitor:c,convertValue:s,isVisitable:we});if(!ye.isObject(e))throw new TypeError("data must be an object");return function e(r,n){if(!ye.isUndefined(r)){if(-1!==l.indexOf(r))throw Error("Circular reference detected in "+n.join("."));l.push(r),ye.forEach(r,(function(r,i){!0===(!(ye.isUndefined(r)||null===r)&&o.call(t,r,ye.isString(i)?i.trim():i,n,h))&&e(r,n?n.concat(i):[i])})),l.pop()}}(e),t}function Re(e){var t={"!":"%21","'":"%27","(":"%28",")":"%29","~":"%7E","%20":"+","%00":"\0"};return encodeURIComponent(e).replace(/[!'()~]|%20|%00/g,(function(e){return t[e]}))}function Te(e,t){this._pairs=[],e&&xe(e,this,t)}var ke=Te.prototype;function Ae(e){return encodeURIComponent(e).replace(/%3A/gi,":").replace(/%24/g,"$").replace(/%2C/gi,",").replace(/%20/g,"+").replace(/%5B/gi,"[").replace(/%5D/gi,"]")}function je(e,t,r){if(!t)return e;var n,o=r&&r.encode||Ae,i=r&&r.serialize;if(n=i?i(t,r):ye.isURLSearchParams(t)?t.toString():new Te(t,r).toString(o)){var a=e.indexOf("#");-1!==a&&(e=e.slice(0,a)),e+=(-1===e.indexOf("?")?"?":"&")+n}return e}ke.append=function(e,t){this._pairs.push([e,t])},ke.toString=function(e){var t=e?function(t){return e.call(this,t,Re)}:Re;return this._pairs.map((function(e){return t(e[0])+"="+t(e[1])}),"").join("&")};var Pe=function(){function e(){d(this,e),this.handlers=[]}return y(e,[{key:"use",value:function(e,t,r){return this.handlers.push({fulfilled:e,rejected:t,synchronous:!!r&&r.synchronous,runWhen:r?r.runWhen:null}),this.handlers.length-1}},{key:"eject",value:function(e){this.handlers[e]&&(this.handlers[e]=null)}},{key:"clear",value:function(){this.handlers&&(this.handlers=[])}},{key:"forEach",value:function(e){ye.forEach(this.handlers,(function(t){null!==t&&e(t)}))}}]),e}(),Le={silentJSONParsing:!0,forcedJSONParsing:!0,clarifyTimeoutError:!1},Ne={isBrowser:!0,classes:{URLSearchParams:"undefined"!=typeof URLSearchParams?URLSearchParams:Te,FormData:"undefined"!=typeof FormData?FormData:null,Blob:"undefined"!=typeof Blob?Blob:null},protocols:["http","https","file","blob","url","data"]},_e="undefined"!=typeof window&&"undefined"!=typeof document,Ce="object"===("undefined"==typeof navigator?"undefined":f(navigator))&&navigator||void 0,Fe=_e&&(!Ce||["ReactNative","NativeScript","NS"].indexOf(Ce.product)<0),Ue="undefined"!=typeof WorkerGlobalScope&&self instanceof WorkerGlobalScope&&"function"==typeof self.importScripts,Be=_e&&window.location.href||"http://localhost",De=u(u({},Object.freeze({__proto__:null,hasBrowserEnv:_e,hasStandardBrowserWebWorkerEnv:Ue,hasStandardBrowserEnv:Fe,navigator:Ce,origin:Be})),Ne);function Ie(e){function t(e,r,n,o){var i=e[o++];if("__proto__"===i)return!0;var a=Number.isFinite(+i),u=o>=e.length;return i=!i&&ye.isArray(n)?n.length:i,u?(ye.hasOwnProp(n,i)?n[i]=[n[i],r]:n[i]=r,!a):(n[i]&&ye.isObject(n[i])||(n[i]=[]),t(e,r,n[i],o)&&ye.isArray(n[i])&&(n[i]=function(e){var t,r,n={},o=Object.keys(e),i=o.length;for(t=0;t-1,i=ye.isObject(e);if(i&&ye.isHTMLForm(e)&&(e=new FormData(e)),ye.isFormData(e))return o?JSON.stringify(Ie(e)):e;if(ye.isArrayBuffer(e)||ye.isBuffer(e)||ye.isStream(e)||ye.isFile(e)||ye.isBlob(e)||ye.isReadableStream(e))return e;if(ye.isArrayBufferView(e))return e.buffer;if(ye.isURLSearchParams(e))return t.setContentType("application/x-www-form-urlencoded;charset=utf-8",!1),e.toString();if(i){if(n.indexOf("application/x-www-form-urlencoded")>-1)return function(e,t){return xe(e,new De.classes.URLSearchParams,Object.assign({visitor:function(e,t,r,n){return De.isNode&&ye.isBuffer(e)?(this.append(t,e.toString("base64")),!1):n.defaultVisitor.apply(this,arguments)}},t))}(e,this.formSerializer).toString();if((r=ye.isFileList(e))||n.indexOf("multipart/form-data")>-1){var a=this.env&&this.env.FormData;return xe(r?{"files[]":e}:e,a&&new a,this.formSerializer)}}return i||o?(t.setContentType("application/json",!1),function(e,t,r){if(ye.isString(e))try{return(t||JSON.parse)(e),ye.trim(e)}catch(e){if("SyntaxError"!==e.name)throw e}return(r||JSON.stringify)(e)}(e)):e}],transformResponse:[function(e){var t=this.transitional||qe.transitional,r=t&&t.forcedJSONParsing,n="json"===this.responseType;if(ye.isResponse(e)||ye.isReadableStream(e))return e;if(e&&ye.isString(e)&&(r&&!this.responseType||n)){var o=!(t&&t.silentJSONParsing)&&n;try{return JSON.parse(e)}catch(e){if(o){if("SyntaxError"===e.name)throw me.from(e,me.ERR_BAD_RESPONSE,this,null,this.response);throw e}}}return e}],timeout:0,xsrfCookieName:"XSRF-TOKEN",xsrfHeaderName:"X-XSRF-TOKEN",maxContentLength:-1,maxBodyLength:-1,env:{FormData:De.classes.FormData,Blob:De.classes.Blob},validateStatus:function(e){return e>=200&&e<300},headers:{common:{Accept:"application/json, text/plain, */*","Content-Type":void 0}}};ye.forEach(["delete","get","head","post","put","patch"],(function(e){qe.headers[e]={}}));var Me=qe,ze=ye.toObjectSet(["age","authorization","content-length","content-type","etag","expires","from","host","if-modified-since","if-unmodified-since","last-modified","location","max-forwards","proxy-authorization","referer","retry-after","user-agent"]),He=Symbol("internals");function Je(e){return e&&String(e).trim().toLowerCase()}function We(e){return!1===e||null==e?e:ye.isArray(e)?e.map(We):String(e)}function Ge(e,t,r,n,o){return ye.isFunction(n)?n.call(this,t,r):(o&&(t=r),ye.isString(t)?ye.isString(n)?-1!==t.indexOf(n):ye.isRegExp(n)?n.test(t):void 0:void 0)}var Ke=function(e,t){function r(e){d(this,r),e&&this.set(e)}return y(r,[{key:"set",value:function(e,t,r){var n=this;function o(e,t,r){var o=Je(t);if(!o)throw new Error("header name must be a non-empty string");var i=ye.findKey(n,o);(!i||void 0===n[i]||!0===r||void 0===r&&!1!==n[i])&&(n[i||t]=We(e))}var i=function(e,t){return ye.forEach(e,(function(e,r){return o(e,r,t)}))};if(ye.isPlainObject(e)||e instanceof this.constructor)i(e,t);else if(ye.isString(e)&&(e=e.trim())&&!/^[-_a-zA-Z0-9^`|~,!#$%&'*+.]+$/.test(e.trim()))i(function(e){var t,r,n,o={};return e&&e.split("\n").forEach((function(e){n=e.indexOf(":"),t=e.substring(0,n).trim().toLowerCase(),r=e.substring(n+1).trim(),!t||o[t]&&ze[t]||("set-cookie"===t?o[t]?o[t].push(r):o[t]=[r]:o[t]=o[t]?o[t]+", "+r:r)})),o}(e),t);else if(ye.isHeaders(e)){var a,u=function(e,t){var r="undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(!r){if(Array.isArray(e)||(r=O(e))||t&&e&&"number"==typeof e.length){r&&(e=r);var n=0,o=function(){};return{s:o,n:function(){return n>=e.length?{done:!0}:{done:!1,value:e[n++]}},e:function(e){throw e},f:o}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var i,a=!0,u=!1;return{s:function(){r=r.call(e)},n:function(){var e=r.next();return a=e.done,e},e:function(e){u=!0,i=e},f:function(){try{a||null==r.return||r.return()}finally{if(u)throw i}}}}(e.entries());try{for(u.s();!(a=u.n()).done;){var s=b(a.value,2),c=s[0];o(s[1],c,r)}}catch(e){u.e(e)}finally{u.f()}}else null!=e&&o(t,e,r);return this}},{key:"get",value:function(e,t){if(e=Je(e)){var r=ye.findKey(this,e);if(r){var n=this[r];if(!t)return n;if(!0===t)return function(e){for(var t,r=Object.create(null),n=/([^\s,;=]+)\s*(?:=\s*([^,;]+))?/g;t=n.exec(e);)r[t[1]]=t[2];return r}(n);if(ye.isFunction(t))return t.call(this,n,r);if(ye.isRegExp(t))return t.exec(n);throw new TypeError("parser must be boolean|regexp|function")}}}},{key:"has",value:function(e,t){if(e=Je(e)){var r=ye.findKey(this,e);return!(!r||void 0===this[r]||t&&!Ge(0,this[r],r,t))}return!1}},{key:"delete",value:function(e,t){var r=this,n=!1;function o(e){if(e=Je(e)){var o=ye.findKey(r,e);!o||t&&!Ge(0,r[o],o,t)||(delete r[o],n=!0)}}return ye.isArray(e)?e.forEach(o):o(e),n}},{key:"clear",value:function(e){for(var t=Object.keys(this),r=t.length,n=!1;r--;){var o=t[r];e&&!Ge(0,this[o],o,e,!0)||(delete this[o],n=!0)}return n}},{key:"normalize",value:function(e){var t=this,r={};return ye.forEach(this,(function(n,o){var i=ye.findKey(r,o);if(i)return t[i]=We(n),void delete t[o];var a=e?function(e){return e.trim().toLowerCase().replace(/([a-z\d])(\w*)/g,(function(e,t,r){return t.toUpperCase()+r}))}(o):String(o).trim();a!==o&&delete t[o],t[a]=We(n),r[a]=!0})),this}},{key:"concat",value:function(){for(var e,t=arguments.length,r=new Array(t),n=0;n1?r-1:0),o=1;o1&&void 0!==arguments[1]?arguments[1]:Date.now();o=i,r=null,n&&(clearTimeout(n),n=null),e.apply(null,t)};return[function(){for(var e=Date.now(),t=e-o,u=arguments.length,s=new Array(u),c=0;c=i?a(s,e):(r=s,n||(n=setTimeout((function(){n=null,a(r)}),i-t)))},function(){return r&&a(r)}]}ye.inherits(Ye,me,{__CANCEL__:!0});var tt=function(e,t){var r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:3,n=0,o=Ze(50,250);return et((function(r){var i=r.loaded,a=r.lengthComputable?r.total:void 0,u=i-n,s=o(u);n=i;var c=m({loaded:i,total:a,progress:a?i/a:void 0,bytes:u,rate:s||void 0,estimated:s&&a&&i<=a?(a-i)/s:void 0,event:r,lengthComputable:null!=a},t?"download":"upload",!0);e(c)}),r)},rt=function(e,t){var r=null!=e;return[function(n){return t[0]({lengthComputable:r,total:e,loaded:n})},t[1]]},nt=function(e){return function(){for(var t=arguments.length,r=new Array(t),n=0;n1?t-1:0),n=1;n1?"since :\n"+u.map(jt).join("\n"):" "+jt(u[0]):"as no adapter specified"),"ERR_NOT_SUPPORT")}return r};function Nt(e){if(e.cancelToken&&e.cancelToken.throwIfRequested(),e.signal&&e.signal.aborted)throw new Ye(null,e)}function _t(e){return Nt(e),e.headers=Ve.from(e.headers),e.data=Xe.call(e,e.transformRequest),-1!==["post","put","patch"].indexOf(e.method)&&e.headers.setContentType("application/x-www-form-urlencoded",!1),Lt(e.adapter||Me.adapter)(e).then((function(t){return Nt(e),t.data=Xe.call(e,e.transformResponse,t),t.headers=Ve.from(t.headers),t}),(function(t){return $e(t)||(Nt(e),t&&t.response&&(t.response.data=Xe.call(e,e.transformResponse,t.response),t.response.headers=Ve.from(t.response.headers))),Promise.reject(t)}))}var Ct="1.7.7",Ft={};["object","boolean","number","function","string","symbol"].forEach((function(e,t){Ft[e]=function(r){return f(r)===e||"a"+(t<1?"n ":" ")+e}}));var Ut={};Ft.transitional=function(e,t,r){function n(e,t){return"[Axios v1.7.7] Transitional option '"+e+"'"+t+(r?". "+r:"")}return function(r,o,i){if(!1===e)throw new me(n(o," has been removed"+(t?" in "+t:"")),me.ERR_DEPRECATED);return t&&!Ut[o]&&(Ut[o]=!0,console.warn(n(o," has been deprecated since v"+t+" and will be removed in the near future"))),!e||e(r,o,i)}};var Bt={assertOptions:function(e,t,r){if("object"!==f(e))throw new me("options must be an object",me.ERR_BAD_OPTION_VALUE);for(var n=Object.keys(e),o=n.length;o-- >0;){var i=n[o],a=t[i];if(a){var u=e[i],s=void 0===u||a(u,i,e);if(!0!==s)throw new me("option "+i+" must be "+s,me.ERR_BAD_OPTION_VALUE)}else if(!0!==r)throw new me("Unknown option "+i,me.ERR_BAD_OPTION)}},validators:Ft},Dt=Bt.validators,It=function(){function e(t){d(this,e),this.defaults=t,this.interceptors={request:new Pe,response:new Pe}}var t;return y(e,[{key:"request",value:(t=p(s().mark((function e(t,r){var n,o;return s().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.prev=0,e.next=3,this._request(t,r);case 3:return e.abrupt("return",e.sent);case 6:if(e.prev=6,e.t0=e.catch(0),e.t0 instanceof Error){Error.captureStackTrace?Error.captureStackTrace(n={}):n=new Error,o=n.stack?n.stack.replace(/^.+\n/,""):"";try{e.t0.stack?o&&!String(e.t0.stack).endsWith(o.replace(/^.+\n.+\n/,""))&&(e.t0.stack+="\n"+o):e.t0.stack=o}catch(e){}}throw e.t0;case 10:case"end":return e.stop()}}),e,this,[[0,6]])}))),function(e,r){return t.apply(this,arguments)})},{key:"_request",value:function(e,t){"string"==typeof e?(t=t||{}).url=e:t=e||{};var r=t=st(this.defaults,t),n=r.transitional,o=r.paramsSerializer,i=r.headers;void 0!==n&&Bt.assertOptions(n,{silentJSONParsing:Dt.transitional(Dt.boolean),forcedJSONParsing:Dt.transitional(Dt.boolean),clarifyTimeoutError:Dt.transitional(Dt.boolean)},!1),null!=o&&(ye.isFunction(o)?t.paramsSerializer={serialize:o}:Bt.assertOptions(o,{encode:Dt.function,serialize:Dt.function},!0)),t.method=(t.method||this.defaults.method||"get").toLowerCase();var a=i&&ye.merge(i.common,i[t.method]);i&&ye.forEach(["delete","get","head","post","put","patch","common"],(function(e){delete i[e]})),t.headers=Ve.concat(a,i);var u=[],s=!0;this.interceptors.request.forEach((function(e){"function"==typeof e.runWhen&&!1===e.runWhen(t)||(s=s&&e.synchronous,u.unshift(e.fulfilled,e.rejected))}));var c,f=[];this.interceptors.response.forEach((function(e){f.push(e.fulfilled,e.rejected)}));var l,h=0;if(!s){var p=[_t.bind(this),void 0];for(p.unshift.apply(p,u),p.push.apply(p,f),l=p.length,c=Promise.resolve(t);h0;)n._listeners[t](e);n._listeners=null}})),this.promise.then=function(e){var t,r=new Promise((function(e){n.subscribe(e),t=e})).then(e);return r.cancel=function(){n.unsubscribe(t)},r},t((function(e,t,o){n.reason||(n.reason=new Ye(e,t,o),r(n.reason))}))}return y(e,[{key:"throwIfRequested",value:function(){if(this.reason)throw this.reason}},{key:"subscribe",value:function(e){this.reason?e(this.reason):this._listeners?this._listeners.push(e):this._listeners=[e]}},{key:"unsubscribe",value:function(e){if(this._listeners){var t=this._listeners.indexOf(e);-1!==t&&this._listeners.splice(t,1)}}},{key:"toAbortSignal",value:function(){var e=this,t=new AbortController,r=function(e){t.abort(e)};return this.subscribe(r),t.signal.unsubscribe=function(){return e.unsubscribe(r)},t.signal}}],[{key:"source",value:function(){var t;return{token:new e((function(e){t=e})),cancel:t}}}]),e}(),zt=Mt;var Ht={Continue:100,SwitchingProtocols:101,Processing:102,EarlyHints:103,Ok:200,Created:201,Accepted:202,NonAuthoritativeInformation:203,NoContent:204,ResetContent:205,PartialContent:206,MultiStatus:207,AlreadyReported:208,ImUsed:226,MultipleChoices:300,MovedPermanently:301,Found:302,SeeOther:303,NotModified:304,UseProxy:305,Unused:306,TemporaryRedirect:307,PermanentRedirect:308,BadRequest:400,Unauthorized:401,PaymentRequired:402,Forbidden:403,NotFound:404,MethodNotAllowed:405,NotAcceptable:406,ProxyAuthenticationRequired:407,RequestTimeout:408,Conflict:409,Gone:410,LengthRequired:411,PreconditionFailed:412,PayloadTooLarge:413,UriTooLong:414,UnsupportedMediaType:415,RangeNotSatisfiable:416,ExpectationFailed:417,ImATeapot:418,MisdirectedRequest:421,UnprocessableEntity:422,Locked:423,FailedDependency:424,TooEarly:425,UpgradeRequired:426,PreconditionRequired:428,TooManyRequests:429,RequestHeaderFieldsTooLarge:431,UnavailableForLegalReasons:451,InternalServerError:500,NotImplemented:501,BadGateway:502,ServiceUnavailable:503,GatewayTimeout:504,HttpVersionNotSupported:505,VariantAlsoNegotiates:506,InsufficientStorage:507,LoopDetected:508,NotExtended:510,NetworkAuthenticationRequired:511};Object.entries(Ht).forEach((function(e){var t=b(e,2),r=t[0],n=t[1];Ht[n]=r}));var Jt=Ht;var Wt=function e(t){var r=new qt(t),n=R(qt.prototype.request,r);return ye.extend(n,qt.prototype,r,{allOwnKeys:!0}),ye.extend(n,r,null,{allOwnKeys:!0}),n.create=function(r){return e(st(t,r))},n}(Me);return Wt.Axios=qt,Wt.CanceledError=Ye,Wt.CancelToken=zt,Wt.isCancel=$e,Wt.VERSION=Ct,Wt.toFormData=xe,Wt.AxiosError=me,Wt.Cancel=Wt.CanceledError,Wt.all=function(e){return Promise.all(e)},Wt.spread=function(e){return function(t){return e.apply(null,t)}},Wt.isAxiosError=function(e){return ye.isObject(e)&&!0===e.isAxiosError},Wt.mergeConfig=st,Wt.AxiosHeaders=Ve,Wt.formToJSON=function(e){return Ie(ye.isHTMLForm(e)?new FormData(e):e)},Wt.getAdapter=Lt,Wt.HttpStatusCode=Jt,Wt.default=Wt,Wt})); +//# sourceMappingURL=axios.min.js.map diff --git a/src/web/elementui/echarts.min.js b/src/web/elementui/echarts.min.js new file mode 100644 index 0000000..20fd3d2 --- /dev/null +++ b/src/web/elementui/echarts.min.js @@ -0,0 +1 @@ +!function(t,e){"object"==typeof exports&&"undefined"!=typeof module?e(exports):"function"==typeof define&&define.amd?define(["exports"],e):e((t="undefined"!=typeof globalThis?globalThis:t||self).echarts={})}(this,function(t){"use strict";var m=function(t,e){return(m=Object.setPrototypeOf||({__proto__:[]}instanceof Array?function(t,e){t.__proto__=e}:function(t,e){for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&(t[n]=e[n])}))(t,e)};function u(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Class extends value "+String(e)+" is not a constructor or null");function n(){this.constructor=t}m(t,e),t.prototype=null===e?Object.create(e):(n.prototype=e.prototype,new n)}var v=function(){this.firefox=!1,this.ie=!1,this.edge=!1,this.newEdge=!1,this.weChat=!1},w=new function(){this.browser=new v,this.node=!1,this.wxa=!1,this.worker=!1,this.svgSupported=!1,this.touchEventsSupported=!1,this.pointerEventsSupported=!1,this.domSupported=!1,this.transformSupported=!1,this.transform3dSupported=!1,this.hasGlobalWindow="undefined"!=typeof window};"object"==typeof wx&&"function"==typeof wx.getSystemInfoSync?(w.wxa=!0,w.touchEventsSupported=!0):"undefined"==typeof document&&"undefined"!=typeof self?w.worker=!0:"undefined"==typeof navigator?(w.node=!0,w.svgSupported=!0):(J=navigator.userAgent,re=(Gt=w).browser,ot=J.match(/Firefox\/([\d.]+)/),L=J.match(/MSIE\s([\d.]+)/)||J.match(/Trident\/.+?rv:(([\d.]+))/),Q=J.match(/Edge?\/([\d.]+)/),J=/micromessenger/i.test(J),ot&&(re.firefox=!0,re.version=ot[1]),L&&(re.ie=!0,re.version=L[1]),Q&&(re.edge=!0,re.version=Q[1],re.newEdge=18<+Q[1].split(".")[0]),J&&(re.weChat=!0),Gt.svgSupported="undefined"!=typeof SVGRect,Gt.touchEventsSupported="ontouchstart"in window&&!re.ie&&!re.edge,Gt.pointerEventsSupported="onpointerdown"in window&&(re.edge||re.ie&&11<=+re.version),Gt.domSupported="undefined"!=typeof document,ot=document.documentElement.style,Gt.transform3dSupported=(re.ie&&"transition"in ot||re.edge||"WebKitCSSMatrix"in window&&"m11"in new WebKitCSSMatrix||"MozPerspective"in ot)&&!("OTransition"in ot),Gt.transformSupported=Gt.transform3dSupported||re.ie&&9<=+re.version);var K="12px sans-serif";var _,x,b=function(t){var e={};if("undefined"!=typeof JSON)for(var n=0;n>1)%2;s.cssText=["position: absolute","visibility: hidden","padding: 0","margin: 0","border-width: 0","user-select: none","width:0","height:0",i[l]+":0",r[u]+":0",i[1-l]+":auto",r[1-u]+":auto",""].join("!important;"),t.appendChild(a),n.push(a)}}return n}(e,o),o,r);if(e)return e(t,n,i),!0}return!1}function ye(t){return"CANVAS"===t.nodeName.toUpperCase()}var me=/([&<>"'])/g,ve={"&":"&","<":"<",">":">",'"':""","'":"'"};function _e(t){return null==t?"":(t+"").replace(me,function(t,e){return ve[e]})}var xe=/^(?:mouse|pointer|contextmenu|drag|drop)|click/,be=[],we=w.browser.firefox&&+w.browser.version.split(".")[0]<39;function Se(t,e,n,i){return n=n||{},i?Me(t,e,n):we&&null!=e.layerX&&e.layerX!==e.offsetX?(n.zrX=e.layerX,n.zrY=e.layerY):null!=e.offsetX?(n.zrX=e.offsetX,n.zrY=e.offsetY):Me(t,e,n),n}function Me(t,e,n){if(w.domSupported&&t.getBoundingClientRect){var i,r=e.clientX,e=e.clientY;if(ye(t))return i=t.getBoundingClientRect(),n.zrX=r-i.left,void(n.zrY=e-i.top);if(ge(be,t,r,e))return n.zrX=be[0],void(n.zrY=be[1])}n.zrX=n.zrY=0}function Ie(t){return t||window.event}function Te(t,e,n){var i;return null==(e=Ie(e)).zrX&&((i=e.type)&&0<=i.indexOf("touch")?(i=("touchend"!==i?e.targetTouches:e.changedTouches)[0])&&Se(t,i,e,n):(Se(t,e,e,n),i=function(t){var e=t.wheelDelta;if(e)return e;var n=t.deltaX,t=t.deltaY;return null!=n&&null!=t?3*(0!==t?Math.abs(t):Math.abs(n))*(0=n.x&&t<=n.x+n.width&&e>=n.y&&e<=n.y+n.height},Ke.prototype.clone=function(){return new Ke(this.x,this.y,this.width,this.height)},Ke.prototype.copy=function(t){Ke.copy(this,t)},Ke.prototype.plain=function(){return{x:this.x,y:this.y,width:this.width,height:this.height}},Ke.prototype.isFinite=function(){return isFinite(this.x)&&isFinite(this.y)&&isFinite(this.width)&&isFinite(this.height)},Ke.prototype.isZero=function(){return 0===this.width||0===this.height},Ke.create=function(t){return new Ke(t.x,t.y,t.width,t.height)},Ke.copy=function(t,e){t.x=e.x,t.y=e.y,t.width=e.width,t.height=e.height},Ke.applyTransform=function(t,e,n){var i,r,o,a;n?n[1]<1e-5&&-1e-5t.getWidth()||n<0||n>t.getHeight()}E(["click","mousedown","mouseup","mousewheel","dblclick","contextmenu"],function(a){sn.prototype[a]=function(t){var e,n,i=t.zrX,r=t.zrY,o=hn(this,i,r);if("mouseup"===a&&o||(n=(e=this.findHover(i,r)).target),"mousedown"===a)this._downEl=n,this._downPoint=[t.zrX,t.zrY],this._upEl=n;else if("mouseup"===a)this._upEl=n;else if("click"===a){if(this._downEl!==this._upEl||!this._downPoint||4<$t(this._downPoint,[t.zrX,t.zrY]))return;this._downPoint=null}this.dispatchToElement(e,a,t)}});var cn=32,pn=7;function dn(t,e,n,i){var r=e+1;if(r===n)return 1;if(i(t[r++],t[e])<0){for(;r>>1])<0?l=o:s=1+o;var u=i-s;switch(u){case 3:t[s+3]=t[s+2];case 2:t[s+2]=t[s+1];case 1:t[s+1]=t[s];break;default:for(;0>>1);0>>1);o(t,e[n+h])<0?l=h:a=h+1}return l}function mn(A,L){var P,O,R=pn,N=0,E=(A.length,[]);function e(t){var e=P[t],n=O[t],i=P[t+1],r=O[t+1],t=(O[t]=n+r,t===N-3&&(P[t+1]=P[t+2],O[t+1]=O[t+2]),N--,yn(A[i],A,e,n,0,L));if(e+=t,0!=(n-=t)&&0!==(r=gn(A[e+n-1],A,i,r,r-1,L)))if(n<=r){var o=e,a=n,t=i,s=r,l=0;for(l=0;lO[t+1])break;e(t)}},forceMergeRuns:function(){for(;1>=1;return t+e}(r);do{}while((o=dn(t,n,i,e))=this._maxSize&&0>4|(3840&r)>>8,240&r|(240&r)>>4,15&r|(15&r)<<4,5===i?parseInt(n.slice(4),16)/15:1),gi(t,e),e):void ci(e,0,0,0,1):7===i||9===i?0<=(r=parseInt(n.slice(1,7),16))&&r<=16777215?(ci(e,(16711680&r)>>16,(65280&r)>>8,255&r,9===i?parseInt(n.slice(7),16)/255:1),gi(t,e),e):void ci(e,0,0,0,1):void 0;var r=n.indexOf("("),o=n.indexOf(")");if(-1!==r&&o+1===i){var i=n.substr(0,r),a=n.substr(r+1,o-(r+1)).split(","),s=1;switch(i){case"rgba":if(4!==a.length)return 3===a.length?ci(e,+a[0],+a[1],+a[2],1):ci(e,0,0,0,1);s=li(a.pop());case"rgb":return 3<=a.length?(ci(e,si(a[0]),si(a[1]),si(a[2]),3===a.length?s:li(a[3])),gi(t,e),e):void ci(e,0,0,0,1);case"hsla":return 4!==a.length?void ci(e,0,0,0,1):(a[3]=li(a[3]),mi(a,e),gi(t,e),e);case"hsl":return 3!==a.length?void ci(e,0,0,0,1):(mi(a,e),gi(t,e),e);default:return}}ci(e,0,0,0,1)}}function mi(t,e){var n=(parseFloat(t[0])%360+360)%360/360,i=li(t[1]),r=li(t[2]),i=r<=.5?r*(i+1):r+i-r*i,r=2*r-i;return ci(e=e||[],oi(255*ui(r,i,n+1/3)),oi(255*ui(r,i,n)),oi(255*ui(r,i,n-1/3)),1),4===t.length&&(e[3]=t[3]),e}function vi(t,e){var n=yi(t);if(n){for(var i=0;i<3;i++)n[i]=e<0?n[i]*(1-e)|0:(255-n[i])*e+n[i]|0,255e);g++);g=f(g-1,h-2)}i=u[g+1],n=u[g]}n&&i&&(this._lastFr=g,this._lastFrP=e,d=i.percent-n.percent,r=0==d?1:f((e-n.percent)/d,1),i.easingFunc&&(r=i.easingFunc(r)),f=a?this._additiveValue:p?Ri:t[c],(Oi(l)||p)&&(f=f||(this._additiveValue=[])),this.discrete?t[c]=(r<1?n:i).rawValue:Oi(l)?(1===l?Ci:function(t,e,n,i){for(var r=e.length,o=r&&e[0].length,a=0;athis._sleepAfterStill)&&this.animation.stop()},qr.prototype.setSleepAfterStill=function(t){this._sleepAfterStill=t},qr.prototype.wakeUp=function(){this.animation.start(),this._stillFrameAccum=0},qr.prototype.refreshHover=function(){this._needsRefreshHover=!0},qr.prototype.refreshHoverImmediately=function(){this._needsRefreshHover=!1,this.painter.refreshHover&&"canvas"===this.painter.getType()&&this.painter.refreshHover()},qr.prototype.resize=function(t){this.painter.resize((t=t||{}).width,t.height),this.handler.resize()},qr.prototype.clearAnimation=function(){this.animation.clear()},qr.prototype.getWidth=function(){return this.painter.getWidth()},qr.prototype.getHeight=function(){return this.painter.getHeight()},qr.prototype.setCursorStyle=function(t){this.handler.setCursorStyle(t)},qr.prototype.findHover=function(t,e){return this.handler.findHover(t,e)},qr.prototype.on=function(t,e,n){return this.handler.on(t,e,n),this},qr.prototype.off=function(t,e){this.handler.off(t,e)},qr.prototype.trigger=function(t,e){this.handler.trigger(t,e)},qr.prototype.clear=function(){for(var t=this.storage.getRoots(),e=0;el&&(l=s[h],u=h);++o[u],s[u]=0,++a}return B(o,function(t){return t/i})}function oo(t){var e=2*Math.PI;return(t%e+e)%e}function ao(t){return-1e-4=e.maxIterations){t+=e.ellipsis;break}var s=0===a?function(t,e,n,i){for(var r=0,o=0,a=t.length;oo){0i.width&&(o=e.split("\n"),c=!0),i.accumWidth=t):(t=da(e,h,i.width,i.breakAll,i.accumWidth),i.accumWidth=t.accumWidth+n,a=t.linesWidths,o=t.lines)):o=e.split("\n");for(var p=0;pthis._ux||i>this._uy;return this.addData(Oa.L,t,e),this._ctx&&r&&this._ctx.lineTo(t,e),r?(this._xi=t,this._yi=e,this._pendingPtDist=0):(r=n*n+i*i)>this._pendingPtDist&&(this._pendingPtX=t,this._pendingPtY=e,this._pendingPtDist=r),this},r.prototype.bezierCurveTo=function(t,e,n,i,r,o){return this._drawPendingPt(),this.addData(Oa.C,t,e,n,i,r,o),this._ctx&&this._ctx.bezierCurveTo(t,e,n,i,r,o),this._xi=r,this._yi=o,this},r.prototype.quadraticCurveTo=function(t,e,n,i){return this._drawPendingPt(),this.addData(Oa.Q,t,e,n,i),this._ctx&&this._ctx.quadraticCurveTo(t,e,n,i),this._xi=n,this._yi=i,this},r.prototype.arc=function(t,e,n,i,r,o){this._drawPendingPt(),Za[0]=i,Za[1]=r,s=o,(l=ja((a=Za)[0]))<0&&(l+=Ya),h=l-a[0],u=a[1],u+=h,!s&&Ya<=u-l?u=l+Ya:s&&Ya<=l-u?u=l-Ya:!s&&uu.length&&(this._expandData(),u=this.data);for(var h=0;hn||Ua(y)>i||c===e-1)&&(f=Math.sqrt(C*C+y*y),r=g,o=_);break;case Oa.C:var m=t[c++],v=t[c++],g=t[c++],_=t[c++],x=t[c++],b=t[c++],f=function(t,e,n,i,r,o,a,s,l){for(var u=t,h=e,c=0,p=1/l,d=1;d<=l;d++){var f=d*p,g=Bn(t,n,r,a,f),f=Bn(e,i,o,s,f),y=g-u,m=f-h;c+=Math.sqrt(y*y+m*m),u=g,h=f}return c}(r,o,m,v,g,_,x,b,10),r=x,o=b;break;case Oa.Q:f=function(t,e,n,i,r,o,a){for(var s=t,l=e,u=0,h=1/a,c=1;c<=a;c++){var p=c*h,d=Un(t,n,r,p),p=Un(e,i,o,p),f=d-s,g=p-l;u+=Math.sqrt(f*f+g*g),s=d,l=p}return u}(r,o,m=t[c++],v=t[c++],g=t[c++],_=t[c++],10),r=g,o=_;break;case Oa.A:var x=t[c++],b=t[c++],w=t[c++],S=t[c++],M=t[c++],I=t[c++],T=I+M;c+=1,t[c++],d&&(a=Ha(M)*w+x,s=Wa(M)*S+b),f=Ga(w,S)*Va(Ya,Math.abs(I)),r=Ha(T)*w+x,o=Wa(T)*S+b;break;case Oa.R:a=r=t[c++],s=o=t[c++];f=2*t[c++]+2*t[c++];break;case Oa.Z:var C=a-r,y=s-o;f=Math.sqrt(C*C+y*y),r=a,o=s}0<=f&&(u+=l[h++]=f)}return this._pathLen=u},r.prototype.rebuildPath=function(t,e){var n,i,r,o,a,s,l,u,h=this.data,E=this._ux,z=this._uy,B=this._len,c=e<1,p=0,d=0,f=0;if(!c||(this._pathSegLen||this._calculateLength(),a=this._pathSegLen,s=e*this._pathLen))t:for(var g=0;g=os[i=0]+t&&a<=os[1]+t?h:0;rMath.PI/2&&c<1.5*Math.PI?-h:h)}return l}(y,m,_,x,x+b,w,I,r);u=Math.cos(x+b)*v+y,h=Math.sin(x+b)*_+m;break;case ns.R:c=u=a[d++],p=h=a[d++];if(S=c+a[d++],M=p+a[d++],n){if($a(c,p,S,p,e,i,r)||$a(S,p,S,M,e,i,r)||$a(S,M,c,M,e,i,r)||$a(c,M,c,p,e,i,r))return!0}else l=(l+=es(S,p,S,M,i,r))+es(c,M,c,p,i,r);break;case ns.Z:if(n){if($a(u,h,c,p,e,i,r))return!0}else l+=es(u,h,c,p,i,r);u=c,h=p}}return n||(t=h,o=p,Math.abs(t-o)i.len()&&(uMath.abs(i[1])?0':'':{renderMode:r,content:"{"+(t.markerId||"markerX")+"|} ",style:"subItem"===i?{width:4,height:4,borderRadius:2,backgroundColor:n}:{width:10,height:10,borderRadius:5,backgroundColor:n}}:""}function Lp(t,e){return e=e||"transparent",V(t)?t:O(t)&&t.colorStops&&(t.colorStops[0]||{}).color||e}function Pp(t,e){var n;"_blank"===e||"blank"===e?((n=window.open()).opener=null,n.location.href=t):window.open(t,e)}var Op=E,Rp=["left","right","top","bottom","width","height"],Np=[["width","left","right"],["height","top","bottom"]];function Ep(a,s,l,u,h){var c=0,p=0,d=(null==u&&(u=1/0),null==h&&(h=1/0),0);s.eachChild(function(t,e){var n,i,r,o=t.getBoundingRect(),e=s.childAt(e+1),e=e&&e.getBoundingRect();d="horizontal"===a?(i=o.width+(e?-e.x+o.x:0),u<(n=c+i)||t.newline?(c=0,n=i,p+=d+l,o.height):Math.max(d,o.height)):(i=o.height+(e?-e.y+o.y:0),h<(r=p+i)||t.newline?(c+=d+l,p=0,r=i,o.width):Math.max(d,o.width)),t.newline||(t.x=c,t.y=p,t.markRedraw(),"horizontal"===a?c=n+l:p=r+l)})}var zp=Ep;function Bp(t,e,n){n=Ip(n||0);var i=e.width,r=e.height,o=W(t.left,i),a=W(t.top,r),e=W(t.right,i),s=W(t.bottom,r),l=W(t.width,i),u=W(t.height,r),h=n[2]+n[0],c=n[1]+n[3],p=t.aspect;switch(isNaN(l)&&(l=i-e-c-o),isNaN(u)&&(u=r-s-h-a),null!=p&&(isNaN(l)&&isNaN(u)&&(i/re)return t[i];return t[n-1]}var xd,bd="\0_ec_inner",wd=(u(o,xd=Bc),o.prototype.init=function(t,e,n,i,r,o){i=i||{},this.option=null,this._theme=new Bc(i),this._locale=new Bc(r),this._optionManager=o},o.prototype.setOption=function(t,e,n){e=Id(e);this._optionManager.setOption(t,n,e),this._resetOption(null,e)},o.prototype.resetOption=function(t,e){return this._resetOption(t,Id(e))},o.prototype._resetOption=function(t,e){var n,i=!1,r=this._optionManager;return t&&"recreate"!==t||(n=r.mountOption("recreate"===t),this.option&&"recreate"!==t?(this.restoreData(),this._mergeOption(n,e)):gd(this,n),i=!0),"timeline"!==t&&"media"!==t||this.restoreData(),t&&"recreate"!==t&&"timeline"!==t||(n=r.getTimelineOption(this))&&(i=!0,this._mergeOption(n,e)),t&&"recreate"!==t&&"media"!==t||(n=r.getMediaOption(this)).length&&E(n,function(t){i=!0,this._mergeOption(t,e)},this),i},o.prototype.mergeOption=function(t){this._mergeOption(t,null)},o.prototype._mergeOption=function(i,t){var r=this.option,h=this._componentsMap,c=this._componentsCount,n=[],o=N(),p=t&&t.replaceMergeMainTypeMap;ad(this).datasetMap=N(),E(i,function(t,e){null!=t&&(g.hasClass(e)?e&&(n.push(e),o.set(e,!0)):r[e]=null==r[e]?y(t):d(r[e],t,!0))}),p&&p.each(function(t,e){g.hasClass(e)&&!o.get(e)&&(n.push(e),o.set(e,!0))}),g.topologicalTravel(n,g.getAllClassMainTypes(),function(o){var a,t=function(t,e,n){return(e=(e=pd.get(e))&&e(t))?n.concat(e):n}(this,o,_o(i[o])),e=h.get(o),n=e?p&&p.get(o)?"replaceMerge":"normalMerge":"replaceAll",e=So(e,t,n),s=(ko(e,o,g),r[o]=null,h.set(o,null),c.set(o,0),[]),l=[],u=0;E(e,function(t,e){var n=t.existing,i=t.newOption;if(i){var r=g.getClass(o,t.keyInfo.subType,!("series"===o));if(!r)return;if("tooltip"===o){if(a)return;a=!0}n&&n.constructor===r?(n.name=t.keyInfo.name,n.mergeOption(i,this),n.optionUpdated(i,!1)):(e=P({componentIndex:e},t.keyInfo),P(n=new r(i,this,this,e),e),t.brandNew&&(n.__requireNewView=!0),n.init(i,this,this),n.optionUpdated(null,!0))}else n&&(n.mergeOption({},this),n.optionUpdated({},!1));n?(s.push(n.option),l.push(n),u++):(s.push(void 0),l.push(void 0))},this),r[o]=s,h.set(o,l),c.set(o,u),"series"===o&&dd(this)},this),this._seriesIndices||dd(this)},o.prototype.getOption=function(){var a=y(this.option);return E(a,function(t,e){if(g.hasClass(e)){for(var n=_o(t),i=n.length,r=!1,o=i-1;0<=o;o--)n[o]&&!Do(n[o])?r=!0:(n[o]=null,r||i--);n.length=i,a[e]=n}}),delete a[bd],a},o.prototype.getTheme=function(){return this._theme},o.prototype.getLocaleModel=function(){return this._locale},o.prototype.setUpdatePayload=function(t){this._payload=t},o.prototype.getUpdatePayload=function(){return this._payload},o.prototype.getComponent=function(t,e){var n=this._componentsMap.get(t);if(n){t=n[e||0];if(t)return t;if(null==e)for(var i=0;ig[1]&&(g[1]=f)}return{start:a,end:this._rawCount=this._count=s}},l.prototype._initDataFromProvider=function(t,e,n){for(var i=this._provider,r=this._chunks,o=this._dimensions,a=o.length,s=this._rawExtent,l=B(o,function(t){return t.property}),u=0;uf[1]&&(f[1]=g)}!i.persistent&&i.clean&&i.clean(),this._rawCount=this._count=e,this._extent=[]},l.prototype.count=function(){return this._count},l.prototype.get=function(t,e){return 0<=e&&e=this._rawCount||t<0)){if(!this._indices)return t;var e=this._indices,n=e[t];if(null!=n&&nt))return o;r=o-1}}}return-1},l.prototype.indicesOfNearest=function(t,e,n){var i=this._chunks[t],r=[];if(i){null==n&&(n=1/0);for(var o=1/0,a=-1,s=0,l=0,u=this.count();lt[S][1])&&(b=!1)}b&&(a[s++]=e.getRawIndex(f))}return sy[1]&&(y[1]=g)}}}},l.prototype.lttbDownSample=function(t,e){var n,i=this.clone([t],!0),r=i._chunks[t],o=this.count(),a=0,s=Math.floor(1/e),l=this.getRawIndex(0),u=new(dg(this._rawCount))(Math.min(2*(Math.ceil(o/s)+2),o));u[a++]=l;for(var h=1;hh[1]&&(h[1]=y),c[p++]=m}return r._count=p,r._indices=c,r._updateGetRawIdx(),r},l.prototype.each=function(t,e){if(this._count)for(var n=t.length,i=this._chunks,r=0,o=this.count();r'+_e(u)+""+h,t))}function Lg(t,e,n,i){var r,o,a,s,l=t.renderMode,u=e.noName,h=e.noValue,c=!e.markerType,p=e.name,d=t.useUTC,f=e.valueFormatter||t.valueFormatter||function(t){return B(t=F(t)?t:[t],function(t,e){return Tp(t,F(o)?o[e]:o,d)})};if(!u||!h)return r=c?"":t.markupStyleCreator.makeTooltipMarker(e.markerType,e.markerColor||"#333",l),p=u?"":Tp(p,"ordinal",d),o=e.valueType,f=h?[]:f(e.value),e=!c||!u,a=!c&&u,i=Mg(i,l),s=i.nameStyle,i=i.valueStyle,"richText"===l?(c?"":r)+(u?"":Rg(t,p,s))+(h?"":function(t,e,n,i,r){r=[r],i=i?10:20;return n&&r.push({padding:[0,0,0,i],align:"right"}),t.markupStyleCreator.wrapRichTextStyle(F(e)?e.join(" "):e,r)}(t,f,e,a,i)):Og((c?"":r)+(u?"":''+_e(p)+"")+(h?"":function(t,e,n,i){n=n?"10px":"20px",e=e?"float:right;margin-left:"+n:"";return t=F(t)?t:[t],''+B(t,_e).join("  ")+""}(f,e,a,i)),n)}function Pg(t,e,n,i,r,o){if(t)return kg(t)({useUTC:r,renderMode:n,orderMode:i,markupStyleCreator:e,valueFormatter:t.valueFormatter},t,0,o)}function Og(t,e){return'
'+t+'
'}function Rg(t,e,n){return t.markupStyleCreator.wrapRichTextStyle(e,n)}function Ng(t,e){t=t.get("padding");return null!=t?t:"richText"===e?[8,10]:10}zg.prototype._generateStyleName=function(){return"__EC_aUTo_"+this._nextStyleNameId++},zg.prototype.makeTooltipMarker=function(t,e,n){var i="richText"===n?this._generateStyleName():null,e=Ap({color:e,type:t,renderMode:n,markerId:i});return V(e)?e:(this.richTextStyles[i]=e.style,e.content)},zg.prototype.wrapRichTextStyle=function(t,e){var n={},e=(F(e)?E(e,function(t){return P(n,t)}):P(n,e),this._generateStyleName());return this.richTextStyles[e]=n,"{"+e+"|"+t+"}"};var Eg=zg;function zg(){this.richTextStyles={},this._nextStyleNameId=go()}function Bg(t){var e,n,i,r,o,a,s,l,u,h,c,p=t.series,d=t.dataIndex,t=t.multipleSeries,f=p.getData(),g=f.mapDimensionsAll("defaultedTooltip"),y=g.length,m=p.getRawValue(d),v=F(m),_=(_=d,Lp((b=p).getData().getItemVisual(_,"style")[b.visualDrawType]));function x(t,e){e=s.getDimensionInfo(e);e&&!1!==e.otherDims.tooltip&&(l?c.push(Cg("nameValue",{markerType:"subItem",markerColor:a,name:e.displayName,value:t,valueType:e.type})):(u.push(t),h.push(e.type)))}1this.getShallow("animationThreshold")?!1:t)},s.prototype.restoreData=function(){this.dataTask.dirty()},s.prototype.getColorFromPalette=function(t,e,n){var i=this.ecModel;return md.prototype.getColorFromPalette.call(this,t,e,n)||i.getColorFromPalette(t,e,n)},s.prototype.coordDimToDataDim=function(t){return this.getRawData().mapDimensionsAll(t)},s.prototype.getProgressive=function(){return this.get("progressive")},s.prototype.getProgressiveThreshold=function(){return this.get("progressiveThreshold")},s.prototype.select=function(t,e){this._innerSelect(this.getData(e),t)},s.prototype.unselect=function(t,e){var n=this.option.selectedMap;if(n){var i=this.option.selectedMode,r=this.getData(e);if("series"===i||"all"===n)this.option.selectedMap={},this._selectedDataIndicesMap={};else for(var o=0;oe.outputData.count()&&e.model.getRawData().cloneShallow(e.outputData)}function qg(e,n){E(Nt(e.CHANGABLE_METHODS,e.DOWNSAMPLE_METHODS),function(t){e.wrapMethod(t,S(Zg,n))})}function Zg(t,e){t=jg(t);return t&&t.setOutputEnd((e||this).count()),e}function jg(t){var e,n=(t.ecModel||{}).scheduler,n=n&&n.getPipeline(t.uid);if(n)return(n=n.currentTask)&&(e=n.agentStubMap)?e.get(t.uid):n}st(Hg,Nc),st(Hg,md),Uo(Hg,g);$g.prototype.init=function(t,e){},$g.prototype.render=function(t,e,n,i){},$g.prototype.dispose=function(t,e){},$g.prototype.updateView=function(t,e,n,i){},$g.prototype.updateLayout=function(t,e,n,i){},$g.prototype.updateVisual=function(t,e,n,i){},$g.prototype.toggleBlurSeries=function(t,e,n){},$g.prototype.eachRendered=function(t){var e=this.group;e&&e.traverse(t)};var Kg=$g;function $g(){this.group=new Hr,this.uid=Gc("viewComponent")}function Qg(){var o=Lo();return function(t){var e=o(t),t=t.pipelineContext,n=!!e.large,i=!!e.progressiveRender,r=e.large=!(!t||!t.large),e=e.progressiveRender=!(!t||!t.progressiveRender);return!(n==r&&i==e)&&"reset"}}Wo(Kg),Zo(Kg);var Jg=Lo(),ty=Qg(),ey=(ny.prototype.init=function(t,e){},ny.prototype.render=function(t,e,n,i){},ny.prototype.highlight=function(t,e,n,i){t=t.getData(i&&i.dataType);t&&ry(t,i,"emphasis")},ny.prototype.downplay=function(t,e,n,i){t=t.getData(i&&i.dataType);t&&ry(t,i,"normal")},ny.prototype.remove=function(t,e){this.group.removeAll()},ny.prototype.dispose=function(t,e){},ny.prototype.updateView=function(t,e,n,i){this.render(t,e,n,i)},ny.prototype.updateLayout=function(t,e,n,i){this.render(t,e,n,i)},ny.prototype.updateVisual=function(t,e,n,i){this.render(t,e,n,i)},ny.prototype.eachRendered=function(t){uc(this.group,t)},ny.markUpdateMethod=function(t,e){Jg(t).updateMethod=e},ny.protoInitialize=void(ny.prototype.type="chart"),ny);function ny(){this.group=new Hr,this.uid=Gc("viewChart"),this.renderTask=Lf({plan:oy,reset:ay}),this.renderTask.context={view:this}}function iy(t,e,n){t&&Wl(t)&&("emphasis"===e?Il:Tl)(t,n)}function ry(e,t,n){var i,r=Ao(e,t),o=t&&null!=t.highlightKey?(t=t.highlightKey,i=null==(i=Zs[t])&&qs<=32?Zs[t]=qs++:i):null;null!=r?E(_o(r),function(t){iy(e.getItemGraphicEl(t),n,o)}):e.eachItemGraphicEl(function(t){iy(t,n,o)})}function oy(t){return ty(t.model)}function ay(t){var e=t.model,n=t.ecModel,i=t.api,r=t.payload,o=e.pipelineContext.progressiveRender,t=t.view,a=r&&Jg(r).updateMethod,o=o?"incrementalPrepareRender":a&&t[a]?a:"render";return"render"!==o&&t[o](e,n,i,r),sy[o]}Wo(ey),Zo(ey);var sy={incrementalPrepareRender:{progress:function(t,e){e.view.incrementalRender(t,e.model,e.ecModel,e.api,e.payload)}},render:{forceFirstProgress:!0,progress:function(t,e){e.view.render(e.model,e.ecModel,e.api,e.payload)}}},ly="\0__throttleOriginMethod",uy="\0__throttleRate",hy="\0__throttleType";function cy(t,r,o){var a,s,l,u,h,c=0,p=0,d=null;function f(){p=(new Date).getTime(),d=null,t.apply(l,u||[])}r=r||0;function e(){for(var t=[],e=0;en.blockIndex?n.step:null,modBy:null!=(t=i&&i.modDataCount)?Math.ceil(t/e):null,modDataCount:t}},wy.prototype.getPipeline=function(t){return this._pipelineMap.get(t)},wy.prototype.updateStreamModes=function(t,e){var n=this._pipelineMap.get(t.uid),i=t.getData().count(),e=n.progressiveEnabled&&e.incrementalPrepareRender&&i>=n.threshold,r=t.get("large")&&i>=t.get("largeThreshold"),i="mod"===t.get("progressiveChunkMode")?i:null;t.pipelineContext=n.context={progressiveRender:e,modDataCount:i,large:r}},wy.prototype.restorePipelines=function(t){var i=this,r=i._pipelineMap=N();t.eachSeries(function(t){var e=t.getProgressive(),n=t.uid;r.set(n,{id:n,head:null,tail:null,threshold:t.getProgressiveThreshold(),progressiveEnabled:e&&!(t.preventIncremental&&t.preventIncremental()),blockIndex:-1,step:Math.round(e||700),count:0}),i._pipe(t,t.dataTask)})},wy.prototype.prepareStageTasks=function(){var n=this._stageTaskMap,i=this.api.getModel(),r=this.api;E(this._allHandlers,function(t){var e=n.get(t.uid)||n.set(t.uid,{});It(!(t.reset&&t.overallReset),""),t.reset&&this._createSeriesStageTask(t,e,i,r),t.overallReset&&this._createOverallStageTask(t,e,i,r)},this)},wy.prototype.prepareView=function(t,e,n,i){var r=t.renderTask,o=r.context;o.model=e,o.ecModel=n,o.api=i,r.__block=!t.incrementalPrepareRender,this._pipe(e,r)},wy.prototype.performDataProcessorTasks=function(t,e){this._performStageTasks(this._dataProcessorHandlers,t,e,{block:!0})},wy.prototype.performVisualTasks=function(t,e,n){this._performStageTasks(this._visualHandlers,t,e,n)},wy.prototype._performStageTasks=function(t,s,l,u){u=u||{};var h=!1,c=this;function p(t,e){return t.setDirty&&(!t.dirtyMap||t.dirtyMap.get(e.__pipeline.id))}E(t,function(i,t){var e,n,r,o,a;u.visualType&&u.visualType!==i.visualType||(e=(n=c._stageTaskMap.get(i.uid)).seriesTaskMap,(n=n.overallTask)?((o=n.agentStubMap).each(function(t){p(u,t)&&(t.dirty(),r=!0)}),r&&n.dirty(),c.updatePayload(n,l),a=c.getPerformArgs(n,u.block),o.each(function(t){t.perform(a)}),n.perform(a)&&(h=!0)):e&&e.each(function(t,e){p(u,t)&&t.dirty();var n=c.getPerformArgs(t,u.block);n.skip=!i.performRawSeries&&s.isSeriesFiltered(t.context.model),c.updatePayload(t,l),t.perform(n)&&(h=!0)}))}),this.unfinished=h||this.unfinished},wy.prototype.performSeriesTasks=function(t){var e;t.eachSeries(function(t){e=t.dataTask.perform()||e}),this.unfinished=e||this.unfinished},wy.prototype.plan=function(){this._pipelineMap.each(function(t){var e=t.tail;do{if(e.__block){t.blockIndex=e.__idxInPipeline;break}}while(e=e.getUpstream())})},wy.prototype.updatePayload=function(t,e){"remain"!==e&&(t.context.payload=e)},wy.prototype._createSeriesStageTask=function(n,t,i,r){var o=this,a=t.seriesTaskMap,s=t.seriesTaskMap=N(),t=n.seriesType,e=n.getTargetSeries;function l(t){var e=t.uid,e=s.set(e,a&&a.get(e)||Lf({plan:Cy,reset:Dy,count:Ly}));e.context={model:t,ecModel:i,api:r,useClearVisual:n.isVisual&&!n.isLayout,plan:n.plan,reset:n.reset,scheduler:o},o._pipe(t,e)}n.createOnAllSeries?i.eachRawSeries(l):t?i.eachRawSeriesByType(t,l):e&&e(i,r).each(l)},wy.prototype._createOverallStageTask=function(t,e,n,i){var r=this,o=e.overallTask=e.overallTask||Lf({reset:Sy}),a=(o.context={ecModel:n,api:i,overallReset:t.overallReset,scheduler:r},o.agentStubMap),s=o.agentStubMap=N(),e=t.seriesType,l=t.getTargetSeries,u=!0,h=!1;function c(t){var e=t.uid,e=s.set(e,a&&a.get(e)||(h=!0,Lf({reset:My,onDirty:Ty})));e.context={model:t,overallProgress:u},e.agent=o,e.__block=u,r._pipe(t,e)}It(!t.createOnAllSeries,""),e?n.eachRawSeriesByType(e,c):l?l(n,i).each(c):(u=!1,E(n.getSeries(),c)),h&&o.dirty()},wy.prototype._pipe=function(t,e){t=t.uid,t=this._pipelineMap.get(t);t.head||(t.head=e),t.tail&&t.tail.pipe(e),(t.tail=e).__idxInPipeline=t.count++,e.__pipeline=t},wy.wrapStageHandler=function(t,e){return(t=M(t)?{overallReset:t,seriesType:function(t){Py=null;try{t(Oy,Ry)}catch(t){}return Py}(t)}:t).uid=Gc("stageHandler"),e&&(t.visualType=e),t};var by=wy;function wy(t,e,n,i){this._stageTaskMap=N(),this.ecInstance=t,this.api=e,n=this._dataProcessorHandlers=n.slice(),i=this._visualHandlers=i.slice(),this._allHandlers=n.concat(i)}function Sy(t){t.overallReset(t.ecModel,t.api,t.payload)}function My(t){return t.overallProgress&&Iy}function Iy(){this.agent.dirty(),this.getDownstream().dirty()}function Ty(){this.agent&&this.agent.dirty()}function Cy(t){return t.plan?t.plan(t.model,t.ecModel,t.api,t.payload):null}function Dy(t){t.useClearVisual&&t.data.clearAllVisual();t=t.resetDefines=_o(t.reset(t.model,t.ecModel,t.api,t.payload));return 1'+t.dom+""}),f.painter.getSvgRoot().innerHTML=g,i.connectedBackgroundColor&&f.painter.setBackgroundColor(i.connectedBackgroundColor),f.refreshImmediately(),f.painter.toDataURL()):(i.connectedBackgroundColor&&f.add(new As({shape:{x:0,y:0,width:t,height:n},style:{fill:i.connectedBackgroundColor}})),E(p,function(t){t=new bs({style:{x:t.left*e-l,y:t.top*e-u,image:t.dom}});f.add(t)}),f.refreshImmediately(),d.toDataURL("image/"+(i&&i.type||"png")))):this.getDataURL(i);this.id},h.prototype.convertToPixel=function(t,e){return e0(this,"convertToPixel",t,e)},h.prototype.convertFromPixel=function(t,e){return e0(this,"convertFromPixel",t,e)},h.prototype.containPixel=function(t,i){var r;if(!this._disposed)return E(Oo(this._model,t),function(t,n){0<=n.indexOf("Models")&&E(t,function(t){var e=t.coordinateSystem;e&&e.containPoint?r=r||!!e.containPoint(i):"seriesModels"===n&&(e=this._chartsMap[t.__viewId])&&e.containPoint&&(r=r||e.containPoint(i,t))},this)},this),!!r;this.id},h.prototype.getVisual=function(t,e){var t=Oo(this._model,t,{defaultMainType:"series"}),n=t.seriesModel.getData(),t=t.hasOwnProperty("dataIndexInside")?t.dataIndexInside:t.hasOwnProperty("dataIndex")?n.indexOfRawIndex(t.dataIndex):null;if(null==t)return Wy(n,e);var i=n,r=t,o=e;switch(o){case"color":return i.getItemVisual(r,"style")[i.getVisual("drawType")];case"opacity":return i.getItemVisual(r,"style").opacity;case"symbol":case"symbolSize":case"liftZ":return i.getItemVisual(r,o)}},h.prototype.getViewOfComponentModel=function(t){return this._componentsMap[t.__viewId]},h.prototype.getViewOfSeriesModel=function(t){return this._chartsMap[t.__viewId]},h.prototype._initEvents=function(){var t,n,i,s=this;E(w0,function(a){function t(t){var n,e,i,r=s.getModel(),o=t.target;"globalout"===a?n={}:o&&Yy(o,function(t){var e,t=D(t);return t&&null!=t.dataIndex?(e=t.dataModel||r.getSeriesByIndex(t.seriesIndex),n=e&&e.getDataParams(t.dataIndex,t.dataType,o)||{},1):t.eventData&&(n=P({},t.eventData),1)},!0),n&&(e=n.componentType,i=n.componentIndex,"markLine"!==e&&"markPoint"!==e&&"markArea"!==e||(e="series",i=n.seriesIndex),i=(e=e&&null!=i&&r.getComponent(e,i))&&s["series"===e.mainType?"_chartsMap":"_componentsMap"][e.__viewId],n.event=t,n.type=a,s._$eventProcessor.eventInfo={targetEl:o,packedEvent:n,model:e,view:i},s.trigger(a,n))}t.zrEventfulCallAtLast=!0,s._zr.on(a,t,s)}),E(M0,function(t,e){s._messageCenter.on(e,function(t){this.trigger(e,t)},s)}),E(["selectchanged"],function(e){s._messageCenter.on(e,function(t){this.trigger(e,t)},s)}),t=this._messageCenter,i=(n=this)._api,t.on("selectchanged",function(t){var e=i.getModel();t.isFromClick?(Xy("map","selectchanged",n,e,t),Xy("pie","selectchanged",n,e,t)):"select"===t.fromAction?(Xy("map","selected",n,e,t),Xy("pie","selected",n,e,t)):"unselect"===t.fromAction&&(Xy("map","unselected",n,e,t),Xy("pie","unselected",n,e,t))})},h.prototype.isDisposed=function(){return this._disposed},h.prototype.clear=function(){this._disposed?this.id:this.setOption({series:[]},!0)},h.prototype.dispose=function(){var t,e,n;this._disposed?this.id:(this._disposed=!0,this.getDom()&&zo(this.getDom(),R0,""),e=(t=this)._api,n=t._model,E(t._componentsViews,function(t){t.dispose(n,e)}),E(t._chartsViews,function(t){t.dispose(n,e)}),t._zr.dispose(),t._dom=t._model=t._chartsMap=t._componentsMap=t._chartsViews=t._componentsViews=t._scheduler=t._api=t._zr=t._throttledZrFlush=t._theme=t._coordSysMgr=t._messageCenter=null,delete A0[t.id])},h.prototype.resize=function(t){if(!this[Vm])if(this._disposed)this.id;else{this._zr.resize(t);var e=this._model;if(this._loadingFX&&this._loadingFX.resize(),e){var e=e.resetOption("media"),n=t&&t.silent;this[Gm]&&(null==n&&(n=this[Gm].silent),e=!0,this[Gm]=null),this[Vm]=!0;try{e&&$m(this),t0.update.call(this,{type:"resize",animation:P({duration:0},t&&t.animation)})}catch(t){throw this[Vm]=!1,t}this[Vm]=!1,r0.call(this,n),o0.call(this,n)}}},h.prototype.showLoading=function(t,e){this._disposed?this.id:(O(t)&&(e=t,t=""),t=t||"default",this.hideLoading(),k0[t]&&(t=k0[t](this._api,e),e=this._zr,this._loadingFX=t,e.add(t)))},h.prototype.hideLoading=function(){this._disposed?this.id:(this._loadingFX&&this._zr.remove(this._loadingFX),this._loadingFX=null)},h.prototype.makeActionFromEvent=function(t){var e=P({},t);return e.type=M0[t.type],e},h.prototype.dispatchAction=function(t,e){var n;this._disposed?this.id:(O(e)||(e={silent:!!e}),S0[t.type]&&this._model&&(this[Vm]?this._pendingActions.push(t):(n=e.silent,i0.call(this,t,n),(t=e.flush)?this._zr.flush():!1!==t&&w.browser.weChat&&this._throttledZrFlush(),r0.call(this,n),o0.call(this,n))))},h.prototype.updateLabelLayout=function(){Bm.trigger("series:layoutlabels",this._model,this._api,{updatedSeries:[]})},h.prototype.appendData=function(t){var e;this._disposed?this.id:(e=t.seriesIndex,this.getModel().getSeriesByIndex(e).appendData(t),this._scheduler.unfinished=!0,this.getZr().wakeUp())},h.internalField=($m=function(t){var e=t._scheduler;e.restorePipelines(t._model),e.prepareStageTasks(),Qm(t,!0),Qm(t,!1),e.plan()},Qm=function(t,r){for(var o=t._model,a=t._scheduler,s=r?t._componentsViews:t._chartsViews,l=r?t._componentsMap:t._chartsMap,u=t._zr,h=t._api,e=0;es.get("hoverLayerThreshold")&&!w.node&&!w.worker&&s.eachSeries(function(t){t.preventUsingHoverLayer||(t=i._chartsMap[t.__viewId]).__alive&&t.eachRendered(function(t){t.states.emphasis&&(t.states.emphasis.hoverLayer=!0)})}),Bm.trigger("series:afterupdate",t,e,n)},d0=function(t){t[Hm]=!0,t.getZr().wakeUp()},f0=function(t){t[Hm]&&(t.getZr().storage.traverse(function(t){Oh(t)||v0(t)}),t[Hm]=!1)},c0=function(n){return u(t,e=Td),t.prototype.getCoordinateSystems=function(){return n._coordSysMgr.getCoordinateSystems()},t.prototype.getComponentByElement=function(t){for(;t;){var e=t.__ecComponentInfo;if(null!=e)return n._model.getComponent(e.mainType,e.index);t=t.parent}},t.prototype.enterEmphasis=function(t,e){Il(t,e),d0(n)},t.prototype.leaveEmphasis=function(t,e){Tl(t,e),d0(n)},t.prototype.enterBlur=function(t){Cl(t),d0(n)},t.prototype.leaveBlur=function(t){Dl(t),d0(n)},t.prototype.enterSelect=function(t){kl(t),d0(n)},t.prototype.leaveSelect=function(t){Al(t),d0(n)},t.prototype.getModel=function(){return n.getModel()},t.prototype.getViewOfComponentModel=function(t){return n.getViewOfComponentModel(t)},t.prototype.getViewOfSeriesModel=function(t){return n.getViewOfSeriesModel(t)},new t(n);function t(){return null!==e&&e.apply(this,arguments)||this}var e},void(p0=function(i){function r(t,e){for(var n=0;ne[1]&&(e[1]=t[1])},zv.prototype.unionExtentFromData=function(t,e){this.unionExtent(t.getApproximateExtent(e))},zv.prototype.getExtent=function(){return this._extent.slice()},zv.prototype.setExtent=function(t,e){var n=this._extent;isNaN(t)||(n[0]=t),isNaN(e)||(n[1]=e)},zv.prototype.isInExtentRange=function(t){return this._extent[0]<=t&&this._extent[1]>=t},zv.prototype.isBlank=function(){return this._isBlank},zv.prototype.setBlank=function(t){this._isBlank=t};var Ev=zv;function zv(t){this._setting=t||{},this._extent=[1/0,-1/0]}Zo(Ev);var Bv=0,Fv=(Vv.createByAxisModel=function(t){var t=t.option,e=t.data,e=e&&B(e,Gv);return new Vv({categories:e,needCollect:!e,deduplication:!1!==t.dedplication})},Vv.prototype.getOrdinal=function(t){return this._getOrCreateMap().get(t)},Vv.prototype.parseAndCollect=function(t){var e,n,i=this._needCollect;return V(t)||i?(i&&!this._deduplication?(n=this.categories.length,this.categories[n]=t):null==(n=(e=this._getOrCreateMap()).get(t))&&(i?(n=this.categories.length,this.categories[n]=t,e.set(t,n)):n=NaN),n):t},Vv.prototype._getOrCreateMap=function(){return this._map||(this._map=N(this.categories))},Vv);function Vv(t){this.categories=t.categories||[],this._needCollect=t.needCollect,this._deduplication=t.deduplication,this.uid=++Bv}function Gv(t){return O(t)&&null!=t.value?t.value:t+""}function Hv(t){return"interval"===t.type||"log"===t.type}function Wv(t,e,n,i){var r={},o=t[1]-t[0],o=r.interval=co(o/e,!0),e=(null!=n&&oi[1]&&(i[0]=i[1]),r}function Uv(t){var e=Math.pow(10,ho(t)),t=t/e;return t?2===t?t=3:3===t?t=5:t*=2:t=1,Jr(t*e)}function Xv(t){return eo(t)+2}function Yv(t,e,n){t[e]=Math.max(Math.min(t[e],n[1]),n[0])}function qv(t,e){return t>=e[0]&&t<=e[1]}function Zv(t,e){return e[1]===e[0]?.5:(t-e[0])/(e[1]-e[0])}function jv(t,e){return t*(e[1]-e[0])+e[0]}u(Qv,Kv=Ev),Qv.prototype.parse=function(t){return null==t?NaN:V(t)?this._ordinalMeta.getOrdinal(t):Math.round(t)},Qv.prototype.contain=function(t){return qv(t=this.parse(t),this._extent)&&null!=this._ordinalMeta.categories[t]},Qv.prototype.normalize=function(t){return Zv(t=this._getTickNumber(this.parse(t)),this._extent)},Qv.prototype.scale=function(t){return t=Math.round(jv(t,this._extent)),this.getRawOrdinalNumber(t)},Qv.prototype.getTicks=function(){for(var t=[],e=this._extent,n=e[0];n<=e[1];)t.push({value:n}),n++;return t},Qv.prototype.getMinorTicks=function(t){},Qv.prototype.setSortInfo=function(t){if(null==t)this._ordinalNumbersByTick=this._ticksByOrdinalNumber=null;else{for(var e=t.ordinalNumbers,n=this._ordinalNumbersByTick=[],i=this._ticksByOrdinalNumber=[],r=0,o=this._ordinalMeta.categories.length,a=Math.min(o,e.length);r=t},Qv.prototype.getOrdinalMeta=function(){return this._ordinalMeta},Qv.prototype.calcNiceTicks=function(){},Qv.prototype.calcNiceExtent=function(){},Qv.type="ordinal";var Kv,$v=Qv;function Qv(t){var t=Kv.call(this,t)||this,e=(t.type="ordinal",t.getSetting("ordinalMeta"));return F(e=e||new Fv({}))&&(e=new Fv({categories:B(e,function(t){return O(t)?t.value:t})})),t._ordinalMeta=e,t._extent=t.getSetting("extent")||[0,e.categories.length-1],t}Ev.registerClass($v);var Jv,t_=Jr,e_=(u(n_,Jv=Ev),n_.prototype.parse=function(t){return t},n_.prototype.contain=function(t){return qv(t,this._extent)},n_.prototype.normalize=function(t){return Zv(t,this._extent)},n_.prototype.scale=function(t){return jv(t,this._extent)},n_.prototype.setExtent=function(t,e){var n=this._extent;isNaN(t)||(n[0]=parseFloat(t)),isNaN(e)||(n[1]=parseFloat(e))},n_.prototype.unionExtent=function(t){var e=this._extent;t[0]e[1]&&(e[1]=t[1]),this.setExtent(e[0],e[1])},n_.prototype.getInterval=function(){return this._interval},n_.prototype.setInterval=function(t){this._interval=t,this._niceExtent=this._extent.slice(),this._intervalPrecision=Xv(t)},n_.prototype.getTicks=function(t){var e=this._interval,n=this._extent,i=this._niceExtent,r=this._intervalPrecision,o=[];if(e){n[0]s&&o.push(t?{value:t_(s+e,r)}:{value:n[1]})}return o},n_.prototype.getMinorTicks=function(t){for(var e=this.getTicks(!0),n=[],i=this.getExtent(),r=1;ri[0]&&h=M[0]&&d<=M[1]&&a++)}u=(M[1]-M[0])/w;if(1.5*u=M[0]&&t.value<=M[1]&&!t.notAdd})}),function(t){return 0n&&(this._approxInterval=n),m_.length),t=Math.min(function(t,e,n,i){for(;n>>1;t[r][1]>1^-(1&s),l=(l=t.charCodeAt(a+1)-64)>>1^-(1&l);i.push([(r=s+=r)/n,(o=l+=o)/n])}return i}function h1(t,o){var e,n,r;return B(ht((t=(e=t).UTF8Encoding?(null==(r=(n=e).UTF8Scale)&&(r=1024),E(n.features,function(t){var e=t.geometry,n=e.encodeOffsets,i=e.coordinates;if(n)switch(e.type){case"LineString":e.coordinates=u1(i,n,r);break;case"Polygon":case"MultiLineString":l1(i,n,r);break;case"MultiPolygon":E(i,function(t,e){return l1(t,n[e],r)})}}),n.UTF8Encoding=!1,n):e).features,function(t){return t.geometry&&t.properties&&0l[1],h(n[0].coord,l[0])&&(t?n[0].coord=l[0]:n.shift()),t&&h(l[0],n[0].coord)&&n.unshift({coord:l[0]}),h(l[1],i.coord)&&(t?i.coord=l[1]:n.pop()),t)&&h(i.coord,l[1])&&n.push({coord:l[1]}),u},b1.prototype.getMinorTicksCoords=function(){var t;return"ordinal"===this.scale.type?[]:(t=this.model.getModel("minorTick").get("splitNumber"),B(this.scale.getMinorTicks(t=0=u}}for(var o,a=this.__startIndex;ar[0]){for(l=0;lt);l++);s=i[r[l]]}r.splice(l+1,0,t),(i[t]=e).virtual||(s?(n=s.dom).nextSibling?a.insertBefore(e.dom,n.nextSibling):a.appendChild(e.dom):a.firstChild?a.insertBefore(e.dom,a.firstChild):a.appendChild(e.dom)),e.__painter=this}},p.prototype.eachLayer=function(t,e){for(var n=this._zlevelList,i=0;ie&&(e=t[n]);return isFinite(e)?e:NaN},min:function(t){for(var e=1/0,n=0;n=r.r0?"endArc":"startArc":r.endAngle>=r.startAngle?"endAngle":"startAngle":a?0<=r.height?"bottom":"top":0<=r.width?"right":"left"),h=gc(i),l=(fc(t,h,{labelFetcher:o,labelDataIndex:n,defaultText:Rx(o.getData(),n),inheritColor:l.fill,defaultOpacity:l.opacity,defaultOutsidePosition:u}),t.getTextContent()),h=(s&&l&&(s=i.get(["label","position"]),t.textConfig.inside="middle"===s||null,function(t,e,n,i){if(G(i))t.setTextConfig({rotation:i});else if(F(e))t.setTextConfig({rotation:0});else{var r,i=t.shape,o=i.clockwise?i.startAngle:i.endAngle,a=i.clockwise?i.endAngle:i.startAngle,s=(o+a)/2,i=n(e);switch(i){case"startArc":case"insideStartArc":case"middle":case"insideEndArc":case"endArc":r=s;break;case"startAngle":case"insideStartAngle":r=o;break;case"endAngle":case"insideEndAngle":r=a;break;default:return t.setTextConfig({rotation:0})}n=1.5*Math.PI-r;"middle"===i&&n>Math.PI/2&&n<1.5*Math.PI&&(n-=Math.PI),t.setTextConfig({rotation:n})}}(t,"outside"===s?u:s,Qx(a),i.get(["label","rotate"]))),u=l,s=h,a=o.getRawValue(n),l=function(t){return Nx(e,t)},u&&((u=wc(u)).prevValue=u.value,u.value=a,a=s.normal,u.valueAnimation=a.get("valueAnimation"),u.valueAnimation)&&(u.precision=a.get("precision"),u.defaultInterpolatedText=l,u.statesModels=s),i.getModel(["emphasis"]));Bl(t,h.get("focus"),h.get("blurScope"),h.get("disabled")),Gl(t,i),null!=(o=r).startAngle&&null!=o.endAngle&&o.startAngle===o.endAngle&&(t.style.fill="none",t.style.stroke="none",E(t.states,function(t){t.style&&(t.style.fill=t.style.stroke="none")}))}var tb,eb=function(){},nb=(u(ib,tb=j),ib.prototype.getDefaultShape=function(){return new eb},ib.prototype.buildPath=function(t,e){for(var n=e.points,i=this.baseDimIdx,r=1-this.baseDimIdx,o=[],a=[],s=this.barWidth,l=0;le[u-1].coord&&(e.reverse(),h.reverse()),function(t,e){var n,i,r=[],o=t.length;function a(t,e,n){var i=t.coord;return{coord:n,color:xi((n-i)/(e.coord-i),[t.color,e.color])}}for(var s=0;si)return;return 1}(a,e))return r=e.mapDimension(a.dim),o={},E(a.getViewLabels(),function(t){t=a.scale.getRawOrdinalNumber(t.tickValue);o[t]=1}),function(t){return!o.hasOwnProperty(e.get(r,t))}}}function Hb(t){for(var e,n,i=t.length/2;0l?x:_,(g=Math.abs(d.label.y-l))>=f.maxY&&(m=d.label.x-s-d.len2*h,y=u+d.len,m=Math.abs(m)t.unconstrainedWidth)?null:s,i.setStyle("width",l)),u=i.getBoundingRect(),r.width=u.width,e=(i.style.margin||0)+2.1,r.height=u.height+e,r.y-=(r.height-a)/2)}function rw(t){return"center"===t.position}function ow(t){var S,M,I=t.getData(),T=[],C=!1,D=(t.get("minShowLabelAngle")||0)*ew,e=I.getLayout("viewRect"),k=I.getLayout("r"),A=e.width,L=e.x,n=e.y,e=e.height;function P(t){t.ignore=!0}if(I.each(function(t){var e,n,i,r,o,a,s,l,u,h,c=I.getItemGraphicEl(t),p=c.shape,d=c.getTextContent(),f=c.getTextGuideLine(),t=I.getItemModel(t),g=t.getModel("label"),y=g.get("position")||t.get(["emphasis","label","position"]),m=g.get("distanceToLabelLine"),v=g.get("alignTo"),_=W(g.get("edgeDistance"),A),x=g.get("bleedMargin"),t=t.getModel("labelLine"),b=W(t.get("length"),A),w=W(t.get("length2"),A);Math.abs(p.endAngle-p.startAngle)=e.r0},cw.type="pie";var uw,hw=cw;function cw(){var t=null!==uw&&uw.apply(this,arguments)||this;return t.ignoreLabelLineUpdate=!0,t}function pw(t,e,n){e=F(e)?{coordDimensions:e}:P({encodeDefine:t.getEncode()},e);var i=t.getSource(),e=Dv(i,e).dimensions,e=new Cv(e,t);return e.initData(i,n),e}fw.prototype.getAllNames=function(){var t=this._getRawData();return t.mapArray(t.getName)},fw.prototype.containName=function(t){return 0<=this._getRawData().indexOfName(t)},fw.prototype.indexOfName=function(t){return this._getDataWithEncodedVisual().indexOfName(t)},fw.prototype.getItemVisual=function(t,e){return this._getDataWithEncodedVisual().getItemVisual(t,e)};var dw=fw;function fw(t,e){this._getDataWithEncodedVisual=t,this._getRawData=e}var gw,yw=Lo(),mw=(u(vw,gw=Hg),vw.prototype.init=function(t){gw.prototype.init.apply(this,arguments),this.legendVisualProvider=new dw(pt(this.getData,this),pt(this.getRawData,this)),this._defaultLabelLine(t)},vw.prototype.mergeOption=function(){gw.prototype.mergeOption.apply(this,arguments)},vw.prototype.getInitialData=function(){return pw(this,{coordDimensions:["value"],encodeDefaulter:S(ld,this)})},vw.prototype.getDataParams=function(t){var e,n=this.getData(),i=yw(n),r=i.seats,i=(r||(e=[],n.each(n.mapDimension("value"),function(t){e.push(t)}),r=i.seats=ro(e,n.hostModel.get("percentPrecision"))),gw.prototype.getDataParams.call(this,t));return i.percent=r[t]||0,i.$vars.push("percent"),i},vw.prototype._defaultLabelLine=function(t){xo(t,"labelLine",["show"]);var e=t.labelLine,n=t.emphasis.labelLine;e.show=e.show&&t.label.show,n.show=n.show&&t.emphasis.label.show},vw.type="series.pie",vw.defaultOption={z:2,legendHoverLink:!0,colorBy:"data",center:["50%","50%"],radius:[0,"75%"],clockwise:!0,startAngle:90,minAngle:0,minShowLabelAngle:0,selectedOffset:10,percentPrecision:2,stillShowZeroSum:!0,left:0,top:0,right:0,bottom:0,width:null,height:null,label:{rotate:0,show:!0,overflow:"truncate",position:"outer",alignTo:"none",edgeDistance:"25%",bleedMargin:10,distanceToLabelLine:5},labelLine:{show:!0,length:15,length2:15,smooth:!1,minTurnAngle:90,maxSurfaceAngle:90,lineStyle:{width:1,type:"solid"}},itemStyle:{borderWidth:1,borderJoin:"round"},showEmptyCircle:!0,emptyCircleStyle:{color:"lightgray",opacity:1},labelLayout:{hideOverlap:!0},emphasis:{scale:!0,scaleSize:5},avoidLabelOverlap:!0,animationType:"expansion",animationDuration:1e3,animationTypeUpdate:"transition",animationEasingUpdate:"cubicInOut",animationDurationUpdate:500,animationEasing:"cubicInOut"},vw);function vw(){return null!==gw&&gw.apply(this,arguments)||this}q_(function(t){t.registerChartView(hw),t.registerSeriesModel(mw),Uy("pie",t.registerAction),t.registerLayout(S(tw,"pie")),t.registerProcessor({seriesType:"pie",reset:function(t,e){var i,r=e.findComponents({mainType:"legend"});r&&r.length&&(i=t.getData()).filterSelf(function(t){for(var e=i.getName(t),n=0;nthis.getProgressiveThreshold()?this.id:""},bw.type="series.scatter",bw.dependencies=["grid","polar","geo","singleAxis","calendar"],bw.defaultOption={coordinateSystem:"cartesian2d",z:2,legendHoverLink:!0,symbolSize:10,large:!1,largeThreshold:2e3,itemStyle:{opacity:.8},emphasis:{scale:!0},clip:!0,select:{itemStyle:{borderColor:"#212121"}},universalTransition:{divideShape:"clone"}};var _w,xw=bw;function bw(){var t=null!==_w&&_w.apply(this,arguments)||this;return t.type=bw.type,t.hasSymbolVisual=!0,t}var ww,Sw=function(){},Mw=(u(Iw,ww=j),Iw.prototype.getDefaultShape=function(){return new Sw},Iw.prototype.reset=function(){this.notClear=!1,this._off=0},Iw.prototype.buildPath=function(t,e){var n,i=e.points,r=e.size,o=this.symbolProxy,a=o.shape,e=t.getContext?t.getContext():t,s=e&&r[0]<4,l=this.softClipShape;if(s)this._ctx=e;else{for(this._ctx=null,n=this._off;ne[1]&&e.reverse(),e},jw.prototype.pointToData=function(t,e){return this.coordToData(this.toLocalCoord(t["x"===this.dim?0:1]),e)},jw.prototype.setCategorySortInfo=function(t){if("category"!==this.type)return!1;this.model.option.categorySortInfo=t,this.scale.setSortInfo(t)};var qw,Zw=jw;function jw(t,e,n,i,r){t=qw.call(this,t,e,n)||this;return t.index=0,t.type=i||"value",t.position=r||"bottom",t}function Kw(t,e,n){n=n||{};var t=t.coordinateSystem,i=e.axis,r={},o=i.getAxesOnZeroOf()[0],a=i.position,s=o?"onZero":a,i=i.dim,t=t.getRect(),t=[t.x,t.x+t.width,t.y,t.y+t.height],l={left:0,right:1,top:0,bottom:1,onZero:2},u=e.get("offset")||0,u="x"===i?[t[2]-u,t[3]+u]:[t[0]-u,t[1]+u],h=(o&&(h=o.toGlobalCoord(o.dataToCoord(0)),u[l.onZero]=Math.max(Math.min(h,u[1]),u[0])),r.position=["y"===i?u[l[s]]:t[0],"x"===i?u[l[s]]:t[3]],r.rotation=Math.PI/2*("x"===i?0:1),r.labelDirection=r.tickDirection=r.nameDirection={top:-1,bottom:1,left:-1,right:1}[a],r.labelOffset=o?u[l[a]]-u[l.onZero]:0,e.get(["axisTick","inside"])&&(r.tickDirection=-r.tickDirection),bt(n.labelInside,e.get(["axisLabel","inside"]))&&(r.labelDirection=-r.labelDirection),e.get(["axisLabel","rotate"]));return r.labelRotate="top"===s?-h:h,r.z2=1,r}function $w(t){return"cartesian2d"===t.get("coordinateSystem")}function Qw(i){var r={xAxisModel:null,yAxisModel:null};return E(r,function(t,e){var n=e.replace(/Model$/,""),n=i.getReferringComponents(n,No).models[0];r[e]=n}),r}var Jw=Math.log;eS.prototype.getRect=function(){return this._rect},eS.prototype.update=function(t,e){var n=this._axesMap;function i(t){var d,e=ct(t),n=e.length;if(n){for(var i=[],r=n-1;0<=r;r--){var o=t[+e[r]],a=o.model,s=o.scale;Hv(s)&&a.get("alignTicks")&&null==a.get("interval")?i.push(o):(E_(s,a),Hv(s)&&(d=o))}i.length&&(d||E_((d=i.pop()).scale,d.model),E(i,function(t){var e=t.scale,t=t.model,n=d.scale,i=e_.prototype,r=i.getTicks.call(n),o=i.getTicks.call(n,!0),a=r.length-1,n=i.getInterval.call(n),s=(t=N_(e,t)).extent,l=t.fixMin,t=t.fixMax,u=("log"===e.type&&(u=Jw(e.base),s=[Jw(s[0])/u,Jw(s[1])/u]),e.setExtent(s[0],s[1]),e.calcNiceExtent({splitNumber:a,fixMin:l,fixMax:t}),i.getExtent.call(e)),h=(l&&(s[0]=u[0]),t&&(s[1]=u[1]),i.getInterval.call(e)),c=s[0],p=s[1];if(l&&t)h=(p-c)/a;else if(l)for(p=s[0]+h*a;ps[0]&&isFinite(c)&&isFinite(s[0]);)h=Uv(h),c=s[1]-h*a;else{u=(h=ah[1]?-1:1,o=["start"===c?h[0]-o*u:"end"===c?h[1]+o*u:(h[0]+h[1])/2,cS(c)?t.labelOffset+l*u:0],null!=(u=e.get("nameRotate"))&&(u=u*oS/180),cS(c)?a=aS.innerTextLayout(t.rotation,null!=u?u:t.rotation,l):(a=function(t,e,n,i){var r,n=oo(n-t),t=i[0]>i[1],i="start"===e&&!t||"start"!==e&&t;e=ao(n-oS/2)?(r=i?"bottom":"top","center"):ao(n-1.5*oS)?(r=i?"top":"bottom","center"):(r="middle",n<1.5*oS&&oS/2u[1]&&u.reverse(),(s=null==s||s>u[1]?u[1]:s)n[r],f=[-c.x,-c.y],e=(e||(f[i]=l[s]),[0,0]),s=[-p.x,-p.y],g=R(t.get("pageButtonGap",!0),t.get("itemGap",!0)),f=(d&&("end"===t.get("pageButtonPosition",!0)?s[i]+=n[r]-p[r]:e[i]+=p[r]+g),s[1-i]+=c[o]/2-p[o]/2,l.setPosition(f),u.setPosition(e),h.setPosition(s),{x:0,y:0}),c=(f[r]=(d?n:c)[r],f[o]=Math.max(c[o],p[o]),f[a]=Math.min(0,p[a]+s[1-i]),u.__rectSize=n[r],d?((e={x:0,y:0})[r]=Math.max(n[r]-p[r]-g,0),e[o]=f[o],u.setClipPath(new As({shape:e})),u.__rectSize=e[r]):h.eachChild(function(t){t.attr({invisible:!0,silent:!0})}),this._getPageInfo(t));return null!=c.pageIndex&&Lh(l,{x:c.contentPosition[0],y:c.contentPosition[1]},d?t:null),this._updatePageInfoView(t,c),f},YM.prototype._pageGo=function(t,e,n){t=this._getPageInfo(e)[t];null!=t&&n.dispatchAction({type:"legendScroll",scrollDataIndex:t,legendId:e.id})},YM.prototype._updatePageInfoView=function(n,i){var r=this._controllerGroup,t=(E(["pagePrev","pageNext"],function(t){var e=null!=i[t+"DataIndex"],t=r.childOfName(t);t&&(t.setStyle("fill",e?n.get("pageIconColor",!0):n.get("pageIconInactiveColor",!0)),t.cursor=e?"pointer":"default")}),r.childOfName("pageText")),e=n.get("pageFormatter"),o=i.pageIndex,o=null!=o?o+1:0,a=i.pageCount;t&&e&&t.setStyle("text",V(e)?e.replace("{current}",null==o?"":o+"").replace("{total}",null==a?"":a+""):e({current:o,total:a}))},YM.prototype._getPageInfo=function(t){var e=t.get("scrollDataIndex",!0),n=this.getContentGroup(),i=this._containerGroup.__rectSize,t=t.getOrient().index,r=WM[t],o=UM[t],e=this._findTargetItemIndex(e),a=n.children(),s=a[e],l=a.length,u=l?1:0,h={contentPosition:[n.x,n.y],pageCount:u,pageIndex:u-1,pagePrevDataIndex:null,pageNextDataIndex:null};if(s){n=g(s);h.contentPosition[t]=-n.s;for(var c=e+1,p=n,d=n,f=null;c<=l;++c)(!(f=g(a[c]))&&d.e>p.s+i||f&&!y(f,p.s))&&(p=d.i>p.i?d:f)&&(null==h.pageNextDataIndex&&(h.pageNextDataIndex=p.i),++h.pageCount),d=f;for(c=e-1,p=n,d=n,f=null;-1<=c;--c)(f=g(a[c]))&&y(d,f.s)||!(p.i=e&&t.s<=e+i}},YM.prototype._findTargetItemIndex=function(n){var i,r;return this._showController?(this.getContentGroup().eachChild(function(t,e){t=t.__legendDataIndex;null==r&&null!=t&&(r=e),t===n&&(i=e)}),null!=i?i:r):0},YM.type="legend.scroll",YM);function YM(){var t=null!==GM&&GM.apply(this,arguments)||this;return t.type=YM.type,t.newlineDisabled=!0,t._currentIndex=0,t}q_(function(t){q_(EM),t.registerComponentModel(BM),t.registerComponentView(XM),t.registerAction("legendScroll","legendscroll",function(t,e){var n=t.scrollDataIndex;null!=n&&e.eachComponent({mainType:"legend",subType:"scroll",query:t},function(t){t.setScrollDataIndex(n)})})});var qM=Lo(),ZM=y,jM=pt;function KM(){this._dragging=!1,this.animationThreshold=15}function $M(t,e,n,i){!function n(i,t){{var r;return O(i)&&O(t)?(r=!0,E(t,function(t,e){r=r&&n(i[e],t)}),!!r):i===t}}(qM(n).lastProp,i)&&(qM(n).lastProp=i,e?Lh(n,i,t):(n.stopAnimation(),n.attr(i)))}function QM(t,e){t[e.get(["label","show"])?"show":"hide"]()}function JM(t){return{x:t.x||0,y:t.y||0,rotation:t.rotation||0}}function tI(t,e,n){var i=e.get("z"),r=e.get("zlevel");t&&t.traverse(function(t){"group"!==t.type&&(null!=i&&(t.z=i),null!=r&&(t.zlevel=r),t.silent=n)})}function eI(t,e,n,i,r){var o=nI(n.get("value"),e.axis,e.ecModel,n.get("seriesDataIndices"),{precision:n.get(["label","precision"]),formatter:n.get(["label","formatter"])}),n=n.getModel("label"),a=Ip(n.get("padding")||0),s=n.getFont(),l=Mr(o,s),u=r.position,h=l.width+a[1]+a[3],l=l.height+a[0]+a[2],c=r.align,c=("right"===c&&(u[0]-=h),"center"===c&&(u[0]-=h/2),r.verticalAlign),i=("bottom"===c&&(u[1]-=l),"middle"===c&&(u[1]-=l/2),r=u,c=h,h=l,i=(l=i).getWidth(),l=l.getHeight(),r[0]=Math.min(r[0]+c,i)-c,r[1]=Math.min(r[1]+h,l)-h,r[0]=Math.max(r[0],0),r[1]=Math.max(r[1],0),n.get("backgroundColor"));i&&"auto"!==i||(i=e.get(["axisLine","lineStyle","color"])),t.label={x:u[0],y:u[1],style:yc(n,{text:o,font:s,fill:n.getTextColor(),padding:a,backgroundColor:i}),z2:10}}function nI(t,e,n,i,r){t=e.scale.parse(t);var o,a=e.scale.getLabel({value:t},{precision:r.precision}),r=r.formatter;return r&&(o={value:F_(e,{value:t}),axisDimension:e.dim,axisIndex:e.index,seriesData:[]},E(i,function(t){var e=n.getSeriesByIndex(t.seriesIndex),t=t.dataIndexInside,e=e&&e.getDataParams(t);e&&o.seriesData.push(e)}),V(r)?a=r.replace("{value}",a):M(r)&&(a=r(o))),a}function iI(t,e,n){var i=Pe();return ze(i,i,n.rotation),Ee(i,i,n.position),tc([t.dataToCoord(e),(n.labelOffset||0)+(n.labelDirection||1)*(n.labelMargin||0)],i)}KM.prototype.render=function(t,e,n,i){var r,o,a=e.get("value"),s=e.get("status");this._axisModel=t,this._axisPointerModel=e,this._api=n,!i&&this._lastValue===a&&this._lastStatus===s||(this._lastValue=a,this._lastStatus=s,i=this._group,r=this._handle,s&&"hide"!==s?(i&&i.show(),r&&r.show(),this.makeElOption(s={},a,t,e,n),(o=s.graphicKey)!==this._lastGraphicKey&&this.clear(n),this._lastGraphicKey=o,o=this._moveAnimation=this.determineAnimation(t,e),i?(o=S($M,e,o),this.updatePointerEl(i,s,o),this.updateLabelEl(i,s,o,e)):(i=this._group=new Hr,this.createPointerEl(i,s,t,e),this.createLabelEl(i,s,t,e),n.getZr().add(i)),tI(i,e,!0),this._renderHandle(a)):(i&&i.hide(),r&&r.hide()))},KM.prototype.remove=function(t){this.clear(t)},KM.prototype.dispose=function(t){this.clear(t)},KM.prototype.determineAnimation=function(t,e){var n,i=e.get("animation"),r=t.axis,o="category"===r.type,e=e.get("snap");return!(!e&&!o)&&("auto"===i||null==i?(n=this.animationThreshold,o&&r.getBandWidth()>n||!!e&&(o=gS(t).seriesDataCount,e=r.getExtent(),Math.abs(e[0]-e[1])/o>n)):!0===i)},KM.prototype.makeElOption=function(t,e,n,i,r){},KM.prototype.createPointerEl=function(t,e,n,i){var r=e.pointer;r&&(r=qM(t).pointerEl=new hc[r.type](ZM(e.pointer)),t.add(r))},KM.prototype.createLabelEl=function(t,e,n,i){e.label&&(e=qM(t).labelEl=new Ns(ZM(e.label)),t.add(e),QM(e,i))},KM.prototype.updatePointerEl=function(t,e,n){t=qM(t).pointerEl;t&&e.pointer&&(t.setStyle(e.pointer.style),n(t,{shape:e.pointer.shape}))},KM.prototype.updateLabelEl=function(t,e,n,i){t=qM(t).labelEl;t&&(t.setStyle(e.label.style),n(t,{x:e.label.x,y:e.label.y}),QM(t,i))},KM.prototype._renderHandle=function(t){var e,n,i,r,o,a;!this._dragging&&this.updateHandleTransform&&(e=this._axisPointerModel,n=this._api.getZr(),i=this._handle,r=e.getModel("handle"),a=e.get("status"),r.get("show")&&a&&"hide"!==a?(this._handle||(o=!0,i=this._handle=oc(r.get("icon"),{cursor:"move",draggable:!0,onmousemove:function(t){Ce(t.event)},onmousedown:jM(this._onHandleDragMove,this,0,0),drift:jM(this._onHandleDragMove,this),ondragend:jM(this._onHandleDragEnd,this)}),n.add(i)),tI(i,e,!1),i.setStyle(r.getItemStyle(null,["color","borderColor","borderWidth","opacity","shadowColor","shadowBlur","shadowOffsetX","shadowOffsetY"])),F(a=r.get("size"))||(a=[a,a]),i.scaleX=a[0]/2,i.scaleY=a[1]/2,py(this,"_doDispatchAxisPointer",r.get("throttle")||0,"fixRate"),this._moveHandleToValue(t,o)):(i&&n.remove(i),this._handle=null))},KM.prototype._moveHandleToValue=function(t,e){$M(this._axisPointerModel,!e&&this._moveAnimation,this._handle,JM(this.getHandleTransform(t,this._axisModel,this._axisPointerModel)))},KM.prototype._onHandleDragMove=function(t,e){var n=this._handle;n&&(this._dragging=!0,t=this.updateHandleTransform(JM(n),[t,e],this._axisModel,this._axisPointerModel),this._payloadInfo=t,n.stopAnimation(),n.attr(JM(t)),qM(n).lastProp=null,this._doDispatchAxisPointer())},KM.prototype._doDispatchAxisPointer=function(){var t,e;this._handle&&(t=this._payloadInfo,e=this._axisModel,this._api.dispatchAction({type:"updateAxisPointer",x:t.cursorPoint[0],y:t.cursorPoint[1],tooltipOption:t.tooltipOption,axesInfo:[{axisDim:e.axis.dim,axisIndex:e.componentIndex}]}))},KM.prototype._onHandleDragEnd=function(){var t;this._dragging=!1,this._handle&&(t=this._axisPointerModel.get("value"),this._moveHandleToValue(t),this._api.dispatchAction({type:"hideTip"}))},KM.prototype.clear=function(t){this._lastValue=null,this._lastStatus=null;var t=t.getZr(),e=this._group,n=this._handle;t&&e&&(this._lastGraphicKey=null,e&&t.remove(e),n&&t.remove(n),this._group=null,this._handle=null,this._payloadInfo=null),dy(this,"_doDispatchAxisPointer")},KM.prototype.doClear=function(){},KM.prototype.buildLabel=function(t,e,n){return{x:t[n=n||0],y:t[1-n],width:e[n],height:e[1-n]}};u(aI,rI=KM),aI.prototype.makeElOption=function(t,e,n,i,r){var o,a,s=n.axis,l=s.grid,u=i.get("type"),h=sI(l,s).getOtherAxis(s).getGlobalExtent(),c=s.toGlobalCoord(s.dataToCoord(e,!0)),p=(u&&"none"!==u&&(o=(a=i).get("type"),a=a.getModel(o+"Style"),"line"===o?(p=a.getLineStyle()).fill=null:"shadow"===o&&((p=a.getAreaStyle()).stroke=null),o=p,(a=lI[u](s,c,h)).style=o,t.graphicKey=a.type,t.pointer=a),Kw(l.model,n));u=e,s=t,c=p,h=n,o=i,a=r,l=aS.innerTextLayout(c.rotation,0,c.labelDirection),c.labelMargin=o.get(["label","margin"]),eI(s,h,o,a,{position:iI(h.axis,u,c),align:l.textAlign,verticalAlign:l.textVerticalAlign})},aI.prototype.getHandleTransform=function(t,e,n){var i=Kw(e.axis.grid.model,e,{labelInside:!1}),n=(i.labelMargin=n.get(["handle","margin"]),iI(e.axis,t,i));return{x:n[0],y:n[1],rotation:i.rotation+(i.labelDirection<0?Math.PI:0)}},aI.prototype.updateHandleTransform=function(t,e,n,i){var n=n.axis,r=n.grid,o=n.getGlobalExtent(!0),r=sI(r,n).getOtherAxis(n).getGlobalExtent(),n="x"===n.dim?0:1,a=[t.x,t.y],e=(a[n]+=e[n],a[n]=Math.min(o[1],a[n]),a[n]=Math.max(o[0],a[n]),(r[1]+r[0])/2),o=[e,e];o[n]=a[n];return{x:a[0],y:a[1],rotation:t.rotation,cursorPoint:o,tooltipOption:[{verticalAlign:"middle"},{align:"center"}][n]}};var rI,oI=aI;function aI(){return null!==rI&&rI.apply(this,arguments)||this}function sI(t,e){var n={};return n[e.dim+"AxisIndex"]=e.index,t.getCartesian(n)}var lI={line:function(t,e,n){var i;return i=[e,n[0]],e=[e,n[1]],n=uI(t),{type:"Line",subPixelOptimize:!0,shape:{x1:i[n=n||0],y1:i[1-n],x2:e[n],y2:e[1-n]}}},shadow:function(t,e,n){var i=Math.max(1,t.getBandWidth()),r=n[1]-n[0];return{type:"Rect",shape:(e=[e-i/2,n[0]],n=[i,r],i=uI(t),{x:e[i=i||0],y:e[1-i],width:n[i],height:n[1-i]})}}};function uI(t){return"x"===t.dim?0:1}u(pI,hI=g),pI.type="axisPointer",pI.defaultOption={show:"auto",z:50,type:"line",snap:!1,triggerTooltip:!0,triggerEmphasis:!0,value:null,status:null,link:[],animation:null,animationDurationUpdate:200,lineStyle:{color:"#B9BEC9",width:1,type:"dashed"},shadowStyle:{color:"rgba(210,219,238,0.2)"},label:{show:!0,formatter:null,precision:"auto",margin:3,color:"#fff",padding:[5,7,5,7],backgroundColor:"auto",borderColor:null,borderWidth:0,borderRadius:3},handle:{show:!1,icon:"M10.7,11.9v-1.3H9.3v1.3c-4.9,0.3-8.8,4.4-8.8,9.4c0,5,3.9,9.1,8.8,9.4h1.3c4.9-0.3,8.8-4.4,8.8-9.4C19.5,16.3,15.6,12.2,10.7,11.9z M13.3,24.4H6.7v-1.2h6.6z M13.3,22H6.7v-1.2h6.6z M13.3,19.6H6.7v-1.2h6.6z",size:45,margin:50,color:"#333",shadowBlur:3,shadowColor:"#aaa",shadowOffsetX:0,shadowOffsetY:2,throttle:40}};var hI,cI=pI;function pI(){var t=null!==hI&&hI.apply(this,arguments)||this;return t.type=pI.type,t}var dI=Lo(),fI=E;function gI(t,e,n){var i,c,p;function r(t,h){c.on(t,function(e){n=p;var n,i,r={dispatchAction:o,pendings:i={showTip:[],hideTip:[]}};function o(t){var e=i[t.type];e?e.push(t):(t.dispatchAction=o,n.dispatchAction(t))}fI(dI(c).records,function(t){t&&h(t,e,r.dispatchAction)});var t,a=r.pendings,s=p,l=a.showTip.length,u=a.hideTip.length;l?t=a.showTip[l-1]:u&&(t=a.hideTip[u-1]),t&&(t.dispatchAction=null,s.dispatchAction(t))})}w.node||(i=e.getZr(),dI(i).records||(dI(i).records={}),p=e,dI(c=i).initialized||(dI(c).initialized=!0,r("click",S(mI,"click")),r("mousemove",S(mI,"mousemove")),r("globalout",yI)),(dI(i).records[t]||(dI(i).records[t]={})).handler=n)}function yI(t,e,n){t.handler("leave",null,n)}function mI(t,e,n,i){e.handler(t,n,i)}function vI(t,e){w.node||(e=e.getZr(),(dI(e).records||{})[t]&&(dI(e).records[t]=null))}u(bI,_I=Kg),bI.prototype.render=function(t,e,n){var e=e.getComponent("tooltip"),i=t.get("triggerOn")||e&&e.get("triggerOn")||"mousemove|click";gI("axisPointer",n,function(t,e,n){"none"!==i&&("leave"===t||0<=i.indexOf(t))&&n({type:"updateAxisPointer",currTrigger:t,x:e&&e.offsetX,y:e&&e.offsetY})})},bI.prototype.remove=function(t,e){vI("axisPointer",e)},bI.prototype.dispose=function(t,e){vI("axisPointer",e)},bI.type="axisPointer";var _I,xI=bI;function bI(){var t=null!==_I&&_I.apply(this,arguments)||this;return t.type=bI.type,t}function wI(t,e){var n,i,r,o,a=[],s=t.seriesIndex;return null==s||!(e=e.getSeriesByIndex(s))||null==(s=Ao(n=e.getData(),t))||s<0||F(s)?{point:[]}:(i=n.getItemGraphicEl(s),r=e.coordinateSystem,e.getTooltipPosition?a=e.getTooltipPosition(s)||[]:r&&r.dataToPoint?a=t.isStacked?(e=r.getBaseAxis(),t=r.getOtherAxis(e).dim,e=e.dim,t="x"===t||"radius"===t?1:0,e=n.mapDimension(e),(o=[])[t]=n.get(e,s),o[1-t]=n.get(n.getCalculationInfo("stackResultDimension"),s),r.dataToPoint(o)||[]):r.dataToPoint(n.getValues(B(r.dimensions,function(t){return n.mapDimension(t)}),s))||[]:i&&((e=i.getBoundingRect().clone()).applyTransform(i.transform),a=[e.x+e.width/2,e.y+e.height/2]),{point:a,el:i})}var SI=Lo();function MI(t,e,n){var o,a,i,s,l,r,u,h,c,p,d,f,g,y,m=t.currTrigger,v=[t.x,t.y],_=t,x=t.dispatchAction||pt(n.dispatchAction,n),b=e.getComponent("axisPointer").coordSysAxesInfo;if(b)return kI(v)&&(v=wI({seriesIndex:_.seriesIndex,dataIndex:_.dataIndex},e).point),o=kI(v),a=_.axesInfo,i=b.axesInfo,s="leave"===m||kI(v),l={},e={list:[],map:{}},u={showPointer:S(TI,r={}),showTooltip:S(CI,e)},E(b.coordSysMap,function(t,e){var r=o||t.containPoint(v);E(b.coordSysAxesInfo[e],function(t,e){var n=t.axis,i=function(t,e){for(var n=0;n<(t||[]).length;n++){var i=t[n];if(e.axis.dim===i.axisDim&&e.axis.model.componentIndex===i.axisIndex)return i}}(a,t);s||!r||a&&!i||null!=(i=null!=(i=i&&i.value)||o?i:n.pointToData(v))&&II(t,i,u,!1,l)})}),h={},E(i,function(n,t){var i=n.linkGroup;i&&!r[t]&&E(i.axesInfo,function(t,e){var e=r[e];t!==n&&e&&(e=e.value,i.mapper&&(e=n.axis.scale.parse(i.mapper(e,DI(t),DI(n)))),h[n.key]=e)})}),E(h,function(t,e){II(i[e],t,u,!0,l)}),c=r,_=i,p=l.axesInfo=[],E(_,function(t,e){var n=t.axisPointerModel.option,e=c[e];e?(t.useHandle||(n.status="show"),n.value=e.value,n.seriesDataIndices=(e.payloadBatch||[]).slice()):t.useHandle||(n.status="hide"),"show"===n.status&&p.push({axisDim:t.axis.dim,axisIndex:t.axis.model.componentIndex,value:n.value})}),m=e,_=t,e=x,kI(t=v)||!m.list.length?e({type:"hideTip"}):(x=((m.list[0].dataByAxis[0]||{}).seriesDataIndices||[])[0]||{},e({type:"showTip",escapeConnect:!0,x:t[0],y:t[1],tooltipOption:_.tooltipOption,position:_.position,dataIndexInside:x.dataIndexInside,dataIndex:x.dataIndex,seriesIndex:x.seriesIndex,dataByCoordSys:m.list})),e=i,_=(t=n).getZr(),x="axisPointerLastHighlights",d=SI(_)[x]||{},f=SI(_)[x]={},E(e,function(t,e){var n=t.axisPointerModel.option;"show"===n.status&&t.triggerEmphasis&&E(n.seriesDataIndices,function(t){var e=t.seriesIndex+" | "+t.dataIndex;f[e]=t})}),g=[],y=[],E(d,function(t,e){f[e]||y.push(t)}),E(f,function(t,e){d[e]||g.push(t)}),y.length&&t.dispatchAction({type:"downplay",escapeConnect:!0,notBlur:!0,batch:y}),g.length&&t.dispatchAction({type:"highlight",escapeConnect:!0,notBlur:!0,batch:g}),l}function II(t,e,n,i,r){var o,a,s,l,u,h,c,p,d,f,g=t.axis;!g.scale.isBlank()&&g.containData(e)&&(t.involveSeries?(a=e,s=t.axis,l=s.dim,u=a,h=[],c=Number.MAX_VALUE,p=-1,E(t.seriesModels,function(e,t){var n,i=e.getData().mapDimensionsAll(l);if(e.getAxisTooltipData)var r=e.getAxisTooltipData(i,a,s),o=r.dataIndices,r=r.nestestValue;else{if(!(o=e.getData().indicesOfNearest(i[0],a,"category"===s.type?.5:null)).length)return;r=e.getData().get(i[0],o[0])}null!=r&&isFinite(r)&&(i=a-r,(n=Math.abs(i))<=c)&&((n'):""),V(t))o.innerHTML=t+c;else if(t){o.innerHTML="",F(t)||(t=[t]);for(var p,d=0;d"),o=f.join(e);this._showOrMove(i,function(){this._updateContentNotChangedOnAxis(t,p)?this._updatePosition(i,r,n[0],n[1],this._tooltipContent,p):this._showTooltipContent(i,o,p,Math.random()+"",n[0],n[1],r,null,g)})},tT.prototype._showSeriesItemTooltip=function(t,e,n){var i,r,o,a,s,l=this._ecModel,e=D(e),u=e.seriesIndex,h=l.getSeriesByIndex(u),c=e.dataModel||h,p=e.dataIndex,e=e.dataType,d=c.getData(e),f=this._renderMode,g=t.positionDefault,y=eT([d.getItemModel(p),c,h&&(h.coordinateSystem||{}).model],this._tooltipModel,g?{position:g}:null),h=y.get("trigger");null!=h&&"item"!==h||(i=c.getDataParams(p,e),r=new Eg,i.marker=r.makeTooltipMarker("item",Lp(i.color),f),g=Af(c.formatTooltip(p,!1,e)),h=y.get("order"),e=y.get("valueFormatter"),o=g.frag,a=o?Pg(e?P({valueFormatter:e},o):o,r,f,h,l.get("useUTC"),y.get("textStyle")):g.text,s="item_"+c.name+"_"+p,this._showOrMove(y,function(){this._showTooltipContent(y,a,i,s,t.offsetX,t.offsetY,t.position,t.target,r)}),n({type:"showTip",dataIndexInside:p,dataIndex:d.getRawIndex(p),seriesIndex:u,from:this.uid}))},tT.prototype._showComponentItemTooltip=function(e,n,t){var i=D(n),r=i.tooltipConfig.option||{},o=[r=V(r)?{content:r,formatter:r}:r],i=this._ecModel.getComponent(i.componentMainType,i.componentIndex),i=(i&&o.push(i),o.push({formatter:r.content}),e.positionDefault),a=eT(o,this._tooltipModel,i?{position:i}:null),s=a.get("content"),l=Math.random()+"",u=new Eg;this._showOrMove(a,function(){var t=y(a.get("formatterParams")||{});this._showTooltipContent(a,s,t,l,e.offsetX,e.offsetY,e.position,n,u)}),t({type:"showTip",from:this.uid})},tT.prototype._showTooltipContent=function(n,t,i,e,r,o,a,s,l){var u,h,c,p,d;this._ticket="",n.get("showContent")&&n.get("show")&&((u=this._tooltipContent).setEnterable(n.get("enterable")),h=n.get("formatter"),a=a||n.get("position"),t=t,c=this._getNearestPoint([r,o],i,n.get("trigger"),n.get("borderColor")).color,h&&(t=V(h)?(p=n.ecModel.get("useUTC"),t=h,kp(t=(d=F(i)?i[0]:i)&&d.axisType&&0<=d.axisType.indexOf("time")?sp(d.axisValue,t,p):t,i,!0)):M(h)?(d=pt(function(t,e){t===this._ticket&&(u.setContent(e,l,n,c,a),this._updatePosition(n,a,r,o,u,i,s))},this),this._ticket=e,h(i,e,d)):h),u.setContent(t,l,n,c,a),u.show(n,c),this._updatePosition(n,a,r,o,u,i,s))},tT.prototype._getNearestPoint=function(t,e,n,i){return"axis"===n||F(e)?{color:i||("html"===this._renderMode?"#fff":"none")}:F(e)?void 0:{color:i||e.color||e.borderColor}},tT.prototype._updatePosition=function(t,e,n,i,r,o,a){var s,l=this._api.getWidth(),u=this._api.getHeight(),h=(e=e||t.get("position"),r.getSize()),c=t.get("align"),p=t.get("verticalAlign"),d=a&&a.getBoundingRect().clone();a&&d.applyTransform(a.transform),F(e=M(e)?e([n,i],o,r.el,d,{viewSize:[l,u],contentSize:h.slice()}):e)?(n=W(e[0],l),i=W(e[1],u)):O(e)?((o=e).width=h[0],o.height=h[1],n=(o=Bp(o,{width:l,height:u})).x,i=o.y,p=c=null):i=(n=(s=V(e)&&a?function(t,e,n,i){var r=n[0],o=n[1],a=Math.ceil(Math.SQRT2*i)+8,s=0,l=0,u=e.width,h=e.height;switch(t){case"inside":s=e.x+u/2-r/2,l=e.y+h/2-o/2;break;case"top":s=e.x+u/2-r/2,l=e.y-o-a;break;case"bottom":s=e.x+u/2-r/2,l=e.y+h+a;break;case"left":s=e.x-r-a,l=e.y+h/2-o/2;break;case"right":s=e.x+u+a,l=e.y+h/2-o/2}return[s,l]}(e,d,h,t.get("borderWidth")):function(t,e,n,i,r,o,a){var n=n.getSize(),s=n[0],n=n[1];null!=o&&(ih[0]?s:r)[0]:o[0]=(a[0]>h[0]?r:s)[0],"y0"===n[1]?o[1]=(a[1]>h[1]?s:r)[1]:o[1]=(a[1]>h[1]?r:s)[1],i.getMarkerPosition(o,n,!0)):(a=[l=t.get(n[0],e),u=t.get(n[1],e)],c.clampData&&c.clampData(a,a),c.dataToPoint(a,!0)),Ox(c,"cartesian2d")&&(r=c.getAxis("x"),s=c.getAxis("y"),l=t.get(n[0],e),u=t.get(n[1],e),dC(l)?h[0]=r.toGlobalCoord(r.getExtent()["x0"===n[0]?0:1]):dC(u)&&(h[1]=s.toGlobalCoord(s.getExtent()["y0"===n[1]?0:1]))),isNaN(d)||(h[0]=d),isNaN(p)||(h[1]=p)):h=[d,p],h}var mC,vC=[["x0","y0"],["x1","y0"],["x1","y1"],["x0","y1"]],_C=(u(xC,mC=mu),xC.prototype.updateTransform=function(t,e,r){e.eachSeries(function(n){var i,t=lT.getMarkerModelFromSeries(n,"markArea");t&&(i=t.getData()).each(function(e){var t=B(vC,function(t){return yC(i,e,t,n,r)});i.setItemLayout(e,t),i.getItemGraphicEl(e).setShape("points",t)})},this)},xC.prototype.renderSeries=function(a,r,t,s){var l=a.coordinateSystem,e=a.id,u=a.getData(),n=this.markerGroupMap,i=n.get(e)||n.set(e,{group:new Hr}),h=(this.group.add(i.group),this.markKeep(i),function(t,n,e){var i,r;{var o;i=t?(o=B(t&&t.dimensions,function(t){var e=n.getData();return P(P({},e.getDimensionInfo(e.mapDimension(t))||{}),{name:t,ordinalMeta:null})}),r=B(["x0","y0","x1","y1"],function(t,e){return{name:t,type:o[e%2].type}}),new Cv(r,e)):new Cv(r=[{name:"value",type:"float"}],e)}e=B(e.get("data"),S(cC,n,t,e));t&&(e=ht(e,S(gC,t)));t=t?function(t,e,n,i){return Wf(t.coord[Math.floor(i/2)][i%2],r[i])}:function(t,e,n,i){return Wf(t.value,r[i])};return i.initData(e,null,t),i.hasItemOption=!0,i}(l,a,r));r.setData(h),h.each(function(e){var t=B(vC,function(t){return yC(h,e,t,a,s)}),n=l.getAxis("x").scale,i=l.getAxis("y").scale,r=n.getExtent(),o=i.getExtent(),n=[n.parse(h.get("x0",e)),n.parse(h.get("x1",e))],i=[i.parse(h.get("y0",e)),i.parse(h.get("y1",e))],r=(to(n),to(i),!(r[0]>n[1]||r[1]i[1]||o[1]":"gt",">=":"gte","=":"eq","!=":"ne","<>":"ne"},wC=(SC.prototype.evaluate=function(t){var e=typeof t;return V(e)?this._condVal.test(t):!!G(e)&&this._condVal.test(t+"")},SC);function SC(t){null==(this._condVal=V(t)?new RegExp(t):_t(t)?t:null)&&f("")}IC.prototype.evaluate=function(){return this.value};var MC=IC;function IC(){}CC.prototype.evaluate=function(){for(var t=this.children,e=0;e.el-menu-item:not(.is-disabled):focus,.el-menu--horizontal>.el-menu-item:not(.is-disabled):hover,.el-menu--horizontal>.el-submenu .el-submenu__title:hover{background-color:#fff}.el-menu::after,.el-menu::before{display:table;content:""}.el-breadcrumb__item:last-child .el-breadcrumb__separator,.el-menu--collapse>.el-menu-item .el-submenu__icon-arrow,.el-menu--collapse>.el-submenu>.el-submenu__title .el-submenu__icon-arrow{display:none}.el-menu::after{clear:both}.el-menu.el-menu--horizontal{border-bottom:solid 1px #e6e6e6}.el-menu--horizontal{border-right:none}.el-menu--horizontal>.el-menu-item{float:left;height:60px;line-height:60px;margin:0;border-bottom:2px solid transparent;color:#909399}.el-menu--horizontal>.el-menu-item a,.el-menu--horizontal>.el-menu-item a:hover{color:inherit}.el-menu--horizontal>.el-submenu{float:left}.el-menu--horizontal>.el-submenu:focus,.el-menu--horizontal>.el-submenu:hover{outline:0}.el-menu--horizontal>.el-submenu:focus .el-submenu__title,.el-menu--horizontal>.el-submenu:hover .el-submenu__title{color:#303133}.el-menu--horizontal>.el-submenu.is-active .el-submenu__title{border-bottom:2px solid #409EFF;color:#303133}.el-menu--horizontal>.el-submenu .el-submenu__title{height:60px;line-height:60px;border-bottom:2px solid transparent;color:#909399}.el-menu--horizontal>.el-submenu .el-submenu__icon-arrow{position:static;vertical-align:middle;margin-left:8px;margin-top:-3px}.el-menu--collapse .el-submenu,.el-menu-item{position:relative}.el-menu--horizontal .el-menu .el-menu-item,.el-menu--horizontal .el-menu .el-submenu__title{background-color:#FFF;float:none;height:36px;line-height:36px;padding:0 10px;color:#909399}.el-menu--horizontal .el-menu .el-menu-item.is-active,.el-menu--horizontal .el-menu .el-submenu.is-active>.el-submenu__title{color:#303133}.el-menu--horizontal .el-menu-item:not(.is-disabled):focus,.el-menu--horizontal .el-menu-item:not(.is-disabled):hover{outline:0;color:#303133}.el-menu--horizontal>.el-menu-item.is-active{border-bottom:2px solid #409EFF;color:#303133}.el-menu--collapse{width:64px}.el-menu--collapse>.el-menu-item [class^=el-icon-],.el-menu--collapse>.el-submenu>.el-submenu__title [class^=el-icon-]{margin:0;vertical-align:middle;width:24px;text-align:center}.el-menu--collapse>.el-menu-item span,.el-menu--collapse>.el-submenu>.el-submenu__title span{height:0;width:0;overflow:hidden;visibility:hidden;display:inline-block}.el-menu-item,.el-submenu__title{height:56px;line-height:56px;list-style:none}.el-menu--collapse>.el-menu-item.is-active i{color:inherit}.el-menu--collapse .el-menu .el-submenu{min-width:200px}.el-menu--collapse .el-submenu .el-menu{position:absolute;margin-left:5px;top:0;left:100%;z-index:10;border:1px solid #E4E7ED;border-radius:2px;-webkit-box-shadow:0 2px 12px 0 rgba(0,0,0,.1);box-shadow:0 2px 12px 0 rgba(0,0,0,.1)}.el-menu--collapse .el-submenu.is-opened>.el-submenu__title .el-submenu__icon-arrow{-webkit-transform:none;transform:none}.el-menu--popup{z-index:100;min-width:200px;border:none;padding:5px 0;border-radius:2px;-webkit-box-shadow:0 2px 12px 0 rgba(0,0,0,.1);box-shadow:0 2px 12px 0 rgba(0,0,0,.1)}.el-menu--popup-bottom-start{margin-top:5px}.el-menu--popup-right-start{margin-left:5px;margin-right:5px}.el-menu-item{color:#303133;-webkit-transition:border-color .3s,background-color .3s,color .3s;transition:border-color .3s,background-color .3s,color .3s;-webkit-box-sizing:border-box;box-sizing:border-box;white-space:nowrap}.el-radio-button__inner,.el-submenu__title{-webkit-box-sizing:border-box;position:relative;white-space:nowrap}.el-menu-item *{vertical-align:middle}.el-menu-item i{color:#909399}.el-menu-item:focus,.el-menu-item:hover{outline:0;background-color:#ecf5ff}.el-menu-item.is-disabled{opacity:.25;cursor:not-allowed;background:0 0!important}.el-menu-item [class^=el-icon-]{margin-right:5px;width:24px;text-align:center;font-size:18px;vertical-align:middle}.el-menu-item.is-active{color:#409EFF}.el-menu-item.is-active i{color:inherit}.el-submenu{list-style:none;margin:0;padding-left:0}.el-submenu__title{font-size:14px;color:#303133;padding:0 20px;cursor:pointer;-webkit-transition:border-color .3s,background-color .3s,color .3s;transition:border-color .3s,background-color .3s,color .3s;box-sizing:border-box}.el-submenu__title *{vertical-align:middle}.el-submenu__title i{color:#909399}.el-submenu__title:focus,.el-submenu__title:hover{outline:0;background-color:#ecf5ff}.el-submenu__title.is-disabled{opacity:.25;cursor:not-allowed;background:0 0!important}.el-submenu__title:hover{background-color:#ecf5ff}.el-submenu .el-menu{border:none}.el-submenu .el-menu-item{height:50px;line-height:50px;padding:0 45px;min-width:200px}.el-submenu__icon-arrow{position:absolute;top:50%;right:20px;margin-top:-7px;-webkit-transition:-webkit-transform .3s;transition:-webkit-transform .3s;transition:transform .3s;transition:transform .3s,-webkit-transform .3s;font-size:12px}.el-submenu.is-active .el-submenu__title{border-bottom-color:#409EFF}.el-submenu.is-opened>.el-submenu__title .el-submenu__icon-arrow{-webkit-transform:rotateZ(180deg);transform:rotateZ(180deg)}.el-submenu.is-disabled .el-menu-item,.el-submenu.is-disabled .el-submenu__title{opacity:.25;cursor:not-allowed;background:0 0!important}.el-submenu [class^=el-icon-]{vertical-align:middle;margin-right:5px;width:24px;text-align:center;font-size:18px}.el-menu-item-group>ul{padding:0}.el-menu-item-group__title{padding:7px 0 7px 20px;line-height:normal;font-size:12px;color:#909399}.el-radio-button__inner,.el-radio-group{display:inline-block;line-height:1;vertical-align:middle}.horizontal-collapse-transition .el-submenu__title .el-submenu__icon-arrow{-webkit-transition:.2s;transition:.2s;opacity:0}.el-radio-group{font-size:0}.el-radio-button{position:relative;display:inline-block;outline:0}.el-radio-button__inner{background:#FFF;border:1px solid #DCDFE6;font-weight:500;border-left:0;color:#606266;-webkit-appearance:none;text-align:center;box-sizing:border-box;outline:0;margin:0;cursor:pointer;-webkit-transition:all .3s cubic-bezier(.645,.045,.355,1);transition:all .3s cubic-bezier(.645,.045,.355,1);padding:12px 20px;font-size:14px;border-radius:0}.el-radio-button__inner.is-round{padding:12px 20px}.el-radio-button__inner:hover{color:#409EFF}.el-radio-button__inner [class*=el-icon-]{line-height:.9}.el-radio-button__inner [class*=el-icon-]+span{margin-left:5px}.el-radio-button:first-child .el-radio-button__inner{border-left:1px solid #DCDFE6;border-radius:4px 0 0 4px;-webkit-box-shadow:none!important;box-shadow:none!important}.el-radio-button__orig-radio{opacity:0;outline:0;position:absolute;z-index:-1}.el-radio-button__orig-radio:checked+.el-radio-button__inner{color:#FFF;background-color:#409EFF;border-color:#409EFF;-webkit-box-shadow:-1px 0 0 0 #409EFF;box-shadow:-1px 0 0 0 #409EFF}.el-radio-button__orig-radio:disabled+.el-radio-button__inner{color:#C0C4CC;cursor:not-allowed;background-image:none;background-color:#FFF;border-color:#EBEEF5;-webkit-box-shadow:none;box-shadow:none}.el-radio-button__orig-radio:disabled:checked+.el-radio-button__inner{background-color:#F2F6FC}.el-radio-button:last-child .el-radio-button__inner{border-radius:0 4px 4px 0}.el-radio-button:first-child:last-child .el-radio-button__inner{border-radius:4px}.el-radio-button--medium .el-radio-button__inner{padding:10px 20px;font-size:14px;border-radius:0}.el-radio-button--medium .el-radio-button__inner.is-round{padding:10px 20px}.el-radio-button--small .el-radio-button__inner{padding:9px 15px;font-size:12px;border-radius:0}.el-radio-button--small .el-radio-button__inner.is-round{padding:9px 15px}.el-radio-button--mini .el-radio-button__inner{padding:7px 15px;font-size:12px;border-radius:0}.el-radio-button--mini .el-radio-button__inner.is-round{padding:7px 15px}.el-radio-button:focus:not(.is-focus):not(:active):not(.is-disabled){-webkit-box-shadow:0 0 2px 2px #409EFF;box-shadow:0 0 2px 2px #409EFF}.el-picker-panel,.el-popover,.el-select-dropdown,.el-table-filter,.el-time-panel{-webkit-box-shadow:0 2px 12px 0 rgba(0,0,0,.1)}.el-switch{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;position:relative;font-size:14px;line-height:20px;height:20px;vertical-align:middle}.el-switch__core,.el-switch__label{display:inline-block;cursor:pointer}.el-switch.is-disabled .el-switch__core,.el-switch.is-disabled .el-switch__label{cursor:not-allowed}.el-switch__label{-webkit-transition:.2s;transition:.2s;height:20px;font-size:14px;font-weight:500;vertical-align:middle;color:#303133}.el-switch__label.is-active{color:#409EFF}.el-switch__label--left{margin-right:10px}.el-switch__label--right{margin-left:10px}.el-switch__label *{line-height:1;font-size:14px;display:inline-block}.el-switch__input{position:absolute;width:0;height:0;opacity:0;margin:0}.el-switch__core{margin:0;position:relative;width:40px;height:20px;border:1px solid #DCDFE6;outline:0;border-radius:10px;-webkit-box-sizing:border-box;box-sizing:border-box;background:#DCDFE6;-webkit-transition:border-color .3s,background-color .3s;transition:border-color .3s,background-color .3s;vertical-align:middle}.el-input__prefix,.el-input__suffix{-webkit-transition:all .3s;color:#C0C4CC}.el-switch__core:after{content:"";position:absolute;top:1px;left:1px;border-radius:100%;-webkit-transition:all .3s;transition:all .3s;width:16px;height:16px;background-color:#FFF}.el-switch.is-checked .el-switch__core{border-color:#409EFF;background-color:#409EFF}.el-switch.is-checked .el-switch__core::after{left:100%;margin-left:-17px}.el-switch.is-disabled{opacity:.6}.el-switch--wide .el-switch__label.el-switch__label--left span{left:10px}.el-switch--wide .el-switch__label.el-switch__label--right span{right:10px}.el-switch .label-fade-enter,.el-switch .label-fade-leave-active{opacity:0}.el-select-dropdown{position:absolute;z-index:1001;border:1px solid #E4E7ED;border-radius:4px;background-color:#FFF;box-shadow:0 2px 12px 0 rgba(0,0,0,.1);-webkit-box-sizing:border-box;box-sizing:border-box;margin:5px 0}.el-select-dropdown.is-multiple .el-select-dropdown__item{padding-right:40px}.el-select-dropdown.is-multiple .el-select-dropdown__item.selected{color:#409EFF;background-color:#FFF}.el-select-dropdown.is-multiple .el-select-dropdown__item.selected.hover{background-color:#F5F7FA}.el-select-dropdown.is-multiple .el-select-dropdown__item.selected::after{position:absolute;right:20px;font-family:element-icons;content:"\e6da";font-size:12px;font-weight:700;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.el-select-dropdown .el-scrollbar.is-empty .el-select-dropdown__list{padding:0}.el-select-dropdown__empty{padding:10px 0;margin:0;text-align:center;color:#999;font-size:14px}.el-select-dropdown__wrap{max-height:274px}.el-select-dropdown__list{list-style:none;padding:6px 0;margin:0;-webkit-box-sizing:border-box;box-sizing:border-box}.el-select-dropdown__item{font-size:14px;padding:0 20px;position:relative;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;color:#606266;height:34px;line-height:34px;-webkit-box-sizing:border-box;box-sizing:border-box;cursor:pointer}.el-select-dropdown__item.is-disabled{color:#C0C4CC;cursor:not-allowed}.el-select-dropdown__item.is-disabled:hover{background-color:#FFF}.el-select-dropdown__item.hover,.el-select-dropdown__item:hover{background-color:#F5F7FA}.el-select-dropdown__item.selected{color:#409EFF;font-weight:700}.el-select-group{margin:0;padding:0}.el-select-group__wrap{position:relative;list-style:none;margin:0;padding:0}.el-select-group__wrap:not(:last-of-type){padding-bottom:24px}.el-select-group__wrap:not(:last-of-type)::after{content:'';position:absolute;display:block;left:20px;right:20px;bottom:12px;height:1px;background:#E4E7ED}.el-select-group__title{padding-left:20px;font-size:12px;color:#909399;line-height:30px}.el-select-group .el-select-dropdown__item{padding-left:20px}.el-select{display:inline-block;position:relative}.el-select .el-select__tags>span{display:contents}.el-select:hover .el-input__inner{border-color:#C0C4CC}.el-select .el-input__inner{cursor:pointer;padding-right:35px}.el-select .el-input__inner:focus{border-color:#409EFF}.el-select .el-input .el-select__caret{color:#C0C4CC;font-size:14px;-webkit-transition:-webkit-transform .3s;transition:-webkit-transform .3s;transition:transform .3s;transition:transform .3s,-webkit-transform .3s;-webkit-transform:rotateZ(180deg);transform:rotateZ(180deg);cursor:pointer}.el-select .el-input .el-select__caret.is-reverse{-webkit-transform:rotateZ(0);transform:rotateZ(0)}.el-select .el-input .el-select__caret.is-show-close{font-size:14px;text-align:center;-webkit-transform:rotateZ(180deg);transform:rotateZ(180deg);border-radius:100%;color:#C0C4CC;-webkit-transition:color .2s cubic-bezier(.645,.045,.355,1);transition:color .2s cubic-bezier(.645,.045,.355,1)}.el-select .el-input .el-select__caret.is-show-close:hover{color:#909399}.el-select .el-input.is-disabled .el-input__inner{cursor:not-allowed}.el-select .el-input.is-disabled .el-input__inner:hover{border-color:#E4E7ED}.el-range-editor.is-active,.el-range-editor.is-active:hover,.el-select .el-input.is-focus .el-input__inner{border-color:#409EFF}.el-select>.el-input{display:block}.el-select__input{border:none;outline:0;padding:0;margin-left:15px;color:#666;font-size:14px;-webkit-appearance:none;-moz-appearance:none;appearance:none;height:28px;background-color:transparent}.el-select__input.is-mini{height:14px}.el-select__close{cursor:pointer;position:absolute;top:8px;z-index:1000;right:25px;color:#C0C4CC;line-height:18px;font-size:14px}.el-select__close:hover{color:#909399}.el-select__tags{position:absolute;line-height:normal;white-space:normal;z-index:1;top:50%;-webkit-transform:translateY(-50%);transform:translateY(-50%);display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-ms-flex-wrap:wrap;flex-wrap:wrap}.el-select__tags-text{overflow:hidden;text-overflow:ellipsis}.el-select .el-tag{-webkit-box-sizing:border-box;box-sizing:border-box;border-color:transparent;margin:2px 0 2px 6px;background-color:#f0f2f5;display:-webkit-box;display:-ms-flexbox;display:flex;max-width:100%;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.el-select .el-tag__close.el-icon-close{background-color:#C0C4CC;top:0;color:#FFF;-ms-flex-negative:0;flex-shrink:0}.el-select .el-tag__close.el-icon-close:hover{background-color:#909399}.el-table,.el-table__expanded-cell{background-color:#FFF}.el-select .el-tag__close.el-icon-close::before{display:block;-webkit-transform:translate(0,.5px);transform:translate(0,.5px)}.el-table{position:relative;overflow:hidden;-webkit-box-sizing:border-box;box-sizing:border-box;-webkit-box-flex:1;-ms-flex:1;flex:1;width:100%;max-width:100%;font-size:14px;color:#606266}.el-table__empty-block{min-height:60px;text-align:center;width:100%;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.el-table__empty-text{line-height:60px;width:50%;color:#909399}.el-table__expand-column .cell{padding:0;text-align:center}.el-table__expand-icon{position:relative;cursor:pointer;color:#666;font-size:12px;-webkit-transition:-webkit-transform .2s ease-in-out;transition:-webkit-transform .2s ease-in-out;transition:transform .2s ease-in-out;transition:transform .2s ease-in-out,-webkit-transform .2s ease-in-out;height:20px}.el-table__expand-icon--expanded{-webkit-transform:rotate(90deg);transform:rotate(90deg)}.el-table__expand-icon>.el-icon{position:absolute;left:50%;top:50%;margin-left:-5px;margin-top:-5px}.el-table__expanded-cell[class*=cell]{padding:20px 50px}.el-table__expanded-cell:hover{background-color:transparent!important}.el-table__placeholder{display:inline-block;width:20px}.el-table__append-wrapper{overflow:hidden}.el-table--fit{border-right:0;border-bottom:0}.el-table--fit .el-table__cell.gutter{border-right-width:1px}.el-table--scrollable-x .el-table__body-wrapper{overflow-x:auto}.el-table--scrollable-y .el-table__body-wrapper{overflow-y:auto}.el-table thead{color:#909399;font-weight:500}.el-table thead.is-group th.el-table__cell{background:#F5F7FA}.el-table .el-table__cell{padding:12px 0;min-width:0;-webkit-box-sizing:border-box;box-sizing:border-box;text-overflow:ellipsis;vertical-align:middle;position:relative;text-align:left}.el-table .el-table__cell.is-center{text-align:center}.el-table .el-table__cell.is-right{text-align:right}.el-table .el-table__cell.gutter{width:15px;border-right-width:0;border-bottom-width:0;padding:0}.el-table .el-table__cell.is-hidden>*{visibility:hidden}.el-table--medium .el-table__cell{padding:10px 0}.el-table--small{font-size:12px}.el-table--small .el-table__cell{padding:8px 0}.el-table--mini{font-size:12px}.el-table--mini .el-table__cell{padding:6px 0}.el-table tr{background-color:#FFF}.el-table tr input[type=checkbox]{margin:0}.el-table td.el-table__cell,.el-table th.el-table__cell.is-leaf{border-bottom:1px solid #EBEEF5}.el-table th.el-table__cell.is-sortable{cursor:pointer}.el-table th.el-table__cell{overflow:hidden;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;background-color:#FFF}.el-table th.el-table__cell>.cell{display:inline-block;-webkit-box-sizing:border-box;box-sizing:border-box;position:relative;vertical-align:middle;padding-left:10px;padding-right:10px;width:100%}.el-table th.el-table__cell>.cell.highlight{color:#409EFF}.el-table th.el-table__cell.required>div::before{display:inline-block;content:"";width:8px;height:8px;border-radius:50%;background:#ff4d51;margin-right:5px;vertical-align:middle}.el-table td.el-table__cell div{-webkit-box-sizing:border-box;box-sizing:border-box}.el-date-table td,.el-table .cell,.el-table-filter{-webkit-box-sizing:border-box}.el-table td.el-table__cell.gutter{width:0}.el-table .cell{box-sizing:border-box;overflow:hidden;text-overflow:ellipsis;white-space:normal;word-break:break-all;line-height:23px;padding-left:10px;padding-right:10px}.el-table .cell.el-tooltip{white-space:nowrap;min-width:50px}.el-table--border,.el-table--group{border:1px solid #EBEEF5}.el-table--border::after,.el-table--group::after,.el-table::before{content:'';position:absolute;background-color:#EBEEF5;z-index:1}.el-table--border::after,.el-table--group::after{top:0;right:0;width:1px;height:100%}.el-table::before{left:0;bottom:0;width:100%;height:1px}.el-table--border{border-right:none;border-bottom:none}.el-table--border.el-loading-parent--relative{border-color:transparent}.el-table--border .el-table__cell,.el-table__body-wrapper .el-table--border.is-scrolling-left~.el-table__fixed{border-right:1px solid #EBEEF5}.el-table--border .el-table__cell:first-child .cell{padding-left:10px}.el-table--border th.el-table__cell.gutter:last-of-type{border-bottom:1px solid #EBEEF5;border-bottom-width:1px}.el-table--border th.el-table__cell,.el-table__fixed-right-patch{border-bottom:1px solid #EBEEF5}.el-table--hidden{visibility:hidden}.el-table__fixed,.el-table__fixed-right{position:absolute;top:0;left:0;overflow-x:hidden;overflow-y:hidden;-webkit-box-shadow:0 0 10px rgba(0,0,0,.12);box-shadow:0 0 10px rgba(0,0,0,.12)}.el-table__fixed-right::before,.el-table__fixed::before{content:'';position:absolute;left:0;bottom:0;width:100%;height:1px;background-color:#EBEEF5;z-index:4}.el-table__fixed-right-patch{position:absolute;top:-1px;right:0;background-color:#FFF}.el-table__fixed-right{top:0;left:auto;right:0}.el-table__fixed-right .el-table__fixed-body-wrapper,.el-table__fixed-right .el-table__fixed-footer-wrapper,.el-table__fixed-right .el-table__fixed-header-wrapper{left:auto;right:0}.el-table__fixed-header-wrapper{position:absolute;left:0;top:0;z-index:3}.el-table__fixed-footer-wrapper{position:absolute;left:0;bottom:0;z-index:3}.el-table__fixed-footer-wrapper tbody td.el-table__cell{border-top:1px solid #EBEEF5;background-color:#F5F7FA;color:#606266}.el-table__fixed-body-wrapper{position:absolute;left:0;top:37px;overflow:hidden;z-index:3}.el-table__body-wrapper,.el-table__footer-wrapper,.el-table__header-wrapper{width:100%}.el-table__footer-wrapper{margin-top:-1px}.el-table__footer-wrapper td.el-table__cell{border-top:1px solid #EBEEF5}.el-table__body,.el-table__footer,.el-table__header{table-layout:fixed;border-collapse:separate}.el-table__footer-wrapper,.el-table__header-wrapper{overflow:hidden}.el-table__footer-wrapper tbody td.el-table__cell,.el-table__header-wrapper tbody td.el-table__cell{background-color:#F5F7FA;color:#606266}.el-table__body-wrapper{overflow:hidden;position:relative}.el-table__body-wrapper.is-scrolling-left~.el-table__fixed,.el-table__body-wrapper.is-scrolling-none~.el-table__fixed,.el-table__body-wrapper.is-scrolling-none~.el-table__fixed-right,.el-table__body-wrapper.is-scrolling-right~.el-table__fixed-right{-webkit-box-shadow:none;box-shadow:none}.el-table__body-wrapper .el-table--border.is-scrolling-right~.el-table__fixed-right{border-left:1px solid #EBEEF5}.el-table .caret-wrapper{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-align:center;-ms-flex-align:center;align-items:center;height:34px;width:24px;vertical-align:middle;cursor:pointer;overflow:initial;position:relative}.el-table .sort-caret{width:0;height:0;border:5px solid transparent;position:absolute;left:7px}.el-table .sort-caret.ascending{border-bottom-color:#C0C4CC;top:5px}.el-table .sort-caret.descending{border-top-color:#C0C4CC;bottom:7px}.el-table .ascending .sort-caret.ascending{border-bottom-color:#409EFF}.el-table .descending .sort-caret.descending{border-top-color:#409EFF}.el-table .hidden-columns{visibility:hidden;position:absolute;z-index:-1}.el-table--striped .el-table__body tr.el-table__row--striped td.el-table__cell{background:#FAFAFA}.el-table--striped .el-table__body tr.el-table__row--striped.current-row td.el-table__cell,.el-table--striped .el-table__body tr.el-table__row--striped.selection-row td.el-table__cell{background-color:#ecf5ff}.el-table__body tr.hover-row.current-row>td.el-table__cell,.el-table__body tr.hover-row.el-table__row--striped.current-row>td.el-table__cell,.el-table__body tr.hover-row.el-table__row--striped.selection-row>td.el-table__cell,.el-table__body tr.hover-row.el-table__row--striped>td.el-table__cell,.el-table__body tr.hover-row.selection-row>td.el-table__cell,.el-table__body tr.hover-row>td.el-table__cell{background-color:#F5F7FA}.el-table__body tr.current-row>td.el-table__cell,.el-table__body tr.selection-row>td.el-table__cell{background-color:#ecf5ff}.el-table__column-resize-proxy{position:absolute;left:200px;top:0;bottom:0;width:0;border-left:1px solid #EBEEF5;z-index:10}.el-table__column-filter-trigger{display:inline-block;line-height:34px;cursor:pointer}.el-table__column-filter-trigger i{color:#909399;font-size:12px;-webkit-transform:scale(.75);transform:scale(.75)}.el-table--enable-row-transition .el-table__body td.el-table__cell{-webkit-transition:background-color .25s ease;transition:background-color .25s ease}.el-table--enable-row-hover .el-table__body tr:hover>td.el-table__cell{background-color:#F5F7FA}.el-table--fluid-height .el-table__fixed,.el-table--fluid-height .el-table__fixed-right{bottom:0;overflow:hidden}.el-table [class*=el-table__row--level] .el-table__expand-icon{display:inline-block;width:20px;line-height:20px;height:20px;text-align:center;margin-right:3px}.el-table-column--selection .cell{padding-left:14px;padding-right:14px}.el-table-filter{border:1px solid #EBEEF5;border-radius:2px;background-color:#FFF;box-shadow:0 2px 12px 0 rgba(0,0,0,.1);box-sizing:border-box;margin:2px 0}.el-table-filter__list{padding:5px 0;margin:0;list-style:none;min-width:100px}.el-table-filter__list-item{line-height:36px;padding:0 10px;cursor:pointer;font-size:14px}.el-table-filter__list-item:hover{background-color:#ecf5ff;color:#66b1ff}.el-table-filter__list-item.is-active{background-color:#409EFF;color:#FFF}.el-table-filter__content{min-width:100px}.el-table-filter__bottom{border-top:1px solid #EBEEF5;padding:8px}.el-table-filter__bottom button{background:0 0;border:none;color:#606266;cursor:pointer;font-size:13px;padding:0 3px}.el-date-table td.in-range div,.el-date-table td.in-range div:hover,.el-date-table.is-week-mode .el-date-table__row.current div,.el-date-table.is-week-mode .el-date-table__row:hover div{background-color:#F2F6FC}.el-table-filter__bottom button:hover{color:#409EFF}.el-table-filter__bottom button:focus{outline:0}.el-table-filter__bottom button.is-disabled{color:#C0C4CC;cursor:not-allowed}.el-table-filter__wrap{max-height:280px}.el-table-filter__checkbox-group{padding:10px}.el-table-filter__checkbox-group label.el-checkbox{display:block;margin-right:5px;margin-bottom:8px;margin-left:5px}.el-table-filter__checkbox-group .el-checkbox:last-child{margin-bottom:0}.el-date-table{font-size:12px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.el-date-table.is-week-mode .el-date-table__row:hover td.available:hover{color:#606266}.el-date-table.is-week-mode .el-date-table__row:hover td:first-child div{margin-left:5px;border-top-left-radius:15px;border-bottom-left-radius:15px}.el-date-table.is-week-mode .el-date-table__row:hover td:last-child div{margin-right:5px;border-top-right-radius:15px;border-bottom-right-radius:15px}.el-date-table td{width:32px;height:30px;padding:4px 0;box-sizing:border-box;text-align:center;cursor:pointer;position:relative}.el-date-table td div{height:30px;padding:3px 0;-webkit-box-sizing:border-box;box-sizing:border-box}.el-date-table td span{width:24px;height:24px;display:block;margin:0 auto;line-height:24px;position:absolute;left:50%;-webkit-transform:translateX(-50%);transform:translateX(-50%);border-radius:50%}.el-date-table td.next-month,.el-date-table td.prev-month{color:#C0C4CC}.el-date-table td.today{position:relative}.el-date-table td.today span{color:#409EFF;font-weight:700}.el-date-table td.today.end-date span,.el-date-table td.today.start-date span{color:#FFF}.el-date-table td.available:hover{color:#409EFF}.el-date-table td.current:not(.disabled) span{color:#FFF;background-color:#409EFF}.el-date-table td.end-date div,.el-date-table td.start-date div{color:#FFF}.el-date-table td.end-date span,.el-date-table td.start-date span{background-color:#409EFF}.el-date-table td.start-date div{margin-left:5px;border-top-left-radius:15px;border-bottom-left-radius:15px}.el-date-table td.end-date div{margin-right:5px;border-top-right-radius:15px;border-bottom-right-radius:15px}.el-date-table td.disabled div{background-color:#F5F7FA;opacity:1;cursor:not-allowed;color:#C0C4CC}.el-date-table td.selected div{margin-left:5px;margin-right:5px;background-color:#F2F6FC;border-radius:15px}.el-date-table td.selected div:hover{background-color:#F2F6FC}.el-date-table td.selected span{background-color:#409EFF;color:#FFF;border-radius:15px}.el-date-table td.week{font-size:80%;color:#606266}.el-month-table,.el-year-table{font-size:12px;border-collapse:collapse}.el-date-table th{padding:5px;color:#606266;font-weight:400;border-bottom:solid 1px #EBEEF5}.el-month-table{margin:-1px}.el-month-table td{text-align:center;padding:8px 0;cursor:pointer}.el-month-table td div{height:48px;padding:6px 0;-webkit-box-sizing:border-box;box-sizing:border-box}.el-month-table td.today .cell{color:#409EFF;font-weight:700}.el-month-table td.today.end-date .cell,.el-month-table td.today.start-date .cell{color:#FFF}.el-month-table td.disabled .cell{background-color:#F5F7FA;cursor:not-allowed;color:#C0C4CC}.el-month-table td.disabled .cell:hover{color:#C0C4CC}.el-month-table td .cell{width:60px;height:36px;display:block;line-height:36px;color:#606266;margin:0 auto;border-radius:18px}.el-month-table td .cell:hover{color:#409EFF}.el-month-table td.in-range div,.el-month-table td.in-range div:hover{background-color:#F2F6FC}.el-month-table td.end-date div,.el-month-table td.start-date div{color:#FFF}.el-month-table td.end-date .cell,.el-month-table td.start-date .cell{color:#FFF;background-color:#409EFF}.el-month-table td.start-date div{border-top-left-radius:24px;border-bottom-left-radius:24px}.el-month-table td.end-date div{border-top-right-radius:24px;border-bottom-right-radius:24px}.el-month-table td.current:not(.disabled) .cell{color:#409EFF}.el-year-table{margin:-1px}.el-year-table .el-icon{color:#303133}.el-year-table td{text-align:center;padding:20px 3px;cursor:pointer}.el-year-table td.today .cell{color:#409EFF;font-weight:700}.el-year-table td.disabled .cell{background-color:#F5F7FA;cursor:not-allowed;color:#C0C4CC}.el-year-table td.disabled .cell:hover{color:#C0C4CC}.el-year-table td .cell{width:48px;height:32px;display:block;line-height:32px;color:#606266;margin:0 auto}.el-year-table td .cell:hover,.el-year-table td.current:not(.disabled) .cell{color:#409EFF}.el-date-range-picker{width:646px}.el-date-range-picker.has-sidebar{width:756px}.el-date-range-picker table{table-layout:fixed;width:100%}.el-date-range-picker .el-picker-panel__body{min-width:513px}.el-date-range-picker .el-picker-panel__content{margin:0}.el-date-range-picker__header{position:relative;text-align:center;height:28px}.el-date-range-picker__header [class*=arrow-left]{float:left}.el-date-range-picker__header [class*=arrow-right]{float:right}.el-date-range-picker__header div{font-size:16px;font-weight:500;margin-right:50px}.el-date-range-picker__content{float:left;width:50%;-webkit-box-sizing:border-box;box-sizing:border-box;margin:0;padding:16px}.el-date-range-picker__content.is-left{border-right:1px solid #e4e4e4}.el-date-range-picker__content .el-date-range-picker__header div{margin-left:50px;margin-right:50px}.el-date-range-picker__editors-wrap{-webkit-box-sizing:border-box;box-sizing:border-box;display:table-cell}.el-date-range-picker__editors-wrap.is-right{text-align:right}.el-date-range-picker__time-header{position:relative;border-bottom:1px solid #e4e4e4;font-size:12px;padding:8px 5px 5px;display:table;width:100%;-webkit-box-sizing:border-box;box-sizing:border-box}.el-date-range-picker__time-header>.el-icon-arrow-right{font-size:20px;vertical-align:middle;display:table-cell;color:#303133}.el-date-range-picker__time-picker-wrap{position:relative;display:table-cell;padding:0 5px}.el-date-range-picker__time-picker-wrap .el-picker-panel{position:absolute;top:13px;right:0;z-index:1;background:#FFF}.el-date-picker{width:322px}.el-date-picker.has-sidebar.has-time{width:434px}.el-date-picker.has-sidebar{width:438px}.el-date-picker.has-time .el-picker-panel__body-wrapper{position:relative}.el-date-picker .el-picker-panel__content{width:292px}.el-date-picker table{table-layout:fixed;width:100%}.el-date-picker__editor-wrap{position:relative;display:table-cell;padding:0 5px}.el-date-picker__time-header{position:relative;border-bottom:1px solid #e4e4e4;font-size:12px;padding:8px 5px 5px;display:table;width:100%;-webkit-box-sizing:border-box;box-sizing:border-box}.el-date-picker__header{margin:12px;text-align:center}.el-date-picker__header--bordered{margin-bottom:0;padding-bottom:12px;border-bottom:solid 1px #EBEEF5}.el-date-picker__header--bordered+.el-picker-panel__content{margin-top:0}.el-date-picker__header-label{font-size:16px;font-weight:500;padding:0 5px;line-height:22px;text-align:center;cursor:pointer;color:#606266}.el-date-picker__header-label.active,.el-date-picker__header-label:hover{color:#409EFF}.el-date-picker__prev-btn{float:left}.el-date-picker__next-btn{float:right}.el-date-picker__time-wrap{padding:10px;text-align:center}.el-date-picker__time-label{float:left;cursor:pointer;line-height:30px;margin-left:10px}.time-select{margin:5px 0;min-width:0}.time-select .el-picker-panel__content{max-height:200px;margin:0}.time-select-item{padding:8px 10px;font-size:14px;line-height:20px}.time-select-item.selected:not(.disabled){color:#409EFF;font-weight:700}.time-select-item.disabled{color:#E4E7ED;cursor:not-allowed}.time-select-item:hover{background-color:#F5F7FA;font-weight:700;cursor:pointer}.el-date-editor{position:relative;display:inline-block;text-align:left}.el-date-editor.el-input,.el-date-editor.el-input__inner{width:220px}.el-date-editor--monthrange.el-input,.el-date-editor--monthrange.el-input__inner{width:300px}.el-date-editor--daterange.el-input,.el-date-editor--daterange.el-input__inner,.el-date-editor--timerange.el-input,.el-date-editor--timerange.el-input__inner{width:350px}.el-date-editor--datetimerange.el-input,.el-date-editor--datetimerange.el-input__inner{width:400px}.el-date-editor--dates .el-input__inner{text-overflow:ellipsis;white-space:nowrap}.el-date-editor .el-icon-circle-close{cursor:pointer}.el-date-editor .el-range__icon{font-size:14px;margin-left:-5px;color:#C0C4CC;float:left;line-height:32px}.el-date-editor .el-range-input{-webkit-appearance:none;-moz-appearance:none;appearance:none;border:none;outline:0;display:inline-block;height:100%;margin:0;padding:0;width:39%;text-align:center;font-size:14px;color:#606266}.el-date-editor .el-range-input::-webkit-input-placeholder{color:#C0C4CC}.el-date-editor .el-range-input:-ms-input-placeholder{color:#C0C4CC}.el-date-editor .el-range-input::-ms-input-placeholder{color:#C0C4CC}.el-date-editor .el-range-input::placeholder{color:#C0C4CC}.el-date-editor .el-range-separator{display:inline-block;height:100%;padding:0 5px;margin:0;text-align:center;line-height:32px;font-size:14px;width:5%;color:#303133}.el-date-editor .el-range__close-icon{font-size:14px;color:#C0C4CC;width:25px;display:inline-block;float:right;line-height:32px}.el-range-editor.el-input__inner{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;padding:3px 10px}.el-range-editor .el-range-input{line-height:1}.el-range-editor--medium.el-input__inner{height:36px}.el-range-editor--medium .el-range-separator{line-height:28px;font-size:14px}.el-range-editor--medium .el-range-input{font-size:14px}.el-range-editor--medium .el-range__close-icon,.el-range-editor--medium .el-range__icon{line-height:28px}.el-range-editor--small.el-input__inner{height:32px}.el-range-editor--small .el-range-separator{line-height:24px;font-size:13px}.el-range-editor--small .el-range-input{font-size:13px}.el-range-editor--small .el-range__close-icon,.el-range-editor--small .el-range__icon{line-height:24px}.el-range-editor--mini.el-input__inner{height:28px}.el-range-editor--mini .el-range-separator{line-height:20px;font-size:12px}.el-range-editor--mini .el-range-input{font-size:12px}.el-range-editor--mini .el-range__close-icon,.el-range-editor--mini .el-range__icon{line-height:20px}.el-range-editor.is-disabled{background-color:#F5F7FA;border-color:#E4E7ED;color:#C0C4CC;cursor:not-allowed}.el-range-editor.is-disabled:focus,.el-range-editor.is-disabled:hover{border-color:#E4E7ED}.el-range-editor.is-disabled input{background-color:#F5F7FA;color:#C0C4CC;cursor:not-allowed}.el-range-editor.is-disabled input::-webkit-input-placeholder{color:#C0C4CC}.el-range-editor.is-disabled input:-ms-input-placeholder{color:#C0C4CC}.el-range-editor.is-disabled input::-ms-input-placeholder{color:#C0C4CC}.el-range-editor.is-disabled input::placeholder{color:#C0C4CC}.el-range-editor.is-disabled .el-range-separator{color:#C0C4CC}.el-picker-panel{color:#606266;border:1px solid #E4E7ED;box-shadow:0 2px 12px 0 rgba(0,0,0,.1);background:#FFF;border-radius:4px;line-height:30px;margin:5px 0}.el-picker-panel__body-wrapper::after,.el-picker-panel__body::after{content:"";display:table;clear:both}.el-picker-panel__content{position:relative;margin:15px}.el-picker-panel__footer{border-top:1px solid #e4e4e4;padding:4px;text-align:right;background-color:#FFF;position:relative;font-size:0}.el-picker-panel__shortcut{display:block;width:100%;border:0;background-color:transparent;line-height:28px;font-size:14px;color:#606266;padding-left:12px;text-align:left;outline:0;cursor:pointer}.el-picker-panel__shortcut:hover{color:#409EFF}.el-picker-panel__shortcut.active{background-color:#e6f1fe;color:#409EFF}.el-picker-panel__btn{border:1px solid #dcdcdc;color:#333;line-height:24px;border-radius:2px;padding:0 20px;cursor:pointer;background-color:transparent;outline:0;font-size:12px}.el-picker-panel__btn[disabled]{color:#ccc;cursor:not-allowed}.el-picker-panel__icon-btn{font-size:12px;color:#303133;border:0;background:0 0;cursor:pointer;outline:0;margin-top:8px}.el-picker-panel__icon-btn:hover{color:#409EFF}.el-picker-panel__icon-btn.is-disabled{color:#bbb}.el-picker-panel__icon-btn.is-disabled:hover{cursor:not-allowed}.el-picker-panel__link-btn{vertical-align:middle}.el-picker-panel [slot=sidebar],.el-picker-panel__sidebar{position:absolute;top:0;bottom:0;width:110px;border-right:1px solid #e4e4e4;-webkit-box-sizing:border-box;box-sizing:border-box;padding-top:6px;background-color:#FFF;overflow:auto}.el-picker-panel [slot=sidebar]+.el-picker-panel__body,.el-picker-panel__sidebar+.el-picker-panel__body{margin-left:110px}.el-time-spinner.has-seconds .el-time-spinner__wrapper{width:33.3%}.el-time-spinner__wrapper{max-height:190px;overflow:auto;display:inline-block;width:50%;vertical-align:top;position:relative}.el-time-spinner__wrapper .el-scrollbar__wrap:not(.el-scrollbar__wrap--hidden-default){padding-bottom:15px}.el-time-spinner__input.el-input .el-input__inner,.el-time-spinner__list{padding:0;text-align:center}.el-time-spinner__wrapper.is-arrow{-webkit-box-sizing:border-box;box-sizing:border-box;text-align:center;overflow:hidden}.el-time-spinner__wrapper.is-arrow .el-time-spinner__list{-webkit-transform:translateY(-32px);transform:translateY(-32px)}.el-time-spinner__wrapper.is-arrow .el-time-spinner__item:hover:not(.disabled):not(.active){background:#FFF;cursor:default}.el-time-spinner__arrow{font-size:12px;color:#909399;position:absolute;left:0;width:100%;z-index:1;text-align:center;height:30px;line-height:30px;cursor:pointer}.el-time-spinner__arrow:hover{color:#409EFF}.el-time-spinner__arrow.el-icon-arrow-up{top:10px}.el-time-spinner__arrow.el-icon-arrow-down{bottom:10px}.el-time-spinner__input.el-input{width:70%}.el-time-spinner__list{margin:0;list-style:none}.el-time-spinner__list::after,.el-time-spinner__list::before{content:'';display:block;width:100%;height:80px}.el-time-spinner__item{height:32px;line-height:32px;font-size:12px;color:#606266}.el-time-spinner__item:hover:not(.disabled):not(.active){background:#F5F7FA;cursor:pointer}.el-time-spinner__item.active:not(.disabled){color:#303133;font-weight:700}.el-time-spinner__item.disabled{color:#C0C4CC;cursor:not-allowed}.el-time-panel{margin:5px 0;border:1px solid #E4E7ED;background-color:#FFF;box-shadow:0 2px 12px 0 rgba(0,0,0,.1);border-radius:2px;position:absolute;width:180px;left:0;z-index:1000;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;-webkit-box-sizing:content-box;box-sizing:content-box}.el-time-panel__content{font-size:0;position:relative;overflow:hidden}.el-time-panel__content::after,.el-time-panel__content::before{content:"";top:50%;position:absolute;margin-top:-15px;height:32px;z-index:-1;left:0;right:0;-webkit-box-sizing:border-box;box-sizing:border-box;padding-top:6px;text-align:left;border-top:1px solid #E4E7ED;border-bottom:1px solid #E4E7ED}.el-time-panel__content::after{left:50%;margin-left:12%;margin-right:12%}.el-time-panel__content::before{padding-left:50%;margin-right:12%;margin-left:12%}.el-time-panel__content.has-seconds::after{left:calc(100% / 3 * 2)}.el-time-panel__content.has-seconds::before{padding-left:calc(100% / 3)}.el-time-panel__footer{border-top:1px solid #e4e4e4;padding:4px;height:36px;line-height:25px;text-align:right;-webkit-box-sizing:border-box;box-sizing:border-box}.el-time-panel__btn{border:none;line-height:28px;padding:0 5px;margin:0 5px;cursor:pointer;background-color:transparent;outline:0;font-size:12px;color:#303133}.el-time-panel__btn.confirm{font-weight:800;color:#409EFF}.el-time-range-picker{width:354px;overflow:visible}.el-time-range-picker__content{position:relative;text-align:center;padding:10px}.el-time-range-picker__cell{-webkit-box-sizing:border-box;box-sizing:border-box;margin:0;padding:4px 7px 7px;width:50%;display:inline-block}.el-time-range-picker__header{margin-bottom:5px;text-align:center;font-size:14px}.el-time-range-picker__body{border-radius:2px;border:1px solid #E4E7ED}.el-popover{position:absolute;background:#FFF;min-width:150px;border-radius:4px;border:1px solid #EBEEF5;padding:12px;z-index:2000;color:#606266;line-height:1.4;text-align:justify;font-size:14px;box-shadow:0 2px 12px 0 rgba(0,0,0,.1);word-break:break-all}.el-card.is-always-shadow,.el-card.is-hover-shadow:focus,.el-card.is-hover-shadow:hover,.el-cascader__dropdown,.el-color-picker__panel,.el-message-box,.el-notification{-webkit-box-shadow:0 2px 12px 0 rgba(0,0,0,.1)}.el-popover--plain{padding:18px 20px}.el-popover__title{color:#303133;font-size:16px;line-height:1;margin-bottom:12px}.el-popover:focus,.el-popover:focus:active,.el-popover__reference:focus:hover,.el-popover__reference:focus:not(.focusing){outline-width:0}.v-modal-enter{-webkit-animation:v-modal-in .2s ease;animation:v-modal-in .2s ease}.v-modal-leave{-webkit-animation:v-modal-out .2s ease forwards;animation:v-modal-out .2s ease forwards}@keyframes v-modal-in{0%{opacity:0}}@keyframes v-modal-out{100%{opacity:0}}.v-modal{position:fixed;left:0;top:0;width:100%;height:100%;opacity:.5;background:#000}.el-popup-parent--hidden{overflow:hidden}.el-message-box{display:inline-block;width:420px;padding-bottom:10px;vertical-align:middle;background-color:#FFF;border-radius:4px;border:1px solid #EBEEF5;font-size:18px;box-shadow:0 2px 12px 0 rgba(0,0,0,.1);text-align:left;overflow:hidden;-webkit-backface-visibility:hidden;backface-visibility:hidden}.el-message-box__wrapper{position:fixed;top:0;bottom:0;left:0;right:0;text-align:center}.el-message-box__wrapper::after{content:"";display:inline-block;height:100%;width:0;vertical-align:middle}.el-message-box__header{position:relative;padding:15px 15px 10px}.el-message-box__title{padding-left:0;margin-bottom:0;font-size:18px;line-height:1;color:#303133}.el-message-box__headerbtn{position:absolute;top:15px;right:15px;padding:0;border:none;outline:0;background:0 0;font-size:16px;cursor:pointer}.el-form-item.is-error .el-input__inner,.el-form-item.is-error .el-input__inner:focus,.el-form-item.is-error .el-textarea__inner,.el-form-item.is-error .el-textarea__inner:focus,.el-message-box__input input.invalid,.el-message-box__input input.invalid:focus{border-color:#F56C6C}.el-message-box__headerbtn .el-message-box__close{color:#909399}.el-message-box__headerbtn:focus .el-message-box__close,.el-message-box__headerbtn:hover .el-message-box__close{color:#409EFF}.el-message-box__content{padding:10px 15px;color:#606266;font-size:14px}.el-message-box__container{position:relative}.el-message-box__input{padding-top:15px}.el-message-box__status{position:absolute;top:50%;-webkit-transform:translateY(-50%);transform:translateY(-50%);font-size:24px!important}.el-message-box__status::before{padding-left:1px}.el-message-box__status+.el-message-box__message{padding-left:36px;padding-right:12px}.el-message-box__status.el-icon-success{color:#67C23A}.el-message-box__status.el-icon-info{color:#909399}.el-message-box__status.el-icon-warning{color:#E6A23C}.el-message-box__status.el-icon-error{color:#F56C6C}.el-message-box__message{margin:0}.el-message-box__message p{margin:0;line-height:24px}.el-message-box__errormsg{color:#F56C6C;font-size:12px;min-height:18px;margin-top:2px}.el-message-box__btns{padding:5px 15px 0;text-align:right}.el-message-box__btns button:nth-child(2){margin-left:10px}.el-message-box__btns-reverse{-webkit-box-orient:horizontal;-webkit-box-direction:reverse;-ms-flex-direction:row-reverse;flex-direction:row-reverse}.el-message-box--center{padding-bottom:30px}.el-message-box--center .el-message-box__header{padding-top:30px}.el-message-box--center .el-message-box__title{position:relative;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center}.el-message-box--center .el-message-box__status{position:relative;top:auto;padding-right:5px;text-align:center;-webkit-transform:translateY(-1px);transform:translateY(-1px)}.el-message-box--center .el-message-box__message{margin-left:0}.el-message-box--center .el-message-box__btns,.el-message-box--center .el-message-box__content{text-align:center}.el-message-box--center .el-message-box__content{padding-left:27px;padding-right:27px}.msgbox-fade-enter-active{-webkit-animation:msgbox-fade-in .3s;animation:msgbox-fade-in .3s}.msgbox-fade-leave-active{-webkit-animation:msgbox-fade-out .3s;animation:msgbox-fade-out .3s}@-webkit-keyframes msgbox-fade-in{0%{-webkit-transform:translate3d(0,-20px,0);transform:translate3d(0,-20px,0);opacity:0}100%{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0);opacity:1}}@keyframes msgbox-fade-in{0%{-webkit-transform:translate3d(0,-20px,0);transform:translate3d(0,-20px,0);opacity:0}100%{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0);opacity:1}}@-webkit-keyframes msgbox-fade-out{0%{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0);opacity:1}100%{-webkit-transform:translate3d(0,-20px,0);transform:translate3d(0,-20px,0);opacity:0}}@keyframes msgbox-fade-out{0%{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0);opacity:1}100%{-webkit-transform:translate3d(0,-20px,0);transform:translate3d(0,-20px,0);opacity:0}}.el-breadcrumb{font-size:14px;line-height:1}.el-breadcrumb::after,.el-breadcrumb::before{display:table;content:""}.el-breadcrumb::after{clear:both}.el-breadcrumb__separator{margin:0 9px;font-weight:700;color:#C0C4CC}.el-breadcrumb__separator[class*=icon]{margin:0 6px;font-weight:400}.el-breadcrumb__item{float:left}.el-breadcrumb__inner{color:#606266}.el-breadcrumb__inner a,.el-breadcrumb__inner.is-link{font-weight:700;text-decoration:none;-webkit-transition:color .2s cubic-bezier(.645,.045,.355,1);transition:color .2s cubic-bezier(.645,.045,.355,1);color:#303133}.el-breadcrumb__inner a:hover,.el-breadcrumb__inner.is-link:hover{color:#409EFF;cursor:pointer}.el-breadcrumb__item:last-child .el-breadcrumb__inner,.el-breadcrumb__item:last-child .el-breadcrumb__inner a,.el-breadcrumb__item:last-child .el-breadcrumb__inner a:hover,.el-breadcrumb__item:last-child .el-breadcrumb__inner:hover{font-weight:400;color:#606266;cursor:text}.el-form--label-left .el-form-item__label{text-align:left}.el-form--label-top .el-form-item__label{float:none;display:inline-block;text-align:left;padding:0 0 10px}.el-form--inline .el-form-item{display:inline-block;margin-right:10px;vertical-align:top}.el-form--inline .el-form-item__label{float:none;display:inline-block}.el-form--inline .el-form-item__content{display:inline-block;vertical-align:top}.el-form--inline.el-form--label-top .el-form-item__content{display:block}.el-form-item{margin-bottom:22px}.el-form-item::after,.el-form-item::before{display:table;content:""}.el-form-item::after{clear:both}.el-form-item .el-form-item{margin-bottom:0}.el-form-item--mini.el-form-item,.el-form-item--small.el-form-item{margin-bottom:18px}.el-form-item .el-input__validateIcon{display:none}.el-form-item--medium .el-form-item__content,.el-form-item--medium .el-form-item__label{line-height:36px}.el-form-item--small .el-form-item__content,.el-form-item--small .el-form-item__label{line-height:32px}.el-form-item--small .el-form-item__error{padding-top:2px}.el-form-item--mini .el-form-item__content,.el-form-item--mini .el-form-item__label{line-height:28px}.el-form-item--mini .el-form-item__error{padding-top:1px}.el-form-item__label-wrap{float:left}.el-form-item__label-wrap .el-form-item__label{display:inline-block;float:none}.el-form-item__label{text-align:right;vertical-align:middle;float:left;font-size:14px;color:#606266;line-height:40px;padding:0 12px 0 0;-webkit-box-sizing:border-box;box-sizing:border-box}.el-form-item__content{line-height:40px;position:relative;font-size:14px}.el-form-item__content::after,.el-form-item__content::before{display:table;content:""}.el-form-item__content::after{clear:both}.el-form-item__content .el-input-group{vertical-align:top}.el-form-item__error{color:#F56C6C;font-size:12px;line-height:1;padding-top:4px;position:absolute;top:100%;left:0}.el-form-item__error--inline{position:relative;top:auto;left:auto;display:inline-block;margin-left:10px}.el-form-item.is-required:not(.is-no-asterisk) .el-form-item__label-wrap>.el-form-item__label:before,.el-form-item.is-required:not(.is-no-asterisk)>.el-form-item__label:before{content:'*';color:#F56C6C;margin-right:4px}.el-form-item.is-error .el-input-group__append .el-input__inner,.el-form-item.is-error .el-input-group__prepend .el-input__inner{border-color:transparent}.el-form-item.is-error .el-input__validateIcon{color:#F56C6C}.el-form-item--feedback .el-input__validateIcon{display:inline-block}.el-tabs__header{padding:0;position:relative;margin:0 0 15px}.el-tabs__active-bar{position:absolute;bottom:0;left:0;height:2px;background-color:#409EFF;z-index:1;-webkit-transition:-webkit-transform .3s cubic-bezier(.645,.045,.355,1);transition:-webkit-transform .3s cubic-bezier(.645,.045,.355,1);transition:transform .3s cubic-bezier(.645,.045,.355,1);transition:transform .3s cubic-bezier(.645,.045,.355,1),-webkit-transform .3s cubic-bezier(.645,.045,.355,1);list-style:none}.el-tabs__new-tab{float:right;border:1px solid #d3dce6;height:18px;width:18px;line-height:18px;margin:12px 0 9px 10px;border-radius:3px;text-align:center;font-size:12px;color:#d3dce6;cursor:pointer;-webkit-transition:all .15s;transition:all .15s}.el-tabs__new-tab .el-icon-plus{-webkit-transform:scale(.8,.8);transform:scale(.8,.8)}.el-tabs__new-tab:hover{color:#409EFF}.el-tabs__nav-wrap{overflow:hidden;margin-bottom:-1px;position:relative}.el-tabs__nav-wrap::after{content:"";position:absolute;left:0;bottom:0;width:100%;height:2px;background-color:#E4E7ED;z-index:1}.el-tabs__nav-wrap.is-scrollable{padding:0 20px;-webkit-box-sizing:border-box;box-sizing:border-box}.el-tabs__nav-scroll{overflow:hidden}.el-tabs__nav-next,.el-tabs__nav-prev{position:absolute;cursor:pointer;line-height:44px;font-size:12px;color:#909399}.el-tabs__nav-next{right:0}.el-tabs__nav-prev{left:0}.el-tabs__nav{white-space:nowrap;position:relative;-webkit-transition:-webkit-transform .3s;transition:-webkit-transform .3s;transition:transform .3s;transition:transform .3s,-webkit-transform .3s;float:left;z-index:2}.el-tabs__nav.is-stretch{min-width:100%;display:-webkit-box;display:-ms-flexbox;display:flex}.el-tabs__nav.is-stretch>*{-webkit-box-flex:1;-ms-flex:1;flex:1;text-align:center}.el-tabs__item{padding:0 20px;height:40px;-webkit-box-sizing:border-box;box-sizing:border-box;line-height:40px;display:inline-block;list-style:none;font-size:14px;font-weight:500;color:#303133;position:relative}.el-tabs__item:focus,.el-tabs__item:focus:active{outline:0}.el-tabs__item:focus.is-active.is-focus:not(:active){-webkit-box-shadow:0 0 2px 2px #409EFF inset;box-shadow:0 0 2px 2px #409EFF inset;border-radius:3px}.el-tabs__item .el-icon-close{border-radius:50%;text-align:center;-webkit-transition:all .3s cubic-bezier(.645,.045,.355,1);transition:all .3s cubic-bezier(.645,.045,.355,1);margin-left:5px}.el-tabs__item .el-icon-close:before{-webkit-transform:scale(.9);transform:scale(.9);display:inline-block}.el-tabs--card>.el-tabs__header .el-tabs__active-bar,.el-tabs--left.el-tabs--card .el-tabs__active-bar.is-left,.el-tabs--right.el-tabs--card .el-tabs__active-bar.is-right{display:none}.el-tabs__item .el-icon-close:hover{background-color:#C0C4CC;color:#FFF}.el-tabs__item.is-active{color:#409EFF}.el-tabs__item:hover{color:#409EFF;cursor:pointer}.el-tabs__item.is-disabled{color:#C0C4CC;cursor:default}.el-tabs__content{overflow:hidden;position:relative}.el-tabs--card>.el-tabs__header{border-bottom:1px solid #E4E7ED}.el-tabs--card>.el-tabs__header .el-tabs__nav-wrap::after{content:none}.el-tabs--card>.el-tabs__header .el-tabs__nav{border:1px solid #E4E7ED;border-bottom:none;border-radius:4px 4px 0 0;-webkit-box-sizing:border-box;box-sizing:border-box}.el-tabs--card>.el-tabs__header .el-tabs__item .el-icon-close{position:relative;font-size:12px;width:0;height:14px;vertical-align:middle;line-height:15px;overflow:hidden;top:-1px;right:-2px;-webkit-transform-origin:100% 50%;transform-origin:100% 50%}.el-tabs--card>.el-tabs__header .el-tabs__item{border-bottom:1px solid transparent;border-left:1px solid #E4E7ED;-webkit-transition:color .3s cubic-bezier(.645,.045,.355,1),padding .3s cubic-bezier(.645,.045,.355,1);transition:color .3s cubic-bezier(.645,.045,.355,1),padding .3s cubic-bezier(.645,.045,.355,1)}.el-tabs--card>.el-tabs__header .el-tabs__item:first-child{border-left:none}.el-tabs--card>.el-tabs__header .el-tabs__item.is-closable:hover{padding-left:13px;padding-right:13px}.el-tabs--card>.el-tabs__header .el-tabs__item.is-closable:hover .el-icon-close{width:14px}.el-tabs--card>.el-tabs__header .el-tabs__item.is-active{border-bottom-color:#FFF}.el-tabs--card>.el-tabs__header .el-tabs__item.is-active.is-closable{padding-left:20px;padding-right:20px}.el-tabs--card>.el-tabs__header .el-tabs__item.is-active.is-closable .el-icon-close{width:14px}.el-tabs--border-card{background:#FFF;border:1px solid #DCDFE6;-webkit-box-shadow:0 2px 4px 0 rgba(0,0,0,.12),0 0 6px 0 rgba(0,0,0,.04);box-shadow:0 2px 4px 0 rgba(0,0,0,.12),0 0 6px 0 rgba(0,0,0,.04)}.el-tabs--border-card>.el-tabs__content{padding:15px}.el-tabs--border-card>.el-tabs__header{background-color:#F5F7FA;border-bottom:1px solid #E4E7ED;margin:0}.el-tabs--border-card>.el-tabs__header .el-tabs__nav-wrap::after{content:none}.el-tabs--border-card>.el-tabs__header .el-tabs__item{-webkit-transition:all .3s cubic-bezier(.645,.045,.355,1);transition:all .3s cubic-bezier(.645,.045,.355,1);border:1px solid transparent;margin-top:-1px;color:#909399}.el-tabs--border-card>.el-tabs__header .el-tabs__item+.el-tabs__item,.el-tabs--border-card>.el-tabs__header .el-tabs__item:first-child{margin-left:-1px}.el-col-offset-0,.el-tabs--border-card>.el-tabs__header .is-scrollable .el-tabs__item:first-child{margin-left:0}.el-tabs--border-card>.el-tabs__header .el-tabs__item.is-active{color:#409EFF;background-color:#FFF;border-right-color:#DCDFE6;border-left-color:#DCDFE6}.el-tabs--border-card>.el-tabs__header .el-tabs__item:not(.is-disabled):hover{color:#409EFF}.el-tabs--border-card>.el-tabs__header .el-tabs__item.is-disabled{color:#C0C4CC}.el-tabs--bottom .el-tabs__item.is-bottom:nth-child(2),.el-tabs--bottom .el-tabs__item.is-top:nth-child(2),.el-tabs--top .el-tabs__item.is-bottom:nth-child(2),.el-tabs--top .el-tabs__item.is-top:nth-child(2){padding-left:0}.el-tabs--bottom .el-tabs__item.is-bottom:last-child,.el-tabs--bottom .el-tabs__item.is-top:last-child,.el-tabs--top .el-tabs__item.is-bottom:last-child,.el-tabs--top .el-tabs__item.is-top:last-child{padding-right:0}.el-cascader-menu:last-child .el-cascader-node,.el-tabs--bottom .el-tabs--left>.el-tabs__header .el-tabs__item:last-child,.el-tabs--bottom .el-tabs--right>.el-tabs__header .el-tabs__item:last-child,.el-tabs--bottom.el-tabs--border-card>.el-tabs__header .el-tabs__item:last-child,.el-tabs--bottom.el-tabs--card>.el-tabs__header .el-tabs__item:last-child,.el-tabs--top .el-tabs--left>.el-tabs__header .el-tabs__item:last-child,.el-tabs--top .el-tabs--right>.el-tabs__header .el-tabs__item:last-child,.el-tabs--top.el-tabs--border-card>.el-tabs__header .el-tabs__item:last-child,.el-tabs--top.el-tabs--card>.el-tabs__header .el-tabs__item:last-child{padding-right:20px}.el-tabs--bottom .el-tabs--left>.el-tabs__header .el-tabs__item:nth-child(2),.el-tabs--bottom .el-tabs--right>.el-tabs__header .el-tabs__item:nth-child(2),.el-tabs--bottom.el-tabs--border-card>.el-tabs__header .el-tabs__item:nth-child(2),.el-tabs--bottom.el-tabs--card>.el-tabs__header .el-tabs__item:nth-child(2),.el-tabs--top .el-tabs--left>.el-tabs__header .el-tabs__item:nth-child(2),.el-tabs--top .el-tabs--right>.el-tabs__header .el-tabs__item:nth-child(2),.el-tabs--top.el-tabs--border-card>.el-tabs__header .el-tabs__item:nth-child(2),.el-tabs--top.el-tabs--card>.el-tabs__header .el-tabs__item:nth-child(2){padding-left:20px}.el-tabs--bottom .el-tabs__header.is-bottom{margin-bottom:0;margin-top:10px}.el-tabs--bottom.el-tabs--border-card .el-tabs__header.is-bottom{border-bottom:0;border-top:1px solid #DCDFE6}.el-tabs--bottom.el-tabs--border-card .el-tabs__nav-wrap.is-bottom{margin-top:-1px;margin-bottom:0}.el-tabs--bottom.el-tabs--border-card .el-tabs__item.is-bottom:not(.is-active){border:1px solid transparent}.el-tabs--bottom.el-tabs--border-card .el-tabs__item.is-bottom{margin:0 -1px -1px}.el-tabs--left,.el-tabs--right{overflow:hidden}.el-tabs--left .el-tabs__header.is-left,.el-tabs--left .el-tabs__header.is-right,.el-tabs--left .el-tabs__nav-scroll,.el-tabs--left .el-tabs__nav-wrap.is-left,.el-tabs--left .el-tabs__nav-wrap.is-right,.el-tabs--right .el-tabs__header.is-left,.el-tabs--right .el-tabs__header.is-right,.el-tabs--right .el-tabs__nav-scroll,.el-tabs--right .el-tabs__nav-wrap.is-left,.el-tabs--right .el-tabs__nav-wrap.is-right{height:100%}.el-tabs--left .el-tabs__active-bar.is-left,.el-tabs--left .el-tabs__active-bar.is-right,.el-tabs--right .el-tabs__active-bar.is-left,.el-tabs--right .el-tabs__active-bar.is-right{top:0;bottom:auto;width:2px;height:auto}.el-tabs--left .el-tabs__nav-wrap.is-left,.el-tabs--left .el-tabs__nav-wrap.is-right,.el-tabs--right .el-tabs__nav-wrap.is-left,.el-tabs--right .el-tabs__nav-wrap.is-right{margin-bottom:0}.el-tabs--left .el-tabs__nav-wrap.is-left>.el-tabs__nav-next,.el-tabs--left .el-tabs__nav-wrap.is-left>.el-tabs__nav-prev,.el-tabs--left .el-tabs__nav-wrap.is-right>.el-tabs__nav-next,.el-tabs--left .el-tabs__nav-wrap.is-right>.el-tabs__nav-prev,.el-tabs--right .el-tabs__nav-wrap.is-left>.el-tabs__nav-next,.el-tabs--right .el-tabs__nav-wrap.is-left>.el-tabs__nav-prev,.el-tabs--right .el-tabs__nav-wrap.is-right>.el-tabs__nav-next,.el-tabs--right .el-tabs__nav-wrap.is-right>.el-tabs__nav-prev{height:30px;line-height:30px;width:100%;text-align:center;cursor:pointer}.el-tabs--left .el-tabs__nav-wrap.is-left>.el-tabs__nav-next i,.el-tabs--left .el-tabs__nav-wrap.is-left>.el-tabs__nav-prev i,.el-tabs--left .el-tabs__nav-wrap.is-right>.el-tabs__nav-next i,.el-tabs--left .el-tabs__nav-wrap.is-right>.el-tabs__nav-prev i,.el-tabs--right .el-tabs__nav-wrap.is-left>.el-tabs__nav-next i,.el-tabs--right .el-tabs__nav-wrap.is-left>.el-tabs__nav-prev i,.el-tabs--right .el-tabs__nav-wrap.is-right>.el-tabs__nav-next i,.el-tabs--right .el-tabs__nav-wrap.is-right>.el-tabs__nav-prev i{-webkit-transform:rotateZ(90deg);transform:rotateZ(90deg)}.el-tabs--left .el-tabs__nav-wrap.is-left>.el-tabs__nav-prev,.el-tabs--left .el-tabs__nav-wrap.is-right>.el-tabs__nav-prev,.el-tabs--right .el-tabs__nav-wrap.is-left>.el-tabs__nav-prev,.el-tabs--right .el-tabs__nav-wrap.is-right>.el-tabs__nav-prev{left:auto;top:0}.el-tabs--left .el-tabs__nav-wrap.is-left>.el-tabs__nav-next,.el-tabs--left .el-tabs__nav-wrap.is-right>.el-tabs__nav-next,.el-tabs--right .el-tabs__nav-wrap.is-left>.el-tabs__nav-next,.el-tabs--right .el-tabs__nav-wrap.is-right>.el-tabs__nav-next{right:auto;bottom:0}.el-tabs--left .el-tabs__active-bar.is-left,.el-tabs--left .el-tabs__nav-wrap.is-left::after{right:0;left:auto}.el-tabs--left .el-tabs__nav-wrap.is-left.is-scrollable,.el-tabs--left .el-tabs__nav-wrap.is-right.is-scrollable,.el-tabs--right .el-tabs__nav-wrap.is-left.is-scrollable,.el-tabs--right .el-tabs__nav-wrap.is-right.is-scrollable{padding:30px 0}.el-tabs--left .el-tabs__nav-wrap.is-left::after,.el-tabs--left .el-tabs__nav-wrap.is-right::after,.el-tabs--right .el-tabs__nav-wrap.is-left::after,.el-tabs--right .el-tabs__nav-wrap.is-right::after{height:100%;width:2px;bottom:auto;top:0}.el-tabs--left .el-tabs__nav.is-left,.el-tabs--left .el-tabs__nav.is-right,.el-tabs--right .el-tabs__nav.is-left,.el-tabs--right .el-tabs__nav.is-right{float:none}.el-tabs--left .el-tabs__item.is-left,.el-tabs--left .el-tabs__item.is-right,.el-tabs--right .el-tabs__item.is-left,.el-tabs--right .el-tabs__item.is-right{display:block}.el-tabs--left .el-tabs__header.is-left{float:left;margin-bottom:0;margin-right:10px}.el-button-group>.el-button:not(:last-child),.el-tabs--left .el-tabs__nav-wrap.is-left{margin-right:-1px}.el-tabs--left .el-tabs__item.is-left{text-align:right}.el-tabs--left.el-tabs--card .el-tabs__item.is-left{border-left:none;border-right:1px solid #E4E7ED;border-bottom:none;border-top:1px solid #E4E7ED;text-align:left}.el-tabs--left.el-tabs--card .el-tabs__item.is-left:first-child{border-right:1px solid #E4E7ED;border-top:none}.el-tabs--left.el-tabs--card .el-tabs__item.is-left.is-active{border:1px solid #E4E7ED;border-right-color:#fff;border-left:none;border-bottom:none}.el-tabs--left.el-tabs--card .el-tabs__item.is-left.is-active:first-child{border-top:none}.el-tabs--left.el-tabs--card .el-tabs__item.is-left.is-active:last-child{border-bottom:none}.el-tabs--left.el-tabs--card .el-tabs__nav{border-radius:4px 0 0 4px;border-bottom:1px solid #E4E7ED;border-right:none}.el-tabs--left.el-tabs--card .el-tabs__new-tab{float:none}.el-tabs--left.el-tabs--border-card .el-tabs__header.is-left{border-right:1px solid #dfe4ed}.el-tabs--left.el-tabs--border-card .el-tabs__item.is-left{border:1px solid transparent;margin:-1px 0 -1px -1px}.el-tabs--left.el-tabs--border-card .el-tabs__item.is-left.is-active{border-color:#d1dbe5 transparent}.el-tabs--right .el-tabs__header.is-right{float:right;margin-bottom:0;margin-left:10px}.el-tabs--right .el-tabs__nav-wrap.is-right{margin-left:-1px}.el-tabs--right .el-tabs__nav-wrap.is-right::after{left:0;right:auto}.el-tabs--right .el-tabs__active-bar.is-right{left:0}.el-tabs--right.el-tabs--card .el-tabs__item.is-right{border-bottom:none;border-top:1px solid #E4E7ED}.el-tabs--right.el-tabs--card .el-tabs__item.is-right:first-child{border-left:1px solid #E4E7ED;border-top:none}.el-tabs--right.el-tabs--card .el-tabs__item.is-right.is-active{border:1px solid #E4E7ED;border-left-color:#fff;border-right:none;border-bottom:none}.el-tabs--right.el-tabs--card .el-tabs__item.is-right.is-active:first-child{border-top:none}.el-tabs--right.el-tabs--card .el-tabs__item.is-right.is-active:last-child{border-bottom:none}.el-tabs--right.el-tabs--card .el-tabs__nav{border-radius:0 4px 4px 0;border-bottom:1px solid #E4E7ED;border-left:none}.el-tabs--right.el-tabs--border-card .el-tabs__header.is-right{border-left:1px solid #dfe4ed}.el-tabs--right.el-tabs--border-card .el-tabs__item.is-right{border:1px solid transparent;margin:-1px -1px -1px 0}.el-tabs--right.el-tabs--border-card .el-tabs__item.is-right.is-active{border-color:#d1dbe5 transparent}.slideInLeft-transition,.slideInRight-transition{display:inline-block}.slideInRight-enter{-webkit-animation:slideInRight-enter .3s;animation:slideInRight-enter .3s}.slideInRight-leave{position:absolute;left:0;right:0;-webkit-animation:slideInRight-leave .3s;animation:slideInRight-leave .3s}.slideInLeft-enter{-webkit-animation:slideInLeft-enter .3s;animation:slideInLeft-enter .3s}.slideInLeft-leave{position:absolute;left:0;right:0;-webkit-animation:slideInLeft-leave .3s;animation:slideInLeft-leave .3s}@-webkit-keyframes slideInRight-enter{0%{opacity:0;-webkit-transform-origin:0 0;transform-origin:0 0;-webkit-transform:translateX(100%);transform:translateX(100%)}to{opacity:1;-webkit-transform-origin:0 0;transform-origin:0 0;-webkit-transform:translateX(0);transform:translateX(0)}}@keyframes slideInRight-enter{0%{opacity:0;-webkit-transform-origin:0 0;transform-origin:0 0;-webkit-transform:translateX(100%);transform:translateX(100%)}to{opacity:1;-webkit-transform-origin:0 0;transform-origin:0 0;-webkit-transform:translateX(0);transform:translateX(0)}}@-webkit-keyframes slideInRight-leave{0%{-webkit-transform-origin:0 0;transform-origin:0 0;-webkit-transform:translateX(0);transform:translateX(0);opacity:1}100%{-webkit-transform-origin:0 0;transform-origin:0 0;-webkit-transform:translateX(100%);transform:translateX(100%);opacity:0}}@keyframes slideInRight-leave{0%{-webkit-transform-origin:0 0;transform-origin:0 0;-webkit-transform:translateX(0);transform:translateX(0);opacity:1}100%{-webkit-transform-origin:0 0;transform-origin:0 0;-webkit-transform:translateX(100%);transform:translateX(100%);opacity:0}}@-webkit-keyframes slideInLeft-enter{0%{opacity:0;-webkit-transform-origin:0 0;transform-origin:0 0;-webkit-transform:translateX(-100%);transform:translateX(-100%)}to{opacity:1;-webkit-transform-origin:0 0;transform-origin:0 0;-webkit-transform:translateX(0);transform:translateX(0)}}@keyframes slideInLeft-enter{0%{opacity:0;-webkit-transform-origin:0 0;transform-origin:0 0;-webkit-transform:translateX(-100%);transform:translateX(-100%)}to{opacity:1;-webkit-transform-origin:0 0;transform-origin:0 0;-webkit-transform:translateX(0);transform:translateX(0)}}@-webkit-keyframes slideInLeft-leave{0%{-webkit-transform-origin:0 0;transform-origin:0 0;-webkit-transform:translateX(0);transform:translateX(0);opacity:1}100%{-webkit-transform-origin:0 0;transform-origin:0 0;-webkit-transform:translateX(-100%);transform:translateX(-100%);opacity:0}}@keyframes slideInLeft-leave{0%{-webkit-transform-origin:0 0;transform-origin:0 0;-webkit-transform:translateX(0);transform:translateX(0);opacity:1}100%{-webkit-transform-origin:0 0;transform-origin:0 0;-webkit-transform:translateX(-100%);transform:translateX(-100%);opacity:0}}.el-tree{position:relative;cursor:default;background:#FFF;color:#606266}.el-tree__empty-block{position:relative;min-height:60px;text-align:center;width:100%;height:100%}.el-tree__empty-text{position:absolute;left:50%;top:50%;-webkit-transform:translate(-50%,-50%);transform:translate(-50%,-50%);color:#909399;font-size:14px}.el-tree__drop-indicator{position:absolute;left:0;right:0;height:1px;background-color:#409EFF}.el-tree-node{white-space:nowrap;outline:0}.el-tree-node:focus>.el-tree-node__content{background-color:#F5F7FA}.el-tree-node.is-drop-inner>.el-tree-node__content .el-tree-node__label{background-color:#409EFF;color:#fff}.el-tree-node__content:hover,.el-upload-list__item:hover{background-color:#F5F7FA}.el-tree-node__content{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;height:26px;cursor:pointer}.el-tree-node__content>.el-tree-node__expand-icon{padding:6px}.el-tree-node__content>label.el-checkbox{margin-right:8px}.el-tree.is-dragging .el-tree-node__content{cursor:move}.el-tree.is-dragging .el-tree-node__content *{pointer-events:none}.el-tree.is-dragging.is-drop-not-allow .el-tree-node__content{cursor:not-allowed}.el-tree-node__expand-icon{cursor:pointer;color:#C0C4CC;font-size:12px;-webkit-transform:rotate(0);transform:rotate(0);-webkit-transition:-webkit-transform .3s ease-in-out;transition:-webkit-transform .3s ease-in-out;transition:transform .3s ease-in-out;transition:transform .3s ease-in-out,-webkit-transform .3s ease-in-out}.el-tree-node__expand-icon.expanded{-webkit-transform:rotate(90deg);transform:rotate(90deg)}.el-tree-node__expand-icon.is-leaf{color:transparent;cursor:default}.el-tree-node__label{font-size:14px}.el-tree-node__loading-icon{margin-right:8px;font-size:14px;color:#C0C4CC}.el-tree-node>.el-tree-node__children{overflow:hidden;background-color:transparent}.el-tree-node.is-expanded>.el-tree-node__children{display:block}.el-tree--highlight-current .el-tree-node.is-current>.el-tree-node__content{background-color:#f0f7ff}.el-alert{width:100%;padding:8px 16px;margin:0;-webkit-box-sizing:border-box;box-sizing:border-box;border-radius:4px;position:relative;background-color:#FFF;overflow:hidden;opacity:1;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-transition:opacity .2s;transition:opacity .2s}.el-alert.is-light .el-alert__closebtn{color:#C0C4CC}.el-alert.is-dark .el-alert__closebtn,.el-alert.is-dark .el-alert__description{color:#FFF}.el-alert.is-center{-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center}.el-alert--success.is-light{background-color:#f0f9eb;color:#67C23A}.el-alert--success.is-light .el-alert__description{color:#67C23A}.el-alert--success.is-dark{background-color:#67C23A;color:#FFF}.el-alert--info.is-light{background-color:#f4f4f5;color:#909399}.el-alert--info.is-dark{background-color:#909399;color:#FFF}.el-alert--info .el-alert__description{color:#909399}.el-alert--warning.is-light{background-color:#fdf6ec;color:#E6A23C}.el-alert--warning.is-light .el-alert__description{color:#E6A23C}.el-alert--warning.is-dark{background-color:#E6A23C;color:#FFF}.el-alert--error.is-light{background-color:#fef0f0;color:#F56C6C}.el-alert--error.is-light .el-alert__description{color:#F56C6C}.el-alert--error.is-dark{background-color:#F56C6C;color:#FFF}.el-alert__content{display:table-cell;padding:0 8px}.el-alert__icon{font-size:16px;width:16px}.el-alert__icon.is-big{font-size:28px;width:28px}.el-alert__title{font-size:13px;line-height:18px}.el-alert__title.is-bold{font-weight:700}.el-alert .el-alert__description{font-size:12px;margin:5px 0 0}.el-alert__closebtn{font-size:12px;opacity:1;position:absolute;top:12px;right:15px;cursor:pointer}.el-alert-fade-enter,.el-alert-fade-leave-active,.el-loading-fade-enter,.el-loading-fade-leave-active,.el-notification-fade-leave-active,.el-upload iframe{opacity:0}.el-carousel__arrow--right,.el-notification.right{right:16px}.el-alert__closebtn.is-customed{font-style:normal;font-size:13px;top:9px}.el-notification{display:-webkit-box;display:-ms-flexbox;display:flex;width:330px;padding:14px 26px 14px 13px;border-radius:8px;-webkit-box-sizing:border-box;box-sizing:border-box;border:1px solid #EBEEF5;position:fixed;background-color:#FFF;box-shadow:0 2px 12px 0 rgba(0,0,0,.1);-webkit-transition:opacity .3s,left .3s,right .3s,top .4s,bottom .3s,-webkit-transform .3s;transition:opacity .3s,left .3s,right .3s,top .4s,bottom .3s,-webkit-transform .3s;transition:opacity .3s,transform .3s,left .3s,right .3s,top .4s,bottom .3s;transition:opacity .3s,transform .3s,left .3s,right .3s,top .4s,bottom .3s,-webkit-transform .3s;overflow:hidden}.el-notification.left{left:16px}.el-notification__group{margin-left:13px;margin-right:8px}.el-notification__title{font-weight:700;font-size:16px;color:#303133;margin:0}.el-notification__content{font-size:14px;line-height:21px;margin:6px 0 0;color:#606266;text-align:justify}.el-notification__content p{margin:0}.el-notification__icon{height:24px;width:24px;font-size:24px}.el-notification__closeBtn{position:absolute;top:18px;right:15px;cursor:pointer;color:#909399;font-size:16px}.el-notification__closeBtn:hover{color:#606266}.el-notification .el-icon-success{color:#67C23A}.el-notification .el-icon-error{color:#F56C6C}.el-notification .el-icon-info{color:#909399}.el-notification .el-icon-warning{color:#E6A23C}.el-notification-fade-enter.right{right:0;-webkit-transform:translateX(100%);transform:translateX(100%)}.el-notification-fade-enter.left{left:0;-webkit-transform:translateX(-100%);transform:translateX(-100%)}.el-input-number{position:relative;display:inline-block;width:180px;line-height:38px}.el-input-number .el-input{display:block}.el-input-number .el-input__inner{-webkit-appearance:none;padding-left:50px;padding-right:50px;text-align:center}.el-input-number__decrease,.el-input-number__increase{position:absolute;z-index:1;top:1px;width:40px;height:auto;text-align:center;background:#F5F7FA;color:#606266;cursor:pointer;font-size:13px}.el-input-number__decrease:hover,.el-input-number__increase:hover{color:#409EFF}.el-input-number__decrease:hover:not(.is-disabled)~.el-input .el-input__inner:not(.is-disabled),.el-input-number__increase:hover:not(.is-disabled)~.el-input .el-input__inner:not(.is-disabled){border-color:#409EFF}.el-input-number__decrease.is-disabled,.el-input-number__increase.is-disabled{color:#C0C4CC;cursor:not-allowed}.el-input-number__increase{right:1px;border-radius:0 4px 4px 0;border-left:1px solid #DCDFE6}.el-input-number__decrease{left:1px;border-radius:4px 0 0 4px;border-right:1px solid #DCDFE6}.el-input-number.is-disabled .el-input-number__decrease,.el-input-number.is-disabled .el-input-number__increase{border-color:#E4E7ED;color:#E4E7ED}.el-input-number.is-disabled .el-input-number__decrease:hover,.el-input-number.is-disabled .el-input-number__increase:hover{color:#E4E7ED;cursor:not-allowed}.el-input-number--medium{width:200px;line-height:34px}.el-input-number--medium .el-input-number__decrease,.el-input-number--medium .el-input-number__increase{width:36px;font-size:14px}.el-input-number--medium .el-input__inner{padding-left:43px;padding-right:43px}.el-input-number--small{width:130px;line-height:30px}.el-input-number--small .el-input-number__decrease,.el-input-number--small .el-input-number__increase{width:32px;font-size:13px}.el-input-number--small .el-input-number__decrease [class*=el-icon],.el-input-number--small .el-input-number__increase [class*=el-icon]{-webkit-transform:scale(.9);transform:scale(.9)}.el-input-number--small .el-input__inner{padding-left:39px;padding-right:39px}.el-input-number--mini{width:130px;line-height:26px}.el-input-number--mini .el-input-number__decrease,.el-input-number--mini .el-input-number__increase{width:28px;font-size:12px}.el-input-number--mini .el-input-number__decrease [class*=el-icon],.el-input-number--mini .el-input-number__increase [class*=el-icon]{-webkit-transform:scale(.8);transform:scale(.8)}.el-input-number--mini .el-input__inner{padding-left:35px;padding-right:35px}.el-input-number.is-without-controls .el-input__inner{padding-left:15px;padding-right:15px}.el-input-number.is-controls-right .el-input__inner{padding-left:15px;padding-right:50px}.el-input-number.is-controls-right .el-input-number__decrease,.el-input-number.is-controls-right .el-input-number__increase{height:auto;line-height:19px}.el-input-number.is-controls-right .el-input-number__decrease [class*=el-icon],.el-input-number.is-controls-right .el-input-number__increase [class*=el-icon]{-webkit-transform:scale(.8);transform:scale(.8)}.el-input-number.is-controls-right .el-input-number__increase{border-radius:0 4px 0 0;border-bottom:1px solid #DCDFE6}.el-input-number.is-controls-right .el-input-number__decrease{right:1px;bottom:1px;top:auto;left:auto;border-right:none;border-left:1px solid #DCDFE6;border-radius:0 0 4px}.el-input-number.is-controls-right[class*=medium] [class*=decrease],.el-input-number.is-controls-right[class*=medium] [class*=increase]{line-height:17px}.el-input-number.is-controls-right[class*=small] [class*=decrease],.el-input-number.is-controls-right[class*=small] [class*=increase]{line-height:15px}.el-input-number.is-controls-right[class*=mini] [class*=decrease],.el-input-number.is-controls-right[class*=mini] [class*=increase]{line-height:13px}.el-tooltip:focus:hover,.el-tooltip:focus:not(.focusing){outline-width:0}.el-tooltip__popper{position:absolute;border-radius:4px;padding:10px;z-index:2000;font-size:12px;line-height:1.2;min-width:10px;word-wrap:break-word}.el-tooltip__popper .popper__arrow,.el-tooltip__popper .popper__arrow::after{position:absolute;display:block;width:0;height:0;border-color:transparent;border-style:solid}.el-tooltip__popper .popper__arrow{border-width:6px}.el-tooltip__popper .popper__arrow::after{content:" ";border-width:5px}.el-button-group::after,.el-button-group::before,.el-color-dropdown__main-wrapper::after,.el-link.is-underline:hover:after,.el-page-header__left::after,.el-progress-bar__inner::after,.el-row::after,.el-row::before,.el-slider::after,.el-slider::before,.el-slider__button-wrapper::after,.el-transfer-panel .el-transfer-panel__footer::after,.el-upload-cover::after,.el-upload-list--picture-card .el-upload-list__item-actions::after{content:""}.el-tooltip__popper[x-placement^=top]{margin-bottom:12px}.el-tooltip__popper[x-placement^=top] .popper__arrow{bottom:-6px;border-top-color:#303133;border-bottom-width:0}.el-tooltip__popper[x-placement^=top] .popper__arrow::after{bottom:1px;margin-left:-5px;border-top-color:#303133;border-bottom-width:0}.el-tooltip__popper[x-placement^=bottom]{margin-top:12px}.el-tooltip__popper[x-placement^=bottom] .popper__arrow{top:-6px;border-top-width:0;border-bottom-color:#303133}.el-tooltip__popper[x-placement^=bottom] .popper__arrow::after{top:1px;margin-left:-5px;border-top-width:0;border-bottom-color:#303133}.el-tooltip__popper[x-placement^=right]{margin-left:12px}.el-tooltip__popper[x-placement^=right] .popper__arrow{left:-6px;border-right-color:#303133;border-left-width:0}.el-tooltip__popper[x-placement^=right] .popper__arrow::after{bottom:-5px;left:1px;border-right-color:#303133;border-left-width:0}.el-tooltip__popper[x-placement^=left]{margin-right:12px}.el-tooltip__popper[x-placement^=left] .popper__arrow{right:-6px;border-right-width:0;border-left-color:#303133}.el-tooltip__popper[x-placement^=left] .popper__arrow::after{right:1px;bottom:-5px;margin-left:-5px;border-right-width:0;border-left-color:#303133}.el-tooltip__popper.is-dark{background:#303133;color:#FFF}.el-tooltip__popper.is-light{background:#FFF;border:1px solid #303133}.el-tooltip__popper.is-light[x-placement^=top] .popper__arrow{border-top-color:#303133}.el-tooltip__popper.is-light[x-placement^=top] .popper__arrow::after{border-top-color:#FFF}.el-tooltip__popper.is-light[x-placement^=bottom] .popper__arrow{border-bottom-color:#303133}.el-tooltip__popper.is-light[x-placement^=bottom] .popper__arrow::after{border-bottom-color:#FFF}.el-tooltip__popper.is-light[x-placement^=left] .popper__arrow{border-left-color:#303133}.el-tooltip__popper.is-light[x-placement^=left] .popper__arrow::after{border-left-color:#FFF}.el-tooltip__popper.is-light[x-placement^=right] .popper__arrow{border-right-color:#303133}.el-tooltip__popper.is-light[x-placement^=right] .popper__arrow::after{border-right-color:#FFF}.el-slider::after,.el-slider::before{display:table}.el-slider__button-wrapper .el-tooltip,.el-slider__button-wrapper::after{display:inline-block;vertical-align:middle}.el-slider::after{clear:both}.el-slider__runway{width:100%;height:6px;margin:16px 0;background-color:#E4E7ED;border-radius:3px;position:relative;cursor:pointer;vertical-align:middle}.el-slider__runway.show-input{margin-right:160px;width:auto}.el-slider__runway.disabled{cursor:default}.el-slider__runway.disabled .el-slider__bar{background-color:#C0C4CC}.el-slider__runway.disabled .el-slider__button{border-color:#C0C4CC}.el-slider__runway.disabled .el-slider__button-wrapper.dragging,.el-slider__runway.disabled .el-slider__button-wrapper.hover,.el-slider__runway.disabled .el-slider__button-wrapper:hover{cursor:not-allowed}.el-slider__runway.disabled .el-slider__button.dragging,.el-slider__runway.disabled .el-slider__button.hover,.el-slider__runway.disabled .el-slider__button:hover{-webkit-transform:scale(1);transform:scale(1);cursor:not-allowed}.el-slider__button-wrapper,.el-slider__stop{-webkit-transform:translateX(-50%);position:absolute}.el-slider__input{float:right;margin-top:3px;width:130px}.el-slider__input.el-input-number--mini{margin-top:5px}.el-slider__input.el-input-number--medium{margin-top:0}.el-slider__input.el-input-number--large{margin-top:-2px}.el-slider__bar{height:6px;background-color:#409EFF;border-top-left-radius:3px;border-bottom-left-radius:3px;position:absolute}.el-slider__button-wrapper{height:36px;width:36px;z-index:1001;top:-15px;transform:translateX(-50%);background-color:transparent;text-align:center;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;line-height:normal}.el-image-viewer__btn,.el-slider__button,.el-step__icon-inner{-moz-user-select:none;-ms-user-select:none}.el-slider__button-wrapper::after{height:100%}.el-slider__button-wrapper.hover,.el-slider__button-wrapper:hover{cursor:-webkit-grab;cursor:grab}.el-slider__button-wrapper.dragging{cursor:-webkit-grabbing;cursor:grabbing}.el-slider__button{width:16px;height:16px;border:2px solid #409EFF;background-color:#FFF;border-radius:50%;-webkit-transition:.2s;transition:.2s;-webkit-user-select:none;user-select:none}.el-slider__button.dragging,.el-slider__button.hover,.el-slider__button:hover{-webkit-transform:scale(1.2);transform:scale(1.2)}.el-slider__button.hover,.el-slider__button:hover{cursor:-webkit-grab;cursor:grab}.el-slider__button.dragging{cursor:-webkit-grabbing;cursor:grabbing}.el-slider__stop{height:6px;width:6px;border-radius:100%;background-color:#FFF;transform:translateX(-50%)}.el-slider__marks{top:0;left:12px;width:18px;height:100%}.el-slider__marks-text{position:absolute;-webkit-transform:translateX(-50%);transform:translateX(-50%);font-size:14px;color:#909399;margin-top:15px}.el-slider.is-vertical{position:relative}.el-slider.is-vertical .el-slider__runway{width:6px;height:100%;margin:0 16px}.el-slider.is-vertical .el-slider__bar{width:6px;height:auto;border-radius:0 0 3px 3px}.el-slider.is-vertical .el-slider__button-wrapper{top:auto;left:-15px;-webkit-transform:translateY(50%);transform:translateY(50%)}.el-slider.is-vertical .el-slider__stop{-webkit-transform:translateY(50%);transform:translateY(50%)}.el-slider.is-vertical.el-slider--with-input{padding-bottom:58px}.el-slider.is-vertical.el-slider--with-input .el-slider__input{overflow:visible;float:none;position:absolute;bottom:22px;width:36px;margin-top:15px}.el-slider.is-vertical.el-slider--with-input .el-slider__input .el-input__inner{text-align:center;padding-left:5px;padding-right:5px}.el-slider.is-vertical.el-slider--with-input .el-slider__input .el-input-number__decrease,.el-slider.is-vertical.el-slider--with-input .el-slider__input .el-input-number__increase{top:32px;margin-top:-1px;border:1px solid #DCDFE6;line-height:20px;-webkit-box-sizing:border-box;box-sizing:border-box;-webkit-transition:border-color .2s cubic-bezier(.645,.045,.355,1);transition:border-color .2s cubic-bezier(.645,.045,.355,1)}.el-slider.is-vertical.el-slider--with-input .el-slider__input .el-input-number__decrease{width:18px;right:18px;border-bottom-left-radius:4px}.el-slider.is-vertical.el-slider--with-input .el-slider__input .el-input-number__increase{width:19px;border-bottom-right-radius:4px}.el-slider.is-vertical.el-slider--with-input .el-slider__input .el-input-number__increase~.el-input .el-input__inner{border-bottom-left-radius:0;border-bottom-right-radius:0}.el-slider.is-vertical.el-slider--with-input .el-slider__input:hover .el-input-number__decrease,.el-slider.is-vertical.el-slider--with-input .el-slider__input:hover .el-input-number__increase{border-color:#C0C4CC}.el-slider.is-vertical.el-slider--with-input .el-slider__input:active .el-input-number__decrease,.el-slider.is-vertical.el-slider--with-input .el-slider__input:active .el-input-number__increase{border-color:#409EFF}.el-slider.is-vertical .el-slider__marks-text{margin-top:0;left:15px;-webkit-transform:translateY(50%);transform:translateY(50%)}.el-loading-parent--relative{position:relative!important}.el-loading-parent--hidden{overflow:hidden!important}.el-loading-mask{position:absolute;z-index:2000;background-color:rgba(255,255,255,.9);margin:0;top:0;right:0;bottom:0;left:0;-webkit-transition:opacity .3s;transition:opacity .3s}.el-loading-mask.is-fullscreen{position:fixed}.el-loading-mask.is-fullscreen .el-loading-spinner{margin-top:-25px}.el-loading-mask.is-fullscreen .el-loading-spinner .circular{height:50px;width:50px}.el-loading-spinner{top:50%;margin-top:-21px;width:100%;text-align:center;position:absolute}.el-col-pull-0,.el-col-pull-1,.el-col-pull-10,.el-col-pull-11,.el-col-pull-12,.el-col-pull-13,.el-col-pull-14,.el-col-pull-15,.el-col-pull-16,.el-col-pull-17,.el-col-pull-18,.el-col-pull-19,.el-col-pull-2,.el-col-pull-20,.el-col-pull-21,.el-col-pull-22,.el-col-pull-23,.el-col-pull-24,.el-col-pull-3,.el-col-pull-4,.el-col-pull-5,.el-col-pull-6,.el-col-pull-7,.el-col-pull-8,.el-col-pull-9,.el-col-push-0,.el-col-push-1,.el-col-push-10,.el-col-push-11,.el-col-push-12,.el-col-push-13,.el-col-push-14,.el-col-push-15,.el-col-push-16,.el-col-push-17,.el-col-push-18,.el-col-push-19,.el-col-push-2,.el-col-push-20,.el-col-push-21,.el-col-push-22,.el-col-push-23,.el-col-push-24,.el-col-push-3,.el-col-push-4,.el-col-push-5,.el-col-push-6,.el-col-push-7,.el-col-push-8,.el-col-push-9,.el-row,.el-upload-dragger,.el-upload-list__item{position:relative}.el-loading-spinner .el-loading-text{color:#409EFF;margin:3px 0;font-size:14px}.el-loading-spinner .circular{height:42px;width:42px;-webkit-animation:loading-rotate 2s linear infinite;animation:loading-rotate 2s linear infinite}.el-loading-spinner .path{-webkit-animation:loading-dash 1.5s ease-in-out infinite;animation:loading-dash 1.5s ease-in-out infinite;stroke-dasharray:90,150;stroke-dashoffset:0;stroke-width:2;stroke:#409EFF;stroke-linecap:round}.el-loading-spinner i{color:#409EFF}@-webkit-keyframes loading-rotate{100%{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}@keyframes loading-rotate{100%{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}@-webkit-keyframes loading-dash{0%{stroke-dasharray:1,200;stroke-dashoffset:0}50%{stroke-dasharray:90,150;stroke-dashoffset:-40px}100%{stroke-dasharray:90,150;stroke-dashoffset:-120px}}@keyframes loading-dash{0%{stroke-dasharray:1,200;stroke-dashoffset:0}50%{stroke-dasharray:90,150;stroke-dashoffset:-40px}100%{stroke-dasharray:90,150;stroke-dashoffset:-120px}}.el-row{-webkit-box-sizing:border-box;box-sizing:border-box}.el-row::after,.el-row::before{display:table}.el-row::after{clear:both}.el-row--flex{display:-webkit-box;display:-ms-flexbox;display:flex}.el-col-0,.el-row--flex:after,.el-row--flex:before{display:none}.el-row--flex.is-justify-center{-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center}.el-row--flex.is-justify-end{-webkit-box-pack:end;-ms-flex-pack:end;justify-content:flex-end}.el-row--flex.is-justify-space-between{-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between}.el-row--flex.is-justify-space-around{-ms-flex-pack:distribute;justify-content:space-around}.el-row--flex.is-align-top{-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start}.el-row--flex.is-align-middle{-webkit-box-align:center;-ms-flex-align:center;align-items:center}.el-row--flex.is-align-bottom{-webkit-box-align:end;-ms-flex-align:end;align-items:flex-end}[class*=el-col-]{float:left;-webkit-box-sizing:border-box;box-sizing:border-box}.el-col-0{width:0%}.el-col-pull-0{right:0}.el-col-push-0{left:0}.el-col-1{width:4.16667%}.el-col-offset-1{margin-left:4.16667%}.el-col-pull-1{right:4.16667%}.el-col-push-1{left:4.16667%}.el-col-2{width:8.33333%}.el-col-offset-2{margin-left:8.33333%}.el-col-pull-2{right:8.33333%}.el-col-push-2{left:8.33333%}.el-col-3{width:12.5%}.el-col-offset-3{margin-left:12.5%}.el-col-pull-3{right:12.5%}.el-col-push-3{left:12.5%}.el-col-4{width:16.66667%}.el-col-offset-4{margin-left:16.66667%}.el-col-pull-4{right:16.66667%}.el-col-push-4{left:16.66667%}.el-col-5{width:20.83333%}.el-col-offset-5{margin-left:20.83333%}.el-col-pull-5{right:20.83333%}.el-col-push-5{left:20.83333%}.el-col-6{width:25%}.el-col-offset-6{margin-left:25%}.el-col-pull-6{right:25%}.el-col-push-6{left:25%}.el-col-7{width:29.16667%}.el-col-offset-7{margin-left:29.16667%}.el-col-pull-7{right:29.16667%}.el-col-push-7{left:29.16667%}.el-col-8{width:33.33333%}.el-col-offset-8{margin-left:33.33333%}.el-col-pull-8{right:33.33333%}.el-col-push-8{left:33.33333%}.el-col-9{width:37.5%}.el-col-offset-9{margin-left:37.5%}.el-col-pull-9{right:37.5%}.el-col-push-9{left:37.5%}.el-col-10{width:41.66667%}.el-col-offset-10{margin-left:41.66667%}.el-col-pull-10{right:41.66667%}.el-col-push-10{left:41.66667%}.el-col-11{width:45.83333%}.el-col-offset-11{margin-left:45.83333%}.el-col-pull-11{right:45.83333%}.el-col-push-11{left:45.83333%}.el-col-12{width:50%}.el-col-offset-12{margin-left:50%}.el-col-pull-12{right:50%}.el-col-push-12{left:50%}.el-col-13{width:54.16667%}.el-col-offset-13{margin-left:54.16667%}.el-col-pull-13{right:54.16667%}.el-col-push-13{left:54.16667%}.el-col-14{width:58.33333%}.el-col-offset-14{margin-left:58.33333%}.el-col-pull-14{right:58.33333%}.el-col-push-14{left:58.33333%}.el-col-15{width:62.5%}.el-col-offset-15{margin-left:62.5%}.el-col-pull-15{right:62.5%}.el-col-push-15{left:62.5%}.el-col-16{width:66.66667%}.el-col-offset-16{margin-left:66.66667%}.el-col-pull-16{right:66.66667%}.el-col-push-16{left:66.66667%}.el-col-17{width:70.83333%}.el-col-offset-17{margin-left:70.83333%}.el-col-pull-17{right:70.83333%}.el-col-push-17{left:70.83333%}.el-col-18{width:75%}.el-col-offset-18{margin-left:75%}.el-col-pull-18{right:75%}.el-col-push-18{left:75%}.el-col-19{width:79.16667%}.el-col-offset-19{margin-left:79.16667%}.el-col-pull-19{right:79.16667%}.el-col-push-19{left:79.16667%}.el-col-20{width:83.33333%}.el-col-offset-20{margin-left:83.33333%}.el-col-pull-20{right:83.33333%}.el-col-push-20{left:83.33333%}.el-col-21{width:87.5%}.el-col-offset-21{margin-left:87.5%}.el-col-pull-21{right:87.5%}.el-col-push-21{left:87.5%}.el-col-22{width:91.66667%}.el-col-offset-22{margin-left:91.66667%}.el-col-pull-22{right:91.66667%}.el-col-push-22{left:91.66667%}.el-col-23{width:95.83333%}.el-col-offset-23{margin-left:95.83333%}.el-col-pull-23{right:95.83333%}.el-col-push-23{left:95.83333%}.el-col-24{width:100%}.el-col-offset-24{margin-left:100%}.el-col-pull-24{right:100%}.el-col-push-24{left:100%}@media only screen and (max-width:767px){.el-col-xs-0{display:none;width:0%}.el-col-xs-offset-0{margin-left:0}.el-col-xs-pull-0{position:relative;right:0}.el-col-xs-push-0{position:relative;left:0}.el-col-xs-1{width:4.16667%}.el-col-xs-offset-1{margin-left:4.16667%}.el-col-xs-pull-1{position:relative;right:4.16667%}.el-col-xs-push-1{position:relative;left:4.16667%}.el-col-xs-2{width:8.33333%}.el-col-xs-offset-2{margin-left:8.33333%}.el-col-xs-pull-2{position:relative;right:8.33333%}.el-col-xs-push-2{position:relative;left:8.33333%}.el-col-xs-3{width:12.5%}.el-col-xs-offset-3{margin-left:12.5%}.el-col-xs-pull-3{position:relative;right:12.5%}.el-col-xs-push-3{position:relative;left:12.5%}.el-col-xs-4{width:16.66667%}.el-col-xs-offset-4{margin-left:16.66667%}.el-col-xs-pull-4{position:relative;right:16.66667%}.el-col-xs-push-4{position:relative;left:16.66667%}.el-col-xs-5{width:20.83333%}.el-col-xs-offset-5{margin-left:20.83333%}.el-col-xs-pull-5{position:relative;right:20.83333%}.el-col-xs-push-5{position:relative;left:20.83333%}.el-col-xs-6{width:25%}.el-col-xs-offset-6{margin-left:25%}.el-col-xs-pull-6{position:relative;right:25%}.el-col-xs-push-6{position:relative;left:25%}.el-col-xs-7{width:29.16667%}.el-col-xs-offset-7{margin-left:29.16667%}.el-col-xs-pull-7{position:relative;right:29.16667%}.el-col-xs-push-7{position:relative;left:29.16667%}.el-col-xs-8{width:33.33333%}.el-col-xs-offset-8{margin-left:33.33333%}.el-col-xs-pull-8{position:relative;right:33.33333%}.el-col-xs-push-8{position:relative;left:33.33333%}.el-col-xs-9{width:37.5%}.el-col-xs-offset-9{margin-left:37.5%}.el-col-xs-pull-9{position:relative;right:37.5%}.el-col-xs-push-9{position:relative;left:37.5%}.el-col-xs-10{width:41.66667%}.el-col-xs-offset-10{margin-left:41.66667%}.el-col-xs-pull-10{position:relative;right:41.66667%}.el-col-xs-push-10{position:relative;left:41.66667%}.el-col-xs-11{width:45.83333%}.el-col-xs-offset-11{margin-left:45.83333%}.el-col-xs-pull-11{position:relative;right:45.83333%}.el-col-xs-push-11{position:relative;left:45.83333%}.el-col-xs-12{width:50%}.el-col-xs-offset-12{margin-left:50%}.el-col-xs-pull-12{position:relative;right:50%}.el-col-xs-push-12{position:relative;left:50%}.el-col-xs-13{width:54.16667%}.el-col-xs-offset-13{margin-left:54.16667%}.el-col-xs-pull-13{position:relative;right:54.16667%}.el-col-xs-push-13{position:relative;left:54.16667%}.el-col-xs-14{width:58.33333%}.el-col-xs-offset-14{margin-left:58.33333%}.el-col-xs-pull-14{position:relative;right:58.33333%}.el-col-xs-push-14{position:relative;left:58.33333%}.el-col-xs-15{width:62.5%}.el-col-xs-offset-15{margin-left:62.5%}.el-col-xs-pull-15{position:relative;right:62.5%}.el-col-xs-push-15{position:relative;left:62.5%}.el-col-xs-16{width:66.66667%}.el-col-xs-offset-16{margin-left:66.66667%}.el-col-xs-pull-16{position:relative;right:66.66667%}.el-col-xs-push-16{position:relative;left:66.66667%}.el-col-xs-17{width:70.83333%}.el-col-xs-offset-17{margin-left:70.83333%}.el-col-xs-pull-17{position:relative;right:70.83333%}.el-col-xs-push-17{position:relative;left:70.83333%}.el-col-xs-18{width:75%}.el-col-xs-offset-18{margin-left:75%}.el-col-xs-pull-18{position:relative;right:75%}.el-col-xs-push-18{position:relative;left:75%}.el-col-xs-19{width:79.16667%}.el-col-xs-offset-19{margin-left:79.16667%}.el-col-xs-pull-19{position:relative;right:79.16667%}.el-col-xs-push-19{position:relative;left:79.16667%}.el-col-xs-20{width:83.33333%}.el-col-xs-offset-20{margin-left:83.33333%}.el-col-xs-pull-20{position:relative;right:83.33333%}.el-col-xs-push-20{position:relative;left:83.33333%}.el-col-xs-21{width:87.5%}.el-col-xs-offset-21{margin-left:87.5%}.el-col-xs-pull-21{position:relative;right:87.5%}.el-col-xs-push-21{position:relative;left:87.5%}.el-col-xs-22{width:91.66667%}.el-col-xs-offset-22{margin-left:91.66667%}.el-col-xs-pull-22{position:relative;right:91.66667%}.el-col-xs-push-22{position:relative;left:91.66667%}.el-col-xs-23{width:95.83333%}.el-col-xs-offset-23{margin-left:95.83333%}.el-col-xs-pull-23{position:relative;right:95.83333%}.el-col-xs-push-23{position:relative;left:95.83333%}.el-col-xs-24{width:100%}.el-col-xs-offset-24{margin-left:100%}.el-col-xs-pull-24{position:relative;right:100%}.el-col-xs-push-24{position:relative;left:100%}}@media only screen and (min-width:768px){.el-col-sm-0{display:none;width:0%}.el-col-sm-offset-0{margin-left:0}.el-col-sm-pull-0{position:relative;right:0}.el-col-sm-push-0{position:relative;left:0}.el-col-sm-1{width:4.16667%}.el-col-sm-offset-1{margin-left:4.16667%}.el-col-sm-pull-1{position:relative;right:4.16667%}.el-col-sm-push-1{position:relative;left:4.16667%}.el-col-sm-2{width:8.33333%}.el-col-sm-offset-2{margin-left:8.33333%}.el-col-sm-pull-2{position:relative;right:8.33333%}.el-col-sm-push-2{position:relative;left:8.33333%}.el-col-sm-3{width:12.5%}.el-col-sm-offset-3{margin-left:12.5%}.el-col-sm-pull-3{position:relative;right:12.5%}.el-col-sm-push-3{position:relative;left:12.5%}.el-col-sm-4{width:16.66667%}.el-col-sm-offset-4{margin-left:16.66667%}.el-col-sm-pull-4{position:relative;right:16.66667%}.el-col-sm-push-4{position:relative;left:16.66667%}.el-col-sm-5{width:20.83333%}.el-col-sm-offset-5{margin-left:20.83333%}.el-col-sm-pull-5{position:relative;right:20.83333%}.el-col-sm-push-5{position:relative;left:20.83333%}.el-col-sm-6{width:25%}.el-col-sm-offset-6{margin-left:25%}.el-col-sm-pull-6{position:relative;right:25%}.el-col-sm-push-6{position:relative;left:25%}.el-col-sm-7{width:29.16667%}.el-col-sm-offset-7{margin-left:29.16667%}.el-col-sm-pull-7{position:relative;right:29.16667%}.el-col-sm-push-7{position:relative;left:29.16667%}.el-col-sm-8{width:33.33333%}.el-col-sm-offset-8{margin-left:33.33333%}.el-col-sm-pull-8{position:relative;right:33.33333%}.el-col-sm-push-8{position:relative;left:33.33333%}.el-col-sm-9{width:37.5%}.el-col-sm-offset-9{margin-left:37.5%}.el-col-sm-pull-9{position:relative;right:37.5%}.el-col-sm-push-9{position:relative;left:37.5%}.el-col-sm-10{width:41.66667%}.el-col-sm-offset-10{margin-left:41.66667%}.el-col-sm-pull-10{position:relative;right:41.66667%}.el-col-sm-push-10{position:relative;left:41.66667%}.el-col-sm-11{width:45.83333%}.el-col-sm-offset-11{margin-left:45.83333%}.el-col-sm-pull-11{position:relative;right:45.83333%}.el-col-sm-push-11{position:relative;left:45.83333%}.el-col-sm-12{width:50%}.el-col-sm-offset-12{margin-left:50%}.el-col-sm-pull-12{position:relative;right:50%}.el-col-sm-push-12{position:relative;left:50%}.el-col-sm-13{width:54.16667%}.el-col-sm-offset-13{margin-left:54.16667%}.el-col-sm-pull-13{position:relative;right:54.16667%}.el-col-sm-push-13{position:relative;left:54.16667%}.el-col-sm-14{width:58.33333%}.el-col-sm-offset-14{margin-left:58.33333%}.el-col-sm-pull-14{position:relative;right:58.33333%}.el-col-sm-push-14{position:relative;left:58.33333%}.el-col-sm-15{width:62.5%}.el-col-sm-offset-15{margin-left:62.5%}.el-col-sm-pull-15{position:relative;right:62.5%}.el-col-sm-push-15{position:relative;left:62.5%}.el-col-sm-16{width:66.66667%}.el-col-sm-offset-16{margin-left:66.66667%}.el-col-sm-pull-16{position:relative;right:66.66667%}.el-col-sm-push-16{position:relative;left:66.66667%}.el-col-sm-17{width:70.83333%}.el-col-sm-offset-17{margin-left:70.83333%}.el-col-sm-pull-17{position:relative;right:70.83333%}.el-col-sm-push-17{position:relative;left:70.83333%}.el-col-sm-18{width:75%}.el-col-sm-offset-18{margin-left:75%}.el-col-sm-pull-18{position:relative;right:75%}.el-col-sm-push-18{position:relative;left:75%}.el-col-sm-19{width:79.16667%}.el-col-sm-offset-19{margin-left:79.16667%}.el-col-sm-pull-19{position:relative;right:79.16667%}.el-col-sm-push-19{position:relative;left:79.16667%}.el-col-sm-20{width:83.33333%}.el-col-sm-offset-20{margin-left:83.33333%}.el-col-sm-pull-20{position:relative;right:83.33333%}.el-col-sm-push-20{position:relative;left:83.33333%}.el-col-sm-21{width:87.5%}.el-col-sm-offset-21{margin-left:87.5%}.el-col-sm-pull-21{position:relative;right:87.5%}.el-col-sm-push-21{position:relative;left:87.5%}.el-col-sm-22{width:91.66667%}.el-col-sm-offset-22{margin-left:91.66667%}.el-col-sm-pull-22{position:relative;right:91.66667%}.el-col-sm-push-22{position:relative;left:91.66667%}.el-col-sm-23{width:95.83333%}.el-col-sm-offset-23{margin-left:95.83333%}.el-col-sm-pull-23{position:relative;right:95.83333%}.el-col-sm-push-23{position:relative;left:95.83333%}.el-col-sm-24{width:100%}.el-col-sm-offset-24{margin-left:100%}.el-col-sm-pull-24{position:relative;right:100%}.el-col-sm-push-24{position:relative;left:100%}}@media only screen and (min-width:992px){.el-col-md-0{display:none;width:0%}.el-col-md-offset-0{margin-left:0}.el-col-md-pull-0{position:relative;right:0}.el-col-md-push-0{position:relative;left:0}.el-col-md-1{width:4.16667%}.el-col-md-offset-1{margin-left:4.16667%}.el-col-md-pull-1{position:relative;right:4.16667%}.el-col-md-push-1{position:relative;left:4.16667%}.el-col-md-2{width:8.33333%}.el-col-md-offset-2{margin-left:8.33333%}.el-col-md-pull-2{position:relative;right:8.33333%}.el-col-md-push-2{position:relative;left:8.33333%}.el-col-md-3{width:12.5%}.el-col-md-offset-3{margin-left:12.5%}.el-col-md-pull-3{position:relative;right:12.5%}.el-col-md-push-3{position:relative;left:12.5%}.el-col-md-4{width:16.66667%}.el-col-md-offset-4{margin-left:16.66667%}.el-col-md-pull-4{position:relative;right:16.66667%}.el-col-md-push-4{position:relative;left:16.66667%}.el-col-md-5{width:20.83333%}.el-col-md-offset-5{margin-left:20.83333%}.el-col-md-pull-5{position:relative;right:20.83333%}.el-col-md-push-5{position:relative;left:20.83333%}.el-col-md-6{width:25%}.el-col-md-offset-6{margin-left:25%}.el-col-md-pull-6{position:relative;right:25%}.el-col-md-push-6{position:relative;left:25%}.el-col-md-7{width:29.16667%}.el-col-md-offset-7{margin-left:29.16667%}.el-col-md-pull-7{position:relative;right:29.16667%}.el-col-md-push-7{position:relative;left:29.16667%}.el-col-md-8{width:33.33333%}.el-col-md-offset-8{margin-left:33.33333%}.el-col-md-pull-8{position:relative;right:33.33333%}.el-col-md-push-8{position:relative;left:33.33333%}.el-col-md-9{width:37.5%}.el-col-md-offset-9{margin-left:37.5%}.el-col-md-pull-9{position:relative;right:37.5%}.el-col-md-push-9{position:relative;left:37.5%}.el-col-md-10{width:41.66667%}.el-col-md-offset-10{margin-left:41.66667%}.el-col-md-pull-10{position:relative;right:41.66667%}.el-col-md-push-10{position:relative;left:41.66667%}.el-col-md-11{width:45.83333%}.el-col-md-offset-11{margin-left:45.83333%}.el-col-md-pull-11{position:relative;right:45.83333%}.el-col-md-push-11{position:relative;left:45.83333%}.el-col-md-12{width:50%}.el-col-md-offset-12{margin-left:50%}.el-col-md-pull-12{position:relative;right:50%}.el-col-md-push-12{position:relative;left:50%}.el-col-md-13{width:54.16667%}.el-col-md-offset-13{margin-left:54.16667%}.el-col-md-pull-13{position:relative;right:54.16667%}.el-col-md-push-13{position:relative;left:54.16667%}.el-col-md-14{width:58.33333%}.el-col-md-offset-14{margin-left:58.33333%}.el-col-md-pull-14{position:relative;right:58.33333%}.el-col-md-push-14{position:relative;left:58.33333%}.el-col-md-15{width:62.5%}.el-col-md-offset-15{margin-left:62.5%}.el-col-md-pull-15{position:relative;right:62.5%}.el-col-md-push-15{position:relative;left:62.5%}.el-col-md-16{width:66.66667%}.el-col-md-offset-16{margin-left:66.66667%}.el-col-md-pull-16{position:relative;right:66.66667%}.el-col-md-push-16{position:relative;left:66.66667%}.el-col-md-17{width:70.83333%}.el-col-md-offset-17{margin-left:70.83333%}.el-col-md-pull-17{position:relative;right:70.83333%}.el-col-md-push-17{position:relative;left:70.83333%}.el-col-md-18{width:75%}.el-col-md-offset-18{margin-left:75%}.el-col-md-pull-18{position:relative;right:75%}.el-col-md-push-18{position:relative;left:75%}.el-col-md-19{width:79.16667%}.el-col-md-offset-19{margin-left:79.16667%}.el-col-md-pull-19{position:relative;right:79.16667%}.el-col-md-push-19{position:relative;left:79.16667%}.el-col-md-20{width:83.33333%}.el-col-md-offset-20{margin-left:83.33333%}.el-col-md-pull-20{position:relative;right:83.33333%}.el-col-md-push-20{position:relative;left:83.33333%}.el-col-md-21{width:87.5%}.el-col-md-offset-21{margin-left:87.5%}.el-col-md-pull-21{position:relative;right:87.5%}.el-col-md-push-21{position:relative;left:87.5%}.el-col-md-22{width:91.66667%}.el-col-md-offset-22{margin-left:91.66667%}.el-col-md-pull-22{position:relative;right:91.66667%}.el-col-md-push-22{position:relative;left:91.66667%}.el-col-md-23{width:95.83333%}.el-col-md-offset-23{margin-left:95.83333%}.el-col-md-pull-23{position:relative;right:95.83333%}.el-col-md-push-23{position:relative;left:95.83333%}.el-col-md-24{width:100%}.el-col-md-offset-24{margin-left:100%}.el-col-md-pull-24{position:relative;right:100%}.el-col-md-push-24{position:relative;left:100%}}@media only screen and (min-width:1200px){.el-col-lg-0{display:none;width:0%}.el-col-lg-offset-0{margin-left:0}.el-col-lg-pull-0{position:relative;right:0}.el-col-lg-push-0{position:relative;left:0}.el-col-lg-1{width:4.16667%}.el-col-lg-offset-1{margin-left:4.16667%}.el-col-lg-pull-1{position:relative;right:4.16667%}.el-col-lg-push-1{position:relative;left:4.16667%}.el-col-lg-2{width:8.33333%}.el-col-lg-offset-2{margin-left:8.33333%}.el-col-lg-pull-2{position:relative;right:8.33333%}.el-col-lg-push-2{position:relative;left:8.33333%}.el-col-lg-3{width:12.5%}.el-col-lg-offset-3{margin-left:12.5%}.el-col-lg-pull-3{position:relative;right:12.5%}.el-col-lg-push-3{position:relative;left:12.5%}.el-col-lg-4{width:16.66667%}.el-col-lg-offset-4{margin-left:16.66667%}.el-col-lg-pull-4{position:relative;right:16.66667%}.el-col-lg-push-4{position:relative;left:16.66667%}.el-col-lg-5{width:20.83333%}.el-col-lg-offset-5{margin-left:20.83333%}.el-col-lg-pull-5{position:relative;right:20.83333%}.el-col-lg-push-5{position:relative;left:20.83333%}.el-col-lg-6{width:25%}.el-col-lg-offset-6{margin-left:25%}.el-col-lg-pull-6{position:relative;right:25%}.el-col-lg-push-6{position:relative;left:25%}.el-col-lg-7{width:29.16667%}.el-col-lg-offset-7{margin-left:29.16667%}.el-col-lg-pull-7{position:relative;right:29.16667%}.el-col-lg-push-7{position:relative;left:29.16667%}.el-col-lg-8{width:33.33333%}.el-col-lg-offset-8{margin-left:33.33333%}.el-col-lg-pull-8{position:relative;right:33.33333%}.el-col-lg-push-8{position:relative;left:33.33333%}.el-col-lg-9{width:37.5%}.el-col-lg-offset-9{margin-left:37.5%}.el-col-lg-pull-9{position:relative;right:37.5%}.el-col-lg-push-9{position:relative;left:37.5%}.el-col-lg-10{width:41.66667%}.el-col-lg-offset-10{margin-left:41.66667%}.el-col-lg-pull-10{position:relative;right:41.66667%}.el-col-lg-push-10{position:relative;left:41.66667%}.el-col-lg-11{width:45.83333%}.el-col-lg-offset-11{margin-left:45.83333%}.el-col-lg-pull-11{position:relative;right:45.83333%}.el-col-lg-push-11{position:relative;left:45.83333%}.el-col-lg-12{width:50%}.el-col-lg-offset-12{margin-left:50%}.el-col-lg-pull-12{position:relative;right:50%}.el-col-lg-push-12{position:relative;left:50%}.el-col-lg-13{width:54.16667%}.el-col-lg-offset-13{margin-left:54.16667%}.el-col-lg-pull-13{position:relative;right:54.16667%}.el-col-lg-push-13{position:relative;left:54.16667%}.el-col-lg-14{width:58.33333%}.el-col-lg-offset-14{margin-left:58.33333%}.el-col-lg-pull-14{position:relative;right:58.33333%}.el-col-lg-push-14{position:relative;left:58.33333%}.el-col-lg-15{width:62.5%}.el-col-lg-offset-15{margin-left:62.5%}.el-col-lg-pull-15{position:relative;right:62.5%}.el-col-lg-push-15{position:relative;left:62.5%}.el-col-lg-16{width:66.66667%}.el-col-lg-offset-16{margin-left:66.66667%}.el-col-lg-pull-16{position:relative;right:66.66667%}.el-col-lg-push-16{position:relative;left:66.66667%}.el-col-lg-17{width:70.83333%}.el-col-lg-offset-17{margin-left:70.83333%}.el-col-lg-pull-17{position:relative;right:70.83333%}.el-col-lg-push-17{position:relative;left:70.83333%}.el-col-lg-18{width:75%}.el-col-lg-offset-18{margin-left:75%}.el-col-lg-pull-18{position:relative;right:75%}.el-col-lg-push-18{position:relative;left:75%}.el-col-lg-19{width:79.16667%}.el-col-lg-offset-19{margin-left:79.16667%}.el-col-lg-pull-19{position:relative;right:79.16667%}.el-col-lg-push-19{position:relative;left:79.16667%}.el-col-lg-20{width:83.33333%}.el-col-lg-offset-20{margin-left:83.33333%}.el-col-lg-pull-20{position:relative;right:83.33333%}.el-col-lg-push-20{position:relative;left:83.33333%}.el-col-lg-21{width:87.5%}.el-col-lg-offset-21{margin-left:87.5%}.el-col-lg-pull-21{position:relative;right:87.5%}.el-col-lg-push-21{position:relative;left:87.5%}.el-col-lg-22{width:91.66667%}.el-col-lg-offset-22{margin-left:91.66667%}.el-col-lg-pull-22{position:relative;right:91.66667%}.el-col-lg-push-22{position:relative;left:91.66667%}.el-col-lg-23{width:95.83333%}.el-col-lg-offset-23{margin-left:95.83333%}.el-col-lg-pull-23{position:relative;right:95.83333%}.el-col-lg-push-23{position:relative;left:95.83333%}.el-col-lg-24{width:100%}.el-col-lg-offset-24{margin-left:100%}.el-col-lg-pull-24{position:relative;right:100%}.el-col-lg-push-24{position:relative;left:100%}}@media only screen and (min-width:1920px){.el-col-xl-0{display:none;width:0%}.el-col-xl-offset-0{margin-left:0}.el-col-xl-pull-0{position:relative;right:0}.el-col-xl-push-0{position:relative;left:0}.el-col-xl-1{width:4.16667%}.el-col-xl-offset-1{margin-left:4.16667%}.el-col-xl-pull-1{position:relative;right:4.16667%}.el-col-xl-push-1{position:relative;left:4.16667%}.el-col-xl-2{width:8.33333%}.el-col-xl-offset-2{margin-left:8.33333%}.el-col-xl-pull-2{position:relative;right:8.33333%}.el-col-xl-push-2{position:relative;left:8.33333%}.el-col-xl-3{width:12.5%}.el-col-xl-offset-3{margin-left:12.5%}.el-col-xl-pull-3{position:relative;right:12.5%}.el-col-xl-push-3{position:relative;left:12.5%}.el-col-xl-4{width:16.66667%}.el-col-xl-offset-4{margin-left:16.66667%}.el-col-xl-pull-4{position:relative;right:16.66667%}.el-col-xl-push-4{position:relative;left:16.66667%}.el-col-xl-5{width:20.83333%}.el-col-xl-offset-5{margin-left:20.83333%}.el-col-xl-pull-5{position:relative;right:20.83333%}.el-col-xl-push-5{position:relative;left:20.83333%}.el-col-xl-6{width:25%}.el-col-xl-offset-6{margin-left:25%}.el-col-xl-pull-6{position:relative;right:25%}.el-col-xl-push-6{position:relative;left:25%}.el-col-xl-7{width:29.16667%}.el-col-xl-offset-7{margin-left:29.16667%}.el-col-xl-pull-7{position:relative;right:29.16667%}.el-col-xl-push-7{position:relative;left:29.16667%}.el-col-xl-8{width:33.33333%}.el-col-xl-offset-8{margin-left:33.33333%}.el-col-xl-pull-8{position:relative;right:33.33333%}.el-col-xl-push-8{position:relative;left:33.33333%}.el-col-xl-9{width:37.5%}.el-col-xl-offset-9{margin-left:37.5%}.el-col-xl-pull-9{position:relative;right:37.5%}.el-col-xl-push-9{position:relative;left:37.5%}.el-col-xl-10{width:41.66667%}.el-col-xl-offset-10{margin-left:41.66667%}.el-col-xl-pull-10{position:relative;right:41.66667%}.el-col-xl-push-10{position:relative;left:41.66667%}.el-col-xl-11{width:45.83333%}.el-col-xl-offset-11{margin-left:45.83333%}.el-col-xl-pull-11{position:relative;right:45.83333%}.el-col-xl-push-11{position:relative;left:45.83333%}.el-col-xl-12{width:50%}.el-col-xl-offset-12{margin-left:50%}.el-col-xl-pull-12{position:relative;right:50%}.el-col-xl-push-12{position:relative;left:50%}.el-col-xl-13{width:54.16667%}.el-col-xl-offset-13{margin-left:54.16667%}.el-col-xl-pull-13{position:relative;right:54.16667%}.el-col-xl-push-13{position:relative;left:54.16667%}.el-col-xl-14{width:58.33333%}.el-col-xl-offset-14{margin-left:58.33333%}.el-col-xl-pull-14{position:relative;right:58.33333%}.el-col-xl-push-14{position:relative;left:58.33333%}.el-col-xl-15{width:62.5%}.el-col-xl-offset-15{margin-left:62.5%}.el-col-xl-pull-15{position:relative;right:62.5%}.el-col-xl-push-15{position:relative;left:62.5%}.el-col-xl-16{width:66.66667%}.el-col-xl-offset-16{margin-left:66.66667%}.el-col-xl-pull-16{position:relative;right:66.66667%}.el-col-xl-push-16{position:relative;left:66.66667%}.el-col-xl-17{width:70.83333%}.el-col-xl-offset-17{margin-left:70.83333%}.el-col-xl-pull-17{position:relative;right:70.83333%}.el-col-xl-push-17{position:relative;left:70.83333%}.el-col-xl-18{width:75%}.el-col-xl-offset-18{margin-left:75%}.el-col-xl-pull-18{position:relative;right:75%}.el-col-xl-push-18{position:relative;left:75%}.el-col-xl-19{width:79.16667%}.el-col-xl-offset-19{margin-left:79.16667%}.el-col-xl-pull-19{position:relative;right:79.16667%}.el-col-xl-push-19{position:relative;left:79.16667%}.el-col-xl-20{width:83.33333%}.el-col-xl-offset-20{margin-left:83.33333%}.el-col-xl-pull-20{position:relative;right:83.33333%}.el-col-xl-push-20{position:relative;left:83.33333%}.el-col-xl-21{width:87.5%}.el-col-xl-offset-21{margin-left:87.5%}.el-col-xl-pull-21{position:relative;right:87.5%}.el-col-xl-push-21{position:relative;left:87.5%}.el-col-xl-22{width:91.66667%}.el-col-xl-offset-22{margin-left:91.66667%}.el-col-xl-pull-22{position:relative;right:91.66667%}.el-col-xl-push-22{position:relative;left:91.66667%}.el-col-xl-23{width:95.83333%}.el-col-xl-offset-23{margin-left:95.83333%}.el-col-xl-pull-23{position:relative;right:95.83333%}.el-col-xl-push-23{position:relative;left:95.83333%}.el-col-xl-24{width:100%}.el-col-xl-offset-24{margin-left:100%}.el-col-xl-pull-24{position:relative;right:100%}.el-col-xl-push-24{position:relative;left:100%}}@-webkit-keyframes progress{0%{background-position:0 0}100%{background-position:32px 0}}.el-upload{display:inline-block;text-align:center;cursor:pointer;outline:0}.el-upload__input{display:none}.el-upload__tip{font-size:12px;color:#606266;margin-top:7px}.el-upload iframe{position:absolute;z-index:-1;top:0;left:0;filter:alpha(opacity=0)}.el-upload--picture-card{background-color:#fbfdff;border:1px dashed #c0ccda;border-radius:6px;-webkit-box-sizing:border-box;box-sizing:border-box;width:148px;height:148px;cursor:pointer;line-height:146px;vertical-align:top}.el-upload--picture-card i{font-size:28px;color:#8c939d}.el-upload--picture-card:hover,.el-upload:focus{border-color:#409EFF;color:#409EFF}.el-upload:focus .el-upload-dragger{border-color:#409EFF}.el-upload-dragger{background-color:#fff;border:1px dashed #d9d9d9;border-radius:6px;-webkit-box-sizing:border-box;box-sizing:border-box;width:360px;height:180px;text-align:center;cursor:pointer;overflow:hidden}.el-upload-dragger .el-icon-upload{font-size:67px;color:#C0C4CC;margin:40px 0 16px;line-height:50px}.el-upload-dragger+.el-upload__tip{text-align:center}.el-upload-dragger~.el-upload__files{border-top:1px solid #DCDFE6;margin-top:7px;padding-top:5px}.el-upload-dragger .el-upload__text{color:#606266;font-size:14px;text-align:center}.el-upload-dragger .el-upload__text em{color:#409EFF;font-style:normal}.el-upload-dragger:hover{border-color:#409EFF}.el-upload-dragger.is-dragover{background-color:rgba(32,159,255,.06);border:2px dashed #409EFF}.el-upload-list{margin:0;padding:0;list-style:none}.el-upload-list__item{-webkit-transition:all .5s cubic-bezier(.55,0,.1,1);transition:all .5s cubic-bezier(.55,0,.1,1);font-size:14px;color:#606266;line-height:1.8;margin-top:5px;-webkit-box-sizing:border-box;box-sizing:border-box;border-radius:4px;width:100%}.el-upload-list__item .el-progress{position:absolute;top:20px;width:100%}.el-upload-list__item .el-progress__text{position:absolute;right:0;top:-13px}.el-upload-list__item .el-progress-bar{margin-right:0;padding-right:0}.el-upload-list__item:first-child{margin-top:10px}.el-upload-list__item .el-icon-upload-success{color:#67C23A}.el-upload-list__item .el-icon-close{display:none;position:absolute;top:5px;right:5px;cursor:pointer;opacity:.75;color:#606266}.el-upload-list__item .el-icon-close:hover{opacity:1}.el-upload-list__item .el-icon-close-tip{display:none;position:absolute;top:5px;right:5px;font-size:12px;cursor:pointer;opacity:1;color:#409EFF}.el-upload-list__item:hover .el-icon-close{display:inline-block}.el-upload-list__item:hover .el-progress__text{display:none}.el-upload-list__item.is-success .el-upload-list__item-status-label{display:block}.el-upload-list__item.is-success .el-upload-list__item-name:focus,.el-upload-list__item.is-success .el-upload-list__item-name:hover{color:#409EFF;cursor:pointer}.el-upload-list__item.is-success:focus:not(:hover) .el-icon-close-tip{display:inline-block}.el-upload-list__item.is-success:active,.el-upload-list__item.is-success:not(.focusing):focus{outline-width:0}.el-upload-list__item.is-success:active .el-icon-close-tip,.el-upload-list__item.is-success:focus .el-upload-list__item-status-label,.el-upload-list__item.is-success:hover .el-upload-list__item-status-label,.el-upload-list__item.is-success:not(.focusing):focus .el-icon-close-tip{display:none}.el-upload-list.is-disabled .el-upload-list__item:hover .el-upload-list__item-status-label{display:block}.el-upload-list__item-name{color:#606266;display:block;margin-right:40px;overflow:hidden;padding-left:4px;text-overflow:ellipsis;-webkit-transition:color .3s;transition:color .3s;white-space:nowrap}.el-upload-list__item-name [class^=el-icon]{height:100%;margin-right:7px;color:#909399;line-height:inherit}.el-upload-list__item-status-label{position:absolute;right:5px;top:0;line-height:inherit;display:none}.el-upload-list__item-delete{position:absolute;right:10px;top:0;font-size:12px;color:#606266;display:none}.el-upload-list__item-delete:hover{color:#409EFF}.el-upload-list--picture-card{margin:0;display:inline;vertical-align:top}.el-upload-list--picture-card .el-upload-list__item{overflow:hidden;background-color:#fff;border:1px solid #c0ccda;border-radius:6px;-webkit-box-sizing:border-box;box-sizing:border-box;width:148px;height:148px;margin:0 8px 8px 0;display:inline-block}.el-upload-list--picture-card .el-upload-list__item .el-icon-check,.el-upload-list--picture-card .el-upload-list__item .el-icon-circle-check{color:#FFF}.el-upload-list--picture-card .el-upload-list__item .el-icon-close,.el-upload-list--picture-card .el-upload-list__item:hover .el-upload-list__item-status-label{display:none}.el-upload-list--picture-card .el-upload-list__item:hover .el-progress__text{display:block}.el-upload-list--picture-card .el-upload-list__item-name{display:none}.el-upload-list--picture-card .el-upload-list__item-thumbnail{width:100%;height:100%}.el-upload-list--picture-card .el-upload-list__item-status-label{position:absolute;right:-15px;top:-6px;width:40px;height:24px;background:#13ce66;text-align:center;-webkit-transform:rotate(45deg);transform:rotate(45deg);-webkit-box-shadow:0 0 1pc 1px rgba(0,0,0,.2);box-shadow:0 0 1pc 1px rgba(0,0,0,.2)}.el-upload-list--picture-card .el-upload-list__item-status-label i{font-size:12px;margin-top:11px;-webkit-transform:rotate(-45deg);transform:rotate(-45deg)}.el-upload-list--picture-card .el-upload-list__item-actions{position:absolute;width:100%;height:100%;left:0;top:0;cursor:default;text-align:center;color:#fff;opacity:0;font-size:20px;background-color:rgba(0,0,0,.5);-webkit-transition:opacity .3s;transition:opacity .3s}.el-upload-list--picture-card .el-upload-list__item-actions::after{display:inline-block;height:100%;vertical-align:middle}.el-upload-list--picture-card .el-upload-list__item-actions span{display:none;cursor:pointer}.el-upload-list--picture-card .el-upload-list__item-actions span+span{margin-left:15px}.el-upload-list--picture-card .el-upload-list__item-actions .el-upload-list__item-delete{position:static;font-size:inherit;color:inherit}.el-upload-list--picture-card .el-upload-list__item-actions:hover{opacity:1}.el-upload-list--picture-card .el-upload-list__item-actions:hover span{display:inline-block}.el-upload-list--picture-card .el-progress{top:50%;left:50%;-webkit-transform:translate(-50%,-50%);transform:translate(-50%,-50%);bottom:auto;width:126px}.el-upload-list--picture-card .el-progress .el-progress__text{top:50%}.el-upload-list--picture .el-upload-list__item{overflow:hidden;z-index:0;background-color:#fff;border:1px solid #c0ccda;border-radius:6px;-webkit-box-sizing:border-box;box-sizing:border-box;margin-top:10px;padding:10px 10px 10px 90px;height:92px}.el-upload-list--picture .el-upload-list__item .el-icon-check,.el-upload-list--picture .el-upload-list__item .el-icon-circle-check{color:#FFF}.el-upload-list--picture .el-upload-list__item:hover .el-upload-list__item-status-label{background:0 0;-webkit-box-shadow:none;box-shadow:none;top:-2px;right:-12px}.el-upload-list--picture .el-upload-list__item:hover .el-progress__text{display:block}.el-upload-list--picture .el-upload-list__item.is-success .el-upload-list__item-name{line-height:70px;margin-top:0}.el-upload-list--picture .el-upload-list__item.is-success .el-upload-list__item-name i{display:none}.el-upload-list--picture .el-upload-list__item-thumbnail{vertical-align:middle;display:inline-block;width:70px;height:70px;float:left;position:relative;z-index:1;margin-left:-80px;background-color:#FFF}.el-upload-list--picture .el-upload-list__item-name{display:block;margin-top:20px}.el-upload-list--picture .el-upload-list__item-name i{font-size:70px;line-height:1;position:absolute;left:9px;top:10px}.el-upload-list--picture .el-upload-list__item-status-label{position:absolute;right:-17px;top:-7px;width:46px;height:26px;background:#13ce66;text-align:center;-webkit-transform:rotate(45deg);transform:rotate(45deg);-webkit-box-shadow:0 1px 1px #ccc;box-shadow:0 1px 1px #ccc}.el-upload-list--picture .el-upload-list__item-status-label i{font-size:12px;margin-top:12px;-webkit-transform:rotate(-45deg);transform:rotate(-45deg)}.el-upload-list--picture .el-progress{position:relative;top:-7px}.el-upload-cover{position:absolute;left:0;top:0;width:100%;height:100%;overflow:hidden;z-index:10;cursor:default}.el-upload-cover::after{display:inline-block;height:100%;vertical-align:middle}.el-upload-cover img{display:block;width:100%;height:100%}.el-upload-cover__label{position:absolute;right:-15px;top:-6px;width:40px;height:24px;background:#13ce66;text-align:center;-webkit-transform:rotate(45deg);transform:rotate(45deg);-webkit-box-shadow:0 0 1pc 1px rgba(0,0,0,.2);box-shadow:0 0 1pc 1px rgba(0,0,0,.2)}.el-upload-cover__label i{font-size:12px;margin-top:11px;-webkit-transform:rotate(-45deg);transform:rotate(-45deg);color:#fff}.el-upload-cover__progress{display:inline-block;vertical-align:middle;position:static;width:243px}.el-upload-cover__progress+.el-upload__inner{opacity:0}.el-upload-cover__content{position:absolute;top:0;left:0;width:100%;height:100%}.el-upload-cover__interact{position:absolute;bottom:0;left:0;width:100%;height:100%;background-color:rgba(0,0,0,.72);text-align:center}.el-upload-cover__interact .btn{display:inline-block;color:#FFF;font-size:14px;cursor:pointer;vertical-align:middle;-webkit-transition:opacity .3s cubic-bezier(.23,1,.32,1),-webkit-transform .3s cubic-bezier(.23,1,.32,1);transition:opacity .3s cubic-bezier(.23,1,.32,1),-webkit-transform .3s cubic-bezier(.23,1,.32,1);transition:transform .3s cubic-bezier(.23,1,.32,1),opacity .3s cubic-bezier(.23,1,.32,1);transition:transform .3s cubic-bezier(.23,1,.32,1),opacity .3s cubic-bezier(.23,1,.32,1),-webkit-transform .3s cubic-bezier(.23,1,.32,1);margin-top:60px}.el-upload-cover__interact .btn span{opacity:0;-webkit-transition:opacity .15s linear;transition:opacity .15s linear}.el-upload-cover__interact .btn:not(:first-child){margin-left:35px}.el-upload-cover__interact .btn:hover{-webkit-transform:translateY(-13px);transform:translateY(-13px)}.el-upload-cover__interact .btn:hover span{opacity:1}.el-upload-cover__interact .btn i{color:#FFF;display:block;font-size:24px;line-height:inherit;margin:0 auto 5px}.el-upload-cover__title{position:absolute;bottom:0;left:0;background-color:#FFF;height:36px;width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-weight:400;text-align:left;padding:0 10px;margin:0;line-height:36px;font-size:14px;color:#303133}.el-upload-cover+.el-upload__inner{opacity:0;position:relative;z-index:1}.el-progress{position:relative;line-height:1}.el-progress__text{font-size:14px;color:#606266;display:inline-block;vertical-align:middle;margin-left:10px;line-height:1}.el-progress__text i{vertical-align:middle;display:block}.el-progress--circle,.el-progress--dashboard{display:inline-block}.el-progress--circle .el-progress__text,.el-progress--dashboard .el-progress__text{position:absolute;top:50%;left:0;width:100%;text-align:center;margin:0;-webkit-transform:translate(0,-50%);transform:translate(0,-50%)}.el-progress--circle .el-progress__text i,.el-progress--dashboard .el-progress__text i{vertical-align:middle;display:inline-block}.el-progress--without-text .el-progress__text{display:none}.el-progress--without-text .el-progress-bar{padding-right:0;margin-right:0;display:block}.el-progress--text-inside .el-progress-bar{padding-right:0;margin-right:0}.el-progress.is-success .el-progress-bar__inner{background-color:#67C23A}.el-progress.is-success .el-progress__text{color:#67C23A}.el-progress.is-warning .el-progress-bar__inner{background-color:#E6A23C}.el-badge__content,.el-progress.is-exception .el-progress-bar__inner{background-color:#F56C6C}.el-progress.is-warning .el-progress__text{color:#E6A23C}.el-progress.is-exception .el-progress__text{color:#F56C6C}.el-progress-bar{padding-right:50px;display:inline-block;vertical-align:middle;width:100%;margin-right:-55px;-webkit-box-sizing:border-box;box-sizing:border-box}.el-card__header,.el-message,.el-step__icon{-webkit-box-sizing:border-box}.el-progress-bar__outer{height:6px;border-radius:100px;background-color:#EBEEF5;overflow:hidden;position:relative;vertical-align:middle}.el-progress-bar__inner{position:absolute;left:0;top:0;height:100%;background-color:#409EFF;text-align:right;border-radius:100px;line-height:1;white-space:nowrap;-webkit-transition:width .6s ease;transition:width .6s ease}.el-progress-bar__inner::after{display:inline-block;height:100%;vertical-align:middle}.el-progress-bar__innerText{display:inline-block;vertical-align:middle;color:#FFF;font-size:12px;margin:0 5px}@keyframes progress{0%{background-position:0 0}100%{background-position:32px 0}}.el-time-spinner{width:100%;white-space:nowrap}.el-spinner{display:inline-block;vertical-align:middle}.el-spinner-inner{-webkit-animation:rotate 2s linear infinite;animation:rotate 2s linear infinite;width:50px;height:50px}.el-spinner-inner .path{stroke:#ececec;stroke-linecap:round;-webkit-animation:dash 1.5s ease-in-out infinite;animation:dash 1.5s ease-in-out infinite}@-webkit-keyframes rotate{100%{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}@keyframes rotate{100%{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}@-webkit-keyframes dash{0%{stroke-dasharray:1,150;stroke-dashoffset:0}50%{stroke-dasharray:90,150;stroke-dashoffset:-35}100%{stroke-dasharray:90,150;stroke-dashoffset:-124}}@keyframes dash{0%{stroke-dasharray:1,150;stroke-dashoffset:0}50%{stroke-dasharray:90,150;stroke-dashoffset:-35}100%{stroke-dasharray:90,150;stroke-dashoffset:-124}}.el-message{min-width:380px;box-sizing:border-box;border-radius:4px;border-width:1px;border-style:solid;border-color:#EBEEF5;position:fixed;left:50%;top:20px;-webkit-transform:translateX(-50%);transform:translateX(-50%);background-color:#edf2fc;-webkit-transition:opacity .3s,top .4s,-webkit-transform .4s;transition:opacity .3s,top .4s,-webkit-transform .4s;transition:opacity .3s,transform .4s,top .4s;transition:opacity .3s,transform .4s,top .4s,-webkit-transform .4s;overflow:hidden;padding:15px 15px 15px 20px;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.el-message.is-center{-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center}.el-message.is-closable .el-message__content{padding-right:16px}.el-message p{margin:0}.el-message--info .el-message__content{color:#909399}.el-message--success{background-color:#f0f9eb;border-color:#e1f3d8}.el-message--success .el-message__content{color:#67C23A}.el-message--warning{background-color:#fdf6ec;border-color:#faecd8}.el-message--warning .el-message__content{color:#E6A23C}.el-message--error{background-color:#fef0f0;border-color:#fde2e2}.el-message--error .el-message__content{color:#F56C6C}.el-message__icon{margin-right:10px}.el-message__content{padding:0;font-size:14px;line-height:1}.el-message__content:focus{outline-width:0}.el-message__closeBtn{position:absolute;top:50%;right:15px;-webkit-transform:translateY(-50%);transform:translateY(-50%);cursor:pointer;color:#C0C4CC;font-size:16px}.el-message__closeBtn:focus{outline-width:0}.el-message__closeBtn:hover{color:#909399}.el-message .el-icon-success{color:#67C23A}.el-message .el-icon-error{color:#F56C6C}.el-message .el-icon-info{color:#909399}.el-message .el-icon-warning{color:#E6A23C}.el-message-fade-enter,.el-message-fade-leave-active{opacity:0;-webkit-transform:translate(-50%,-100%);transform:translate(-50%,-100%)}.el-badge{position:relative;vertical-align:middle;display:inline-block}.el-badge__content{border-radius:10px;color:#FFF;display:inline-block;font-size:12px;height:18px;line-height:18px;padding:0 6px;text-align:center;white-space:nowrap;border:1px solid #FFF}.el-badge__content.is-fixed{position:absolute;top:0;right:10px;-webkit-transform:translateY(-50%) translateX(100%);transform:translateY(-50%) translateX(100%)}.el-rate__icon,.el-rate__item{position:relative;display:inline-block}.el-badge__content.is-fixed.is-dot{right:5px}.el-badge__content.is-dot{height:8px;width:8px;padding:0;right:0;border-radius:50%}.el-badge__content--primary{background-color:#409EFF}.el-badge__content--success{background-color:#67C23A}.el-badge__content--warning{background-color:#E6A23C}.el-badge__content--info{background-color:#909399}.el-badge__content--danger{background-color:#F56C6C}.el-card{border-radius:4px;border:1px solid #EBEEF5;background-color:#FFF;overflow:hidden;color:#303133;-webkit-transition:.3s;transition:.3s}.el-card.is-always-shadow,.el-card.is-hover-shadow:focus,.el-card.is-hover-shadow:hover{box-shadow:0 2px 12px 0 rgba(0,0,0,.1)}.el-card__header{padding:18px 20px;border-bottom:1px solid #EBEEF5;box-sizing:border-box}.el-card__body,.el-main{padding:20px}.el-rate{height:20px;line-height:1}.el-rate:active,.el-rate:focus{outline-width:0}.el-rate__item{font-size:0;vertical-align:middle}.el-rate__icon{font-size:18px;margin-right:6px;color:#C0C4CC;-webkit-transition:.3s;transition:.3s}.el-rate__decimal,.el-rate__icon .path2{position:absolute;top:0;left:0}.el-rate__icon.hover{-webkit-transform:scale(1.15);transform:scale(1.15)}.el-rate__decimal{display:inline-block;overflow:hidden}.el-step.is-vertical,.el-steps{display:-webkit-box;display:-ms-flexbox}.el-rate__text{font-size:14px;vertical-align:middle}.el-steps{display:flex}.el-steps--simple{padding:13px 8%;border-radius:4px;background:#F5F7FA}.el-steps--horizontal{white-space:nowrap}.el-steps--vertical{height:100%;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-flow:column;flex-flow:column}.el-step{position:relative;-ms-flex-negative:1;flex-shrink:1}.el-step:last-of-type .el-step__line{display:none}.el-step:last-of-type.is-flex{-ms-flex-preferred-size:auto!important;flex-basis:auto!important;-ms-flex-negative:0;flex-shrink:0;-webkit-box-flex:0;-ms-flex-positive:0;flex-grow:0}.el-step:last-of-type .el-step__description,.el-step:last-of-type .el-step__main{padding-right:0}.el-step__head{position:relative;width:100%}.el-step__head.is-process{color:#303133;border-color:#303133}.el-step__head.is-wait{color:#C0C4CC;border-color:#C0C4CC}.el-step__head.is-success{color:#67C23A;border-color:#67C23A}.el-step__head.is-error{color:#F56C6C;border-color:#F56C6C}.el-step__head.is-finish{color:#409EFF;border-color:#409EFF}.el-step__icon{position:relative;z-index:1;display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;width:24px;height:24px;font-size:14px;box-sizing:border-box;background:#FFF;-webkit-transition:.15s ease-out;transition:.15s ease-out}.el-step.is-horizontal,.el-step__icon-inner{display:inline-block}.el-step__icon.is-text{border-radius:50%;border:2px solid;border-color:inherit}.el-step__icon.is-icon{width:40px}.el-step__icon-inner{-webkit-user-select:none;user-select:none;text-align:center;font-weight:700;line-height:1;color:inherit}.el-step__icon-inner[class*=el-icon]:not(.is-status){font-size:25px;font-weight:400}.el-step__icon-inner.is-status{-webkit-transform:translateY(1px);transform:translateY(1px)}.el-step__line{position:absolute;border-color:inherit;background-color:#C0C4CC}.el-step__line-inner{display:block;border-width:1px;border-style:solid;border-color:inherit;-webkit-transition:.15s ease-out;transition:.15s ease-out;-webkit-box-sizing:border-box;box-sizing:border-box;width:0;height:0}.el-step__main{white-space:normal;text-align:left}.el-step__title{font-size:16px;line-height:38px}.el-step__title.is-process{font-weight:700;color:#303133}.el-step__title.is-wait{color:#C0C4CC}.el-step__title.is-success{color:#67C23A}.el-step__title.is-error{color:#F56C6C}.el-step__title.is-finish{color:#409EFF}.el-step__description{padding-right:10%;margin-top:-5px;font-size:12px;line-height:20px;font-weight:400}.el-step__description.is-process{color:#303133}.el-step__description.is-wait{color:#C0C4CC}.el-step__description.is-success{color:#67C23A}.el-step__description.is-error{color:#F56C6C}.el-step__description.is-finish{color:#409EFF}.el-step.is-horizontal .el-step__line{height:2px;top:11px;left:0;right:0}.el-step.is-vertical{display:flex}.el-step.is-vertical .el-step__head{-webkit-box-flex:0;-ms-flex-positive:0;flex-grow:0;width:24px}.el-step.is-vertical .el-step__main{padding-left:10px;-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1}.el-step.is-vertical .el-step__title{line-height:24px;padding-bottom:8px}.el-step.is-vertical .el-step__line{width:2px;top:0;bottom:0;left:11px}.el-step.is-vertical .el-step__icon.is-icon{width:24px}.el-step.is-center .el-step__head,.el-step.is-center .el-step__main{text-align:center}.el-step.is-center .el-step__description{padding-left:20%;padding-right:20%}.el-step.is-center .el-step__line{left:50%;right:-50%}.el-step.is-simple{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.el-step.is-simple .el-step__head{width:auto;font-size:0;padding-right:10px}.el-step.is-simple .el-step__icon{background:0 0;width:16px;height:16px;font-size:12px}.el-step.is-simple .el-step__icon-inner[class*=el-icon]:not(.is-status){font-size:18px}.el-step.is-simple .el-step__icon-inner.is-status{-webkit-transform:scale(.8) translateY(1px);transform:scale(.8) translateY(1px)}.el-step.is-simple .el-step__main{position:relative;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:stretch;-ms-flex-align:stretch;align-items:stretch;-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1}.el-step.is-simple .el-step__title{font-size:16px;line-height:20px}.el-step.is-simple:not(:last-of-type) .el-step__title{max-width:50%;word-break:break-all}.el-step.is-simple .el-step__arrow{-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center}.el-step.is-simple .el-step__arrow::after,.el-step.is-simple .el-step__arrow::before{content:'';display:inline-block;position:absolute;height:15px;width:1px;background:#C0C4CC}.el-step.is-simple .el-step__arrow::before{-webkit-transform:rotate(-45deg) translateY(-4px);transform:rotate(-45deg) translateY(-4px);-webkit-transform-origin:0 0;transform-origin:0 0}.el-step.is-simple .el-step__arrow::after{-webkit-transform:rotate(45deg) translateY(4px);transform:rotate(45deg) translateY(4px);-webkit-transform-origin:100% 100%;transform-origin:100% 100%}.el-step.is-simple:last-of-type .el-step__arrow{display:none}.el-carousel{position:relative}.el-carousel--horizontal{overflow-x:hidden}.el-carousel--vertical{overflow-y:hidden}.el-carousel__container{position:relative;height:300px}.el-carousel__arrow{border:none;outline:0;padding:0;margin:0;height:36px;width:36px;cursor:pointer;-webkit-transition:.3s;transition:.3s;border-radius:50%;background-color:rgba(31,45,61,.11);color:#FFF;position:absolute;top:50%;z-index:10;-webkit-transform:translateY(-50%);transform:translateY(-50%);text-align:center;font-size:12px}.el-carousel__arrow--left{left:16px}.el-carousel__arrow:hover{background-color:rgba(31,45,61,.23)}.el-carousel__arrow i{cursor:pointer}.el-carousel__indicators{position:absolute;list-style:none;margin:0;padding:0;z-index:2}.el-carousel__indicators--horizontal{bottom:0;left:50%;-webkit-transform:translateX(-50%);transform:translateX(-50%)}.el-carousel__indicators--vertical{right:0;top:50%;-webkit-transform:translateY(-50%);transform:translateY(-50%)}.el-carousel__indicators--outside{bottom:26px;text-align:center;position:static;-webkit-transform:none;transform:none}.el-carousel__indicators--outside .el-carousel__indicator:hover button{opacity:.64}.el-carousel__indicators--outside button{background-color:#C0C4CC;opacity:.24}.el-carousel__indicators--labels{left:0;right:0;-webkit-transform:none;transform:none;text-align:center}.el-carousel__indicators--labels .el-carousel__button{height:auto;width:auto;padding:2px 18px;font-size:12px}.el-carousel__indicators--labels .el-carousel__indicator{padding:6px 4px}.el-carousel__indicator{background-color:transparent;cursor:pointer}.el-carousel__indicator:hover button{opacity:.72}.el-carousel__indicator--horizontal{display:inline-block;padding:12px 4px}.el-carousel__indicator--vertical{padding:4px 12px}.el-carousel__indicator--vertical .el-carousel__button{width:2px;height:15px}.el-carousel__indicator.is-active button{opacity:1}.el-carousel__button{display:block;opacity:.48;width:30px;height:2px;background-color:#FFF;border:none;outline:0;padding:0;margin:0;cursor:pointer;-webkit-transition:.3s;transition:.3s}.el-carousel__item,.el-carousel__mask{height:100%;position:absolute;top:0;left:0}.carousel-arrow-left-enter,.carousel-arrow-left-leave-active{-webkit-transform:translateY(-50%) translateX(-10px);transform:translateY(-50%) translateX(-10px);opacity:0}.carousel-arrow-right-enter,.carousel-arrow-right-leave-active{-webkit-transform:translateY(-50%) translateX(10px);transform:translateY(-50%) translateX(10px);opacity:0}.el-carousel__item{width:100%;display:inline-block;overflow:hidden;z-index:0}.el-carousel__item.is-active{z-index:2}.el-carousel__item.is-animating{-webkit-transition:-webkit-transform .4s ease-in-out;transition:-webkit-transform .4s ease-in-out;transition:transform .4s ease-in-out;transition:transform .4s ease-in-out,-webkit-transform .4s ease-in-out}.el-carousel__item--card{width:50%;-webkit-transition:-webkit-transform .4s ease-in-out;transition:-webkit-transform .4s ease-in-out;transition:transform .4s ease-in-out;transition:transform .4s ease-in-out,-webkit-transform .4s ease-in-out}.el-carousel__item--card.is-in-stage{cursor:pointer;z-index:1}.el-carousel__item--card.is-in-stage.is-hover .el-carousel__mask,.el-carousel__item--card.is-in-stage:hover .el-carousel__mask{opacity:.12}.el-carousel__item--card.is-active{z-index:2}.el-carousel__mask{width:100%;background-color:#FFF;opacity:.24;-webkit-transition:.2s;transition:.2s}.fade-in-linear-enter-active,.fade-in-linear-leave-active{-webkit-transition:opacity .2s linear;transition:opacity .2s linear}.fade-in-linear-enter,.fade-in-linear-leave,.fade-in-linear-leave-active{opacity:0}.el-fade-in-linear-enter-active,.el-fade-in-linear-leave-active{-webkit-transition:opacity .2s linear;transition:opacity .2s linear}.el-fade-in-linear-enter,.el-fade-in-linear-leave,.el-fade-in-linear-leave-active{opacity:0}.el-fade-in-enter-active,.el-fade-in-leave-active{-webkit-transition:all .3s cubic-bezier(.55,0,.1,1);transition:all .3s cubic-bezier(.55,0,.1,1)}.el-fade-in-enter,.el-fade-in-leave-active{opacity:0}.el-zoom-in-center-enter-active,.el-zoom-in-center-leave-active{-webkit-transition:all .3s cubic-bezier(.55,0,.1,1);transition:all .3s cubic-bezier(.55,0,.1,1)}.el-zoom-in-center-enter,.el-zoom-in-center-leave-active{opacity:0;-webkit-transform:scaleX(0);transform:scaleX(0)}.el-zoom-in-top-enter-active,.el-zoom-in-top-leave-active{opacity:1;-webkit-transform:scaleY(1);transform:scaleY(1);-webkit-transition:opacity .3s cubic-bezier(.23,1,.32,1),-webkit-transform .3s cubic-bezier(.23,1,.32,1);transition:opacity .3s cubic-bezier(.23,1,.32,1),-webkit-transform .3s cubic-bezier(.23,1,.32,1);transition:transform .3s cubic-bezier(.23,1,.32,1),opacity .3s cubic-bezier(.23,1,.32,1);transition:transform .3s cubic-bezier(.23,1,.32,1),opacity .3s cubic-bezier(.23,1,.32,1),-webkit-transform .3s cubic-bezier(.23,1,.32,1);-webkit-transform-origin:center top;transform-origin:center top}.el-zoom-in-top-enter,.el-zoom-in-top-leave-active{opacity:0;-webkit-transform:scaleY(0);transform:scaleY(0)}.el-zoom-in-bottom-enter-active,.el-zoom-in-bottom-leave-active{opacity:1;-webkit-transform:scaleY(1);transform:scaleY(1);-webkit-transition:opacity .3s cubic-bezier(.23,1,.32,1),-webkit-transform .3s cubic-bezier(.23,1,.32,1);transition:opacity .3s cubic-bezier(.23,1,.32,1),-webkit-transform .3s cubic-bezier(.23,1,.32,1);transition:transform .3s cubic-bezier(.23,1,.32,1),opacity .3s cubic-bezier(.23,1,.32,1);transition:transform .3s cubic-bezier(.23,1,.32,1),opacity .3s cubic-bezier(.23,1,.32,1),-webkit-transform .3s cubic-bezier(.23,1,.32,1);-webkit-transform-origin:center bottom;transform-origin:center bottom}.el-zoom-in-bottom-enter,.el-zoom-in-bottom-leave-active{opacity:0;-webkit-transform:scaleY(0);transform:scaleY(0)}.el-zoom-in-left-enter-active,.el-zoom-in-left-leave-active{opacity:1;-webkit-transform:scale(1,1);transform:scale(1,1);-webkit-transition:opacity .3s cubic-bezier(.23,1,.32,1),-webkit-transform .3s cubic-bezier(.23,1,.32,1);transition:opacity .3s cubic-bezier(.23,1,.32,1),-webkit-transform .3s cubic-bezier(.23,1,.32,1);transition:transform .3s cubic-bezier(.23,1,.32,1),opacity .3s cubic-bezier(.23,1,.32,1);transition:transform .3s cubic-bezier(.23,1,.32,1),opacity .3s cubic-bezier(.23,1,.32,1),-webkit-transform .3s cubic-bezier(.23,1,.32,1);-webkit-transform-origin:top left;transform-origin:top left}.el-zoom-in-left-enter,.el-zoom-in-left-leave-active{opacity:0;-webkit-transform:scale(.45,.45);transform:scale(.45,.45)}.collapse-transition{-webkit-transition:.3s height ease-in-out,.3s padding-top ease-in-out,.3s padding-bottom ease-in-out;transition:.3s height ease-in-out,.3s padding-top ease-in-out,.3s padding-bottom ease-in-out}.horizontal-collapse-transition{-webkit-transition:.3s width ease-in-out,.3s padding-left ease-in-out,.3s padding-right ease-in-out;transition:.3s width ease-in-out,.3s padding-left ease-in-out,.3s padding-right ease-in-out}.el-list-enter-active,.el-list-leave-active{-webkit-transition:all 1s;transition:all 1s}.el-list-enter,.el-list-leave-active{opacity:0;-webkit-transform:translateY(-30px);transform:translateY(-30px)}.el-opacity-transition{-webkit-transition:opacity .3s cubic-bezier(.55,0,.1,1);transition:opacity .3s cubic-bezier(.55,0,.1,1)}.el-collapse{border-top:1px solid #EBEEF5;border-bottom:1px solid #EBEEF5}.el-collapse-item.is-disabled .el-collapse-item__header{color:#bbb;cursor:not-allowed}.el-collapse-item__header{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;height:48px;line-height:48px;background-color:#FFF;color:#303133;cursor:pointer;border-bottom:1px solid #EBEEF5;font-size:13px;font-weight:500;-webkit-transition:border-bottom-color .3s;transition:border-bottom-color .3s;outline:0}.el-collapse-item__arrow{margin:0 8px 0 auto;-webkit-transition:-webkit-transform .3s;transition:-webkit-transform .3s;transition:transform .3s;transition:transform .3s,-webkit-transform .3s;font-weight:300}.el-collapse-item__arrow.is-active{-webkit-transform:rotate(90deg);transform:rotate(90deg)}.el-collapse-item__header.focusing:focus:not(:hover){color:#409EFF}.el-collapse-item__header.is-active{border-bottom-color:transparent}.el-collapse-item__wrap{will-change:height;background-color:#FFF;overflow:hidden;-webkit-box-sizing:border-box;box-sizing:border-box;border-bottom:1px solid #EBEEF5}.el-cascader__search-input,.el-cascader__tags,.el-tag{-webkit-box-sizing:border-box}.el-collapse-item__content{padding-bottom:25px;font-size:13px;color:#303133;line-height:1.769230769230769}.el-collapse-item:last-child{margin-bottom:-1px}.el-popper .popper__arrow,.el-popper .popper__arrow::after{position:absolute;display:block;width:0;height:0;border-color:transparent;border-style:solid}.el-cascader,.el-tag{display:inline-block}.el-popper .popper__arrow{border-width:6px;-webkit-filter:drop-shadow(0 2px 12px rgba(0, 0, 0, .03));filter:drop-shadow(0 2px 12px rgba(0, 0, 0, .03))}.el-popper .popper__arrow::after{content:" ";border-width:6px}.el-popper[x-placement^=top]{margin-bottom:12px}.el-popper[x-placement^=top] .popper__arrow{bottom:-6px;left:50%;margin-right:3px;border-top-color:#EBEEF5;border-bottom-width:0}.el-popper[x-placement^=top] .popper__arrow::after{bottom:1px;margin-left:-6px;border-top-color:#FFF;border-bottom-width:0}.el-popper[x-placement^=bottom]{margin-top:12px}.el-popper[x-placement^=bottom] .popper__arrow{top:-6px;left:50%;margin-right:3px;border-top-width:0;border-bottom-color:#EBEEF5}.el-popper[x-placement^=bottom] .popper__arrow::after{top:1px;margin-left:-6px;border-top-width:0;border-bottom-color:#FFF}.el-popper[x-placement^=right]{margin-left:12px}.el-popper[x-placement^=right] .popper__arrow{top:50%;left:-6px;margin-bottom:3px;border-right-color:#EBEEF5;border-left-width:0}.el-popper[x-placement^=right] .popper__arrow::after{bottom:-6px;left:1px;border-right-color:#FFF;border-left-width:0}.el-popper[x-placement^=left]{margin-right:12px}.el-popper[x-placement^=left] .popper__arrow{top:50%;right:-6px;margin-bottom:3px;border-right-width:0;border-left-color:#EBEEF5}.el-popper[x-placement^=left] .popper__arrow::after{right:1px;bottom:-6px;margin-left:-6px;border-right-width:0;border-left-color:#FFF}.el-tag{background-color:#ecf5ff;border-color:#d9ecff;height:32px;padding:0 10px;line-height:30px;font-size:12px;color:#409EFF;border-width:1px;border-style:solid;border-radius:4px;box-sizing:border-box;white-space:nowrap}.el-tag.is-hit{border-color:#409EFF}.el-tag .el-tag__close{color:#409eff}.el-tag .el-tag__close:hover{color:#FFF;background-color:#409eff}.el-tag.el-tag--info{background-color:#f4f4f5;border-color:#e9e9eb;color:#909399}.el-tag.el-tag--info.is-hit{border-color:#909399}.el-tag.el-tag--info .el-tag__close{color:#909399}.el-tag.el-tag--info .el-tag__close:hover{color:#FFF;background-color:#909399}.el-tag.el-tag--success{background-color:#f0f9eb;border-color:#e1f3d8;color:#67c23a}.el-tag.el-tag--success.is-hit{border-color:#67C23A}.el-tag.el-tag--success .el-tag__close{color:#67c23a}.el-tag.el-tag--success .el-tag__close:hover{color:#FFF;background-color:#67c23a}.el-tag.el-tag--warning{background-color:#fdf6ec;border-color:#faecd8;color:#e6a23c}.el-tag.el-tag--warning.is-hit{border-color:#E6A23C}.el-tag.el-tag--warning .el-tag__close{color:#e6a23c}.el-tag.el-tag--warning .el-tag__close:hover{color:#FFF;background-color:#e6a23c}.el-tag.el-tag--danger{background-color:#fef0f0;border-color:#fde2e2;color:#f56c6c}.el-tag.el-tag--danger.is-hit{border-color:#F56C6C}.el-tag.el-tag--danger .el-tag__close{color:#f56c6c}.el-tag.el-tag--danger .el-tag__close:hover{color:#FFF;background-color:#f56c6c}.el-tag .el-icon-close{border-radius:50%;text-align:center;position:relative;cursor:pointer;font-size:12px;height:16px;width:16px;line-height:16px;vertical-align:middle;top:-1px;right:-5px}.el-tag .el-icon-close::before{display:block}.el-tag--dark{background-color:#409eff;border-color:#409eff;color:#fff}.el-tag--dark.is-hit{border-color:#409EFF}.el-tag--dark .el-tag__close{color:#fff}.el-tag--dark .el-tag__close:hover{color:#FFF;background-color:#66b1ff}.el-tag--dark.el-tag--info{background-color:#909399;border-color:#909399;color:#fff}.el-tag--dark.el-tag--info.is-hit{border-color:#909399}.el-tag--dark.el-tag--info .el-tag__close{color:#fff}.el-tag--dark.el-tag--info .el-tag__close:hover{color:#FFF;background-color:#a6a9ad}.el-tag--dark.el-tag--success{background-color:#67c23a;border-color:#67c23a;color:#fff}.el-tag--dark.el-tag--success.is-hit{border-color:#67C23A}.el-tag--dark.el-tag--success .el-tag__close{color:#fff}.el-tag--dark.el-tag--success .el-tag__close:hover{color:#FFF;background-color:#85ce61}.el-tag--dark.el-tag--warning{background-color:#e6a23c;border-color:#e6a23c;color:#fff}.el-tag--dark.el-tag--warning.is-hit{border-color:#E6A23C}.el-tag--dark.el-tag--warning .el-tag__close{color:#fff}.el-tag--dark.el-tag--warning .el-tag__close:hover{color:#FFF;background-color:#ebb563}.el-tag--dark.el-tag--danger{background-color:#f56c6c;border-color:#f56c6c;color:#fff}.el-tag--dark.el-tag--danger.is-hit{border-color:#F56C6C}.el-tag--dark.el-tag--danger .el-tag__close{color:#fff}.el-tag--dark.el-tag--danger .el-tag__close:hover{color:#FFF;background-color:#f78989}.el-tag--plain{background-color:#fff;border-color:#b3d8ff;color:#409eff}.el-tag--plain.is-hit{border-color:#409EFF}.el-tag--plain .el-tag__close{color:#409eff}.el-tag--plain .el-tag__close:hover{color:#FFF;background-color:#409eff}.el-tag--plain.el-tag--info{background-color:#fff;border-color:#d3d4d6;color:#909399}.el-tag--plain.el-tag--info.is-hit{border-color:#909399}.el-tag--plain.el-tag--info .el-tag__close{color:#909399}.el-tag--plain.el-tag--info .el-tag__close:hover{color:#FFF;background-color:#909399}.el-tag--plain.el-tag--success{background-color:#fff;border-color:#c2e7b0;color:#67c23a}.el-tag--plain.el-tag--success.is-hit{border-color:#67C23A}.el-tag--plain.el-tag--success .el-tag__close{color:#67c23a}.el-tag--plain.el-tag--success .el-tag__close:hover{color:#FFF;background-color:#67c23a}.el-tag--plain.el-tag--warning{background-color:#fff;border-color:#f5dab1;color:#e6a23c}.el-tag--plain.el-tag--warning.is-hit{border-color:#E6A23C}.el-tag--plain.el-tag--warning .el-tag__close{color:#e6a23c}.el-tag--plain.el-tag--warning .el-tag__close:hover{color:#FFF;background-color:#e6a23c}.el-tag--plain.el-tag--danger{background-color:#fff;border-color:#fbc4c4;color:#f56c6c}.el-tag--plain.el-tag--danger.is-hit{border-color:#F56C6C}.el-tag--plain.el-tag--danger .el-tag__close{color:#f56c6c}.el-tag--plain.el-tag--danger .el-tag__close:hover{color:#FFF;background-color:#f56c6c}.el-tag--medium{height:28px;line-height:26px}.el-tag--medium .el-icon-close{-webkit-transform:scale(.8);transform:scale(.8)}.el-tag--small{height:24px;padding:0 8px;line-height:22px}.el-tag--small .el-icon-close{-webkit-transform:scale(.8);transform:scale(.8)}.el-tag--mini{height:20px;padding:0 5px;line-height:19px}.el-tag--mini .el-icon-close{margin-left:-3px;-webkit-transform:scale(.7);transform:scale(.7)}.el-cascader{position:relative;font-size:14px;line-height:40px}.el-cascader:not(.is-disabled):hover .el-input__inner{cursor:pointer;border-color:#C0C4CC}.el-cascader .el-input .el-input__inner:focus,.el-cascader .el-input.is-focus .el-input__inner{border-color:#409EFF}.el-cascader .el-input{cursor:pointer}.el-cascader .el-input .el-input__inner{text-overflow:ellipsis}.el-cascader .el-input .el-icon-arrow-down{-webkit-transition:-webkit-transform .3s;transition:-webkit-transform .3s;transition:transform .3s;transition:transform .3s,-webkit-transform .3s;font-size:14px}.el-cascader .el-input .el-icon-arrow-down.is-reverse{-webkit-transform:rotateZ(180deg);transform:rotateZ(180deg)}.el-cascader .el-input .el-icon-circle-close:hover{color:#909399}.el-cascader--medium{font-size:14px;line-height:36px}.el-cascader--small{font-size:13px;line-height:32px}.el-cascader--mini{font-size:12px;line-height:28px}.el-cascader.is-disabled .el-cascader__label{z-index:2;color:#C0C4CC}.el-cascader__dropdown{margin:5px 0;font-size:14px;background:#FFF;border:1px solid #E4E7ED;border-radius:4px;box-shadow:0 2px 12px 0 rgba(0,0,0,.1)}.el-cascader__tags{position:absolute;left:0;right:30px;top:50%;-webkit-transform:translateY(-50%);transform:translateY(-50%);display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;line-height:normal;text-align:left;box-sizing:border-box}.el-cascader__tags .el-tag{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;max-width:100%;margin:2px 0 2px 6px;text-overflow:ellipsis;background:#f0f2f5}.el-cascader__tags .el-tag:not(.is-hit){border-color:transparent}.el-cascader__tags .el-tag>span{-webkit-box-flex:1;-ms-flex:1;flex:1;overflow:hidden;text-overflow:ellipsis}.el-cascader__tags .el-tag .el-icon-close{-webkit-box-flex:0;-ms-flex:none;flex:none;background-color:#C0C4CC;color:#FFF}.el-cascader__tags .el-tag .el-icon-close:hover{background-color:#909399}.el-cascader__suggestion-panel{border-radius:4px}.el-cascader__suggestion-list{max-height:204px;margin:0;padding:6px 0;font-size:14px;color:#606266;text-align:center}.el-cascader__suggestion-item{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;-webkit-box-align:center;-ms-flex-align:center;align-items:center;height:34px;padding:0 15px;text-align:left;outline:0;cursor:pointer}.el-cascader__suggestion-item:focus,.el-cascader__suggestion-item:hover{background:#F5F7FA}.el-cascader__suggestion-item.is-checked{color:#409EFF;font-weight:700}.el-cascader__suggestion-item>span{margin-right:10px}.el-cascader__empty-text{margin:10px 0;color:#C0C4CC}.el-cascader__search-input{-webkit-box-flex:1;-ms-flex:1;flex:1;height:24px;min-width:60px;margin:2px 0 2px 15px;padding:0;color:#606266;border:none;outline:0;box-sizing:border-box}.el-cascader__search-input::-webkit-input-placeholder{color:#C0C4CC}.el-cascader__search-input:-ms-input-placeholder{color:#C0C4CC}.el-cascader__search-input::-ms-input-placeholder{color:#C0C4CC}.el-cascader__search-input::placeholder{color:#C0C4CC}.el-color-predefine{display:-webkit-box;display:-ms-flexbox;display:flex;font-size:12px;margin-top:8px;width:280px}.el-color-predefine__colors{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-flex:1;-ms-flex:1;flex:1;-ms-flex-wrap:wrap;flex-wrap:wrap}.el-color-predefine__color-selector{margin:0 0 8px 8px;width:20px;height:20px;border-radius:4px;cursor:pointer}.el-color-predefine__color-selector:nth-child(10n+1){margin-left:0}.el-color-predefine__color-selector.selected{-webkit-box-shadow:0 0 3px 2px #409EFF;box-shadow:0 0 3px 2px #409EFF}.el-color-predefine__color-selector>div{display:-webkit-box;display:-ms-flexbox;display:flex;height:100%;border-radius:3px}.el-color-predefine__color-selector.is-alpha{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAwAAAAMCAIAAADZF8uwAAAAGUlEQVQYV2M4gwH+YwCGIasIUwhT25BVBADtzYNYrHvv4gAAAABJRU5ErkJggg==)}.el-color-hue-slider{position:relative;-webkit-box-sizing:border-box;box-sizing:border-box;width:280px;height:12px;background-color:red;padding:0 2px}.el-color-hue-slider__bar{position:relative;background:-webkit-gradient(linear,left top,right top,from(red),color-stop(17%,#ff0),color-stop(33%,#0f0),color-stop(50%,#0ff),color-stop(67%,#00f),color-stop(83%,#f0f),to(red));background:linear-gradient(to right,red 0,#ff0 17%,#0f0 33%,#0ff 50%,#00f 67%,#f0f 83%,red 100%);height:100%}.el-color-hue-slider__thumb{position:absolute;cursor:pointer;-webkit-box-sizing:border-box;box-sizing:border-box;left:0;top:0;width:4px;height:100%;border-radius:1px;background:#fff;border:1px solid #f0f0f0;-webkit-box-shadow:0 0 2px rgba(0,0,0,.6);box-shadow:0 0 2px rgba(0,0,0,.6);z-index:1}.el-color-hue-slider.is-vertical{width:12px;height:180px;padding:2px 0}.el-color-hue-slider.is-vertical .el-color-hue-slider__bar{background:-webkit-gradient(linear,left top,left bottom,from(red),color-stop(17%,#ff0),color-stop(33%,#0f0),color-stop(50%,#0ff),color-stop(67%,#00f),color-stop(83%,#f0f),to(red));background:linear-gradient(to bottom,red 0,#ff0 17%,#0f0 33%,#0ff 50%,#00f 67%,#f0f 83%,red 100%)}.el-color-hue-slider.is-vertical .el-color-hue-slider__thumb{left:0;top:0;width:100%;height:4px}.el-color-svpanel{position:relative;width:280px;height:180px}.el-color-svpanel__black,.el-color-svpanel__white{position:absolute;top:0;left:0;right:0;bottom:0}.el-color-svpanel__white{background:-webkit-gradient(linear,left top,right top,from(#fff),to(rgba(255,255,255,0)));background:linear-gradient(to right,#fff,rgba(255,255,255,0))}.el-color-svpanel__black{background:-webkit-gradient(linear,left bottom,left top,from(#000),to(rgba(0,0,0,0)));background:linear-gradient(to top,#000,rgba(0,0,0,0))}.el-color-svpanel__cursor{position:absolute}.el-color-svpanel__cursor>div{cursor:head;width:4px;height:4px;-webkit-box-shadow:0 0 0 1.5px #fff,inset 0 0 1px 1px rgba(0,0,0,.3),0 0 1px 2px rgba(0,0,0,.4);box-shadow:0 0 0 1.5px #fff,inset 0 0 1px 1px rgba(0,0,0,.3),0 0 1px 2px rgba(0,0,0,.4);border-radius:50%;-webkit-transform:translate(-2px,-2px);transform:translate(-2px,-2px)}.el-color-alpha-slider{position:relative;-webkit-box-sizing:border-box;box-sizing:border-box;width:280px;height:12px;background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAwAAAAMCAIAAADZF8uwAAAAGUlEQVQYV2M4gwH+YwCGIasIUwhT25BVBADtzYNYrHvv4gAAAABJRU5ErkJggg==)}.el-color-alpha-slider__bar{position:relative;background:-webkit-gradient(linear,left top,right top,from(rgba(255,255,255,0)),to(white));background:linear-gradient(to right,rgba(255,255,255,0) 0,#fff 100%);height:100%}.el-color-alpha-slider__thumb{position:absolute;cursor:pointer;-webkit-box-sizing:border-box;box-sizing:border-box;left:0;top:0;width:4px;height:100%;border-radius:1px;background:#fff;border:1px solid #f0f0f0;-webkit-box-shadow:0 0 2px rgba(0,0,0,.6);box-shadow:0 0 2px rgba(0,0,0,.6);z-index:1}.el-color-alpha-slider.is-vertical{width:20px;height:180px}.el-color-alpha-slider.is-vertical .el-color-alpha-slider__bar{background:-webkit-gradient(linear,left top,left bottom,from(rgba(255,255,255,0)),to(white));background:linear-gradient(to bottom,rgba(255,255,255,0) 0,#fff 100%)}.el-color-alpha-slider.is-vertical .el-color-alpha-slider__thumb{left:0;top:0;width:100%;height:4px}.el-color-dropdown{width:300px}.el-color-dropdown__main-wrapper{margin-bottom:6px}.el-color-dropdown__main-wrapper::after{display:table;clear:both}.el-color-dropdown__btns{margin-top:6px;text-align:right}.el-color-dropdown__value{float:left;line-height:26px;font-size:12px;color:#000;width:160px}.el-color-dropdown__btn{border:1px solid #dcdcdc;color:#333;line-height:24px;border-radius:2px;padding:0 20px;cursor:pointer;background-color:transparent;outline:0;font-size:12px}.el-color-dropdown__btn[disabled]{color:#ccc;cursor:not-allowed}.el-color-dropdown__btn:hover{color:#409EFF;border-color:#409EFF}.el-color-dropdown__link-btn{cursor:pointer;color:#409EFF;text-decoration:none;padding:15px;font-size:12px}.el-color-dropdown__link-btn:hover{color:tint(#409EFF,20%)}.el-color-picker{display:inline-block;position:relative;line-height:normal;height:40px}.el-color-picker.is-disabled .el-color-picker__trigger{cursor:not-allowed}.el-color-picker--medium{height:36px}.el-color-picker--medium .el-color-picker__trigger{height:36px;width:36px}.el-color-picker--medium .el-color-picker__mask{height:34px;width:34px}.el-color-picker--small{height:32px}.el-color-picker--small .el-color-picker__trigger{height:32px;width:32px}.el-color-picker--small .el-color-picker__mask{height:30px;width:30px}.el-color-picker--small .el-color-picker__empty,.el-color-picker--small .el-color-picker__icon{-webkit-transform:translate3d(-50%,-50%,0) scale(.8);transform:translate3d(-50%,-50%,0) scale(.8)}.el-color-picker--mini{height:28px}.el-color-picker--mini .el-color-picker__trigger{height:28px;width:28px}.el-color-picker--mini .el-color-picker__mask{height:26px;width:26px}.el-color-picker--mini .el-color-picker__empty,.el-color-picker--mini .el-color-picker__icon{-webkit-transform:translate3d(-50%,-50%,0) scale(.8);transform:translate3d(-50%,-50%,0) scale(.8)}.el-color-picker__mask{height:38px;width:38px;border-radius:4px;position:absolute;top:1px;left:1px;z-index:1;cursor:not-allowed;background-color:rgba(255,255,255,.7)}.el-color-picker__trigger{display:inline-block;-webkit-box-sizing:border-box;box-sizing:border-box;height:40px;width:40px;padding:4px;border:1px solid #e6e6e6;border-radius:4px;font-size:0;position:relative;cursor:pointer}.el-color-picker__color{position:relative;display:block;-webkit-box-sizing:border-box;box-sizing:border-box;border:1px solid #999;border-radius:2px;width:100%;height:100%;text-align:center}.el-color-picker__icon,.el-input,.el-textarea{display:inline-block;width:100%}.el-color-picker__color.is-alpha{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAwAAAAMCAIAAADZF8uwAAAAGUlEQVQYV2M4gwH+YwCGIasIUwhT25BVBADtzYNYrHvv4gAAAABJRU5ErkJggg==)}.el-color-picker__color-inner{position:absolute;left:0;top:0;right:0;bottom:0}.el-color-picker__empty{font-size:12px;color:#999;position:absolute;top:50%;left:50%;-webkit-transform:translate3d(-50%,-50%,0);transform:translate3d(-50%,-50%,0)}.el-color-picker__icon{position:absolute;top:50%;left:50%;-webkit-transform:translate3d(-50%,-50%,0);transform:translate3d(-50%,-50%,0);color:#FFF;text-align:center;font-size:12px}.el-input__prefix,.el-input__suffix{position:absolute;top:0;text-align:center}.el-color-picker__panel{position:absolute;z-index:10;padding:6px;-webkit-box-sizing:content-box;box-sizing:content-box;background-color:#FFF;border:1px solid #EBEEF5;border-radius:4px;box-shadow:0 2px 12px 0 rgba(0,0,0,.1)}.el-input__inner,.el-textarea__inner,.el-transfer-panel{-webkit-box-sizing:border-box}.el-textarea{position:relative;vertical-align:bottom;font-size:14px}.el-textarea__inner{display:block;resize:vertical;padding:5px 15px;line-height:1.5;box-sizing:border-box;width:100%;font-size:inherit;color:#606266;background-color:#FFF;background-image:none;border:1px solid #DCDFE6;border-radius:4px;-webkit-transition:border-color .2s cubic-bezier(.645,.045,.355,1);transition:border-color .2s cubic-bezier(.645,.045,.355,1)}.el-textarea__inner::-webkit-input-placeholder{color:#C0C4CC}.el-textarea__inner:-ms-input-placeholder{color:#C0C4CC}.el-textarea__inner::-ms-input-placeholder{color:#C0C4CC}.el-textarea__inner::placeholder{color:#C0C4CC}.el-textarea__inner:hover{border-color:#C0C4CC}.el-textarea__inner:focus{outline:0;border-color:#409EFF}.el-textarea .el-input__count{color:#909399;background:#FFF;position:absolute;font-size:12px;bottom:5px;right:10px}.el-textarea.is-disabled .el-textarea__inner{background-color:#F5F7FA;border-color:#E4E7ED;color:#C0C4CC;cursor:not-allowed}.el-textarea.is-disabled .el-textarea__inner::-webkit-input-placeholder{color:#C0C4CC}.el-textarea.is-disabled .el-textarea__inner:-ms-input-placeholder{color:#C0C4CC}.el-textarea.is-disabled .el-textarea__inner::-ms-input-placeholder{color:#C0C4CC}.el-textarea.is-disabled .el-textarea__inner::placeholder{color:#C0C4CC}.el-textarea.is-exceed .el-textarea__inner{border-color:#F56C6C}.el-textarea.is-exceed .el-input__count{color:#F56C6C}.el-input{position:relative;font-size:14px}.el-input::-webkit-scrollbar{z-index:11;width:6px}.el-input::-webkit-scrollbar:horizontal{height:6px}.el-input::-webkit-scrollbar-thumb{border-radius:5px;width:6px;background:#b4bccc}.el-input::-webkit-scrollbar-corner{background:#fff}.el-input::-webkit-scrollbar-track{background:#fff}.el-input::-webkit-scrollbar-track-piece{background:#fff;width:6px}.el-input .el-input__clear{color:#C0C4CC;font-size:14px;cursor:pointer;-webkit-transition:color .2s cubic-bezier(.645,.045,.355,1);transition:color .2s cubic-bezier(.645,.045,.355,1)}.el-input .el-input__clear:hover{color:#909399}.el-input .el-input__count{height:100%;display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;color:#909399;font-size:12px}.el-input-group__append .el-button,.el-input-group__append .el-input,.el-input-group__prepend .el-button,.el-input-group__prepend .el-input,.el-input__inner{font-size:inherit}.el-input .el-input__count .el-input__count-inner{background:#FFF;line-height:initial;display:inline-block;padding:0 5px}.el-input__inner{-webkit-appearance:none;background-color:#FFF;background-image:none;border-radius:4px;border:1px solid #DCDFE6;box-sizing:border-box;color:#606266;display:inline-block;height:40px;line-height:40px;outline:0;padding:0 15px;-webkit-transition:border-color .2s cubic-bezier(.645,.045,.355,1);transition:border-color .2s cubic-bezier(.645,.045,.355,1);width:100%}.el-input__inner::-ms-reveal{display:none}.el-input__inner::-webkit-input-placeholder{color:#C0C4CC}.el-input__inner:-ms-input-placeholder{color:#C0C4CC}.el-input__inner::-ms-input-placeholder{color:#C0C4CC}.el-input__inner::placeholder{color:#C0C4CC}.el-input__inner:hover{border-color:#C0C4CC}.el-input.is-active .el-input__inner,.el-input__inner:focus{border-color:#409EFF;outline:0}.el-input__suffix{height:100%;right:5px;transition:all .3s;pointer-events:none}.el-input__suffix-inner{pointer-events:all}.el-input__prefix{height:100%;left:5px;transition:all .3s}.el-input__icon{height:100%;width:25px;text-align:center;-webkit-transition:all .3s;transition:all .3s;line-height:40px}.el-input__icon:after{content:'';height:100%;width:0;display:inline-block;vertical-align:middle}.el-input__validateIcon{pointer-events:none}.el-input.is-disabled .el-input__inner{background-color:#F5F7FA;border-color:#E4E7ED;color:#C0C4CC;cursor:not-allowed}.el-input.is-disabled .el-input__inner::-webkit-input-placeholder{color:#C0C4CC}.el-input.is-disabled .el-input__inner:-ms-input-placeholder{color:#C0C4CC}.el-input.is-disabled .el-input__inner::-ms-input-placeholder{color:#C0C4CC}.el-input.is-disabled .el-input__inner::placeholder{color:#C0C4CC}.el-input.is-disabled .el-input__icon{cursor:not-allowed}.el-image-viewer__btn,.el-image__preview,.el-link,.el-transfer-panel__filter .el-icon-circle-close{cursor:pointer}.el-input.is-exceed .el-input__inner{border-color:#F56C6C}.el-input.is-exceed .el-input__suffix .el-input__count{color:#F56C6C}.el-input--suffix .el-input__inner{padding-right:30px}.el-input--prefix .el-input__inner{padding-left:30px}.el-input--medium{font-size:14px}.el-input--medium .el-input__inner{height:36px;line-height:36px}.el-input--medium .el-input__icon{line-height:36px}.el-input--small{font-size:13px}.el-input--small .el-input__inner{height:32px;line-height:32px}.el-input--small .el-input__icon{line-height:32px}.el-input--mini{font-size:12px}.el-input--mini .el-input__inner{height:28px;line-height:28px}.el-input--mini .el-input__icon{line-height:28px}.el-input-group{line-height:normal;display:inline-table;width:100%;border-collapse:separate;border-spacing:0}.el-input-group>.el-input__inner{vertical-align:middle;display:table-cell}.el-input-group__append,.el-input-group__prepend{background-color:#F5F7FA;color:#909399;vertical-align:middle;display:table-cell;position:relative;border:1px solid #DCDFE6;border-radius:4px;padding:0 20px;width:1px;white-space:nowrap}.el-input-group--append .el-input__inner,.el-input-group__prepend{border-top-right-radius:0;border-bottom-right-radius:0}.el-input-group__append:focus,.el-input-group__prepend:focus{outline:0}.el-input-group__append .el-button,.el-input-group__append .el-select,.el-input-group__prepend .el-button,.el-input-group__prepend .el-select{display:inline-block;margin:-10px -20px}.el-input-group__append button.el-button,.el-input-group__append div.el-select .el-input__inner,.el-input-group__append div.el-select:hover .el-input__inner,.el-input-group__prepend button.el-button,.el-input-group__prepend div.el-select .el-input__inner,.el-input-group__prepend div.el-select:hover .el-input__inner{border-color:transparent;background-color:transparent;color:inherit;border-top:0;border-bottom:0}.el-input-group__prepend{border-right:0}.el-input-group__append{border-left:0;border-top-left-radius:0;border-bottom-left-radius:0}.el-input-group--append .el-select .el-input.is-focus .el-input__inner,.el-input-group--prepend .el-select .el-input.is-focus .el-input__inner{border-color:transparent}.el-input-group--prepend .el-input__inner{border-top-left-radius:0;border-bottom-left-radius:0}.el-input__inner::-ms-clear{display:none;width:0;height:0}.el-transfer{font-size:14px}.el-transfer__buttons{display:inline-block;vertical-align:middle;padding:0 30px}.el-transfer__button{display:block;margin:0 auto;padding:10px;border-radius:50%;color:#FFF;background-color:#409EFF;font-size:0}.el-button-group>.el-button+.el-button,.el-transfer-panel__item+.el-transfer-panel__item,.el-transfer__button [class*=el-icon-]+span{margin-left:0}.el-divider__text,.el-image__error,.el-link,.el-timeline,.el-transfer__button i,.el-transfer__button span{font-size:14px}.el-transfer__button.is-with-texts{border-radius:4px}.el-transfer__button.is-disabled,.el-transfer__button.is-disabled:hover{border:1px solid #DCDFE6;background-color:#F5F7FA;color:#C0C4CC}.el-transfer__button:first-child{margin-bottom:10px}.el-transfer__button:nth-child(2){margin:0}.el-transfer-panel{border:1px solid #EBEEF5;border-radius:4px;overflow:hidden;background:#FFF;display:inline-block;vertical-align:middle;width:200px;max-height:100%;box-sizing:border-box;position:relative}.el-transfer-panel__body{height:246px}.el-transfer-panel__body.is-with-footer{padding-bottom:40px}.el-transfer-panel__list{margin:0;padding:6px 0;list-style:none;height:246px;overflow:auto;-webkit-box-sizing:border-box;box-sizing:border-box}.el-transfer-panel__list.is-filterable{height:194px;padding-top:0}.el-transfer-panel__item{height:30px;line-height:30px;padding-left:15px;display:block!important}.el-transfer-panel__item.el-checkbox{color:#606266}.el-transfer-panel__item:hover{color:#409EFF}.el-transfer-panel__item.el-checkbox .el-checkbox__label{width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;display:block;-webkit-box-sizing:border-box;box-sizing:border-box;padding-left:24px;line-height:30px}.el-transfer-panel__item .el-checkbox__input{position:absolute;top:8px}.el-transfer-panel__filter{text-align:center;margin:15px;-webkit-box-sizing:border-box;box-sizing:border-box;display:block;width:auto}.el-transfer-panel__filter .el-input__inner{height:32px;width:100%;font-size:12px;display:inline-block;-webkit-box-sizing:border-box;box-sizing:border-box;border-radius:16px;padding-right:10px;padding-left:30px}.el-transfer-panel__filter .el-input__icon{margin-left:5px}.el-transfer-panel .el-transfer-panel__header{height:40px;line-height:40px;background:#F5F7FA;margin:0;padding-left:15px;border-bottom:1px solid #EBEEF5;-webkit-box-sizing:border-box;box-sizing:border-box;color:#000}.el-container,.el-header{-webkit-box-sizing:border-box}.el-transfer-panel .el-transfer-panel__header .el-checkbox{display:block;line-height:40px}.el-transfer-panel .el-transfer-panel__header .el-checkbox .el-checkbox__label{font-size:16px;color:#303133;font-weight:400}.el-transfer-panel .el-transfer-panel__header .el-checkbox .el-checkbox__label span{position:absolute;right:15px;color:#909399;font-size:12px;font-weight:400}.el-transfer-panel .el-transfer-panel__footer{height:40px;background:#FFF;margin:0;padding:0;border-top:1px solid #EBEEF5;position:absolute;bottom:0;left:0;width:100%;z-index:1}.el-transfer-panel .el-transfer-panel__footer::after{display:inline-block;height:100%;vertical-align:middle}.el-container,.el-timeline-item__node{display:-webkit-box;display:-ms-flexbox}.el-transfer-panel .el-transfer-panel__footer .el-checkbox{padding-left:20px;color:#606266}.el-transfer-panel .el-transfer-panel__empty{margin:0;height:30px;line-height:30px;padding:6px 15px 0;color:#909399;text-align:center}.el-transfer-panel .el-checkbox__label{padding-left:8px}.el-transfer-panel .el-checkbox__inner{height:14px;width:14px;border-radius:3px}.el-transfer-panel .el-checkbox__inner::after{height:6px;width:3px;left:4px}.el-container{display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-webkit-box-flex:1;-ms-flex:1;flex:1;-ms-flex-preferred-size:auto;flex-basis:auto;box-sizing:border-box;min-width:0}.el-container.is-vertical,.el-drawer,.el-empty,.el-result{-webkit-box-orient:vertical;-webkit-box-direction:normal}.el-container.is-vertical{-ms-flex-direction:column;flex-direction:column}.el-header{padding:0 20px;box-sizing:border-box;-ms-flex-negative:0;flex-shrink:0}.el-aside{overflow:auto;-webkit-box-sizing:border-box;box-sizing:border-box;-ms-flex-negative:0;flex-shrink:0}.el-main{display:block;-webkit-box-flex:1;-ms-flex:1;flex:1;-ms-flex-preferred-size:auto;flex-basis:auto;overflow:auto;-webkit-box-sizing:border-box;box-sizing:border-box}.el-footer{padding:0 20px;-webkit-box-sizing:border-box;box-sizing:border-box;-ms-flex-negative:0;flex-shrink:0}.el-timeline{margin:0;list-style:none}.el-timeline .el-timeline-item:last-child .el-timeline-item__tail{display:none}.el-timeline-item{position:relative;padding-bottom:20px}.el-timeline-item__wrapper{position:relative;padding-left:28px;top:-3px}.el-timeline-item__tail{position:absolute;left:4px;height:100%;border-left:2px solid #E4E7ED}.el-timeline-item__icon{color:#FFF;font-size:13px}.el-timeline-item__node{position:absolute;background-color:#E4E7ED;border-radius:50%;display:flex;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.el-image__error,.el-timeline-item__dot{display:-webkit-box;display:-ms-flexbox}.el-timeline-item__node--normal{left:-1px;width:12px;height:12px}.el-timeline-item__node--large{left:-2px;width:14px;height:14px}.el-timeline-item__node--primary{background-color:#409EFF}.el-timeline-item__node--success{background-color:#67C23A}.el-timeline-item__node--warning{background-color:#E6A23C}.el-timeline-item__node--danger{background-color:#F56C6C}.el-timeline-item__node--info{background-color:#909399}.el-timeline-item__dot{position:absolute;display:flex;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.el-timeline-item__content{color:#303133}.el-timeline-item__timestamp{color:#909399;line-height:1;font-size:13px}.el-timeline-item__timestamp.is-top{margin-bottom:8px;padding-top:4px}.el-timeline-item__timestamp.is-bottom{margin-top:8px}.el-link{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;vertical-align:middle;position:relative;text-decoration:none;outline:0;padding:0;font-weight:500}.el-link.is-underline:hover:after{position:absolute;left:0;right:0;height:0;bottom:0;border-bottom:1px solid #409EFF}.el-link.el-link--default:after,.el-link.el-link--primary.is-underline:hover:after,.el-link.el-link--primary:after{border-color:#409EFF}.el-link.is-disabled{cursor:not-allowed}.el-link [class*=el-icon-]+span{margin-left:5px}.el-link.el-link--default{color:#606266}.el-link.el-link--default:hover{color:#409EFF}.el-link.el-link--default.is-disabled{color:#C0C4CC}.el-link.el-link--primary{color:#409EFF}.el-link.el-link--primary:hover{color:#66b1ff}.el-link.el-link--primary.is-disabled{color:#a0cfff}.el-link.el-link--danger.is-underline:hover:after,.el-link.el-link--danger:after{border-color:#F56C6C}.el-link.el-link--danger{color:#F56C6C}.el-link.el-link--danger:hover{color:#f78989}.el-link.el-link--danger.is-disabled{color:#fab6b6}.el-link.el-link--success.is-underline:hover:after,.el-link.el-link--success:after{border-color:#67C23A}.el-link.el-link--success{color:#67C23A}.el-link.el-link--success:hover{color:#85ce61}.el-link.el-link--success.is-disabled{color:#b3e19d}.el-link.el-link--warning.is-underline:hover:after,.el-link.el-link--warning:after{border-color:#E6A23C}.el-link.el-link--warning{color:#E6A23C}.el-link.el-link--warning:hover{color:#ebb563}.el-link.el-link--warning.is-disabled{color:#f3d19e}.el-link.el-link--info.is-underline:hover:after,.el-link.el-link--info:after{border-color:#909399}.el-link.el-link--info{color:#909399}.el-link.el-link--info:hover{color:#a6a9ad}.el-link.el-link--info.is-disabled{color:#c8c9cc}.el-divider{background-color:#DCDFE6;position:relative}.el-divider--horizontal{display:block;height:1px;width:100%;margin:24px 0}.el-divider--vertical{display:inline-block;width:1px;height:1em;margin:0 8px;vertical-align:middle;position:relative}.el-divider__text{position:absolute;background-color:#FFF;padding:0 20px;font-weight:500;color:#303133}.el-image__error,.el-image__placeholder{background:#F5F7FA}.el-divider__text.is-left{left:20px;-webkit-transform:translateY(-50%);transform:translateY(-50%)}.el-divider__text.is-center{left:50%;-webkit-transform:translateX(-50%) translateY(-50%);transform:translateX(-50%) translateY(-50%)}.el-divider__text.is-right{right:20px;-webkit-transform:translateY(-50%);transform:translateY(-50%)}.el-image__error,.el-image__inner,.el-image__placeholder{width:100%;height:100%}.el-image{position:relative;display:inline-block;overflow:hidden}.el-image__inner{vertical-align:top}.el-image__inner--center{position:relative;top:50%;left:50%;-webkit-transform:translate(-50%,-50%);transform:translate(-50%,-50%);display:block}.el-image__error{display:flex;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;color:#C0C4CC;vertical-align:middle}.el-image-viewer__wrapper{position:fixed;top:0;right:0;bottom:0;left:0}.el-image-viewer__btn{position:absolute;z-index:1;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;border-radius:50%;opacity:.8;-webkit-box-sizing:border-box;box-sizing:border-box;-webkit-user-select:none;user-select:none}.el-button,.el-checkbox,.el-checkbox-button__inner,.el-empty__image img,.el-radio{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none}.el-image-viewer__close{top:40px;right:40px;width:40px;height:40px;font-size:24px;color:#fff;background-color:#606266}.el-image-viewer__canvas{width:100%;height:100%;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.el-image-viewer__actions{left:50%;bottom:30px;-webkit-transform:translateX(-50%);transform:translateX(-50%);width:282px;height:44px;padding:0 23px;background-color:#606266;border-color:#fff;border-radius:22px}.el-image-viewer__actions__inner{width:100%;height:100%;text-align:justify;cursor:default;font-size:23px;color:#fff;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-ms-flex-pack:distribute;justify-content:space-around}.el-image-viewer__next,.el-image-viewer__prev{width:44px;height:44px;font-size:24px;color:#fff;background-color:#606266;border-color:#fff;top:50%}.el-image-viewer__prev{-webkit-transform:translateY(-50%);transform:translateY(-50%);left:40px}.el-image-viewer__next{-webkit-transform:translateY(-50%);transform:translateY(-50%);right:40px;text-indent:2px}.el-image-viewer__mask{position:absolute;width:100%;height:100%;top:0;left:0;opacity:.5;background:#000}.viewer-fade-enter-active{-webkit-animation:viewer-fade-in .3s;animation:viewer-fade-in .3s}.viewer-fade-leave-active{-webkit-animation:viewer-fade-out .3s;animation:viewer-fade-out .3s}@-webkit-keyframes viewer-fade-in{0%{-webkit-transform:translate3d(0,-20px,0);transform:translate3d(0,-20px,0);opacity:0}100%{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0);opacity:1}}@keyframes viewer-fade-in{0%{-webkit-transform:translate3d(0,-20px,0);transform:translate3d(0,-20px,0);opacity:0}100%{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0);opacity:1}}@-webkit-keyframes viewer-fade-out{0%{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0);opacity:1}100%{-webkit-transform:translate3d(0,-20px,0);transform:translate3d(0,-20px,0);opacity:0}}@keyframes viewer-fade-out{0%{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0);opacity:1}100%{-webkit-transform:translate3d(0,-20px,0);transform:translate3d(0,-20px,0);opacity:0}}.el-button{display:inline-block;line-height:1;white-space:nowrap;cursor:pointer;background:#FFF;border:1px solid #DCDFE6;color:#606266;-webkit-appearance:none;text-align:center;-webkit-box-sizing:border-box;box-sizing:border-box;outline:0;margin:0;-webkit-transition:.1s;transition:.1s;font-weight:500;padding:12px 20px;font-size:14px;border-radius:4px}.el-button+.el-button,.el-checkbox.is-bordered+.el-checkbox.is-bordered{margin-left:10px}.el-button:focus,.el-button:hover{color:#409EFF;border-color:#c6e2ff;background-color:#ecf5ff}.el-button:active{color:#3a8ee6;border-color:#3a8ee6;outline:0}.el-button::-moz-focus-inner{border:0}.el-button [class*=el-icon-]+span{margin-left:5px}.el-button.is-plain:focus,.el-button.is-plain:hover{background:#FFF;border-color:#409EFF;color:#409EFF}.el-button.is-active,.el-button.is-plain:active{color:#3a8ee6;border-color:#3a8ee6}.el-button.is-plain:active{background:#FFF;outline:0}.el-button.is-disabled,.el-button.is-disabled:focus,.el-button.is-disabled:hover{color:#C0C4CC;cursor:not-allowed;background-image:none;background-color:#FFF;border-color:#EBEEF5}.el-button.is-disabled.el-button--text{background-color:transparent}.el-button.is-disabled.is-plain,.el-button.is-disabled.is-plain:focus,.el-button.is-disabled.is-plain:hover{background-color:#FFF;border-color:#EBEEF5;color:#C0C4CC}.el-button.is-loading{position:relative;pointer-events:none}.el-button.is-loading:before{pointer-events:none;content:'';position:absolute;left:-1px;top:-1px;right:-1px;bottom:-1px;border-radius:inherit;background-color:rgba(255,255,255,.35)}.el-button.is-round{border-radius:20px;padding:12px 23px}.el-button.is-circle{border-radius:50%;padding:12px}.el-button--primary{color:#FFF;background-color:#409EFF;border-color:#409EFF}.el-button--primary:focus,.el-button--primary:hover{background:#66b1ff;border-color:#66b1ff;color:#FFF}.el-button--primary.is-active,.el-button--primary:active{background:#3a8ee6;border-color:#3a8ee6;color:#FFF}.el-button--primary:active{outline:0}.el-button--primary.is-disabled,.el-button--primary.is-disabled:active,.el-button--primary.is-disabled:focus,.el-button--primary.is-disabled:hover{color:#FFF;background-color:#a0cfff;border-color:#a0cfff}.el-button--primary.is-plain{color:#409EFF;background:#ecf5ff;border-color:#b3d8ff}.el-button--primary.is-plain:focus,.el-button--primary.is-plain:hover{background:#409EFF;border-color:#409EFF;color:#FFF}.el-button--primary.is-plain:active{background:#3a8ee6;border-color:#3a8ee6;color:#FFF;outline:0}.el-button--primary.is-plain.is-disabled,.el-button--primary.is-plain.is-disabled:active,.el-button--primary.is-plain.is-disabled:focus,.el-button--primary.is-plain.is-disabled:hover{color:#8cc5ff;background-color:#ecf5ff;border-color:#d9ecff}.el-button--success{color:#FFF;background-color:#67C23A;border-color:#67C23A}.el-button--success:focus,.el-button--success:hover{background:#85ce61;border-color:#85ce61;color:#FFF}.el-button--success.is-active,.el-button--success:active{background:#5daf34;border-color:#5daf34;color:#FFF}.el-button--success:active{outline:0}.el-button--success.is-disabled,.el-button--success.is-disabled:active,.el-button--success.is-disabled:focus,.el-button--success.is-disabled:hover{color:#FFF;background-color:#b3e19d;border-color:#b3e19d}.el-button--success.is-plain{color:#67C23A;background:#f0f9eb;border-color:#c2e7b0}.el-button--success.is-plain:focus,.el-button--success.is-plain:hover{background:#67C23A;border-color:#67C23A;color:#FFF}.el-button--success.is-plain:active{background:#5daf34;border-color:#5daf34;color:#FFF;outline:0}.el-button--success.is-plain.is-disabled,.el-button--success.is-plain.is-disabled:active,.el-button--success.is-plain.is-disabled:focus,.el-button--success.is-plain.is-disabled:hover{color:#a4da89;background-color:#f0f9eb;border-color:#e1f3d8}.el-button--warning{color:#FFF;background-color:#E6A23C;border-color:#E6A23C}.el-button--warning:focus,.el-button--warning:hover{background:#ebb563;border-color:#ebb563;color:#FFF}.el-button--warning.is-active,.el-button--warning:active{background:#cf9236;border-color:#cf9236;color:#FFF}.el-button--warning:active{outline:0}.el-button--warning.is-disabled,.el-button--warning.is-disabled:active,.el-button--warning.is-disabled:focus,.el-button--warning.is-disabled:hover{color:#FFF;background-color:#f3d19e;border-color:#f3d19e}.el-button--warning.is-plain{color:#E6A23C;background:#fdf6ec;border-color:#f5dab1}.el-button--warning.is-plain:focus,.el-button--warning.is-plain:hover{background:#E6A23C;border-color:#E6A23C;color:#FFF}.el-button--warning.is-plain:active{background:#cf9236;border-color:#cf9236;color:#FFF;outline:0}.el-button--warning.is-plain.is-disabled,.el-button--warning.is-plain.is-disabled:active,.el-button--warning.is-plain.is-disabled:focus,.el-button--warning.is-plain.is-disabled:hover{color:#f0c78a;background-color:#fdf6ec;border-color:#faecd8}.el-button--danger{color:#FFF;background-color:#F56C6C;border-color:#F56C6C}.el-button--danger:focus,.el-button--danger:hover{background:#f78989;border-color:#f78989;color:#FFF}.el-button--danger.is-active,.el-button--danger:active{background:#dd6161;border-color:#dd6161;color:#FFF}.el-button--danger:active{outline:0}.el-button--danger.is-disabled,.el-button--danger.is-disabled:active,.el-button--danger.is-disabled:focus,.el-button--danger.is-disabled:hover{color:#FFF;background-color:#fab6b6;border-color:#fab6b6}.el-button--danger.is-plain{color:#F56C6C;background:#fef0f0;border-color:#fbc4c4}.el-button--danger.is-plain:focus,.el-button--danger.is-plain:hover{background:#F56C6C;border-color:#F56C6C;color:#FFF}.el-button--danger.is-plain:active{background:#dd6161;border-color:#dd6161;color:#FFF;outline:0}.el-button--danger.is-plain.is-disabled,.el-button--danger.is-plain.is-disabled:active,.el-button--danger.is-plain.is-disabled:focus,.el-button--danger.is-plain.is-disabled:hover{color:#f9a7a7;background-color:#fef0f0;border-color:#fde2e2}.el-button--info{color:#FFF;background-color:#909399;border-color:#909399}.el-button--info:focus,.el-button--info:hover{background:#a6a9ad;border-color:#a6a9ad;color:#FFF}.el-button--info.is-active,.el-button--info:active{background:#82848a;border-color:#82848a;color:#FFF}.el-button--info:active{outline:0}.el-button--info.is-disabled,.el-button--info.is-disabled:active,.el-button--info.is-disabled:focus,.el-button--info.is-disabled:hover{color:#FFF;background-color:#c8c9cc;border-color:#c8c9cc}.el-button--info.is-plain{color:#909399;background:#f4f4f5;border-color:#d3d4d6}.el-button--info.is-plain:focus,.el-button--info.is-plain:hover{background:#909399;border-color:#909399;color:#FFF}.el-button--info.is-plain:active{background:#82848a;border-color:#82848a;color:#FFF;outline:0}.el-button--info.is-plain.is-disabled,.el-button--info.is-plain.is-disabled:active,.el-button--info.is-plain.is-disabled:focus,.el-button--info.is-plain.is-disabled:hover{color:#bcbec2;background-color:#f4f4f5;border-color:#e9e9eb}.el-button--medium{padding:10px 20px;font-size:14px;border-radius:4px}.el-button--medium.is-round{padding:10px 20px}.el-button--medium.is-circle{padding:10px}.el-button--small{padding:9px 15px;font-size:12px;border-radius:3px}.el-button--small.is-round{padding:9px 15px}.el-button--small.is-circle{padding:9px}.el-button--mini,.el-button--mini.is-round{padding:7px 15px}.el-button--mini{font-size:12px;border-radius:3px}.el-button--mini.is-circle{padding:7px}.el-button--text{border-color:transparent;color:#409EFF;background:0 0;padding-left:0;padding-right:0}.el-button--text:focus,.el-button--text:hover{color:#66b1ff;border-color:transparent;background-color:transparent}.el-button--text:active{color:#3a8ee6;border-color:transparent;background-color:transparent}.el-button--text.is-disabled,.el-button--text.is-disabled:focus,.el-button--text.is-disabled:hover{border-color:transparent}.el-button-group .el-button--danger:last-child,.el-button-group .el-button--danger:not(:first-child):not(:last-child),.el-button-group .el-button--info:last-child,.el-button-group .el-button--info:not(:first-child):not(:last-child),.el-button-group .el-button--primary:last-child,.el-button-group .el-button--primary:not(:first-child):not(:last-child),.el-button-group .el-button--success:last-child,.el-button-group .el-button--success:not(:first-child):not(:last-child),.el-button-group .el-button--warning:last-child,.el-button-group .el-button--warning:not(:first-child):not(:last-child),.el-button-group>.el-dropdown>.el-button{border-left-color:rgba(255,255,255,.5)}.el-button-group .el-button--danger:first-child,.el-button-group .el-button--danger:not(:first-child):not(:last-child),.el-button-group .el-button--info:first-child,.el-button-group .el-button--info:not(:first-child):not(:last-child),.el-button-group .el-button--primary:first-child,.el-button-group .el-button--primary:not(:first-child):not(:last-child),.el-button-group .el-button--success:first-child,.el-button-group .el-button--success:not(:first-child):not(:last-child),.el-button-group .el-button--warning:first-child,.el-button-group .el-button--warning:not(:first-child):not(:last-child){border-right-color:rgba(255,255,255,.5)}.el-button-group{display:inline-block;vertical-align:middle}.el-button-group::after,.el-button-group::before{display:table}.el-button-group::after{clear:both}.el-button-group>.el-button{float:left;position:relative}.el-button-group>.el-button.is-disabled{z-index:1}.el-button-group>.el-button:first-child{border-top-right-radius:0;border-bottom-right-radius:0}.el-button-group>.el-button:last-child{border-top-left-radius:0;border-bottom-left-radius:0}.el-button-group>.el-button:first-child:last-child{border-radius:4px}.el-button-group>.el-button:first-child:last-child.is-round{border-radius:20px}.el-button-group>.el-button:first-child:last-child.is-circle{border-radius:50%}.el-button-group>.el-button:not(:first-child):not(:last-child){border-radius:0}.el-button-group>.el-button.is-active,.el-button-group>.el-button:not(.is-disabled):active,.el-button-group>.el-button:not(.is-disabled):focus,.el-button-group>.el-button:not(.is-disabled):hover{z-index:1}.el-button-group>.el-dropdown>.el-button{border-top-left-radius:0;border-bottom-left-radius:0}.el-calendar{background-color:#fff}.el-calendar__header{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;padding:12px 20px;border-bottom:1px solid #EBEEF5}.el-backtop,.el-page-header{display:-webkit-box;display:-ms-flexbox}.el-calendar__title{color:#000;-ms-flex-item-align:center;align-self:center}.el-calendar__body{padding:12px 20px 35px}.el-calendar-table{table-layout:fixed;width:100%}.el-calendar-table thead th{padding:12px 0;color:#606266;font-weight:400}.el-calendar-table:not(.is-range) td.next,.el-calendar-table:not(.is-range) td.prev{color:#C0C4CC}.el-backtop,.el-calendar-table td.is-today{color:#409EFF}.el-calendar-table td{border-bottom:1px solid #EBEEF5;border-right:1px solid #EBEEF5;vertical-align:top;-webkit-transition:background-color .2s ease;transition:background-color .2s ease}.el-calendar-table td.is-selected{background-color:#F2F8FE}.el-calendar-table tr:first-child td{border-top:1px solid #EBEEF5}.el-calendar-table tr td:first-child{border-left:1px solid #EBEEF5}.el-calendar-table tr.el-calendar-table__row--hide-border td{border-top:none}.el-calendar-table .el-calendar-day{-webkit-box-sizing:border-box;box-sizing:border-box;padding:8px;height:85px}.el-calendar-table .el-calendar-day:hover{cursor:pointer;background-color:#F2F8FE}.el-backtop{position:fixed;background-color:#FFF;width:40px;height:40px;border-radius:50%;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;font-size:20px;-webkit-box-shadow:0 0 6px rgba(0,0,0,.12);box-shadow:0 0 6px rgba(0,0,0,.12);cursor:pointer;z-index:5}.el-backtop:hover{background-color:#F2F6FC}.el-page-header{display:flex;line-height:24px}.el-page-header__left{display:-webkit-box;display:-ms-flexbox;display:flex;cursor:pointer;margin-right:40px;position:relative}.el-page-header__left::after{position:absolute;width:1px;height:16px;right:-20px;top:50%;-webkit-transform:translateY(-50%);transform:translateY(-50%);background-color:#DCDFE6}.el-checkbox,.el-checkbox__input{display:inline-block;position:relative;white-space:nowrap}.el-page-header__left .el-icon-back{font-size:18px;margin-right:6px;-ms-flex-item-align:center;align-self:center}.el-page-header__title{font-size:14px;font-weight:500}.el-page-header__content{font-size:18px;color:#303133}.el-checkbox{color:#606266;font-weight:500;font-size:14px;cursor:pointer;user-select:none;margin-right:30px}.el-checkbox.is-bordered{padding:9px 20px 9px 10px;border-radius:4px;border:1px solid #DCDFE6;-webkit-box-sizing:border-box;box-sizing:border-box;line-height:normal;height:40px}.el-checkbox.is-bordered.is-checked{border-color:#409EFF}.el-checkbox.is-bordered.is-disabled{border-color:#EBEEF5;cursor:not-allowed}.el-checkbox.is-bordered.el-checkbox--medium{padding:7px 20px 7px 10px;border-radius:4px;height:36px}.el-checkbox.is-bordered.el-checkbox--medium .el-checkbox__label{line-height:17px;font-size:14px}.el-checkbox.is-bordered.el-checkbox--medium .el-checkbox__inner{height:14px;width:14px}.el-checkbox.is-bordered.el-checkbox--small{padding:5px 15px 5px 10px;border-radius:3px;height:32px}.el-checkbox.is-bordered.el-checkbox--small .el-checkbox__label{line-height:15px;font-size:12px}.el-checkbox.is-bordered.el-checkbox--small .el-checkbox__inner{height:12px;width:12px}.el-checkbox.is-bordered.el-checkbox--small .el-checkbox__inner::after{height:6px;width:2px}.el-checkbox.is-bordered.el-checkbox--mini{padding:3px 15px 3px 10px;border-radius:3px;height:28px}.el-checkbox.is-bordered.el-checkbox--mini .el-checkbox__label{line-height:12px;font-size:12px}.el-checkbox.is-bordered.el-checkbox--mini .el-checkbox__inner{height:12px;width:12px}.el-checkbox.is-bordered.el-checkbox--mini .el-checkbox__inner::after{height:6px;width:2px}.el-checkbox__input{cursor:pointer;outline:0;line-height:1;vertical-align:middle}.el-checkbox__input.is-disabled .el-checkbox__inner{background-color:#edf2fc;border-color:#DCDFE6;cursor:not-allowed}.el-checkbox__input.is-disabled .el-checkbox__inner::after{cursor:not-allowed;border-color:#C0C4CC}.el-checkbox__input.is-disabled .el-checkbox__inner+.el-checkbox__label{cursor:not-allowed}.el-checkbox__input.is-disabled.is-checked .el-checkbox__inner{background-color:#F2F6FC;border-color:#DCDFE6}.el-checkbox__input.is-disabled.is-checked .el-checkbox__inner::after{border-color:#C0C4CC}.el-checkbox__input.is-disabled.is-indeterminate .el-checkbox__inner{background-color:#F2F6FC;border-color:#DCDFE6}.el-checkbox__input.is-disabled.is-indeterminate .el-checkbox__inner::before{background-color:#C0C4CC;border-color:#C0C4CC}.el-checkbox__input.is-checked .el-checkbox__inner,.el-checkbox__input.is-indeterminate .el-checkbox__inner{background-color:#409EFF;border-color:#409EFF}.el-checkbox__input.is-disabled+span.el-checkbox__label{color:#C0C4CC;cursor:not-allowed}.el-checkbox__input.is-checked .el-checkbox__inner::after{-webkit-transform:rotate(45deg) scaleY(1);transform:rotate(45deg) scaleY(1)}.el-checkbox__input.is-checked+.el-checkbox__label{color:#409EFF}.el-checkbox__input.is-focus .el-checkbox__inner{border-color:#409EFF}.el-checkbox__input.is-indeterminate .el-checkbox__inner::before{content:'';position:absolute;display:block;background-color:#FFF;height:2px;-webkit-transform:scale(.5);transform:scale(.5);left:0;right:0;top:5px}.el-checkbox__input.is-indeterminate .el-checkbox__inner::after{display:none}.el-checkbox__inner{display:inline-block;position:relative;border:1px solid #DCDFE6;border-radius:2px;-webkit-box-sizing:border-box;box-sizing:border-box;width:14px;height:14px;background-color:#FFF;z-index:1;-webkit-transition:border-color .25s cubic-bezier(.71,-.46,.29,1.46),background-color .25s cubic-bezier(.71,-.46,.29,1.46);transition:border-color .25s cubic-bezier(.71,-.46,.29,1.46),background-color .25s cubic-bezier(.71,-.46,.29,1.46)}.el-checkbox__inner:hover{border-color:#409EFF}.el-checkbox__inner::after{-webkit-box-sizing:content-box;box-sizing:content-box;content:"";border:1px solid #FFF;border-left:0;border-top:0;height:7px;left:4px;position:absolute;top:1px;-webkit-transform:rotate(45deg) scaleY(0);transform:rotate(45deg) scaleY(0);width:3px;-webkit-transition:-webkit-transform .15s ease-in .05s;transition:-webkit-transform .15s ease-in .05s;transition:transform .15s ease-in .05s;transition:transform .15s ease-in .05s,-webkit-transform .15s ease-in .05s;-webkit-transform-origin:center;transform-origin:center}.el-checkbox__original{opacity:0;outline:0;position:absolute;margin:0;width:0;height:0;z-index:-1}.el-checkbox-button,.el-checkbox-button__inner{display:inline-block;position:relative}.el-checkbox__label{display:inline-block;padding-left:10px;line-height:19px;font-size:14px}.el-checkbox:last-of-type{margin-right:0}.el-checkbox-button__inner{line-height:1;font-weight:500;white-space:nowrap;vertical-align:middle;cursor:pointer;background:#FFF;border:1px solid #DCDFE6;border-left:0;color:#606266;-webkit-appearance:none;text-align:center;-webkit-box-sizing:border-box;box-sizing:border-box;outline:0;margin:0;-webkit-transition:all .3s cubic-bezier(.645,.045,.355,1);transition:all .3s cubic-bezier(.645,.045,.355,1);padding:12px 20px;font-size:14px;border-radius:0}.el-checkbox-button__inner.is-round{padding:12px 20px}.el-checkbox-button__inner:hover{color:#409EFF}.el-checkbox-button__inner [class*=el-icon-]{line-height:.9}.el-checkbox-button__inner [class*=el-icon-]+span{margin-left:5px}.el-checkbox-button__original{opacity:0;outline:0;position:absolute;margin:0;z-index:-1}.el-radio,.el-radio__inner,.el-radio__input{position:relative;display:inline-block}.el-checkbox-button.is-checked .el-checkbox-button__inner{color:#FFF;background-color:#409EFF;border-color:#409EFF;-webkit-box-shadow:-1px 0 0 0 #8cc5ff;box-shadow:-1px 0 0 0 #8cc5ff}.el-checkbox-button.is-checked:first-child .el-checkbox-button__inner{border-left-color:#409EFF}.el-checkbox-button.is-disabled .el-checkbox-button__inner{color:#C0C4CC;cursor:not-allowed;background-image:none;background-color:#FFF;border-color:#EBEEF5;-webkit-box-shadow:none;box-shadow:none}.el-checkbox-button.is-disabled:first-child .el-checkbox-button__inner{border-left-color:#EBEEF5}.el-checkbox-button:first-child .el-checkbox-button__inner{border-left:1px solid #DCDFE6;border-radius:4px 0 0 4px;-webkit-box-shadow:none!important;box-shadow:none!important}.el-checkbox-button.is-focus .el-checkbox-button__inner{border-color:#409EFF}.el-checkbox-button:last-child .el-checkbox-button__inner{border-radius:0 4px 4px 0}.el-checkbox-button--medium .el-checkbox-button__inner{padding:10px 20px;font-size:14px;border-radius:0}.el-checkbox-button--medium .el-checkbox-button__inner.is-round{padding:10px 20px}.el-checkbox-button--small .el-checkbox-button__inner{padding:9px 15px;font-size:12px;border-radius:0}.el-checkbox-button--small .el-checkbox-button__inner.is-round{padding:9px 15px}.el-checkbox-button--mini .el-checkbox-button__inner{padding:7px 15px;font-size:12px;border-radius:0}.el-checkbox-button--mini .el-checkbox-button__inner.is-round{padding:7px 15px}.el-checkbox-group{font-size:0}.el-avatar,.el-cascader-panel,.el-radio,.el-radio--medium.is-bordered .el-radio__label,.el-radio__label{font-size:14px}.el-radio{color:#606266;font-weight:500;line-height:1;cursor:pointer;white-space:nowrap;outline:0;margin-right:30px}.el-cascader-node>.el-radio,.el-radio:last-child{margin-right:0}.el-radio.is-bordered{padding:12px 20px 0 10px;border-radius:4px;border:1px solid #DCDFE6;-webkit-box-sizing:border-box;box-sizing:border-box;height:40px}.el-cascader-menu,.el-cascader-menu__list,.el-radio__inner{-webkit-box-sizing:border-box}.el-radio.is-bordered.is-checked{border-color:#409EFF}.el-radio.is-bordered.is-disabled{cursor:not-allowed;border-color:#EBEEF5}.el-radio__input.is-disabled .el-radio__inner,.el-radio__input.is-disabled.is-checked .el-radio__inner{background-color:#F5F7FA;border-color:#E4E7ED}.el-radio.is-bordered+.el-radio.is-bordered{margin-left:10px}.el-radio--medium.is-bordered{padding:10px 20px 0 10px;border-radius:4px;height:36px}.el-radio--mini.is-bordered .el-radio__label,.el-radio--small.is-bordered .el-radio__label{font-size:12px}.el-radio--medium.is-bordered .el-radio__inner{height:14px;width:14px}.el-radio--small.is-bordered{padding:8px 15px 0 10px;border-radius:3px;height:32px}.el-radio--small.is-bordered .el-radio__inner{height:12px;width:12px}.el-radio--mini.is-bordered{padding:6px 15px 0 10px;border-radius:3px;height:28px}.el-radio--mini.is-bordered .el-radio__inner{height:12px;width:12px}.el-radio__input{white-space:nowrap;cursor:pointer;outline:0;line-height:1;vertical-align:middle}.el-radio__input.is-disabled .el-radio__inner{cursor:not-allowed}.el-radio__input.is-disabled .el-radio__inner::after{cursor:not-allowed;background-color:#F5F7FA}.el-radio__input.is-disabled .el-radio__inner+.el-radio__label{cursor:not-allowed}.el-radio__input.is-disabled.is-checked .el-radio__inner::after{background-color:#C0C4CC}.el-radio__input.is-disabled+span.el-radio__label{color:#C0C4CC;cursor:not-allowed}.el-radio__input.is-checked .el-radio__inner{border-color:#409EFF;background:#409EFF}.el-radio__input.is-checked .el-radio__inner::after{-webkit-transform:translate(-50%,-50%) scale(1);transform:translate(-50%,-50%) scale(1)}.el-radio__input.is-checked+.el-radio__label{color:#409EFF}.el-radio__input.is-focus .el-radio__inner{border-color:#409EFF}.el-radio__inner{border:1px solid #DCDFE6;border-radius:100%;width:14px;height:14px;background-color:#FFF;cursor:pointer;box-sizing:border-box}.el-radio__inner:hover{border-color:#409EFF}.el-radio__inner::after{width:4px;height:4px;border-radius:100%;background-color:#FFF;content:"";position:absolute;left:50%;top:50%;-webkit-transform:translate(-50%,-50%) scale(0);transform:translate(-50%,-50%) scale(0);-webkit-transition:-webkit-transform .15s ease-in;transition:-webkit-transform .15s ease-in;transition:transform .15s ease-in;transition:transform .15s ease-in,-webkit-transform .15s ease-in}.el-radio__original{opacity:0;outline:0;position:absolute;z-index:-1;top:0;left:0;right:0;bottom:0;margin:0}.el-radio:focus:not(.is-focus):not(:active):not(.is-disabled) .el-radio__inner{-webkit-box-shadow:0 0 2px 2px #409EFF;box-shadow:0 0 2px 2px #409EFF}.el-radio__label{padding-left:10px}.el-scrollbar{overflow:hidden;position:relative}.el-scrollbar:active>.el-scrollbar__bar,.el-scrollbar:focus>.el-scrollbar__bar,.el-scrollbar:hover>.el-scrollbar__bar{opacity:1;-webkit-transition:opacity 340ms ease-out;transition:opacity 340ms ease-out}.el-scrollbar__wrap{overflow:scroll;height:100%}.el-scrollbar__wrap--hidden-default{scrollbar-width:none}.el-scrollbar__wrap--hidden-default::-webkit-scrollbar{width:0;height:0}.el-scrollbar__thumb{position:relative;display:block;width:0;height:0;cursor:pointer;border-radius:inherit;background-color:rgba(144,147,153,.3);-webkit-transition:.3s background-color;transition:.3s background-color}.el-scrollbar__thumb:hover{background-color:rgba(144,147,153,.5)}.el-scrollbar__bar{position:absolute;right:2px;bottom:2px;z-index:1;border-radius:4px;opacity:0;-webkit-transition:opacity 120ms ease-out;transition:opacity 120ms ease-out}.el-scrollbar__bar.is-vertical{width:6px;top:2px}.el-scrollbar__bar.is-vertical>div{width:100%}.el-scrollbar__bar.is-horizontal{height:6px;left:2px}.el-scrollbar__bar.is-horizontal>div{height:100%}.el-cascader-panel{display:-webkit-box;display:-ms-flexbox;display:flex;border-radius:4px}.el-cascader-panel.is-bordered{border:1px solid #E4E7ED;border-radius:4px}.el-cascader-menu{min-width:180px;box-sizing:border-box;color:#606266;border-right:solid 1px #E4E7ED}.el-cascader-menu:last-child{border-right:none}.el-cascader-menu__wrap{height:204px}.el-cascader-menu__list{position:relative;min-height:100%;margin:0;padding:6px 0;list-style:none;box-sizing:border-box}.el-cascader-menu__hover-zone{position:absolute;top:0;left:0;width:100%;height:100%;pointer-events:none}.el-cascader-menu__empty-text{position:absolute;top:50%;left:50%;-webkit-transform:translate(-50%,-50%);transform:translate(-50%,-50%);text-align:center;color:#C0C4CC}.el-cascader-node{position:relative;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;padding:0 30px 0 20px;height:34px;line-height:34px;outline:0}.el-cascader-node.is-selectable.in-active-path{color:#606266}.el-cascader-node.in-active-path,.el-cascader-node.is-active,.el-cascader-node.is-selectable.in-checked-path{color:#409EFF;font-weight:700}.el-cascader-node:not(.is-disabled){cursor:pointer}.el-cascader-node:not(.is-disabled):focus,.el-cascader-node:not(.is-disabled):hover{background:#F5F7FA}.el-cascader-node.is-disabled{color:#C0C4CC;cursor:not-allowed}.el-cascader-node__prefix{position:absolute;left:10px}.el-cascader-node__postfix{position:absolute;right:10px}.el-cascader-node__label{-webkit-box-flex:1;-ms-flex:1;flex:1;padding:0 10px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.el-cascader-node>.el-radio .el-radio__label{padding-left:0}.el-avatar{display:inline-block;-webkit-box-sizing:border-box;box-sizing:border-box;text-align:center;overflow:hidden;color:#fff;background:#C0C4CC;width:40px;height:40px;line-height:40px}.el-drawer,.el-drawer__body>*{-webkit-box-sizing:border-box}.el-avatar>img{display:block;height:100%;vertical-align:middle}.el-empty__image img,.el-empty__image svg{vertical-align:top;height:100%;width:100%}.el-avatar--circle{border-radius:50%}.el-avatar--square{border-radius:4px}.el-avatar--icon{font-size:18px}.el-avatar--large{width:40px;height:40px;line-height:40px}.el-avatar--medium{width:36px;height:36px;line-height:36px}.el-avatar--small{width:28px;height:28px;line-height:28px}@-webkit-keyframes el-drawer-fade-in{0%{opacity:0}100%{opacity:1}}@keyframes el-drawer-fade-in{0%{opacity:0}100%{opacity:1}}@-webkit-keyframes rtl-drawer-in{0%{-webkit-transform:translate(100%,0);transform:translate(100%,0)}100%{-webkit-transform:translate(0,0);transform:translate(0,0)}}@keyframes rtl-drawer-in{0%{-webkit-transform:translate(100%,0);transform:translate(100%,0)}100%{-webkit-transform:translate(0,0);transform:translate(0,0)}}@-webkit-keyframes rtl-drawer-out{0%{-webkit-transform:translate(0,0);transform:translate(0,0)}100%{-webkit-transform:translate(100%,0);transform:translate(100%,0)}}@keyframes rtl-drawer-out{0%{-webkit-transform:translate(0,0);transform:translate(0,0)}100%{-webkit-transform:translate(100%,0);transform:translate(100%,0)}}@-webkit-keyframes ltr-drawer-in{0%{-webkit-transform:translate(-100%,0);transform:translate(-100%,0)}100%{-webkit-transform:translate(0,0);transform:translate(0,0)}}@keyframes ltr-drawer-in{0%{-webkit-transform:translate(-100%,0);transform:translate(-100%,0)}100%{-webkit-transform:translate(0,0);transform:translate(0,0)}}@-webkit-keyframes ltr-drawer-out{0%{-webkit-transform:translate(0,0);transform:translate(0,0)}100%{-webkit-transform:translate(-100%,0);transform:translate(-100%,0)}}@keyframes ltr-drawer-out{0%{-webkit-transform:translate(0,0);transform:translate(0,0)}100%{-webkit-transform:translate(-100%,0);transform:translate(-100%,0)}}@-webkit-keyframes ttb-drawer-in{0%{-webkit-transform:translate(0,-100%);transform:translate(0,-100%)}100%{-webkit-transform:translate(0,0);transform:translate(0,0)}}@keyframes ttb-drawer-in{0%{-webkit-transform:translate(0,-100%);transform:translate(0,-100%)}100%{-webkit-transform:translate(0,0);transform:translate(0,0)}}@-webkit-keyframes ttb-drawer-out{0%{-webkit-transform:translate(0,0);transform:translate(0,0)}100%{-webkit-transform:translate(0,-100%);transform:translate(0,-100%)}}@keyframes ttb-drawer-out{0%{-webkit-transform:translate(0,0);transform:translate(0,0)}100%{-webkit-transform:translate(0,-100%);transform:translate(0,-100%)}}@-webkit-keyframes btt-drawer-in{0%{-webkit-transform:translate(0,100%);transform:translate(0,100%)}100%{-webkit-transform:translate(0,0);transform:translate(0,0)}}@keyframes btt-drawer-in{0%{-webkit-transform:translate(0,100%);transform:translate(0,100%)}100%{-webkit-transform:translate(0,0);transform:translate(0,0)}}@-webkit-keyframes btt-drawer-out{0%{-webkit-transform:translate(0,0);transform:translate(0,0)}100%{-webkit-transform:translate(0,100%);transform:translate(0,100%)}}@keyframes btt-drawer-out{0%{-webkit-transform:translate(0,0);transform:translate(0,0)}100%{-webkit-transform:translate(0,100%);transform:translate(0,100%)}}.el-drawer{position:absolute;box-sizing:border-box;background-color:#FFF;display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;-webkit-box-shadow:0 8px 10px -5px rgba(0,0,0,.2),0 16px 24px 2px rgba(0,0,0,.14),0 6px 30px 5px rgba(0,0,0,.12);box-shadow:0 8px 10px -5px rgba(0,0,0,.2),0 16px 24px 2px rgba(0,0,0,.14),0 6px 30px 5px rgba(0,0,0,.12);overflow:hidden;outline:0}.el-drawer.rtl{-webkit-animation:rtl-drawer-out .3s;animation:rtl-drawer-out .3s;right:0}.el-drawer__open .el-drawer.rtl{-webkit-animation:rtl-drawer-in .3s 1ms;animation:rtl-drawer-in .3s 1ms}.el-drawer.ltr{-webkit-animation:ltr-drawer-out .3s;animation:ltr-drawer-out .3s;left:0}.el-drawer__open .el-drawer.ltr{-webkit-animation:ltr-drawer-in .3s 1ms;animation:ltr-drawer-in .3s 1ms}.el-drawer.ttb{-webkit-animation:ttb-drawer-out .3s;animation:ttb-drawer-out .3s;top:0}.el-drawer__open .el-drawer.ttb{-webkit-animation:ttb-drawer-in .3s 1ms;animation:ttb-drawer-in .3s 1ms}.el-drawer.btt{-webkit-animation:btt-drawer-out .3s;animation:btt-drawer-out .3s;bottom:0}.el-drawer__open .el-drawer.btt{-webkit-animation:btt-drawer-in .3s 1ms;animation:btt-drawer-in .3s 1ms}.el-drawer__wrapper{position:fixed;top:0;right:0;bottom:0;left:0;overflow:hidden;margin:0}.el-drawer__header{-webkit-box-align:center;-ms-flex-align:center;align-items:center;color:#72767b;display:-webkit-box;display:-ms-flexbox;display:flex;margin-bottom:32px;padding:20px 20px 0}.el-drawer__header>:first-child{-webkit-box-flex:1;-ms-flex:1;flex:1}.el-drawer__title{margin:0;-webkit-box-flex:1;-ms-flex:1;flex:1;line-height:inherit;font-size:1rem}.el-drawer__close-btn{border:none;cursor:pointer;font-size:20px;color:inherit;background-color:transparent}.el-drawer__body{-webkit-box-flex:1;-ms-flex:1;flex:1;overflow:auto}.el-drawer__body>*{box-sizing:border-box}.el-drawer.ltr,.el-drawer.rtl{height:100%;top:0;bottom:0}.el-drawer.btt,.el-drawer.ttb{width:100%;left:0;right:0}.el-drawer__container{position:relative;left:0;right:0;top:0;bottom:0;height:100%;width:100%}.el-drawer-fade-enter-active{-webkit-animation:el-drawer-fade-in .3s;animation:el-drawer-fade-in .3s}.el-drawer-fade-leave-active{animation:el-drawer-fade-in .3s reverse}.el-statistic{width:100%;-webkit-box-sizing:border-box;box-sizing:border-box;margin:0;padding:0;color:#000;font-variant:tabular-nums;list-style:none;-webkit-font-feature-settings:"tnum";font-feature-settings:"tnum";text-align:center}.el-statistic .head{margin-bottom:4px;color:#606266;font-size:13px}.el-statistic .con{font-family:Sans-serif;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;color:#303133}.el-statistic .con .number{font-size:20px;padding:0 4px}.el-statistic .con span{display:inline-block;margin:0;line-height:100%}.el-popconfirm__main,.el-skeleton__image{display:-ms-flexbox;-webkit-box-align:center;display:-webkit-box}.el-popconfirm__main{display:flex;-ms-flex-align:center;align-items:center}.el-popconfirm__icon{margin-right:5px}.el-popconfirm__action{text-align:right;margin:0}@-webkit-keyframes el-skeleton-loading{0%{background-position:100% 50%}100%{background-position:0 50%}}@keyframes el-skeleton-loading{0%{background-position:100% 50%}100%{background-position:0 50%}}.el-skeleton{width:100%}.el-skeleton__first-line,.el-skeleton__paragraph{height:16px;margin-top:16px;background:#f2f2f2}.el-skeleton.is-animated .el-skeleton__item{background:-webkit-gradient(linear,left top,right top,color-stop(25%,#f2f2f2),color-stop(37%,#e6e6e6),color-stop(63%,#f2f2f2));background:linear-gradient(90deg,#f2f2f2 25%,#e6e6e6 37%,#f2f2f2 63%);background-size:400% 100%;-webkit-animation:el-skeleton-loading 1.4s ease infinite;animation:el-skeleton-loading 1.4s ease infinite}.el-skeleton__item{background:#f2f2f2;display:inline-block;height:16px;border-radius:4px;width:100%}.el-skeleton__circle{border-radius:50%;width:36px;height:36px;line-height:36px}.el-skeleton__circle--lg{width:40px;height:40px;line-height:40px}.el-skeleton__circle--md{width:28px;height:28px;line-height:28px}.el-skeleton__button{height:40px;width:64px;border-radius:4px}.el-skeleton__p{width:100%}.el-skeleton__p.is-last{width:61%}.el-skeleton__p.is-first{width:33%}.el-skeleton__text{width:100%;height:13px}.el-skeleton__caption{height:12px}.el-skeleton__h1{height:20px}.el-skeleton__h3{height:18px}.el-skeleton__h5{height:16px}.el-skeleton__image{width:unset;display:flex;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;border-radius:0}.el-skeleton__image svg{fill:#DCDDE0;width:22%;height:22%}.el-empty{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-ms-flex-direction:column;flex-direction:column;text-align:center;-webkit-box-sizing:border-box;box-sizing:border-box;padding:40px 0}.el-empty__image{width:160px}.el-empty__image img{user-select:none;-o-object-fit:contain;object-fit:contain}.el-empty__image svg{fill:#DCDDE0}.el-empty__description{margin-top:20px}.el-empty__description p{margin:0;font-size:14px;color:#909399}.el-empty__bottom,.el-result__title{margin-top:20px}.el-descriptions{-webkit-box-sizing:border-box;box-sizing:border-box;font-size:14px;color:#303133}.el-descriptions__header{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;-webkit-box-align:center;-ms-flex-align:center;align-items:center;margin-bottom:20px}.el-descriptions__title{font-size:16px;font-weight:700}.el-descriptions--mini,.el-descriptions--small{font-size:12px}.el-descriptions__body{color:#606266;background-color:#FFF}.el-descriptions__body .el-descriptions__table{border-collapse:collapse;width:100%;table-layout:fixed}.el-descriptions__body .el-descriptions__table .el-descriptions-item__cell{-webkit-box-sizing:border-box;box-sizing:border-box;text-align:left;font-weight:400;line-height:1.5}.el-descriptions__body .el-descriptions__table .el-descriptions-item__cell.is-left{text-align:left}.el-descriptions__body .el-descriptions__table .el-descriptions-item__cell.is-center{text-align:center}.el-descriptions__body .el-descriptions__table .el-descriptions-item__cell.is-right{text-align:right}.el-descriptions .is-bordered{table-layout:auto}.el-descriptions .is-bordered .el-descriptions-item__cell{border:1px solid #EBEEF5;padding:12px 10px}.el-descriptions :not(.is-bordered) .el-descriptions-item__cell{padding-bottom:12px}.el-descriptions--medium.is-bordered .el-descriptions-item__cell{padding:10px}.el-descriptions--medium:not(.is-bordered) .el-descriptions-item__cell{padding-bottom:10px}.el-descriptions--small.is-bordered .el-descriptions-item__cell{padding:8px 10px}.el-descriptions--small:not(.is-bordered) .el-descriptions-item__cell{padding-bottom:8px}.el-descriptions--mini.is-bordered .el-descriptions-item__cell{padding:6px 10px}.el-descriptions--mini:not(.is-bordered) .el-descriptions-item__cell{padding-bottom:6px}.el-descriptions-item{vertical-align:top}.el-descriptions-item__container{display:-webkit-box;display:-ms-flexbox;display:flex}.el-descriptions-item__container .el-descriptions-item__content,.el-descriptions-item__container .el-descriptions-item__label{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-align:baseline;-ms-flex-align:baseline;align-items:baseline}.el-descriptions-item__container .el-descriptions-item__content{-webkit-box-flex:1;-ms-flex:1;flex:1}.el-descriptions-item__label.has-colon::after{content:':';position:relative;top:-.5px}.el-descriptions-item__label.is-bordered-label{font-weight:700;color:#909399;background:#fafafa}.el-descriptions-item__label:not(.is-bordered-label){margin-right:10px}.el-descriptions-item__content{word-break:break-word;overflow-wrap:break-word}.el-result{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-ms-flex-direction:column;flex-direction:column;text-align:center;-webkit-box-sizing:border-box;box-sizing:border-box;padding:40px 30px}.el-result__icon svg{width:64px;height:64px}.el-result__title p{margin:0;font-size:20px;color:#303133;line-height:1.3}.el-result__subtitle{margin-top:10px}.el-result__subtitle p{margin:0;font-size:14px;color:#606266;line-height:1.3}.el-result__extra{margin-top:30px}.el-result .icon-success{fill:#67C23A}.el-result .icon-error{fill:#F56C6C}.el-result .icon-info{fill:#909399}.el-result .icon-warning{fill:#E6A23C} \ No newline at end of file diff --git a/src/web/elementui/index.js b/src/web/elementui/index.js new file mode 100644 index 0000000..72c375e --- /dev/null +++ b/src/web/elementui/index.js @@ -0,0 +1,34986 @@ +!function(e, t) { + "object" == typeof exports && "object" == typeof module ? module.exports = t(require("vue")) : "function" == typeof define && define.amd ? define("ELEMENT", ["vue"], t) : "object" == typeof exports ? exports.ELEMENT = t(require("vue")) : e.ELEMENT = t(e.Vue) +}("undefined" != typeof self ? self : this, function(e) { + return function(e) { + var t = {}; + function n(i) { + if (t[i]) + return t[i].exports; + var r = t[i] = { + i: i, + l: !1, + exports: {} + }; + return e[i].call(r.exports, r, r.exports, n), + r.l = !0, + r.exports + } + return n.m = e, + n.c = t, + n.d = function(e, t, i) { + n.o(e, t) || Object.defineProperty(e, t, { + enumerable: !0, + get: i + }) + } + , + n.r = function(e) { + "undefined" != typeof Symbol && Symbol.toStringTag && Object.defineProperty(e, Symbol.toStringTag, { + value: "Module" + }), + Object.defineProperty(e, "__esModule", { + value: !0 + }) + } + , + n.t = function(e, t) { + if (1 & t && (e = n(e)), + 8 & t) + return e; + if (4 & t && "object" == typeof e && e && e.__esModule) + return e; + var i = Object.create(null); + if (n.r(i), + Object.defineProperty(i, "default", { + enumerable: !0, + value: e + }), + 2 & t && "string" != typeof e) + for (var r in e) + n.d(i, r, function(t) { + return e[t] + } + .bind(null, r)); + return i + } + , + n.n = function(e) { + var t = e && e.__esModule ? function() { + return e.default + } + : function() { + return e + } + ; + return n.d(t, "a", t), + t + } + , + n.o = function(e, t) { + return Object.prototype.hasOwnProperty.call(e, t) + } + , + n.p = "/dist/", + n(n.s = 51) + }([function(t, n) { + t.exports = e + } + , function(e, t, n) { + var i = n(4); + e.exports = function(e, t, n) { + return void 0 === n ? i(e, t, !1) : i(e, n, !1 !== t) + } + } + , function(e, t, n) { + var i; + !function(r) { + "use strict"; + var o = {} + , s = /d{1,4}|M{1,4}|yy(?:yy)?|S{1,3}|Do|ZZ|([HhMsDm])\1?|[aA]|"[^"]*"|'[^']*'/g + , a = "[^\\s]+" + , l = /\[([^]*?)\]/gm + , u = function() {}; + function c(e, t) { + for (var n = [], i = 0, r = e.length; i < r; i++) + n.push(e[i].substr(0, t)); + return n + } + function h(e) { + return function(t, n, i) { + var r = i[e].indexOf(n.charAt(0).toUpperCase() + n.substr(1).toLowerCase()); + ~r && (t.month = r) + } + } + function d(e, t) { + for (e = String(e), + t = t || 2; e.length < t; ) + e = "0" + e; + return e + } + var f = ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"] + , p = ["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"] + , m = c(p, 3) + , v = c(f, 3); + o.i18n = { + dayNamesShort: v, + dayNames: f, + monthNamesShort: m, + monthNames: p, + amPm: ["am", "pm"], + DoFn: function(e) { + return e + ["th", "st", "nd", "rd"][e % 10 > 3 ? 0 : (e - e % 10 != 10) * e % 10] + } + }; + var g = { + D: function(e) { + return e.getDay() + }, + DD: function(e) { + return d(e.getDay()) + }, + Do: function(e, t) { + return t.DoFn(e.getDate()) + }, + d: function(e) { + return e.getDate() + }, + dd: function(e) { + return d(e.getDate()) + }, + ddd: function(e, t) { + return t.dayNamesShort[e.getDay()] + }, + dddd: function(e, t) { + return t.dayNames[e.getDay()] + }, + M: function(e) { + return e.getMonth() + 1 + }, + MM: function(e) { + return d(e.getMonth() + 1) + }, + MMM: function(e, t) { + return t.monthNamesShort[e.getMonth()] + }, + MMMM: function(e, t) { + return t.monthNames[e.getMonth()] + }, + yy: function(e) { + return d(String(e.getFullYear()), 4).substr(2) + }, + yyyy: function(e) { + return d(e.getFullYear(), 4) + }, + h: function(e) { + return e.getHours() % 12 || 12 + }, + hh: function(e) { + return d(e.getHours() % 12 || 12) + }, + H: function(e) { + return e.getHours() + }, + HH: function(e) { + return d(e.getHours()) + }, + m: function(e) { + return e.getMinutes() + }, + mm: function(e) { + return d(e.getMinutes()) + }, + s: function(e) { + return e.getSeconds() + }, + ss: function(e) { + return d(e.getSeconds()) + }, + S: function(e) { + return Math.round(e.getMilliseconds() / 100) + }, + SS: function(e) { + return d(Math.round(e.getMilliseconds() / 10), 2) + }, + SSS: function(e) { + return d(e.getMilliseconds(), 3) + }, + a: function(e, t) { + return e.getHours() < 12 ? t.amPm[0] : t.amPm[1] + }, + A: function(e, t) { + return e.getHours() < 12 ? t.amPm[0].toUpperCase() : t.amPm[1].toUpperCase() + }, + ZZ: function(e) { + var t = e.getTimezoneOffset(); + return (t > 0 ? "-" : "+") + d(100 * Math.floor(Math.abs(t) / 60) + Math.abs(t) % 60, 4) + } + } + , y = { + d: ["\\d\\d?", function(e, t) { + e.day = t + } + ], + Do: ["\\d\\d?" + a, function(e, t) { + e.day = parseInt(t, 10) + } + ], + M: ["\\d\\d?", function(e, t) { + e.month = t - 1 + } + ], + yy: ["\\d\\d?", function(e, t) { + var n = +("" + (new Date).getFullYear()).substr(0, 2); + e.year = "" + (t > 68 ? n - 1 : n) + t + } + ], + h: ["\\d\\d?", function(e, t) { + e.hour = t + } + ], + m: ["\\d\\d?", function(e, t) { + e.minute = t + } + ], + s: ["\\d\\d?", function(e, t) { + e.second = t + } + ], + yyyy: ["\\d{4}", function(e, t) { + e.year = t + } + ], + S: ["\\d", function(e, t) { + e.millisecond = 100 * t + } + ], + SS: ["\\d{2}", function(e, t) { + e.millisecond = 10 * t + } + ], + SSS: ["\\d{3}", function(e, t) { + e.millisecond = t + } + ], + D: ["\\d\\d?", u], + ddd: [a, u], + MMM: [a, h("monthNamesShort")], + MMMM: [a, h("monthNames")], + a: [a, function(e, t, n) { + var i = t.toLowerCase(); + i === n.amPm[0] ? e.isPm = !1 : i === n.amPm[1] && (e.isPm = !0) + } + ], + ZZ: ["[^\\s]*?[\\+\\-]\\d\\d:?\\d\\d|[^\\s]*?Z", function(e, t) { + var n, i = (t + "").match(/([+-]|\d\d)/gi); + i && (n = 60 * i[1] + parseInt(i[2], 10), + e.timezoneOffset = "+" === i[0] ? n : -n) + } + ] + }; + y.dd = y.d, + y.dddd = y.ddd, + y.DD = y.D, + y.mm = y.m, + y.hh = y.H = y.HH = y.h, + y.MM = y.M, + y.ss = y.s, + y.A = y.a, + o.masks = { + default: "ddd MMM dd yyyy HH:mm:ss", + shortDate: "M/D/yy", + mediumDate: "MMM d, yyyy", + longDate: "MMMM d, yyyy", + fullDate: "dddd, MMMM d, yyyy", + shortTime: "HH:mm", + mediumTime: "HH:mm:ss", + longTime: "HH:mm:ss.SSS" + }, + o.format = function(e, t, n) { + var i = n || o.i18n; + if ("number" == typeof e && (e = new Date(e)), + "[object Date]" !== Object.prototype.toString.call(e) || isNaN(e.getTime())) + throw new Error("Invalid Date in fecha.format"); + t = o.masks[t] || t || o.masks.default; + var r = []; + return (t = (t = t.replace(l, function(e, t) { + return r.push(t), + "@@@" + })).replace(s, function(t) { + return t in g ? g[t](e, i) : t.slice(1, t.length - 1) + })).replace(/@@@/g, function() { + return r.shift() + }) + } + , + o.parse = function(e, t, n) { + var i = n || o.i18n; + if ("string" != typeof t) + throw new Error("Invalid format in fecha.parse"); + if (t = o.masks[t] || t, + e.length > 1e3) + return null; + var r = {} + , a = [] + , u = []; + t = t.replace(l, function(e, t) { + return u.push(t), + "@@@" + }); + var c, h = (c = t, + c.replace(/[|\\{()[^$+*?.-]/g, "\\$&")).replace(s, function(e) { + if (y[e]) { + var t = y[e]; + return a.push(t[1]), + "(" + t[0] + ")" + } + return e + }); + h = h.replace(/@@@/g, function() { + return u.shift() + }); + var d = e.match(new RegExp(h,"i")); + if (!d) + return null; + for (var f = 1; f < d.length; f++) + a[f - 1](r, d[f], i); + var p, m = new Date; + return !0 === r.isPm && null != r.hour && 12 != +r.hour ? r.hour = +r.hour + 12 : !1 === r.isPm && 12 == +r.hour && (r.hour = 0), + null != r.timezoneOffset ? (r.minute = +(r.minute || 0) - +r.timezoneOffset, + p = new Date(Date.UTC(r.year || m.getFullYear(), r.month || 0, r.day || 1, r.hour || 0, r.minute || 0, r.second || 0, r.millisecond || 0))) : p = new Date(r.year || m.getFullYear(),r.month || 0,r.day || 1,r.hour || 0,r.minute || 0,r.second || 0,r.millisecond || 0), + p + } + , + e.exports ? e.exports = o : void 0 === (i = function() { + return o + } + .call(t, n, t, e)) || (e.exports = i) + }() + } + , function(e, t, n) { + "use strict"; + t.__esModule = !0; + var i = s(n(66)) + , r = s(n(78)) + , o = "function" == typeof r.default && "symbol" == typeof i.default ? function(e) { + return typeof e + } + : function(e) { + return e && "function" == typeof r.default && e.constructor === r.default && e !== r.default.prototype ? "symbol" : typeof e + } + ; + function s(e) { + return e && e.__esModule ? e : { + default: e + } + } + t.default = "function" == typeof r.default && "symbol" === o(i.default) ? function(e) { + return void 0 === e ? "undefined" : o(e) + } + : function(e) { + return e && "function" == typeof r.default && e.constructor === r.default && e !== r.default.prototype ? "symbol" : void 0 === e ? "undefined" : o(e) + } + } + , function(e, t) { + e.exports = function(e, t, n, i) { + var r, o = 0; + return "boolean" != typeof t && (i = n, + n = t, + t = void 0), + function() { + var s = this + , a = Number(new Date) - o + , l = arguments; + function u() { + o = Number(new Date), + n.apply(s, l) + } + i && !r && u(), + r && clearTimeout(r), + void 0 === i && a > e ? u() : !0 !== t && (r = setTimeout(i ? function() { + r = void 0 + } + : u, void 0 === i ? e - a : e)) + } + } + } + , function(e, t) { + var n = e.exports = "undefined" != typeof window && window.Math == Math ? window : "undefined" != typeof self && self.Math == Math ? self : Function("return this")(); + "number" == typeof __g && (__g = n) + } + , function(e, t) { + var n = /^(attrs|props|on|nativeOn|class|style|hook)$/; + function i(e, t) { + return function() { + e && e.apply(this, arguments), + t && t.apply(this, arguments) + } + } + e.exports = function(e) { + return e.reduce(function(e, t) { + var r, o, s, a, l; + for (s in t) + if (r = e[s], + o = t[s], + r && n.test(s)) + if ("class" === s && ("string" == typeof r && (l = r, + e[s] = r = {}, + r[l] = !0), + "string" == typeof o && (l = o, + t[s] = o = {}, + o[l] = !0)), + "on" === s || "nativeOn" === s || "hook" === s) + for (a in o) + r[a] = i(r[a], o[a]); + else if (Array.isArray(r)) + e[s] = r.concat(o); + else if (Array.isArray(o)) + e[s] = [r].concat(o); + else + for (a in o) + r[a] = o[a]; + else + e[s] = t[s]; + return e + }, {}) + } + } + , function(e, t) { + var n = {}.hasOwnProperty; + e.exports = function(e, t) { + return n.call(e, t) + } + } + , function(e, t, n) { + "use strict"; + t.__esModule = !0; + var i, r = n(57), o = (i = r) && i.__esModule ? i : { + default: i + }; + t.default = o.default || function(e) { + for (var t = 1; t < arguments.length; t++) { + var n = arguments[t]; + for (var i in n) + Object.prototype.hasOwnProperty.call(n, i) && (e[i] = n[i]) + } + return e + } + } + , function(e, t, n) { + var i = n(10) + , r = n(20); + e.exports = n(11) ? function(e, t, n) { + return i.f(e, t, r(1, n)) + } + : function(e, t, n) { + return e[t] = n, + e + } + } + , function(e, t, n) { + var i = n(19) + , r = n(38) + , o = n(26) + , s = Object.defineProperty; + t.f = n(11) ? Object.defineProperty : function(e, t, n) { + if (i(e), + t = o(t, !0), + i(n), + r) + try { + return s(e, t, n) + } catch (e) {} + if ("get"in n || "set"in n) + throw TypeError("Accessors not supported!"); + return "value"in n && (e[t] = n.value), + e + } + } + , function(e, t, n) { + e.exports = !n(17)(function() { + return 7 != Object.defineProperty({}, "a", { + get: function() { + return 7 + } + }).a + }) + } + , function(e, t, n) { + var i = n(41) + , r = n(27); + e.exports = function(e) { + return i(r(e)) + } + } + , function(e, t, n) { + var i = n(30)("wks") + , r = n(23) + , o = n(5).Symbol + , s = "function" == typeof o; + (e.exports = function(e) { + return i[e] || (i[e] = s && o[e] || (s ? o : r)("Symbol." + e)) + } + ).store = i + } + , function(e, t, n) { + (function(e, i) { + var r; + (function() { + var o, s = 200, a = "Unsupported core-js use. Try https://npms.io/search?q=ponyfill.", l = "Expected a function", u = "__lodash_hash_undefined__", c = 500, h = "__lodash_placeholder__", d = 1, f = 2, p = 4, m = 1, v = 2, g = 1, y = 2, b = 4, _ = 8, w = 16, x = 32, C = 64, k = 128, S = 256, D = 512, E = 30, $ = "...", T = 800, M = 16, N = 1, O = 2, P = 1 / 0, I = 9007199254740991, A = 1.7976931348623157e308, F = NaN, L = 4294967295, V = L - 1, B = L >>> 1, z = [["ary", k], ["bind", g], ["bindKey", y], ["curry", _], ["curryRight", w], ["flip", D], ["partial", x], ["partialRight", C], ["rearg", S]], R = "[object Arguments]", H = "[object Array]", j = "[object AsyncFunction]", W = "[object Boolean]", q = "[object Date]", Y = "[object DOMException]", K = "[object Error]", U = "[object Function]", G = "[object GeneratorFunction]", X = "[object Map]", Z = "[object Number]", J = "[object Null]", Q = "[object Object]", ee = "[object Proxy]", te = "[object RegExp]", ne = "[object Set]", ie = "[object String]", re = "[object Symbol]", oe = "[object Undefined]", se = "[object WeakMap]", ae = "[object WeakSet]", le = "[object ArrayBuffer]", ue = "[object DataView]", ce = "[object Float32Array]", he = "[object Float64Array]", de = "[object Int8Array]", fe = "[object Int16Array]", pe = "[object Int32Array]", me = "[object Uint8Array]", ve = "[object Uint8ClampedArray]", ge = "[object Uint16Array]", ye = "[object Uint32Array]", be = /\b__p \+= '';/g, _e = /\b(__p \+=) '' \+/g, we = /(__e\(.*?\)|\b__t\)) \+\n'';/g, xe = /&(?:amp|lt|gt|quot|#39);/g, Ce = /[&<>"']/g, ke = RegExp(xe.source), Se = RegExp(Ce.source), De = /<%-([\s\S]+?)%>/g, Ee = /<%([\s\S]+?)%>/g, $e = /<%=([\s\S]+?)%>/g, Te = /\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/, Me = /^\w*$/, Ne = /[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g, Oe = /[\\^$.*+?()[\]{}|]/g, Pe = RegExp(Oe.source), Ie = /^\s+|\s+$/g, Ae = /^\s+/, Fe = /\s+$/, Le = /\{(?:\n\/\* \[wrapped with .+\] \*\/)?\n?/, Ve = /\{\n\/\* \[wrapped with (.+)\] \*/, Be = /,? & /, ze = /[^\x00-\x2f\x3a-\x40\x5b-\x60\x7b-\x7f]+/g, Re = /\\(\\)?/g, He = /\$\{([^\\}]*(?:\\.[^\\}]*)*)\}/g, je = /\w*$/, We = /^[-+]0x[0-9a-f]+$/i, qe = /^0b[01]+$/i, Ye = /^\[object .+?Constructor\]$/, Ke = /^0o[0-7]+$/i, Ue = /^(?:0|[1-9]\d*)$/, Ge = /[\xc0-\xd6\xd8-\xf6\xf8-\xff\u0100-\u017f]/g, Xe = /($^)/, Ze = /['\n\r\u2028\u2029\\]/g, Je = "\\u0300-\\u036f\\ufe20-\\ufe2f\\u20d0-\\u20ff", Qe = "\\xac\\xb1\\xd7\\xf7\\x00-\\x2f\\x3a-\\x40\\x5b-\\x60\\x7b-\\xbf\\u2000-\\u206f \\t\\x0b\\f\\xa0\\ufeff\\n\\r\\u2028\\u2029\\u1680\\u180e\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200a\\u202f\\u205f\\u3000", et = "[\\ud800-\\udfff]", tt = "[" + Qe + "]", nt = "[" + Je + "]", it = "\\d+", rt = "[\\u2700-\\u27bf]", ot = "[a-z\\xdf-\\xf6\\xf8-\\xff]", st = "[^\\ud800-\\udfff" + Qe + it + "\\u2700-\\u27bfa-z\\xdf-\\xf6\\xf8-\\xffA-Z\\xc0-\\xd6\\xd8-\\xde]", at = "\\ud83c[\\udffb-\\udfff]", lt = "[^\\ud800-\\udfff]", ut = "(?:\\ud83c[\\udde6-\\uddff]){2}", ct = "[\\ud800-\\udbff][\\udc00-\\udfff]", ht = "[A-Z\\xc0-\\xd6\\xd8-\\xde]", dt = "(?:" + ot + "|" + st + ")", ft = "(?:" + ht + "|" + st + ")", pt = "(?:" + nt + "|" + at + ")" + "?", mt = "[\\ufe0e\\ufe0f]?" + pt + ("(?:\\u200d(?:" + [lt, ut, ct].join("|") + ")[\\ufe0e\\ufe0f]?" + pt + ")*"), vt = "(?:" + [rt, ut, ct].join("|") + ")" + mt, gt = "(?:" + [lt + nt + "?", nt, ut, ct, et].join("|") + ")", yt = RegExp("['’]", "g"), bt = RegExp(nt, "g"), _t = RegExp(at + "(?=" + at + ")|" + gt + mt, "g"), wt = RegExp([ht + "?" + ot + "+(?:['’](?:d|ll|m|re|s|t|ve))?(?=" + [tt, ht, "$"].join("|") + ")", ft + "+(?:['’](?:D|LL|M|RE|S|T|VE))?(?=" + [tt, ht + dt, "$"].join("|") + ")", ht + "?" + dt + "+(?:['’](?:d|ll|m|re|s|t|ve))?", ht + "+(?:['’](?:D|LL|M|RE|S|T|VE))?", "\\d*(?:1ST|2ND|3RD|(?![123])\\dTH)(?=\\b|[a-z_])", "\\d*(?:1st|2nd|3rd|(?![123])\\dth)(?=\\b|[A-Z_])", it, vt].join("|"), "g"), xt = RegExp("[\\u200d\\ud800-\\udfff" + Je + "\\ufe0e\\ufe0f]"), Ct = /[a-z][A-Z]|[A-Z]{2,}[a-z]|[0-9][a-zA-Z]|[a-zA-Z][0-9]|[^a-zA-Z0-9 ]/, kt = ["Array", "Buffer", "DataView", "Date", "Error", "Float32Array", "Float64Array", "Function", "Int8Array", "Int16Array", "Int32Array", "Map", "Math", "Object", "Promise", "RegExp", "Set", "String", "Symbol", "TypeError", "Uint8Array", "Uint8ClampedArray", "Uint16Array", "Uint32Array", "WeakMap", "_", "clearTimeout", "isFinite", "parseInt", "setTimeout"], St = -1, Dt = {}; + Dt[ce] = Dt[he] = Dt[de] = Dt[fe] = Dt[pe] = Dt[me] = Dt[ve] = Dt[ge] = Dt[ye] = !0, + Dt[R] = Dt[H] = Dt[le] = Dt[W] = Dt[ue] = Dt[q] = Dt[K] = Dt[U] = Dt[X] = Dt[Z] = Dt[Q] = Dt[te] = Dt[ne] = Dt[ie] = Dt[se] = !1; + var Et = {}; + Et[R] = Et[H] = Et[le] = Et[ue] = Et[W] = Et[q] = Et[ce] = Et[he] = Et[de] = Et[fe] = Et[pe] = Et[X] = Et[Z] = Et[Q] = Et[te] = Et[ne] = Et[ie] = Et[re] = Et[me] = Et[ve] = Et[ge] = Et[ye] = !0, + Et[K] = Et[U] = Et[se] = !1; + var $t = { + "\\": "\\", + "'": "'", + "\n": "n", + "\r": "r", + "\u2028": "u2028", + "\u2029": "u2029" + } + , Tt = parseFloat + , Mt = parseInt + , Nt = "object" == typeof e && e && e.Object === Object && e + , Ot = "object" == typeof self && self && self.Object === Object && self + , Pt = Nt || Ot || Function("return this")() + , It = t && !t.nodeType && t + , At = It && "object" == typeof i && i && !i.nodeType && i + , Ft = At && At.exports === It + , Lt = Ft && Nt.process + , Vt = function() { + try { + var e = At && At.require && At.require("util").types; + return e || Lt && Lt.binding && Lt.binding("util") + } catch (e) {} + }() + , Bt = Vt && Vt.isArrayBuffer + , zt = Vt && Vt.isDate + , Rt = Vt && Vt.isMap + , Ht = Vt && Vt.isRegExp + , jt = Vt && Vt.isSet + , Wt = Vt && Vt.isTypedArray; + function qt(e, t, n) { + switch (n.length) { + case 0: + return e.call(t); + case 1: + return e.call(t, n[0]); + case 2: + return e.call(t, n[0], n[1]); + case 3: + return e.call(t, n[0], n[1], n[2]) + } + return e.apply(t, n) + } + function Yt(e, t, n, i) { + for (var r = -1, o = null == e ? 0 : e.length; ++r < o; ) { + var s = e[r]; + t(i, s, n(s), e) + } + return i + } + function Kt(e, t) { + for (var n = -1, i = null == e ? 0 : e.length; ++n < i && !1 !== t(e[n], n, e); ) + ; + return e + } + function Ut(e, t) { + for (var n = null == e ? 0 : e.length; n-- && !1 !== t(e[n], n, e); ) + ; + return e + } + function Gt(e, t) { + for (var n = -1, i = null == e ? 0 : e.length; ++n < i; ) + if (!t(e[n], n, e)) + return !1; + return !0 + } + function Xt(e, t) { + for (var n = -1, i = null == e ? 0 : e.length, r = 0, o = []; ++n < i; ) { + var s = e[n]; + t(s, n, e) && (o[r++] = s) + } + return o + } + function Zt(e, t) { + return !!(null == e ? 0 : e.length) && ln(e, t, 0) > -1 + } + function Jt(e, t, n) { + for (var i = -1, r = null == e ? 0 : e.length; ++i < r; ) + if (n(t, e[i])) + return !0; + return !1 + } + function Qt(e, t) { + for (var n = -1, i = null == e ? 0 : e.length, r = Array(i); ++n < i; ) + r[n] = t(e[n], n, e); + return r + } + function en(e, t) { + for (var n = -1, i = t.length, r = e.length; ++n < i; ) + e[r + n] = t[n]; + return e + } + function tn(e, t, n, i) { + var r = -1 + , o = null == e ? 0 : e.length; + for (i && o && (n = e[++r]); ++r < o; ) + n = t(n, e[r], r, e); + return n + } + function nn(e, t, n, i) { + var r = null == e ? 0 : e.length; + for (i && r && (n = e[--r]); r--; ) + n = t(n, e[r], r, e); + return n + } + function rn(e, t) { + for (var n = -1, i = null == e ? 0 : e.length; ++n < i; ) + if (t(e[n], n, e)) + return !0; + return !1 + } + var on = dn("length"); + function sn(e, t, n) { + var i; + return n(e, function(e, n, r) { + if (t(e, n, r)) + return i = n, + !1 + }), + i + } + function an(e, t, n, i) { + for (var r = e.length, o = n + (i ? 1 : -1); i ? o-- : ++o < r; ) + if (t(e[o], o, e)) + return o; + return -1 + } + function ln(e, t, n) { + return t == t ? function(e, t, n) { + var i = n - 1 + , r = e.length; + for (; ++i < r; ) + if (e[i] === t) + return i; + return -1 + }(e, t, n) : an(e, cn, n) + } + function un(e, t, n, i) { + for (var r = n - 1, o = e.length; ++r < o; ) + if (i(e[r], t)) + return r; + return -1 + } + function cn(e) { + return e != e + } + function hn(e, t) { + var n = null == e ? 0 : e.length; + return n ? mn(e, t) / n : F + } + function dn(e) { + return function(t) { + return null == t ? o : t[e] + } + } + function fn(e) { + return function(t) { + return null == e ? o : e[t] + } + } + function pn(e, t, n, i, r) { + return r(e, function(e, r, o) { + n = i ? (i = !1, + e) : t(n, e, r, o) + }), + n + } + function mn(e, t) { + for (var n, i = -1, r = e.length; ++i < r; ) { + var s = t(e[i]); + s !== o && (n = n === o ? s : n + s) + } + return n + } + function vn(e, t) { + for (var n = -1, i = Array(e); ++n < e; ) + i[n] = t(n); + return i + } + function gn(e) { + return function(t) { + return e(t) + } + } + function yn(e, t) { + return Qt(t, function(t) { + return e[t] + }) + } + function bn(e, t) { + return e.has(t) + } + function _n(e, t) { + for (var n = -1, i = e.length; ++n < i && ln(t, e[n], 0) > -1; ) + ; + return n + } + function wn(e, t) { + for (var n = e.length; n-- && ln(t, e[n], 0) > -1; ) + ; + return n + } + var xn = fn({ + "À": "A", + "Á": "A", + "Â": "A", + "Ã": "A", + "Ä": "A", + "Å": "A", + "à": "a", + "á": "a", + "â": "a", + "ã": "a", + "ä": "a", + "å": "a", + "Ç": "C", + "ç": "c", + "Ð": "D", + "ð": "d", + "È": "E", + "É": "E", + "Ê": "E", + "Ë": "E", + "è": "e", + "é": "e", + "ê": "e", + "ë": "e", + "Ì": "I", + "Í": "I", + "Î": "I", + "Ï": "I", + "ì": "i", + "í": "i", + "î": "i", + "ï": "i", + "Ñ": "N", + "ñ": "n", + "Ò": "O", + "Ó": "O", + "Ô": "O", + "Õ": "O", + "Ö": "O", + "Ø": "O", + "ò": "o", + "ó": "o", + "ô": "o", + "õ": "o", + "ö": "o", + "ø": "o", + "Ù": "U", + "Ú": "U", + "Û": "U", + "Ü": "U", + "ù": "u", + "ú": "u", + "û": "u", + "ü": "u", + "Ý": "Y", + "ý": "y", + "ÿ": "y", + "Æ": "Ae", + "æ": "ae", + "Þ": "Th", + "þ": "th", + "ß": "ss", + "Ā": "A", + "Ă": "A", + "Ą": "A", + "ā": "a", + "ă": "a", + "ą": "a", + "Ć": "C", + "Ĉ": "C", + "Ċ": "C", + "Č": "C", + "ć": "c", + "ĉ": "c", + "ċ": "c", + "č": "c", + "Ď": "D", + "Đ": "D", + "ď": "d", + "đ": "d", + "Ē": "E", + "Ĕ": "E", + "Ė": "E", + "Ę": "E", + "Ě": "E", + "ē": "e", + "ĕ": "e", + "ė": "e", + "ę": "e", + "ě": "e", + "Ĝ": "G", + "Ğ": "G", + "Ġ": "G", + "Ģ": "G", + "ĝ": "g", + "ğ": "g", + "ġ": "g", + "ģ": "g", + "Ĥ": "H", + "Ħ": "H", + "ĥ": "h", + "ħ": "h", + "Ĩ": "I", + "Ī": "I", + "Ĭ": "I", + "Į": "I", + "İ": "I", + "ĩ": "i", + "ī": "i", + "ĭ": "i", + "į": "i", + "ı": "i", + "Ĵ": "J", + "ĵ": "j", + "Ķ": "K", + "ķ": "k", + "ĸ": "k", + "Ĺ": "L", + "Ļ": "L", + "Ľ": "L", + "Ŀ": "L", + "Ł": "L", + "ĺ": "l", + "ļ": "l", + "ľ": "l", + "ŀ": "l", + "ł": "l", + "Ń": "N", + "Ņ": "N", + "Ň": "N", + "Ŋ": "N", + "ń": "n", + "ņ": "n", + "ň": "n", + "ŋ": "n", + "Ō": "O", + "Ŏ": "O", + "Ő": "O", + "ō": "o", + "ŏ": "o", + "ő": "o", + "Ŕ": "R", + "Ŗ": "R", + "Ř": "R", + "ŕ": "r", + "ŗ": "r", + "ř": "r", + "Ś": "S", + "Ŝ": "S", + "Ş": "S", + "Š": "S", + "ś": "s", + "ŝ": "s", + "ş": "s", + "š": "s", + "Ţ": "T", + "Ť": "T", + "Ŧ": "T", + "ţ": "t", + "ť": "t", + "ŧ": "t", + "Ũ": "U", + "Ū": "U", + "Ŭ": "U", + "Ů": "U", + "Ű": "U", + "Ų": "U", + "ũ": "u", + "ū": "u", + "ŭ": "u", + "ů": "u", + "ű": "u", + "ų": "u", + "Ŵ": "W", + "ŵ": "w", + "Ŷ": "Y", + "ŷ": "y", + "Ÿ": "Y", + "Ź": "Z", + "Ż": "Z", + "Ž": "Z", + "ź": "z", + "ż": "z", + "ž": "z", + "IJ": "IJ", + "ij": "ij", + "Œ": "Oe", + "œ": "oe", + "ʼn": "'n", + "ſ": "s" + }) + , Cn = fn({ + "&": "&", + "<": "<", + ">": ">", + '"': """, + "'": "'" + }); + function kn(e) { + return "\\" + $t[e] + } + function Sn(e) { + return xt.test(e) + } + function Dn(e) { + var t = -1 + , n = Array(e.size); + return e.forEach(function(e, i) { + n[++t] = [i, e] + }), + n + } + function En(e, t) { + return function(n) { + return e(t(n)) + } + } + function $n(e, t) { + for (var n = -1, i = e.length, r = 0, o = []; ++n < i; ) { + var s = e[n]; + s !== t && s !== h || (e[n] = h, + o[r++] = n) + } + return o + } + function Tn(e, t) { + return "__proto__" == t ? o : e[t] + } + function Mn(e) { + var t = -1 + , n = Array(e.size); + return e.forEach(function(e) { + n[++t] = e + }), + n + } + function Nn(e) { + var t = -1 + , n = Array(e.size); + return e.forEach(function(e) { + n[++t] = [e, e] + }), + n + } + function On(e) { + return Sn(e) ? function(e) { + var t = _t.lastIndex = 0; + for (; _t.test(e); ) + ++t; + return t + }(e) : on(e) + } + function Pn(e) { + return Sn(e) ? function(e) { + return e.match(_t) || [] + }(e) : function(e) { + return e.split("") + }(e) + } + var In = fn({ + "&": "&", + "<": "<", + ">": ">", + """: '"', + "'": "'" + }); + var An = function e(t) { + var n, i = (t = null == t ? Pt : An.defaults(Pt.Object(), t, An.pick(Pt, kt))).Array, r = t.Date, Je = t.Error, Qe = t.Function, et = t.Math, tt = t.Object, nt = t.RegExp, it = t.String, rt = t.TypeError, ot = i.prototype, st = Qe.prototype, at = tt.prototype, lt = t["__core-js_shared__"], ut = st.toString, ct = at.hasOwnProperty, ht = 0, dt = (n = /[^.]+$/.exec(lt && lt.keys && lt.keys.IE_PROTO || "")) ? "Symbol(src)_1." + n : "", ft = at.toString, pt = ut.call(tt), mt = Pt._, vt = nt("^" + ut.call(ct).replace(Oe, "\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g, "$1.*?") + "$"), gt = Ft ? t.Buffer : o, _t = t.Symbol, xt = t.Uint8Array, $t = gt ? gt.allocUnsafe : o, Nt = En(tt.getPrototypeOf, tt), Ot = tt.create, It = at.propertyIsEnumerable, At = ot.splice, Lt = _t ? _t.isConcatSpreadable : o, Vt = _t ? _t.iterator : o, on = _t ? _t.toStringTag : o, fn = function() { + try { + var e = zo(tt, "defineProperty"); + return e({}, "", {}), + e + } catch (e) {} + }(), Fn = t.clearTimeout !== Pt.clearTimeout && t.clearTimeout, Ln = r && r.now !== Pt.Date.now && r.now, Vn = t.setTimeout !== Pt.setTimeout && t.setTimeout, Bn = et.ceil, zn = et.floor, Rn = tt.getOwnPropertySymbols, Hn = gt ? gt.isBuffer : o, jn = t.isFinite, Wn = ot.join, qn = En(tt.keys, tt), Yn = et.max, Kn = et.min, Un = r.now, Gn = t.parseInt, Xn = et.random, Zn = ot.reverse, Jn = zo(t, "DataView"), Qn = zo(t, "Map"), ei = zo(t, "Promise"), ti = zo(t, "Set"), ni = zo(t, "WeakMap"), ii = zo(tt, "create"), ri = ni && new ni, oi = {}, si = hs(Jn), ai = hs(Qn), li = hs(ei), ui = hs(ti), ci = hs(ni), hi = _t ? _t.prototype : o, di = hi ? hi.valueOf : o, fi = hi ? hi.toString : o; + function pi(e) { + if ($a(e) && !ga(e) && !(e instanceof yi)) { + if (e instanceof gi) + return e; + if (ct.call(e, "__wrapped__")) + return ds(e) + } + return new gi(e) + } + var mi = function() { + function e() {} + return function(t) { + if (!Ea(t)) + return {}; + if (Ot) + return Ot(t); + e.prototype = t; + var n = new e; + return e.prototype = o, + n + } + }(); + function vi() {} + function gi(e, t) { + this.__wrapped__ = e, + this.__actions__ = [], + this.__chain__ = !!t, + this.__index__ = 0, + this.__values__ = o + } + function yi(e) { + this.__wrapped__ = e, + this.__actions__ = [], + this.__dir__ = 1, + this.__filtered__ = !1, + this.__iteratees__ = [], + this.__takeCount__ = L, + this.__views__ = [] + } + function bi(e) { + var t = -1 + , n = null == e ? 0 : e.length; + for (this.clear(); ++t < n; ) { + var i = e[t]; + this.set(i[0], i[1]) + } + } + function _i(e) { + var t = -1 + , n = null == e ? 0 : e.length; + for (this.clear(); ++t < n; ) { + var i = e[t]; + this.set(i[0], i[1]) + } + } + function wi(e) { + var t = -1 + , n = null == e ? 0 : e.length; + for (this.clear(); ++t < n; ) { + var i = e[t]; + this.set(i[0], i[1]) + } + } + function xi(e) { + var t = -1 + , n = null == e ? 0 : e.length; + for (this.__data__ = new wi; ++t < n; ) + this.add(e[t]) + } + function Ci(e) { + var t = this.__data__ = new _i(e); + this.size = t.size + } + function ki(e, t) { + var n = ga(e) + , i = !n && va(e) + , r = !n && !i && wa(e) + , o = !n && !i && !r && Fa(e) + , s = n || i || r || o + , a = s ? vn(e.length, it) : [] + , l = a.length; + for (var u in e) + !t && !ct.call(e, u) || s && ("length" == u || r && ("offset" == u || "parent" == u) || o && ("buffer" == u || "byteLength" == u || "byteOffset" == u) || Ko(u, l)) || a.push(u); + return a + } + function Si(e) { + var t = e.length; + return t ? e[xr(0, t - 1)] : o + } + function Di(e, t) { + return ls(io(e), Ai(t, 0, e.length)) + } + function Ei(e) { + return ls(io(e)) + } + function $i(e, t, n) { + (n === o || fa(e[t], n)) && (n !== o || t in e) || Pi(e, t, n) + } + function Ti(e, t, n) { + var i = e[t]; + ct.call(e, t) && fa(i, n) && (n !== o || t in e) || Pi(e, t, n) + } + function Mi(e, t) { + for (var n = e.length; n--; ) + if (fa(e[n][0], t)) + return n; + return -1 + } + function Ni(e, t, n, i) { + return zi(e, function(e, r, o) { + t(i, e, n(e), o) + }), + i + } + function Oi(e, t) { + return e && ro(t, rl(t), e) + } + function Pi(e, t, n) { + "__proto__" == t && fn ? fn(e, t, { + configurable: !0, + enumerable: !0, + value: n, + writable: !0 + }) : e[t] = n + } + function Ii(e, t) { + for (var n = -1, r = t.length, s = i(r), a = null == e; ++n < r; ) + s[n] = a ? o : Qa(e, t[n]); + return s + } + function Ai(e, t, n) { + return e == e && (n !== o && (e = e <= n ? e : n), + t !== o && (e = e >= t ? e : t)), + e + } + function Fi(e, t, n, i, r, s) { + var a, l = t & d, u = t & f, c = t & p; + if (n && (a = r ? n(e, i, r, s) : n(e)), + a !== o) + return a; + if (!Ea(e)) + return e; + var h = ga(e); + if (h) { + if (a = function(e) { + var t = e.length + , n = new e.constructor(t); + return t && "string" == typeof e[0] && ct.call(e, "index") && (n.index = e.index, + n.input = e.input), + n + }(e), + !l) + return io(e, a) + } else { + var m = jo(e) + , v = m == U || m == G; + if (wa(e)) + return Zr(e, l); + if (m == Q || m == R || v && !r) { + if (a = u || v ? {} : qo(e), + !l) + return u ? function(e, t) { + return ro(e, Ho(e), t) + }(e, function(e, t) { + return e && ro(t, ol(t), e) + }(a, e)) : function(e, t) { + return ro(e, Ro(e), t) + }(e, Oi(a, e)) + } else { + if (!Et[m]) + return r ? e : {}; + a = function(e, t, n) { + var i, r, o, s = e.constructor; + switch (t) { + case le: + return Jr(e); + case W: + case q: + return new s(+e); + case ue: + return function(e, t) { + var n = t ? Jr(e.buffer) : e.buffer; + return new e.constructor(n,e.byteOffset,e.byteLength) + }(e, n); + case ce: + case he: + case de: + case fe: + case pe: + case me: + case ve: + case ge: + case ye: + return Qr(e, n); + case X: + return new s; + case Z: + case ie: + return new s(e); + case te: + return (o = new (r = e).constructor(r.source,je.exec(r))).lastIndex = r.lastIndex, + o; + case ne: + return new s; + case re: + return i = e, + di ? tt(di.call(i)) : {} + } + }(e, m, l) + } + } + s || (s = new Ci); + var g = s.get(e); + if (g) + return g; + if (s.set(e, a), + Pa(e)) + return e.forEach(function(i) { + a.add(Fi(i, t, n, i, e, s)) + }), + a; + if (Ta(e)) + return e.forEach(function(i, r) { + a.set(r, Fi(i, t, n, r, e, s)) + }), + a; + var y = h ? o : (c ? u ? Po : Oo : u ? ol : rl)(e); + return Kt(y || e, function(i, r) { + y && (i = e[r = i]), + Ti(a, r, Fi(i, t, n, r, e, s)) + }), + a + } + function Li(e, t, n) { + var i = n.length; + if (null == e) + return !i; + for (e = tt(e); i--; ) { + var r = n[i] + , s = t[r] + , a = e[r]; + if (a === o && !(r in e) || !s(a)) + return !1 + } + return !0 + } + function Vi(e, t, n) { + if ("function" != typeof e) + throw new rt(l); + return rs(function() { + e.apply(o, n) + }, t) + } + function Bi(e, t, n, i) { + var r = -1 + , o = Zt + , a = !0 + , l = e.length + , u = [] + , c = t.length; + if (!l) + return u; + n && (t = Qt(t, gn(n))), + i ? (o = Jt, + a = !1) : t.length >= s && (o = bn, + a = !1, + t = new xi(t)); + e: for (; ++r < l; ) { + var h = e[r] + , d = null == n ? h : n(h); + if (h = i || 0 !== h ? h : 0, + a && d == d) { + for (var f = c; f--; ) + if (t[f] === d) + continue e; + u.push(h) + } else + o(t, d, i) || u.push(h) + } + return u + } + pi.templateSettings = { + escape: De, + evaluate: Ee, + interpolate: $e, + variable: "", + imports: { + _: pi + } + }, + pi.prototype = vi.prototype, + pi.prototype.constructor = pi, + gi.prototype = mi(vi.prototype), + gi.prototype.constructor = gi, + yi.prototype = mi(vi.prototype), + yi.prototype.constructor = yi, + bi.prototype.clear = function() { + this.__data__ = ii ? ii(null) : {}, + this.size = 0 + } + , + bi.prototype.delete = function(e) { + var t = this.has(e) && delete this.__data__[e]; + return this.size -= t ? 1 : 0, + t + } + , + bi.prototype.get = function(e) { + var t = this.__data__; + if (ii) { + var n = t[e]; + return n === u ? o : n + } + return ct.call(t, e) ? t[e] : o + } + , + bi.prototype.has = function(e) { + var t = this.__data__; + return ii ? t[e] !== o : ct.call(t, e) + } + , + bi.prototype.set = function(e, t) { + var n = this.__data__; + return this.size += this.has(e) ? 0 : 1, + n[e] = ii && t === o ? u : t, + this + } + , + _i.prototype.clear = function() { + this.__data__ = [], + this.size = 0 + } + , + _i.prototype.delete = function(e) { + var t = this.__data__ + , n = Mi(t, e); + return !(n < 0 || (n == t.length - 1 ? t.pop() : At.call(t, n, 1), + --this.size, + 0)) + } + , + _i.prototype.get = function(e) { + var t = this.__data__ + , n = Mi(t, e); + return n < 0 ? o : t[n][1] + } + , + _i.prototype.has = function(e) { + return Mi(this.__data__, e) > -1 + } + , + _i.prototype.set = function(e, t) { + var n = this.__data__ + , i = Mi(n, e); + return i < 0 ? (++this.size, + n.push([e, t])) : n[i][1] = t, + this + } + , + wi.prototype.clear = function() { + this.size = 0, + this.__data__ = { + hash: new bi, + map: new (Qn || _i), + string: new bi + } + } + , + wi.prototype.delete = function(e) { + var t = Vo(this, e).delete(e); + return this.size -= t ? 1 : 0, + t + } + , + wi.prototype.get = function(e) { + return Vo(this, e).get(e) + } + , + wi.prototype.has = function(e) { + return Vo(this, e).has(e) + } + , + wi.prototype.set = function(e, t) { + var n = Vo(this, e) + , i = n.size; + return n.set(e, t), + this.size += n.size == i ? 0 : 1, + this + } + , + xi.prototype.add = xi.prototype.push = function(e) { + return this.__data__.set(e, u), + this + } + , + xi.prototype.has = function(e) { + return this.__data__.has(e) + } + , + Ci.prototype.clear = function() { + this.__data__ = new _i, + this.size = 0 + } + , + Ci.prototype.delete = function(e) { + var t = this.__data__ + , n = t.delete(e); + return this.size = t.size, + n + } + , + Ci.prototype.get = function(e) { + return this.__data__.get(e) + } + , + Ci.prototype.has = function(e) { + return this.__data__.has(e) + } + , + Ci.prototype.set = function(e, t) { + var n = this.__data__; + if (n instanceof _i) { + var i = n.__data__; + if (!Qn || i.length < s - 1) + return i.push([e, t]), + this.size = ++n.size, + this; + n = this.__data__ = new wi(i) + } + return n.set(e, t), + this.size = n.size, + this + } + ; + var zi = ao(Ui) + , Ri = ao(Gi, !0); + function Hi(e, t) { + var n = !0; + return zi(e, function(e, i, r) { + return n = !!t(e, i, r) + }), + n + } + function ji(e, t, n) { + for (var i = -1, r = e.length; ++i < r; ) { + var s = e[i] + , a = t(s); + if (null != a && (l === o ? a == a && !Aa(a) : n(a, l))) + var l = a + , u = s + } + return u + } + function Wi(e, t) { + var n = []; + return zi(e, function(e, i, r) { + t(e, i, r) && n.push(e) + }), + n + } + function qi(e, t, n, i, r) { + var o = -1 + , s = e.length; + for (n || (n = Yo), + r || (r = []); ++o < s; ) { + var a = e[o]; + t > 0 && n(a) ? t > 1 ? qi(a, t - 1, n, i, r) : en(r, a) : i || (r[r.length] = a) + } + return r + } + var Yi = lo() + , Ki = lo(!0); + function Ui(e, t) { + return e && Yi(e, t, rl) + } + function Gi(e, t) { + return e && Ki(e, t, rl) + } + function Xi(e, t) { + return Xt(t, function(t) { + return ka(e[t]) + }) + } + function Zi(e, t) { + for (var n = 0, i = (t = Kr(t, e)).length; null != e && n < i; ) + e = e[cs(t[n++])]; + return n && n == i ? e : o + } + function Ji(e, t, n) { + var i = t(e); + return ga(e) ? i : en(i, n(e)) + } + function Qi(e) { + return null == e ? e === o ? oe : J : on && on in tt(e) ? function(e) { + var t = ct.call(e, on) + , n = e[on]; + try { + e[on] = o; + var i = !0 + } catch (e) {} + var r = ft.call(e); + return i && (t ? e[on] = n : delete e[on]), + r + }(e) : function(e) { + return ft.call(e) + }(e) + } + function er(e, t) { + return e > t + } + function tr(e, t) { + return null != e && ct.call(e, t) + } + function nr(e, t) { + return null != e && t in tt(e) + } + function ir(e, t, n) { + for (var r = n ? Jt : Zt, s = e[0].length, a = e.length, l = a, u = i(a), c = 1 / 0, h = []; l--; ) { + var d = e[l]; + l && t && (d = Qt(d, gn(t))), + c = Kn(d.length, c), + u[l] = !n && (t || s >= 120 && d.length >= 120) ? new xi(l && d) : o + } + d = e[0]; + var f = -1 + , p = u[0]; + e: for (; ++f < s && h.length < c; ) { + var m = d[f] + , v = t ? t(m) : m; + if (m = n || 0 !== m ? m : 0, + !(p ? bn(p, v) : r(h, v, n))) { + for (l = a; --l; ) { + var g = u[l]; + if (!(g ? bn(g, v) : r(e[l], v, n))) + continue e + } + p && p.push(v), + h.push(m) + } + } + return h + } + function rr(e, t, n) { + var i = null == (e = ns(e, t = Kr(t, e))) ? e : e[cs(Cs(t))]; + return null == i ? o : qt(i, e, n) + } + function or(e) { + return $a(e) && Qi(e) == R + } + function sr(e, t, n, i, r) { + return e === t || (null == e || null == t || !$a(e) && !$a(t) ? e != e && t != t : function(e, t, n, i, r, s) { + var a = ga(e) + , l = ga(t) + , u = a ? H : jo(e) + , c = l ? H : jo(t) + , h = (u = u == R ? Q : u) == Q + , d = (c = c == R ? Q : c) == Q + , f = u == c; + if (f && wa(e)) { + if (!wa(t)) + return !1; + a = !0, + h = !1 + } + if (f && !h) + return s || (s = new Ci), + a || Fa(e) ? Mo(e, t, n, i, r, s) : function(e, t, n, i, r, o, s) { + switch (n) { + case ue: + if (e.byteLength != t.byteLength || e.byteOffset != t.byteOffset) + return !1; + e = e.buffer, + t = t.buffer; + case le: + return !(e.byteLength != t.byteLength || !o(new xt(e), new xt(t))); + case W: + case q: + case Z: + return fa(+e, +t); + case K: + return e.name == t.name && e.message == t.message; + case te: + case ie: + return e == t + ""; + case X: + var a = Dn; + case ne: + var l = i & m; + if (a || (a = Mn), + e.size != t.size && !l) + return !1; + var u = s.get(e); + if (u) + return u == t; + i |= v, + s.set(e, t); + var c = Mo(a(e), a(t), i, r, o, s); + return s.delete(e), + c; + case re: + if (di) + return di.call(e) == di.call(t) + } + return !1 + }(e, t, u, n, i, r, s); + if (!(n & m)) { + var p = h && ct.call(e, "__wrapped__") + , g = d && ct.call(t, "__wrapped__"); + if (p || g) { + var y = p ? e.value() : e + , b = g ? t.value() : t; + return s || (s = new Ci), + r(y, b, n, i, s) + } + } + return !!f && (s || (s = new Ci), + function(e, t, n, i, r, s) { + var a = n & m + , l = Oo(e) + , u = l.length + , c = Oo(t).length; + if (u != c && !a) + return !1; + for (var h = u; h--; ) { + var d = l[h]; + if (!(a ? d in t : ct.call(t, d))) + return !1 + } + var f = s.get(e); + if (f && s.get(t)) + return f == t; + var p = !0; + s.set(e, t), + s.set(t, e); + for (var v = a; ++h < u; ) { + d = l[h]; + var g = e[d] + , y = t[d]; + if (i) + var b = a ? i(y, g, d, t, e, s) : i(g, y, d, e, t, s); + if (!(b === o ? g === y || r(g, y, n, i, s) : b)) { + p = !1; + break + } + v || (v = "constructor" == d) + } + if (p && !v) { + var _ = e.constructor + , w = t.constructor; + _ != w && "constructor"in e && "constructor"in t && !("function" == typeof _ && _ instanceof _ && "function" == typeof w && w instanceof w) && (p = !1) + } + return s.delete(e), + s.delete(t), + p + }(e, t, n, i, r, s)) + }(e, t, n, i, sr, r)) + } + function ar(e, t, n, i) { + var r = n.length + , s = r + , a = !i; + if (null == e) + return !s; + for (e = tt(e); r--; ) { + var l = n[r]; + if (a && l[2] ? l[1] !== e[l[0]] : !(l[0]in e)) + return !1 + } + for (; ++r < s; ) { + var u = (l = n[r])[0] + , c = e[u] + , h = l[1]; + if (a && l[2]) { + if (c === o && !(u in e)) + return !1 + } else { + var d = new Ci; + if (i) + var f = i(c, h, u, e, t, d); + if (!(f === o ? sr(h, c, m | v, i, d) : f)) + return !1 + } + } + return !0 + } + function lr(e) { + return !(!Ea(e) || (t = e, + dt && dt in t)) && (ka(e) ? vt : Ye).test(hs(e)); + var t + } + function ur(e) { + return "function" == typeof e ? e : null == e ? Ml : "object" == typeof e ? ga(e) ? mr(e[0], e[1]) : pr(e) : Bl(e) + } + function cr(e) { + if (!Jo(e)) + return qn(e); + var t = []; + for (var n in tt(e)) + ct.call(e, n) && "constructor" != n && t.push(n); + return t + } + function hr(e) { + if (!Ea(e)) + return function(e) { + var t = []; + if (null != e) + for (var n in tt(e)) + t.push(n); + return t + }(e); + var t = Jo(e) + , n = []; + for (var i in e) + ("constructor" != i || !t && ct.call(e, i)) && n.push(i); + return n + } + function dr(e, t) { + return e < t + } + function fr(e, t) { + var n = -1 + , r = ba(e) ? i(e.length) : []; + return zi(e, function(e, i, o) { + r[++n] = t(e, i, o) + }), + r + } + function pr(e) { + var t = Bo(e); + return 1 == t.length && t[0][2] ? es(t[0][0], t[0][1]) : function(n) { + return n === e || ar(n, e, t) + } + } + function mr(e, t) { + return Go(e) && Qo(t) ? es(cs(e), t) : function(n) { + var i = Qa(n, e); + return i === o && i === t ? el(n, e) : sr(t, i, m | v) + } + } + function vr(e, t, n, i, r) { + e !== t && Yi(t, function(s, a) { + if (Ea(s)) + r || (r = new Ci), + function(e, t, n, i, r, s, a) { + var l = Tn(e, n) + , u = Tn(t, n) + , c = a.get(u); + if (c) + $i(e, n, c); + else { + var h = s ? s(l, u, n + "", e, t, a) : o + , d = h === o; + if (d) { + var f = ga(u) + , p = !f && wa(u) + , m = !f && !p && Fa(u); + h = u, + f || p || m ? ga(l) ? h = l : _a(l) ? h = io(l) : p ? (d = !1, + h = Zr(u, !0)) : m ? (d = !1, + h = Qr(u, !0)) : h = [] : Na(u) || va(u) ? (h = l, + va(l) ? h = Wa(l) : (!Ea(l) || i && ka(l)) && (h = qo(u))) : d = !1 + } + d && (a.set(u, h), + r(h, u, i, s, a), + a.delete(u)), + $i(e, n, h) + } + }(e, t, a, n, vr, i, r); + else { + var l = i ? i(Tn(e, a), s, a + "", e, t, r) : o; + l === o && (l = s), + $i(e, a, l) + } + }, ol) + } + function gr(e, t) { + var n = e.length; + if (n) + return Ko(t += t < 0 ? n : 0, n) ? e[t] : o + } + function yr(e, t, n) { + var i = -1; + return t = Qt(t.length ? t : [Ml], gn(Lo())), + function(e, t) { + var n = e.length; + for (e.sort(t); n--; ) + e[n] = e[n].value; + return e + }(fr(e, function(e, n, r) { + return { + criteria: Qt(t, function(t) { + return t(e) + }), + index: ++i, + value: e + } + }), function(e, t) { + return function(e, t, n) { + for (var i = -1, r = e.criteria, o = t.criteria, s = r.length, a = n.length; ++i < s; ) { + var l = eo(r[i], o[i]); + if (l) { + if (i >= a) + return l; + var u = n[i]; + return l * ("desc" == u ? -1 : 1) + } + } + return e.index - t.index + }(e, t, n) + }) + } + function br(e, t, n) { + for (var i = -1, r = t.length, o = {}; ++i < r; ) { + var s = t[i] + , a = Zi(e, s); + n(a, s) && Er(o, Kr(s, e), a) + } + return o + } + function _r(e, t, n, i) { + var r = i ? un : ln + , o = -1 + , s = t.length + , a = e; + for (e === t && (t = io(t)), + n && (a = Qt(e, gn(n))); ++o < s; ) + for (var l = 0, u = t[o], c = n ? n(u) : u; (l = r(a, c, l, i)) > -1; ) + a !== e && At.call(a, l, 1), + At.call(e, l, 1); + return e + } + function wr(e, t) { + for (var n = e ? t.length : 0, i = n - 1; n--; ) { + var r = t[n]; + if (n == i || r !== o) { + var o = r; + Ko(r) ? At.call(e, r, 1) : Br(e, r) + } + } + return e + } + function xr(e, t) { + return e + zn(Xn() * (t - e + 1)) + } + function Cr(e, t) { + var n = ""; + if (!e || t < 1 || t > I) + return n; + do { + t % 2 && (n += e), + (t = zn(t / 2)) && (e += e) + } while (t); + return n + } + function kr(e, t) { + return os(ts(e, t, Ml), e + "") + } + function Sr(e) { + return Si(fl(e)) + } + function Dr(e, t) { + var n = fl(e); + return ls(n, Ai(t, 0, n.length)) + } + function Er(e, t, n, i) { + if (!Ea(e)) + return e; + for (var r = -1, s = (t = Kr(t, e)).length, a = s - 1, l = e; null != l && ++r < s; ) { + var u = cs(t[r]) + , c = n; + if (r != a) { + var h = l[u]; + (c = i ? i(h, u, l) : o) === o && (c = Ea(h) ? h : Ko(t[r + 1]) ? [] : {}) + } + Ti(l, u, c), + l = l[u] + } + return e + } + var $r = ri ? function(e, t) { + return ri.set(e, t), + e + } + : Ml + , Tr = fn ? function(e, t) { + return fn(e, "toString", { + configurable: !0, + enumerable: !1, + value: El(t), + writable: !0 + }) + } + : Ml; + function Mr(e) { + return ls(fl(e)) + } + function Nr(e, t, n) { + var r = -1 + , o = e.length; + t < 0 && (t = -t > o ? 0 : o + t), + (n = n > o ? o : n) < 0 && (n += o), + o = t > n ? 0 : n - t >>> 0, + t >>>= 0; + for (var s = i(o); ++r < o; ) + s[r] = e[r + t]; + return s + } + function Or(e, t) { + var n; + return zi(e, function(e, i, r) { + return !(n = t(e, i, r)) + }), + !!n + } + function Pr(e, t, n) { + var i = 0 + , r = null == e ? i : e.length; + if ("number" == typeof t && t == t && r <= B) { + for (; i < r; ) { + var o = i + r >>> 1 + , s = e[o]; + null !== s && !Aa(s) && (n ? s <= t : s < t) ? i = o + 1 : r = o + } + return r + } + return Ir(e, t, Ml, n) + } + function Ir(e, t, n, i) { + t = n(t); + for (var r = 0, s = null == e ? 0 : e.length, a = t != t, l = null === t, u = Aa(t), c = t === o; r < s; ) { + var h = zn((r + s) / 2) + , d = n(e[h]) + , f = d !== o + , p = null === d + , m = d == d + , v = Aa(d); + if (a) + var g = i || m; + else + g = c ? m && (i || f) : l ? m && f && (i || !p) : u ? m && f && !p && (i || !v) : !p && !v && (i ? d <= t : d < t); + g ? r = h + 1 : s = h + } + return Kn(s, V) + } + function Ar(e, t) { + for (var n = -1, i = e.length, r = 0, o = []; ++n < i; ) { + var s = e[n] + , a = t ? t(s) : s; + if (!n || !fa(a, l)) { + var l = a; + o[r++] = 0 === s ? 0 : s + } + } + return o + } + function Fr(e) { + return "number" == typeof e ? e : Aa(e) ? F : +e + } + function Lr(e) { + if ("string" == typeof e) + return e; + if (ga(e)) + return Qt(e, Lr) + ""; + if (Aa(e)) + return fi ? fi.call(e) : ""; + var t = e + ""; + return "0" == t && 1 / e == -P ? "-0" : t + } + function Vr(e, t, n) { + var i = -1 + , r = Zt + , o = e.length + , a = !0 + , l = [] + , u = l; + if (n) + a = !1, + r = Jt; + else if (o >= s) { + var c = t ? null : ko(e); + if (c) + return Mn(c); + a = !1, + r = bn, + u = new xi + } else + u = t ? [] : l; + e: for (; ++i < o; ) { + var h = e[i] + , d = t ? t(h) : h; + if (h = n || 0 !== h ? h : 0, + a && d == d) { + for (var f = u.length; f--; ) + if (u[f] === d) + continue e; + t && u.push(d), + l.push(h) + } else + r(u, d, n) || (u !== l && u.push(d), + l.push(h)) + } + return l + } + function Br(e, t) { + return null == (e = ns(e, t = Kr(t, e))) || delete e[cs(Cs(t))] + } + function zr(e, t, n, i) { + return Er(e, t, n(Zi(e, t)), i) + } + function Rr(e, t, n, i) { + for (var r = e.length, o = i ? r : -1; (i ? o-- : ++o < r) && t(e[o], o, e); ) + ; + return n ? Nr(e, i ? 0 : o, i ? o + 1 : r) : Nr(e, i ? o + 1 : 0, i ? r : o) + } + function Hr(e, t) { + var n = e; + return n instanceof yi && (n = n.value()), + tn(t, function(e, t) { + return t.func.apply(t.thisArg, en([e], t.args)) + }, n) + } + function jr(e, t, n) { + var r = e.length; + if (r < 2) + return r ? Vr(e[0]) : []; + for (var o = -1, s = i(r); ++o < r; ) + for (var a = e[o], l = -1; ++l < r; ) + l != o && (s[o] = Bi(s[o] || a, e[l], t, n)); + return Vr(qi(s, 1), t, n) + } + function Wr(e, t, n) { + for (var i = -1, r = e.length, s = t.length, a = {}; ++i < r; ) { + var l = i < s ? t[i] : o; + n(a, e[i], l) + } + return a + } + function qr(e) { + return _a(e) ? e : [] + } + function Yr(e) { + return "function" == typeof e ? e : Ml + } + function Kr(e, t) { + return ga(e) ? e : Go(e, t) ? [e] : us(qa(e)) + } + var Ur = kr; + function Gr(e, t, n) { + var i = e.length; + return n = n === o ? i : n, + !t && n >= i ? e : Nr(e, t, n) + } + var Xr = Fn || function(e) { + return Pt.clearTimeout(e) + } + ; + function Zr(e, t) { + if (t) + return e.slice(); + var n = e.length + , i = $t ? $t(n) : new e.constructor(n); + return e.copy(i), + i + } + function Jr(e) { + var t = new e.constructor(e.byteLength); + return new xt(t).set(new xt(e)), + t + } + function Qr(e, t) { + var n = t ? Jr(e.buffer) : e.buffer; + return new e.constructor(n,e.byteOffset,e.length) + } + function eo(e, t) { + if (e !== t) { + var n = e !== o + , i = null === e + , r = e == e + , s = Aa(e) + , a = t !== o + , l = null === t + , u = t == t + , c = Aa(t); + if (!l && !c && !s && e > t || s && a && u && !l && !c || i && a && u || !n && u || !r) + return 1; + if (!i && !s && !c && e < t || c && n && r && !i && !s || l && n && r || !a && r || !u) + return -1 + } + return 0 + } + function to(e, t, n, r) { + for (var o = -1, s = e.length, a = n.length, l = -1, u = t.length, c = Yn(s - a, 0), h = i(u + c), d = !r; ++l < u; ) + h[l] = t[l]; + for (; ++o < a; ) + (d || o < s) && (h[n[o]] = e[o]); + for (; c--; ) + h[l++] = e[o++]; + return h + } + function no(e, t, n, r) { + for (var o = -1, s = e.length, a = -1, l = n.length, u = -1, c = t.length, h = Yn(s - l, 0), d = i(h + c), f = !r; ++o < h; ) + d[o] = e[o]; + for (var p = o; ++u < c; ) + d[p + u] = t[u]; + for (; ++a < l; ) + (f || o < s) && (d[p + n[a]] = e[o++]); + return d + } + function io(e, t) { + var n = -1 + , r = e.length; + for (t || (t = i(r)); ++n < r; ) + t[n] = e[n]; + return t + } + function ro(e, t, n, i) { + var r = !n; + n || (n = {}); + for (var s = -1, a = t.length; ++s < a; ) { + var l = t[s] + , u = i ? i(n[l], e[l], l, n, e) : o; + u === o && (u = e[l]), + r ? Pi(n, l, u) : Ti(n, l, u) + } + return n + } + function oo(e, t) { + return function(n, i) { + var r = ga(n) ? Yt : Ni + , o = t ? t() : {}; + return r(n, e, Lo(i, 2), o) + } + } + function so(e) { + return kr(function(t, n) { + var i = -1 + , r = n.length + , s = r > 1 ? n[r - 1] : o + , a = r > 2 ? n[2] : o; + for (s = e.length > 3 && "function" == typeof s ? (r--, + s) : o, + a && Uo(n[0], n[1], a) && (s = r < 3 ? o : s, + r = 1), + t = tt(t); ++i < r; ) { + var l = n[i]; + l && e(t, l, i, s) + } + return t + }) + } + function ao(e, t) { + return function(n, i) { + if (null == n) + return n; + if (!ba(n)) + return e(n, i); + for (var r = n.length, o = t ? r : -1, s = tt(n); (t ? o-- : ++o < r) && !1 !== i(s[o], o, s); ) + ; + return n + } + } + function lo(e) { + return function(t, n, i) { + for (var r = -1, o = tt(t), s = i(t), a = s.length; a--; ) { + var l = s[e ? a : ++r]; + if (!1 === n(o[l], l, o)) + break + } + return t + } + } + function uo(e) { + return function(t) { + var n = Sn(t = qa(t)) ? Pn(t) : o + , i = n ? n[0] : t.charAt(0) + , r = n ? Gr(n, 1).join("") : t.slice(1); + return i[e]() + r + } + } + function co(e) { + return function(t) { + return tn(kl(vl(t).replace(yt, "")), e, "") + } + } + function ho(e) { + return function() { + var t = arguments; + switch (t.length) { + case 0: + return new e; + case 1: + return new e(t[0]); + case 2: + return new e(t[0],t[1]); + case 3: + return new e(t[0],t[1],t[2]); + case 4: + return new e(t[0],t[1],t[2],t[3]); + case 5: + return new e(t[0],t[1],t[2],t[3],t[4]); + case 6: + return new e(t[0],t[1],t[2],t[3],t[4],t[5]); + case 7: + return new e(t[0],t[1],t[2],t[3],t[4],t[5],t[6]) + } + var n = mi(e.prototype) + , i = e.apply(n, t); + return Ea(i) ? i : n + } + } + function fo(e) { + return function(t, n, i) { + var r = tt(t); + if (!ba(t)) { + var s = Lo(n, 3); + t = rl(t), + n = function(e) { + return s(r[e], e, r) + } + } + var a = e(t, n, i); + return a > -1 ? r[s ? t[a] : a] : o + } + } + function po(e) { + return No(function(t) { + var n = t.length + , i = n + , r = gi.prototype.thru; + for (e && t.reverse(); i--; ) { + var s = t[i]; + if ("function" != typeof s) + throw new rt(l); + if (r && !a && "wrapper" == Ao(s)) + var a = new gi([],!0) + } + for (i = a ? i : n; ++i < n; ) { + var u = Ao(s = t[i]) + , c = "wrapper" == u ? Io(s) : o; + a = c && Xo(c[0]) && c[1] == (k | _ | x | S) && !c[4].length && 1 == c[9] ? a[Ao(c[0])].apply(a, c[3]) : 1 == s.length && Xo(s) ? a[u]() : a.thru(s) + } + return function() { + var e = arguments + , i = e[0]; + if (a && 1 == e.length && ga(i)) + return a.plant(i).value(); + for (var r = 0, o = n ? t[r].apply(this, e) : i; ++r < n; ) + o = t[r].call(this, o); + return o + } + }) + } + function mo(e, t, n, r, s, a, l, u, c, h) { + var d = t & k + , f = t & g + , p = t & y + , m = t & (_ | w) + , v = t & D + , b = p ? o : ho(e); + return function g() { + for (var y = arguments.length, _ = i(y), w = y; w--; ) + _[w] = arguments[w]; + if (m) + var x = Fo(g) + , C = function(e, t) { + for (var n = e.length, i = 0; n--; ) + e[n] === t && ++i; + return i + }(_, x); + if (r && (_ = to(_, r, s, m)), + a && (_ = no(_, a, l, m)), + y -= C, + m && y < h) { + var k = $n(_, x); + return xo(e, t, mo, g.placeholder, n, _, k, u, c, h - y) + } + var S = f ? n : this + , D = p ? S[e] : e; + return y = _.length, + u ? _ = function(e, t) { + for (var n = e.length, i = Kn(t.length, n), r = io(e); i--; ) { + var s = t[i]; + e[i] = Ko(s, n) ? r[s] : o + } + return e + }(_, u) : v && y > 1 && _.reverse(), + d && c < y && (_.length = c), + this && this !== Pt && this instanceof g && (D = b || ho(D)), + D.apply(S, _) + } + } + function vo(e, t) { + return function(n, i) { + return function(e, t, n, i) { + return Ui(e, function(e, r, o) { + t(i, n(e), r, o) + }), + i + }(n, e, t(i), {}) + } + } + function go(e, t) { + return function(n, i) { + var r; + if (n === o && i === o) + return t; + if (n !== o && (r = n), + i !== o) { + if (r === o) + return i; + "string" == typeof n || "string" == typeof i ? (n = Lr(n), + i = Lr(i)) : (n = Fr(n), + i = Fr(i)), + r = e(n, i) + } + return r + } + } + function yo(e) { + return No(function(t) { + return t = Qt(t, gn(Lo())), + kr(function(n) { + var i = this; + return e(t, function(e) { + return qt(e, i, n) + }) + }) + }) + } + function bo(e, t) { + var n = (t = t === o ? " " : Lr(t)).length; + if (n < 2) + return n ? Cr(t, e) : t; + var i = Cr(t, Bn(e / On(t))); + return Sn(t) ? Gr(Pn(i), 0, e).join("") : i.slice(0, e) + } + function _o(e) { + return function(t, n, r) { + return r && "number" != typeof r && Uo(t, n, r) && (n = r = o), + t = za(t), + n === o ? (n = t, + t = 0) : n = za(n), + function(e, t, n, r) { + for (var o = -1, s = Yn(Bn((t - e) / (n || 1)), 0), a = i(s); s--; ) + a[r ? s : ++o] = e, + e += n; + return a + }(t, n, r = r === o ? t < n ? 1 : -1 : za(r), e) + } + } + function wo(e) { + return function(t, n) { + return "string" == typeof t && "string" == typeof n || (t = ja(t), + n = ja(n)), + e(t, n) + } + } + function xo(e, t, n, i, r, s, a, l, u, c) { + var h = t & _; + t |= h ? x : C, + (t &= ~(h ? C : x)) & b || (t &= ~(g | y)); + var d = [e, t, r, h ? s : o, h ? a : o, h ? o : s, h ? o : a, l, u, c] + , f = n.apply(o, d); + return Xo(e) && is(f, d), + f.placeholder = i, + ss(f, e, t) + } + function Co(e) { + var t = et[e]; + return function(e, n) { + if (e = ja(e), + n = null == n ? 0 : Kn(Ra(n), 292)) { + var i = (qa(e) + "e").split("e"); + return +((i = (qa(t(i[0] + "e" + (+i[1] + n))) + "e").split("e"))[0] + "e" + (+i[1] - n)) + } + return t(e) + } + } + var ko = ti && 1 / Mn(new ti([, -0]))[1] == P ? function(e) { + return new ti(e) + } + : Al; + function So(e) { + return function(t) { + var n = jo(t); + return n == X ? Dn(t) : n == ne ? Nn(t) : function(e, t) { + return Qt(t, function(t) { + return [t, e[t]] + }) + }(t, e(t)) + } + } + function Do(e, t, n, r, s, a, u, c) { + var d = t & y; + if (!d && "function" != typeof e) + throw new rt(l); + var f = r ? r.length : 0; + if (f || (t &= ~(x | C), + r = s = o), + u = u === o ? u : Yn(Ra(u), 0), + c = c === o ? c : Ra(c), + f -= s ? s.length : 0, + t & C) { + var p = r + , m = s; + r = s = o + } + var v = d ? o : Io(e) + , D = [e, t, n, r, s, p, m, a, u, c]; + if (v && function(e, t) { + var n = e[1] + , i = t[1] + , r = n | i + , o = r < (g | y | k) + , s = i == k && n == _ || i == k && n == S && e[7].length <= t[8] || i == (k | S) && t[7].length <= t[8] && n == _; + if (!o && !s) + return e; + i & g && (e[2] = t[2], + r |= n & g ? 0 : b); + var a = t[3]; + if (a) { + var l = e[3]; + e[3] = l ? to(l, a, t[4]) : a, + e[4] = l ? $n(e[3], h) : t[4] + } + (a = t[5]) && (l = e[5], + e[5] = l ? no(l, a, t[6]) : a, + e[6] = l ? $n(e[5], h) : t[6]), + (a = t[7]) && (e[7] = a), + i & k && (e[8] = null == e[8] ? t[8] : Kn(e[8], t[8])), + null == e[9] && (e[9] = t[9]), + e[0] = t[0], + e[1] = r + }(D, v), + e = D[0], + t = D[1], + n = D[2], + r = D[3], + s = D[4], + !(c = D[9] = D[9] === o ? d ? 0 : e.length : Yn(D[9] - f, 0)) && t & (_ | w) && (t &= ~(_ | w)), + t && t != g) + E = t == _ || t == w ? function(e, t, n) { + var r = ho(e); + return function s() { + for (var a = arguments.length, l = i(a), u = a, c = Fo(s); u--; ) + l[u] = arguments[u]; + var h = a < 3 && l[0] !== c && l[a - 1] !== c ? [] : $n(l, c); + return (a -= h.length) < n ? xo(e, t, mo, s.placeholder, o, l, h, o, o, n - a) : qt(this && this !== Pt && this instanceof s ? r : e, this, l) + } + }(e, t, c) : t != x && t != (g | x) || s.length ? mo.apply(o, D) : function(e, t, n, r) { + var o = t & g + , s = ho(e); + return function t() { + for (var a = -1, l = arguments.length, u = -1, c = r.length, h = i(c + l), d = this && this !== Pt && this instanceof t ? s : e; ++u < c; ) + h[u] = r[u]; + for (; l--; ) + h[u++] = arguments[++a]; + return qt(d, o ? n : this, h) + } + }(e, t, n, r); + else + var E = function(e, t, n) { + var i = t & g + , r = ho(e); + return function t() { + return (this && this !== Pt && this instanceof t ? r : e).apply(i ? n : this, arguments) + } + }(e, t, n); + return ss((v ? $r : is)(E, D), e, t) + } + function Eo(e, t, n, i) { + return e === o || fa(e, at[n]) && !ct.call(i, n) ? t : e + } + function $o(e, t, n, i, r, s) { + return Ea(e) && Ea(t) && (s.set(t, e), + vr(e, t, o, $o, s), + s.delete(t)), + e + } + function To(e) { + return Na(e) ? o : e + } + function Mo(e, t, n, i, r, s) { + var a = n & m + , l = e.length + , u = t.length; + if (l != u && !(a && u > l)) + return !1; + var c = s.get(e); + if (c && s.get(t)) + return c == t; + var h = -1 + , d = !0 + , f = n & v ? new xi : o; + for (s.set(e, t), + s.set(t, e); ++h < l; ) { + var p = e[h] + , g = t[h]; + if (i) + var y = a ? i(g, p, h, t, e, s) : i(p, g, h, e, t, s); + if (y !== o) { + if (y) + continue; + d = !1; + break + } + if (f) { + if (!rn(t, function(e, t) { + if (!bn(f, t) && (p === e || r(p, e, n, i, s))) + return f.push(t) + })) { + d = !1; + break + } + } else if (p !== g && !r(p, g, n, i, s)) { + d = !1; + break + } + } + return s.delete(e), + s.delete(t), + d + } + function No(e) { + return os(ts(e, o, ys), e + "") + } + function Oo(e) { + return Ji(e, rl, Ro) + } + function Po(e) { + return Ji(e, ol, Ho) + } + var Io = ri ? function(e) { + return ri.get(e) + } + : Al; + function Ao(e) { + for (var t = e.name + "", n = oi[t], i = ct.call(oi, t) ? n.length : 0; i--; ) { + var r = n[i] + , o = r.func; + if (null == o || o == e) + return r.name + } + return t + } + function Fo(e) { + return (ct.call(pi, "placeholder") ? pi : e).placeholder + } + function Lo() { + var e = pi.iteratee || Nl; + return e = e === Nl ? ur : e, + arguments.length ? e(arguments[0], arguments[1]) : e + } + function Vo(e, t) { + var n, i, r = e.__data__; + return ("string" == (i = typeof (n = t)) || "number" == i || "symbol" == i || "boolean" == i ? "__proto__" !== n : null === n) ? r["string" == typeof t ? "string" : "hash"] : r.map + } + function Bo(e) { + for (var t = rl(e), n = t.length; n--; ) { + var i = t[n] + , r = e[i]; + t[n] = [i, r, Qo(r)] + } + return t + } + function zo(e, t) { + var n = function(e, t) { + return null == e ? o : e[t] + }(e, t); + return lr(n) ? n : o + } + var Ro = Rn ? function(e) { + return null == e ? [] : (e = tt(e), + Xt(Rn(e), function(t) { + return It.call(e, t) + })) + } + : Hl + , Ho = Rn ? function(e) { + for (var t = []; e; ) + en(t, Ro(e)), + e = Nt(e); + return t + } + : Hl + , jo = Qi; + function Wo(e, t, n) { + for (var i = -1, r = (t = Kr(t, e)).length, o = !1; ++i < r; ) { + var s = cs(t[i]); + if (!(o = null != e && n(e, s))) + break; + e = e[s] + } + return o || ++i != r ? o : !!(r = null == e ? 0 : e.length) && Da(r) && Ko(s, r) && (ga(e) || va(e)) + } + function qo(e) { + return "function" != typeof e.constructor || Jo(e) ? {} : mi(Nt(e)) + } + function Yo(e) { + return ga(e) || va(e) || !!(Lt && e && e[Lt]) + } + function Ko(e, t) { + var n = typeof e; + return !!(t = null == t ? I : t) && ("number" == n || "symbol" != n && Ue.test(e)) && e > -1 && e % 1 == 0 && e < t + } + function Uo(e, t, n) { + if (!Ea(n)) + return !1; + var i = typeof t; + return !!("number" == i ? ba(n) && Ko(t, n.length) : "string" == i && t in n) && fa(n[t], e) + } + function Go(e, t) { + if (ga(e)) + return !1; + var n = typeof e; + return !("number" != n && "symbol" != n && "boolean" != n && null != e && !Aa(e)) || Me.test(e) || !Te.test(e) || null != t && e in tt(t) + } + function Xo(e) { + var t = Ao(e) + , n = pi[t]; + if ("function" != typeof n || !(t in yi.prototype)) + return !1; + if (e === n) + return !0; + var i = Io(n); + return !!i && e === i[0] + } + (Jn && jo(new Jn(new ArrayBuffer(1))) != ue || Qn && jo(new Qn) != X || ei && "[object Promise]" != jo(ei.resolve()) || ti && jo(new ti) != ne || ni && jo(new ni) != se) && (jo = function(e) { + var t = Qi(e) + , n = t == Q ? e.constructor : o + , i = n ? hs(n) : ""; + if (i) + switch (i) { + case si: + return ue; + case ai: + return X; + case li: + return "[object Promise]"; + case ui: + return ne; + case ci: + return se + } + return t + } + ); + var Zo = lt ? ka : jl; + function Jo(e) { + var t = e && e.constructor; + return e === ("function" == typeof t && t.prototype || at) + } + function Qo(e) { + return e == e && !Ea(e) + } + function es(e, t) { + return function(n) { + return null != n && n[e] === t && (t !== o || e in tt(n)) + } + } + function ts(e, t, n) { + return t = Yn(t === o ? e.length - 1 : t, 0), + function() { + for (var r = arguments, o = -1, s = Yn(r.length - t, 0), a = i(s); ++o < s; ) + a[o] = r[t + o]; + o = -1; + for (var l = i(t + 1); ++o < t; ) + l[o] = r[o]; + return l[t] = n(a), + qt(e, this, l) + } + } + function ns(e, t) { + return t.length < 2 ? e : Zi(e, Nr(t, 0, -1)) + } + var is = as($r) + , rs = Vn || function(e, t) { + return Pt.setTimeout(e, t) + } + , os = as(Tr); + function ss(e, t, n) { + var i = t + ""; + return os(e, function(e, t) { + var n = t.length; + if (!n) + return e; + var i = n - 1; + return t[i] = (n > 1 ? "& " : "") + t[i], + t = t.join(n > 2 ? ", " : " "), + e.replace(Le, "{\n/* [wrapped with " + t + "] */\n") + }(i, function(e, t) { + return Kt(z, function(n) { + var i = "_." + n[0]; + t & n[1] && !Zt(e, i) && e.push(i) + }), + e.sort() + }(function(e) { + var t = e.match(Ve); + return t ? t[1].split(Be) : [] + }(i), n))) + } + function as(e) { + var t = 0 + , n = 0; + return function() { + var i = Un() + , r = M - (i - n); + if (n = i, + r > 0) { + if (++t >= T) + return arguments[0] + } else + t = 0; + return e.apply(o, arguments) + } + } + function ls(e, t) { + var n = -1 + , i = e.length + , r = i - 1; + for (t = t === o ? i : t; ++n < t; ) { + var s = xr(n, r) + , a = e[s]; + e[s] = e[n], + e[n] = a + } + return e.length = t, + e + } + var us = function(e) { + var t = aa(e, function(e) { + return n.size === c && n.clear(), + e + }) + , n = t.cache; + return t + }(function(e) { + var t = []; + return 46 === e.charCodeAt(0) && t.push(""), + e.replace(Ne, function(e, n, i, r) { + t.push(i ? r.replace(Re, "$1") : n || e) + }), + t + }); + function cs(e) { + if ("string" == typeof e || Aa(e)) + return e; + var t = e + ""; + return "0" == t && 1 / e == -P ? "-0" : t + } + function hs(e) { + if (null != e) { + try { + return ut.call(e) + } catch (e) {} + try { + return e + "" + } catch (e) {} + } + return "" + } + function ds(e) { + if (e instanceof yi) + return e.clone(); + var t = new gi(e.__wrapped__,e.__chain__); + return t.__actions__ = io(e.__actions__), + t.__index__ = e.__index__, + t.__values__ = e.__values__, + t + } + var fs = kr(function(e, t) { + return _a(e) ? Bi(e, qi(t, 1, _a, !0)) : [] + }) + , ps = kr(function(e, t) { + var n = Cs(t); + return _a(n) && (n = o), + _a(e) ? Bi(e, qi(t, 1, _a, !0), Lo(n, 2)) : [] + }) + , ms = kr(function(e, t) { + var n = Cs(t); + return _a(n) && (n = o), + _a(e) ? Bi(e, qi(t, 1, _a, !0), o, n) : [] + }); + function vs(e, t, n) { + var i = null == e ? 0 : e.length; + if (!i) + return -1; + var r = null == n ? 0 : Ra(n); + return r < 0 && (r = Yn(i + r, 0)), + an(e, Lo(t, 3), r) + } + function gs(e, t, n) { + var i = null == e ? 0 : e.length; + if (!i) + return -1; + var r = i - 1; + return n !== o && (r = Ra(n), + r = n < 0 ? Yn(i + r, 0) : Kn(r, i - 1)), + an(e, Lo(t, 3), r, !0) + } + function ys(e) { + return null != e && e.length ? qi(e, 1) : [] + } + function bs(e) { + return e && e.length ? e[0] : o + } + var _s = kr(function(e) { + var t = Qt(e, qr); + return t.length && t[0] === e[0] ? ir(t) : [] + }) + , ws = kr(function(e) { + var t = Cs(e) + , n = Qt(e, qr); + return t === Cs(n) ? t = o : n.pop(), + n.length && n[0] === e[0] ? ir(n, Lo(t, 2)) : [] + }) + , xs = kr(function(e) { + var t = Cs(e) + , n = Qt(e, qr); + return (t = "function" == typeof t ? t : o) && n.pop(), + n.length && n[0] === e[0] ? ir(n, o, t) : [] + }); + function Cs(e) { + var t = null == e ? 0 : e.length; + return t ? e[t - 1] : o + } + var ks = kr(Ss); + function Ss(e, t) { + return e && e.length && t && t.length ? _r(e, t) : e + } + var Ds = No(function(e, t) { + var n = null == e ? 0 : e.length + , i = Ii(e, t); + return wr(e, Qt(t, function(e) { + return Ko(e, n) ? +e : e + }).sort(eo)), + i + }); + function Es(e) { + return null == e ? e : Zn.call(e) + } + var $s = kr(function(e) { + return Vr(qi(e, 1, _a, !0)) + }) + , Ts = kr(function(e) { + var t = Cs(e); + return _a(t) && (t = o), + Vr(qi(e, 1, _a, !0), Lo(t, 2)) + }) + , Ms = kr(function(e) { + var t = Cs(e); + return t = "function" == typeof t ? t : o, + Vr(qi(e, 1, _a, !0), o, t) + }); + function Ns(e) { + if (!e || !e.length) + return []; + var t = 0; + return e = Xt(e, function(e) { + if (_a(e)) + return t = Yn(e.length, t), + !0 + }), + vn(t, function(t) { + return Qt(e, dn(t)) + }) + } + function Os(e, t) { + if (!e || !e.length) + return []; + var n = Ns(e); + return null == t ? n : Qt(n, function(e) { + return qt(t, o, e) + }) + } + var Ps = kr(function(e, t) { + return _a(e) ? Bi(e, t) : [] + }) + , Is = kr(function(e) { + return jr(Xt(e, _a)) + }) + , As = kr(function(e) { + var t = Cs(e); + return _a(t) && (t = o), + jr(Xt(e, _a), Lo(t, 2)) + }) + , Fs = kr(function(e) { + var t = Cs(e); + return t = "function" == typeof t ? t : o, + jr(Xt(e, _a), o, t) + }) + , Ls = kr(Ns); + var Vs = kr(function(e) { + var t = e.length + , n = t > 1 ? e[t - 1] : o; + return n = "function" == typeof n ? (e.pop(), + n) : o, + Os(e, n) + }); + function Bs(e) { + var t = pi(e); + return t.__chain__ = !0, + t + } + function zs(e, t) { + return t(e) + } + var Rs = No(function(e) { + var t = e.length + , n = t ? e[0] : 0 + , i = this.__wrapped__ + , r = function(t) { + return Ii(t, e) + }; + return !(t > 1 || this.__actions__.length) && i instanceof yi && Ko(n) ? ((i = i.slice(n, +n + (t ? 1 : 0))).__actions__.push({ + func: zs, + args: [r], + thisArg: o + }), + new gi(i,this.__chain__).thru(function(e) { + return t && !e.length && e.push(o), + e + })) : this.thru(r) + }); + var Hs = oo(function(e, t, n) { + ct.call(e, n) ? ++e[n] : Pi(e, n, 1) + }); + var js = fo(vs) + , Ws = fo(gs); + function qs(e, t) { + return (ga(e) ? Kt : zi)(e, Lo(t, 3)) + } + function Ys(e, t) { + return (ga(e) ? Ut : Ri)(e, Lo(t, 3)) + } + var Ks = oo(function(e, t, n) { + ct.call(e, n) ? e[n].push(t) : Pi(e, n, [t]) + }); + var Us = kr(function(e, t, n) { + var r = -1 + , o = "function" == typeof t + , s = ba(e) ? i(e.length) : []; + return zi(e, function(e) { + s[++r] = o ? qt(t, e, n) : rr(e, t, n) + }), + s + }) + , Gs = oo(function(e, t, n) { + Pi(e, n, t) + }); + function Xs(e, t) { + return (ga(e) ? Qt : fr)(e, Lo(t, 3)) + } + var Zs = oo(function(e, t, n) { + e[n ? 0 : 1].push(t) + }, function() { + return [[], []] + }); + var Js = kr(function(e, t) { + if (null == e) + return []; + var n = t.length; + return n > 1 && Uo(e, t[0], t[1]) ? t = [] : n > 2 && Uo(t[0], t[1], t[2]) && (t = [t[0]]), + yr(e, qi(t, 1), []) + }) + , Qs = Ln || function() { + return Pt.Date.now() + } + ; + function ea(e, t, n) { + return t = n ? o : t, + t = e && null == t ? e.length : t, + Do(e, k, o, o, o, o, t) + } + function ta(e, t) { + var n; + if ("function" != typeof t) + throw new rt(l); + return e = Ra(e), + function() { + return --e > 0 && (n = t.apply(this, arguments)), + e <= 1 && (t = o), + n + } + } + var na = kr(function(e, t, n) { + var i = g; + if (n.length) { + var r = $n(n, Fo(na)); + i |= x + } + return Do(e, i, t, n, r) + }) + , ia = kr(function(e, t, n) { + var i = g | y; + if (n.length) { + var r = $n(n, Fo(ia)); + i |= x + } + return Do(t, i, e, n, r) + }); + function ra(e, t, n) { + var i, r, s, a, u, c, h = 0, d = !1, f = !1, p = !0; + if ("function" != typeof e) + throw new rt(l); + function m(t) { + var n = i + , s = r; + return i = r = o, + h = t, + a = e.apply(s, n) + } + function v(e) { + var n = e - c; + return c === o || n >= t || n < 0 || f && e - h >= s + } + function g() { + var e = Qs(); + if (v(e)) + return y(e); + u = rs(g, function(e) { + var n = t - (e - c); + return f ? Kn(n, s - (e - h)) : n + }(e)) + } + function y(e) { + return u = o, + p && i ? m(e) : (i = r = o, + a) + } + function b() { + var e = Qs() + , n = v(e); + if (i = arguments, + r = this, + c = e, + n) { + if (u === o) + return function(e) { + return h = e, + u = rs(g, t), + d ? m(e) : a + }(c); + if (f) + return u = rs(g, t), + m(c) + } + return u === o && (u = rs(g, t)), + a + } + return t = ja(t) || 0, + Ea(n) && (d = !!n.leading, + s = (f = "maxWait"in n) ? Yn(ja(n.maxWait) || 0, t) : s, + p = "trailing"in n ? !!n.trailing : p), + b.cancel = function() { + u !== o && Xr(u), + h = 0, + i = c = r = u = o + } + , + b.flush = function() { + return u === o ? a : y(Qs()) + } + , + b + } + var oa = kr(function(e, t) { + return Vi(e, 1, t) + }) + , sa = kr(function(e, t, n) { + return Vi(e, ja(t) || 0, n) + }); + function aa(e, t) { + if ("function" != typeof e || null != t && "function" != typeof t) + throw new rt(l); + var n = function() { + var i = arguments + , r = t ? t.apply(this, i) : i[0] + , o = n.cache; + if (o.has(r)) + return o.get(r); + var s = e.apply(this, i); + return n.cache = o.set(r, s) || o, + s + }; + return n.cache = new (aa.Cache || wi), + n + } + function la(e) { + if ("function" != typeof e) + throw new rt(l); + return function() { + var t = arguments; + switch (t.length) { + case 0: + return !e.call(this); + case 1: + return !e.call(this, t[0]); + case 2: + return !e.call(this, t[0], t[1]); + case 3: + return !e.call(this, t[0], t[1], t[2]) + } + return !e.apply(this, t) + } + } + aa.Cache = wi; + var ua = Ur(function(e, t) { + var n = (t = 1 == t.length && ga(t[0]) ? Qt(t[0], gn(Lo())) : Qt(qi(t, 1), gn(Lo()))).length; + return kr(function(i) { + for (var r = -1, o = Kn(i.length, n); ++r < o; ) + i[r] = t[r].call(this, i[r]); + return qt(e, this, i) + }) + }) + , ca = kr(function(e, t) { + var n = $n(t, Fo(ca)); + return Do(e, x, o, t, n) + }) + , ha = kr(function(e, t) { + var n = $n(t, Fo(ha)); + return Do(e, C, o, t, n) + }) + , da = No(function(e, t) { + return Do(e, S, o, o, o, t) + }); + function fa(e, t) { + return e === t || e != e && t != t + } + var pa = wo(er) + , ma = wo(function(e, t) { + return e >= t + }) + , va = or(function() { + return arguments + }()) ? or : function(e) { + return $a(e) && ct.call(e, "callee") && !It.call(e, "callee") + } + , ga = i.isArray + , ya = Bt ? gn(Bt) : function(e) { + return $a(e) && Qi(e) == le + } + ; + function ba(e) { + return null != e && Da(e.length) && !ka(e) + } + function _a(e) { + return $a(e) && ba(e) + } + var wa = Hn || jl + , xa = zt ? gn(zt) : function(e) { + return $a(e) && Qi(e) == q + } + ; + function Ca(e) { + if (!$a(e)) + return !1; + var t = Qi(e); + return t == K || t == Y || "string" == typeof e.message && "string" == typeof e.name && !Na(e) + } + function ka(e) { + if (!Ea(e)) + return !1; + var t = Qi(e); + return t == U || t == G || t == j || t == ee + } + function Sa(e) { + return "number" == typeof e && e == Ra(e) + } + function Da(e) { + return "number" == typeof e && e > -1 && e % 1 == 0 && e <= I + } + function Ea(e) { + var t = typeof e; + return null != e && ("object" == t || "function" == t) + } + function $a(e) { + return null != e && "object" == typeof e + } + var Ta = Rt ? gn(Rt) : function(e) { + return $a(e) && jo(e) == X + } + ; + function Ma(e) { + return "number" == typeof e || $a(e) && Qi(e) == Z + } + function Na(e) { + if (!$a(e) || Qi(e) != Q) + return !1; + var t = Nt(e); + if (null === t) + return !0; + var n = ct.call(t, "constructor") && t.constructor; + return "function" == typeof n && n instanceof n && ut.call(n) == pt + } + var Oa = Ht ? gn(Ht) : function(e) { + return $a(e) && Qi(e) == te + } + ; + var Pa = jt ? gn(jt) : function(e) { + return $a(e) && jo(e) == ne + } + ; + function Ia(e) { + return "string" == typeof e || !ga(e) && $a(e) && Qi(e) == ie + } + function Aa(e) { + return "symbol" == typeof e || $a(e) && Qi(e) == re + } + var Fa = Wt ? gn(Wt) : function(e) { + return $a(e) && Da(e.length) && !!Dt[Qi(e)] + } + ; + var La = wo(dr) + , Va = wo(function(e, t) { + return e <= t + }); + function Ba(e) { + if (!e) + return []; + if (ba(e)) + return Ia(e) ? Pn(e) : io(e); + if (Vt && e[Vt]) + return function(e) { + for (var t, n = []; !(t = e.next()).done; ) + n.push(t.value); + return n + }(e[Vt]()); + var t = jo(e); + return (t == X ? Dn : t == ne ? Mn : fl)(e) + } + function za(e) { + return e ? (e = ja(e)) === P || e === -P ? (e < 0 ? -1 : 1) * A : e == e ? e : 0 : 0 === e ? e : 0 + } + function Ra(e) { + var t = za(e) + , n = t % 1; + return t == t ? n ? t - n : t : 0 + } + function Ha(e) { + return e ? Ai(Ra(e), 0, L) : 0 + } + function ja(e) { + if ("number" == typeof e) + return e; + if (Aa(e)) + return F; + if (Ea(e)) { + var t = "function" == typeof e.valueOf ? e.valueOf() : e; + e = Ea(t) ? t + "" : t + } + if ("string" != typeof e) + return 0 === e ? e : +e; + e = e.replace(Ie, ""); + var n = qe.test(e); + return n || Ke.test(e) ? Mt(e.slice(2), n ? 2 : 8) : We.test(e) ? F : +e + } + function Wa(e) { + return ro(e, ol(e)) + } + function qa(e) { + return null == e ? "" : Lr(e) + } + var Ya = so(function(e, t) { + if (Jo(t) || ba(t)) + ro(t, rl(t), e); + else + for (var n in t) + ct.call(t, n) && Ti(e, n, t[n]) + }) + , Ka = so(function(e, t) { + ro(t, ol(t), e) + }) + , Ua = so(function(e, t, n, i) { + ro(t, ol(t), e, i) + }) + , Ga = so(function(e, t, n, i) { + ro(t, rl(t), e, i) + }) + , Xa = No(Ii); + var Za = kr(function(e, t) { + e = tt(e); + var n = -1 + , i = t.length + , r = i > 2 ? t[2] : o; + for (r && Uo(t[0], t[1], r) && (i = 1); ++n < i; ) + for (var s = t[n], a = ol(s), l = -1, u = a.length; ++l < u; ) { + var c = a[l] + , h = e[c]; + (h === o || fa(h, at[c]) && !ct.call(e, c)) && (e[c] = s[c]) + } + return e + }) + , Ja = kr(function(e) { + return e.push(o, $o), + qt(al, o, e) + }); + function Qa(e, t, n) { + var i = null == e ? o : Zi(e, t); + return i === o ? n : i + } + function el(e, t) { + return null != e && Wo(e, t, nr) + } + var tl = vo(function(e, t, n) { + null != t && "function" != typeof t.toString && (t = ft.call(t)), + e[t] = n + }, El(Ml)) + , nl = vo(function(e, t, n) { + null != t && "function" != typeof t.toString && (t = ft.call(t)), + ct.call(e, t) ? e[t].push(n) : e[t] = [n] + }, Lo) + , il = kr(rr); + function rl(e) { + return ba(e) ? ki(e) : cr(e) + } + function ol(e) { + return ba(e) ? ki(e, !0) : hr(e) + } + var sl = so(function(e, t, n) { + vr(e, t, n) + }) + , al = so(function(e, t, n, i) { + vr(e, t, n, i) + }) + , ll = No(function(e, t) { + var n = {}; + if (null == e) + return n; + var i = !1; + t = Qt(t, function(t) { + return t = Kr(t, e), + i || (i = t.length > 1), + t + }), + ro(e, Po(e), n), + i && (n = Fi(n, d | f | p, To)); + for (var r = t.length; r--; ) + Br(n, t[r]); + return n + }); + var ul = No(function(e, t) { + return null == e ? {} : function(e, t) { + return br(e, t, function(t, n) { + return el(e, n) + }) + }(e, t) + }); + function cl(e, t) { + if (null == e) + return {}; + var n = Qt(Po(e), function(e) { + return [e] + }); + return t = Lo(t), + br(e, n, function(e, n) { + return t(e, n[0]) + }) + } + var hl = So(rl) + , dl = So(ol); + function fl(e) { + return null == e ? [] : yn(e, rl(e)) + } + var pl = co(function(e, t, n) { + return t = t.toLowerCase(), + e + (n ? ml(t) : t) + }); + function ml(e) { + return Cl(qa(e).toLowerCase()) + } + function vl(e) { + return (e = qa(e)) && e.replace(Ge, xn).replace(bt, "") + } + var gl = co(function(e, t, n) { + return e + (n ? "-" : "") + t.toLowerCase() + }) + , yl = co(function(e, t, n) { + return e + (n ? " " : "") + t.toLowerCase() + }) + , bl = uo("toLowerCase"); + var _l = co(function(e, t, n) { + return e + (n ? "_" : "") + t.toLowerCase() + }); + var wl = co(function(e, t, n) { + return e + (n ? " " : "") + Cl(t) + }); + var xl = co(function(e, t, n) { + return e + (n ? " " : "") + t.toUpperCase() + }) + , Cl = uo("toUpperCase"); + function kl(e, t, n) { + return e = qa(e), + (t = n ? o : t) === o ? function(e) { + return Ct.test(e) + }(e) ? function(e) { + return e.match(wt) || [] + }(e) : function(e) { + return e.match(ze) || [] + }(e) : e.match(t) || [] + } + var Sl = kr(function(e, t) { + try { + return qt(e, o, t) + } catch (e) { + return Ca(e) ? e : new Je(e) + } + }) + , Dl = No(function(e, t) { + return Kt(t, function(t) { + t = cs(t), + Pi(e, t, na(e[t], e)) + }), + e + }); + function El(e) { + return function() { + return e + } + } + var $l = po() + , Tl = po(!0); + function Ml(e) { + return e + } + function Nl(e) { + return ur("function" == typeof e ? e : Fi(e, d)) + } + var Ol = kr(function(e, t) { + return function(n) { + return rr(n, e, t) + } + }) + , Pl = kr(function(e, t) { + return function(n) { + return rr(e, n, t) + } + }); + function Il(e, t, n) { + var i = rl(t) + , r = Xi(t, i); + null != n || Ea(t) && (r.length || !i.length) || (n = t, + t = e, + e = this, + r = Xi(t, rl(t))); + var o = !(Ea(n) && "chain"in n && !n.chain) + , s = ka(e); + return Kt(r, function(n) { + var i = t[n]; + e[n] = i, + s && (e.prototype[n] = function() { + var t = this.__chain__; + if (o || t) { + var n = e(this.__wrapped__); + return (n.__actions__ = io(this.__actions__)).push({ + func: i, + args: arguments, + thisArg: e + }), + n.__chain__ = t, + n + } + return i.apply(e, en([this.value()], arguments)) + } + ) + }), + e + } + function Al() {} + var Fl = yo(Qt) + , Ll = yo(Gt) + , Vl = yo(rn); + function Bl(e) { + return Go(e) ? dn(cs(e)) : function(e) { + return function(t) { + return Zi(t, e) + } + }(e) + } + var zl = _o() + , Rl = _o(!0); + function Hl() { + return [] + } + function jl() { + return !1 + } + var Wl = go(function(e, t) { + return e + t + }, 0) + , ql = Co("ceil") + , Yl = go(function(e, t) { + return e / t + }, 1) + , Kl = Co("floor"); + var Ul, Gl = go(function(e, t) { + return e * t + }, 1), Xl = Co("round"), Zl = go(function(e, t) { + return e - t + }, 0); + return pi.after = function(e, t) { + if ("function" != typeof t) + throw new rt(l); + return e = Ra(e), + function() { + if (--e < 1) + return t.apply(this, arguments) + } + } + , + pi.ary = ea, + pi.assign = Ya, + pi.assignIn = Ka, + pi.assignInWith = Ua, + pi.assignWith = Ga, + pi.at = Xa, + pi.before = ta, + pi.bind = na, + pi.bindAll = Dl, + pi.bindKey = ia, + pi.castArray = function() { + if (!arguments.length) + return []; + var e = arguments[0]; + return ga(e) ? e : [e] + } + , + pi.chain = Bs, + pi.chunk = function(e, t, n) { + t = (n ? Uo(e, t, n) : t === o) ? 1 : Yn(Ra(t), 0); + var r = null == e ? 0 : e.length; + if (!r || t < 1) + return []; + for (var s = 0, a = 0, l = i(Bn(r / t)); s < r; ) + l[a++] = Nr(e, s, s += t); + return l + } + , + pi.compact = function(e) { + for (var t = -1, n = null == e ? 0 : e.length, i = 0, r = []; ++t < n; ) { + var o = e[t]; + o && (r[i++] = o) + } + return r + } + , + pi.concat = function() { + var e = arguments.length; + if (!e) + return []; + for (var t = i(e - 1), n = arguments[0], r = e; r--; ) + t[r - 1] = arguments[r]; + return en(ga(n) ? io(n) : [n], qi(t, 1)) + } + , + pi.cond = function(e) { + var t = null == e ? 0 : e.length + , n = Lo(); + return e = t ? Qt(e, function(e) { + if ("function" != typeof e[1]) + throw new rt(l); + return [n(e[0]), e[1]] + }) : [], + kr(function(n) { + for (var i = -1; ++i < t; ) { + var r = e[i]; + if (qt(r[0], this, n)) + return qt(r[1], this, n) + } + }) + } + , + pi.conforms = function(e) { + return function(e) { + var t = rl(e); + return function(n) { + return Li(n, e, t) + } + }(Fi(e, d)) + } + , + pi.constant = El, + pi.countBy = Hs, + pi.create = function(e, t) { + var n = mi(e); + return null == t ? n : Oi(n, t) + } + , + pi.curry = function e(t, n, i) { + var r = Do(t, _, o, o, o, o, o, n = i ? o : n); + return r.placeholder = e.placeholder, + r + } + , + pi.curryRight = function e(t, n, i) { + var r = Do(t, w, o, o, o, o, o, n = i ? o : n); + return r.placeholder = e.placeholder, + r + } + , + pi.debounce = ra, + pi.defaults = Za, + pi.defaultsDeep = Ja, + pi.defer = oa, + pi.delay = sa, + pi.difference = fs, + pi.differenceBy = ps, + pi.differenceWith = ms, + pi.drop = function(e, t, n) { + var i = null == e ? 0 : e.length; + return i ? Nr(e, (t = n || t === o ? 1 : Ra(t)) < 0 ? 0 : t, i) : [] + } + , + pi.dropRight = function(e, t, n) { + var i = null == e ? 0 : e.length; + return i ? Nr(e, 0, (t = i - (t = n || t === o ? 1 : Ra(t))) < 0 ? 0 : t) : [] + } + , + pi.dropRightWhile = function(e, t) { + return e && e.length ? Rr(e, Lo(t, 3), !0, !0) : [] + } + , + pi.dropWhile = function(e, t) { + return e && e.length ? Rr(e, Lo(t, 3), !0) : [] + } + , + pi.fill = function(e, t, n, i) { + var r = null == e ? 0 : e.length; + return r ? (n && "number" != typeof n && Uo(e, t, n) && (n = 0, + i = r), + function(e, t, n, i) { + var r = e.length; + for ((n = Ra(n)) < 0 && (n = -n > r ? 0 : r + n), + (i = i === o || i > r ? r : Ra(i)) < 0 && (i += r), + i = n > i ? 0 : Ha(i); n < i; ) + e[n++] = t; + return e + }(e, t, n, i)) : [] + } + , + pi.filter = function(e, t) { + return (ga(e) ? Xt : Wi)(e, Lo(t, 3)) + } + , + pi.flatMap = function(e, t) { + return qi(Xs(e, t), 1) + } + , + pi.flatMapDeep = function(e, t) { + return qi(Xs(e, t), P) + } + , + pi.flatMapDepth = function(e, t, n) { + return n = n === o ? 1 : Ra(n), + qi(Xs(e, t), n) + } + , + pi.flatten = ys, + pi.flattenDeep = function(e) { + return null != e && e.length ? qi(e, P) : [] + } + , + pi.flattenDepth = function(e, t) { + return null != e && e.length ? qi(e, t = t === o ? 1 : Ra(t)) : [] + } + , + pi.flip = function(e) { + return Do(e, D) + } + , + pi.flow = $l, + pi.flowRight = Tl, + pi.fromPairs = function(e) { + for (var t = -1, n = null == e ? 0 : e.length, i = {}; ++t < n; ) { + var r = e[t]; + i[r[0]] = r[1] + } + return i + } + , + pi.functions = function(e) { + return null == e ? [] : Xi(e, rl(e)) + } + , + pi.functionsIn = function(e) { + return null == e ? [] : Xi(e, ol(e)) + } + , + pi.groupBy = Ks, + pi.initial = function(e) { + return null != e && e.length ? Nr(e, 0, -1) : [] + } + , + pi.intersection = _s, + pi.intersectionBy = ws, + pi.intersectionWith = xs, + pi.invert = tl, + pi.invertBy = nl, + pi.invokeMap = Us, + pi.iteratee = Nl, + pi.keyBy = Gs, + pi.keys = rl, + pi.keysIn = ol, + pi.map = Xs, + pi.mapKeys = function(e, t) { + var n = {}; + return t = Lo(t, 3), + Ui(e, function(e, i, r) { + Pi(n, t(e, i, r), e) + }), + n + } + , + pi.mapValues = function(e, t) { + var n = {}; + return t = Lo(t, 3), + Ui(e, function(e, i, r) { + Pi(n, i, t(e, i, r)) + }), + n + } + , + pi.matches = function(e) { + return pr(Fi(e, d)) + } + , + pi.matchesProperty = function(e, t) { + return mr(e, Fi(t, d)) + } + , + pi.memoize = aa, + pi.merge = sl, + pi.mergeWith = al, + pi.method = Ol, + pi.methodOf = Pl, + pi.mixin = Il, + pi.negate = la, + pi.nthArg = function(e) { + return e = Ra(e), + kr(function(t) { + return gr(t, e) + }) + } + , + pi.omit = ll, + pi.omitBy = function(e, t) { + return cl(e, la(Lo(t))) + } + , + pi.once = function(e) { + return ta(2, e) + } + , + pi.orderBy = function(e, t, n, i) { + return null == e ? [] : (ga(t) || (t = null == t ? [] : [t]), + ga(n = i ? o : n) || (n = null == n ? [] : [n]), + yr(e, t, n)) + } + , + pi.over = Fl, + pi.overArgs = ua, + pi.overEvery = Ll, + pi.overSome = Vl, + pi.partial = ca, + pi.partialRight = ha, + pi.partition = Zs, + pi.pick = ul, + pi.pickBy = cl, + pi.property = Bl, + pi.propertyOf = function(e) { + return function(t) { + return null == e ? o : Zi(e, t) + } + } + , + pi.pull = ks, + pi.pullAll = Ss, + pi.pullAllBy = function(e, t, n) { + return e && e.length && t && t.length ? _r(e, t, Lo(n, 2)) : e + } + , + pi.pullAllWith = function(e, t, n) { + return e && e.length && t && t.length ? _r(e, t, o, n) : e + } + , + pi.pullAt = Ds, + pi.range = zl, + pi.rangeRight = Rl, + pi.rearg = da, + pi.reject = function(e, t) { + return (ga(e) ? Xt : Wi)(e, la(Lo(t, 3))) + } + , + pi.remove = function(e, t) { + var n = []; + if (!e || !e.length) + return n; + var i = -1 + , r = [] + , o = e.length; + for (t = Lo(t, 3); ++i < o; ) { + var s = e[i]; + t(s, i, e) && (n.push(s), + r.push(i)) + } + return wr(e, r), + n + } + , + pi.rest = function(e, t) { + if ("function" != typeof e) + throw new rt(l); + return kr(e, t = t === o ? t : Ra(t)) + } + , + pi.reverse = Es, + pi.sampleSize = function(e, t, n) { + return t = (n ? Uo(e, t, n) : t === o) ? 1 : Ra(t), + (ga(e) ? Di : Dr)(e, t) + } + , + pi.set = function(e, t, n) { + return null == e ? e : Er(e, t, n) + } + , + pi.setWith = function(e, t, n, i) { + return i = "function" == typeof i ? i : o, + null == e ? e : Er(e, t, n, i) + } + , + pi.shuffle = function(e) { + return (ga(e) ? Ei : Mr)(e) + } + , + pi.slice = function(e, t, n) { + var i = null == e ? 0 : e.length; + return i ? (n && "number" != typeof n && Uo(e, t, n) ? (t = 0, + n = i) : (t = null == t ? 0 : Ra(t), + n = n === o ? i : Ra(n)), + Nr(e, t, n)) : [] + } + , + pi.sortBy = Js, + pi.sortedUniq = function(e) { + return e && e.length ? Ar(e) : [] + } + , + pi.sortedUniqBy = function(e, t) { + return e && e.length ? Ar(e, Lo(t, 2)) : [] + } + , + pi.split = function(e, t, n) { + return n && "number" != typeof n && Uo(e, t, n) && (t = n = o), + (n = n === o ? L : n >>> 0) ? (e = qa(e)) && ("string" == typeof t || null != t && !Oa(t)) && !(t = Lr(t)) && Sn(e) ? Gr(Pn(e), 0, n) : e.split(t, n) : [] + } + , + pi.spread = function(e, t) { + if ("function" != typeof e) + throw new rt(l); + return t = null == t ? 0 : Yn(Ra(t), 0), + kr(function(n) { + var i = n[t] + , r = Gr(n, 0, t); + return i && en(r, i), + qt(e, this, r) + }) + } + , + pi.tail = function(e) { + var t = null == e ? 0 : e.length; + return t ? Nr(e, 1, t) : [] + } + , + pi.take = function(e, t, n) { + return e && e.length ? Nr(e, 0, (t = n || t === o ? 1 : Ra(t)) < 0 ? 0 : t) : [] + } + , + pi.takeRight = function(e, t, n) { + var i = null == e ? 0 : e.length; + return i ? Nr(e, (t = i - (t = n || t === o ? 1 : Ra(t))) < 0 ? 0 : t, i) : [] + } + , + pi.takeRightWhile = function(e, t) { + return e && e.length ? Rr(e, Lo(t, 3), !1, !0) : [] + } + , + pi.takeWhile = function(e, t) { + return e && e.length ? Rr(e, Lo(t, 3)) : [] + } + , + pi.tap = function(e, t) { + return t(e), + e + } + , + pi.throttle = function(e, t, n) { + var i = !0 + , r = !0; + if ("function" != typeof e) + throw new rt(l); + return Ea(n) && (i = "leading"in n ? !!n.leading : i, + r = "trailing"in n ? !!n.trailing : r), + ra(e, t, { + leading: i, + maxWait: t, + trailing: r + }) + } + , + pi.thru = zs, + pi.toArray = Ba, + pi.toPairs = hl, + pi.toPairsIn = dl, + pi.toPath = function(e) { + return ga(e) ? Qt(e, cs) : Aa(e) ? [e] : io(us(qa(e))) + } + , + pi.toPlainObject = Wa, + pi.transform = function(e, t, n) { + var i = ga(e) + , r = i || wa(e) || Fa(e); + if (t = Lo(t, 4), + null == n) { + var o = e && e.constructor; + n = r ? i ? new o : [] : Ea(e) && ka(o) ? mi(Nt(e)) : {} + } + return (r ? Kt : Ui)(e, function(e, i, r) { + return t(n, e, i, r) + }), + n + } + , + pi.unary = function(e) { + return ea(e, 1) + } + , + pi.union = $s, + pi.unionBy = Ts, + pi.unionWith = Ms, + pi.uniq = function(e) { + return e && e.length ? Vr(e) : [] + } + , + pi.uniqBy = function(e, t) { + return e && e.length ? Vr(e, Lo(t, 2)) : [] + } + , + pi.uniqWith = function(e, t) { + return t = "function" == typeof t ? t : o, + e && e.length ? Vr(e, o, t) : [] + } + , + pi.unset = function(e, t) { + return null == e || Br(e, t) + } + , + pi.unzip = Ns, + pi.unzipWith = Os, + pi.update = function(e, t, n) { + return null == e ? e : zr(e, t, Yr(n)) + } + , + pi.updateWith = function(e, t, n, i) { + return i = "function" == typeof i ? i : o, + null == e ? e : zr(e, t, Yr(n), i) + } + , + pi.values = fl, + pi.valuesIn = function(e) { + return null == e ? [] : yn(e, ol(e)) + } + , + pi.without = Ps, + pi.words = kl, + pi.wrap = function(e, t) { + return ca(Yr(t), e) + } + , + pi.xor = Is, + pi.xorBy = As, + pi.xorWith = Fs, + pi.zip = Ls, + pi.zipObject = function(e, t) { + return Wr(e || [], t || [], Ti) + } + , + pi.zipObjectDeep = function(e, t) { + return Wr(e || [], t || [], Er) + } + , + pi.zipWith = Vs, + pi.entries = hl, + pi.entriesIn = dl, + pi.extend = Ka, + pi.extendWith = Ua, + Il(pi, pi), + pi.add = Wl, + pi.attempt = Sl, + pi.camelCase = pl, + pi.capitalize = ml, + pi.ceil = ql, + pi.clamp = function(e, t, n) { + return n === o && (n = t, + t = o), + n !== o && (n = (n = ja(n)) == n ? n : 0), + t !== o && (t = (t = ja(t)) == t ? t : 0), + Ai(ja(e), t, n) + } + , + pi.clone = function(e) { + return Fi(e, p) + } + , + pi.cloneDeep = function(e) { + return Fi(e, d | p) + } + , + pi.cloneDeepWith = function(e, t) { + return Fi(e, d | p, t = "function" == typeof t ? t : o) + } + , + pi.cloneWith = function(e, t) { + return Fi(e, p, t = "function" == typeof t ? t : o) + } + , + pi.conformsTo = function(e, t) { + return null == t || Li(e, t, rl(t)) + } + , + pi.deburr = vl, + pi.defaultTo = function(e, t) { + return null == e || e != e ? t : e + } + , + pi.divide = Yl, + pi.endsWith = function(e, t, n) { + e = qa(e), + t = Lr(t); + var i = e.length + , r = n = n === o ? i : Ai(Ra(n), 0, i); + return (n -= t.length) >= 0 && e.slice(n, r) == t + } + , + pi.eq = fa, + pi.escape = function(e) { + return (e = qa(e)) && Se.test(e) ? e.replace(Ce, Cn) : e + } + , + pi.escapeRegExp = function(e) { + return (e = qa(e)) && Pe.test(e) ? e.replace(Oe, "\\$&") : e + } + , + pi.every = function(e, t, n) { + var i = ga(e) ? Gt : Hi; + return n && Uo(e, t, n) && (t = o), + i(e, Lo(t, 3)) + } + , + pi.find = js, + pi.findIndex = vs, + pi.findKey = function(e, t) { + return sn(e, Lo(t, 3), Ui) + } + , + pi.findLast = Ws, + pi.findLastIndex = gs, + pi.findLastKey = function(e, t) { + return sn(e, Lo(t, 3), Gi) + } + , + pi.floor = Kl, + pi.forEach = qs, + pi.forEachRight = Ys, + pi.forIn = function(e, t) { + return null == e ? e : Yi(e, Lo(t, 3), ol) + } + , + pi.forInRight = function(e, t) { + return null == e ? e : Ki(e, Lo(t, 3), ol) + } + , + pi.forOwn = function(e, t) { + return e && Ui(e, Lo(t, 3)) + } + , + pi.forOwnRight = function(e, t) { + return e && Gi(e, Lo(t, 3)) + } + , + pi.get = Qa, + pi.gt = pa, + pi.gte = ma, + pi.has = function(e, t) { + return null != e && Wo(e, t, tr) + } + , + pi.hasIn = el, + pi.head = bs, + pi.identity = Ml, + pi.includes = function(e, t, n, i) { + e = ba(e) ? e : fl(e), + n = n && !i ? Ra(n) : 0; + var r = e.length; + return n < 0 && (n = Yn(r + n, 0)), + Ia(e) ? n <= r && e.indexOf(t, n) > -1 : !!r && ln(e, t, n) > -1 + } + , + pi.indexOf = function(e, t, n) { + var i = null == e ? 0 : e.length; + if (!i) + return -1; + var r = null == n ? 0 : Ra(n); + return r < 0 && (r = Yn(i + r, 0)), + ln(e, t, r) + } + , + pi.inRange = function(e, t, n) { + return t = za(t), + n === o ? (n = t, + t = 0) : n = za(n), + function(e, t, n) { + return e >= Kn(t, n) && e < Yn(t, n) + }(e = ja(e), t, n) + } + , + pi.invoke = il, + pi.isArguments = va, + pi.isArray = ga, + pi.isArrayBuffer = ya, + pi.isArrayLike = ba, + pi.isArrayLikeObject = _a, + pi.isBoolean = function(e) { + return !0 === e || !1 === e || $a(e) && Qi(e) == W + } + , + pi.isBuffer = wa, + pi.isDate = xa, + pi.isElement = function(e) { + return $a(e) && 1 === e.nodeType && !Na(e) + } + , + pi.isEmpty = function(e) { + if (null == e) + return !0; + if (ba(e) && (ga(e) || "string" == typeof e || "function" == typeof e.splice || wa(e) || Fa(e) || va(e))) + return !e.length; + var t = jo(e); + if (t == X || t == ne) + return !e.size; + if (Jo(e)) + return !cr(e).length; + for (var n in e) + if (ct.call(e, n)) + return !1; + return !0 + } + , + pi.isEqual = function(e, t) { + return sr(e, t) + } + , + pi.isEqualWith = function(e, t, n) { + var i = (n = "function" == typeof n ? n : o) ? n(e, t) : o; + return i === o ? sr(e, t, o, n) : !!i + } + , + pi.isError = Ca, + pi.isFinite = function(e) { + return "number" == typeof e && jn(e) + } + , + pi.isFunction = ka, + pi.isInteger = Sa, + pi.isLength = Da, + pi.isMap = Ta, + pi.isMatch = function(e, t) { + return e === t || ar(e, t, Bo(t)) + } + , + pi.isMatchWith = function(e, t, n) { + return n = "function" == typeof n ? n : o, + ar(e, t, Bo(t), n) + } + , + pi.isNaN = function(e) { + return Ma(e) && e != +e + } + , + pi.isNative = function(e) { + if (Zo(e)) + throw new Je(a); + return lr(e) + } + , + pi.isNil = function(e) { + return null == e + } + , + pi.isNull = function(e) { + return null === e + } + , + pi.isNumber = Ma, + pi.isObject = Ea, + pi.isObjectLike = $a, + pi.isPlainObject = Na, + pi.isRegExp = Oa, + pi.isSafeInteger = function(e) { + return Sa(e) && e >= -I && e <= I + } + , + pi.isSet = Pa, + pi.isString = Ia, + pi.isSymbol = Aa, + pi.isTypedArray = Fa, + pi.isUndefined = function(e) { + return e === o + } + , + pi.isWeakMap = function(e) { + return $a(e) && jo(e) == se + } + , + pi.isWeakSet = function(e) { + return $a(e) && Qi(e) == ae + } + , + pi.join = function(e, t) { + return null == e ? "" : Wn.call(e, t) + } + , + pi.kebabCase = gl, + pi.last = Cs, + pi.lastIndexOf = function(e, t, n) { + var i = null == e ? 0 : e.length; + if (!i) + return -1; + var r = i; + return n !== o && (r = (r = Ra(n)) < 0 ? Yn(i + r, 0) : Kn(r, i - 1)), + t == t ? function(e, t, n) { + for (var i = n + 1; i--; ) + if (e[i] === t) + return i; + return i + }(e, t, r) : an(e, cn, r, !0) + } + , + pi.lowerCase = yl, + pi.lowerFirst = bl, + pi.lt = La, + pi.lte = Va, + pi.max = function(e) { + return e && e.length ? ji(e, Ml, er) : o + } + , + pi.maxBy = function(e, t) { + return e && e.length ? ji(e, Lo(t, 2), er) : o + } + , + pi.mean = function(e) { + return hn(e, Ml) + } + , + pi.meanBy = function(e, t) { + return hn(e, Lo(t, 2)) + } + , + pi.min = function(e) { + return e && e.length ? ji(e, Ml, dr) : o + } + , + pi.minBy = function(e, t) { + return e && e.length ? ji(e, Lo(t, 2), dr) : o + } + , + pi.stubArray = Hl, + pi.stubFalse = jl, + pi.stubObject = function() { + return {} + } + , + pi.stubString = function() { + return "" + } + , + pi.stubTrue = function() { + return !0 + } + , + pi.multiply = Gl, + pi.nth = function(e, t) { + return e && e.length ? gr(e, Ra(t)) : o + } + , + pi.noConflict = function() { + return Pt._ === this && (Pt._ = mt), + this + } + , + pi.noop = Al, + pi.now = Qs, + pi.pad = function(e, t, n) { + e = qa(e); + var i = (t = Ra(t)) ? On(e) : 0; + if (!t || i >= t) + return e; + var r = (t - i) / 2; + return bo(zn(r), n) + e + bo(Bn(r), n) + } + , + pi.padEnd = function(e, t, n) { + e = qa(e); + var i = (t = Ra(t)) ? On(e) : 0; + return t && i < t ? e + bo(t - i, n) : e + } + , + pi.padStart = function(e, t, n) { + e = qa(e); + var i = (t = Ra(t)) ? On(e) : 0; + return t && i < t ? bo(t - i, n) + e : e + } + , + pi.parseInt = function(e, t, n) { + return n || null == t ? t = 0 : t && (t = +t), + Gn(qa(e).replace(Ae, ""), t || 0) + } + , + pi.random = function(e, t, n) { + if (n && "boolean" != typeof n && Uo(e, t, n) && (t = n = o), + n === o && ("boolean" == typeof t ? (n = t, + t = o) : "boolean" == typeof e && (n = e, + e = o)), + e === o && t === o ? (e = 0, + t = 1) : (e = za(e), + t === o ? (t = e, + e = 0) : t = za(t)), + e > t) { + var i = e; + e = t, + t = i + } + if (n || e % 1 || t % 1) { + var r = Xn(); + return Kn(e + r * (t - e + Tt("1e-" + ((r + "").length - 1))), t) + } + return xr(e, t) + } + , + pi.reduce = function(e, t, n) { + var i = ga(e) ? tn : pn + , r = arguments.length < 3; + return i(e, Lo(t, 4), n, r, zi) + } + , + pi.reduceRight = function(e, t, n) { + var i = ga(e) ? nn : pn + , r = arguments.length < 3; + return i(e, Lo(t, 4), n, r, Ri) + } + , + pi.repeat = function(e, t, n) { + return t = (n ? Uo(e, t, n) : t === o) ? 1 : Ra(t), + Cr(qa(e), t) + } + , + pi.replace = function() { + var e = arguments + , t = qa(e[0]); + return e.length < 3 ? t : t.replace(e[1], e[2]) + } + , + pi.result = function(e, t, n) { + var i = -1 + , r = (t = Kr(t, e)).length; + for (r || (r = 1, + e = o); ++i < r; ) { + var s = null == e ? o : e[cs(t[i])]; + s === o && (i = r, + s = n), + e = ka(s) ? s.call(e) : s + } + return e + } + , + pi.round = Xl, + pi.runInContext = e, + pi.sample = function(e) { + return (ga(e) ? Si : Sr)(e) + } + , + pi.size = function(e) { + if (null == e) + return 0; + if (ba(e)) + return Ia(e) ? On(e) : e.length; + var t = jo(e); + return t == X || t == ne ? e.size : cr(e).length + } + , + pi.snakeCase = _l, + pi.some = function(e, t, n) { + var i = ga(e) ? rn : Or; + return n && Uo(e, t, n) && (t = o), + i(e, Lo(t, 3)) + } + , + pi.sortedIndex = function(e, t) { + return Pr(e, t) + } + , + pi.sortedIndexBy = function(e, t, n) { + return Ir(e, t, Lo(n, 2)) + } + , + pi.sortedIndexOf = function(e, t) { + var n = null == e ? 0 : e.length; + if (n) { + var i = Pr(e, t); + if (i < n && fa(e[i], t)) + return i + } + return -1 + } + , + pi.sortedLastIndex = function(e, t) { + return Pr(e, t, !0) + } + , + pi.sortedLastIndexBy = function(e, t, n) { + return Ir(e, t, Lo(n, 2), !0) + } + , + pi.sortedLastIndexOf = function(e, t) { + if (null != e && e.length) { + var n = Pr(e, t, !0) - 1; + if (fa(e[n], t)) + return n + } + return -1 + } + , + pi.startCase = wl, + pi.startsWith = function(e, t, n) { + return e = qa(e), + n = null == n ? 0 : Ai(Ra(n), 0, e.length), + t = Lr(t), + e.slice(n, n + t.length) == t + } + , + pi.subtract = Zl, + pi.sum = function(e) { + return e && e.length ? mn(e, Ml) : 0 + } + , + pi.sumBy = function(e, t) { + return e && e.length ? mn(e, Lo(t, 2)) : 0 + } + , + pi.template = function(e, t, n) { + var i = pi.templateSettings; + n && Uo(e, t, n) && (t = o), + e = qa(e), + t = Ua({}, t, i, Eo); + var r, s, a = Ua({}, t.imports, i.imports, Eo), l = rl(a), u = yn(a, l), c = 0, h = t.interpolate || Xe, d = "__p += '", f = nt((t.escape || Xe).source + "|" + h.source + "|" + (h === $e ? He : Xe).source + "|" + (t.evaluate || Xe).source + "|$", "g"), p = "//# sourceURL=" + ("sourceURL"in t ? t.sourceURL : "lodash.templateSources[" + ++St + "]") + "\n"; + e.replace(f, function(t, n, i, o, a, l) { + return i || (i = o), + d += e.slice(c, l).replace(Ze, kn), + n && (r = !0, + d += "' +\n__e(" + n + ") +\n'"), + a && (s = !0, + d += "';\n" + a + ";\n__p += '"), + i && (d += "' +\n((__t = (" + i + ")) == null ? '' : __t) +\n'"), + c = l + t.length, + t + }), + d += "';\n"; + var m = t.variable; + m || (d = "with (obj) {\n" + d + "\n}\n"), + d = (s ? d.replace(be, "") : d).replace(_e, "$1").replace(we, "$1;"), + d = "function(" + (m || "obj") + ") {\n" + (m ? "" : "obj || (obj = {});\n") + "var __t, __p = ''" + (r ? ", __e = _.escape" : "") + (s ? ", __j = Array.prototype.join;\nfunction print() { __p += __j.call(arguments, '') }\n" : ";\n") + d + "return __p\n}"; + var v = Sl(function() { + return Qe(l, p + "return " + d).apply(o, u) + }); + if (v.source = d, + Ca(v)) + throw v; + return v + } + , + pi.times = function(e, t) { + if ((e = Ra(e)) < 1 || e > I) + return []; + var n = L + , i = Kn(e, L); + t = Lo(t), + e -= L; + for (var r = vn(i, t); ++n < e; ) + t(n); + return r + } + , + pi.toFinite = za, + pi.toInteger = Ra, + pi.toLength = Ha, + pi.toLower = function(e) { + return qa(e).toLowerCase() + } + , + pi.toNumber = ja, + pi.toSafeInteger = function(e) { + return e ? Ai(Ra(e), -I, I) : 0 === e ? e : 0 + } + , + pi.toString = qa, + pi.toUpper = function(e) { + return qa(e).toUpperCase() + } + , + pi.trim = function(e, t, n) { + if ((e = qa(e)) && (n || t === o)) + return e.replace(Ie, ""); + if (!e || !(t = Lr(t))) + return e; + var i = Pn(e) + , r = Pn(t); + return Gr(i, _n(i, r), wn(i, r) + 1).join("") + } + , + pi.trimEnd = function(e, t, n) { + if ((e = qa(e)) && (n || t === o)) + return e.replace(Fe, ""); + if (!e || !(t = Lr(t))) + return e; + var i = Pn(e); + return Gr(i, 0, wn(i, Pn(t)) + 1).join("") + } + , + pi.trimStart = function(e, t, n) { + if ((e = qa(e)) && (n || t === o)) + return e.replace(Ae, ""); + if (!e || !(t = Lr(t))) + return e; + var i = Pn(e); + return Gr(i, _n(i, Pn(t))).join("") + } + , + pi.truncate = function(e, t) { + var n = E + , i = $; + if (Ea(t)) { + var r = "separator"in t ? t.separator : r; + n = "length"in t ? Ra(t.length) : n, + i = "omission"in t ? Lr(t.omission) : i + } + var s = (e = qa(e)).length; + if (Sn(e)) { + var a = Pn(e); + s = a.length + } + if (n >= s) + return e; + var l = n - On(i); + if (l < 1) + return i; + var u = a ? Gr(a, 0, l).join("") : e.slice(0, l); + if (r === o) + return u + i; + if (a && (l += u.length - l), + Oa(r)) { + if (e.slice(l).search(r)) { + var c, h = u; + for (r.global || (r = nt(r.source, qa(je.exec(r)) + "g")), + r.lastIndex = 0; c = r.exec(h); ) + var d = c.index; + u = u.slice(0, d === o ? l : d) + } + } else if (e.indexOf(Lr(r), l) != l) { + var f = u.lastIndexOf(r); + f > -1 && (u = u.slice(0, f)) + } + return u + i + } + , + pi.unescape = function(e) { + return (e = qa(e)) && ke.test(e) ? e.replace(xe, In) : e + } + , + pi.uniqueId = function(e) { + var t = ++ht; + return qa(e) + t + } + , + pi.upperCase = xl, + pi.upperFirst = Cl, + pi.each = qs, + pi.eachRight = Ys, + pi.first = bs, + Il(pi, (Ul = {}, + Ui(pi, function(e, t) { + ct.call(pi.prototype, t) || (Ul[t] = e) + }), + Ul), { + chain: !1 + }), + pi.VERSION = "4.17.10", + Kt(["bind", "bindKey", "curry", "curryRight", "partial", "partialRight"], function(e) { + pi[e].placeholder = pi + }), + Kt(["drop", "take"], function(e, t) { + yi.prototype[e] = function(n) { + n = n === o ? 1 : Yn(Ra(n), 0); + var i = this.__filtered__ && !t ? new yi(this) : this.clone(); + return i.__filtered__ ? i.__takeCount__ = Kn(n, i.__takeCount__) : i.__views__.push({ + size: Kn(n, L), + type: e + (i.__dir__ < 0 ? "Right" : "") + }), + i + } + , + yi.prototype[e + "Right"] = function(t) { + return this.reverse()[e](t).reverse() + } + }), + Kt(["filter", "map", "takeWhile"], function(e, t) { + var n = t + 1 + , i = n == N || 3 == n; + yi.prototype[e] = function(e) { + var t = this.clone(); + return t.__iteratees__.push({ + iteratee: Lo(e, 3), + type: n + }), + t.__filtered__ = t.__filtered__ || i, + t + } + }), + Kt(["head", "last"], function(e, t) { + var n = "take" + (t ? "Right" : ""); + yi.prototype[e] = function() { + return this[n](1).value()[0] + } + }), + Kt(["initial", "tail"], function(e, t) { + var n = "drop" + (t ? "" : "Right"); + yi.prototype[e] = function() { + return this.__filtered__ ? new yi(this) : this[n](1) + } + }), + yi.prototype.compact = function() { + return this.filter(Ml) + } + , + yi.prototype.find = function(e) { + return this.filter(e).head() + } + , + yi.prototype.findLast = function(e) { + return this.reverse().find(e) + } + , + yi.prototype.invokeMap = kr(function(e, t) { + return "function" == typeof e ? new yi(this) : this.map(function(n) { + return rr(n, e, t) + }) + }), + yi.prototype.reject = function(e) { + return this.filter(la(Lo(e))) + } + , + yi.prototype.slice = function(e, t) { + e = Ra(e); + var n = this; + return n.__filtered__ && (e > 0 || t < 0) ? new yi(n) : (e < 0 ? n = n.takeRight(-e) : e && (n = n.drop(e)), + t !== o && (n = (t = Ra(t)) < 0 ? n.dropRight(-t) : n.take(t - e)), + n) + } + , + yi.prototype.takeRightWhile = function(e) { + return this.reverse().takeWhile(e).reverse() + } + , + yi.prototype.toArray = function() { + return this.take(L) + } + , + Ui(yi.prototype, function(e, t) { + var n = /^(?:filter|find|map|reject)|While$/.test(t) + , i = /^(?:head|last)$/.test(t) + , r = pi[i ? "take" + ("last" == t ? "Right" : "") : t] + , s = i || /^find/.test(t); + r && (pi.prototype[t] = function() { + var t = this.__wrapped__ + , a = i ? [1] : arguments + , l = t instanceof yi + , u = a[0] + , c = l || ga(t) + , h = function(e) { + var t = r.apply(pi, en([e], a)); + return i && d ? t[0] : t + }; + c && n && "function" == typeof u && 1 != u.length && (l = c = !1); + var d = this.__chain__ + , f = !!this.__actions__.length + , p = s && !d + , m = l && !f; + if (!s && c) { + t = m ? t : new yi(this); + var v = e.apply(t, a); + return v.__actions__.push({ + func: zs, + args: [h], + thisArg: o + }), + new gi(v,d) + } + return p && m ? e.apply(this, a) : (v = this.thru(h), + p ? i ? v.value()[0] : v.value() : v) + } + ) + }), + Kt(["pop", "push", "shift", "sort", "splice", "unshift"], function(e) { + var t = ot[e] + , n = /^(?:push|sort|unshift)$/.test(e) ? "tap" : "thru" + , i = /^(?:pop|shift)$/.test(e); + pi.prototype[e] = function() { + var e = arguments; + if (i && !this.__chain__) { + var r = this.value(); + return t.apply(ga(r) ? r : [], e) + } + return this[n](function(n) { + return t.apply(ga(n) ? n : [], e) + }) + } + }), + Ui(yi.prototype, function(e, t) { + var n = pi[t]; + if (n) { + var i = n.name + ""; + (oi[i] || (oi[i] = [])).push({ + name: t, + func: n + }) + } + }), + oi[mo(o, y).name] = [{ + name: "wrapper", + func: o + }], + yi.prototype.clone = function() { + var e = new yi(this.__wrapped__); + return e.__actions__ = io(this.__actions__), + e.__dir__ = this.__dir__, + e.__filtered__ = this.__filtered__, + e.__iteratees__ = io(this.__iteratees__), + e.__takeCount__ = this.__takeCount__, + e.__views__ = io(this.__views__), + e + } + , + yi.prototype.reverse = function() { + if (this.__filtered__) { + var e = new yi(this); + e.__dir__ = -1, + e.__filtered__ = !0 + } else + (e = this.clone()).__dir__ *= -1; + return e + } + , + yi.prototype.value = function() { + var e = this.__wrapped__.value() + , t = this.__dir__ + , n = ga(e) + , i = t < 0 + , r = n ? e.length : 0 + , o = function(e, t, n) { + for (var i = -1, r = n.length; ++i < r; ) { + var o = n[i] + , s = o.size; + switch (o.type) { + case "drop": + e += s; + break; + case "dropRight": + t -= s; + break; + case "take": + t = Kn(t, e + s); + break; + case "takeRight": + e = Yn(e, t - s) + } + } + return { + start: e, + end: t + } + }(0, r, this.__views__) + , s = o.start + , a = o.end + , l = a - s + , u = i ? a : s - 1 + , c = this.__iteratees__ + , h = c.length + , d = 0 + , f = Kn(l, this.__takeCount__); + if (!n || !i && r == l && f == l) + return Hr(e, this.__actions__); + var p = []; + e: for (; l-- && d < f; ) { + for (var m = -1, v = e[u += t]; ++m < h; ) { + var g = c[m] + , y = g.iteratee + , b = g.type + , _ = y(v); + if (b == O) + v = _; + else if (!_) { + if (b == N) + continue e; + break e + } + } + p[d++] = v + } + return p + } + , + pi.prototype.at = Rs, + pi.prototype.chain = function() { + return Bs(this) + } + , + pi.prototype.commit = function() { + return new gi(this.value(),this.__chain__) + } + , + pi.prototype.next = function() { + this.__values__ === o && (this.__values__ = Ba(this.value())); + var e = this.__index__ >= this.__values__.length; + return { + done: e, + value: e ? o : this.__values__[this.__index__++] + } + } + , + pi.prototype.plant = function(e) { + for (var t, n = this; n instanceof vi; ) { + var i = ds(n); + i.__index__ = 0, + i.__values__ = o, + t ? r.__wrapped__ = i : t = i; + var r = i; + n = n.__wrapped__ + } + return r.__wrapped__ = e, + t + } + , + pi.prototype.reverse = function() { + var e = this.__wrapped__; + if (e instanceof yi) { + var t = e; + return this.__actions__.length && (t = new yi(this)), + (t = t.reverse()).__actions__.push({ + func: zs, + args: [Es], + thisArg: o + }), + new gi(t,this.__chain__) + } + return this.thru(Es) + } + , + pi.prototype.toJSON = pi.prototype.valueOf = pi.prototype.value = function() { + return Hr(this.__wrapped__, this.__actions__) + } + , + pi.prototype.first = pi.prototype.head, + Vt && (pi.prototype[Vt] = function() { + return this + } + ), + pi + }(); + Pt._ = An, + (r = function() { + return An + } + .call(t, n, t, i)) === o || (i.exports = r) + } + ).call(this) + } + ).call(this, n(37), n(89)(e)) + } + , function(e, t) { + var n = e.exports = { + version: "2.6.2" + }; + "number" == typeof __e && (__e = n) + } + , function(e, t) { + e.exports = function(e) { + return "object" == typeof e ? null !== e : "function" == typeof e + } + } + , function(e, t) { + e.exports = function(e) { + try { + return !!e() + } catch (e) { + return !0 + } + } + } + , function(e, t, n) { + var i = n(4) + , r = n(1); + e.exports = { + throttle: i, + debounce: r + } + } + , function(e, t, n) { + var i = n(16); + e.exports = function(e) { + if (!i(e)) + throw TypeError(e + " is not an object!"); + return e + } + } + , function(e, t) { + e.exports = function(e, t) { + return { + enumerable: !(1 & e), + configurable: !(2 & e), + writable: !(4 & e), + value: t + } + } + } + , function(e, t, n) { + var i = n(40) + , r = n(31); + e.exports = Object.keys || function(e) { + return i(e, r) + } + } + , function(e, t) { + e.exports = !0 + } + , function(e, t) { + var n = 0 + , i = Math.random(); + e.exports = function(e) { + return "Symbol(".concat(void 0 === e ? "" : e, ")_", (++n + i).toString(36)) + } + } + , function(e, t) { + t.f = {}.propertyIsEnumerable + } + , function(e, t, n) { + var i = n(5) + , r = n(15) + , o = n(60) + , s = n(9) + , a = n(7) + , l = function(e, t, n) { + var u, c, h, d = e & l.F, f = e & l.G, p = e & l.S, m = e & l.P, v = e & l.B, g = e & l.W, y = f ? r : r[t] || (r[t] = {}), b = y.prototype, _ = f ? i : p ? i[t] : (i[t] || {}).prototype; + for (u in f && (n = t), + n) + (c = !d && _ && void 0 !== _[u]) && a(y, u) || (h = c ? _[u] : n[u], + y[u] = f && "function" != typeof _[u] ? n[u] : v && c ? o(h, i) : g && _[u] == h ? function(e) { + var t = function(t, n, i) { + if (this instanceof e) { + switch (arguments.length) { + case 0: + return new e; + case 1: + return new e(t); + case 2: + return new e(t,n) + } + return new e(t,n,i) + } + return e.apply(this, arguments) + }; + return t.prototype = e.prototype, + t + }(h) : m && "function" == typeof h ? o(Function.call, h) : h, + m && ((y.virtual || (y.virtual = {}))[u] = h, + e & l.R && b && !b[u] && s(b, u, h))) + }; + l.F = 1, + l.G = 2, + l.S = 4, + l.P = 8, + l.B = 16, + l.W = 32, + l.U = 64, + l.R = 128, + e.exports = l + } + , function(e, t, n) { + var i = n(16); + e.exports = function(e, t) { + if (!i(e)) + return e; + var n, r; + if (t && "function" == typeof (n = e.toString) && !i(r = n.call(e))) + return r; + if ("function" == typeof (n = e.valueOf) && !i(r = n.call(e))) + return r; + if (!t && "function" == typeof (n = e.toString) && !i(r = n.call(e))) + return r; + throw TypeError("Can't convert object to primitive value") + } + } + , function(e, t) { + e.exports = function(e) { + if (null == e) + throw TypeError("Can't call method on " + e); + return e + } + } + , function(e, t) { + var n = Math.ceil + , i = Math.floor; + e.exports = function(e) { + return isNaN(e = +e) ? 0 : (e > 0 ? i : n)(e) + } + } + , function(e, t, n) { + var i = n(30)("keys") + , r = n(23); + e.exports = function(e) { + return i[e] || (i[e] = r(e)) + } + } + , function(e, t, n) { + var i = n(15) + , r = n(5) + , o = r["__core-js_shared__"] || (r["__core-js_shared__"] = {}); + (e.exports = function(e, t) { + return o[e] || (o[e] = void 0 !== t ? t : {}) + } + )("versions", []).push({ + version: i.version, + mode: n(22) ? "pure" : "global", + copyright: "© 2019 Denis Pushkarev (zloirock.ru)" + }) + } + , function(e, t) { + e.exports = "constructor,hasOwnProperty,isPrototypeOf,propertyIsEnumerable,toLocaleString,toString,valueOf".split(",") + } + , function(e, t) { + t.f = Object.getOwnPropertySymbols + } + , function(e, t) { + e.exports = {} + } + , function(e, t, n) { + var i = n(10).f + , r = n(7) + , o = n(13)("toStringTag"); + e.exports = function(e, t, n) { + e && !r(e = n ? e : e.prototype, o) && i(e, o, { + configurable: !0, + value: t + }) + } + } + , function(e, t, n) { + t.f = n(13) + } + , function(e, t, n) { + var i = n(5) + , r = n(15) + , o = n(22) + , s = n(35) + , a = n(10).f; + e.exports = function(e) { + var t = r.Symbol || (r.Symbol = o ? {} : i.Symbol || {}); + "_" == e.charAt(0) || e in t || a(t, e, { + value: s.f(e) + }) + } + } + , function(e, t) { + var n; + n = function() { + return this + }(); + try { + n = n || new Function("return this")() + } catch (e) { + "object" == typeof window && (n = window) + } + e.exports = n + } + , function(e, t, n) { + e.exports = !n(11) && !n(17)(function() { + return 7 != Object.defineProperty(n(39)("div"), "a", { + get: function() { + return 7 + } + }).a + }) + } + , function(e, t, n) { + var i = n(16) + , r = n(5).document + , o = i(r) && i(r.createElement); + e.exports = function(e) { + return o ? r.createElement(e) : {} + } + } + , function(e, t, n) { + var i = n(7) + , r = n(12) + , o = n(63)(!1) + , s = n(29)("IE_PROTO"); + e.exports = function(e, t) { + var n, a = r(e), l = 0, u = []; + for (n in a) + n != s && i(a, n) && u.push(n); + for (; t.length > l; ) + i(a, n = t[l++]) && (~o(u, n) || u.push(n)); + return u + } + } + , function(e, t, n) { + var i = n(42); + e.exports = Object("z").propertyIsEnumerable(0) ? Object : function(e) { + return "String" == i(e) ? e.split("") : Object(e) + } + } + , function(e, t) { + var n = {}.toString; + e.exports = function(e) { + return n.call(e).slice(8, -1) + } + } + , function(e, t, n) { + var i = n(27); + e.exports = function(e) { + return Object(i(e)) + } + } + , function(e, t, n) { + "use strict"; + var i = n(22) + , r = n(25) + , o = n(45) + , s = n(9) + , a = n(33) + , l = n(70) + , u = n(34) + , c = n(73) + , h = n(13)("iterator") + , d = !([].keys && "next"in [].keys()) + , f = function() { + return this + }; + e.exports = function(e, t, n, p, m, v, g) { + l(n, t, p); + var y, b, _, w = function(e) { + if (!d && e in S) + return S[e]; + switch (e) { + case "keys": + case "values": + return function() { + return new n(this,e) + } + } + return function() { + return new n(this,e) + } + }, x = t + " Iterator", C = "values" == m, k = !1, S = e.prototype, D = S[h] || S["@@iterator"] || m && S[m], E = D || w(m), $ = m ? C ? w("entries") : E : void 0, T = "Array" == t && S.entries || D; + if (T && (_ = c(T.call(new e))) !== Object.prototype && _.next && (u(_, x, !0), + i || "function" == typeof _[h] || s(_, h, f)), + C && D && "values" !== D.name && (k = !0, + E = function() { + return D.call(this) + } + ), + i && !g || !d && !k && S[h] || s(S, h, E), + a[t] = E, + a[x] = f, + m) + if (y = { + values: C ? E : w("values"), + keys: v ? E : w("keys"), + entries: $ + }, + g) + for (b in y) + b in S || o(S, b, y[b]); + else + r(r.P + r.F * (d || k), t, y); + return y + } + } + , function(e, t, n) { + e.exports = n(9) + } + , function(e, t, n) { + var i = n(19) + , r = n(71) + , o = n(31) + , s = n(29)("IE_PROTO") + , a = function() {} + , l = function() { + var e, t = n(39)("iframe"), i = o.length; + for (t.style.display = "none", + n(72).appendChild(t), + t.src = "javascript:", + (e = t.contentWindow.document).open(), + e.write(" + + + + + + + + + + +
+ +
+ + + + \ No newline at end of file diff --git a/src/web/mysql.js b/src/web/mysql.js new file mode 100644 index 0000000..6808448 --- /dev/null +++ b/src/web/mysql.js @@ -0,0 +1,88 @@ +const mysql = require("mysql2/promise"); + +class DBPool { + constructor(coin, options) { + this.coin = coin; + this.pool = mysql.createPool(options); + } + + /** + * 非事务SQL操作 + * @param {String} sql + * @param {Array} values + * @returns + */ + async exec(sql, values = []) { + const con = await this.pool.getConnection(); + try { + const [data] = await con.query(sql, values); + return data; + } catch (err) { + throw err; + } finally { + con.release(); + } + } + /** + * 单独SQL事务操作 + * @param {String} sql + * @param {Array} values + * @returns + */ + async exec_transaction(sql, values = []) { + const con = await this.pool.getConnection(); + try { + await con.beginTransaction(); + const [data] = await con.query(sql, values); + await con.commit(); + return data; + } catch (err) { + await con.rollback(); + throw err; + } finally { + con.release(); + } + } + + /** + * 执行一系列 SQL 操作,合并到一个事务中。 + * @param {Array} params [{sql:"", param:[param1, param2, ...]}] + */ + async exec_transaction_together(params) { + const con = await this.pool.getConnection(); + try { + await con.beginTransaction(); + + // 确保所有查询都完成后再提交事务 + for (const { sql, param } of params) { + await con.query(sql, param); + } + + await con.commit(); + } catch (err) { + await con.rollback(); + throw err; + } finally { + con.release(); + } + } + + async exec_write_lock(sql, values = [], table_name) { + const con = await this.pool.getConnection(); + try { + await con.beginTransaction(); + // 使用模板字符串而不是占位符来构建 LOCK TABLES 语句 + await con.query(`LOCK TABLES ${table_name} WRITE`); + await con.query(sql, values); + await con.commit(); + } catch (err) { + await con.rollback(); + throw err; + } finally { + await con.query("UNLOCK TABLES"); + con.release(); + } + } +} + +module.exports = DBPool \ No newline at end of file diff --git a/src/web/service.js b/src/web/service.js new file mode 100644 index 0000000..fe82e98 --- /dev/null +++ b/src/web/service.js @@ -0,0 +1,102 @@ +const Times = require("./times") +const DBPool = require("./mysql") + +class Service { + constructor(){ + this.hashratedb = new DBPool("nexa", { + "host": "13.213.4.56", + "user": "root", + "password": "123456", + "database": "hashrate", + "port":6789, + "waitForConnections": true, + "connectionLimit": 20, + "queueLimit": 0 + }) + + this.distributiondb = new DBPool("nexa", { + "host": "13.213.4.56", + "user": "root", + "password": "123456", + "database": "distribution", + "port":6789, + "waitForConnections": true, + "connectionLimit": 20, + "queueLimit": 0 + }) + } + + async query_distribution(date){ + date = date + " 00:00:00" + try{ + const sql = `SELECT create_date AS date, coin, user, amount, address FROM wallet_in WHERE create_date = ?;` + const data = await this.distributiondb.exec(sql, [date]) + if(!data || data.length === 0){ + return false + } + return data + } catch(err){ + throw err + } + } + + async query_hashrate(date){ + date = date + " 00:00:00" + try{ + const coins = ["nexa", "grs", "mona", "dgbo", "dgbq", "dgbs", "rxd"] + const result = [] + for(let i=0; i { + res.header("Access-Control-Allow-Origin", "*"); + res.header("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept"); + res.header("Access-Control-Allow-Methods", "GET, POST, OPTIONS, PUT, PATCH, DELETE"); + // res.header('Content-Type', 'application/json') + res.header("Access-Control-Allow-Headers", "Content-Type, Authorization"); + res.header("Access-Control-Allow-Credentials", true); + next(); +}); + +// 连通测试 +app.get("/test", (req, res) => { + res.json({ msg: "hello!" }); +}); + +app.get("/distribution", async (req, res) => { + const { date } = req.query; + const data = await service.query_distribution(date); + let result; + if (!data) { + result = []; + } else { + result = data; + } + res.json(result); +}); + +app.get("/hashrate", async (req, res) => { + const { date } = req.query; + const data = await service.query_hashrate(date); + let result; + if (!data) { + result = []; + } else { + result = data; + } + res.json(result); +}); + +app.get("/reward", async (req, res) => { + const { date } = req.query; + const data = await service.query_total_blockreward(date); + let result; + if (!data) { + result = []; + } else { + result = data; + } + res.json(result); +}); + +app.get("/walletout", async (req, res) => { + const { date } = req.query; + const data = await service.query_walletout(date); + let result; + if (!data) { + result = []; + } else { + result = data; + } + res.json(result); +}); + +app.listen(port, () => { + console.log(`Server is listening at http://127.0.0.1:${port}`); +}); + +[ + { date: "2024-12-03", coin: "nexa", reward: "2700041722.75000000" }, + { date: "2024-12-03", coin: "grs", reward: "2285.22102434" }, + { date: "2024-12-03", coin: "mona", reward: "5644.34314098" }, + { date: "2024-12-03", coin: "dgbo", reward: "363953.84122200" }, + { date: "2024-12-03", coin: "dgbq", reward: "303936.09476747" }, + { date: "2024-12-03", coin: "dgbs", reward: "103023.94566538" }, + { date: "2024-12-03", coin: "rxd", reward: "2150203.36261784" }, +] +[({ date: "2024-12-03T00:00:00.000Z", user: "a20", coin: "nexa", mhs24h: "1221097.498765" }, { date: "2024-12-03T00:00:00.000Z", user: "a21", coin: "nexa", mhs24h: "811679.870615" }, { date: "2024-12-03T00:00:00.000Z", user: "a2x", coin: "nexa", mhs24h: "125128.418926" }, { date: "2024-12-03T00:00:00.000Z", user: "n1gminer", coin: "grs", mhs24h: "12952631.953375" }, { date: "2024-12-03T00:00:00.000Z", user: "n3miner", coin: "mona", mhs24h: "36491507.736254" }, { date: "2024-12-03T00:00:00.000Z", user: "b20miner", coin: "dgbo", mhs24h: "14829610.388251" }, { date: "2024-12-03T00:00:00.000Z", user: "w3miner", coin: "dgbo", mhs24h: "3356677.306375" }, { date: "2024-12-03T00:00:00.000Z", user: "a1xqminer", coin: "dgbq", mhs24h: "48256381.780041" }, { date: "2024-12-03T00:00:00.000Z", user: "miner", coin: "dgbq", mhs24h: "0.000000" }, { date: "2024-12-03T00:00:00.000Z", user: "n1qminer", coin: "dgbq", mhs24h: "32414166.811899" }, { date: "2024-12-03T00:00:00.000Z", user: "a1xsminer", coin: "dgbs", mhs24h: "317211396.182949" }, { date: "2024-12-03T00:00:00.000Z", user: "n1sminer", coin: "dgbs", mhs24h: "32972685.343203" }, { date: "2024-12-03T00:00:00.000Z", user: "a1xrminer", coin: "rxd", mhs24h: "1049483151.952393" }, { date: "2024-12-03T00:00:00.000Z", user: "miner", coin: "rxd", mhs24h: "0.000000" })]; diff --git a/test/caculate.js b/test/caculate.js new file mode 100644 index 0000000..003ef44 --- /dev/null +++ b/test/caculate.js @@ -0,0 +1,12 @@ +const Times = require('../public/times') +const str = "rxd_miners_stats_20241128" + +let sql = `DROP TABLE IF EXISTS ` +const start = new Date("2024-11-28 00:00:00").valueOf() +for(let i=0; i<70; i++){ + const t = Times.utcTime(start + i * 86400000) + const ymd = t.split(" ")[0].replace(/-/g, "") + sql += ``+ `rxd_miners_stats_${ymd},` +} +sql = sql.slice(0, -1) +console.log(sql); \ No newline at end of file diff --git a/test/hashratev2-test.js b/test/hashratev2-test.js new file mode 100644 index 0000000..69e2b9f --- /dev/null +++ b/test/hashratev2-test.js @@ -0,0 +1,340 @@ +const Times = require("../public/times"); +// const executeWithRetry = require("./public/retry") +const Init = require("./init"); + +class HashRate extends Init { + constructor(coin) { + const method = "hashrate"; + super(coin, method); + this.count = 0; + this.diffOneShareHashsAvg = 2 ** 32 - 1; + } + + /** + * 计算hash + * @param {Number} accepts 时段内接受总数 + * @param {Number} seconds 时段秒数 + * @param {String} unit H/s、KH/s、MH/s、GH/s、TH/s、PH/s、EH/s + * @returns + */ + calculate_hashrate(accepts, seconds, unit) { + let num; + switch (unit) { + case "H/s": + num = 1; + break; + case "KH/s": + num = 1_000; + break; + case "MH/s": + num = 1_000_000; + break; + case "GH/s": + num = 1_000_000_000; + break; + case "TH/s": + num = 1_000_000_000_000; + break; + case "PH/s": + num = 1_000_000_000_000_000; + break; + case "EH/s": + num = 10 ** 18; + break; + default: + throw `${unit}不是已知单位`; + } + const hashrate = (accepts * this.diffOneShareHashsAvg) / seconds / num; + return hashrate; + } + + /** + * 将主、备查询出来的数据合并 + * @param {*} data [{user:"", miner:"", accepts:100},{user:"", miner:"", accepts:100}...] + * @returns + */ + merge(data) { + // 创建一个 Map 来存储 user 和 miner 组合的结果 + const results = new Map(); + + data.forEach((item) => { + const key = `${item.user}-${item.miner}`; + + if (results.has(key)) { + const existing = results.get(key); + existing.accepts += parseFloat(item.accepts); + if (new Date(item.last_submit) > new Date(existing.last_submit)) { + existing.last_submit = item.last_submit; + } + results.set(key, existing); + } else { + results.set(key, { + user: item.user, + miner: item.miner, + accepts: parseFloat(item.accepts), + last_submit: item.last_submit, + }); + } + }); + + // 将结果转换为数组 + const resultArray = Array.from(results.values()); + return resultArray; + } + + /** + * 查询主库符合时段的表名 + * @param {String} start_time + * @param {String} end_time + * @returns + */ + async query_table(start_time, end_time) { + try { + const sql = `(SELECT date, \`from\`, \`to\` FROM ${this.coin}_blk_height_detail WHERE date >= ? ORDER BY date LIMIT 1) UNION (SELECT date, \`from\`, \`to\` FROM ${this.coin}_blk_height_detail WHERE date >= ? AND date < ?) ORDER BY date;`; + const data = await this.sharesdb.exec(sql, [end_time, start_time, end_time]); + const result = []; + if (data.length !== 0) { + for (let item of data) { + result.push(`${this.coin}_block_detail_${item.from}_${Math.trunc(item.to - 1)}`); + } + } + result.push(`${this.coin}_blk_detail`); + return result; + } catch (err) { + console.log(err); + return []; + } + } + + /** + * 查询从库符合时段的表名 + * @param {String} start_time + * @param {String} end_time + * @returns + */ + async query_slave_table(start_time, end_time) { + try { + const sql = `(SELECT date, \`from\`, \`to\` FROM ${this.coin}_blk_height_detail WHERE date >= ? ORDER BY date LIMIT 1) UNION (SELECT date, \`from\`, \`to\` FROM ${this.coin}_blk_height_detail WHERE date >= ? AND date < ?) ORDER BY date;`; + const data = await this.sharesdb_slave.exec(sql, [end_time, start_time, end_time]); + const result = []; + if (data.length !== 0) { + for (let item of data) { + result.push(`${this.coin}_block_detail_${item.from}_${Math.trunc(item.to - 1)}`); + } + } + result.push(`${this.coin}_blk_detail`); + return result; + } catch (err) { + console.log(err); + return []; + } + } + + // 查询时段内accepts,主从同时查询 + async query_accepts(start_time, end_time, enable) { + try { + if (this.count === undefined) this.count = 0; + + const generateUnionSql = (tables) => { + let sql = `SELECT MAX(date) AS last_submit, user, miner, SUM(miner_diff) AS accepts FROM ( `; + for (let i = 0; i < tables.length; i++) { + sql += `SELECT date, user, miner, miner_diff, pool_diff FROM ${tables[i]} WHERE date >= ? AND date < ?`; + if (i < tables.length - 1) { + sql += ` \nUNION ALL\n `; + } + } + sql += `) AS combined_tables GROUP BY user, miner;`; + return sql; + }; + + let sql, slave_sql; + if (enable) { + const [tables_name, slave_tables_name] = await Promise.all([this.query_table(start_time, end_time), this.query_slave_table(start_time, end_time)]); + + sql = tables_name.length <= 1 ? `SELECT MAX(date) AS last_submit, user, miner, SUM(miner_diff) AS accepts FROM ${this.coin}_blk_detail WHERE date >= ? AND date < ? GROUP BY user, miner;` : generateUnionSql(tables_name); + + slave_sql = slave_tables_name.length <= 1 ? `SELECT MAX(date) AS last_submit, user, miner, SUM(miner_diff) AS accepts FROM ${this.coin}_blk_detail WHERE date >= ? AND date < ? GROUP BY user, miner;` : generateUnionSql(slave_tables_name); + + const [accepts_data, slave_accepts] = await Promise.all([this.sharesdb.exec(sql, [start_time, end_time]), this.sharesdb_slave.exec(slave_sql, [start_time, end_time])]); + + return this.merge(accepts_data.concat(slave_accepts)); + } else { + const tables_name = await this.query_table(start_time, end_time); + + sql = tables_name.length <= 1 ? `SELECT MAX(date) AS last_submit, user, miner, SUM(miner_diff) AS accepts FROM ${this.coin}_blk_detail WHERE date >= ? AND date < ? GROUP BY user, miner;` : generateUnionSql(tables_name); + + const accepts_data = await this.sharesdb.exec(sql, [start_time, end_time]); + return this.merge(accepts_data); + } + } catch (err) { + console.error(`Error in query_accepts: ${err.message}`); + await this.sleep(1000 * 15); + if (this.count > 3) { // 重试4次,1分钟 + this.count = 0; + throw err; + } + this.count++; + return this.query_accepts(start_time, end_time, enable); + } + } + + // 查询当天miners状态,排除掉超过1天没有提交的矿工 + async query_miners(time) { + try { + const sql = `SELECT date, user, miner, state, ratio, last_submit FROM ${this.coin}_miners WHERE last_submit >= DATE(?) - INTERVAL 1 DAY;`; + const miners_state = await this.pooldb.exec(sql, [time]); + return miners_state; + } catch (err) { + throw err; + } + } + + async insert_mhs(data) { + if (data.length === 0 || !data || data.size === 0) { + console.log(Date.now(), ":30分钟没有新增矿机提交数据"); + return; + } + try { + let sql = `INSERT INTO ${this.coin}_mhsv2 (user, miner, date, mhs30m, mhs24h, state, last_submit) VALUES `; + const values = []; + data.forEach((item) => { + const { user, miner, date, mhs30m, mhs24h, state, last_submit } = item; + sql += `(?, ?, ?, ?, ?, ?, ?), `; + values.push(user, miner, date, mhs30m, mhs24h, state, last_submit); + }); + sql = sql.slice(0, -2); + await this.hashratedb.exec_transaction(sql, values); + } catch (err) { + throw err; + } + } + + async insert_mhs_real(data) { + if (data.length === 0 || !data || data.size === 0) { + console.log(Date.now(), ":5分钟没有新增矿机提交数据"); + return; + } + try { + const del_sql = `DELETE FROM ${this.coin}_mhs_realv2 WHERE id > 0;`; + let sql = `INSERT INTO ${this.coin}_mhs_realv2 (user, miner, date, mhs30m, mhs24h, state, last_submit) VALUES `; + const values = []; + data.forEach((item) => { + const { user, miner, date, mhs30m, mhs24h, state, last_submit } = item; + sql += `(?, ?, ?, ?, ?, ? ,?), `; + values.push(user, miner, date, mhs30m, mhs24h, state, last_submit); + }); + sql = sql.slice(0, -2); + // sql += ` AS new_values ON DUPLICATE KEY UPDATE date = new_values.date, mhs30m = new_values.mhs30m, mhs24h = new_values.mhs24h, state = new_values.state, last_submit = new_values.last_submit;`; + const sqls = [{ sql: del_sql }, { sql, param: values }]; + await this.hashratedb.exec_transaction_together(sqls); + } catch (err) { + // 处理错误 + console.error("Transaction failed: ", err); + throw err; + } + } + + async query_hashrate_miners_accepts(end_time) { + try { + const ymd_last_30m = Times.utcTime(new Date(end_time).valueOf() - 1000 * 60 * 30); + const ymd_last_24h = Times.utcTime(new Date(end_time).valueOf() - 1000 * 60 * 60 * 24); + const state_sql = `SELECT t1.* +FROM ${this.coin}_minersv2 t1 +INNER JOIN ( + SELECT user, miner, MAX(date) AS max_date + FROM ${this.coin}_minersv2 + WHERE date <= ? + GROUP BY user, miner +) t2 +ON t1.user = t2.user AND t1.miner = t2.miner AND t1.date = t2.max_date;`; + const mhs30m_sql = `SELECT SUM(accepts) AS accepts_30min, user, miner FROM ${this.coin}_minersv2 WHERE date >= ? AND date < ? GROUP BY user, miner;`; + const mhs24h_sql = `SELECT SUM(accepts) AS accepts_24h, user, miner FROM ${this.coin}_minersv2 WHERE date >= ? AND date < ? GROUP BY user, miner;`; + const [state, mhs30m, mhs24h] = await Promise.all([this.hashratedb.exec(state_sql, [end_time]), this.hashratedb.exec(mhs30m_sql, [ymd_last_30m, end_time]), this.hashratedb.exec(mhs24h_sql, [ymd_last_24h, end_time])]); + + const hashrate_map = new Map(); + + state.forEach((item) => { + const { date, user, miner, state, last_submit } = item; + hashrate_map.set(`${user}:${miner}`, { date: end_time, user, miner, state, last_submit, mhs30m: 0, mhs24h: 0 }); + }); + + mhs30m.forEach((item) => { + const { accepts_30min, user, miner } = item; + + const values = hashrate_map.get(`${user}:${miner}`); + + values.mhs30m = this.calculate_hashrate(accepts_30min, 60 * 30, "MH/s"); + + hashrate_map.set(`${user}:${miner}`, values); + }); + mhs24h.forEach((item) => { + const { accepts_24h, user, miner } = item; + const values = hashrate_map.get(`${user}:${miner}`); + + values.mhs24h = this.calculate_hashrate(accepts_24h, 60 * 60 * 24, "MH/s"); + + hashrate_map.set(`${user}:${miner}`, values); + }); + return hashrate_map; + } catch (err) { + throw err; + } + } + + async insert_hashrate_miners_table(end_time) { + try { + const ymd = end_time.split(":"); + const date = ymd[0] + ":" + ymd[1] + ":" + "00"; + // 计算最近5分钟accepts,最新矿机状态 + const start_time = Times.utcTime(new Date(end_time).valueOf() - 1000 * 60 * 5); + let enable = (await this.redis.get(`${this.coin}:enable`)) || false; + + let [accepts, miners_state] = await Promise.all([this.query_accepts(start_time, end_time, enable), this.query_miners(end_time)]); + + // 创建nexa_miners表所需要的map + const miners_map = new Map(); + // 判断各种情况 + if (accepts.length === 0 && miners_state.length === 0) { + // 历史上没有矿工接入 + return; + } else if (accepts.length !== 0 && miners_state.length === 0) { + // 主库出了问题,基本不可能出现这种情况 + return; + } else if (accepts.length === 0 && miners_state.length !== 0) { + // 最近5分钟没有矿工接入,直接将m2pooldb-nexa_miners表中所有矿工的accepts更新为0,并放入nexa_miners表需要的map中 + miners_state.forEach((item) => { + const { user, miner, state, last_submit } = item; + miners_map.set(`${user}:${miner}`, { date, user, miner, state: "offline", last_submit, accepts: 0 }); + }); + } else { + // 先找到所有最近5分钟有提交的矿机 + accepts.forEach((item) => { + const { user, miner, accepts, last_submit } = item; + miners_map.set(`${user}:${miner}`, { date, user, miner, accepts, last_submit, state: "online" }); + }); + // 再将stats表有记录矿机,但最近5分钟没有提交的矿机合并进去 + miners_state.forEach((item) => { + const { user, miner, state, last_submit } = item; + if (!miners_map.get(`${user}:${miner}`)) { + miners_map.set(`${user}:${miner}`, { date, user, miner, accepts: 0, last_submit, state }); + } + }); + } + // 将指定时段内的数据插入nexa_miners表 + let insert_miners_table_sql = `INSERT INTO ${this.coin}_minersv2(user, miner, date, accepts, state, last_submit) VALUES `; + const miners_table_values = []; + miners_map.forEach((item) => { + const { user, miner, date, accepts, state, last_submit } = item; + insert_miners_table_sql += `(?, ?, ?, ?, ?, ?), `; + miners_table_values.push(user, miner, date, accepts, state, last_submit); + }); + insert_miners_table_sql = insert_miners_table_sql.slice(0, -2); + await this.hashratedb.exec_transaction(insert_miners_table_sql, miners_table_values); + return; + } catch (err) { + throw err; + } + } +} + +module.exports = HashRate; diff --git a/test/test1.js b/test/test1.js new file mode 100644 index 0000000..c27eb38 --- /dev/null +++ b/test/test1.js @@ -0,0 +1,463 @@ +const Times = require("../public/times"); +const Decimal = require("decimal"); +const fs = require("fs"); +const DBPool = require("../lib/mysql"); +const Cache = require("../lib/redis"); +const { NEXARPCNode, GRSRPCNode, MONARPCNode, DGBRPCNode, RXDRPCNode } = require("../lib/node"); + +class Init { + constructor(coin, method) { + this.coin = coin; + const config = fs.readFileSync(`../config/${coin}.conf`, "utf-8"); + const { master, slave, redis_options, node_options, distribution_conf, MAX_MATURE, REPORT_ADDRESS } = JSON.parse(config); + const { pooldb, sharesdb, distribution, hashrate, users_addresses, balance } = master; + const { pooldb_slave, sharesdb_slave } = slave; + const { node1, node2 } = node_options; + const { redis1 } = redis_options; + const { POOL_FEE } = distribution_conf; + const node_map = { + mona: MONARPCNode, + nexa: NEXARPCNode, + grs: GRSRPCNode, + dgbs: DGBRPCNode, + dgbq: DGBRPCNode, + dgbo: DGBRPCNode, + rxd: RXDRPCNode, + }; + + switch (method) { + case "hashrate": + this.sharesdb = new DBPool(coin, sharesdb); + this.sharesdb_slave = new DBPool(coin, sharesdb_slave); + this.pooldb = new DBPool(coin, pooldb); + this.redis = new Cache(redis1); + // this.pooldb_slave = new DBPool(coin, pooldb_slave) + this.hashratedb = new DBPool(coin, hashrate); + break; + case "report": + this.REPORT_ADDRESS = REPORT_ADDRESS; + this.node = new node_map[coin](node2); + this.distribution = new DBPool(coin, distribution); + this.redis = new Cache(redis1); + break; + case "clear": + this.pooldb = new DBPool(coin, pooldb); + this.sharesdb = new DBPool(coin, sharesdb); + this.hashratedb = new DBPool(coin, hashrate); + break; + case "distribution": + this.pooldb = new DBPool(coin, pooldb); + this.hashratedb = new DBPool(coin, hashrate); + this.distributiondb = new DBPool(coin, distribution); + this.users_addresses = new DBPool(coin, users_addresses); + this.node = new node_map[coin](node2); + this.REPORT_ADDRESS = REPORT_ADDRESS; + this.POOL_FEE = POOL_FEE; + console.log(`当前手续费率为:${POOL_FEE}`); + // this.balance = new DBPool(coin, balance) + break; + case "balance": + this.distribution = new DBPool(coin, distribution); + this.balancedb = new DBPool(coin, balance); + break; + case "confirm": + this.MAX_MATURE = MAX_MATURE; + this.REPORT_ADDRESS = REPORT_ADDRESS; + this.node = new node_map[coin](node2); + this.distribution = new DBPool(coin, distribution); + this.pooldb = new DBPool(coin, pooldb); + break; + case "stats": + this.pooldb = new DBPool(coin, pooldb); + this.hashratedb = new DBPool(coin, hashrate); + this.distribution = new DBPool(coin, distribution); + break; + default: + throw `暂不支持${method}方法 init`; + } + } + + sleep(ms) { + return new Promise((resolve) => setTimeout(resolve, ms)); + } +} + +class HashRate extends Init { + constructor(coin) { + const method = "hashrate"; + super(coin, method); + this.diffOneShareHashsAvg = 2 ** 32 - 1; + } + + /** + * 计算hash + * @param {Number} accepts 时段内接受总数 + * @param {Number} seconds 时段秒数 + * @param {String} unit H/s、KH/s、MH/s、GH/s、TH/s、PH/s、EH/s + * @returns + */ + calculate_hashrate(accepts, seconds, unit) { + let num; + switch (unit) { + case "H/s": + num = 1; + break; + case "KH/s": + num = 1_000; + break; + case "MH/s": + num = 1_000_000; + break; + case "GH/s": + num = 1_000_000_000; + break; + case "TH/s": + num = 1_000_000_000_000; + break; + case "PH/s": + num = 1_000_000_000_000_000; + break; + case "EH/s": + num = 10 ** 18; + break; + default: + throw `${unit}不是已知单位`; + } + const hashrate = (accepts * this.diffOneShareHashsAvg) / seconds / num; + return hashrate; + } + + /** + * 将主、备查询出来的数据合并 + * @param {*} data [{user:"", miner:"", accepts:100},{user:"", miner:"", accepts:100}...] + * @returns + */ + merge(data) { + // 创建一个 Map 来存储 user 和 miner 组合的结果 + const results = new Map(); + + data.forEach((item) => { + const key = `${item.user}-${item.miner}`; + + if (results.has(key)) { + const existing = results.get(key); + existing.accepts += parseFloat(item.accepts); + if (new Date(item.last_submit) > new Date(existing.last_submit)) { + existing.last_submit = item.last_submit; + } + results.set(key, existing); + } else { + results.set(key, { + user: item.user, + miner: item.miner, + accepts: parseFloat(item.accepts), + last_submit: item.last_submit, + }); + } + }); + + // 将结果转换为数组 + const resultArray = Array.from(results.values()); + return resultArray; + } + + /** + * 查询主库符合时段的表名 + * @param {String} start_time + * @param {String} end_time + * @returns + */ + async query_table(start_time, end_time) { + try { + const sql = `(SELECT date, \`from\`, \`to\` FROM ${this.coin}_blk_height_detail WHERE date >= ? ORDER BY date LIMIT 1) UNION (SELECT date, \`from\`, \`to\` FROM ${this.coin}_blk_height_detail WHERE date >= ? AND date < ?) ORDER BY date;`; + const data = await this.sharesdb.exec(sql, [end_time, start_time, end_time]) + const result = []; + if (data.length !== 0) { + for (let item of data) { + result.push(`${this.coin}_block_detail_${item.from}_${Math.trunc(item.to - 1)}`); + } + } + result.push(`${this.coin}_blk_detail`); + return result; + } catch (err) { + console.log(err); + return []; + } + } + + /** + * 查询从库符合时段的表名 + * @param {String} start_time + * @param {String} end_time + * @returns + */ + async query_slave_table(start_time, end_time) { + try { + const sql = `(SELECT date, \`from\`, \`to\` FROM ${this.coin}_blk_height_detail WHERE date >= ? ORDER BY date LIMIT 1) UNION (SELECT date, \`from\`, \`to\` FROM ${this.coin}_blk_height_detail WHERE date >= ? AND date < ?) ORDER BY date;`; + const data = await this.sharesdb_slave.exec(sql, [end_time, start_time, end_time]) + const result = []; + if (data.length !== 0) { + for (let item of data) { + result.push(`${this.coin}_block_detail_${item.from}_${Math.trunc(item.to - 1)}`); + } + } + result.push(`${this.coin}_blk_detail`); + return result; + } catch (err) { + console.log(err); + return []; + } + } + + // 查询时段内accepts,主从同时查询 + async query_accepts(start_time, end_time, enable) { + try { + if (this.count === undefined) this.count = 0; + if (enable) { + const [tables_name, slave_tables_name] = await Promise.all([this.query_table(start_time, end_time), this.query_slave_table(start_time, end_time)]); + + // 查询主库符合条件的数据 + let sql = ``; + if (tables_name.length <= 1) { + sql = `SELECT MAX(date) AS last_submit, user, miner, SUM(miner_diff) AS accepts FROM ${this.coin}_blk_detail WHERE date >= "${start_time}" AND date < "${end_time}" GROUP BY user, miner;`; + } else { + sql = `SELECT MAX(date) AS last_submit, user, miner, SUM(miner_diff) AS accepts FROM ( `; + for (let i = 0; i < tables_name.length; i++) { + if (i < tables_name.length - 1) { + sql += `SELECT date, user, miner, miner_diff, pool_diff FROM ${tables_name[i]} WHERE date >= "${start_time}" AND date < "${end_time}" \nUNION ALL\n`; + } else { + sql += `SELECT date, user, miner, miner_diff, pool_diff FROM ${tables_name[i]} WHERE date >= "${start_time}" AND date < "${end_time}") AS combined_tables GROUP BY user, miner;`; + } + } + } + let slave_sql = ``; + if (slave_tables_name.length <= 1) { + slave_sql = `SELECT MAX(date) AS last_submit, user, miner, SUM(miner_diff) AS accepts FROM ${this.coin}_blk_detail WHERE date >= "${start_time}" AND date < "${end_time}" GROUP BY user, miner;`; + } else { + slave_sql = `SELECT MAX(date) AS last_submit, user, miner, SUM(miner_diff) AS accepts FROM ( `; + for (let i = 0; i < slave_tables_name.length; i++) { + if (i < slave_tables_name.length - 1) { + slave_sql += `SELECT date, user, miner, miner_diff, pool_diff FROM ${slave_tables_name[i]} WHERE date >= "${start_time}" AND date < "${end_time}" \nUNION ALL\n`; + } else { + slave_sql += `SELECT date, user, miner, miner_diff, pool_diff FROM ${slave_tables_name[i]} WHERE date >= "${start_time}" AND date < "${end_time}") AS combined_tables GROUP BY user, miner;`; + } + } + } + + // // 执行查询,并将结果合并 + const [accepts_data, slave_accepts] = await Promise.all([this.sharesdb.exec(sql), this.sharesdb_slave.exec(slave_sql)]); + const accepts = this.merge(accepts_data.concat(slave_accepts)); // 合并主备accepts + return accepts; + } else { + const tables_name = await this.query_table(start_time, end_time); + let sql = ``; + if (tables_name.length <= 1) { + sql = `SELECT MAX(date) AS last_submit, user, miner, SUM(miner_diff) AS accepts FROM ${this.coin}_blk_detail WHERE date >= "${start_time}" AND date < "${end_time}" GROUP BY user, miner;`; + } else { + sql = `SELECT MAX(date) AS last_submit, user, miner, SUM(miner_diff) AS accepts FROM ( `; + for (let i = 0; i < tables_name.length; i++) { + if (i < tables_name.length - 1) { + sql += `SELECT date, user, miner, miner_diff, pool_diff FROM ${tables_name[i]} WHERE date >= "${start_time}" AND date < "${end_time}" \nUNION ALL\n`; + } else { + sql += `SELECT date, user, miner, miner_diff, pool_diff FROM ${tables_name[i]} WHERE date >= "${start_time}" AND date < "${end_time}") AS combined_tables GROUP BY user, miner;`; + } + } + } + const accepts_data = await this.sharesdb.exec(sql); + const slave_accepts = []; + const accepts = this.merge(accepts_data.concat(slave_accepts)); // 合并主备accepts + return accepts; + } + } catch (err) { + console.error(`Error in query_accepts: ${err.message}`); + await this.sleep(1000 * 15); + if (this.count > 3) { // 重试4次,1分钟 + this.count = 0; + throw err; + } + this.count++; + return this.query_accepts(start_time, end_time, enable); + } + } + + // 查询当天miners状态,排除掉超过1天没有提交的矿工 + async query_miners(time) { + try { + const sql = `SELECT date, user, miner, state, ratio, last_submit FROM ${this.coin}_miners WHERE last_submit >= DATE(?) - INTERVAL 1 DAY;`; + const miners_state = await this.pooldb.exec(sql, [time]); + return miners_state; + } catch (err) { + throw err; + } + } + + async insert_mhs(data) { + if (data.length === 0 || !data || data.size === 0) { + console.log(Date.now(), ":30分钟没有新增矿机提交数据"); + return; + } + try { + let sql = `INSERT INTO ${this.coin}_mhsv2 (user, miner, date, mhs30m, mhs24h, state, last_submit) VALUES `; + const values = []; + data.forEach((item) => { + const { user, miner, date, mhs30m, mhs24h, state, last_submit } = item; + sql += `(?, ?, ?, ?, ?, ?, ?), `; + values.push(user, miner, date, mhs30m, mhs24h, state, last_submit); + }); + sql = sql.slice(0, -2); + await this.hashratedb.exec_transaction(sql, values); + } catch (err) { + throw err; + } + } + + async insert_mhs_real(data) { + if (data.length === 0 || !data || data.size === 0) { + console.log(Date.now(), ":5分钟没有新增矿机提交数据"); + return; + } + try { + const del_sql = `DELETE FROM ${this.coin}_mhs_realv2 WHERE id > 0;`; + let sql = `INSERT INTO ${this.coin}_mhs_realv2 (user, miner, date, mhs30m, mhs24h, state, last_submit) VALUES `; + const values = []; + data.forEach((item) => { + const { user, miner, date, mhs30m, mhs24h, state, last_submit } = item; + sql += `(?, ?, ?, ?, ?, ? ,?), `; + values.push(user, miner, date, mhs30m, mhs24h, state, last_submit); + }); + sql = sql.slice(0, -2); + // sql += ` AS new_values ON DUPLICATE KEY UPDATE date = new_values.date, mhs30m = new_values.mhs30m, mhs24h = new_values.mhs24h, state = new_values.state, last_submit = new_values.last_submit;`; + const sqls = [{ sql: del_sql }, { sql, param: values }]; + await this.hashratedb.exec_transaction_together(sqls); + } catch (err) { + // 处理错误 + console.error("Transaction failed: ", err); + throw err; + } + } + + async query_hashrate_miners_accepts(end_time) { + try { + const ymd_last_30m = Times.utcTime(new Date(end_time).valueOf() - 1000 * 60 * 30); + const ymd_last_24h = Times.utcTime(new Date(end_time).valueOf() - 1000 * 60 * 60 * 24); + const state_sql = `SELECT t1.* +FROM ${this.coin}_minersv2 t1 +INNER JOIN ( + SELECT user, miner, MAX(date) AS max_date + FROM ${this.coin}_minersv2 + WHERE date <= ? + GROUP BY user, miner +) t2 +ON t1.user = t2.user AND t1.miner = t2.miner AND t1.date = t2.max_date;`; + const mhs30m_sql = `SELECT SUM(accepts) AS accepts_30min, user, miner FROM ${this.coin}_minersv2 WHERE date >= ? AND date < ? GROUP BY user, miner;`; + const mhs24h_sql = `SELECT SUM(accepts) AS accepts_24h, user, miner FROM ${this.coin}_minersv2 WHERE date >= ? AND date < ? GROUP BY user, miner;`; + const [state, mhs30m, mhs24h] = await Promise.all([this.hashratedb.exec(state_sql, [end_time]), this.hashratedb.exec(mhs30m_sql, [ymd_last_30m, end_time]), this.hashratedb.exec(mhs24h_sql, [ymd_last_24h, end_time])]); + + const hashrate_map = new Map(); + + state.forEach((item) => { + const { date, user, miner, state, last_submit } = item; + hashrate_map.set(`${user}:${miner}`, { date: end_time, user, miner, state, last_submit, mhs30m: 0, mhs24h: 0 }); + }); + + mhs30m.forEach((item) => { + const { accepts_30min, user, miner } = item; + + const values = hashrate_map.get(`${user}:${miner}`); + + values.mhs30m = this.calculate_hashrate(accepts_30min, 60 * 30, "MH/s"); + + hashrate_map.set(`${user}:${miner}`, values); + }); + mhs24h.forEach((item) => { + const { accepts_24h, user, miner } = item; + const values = hashrate_map.get(`${user}:${miner}`); + + values.mhs24h = this.calculate_hashrate(accepts_24h, 60 * 60 * 24, "MH/s"); + + hashrate_map.set(`${user}:${miner}`, values); + }); + return hashrate_map; + } catch (err) { + throw err; + } + } + + async insert_hashrate_miners_table(end_time) { + try { + const ymd = end_time.split(":"); + const date = ymd[0] + ":" + ymd[1] + ":" + "00"; + // 计算最近5分钟accepts,最新矿机状态 + const start_time = Times.utcTime(new Date(end_time).valueOf() - 1000 * 60 * 5); + let enable = (await this.redis.get(`${this.coin}:enable`)) || false; + + let [accepts, miners_state] = await Promise.all([this.query_accepts(start_time, end_time, enable), this.query_miners(end_time)]); + + // 创建nexa_miners表所需要的map + const miners_map = new Map(); + // 判断各种情况 + if (accepts.length === 0 && miners_state.length === 0) { + // 历史上没有矿工接入 + return; + } else if (accepts.length !== 0 && miners_state.length === 0) { + // 主库出了问题,基本不可能出现这种情况 + return; + } else if (accepts.length === 0 && miners_state.length !== 0) { + // 最近5分钟没有矿工接入,直接将m2pooldb-nexa_miners表中所有矿工的accepts更新为0,并放入nexa_miners表需要的map中 + miners_state.forEach((item) => { + const { user, miner, state, last_submit } = item; + miners_map.set(`${user}:${miner}`, { date, user, miner, state: "offline", last_submit, accepts: 0 }); + }); + } else { + // 先找到所有最近5分钟有提交的矿机 + accepts.forEach((item) => { + const { user, miner, accepts, last_submit } = item; + miners_map.set(`${user}:${miner}`, { date, user, miner, accepts, last_submit, state: "online" }); + }); + // 再将stats表有记录矿机,但最近5分钟没有提交的矿机合并进去 + miners_state.forEach((item) => { + const { user, miner, state, last_submit } = item; + if (!miners_map.get(`${user}:${miner}`)) { + miners_map.set(`${user}:${miner}`, { date, user, miner, accepts: 0, last_submit, state }); + } + }); + } + // 将指定时段内的数据插入nexa_miners表 + let insert_miners_table_sql = `INSERT INTO ${this.coin}_minersv2(user, miner, date, accepts, state, last_submit) VALUES `; + const miners_table_values = []; + miners_map.forEach((item) => { + const { user, miner, date, accepts, state, last_submit } = item; + insert_miners_table_sql += `(?, ?, ?, ?, ?, ?), `; + miners_table_values.push(user, miner, date, accepts, state, last_submit); + }); + insert_miners_table_sql = insert_miners_table_sql.slice(0, -2); + await this.hashratedb.exec_transaction(insert_miners_table_sql, miners_table_values); + return; + } catch (err) { + throw err; + } + } +} + + +const coin = "enx"; +const hashrate = new HashRate(coin); +// schedule.scheduleJob({ minute: [0, 5, 10, 15, 20, 25, 30, 35, 40, 45, 50, 55], second: [30] }, async () => { + +// }); +async function main(){ + const ymd_now = Times.utcTime(Date.now().valueOf()); + const ymd = ymd_now.split(":"); + const end_time = ymd[0] + ":" + ymd[1] + ":" + "00"; + await hashrate.insert_hashrate_miners_table(end_time); + const currentMinute = new Date().getMinutes(); + + const data = await hashrate.query_hashrate_miners_accepts(end_time); + if (currentMinute === 0 || currentMinute === 30) { + await hashrate.insert_mhs(data); + await hashrate.insert_mhs_real(data); + } else { + await hashrate.insert_mhs_real(data); + } +} +main() \ No newline at end of file