From f4d3b89db5fb5436df736f8d2c1ca3de31e97d09 Mon Sep 17 00:00:00 2001
From: manxiaoqiang <manxiaoqiang@reyun.com>
Date: Mon, 26 Feb 2018 17:15:25 +0800
Subject: [PATCH] new

---
 lib/cat-client-2.0.0.jar                                                   | Bin 0 -> 231494 bytes
 lib/cat-core-2.0.0.jar                                                     | Bin 0 -> 2855758 bytes
 lib/foundation-service-4.0.0.jar                                           | Bin 0 -> 318108 bytes
 src/main/java/com/reyun/context/AppUtils.java                              |   23 +++++++++++++++++++++++
 src/main/java/com/reyun/controller/AccountController.java                  |   89 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 src/main/java/com/reyun/controller/AppController.java                      |   40 ++++++++++++++++++++++++++++++++++++++++
 src/main/java/com/reyun/controller/CustomMenuController.java               |  319 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 src/main/java/com/reyun/controller/EventController.java                    |  119 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 src/main/java/com/reyun/controller/EventStatsController.java               |   73 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 src/main/java/com/reyun/controller/ExpressionController.java               |   90 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 src/main/java/com/reyun/controller/FunnelController.java                   |   69 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 src/main/java/com/reyun/controller/manage/ExportReportInfoController.java  |  259 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 src/main/java/com/reyun/dic/AppPlatformEnum.java                           |   29 +++++++++++++++++++++++++++++
 src/main/java/com/reyun/dic/ChannelCategoryEnumType.java                   |   27 +++++++++++++++++++++++++++
 src/main/java/com/reyun/dic/ChannelEnumType.java                           |   39 +++++++++++++++++++++++++++++++++++++++
 src/main/java/com/reyun/dic/ConfigEnumType.java                            |   44 ++++++++++++++++++++++++++++++++++++++++++++
 src/main/java/com/reyun/dic/CustomMenuType.java                            |   36 ++++++++++++++++++++++++++++++++++++
 src/main/java/com/reyun/dic/DataViewEnumType.java                          |   41 +++++++++++++++++++++++++++++++++++++++++
 src/main/java/com/reyun/dic/DivEnumType.java                               |   31 +++++++++++++++++++++++++++++++
 src/main/java/com/reyun/dic/DownloadEnumType.java                          |   29 +++++++++++++++++++++++++++++
 src/main/java/com/reyun/dic/DownloadStatusEnumType.java                    |   29 +++++++++++++++++++++++++++++
 src/main/java/com/reyun/dic/FunctionEnumType.java                          |   40 ++++++++++++++++++++++++++++++++++++++++
 src/main/java/com/reyun/exception/GlobalExceptionAdvice.java               |   47 +++++++++++++++++++++++++++++++++++++++++++++++
 src/main/java/com/reyun/model/Account.java                                 |  558 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 src/main/java/com/reyun/model/AccountRestrict4Web.java                     |  195 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 src/main/java/com/reyun/model/App.java                                     |  302 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 src/main/java/com/reyun/model/AttributeRestrict.java                       |  156 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 src/main/java/com/reyun/model/Auth.java                                    |  200 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 src/main/java/com/reyun/model/BussinessMan.java                            |   57 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 src/main/java/com/reyun/model/Category.java                                |   48 ++++++++++++++++++++++++++++++++++++++++++++++++
 src/main/java/com/reyun/model/CommonEvent.java                             |   50 ++++++++++++++++++++++++++++++++++++++++++++++++++
 src/main/java/com/reyun/model/CommonIP.java                                |   89 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 src/main/java/com/reyun/model/CommonParam.java                             |   74 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 src/main/java/com/reyun/model/ComplicatedParam.java                        |  100 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 src/main/java/com/reyun/model/ConfigParam.java                             |   46 ++++++++++++++++++++++++++++++++++++++++++++++
 src/main/java/com/reyun/model/CustomMenu.java                              |  221 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 src/main/java/com/reyun/model/CustomMenuFavorites.java                     |  111 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 src/main/java/com/reyun/model/CustomMenuShare.java                         |  215 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 src/main/java/com/reyun/model/CustomMenuShareTemplate.java                 |  228 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 src/main/java/com/reyun/model/CustomMenuTemplate.java                      |  160 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 src/main/java/com/reyun/model/DataAuth.java                                |  141 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 src/main/java/com/reyun/model/DataParam.java                               |   54 ++++++++++++++++++++++++++++++++++++++++++++++++++++++
 src/main/java/com/reyun/model/DemoAppointment.java                         |  118 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 src/main/java/com/reyun/model/Dimension4Web.java                           |   90 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 src/main/java/com/reyun/model/EditionPricingLevel4Web.java                 |   97 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 src/main/java/com/reyun/model/Email.java                                   |   42 ++++++++++++++++++++++++++++++++++++++++++
 src/main/java/com/reyun/model/Event.java                                   |   74 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 src/main/java/com/reyun/model/Event4Web.java                               |  116 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 src/main/java/com/reyun/model/EventAttr4Web.java                           |  147 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 src/main/java/com/reyun/model/EventAttributeMeta.java                      |  115 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 src/main/java/com/reyun/model/EventMapPK.java                              |   38 ++++++++++++++++++++++++++++++++++++++
 src/main/java/com/reyun/model/EventMeta.java                               |   83 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 src/main/java/com/reyun/model/EventStats.java                              |  147 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 src/main/java/com/reyun/model/EventViewAttr.java                           |  106 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 src/main/java/com/reyun/model/EventtableMetadata.java                      |   66 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 src/main/java/com/reyun/model/ExportReportInfo.java                        |  193 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 src/main/java/com/reyun/model/Funnel.java                                  |  156 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 src/main/java/com/reyun/repository/AccountRepository.java                  |  107 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 src/main/java/com/reyun/repository/AppRepository.java                      |   56 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 src/main/java/com/reyun/repository/AttributeRestrictRepository.java        |   19 +++++++++++++++++++
 src/main/java/com/reyun/repository/AuthRepository.java                     |   56 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 src/main/java/com/reyun/repository/BussinessManRepository.java             |    8 ++++++++
 src/main/java/com/reyun/repository/CategoryRepository.java                 |   19 +++++++++++++++++++
 src/main/java/com/reyun/repository/CommonEventRepository.java              |   23 +++++++++++++++++++++++
 src/main/java/com/reyun/repository/CommonIPRepository.java                 |   31 +++++++++++++++++++++++++++++++
 src/main/java/com/reyun/repository/CommonParamRepository.java              |   25 +++++++++++++++++++++++++
 src/main/java/com/reyun/repository/ComplicatedParamRepository.java         |   21 +++++++++++++++++++++
 src/main/java/com/reyun/repository/ConfigParamRepository.java              |   19 +++++++++++++++++++
 src/main/java/com/reyun/repository/CustomMenuFavoritesRepository.java      |   42 ++++++++++++++++++++++++++++++++++++++++++
 src/main/java/com/reyun/repository/CustomMenuRepository.java               |   77 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 src/main/java/com/reyun/repository/CustomMenuShareRepository.java          |   65 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 src/main/java/com/reyun/repository/CustomMenuShareTempRepository.java      |   25 +++++++++++++++++++++++++
 src/main/java/com/reyun/repository/CustomMenuTemplateRepository.java       |   45 +++++++++++++++++++++++++++++++++++++++++++++
 src/main/java/com/reyun/repository/DataAuthRepository.java                 |   44 ++++++++++++++++++++++++++++++++++++++++++++
 src/main/java/com/reyun/repository/DataParamRepository.java                |   10 ++++++++++
 src/main/java/com/reyun/repository/DemoAppointmentRepository.java          |   18 ++++++++++++++++++
 src/main/java/com/reyun/repository/EventAttributeMetaRepository.java       |   28 ++++++++++++++++++++++++++++
 src/main/java/com/reyun/repository/EventMetaRepository.java                |   30 ++++++++++++++++++++++++++++++
 src/main/java/com/reyun/repository/EventRepository.java                    |   57 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 src/main/java/com/reyun/repository/EventStatsRepository.java               |   54 ++++++++++++++++++++++++++++++++++++++++++++++++++++++
 src/main/java/com/reyun/repository/EventViewAttrRepository.java            |   20 ++++++++++++++++++++
 src/main/java/com/reyun/repository/EventtableMetadataRepository.java       |   15 +++++++++++++++
 src/main/java/com/reyun/repository/ExportReportInfoRepository.java         |   48 ++++++++++++++++++++++++++++++++++++++++++++++++
 src/main/java/com/reyun/repository/FunnelRepository.java                   |   21 +++++++++++++++++++++
 src/main/java/com/reyun/security/AbstractTokenManager.java                 |  110 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 src/main/java/com/reyun/security/annotation/Authorization.java             |   12 ++++++++++++
 src/main/java/com/reyun/security/annotation/CurrentAccount.java            |   15 +++++++++++++++
 src/main/java/com/reyun/security/cors/CorsFilter.java                      |   32 ++++++++++++++++++++++++++++++++
 src/main/java/com/reyun/security/interceptor/AuthorizationInterceptor.java |  264 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 src/main/java/com/reyun/service/AppService.java                            |   36 ++++++++++++++++++++++++++++++++++++
 src/main/java/com/reyun/service/AuthService.java                           |   73 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 src/main/java/com/reyun/service/CommonIPService.java                       |   51 +++++++++++++++++++++++++++++++++++++++++++++++++++
 src/main/java/com/reyun/service/CommonParamService.java                    |   19 +++++++++++++++++++
 src/main/java/com/reyun/service/ComplicateEventsService.java               |   33 +++++++++++++++++++++++++++++++++
 src/main/java/com/reyun/service/ConfigParamService.java                    |   26 ++++++++++++++++++++++++++
 src/main/java/com/reyun/service/CustomMenuService.java                     |   72 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 src/main/java/com/reyun/service/DemoAppointmentService.java                |   19 +++++++++++++++++++
 src/main/java/com/reyun/service/DemoService.java                           |   11 +++++++++++
 src/main/java/com/reyun/service/EventService.java                          |   73 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 src/main/java/com/reyun/service/EventStatsService.java                     |   29 +++++++++++++++++++++++++++++
 src/main/java/com/reyun/service/ExportReportInfoService.java               |   29 +++++++++++++++++++++++++++++
 src/main/java/com/reyun/service/ExpressionService.java                     |   23 +++++++++++++++++++++++
 src/main/java/com/reyun/service/FunnelService.java                         |   28 ++++++++++++++++++++++++++++
 src/main/java/com/reyun/service/impl/AppServiceImpl.java                   |  215 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 src/main/java/com/reyun/service/impl/AuthServiceImpl.java                  | 1252 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 src/main/java/com/reyun/service/impl/CommonIPServiceImpl.java              |   66 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 src/main/java/com/reyun/service/impl/CommonParamServiceImpl.java           |   61 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 src/main/java/com/reyun/service/impl/ComplicatedEventsServiceImpl.java     | 1262 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 src/main/java/com/reyun/service/impl/ConfigParamServiceImpl.java           |   50 ++++++++++++++++++++++++++++++++++++++++++++++++++
 src/main/java/com/reyun/service/impl/CustomMenuServiceImpl.java            | 1119 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 src/main/java/com/reyun/service/impl/DemoAppointmentServiceImpl.java       |   37 +++++++++++++++++++++++++++++++++++++
 src/main/java/com/reyun/service/impl/DemoServiceImpl.java                  |   21 +++++++++++++++++++++
 src/main/java/com/reyun/service/impl/EventServiceImpl.java                 | 1503 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 src/main/java/com/reyun/service/impl/EventStatsServiceImpl.java            |  687 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 src/main/java/com/reyun/service/impl/ExportReportInfoServiceImpl.java      |  117 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 src/main/java/com/reyun/service/impl/ExpressionServiceImpl.java            |  584 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 src/main/java/com/reyun/service/impl/FunnelServiceImpl.java                |  433 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 src/main/java/com/reyun/task/EmailThread.java                              |   39 +++++++++++++++++++++++++++++++++++++++
 src/main/java/com/reyun/taskexecute/EventReportCallable.java               |   68 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 src/main/java/com/reyun/util/AwsS3Util.java                                |  124 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 src/main/java/com/reyun/util/BeanUtils.java                                |   22 ++++++++++++++++++++++
 src/main/java/com/reyun/util/CharacterUtils.java                           |   23 +++++++++++++++++++++++
 src/main/java/com/reyun/util/CipherUtil.java                               |   83 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 src/main/java/com/reyun/util/Constant.java                                 |   48 ++++++++++++++++++++++++++++++++++++++++++++++++
 src/main/java/com/reyun/util/DBUtil.java                                   |  230 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 src/main/java/com/reyun/util/DateUtil.java                                 | 1518 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 src/main/java/com/reyun/util/DateUtil1.java                                | 1496 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 src/main/java/com/reyun/util/EventRedisUtil.java                           |  129 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 src/main/java/com/reyun/util/ExcelUtil.java                                |  190 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 src/main/java/com/reyun/util/ExportReportUtil.java                         |  110 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 src/main/java/com/reyun/util/GeneratePwd8.java                             |   33 +++++++++++++++++++++++++++++++++
 src/main/resources/17monipdb.dat                                           | Bin 0 -> 2657479 bytes
 src/main/resources/META-INF/app.properties                                 |    1 +
 src/main/resources/applicationContext-schedule.xml                         |   12 ++++++++++++
 src/main/resources/applicationContext.xml                                  |  124 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 src/main/resources/common.properties                                       |    4 ++++
 src/main/resources/db.properties                                           |    4 ++++
 src/main/resources/upgrade/feature_20170911_blacklist.sql                  |    1 +
 src/main/resources/upgrade/feature_20170911_shenmalogin.sql                |    6 ++++++
 src/main/websrc/404.html                                                   |   57 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 src/main/websrc/502.html                                                   |   65 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 src/main/websrc/504.html                                                   |   65 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 src/main/websrc/activation.html                                            |   82 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 src/main/websrc/demo.html                                                  |   38 ++++++++++++++++++++++++++++++++++++++
 src/main/websrc/failure.html                                               |   56 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 src/main/websrc/favicon.ico                                                | Bin 0 -> 140206 bytes
 src/main/websrc/font/demo_fontclass.html                                   |  256 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 src/main/websrc/font/svg/android.svg                                       |   24 ++++++++++++++++++++++++
 src/main/websrc/font/svg/app.svg                                           |   12 ++++++++++++
 src/main/websrc/font/svg/asmeffectevaluate.svg                             |   11 +++++++++++
 src/main/websrc/font/svg/attribute.svg                                     |   10 ++++++++++
 src/main/websrc/font/svg/auth.svg                                          |   11 +++++++++++
 src/main/websrc/font/svg/campaign.svg                                      |   10 ++++++++++
 src/main/websrc/font/svg/campaigninfo.svg                                  |   10 ++++++++++
 src/main/websrc/font/svg/channel.svg                                       |   20 ++++++++++++++++++++
 src/main/websrc/font/svg/channeleffect.svg                                 |   10 ++++++++++
 src/main/websrc/font/svg/costrecovery.svg                                  |   13 +++++++++++++
 src/main/websrc/font/svg/custommenu.svg                                    |   14 ++++++++++++++
 src/main/websrc/font/svg/customset.svg                                     |   11 +++++++++++
 src/main/websrc/font/svg/dashboard.svg                                     |   10 ++++++++++
 src/main/websrc/font/svg/effectevaluate.svg                                |   11 +++++++++++
 src/main/websrc/font/svg/event.svg                                         |   10 ++++++++++
 src/main/websrc/font/svg/eventlist.svg                                     |   11 +++++++++++
 src/main/websrc/font/svg/eventstats.svg                                    |   13 +++++++++++++
 src/main/websrc/font/svg/funnel.svg                                        |   10 ++++++++++
 src/main/websrc/forget.html                                                |   82 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 src/main/websrc/images/0415.png                                            | Bin 0 -> 3541 bytes
 src/main/websrc/images/0416.png                                            | Bin 0 -> 4088 bytes
 src/main/websrc/images/add.gif                                             | Bin 0 -> 6197 bytes
 src/main/websrc/images/add03.png                                           | Bin 0 -> 3021 bytes
 src/main/websrc/images/adddis.png                                          | Bin 0 -> 114 bytes
 src/main/websrc/images/allow-right.png                                     | Bin 0 -> 2992 bytes
 src/main/websrc/images/arrow.png                                           | Bin 0 -> 1098 bytes
 src/main/websrc/images/arrow1.png                                          | Bin 0 -> 1407 bytes
 src/main/websrc/images/arrow2.png                                          | Bin 0 -> 1458 bytes
 src/main/websrc/images/auth.png                                            | Bin 0 -> 2726 bytes
 src/main/websrc/images/behavior.png                                        | Bin 0 -> 3746 bytes
 src/main/websrc/images/bottom.png                                          | Bin 0 -> 421 bytes
 src/main/websrc/images/camp01.png                                          | Bin 0 -> 3146 bytes
 src/main/websrc/images/channelmore.png                                     | Bin 0 -> 1310 bytes
 src/main/websrc/images/chartarrow.png                                      | Bin 0 -> 1260 bytes
 src/main/websrc/images/chartarrow2.png                                     | Bin 0 -> 264 bytes
 src/main/websrc/images/close.png                                           | Bin 0 -> 235251 bytes
 src/main/websrc/images/close1.png                                          | Bin 0 -> 332 bytes
 src/main/websrc/images/complex.png                                         | Bin 0 -> 704 bytes
 src/main/websrc/images/coop/h1.png                                         | Bin 0 -> 5010 bytes
 src/main/websrc/images/coop/h10.png                                        | Bin 0 -> 4645 bytes
 src/main/websrc/images/coop/h100.png                                       | Bin 0 -> 4491 bytes
 src/main/websrc/images/coop/h101.png                                       | Bin 0 -> 4909 bytes
 src/main/websrc/images/coop/h11.png                                        | Bin 0 -> 5557 bytes
 src/main/websrc/images/coop/h12.png                                        | Bin 0 -> 5688 bytes
 src/main/websrc/images/coop/h13.png                                        | Bin 0 -> 4126 bytes
 src/main/websrc/images/coop/h14.png                                        | Bin 0 -> 4023 bytes
 src/main/websrc/images/coop/h15.png                                        | Bin 0 -> 4758 bytes
 src/main/websrc/images/coop/h16.png                                        | Bin 0 -> 3441 bytes
 src/main/websrc/images/coop/h17.png                                        | Bin 0 -> 3060 bytes
 src/main/websrc/images/custom.png                                          | Bin 0 -> 15440 bytes
 src/main/websrc/images/custommenu01.png                                    | Bin 0 -> 17103 bytes
 src/main/websrc/images/demo.png                                            | Bin 0 -> 12532 bytes
 src/main/websrc/images/demoRight.png                                       | Bin 0 -> 1201 bytes
 src/main/websrc/images/empty.png                                           | Bin 0 -> 3117 bytes
 src/main/websrc/images/erweima.png                                         | Bin 0 -> 13978 bytes
 src/main/websrc/images/event.png                                           | Bin 0 -> 1378 bytes
 src/main/websrc/images/expiration.png                                      | Bin 0 -> 4178 bytes
 src/main/websrc/images/export01.png                                        | Bin 0 -> 1380 bytes
 src/main/websrc/images/first01.png                                         | Bin 0 -> 7464 bytes
 src/main/websrc/images/first1.png                                          | Bin 0 -> 13920 bytes
 src/main/websrc/images/first2.png                                          | Bin 0 -> 14518 bytes
 src/main/websrc/images/first_1.png                                         | Bin 0 -> 8149 bytes
 src/main/websrc/images/link/1.png                                          | Bin 0 -> 2632 bytes
 src/main/websrc/images/link/10.png                                         | Bin 0 -> 1914 bytes
 src/main/websrc/images/link/11.png                                         | Bin 0 -> 2271 bytes
 src/main/websrc/images/link/2.png                                          | Bin 0 -> 2684 bytes
 src/main/websrc/images/link/3.png                                          | Bin 0 -> 2997 bytes
 src/main/websrc/images/link/4.png                                          | Bin 0 -> 3573 bytes
 src/main/websrc/images/link/5.png                                          | Bin 0 -> 2251 bytes
 src/main/websrc/images/link/6.png                                          | Bin 0 -> 2286 bytes
 src/main/websrc/images/link/7.png                                          | Bin 0 -> 2201 bytes
 src/main/websrc/images/link/8.png                                          | Bin 0 -> 2299 bytes
 src/main/websrc/images/link/9.png                                          | Bin 0 -> 1712 bytes
 src/main/websrc/js/app/DateDirective.js                                    |  791 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 src/main/websrc/js/app/DateService.js                                      |  231 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 src/main/websrc/js/app/app.js                                              |  394 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 src/main/websrc/js/app/config.js                                           |  152 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 src/main/websrc/js/app/directive.js                                        | 2038 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 src/main/websrc/js/app/filter.js                                           |  109 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 src/main/websrc/js/collect/custommenu.js                                   | 1370 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 src/main/websrc/js/collect/eventstats.js                                   | 1871 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 src/main/websrc/js/collect/expiration.js                                   |    9 +++++++++
 src/main/websrc/js/collect/funnel.js                                       |  649 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 src/main/websrc/js/common/angular-animate.min.js                           |   56 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 src/main/websrc/js/common/angular-ui-router.min.js                         |    7 +++++++
 src/main/websrc/js/common/angular.min.js                                   |  295 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 src/main/websrc/js/common/china.js                                         |   27 +++++++++++++++++++++++++++
 src/main/websrc/js/common/clipboard.min.js                                 |    7 +++++++
 src/main/websrc/js/common/date-utils.js                                    |  762 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 src/main/websrc/js/common/dates.js                                         |   75 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 src/main/websrc/js/common/echarts.min.js                                   |   35 +++++++++++++++++++++++++++++++++++
 src/main/websrc/js/common/esl.js                                           |    1 +
 src/main/websrc/js/home/demolist.js                                        |   21 +++++++++++++++++++++
 src/main/websrc/js/login/acvitation.js                                     |  162 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 src/main/websrc/js/login/echarts-all.js                                    |   35 +++++++++++++++++++++++++++++++++++
 src/main/websrc/js/login/failure.js                                        |   40 ++++++++++++++++++++++++++++++++++++++++
 src/main/websrc/js/login/forget.js                                         |  121 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 src/main/websrc/js/manage/activityevent.js                                 |  236 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 src/main/websrc/js/manage/app.js                                           |  483 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 src/main/websrc/js/manage/auth.js                                          |  379 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 src/main/websrc/js/manage/channel.js                                       | 1874 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 src/main/websrc/js/manage/event.js                                         |  213 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 src/main/websrc/styles/animate.scss                                        | 1068 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 src/main/websrc/template/collect/custommenu.html                           |  442 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 src/main/websrc/template/collect/eventstats.html                           |  312 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 src/main/websrc/template/collect/funnel.html                               |  192 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 src/main/websrc/template/common/channel.html                               |   30 ++++++++++++++++++++++++++++++
 src/main/websrc/template/common/chart.html                                 |   40 ++++++++++++++++++++++++++++++++++++++++
 src/main/websrc/template/common/custom.html                                |   93 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 src/main/websrc/template/common/datemonth.html                             |   36 ++++++++++++++++++++++++++++++++++++
 src/main/websrc/template/common/datepicker.html                            |   58 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 src/main/websrc/template/common/daterange.html                             |    8 ++++++++
 src/main/websrc/template/common/dateweek.html                              |   36 ++++++++++++++++++++++++++++++++++++
 src/main/websrc/template/common/delwin.html                                |   15 +++++++++++++++
 src/main/websrc/template/common/export.html                                |    3 +++
 src/main/websrc/template/common/flipinfo.html                              |   12 ++++++++++++
 src/main/websrc/template/common/flipinfody.html                            |   12 ++++++++++++
 src/main/websrc/template/home/demolist.html                                |  250 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 src/main/websrc/template/manage/activityevent.html                         |   46 ++++++++++++++++++++++++++++++++++++++++++++++
 src/main/websrc/template/manage/activityeventDetail.html                   |   44 ++++++++++++++++++++++++++++++++++++++++++++
 src/main/websrc/template/manage/app.html                                   |   45 +++++++++++++++++++++++++++++++++++++++++++++
 src/main/websrc/template/manage/appDetail.html                             |  247 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 src/main/websrc/template/manage/auth.html                                  |   82 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 src/main/websrc/template/manage/authDetail.html                            |   89 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 src/main/websrc/template/manage/event.html                                 |  100 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 src/main/websrc/template/manage/img/1.png                                  | Bin 0 -> 23888 bytes
 src/main/websrc/template/manage/img/2.png                                  | Bin 0 -> 4817 bytes
 src/main/websrc/template/manage/img/3.png                                  | Bin 0 -> 9730 bytes
 src/main/websrc/template/manage/img/4.png                                  | Bin 0 -> 12485 bytes
 src/main/websrc/template/manage/img/5.png                                  | Bin 0 -> 3970 bytes
 src/main/websrc/template/manage/img/addchannel.png                         | Bin 0 -> 30398 bytes
 src/main/websrc/template/manage/img/addchannel2.png                        | Bin 0 -> 41940 bytes
 src/main/websrc/template/manage/img/addchannel3.png                        | Bin 0 -> 43785 bytes
 src/main/websrc/template/manage/img/adwords/1.png                          | Bin 0 -> 10016 bytes
 src/main/websrc/template/manage/img/adwords/2.png                          | Bin 0 -> 8243 bytes
 src/main/websrc/template/manage/img/adwords/3.png                          | Bin 0 -> 21634 bytes
 src/main/websrc/template/manage/img/adwords/4.png                          | Bin 0 -> 80490 bytes
 src/main/websrc/template/manage/img/adwords/5.png                          | Bin 0 -> 91151 bytes
 src/main/websrc/template/manage/img/adwords/6.png                          | Bin 0 -> 23890 bytes
 src/main/websrc/template/manage/img/baidu1.png                             | Bin 0 -> 46983 bytes
 src/main/websrc/template/manage/img/baidu2.png                             | Bin 0 -> 39127 bytes
 src/main/websrc/template/manage/img/baidudsp.png                           | Bin 0 -> 54203 bytes
 src/main/websrc/template/manage/img/wxmp/1.png                             | Bin 0 -> 62462 bytes
 src/main/websrc/template/manage/img/wxmp/2.png                             | Bin 0 -> 52583 bytes
 src/main/websrc/template/manage/img/wxmp/3.png                             | Bin 0 -> 35034 bytes
 src/main/websrc/template/manage/img/wxmp/4.png                             | Bin 0 -> 48139 bytes
 src/main/websrc/template/manage/img/wxmp/5.png                             | Bin 0 -> 44892 bytes
 src/main/websrc/template/manage/img/zht/1.png                              | Bin 0 -> 35948 bytes
 src/main/websrc/template/manage/img/zht/2.png                              | Bin 0 -> 35435 bytes
 src/main/websrc/template/manage/img/zht/3.png                              | Bin 0 -> 49648 bytes
 src/main/websrc/template/manage/img/zht/4.png                              | Bin 0 -> 43035 bytes
 src/main/websrc/template/menu/collect.html                                 |  183 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 299 files changed, 36484 insertions(+)
 create mode 100644 lib/cat-client-2.0.0.jar
 create mode 100644 lib/cat-core-2.0.0.jar
 create mode 100644 lib/foundation-service-4.0.0.jar
 create mode 100644 src/main/java/com/reyun/context/AppUtils.java
 create mode 100644 src/main/java/com/reyun/controller/AccountController.java
 create mode 100644 src/main/java/com/reyun/controller/AppController.java
 create mode 100644 src/main/java/com/reyun/controller/CustomMenuController.java
 create mode 100644 src/main/java/com/reyun/controller/EventController.java
 create mode 100644 src/main/java/com/reyun/controller/EventStatsController.java
 create mode 100644 src/main/java/com/reyun/controller/ExpressionController.java
 create mode 100644 src/main/java/com/reyun/controller/FunnelController.java
 create mode 100644 src/main/java/com/reyun/controller/manage/ExportReportInfoController.java
 create mode 100644 src/main/java/com/reyun/dic/AppPlatformEnum.java
 create mode 100644 src/main/java/com/reyun/dic/ChannelCategoryEnumType.java
 create mode 100644 src/main/java/com/reyun/dic/ChannelEnumType.java
 create mode 100644 src/main/java/com/reyun/dic/ConfigEnumType.java
 create mode 100644 src/main/java/com/reyun/dic/CustomMenuType.java
 create mode 100644 src/main/java/com/reyun/dic/DataViewEnumType.java
 create mode 100644 src/main/java/com/reyun/dic/DivEnumType.java
 create mode 100644 src/main/java/com/reyun/dic/DownloadEnumType.java
 create mode 100644 src/main/java/com/reyun/dic/DownloadStatusEnumType.java
 create mode 100644 src/main/java/com/reyun/dic/FunctionEnumType.java
 create mode 100644 src/main/java/com/reyun/exception/GlobalExceptionAdvice.java
 create mode 100644 src/main/java/com/reyun/model/Account.java
 create mode 100644 src/main/java/com/reyun/model/AccountRestrict4Web.java
 create mode 100644 src/main/java/com/reyun/model/App.java
 create mode 100644 src/main/java/com/reyun/model/AttributeRestrict.java
 create mode 100644 src/main/java/com/reyun/model/Auth.java
 create mode 100644 src/main/java/com/reyun/model/BussinessMan.java
 create mode 100644 src/main/java/com/reyun/model/Category.java
 create mode 100644 src/main/java/com/reyun/model/CommonEvent.java
 create mode 100644 src/main/java/com/reyun/model/CommonIP.java
 create mode 100644 src/main/java/com/reyun/model/CommonParam.java
 create mode 100644 src/main/java/com/reyun/model/ComplicatedParam.java
 create mode 100644 src/main/java/com/reyun/model/ConfigParam.java
 create mode 100644 src/main/java/com/reyun/model/CustomMenu.java
 create mode 100644 src/main/java/com/reyun/model/CustomMenuFavorites.java
 create mode 100644 src/main/java/com/reyun/model/CustomMenuShare.java
 create mode 100644 src/main/java/com/reyun/model/CustomMenuShareTemplate.java
 create mode 100644 src/main/java/com/reyun/model/CustomMenuTemplate.java
 create mode 100644 src/main/java/com/reyun/model/DataAuth.java
 create mode 100644 src/main/java/com/reyun/model/DataParam.java
 create mode 100644 src/main/java/com/reyun/model/DemoAppointment.java
 create mode 100644 src/main/java/com/reyun/model/Dimension4Web.java
 create mode 100644 src/main/java/com/reyun/model/EditionPricingLevel4Web.java
 create mode 100644 src/main/java/com/reyun/model/Email.java
 create mode 100644 src/main/java/com/reyun/model/Event.java
 create mode 100644 src/main/java/com/reyun/model/Event4Web.java
 create mode 100644 src/main/java/com/reyun/model/EventAttr4Web.java
 create mode 100644 src/main/java/com/reyun/model/EventAttributeMeta.java
 create mode 100644 src/main/java/com/reyun/model/EventMapPK.java
 create mode 100644 src/main/java/com/reyun/model/EventMeta.java
 create mode 100644 src/main/java/com/reyun/model/EventStats.java
 create mode 100644 src/main/java/com/reyun/model/EventViewAttr.java
 create mode 100644 src/main/java/com/reyun/model/EventtableMetadata.java
 create mode 100644 src/main/java/com/reyun/model/ExportReportInfo.java
 create mode 100644 src/main/java/com/reyun/model/Funnel.java
 create mode 100644 src/main/java/com/reyun/repository/AccountRepository.java
 create mode 100644 src/main/java/com/reyun/repository/AppRepository.java
 create mode 100644 src/main/java/com/reyun/repository/AttributeRestrictRepository.java
 create mode 100644 src/main/java/com/reyun/repository/AuthRepository.java
 create mode 100644 src/main/java/com/reyun/repository/BussinessManRepository.java
 create mode 100644 src/main/java/com/reyun/repository/CategoryRepository.java
 create mode 100644 src/main/java/com/reyun/repository/CommonEventRepository.java
 create mode 100644 src/main/java/com/reyun/repository/CommonIPRepository.java
 create mode 100644 src/main/java/com/reyun/repository/CommonParamRepository.java
 create mode 100644 src/main/java/com/reyun/repository/ComplicatedParamRepository.java
 create mode 100644 src/main/java/com/reyun/repository/ConfigParamRepository.java
 create mode 100644 src/main/java/com/reyun/repository/CustomMenuFavoritesRepository.java
 create mode 100644 src/main/java/com/reyun/repository/CustomMenuRepository.java
 create mode 100644 src/main/java/com/reyun/repository/CustomMenuShareRepository.java
 create mode 100644 src/main/java/com/reyun/repository/CustomMenuShareTempRepository.java
 create mode 100644 src/main/java/com/reyun/repository/CustomMenuTemplateRepository.java
 create mode 100644 src/main/java/com/reyun/repository/DataAuthRepository.java
 create mode 100644 src/main/java/com/reyun/repository/DataParamRepository.java
 create mode 100644 src/main/java/com/reyun/repository/DemoAppointmentRepository.java
 create mode 100644 src/main/java/com/reyun/repository/EventAttributeMetaRepository.java
 create mode 100644 src/main/java/com/reyun/repository/EventMetaRepository.java
 create mode 100644 src/main/java/com/reyun/repository/EventRepository.java
 create mode 100644 src/main/java/com/reyun/repository/EventStatsRepository.java
 create mode 100644 src/main/java/com/reyun/repository/EventViewAttrRepository.java
 create mode 100644 src/main/java/com/reyun/repository/EventtableMetadataRepository.java
 create mode 100644 src/main/java/com/reyun/repository/ExportReportInfoRepository.java
 create mode 100644 src/main/java/com/reyun/repository/FunnelRepository.java
 create mode 100644 src/main/java/com/reyun/security/AbstractTokenManager.java
 create mode 100644 src/main/java/com/reyun/security/annotation/Authorization.java
 create mode 100644 src/main/java/com/reyun/security/annotation/CurrentAccount.java
 create mode 100644 src/main/java/com/reyun/security/cors/CorsFilter.java
 create mode 100644 src/main/java/com/reyun/security/interceptor/AuthorizationInterceptor.java
 create mode 100644 src/main/java/com/reyun/service/AppService.java
 create mode 100644 src/main/java/com/reyun/service/AuthService.java
 create mode 100644 src/main/java/com/reyun/service/CommonIPService.java
 create mode 100644 src/main/java/com/reyun/service/CommonParamService.java
 create mode 100644 src/main/java/com/reyun/service/ComplicateEventsService.java
 create mode 100644 src/main/java/com/reyun/service/ConfigParamService.java
 create mode 100644 src/main/java/com/reyun/service/CustomMenuService.java
 create mode 100644 src/main/java/com/reyun/service/DemoAppointmentService.java
 create mode 100644 src/main/java/com/reyun/service/DemoService.java
 create mode 100644 src/main/java/com/reyun/service/EventService.java
 create mode 100644 src/main/java/com/reyun/service/EventStatsService.java
 create mode 100644 src/main/java/com/reyun/service/ExportReportInfoService.java
 create mode 100644 src/main/java/com/reyun/service/ExpressionService.java
 create mode 100644 src/main/java/com/reyun/service/FunnelService.java
 create mode 100644 src/main/java/com/reyun/service/impl/AppServiceImpl.java
 create mode 100644 src/main/java/com/reyun/service/impl/AuthServiceImpl.java
 create mode 100644 src/main/java/com/reyun/service/impl/CommonIPServiceImpl.java
 create mode 100644 src/main/java/com/reyun/service/impl/CommonParamServiceImpl.java
 create mode 100644 src/main/java/com/reyun/service/impl/ComplicatedEventsServiceImpl.java
 create mode 100644 src/main/java/com/reyun/service/impl/ConfigParamServiceImpl.java
 create mode 100644 src/main/java/com/reyun/service/impl/CustomMenuServiceImpl.java
 create mode 100644 src/main/java/com/reyun/service/impl/DemoAppointmentServiceImpl.java
 create mode 100644 src/main/java/com/reyun/service/impl/DemoServiceImpl.java
 create mode 100644 src/main/java/com/reyun/service/impl/EventServiceImpl.java
 create mode 100644 src/main/java/com/reyun/service/impl/EventStatsServiceImpl.java
 create mode 100644 src/main/java/com/reyun/service/impl/ExportReportInfoServiceImpl.java
 create mode 100644 src/main/java/com/reyun/service/impl/ExpressionServiceImpl.java
 create mode 100644 src/main/java/com/reyun/service/impl/FunnelServiceImpl.java
 create mode 100644 src/main/java/com/reyun/task/EmailThread.java
 create mode 100644 src/main/java/com/reyun/taskexecute/EventReportCallable.java
 create mode 100644 src/main/java/com/reyun/util/AwsS3Util.java
 create mode 100644 src/main/java/com/reyun/util/BeanUtils.java
 create mode 100644 src/main/java/com/reyun/util/CharacterUtils.java
 create mode 100644 src/main/java/com/reyun/util/CipherUtil.java
 create mode 100644 src/main/java/com/reyun/util/Constant.java
 create mode 100644 src/main/java/com/reyun/util/DBUtil.java
 create mode 100644 src/main/java/com/reyun/util/DateUtil.java
 create mode 100644 src/main/java/com/reyun/util/DateUtil1.java
 create mode 100644 src/main/java/com/reyun/util/EventRedisUtil.java
 create mode 100644 src/main/java/com/reyun/util/ExcelUtil.java
 create mode 100644 src/main/java/com/reyun/util/ExportReportUtil.java
 create mode 100644 src/main/java/com/reyun/util/GeneratePwd8.java
 create mode 100644 src/main/resources/17monipdb.dat
 create mode 100644 src/main/resources/META-INF/app.properties
 create mode 100644 src/main/resources/applicationContext-schedule.xml
 create mode 100644 src/main/resources/applicationContext.xml
 create mode 100644 src/main/resources/common.properties
 create mode 100644 src/main/resources/db.properties
 create mode 100644 src/main/resources/upgrade/feature_20170911_blacklist.sql
 create mode 100644 src/main/resources/upgrade/feature_20170911_shenmalogin.sql
 create mode 100644 src/main/websrc/404.html
 create mode 100644 src/main/websrc/502.html
 create mode 100644 src/main/websrc/504.html
 create mode 100644 src/main/websrc/activation.html
 create mode 100644 src/main/websrc/demo.html
 create mode 100644 src/main/websrc/failure.html
 create mode 100644 src/main/websrc/favicon.ico
 create mode 100644 src/main/websrc/font/demo_fontclass.html
 create mode 100644 src/main/websrc/font/svg/android.svg
 create mode 100644 src/main/websrc/font/svg/app.svg
 create mode 100644 src/main/websrc/font/svg/asmeffectevaluate.svg
 create mode 100644 src/main/websrc/font/svg/attribute.svg
 create mode 100644 src/main/websrc/font/svg/auth.svg
 create mode 100644 src/main/websrc/font/svg/campaign.svg
 create mode 100644 src/main/websrc/font/svg/campaigninfo.svg
 create mode 100644 src/main/websrc/font/svg/channel.svg
 create mode 100644 src/main/websrc/font/svg/channeleffect.svg
 create mode 100644 src/main/websrc/font/svg/costrecovery.svg
 create mode 100644 src/main/websrc/font/svg/custommenu.svg
 create mode 100644 src/main/websrc/font/svg/customset.svg
 create mode 100644 src/main/websrc/font/svg/dashboard.svg
 create mode 100644 src/main/websrc/font/svg/effectevaluate.svg
 create mode 100644 src/main/websrc/font/svg/event.svg
 create mode 100644 src/main/websrc/font/svg/eventlist.svg
 create mode 100644 src/main/websrc/font/svg/eventstats.svg
 create mode 100644 src/main/websrc/font/svg/funnel.svg
 create mode 100644 src/main/websrc/forget.html
 create mode 100644 src/main/websrc/images/0415.png
 create mode 100644 src/main/websrc/images/0416.png
 create mode 100644 src/main/websrc/images/add.gif
 create mode 100644 src/main/websrc/images/add03.png
 create mode 100644 src/main/websrc/images/adddis.png
 create mode 100644 src/main/websrc/images/allow-right.png
 create mode 100644 src/main/websrc/images/arrow.png
 create mode 100644 src/main/websrc/images/arrow1.png
 create mode 100644 src/main/websrc/images/arrow2.png
 create mode 100644 src/main/websrc/images/auth.png
 create mode 100644 src/main/websrc/images/behavior.png
 create mode 100644 src/main/websrc/images/bottom.png
 create mode 100644 src/main/websrc/images/camp01.png
 create mode 100644 src/main/websrc/images/channelmore.png
 create mode 100644 src/main/websrc/images/chartarrow.png
 create mode 100644 src/main/websrc/images/chartarrow2.png
 create mode 100644 src/main/websrc/images/close.png
 create mode 100644 src/main/websrc/images/close1.png
 create mode 100644 src/main/websrc/images/complex.png
 create mode 100644 src/main/websrc/images/coop/h1.png
 create mode 100644 src/main/websrc/images/coop/h10.png
 create mode 100644 src/main/websrc/images/coop/h100.png
 create mode 100644 src/main/websrc/images/coop/h101.png
 create mode 100644 src/main/websrc/images/coop/h11.png
 create mode 100644 src/main/websrc/images/coop/h12.png
 create mode 100644 src/main/websrc/images/coop/h13.png
 create mode 100644 src/main/websrc/images/coop/h14.png
 create mode 100644 src/main/websrc/images/coop/h15.png
 create mode 100644 src/main/websrc/images/coop/h16.png
 create mode 100644 src/main/websrc/images/coop/h17.png
 create mode 100644 src/main/websrc/images/custom.png
 create mode 100644 src/main/websrc/images/custommenu01.png
 create mode 100644 src/main/websrc/images/demo.png
 create mode 100644 src/main/websrc/images/demoRight.png
 create mode 100644 src/main/websrc/images/empty.png
 create mode 100644 src/main/websrc/images/erweima.png
 create mode 100644 src/main/websrc/images/event.png
 create mode 100644 src/main/websrc/images/expiration.png
 create mode 100644 src/main/websrc/images/export01.png
 create mode 100644 src/main/websrc/images/first01.png
 create mode 100644 src/main/websrc/images/first1.png
 create mode 100644 src/main/websrc/images/first2.png
 create mode 100644 src/main/websrc/images/first_1.png
 create mode 100644 src/main/websrc/images/link/1.png
 create mode 100644 src/main/websrc/images/link/10.png
 create mode 100644 src/main/websrc/images/link/11.png
 create mode 100644 src/main/websrc/images/link/2.png
 create mode 100644 src/main/websrc/images/link/3.png
 create mode 100644 src/main/websrc/images/link/4.png
 create mode 100644 src/main/websrc/images/link/5.png
 create mode 100644 src/main/websrc/images/link/6.png
 create mode 100644 src/main/websrc/images/link/7.png
 create mode 100644 src/main/websrc/images/link/8.png
 create mode 100644 src/main/websrc/images/link/9.png
 create mode 100644 src/main/websrc/js/app/DateDirective.js
 create mode 100644 src/main/websrc/js/app/DateService.js
 create mode 100644 src/main/websrc/js/app/app.js
 create mode 100644 src/main/websrc/js/app/config.js
 create mode 100644 src/main/websrc/js/app/directive.js
 create mode 100644 src/main/websrc/js/app/filter.js
 create mode 100644 src/main/websrc/js/collect/custommenu.js
 create mode 100644 src/main/websrc/js/collect/eventstats.js
 create mode 100644 src/main/websrc/js/collect/expiration.js
 create mode 100644 src/main/websrc/js/collect/funnel.js
 create mode 100644 src/main/websrc/js/common/angular-animate.min.js
 create mode 100644 src/main/websrc/js/common/angular-ui-router.min.js
 create mode 100644 src/main/websrc/js/common/angular.min.js
 create mode 100644 src/main/websrc/js/common/china.js
 create mode 100644 src/main/websrc/js/common/clipboard.min.js
 create mode 100644 src/main/websrc/js/common/date-utils.js
 create mode 100644 src/main/websrc/js/common/dates.js
 create mode 100644 src/main/websrc/js/common/echarts.min.js
 create mode 100644 src/main/websrc/js/common/esl.js
 create mode 100644 src/main/websrc/js/home/demolist.js
 create mode 100644 src/main/websrc/js/login/acvitation.js
 create mode 100644 src/main/websrc/js/login/echarts-all.js
 create mode 100644 src/main/websrc/js/login/failure.js
 create mode 100644 src/main/websrc/js/login/forget.js
 create mode 100644 src/main/websrc/js/manage/activityevent.js
 create mode 100644 src/main/websrc/js/manage/app.js
 create mode 100644 src/main/websrc/js/manage/auth.js
 create mode 100644 src/main/websrc/js/manage/channel.js
 create mode 100644 src/main/websrc/js/manage/event.js
 create mode 100644 src/main/websrc/styles/animate.scss
 create mode 100644 src/main/websrc/template/collect/custommenu.html
 create mode 100644 src/main/websrc/template/collect/eventstats.html
 create mode 100644 src/main/websrc/template/collect/funnel.html
 create mode 100644 src/main/websrc/template/common/channel.html
 create mode 100644 src/main/websrc/template/common/chart.html
 create mode 100644 src/main/websrc/template/common/custom.html
 create mode 100644 src/main/websrc/template/common/datemonth.html
 create mode 100644 src/main/websrc/template/common/datepicker.html
 create mode 100644 src/main/websrc/template/common/daterange.html
 create mode 100644 src/main/websrc/template/common/dateweek.html
 create mode 100644 src/main/websrc/template/common/delwin.html
 create mode 100644 src/main/websrc/template/common/export.html
 create mode 100644 src/main/websrc/template/common/flipinfo.html
 create mode 100644 src/main/websrc/template/common/flipinfody.html
 create mode 100644 src/main/websrc/template/home/demolist.html
 create mode 100644 src/main/websrc/template/manage/activityevent.html
 create mode 100644 src/main/websrc/template/manage/activityeventDetail.html
 create mode 100644 src/main/websrc/template/manage/app.html
 create mode 100644 src/main/websrc/template/manage/appDetail.html
 create mode 100644 src/main/websrc/template/manage/auth.html
 create mode 100644 src/main/websrc/template/manage/authDetail.html
 create mode 100644 src/main/websrc/template/manage/event.html
 create mode 100644 src/main/websrc/template/manage/img/1.png
 create mode 100644 src/main/websrc/template/manage/img/2.png
 create mode 100644 src/main/websrc/template/manage/img/3.png
 create mode 100644 src/main/websrc/template/manage/img/4.png
 create mode 100644 src/main/websrc/template/manage/img/5.png
 create mode 100644 src/main/websrc/template/manage/img/addchannel.png
 create mode 100644 src/main/websrc/template/manage/img/addchannel2.png
 create mode 100644 src/main/websrc/template/manage/img/addchannel3.png
 create mode 100644 src/main/websrc/template/manage/img/adwords/1.png
 create mode 100644 src/main/websrc/template/manage/img/adwords/2.png
 create mode 100644 src/main/websrc/template/manage/img/adwords/3.png
 create mode 100644 src/main/websrc/template/manage/img/adwords/4.png
 create mode 100644 src/main/websrc/template/manage/img/adwords/5.png
 create mode 100644 src/main/websrc/template/manage/img/adwords/6.png
 create mode 100644 src/main/websrc/template/manage/img/baidu1.png
 create mode 100644 src/main/websrc/template/manage/img/baidu2.png
 create mode 100644 src/main/websrc/template/manage/img/baidudsp.png
 create mode 100644 src/main/websrc/template/manage/img/wxmp/1.png
 create mode 100644 src/main/websrc/template/manage/img/wxmp/2.png
 create mode 100644 src/main/websrc/template/manage/img/wxmp/3.png
 create mode 100644 src/main/websrc/template/manage/img/wxmp/4.png
 create mode 100644 src/main/websrc/template/manage/img/wxmp/5.png
 create mode 100644 src/main/websrc/template/manage/img/zht/1.png
 create mode 100644 src/main/websrc/template/manage/img/zht/2.png
 create mode 100644 src/main/websrc/template/manage/img/zht/3.png
 create mode 100644 src/main/websrc/template/manage/img/zht/4.png
 create mode 100644 src/main/websrc/template/menu/collect.html

diff --git a/lib/cat-client-2.0.0.jar b/lib/cat-client-2.0.0.jar
new file mode 100644
index 0000000..94027cb
Binary files /dev/null and b/lib/cat-client-2.0.0.jar differ
diff --git a/lib/cat-core-2.0.0.jar b/lib/cat-core-2.0.0.jar
new file mode 100644
index 0000000..724a182
Binary files /dev/null and b/lib/cat-core-2.0.0.jar differ
diff --git a/lib/foundation-service-4.0.0.jar b/lib/foundation-service-4.0.0.jar
new file mode 100644
index 0000000..c694252
Binary files /dev/null and b/lib/foundation-service-4.0.0.jar differ
diff --git a/src/main/java/com/reyun/context/AppUtils.java b/src/main/java/com/reyun/context/AppUtils.java
new file mode 100644
index 0000000..6324c04
--- /dev/null
+++ b/src/main/java/com/reyun/context/AppUtils.java
@@ -0,0 +1,23 @@
+package com.reyun.context;
+
+import org.springframework.context.ApplicationContext;
+import org.springframework.context.ApplicationContextAware;
+import org.springframework.stereotype.Service;
+
+/**
+ * Created by nolan on 08/11/2016.
+ * description:
+ */
+@Service
+public class AppUtils implements ApplicationContextAware {
+    private static ApplicationContext applicationContext = null;
+
+    public static ApplicationContext getApplicationContext() {
+        return AppUtils.applicationContext;
+    }
+
+    @Override
+    public void setApplicationContext(ApplicationContext applicationContext) {
+        AppUtils.applicationContext = applicationContext;
+    }
+}
diff --git a/src/main/java/com/reyun/controller/AccountController.java b/src/main/java/com/reyun/controller/AccountController.java
new file mode 100644
index 0000000..c56fd95
--- /dev/null
+++ b/src/main/java/com/reyun/controller/AccountController.java
@@ -0,0 +1,89 @@
+package com.reyun.controller;
+
+import com.reyun.model.Account;
+import com.reyun.repository.AccountRepository;
+import com.reyun.security.TokenManager;
+import com.reyun.security.annotation.CurrentAccount;
+import com.reyun.service.LoginService;
+import com.reyun.util.ResultModel;
+import com.reyun.util.ResultStatus;
+import com.reyun.util.StringUtil;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Controller;
+import org.springframework.web.bind.annotation.*;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+@Controller
+@RequestMapping("account")
+public class AccountController {
+
+	@Autowired
+	AccountRepository accountRepository;
+
+	@Autowired
+	LoginService loginService;
+
+	@Autowired
+	TokenManager tokenManager;
+	
+	@RequestMapping(value = "register", method = RequestMethod.POST)
+	@ResponseBody
+	public ResultModel register(HttpServletResponse response,
+			@RequestBody Account account) {
+		return ResultModel.OK(loginService.save(account));
+	}
+	
+	@RequestMapping(value = "find/{id}", method = RequestMethod.GET)
+	@ResponseBody
+	public ResultModel findone(HttpServletResponse response,
+			@PathVariable Long id) {
+		return ResultModel.OK(accountRepository.findOne(id));
+	}
+
+    /**
+     * 查询账户详情和登陆日志
+     */
+    @RequestMapping(value = "detail", method = RequestMethod.GET)
+    @ResponseBody
+    public ResultModel findAccountAndLog(@CurrentAccount Account loginAccount) {
+
+        return ResultModel.OK(loginService.findAccountDetailAndLog(loginAccount));
+
+    }
+
+    /**
+     * 更新账户基本信息
+     */
+    @RequestMapping(value = "updateBase", method = RequestMethod.PUT)
+    @ResponseBody
+    public ResultModel updateAccountInfo(HttpServletRequest request, @CurrentAccount Account loginAccount, @RequestBody Account updateAccount) {
+
+        updateAccount.setId(loginAccount.getId());
+        updateAccount.setEmail(loginAccount.getEmail());
+
+        return ResultModel.OK(loginService.updateAccountInfo(updateAccount, request));
+    }
+
+    /**
+     * 更新账户密码
+     */
+    @RequestMapping(value = "updatePwd", method = RequestMethod.PUT)
+    @ResponseBody
+    public ResultModel updateAccountPwd(@CurrentAccount Account loginAccount, @RequestParam String newPassword,
+                                        @RequestParam String oldPassword) {
+
+        if (StringUtil.isEmpty(newPassword) || StringUtil.isEmpty(oldPassword) || oldPassword.equals(newPassword)) {
+
+            return ResultModel.OK(0);
+
+        } else {
+
+            ResultStatus resultStatus = loginService.updateAccountPwd(newPassword, oldPassword, loginAccount);
+
+            return new ResultModel(resultStatus.getCode(),resultStatus.getMessage(),1);
+
+        }
+    }
+}
diff --git a/src/main/java/com/reyun/controller/AppController.java b/src/main/java/com/reyun/controller/AppController.java
new file mode 100644
index 0000000..2062979
--- /dev/null
+++ b/src/main/java/com/reyun/controller/AppController.java
@@ -0,0 +1,40 @@
+package com.reyun.controller;
+
+import com.reyun.model.Account;
+import com.reyun.security.annotation.CurrentAccount;
+import com.reyun.service.AppService;
+import com.reyun.util.ResultModel;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Controller;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestMethod;
+import org.springframework.web.bind.annotation.ResponseBody;
+
+import java.io.IOException;
+
+/**
+ * Created by nolan on 22/12/2016.
+ * description:
+ */
+@Controller
+@RequestMapping("app")
+public class AppController {
+
+    @Autowired
+    private AppService appService;
+
+    @RequestMapping(value = "findall", method = RequestMethod.GET)
+    @ResponseBody
+    public ResultModel findAll(@CurrentAccount Account loginAccount) {
+        System.out.print(loginAccount.getId());
+        return ResultModel.OK(appService.listAppByAccount(loginAccount.getId()));
+    }
+
+
+    @RequestMapping(value = "find/{subAccountId}/AuthApp", method = RequestMethod.GET)
+    @ResponseBody
+    public ResultModel findAuthApp(@CurrentAccount Account loginAccount, @PathVariable Long subAccountId){
+        return ResultModel.OK(appService.listAuthAppByAccount(loginAccount, subAccountId));
+    }
+}
diff --git a/src/main/java/com/reyun/controller/CustomMenuController.java b/src/main/java/com/reyun/controller/CustomMenuController.java
new file mode 100644
index 0000000..7661f9a
--- /dev/null
+++ b/src/main/java/com/reyun/controller/CustomMenuController.java
@@ -0,0 +1,319 @@
+package com.reyun.controller;
+
+import com.reyun.model.Account;
+import com.reyun.model.CustomMenuShare;
+import com.reyun.model.CustomMenuTemplate;
+import com.reyun.security.annotation.CurrentAccount;
+import com.reyun.service.CustomMenuService;
+import com.reyun.service.EventService;
+import com.reyun.util.ResultModel;
+import com.reyun.util.ResultStatus;
+import org.apache.commons.lang.StringUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Controller;
+import org.springframework.util.CollectionUtils;
+import org.springframework.web.bind.annotation.*;
+
+/**
+ * Created by sunhao on 17/4/24.
+ * desc:看单controller
+ */
+@Controller
+@RequestMapping("custommenu")
+public class CustomMenuController {
+
+    @Autowired
+    private CustomMenuService customMenuService;
+    @Autowired
+    private EventService eventService;
+
+
+    /**
+     * 修改模板报表图表状态
+     */
+    @ResponseBody
+    @RequestMapping(value = "industry", method = RequestMethod.GET)
+    public ResultModel findIndustry() {
+        return ResultModel.OK(customMenuService.findIndustry());
+    }
+
+    /**
+     * 修改模板报表图表状态
+     */
+    @ResponseBody
+    @RequestMapping(value = "updateType/{id}", method = RequestMethod.PUT)
+    public ResultModel updateMenuType(@CurrentAccount Account account, @PathVariable Long id, @RequestParam String type) {
+        return ResultModel.OK(customMenuService.updateMyMenuTemplateType(account.getId(), id, type));
+    }
+
+    /**
+     * 修改模板顺序
+     */
+    @ResponseBody
+    @RequestMapping(value = "updateIndex/{id}", method = RequestMethod.PUT)
+    public ResultModel updateMenuIndex(@CurrentAccount Account account, @PathVariable Long id, @RequestParam int index) {
+        customMenuService.updateMyMenuTemplateIndex(account.getId(), id, index);
+        return ResultModel.OK();
+    }
+
+    /**
+     * 修改看单顺序
+     */
+    @ResponseBody
+    @RequestMapping(value = "updateIndex/{appId}/{menuId}", method = RequestMethod.PUT)
+    public ResultModel updateMenuIndex(@CurrentAccount Account account, @PathVariable Long appId,
+                                      @PathVariable Long menuId, @RequestParam int index) {
+        customMenuService.updateMyMenuIndex(account.getId(), appId, menuId, index);
+        return ResultModel.OK();
+    }
+
+    /**
+     * 查询所有看单内的报表
+     */
+    @ResponseBody
+    @RequestMapping(value = "report/{appId}/{originalReportId}", method = RequestMethod.GET)
+    public ResultModel queryAllReport(@CurrentAccount Account account, @PathVariable Long appId, @PathVariable Long originalReportId,
+                                      @RequestParam String menuType,@RequestParam String startDate,@RequestParam String endDate,
+                                      @RequestParam String viewFlag) {
+
+        if (null != originalReportId && !StringUtils.isEmpty(menuType) && !StringUtils.isEmpty(startDate) && !StringUtils.isEmpty(endDate)) {
+
+            return ResultModel.OK(customMenuService.queryAllReport(account.getId(), appId, originalReportId, menuType, startDate, endDate, viewFlag));
+
+        } else {
+            return ResultModel.ERROR(ResultStatus.PARAM_INVALID);
+        }
+    }
+
+    /**
+     * 获取所有的看单菜单名称
+     */
+    @ResponseBody
+    @RequestMapping(value = "findName/{appId}", method = RequestMethod.GET)
+    public ResultModel getAllMyCustomMenuName(@CurrentAccount Account account, @PathVariable Long appId) {
+        return ResultModel.OK(customMenuService.listMyMenuList(account.getId(), appId));
+    }
+
+    /**
+     * 获取某个看单详情
+     */
+    @ResponseBody
+    @RequestMapping(value = "findDetail/{menuId}", method = RequestMethod.GET)
+    public ResultModel getMyCustomMenuDetail(@PathVariable Long menuId){
+        return ResultModel.OK(customMenuService.getMyMenuDetail(menuId));
+    }
+
+    /**
+     * 查询是否有看单和收藏
+     */
+    @ResponseBody
+    @RequestMapping(value = "find/{appId}", method = RequestMethod.GET)
+    public ResultModel findAll(@CurrentAccount Account account,@PathVariable Long appId){
+        return ResultModel.OK(customMenuService.findAllMenuAndFavorite(account.getId(),appId));
+    }
+
+    /**
+     * 查询行业看单列表
+     */
+    @ResponseBody
+    @RequestMapping(value = "findShare/{appId}", method = RequestMethod.GET)
+    public ResultModel findAllShare(@CurrentAccount Account account, @PathVariable Long appId) {
+
+        return ResultModel.OK(customMenuService.listAllSharedMenuByCategory(account.getId(), appId));
+    }
+
+    /**
+     * 查询我的看单
+     */
+    @ResponseBody
+    @RequestMapping(value = "findMy/{appId}", method = RequestMethod.GET)
+    public ResultModel findMyCustomMenu(@CurrentAccount Account account, @PathVariable Long appId) {
+        return ResultModel.OK(customMenuService.listMyCustomMenu(account.getId(), appId));
+    }
+
+    /**
+     * 查询我的收藏
+     */
+    @ResponseBody
+    @RequestMapping(value = "findFavo/{appId}", method = RequestMethod.GET)
+    public ResultModel finaMyFavorite(@CurrentAccount Account account, @PathVariable Long appId) {
+        return ResultModel.OK(customMenuService.listMyFavorite(account.getId(), appId));
+    }
+
+    /**
+     * 自己创建看单
+     */
+    @ResponseBody
+    @RequestMapping(value = "saveMenu/{appId}", method = RequestMethod.POST)
+    public ResultModel saveCustomMenu(@CurrentAccount Account account, @PathVariable Long appId, @RequestParam String name) {
+
+        name = name.trim();
+
+        //参数校验
+        if(null == appId || StringUtils.isEmpty(name)){
+            return ResultModel.ERROR(ResultStatus.PARAM_INVALID);
+        }
+
+        //数量校验
+        if(!customMenuService.validMyMenuNumber(account.getId(), appId)){
+            return ResultModel.ERROR(ResultStatus.NUMBER_LIMIT);
+        }
+
+        //名字校验
+        if(!customMenuService.validMyMenuName(appId, name)){
+            return ResultModel.ERROR(ResultStatus.NAME_EXIST);
+        }
+
+        return ResultModel.OK(customMenuService.createMyMenu(account.getId(), appId, name));
+
+    }
+
+    /**
+     * 添加模板
+     * customMenuTemplate参数传menuType和id
+     */
+    @ResponseBody
+    @RequestMapping(value = "addTemp/{appId}/{menuId}", method = RequestMethod.POST)
+    public ResultModel saveMenuTemplate(@CurrentAccount Account account, @PathVariable Long appId,
+                                        @PathVariable Long menuId, @RequestBody CustomMenuTemplate customMenuTemplate) {
+        //参数校验
+        if(null == appId || null == customMenuTemplate || StringUtils.isEmpty(customMenuTemplate.getMenuType())
+                || null == customMenuTemplate.getOriginalReportId()){
+            return ResultModel.ERROR(ResultStatus.PARAM_INVALID);
+        }
+
+        //校验数量和重复
+        ResultModel resultModel = customMenuService.validMenuTemplate(account.getId(), menuId, customMenuTemplate.getOriginalReportId(),customMenuTemplate.getMenuType());
+
+        if (ResultStatus.SUCCESS.getCode() != resultModel.getCode()) {
+            return resultModel;
+        }
+
+        //调用加入
+        CustomMenuTemplate template = customMenuService.addCustomMenuTemplate(account, appId, menuId, customMenuTemplate);
+
+        if (null == template) {
+            return ResultModel.ERROR(ResultStatus.FAILED);
+        }
+
+        //加入成功
+        return ResultModel.OK(template);
+    }
+
+    /**
+     * 添加行业看单到我的看单
+     */
+    @ResponseBody
+    @RequestMapping(value = "addMenu/{appId}", method = RequestMethod.POST)
+    public ResultModel addShareMenu(@CurrentAccount Account account, @PathVariable Long appId, @RequestBody CustomMenuShare customMenuShare) {
+        //参数验证
+        if(null == appId || CollectionUtils.isEmpty(customMenuShare.getTemplates())){
+            return ResultModel.ERROR(ResultStatus.PARAM_INVALID);
+        }
+        //数量验证
+        if(!customMenuService.validMyMenuNumber(account.getId(), appId)){
+            return ResultModel.ERROR(ResultStatus.NUMBER_LIMIT);
+        }
+        //是否已经加入验证
+        if(customMenuService.validIsExists(appId,customMenuShare.getId())){
+            return ResultModel.ERROR(ResultStatus.RECORD_EXIST);
+        }
+
+        //加入热云看单
+        return ResultModel.OK(customMenuService.addToMyMenu(account, appId, customMenuShare));
+
+
+    }
+
+    /**
+     * 添加热云看单到我的看单
+     */
+    @ResponseBody
+    @RequestMapping(value = "addReyun/{appId}", method = RequestMethod.POST)
+    public ResultModel addReyunMenu(@CurrentAccount Account account, @PathVariable Long appId) {
+
+        //校验是否加过
+        if(customMenuService.findAllMenuAndFavorite(account.getId(), appId)){
+            return ResultModel.ERROR(ResultStatus.RECORD_EXIST);
+        }
+
+        //无事件处理
+        if (CollectionUtils.isEmpty(eventService.findAllEventWithAttr(appId))) {
+            return ResultModel.ERROR(ResultStatus.EVENT_NULL);
+        }
+
+        return ResultModel.OK(customMenuService.addReyunToMyMenu(account, appId));
+    }
+
+    /**
+     * 添加分享看单到收藏夹
+     */
+    @ResponseBody
+    @RequestMapping(value = "addFavorite/{appId}/{menuId}", method = RequestMethod.POST)
+    public ResultModel addFavorite(@CurrentAccount Account account, @PathVariable Long appId, @PathVariable Long menuId) {
+
+        return ResultModel.OK(customMenuService.addToFavorite(account.getId(), appId, menuId));
+    }
+
+
+    /**
+     * 修改看单名字
+     */
+    @ResponseBody
+    @RequestMapping(value = "updateName/{appId}/{menuId}", method = RequestMethod.PUT)
+    public ResultModel updateMenuName(@CurrentAccount Account account, @PathVariable Long appId,
+                                      @PathVariable Long menuId, @RequestParam String name) {
+        //名字校验
+        if (!customMenuService.validMyMenuName(appId, name)) {
+            return ResultModel.ERROR(ResultStatus.NAME_EXIST);
+        }
+
+        return ResultModel.OK(customMenuService.updateMyMenuName(account.getId(), menuId, name));
+    }
+
+    /**
+     * 删除我的看单
+     */
+    @ResponseBody
+    @RequestMapping(value = "delMenu/{appId}/{menuId}", method = RequestMethod.DELETE)
+    public ResultModel delCustomMenu(@CurrentAccount Account account, @PathVariable Long appId, @PathVariable Long menuId) {
+        return ResultModel.OK(customMenuService.deleteMyMenu(account.getId(), appId, menuId));
+    }
+
+    /**
+     * 删除看单模板
+     */
+    @ResponseBody
+    @RequestMapping(value = "delTemp/{templateId}", method = RequestMethod.DELETE)
+    public ResultModel delCustomMenuTemplate(@CurrentAccount Account account, @PathVariable Long templateId) {
+        return ResultModel.OK(customMenuService.deleteMyMenuTemplate(account.getId(), templateId));
+    }
+
+    /**
+     * 删除收藏夹
+     */
+    @ResponseBody
+    @RequestMapping(value = "delFavorite/{appId}/{menuId}", method = RequestMethod.DELETE)
+    public ResultModel delFavorite(@CurrentAccount Account account, @PathVariable Long appId, @PathVariable Long menuId) {
+        return ResultModel.OK(customMenuService.deleteFavorite(account.getId(), appId, menuId));
+    }
+
+    /**
+     * 取消分享
+     */
+    @ResponseBody
+    @RequestMapping(value = "cancelShare/{appId}/{menuId}", method = RequestMethod.DELETE)
+    public ResultModel cancelShareMyMenu(@CurrentAccount Account account, @PathVariable Long appId, @PathVariable Long menuId) {
+
+        return ResultModel.OK(customMenuService.cancelShareMyMenu(account.getId(), appId, menuId));
+    }
+
+    /**
+     * 删除漏斗、留存、事件分析删除是验证是否有看单引用
+     */
+    @ResponseBody
+    @RequestMapping(value = "delete/valid/{id}", method = RequestMethod.GET)
+    public ResultModel deleteFunnel(@CurrentAccount Account account, @PathVariable Long id, @RequestParam String type) {
+        return ResultModel.OK(customMenuService.listByReportId(id, type));
+    }
+}
diff --git a/src/main/java/com/reyun/controller/EventController.java b/src/main/java/com/reyun/controller/EventController.java
new file mode 100644
index 0000000..289483b
--- /dev/null
+++ b/src/main/java/com/reyun/controller/EventController.java
@@ -0,0 +1,119 @@
+package com.reyun.controller;
+
+import com.reyun.model.Account;
+import com.reyun.model.Event4Web;
+import com.reyun.model.VirtualEvent;
+import com.reyun.security.annotation.CurrentAccount;
+import com.reyun.service.EventService;
+import com.reyun.service.VirtualEventService;
+import com.reyun.util.ResultModel;
+import org.json.JSONException;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Controller;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.List;
+
+/**
+ * Created by nolan on 22/12/2016. description:
+ */
+@Controller
+@RequestMapping("{app}/event")
+public class EventController {
+
+    @Autowired
+    EventService eventService;
+    @Autowired
+    private VirtualEventService virtualService;
+
+    @RequestMapping(value = "find/param", method = RequestMethod.GET)
+    @ResponseBody
+    public ResultModel findAll(@PathVariable Long app, @RequestParam String names, @RequestParam(required = false) String params) throws JSONException {
+        return ResultModel.OK(eventService.listAllNew(app, names, params));
+    }
+
+    @RequestMapping(value = "find/value/one", method = RequestMethod.GET)
+    @ResponseBody
+    public ResultModel findOneValue(@PathVariable Long app, @RequestParam String eventname, @RequestParam String attrname) {
+        return ResultModel.OK(eventService.listAllValue(app, eventname, attrname));
+    }
+
+    @RequestMapping(value = "find/value/attr", method = RequestMethod.GET)
+    @ResponseBody
+    public ResultModel findOneValueByAttr(@PathVariable Long app, @RequestParam String attrName) {
+        return ResultModel.OK(eventService.listAllValueByAttr(app, attrName));
+        //return ResultModel.OK(eventService.listAllValueByAttrTop50(app, attrName));
+    }
+
+    @RequestMapping(value = "find/value/attrs", method = RequestMethod.GET)
+    @ResponseBody
+    public ResultModel findOneValueByAttrs(@PathVariable Long app, @RequestParam String attrNames) {
+        return ResultModel.OK(eventService.listAllValueByAttrs(app, attrNames));
+    }
+
+    @RequestMapping(value = "find/value", method = RequestMethod.GET)
+    @ResponseBody
+    public ResultModel findAllValue(@PathVariable Long app) {
+        return ResultModel.OK(eventService.listValues(app));
+    }
+
+	@RequestMapping(value = "find/allAttr", method = RequestMethod.GET)
+	@ResponseBody
+	public ResultModel findAllAttr( @PathVariable Long app) {
+		return ResultModel.OK(eventService.listAllAttr(app));
+	}
+
+    @RequestMapping(value = "find/group/properties", method = RequestMethod.GET)
+    @ResponseBody
+    public ResultModel findGroupAttributes(@PathVariable Long app) {
+        return ResultModel.OK(eventService.listAllAttributes(app));}
+
+    @RequestMapping(value = "find/common/properties", method = RequestMethod.GET)
+    @ResponseBody
+    public ResultModel findCommonProperties(@PathVariable Long app) {
+        //return ResultModel.OK(eventService.listCommonProperties(app, "event"));
+        return ResultModel.OK(eventService.listAllEventAttributesTop50(app, "event"));
+    }
+
+    @ResponseBody
+    @RequestMapping(value = "find", method = RequestMethod.GET)
+    public ResultModel findAllEvent(@PathVariable Long app) {
+        return ResultModel.OK(eventService.listAllEvent(app));
+    }
+
+    @ResponseBody
+    @RequestMapping(value = "find/callback", method = RequestMethod.GET)
+    public ResultModel findAllEventToCallback(@PathVariable Long app) {
+        return ResultModel.OK(eventService.listAllEventToCallback(app));
+    }
+
+
+    @ResponseBody
+    @RequestMapping(value = "findOne", method = RequestMethod.GET)
+    public ResultModel findOneEventAttr(@PathVariable Long app, @RequestParam String eventName) {
+        //eventService.listAllAttr(app);
+        return ResultModel.OK();
+    }
+
+    @ResponseBody
+    @RequestMapping(value = "find/virtual", method = RequestMethod.GET)
+    public ResultModel findAllEvent(@PathVariable Long app, @CurrentAccount Account account) {
+        List<Event4Web> event4Webs = eventService.listAllEvent(app);
+        List<VirtualEvent> eventList = virtualService.findEventList(app, account);
+        Event4Web event4Web = null;
+        for (VirtualEvent virtualEvent : eventList) {
+            if (virtualEvent.isEnable() || virtualEvent.getType().equals("active")) {
+                event4Web = new Event4Web();
+                event4Web.setEventNameAlias(virtualEvent.getCh_name());
+                event4Web.setEventName(virtualEvent.getName());
+                event4Web.setEventNumber(0);
+                event4Web.setStatus(true);
+                event4Web.setVirtual(true);
+
+                event4Webs.add(event4Web);
+            }
+
+        }
+        return ResultModel.OK(event4Webs);
+    }
+}
diff --git a/src/main/java/com/reyun/controller/EventStatsController.java b/src/main/java/com/reyun/controller/EventStatsController.java
new file mode 100644
index 0000000..0341029
--- /dev/null
+++ b/src/main/java/com/reyun/controller/EventStatsController.java
@@ -0,0 +1,73 @@
+package com.reyun.controller;
+
+import com.reyun.model.Account;
+import com.reyun.security.annotation.CurrentAccount;
+import com.reyun.service.ComplicateEventsService;
+import com.reyun.service.EventStatsService;
+import com.reyun.util.ResultModel;
+import com.reyun.util.ResultStatus;
+import com.reyun.util.StringUtil;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestMethod;
+import org.springframework.web.bind.annotation.ResponseBody;
+
+import javax.servlet.http.HttpServletRequest;
+
+/**
+ * Created by sunhao on 17/4/10.
+ *
+ */
+@Service
+@RequestMapping("eventstats")
+public class EventStatsController {
+
+
+    @Autowired
+    private ComplicateEventsService complicateEventsService;
+
+
+    @RequestMapping(value = "complicated/query/{appId}", method = RequestMethod.GET)
+    @ResponseBody
+    public ResultModel queryComplicatedEvent(HttpServletRequest httpServletRequest, @CurrentAccount Account account,
+                                       @PathVariable Long appId) {
+
+        String startDate = httpServletRequest.getParameter("startdate");
+        String endDate = httpServletRequest.getParameter("enddate");
+         String eventCondition = httpServletRequest.getParameter("eventCondition");
+        String viewFlag = httpServletRequest.getParameter("viewflag");
+
+        if (!StringUtil.isEmpty(eventCondition) && !StringUtil.isEmpty(startDate) && !StringUtil.isEmpty(endDate)) {
+
+            return ResultModel.OK(complicateEventsService.queryComplicatedEvent(appId, account.getId(), startDate, endDate,
+                    eventCondition, viewFlag));
+        } else {
+
+            return ResultModel.ERROR(ResultStatus.PARAM_INVALID);
+        }
+
+    }
+
+    @RequestMapping(value = "complicated/query/total/{appId}", method = RequestMethod.GET)
+    @ResponseBody
+    public ResultModel queryDistinctTotal(HttpServletRequest httpServletRequest, @CurrentAccount Account account,
+                                             @PathVariable Long appId) {
+
+        String startDate = httpServletRequest.getParameter("startdate");
+        String endDate = httpServletRequest.getParameter("enddate");
+        String eventCondition = httpServletRequest.getParameter("eventCondition");
+        String viewFlag = httpServletRequest.getParameter("viewflag");
+
+        if (!StringUtil.isEmpty(eventCondition) && !StringUtil.isEmpty(startDate) && !StringUtil.isEmpty(endDate)) {
+
+            return ResultModel.OK(complicateEventsService.queryDistinctTotalData(appId, account.getId(), startDate, endDate,
+                    eventCondition, viewFlag));
+        } else {
+
+            return ResultModel.ERROR(ResultStatus.PARAM_INVALID);
+        }
+
+    }
+}
diff --git a/src/main/java/com/reyun/controller/ExpressionController.java b/src/main/java/com/reyun/controller/ExpressionController.java
new file mode 100644
index 0000000..fccfd8b
--- /dev/null
+++ b/src/main/java/com/reyun/controller/ExpressionController.java
@@ -0,0 +1,90 @@
+package com.reyun.controller;
+
+import com.reyun.model.App;
+import com.reyun.model.ComplicatedParam;
+import com.reyun.model.EventAttr4Web;
+import com.reyun.service.AppService;
+import com.reyun.service.EventService;
+import com.reyun.service.ExpressionService;
+import com.reyun.util.ResultModel;
+import com.reyun.util.ResultStatus;
+import net.sf.json.JSONObject;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Controller;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestMethod;
+import org.springframework.web.bind.annotation.ResponseBody;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+@Controller
+@RequestMapping("expression")
+public class ExpressionController {
+
+    @Autowired
+    private ExpressionService expressionService;
+    @Autowired
+    private EventService eventService;
+    @Autowired
+    private AppService appService;
+
+    @ResponseBody
+    @RequestMapping(value = "transform", method = RequestMethod.POST)
+    public ResultModel transform(@RequestBody String param) {
+//        System.out.println(param);
+        JSONObject jsonObject = JSONObject.fromObject(param);
+        String expression = jsonObject.get("expression").toString();
+        String appKey = jsonObject.get("appkey").toString();
+        long appId = Long.parseLong(appKey);
+
+        App byId = this.appService.findById(appId);
+        appKey = byId.getAppkey();
+
+//        boolean isValidate = expressionService.validateOriginalExpression(expression, appKey);
+        String mid = expressionService.originalExpressionToMidExp(expression, appKey);
+        if (mid == null) {
+            return ResultModel.ERROR(ResultStatus.EXP_INVALID);
+        } else {
+            return ResultModel.OK(mid);
+        }
+    }
+
+    @ResponseBody
+    @RequestMapping(value = "properties/{event}/{appId}", method = RequestMethod.GET)
+    public ResultModel properties(@PathVariable String event, @PathVariable Long appId) {
+
+        List<EventAttr4Web> eventAttributeMetas = eventService.listAllEventAttribute(event, appId);
+        return ResultModel.OK(eventAttributeMetas);
+    }
+
+
+    @ResponseBody
+    @RequestMapping(value = "viewList", method = RequestMethod.GET)
+    public ResultModel operations() {
+
+        List<ComplicatedParam> allEventViewAttr = eventService.findAllComplicatedPatram();
+        List<ComplicatedParam> eventViewList = new ArrayList<>(allEventViewAttr.size());
+        List<ComplicatedParam> attrViewList = new ArrayList<>(allEventViewAttr.size());
+
+        for (ComplicatedParam complicatedParam : allEventViewAttr) {
+            switch (complicatedParam.getAttrLevel()) {
+                case 1:
+                    eventViewList.add(complicatedParam);
+                    continue;
+                case 2:
+                    attrViewList.add(complicatedParam);
+                    continue;
+            }
+        }
+        Map<String, Object> stringObjectMap = new HashMap<>(2);
+        stringObjectMap.put("eventViewList", eventViewList);
+        stringObjectMap.put("attrViewList", attrViewList);
+
+        return ResultModel.OK(stringObjectMap);
+    }
+}
diff --git a/src/main/java/com/reyun/controller/FunnelController.java b/src/main/java/com/reyun/controller/FunnelController.java
new file mode 100644
index 0000000..a76e8dd
--- /dev/null
+++ b/src/main/java/com/reyun/controller/FunnelController.java
@@ -0,0 +1,69 @@
+package com.reyun.controller;
+
+import java.util.List;
+import java.util.Map;
+
+import javax.servlet.http.HttpServletRequest;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Controller;
+import org.springframework.util.StringUtils;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestMethod;
+import org.springframework.web.bind.annotation.ResponseBody;
+
+import com.reyun.model.Account;
+import com.reyun.security.annotation.CurrentAccount;
+import com.reyun.service.FunnelService;
+import com.reyun.util.ResultModel;
+import com.reyun.util.ResultStatus;
+import com.reyun.util.StringUtil;
+
+@Controller
+@RequestMapping("/funnel")
+public class FunnelController {
+	protected Logger logger = LoggerFactory
+			.getLogger(FunnelController.class);
+
+	@Autowired
+	FunnelService funnelService;
+	
+	
+
+
+	@RequestMapping(value = "find/{app}", method = RequestMethod.GET)
+	@ResponseBody
+	public ResultModel list(HttpServletRequest request,
+			@CurrentAccount Account account, @PathVariable Long app) {
+		return ResultModel.OK(funnelService.findByApp(app));
+	}
+	
+	@RequestMapping(value = "report/{funnel}", method = RequestMethod.GET)
+	@ResponseBody
+	public ResultModel reportChart(HttpServletRequest request,
+			@PathVariable Long funnel, @CurrentAccount Account loginAccount) {
+		String startDate = request.getParameter("startdate");
+		String endDate = request.getParameter("enddate");
+		String usergroupStr = request.getParameter("usergroupid");
+		String dimentionStr = request.getParameter("dimention");
+		boolean isList = request.getParameter("datatype")==null?false:"list".equals(request.getParameter("datatype"))?true:false;
+		String isDeviceStr = request.getParameter("isdevice");
+		String eventType = request.getParameter("eventType");
+		boolean isProfile=false;
+		if(!StringUtils.isEmpty(eventType) && "profile".equals(eventType)){
+			isProfile=true;
+		}
+		boolean isDevice = StringUtil.isEmpty(isDeviceStr)?false:"true".equals(isDeviceStr)?true:false;
+		Map<String, List> result = funnelService.funnelReport(funnel, startDate, endDate, usergroupStr, isList, dimentionStr, loginAccount, isDevice,isProfile);
+		
+		if (result.isEmpty()) {
+			return ResultModel.ERROR(ResultStatus.NETWORK_ERROR);
+		} else {
+			return ResultModel.OK(result);
+		}
+	}
+
+}
diff --git a/src/main/java/com/reyun/controller/manage/ExportReportInfoController.java b/src/main/java/com/reyun/controller/manage/ExportReportInfoController.java
new file mode 100644
index 0000000..5a1d9f4
--- /dev/null
+++ b/src/main/java/com/reyun/controller/manage/ExportReportInfoController.java
@@ -0,0 +1,259 @@
+package com.reyun.controller.manage;
+
+import com.reyun.dic.DownloadStatusEnumType;
+import com.reyun.dic.FunctionEnumType;
+import com.reyun.dic.LogEnumType;
+import com.reyun.dic.OperateObjectEnumType;
+import com.reyun.exception.TipException;
+import com.reyun.model.Account;
+import com.reyun.model.App;
+import com.reyun.model.ExportReportInfo;
+import com.reyun.security.annotation.CurrentAccount;
+import com.reyun.service.AppService;
+import com.reyun.service.ExportReportInfoService;
+import com.reyun.service.UserLogService;
+import com.reyun.util.Constant;
+import com.reyun.util.ResultModel;
+import com.reyun.util.ResultStatus;
+import net.sf.json.JSONObject;
+import org.apache.commons.io.IOUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Controller;
+import org.springframework.util.StringUtils;
+import org.springframework.web.bind.annotation.*;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import java.io.File;
+import java.io.IOException;
+import java.io.InputStream;
+import java.net.MalformedURLException;
+import java.net.URL;
+import java.net.URLEncoder;
+import java.nio.charset.StandardCharsets;
+import java.text.SimpleDateFormat;
+import java.util.Date;
+import java.util.List;
+
+/**
+ * Created by zxy on 27/04/2017.
+ * description:
+ */
+@Controller
+@RequestMapping("/mng/export/report/{app}")
+public class ExportReportInfoController {
+    @Autowired
+    private AppService appService;
+    @Autowired
+    UserLogService userLogService;
+
+    @Autowired
+    ExportReportInfoService exportService;
+
+
+    @RequestMapping(value = "findall", method = RequestMethod.GET)
+    @ResponseBody
+    public ResultModel findAll(@CurrentAccount Account loginAccount, @PathVariable Long app) {
+        return ResultModel.OK(exportService.findByApp(loginAccount, app));
+    }
+
+    @RequestMapping(value = "/delete/{id}", method = RequestMethod.DELETE)
+    @ResponseBody
+    public ResultModel delete(@PathVariable Long id) {
+        exportService.delete(id);
+        return ResultModel.OK();
+    }
+
+    /**
+     * 漏斗、事件、自定义留存,有id的需要前端将id传过来,以保证文件名的唯一性.
+     */
+    @RequestMapping(value = "generatefile", method = RequestMethod.POST)
+    @ResponseBody
+    public ResultModel addExportTask(final HttpServletRequest request, @PathVariable("app") Long app, @RequestBody ExportReportInfo resource, @CurrentAccount Account loginAccount) {
+
+        App appEntity = appService.findById(app);
+        if (appEntity == null) {
+            throw new TipException("应用不存在");
+        }
+
+        if (!exportService.validFileName(resource)) {
+            return ResultModel.ERROR(ResultStatus.EXPORT_DATA_EXIST);
+        }
+
+        //根据不同的功能类型,存储不同的conditions.funnel,customretention,detailcustomretention,commonretention,event,normal
+        if (StringUtils.isEmpty(resource.getConditions())) {
+            throw new TipException("导出条件不能为空");
+        }
+        JSONObject conditions = JSONObject.fromObject(resource.getConditions());
+
+        String timestamp = String.valueOf(new Date().getTime());
+
+        //根据报表类型,生成不同的唯一标示的文件名
+        String midFileName = "";
+        if (resource.getFunctionType().equals(FunctionEnumType.REPORT.getKey())) {
+
+            midFileName = resource.getReportName() + "_" + timestamp + "_" + (!StringUtils.isEmpty(resource.getSubType()) ? resource.getSubType() : "");
+/*            List<Campaign> campaignList = campaignRepository.findAll(app);
+
+            StringBuffer sb = new StringBuffer();
+            for(Campaign campaign:campaignList){
+                String campaignid = campaign.getCampaignid()+",";
+                sb.append(campaignid);
+            }
+            String campaignidStr = sb.append("_default_").toString();
+            conditions.put("campaignid",campaignidStr);*/
+
+        } else if (resource.getFunctionType().equals(FunctionEnumType.FUNNEL.getKey())) {
+
+            midFileName = FunctionEnumType.FUNNEL.getKey() + "_" + timestamp + "_" + (null == resource.getFunctionId() ? String.valueOf(new Date().getTime()) : resource.getFunctionId());
+
+        } else if (resource.getFunctionType().equals(FunctionEnumType.EVENTSTATS.getKey())) {
+
+            midFileName = FunctionEnumType.EVENTSTATS.getKey() + "_" + timestamp + "_" + (null == resource.getFunctionId() ? String.valueOf(new Date().getTime()) : resource.getFunctionId());
+
+        } else if (resource.getFunctionType().equals(FunctionEnumType.COMPLICATED_EVENTS.getKey())) {
+
+            midFileName = FunctionEnumType.COMPLICATED_EVENTS.getKey() + "_" + timestamp + "_" + (null == resource.getFunctionId() ? String.valueOf(new Date().getTime()) : resource.getFunctionId());
+
+        } else if (resource.getFunctionType().equals(FunctionEnumType.CUSTOMRETENTION.getKey())) {
+
+            midFileName = FunctionEnumType.CUSTOMRETENTION.getKey() + "_" + timestamp + "_" + (null == resource.getFunctionId() ? String.valueOf(new Date().getTime()) : resource.getFunctionId());
+
+        } else if (resource.getFunctionType().equals(FunctionEnumType.DETAILCUSTOMRETENTION.getKey())) {
+
+            midFileName = FunctionEnumType.DETAILCUSTOMRETENTION.getKey() + "_" + timestamp + "_" + (null == resource.getFunctionId() ? String.valueOf(new Date().getTime()) : resource.getFunctionId());
+
+        } else if (resource.getFunctionType().equals(FunctionEnumType.COMMONRETENTION.getKey())) {
+
+            midFileName = resource.getReportName();
+
+            //是否按设备
+            if (conditions.containsKey("isdevice") && conditions.getBoolean("isdevice")) {
+                midFileName = "device_" + midFileName + "_" + timestamp;
+            }
+
+            //是否是详情
+            if (conditions.containsKey("isdetail") && conditions.getBoolean("isdetail")) {
+                midFileName = midFileName + "detail_" + timestamp;
+            }
+        }
+
+        //注收比日期参数特殊处理
+        String startDate = conditions.containsKey("startdate") ? conditions.getString("startdate") : conditions.getString("install_startdate");
+        String endDate = conditions.containsKey("enddate") ? conditions.getString("enddate") : conditions.getString("install_enddate");
+
+        String fileName = appEntity.getAppkey() + "_" + midFileName + "_" + startDate + "_" + endDate + ".csv";
+
+        resource.setApp(app);
+        resource.setFileName(fileName);
+        resource.setAccount(loginAccount.getId());
+        resource.setAccountName(loginAccount.getName());
+        Date date = new Date();
+        resource.setCreateTime(date);
+        resource.setModifyTime(date);
+        resource.setStatus(DownloadStatusEnumType.INIT.getCode());
+        resource.setReportType(conditions.getString("datatype"));
+        resource.setStartDate(startDate);
+        resource.setEndDate(endDate);
+        resource.setConditions(JSONObject.fromObject(conditions).toString());
+
+        return ResultModel.OK(exportService.save(resource));
+
+    }
+
+    @RequestMapping(value = "refresh/{id}", method = RequestMethod.PUT)
+    @ResponseBody
+    public ResultModel refreshDownload(@PathVariable("app") Long app, @PathVariable Long id, @CurrentAccount Account loginAccount) throws IOException {
+        ExportReportInfo info = exportService.findOne(id);
+        if (info == null)
+            throw new TipException("下载记录不存在");
+
+        return ResultModel.OK(exportService.updateStatus(id, DownloadStatusEnumType.INIT.getCode(), loginAccount.getId()));
+    }
+
+    @RequestMapping(value = "download/{id}", method = RequestMethod.GET)
+    public void getDownloadResponseEntity(HttpServletRequest request, HttpServletResponse response, @PathVariable("app") Long app, @PathVariable Long id,
+                                          @CurrentAccount Account loginAccount) throws IOException {
+
+        /*ExportReportInfo info = exportService.findOne(id);
+
+        userLogService.insertLog(loginAccount, LogEnumType.DOWNLOAD.getCode(),
+                LogEnumType.DOWNLOAD.getName() + "报表下载 ", info,app, OperateObjectEnumType.REPORTDOWN.getCode(), request);
+
+        if (info == null) {
+            //无文件时候 返回204
+            response.setStatus(HttpServletResponse.SC_NO_CONTENT);
+            return;
+        }
+
+        App appEntity = this.appService.findById(app);
+
+        String downloadIP = request.getHeader("x-forwarded-for") == null ? request.getRemoteAddr() : request.getHeader("x-forwarded-for");
+        String filename = appEntity.getName() + "_" + info.getName() + "_" + info.getStartDate() + "_" + info.getEndDate()
+                + "_" + new SimpleDateFormat("yyyyMMddHHmmss").format(info.getCreateTime()) + ".csv";
+
+        //为了解决中文名称乱码问题
+        filename = new String(filename.getBytes("UTF-8"));
+        filename = URLEncoder.encode(filename, "UTF-8");
+        //设置结果集的中文
+        response.setCharacterEncoding("GB18030");
+        response.setHeader("filename", filename);
+        response.setHeader("content-disposition", "attachment; filename=" + filename);
+        response.setHeader("Content-Type", "text/csv");
+
+        InputStream in = null;
+        String content = "";
+
+        try {
+
+            URL url = new URL(Constant.S3_ROOTDIR + "/reportdownload/" + URLEncoder.encode(info.getFileName(), StandardCharsets.UTF_8.toString()));
+            in = url.openStream();
+            content = IOUtils.toString(in);
+
+            if (content.contains("\t")) {
+                content = content.replace("\t", ",");
+            }
+
+            response.getWriter().write(content);
+
+        } catch (IOException e) {
+            //无文件时候 返回204
+            e.printStackTrace();
+            response.setStatus(HttpServletResponse.SC_NO_CONTENT);
+            return;
+
+        } finally {
+            IOUtils.closeQuietly(in);
+        }
+
+        //更新下载人和IP
+        exportService.updateDownloadInfo(info.getId(), loginAccount, downloadIP);*/
+    }
+
+    @RequestMapping(value = "checkexist/{id}", method = RequestMethod.GET)
+    @ResponseBody
+    public ResultModel checkFileExist(@PathVariable("app") Long app, @PathVariable Long id, @CurrentAccount Account loginAccount) throws MalformedURLException {
+
+        /*ExportReportInfo info = exportService.findOne(id);
+        if (info == null) {
+            throw new TipException("下载记录不存在");
+        }
+
+        URL url = new URL(Constant.S3_ROOTDIR + File.separator + "reportdownload" + File.separator + URLEncoder.encode(info.getFileName()));
+        InputStream in = null;
+
+        try {
+            in = url.openStream();
+        } catch (IOException e) {
+            return ResultModel.OK(false);
+        } finally {
+            if (in != null) {
+                IOUtils.closeQuietly(in);
+            }
+        }*/
+        return ResultModel.OK(true);
+    }
+
+}
+
+
diff --git a/src/main/java/com/reyun/dic/AppPlatformEnum.java b/src/main/java/com/reyun/dic/AppPlatformEnum.java
new file mode 100644
index 0000000..771f2e9
--- /dev/null
+++ b/src/main/java/com/reyun/dic/AppPlatformEnum.java
@@ -0,0 +1,29 @@
+package com.reyun.dic;
+
+/**
+ * Created by sunhao on 17/8/1.
+ * desc:app平台类型
+ */
+public enum AppPlatformEnum {
+
+    ANDROID("Android","安卓"),
+    IOS("iOS","iOS"),
+    H5("H5","h5");
+
+    private String key;
+    private String value;
+
+    AppPlatformEnum(String key, String value) {
+        this.key = key;
+        this.value = value;
+    }
+
+    public String getKey() {
+        return key;
+    }
+
+    public String getValue() {
+        return value;
+    }
+
+}
diff --git a/src/main/java/com/reyun/dic/ChannelCategoryEnumType.java b/src/main/java/com/reyun/dic/ChannelCategoryEnumType.java
new file mode 100644
index 0000000..ed1e05b
--- /dev/null
+++ b/src/main/java/com/reyun/dic/ChannelCategoryEnumType.java
@@ -0,0 +1,27 @@
+package com.reyun.dic;
+
+/**
+ * Created by nolan on 21/02/2017.
+ * description:
+ */
+public enum ChannelCategoryEnumType {
+	ADVERTISING("ADVERTISING", ""),
+	APPMARKET("APPMARKET", "分包");
+
+	private String key;
+	private String value;
+
+	ChannelCategoryEnumType(String key, String value) {
+		this.key = key;
+		this.value = value;
+	}
+
+	public String getKey() {
+		return key;
+	}
+
+	public String getValue() {
+		return value;
+	}
+
+}
diff --git a/src/main/java/com/reyun/dic/ChannelEnumType.java b/src/main/java/com/reyun/dic/ChannelEnumType.java
new file mode 100644
index 0000000..ca2aa14
--- /dev/null
+++ b/src/main/java/com/reyun/dic/ChannelEnumType.java
@@ -0,0 +1,39 @@
+package com.reyun.dic;
+
+import com.reyun.exception.TipException;
+
+/**
+ * description:
+ *
+ * @author nolan
+ * @date 18/10/2017
+ */
+public enum ChannelEnumType
+{
+    GDT("gdt"),
+    SM("smsearch"),
+    ADWORDS("adwords");
+
+    private String uniqueName;
+
+    ChannelEnumType(String uniqueName)
+    {
+        this.uniqueName = uniqueName;
+    }
+
+    public static ChannelEnumType getEnumType(String abbr)
+    {
+        for (ChannelEnumType channelEnumType : ChannelEnumType.values()) {
+            if (channelEnumType.getUniqueName().equals(abbr)) {
+                return channelEnumType;
+            }
+        }
+
+        throw new TipException("[" + abbr + "]渠道枚举暂未定义");
+    }
+
+    public String getUniqueName()
+    {
+        return uniqueName;
+    }
+}
diff --git a/src/main/java/com/reyun/dic/ConfigEnumType.java b/src/main/java/com/reyun/dic/ConfigEnumType.java
new file mode 100644
index 0000000..9a236be
--- /dev/null
+++ b/src/main/java/com/reyun/dic/ConfigEnumType.java
@@ -0,0 +1,44 @@
+package com.reyun.dic;
+
+/**
+ * Created by sunhao on 17/3/6.
+ * 配置表KEY字段字典
+ */
+public enum ConfigEnumType {
+
+    MASTER_PWD_PREFIX("master_pwd_prefix","万能密码前缀"),
+    SM_CLIENT_ID("client_id","神马应用ID"),
+    SM_CLIENT_SECRET("client_secret","神马应用密匙"),
+    SM_REDIRECT_URI("redirect_uri","神马重定向"),
+    DOWNLOAD_FILE_PATH("download_file_path","下载文件地址"),
+    SERVER_REGED_DOWNLOAD_URL("reged_download_url", "注册"),
+    SERVER_INSTALL_DOWNLOAD_URL("install_download_url", "激活"),
+    SERVER_CLICK_DOWNLOAD_URL("click_download_url", "点击"),
+    SERVER_BLACKLIST_DOWNLOAD_URL("blacklist_download_url", "黑名单"),
+    OPENAPI_TOKEN("OPENAPI_TOKEN", "对外开放接口TOKEN");
+
+
+    private String key;
+    private String value;
+
+    ConfigEnumType(String key, String value) {
+        this.key = key;
+        this.value = value;
+    }
+
+    public String getKey() {
+        return key;
+    }
+
+    public void setKey(String key) {
+        this.key = key;
+    }
+
+    public String getValue() {
+        return value;
+    }
+
+    public void setValue(String value) {
+        this.value = value;
+    }
+}
diff --git a/src/main/java/com/reyun/dic/CustomMenuType.java b/src/main/java/com/reyun/dic/CustomMenuType.java
new file mode 100644
index 0000000..8e12130
--- /dev/null
+++ b/src/main/java/com/reyun/dic/CustomMenuType.java
@@ -0,0 +1,36 @@
+package com.reyun.dic;
+
+/**
+ * Created by sunhao on 17/4/24.
+ * desc:看单表单类型,事件分析,漏斗,留存
+ */
+public enum CustomMenuType {
+
+    EVENT_STATS("eventstats","事件分析"),
+    FUNNEL("funnel","漏斗"),
+    RETENTION("retention","留存");
+
+    private String key;
+    private String value;
+
+    CustomMenuType(String key, String value) {
+        this.key = key;
+        this.value = value;
+    }
+
+    public String getKey() {
+        return key;
+    }
+
+    public void setKey(String key) {
+        this.key = key;
+    }
+
+    public String getValue() {
+        return value;
+    }
+
+    public void setValue(String value) {
+        this.value = value;
+    }
+}
diff --git a/src/main/java/com/reyun/dic/DataViewEnumType.java b/src/main/java/com/reyun/dic/DataViewEnumType.java
new file mode 100644
index 0000000..6f67ae2
--- /dev/null
+++ b/src/main/java/com/reyun/dic/DataViewEnumType.java
@@ -0,0 +1,41 @@
+package com.reyun.dic;
+
+/**
+ * Created by nolan on 29/12/2016.
+ * description:
+ */
+public enum DataViewEnumType {
+    DATE("date", "日期"),
+    CAMPAIGN("campaign", "活动"),
+    CAMPAIGN_DATE("campaigndate", "活动和日期"),
+    CAMPAIGNGROUP("campgroup", "活动组"),
+    CHANNEL("channel", "渠道"),
+    SUBCHANNEL("subchannel", "子渠道"),
+    BDKEYWORD("bdkeyword", "百度关键词"),
+    SUBACCOUNT("subaccount","子账户"),
+    CAMPAIGN_H5("campaign_h5","H5监测活动");
+
+    private String code;
+    private String name;
+
+    DataViewEnumType(String code, String name) {
+        this.code = code;
+        this.name = name;
+    }
+
+    public String getCode() {
+        return code;
+    }
+
+    public void setCode(String code) {
+        this.code = code;
+    }
+
+    public String getName() {
+        return name;
+    }
+
+    public void setName(String name) {
+        this.name = name;
+    }
+}
diff --git a/src/main/java/com/reyun/dic/DivEnumType.java b/src/main/java/com/reyun/dic/DivEnumType.java
new file mode 100644
index 0000000..90b9768
--- /dev/null
+++ b/src/main/java/com/reyun/dic/DivEnumType.java
@@ -0,0 +1,31 @@
+package com.reyun.dic;
+
+/**
+ * Created by nolan on 04/01/2017.
+ * description:
+ */
+public enum DivEnumType {
+    ALL("all", "所有"),
+    CAMPAIGN("campaign", "推广活动"),
+    CAMPAIGN_GROUP("campgroup", "推广活动组"),
+    CHANNEL("channel", "渠道"),
+    BACKFLOW("backflow", "回流"),
+    USERGROUP("usergroup", "用户组");
+
+    String code;
+    String name;
+
+    DivEnumType(String code, String name) {
+        this.code = code;
+        this.name = name;
+    }
+
+    public String getCode() {
+        return code;
+    }
+
+
+    public String getName() {
+        return name;
+    }
+}
diff --git a/src/main/java/com/reyun/dic/DownloadEnumType.java b/src/main/java/com/reyun/dic/DownloadEnumType.java
new file mode 100644
index 0000000..880a33d
--- /dev/null
+++ b/src/main/java/com/reyun/dic/DownloadEnumType.java
@@ -0,0 +1,29 @@
+package com.reyun.dic;
+
+/**
+ * Created by nolan on 04/01/2017.
+ * description:
+ */
+public enum DownloadEnumType {
+    INSTALL("install", "激活"),
+    REGED("reged", "注册"),
+    PAY("pay", "付费"),
+    BACKFLOW("backflow", "回流"),
+    USERGROUP("usergroup", "用户群");
+
+    String code;
+    String name;
+
+    DownloadEnumType(String code, String name) {
+        this.code = code;
+        this.name = name;
+    }
+
+    public String getCode() {
+        return code;
+    }
+
+    public String getName() {
+        return name;
+    }
+}
diff --git a/src/main/java/com/reyun/dic/DownloadStatusEnumType.java b/src/main/java/com/reyun/dic/DownloadStatusEnumType.java
new file mode 100644
index 0000000..03da731
--- /dev/null
+++ b/src/main/java/com/reyun/dic/DownloadStatusEnumType.java
@@ -0,0 +1,29 @@
+package com.reyun.dic;
+
+/**
+ * Created by nolan on 04/01/2017.
+ * description:
+ */
+public enum DownloadStatusEnumType {
+    INIT("init", "等待下载"),
+    DOWNLOADING("downloading", "正在下载"),
+    COMPLETE("complete", "下载完成"),
+    FAILED("failed", "下载失败"),
+    INVALID("invalid","文件失效");
+
+    String code;
+    String name;
+
+    DownloadStatusEnumType(String code, String name) {
+        this.code = code;
+        this.name = name;
+    }
+
+    public String getCode() {
+        return code;
+    }
+
+    public String getName() {
+        return name;
+    }
+}
diff --git a/src/main/java/com/reyun/dic/FunctionEnumType.java b/src/main/java/com/reyun/dic/FunctionEnumType.java
new file mode 100644
index 0000000..6528959
--- /dev/null
+++ b/src/main/java/com/reyun/dic/FunctionEnumType.java
@@ -0,0 +1,40 @@
+package com.reyun.dic;
+
+/**
+ * Created by zxy on 17/4/27.
+ * 报表结果导出时候,需要根据不同功能进行不同的处理.枚举功能类型.
+ */
+public enum FunctionEnumType {
+
+    FUNNEL("funnel","漏斗"),
+    CUSTOMRETENTION("customretention","自定义留存"),
+    DETAILCUSTOMRETENTION("detailcustomretention","自定义留存明细"),
+    COMMONRETENTION("commonretention","固定留存"),
+    EVENTSTATS("eventstats", "事件"),
+    COMPLICATED_EVENTS("complicatedevents", "复杂事件"),
+    REPORT("normal", "普通");
+
+    private String key;
+    private String value;
+
+    FunctionEnumType(String key, String value) {
+        this.key = key;
+        this.value = value;
+    }
+
+    public String getKey() {
+        return key;
+    }
+
+    public void setKey(String key) {
+        this.key = key;
+    }
+
+    public String getValue() {
+        return value;
+    }
+
+    public void setValue(String value) {
+        this.value = value;
+    }
+}
diff --git a/src/main/java/com/reyun/exception/GlobalExceptionAdvice.java b/src/main/java/com/reyun/exception/GlobalExceptionAdvice.java
new file mode 100644
index 0000000..7a0108f
--- /dev/null
+++ b/src/main/java/com/reyun/exception/GlobalExceptionAdvice.java
@@ -0,0 +1,47 @@
+package com.reyun.exception;
+
+import com.reyun.util.ResultModel;
+import com.reyun.util.ResultStatus;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.http.HttpStatus;
+import org.springframework.http.ResponseEntity;
+import org.springframework.web.bind.annotation.ControllerAdvice;
+import org.springframework.web.bind.annotation.ExceptionHandler;
+
+/**
+ * Created by nolan on 18/11/2016.
+ * description:
+ */
+@ControllerAdvice
+public class GlobalExceptionAdvice {
+    private Logger logger = LoggerFactory.getLogger(GlobalExceptionAdvice.class);
+
+    @ExceptionHandler(TransferCurrentAccountException.class)
+    public ResponseEntity<ResultModel> handleTransferCurrentAccountException(TransferCurrentAccountException ex) {
+        logger.error("handleTransferCurrentAccountException......", ex);
+//        ex.printStackTrace();
+        return new ResponseEntity<ResultModel>(ResultModel.ERROR(ResultStatus.USERNAME_LOGIN_EXPIRE), HttpStatus.OK);
+    }
+
+    @ExceptionHandler(TipException.class)
+    public ResponseEntity<ResultModel> handleTipException(TipException ex) {
+        logger.error("handleTipException......", ex);
+        ex.printStackTrace();
+        return new ResponseEntity<ResultModel>(new ResultModel(-999, ex.getMessage()), HttpStatus.OK);
+    }
+
+    @ExceptionHandler(RuntimeException.class)
+    public ResponseEntity<ResultModel> handleRuntimeException(RuntimeException ex) {
+        logger.error("handleRuntimeException......", ex);
+        ex.printStackTrace();
+        return new ResponseEntity<ResultModel>(new ResultModel(-999, ex.getMessage()), HttpStatus.EXPECTATION_FAILED);
+    }
+
+    @ExceptionHandler(Exception.class)
+    public ResponseEntity<ResultModel> handleAllException(Exception ex) {
+        logger.error("handleAllException......", ex);
+        ex.printStackTrace();
+        return new ResponseEntity<ResultModel>(new ResultModel(-999, ex.getMessage()), HttpStatus.EXPECTATION_FAILED);
+    }
+}
diff --git a/src/main/java/com/reyun/model/Account.java b/src/main/java/com/reyun/model/Account.java
new file mode 100644
index 0000000..e66b822
--- /dev/null
+++ b/src/main/java/com/reyun/model/Account.java
@@ -0,0 +1,558 @@
+package com.reyun.model;
+
+import javax.persistence.*;
+import java.util.Date;
+import java.util.List;
+
+@Entity
+public class Account {
+
+	private Long id;
+	private String email;
+	private String password;
+	private String company;
+	private String name;
+	private String phone;
+	private String qq;
+	private String wechat;
+	private boolean isSuperUser;
+	private Long parent = 0L;
+    private Long rootParent;
+	private String isSpecialAccount;
+	//母账号:-1表示未审核,0表示禁用,1表示已审核;子账号:0表示禁用,1表示启用;总之:1表示用户可用状态;补充:-3表示未激活 -2 表示未开通
+	private int status;
+	private String pastDate;
+	private Date createTime = new Date();
+	//审核通过的时间
+	private Date pubDate;
+	private Long createAccount;
+	private Date modifyTime = new Date();
+	private Long modifyAccount;
+	private Boolean delFlag;
+	private Boolean isChannelPerson;
+	private String channelAccount;
+    //角色ID,对应role_auth表的ID。
+    private Long roleCategory;
+    private Long pricelevel;
+    private Long bussinessman;
+    private Long activeTime;
+    private Long forgetPwdTime;
+    //默认状态为空 false 忘记密码邮件发送后赋值; true 修改完密码之后赋值,表示完成修改密码操作,整个忘记密码流程结束
+    private Boolean forgetPwdStatus;
+	//默认状态为空 false 激活邮件发送后赋值; true 激活操作之后赋值,表示完成激活操作,整个激活流程结束,防止重复提交url
+	private Boolean activeStatus;
+	private int appSize;
+    private String remark;
+    //默认为空 false 非全渠道设置参数   true全渠道设置参数
+    private Boolean allChannelValidMatch;
+	private Boolean allChannelFakeMatch;
+	private Boolean allChannelBlackMatch;
+
+    //Transient
+    private String modifyAccountName;
+    private String createAccountName;
+    private String roleName;
+    private Long parentRole;
+    private String authStr;
+    private boolean isMasterLogin;
+    private List<UserLog> userLogList;
+    private List<Auth> authList;
+    private Boolean valid;
+    private String regIpAddr;
+    private String regIpLocation;
+	private Boolean verifyEmail = false;
+    private Boolean allowBehavior;
+    private Boolean isFlowRestrict;
+	private String modifyPricelevelTime;
+	private Boolean newContract;
+
+	public Boolean getFlowRestrict() {
+		return isFlowRestrict;
+	}
+
+	public void setFlowRestrict(Boolean flowRestrict) {
+		isFlowRestrict = flowRestrict;
+	}
+
+	public Boolean getAllowBehavior() {
+		return allowBehavior;
+	}
+
+	public void setAllowBehavior(Boolean allowBehavior) {
+		this.allowBehavior = allowBehavior;
+	}
+
+	public Account() {
+		super();
+	}
+
+	public Account(Long id, String email, String password, String company,
+			String name, String phone, String qq, boolean isSuperUser,
+			Long parent, String isSpecialAccount, int status, String pastDate,
+			Date createTime, Long createAccount, Date modifyTime,
+			Long modifyAccount, boolean delFlag) {
+		super();
+		this.id = id;
+		this.email = email;
+		this.password = password;
+		this.company = company;
+		this.name = name;
+		this.phone = phone;
+		this.qq = qq;
+		this.isSuperUser = isSuperUser;
+		this.parent = parent;
+		this.isSpecialAccount = isSpecialAccount;
+		this.status = status;
+		this.pastDate = pastDate;
+		this.createTime = createTime;
+		this.createAccount = createAccount;
+		this.modifyTime = modifyTime;
+		this.modifyAccount = modifyAccount;
+		this.delFlag = delFlag;
+	}
+
+	@Id
+	@GeneratedValue
+	public Long getId() {
+		return id;
+	}
+
+	public boolean getIsSuperUser() {
+		return isSuperUser;
+	}
+
+	public String getName() {
+		return name;
+	}
+
+	public String getPassword() {
+		return password;
+	}
+
+	public String getPhone() {
+		return phone;
+	}
+
+	public String getQq() {
+		return qq;
+	}
+
+	public Date getCreateTime() {
+		return createTime;
+	}
+
+	public void setCompany(String company) {
+		this.company = company;
+	}
+
+	public void setEmail(String email) {
+		this.email = email;
+	}
+
+    public String getCompany() {
+        return company;
+    }
+
+    public String getEmail() {
+        return email;
+    }
+
+	public void setId(Long id) {
+		this.id = id;
+	}
+
+	public void setIsSuperUser(boolean isSuperUser) {
+		this.isSuperUser = isSuperUser;
+	}
+
+	public void setName(String name) {
+		this.name = name;
+	}
+
+	public void setPassword(String password) {
+		this.password = password;
+	}
+
+	public void setPhone(String phone) {
+		this.phone = phone;
+	}
+
+	public void setQq(String qq) {
+		this.qq = qq;
+	}
+
+	public void setSuperUser(boolean isSuperUser) {
+		this.isSuperUser = isSuperUser;
+	}
+
+	public Long getParent() {
+		return parent;
+	}
+
+	public void setParent(Long parent) {
+		this.parent = parent;
+	}
+
+    public Long getRootParent() {
+        return rootParent;
+    }
+
+    public void setRootParent(Long rootParent) {
+        this.rootParent = rootParent;
+    }
+
+    public String getIsSpecialAccount() {
+		return isSpecialAccount;
+	}
+
+	public void setIsSpecialAccount(String isSpecialAccount) {
+		this.isSpecialAccount = isSpecialAccount;
+	}
+
+	public int getStatus() {
+		return status;
+	}
+
+	public void setStatus(int status) {
+		this.status = status;
+	}
+
+	public String getPastDate() {
+		return pastDate;
+	}
+
+	public void setPastDate(String pastDate) {
+		this.pastDate = pastDate;
+	}
+
+	public void setCreateTime(Date createTime) {
+		this.createTime = createTime;
+	}
+
+	public Long getCreateAccount() {
+		return createAccount;
+	}
+
+	public void setCreateAccount(Long createAccount) {
+		this.createAccount = createAccount;
+	}
+
+	public Long getModifyAccount() {
+		return modifyAccount;
+	}
+
+	public void setModifyAccount(Long modifyAccount) {
+		this.modifyAccount = modifyAccount;
+	}
+
+	public Date getModifyTime() {
+		return modifyTime;
+	}
+
+	public void setModifyTime(Date modifyTime) {
+		this.modifyTime = modifyTime;
+	}
+
+	public Boolean getDelFlag() {
+		return delFlag;
+	}
+
+	public void setDelFlag(Boolean delFlag) {
+		this.delFlag = delFlag;
+	}
+
+	public Boolean getIsChannelPerson() {
+		return isChannelPerson;
+	}
+
+	public void setIsChannelPerson(Boolean isChannelPerson) {
+		this.isChannelPerson = isChannelPerson;
+	}
+
+	public String getChannelAccount() {
+		return channelAccount;
+	}
+
+	public void setChannelAccount(String channelAccount) {
+		this.channelAccount = channelAccount;
+	}
+
+    public String getWechat() {
+		return wechat;
+	}
+
+	public void setWechat(String wechat) {
+		this.wechat = wechat;
+	}
+
+	public Long getPricelevel() {
+		return pricelevel;
+	}
+
+	public void setPricelevel(Long pricelevel) {
+		this.pricelevel = pricelevel;
+	}
+
+	public Long getBussinessman() {
+		return bussinessman;
+	}
+
+	public void setBussinessman(Long bussinessman) {
+		this.bussinessman = bussinessman;
+	}
+
+	public Date getPubDate() {
+		return pubDate;
+	}
+
+	public void setPubDate(Date pubDate) {
+		this.pubDate = pubDate;
+	}
+
+	public Long getActiveTime() {
+		return activeTime;
+	}
+
+	public void setActiveTime(Long activeTime) {
+		this.activeTime = activeTime;
+	}
+
+	public Long getForgetPwdTime() {
+		return forgetPwdTime;
+	}
+
+	public void setForgetPwdTime(Long forgetPwdTime) {
+		this.forgetPwdTime = forgetPwdTime;
+	}
+
+	public Boolean getForgetPwdStatus() {
+		return forgetPwdStatus;
+	}
+
+	public void setForgetPwdStatus(Boolean forgetPwdStatus) {
+		this.forgetPwdStatus = forgetPwdStatus;
+	}
+
+	public Boolean getActiveStatus() {
+		return activeStatus;
+	}
+
+	public void setActiveStatus(Boolean activeStatus) {
+		this.activeStatus = activeStatus;
+	}
+
+    public Long getRoleCategory() {
+        return roleCategory;
+    }
+
+    public void setRoleCategory(Long roleCategory) {
+        this.roleCategory = roleCategory;
+    }
+
+    public String getRemark() {
+        return remark;
+    }
+
+    public void setRemark(String remark) {
+        this.remark = remark;
+    }
+
+	public String getModifyPricelevelTime() {
+		return modifyPricelevelTime;
+	}
+
+	public void setModifyPricelevelTime(String modifyPricelevelTime) {
+		this.modifyPricelevelTime = modifyPricelevelTime;
+	}
+
+	public Boolean getNewContract() {
+		return newContract;
+	}
+
+	public void setNewContract(Boolean newContract) {
+		this.newContract = newContract;
+	}
+
+	@Transient
+    public String getRoleName() {
+        return roleName;
+    }
+
+    public void setRoleName(String roleName) {
+        this.roleName = roleName;
+    }
+
+    @Transient
+    public Long getParentRole() {
+        return parentRole;
+    }
+
+    public void setParentRole(Long parentRole) {
+        this.parentRole = parentRole;
+    }
+
+    @Transient
+    public String getAuthStr() {
+        return authStr;
+    }
+
+    public void setAuthStr(String authStr) {
+        this.authStr = authStr;
+    }
+
+    @Transient
+    public List<UserLog> getUserLogList() {
+        return userLogList;
+    }
+
+    public void setUserLogList(List<UserLog> userLogList) {
+        this.userLogList = userLogList;
+    }
+
+    @Transient
+    public boolean getIsMasterLogin() {
+        return isMasterLogin;
+    }
+
+    public void setIsMasterLogin(boolean isMasterLogin) {
+        this.isMasterLogin = isMasterLogin;
+    }
+
+    @Transient
+    public List<Auth> getAuthList() {
+        return authList;
+    }
+
+    public void setAuthList(List<Auth> authList) {
+        this.authList = authList;
+    }
+
+    @Transient
+    public String getCreateAccountName() {
+        return createAccountName;
+    }
+
+    public void setCreateAccountName(String createAccountName) {
+        this.createAccountName = createAccountName;
+    }
+
+    @Transient
+    public String getModifyAccountName() {
+        return modifyAccountName;
+    }
+
+    public void setModifyAccountName(String modifyAccountName) {
+        this.modifyAccountName = modifyAccountName;
+    }
+
+    @Transient
+    public Boolean getValid() {
+        return valid;
+    }
+
+    public void setValid(Boolean valid) {
+        this.valid = valid;
+    }
+
+    @Transient
+    public int getAppSize()
+    {
+        return appSize;
+    }
+
+    public void setAppSize(int appSize)
+    {
+        this.appSize = appSize;
+    }
+
+	public Boolean getAllChannelValidMatch() {
+		return allChannelValidMatch;
+	}
+
+	public void setAllChannelValidMatch(Boolean allChannelValidMatch) {
+		this.allChannelValidMatch = allChannelValidMatch;
+	}
+
+	public Boolean getAllChannelFakeMatch() {
+		return allChannelFakeMatch;
+	}
+
+	public void setAllChannelFakeMatch(Boolean allChannelFakeMatch) {
+		this.allChannelFakeMatch = allChannelFakeMatch;
+	}
+
+	public Boolean getAllChannelBlackMatch() {
+		return allChannelBlackMatch;
+	}
+
+	public void setAllChannelBlackMatch(Boolean allChannelBlackMatch) {
+		this.allChannelBlackMatch = allChannelBlackMatch;
+	}
+
+    public String getRegIpAddr()
+    {
+        return regIpAddr;
+    }
+
+    public void setRegIpAddr(String regIpAddr)
+    {
+        this.regIpAddr = regIpAddr;
+    }
+
+    public String getRegIpLocation()
+    {
+        return regIpLocation;
+    }
+
+    public void setRegIpLocation(String regIpLocation)
+    {
+        this.regIpLocation = regIpLocation;
+    }
+
+    public Boolean getVerifyEmail()
+    {
+        return verifyEmail;
+    }
+
+    public void setVerifyEmail(Boolean verifyEmail)
+    {
+        this.verifyEmail = verifyEmail;
+    }
+
+	@Override
+	public String toString() {
+		return "Account{" +
+				"id=" + id +
+				", email='" + email + '\'' +
+				", password='" + password + '\'' +
+				", company='" + company + '\'' +
+				", name='" + name + '\'' +
+				", phone='" + phone + '\'' +
+				", qq='" + qq + '\'' +
+				", wechat='" + wechat + '\'' +
+				", isSuperUser=" + isSuperUser +
+				", parent=" + parent +
+				", isSpecialAccount='" + isSpecialAccount + '\'' +
+				", status=" + status +
+				", pastDate='" + pastDate + '\'' +
+				", createTime=" + createTime +
+				", pubDate=" + pubDate +
+				", createAccount=" + createAccount +
+				", modifyTime=" + modifyTime +
+				", modifyAccount=" + modifyAccount +
+				", delFlag=" + delFlag +
+				", roleCategory=" + roleCategory +
+				", authStr='" + authStr + '\'' +
+				", isChannelPerson=" + isChannelPerson +
+				", channelAccount='" + channelAccount + '\'' +
+				", userLogList=" + userLogList +
+				", isMasterLogin=" + isMasterLogin +
+				", pricelevel=" + pricelevel +
+				", bussinessman=" + bussinessman +
+				", activeTime=" + activeTime +
+				", forgetPwdTime=" + forgetPwdTime +
+				", forgetPwdStatus=" + forgetPwdStatus +
+				", activeStatus=" + activeStatus +
+				'}';
+	}
+}
diff --git a/src/main/java/com/reyun/model/AccountRestrict4Web.java b/src/main/java/com/reyun/model/AccountRestrict4Web.java
new file mode 100644
index 0000000..461eafa
--- /dev/null
+++ b/src/main/java/com/reyun/model/AccountRestrict4Web.java
@@ -0,0 +1,195 @@
+package com.reyun.model;
+
+import java.math.BigInteger;
+
+public class AccountRestrict4Web {
+    private String packageName;
+    private String originalName;
+    private BigInteger IOLimit;
+    private String pastDate;
+    private BigInteger TrackLimit;
+    private Long accountId;
+    private int priceLevel;
+    private int iOremainingDays;
+    private int trackRemainingDays;
+    private BigInteger TrackTotalFlow;
+    private BigInteger thisMonthIOFlow;
+    private Double trackRemainPercent;
+    private Double IORemainPercent;
+    private BigInteger lastMonthIOFlow;
+    private Boolean isFlowRestrict;
+    private Long packLevel;
+    private Boolean isTrackPastTimeNotified;
+    private Boolean isIOPastTimeNotified;
+    private Boolean isTrackFlowNotified;
+    private Boolean isIOFlowNotified;
+    private Boolean allowBehavior;
+
+    public Long getPackLevel() {
+        return packLevel;
+    }
+
+    public void setPackLevel(Long packLevel) {
+        this.packLevel = packLevel;
+    }
+
+    public Boolean getFlowRestrict() {
+        return isFlowRestrict;
+    }
+
+    public void setFlowRestrict(Boolean flowRestrict) {
+        isFlowRestrict = flowRestrict;
+    }
+
+    public String getPackageName() {
+        return packageName;
+    }
+
+    public void setPackageName(String packageName) {
+        this.packageName = packageName;
+    }
+
+    public String getOriginalName() {
+        return originalName;
+    }
+
+    public void setOriginalName(String originalName) {
+        this.originalName = originalName;
+    }
+
+    public BigInteger getIOLimit() {
+        return IOLimit;
+    }
+
+    public void setIOLimit(BigInteger IOLimit) {
+        this.IOLimit = IOLimit;
+    }
+
+    public String getPastDate() {
+        return pastDate;
+    }
+
+    public void setPastDate(String pastDate) {
+        this.pastDate = pastDate;
+    }
+
+    public BigInteger getTrackLimit() {
+        return TrackLimit;
+    }
+
+    public void setTrackLimit(BigInteger trackLimit) {
+        TrackLimit = trackLimit;
+    }
+
+    public Long getAccountId() {
+        return accountId;
+    }
+
+    public void setAccountId(Long accountId) {
+        this.accountId = accountId;
+    }
+
+    public int getPriceLevel() {
+        return priceLevel;
+    }
+
+    public void setPriceLevel(int priceLevel) {
+        this.priceLevel = priceLevel;
+    }
+
+    public int getiOremainingDays() {
+        return iOremainingDays;
+    }
+
+    public void setiOremainingDays(int iOremainingDays) {
+        this.iOremainingDays = iOremainingDays;
+    }
+
+    public int getTrackRemainingDays() {
+        return trackRemainingDays;
+    }
+
+    public void setTrackRemainingDays(int trackRemainingDays) {
+        this.trackRemainingDays = trackRemainingDays;
+    }
+
+    public BigInteger getTrackTotalFlow() {
+        return TrackTotalFlow;
+    }
+
+    public void setTrackTotalFlow(BigInteger trackTotalFlow) {
+        TrackTotalFlow = trackTotalFlow;
+    }
+
+    public BigInteger getThisMonthIOFlow() {
+        return thisMonthIOFlow;
+    }
+
+    public void setThisMonthIOFlow(BigInteger thisMonthIOFlow) {
+        this.thisMonthIOFlow = thisMonthIOFlow;
+    }
+
+    public Double getTrackRemainPercent() {
+        return trackRemainPercent;
+    }
+
+    public void setTrackRemainPercent(Double trackRemainPercent) {
+        this.trackRemainPercent = trackRemainPercent;
+    }
+
+    public Double getIORemainPercent() {
+        return IORemainPercent;
+    }
+
+    public void setIORemainPercent(Double IORemainPercent) {
+        this.IORemainPercent = IORemainPercent;
+    }
+
+    public BigInteger getLastMonthIOFlow() {
+        return lastMonthIOFlow;
+    }
+
+    public void setLastMonthIOFlow(BigInteger lastMonthIOFlow) {
+        this.lastMonthIOFlow = lastMonthIOFlow;
+    }
+
+    public Boolean getTrackPastTimeNotified() {
+        return isTrackPastTimeNotified;
+    }
+
+    public void setTrackPastTimeNotified(Boolean trackPastTimeNotified) {
+        isTrackPastTimeNotified = trackPastTimeNotified;
+    }
+
+    public Boolean getIOPastTimeNotified() {
+        return isIOPastTimeNotified;
+    }
+
+    public void setIOPastTimeNotified(Boolean IOPastTimeNotified) {
+        isIOPastTimeNotified = IOPastTimeNotified;
+    }
+
+    public Boolean getTrackFlowNotified() {
+        return isTrackFlowNotified;
+    }
+
+    public void setTrackFlowNotified(Boolean trackFlowNotified) {
+        isTrackFlowNotified = trackFlowNotified;
+    }
+
+    public Boolean getIOFlowNotified() {
+        return isIOFlowNotified;
+    }
+
+    public void setIOFlowNotified(Boolean IOFlowNotified) {
+        isIOFlowNotified = IOFlowNotified;
+    }
+
+    public Boolean getAllowBehavior() {
+        return allowBehavior;
+    }
+
+    public void setAllowBehavior(Boolean allowBehavior) {
+        this.allowBehavior = allowBehavior;
+    }
+}
diff --git a/src/main/java/com/reyun/model/App.java b/src/main/java/com/reyun/model/App.java
new file mode 100644
index 0000000..63aa932
--- /dev/null
+++ b/src/main/java/com/reyun/model/App.java
@@ -0,0 +1,302 @@
+package com.reyun.model;
+
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+import javax.persistence.Transient;
+import javax.validation.constraints.NotNull;
+import java.util.Date;
+
+@Entity
+public class App {
+
+	private Long id;
+	@NotNull
+	private String name;
+	private String platform;
+	private String appGenre;
+	private String appGenreName;
+	private String gameGenre;
+	//private String gameCategory;
+	private String appkey;
+	private String url;
+	private Long account;
+//	private boolean sync;
+	// private boolean isActive;
+	private Long origiApp;
+	private String bundleid;
+	private String token;
+	private String installtoken;
+	private boolean regedbutton;
+
+	private Date createTime = new Date();
+	private String createAccount;
+	private Date modifyTime = new Date();
+	private String modifyAccount;
+	private Boolean delFlag;
+    //是否同步DDB
+//    private Boolean syncDdb;
+
+    private Long installNum;
+    private Long registerNum;
+    //是够是debug模式 true 是测试,false不是测试
+    private Boolean isDebug;
+
+	private Boolean ioExhaust;
+    private Boolean mainAccountExpire;
+
+
+
+	public App() {
+		super();
+	}
+
+	public App(String name, String platform, String appGenre, String gameGenre) {
+		this.name = name;
+		this.platform = platform;
+		this.appGenre = appGenre;
+		this.gameGenre = gameGenre;
+	}
+
+	public App(String name, String platform, String appGenre, String gameGenre,
+			Long account) {
+		this.name = name;
+		this.platform = platform;
+		this.appGenre = appGenre;
+		this.gameGenre = gameGenre;
+		this.account = account;
+	}
+
+	// public boolean isActive() {
+	// return isActive;
+	// }
+	//
+	// public void setActive(boolean isActive) {
+	// this.isActive = isActive;
+	// }
+	public Long getAccount() {
+		return account;
+	}
+
+	public String getAppGenre() {
+		return appGenre;
+	}
+
+	@Transient
+	public String getAppGenreName() {
+		return appGenreName;
+	}
+
+	public void setAppGenreName(String appGenreName) {
+		this.appGenreName = appGenreName;
+	}
+
+	public String getAppkey() {
+		return appkey;
+	}
+
+	public String getGameGenre() {
+		return gameGenre;
+	}
+
+/*	@Transient
+	public String getGameCategory() {
+		return gameCategory;
+	}
+	public void setGameCategory(String gameCategory) {
+		this.gameCategory = gameCategory;
+	}*/
+
+	@Id
+	@GeneratedValue
+	public Long getId() {
+		return id;
+	}
+
+	public String getName() {
+		return name;
+	}
+
+	public String getPlatform() {
+		return platform;
+	}
+
+	public String getUrl() {
+		return url;
+	}
+
+
+	public void setAccount(Long account) {
+		this.account = account;
+	}
+
+	public void setAppGenre(String appGenre) {
+		this.appGenre = appGenre;
+	}
+
+	public void setAppkey(String appkey) {
+		this.appkey = appkey;
+	}
+
+	public void setGameGenre(String gameGenre) {
+		this.gameGenre = gameGenre;
+	}
+
+	public void setId(Long id) {
+		this.id = id;
+	}
+
+	public void setName(String name) {
+		this.name = name;
+	}
+
+	public void setPlatform(String platform) {
+		this.platform = platform;
+	}
+
+	public void setUrl(String url) {
+		this.url = url;
+	}
+
+	public Long getOrigiApp() {
+		return origiApp;
+	}
+
+	public void setOrigiApp(Long origiApp) {
+		this.origiApp = origiApp;
+	}
+
+	public String getBundleid() {
+		return bundleid;
+	}
+
+	public void setBundleid(String bundleid) {
+		this.bundleid = bundleid;
+	}
+
+	public String getToken() {
+		return token;
+	}
+
+	public void setToken(String token) {
+		this.token = token;
+	}
+
+	public boolean isRegedbutton() {
+		return regedbutton;
+	}
+
+	public void setRegedbutton(boolean regedbutton) {
+		this.regedbutton = regedbutton;
+	}
+
+	public String getInstalltoken() {
+		return installtoken;
+	}
+
+	public void setInstalltoken(String installtoken) {
+		this.installtoken = installtoken;
+	}
+
+	public Date getCreateTime() {
+		return createTime;
+	}
+
+	public void setCreateTime(Date createTime) {
+		this.createTime = createTime;
+	}
+
+	public String getCreateAccount() {
+		return createAccount;
+	}
+
+	public void setCreateAccount(String createAccount) {
+		this.createAccount = createAccount;
+	}
+
+	public Date getModifyTime() {
+		return modifyTime;
+	}
+
+	public void setModifyTime(Date modifyTime) {
+		this.modifyTime = modifyTime;
+	}
+
+	public String getModifyAccount() {
+		return modifyAccount;
+	}
+
+	public void setModifyAccount(String modifyAccount) {
+		this.modifyAccount = modifyAccount;
+	}
+
+	public Boolean getDelFlag() {
+		return delFlag;
+	}
+
+	public void setDelFlag(Boolean delFlag) {
+		this.delFlag = delFlag;
+	}
+
+    public Boolean getIsDebug() {
+        return this.isDebug;
+    }
+
+    public void setIsDebug(Boolean isDebug) {
+        this.isDebug = isDebug;
+    }
+
+
+	@Transient
+	public Boolean getIoExhaust()
+	{
+		return ioExhaust;
+	}
+
+	public void setIoExhaust(Boolean ioExhaust)
+	{
+		this.ioExhaust = ioExhaust;
+	}
+
+	@Transient
+	public Boolean getMainAccountExpire() {
+		return mainAccountExpire;
+	}
+
+	public void setMainAccountExpire(Boolean mainAccountExpire) {
+		this.mainAccountExpire = mainAccountExpire;
+	}
+
+	@Transient
+    public Long getInstallNum() {
+        return installNum;
+    }
+
+    public void setInstallNum(Long installNum) {
+        this.installNum = installNum;
+    }
+
+    @Transient
+    public Long getRegisterNum() {
+        return registerNum;
+    }
+
+    public void setRegisterNum(Long registerNum) {
+        this.registerNum = registerNum;
+    }
+
+    @Override
+	public String toString() {
+		return "App [id=" + id + ", name=" + name + ", platform=" + platform
+				+ ", appGenre=" + appGenre + ", gameGenre=" + gameGenre
+				+ ", appkey=" + appkey + ", url=" + url + ", account="
+				+ account + ", origiApp=" + origiApp
+				+ ", bundleid=" + bundleid + ", token=" + token
+				+ ", installtoken=" + installtoken + ", regedbutton="
+				+ regedbutton + ", createTime=" + createTime
+				+ ", createAccount=" + createAccount + ", modifyTime="
+				+ modifyTime + ", modifyAccount=" + modifyAccount
+				+ ", delFlag=" + delFlag + "]";
+	}
+
+}
diff --git a/src/main/java/com/reyun/model/AttributeRestrict.java b/src/main/java/com/reyun/model/AttributeRestrict.java
new file mode 100644
index 0000000..a555a48
--- /dev/null
+++ b/src/main/java/com/reyun/model/AttributeRestrict.java
@@ -0,0 +1,156 @@
+package com.reyun.model;
+
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+import java.util.Date;
+
+/**
+ * Created by song on 2017/9/28.
+ */
+
+/**
+ * 字段说明:
+ * id:属性id
+ * attributeName:属性名字
+ * appKey:appId
+ * isAllRestrict:是否所有的用户都进行了限制appId
+ * isRootRestrict:本app所属的母账户下的所有app是否都进行了限制
+ * isParentRestrict:创建此app的账户所创建的所有的app是否都进行了限制
+ * isAppRestrict:本app是否进行了限制
+ * type:属性类型,是事件属性还是用户属性
+ * isEventRestrict:此种类的属性是否进行了限制
+ * isProfileRestrict:此种类的属性是否进行了限制
+ * createTime:创建时间
+ * modifyTime:修改时间
+ *
+ *
+ * 插入数据说明:
+ * 1.表中的每一条记录是某一条属性针对某一个app建立的限制条件;
+ * 2.要限制所有的用户不能使用这个属性分组,那么需要在表中单独插入一条记录,属性名字定义为attributeName,appKey为all,如果所有用户都不能
+ * 使用本条属性进行分组,那么就把isAllRestrict字段置为true,否则的话置为false,
+ * 3.如果要对某一个用户下的所有的app的某个属性进行限制,那么需要把这个账户下所有的app查出来,每一个app存一条记录,将isRootRestrict
+ * 字段置为true;
+ * 4.如果要对某一个子账户创建的app进行限制,那么就把这个子账户下的所有的app都查出来,每一个app存一条记录,将isParentRestrict字段置为true;
+ * 5.如果要对某一个app进行限制,那么就将这个app存一条记录,将isAppRestrict字段置为true;
+ * 6.type字段要区分是事件属性还是用户属性,因为用户属性和事件属性的名字可能相同,因此属性的类型不能为null;
+ *
+ * 查询数据说明:
+ * 1.在查询这个表的时候,应该先查询属性名为attributeName,appKey为all的记录,查询isAllRestrict这个字段的值,
+ * 如果没有限制,就查询本app所对应的记录,只要isRootRestrict、isParentRestrict、isAppRestrict或者这几个
+ * 字段有一个字段为true,那么就说明对本属性进行了限制;
+ */
+
+@Entity
+public class AttributeRestrict {
+    @Id
+    @GeneratedValue
+    private Long id;
+    private String attributeName;
+    private String appKey;
+    private boolean isAllRestrict=false;
+    private boolean isRootRestrict=false;
+    private boolean isParentRestrict=false;
+    private boolean isAppRestrict=false;
+    private String type;
+    private boolean isEventRestrict=false;
+    private boolean isProfileRestrict=false;
+    private Date createTime=new Date();
+    private Date modifyTime;
+
+    public Long getId() {
+        return id;
+    }
+
+    public void setId(Long id) {
+        this.id = id;
+    }
+
+    public String getAttributeName() {
+        return attributeName;
+    }
+
+    public void setAttributeName(String attributeName) {
+        this.attributeName = attributeName;
+    }
+
+    public String getAppKey() {
+        return appKey;
+    }
+
+    public void setAppKey(String appKey) {
+        this.appKey = appKey;
+    }
+
+    public boolean isAllRestrict() {
+        return isAllRestrict;
+    }
+
+    public void setAllRestrict(boolean allRestrict) {
+        isAllRestrict = allRestrict;
+    }
+
+    public boolean isRootRestrict() {
+        return isRootRestrict;
+    }
+
+    public void setRootRestrict(boolean rootRestrict) {
+        isRootRestrict = rootRestrict;
+    }
+
+    public boolean isParentRestrict() {
+        return isParentRestrict;
+    }
+
+    public void setParentRestrict(boolean parentRestrict) {
+        isParentRestrict = parentRestrict;
+    }
+
+    public boolean isAppRestrict() {
+        return isAppRestrict;
+    }
+
+    public void setAppRestrict(boolean appRestrict) {
+        isAppRestrict = appRestrict;
+    }
+
+    public String getType() {
+        return type;
+    }
+
+    public void setType(String type) {
+        this.type = type;
+    }
+
+    public boolean isEventRestrict() {
+        return isEventRestrict;
+    }
+
+    public void setEventRestrict(boolean eventRestrict) {
+        isEventRestrict = eventRestrict;
+    }
+
+    public boolean isProfileRestrict() {
+        return isProfileRestrict;
+    }
+
+    public void setProfileRestrict(boolean profileRestrict) {
+        isProfileRestrict = profileRestrict;
+    }
+
+    public Date getCreateTime() {
+        return createTime;
+    }
+
+    public void setCreateTime(Date createTime) {
+        this.createTime = createTime;
+    }
+
+    public Date getModifyTime() {
+        return modifyTime;
+    }
+
+    public void setModifyTime(Date modifyTime) {
+        this.modifyTime = modifyTime;
+    }
+}
diff --git a/src/main/java/com/reyun/model/Auth.java b/src/main/java/com/reyun/model/Auth.java
new file mode 100644
index 0000000..c9401e2
--- /dev/null
+++ b/src/main/java/com/reyun/model/Auth.java
@@ -0,0 +1,200 @@
+package com.reyun.model;
+
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+import javax.persistence.Transient;
+import java.util.Date;
+import java.util.List;
+
+@Entity
+public class Auth {
+
+	private Long id;
+	private Long roleCategory;
+	private String controlAuth;
+	private Long app;
+	private Long account;
+	private boolean retentionAuth;
+	private boolean payAuth;
+    private Long createAccount;
+    private Date createTime;
+    private Date modifyTime = new Date();
+    private String modifyAccount;
+    private Boolean status;
+    private Boolean isNatureOpen;
+    private Boolean campaign;
+    private Boolean topAuth;
+
+    //transient
+    private List<RoleAuthDetail> roleAuthDetailList;
+    private List<DataAuth> dataAuth;
+
+
+	public Auth() {
+		super();
+	}
+
+	public Auth(Long id, Long roleCategory, String controlAuth,
+			Long app, Long account) {
+		super();
+		this.id = id;
+		this.roleCategory = roleCategory;
+		this.controlAuth = controlAuth;
+		this.app = app;
+		this.account = account;
+	}
+
+	@Id
+	@GeneratedValue
+	public Long getId() {
+		return id;
+	}
+
+	public void setId(Long id) {
+		this.id = id;
+	}
+
+
+	public Long getRoleCategory() {
+		return roleCategory;
+	}
+
+	public void setRoleCategory(Long roleCategory) {
+		this.roleCategory = roleCategory;
+	}
+
+	public String getControlAuth() {
+		return controlAuth;
+	}
+
+	public void setControlAuth(String controlAuth) {
+		this.controlAuth = controlAuth;
+	}
+
+	public Long getApp() {
+		return app;
+	}
+
+	public void setApp(Long app) {
+		this.app = app;
+	}
+
+	public Long getAccount() {
+		return account;
+	}
+
+	public void setAccount(Long account) {
+		this.account = account;
+	}
+
+	public boolean isRetentionAuth() {
+		return retentionAuth;
+	}
+
+	public void setRetentionAuth(boolean retentionAuth) {
+		this.retentionAuth = retentionAuth;
+	}
+
+	public boolean isPayAuth() {
+		return payAuth;
+	}
+
+	public void setPayAuth(boolean payAuth) {
+		this.payAuth = payAuth;
+	}
+
+	public Date getModifyTime() {
+		return modifyTime;
+	}
+
+	public void setModifyTime(Date modifyTime) {
+		this.modifyTime = modifyTime;
+	}
+
+	public String getModifyAccount() {
+		return modifyAccount;
+	}
+
+	public void setModifyAccount(String modifyAccount) {
+		this.modifyAccount = modifyAccount;
+	}
+
+	public Boolean getStatus() {
+		return status;
+	}
+
+	public void setStatus(Boolean status) {
+		this.status = status;
+	}
+
+	public Boolean getIsNatureOpen() {
+		return isNatureOpen;
+	}
+
+	public void setIsNatureOpen(Boolean isNatureOpen) {
+		this.isNatureOpen = isNatureOpen;
+	}
+
+	public Boolean getCampaign() {
+		return campaign;
+	}
+
+	public void setCampaign(Boolean campaign) {
+		this.campaign = campaign;
+	}
+
+    public Date getCreateTime() {
+        return createTime;
+    }
+
+    public void setCreateTime(Date createTime) {
+        this.createTime = createTime;
+    }
+
+    public Long getCreateAccount() {
+        return createAccount;
+    }
+
+    public void setCreateAccount(Long createAccount) {
+        this.createAccount = createAccount;
+    }
+
+    public Boolean getTopAuth() {
+        return topAuth;
+    }
+
+    public void setTopAuth(Boolean topAuth) {
+        this.topAuth = topAuth;
+    }
+
+    @Transient
+    public List<RoleAuthDetail> getRoleAuthDetailList() {
+        return roleAuthDetailList;
+    }
+
+    public void setRoleAuthDetailList(List<RoleAuthDetail> roleAuthDetailList) {
+        this.roleAuthDetailList = roleAuthDetailList;
+    }
+
+    @Transient
+    public List<DataAuth> getDataAuth() {
+        return dataAuth;
+    }
+
+    public void setDataAuth(List<DataAuth> dataAuth) {
+        this.dataAuth = dataAuth;
+    }
+
+    @Override
+	public String toString() {
+		return "Auth [id=" + id + ", roleCategory=" + roleCategory
+				+ ", controlAuth=" + controlAuth + ", app=" + app
+				+ ", account=" + account + ", retentionAuth=" + retentionAuth
+				+ ", payAuth=" + payAuth + ", modifyTime=" + modifyTime
+				+ ", modifyAccount=" + modifyAccount + ", status=" + status
+				+ "]";
+	}
+	
+	
+}
diff --git a/src/main/java/com/reyun/model/BussinessMan.java b/src/main/java/com/reyun/model/BussinessMan.java
new file mode 100644
index 0000000..fda5792
--- /dev/null
+++ b/src/main/java/com/reyun/model/BussinessMan.java
@@ -0,0 +1,57 @@
+package com.reyun.model;
+
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+
+@Entity
+public class BussinessMan {
+
+	private Long id;
+	private String name;
+	private String email;
+	
+
+
+	public BussinessMan() {
+		super();
+	}
+
+
+
+	@Id
+	@GeneratedValue
+	public Long getId() {
+		return id;
+	}
+
+	public void setId(Long id) {
+		this.id = id;
+	}
+
+
+
+	public String getName() {
+		return name;
+	}
+
+
+
+	public void setName(String name) {
+		this.name = name;
+	}
+
+
+
+	public String getEmail() {
+		return email;
+	}
+
+
+
+	public void setEmail(String email) {
+		this.email = email;
+	}
+	
+	
+}
diff --git a/src/main/java/com/reyun/model/Category.java b/src/main/java/com/reyun/model/Category.java
new file mode 100644
index 0000000..ade4766
--- /dev/null
+++ b/src/main/java/com/reyun/model/Category.java
@@ -0,0 +1,48 @@
+package com.reyun.model;
+
+import java.util.Date;
+
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+import javax.validation.constraints.NotNull;
+
+
+@Entity
+public class Category {
+
+	private Long id;
+	private int categoryid;
+	private String categoryname;
+	private int isgame;
+	
+	@Id
+	@GeneratedValue
+	public Long getId() {
+		return id;
+	}
+	public void setId(Long id) {
+		this.id = id;
+	}
+	public int getCategoryid() {
+		return categoryid;
+	}
+	public void setCategoryid(int categoryid) {
+		this.categoryid = categoryid;
+	}
+	public String getCategoryname() {
+		return categoryname;
+	}
+	public void setCategoryname(String categoryname) {
+		this.categoryname = categoryname;
+	}
+	public int getIsgame() {
+		return isgame;
+	}
+	public void setIsgame(int isgame) {
+		this.isgame = isgame;
+	}
+	
+	
+	
+}
diff --git a/src/main/java/com/reyun/model/CommonEvent.java b/src/main/java/com/reyun/model/CommonEvent.java
new file mode 100644
index 0000000..a865fba
--- /dev/null
+++ b/src/main/java/com/reyun/model/CommonEvent.java
@@ -0,0 +1,50 @@
+package com.reyun.model;
+
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+import javax.validation.constraints.NotNull;
+
+/**
+ * Created by sunhao on 17/4/13.
+ * description: 通用事件
+ */
+@Entity
+public class CommonEvent {
+
+    private Long id;
+
+    private String event;
+
+    private String alias;
+
+    @Id
+    @GeneratedValue
+    public Long getId() {
+
+        return id;
+    }
+
+    public void setId(Long id) {
+        this.id = id;
+    }
+
+    @NotNull
+    public String getEvent() {
+        return event;
+    }
+
+    public void setEvent(String event) {
+        this.event = event;
+    }
+
+    @NotNull
+    public String getAlias() {
+        return alias;
+    }
+
+    public void setAlias(String alias) {
+        this.alias = alias;
+    }
+
+}
diff --git a/src/main/java/com/reyun/model/CommonIP.java b/src/main/java/com/reyun/model/CommonIP.java
new file mode 100644
index 0000000..94ed151
--- /dev/null
+++ b/src/main/java/com/reyun/model/CommonIP.java
@@ -0,0 +1,89 @@
+package com.reyun.model;
+
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+import java.util.Date;
+
+/**
+ * Created by mxq on 2017/9/11.
+ */
+@Entity
+public class CommonIP {
+    private Long id;
+    //账号id
+    private Long account;
+
+
+    private String ip;
+
+    private Long createAccount;
+    private Date createTime;
+    private Date modifyTime = new Date();
+    private Long modifyAccount;
+    private Boolean delFlag;
+
+    @Id
+    @GeneratedValue
+    public Long getId() {
+        return id;
+    }
+    public void setId(Long id) {
+        this.id = id;
+    }
+    public Long getAccount() {
+        return account;
+    }
+
+    public void setAccount(Long account) {
+        this.account = account;
+    }
+
+    public String getIp() {
+        return ip;
+    }
+
+    public void setIp(String ip) {
+        this.ip = ip;
+    }
+
+    public Long getCreateAccount() {
+        return createAccount;
+    }
+
+    public void setCreateAccount(Long createAccount) {
+        this.createAccount = createAccount;
+    }
+
+    public Date getCreateTime() {
+        return createTime;
+    }
+
+    public void setCreateTime(Date createTime) {
+        this.createTime = createTime;
+    }
+
+    public Boolean getDelFlag() {
+        return delFlag;
+    }
+
+    public void setDelFlag(Boolean delFlag) {
+        this.delFlag = delFlag;
+    }
+
+    public Date getModifyTime() {
+        return modifyTime;
+    }
+
+    public void setModifyTime(Date modifyTime) {
+        this.modifyTime = modifyTime;
+    }
+
+    public Long getModifyAccount() {
+        return modifyAccount;
+    }
+
+    public void setModifyAccount(Long modifyAccount) {
+        this.modifyAccount = modifyAccount;
+    }
+}
diff --git a/src/main/java/com/reyun/model/CommonParam.java b/src/main/java/com/reyun/model/CommonParam.java
new file mode 100644
index 0000000..6a6b877
--- /dev/null
+++ b/src/main/java/com/reyun/model/CommonParam.java
@@ -0,0 +1,74 @@
+package com.reyun.model;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+
+
+@Entity
+public class CommonParam {
+
+	private Long id;
+	private String param;
+	private String alias;
+    private Integer sortId;
+	/**
+	 * 事件通用属性值为event,用户通用属性值为profile
+	 */
+	private String type;
+
+    private String dimension;
+    private String dataType;
+	
+	@Id
+	@GeneratedValue
+	public Long getId() {
+		return id;
+	}
+	public void setId(Long id) {
+		this.id = id;
+	}
+	public String getParam() {
+		return param;
+	}
+	public void setParam(String param) {
+		this.param = param;
+	}
+	public String getAlias() {
+		return alias;
+	}
+	public void setAlias(String alias) {
+		this.alias = alias;
+	}
+	public String getType() {
+		return type;
+	}
+	public void setType(String type) {
+		this.type = type;
+	}
+
+    public String getDimension() {
+        return dimension;
+    }
+
+    public void setDimension(String dimension) {
+        this.dimension = dimension;
+    }
+
+    public Integer getSortId() {
+        return sortId;
+    }
+
+    public void setSortId(Integer sortId) {
+        this.sortId = sortId;
+    }
+
+	public String getDataType() {
+		return dataType;
+	}
+
+	public void setDataType(String dataType) {
+		this.dataType = dataType;
+	}
+}
diff --git a/src/main/java/com/reyun/model/ComplicatedParam.java b/src/main/java/com/reyun/model/ComplicatedParam.java
new file mode 100644
index 0000000..5e29668
--- /dev/null
+++ b/src/main/java/com/reyun/model/ComplicatedParam.java
@@ -0,0 +1,100 @@
+package com.reyun.model;
+
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+import javax.validation.constraints.NotNull;
+
+/**
+ * Created by sunhao on 17/9/21.
+ * 复杂事件操作符
+ */
+@Entity
+public class ComplicatedParam {
+
+    private Long id;
+
+    //属性名
+    private String viewAttr;
+
+    //属性中文名称
+    private String viewAttrName;
+
+    //属性类型 avg sum
+    private String attrType;
+
+    //属性级别 1,2
+    private Integer attrLevel;
+
+    //有效性
+    private Boolean valid;
+
+    // view出现在哪个类型前面
+    private String viewType;
+
+    public ComplicatedParam(){}
+
+    public ComplicatedParam(String viewAttr, String viewAttrName) {
+        this.viewAttr = viewAttr;
+        this.viewAttrName = viewAttrName;
+    }
+
+    @Id
+    @GeneratedValue
+    public Long getId() {
+        return id;
+    }
+
+    public void setId(Long id) {
+        this.id = id;
+    }
+
+    public String getViewAttr() {
+        return viewAttr;
+    }
+
+    public void setViewAttr(String viewAttr) {
+        this.viewAttr = viewAttr;
+    }
+
+    public String getViewAttrName() {
+        return viewAttrName;
+    }
+
+    public void setViewAttrName(String viewAttrName) {
+        this.viewAttrName = viewAttrName;
+    }
+
+    public String getAttrType() {
+        return attrType;
+    }
+
+    public void setAttrType(String attrType) {
+        this.attrType = attrType;
+    }
+
+    public Integer getAttrLevel() {
+        return attrLevel;
+    }
+
+    public void setAttrLevel(Integer attrLevel) {
+        this.attrLevel = attrLevel;
+    }
+
+    @NotNull
+    public Boolean getValid() {
+        return valid;
+    }
+
+    public void setValid(Boolean valid) {
+        this.valid = valid;
+    }
+
+    public String getViewType() {
+        return viewType;
+    }
+
+    public void setViewType(String viewType) {
+        this.viewType = viewType;
+    }
+}
diff --git a/src/main/java/com/reyun/model/ConfigParam.java b/src/main/java/com/reyun/model/ConfigParam.java
new file mode 100644
index 0000000..c4b32f6
--- /dev/null
+++ b/src/main/java/com/reyun/model/ConfigParam.java
@@ -0,0 +1,46 @@
+package com.reyun.model;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+
+/**
+ * Created by sunhao on 17/3/2.
+ */
+@Entity
+public class ConfigParam {
+
+    private Long id;
+
+    private String keyParam;
+
+    private String valueParam;
+
+    @Id
+    @GeneratedValue
+    public Long getId() {
+        return id;
+    }
+
+    public void setId(Long id) {
+        this.id = id;
+    }
+
+    @Column(unique = true, nullable = false)
+    public String getKeyParam() {
+        return keyParam;
+    }
+
+    public void setKeyParam(String keyParam) {
+        this.keyParam = keyParam;
+    }
+
+    public String getValueParam() {
+        return valueParam;
+    }
+
+    public void setValueParam(String valueParam) {
+        this.valueParam = valueParam;
+    }
+}
diff --git a/src/main/java/com/reyun/model/CustomMenu.java b/src/main/java/com/reyun/model/CustomMenu.java
new file mode 100644
index 0000000..454e6ad
--- /dev/null
+++ b/src/main/java/com/reyun/model/CustomMenu.java
@@ -0,0 +1,221 @@
+package com.reyun.model;
+
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+import javax.persistence.Transient;
+import java.util.Date;
+import java.util.List;
+
+/**
+ * Created by sunhao on 17/4/20.
+ * desc:看单主表
+ */
+@Entity
+public class CustomMenu {
+
+    private Long id;
+
+    private String name;
+
+    private Date createDate;
+
+    private Long createAccount;
+
+    private String createAccountName;
+
+    private Long appId;
+
+    private Long category;
+
+    private String categoryName;
+    //是自建看单还是来自分享的看单,false自建,true分享
+    private Boolean source;
+    //分享看单的Id
+    private Long shareId;
+    //分享者ID
+    private Long shareAccountId;
+    //分享者名称
+    private String shareAccountName;
+    //分享时间
+    private Date shareDate;
+    //看单排序
+    private Integer menuOrder;
+    //是否已经分享过,不能标示为是否是自己分享过,只能用于前台显示是否能再次分享。
+    private Boolean hasShare;
+
+    private Long modifyAccount;
+
+    private Date modifyDate;
+
+    private Boolean delFlag;
+    //看单显示顺序
+    private Integer orderindex;
+
+    //Transient,展示模板列表
+    private List<CustomMenuTemplate> templates;
+
+
+    @Id
+    @GeneratedValue
+    public Long getId() {
+        return id;
+    }
+
+    public void setId(Long id) {
+        this.id = id;
+    }
+
+    public String getName() {
+        return name;
+    }
+
+    public void setName(String name) {
+        this.name = name;
+    }
+
+    public Date getCreateDate() {
+        return createDate;
+    }
+
+    public void setCreateDate(Date createDate) {
+        this.createDate = createDate;
+    }
+
+    public Long getCreateAccount() {
+        return createAccount;
+    }
+
+    public void setCreateAccount(Long createAccount) {
+        this.createAccount = createAccount;
+    }
+
+    public String getCreateAccountName() {
+        return createAccountName;
+    }
+
+    public void setCreateAccountName(String createAccountName) {
+        this.createAccountName = createAccountName;
+    }
+
+    public Long getAppId() {
+        return appId;
+    }
+
+    public void setAppId(Long appId) {
+        this.appId = appId;
+    }
+
+    public Long getCategory() {
+        return category;
+    }
+
+    public void setCategory(Long category) {
+        this.category = category;
+    }
+
+    public String getCategoryName() {
+        return categoryName;
+    }
+
+    public void setCategoryName(String categoryName) {
+        this.categoryName = categoryName;
+    }
+
+    public Boolean getSource() {
+        return source;
+    }
+
+    public void setSource(Boolean source) {
+        this.source = source;
+    }
+
+    public Long getShareId() {
+        return shareId;
+    }
+
+    public void setShareId(Long shareId) {
+        this.shareId = shareId;
+    }
+
+    public Long getShareAccountId() {
+        return shareAccountId;
+    }
+
+    public void setShareAccountId(Long shareAccountId) {
+        this.shareAccountId = shareAccountId;
+    }
+
+    public String getShareAccountName() {
+        return shareAccountName;
+    }
+
+    public void setShareAccountName(String shareAccountName) {
+        this.shareAccountName = shareAccountName;
+    }
+
+    public Date getShareDate() {
+        return shareDate;
+    }
+
+    public void setShareDate(Date shareDate) {
+        this.shareDate = shareDate;
+    }
+
+    public Integer getMenuOrder() {
+        return menuOrder;
+    }
+
+    public void setMenuOrder(Integer menuOrder) {
+        this.menuOrder = menuOrder;
+    }
+
+    @Transient
+    public List<CustomMenuTemplate> getTemplates() {
+        return templates;
+    }
+
+    public void setTemplates(List<CustomMenuTemplate> templates) {
+        this.templates = templates;
+    }
+
+    public Long getModifyAccount() {
+        return modifyAccount;
+    }
+
+    public void setModifyAccount(Long modifyAccount) {
+        this.modifyAccount = modifyAccount;
+    }
+
+    public Date getModifyDate() {
+        return modifyDate;
+    }
+
+    public void setModifyDate(Date modifyDate) {
+        this.modifyDate = modifyDate;
+    }
+
+    public Boolean getDelFlag() {
+        return delFlag;
+    }
+
+    public void setDelFlag(Boolean delFlag) {
+        this.delFlag = delFlag;
+    }
+
+    public Boolean getHasShare() {
+        return hasShare;
+    }
+
+    public void setHasShare(Boolean hasShare) {
+        this.hasShare = hasShare;
+    }
+
+    public Integer getOrderindex() {
+        return orderindex;
+    }
+
+    public void setOrderindex(Integer orderindex) {
+        this.orderindex = orderindex;
+    }
+}
diff --git a/src/main/java/com/reyun/model/CustomMenuFavorites.java b/src/main/java/com/reyun/model/CustomMenuFavorites.java
new file mode 100644
index 0000000..c8d8489
--- /dev/null
+++ b/src/main/java/com/reyun/model/CustomMenuFavorites.java
@@ -0,0 +1,111 @@
+package com.reyun.model;
+
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+import javax.persistence.Transient;
+import java.util.Date;
+import java.util.List;
+
+/**
+ * Created by sunhao on 17/4/20.
+ * desc:看单收藏夹
+ */
+@Entity
+public class CustomMenuFavorites {
+
+    private Long id;
+
+    private Long accountId;
+
+    private Long appId;
+
+    private Long shareId;
+
+    private Date createDate;
+
+    private Double matchPercent;
+
+    private Boolean delFlag;
+    //true分享有效,false分享无效
+    private Boolean shareValid;
+
+    public CustomMenuFavorites(){}
+
+    public CustomMenuFavorites(Long accountId, Long appId, Long shareId, Double matchPercent){
+
+        this.accountId = accountId;
+        this.appId = appId;
+        this.shareId = shareId;
+        this.createDate = new Date();
+        this.matchPercent = matchPercent;
+        this.delFlag = false;
+        this.shareValid = true;
+    }
+
+    @Id
+    @GeneratedValue
+    public Long getId() {
+        return id;
+    }
+
+    public void setId(Long id) {
+        this.id = id;
+    }
+
+    public Long getAccountId() {
+        return accountId;
+    }
+
+    public void setAccountId(Long accountId) {
+        this.accountId = accountId;
+    }
+
+    public Long getAppId() {
+        return appId;
+    }
+
+    public void setAppId(Long appId) {
+        this.appId = appId;
+    }
+
+    public Long getShareId() {
+        return shareId;
+    }
+
+    public void setShareId(Long shareId) {
+        this.shareId = shareId;
+    }
+
+    public Date getCreateDate() {
+        return createDate;
+    }
+
+    public void setCreateDate(Date createDate) {
+        this.createDate = createDate;
+    }
+
+    public Double getMatchPercent() {
+        return matchPercent;
+    }
+
+    public void setMatchPercent(Double matchPercent) {
+        this.matchPercent = matchPercent;
+    }
+
+    public Boolean getDelFlag() {
+        return delFlag;
+    }
+
+    public void setDelFlag(Boolean delFlag) {
+        this.delFlag = delFlag;
+    }
+
+    public Boolean getShareValid() {
+        return shareValid;
+    }
+
+    public void setShareValid(Boolean shareValid) {
+        this.shareValid = shareValid;
+    }
+}
diff --git a/src/main/java/com/reyun/model/CustomMenuShare.java b/src/main/java/com/reyun/model/CustomMenuShare.java
new file mode 100644
index 0000000..8ea54af
--- /dev/null
+++ b/src/main/java/com/reyun/model/CustomMenuShare.java
@@ -0,0 +1,215 @@
+package com.reyun.model;
+
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+import javax.persistence.Transient;
+import java.util.Date;
+import java.util.List;
+
+/**
+ * Created by sunhao on 17/4/20.
+ * desc:分享看单
+ */
+@Entity
+public class CustomMenuShare {
+
+    private Long id;
+
+    private Long accountId;
+
+    private String accountName;
+
+    private String name;
+
+    private Long category;
+
+    private String categoryName;
+
+    private Boolean delFlag;
+
+    private Date shareDate;
+
+    private Long originalMenu;
+    //使用人数
+    private Long useNumber;
+    //收藏次数
+    private Long favoriteNumber;
+    //是否是热云分享的看单
+    private Boolean reyunMenu;
+
+    //Transient,分享ID
+    private Long shareId;
+    //Transient,展示是否有效
+    private Boolean shareValid;
+    //Transient,展示匹配度
+    private Double matchPercent;
+    //Transient,展示是否收藏
+    private Boolean hasFavorite;
+    //Transient,展示是否使用
+    private Boolean hasUsed;
+    //Transient,展示看单的模板
+    private List<CustomMenuShareTemplate> templates;
+
+
+    public CustomMenuShare(){}
+
+    public CustomMenuShare(CustomMenuShare customMenuShare){
+        this.accountId = customMenuShare.getAccountId();
+        this.accountName = customMenuShare.getAccountName();
+        this.name = customMenuShare.getName();
+        this.category = customMenuShare.getCategory();
+    }
+
+    @Id
+    @GeneratedValue
+    public Long getId() {
+        return id;
+    }
+
+    public void setId(Long id) {
+        this.id = id;
+    }
+
+    public Long getAccountId() {
+        return accountId;
+    }
+
+    public void setAccountId(Long accountId) {
+        this.accountId = accountId;
+    }
+
+    public String getAccountName() {
+        return accountName;
+    }
+
+    public void setAccountName(String accountName) {
+        this.accountName = accountName;
+    }
+
+    public String getName() {
+        return name;
+    }
+
+    public void setName(String name) {
+        this.name = name;
+    }
+
+    public Long getCategory() {
+        return category;
+    }
+
+    public void setCategory(Long category) {
+        this.category = category;
+    }
+
+    public String getCategoryName() {
+        return categoryName;
+    }
+
+    public void setCategoryName(String categoryName) {
+        this.categoryName = categoryName;
+    }
+
+    public Boolean getDelFlag() {
+        return delFlag;
+    }
+
+    public void setDelFlag(Boolean delFlag) {
+        this.delFlag = delFlag;
+    }
+
+    public Date getShareDate() {
+        return shareDate;
+    }
+
+    public void setShareDate(Date shareDate) {
+        this.shareDate = shareDate;
+    }
+
+    public Long getOriginalMenu() {
+        return originalMenu;
+    }
+
+    public void setOriginalMenu(Long originalMenu) {
+        this.originalMenu = originalMenu;
+    }
+
+    public Long getUseNumber() {
+        return useNumber;
+    }
+
+    public void setUseNumber(Long useNumber) {
+        this.useNumber = useNumber;
+    }
+
+    public Long getFavoriteNumber() {
+        return favoriteNumber;
+    }
+
+    public void setFavoriteNumber(Long favoriteNumber) {
+        this.favoriteNumber = favoriteNumber;
+    }
+
+    public Boolean getReyunMenu() {
+        return reyunMenu;
+    }
+
+    public void setReyunMenu(Boolean reyunMenu) {
+        this.reyunMenu = reyunMenu;
+    }
+
+    @Transient
+    public Long getShareId() {
+        return shareId;
+    }
+
+    public void setShareId(Long shareId) {
+        this.shareId = shareId;
+    }
+
+    @Transient
+    public Boolean getShareValid() {
+        return shareValid;
+    }
+
+    public void setShareValid(Boolean shareValid) {
+        this.shareValid = shareValid;
+    }
+
+    @Transient
+    public Double getMatchPercent() {
+        return matchPercent;
+    }
+
+    public void setMatchPercent(Double matchPercent) {
+        this.matchPercent = matchPercent;
+    }
+
+    @Transient
+    public Boolean getHasFavorite() {
+        return hasFavorite;
+    }
+
+    public void setHasFavorite(Boolean hasFavorite) {
+        this.hasFavorite = hasFavorite;
+    }
+
+    @Transient
+    public Boolean getHasUsed() {
+        return hasUsed;
+    }
+
+    public void setHasUsed(Boolean hasUsed) {
+        this.hasUsed = hasUsed;
+    }
+
+    @Transient
+    public List<CustomMenuShareTemplate> getTemplates() {
+        return templates;
+    }
+
+    public void setTemplates(List<CustomMenuShareTemplate> templates) {
+        this.templates = templates;
+    }
+}
diff --git a/src/main/java/com/reyun/model/CustomMenuShareTemplate.java b/src/main/java/com/reyun/model/CustomMenuShareTemplate.java
new file mode 100644
index 0000000..d6b7231
--- /dev/null
+++ b/src/main/java/com/reyun/model/CustomMenuShareTemplate.java
@@ -0,0 +1,228 @@
+package com.reyun.model;
+
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+import javax.persistence.Transient;
+import java.util.Date;
+
+/**
+ * Created by sunhao on 17/4/27.
+ * desc:分享看单模板
+ */
+@Entity
+public class CustomMenuShareTemplate {
+
+
+    private Long id;
+
+    private Long accountId;
+
+    private Long customMenuId;
+    //模板名称
+    private String name;
+    //查询条件
+    private String queryCondition;
+    //所有事件
+    private String events;
+    //留存参数
+    private int relativeTime;
+    //查询SQL
+    private String querySql;
+    //报表类型,事件分析,漏斗,留存
+    private  String menuType;
+    //分享后查询出的数据,自建模板无数据
+    private String queryData;
+    //漏斗,留存,事件分析的ID
+    private Long originalReportId;
+
+    private Date createDate;
+
+    private Long modifyAccount;
+
+    private Date modifyDate;
+
+    private Boolean delFlag;
+
+    //Transient 是否匹配
+    private Boolean hasMatch;
+
+    private String type;
+
+    private String descb;
+
+    public CustomMenuShareTemplate(){}
+
+    public CustomMenuShareTemplate(CustomMenuShareTemplate customMenuShareTemplate){
+        this.accountId = customMenuShareTemplate.getAccountId();
+        this.name = customMenuShareTemplate.getName();
+        this.queryCondition = customMenuShareTemplate.getQueryCondition();
+        this.querySql = customMenuShareTemplate.getQuerySql();
+        this.events = customMenuShareTemplate.getEvents();
+        this.relativeTime = customMenuShareTemplate.getRelativeTime();
+        this.menuType = customMenuShareTemplate.getMenuType();
+        this.modifyAccount = customMenuShareTemplate.getModifyAccount();
+        this.originalReportId = customMenuShareTemplate.getOriginalReportId();
+        this.createDate = new Date();
+        this.modifyDate = new Date();
+        this.delFlag = false;
+    }
+
+    public CustomMenuShareTemplate(CustomMenuTemplate customMenuTemplate){
+        this.accountId = customMenuTemplate.getAccountId();
+        this.name = customMenuTemplate.getName();
+        this.menuType = customMenuTemplate.getMenuType();
+        this.modifyAccount = customMenuTemplate.getModifyAccount();
+        this.originalReportId = customMenuTemplate.getOriginalReportId();
+        this.createDate = new Date();
+        this.modifyDate = new Date();
+        this.delFlag = false;
+    }
+
+    @Id
+    @GeneratedValue
+    public Long getId() {
+        return id;
+    }
+
+    public void setId(Long id) {
+        this.id = id;
+    }
+
+    public Long getAccountId() {
+        return accountId;
+    }
+
+    public void setAccountId(Long accountId) {
+        this.accountId = accountId;
+    }
+
+    public Long getCustomMenuId() {
+        return customMenuId;
+    }
+
+    public void setCustomMenuId(Long customMenuId) {
+        this.customMenuId = customMenuId;
+    }
+
+    public String getName() {
+        return name;
+    }
+
+    public void setName(String name) {
+        this.name = name;
+    }
+
+    public String getQueryCondition() {
+        return queryCondition;
+    }
+
+    public void setQueryCondition(String queryCondition) {
+        this.queryCondition = queryCondition;
+    }
+
+    public String getEvents() {
+        return events;
+    }
+
+    public void setEvents(String events) {
+        this.events = events;
+    }
+
+    public String getQuerySql() {
+        return querySql;
+    }
+
+    public void setQuerySql(String querySql) {
+        this.querySql = querySql;
+    }
+
+    public String getMenuType() {
+        return menuType;
+    }
+
+    public void setMenuType(String menuType) {
+        this.menuType = menuType;
+    }
+
+    public Date getCreateDate() {
+        return createDate;
+    }
+
+    public void setCreateDate(Date createDate) {
+        this.createDate = createDate;
+    }
+
+    public Long getModifyAccount() {
+        return modifyAccount;
+    }
+
+    public void setModifyAccount(Long modifyAccount) {
+        this.modifyAccount = modifyAccount;
+    }
+
+    public Date getModifyDate() {
+        return modifyDate;
+    }
+
+    public void setModifyDate(Date modifyDate) {
+        this.modifyDate = modifyDate;
+    }
+
+    public String getQueryData() {
+        return queryData;
+    }
+
+    public void setQueryData(String queryData) {
+        this.queryData = queryData;
+    }
+
+    public Boolean getDelFlag() {
+        return delFlag;
+    }
+
+    public void setDelFlag(Boolean delFlag) {
+        this.delFlag = delFlag;
+    }
+
+    public Long getOriginalReportId() {
+        return originalReportId;
+    }
+
+    public void setOriginalReportId(Long originalReportId) {
+        this.originalReportId = originalReportId;
+    }
+
+    public int getRelativeTime() {
+        return relativeTime;
+    }
+
+    public void setRelativeTime(int relativeTime) {
+        this.relativeTime = relativeTime;
+    }
+
+    @Transient
+    public Boolean getHasMatch() {
+        return hasMatch;
+    }
+
+    public void setHasMatch(Boolean hasMatch) {
+        this.hasMatch = hasMatch;
+    }
+
+    public String getType() {
+        return type;
+    }
+
+    public void setType(String type) {
+        this.type = type;
+    }
+
+    public String getDescb() {
+        return descb;
+    }
+
+    public void setDescb(String descb) {
+        this.descb = descb;
+    }
+}
diff --git a/src/main/java/com/reyun/model/CustomMenuTemplate.java b/src/main/java/com/reyun/model/CustomMenuTemplate.java
new file mode 100644
index 0000000..54819d8
--- /dev/null
+++ b/src/main/java/com/reyun/model/CustomMenuTemplate.java
@@ -0,0 +1,160 @@
+package com.reyun.model;
+
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+import java.util.Date;
+
+/**
+ * Created by sunhao on 17/4/20.
+ * desc:我的看单模板
+ */
+@Entity
+public class CustomMenuTemplate {
+
+    private Long id;
+
+    private Long accountId;
+
+    private Long customMenuId;
+    //模板名称
+    private String name;
+    //报表类型,事件分析,漏斗,留存
+    private  String menuType;
+    //漏斗,留存,事件分析的ID
+    private Long originalReportId;
+
+    private Date createDate;
+
+    private Long modifyAccount;
+
+    private Date modifyDate;
+
+    private Boolean delFlag;
+    //模板显示顺序
+    private Integer orderindex;
+    //模板显示形式,折线、表格......
+    private String type;
+
+    public CustomMenuTemplate(){}
+
+    public CustomMenuTemplate(CustomMenuTemplate customMenuTemplate){
+        this.accountId = customMenuTemplate.getAccountId();
+        this.name = customMenuTemplate.getName();
+        this.menuType = customMenuTemplate.getMenuType();
+        this.modifyAccount = customMenuTemplate.getModifyAccount();
+        this.originalReportId = customMenuTemplate.getOriginalReportId();
+        this.createDate = new Date();
+        this.modifyDate = new Date();
+        this.delFlag = false;
+    }
+
+    public CustomMenuTemplate(CustomMenuShareTemplate customMenuShareTemplate){
+
+        this.accountId = customMenuShareTemplate.getAccountId();
+        this.name = customMenuShareTemplate.getName();
+        this.menuType = customMenuShareTemplate.getMenuType();
+        this.modifyAccount = customMenuShareTemplate.getModifyAccount();
+        this.createDate = new Date();
+        this.modifyDate = new Date();
+        this.delFlag = false;
+    }
+
+    @Id
+    @GeneratedValue
+    public Long getId() {
+        return id;
+    }
+
+    public void setId(Long id) {
+        this.id = id;
+    }
+
+    public Long getAccountId() {
+        return accountId;
+    }
+
+    public void setAccountId(Long accountId) {
+        this.accountId = accountId;
+    }
+
+    public Long getCustomMenuId() {
+        return customMenuId;
+    }
+
+    public void setCustomMenuId(Long customMenuId) {
+        this.customMenuId = customMenuId;
+    }
+
+    public String getName() {
+        return name;
+    }
+
+    public void setName(String name) {
+        this.name = name;
+    }
+
+    public String getMenuType() {
+        return menuType;
+    }
+
+    public void setMenuType(String menuType) {
+        this.menuType = menuType;
+    }
+
+    public Date getCreateDate() {
+        return createDate;
+    }
+
+    public void setCreateDate(Date createDate) {
+        this.createDate = createDate;
+    }
+
+    public Long getModifyAccount() {
+        return modifyAccount;
+    }
+
+    public void setModifyAccount(Long modifyAccount) {
+        this.modifyAccount = modifyAccount;
+    }
+
+    public Date getModifyDate() {
+        return modifyDate;
+    }
+
+    public void setModifyDate(Date modifyDate) {
+        this.modifyDate = modifyDate;
+    }
+
+    public Boolean getDelFlag() {
+        return delFlag;
+    }
+
+    public void setDelFlag(Boolean delFlag) {
+        this.delFlag = delFlag;
+    }
+
+    public Long getOriginalReportId() {
+        return originalReportId;
+    }
+
+    public void setOriginalReportId(Long originalReportId) {
+        this.originalReportId = originalReportId;
+    }
+
+    public Integer getOrderindex() {
+        return orderindex;
+    }
+
+    public void setOrderindex(Integer orderindex) {
+        this.orderindex = orderindex;
+    }
+
+    public String getType() {
+        return type;
+    }
+
+    public void setType(String type) {
+        this.type = type;
+    }
+}
diff --git a/src/main/java/com/reyun/model/DataAuth.java b/src/main/java/com/reyun/model/DataAuth.java
new file mode 100644
index 0000000..290c652
--- /dev/null
+++ b/src/main/java/com/reyun/model/DataAuth.java
@@ -0,0 +1,141 @@
+package com.reyun.model;
+
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+import javax.persistence.Transient;
+import java.util.Date;
+import java.util.List;
+
+@Entity
+public class DataAuth {
+
+	private Long id;
+	private Long account;
+	private Long app;
+	private Long campaign;
+	private String campaignCode;
+	private Long channel;
+    private Boolean allCampaign;
+    private Date modifyTime = new Date();
+    private String modifyAccount;
+    private Boolean delFlag;
+	private Boolean channelPermit;//子账号渠道权限是否放开
+    //Transient
+    private List<Long> campaignList;
+
+	public DataAuth() {
+		super();
+	}
+
+	public DataAuth(Long id, Long app, Long campaign, String campaignCode,
+			Long channel, Boolean allCampaign,Boolean channelPermit) {
+		super();
+		this.id = id;
+		this.app = app;
+		this.campaign = campaign;
+		this.campaignCode = campaignCode;
+		this.channel = channel;
+        this.allCampaign = allCampaign;
+        this.channelPermit = channelPermit;
+	}
+
+	@Id
+	@GeneratedValue
+	public Long getId() {
+		return id;
+	}
+
+	public void setId(Long id) {
+		this.id = id;
+	}
+
+	public Long getApp() {
+		return app;
+	}
+
+	public void setApp(Long app) {
+		this.app = app;
+	}
+
+	public Long getCampaign() {
+		return campaign;
+	}
+
+	public void setCampaign(Long campaign) {
+		this.campaign = campaign;
+	}
+
+	public String getCampaignCode() {
+		return campaignCode;
+	}
+
+	public void setCampaignCode(String campaignCode) {
+		this.campaignCode = campaignCode;
+	}
+
+	public Long getChannel() {
+		return channel;
+	}
+
+	public void setChannel(Long channel) {
+		this.channel = channel;
+	}
+
+	public Long getAccount() {
+		return account;
+	}
+
+	public void setAccount(Long account) {
+		this.account = account;
+	}
+
+	public Date getModifyTime() {
+		return modifyTime;
+	}
+
+	public void setModifyTime(Date modifyTime) {
+		this.modifyTime = modifyTime;
+	}
+
+	public String getModifyAccount() {
+		return modifyAccount;
+	}
+
+	public void setModifyAccount(String modifyAccount) {
+		this.modifyAccount = modifyAccount;
+	}
+
+    public Boolean getAllCampaign() {
+        return allCampaign;
+    }
+
+    public void setAllCampaign(Boolean allCampaign) {
+        this.allCampaign = allCampaign;
+    }
+
+    public Boolean getDelFlag() {
+        return delFlag;
+    }
+
+    public void setDelFlag(Boolean delFlag) {
+        this.delFlag = delFlag;
+    }
+
+	public Boolean getChannelPermit() {
+		return channelPermit;
+	}
+
+	public void setChannelPermit(Boolean channelPermit) {
+		this.channelPermit = channelPermit;
+	}
+
+	@Transient
+    public List<Long> getCampaignList() {
+        return campaignList;
+    }
+
+    public void setCampaignList(List<Long> campaignList) {
+        this.campaignList = campaignList;
+    }
+}
diff --git a/src/main/java/com/reyun/model/DataParam.java b/src/main/java/com/reyun/model/DataParam.java
new file mode 100644
index 0000000..cd42535
--- /dev/null
+++ b/src/main/java/com/reyun/model/DataParam.java
@@ -0,0 +1,54 @@
+package com.reyun.model;
+
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+
+
+@Entity
+public class DataParam {
+
+	private Long id;
+	private String dataKey;
+	private String descp;
+	private String value;
+	private String event;
+	
+	@Id
+	@GeneratedValue
+	public Long getId() {
+		return id;
+	}
+	public void setId(Long id) {
+		this.id = id;
+	}
+
+	public String getDataKey() {
+		return dataKey;
+	}
+	public void setDataKey(String dataKey) {
+		this.dataKey = dataKey;
+	}
+	public String getDescp() {
+		return descp;
+	}
+	public void setDescp(String descp) {
+		this.descp = descp;
+	}
+	public String getValue() {
+		return value;
+	}
+	public void setValue(String value) {
+		this.value = value;
+	}
+	public String getEvent() {
+		return event;
+	}
+	public void setEvent(String event) {
+		this.event = event;
+	}
+	
+	
+	
+	
+}
diff --git a/src/main/java/com/reyun/model/DemoAppointment.java b/src/main/java/com/reyun/model/DemoAppointment.java
new file mode 100644
index 0000000..bf68ec1
--- /dev/null
+++ b/src/main/java/com/reyun/model/DemoAppointment.java
@@ -0,0 +1,118 @@
+package com.reyun.model;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+import java.util.Date;
+
+/**
+ * Created by nolan on 06/06/2017.
+ * description:
+ */
+@Entity
+public class DemoAppointment {
+	@Id
+	@GeneratedValue
+	private Long id;
+	private String email;
+	@Column(nullable = false)
+	private String name;
+	@Column(nullable = false)
+	private String phone;
+	private String company;
+	private String jobTitle;
+	private String area; //所属区域
+	private String ipAddr;
+	private Date createTime; //预约时间
+	private Integer status; //审核状态(1:未认领; 2:已认领)
+	private Date confirmTime; //确认时间
+
+	public Long getId() {
+		return id;
+	}
+
+	public void setId(Long id) {
+		this.id = id;
+	}
+
+	public String getEmail() {
+		return email;
+	}
+
+	public void setEmail(String email) {
+		this.email = email;
+	}
+
+	public String getName() {
+		return name;
+	}
+
+	public void setName(String name) {
+		this.name = name;
+	}
+
+	public String getPhone() {
+		return phone;
+	}
+
+	public void setPhone(String phone) {
+		this.phone = phone;
+	}
+
+	public String getCompany() {
+		return company;
+	}
+
+	public void setCompany(String company) {
+		this.company = company;
+	}
+
+	public String getJobTitle() {
+		return jobTitle;
+	}
+
+	public void setJobTitle(String jobTitle) {
+		this.jobTitle = jobTitle;
+	}
+
+	public String getArea() {
+		return area;
+	}
+
+	public void setArea(String area) {
+		this.area = area;
+	}
+
+	public String getIpAddr() {
+		return ipAddr;
+	}
+
+	public void setIpAddr(String ipAddr) {
+		this.ipAddr = ipAddr;
+	}
+
+	public Date getCreateTime() {
+		return createTime;
+	}
+
+	public void setCreateTime(Date createTime) {
+		this.createTime = createTime;
+	}
+
+	public Integer getStatus() {
+		return status;
+	}
+
+	public void setStatus(Integer status) {
+		this.status = status;
+	}
+
+	public Date getConfirmTime() {
+		return confirmTime;
+	}
+
+	public void setConfirmTime(Date confirmTime) {
+		this.confirmTime = confirmTime;
+	}
+}
diff --git a/src/main/java/com/reyun/model/Dimension4Web.java b/src/main/java/com/reyun/model/Dimension4Web.java
new file mode 100644
index 0000000..fbc9ef5
--- /dev/null
+++ b/src/main/java/com/reyun/model/Dimension4Web.java
@@ -0,0 +1,90 @@
+package com.reyun.model;
+
+import java.util.List;
+
+/**
+ * Created by sunhao on 17/4/19.
+ * description:分类维度页面显示
+ */
+public class Dimension4Web {
+
+    private String id;
+
+    private String dimensionType;
+
+    private String name;
+
+    private String type;
+
+    private List<?> key;
+
+    private List<?> value;
+
+    private String eventType;
+
+    private int sortId;
+
+    public String getEventType() {
+        return eventType;
+    }
+
+    public void setEventType(String eventType) {
+        this.eventType = eventType;
+    }
+
+    public int getSortId() {
+        return sortId;
+    }
+
+    public void setSortId(int sortId) {
+        this.sortId = sortId;
+    }
+
+    public String getId() {
+        return id;
+    }
+
+    public void setId(String id) {
+        this.id = id;
+    }
+
+    public String getDimensionType() {
+        return dimensionType;
+    }
+
+    public void setDimensionType(String dimensionType) {
+        this.dimensionType = dimensionType;
+    }
+
+    public String getName() {
+        return name;
+    }
+
+    public void setName(String name) {
+        this.name = name;
+    }
+
+    public String getType() {
+        return type;
+    }
+
+    public void setType(String type) {
+        this.type = type;
+    }
+
+    public List<?> getKey() {
+        return key;
+    }
+
+    public void setKey(List<?> key) {
+        this.key = key;
+    }
+
+    public List<?> getValue() {
+        return value;
+    }
+
+    public void setValue(List<?> value) {
+        this.value = value;
+    }
+}
diff --git a/src/main/java/com/reyun/model/EditionPricingLevel4Web.java b/src/main/java/com/reyun/model/EditionPricingLevel4Web.java
new file mode 100644
index 0000000..5ea94eb
--- /dev/null
+++ b/src/main/java/com/reyun/model/EditionPricingLevel4Web.java
@@ -0,0 +1,97 @@
+package com.reyun.model;
+
+
+import java.util.Map;
+
+/**
+ * Created by nolan on 13/03/2017.
+ * description:
+ */
+public class EditionPricingLevel4Web {
+
+	/**
+	 * 数据量
+	 **/
+	private Integer appNum;            //创建应用数
+	private Integer dataConversionFunnelNum;    // 转化漏斗数
+	private Integer dataUserGroupNum;            //用户分群数
+	
+	private Boolean funcMngRealtimeCallback;//推广实时回调
+
+
+	/**
+	 * 平台功能
+	 *
+	 * @return
+	 */
+	private Boolean platformExport;//数据导出
+	private Boolean platformServiceSupport; //7*24小时客户服务
+
+    //AB test处理
+    private Map<String,Boolean> abTest;
+	
+
+
+	public EditionPricingLevel4Web(PackageType level) {
+		this.appNum = level.getAppNum();
+		this.dataConversionFunnelNum = level.getDataConversionFunnelNum();
+		this.dataUserGroupNum = level.getDataUserGroupNum();
+
+		this.funcMngRealtimeCallback = level.getFuncMngRealtimeCallback();
+		this.platformExport = level.getPlatformExport();
+		this.platformServiceSupport = level.getPlatformServiceSupport();
+	}
+
+	public Integer getAppNum() {
+		return appNum;
+	}
+
+	public void setAppNum(Integer appNum) {
+		this.appNum = appNum;
+	}
+
+	public Integer getDataConversionFunnelNum() {
+		return dataConversionFunnelNum;
+	}
+	public void setDataConversionFunnelNum(Integer dataConversionFunnelNum) {
+		this.dataConversionFunnelNum = dataConversionFunnelNum;
+	}
+	public Integer getDataUserGroupNum() {
+		return dataUserGroupNum;
+	}
+	public void setDataUserGroupNum(Integer dataUserGroupNum) {
+		this.dataUserGroupNum = dataUserGroupNum;
+	}
+
+	public Boolean getFuncMngRealtimeCallback() {
+		return funcMngRealtimeCallback;
+	}
+
+	public void setFuncMngRealtimeCallback(Boolean funcMngRealtimeCallback) {
+		this.funcMngRealtimeCallback = funcMngRealtimeCallback;
+	}
+
+	public Boolean getPlatformExport() {
+		return platformExport;
+	}
+
+	public void setPlatformExport(Boolean platformExport) {
+		this.platformExport = platformExport;
+	}
+
+	public Boolean getPlatformServiceSupport() {
+		return platformServiceSupport;
+	}
+
+	public void setPlatformServiceSupport(Boolean platformServiceSupport) {
+		this.platformServiceSupport = platformServiceSupport;
+	}
+
+    public Map<String, Boolean> getAbTest() {
+        return abTest;
+    }
+
+    public void setAbTest(Map<String, Boolean> abTest) {
+        this.abTest = abTest;
+    }
+}
diff --git a/src/main/java/com/reyun/model/Email.java b/src/main/java/com/reyun/model/Email.java
new file mode 100644
index 0000000..70d97ac
--- /dev/null
+++ b/src/main/java/com/reyun/model/Email.java
@@ -0,0 +1,42 @@
+package com.reyun.model;
+
+import java.util.List;
+
+public class Email {
+	private boolean isHaveMultPaths;
+	private String subject;
+	private String contents;
+	private List<String> userEmailAddress;
+	private String[] multiPaths;
+	public boolean isHaveMultPaths() {
+		return isHaveMultPaths;
+	}
+	public void setHaveMultPaths(boolean isHaveMultPaths) {
+		this.isHaveMultPaths = isHaveMultPaths;
+	}
+	public String getSubject() {
+		return subject;
+	}
+	public void setSubject(String subject) {
+		this.subject = subject;
+	}
+	public String getContents() {
+		return contents;
+	}
+	public void setContents(String contents) {
+		this.contents = contents;
+	}
+	public List<String> getUserEmailAddress() {
+		return userEmailAddress;
+	}
+	public void setUserEmailAddress(List<String> userEmailAddress) {
+		this.userEmailAddress = userEmailAddress;
+	}
+	public String[] getMultiPaths() {
+		return multiPaths;
+	}
+	public void setMultiPaths(String[] multiPaths) {
+		this.multiPaths = multiPaths;
+	}
+	
+}
diff --git a/src/main/java/com/reyun/model/Event.java b/src/main/java/com/reyun/model/Event.java
new file mode 100644
index 0000000..690412d
--- /dev/null
+++ b/src/main/java/com/reyun/model/Event.java
@@ -0,0 +1,74 @@
+package com.reyun.model;
+
+import javax.persistence.Entity;
+import javax.persistence.Id;
+import javax.persistence.IdClass;
+import javax.persistence.Table;
+
+@Entity
+@Table(name = "event_source")
+@IdClass(EventMapPK.class)
+public class Event {
+
+	// 事件名
+	@Id
+	private String eventName;
+	// 事件属性
+	@Id
+	private String eventAttr;
+	private String dataType;
+	private boolean common;
+	@Id
+	private String appkey;
+
+	public String getEventName() {
+		return eventName;
+	}
+
+	public void setEventName(String eventName) {
+		this.eventName = eventName;
+	}
+
+	public String getEventAttr() {
+		return eventAttr;
+	}
+
+	public void setEventAttr(String eventAttr) {
+		this.eventAttr = eventAttr;
+	}
+
+	public String getDataType() {
+		return dataType;
+	}
+
+	public void setDataType(String dataType) {
+		this.dataType = dataType;
+	}
+
+	public boolean isCommon() {
+		return common;
+	}
+
+	public void setCommon(boolean common) {
+		this.common = common;
+	}
+
+	public String getAppkey() {
+		return appkey;
+	}
+
+	public void setAppkey(String appkey) {
+		this.appkey = appkey;
+	}
+
+	@Override
+	public String toString() {
+		return "Event{" +
+				"eventName='" + eventName + '\'' +
+				", eventAttr='" + eventAttr + '\'' +
+				", dataType='" + dataType + '\'' +
+				", common=" + common +
+				", appkey='" + appkey + '\'' +
+				'}';
+	}
+}
diff --git a/src/main/java/com/reyun/model/Event4Web.java b/src/main/java/com/reyun/model/Event4Web.java
new file mode 100644
index 0000000..dcdd327
--- /dev/null
+++ b/src/main/java/com/reyun/model/Event4Web.java
@@ -0,0 +1,116 @@
+package com.reyun.model;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * Created by sunhao on 17/4/19.
+ * description:事件页面展示model
+ */
+public class Event4Web {
+
+    private String eventName;
+    private String eventNameAlias;
+    private long eventNumber;
+    private List<EventAttr4Web> firstLevelAttr;
+    private List<EventAttr4Web> secondLevelAttr;
+    private List<EventAttr4Web> profiles;
+    private Map<String, EventAttr4Web> eventAttr4WebMap;
+    private Boolean isCommon;
+    private Boolean status;
+    private Boolean isVirtual;
+
+    public Boolean getVirtual() {
+        return isVirtual;
+    }
+
+    public void setVirtual(Boolean virtual) {
+        isVirtual = virtual;
+    }
+
+    public String getEventName() {
+        return eventName;
+    }
+
+    public void setEventName(String eventName) {
+        this.eventName = eventName;
+    }
+
+    public String getEventNameAlias() {
+        return eventNameAlias;
+    }
+
+    public void setEventNameAlias(String eventNameAlias) {
+        this.eventNameAlias = eventNameAlias;
+    }
+
+    public long getEventNumber() {
+        return eventNumber;
+    }
+
+    public void setEventNumber(long eventNumber) {
+        this.eventNumber = eventNumber;
+    }
+
+    public List<EventAttr4Web> getFirstLevelAttr() {
+        return firstLevelAttr;
+    }
+
+    public void setFirstLevelAttr(List<EventAttr4Web> firstLevelAttr) {
+        this.firstLevelAttr = firstLevelAttr;
+    }
+
+    public List<EventAttr4Web> getSecondLevelAttr() {
+        return secondLevelAttr;
+    }
+
+    public void setSecondLevelAttr(List<EventAttr4Web> secondLevelAttr) {
+        this.secondLevelAttr = secondLevelAttr;
+    }
+
+    public List<EventAttr4Web> getProfiles() {
+        return profiles;
+    }
+
+    public void setProfiles(List<EventAttr4Web> profiles) {
+        this.profiles = profiles;
+    }
+
+    public Map<String, EventAttr4Web> getEventAttr4WebMap() {
+        return eventAttr4WebMap;
+    }
+
+    public void setEventAttr4WebMap(Map<String, EventAttr4Web> eventAttr4WebMap) {
+        this.eventAttr4WebMap = eventAttr4WebMap;
+    }
+
+    public Boolean getCommon() {
+        return isCommon;
+    }
+
+    public void setCommon(Boolean common) {
+        isCommon = common;
+    }
+
+    public Boolean getStatus() {
+        return status;
+    }
+
+    public void setStatus(Boolean status) {
+        this.status = status;
+    }
+
+    @Override
+    public String toString() {
+        return "{" +
+                "eventName='" + eventName + '\'' +
+                ", eventNameAlias='" + eventNameAlias + '\'' +
+                ", firstLevelAttr=" + firstLevelAttr +
+                ", secondLevelAttr=" + secondLevelAttr +
+                ", profiles=" + profiles +
+                ", eventAttr4WebMap=" + eventAttr4WebMap +
+                ", isCommon=" + isCommon +
+                ", status=" + status +
+                '}';
+    }
+}
diff --git a/src/main/java/com/reyun/model/EventAttr4Web.java b/src/main/java/com/reyun/model/EventAttr4Web.java
new file mode 100644
index 0000000..d1cbb89
--- /dev/null
+++ b/src/main/java/com/reyun/model/EventAttr4Web.java
@@ -0,0 +1,147 @@
+package com.reyun.model;
+
+import java.util.List;
+
+/**
+ * Created by sunhao on 17/4/19.
+ * description:事件属性页面展示model
+ */
+public class EventAttr4Web {
+
+    private String attr;
+    private String attrAlias;
+    private String dataType;
+    private String data;
+    private String webType;
+    private String type;
+    private int sortId;
+    private List<?> key;
+    private List<?> value;
+    private Boolean isCommon;
+    private Boolean status;
+    private Boolean addStatsCondition;
+    private Boolean addStatsView;
+
+
+    public String getAttr() {
+        return attr;
+    }
+
+    public void setAttr(String attr) {
+        this.attr = attr;
+    }
+
+    public String getAttrAlias() {
+        return attrAlias;
+    }
+
+    public void setAttrAlias(String attrAlias) {
+        this.attrAlias = attrAlias;
+    }
+
+    public String getDataType() {
+        return dataType;
+    }
+
+    public void setDataType(String dataType) {
+        this.dataType = dataType;
+    }
+
+    public String getData() {
+        return data;
+    }
+
+    public void setData(String data) {
+        this.data = data;
+    }
+
+    public String getWebType() {
+        return webType;
+    }
+
+    public void setWebType(String webType) {
+        this.webType = webType;
+    }
+
+    public String getType() {
+        return type;
+    }
+
+    public void setType(String type) {
+        this.type = type;
+    }
+
+    public int getSortId() {
+        return sortId;
+    }
+
+    public void setSortId(int sortId) {
+        this.sortId = sortId;
+    }
+
+    public List<?> getKey() {
+        return key;
+    }
+
+    public void setKey(List<?> key) {
+        this.key = key;
+    }
+
+    public List<?> getValue() {
+        return value;
+    }
+
+    public void setValue(List<?> value) {
+        this.value = value;
+    }
+
+    public Boolean getCommon() {
+        return isCommon;
+    }
+
+    public void setCommon(Boolean common) {
+        isCommon = common;
+    }
+
+    public Boolean getStatus() {
+        return status;
+    }
+
+    public void setStatus(Boolean status) {
+        this.status = status;
+    }
+
+    public Boolean getAddStatsCondition() {
+        return addStatsCondition;
+    }
+
+    public void setAddStatsCondition(Boolean addStatsCondition) {
+        this.addStatsCondition = addStatsCondition;
+    }
+
+    public Boolean getAddStatsView() {
+        return addStatsView;
+    }
+
+    public void setAddStatsView(Boolean addStatsView) {
+        this.addStatsView = addStatsView;
+    }
+
+    @Override
+    public String toString() {
+        return "{" +
+                "attr='" + attr + '\'' +
+                ", attrAlias='" + attrAlias + '\'' +
+                ", dataType='" + dataType + '\'' +
+                ", webType='" + webType + '\'' +
+                ", type='" + type + '\'' +
+                ", sortId=" + sortId +
+                ", key=" + key +
+                ", value=" + value +
+                ", isCommon=" + isCommon +
+                ", status=" + status +
+                ", addStatsCondition=" + addStatsCondition +
+                ", addStatsView=" + addStatsView +
+                '}';
+    }
+}
diff --git a/src/main/java/com/reyun/model/EventAttributeMeta.java b/src/main/java/com/reyun/model/EventAttributeMeta.java
new file mode 100644
index 0000000..08339df
--- /dev/null
+++ b/src/main/java/com/reyun/model/EventAttributeMeta.java
@@ -0,0 +1,115 @@
+package com.reyun.model;
+
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+import java.util.Date;
+
+@Entity
+public class EventAttributeMeta {
+
+	private Long id;
+	// 属性名
+	private String attribute;
+	// 备用名
+	private String alias;
+	private Boolean status;
+	private Boolean addStatsCondition;
+	private Boolean addStatsView;
+	private String appkey;
+
+	private Long modifyAccount;
+	private Date modifyTime;
+
+
+
+	@Id
+	@GeneratedValue
+	public Long getId() {
+		return id;
+	}
+
+	public void setId(Long id) {
+		this.id = id;
+	}
+
+
+	public String getAlias() {
+		return alias;
+	}
+
+	public void setAlias(String alias) {
+		this.alias = alias;
+	}
+
+	public Boolean getStatus() {
+		return status;
+	}
+
+	public void setStatus(Boolean status) {
+		this.status = status;
+	}
+
+	public Long getModifyAccount() {
+		return modifyAccount;
+	}
+
+	public void setModifyAccount(Long modifyAccount) {
+		this.modifyAccount = modifyAccount;
+	}
+
+	public Date getModifyTime() {
+		return modifyTime;
+	}
+
+	public void setModifyTime(Date modifyTime) {
+		this.modifyTime = modifyTime;
+	}
+
+	public String getAppkey() {
+		return appkey;
+	}
+
+	public void setAppkey(String appkey) {
+		this.appkey = appkey;
+	}
+
+	public String getAttribute() {
+		return attribute;
+	}
+
+	public void setAttribute(String attribute) {
+		this.attribute = attribute;
+	}
+
+	public Boolean getAddStatsCondition() {
+		return addStatsCondition;
+	}
+
+	public void setAddStatsCondition(Boolean addStatsCondition) {
+		this.addStatsCondition = addStatsCondition;
+	}
+
+	public Boolean getAddStatsView() {
+		return addStatsView;
+	}
+
+	public void setAddStatsView(Boolean addStatsView) {
+		this.addStatsView = addStatsView;
+	}
+
+	@Override
+	public String toString() {
+		return "EventAttributeMeta{" +
+				"id=" + id +
+				", attribute='" + attribute + '\'' +
+				", alias='" + alias + '\'' +
+				", status=" + status +
+				", addStatsCondition=" + addStatsCondition +
+				", addStatsView=" + addStatsView +
+				", appkey='" + appkey + '\'' +
+				", modifyAccount=" + modifyAccount +
+				", modifyTime=" + modifyTime +
+				'}';
+	}
+}
diff --git a/src/main/java/com/reyun/model/EventMapPK.java b/src/main/java/com/reyun/model/EventMapPK.java
new file mode 100644
index 0000000..bbb332d
--- /dev/null
+++ b/src/main/java/com/reyun/model/EventMapPK.java
@@ -0,0 +1,38 @@
+package com.reyun.model;
+
+import java.io.Serializable;
+
+/**
+ * Created by admin on 2017/6/14.
+ */
+public class EventMapPK implements Serializable {
+    // 事件名
+    private String eventName;
+    // 事件属性
+    private String eventAttr;
+    private String appkey;
+
+    public String getEventName() {
+        return eventName;
+    }
+
+    public void setEventName(String eventName) {
+        this.eventName = eventName;
+    }
+
+    public String getEventAttr() {
+        return eventAttr;
+    }
+
+    public void setEventAttr(String eventAttr) {
+        this.eventAttr = eventAttr;
+    }
+
+    public String getAppkey() {
+        return appkey;
+    }
+
+    public void setAppkey(String appkey) {
+        this.appkey = appkey;
+    }
+}
diff --git a/src/main/java/com/reyun/model/EventMeta.java b/src/main/java/com/reyun/model/EventMeta.java
new file mode 100644
index 0000000..bc4b5e6
--- /dev/null
+++ b/src/main/java/com/reyun/model/EventMeta.java
@@ -0,0 +1,83 @@
+package com.reyun.model;
+
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+import java.util.Date;
+
+@Entity
+public class EventMeta {
+
+	private Long id;
+	// 事件名
+	private String eventId;
+	// 事件名备用名
+	private String alias;
+	private Boolean status;
+	private String appkey;
+
+	private Long modifyAccount;
+	private Date modifyTime;
+
+
+
+	@Id
+	@GeneratedValue
+	public Long getId() {
+		return id;
+	}
+
+	public void setId(Long id) {
+		this.id = id;
+	}
+
+	public String getEventId() {
+		return eventId;
+	}
+
+	public void setEventId(String eventId) {
+		this.eventId = eventId;
+	}
+
+	public String getAlias() {
+		return alias;
+	}
+
+	public void setAlias(String alias) {
+		this.alias = alias;
+	}
+
+	public Boolean getStatus() {
+		return status;
+	}
+
+	public void setStatus(Boolean status) {
+		this.status = status;
+	}
+
+	public Long getModifyAccount() {
+		return modifyAccount;
+	}
+
+	public void setModifyAccount(Long modifyAccount) {
+		this.modifyAccount = modifyAccount;
+	}
+
+	public Date getModifyTime() {
+		return modifyTime;
+	}
+
+	public void setModifyTime(Date modifyTime) {
+		this.modifyTime = modifyTime;
+	}
+
+	public String getAppkey() {
+		return appkey;
+	}
+
+	public void setAppkey(String appkey) {
+		this.appkey = appkey;
+	}
+
+
+}
diff --git a/src/main/java/com/reyun/model/EventStats.java b/src/main/java/com/reyun/model/EventStats.java
new file mode 100644
index 0000000..e7a8ac0
--- /dev/null
+++ b/src/main/java/com/reyun/model/EventStats.java
@@ -0,0 +1,147 @@
+package com.reyun.model;
+
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+import java.util.Date;
+
+/**
+ * Created by sunhao on 17/4/10.
+ * description: 事件分析
+ */
+@Entity
+public class EventStats {
+
+    private Long id;
+
+    private Long app;
+
+    private Long createAccount;
+
+    private Date createTime;
+
+    private Long modifyAccount;
+
+    private Date modifyTime;
+    //事件分析名称
+    private String name;
+    //事件名称
+    private String eventName;
+    //事件别名
+    private String eventAlias;
+    //事件属性条件
+    private String eventCondition;
+    //查询sql
+    private String querySql;
+    //是否有效
+    private Boolean valid;
+
+    //是否是复杂事件
+    private Boolean complicatedEvents;
+
+    @Id
+    @GeneratedValue
+    public Long getId() {
+        return id;
+    }
+
+    public void setId(Long id) {
+        this.id = id;
+    }
+
+    public Long getApp() {
+        return app;
+    }
+
+    public void setApp(Long app) {
+        this.app = app;
+    }
+
+    public Long getCreateAccount() {
+        return createAccount;
+    }
+
+    public void setCreateAccount(Long createAccount) {
+        this.createAccount = createAccount;
+    }
+
+    public Date getCreateTime() {
+        return createTime;
+    }
+
+    public void setCreateTime(Date createTime) {
+        this.createTime = createTime;
+    }
+
+    public Long getModifyAccount() {
+        return modifyAccount;
+    }
+
+    public void setModifyAccount(Long modifyAccount) {
+        this.modifyAccount = modifyAccount;
+    }
+
+    public Date getModifyTime() {
+        return modifyTime;
+    }
+
+    public void setModifyTime(Date modifyTime) {
+        this.modifyTime = modifyTime;
+    }
+
+    public String getName() {
+        return name;
+    }
+
+    public void setName(String name) {
+        this.name = name;
+    }
+
+    public String getEventAlias() {
+        return eventAlias;
+    }
+
+    public void setEventAlias(String eventAlias) {
+        this.eventAlias = eventAlias;
+    }
+
+    public String getEventName() {
+        return eventName;
+    }
+
+    public void setEventName(String eventName) {
+        this.eventName = eventName;
+    }
+
+    public String getEventCondition() {
+        return eventCondition;
+    }
+
+    public void setEventCondition(String eventCondition) {
+        this.eventCondition = eventCondition;
+    }
+
+    public String getQuerySql() {
+        return querySql;
+    }
+
+    public void setQuerySql(String querySql) {
+        this.querySql = querySql;
+    }
+
+    public Boolean getValid() {
+        return valid;
+    }
+
+    public void setValid(Boolean valid) {
+        this.valid = valid;
+    }
+
+    public Boolean getComplicatedEvents() {
+        return complicatedEvents;
+    }
+
+    public void setComplicatedEvents(Boolean complicatedEvents) {
+        this.complicatedEvents = complicatedEvents;
+    }
+}
diff --git a/src/main/java/com/reyun/model/EventViewAttr.java b/src/main/java/com/reyun/model/EventViewAttr.java
new file mode 100644
index 0000000..bdce3ec
--- /dev/null
+++ b/src/main/java/com/reyun/model/EventViewAttr.java
@@ -0,0 +1,106 @@
+package com.reyun.model;
+
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+import javax.persistence.Transient;
+import javax.validation.constraints.NotNull;
+import java.util.List;
+
+/**
+ * Created by sunhao on 17/4/11.
+ * desc:事件分析展示属性
+ */
+@Entity
+public class EventViewAttr {
+
+    private Long id;
+
+    //属性名
+    private String viewAttr;
+
+    //属性中文名称
+    private String viewAttrName;
+
+    //属性类型 avg sum
+    private String attrType;
+
+    //属性级别 1,2
+    private Integer attrLevel;
+
+    //有效性
+    private Boolean valid;
+
+    // view出现在哪个类型前面
+    private String viewType;
+
+
+
+    public EventViewAttr(){}
+
+    public EventViewAttr(String viewAttr, String viewAttrName) {
+        this.viewAttr = viewAttr;
+        this.viewAttrName = viewAttrName;
+    }
+
+
+
+    @Id
+    @GeneratedValue
+    public Long getId() {
+        return id;
+    }
+
+    public void setId(Long id) {
+        this.id = id;
+    }
+
+    public String getViewAttr() {
+        return viewAttr;
+    }
+
+    public void setViewAttr(String viewAttr) {
+        this.viewAttr = viewAttr;
+    }
+
+    public String getViewAttrName() {
+        return viewAttrName;
+    }
+
+    public void setViewAttrName(String viewAttrName) {
+        this.viewAttrName = viewAttrName;
+    }
+
+    public String getAttrType() {
+        return attrType;
+    }
+
+    public void setAttrType(String attrType) {
+        this.attrType = attrType;
+    }
+
+    public Integer getAttrLevel() {
+        return attrLevel;
+    }
+
+    public void setAttrLevel(Integer attrLevel) {
+        this.attrLevel = attrLevel;
+    }
+
+    @NotNull
+    public Boolean getValid() {
+        return valid;
+    }
+
+    public void setValid(Boolean valid) {
+        this.valid = valid;
+    }
+
+    public String getViewType() {
+        return viewType;
+    }
+
+    public void setViewType(String viewType) {
+        this.viewType = viewType;
+    }
+}
diff --git a/src/main/java/com/reyun/model/EventtableMetadata.java b/src/main/java/com/reyun/model/EventtableMetadata.java
new file mode 100644
index 0000000..c64393d
--- /dev/null
+++ b/src/main/java/com/reyun/model/EventtableMetadata.java
@@ -0,0 +1,66 @@
+package com.reyun.model;
+
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+
+@Entity
+public class EventtableMetadata {
+
+	private Long id;
+	// 授权处显示的名字
+	private String appkey;
+	
+	private String ds;
+	
+	private String bucketid;
+	
+	private String event;
+
+	public EventtableMetadata() {
+		super();
+	}
+
+	@Id
+	@GeneratedValue
+	public Long getId() {
+		return id;
+	}
+
+	public void setId(Long id) {
+		this.id = id;
+	}
+
+	public String getAppkey() {
+		return appkey;
+	}
+
+	public void setAppkey(String appkey) {
+		this.appkey = appkey;
+	}
+
+	public String getDs() {
+		return ds;
+	}
+
+	public void setDs(String ds) {
+		this.ds = ds;
+	}
+
+	public String getBucketid() {
+		return bucketid;
+	}
+
+	public void setBucketid(String bucketid) {
+		this.bucketid = bucketid;
+	}
+
+	public String getEvent() {
+		return event;
+	}
+
+	public void setEvent(String event) {
+		this.event = event;
+	}
+	
+}
diff --git a/src/main/java/com/reyun/model/ExportReportInfo.java b/src/main/java/com/reyun/model/ExportReportInfo.java
new file mode 100644
index 0000000..f946fc7
--- /dev/null
+++ b/src/main/java/com/reyun/model/ExportReportInfo.java
@@ -0,0 +1,193 @@
+package com.reyun.model;
+
+import java.util.Date;
+
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+import javax.persistence.Table;
+
+
+@Entity
+@Table(name="export_report_info")
+public class ExportReportInfo {
+
+	private Long id;
+	private Long app;
+    private String name;
+	private String startDate;
+	private String endDate;
+	private String reportName;
+    private String subType;
+	private String fileName;
+	private Date createTime = new Date();
+	private Long account;
+    private String accountName;
+	private Date modifyTime = new Date();
+	private Long modifyAccount;
+	private String reportType;
+	private String conditions;
+	//INIT("init", "等待下载"),
+    //DOWNLOADING("downloading", "正在下载"),
+    //COMPLETE("complete", "下载完成"),
+    //FAILED("failed", "下载失败");
+	private String status;
+	private String functionType;
+	private Long functionId;
+    //下载人信息
+    private Long downloadAccount;
+    private String downloadName;
+    private Date downloadTime;
+    private String downloadIp;
+	
+	@Id
+	@GeneratedValue
+	public Long getId() {
+		return id;
+	}
+	public void setId(Long id) {
+		this.id = id;
+	}
+	public Long getApp() {
+		return app;
+	}
+	public void setApp(Long app) {
+		this.app = app;
+	}
+
+    public String getName() {
+        return name;
+    }
+
+    public void setName(String name) {
+        this.name = name;
+    }
+
+    public String getReportName() {
+		return reportName;
+	}
+	public void setReportName(String reportName) {
+		this.reportName = reportName;
+	}
+	public Date getCreateTime() {
+		return createTime;
+	}
+	public void setCreateTime(Date createTime) {
+		this.createTime = createTime;
+	}
+	public Long getAccount() {
+		return account;
+	}
+	public void setAccount(Long account) {
+		this.account = account;
+	}
+
+    public String getAccountName() {
+        return accountName;
+    }
+
+    public void setAccountName(String accountName) {
+        this.accountName = accountName;
+    }
+
+    public String getSubType() {
+        return subType;
+    }
+
+    public void setSubType(String subType) {
+        this.subType = subType;
+    }
+
+    public Date getModifyTime() {
+		return modifyTime;
+	}
+	public void setModifyTime(Date modifyTime) {
+		this.modifyTime = modifyTime;
+	}
+	public Long getModifyAccount() {
+		return modifyAccount;
+	}
+	public void setModifyAccount(Long modifyAccount) {
+		this.modifyAccount = modifyAccount;
+	}
+	public String getStatus() {
+		return status;
+	}
+	public void setStatus(String status) {
+		this.status = status;
+	}
+	public String getFileName() {
+		return fileName;
+	}
+	public void setFileName(String fileName) {
+		this.fileName = fileName;
+	}
+	public String getStartDate() {
+		return startDate;
+	}
+	public void setStartDate(String startDate) {
+		this.startDate = startDate;
+	}
+	public String getEndDate() {
+		return endDate;
+	}
+	public void setEndDate(String endDate) {
+		this.endDate = endDate;
+	}
+	public String getReportType() {
+		return reportType;
+	}
+	public void setReportType(String reportType) {
+		this.reportType = reportType;
+	}
+	public String getConditions() {
+		return conditions;
+	}
+	public void setConditions(String conditions) {
+		this.conditions = conditions;
+	}
+	public String getFunctionType() {
+		return functionType;
+	}
+	public void setFunctionType(String functionType) {
+		this.functionType = functionType;
+	}
+	public Long getFunctionId() {
+		return functionId;
+	}
+	public void setFunctionId(Long functionId) {
+		this.functionId = functionId;
+	}
+
+    public Long getDownloadAccount() {
+        return downloadAccount;
+    }
+
+    public void setDownloadAccount(Long downloadAccount) {
+        this.downloadAccount = downloadAccount;
+    }
+
+    public String getDownloadName() {
+        return downloadName;
+    }
+
+    public void setDownloadName(String downloadName) {
+        this.downloadName = downloadName;
+    }
+
+    public Date getDownloadTime() {
+        return downloadTime;
+    }
+
+    public void setDownloadTime(Date downloadTime) {
+        this.downloadTime = downloadTime;
+    }
+
+    public String getDownloadIp() {
+        return downloadIp;
+    }
+
+    public void setDownloadIp(String downloadIp) {
+        this.downloadIp = downloadIp;
+    }
+}
diff --git a/src/main/java/com/reyun/model/Funnel.java b/src/main/java/com/reyun/model/Funnel.java
new file mode 100644
index 0000000..bcf8223
--- /dev/null
+++ b/src/main/java/com/reyun/model/Funnel.java
@@ -0,0 +1,156 @@
+package com.reyun.model;
+
+import java.util.Date;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+import javax.persistence.Transient;
+
+@Entity
+public class Funnel {
+
+	private Long id;
+	private Long account;
+	private Long app;
+	private String name;
+	private String eventInfo;
+	private String querySql;
+	private int window;
+	private String events;
+
+	private Long createAccount;
+	private Date createTime = new Date();
+	private Date modifyTime = new Date();
+	private Long modifyAccount;
+	private Boolean delFlag;
+
+	private String cAccount;
+	private String mAcoucnt;
+
+	@Id
+	@GeneratedValue
+	public Long getId() {
+		return id;
+	}
+
+	public void setId(Long id) {
+		this.id = id;
+	}
+
+	public Long getAccount() {
+		return account;
+	}
+
+	public void setAccount(Long account) {
+		this.account = account;
+	}
+
+	public Long getApp() {
+		return app;
+	}
+
+	public void setApp(Long app) {
+		this.app = app;
+	}
+
+	public String getName() {
+		return name;
+	}
+
+	public void setName(String name) {
+		this.name = name;
+	}
+
+	public String getEventInfo() {
+		return eventInfo;
+	}
+
+	public void setEventInfo(String eventInfo) {
+		this.eventInfo = eventInfo;
+	}
+
+	public String getQuerySql() {
+		return querySql;
+	}
+
+	public void setQuerySql(String querySql) {
+		this.querySql = querySql;
+	}
+
+	public int getWindow() {
+		return window;
+	}
+
+	public void setWindow(int window) {
+		this.window = window;
+	}
+
+	public Long getCreateAccount() {
+		return createAccount;
+	}
+
+	public void setCreateAccount(Long createAccount) {
+		this.createAccount = createAccount;
+	}
+
+	public Date getCreateTime() {
+		return createTime;
+	}
+
+	public void setCreateTime(Date createTime) {
+		this.createTime = createTime;
+	}
+
+	public Date getModifyTime() {
+		return modifyTime;
+	}
+
+	public void setModifyTime(Date modifyTime) {
+		this.modifyTime = modifyTime;
+	}
+
+	public Long getModifyAccount() {
+		return modifyAccount;
+	}
+
+	public void setModifyAccount(Long modifyAccount) {
+		this.modifyAccount = modifyAccount;
+	}
+
+	public Boolean getDelFlag() {
+		return delFlag;
+	}
+
+	public void setDelFlag(Boolean delFlag) {
+		this.delFlag = delFlag;
+	}
+
+	public String getEvents() {
+		return events;
+	}
+
+	public void setEvents(String events) {
+		this.events = events;
+	}
+
+	@Transient
+	@Column(name="cAccount" )
+	public String getcAccount() {
+		return cAccount;
+	}
+
+	public void setcAccount(String cAccount) {
+		this.cAccount = cAccount;
+	}
+
+	@Transient
+	public String getmAcoucnt() {
+		return mAcoucnt;
+	}
+
+	public void setmAcoucnt(String mAcoucnt) {
+		this.mAcoucnt = mAcoucnt;
+	}
+}
diff --git a/src/main/java/com/reyun/repository/AccountRepository.java b/src/main/java/com/reyun/repository/AccountRepository.java
new file mode 100644
index 0000000..9717263
--- /dev/null
+++ b/src/main/java/com/reyun/repository/AccountRepository.java
@@ -0,0 +1,107 @@
+package com.reyun.repository;
+
+import com.reyun.model.Account;
+import org.springframework.data.jpa.repository.JpaRepository;
+import org.springframework.data.jpa.repository.Modifying;
+import org.springframework.data.jpa.repository.Query;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.math.BigInteger;
+import java.util.Date;
+import java.util.List;
+
+@Transactional
+public interface AccountRepository extends JpaRepository<Account, Long> {
+
+    @Query(value = "select * from account where id in  (select distinct account  from auth where app = ?1 and status is true) " +
+            " and id in (select distinct account from data_auth where app=?1 and all_campaign is false)" +
+            " and del_flag is not true and status = 1 and (past_date is null or past_date >= ?2) ", nativeQuery = true)
+    List<Account> findAuthorizedSubAndChannelAccount(Long appId, String currentDate);
+
+    @Query(value = "select * from account where email = ?1", nativeQuery = true)
+    Account findAccountByEmail(String email);
+
+    @Query(value = "select * from account where parent = ?1 and status = 1 order by create_time desc", nativeQuery = true)
+    List<Account> findAccountByParent(Long parent);
+
+    @Query(value = "select * from account where parent = ?1 and id <> ?1 and is_channel_person is not true and status in (1,-3) order by modify_time desc", nativeQuery = true)
+    List<Account> findActiveByParent(Long accountId);
+
+    @Query(value = "select * from account where root_parent = ?1 and id <> ?1 and is_channel_person is not true and status in (1,-3) order by modify_time desc", nativeQuery = true)
+    List<Account> findActiveByRoot(Long accountId);
+
+    @Query(value = "select * from account where root_parent = ?1 and id <> ?1 and id <> ?2 and is_channel_person is not true and status in (1,-3) order by modify_time desc", nativeQuery = true)
+    List<Account> findActiveByRootExcludeSelf(Long rootParentId, Long accountId);
+
+    @Query(value = "select * from account where parent = ?1 and id <> ?1 and is_channel_person is not true  and status = 0 order by modify_time desc", nativeQuery = true)
+    List<Account> findDisableByParent(Long accountId);
+
+    @Query(value = "select * from account where root_parent = ?1 and id <> ?1 and is_channel_person is not true  and status = 0 order by modify_time desc", nativeQuery = true)
+    List<Account> findDisableByRoot(Long accountId);
+
+    @Query(value = "select * from account where root_parent = ?1 and id <> ?1 and id <> ?2 and is_channel_person is not true  and status = 0 order by modify_time desc", nativeQuery = true)
+    List<Account> findDisableByRootExcludeSelf(Long rootParentId, Long accountId);
+
+    @Query(value = "select * from account where id = ?1 and password = ?2 ", nativeQuery = true)
+    Account findAccountByIdAndPwd(Long accountId, String pwd);
+
+    @Query(value = "select id from account where id = ?1 or parent = ?1", nativeQuery = true)
+    List<Long> findAllAccountList(Long parentAccountId);
+
+    @Query(value = "select * from account where id in ?1 and role_category = 5 order by modify_time desc", nativeQuery = true)
+    List<Account> findChannelAccountByAccountIds(List<Long> channelAccountIds);
+
+    @Query(value = "select * from account where id in (select distinct create_account from account where id in ?1 and create_account is not null " +
+            " union " +
+            "select distinct modify_account from account where id in ?1 and modify_account is not null) ", nativeQuery = true)
+    List<Account> findCreateAndModifyAccount(List<Long> accountIds);
+
+    @Query(value = "select count(*) from account where role_category = ?1 ", nativeQuery = true)
+    BigInteger findAccountNumByRoleId(Long roleId);
+
+    @Query(value = "select count(*) from account where parent = ?1 and role_category = 1 ", nativeQuery = true)
+    BigInteger findSubMangerNumByParent(Long parentId);
+
+    @Query(value = "select * from account where root_parent = ?1 and id <> ?1 and status = 1 order by create_time desc", nativeQuery = true)
+    List<Account> findAccountByRootParent(Long rootParent);
+
+
+    @Query(value = "select * from account where root_parent = ?1 and id <> ?2 and id <> ?1 and status = 1 order by create_time desc", nativeQuery = true)
+    List<Account> findAccountByRootParentExManager(Long rootParent, Long id);
+
+    @Query(value = "select root_parent from account where id=?1", nativeQuery = true)
+    BigInteger findRootParentByAccountId(Long accountId);
+
+
+    @Transactional
+    @Modifying
+    @Query(value = "update Account set status = 1 where id = ?1")
+    int enable(Long account);
+
+    @Transactional
+    @Modifying
+    @Query(value = "update Account set status = 0 where id = ?1")
+    int forbidden(Long account);
+
+    @Transactional
+    @Modifying
+    @Query(value = "update Account set status = 0, modify_account = ?1,modify_time = ?2 where id = ?3")
+    int disableSubAccount(Long modifyAccount, Date modifyTime, Long subAccount);
+
+    @Transactional
+    @Modifying
+    @Query(value = "update Account set status = 1, modify_account = ?1,modify_time = ?2 where id = ?3")
+    int enableSubAccount(Long modifyAccount, Date modifyTime, Long subAccount);
+
+    List<Account> findByParent(Long account);
+
+    @Transactional
+    @Modifying
+    @Query(value = "update Account a set a.name = ?1 ,a.company = ?2 , a.phone = ?3 , a.wechat = ?4 , a.qq = ?5 where a.id = ?6")
+    int updateAccountBaseInfo(String name, String company, String phone, String wechat, String qq, Long accountId);
+
+    @Transactional
+    @Modifying
+    @Query(value = "update Account a set a.password = ?1 where a.password = ?2 and a.id = ?3")
+    int updateAccountPwd(String newPassword, String oldPassword, Long accountId);
+}
diff --git a/src/main/java/com/reyun/repository/AppRepository.java b/src/main/java/com/reyun/repository/AppRepository.java
new file mode 100644
index 0000000..a38053f
--- /dev/null
+++ b/src/main/java/com/reyun/repository/AppRepository.java
@@ -0,0 +1,56 @@
+package com.reyun.repository;
+
+import java.util.List;
+
+import org.springframework.data.jpa.repository.JpaRepository;
+import org.springframework.data.jpa.repository.Query;
+
+import com.reyun.model.App;
+
+public interface AppRepository extends JpaRepository<App, Long> {
+
+	@Query(value = "select * from app where account in (select id from account where parent = ?1 or id = ?1) and del_flag is not true", nativeQuery = true)
+	List<App> listAppByRootAccount(Long account);
+	
+	@Query(value="select appkey from app where id = ?1",nativeQuery=true)
+	String findAppkeyById(Long id);
+	
+	List<App> findByAccount(Long account);
+
+	@Query(value = "select * from app where account =?1 and bundleid = ?2 and del_flag is not true", nativeQuery = true)
+	App findByBundleidInNotDel(Long account, String bundleid);
+	
+	@Query(value = "select * from app where account =?1 and name = ?2 and del_flag is not true", nativeQuery = true)
+	App findByNameNotDel(Long account, String name);
+
+    @Query(value = "select * from app where token = ?1 limit 1", nativeQuery = true)
+    App findOneByAppToken(String token);
+
+	@Query(value = "select * from app where id in ?1", nativeQuery = true)
+	List<App> findByIds(List<Long> ids);
+
+	@Query(value = "select * from app where appkey in ?1", nativeQuery = true)
+	List<App> findByAppkeys(List<String> appkeys);
+
+    @Query(value = "select * from app a join auth b on a.id = b.app where b.account = ?1 and b.create_account in (select id from account where root_parent = ?2) ", nativeQuery = true)
+    List<App> findAuthAppByRootParent(Long subAccountId, Long rootParent);
+
+    @Query(value = "select * from app a join auth b on a.id = b.app where b.account = ?1 ", nativeQuery = true)
+    List<App> findAuthApp(Long subAccountId);
+
+	@Query(value="select platform from app where id = ?1",nativeQuery=true)
+	String findPlatformByAppId(Long appId);
+
+	@Query(value="select categoryname from category where categoryid=(select game_genre from app where id=?1);",nativeQuery=true)
+	String findGameCategoryByAppID(Long appId);
+
+	@Query(value="select categoryname from category where categoryid=(select app_genre from app where id=?1);",nativeQuery=true)
+	String findAppGenreNameByAppID(Long id);
+
+	@Query(value = "select DISTINCT a.* from app a right join data_auth d on a.id = d.app where d.account = ?1 and d.app in ?2 and d.channel = ?3 and (d.all_campaign is true or d.channel_permit is true)", nativeQuery = true)
+	List<App> listTotalAuthorizedApp(Long accountId, List<Long> appIdList, Long channelId);
+
+	@Query(value = "select create_account from app where appkey=?1", nativeQuery = true)
+	String  findCreateAccountByAppkey(String appKey);
+
+}
diff --git a/src/main/java/com/reyun/repository/AttributeRestrictRepository.java b/src/main/java/com/reyun/repository/AttributeRestrictRepository.java
new file mode 100644
index 0000000..55edd0d
--- /dev/null
+++ b/src/main/java/com/reyun/repository/AttributeRestrictRepository.java
@@ -0,0 +1,19 @@
+package com.reyun.repository;
+
+import com.reyun.model.AttributeRestrict;
+import org.springframework.data.jpa.repository.JpaRepository;
+import org.springframework.data.jpa.repository.Query;
+
+import java.util.List;
+
+/**
+ * Created by song on 2017/9/28.
+ */
+public interface AttributeRestrictRepository extends JpaRepository<AttributeRestrict, Long> {
+
+    @Query(value = "select * from attribute_restrict where attribute_name=?1 and type=?2 and app_key=?3", nativeQuery = true)
+    AttributeRestrict findIsAllRestrictByNameAndType(String s, String profile,String appKey);
+
+    @Query(value = "select * from attribute_restrict where app_key=?1 and type=?2 and attribute_name=?3",nativeQuery = true)
+    AttributeRestrict findIsRestrictByAppIdAndType(String appKey,String profile,String attribute_name);
+}
diff --git a/src/main/java/com/reyun/repository/AuthRepository.java b/src/main/java/com/reyun/repository/AuthRepository.java
new file mode 100644
index 0000000..39938c3
--- /dev/null
+++ b/src/main/java/com/reyun/repository/AuthRepository.java
@@ -0,0 +1,56 @@
+package com.reyun.repository;
+
+import java.util.List;
+import java.util.Map;
+
+import org.springframework.data.jpa.repository.JpaRepository;
+import org.springframework.data.jpa.repository.Modifying;
+import org.springframework.data.jpa.repository.Query;
+import org.springframework.transaction.annotation.Transactional;
+
+import com.reyun.model.Auth;
+@Transactional
+public interface AuthRepository extends JpaRepository<Auth, Long> {
+
+    @Query(value = "select * from auth where account  = ?1 and status is true ", nativeQuery = true)
+    List<Auth> findAuthByAccountId(Long accountId);
+
+    @Query(value = "select * from auth where account  = ?1 and create_account in ?2 and status is true ", nativeQuery = true)
+    List<Auth> findAuthByCreateIds(Long subAccountId, List<Long> createAccount);
+
+    @Query(value = "select * from auth where account = ?1 and app = ?2 limit 1", nativeQuery = true)
+    Auth findAuthByAccountAndApp(Long account, Long app);
+
+    @Query(value = "select distinct account from auth where create_account in ?1 and status is true ", nativeQuery = true)
+    List<Long> findActiveChannelAuth(List<Long> createAccountList);
+
+    @Query(value = "select distinct account from auth where create_account in ?1 and status is not true ", nativeQuery = true)
+    List<Long> findDisableChannelAuth(List<Long> createAccountList);
+
+    @Query(value = "select * from auth where create_account in ?1  and account = ?2 ", nativeQuery = true)
+    List<Auth> findAuthByCreateAccount(List<Long> createAccountList, Long channelAccount);
+
+    @Query(value = "select * from auth where create_account in ?1 and account = ?2", nativeQuery = true)
+    List<Auth> findAuthByCreateAndAuth(List<Long> createAccountList, Long authAccount);
+
+    @Query(value = "select * from auth where role_category = ?1 ", nativeQuery = true)
+    List<Auth> findAuthByRoleCategory(Long roleCategory);
+
+    @Query(value = "select app from auth where account = ?1 and status is true ", nativeQuery = true)
+    List<Long> findAppListByAccount(Long accountId);
+
+    @Transactional
+    @Modifying
+    @Query(value = "update auth set status = ?3 where account = ?1 and create_account in ?2 ", nativeQuery = true)
+    int updateStatusByCreateAccount(Long channelAccount, List<Long> createAccountList, Boolean status);
+
+    @Transactional
+    @Modifying
+    @Query(value = "delete from auth where account = ?1", nativeQuery = true)
+    void deleteAuthByAccount(Long account);
+
+	Iterable<Auth> findByApp(Long id);
+
+    @Query(value="select account.email from data_auth,account where account.id=data_auth.account and app=?1 and all_campaign is true and channel=?2", nativeQuery = true)
+    List<String> findAllcampaignAccountByChanelApp(Long app, Long channel);
+}
diff --git a/src/main/java/com/reyun/repository/BussinessManRepository.java b/src/main/java/com/reyun/repository/BussinessManRepository.java
new file mode 100644
index 0000000..b2cf2ce
--- /dev/null
+++ b/src/main/java/com/reyun/repository/BussinessManRepository.java
@@ -0,0 +1,8 @@
+package com.reyun.repository;
+
+import org.springframework.data.jpa.repository.JpaRepository;
+
+import com.reyun.model.BussinessMan;
+public interface BussinessManRepository extends JpaRepository<BussinessMan, Long> {
+	
+}
diff --git a/src/main/java/com/reyun/repository/CategoryRepository.java b/src/main/java/com/reyun/repository/CategoryRepository.java
new file mode 100644
index 0000000..d3d634f
--- /dev/null
+++ b/src/main/java/com/reyun/repository/CategoryRepository.java
@@ -0,0 +1,19 @@
+package com.reyun.repository;
+
+import org.springframework.data.jpa.repository.JpaRepository;
+import org.springframework.data.jpa.repository.Query;
+import org.springframework.transaction.annotation.Transactional;
+
+import com.reyun.model.Category;
+
+import java.util.List;
+
+@Transactional
+public interface CategoryRepository extends JpaRepository<Category, Long> {
+
+    @Query(value = "select * from category c where c.categoryid in ?1", nativeQuery = true)
+    List<Category> findByIds(List<Long> ids);
+
+    @Query(value = "select c.categoryname from category c where c.categoryid = ?1", nativeQuery = true)
+    String findNameByCategoryId(Long categoryId);
+}
diff --git a/src/main/java/com/reyun/repository/CommonEventRepository.java b/src/main/java/com/reyun/repository/CommonEventRepository.java
new file mode 100644
index 0000000..25e39f1
--- /dev/null
+++ b/src/main/java/com/reyun/repository/CommonEventRepository.java
@@ -0,0 +1,23 @@
+package com.reyun.repository;
+
+import com.reyun.model.CommonEvent;
+import org.springframework.data.jpa.repository.JpaRepository;
+import org.springframework.data.jpa.repository.Query;
+
+import java.util.List;
+
+/**
+ * Created by sunhao on 17/4/13.
+ * description:通用事件DAO
+ */
+public interface CommonEventRepository extends JpaRepository<CommonEvent,Long>{
+
+    @Query(value="select * from common_event ",nativeQuery=true)
+    List<CommonEvent> findAll();
+    
+    @Query(value="select * from common_event where event=?1",nativeQuery=true)
+    CommonEvent findByEvent(String event);
+
+    @Query(value = "SELECT * FROM `common_event` WHERE `alias`=?1", nativeQuery = true)
+    CommonEvent findByAlias(String alias);
+}
diff --git a/src/main/java/com/reyun/repository/CommonIPRepository.java b/src/main/java/com/reyun/repository/CommonIPRepository.java
new file mode 100644
index 0000000..fbec466
--- /dev/null
+++ b/src/main/java/com/reyun/repository/CommonIPRepository.java
@@ -0,0 +1,31 @@
+package com.reyun.repository;
+
+import com.reyun.model.CommonIP;
+import org.springframework.data.jpa.repository.JpaRepository;
+import org.springframework.data.jpa.repository.Modifying;
+import org.springframework.data.jpa.repository.Query;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.math.BigInteger;
+import java.util.Date;
+import java.util.List;
+
+@Transactional
+public interface CommonIPRepository extends JpaRepository<CommonIP, Long> {
+
+	@Query(value = "select * from commonip where del_flag is not true and account = ?1", nativeQuery = true)
+    List<CommonIP> findAllCommonIPByAccount(Long account);
+	
+	@Modifying
+    @Transactional
+    @Query(value = "update commonip set del_flag = true, modify_account = ?1 , modify_time = ?2 where id = ?3 and del_flag is not true", nativeQuery = true)
+    int deleteById(Long modifyAccount,  Date modifyTime, Long id);
+	
+	@Transactional
+    @Modifying
+    @Query(value = "update commonip set ip  = ?1 , modify_account = ?2 , modify_time = ?3 where id = ?4 ", nativeQuery = true)
+    int updateCommonIPById(String ip,Long modifyAccount,  Date modifyTime, Long id);
+	
+	@Query(value = "select count(1) from commonip where del_flag is not true and account =?1 and ip=?2 ", nativeQuery = true)
+	BigInteger isCommonIpRepeatByAccount(Long account,String ip);
+}
diff --git a/src/main/java/com/reyun/repository/CommonParamRepository.java b/src/main/java/com/reyun/repository/CommonParamRepository.java
new file mode 100644
index 0000000..895548c
--- /dev/null
+++ b/src/main/java/com/reyun/repository/CommonParamRepository.java
@@ -0,0 +1,25 @@
+package com.reyun.repository;
+
+import java.math.BigInteger;
+import java.util.List;
+
+import org.springframework.data.jpa.repository.JpaRepository;
+import org.springframework.data.jpa.repository.Query;
+import org.springframework.transaction.annotation.Transactional;
+
+import com.reyun.model.CommonParam;
+@Transactional
+public interface CommonParamRepository extends JpaRepository<CommonParam, Long> {
+
+	@Query(value="select * from common_param where type=?1 order by sort_id ",nativeQuery=true)
+	List<CommonParam> findAllByType(String type);
+
+    @Query(value="select * from common_param order by sort_id ",nativeQuery=true)
+    List<CommonParam> findAllCommonParam();
+
+	@Query(value = "SELECT * FROM common_param WHERE alias=?1 AND type=?2", nativeQuery = true)
+	CommonParam findByAlias(String alias, String type);
+
+	@Query(value = "select count(*) from common_param where type=?1",nativeQuery = true)
+	BigInteger findNumByType(String type);
+}
diff --git a/src/main/java/com/reyun/repository/ComplicatedParamRepository.java b/src/main/java/com/reyun/repository/ComplicatedParamRepository.java
new file mode 100644
index 0000000..283c4c0
--- /dev/null
+++ b/src/main/java/com/reyun/repository/ComplicatedParamRepository.java
@@ -0,0 +1,21 @@
+package com.reyun.repository;
+
+import com.reyun.model.ComplicatedParam;
+import com.reyun.model.EventViewAttr;
+import org.springframework.data.jpa.repository.JpaRepository;
+import org.springframework.data.jpa.repository.Query;
+
+import java.util.List;
+
+/**
+ * Created by sunhao on 17/9/21.
+ * 复杂事件操作符配置
+ */
+public interface ComplicatedParamRepository extends JpaRepository<ComplicatedParam, Long> {
+
+    @Query(value = "select * from complicated_param where valid is true ", nativeQuery = true)
+    List<ComplicatedParam> findAllParam();
+
+    @Query(value = "SELECT * FROM complicated_param WHERE view_attr_name = ?1 AND valid is true", nativeQuery = true)
+    ComplicatedParam findComplicateOperator(String operator);
+}
diff --git a/src/main/java/com/reyun/repository/ConfigParamRepository.java b/src/main/java/com/reyun/repository/ConfigParamRepository.java
new file mode 100644
index 0000000..d680af7
--- /dev/null
+++ b/src/main/java/com/reyun/repository/ConfigParamRepository.java
@@ -0,0 +1,19 @@
+package com.reyun.repository;
+
+import com.reyun.model.ConfigParam;
+import org.springframework.data.jpa.repository.JpaRepository;
+import org.springframework.data.jpa.repository.Query;
+
+import java.util.List;
+
+/**
+ * Created by sunhao on 17/3/2.
+ */
+public interface ConfigParamRepository extends JpaRepository<ConfigParam,Long> {
+
+    @Query(value = "select value_param from config_param where key_param = ?1 ", nativeQuery = true)
+    String findParamsByKey(String key);
+
+    @Query(value = "select * from config_param where key_param in ?1 ", nativeQuery = true)
+    List<ConfigParam> findParamsByKeys(List<String> keys);
+}
diff --git a/src/main/java/com/reyun/repository/CustomMenuFavoritesRepository.java b/src/main/java/com/reyun/repository/CustomMenuFavoritesRepository.java
new file mode 100644
index 0000000..e62beb7
--- /dev/null
+++ b/src/main/java/com/reyun/repository/CustomMenuFavoritesRepository.java
@@ -0,0 +1,42 @@
+package com.reyun.repository;
+
+import com.reyun.model.CustomMenuFavorites;
+import org.springframework.data.jpa.repository.JpaRepository;
+import org.springframework.data.jpa.repository.Modifying;
+import org.springframework.data.jpa.repository.Query;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.util.List;
+
+/**
+ * Created by sunhao on 17/4/24.
+ * desc:收藏看单DAO
+ */
+public interface CustomMenuFavoritesRepository extends JpaRepository<CustomMenuFavorites, Long> {
+
+
+    @Query(value = "select * from custom_menu_favorites where account_id = ?1 and app_id = ?2 and del_flag is false order by create_date desc ", nativeQuery = true)
+    List<CustomMenuFavorites> findAllFavorites(Long accountId,Long appId);
+
+    @Query(value = "select * from custom_menu_favorites where account_id = ?1 and app_id = ?2 and share_id =?3 and del_flag is false limit 1", nativeQuery = true)
+    CustomMenuFavorites findFavoriteMenuByShareId(Long accountId,Long appId,Long shareId);
+
+    @Query(value = "select * from custom_menu_favorites where account_id = ?1 and app_id = ?2 and share_id =?3 and del_flag is true limit 1", nativeQuery = true)
+    CustomMenuFavorites findHasAddToFavorite(Long accountId,Long appId,Long shareId);
+
+    @Transactional
+    @Modifying
+    @Query(value = "update custom_menu_favorites set del_flag = true where account_id = ?1 and app_id = ?2 and share_id =?3 and del_flag is false ", nativeQuery = true)
+    int deleteFavorites(Long accountId,Long appId,Long menuId);
+
+
+    @Transactional
+    @Modifying
+    @Query(value = "update custom_menu_favorites set del_flag = false where account_id = ?1 and app_id = ?2 and share_id =?3 and del_flag is true ", nativeQuery = true)
+    int restoreFavorites(Long accountId,Long appId,Long menuId);
+
+    @Transactional
+    @Modifying
+    @Query(value = "update custom_menu_favorites set share_valid = false where share_id = ?1 and del_flag is false ", nativeQuery = true)
+    int updateFavoritesShareInvalid(Long menuId);
+}
diff --git a/src/main/java/com/reyun/repository/CustomMenuRepository.java b/src/main/java/com/reyun/repository/CustomMenuRepository.java
new file mode 100644
index 0000000..6ea751a
--- /dev/null
+++ b/src/main/java/com/reyun/repository/CustomMenuRepository.java
@@ -0,0 +1,77 @@
+package com.reyun.repository;
+
+import com.reyun.model.CustomMenu;
+import org.springframework.data.jpa.repository.JpaRepository;
+import org.springframework.data.jpa.repository.Modifying;
+import org.springframework.data.jpa.repository.Query;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.math.BigInteger;
+import java.util.Date;
+import java.util.List;
+
+/**
+ * Created by sunhao on 17/4/21.
+ * desc:我的看单
+ */
+public interface CustomMenuRepository extends JpaRepository<CustomMenu, Long> {
+
+    @Query(value = "select * from custom_menu where create_account  = ?1 and app_id  = ?2 and share_id = ?3 and source is true and del_flag is false ", nativeQuery = true)
+    CustomMenu findCustomMenuByShareId(Long accountId, Long appId, Long shareId);
+
+    //查询所有有效地看单
+    @Query(value = "select * from custom_menu where create_account = ?1 and app_id = ?2 and del_flag is false order by ifnull(modify_date,create_date) desc ", nativeQuery = true)
+    List<CustomMenu> findValidCustomMenu(Long accountId, Long appId);
+
+    //按照app查询所有有效地看单
+    @Query(value = "select * from custom_menu where app_id = ?1 and del_flag is false order by orderindex ", nativeQuery = true)
+    List<CustomMenu> findValidCustomMenuByApp(Long appId);
+
+    //查询所有失效的看单
+    @Query(value = "select * from custom_menu where  app_id = ?1 ", nativeQuery = true)
+    List<CustomMenu> findAllCustomMenuByApp(Long appId);
+
+    @Query(value = "select * from custom_menu where  id in ?1 and del_flag is false ", nativeQuery = true)
+    List<CustomMenu> findAllByIds(List<Long> list);
+
+    @Query(value = "select * from custom_menu where id = ?1 and has_share is false ", nativeQuery = true)
+    CustomMenu findUnsharedMenu(Long menuId);
+
+    @Query(value = "select count(*) from custom_menu where app_id = ?1 and del_flag is false ", nativeQuery = true)
+    BigInteger findMyMenuNumber(Long appId);
+
+    @Query(value = "select count(*) from custom_menu where app_id = ?1 and  name = ?2  and del_flag is false ", nativeQuery = true)
+    BigInteger findMyMenuNumberByName(Long appId,String menuName);
+
+    @Query(value = "select count(*) from custom_menu where app_id = ?1 and  name like ?2%  and del_flag is false ", nativeQuery = true)
+    BigInteger findNameLikeNumber(Long appId,String menuName);
+
+    @Query(value = "select count(*) from custom_menu where app_id = ?1 and share_id = ?2 and del_flag is false ", nativeQuery = true)
+    BigInteger findByShareId(Long appId, Long shareId);
+
+    @Transactional
+    @Modifying
+    @Query(value = "update custom_menu set del_flag = true where create_account = ?1 and app_id = ?2 and id = ?3 and del_flag is false ", nativeQuery = true)
+    int deleteMyMenu(Long accountId, Long appId, Long menuId);
+
+    @Transactional
+    @Modifying
+    @Query(value = "update custom_menu set has_share = ?2 where id = ?1 and del_flag is false ", nativeQuery = true)
+    int updateMyMenuShare(Long menuId, Boolean isShare);
+
+    @Transactional
+    @Modifying
+    @Query(value = "update custom_menu set name = ?3,modify_date = ?4,modify_account = ?1 where id = ?2 and del_flag is false ", nativeQuery = true)
+    int updateMyMenuName(Long accountId, Long menuId, String name, Date date);
+
+    @Transactional
+    @Modifying
+    @Query(value = "update custom_menu set create_account_name = ?2 where create_account = ?1 ", nativeQuery = true)
+    int updateAccountName(Long accountId, String accountName);
+
+    @Transactional
+    @Modifying
+    @Query(value = "update custom_menu set share_account_name = ?2 where share_account_id = ?1 ", nativeQuery = true)
+    int updateShareAccountName(Long accountId, String accountName);
+
+}
diff --git a/src/main/java/com/reyun/repository/CustomMenuShareRepository.java b/src/main/java/com/reyun/repository/CustomMenuShareRepository.java
new file mode 100644
index 0000000..4fda1b9
--- /dev/null
+++ b/src/main/java/com/reyun/repository/CustomMenuShareRepository.java
@@ -0,0 +1,65 @@
+package com.reyun.repository;
+
+import com.reyun.model.CustomMenuShare;
+import org.springframework.data.jpa.repository.JpaRepository;
+import org.springframework.data.jpa.repository.Modifying;
+import org.springframework.data.jpa.repository.Query;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.util.List;
+
+/**
+ * Created by sunhao on 17/4/21.
+ * desc:分享看单(即行业看单模板)
+ */
+public interface CustomMenuShareRepository extends JpaRepository<CustomMenuShare,Long>{
+
+    @Query(value = "select * from custom_menu_share where category = ?1 and del_flag is false order by share_date desc ",nativeQuery = true)
+    List<CustomMenuShare> listAllSharedByCategory(Long categoryId);
+
+    @Query(value = "select * from custom_menu_share where del_flag is false order by share_date desc ",nativeQuery = true)
+    List<CustomMenuShare> listAllShared();
+
+    @Query(value = "select * from custom_menu_share where original_menu = ?1 and del_flag is false ",nativeQuery = true)
+    CustomMenuShare findShareByOriginalMenu(Long menuId);
+
+    @Query(value = "SELECT * from custom_menu_share where del_flag is FALSE GROUP BY (category)", nativeQuery = true)
+    List<CustomMenuShare> findIndustry();
+
+    @Query(value = "select * from custom_menu_share where id = ?1 ", nativeQuery = true)
+    CustomMenuShare findShareById(Long shareId);
+
+    @Query(value = "select * from custom_menu_share where reyun_menu is true and category = ?1", nativeQuery = true)
+    List<CustomMenuShare> findReyunMenu(Long categoryId);
+
+    @Transactional
+    @Modifying
+    @Query(value = "update custom_menu_share set use_number = use_number + 1 where id = ?1 ",nativeQuery = true)
+    int addUserNumber(Long menuId);
+
+    @Transactional
+    @Modifying
+    @Query(value = "update custom_menu_share set use_number = (CASE WHEN use_number - 1 < 0 THEN 0 ELSE use_number - 1 END) where id = ?1 ",nativeQuery = true)
+    int minusUserNumber(Long menuId);
+
+    @Transactional
+    @Modifying
+    @Query(value = "update custom_menu_share set favorite_number = favorite_number + 1 where id = ?1 ",nativeQuery = true)
+    int addFavoriteNumber(Long menuId);
+
+    @Transactional
+    @Modifying
+    @Query(value = "update custom_menu_share set favorite_number = (CASE WHEN favorite_number - 1 < 0 THEN 0 ELSE favorite_number - 1 END) where id = ?1 ",nativeQuery = true)
+    int minusFavoriteNumber(Long menuId);
+
+    @Transactional
+    @Modifying
+    @Query(value = "update custom_menu_share set del_flag = true where id = ?1 and del_flag is false", nativeQuery = true)
+    int deleteShareMenu(Long menuId);
+
+
+    @Transactional
+    @Modifying
+    @Query(value = "update custom_menu_share set account_name = ?2 where account_id = ?1  ", nativeQuery = true)
+    int updateAccountName(Long accountId, String accountName);
+}
diff --git a/src/main/java/com/reyun/repository/CustomMenuShareTempRepository.java b/src/main/java/com/reyun/repository/CustomMenuShareTempRepository.java
new file mode 100644
index 0000000..65098b2
--- /dev/null
+++ b/src/main/java/com/reyun/repository/CustomMenuShareTempRepository.java
@@ -0,0 +1,25 @@
+package com.reyun.repository;
+
+import com.reyun.model.CustomMenuShareTemplate;
+import com.reyun.model.CustomMenuTemplate;
+import org.springframework.data.jpa.repository.JpaRepository;
+import org.springframework.data.jpa.repository.Modifying;
+import org.springframework.data.jpa.repository.Query;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.util.List;
+
+/**
+ * Created by sunhao on 17/4/27.
+ * desc:分析看单模板DAO
+ */
+public interface CustomMenuShareTempRepository extends JpaRepository<CustomMenuShareTemplate,Long>{
+
+    @Query(value = "select * from custom_menu_share_template where custom_menu_id = ?1 and del_flag is false ", nativeQuery = true)
+    List<CustomMenuShareTemplate> findShareTemplateById(Long customMenuId);
+
+    @Transactional
+    @Modifying
+    @Query(value = "update custom_menu_share_template set query_data = ?2 where id = ?1 ", nativeQuery = true)
+    int updateQueryDataById(Long templateId, String queryData);
+}
diff --git a/src/main/java/com/reyun/repository/CustomMenuTemplateRepository.java b/src/main/java/com/reyun/repository/CustomMenuTemplateRepository.java
new file mode 100644
index 0000000..987a8f0
--- /dev/null
+++ b/src/main/java/com/reyun/repository/CustomMenuTemplateRepository.java
@@ -0,0 +1,45 @@
+package com.reyun.repository;
+
+import com.reyun.model.CustomMenuTemplate;
+import org.springframework.data.jpa.repository.JpaRepository;
+import org.springframework.data.jpa.repository.Modifying;
+import org.springframework.data.jpa.repository.Query;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.math.BigInteger;
+import java.util.List;
+
+/**
+ * Created by sunhao on 17/4/24.
+ * desc:我的看单包含的模板DAO
+ */
+public interface CustomMenuTemplateRepository extends JpaRepository<CustomMenuTemplate,Long>{
+
+    @Query(value = "select * from custom_menu_template where custom_menu_id = ?1 and del_flag is false order by orderindex ", nativeQuery = true)
+    List<CustomMenuTemplate> findMyTemplateById(Long customMenuId);
+
+    @Query(value = "select * from custom_menu_template where custom_menu_id = ?1 and original_report_id = ?2 and menu_type = ?3  and del_flag is false ", nativeQuery = true)
+    CustomMenuTemplate findMyTemplateByReportId(Long customMenuId, Long reportId, String menuType);
+
+    @Query(value = "select count(*) from custom_menu_template where custom_menu_id = ?1 and del_flag is false ", nativeQuery = true)
+    BigInteger countNumberByMenu(Long menuId);
+
+    @Query(value = "select id from custom_menu_template where original_report_id = ?1 and menu_type = ?2 and del_flag is false", nativeQuery = true)
+    List<Long> findTemplateByOriginal(Long originalId, String menuType);
+
+    @Query(value = "select * from custom_menu_template where original_report_id = ?1 and menu_type = ?2 and del_flag is false", nativeQuery = true)
+    List<CustomMenuTemplate> findAllTemplateByOriginal(Long originalId, String menuType);
+
+    @Query(value = "select custom_menu_id from custom_menu_template where original_report_id = ?1 and menu_type = ?2 and del_flag is false", nativeQuery = true)
+    List<Long> findMenuByOriginal(Long originalId, String menuType);
+
+    @Transactional
+    @Modifying
+    @Query(value = "update custom_menu_template set del_flag = true, modify_account = ?1 where id in ?2 and del_flag is false ", nativeQuery = true)
+    int deleteTemplateByIds(Long accountId, List<Long> templateIds);
+
+    @Transactional
+    @Modifying
+    @Query(value = "update custom_menu_template set del_flag = true, modify_account = ?1 where id = ?2 and del_flag is false ", nativeQuery = true)
+    int updateTemplateInvalid(Long accountId, Long templateId);
+}
diff --git a/src/main/java/com/reyun/repository/DataAuthRepository.java b/src/main/java/com/reyun/repository/DataAuthRepository.java
new file mode 100644
index 0000000..a00b760
--- /dev/null
+++ b/src/main/java/com/reyun/repository/DataAuthRepository.java
@@ -0,0 +1,44 @@
+package com.reyun.repository;
+
+import com.reyun.model.DataAuth;
+import org.springframework.data.jpa.repository.JpaRepository;
+import org.springframework.data.jpa.repository.Modifying;
+import org.springframework.data.jpa.repository.Query;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.util.List;
+
+@Transactional
+public interface DataAuthRepository extends JpaRepository<DataAuth, Long> {
+
+    @Query(value = "select * from data_auth where account in ?1", nativeQuery = true)
+    List<DataAuth> findDataAuthByAccount(List<Long> account);
+
+    @Query(value = "select * from data_auth where account = ?1", nativeQuery = true)
+    List<DataAuth> findDataAuthByAccount(Long account);
+
+    @Query(value = "select * from data_auth where account = ?1 and app=?2", nativeQuery = true)
+    List<DataAuth> findDataAuthByAccountAndApp(Long account, Long app);
+
+    @Query(value = "select * from data_auth where account = ?2 and app in (select app from auth where create_account in ?1 and account = ?2)", nativeQuery = true)
+    List<DataAuth> findDataAuthByCreateAccount(List<Long> createAccount, Long channelAccount);
+
+    @Transactional
+    @Modifying
+    @Query(value = "delete from data_auth where account = ?1", nativeQuery = true)
+    void deleteAuthByAccount(Long account);
+
+    @Query(value = "select * from data_auth where app = ?1 and channel =?2 and campaign =?3", nativeQuery = true)
+    List<DataAuth> listDataAuthByAppChnCam(Long app, Long channel, Long campain);
+
+    Iterable<DataAuth> findByApp(Long id);
+
+    @Query(value = "select account from data_auth where app = ?1 and channel =?2 and campaign =?3", nativeQuery = true)
+    List<Long> listAccountByAppChnCam(Long app, Long channel, Long campain);
+
+    @Query(value = "select * from data_auth where channel =?1", nativeQuery = true)
+    List<DataAuth> listDataAuthByChannel(Long channel);
+
+    @Query(value = "select * from data_auth where account = ?1 and app = ?2 and all_campaign = 1", nativeQuery = true)
+    List<DataAuth> listByAllCampaign(Long account, Long app);
+}
diff --git a/src/main/java/com/reyun/repository/DataParamRepository.java b/src/main/java/com/reyun/repository/DataParamRepository.java
new file mode 100644
index 0000000..43f84b8
--- /dev/null
+++ b/src/main/java/com/reyun/repository/DataParamRepository.java
@@ -0,0 +1,10 @@
+package com.reyun.repository;
+
+import org.springframework.data.jpa.repository.JpaRepository;
+
+import com.reyun.model.DataParam;
+
+public interface DataParamRepository extends JpaRepository<DataParam, Long> {
+	
+
+}
diff --git a/src/main/java/com/reyun/repository/DemoAppointmentRepository.java b/src/main/java/com/reyun/repository/DemoAppointmentRepository.java
new file mode 100644
index 0000000..1f76626
--- /dev/null
+++ b/src/main/java/com/reyun/repository/DemoAppointmentRepository.java
@@ -0,0 +1,18 @@
+package com.reyun.repository;
+
+import com.reyun.model.DemoAppointment;
+import org.springframework.data.jpa.repository.JpaRepository;
+import org.springframework.data.jpa.repository.Query;
+
+import java.math.BigInteger;
+
+
+/**
+ * Created by nolan on 06/06/2017.
+ * description:
+ */
+public interface DemoAppointmentRepository extends JpaRepository<DemoAppointment, Long> {
+
+    @Query(value = "select count(*) from demo_appointment where phone = ?1 and create_time between date_sub(date_add(now(), INTERVAL 8 hour), INTERVAL 30 day)  and date_add(now(), INTERVAL 8 hour)", nativeQuery = true)
+    BigInteger countByPhone(String phone);
+}
diff --git a/src/main/java/com/reyun/repository/EventAttributeMetaRepository.java b/src/main/java/com/reyun/repository/EventAttributeMetaRepository.java
new file mode 100644
index 0000000..8211b34
--- /dev/null
+++ b/src/main/java/com/reyun/repository/EventAttributeMetaRepository.java
@@ -0,0 +1,28 @@
+package com.reyun.repository;
+
+import com.reyun.model.Event;
+import com.reyun.model.EventAttributeMeta;
+import com.reyun.model.EventMeta;
+import org.springframework.data.jpa.repository.JpaRepository;
+import org.springframework.data.jpa.repository.Query;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.util.List;
+
+@Transactional
+public interface EventAttributeMetaRepository extends JpaRepository<EventAttributeMeta, Long> {
+
+    List<EventAttributeMeta> findByAppkey(String appkey);
+
+    @Query(value = "select * from event_attribute_meta where appkey = ?1 and attribute = ?2", nativeQuery = true)
+    EventAttributeMeta findByAttribute(String appkey, String name);
+
+    @Query(value = "select * from event_attribute_meta where `appkey`=?1 and (`alias`=?2 OR `attribute`=?2)", nativeQuery = true)
+    EventAttributeMeta findByAliasOrName(String appkey, String name);
+
+    @Query(value = "select * from event_attribute_meta where appkey = ?1 and status is true and (add_stats_condition is true or add_stats_view is true)", nativeQuery = true)
+    List<EventAttributeMeta> findByAppkeyAndCondition(String appkey);
+
+    @Query(value = "SELECT * FROM event_attribute_meta WHERE appKey=?2 AND attribute IN(?1)", nativeQuery = true)
+    List<EventAttributeMeta> findAllByAttributeList(List<String> eventList, String appKey);
+}
diff --git a/src/main/java/com/reyun/repository/EventMetaRepository.java b/src/main/java/com/reyun/repository/EventMetaRepository.java
new file mode 100644
index 0000000..d3b2d11
--- /dev/null
+++ b/src/main/java/com/reyun/repository/EventMetaRepository.java
@@ -0,0 +1,30 @@
+package com.reyun.repository;
+
+import com.reyun.model.Event;
+import com.reyun.model.EventMeta;
+import org.springframework.data.jpa.repository.JpaRepository;
+import org.springframework.data.jpa.repository.Query;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.util.List;
+
+@Transactional
+public interface EventMetaRepository extends JpaRepository<EventMeta, Long> {
+
+    List<EventMeta> findByAppkey(String appkey);
+
+    @Query(value = "select * from event_meta where appkey = ?1 and event_id = ?2", nativeQuery = true)
+    EventMeta findByEventId(String appkey, String name);
+
+    @Query(value = "select * from event_meta where `appkey`=?1 and (`alias`=?2 OR `event_id`=?2)", nativeQuery = true)
+    EventMeta findByAliasOrName(String appkey, String alias);
+
+    @Query(value = "select * from event_meta where appkey = ?1 and event_id in (?2) ", nativeQuery = true)
+    List<EventMeta> findByEventIds(String appKey, List<String> eventList);
+
+    @Query(value = "select * from event_meta where appkey = ?1 and status is false", nativeQuery = true)
+    List<EventMeta> findByAppkeyAndStatusIsFalse(String appkey);
+
+    @Query(value = "select * from event_meta where appkey = ?1 and status is true", nativeQuery = true)
+    List<EventMeta> findByAppkeyAndStatusIsTrue(String appkey);
+}
diff --git a/src/main/java/com/reyun/repository/EventRepository.java b/src/main/java/com/reyun/repository/EventRepository.java
new file mode 100644
index 0000000..9819549
--- /dev/null
+++ b/src/main/java/com/reyun/repository/EventRepository.java
@@ -0,0 +1,57 @@
+package com.reyun.repository;
+
+import java.util.Date;
+import java.util.List;
+
+import org.springframework.data.jpa.repository.JpaRepository;
+import org.springframework.data.jpa.repository.Modifying;
+import org.springframework.data.jpa.repository.Query;
+import org.springframework.transaction.annotation.Transactional;
+
+import com.reyun.model.Event;
+
+@Transactional
+public interface EventRepository extends JpaRepository<Event, Long> {
+
+    List<Event> findByAppkey(String appkey);
+
+    @Query(value = "select * from event_source where appkey = ?1 and event_name in ?2 ", nativeQuery = true)
+    List<Event> findByAppkeyAndNames(String appKey,List<String> names);
+
+    @Query(value = "select * from event_source where appkey = ?1 group by event_name ", nativeQuery = true)
+    List<Event> findAllEventByAppKey(String appKey);
+
+    @Query(value = "select * from event_source where appkey = ?1 and event_attr = ?2 limit 1", nativeQuery = true)
+    Event findOneEventByAttr(String appKey, String eventAttr);
+
+    @Query(value = "select * from event_source where appkey = ?1 and event_attr = ?2 and event_name = ?3", nativeQuery = true)
+    Event findNumberAttrByEventAttr(String appKey,String attrName,String eventName);
+
+    @Query(value = "select * from event_source where appkey = ?1 and event_name = ?2", nativeQuery = true)
+    List<Event> findByEventName(String appkey, String name);
+
+    @Query(value = "select * from event_source where appkey = ?1 and common = true", nativeQuery = true)
+    List<Event> listCommonByApp(String appkey);
+
+    @Query(value = "select * from event_source where appkey = ?1 and event_name in (?2)", nativeQuery = true)
+    List<Event> findEventAliasByEvent(String appkey, List<String> eventNames);
+
+    @Query(value = "select * from event_source where appkey = ?1 and data_type = ?2 ", nativeQuery = true)
+    List<Event> findAllAttrByDataType(String appKey, String dataType);
+
+    @Query(value = "select * from event_source where appkey = ?3 and event_attr = ?1 and event_name = ?2", nativeQuery = true)
+    List<Event> findByAttr(String attr, String eventName, String appKey);
+
+    @Query(value = "select * from event_source where appkey = ?3 and event_attr = ?1 and event_name in (?2)", nativeQuery = true)
+    List<Event> findByEventsAndAttr(List<String> events, String attr, String appKey);
+
+    @Transactional
+    @Modifying
+    @Query(value = "update event_source set add_stats_view  = ?4 , modify_account = ?5, modify_time = ?6 where appkey = ?1 and event_name = ?2 and event_attr = ?3  and data_type = 'number' ", nativeQuery = true)
+    int updateEventStatsAttr(String appKey, String eventName, String attrName, Boolean statsFlag, Long account, Date date);
+
+    @Transactional
+    @Modifying
+    @Query(value = "update event_source set add_stats_condition  = ?4 , modify_account = ?5, modify_time = ?6 where appkey = ?1 and event_name = ?2 and event_attr = ?3 ", nativeQuery = true)
+    int updateEventStatsCondition(String appKey, String eventName, String attrName, Boolean statsFlag, Long account, Date date);
+}
diff --git a/src/main/java/com/reyun/repository/EventStatsRepository.java b/src/main/java/com/reyun/repository/EventStatsRepository.java
new file mode 100644
index 0000000..d42e248
--- /dev/null
+++ b/src/main/java/com/reyun/repository/EventStatsRepository.java
@@ -0,0 +1,54 @@
+package com.reyun.repository;
+
+import com.reyun.model.EventStats;
+import org.springframework.data.jpa.repository.JpaRepository;
+import org.springframework.data.jpa.repository.Modifying;
+import org.springframework.data.jpa.repository.Query;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.math.BigInteger;
+import java.util.Date;
+import java.util.List;
+
+/**
+ * Created by sunhao on 17/4/10.
+ */
+@Transactional
+public interface EventStatsRepository extends JpaRepository<EventStats, Long> {
+
+    @Query(value = "select * from event_stats where app = ?1 and complicated_events = ?2 and valid is true order by ifnull(modify_time,create_time) desc", nativeQuery = true)
+    List<EventStats> findAll(Long appId, Boolean complicatedEvents);
+
+    @Query(value = "select * from event_stats where id = ?1 and valid is true ", nativeQuery = true)
+    EventStats findEventStats(Long eventStatsId);
+
+    @Query(value = "select * from event_stats where name = ?1 and app = ?2 and valid is true ", nativeQuery = true)
+    EventStats findEventStatsByName(String eventStatsName, Long appId);
+
+    @Query(value = "select count(*) from event_stats where name like  ?3% and create_account = ?1 and app = ?2 ", nativeQuery = true)
+    BigInteger findCountLikeName(Long accountId, Long appId, String name);
+
+    @Query(value = "select * from event_stats where create_account in (select id from account where root_parent  = ?1) and valid is true and complicated_events is not true ", nativeQuery = true)
+    List<EventStats> findEventStatsByABTest(Long rootParent);
+
+    @Query(value = "select * from event_stats where create_account in (select id from account where root_parent  = ?1) and complicated_events is true", nativeQuery = true)
+    List<EventStats> findComplicatedRecord(Long rootParent);
+
+    @Query(value = "select * from event_stats where complicated_events is not true and valid is true", nativeQuery = true)
+    List<EventStats> findAllEsay();
+
+    @Transactional
+    @Modifying
+    @Query(value = "update event_stats set modify_account = ?1,valid = false, modify_time = ?3 where id = ?2 ", nativeQuery = true)
+    int deleteEventStats(Long accountId, Long eventStatsId, Date modifyDate);
+
+    @Transactional
+    @Modifying
+    @Query(value = "update event_stats set event_name = ?1, event_condition = ?2,query_sql = ?3,modify_account = ?4,modify_time = ?6  where id = ?5 ", nativeQuery = true)
+    int updateEventStats(String eventName, String eventCondition, String querySql, Long modifyAccount, Long eventStatsId, Date modifyDate);
+
+    @Transactional
+    @Modifying
+    @Query(value = "update event_stats set event_name = ?1, event_condition = ?2,modify_account = ?3,modify_time = ?5,name = ?6  where id = ?4 ", nativeQuery = true)
+    int updateEventStats(String eventName, String eventCondition, Long modifyAccount, Long eventStatsId, Date modifyDate,String name);
+}
diff --git a/src/main/java/com/reyun/repository/EventViewAttrRepository.java b/src/main/java/com/reyun/repository/EventViewAttrRepository.java
new file mode 100644
index 0000000..375b081
--- /dev/null
+++ b/src/main/java/com/reyun/repository/EventViewAttrRepository.java
@@ -0,0 +1,20 @@
+package com.reyun.repository;
+
+import com.reyun.model.EventViewAttr;
+import org.springframework.data.jpa.repository.JpaRepository;
+import org.springframework.data.jpa.repository.Query;
+
+import java.util.List;
+
+/**
+ * Created by sunhao on 17/4/11.
+ * desc:事件分析展示属性
+ */
+public interface EventViewAttrRepository extends JpaRepository<EventViewAttr,Long>{
+
+    @Query(value = "select * from event_view_attr where valid is true ", nativeQuery = true)
+    List<EventViewAttr> findEventViewAttr();
+
+    @Query(value = "SELECT * FROM event_view_attr WHERE `view_attr_name`=?1 AND valid is true", nativeQuery = true)
+    EventViewAttr findEventViewAttr(String viewAttrName);
+}
diff --git a/src/main/java/com/reyun/repository/EventtableMetadataRepository.java b/src/main/java/com/reyun/repository/EventtableMetadataRepository.java
new file mode 100644
index 0000000..ba80fb3
--- /dev/null
+++ b/src/main/java/com/reyun/repository/EventtableMetadataRepository.java
@@ -0,0 +1,15 @@
+package com.reyun.repository;
+
+import java.util.List;
+
+import org.springframework.data.jpa.repository.JpaRepository;
+import org.springframework.data.jpa.repository.Query;
+
+import com.reyun.model.EventtableMetadata;
+public interface EventtableMetadataRepository extends JpaRepository<EventtableMetadata, Long> {
+	
+	
+	@Query(value="select distinct bucketid from eventtable_metadata where appkey=?1 and ds >= ?2 and ds <= ?3 and event in ?4",nativeQuery=true)
+	List<String> listBuckets(String appkey, String startdate, String enddate, List<String> event);
+	
+}
diff --git a/src/main/java/com/reyun/repository/ExportReportInfoRepository.java b/src/main/java/com/reyun/repository/ExportReportInfoRepository.java
new file mode 100644
index 0000000..7446170
--- /dev/null
+++ b/src/main/java/com/reyun/repository/ExportReportInfoRepository.java
@@ -0,0 +1,48 @@
+package com.reyun.repository;
+
+import java.util.Date;
+import java.util.List;
+
+import org.springframework.data.jpa.repository.JpaRepository;
+import org.springframework.data.jpa.repository.Modifying;
+import org.springframework.data.jpa.repository.Query;
+import org.springframework.transaction.annotation.Transactional;
+
+import com.reyun.model.ExportReportInfo;
+
+@Transactional
+public interface ExportReportInfoRepository extends JpaRepository<ExportReportInfo, Long> {
+
+    @Query(value = "select * from export_report_info where app = ?1 and create_time > ?2  order by create_time desc ", nativeQuery = true)
+    List<ExportReportInfo> findByApp(Long app, Date startDate);
+
+    @Query(value = "select * from export_report_info where app = ?1 and create_time > ?2 and account = ?3  order by create_time desc ", nativeQuery = true)
+    List<ExportReportInfo> findByAccountAndApp(Long app, Date startDate, Long accountId);
+
+
+    @Query(value = "select * from export_report_info where app = ?1 and file_name = ?2", nativeQuery = true)
+	ExportReportInfo findByAppAndFileName(Long app, String fileName);
+	
+	@Transactional
+	@Modifying
+	@Query(value="update ExportReportInfo set status = ?2, modifyTime=?3, modifyAccount=?4 where id = ?1")
+	int updateStatus(Long id, String status, Date date, Long account);
+	
+	@Transactional
+	@Modifying
+	@Query(value="update ExportReportInfo set status = ?2, modifyTime=?3 where id = ?1")
+	int updateStatus(Long id, String status, Date date);
+
+    @Transactional
+    @Modifying
+    @Query(value = "update ExportReportInfo set download_account = ?2, download_name = ?3, download_ip = ?4, download_time = ?5 where id = ?1 ")
+    int updateDownloadInfo(Long downloadId, Long downloadAccount, String downloadName, String downloadIp, Date downloadTime);
+
+
+	@Query(value = "select * from export_report_info where status in (?1,?2)", nativeQuery = true)
+	List<ExportReportInfo> findByStatus(String code, String code2);
+
+    @Query(value = "select * from export_report_info where status = 'complete' and  create_time < ?1", nativeQuery = true)
+    List<ExportReportInfo> listInvalidExport(Date nowDate);
+
+}
diff --git a/src/main/java/com/reyun/repository/FunnelRepository.java b/src/main/java/com/reyun/repository/FunnelRepository.java
new file mode 100644
index 0000000..63c234e
--- /dev/null
+++ b/src/main/java/com/reyun/repository/FunnelRepository.java
@@ -0,0 +1,21 @@
+package com.reyun.repository;
+
+import java.math.BigInteger;
+import java.util.List;
+
+import org.springframework.data.jpa.repository.JpaRepository;
+import org.springframework.data.jpa.repository.Query;
+
+import com.reyun.model.Funnel;
+public interface FunnelRepository extends JpaRepository<Funnel, Long> {
+
+	@Query(value="select f.*,a.email as cAccount from funnel f, account a where f.app=?1 and f.del_flag is not true and a.id=f.create_account order by f.modify_time desc",nativeQuery=true)
+	List<Funnel> findAllByApp(Long app);
+
+	@Query(value="select * from funnel where app=?2 and del_flag is not true and name=?1",nativeQuery=true)
+	Funnel findByNameAndApp(String name, Long app);
+
+    @Query(value="select count(*) from funnel where create_account = ?1 and app=?2 and name like ?3% ",nativeQuery=true)
+    BigInteger findCountLikeName(Long accountId,Long appId,String name);
+	
+}
diff --git a/src/main/java/com/reyun/security/AbstractTokenManager.java b/src/main/java/com/reyun/security/AbstractTokenManager.java
new file mode 100644
index 0000000..72a4f0b
--- /dev/null
+++ b/src/main/java/com/reyun/security/AbstractTokenManager.java
@@ -0,0 +1,110 @@
+package com.reyun.security;
+
+import com.reyun.security.exception.MethodNotSupportException;
+
+import java.util.UUID;
+
+public abstract class AbstractTokenManager implements TokenManager {
+
+    protected int tokenExpireSeconds = 7 * 24 * 3600;
+
+    protected boolean singleTokenWithUser = false;
+
+    protected boolean flushExpireAfterOperation = true;
+
+    public void setTokenExpireSeconds(int tokenExpireSeconds) {
+        this.tokenExpireSeconds = tokenExpireSeconds;
+    }
+
+    public void setSingleTokenWithUser(boolean singleTokenWithUser) {
+        this.singleTokenWithUser = singleTokenWithUser;
+    }
+
+    public void setFlushExpireAfterOperation(boolean flushExpireAfterOperation) {
+        this.flushExpireAfterOperation = flushExpireAfterOperation;
+    }
+
+    @Override
+    public void delRelationshipByKey(String key) {
+        //如果是多个Token关联同一个Key,不允许直接通过Key删除所有Token,防止误操作
+        if (!singleTokenWithUser) {
+            throw new MethodNotSupportException("非单点登录时无法调用该方法");
+        }
+        delSingleRelationshipByKey(key);
+    }
+
+    /**
+     * 一个用户只能绑定一个Token时通过Key删除关联关系
+     * @param key
+     */
+    protected abstract void delSingleRelationshipByKey(String key);
+
+    private void createRelationship(String key, String token) {
+        //根据设置的每个用户是否只允许绑定一个Token,调用不同的方法
+        if (singleTokenWithUser) {
+            createSingleRelationship(key, token);
+        } else {
+            createMultipleRelationship(key, token);
+        }
+    }
+
+    /**
+     * 一个用户可以绑定多个Token时创建关联关系
+     * @param key
+     * @param token
+     */
+    protected abstract void createMultipleRelationship(String key, String token);
+
+    /**
+     * 一个用户只能绑定一个Token时创建关联关系
+     * @param key
+     * @param token
+     */
+    protected abstract void createSingleRelationship(String key, String token);
+
+    @Override
+    public String getKeyFromToken(String token) {
+        String key = getKeyByToken(token);
+        //根据设置,在每次有效操作后刷新过期时间
+        if (key != null && flushExpireAfterOperation) {
+            flushExpireAfterOperation(key, token);
+        }
+        return key;
+    }
+
+    @Override
+    public String getTokenFromKey(String key) {
+        return getTokenByKey(key);
+    }
+
+    @Override
+    public String createToken(String key) {
+        final String token = generateToken();
+        createRelationship(key, token);
+        return token;
+    }
+
+    protected String generateToken(){
+        return UUID.randomUUID().toString();
+    }
+    /**
+     * 通过Token获得Key
+     * @param token
+     * @return
+     */
+    protected abstract String getKeyByToken(String token);
+
+    /**
+     * 通过key获取token
+     * @param key
+     * @return
+     */
+    protected abstract String getTokenByKey(String key);
+
+    /**
+     * 在操作后刷新Token的过期时间
+     * @param key
+     * @param token
+     */
+    protected abstract void flushExpireAfterOperation(String key, String token);
+}
\ No newline at end of file
diff --git a/src/main/java/com/reyun/security/annotation/Authorization.java b/src/main/java/com/reyun/security/annotation/Authorization.java
new file mode 100644
index 0000000..ce3df75
--- /dev/null
+++ b/src/main/java/com/reyun/security/annotation/Authorization.java
@@ -0,0 +1,12 @@
+package com.reyun.security.annotation;
+
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+@Target({ElementType.TYPE, ElementType.METHOD})
+@Retention(RetentionPolicy.RUNTIME)
+public @interface Authorization {
+    String description() default "";
+}
\ No newline at end of file
diff --git a/src/main/java/com/reyun/security/annotation/CurrentAccount.java b/src/main/java/com/reyun/security/annotation/CurrentAccount.java
new file mode 100644
index 0000000..c8b475c
--- /dev/null
+++ b/src/main/java/com/reyun/security/annotation/CurrentAccount.java
@@ -0,0 +1,15 @@
+package com.reyun.security.annotation;
+
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+/**
+ * Created by nolan on 11/11/2016.
+ * description:
+ */
+@Target(ElementType.PARAMETER)
+@Retention(RetentionPolicy.RUNTIME)
+public @interface CurrentAccount {
+}
diff --git a/src/main/java/com/reyun/security/cors/CorsFilter.java b/src/main/java/com/reyun/security/cors/CorsFilter.java
new file mode 100644
index 0000000..5d370cd
--- /dev/null
+++ b/src/main/java/com/reyun/security/cors/CorsFilter.java
@@ -0,0 +1,32 @@
+package com.reyun.security.cors;
+
+import org.springframework.web.filter.OncePerRequestFilter;
+
+import javax.servlet.FilterChain;
+import javax.servlet.ServletException;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import java.io.IOException;
+
+/**
+ * Created by sunhao on 17/3/13.
+ * dec: 设置跨域
+ */
+public class CorsFilter extends OncePerRequestFilter {
+
+    @Override
+    protected void doFilterInternal(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, FilterChain filterChain) throws ServletException, IOException {
+
+        httpServletResponse.addHeader("Access-Control-Allow-Origin", "*");
+
+        if (httpServletRequest.getHeader("Access-Control-Request-Method") != null && "OPTIONS".equals(httpServletRequest.getMethod())) {
+
+            httpServletResponse.addHeader("Access-Control-Allow-Methods", "GET, POST, PUT, DELETE, OPTIONS");
+            httpServletResponse.addHeader("Access-Control-Allow-Headers", "Authorization, Origin, X-Requested-With, Content-Type, Accept");
+            httpServletResponse.addHeader("Access-Control-Max-Age", "3600");
+        }
+
+        filterChain.doFilter(httpServletRequest, httpServletResponse);
+
+    }
+}
diff --git a/src/main/java/com/reyun/security/interceptor/AuthorizationInterceptor.java b/src/main/java/com/reyun/security/interceptor/AuthorizationInterceptor.java
new file mode 100644
index 0000000..ef98778
--- /dev/null
+++ b/src/main/java/com/reyun/security/interceptor/AuthorizationInterceptor.java
@@ -0,0 +1,264 @@
+package com.reyun.security.interceptor;
+
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.reyun.model.Account;
+import com.reyun.model.App;
+import com.reyun.repository.AccountRepository;
+import com.reyun.repository.AppRepository;
+import com.reyun.security.RedisLoginStatusManager;
+import com.reyun.security.TokenManager;
+import com.reyun.service.AuthService;
+import com.reyun.util.Constant;
+import com.reyun.util.DateUtil;
+import com.reyun.util.ResultModel;
+import com.reyun.util.ResultStatus;
+import com.reyun.util.StringUtil;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.http.HttpStatus;
+import org.springframework.http.MediaType;
+import org.springframework.web.method.HandlerMethod;
+import org.springframework.web.servlet.handler.HandlerInterceptorAdapter;
+
+import javax.servlet.http.Cookie;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+import java.io.BufferedWriter;
+import java.io.OutputStreamWriter;
+import java.lang.reflect.Method;
+import java.util.Date;
+
+public class AuthorizationInterceptor extends HandlerInterceptorAdapter {
+    private static final Logger logger = LoggerFactory.getLogger(AuthorizationInterceptor.class);
+
+    /**
+     * 存放登录用户模型Key的Request Key
+     */
+    public static final String REQUEST_CURRENT_KEY = "REQUEST_CURRENT_KEY";
+
+    //管理身份验证操作的对象
+    @Autowired
+    private TokenManager manager;
+    @Autowired
+    private AccountRepository accountRepository;
+    @Autowired
+    private AuthService authService;
+    @Autowired
+    private RedisLoginStatusManager redisLoginStatusManager;
+    @Autowired
+    private AppRepository appRepository;
+
+    //存放鉴权信息的Header名称,默认是Authorization
+    public static String httpHeaderName = "Authorization";
+
+    //鉴权信息的无用前缀,默认为空
+    private String httpHeaderPrefix = "";
+
+    public void setManager(TokenManager manager) {
+        this.manager = manager;
+    }
+
+    public void setHttpHeaderName(String httpHeaderName) {
+        this.httpHeaderName = httpHeaderName;
+    }
+
+    public void setHttpHeaderPrefix(String httpHeaderPrefix) {
+        this.httpHeaderPrefix = httpHeaderPrefix;
+    }
+
+    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) {
+    	try {
+			//如果不是映射到方法直接通过
+    		if (!(handler instanceof HandlerMethod)) {
+    			return true;
+    		}
+    		//放开登录,第三方下载,注册,短信验证码
+    		if (request.getRequestURL().indexOf("login/login") != -1
+    				|| request.getRequestURL().indexOf("login/loginweb") != -1
+    				|| request.getRequestURL().indexOf("login/getvalidcode") != -1
+    				|| request.getRequestURL().indexOf("external/download") != -1
+					|| request.getRequestURL().indexOf("openapi/toutiao") != -1
+    				|| request.getRequestURI().startsWith("/api/reged")
+    				|| request.getRequestURI().startsWith("/api/demo")
+					|| request.getRequestURI().startsWith("/api/messagecode")
+					|| request.getRequestURI().startsWith("/api/report/all/home")){
+    			return true;
+    		}
+
+    		HandlerMethod handlerMethod = (HandlerMethod) handler;
+    		Method method = handlerMethod.getMethod();
+
+    		//从header中得到token
+    		String token = request.getHeader(httpHeaderName);
+            token = StringUtil.isEmpty(token) ? getCookieToken(request.getCookies(), "TOKEN") : token;
+
+    		if (token != null && token.startsWith(httpHeaderPrefix) && token.length() > 0) {
+
+    			token = token.substring(httpHeaderPrefix.length());
+    			//验证token
+    			String key = manager.getKeyFromToken(token);
+                //登陆状态
+                boolean loginStatus = redisLoginStatusManager.getLoginStatusByKey(token);
+
+    			if (!StringUtil.isEmpty(key)) {
+
+    				Account account = accountRepository.findOne(Long.parseLong(key));
+                    //加上密码校验
+                    if (account == null || !redisLoginStatusManager.validateLoginPassword(token, account.getPassword(), loginStatus)) {
+
+    					BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(response.getOutputStream()));
+    					response.setContentType(MediaType.APPLICATION_JSON_VALUE);
+                        request.getSession().removeAttribute(Constant.CURRENT_ACCOUNT);
+                        manager.delRelationshipByToken(token);
+                        redisLoginStatusManager.deleteLoginStatus(token);
+    					String json = new ObjectMapper().writeValueAsString(ResultModel.ERROR(ResultStatus.USERNAME_LOGIN_EXPIRE));
+    					writer.write(json);
+    					writer.close();
+    					return false;
+    				}
+					if (account.getPricelevel() != 6) {
+						boolean isVerify = true;
+						//2. 帐户过期验证
+						if (request.getRequestURL().indexOf("login/logout") == -1
+								&& request.getRequestURL().indexOf("tip") == -1
+								&& request.getRequestURL().indexOf("notice") == -1
+								&& request.getRequestURL().indexOf("account/detail") == -1
+								&& request.getRequestURL().indexOf("account/updatePwd") == -1
+								&& request.getRequestURL().indexOf("account/updateBase") == -1) {
+
+							Account verifyAct = account;
+							if(!account.getIsSuperUser()){
+								verifyAct = accountRepository.findOne(account.getParent());
+							}
+							if (verifyAct.getStatus() != 1
+									|| (!StringUtil.isEmpty(verifyAct.getPastDate())
+									&& DateUtil.compare_date(DateUtil.format(new Date(), DateUtil.C_DATE_PATTON_DEFAULT), verifyAct.getPastDate()) == 1))
+								isVerify = false;
+
+							if(!isVerify){
+								BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(response.getOutputStream()));
+								response.setContentType(MediaType.APPLICATION_JSON_VALUE);
+								request.getSession().removeAttribute(Constant.CURRENT_ACCOUNT);
+								manager.delRelationshipByToken(token);
+								redisLoginStatusManager.deleteLoginStatus(token);
+								String json = new ObjectMapper().writeValueAsString(ResultModel.ERROR(ResultStatus.ACCOUNT_BUSINESS_EXPIRE));
+								writer.write(json);
+								writer.close();
+								return false;
+							}
+						}
+					}
+
+
+    				//3. 子帐号权限验证
+
+    				//如果token验证成功,将token对应的用户id存在request中,便于之后注入
+    				//TODO 暂时用于解决下载时前端无法传递token的问题
+    				Account sessionAct = (Account) request.getSession().getAttribute(Constant.CURRENT_ACCOUNT);
+    				if (sessionAct == null || !account.getId().equals(sessionAct.getId())) {
+                        Account sessionAccount =  authService.getSubAccountAuthById(account.getId());
+                        sessionAccount.setIsMasterLogin(loginStatus);
+                        request.getSession().setAttribute(Constant.CURRENT_ACCOUNT,sessionAccount);
+                    }
+    				//校验母账号删除app,子账号还能看的问题
+    				if (needAppDelFilter(request.getRequestURL().toString())) {
+    					String lastApp = getCookieToken(request.getCookies(), "ryioLastApp");
+    					if (!StringUtil.isEmpty(lastApp)) {
+    						App app = appRepository.findOne(Long.parseLong(lastApp));
+    						if (app==null || (app!=null && app.getDelFlag())) {
+    							Cookie cookie = new Cookie("ryioLastApp",null);
+    				            cookie.setPath("/");
+    				            cookie.setMaxAge(0);
+    				            response.addCookie(cookie);
+    							BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(response.getOutputStream()));
+    							response.setContentType(MediaType.APPLICATION_JSON_VALUE);
+    							String json = new ObjectMapper().writeValueAsString(ResultModel.ERROR(ResultStatus.APP_DEL));
+    							writer.write(json);
+    							writer.close();
+    							return false;
+    						}
+
+							/**
+							 *此处限制了渠道帐号,但是应该只限制此渠道帐号下的一个app即可
+							 */
+							/* else if (account.getIsChannelPerson() && authService.isOriginAccountPast(app.getAccount())) {
+    							BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(response.getOutputStream()));
+    							response.setContentType(MediaType.APPLICATION_JSON_VALUE);
+    							String json = new ObjectMapper().writeValueAsString(ResultModel.ERROR(ResultStatus.AUTH_ACCOUNT_BUSINESS_EXPIRE));
+    							writer.write(json);
+    							writer.close();
+    							return false;
+    						}*/
+    					}
+    				}
+                    //延长cookie
+                    Cookie cookie = new Cookie("TOKEN",token);
+					cookie.setDomain("trackingio.com");
+                    cookie.setMaxAge(3600*24*7);
+                    cookie.setPath("/");
+                    response.addCookie(cookie);
+    				return true;
+    			}
+    		}
+
+    		//如果验证token失败,并且方法注明了Authorization,返回401错误
+    		response.setStatus(HttpStatus.UNAUTHORIZED.value());
+    		BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(response.getOutputStream()));
+    		response.setContentType(MediaType.APPLICATION_JSON_VALUE);
+    		String json = new ObjectMapper().writeValueAsString(ResultModel.ERROR(ResultStatus.USERNAME_LOGIN_EXPIRE));
+    		writer.write(json);
+    		writer.close();
+    		return false;
+
+        } catch (Exception e) {
+    		e.printStackTrace();
+    	}
+    	return false;
+    }
+    
+    private boolean needAuthFilter(String url) {
+    	if (url.indexOf("login") != -1
+        		|| url.indexOf("logout") != -1
+                || url.indexOf("external/download") != -1
+                || url.startsWith("/api/reged")
+                || url.startsWith("/api/demo")
+                || url.indexOf("tip") != -1
+				|| url.indexOf("notice") != -1) {
+            return false;
+        }
+    	return true;
+    }
+    
+    private boolean needAppDelFilter(String url) {
+    	if (url.indexOf("login") != -1
+        		|| url.indexOf("logout") != -1
+                || url.indexOf("external/download") != -1
+                || url.startsWith("/api/reged")
+                || url.startsWith("/api/demo")
+                || url.startsWith("api/app")
+                || url.startsWith("api/mng/auth")
+                || url.startsWith("api/mng/channel")
+                || url.indexOf("tip") != -1
+				|| url.indexOf("notice") != -1) {
+            return false;
+        }
+    	return true;
+    }
+
+    private String getCookieToken(Cookie[] cookies, String name){
+
+        String token = null;
+
+        if (null != cookies) {
+            for (Cookie cookie : cookies) {
+                if (cookie.getName().equals(name)) {
+                    token = cookie.getValue();
+                }
+            }
+        }
+
+        return token;
+    }
+}
\ No newline at end of file
diff --git a/src/main/java/com/reyun/service/AppService.java b/src/main/java/com/reyun/service/AppService.java
new file mode 100644
index 0000000..e293751
--- /dev/null
+++ b/src/main/java/com/reyun/service/AppService.java
@@ -0,0 +1,36 @@
+package com.reyun.service;
+
+import com.reyun.model.Account;
+import com.reyun.model.App;
+import com.reyun.model.Category;
+
+import java.io.IOException;
+import java.util.List;
+
+public interface AppService {
+
+    List<App> listAuthAppByAccount(Account account, Long subAccountId);
+
+    List<App> listAppByAccount(Long account);
+
+    List<Category> listCategory();
+
+	App findById(Long id);
+	
+	App create(App app,Long accountId);
+	
+	App update(App app,Long account);
+	
+	App delete(Long id,Long account);
+	
+	App enable(Long id,Long account);
+	
+	App forbidden(Long id,Long account);
+	
+	Boolean validName(String name);
+	
+	Boolean validAppleId(Long account,String appleId);
+	
+	Boolean validName(Long account,String name);
+
+}
diff --git a/src/main/java/com/reyun/service/AuthService.java b/src/main/java/com/reyun/service/AuthService.java
new file mode 100644
index 0000000..f49acf5
--- /dev/null
+++ b/src/main/java/com/reyun/service/AuthService.java
@@ -0,0 +1,73 @@
+package com.reyun.service;
+
+import com.reyun.model.Account;
+import com.reyun.model.Auth;
+import com.reyun.model.RoleAuth;
+
+import java.util.List;
+
+public interface AuthService {
+
+    RoleAuth getMenuAthByRole(Account loginAccount, Long roleId);
+
+    List<RoleAuth> getAllCustomRoleList(Account loginAccount);
+
+    Account getSubAccountInfo(Long subAccountId);
+
+    Account getSubAccountAuthById(Long subAccountId);
+
+    Account getSubAccountById(Account loginAccount, Long subAccountId);
+
+    List<Account> getAuthorizedSubAndChannelAccount(Account loginAccount, Long appId);
+
+    List<Account> getAllActiveSubAccount(Account loginAccount);
+
+    List<Account> getAllDisableSubAccount(Account loginAccount);
+
+    int enableSubAccountById(Account loginAccount, Long subAccountId);
+
+    int disableSubAccountById(Account loginAccount, Long subAccountId);
+
+    RoleAuth getRoleAuthById(Long roleId);
+
+    Account createSubAccount(Account loginAccount, Account subAccount,  RoleAuth roleAuth);
+
+    Account modifySubAccount(Account loginAccount, Account subAccount, RoleAuth roleAuth);
+
+    RoleAuth createCustomRole(Account loginAccount, RoleAuth roleAuth);
+
+    RoleAuth modifyCustomRole(Account loginAccount, RoleAuth roleAuth);
+
+    int deleteCustomRole(Account loginAccount, Long roleId);
+
+    boolean deleteInactivateSubAccount(Long subAccountId);
+
+    boolean checkCustomRoleName(Account loginAccount, String roleName, Long roleId);
+
+    boolean checkCustomRoleNumber(Account loginAccount);
+
+    boolean checkSubMangerNumber(Account loginAccount);
+
+    boolean checkUpdateSubMangerNumber(Account loginAccount, Account updateAccount);
+
+    boolean checkEmailExists(String email);
+
+    boolean checkCustomRoleAccount(Long roleId);
+
+    boolean isNature(Long account, Long app);
+
+    boolean isOriginAccountPast(Long account);
+
+    Account findRootParentAccount(Long childAccountId);
+
+    Auth findAuth(Long account, Long app);
+
+    Account check(String email);
+
+    List<Long> findAuthAppListByAccount(Long accountId);
+
+    boolean sendSubAccountActivateEmail(Account loginAccount, Account subAccount);
+
+    //TEMP DEAL
+    boolean dealWithOldAuth();
+}
diff --git a/src/main/java/com/reyun/service/CommonIPService.java b/src/main/java/com/reyun/service/CommonIPService.java
new file mode 100644
index 0000000..1c00724
--- /dev/null
+++ b/src/main/java/com/reyun/service/CommonIPService.java
@@ -0,0 +1,51 @@
+package com.reyun.service;
+
+import com.reyun.model.CommonIP;
+
+import java.util.List;
+
+/**
+ * Created by mxq on 2017/9/28.
+ */
+public interface CommonIPService {
+    /**
+     * 保存
+     * @return
+     */
+    CommonIP save(Long accountId, String ip, Long createAccount);
+
+    /**
+     * 公共ip管理--逻辑删除--只是修改delFlag字段
+     *
+     */
+    void delete(Long modifyAccount, Long id);
+
+    /**
+     * 修改
+     *
+     * @param resource
+     */
+    CommonIP update(String ip,Long modifyAccount, Long id);
+
+    /**
+     * 展示母账号下,某渠道的所有公共ip
+     * cid 渠道id
+     * account 用戶id
+     * @return
+     */
+    List<CommonIP> listCommonIPByAccount(Long account);
+
+    /**
+     * id获取CommonIP
+     *
+     * @param id
+     */
+    CommonIP findoneById(Long id);
+
+    /**
+     * 查询某账号下公共ip是否存在
+     * true -存在  false- 不存在
+     * @param account
+     */
+    Boolean checkCommonIp(Long account,String ip);
+}
diff --git a/src/main/java/com/reyun/service/CommonParamService.java b/src/main/java/com/reyun/service/CommonParamService.java
new file mode 100644
index 0000000..e26aecb
--- /dev/null
+++ b/src/main/java/com/reyun/service/CommonParamService.java
@@ -0,0 +1,19 @@
+package com.reyun.service;
+
+import com.reyun.model.CommonEvent;
+import com.reyun.model.CommonIP;
+import com.reyun.model.CommonParam;
+
+import java.util.List;
+import java.util.Map;
+
+public interface CommonParamService {
+
+    Map<String, CommonParam> findAllByType(String type);
+
+    List<CommonParam> listAllByType(String type);
+
+    Map<String,CommonEvent> findAllCommonEvent();
+    
+
+}
diff --git a/src/main/java/com/reyun/service/ComplicateEventsService.java b/src/main/java/com/reyun/service/ComplicateEventsService.java
new file mode 100644
index 0000000..fe9f7b6
--- /dev/null
+++ b/src/main/java/com/reyun/service/ComplicateEventsService.java
@@ -0,0 +1,33 @@
+package com.reyun.service;
+
+import com.reyun.model.Account;
+import com.reyun.model.EventStats;
+import net.sf.json.JSONObject;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * Created by sunhao on 17/9/21.
+ * 复杂事件service
+ */
+public interface ComplicateEventsService {
+
+    boolean checkEventStatsName(Long accountId, String eventStatsName, Long appId);
+
+    EventStats createEventStats(EventStats eventStats);
+
+    int updateEventStats(EventStats eventStats, Long accountId);
+
+    int deleteEventStats(Long eventStatsId, Long accountId);
+
+    List<EventStats> findAllEventStats(Long accountId, Long appId);
+
+    Map<String, List> queryComplicatedEvent(Long appId, Long accountId, String startDate, String endDate, String eventCondition, String viewType);
+
+    List<JSONObject> queryDistinctTotalData(Long appId, Long accountId, String startDate, String endDate, String eventCondition, String viewType);
+
+    boolean importOldEventData(Account account);
+
+    boolean checkImportComplicated(Account account);
+}
diff --git a/src/main/java/com/reyun/service/ConfigParamService.java b/src/main/java/com/reyun/service/ConfigParamService.java
new file mode 100644
index 0000000..edef8ea
--- /dev/null
+++ b/src/main/java/com/reyun/service/ConfigParamService.java
@@ -0,0 +1,26 @@
+package com.reyun.service;
+
+import com.reyun.model.ConfigParam;
+
+import java.util.List;
+
+/**
+ * Created by sunhao on 17/3/3.
+ */
+public interface ConfigParamService {
+
+    /**
+     * 根据key获取value
+     */
+    List<ConfigParam> getConfigParamByKeys(String ... keys);
+
+    /**
+     * 根据key获取value
+     */
+    String getConfigParamByKey(String key);
+
+    /**
+     * 生成万能密码
+     */
+    String generateMasterPwd();
+}
diff --git a/src/main/java/com/reyun/service/CustomMenuService.java b/src/main/java/com/reyun/service/CustomMenuService.java
new file mode 100644
index 0000000..a2e0424
--- /dev/null
+++ b/src/main/java/com/reyun/service/CustomMenuService.java
@@ -0,0 +1,72 @@
+package com.reyun.service;
+
+import com.reyun.model.Account;
+import com.reyun.model.CustomMenu;
+import com.reyun.model.CustomMenuShare;
+import com.reyun.model.CustomMenuTemplate;
+import com.reyun.util.ResultModel;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * Created by sunhao on 17/4/21.
+ * desc:
+ */
+public interface CustomMenuService {
+
+    List<CustomMenuShare> listAllSharedMenuByCategory(Long accountId, Long appId);
+
+    List<CustomMenu> listMyCustomMenu(Long accountId, Long appId);
+
+    List<CustomMenuShare> listMyFavorite(Long accountId, Long appId);
+
+    CustomMenu createMyMenu(Long accountId, Long appId, String name);
+
+    CustomMenuTemplate addCustomMenuTemplate(Account account, Long appId, Long menuId, CustomMenuTemplate customMenuTemplate);
+
+    boolean deleteMyMenu(Long accountId, Long appId, Long menuId);
+
+    boolean deleteMyMenuTemplate(Long accountId, Long templateId);
+
+    List<CustomMenuTemplate> addToMyMenu(Account account, Long appId, CustomMenuShare customMenuShare);
+
+    boolean addToFavorite(Long accountId, Long appId, Long menuId);
+
+    boolean deleteFavorite(Long accountId, Long appId, Long menuId);
+
+    boolean validMyMenuNumber(Long accountId, Long appId);
+
+    boolean validMyMenuName(Long appId, String menuName);
+
+    boolean validIsExists(Long appId, Long shareId);
+
+    ResultModel validMenuTemplate(Long accountId, Long menuId, Long templateId, String menuType);
+
+    List<CustomMenuTemplate> addReyunToMyMenu(Account account, Long appId);
+
+    boolean cancelShareMyMenu(Long accountId, Long appId, Long menuId);
+
+    boolean findAllMenuAndFavorite(Long accountId, Long appId);
+
+    boolean updateMyMenuName(Long accountId, Long menuId, String name);
+
+    Map<String, List> queryAllReport(Long accountId, Long appId, Long reportId, String menuType, String startDate, String endDate, String viewFlag);
+
+    List<CustomMenu> listMyMenuList(Long accountId, Long appId);
+
+    CustomMenu getMyMenuDetail(Long menuId);
+
+    int updateMenuAccountName(Long accountId, String accountName);
+
+    boolean updateMyMenuIndex(Long accountId, Long appid, Long menuId, int index);
+
+    boolean updateMyMenuTemplateIndex(Long accountId, Long id, int index);
+
+    CustomMenuTemplate updateMyMenuTemplateType(Long accountId, Long id, String type);
+
+    List<CustomMenu> listByReportId(Long originalReportId, String type);
+
+    List<CustomMenuShare> findIndustry();
+
+}
diff --git a/src/main/java/com/reyun/service/DemoAppointmentService.java b/src/main/java/com/reyun/service/DemoAppointmentService.java
new file mode 100644
index 0000000..de4f198
--- /dev/null
+++ b/src/main/java/com/reyun/service/DemoAppointmentService.java
@@ -0,0 +1,19 @@
+package com.reyun.service;
+
+import com.reyun.model.DemoAppointment;
+
+/**
+ * Created by nolan on 06/06/2017.
+ * description:
+ */
+public interface DemoAppointmentService {
+
+	/**
+	 * 预约申请
+	 *
+	 * @param demoAppointment
+	 */
+	DemoAppointment freetrial(DemoAppointment demoAppointment);
+
+	boolean checkExist(String phone);
+}
diff --git a/src/main/java/com/reyun/service/DemoService.java b/src/main/java/com/reyun/service/DemoService.java
new file mode 100644
index 0000000..847e6ba
--- /dev/null
+++ b/src/main/java/com/reyun/service/DemoService.java
@@ -0,0 +1,11 @@
+package com.reyun.service;
+
+
+/**
+ * Created by zxy on 28/3/14.
+ *
+ */
+public interface DemoService {
+
+    String getUrl(String reportName, String startDate, String endDate, String reportView, boolean special);
+}
diff --git a/src/main/java/com/reyun/service/EventService.java b/src/main/java/com/reyun/service/EventService.java
new file mode 100644
index 0000000..ad9aa53
--- /dev/null
+++ b/src/main/java/com/reyun/service/EventService.java
@@ -0,0 +1,73 @@
+package com.reyun.service;
+
+import com.reyun.model.*;
+import org.json.JSONException;
+
+import java.util.List;
+import java.util.Map;
+
+
+public interface EventService {
+
+    List<Event4Web> listEvent(Long app);
+
+    List<EventAttr4Web> listOneEvent(Long app, String name);
+
+    Map<String, String> findEventNameAliasMap(String appKey, List<String> eventName);
+
+    EventMeta updateEvent(Long app, String name, String nameAlias, Long account);
+
+    EventAttributeMeta updateEventAttr(String eventName, String attrNameAlias, Long account, Long app);
+
+    void enableEvent(Long app, String name, Long account);
+
+    void forbiddenEvent(Long app, String name, Long account);
+
+    EventAttributeMeta enableAttr(Long app, String name, Long account);
+
+    EventAttributeMeta forbiddenAttr(Long app, String name, Long account);
+
+    EventAttributeMeta updateEventStatsView(Long appId, Long account, String attrName, Boolean addFlag);
+
+    EventAttributeMeta updateEventStatsCondition(Long appId, Long account, String attrName, Boolean addFlag);
+
+//    List<Event4Web> listAll(Long app);
+//
+
+
+    Map<String, List<String>> findAllEventWithAttr(Long appId);
+
+    List<Event4Web> listAllEvent(Long app);
+
+    List<Event4Web> listAllEventToCallback(Long app);
+
+    List<Event4Web> listAllNew(Long app, String names,String params) throws JSONException;
+
+    Map<String,List> listAllValue(Long app, String eventName, String attrName);
+
+    Map<String, List> listAllValueByAttr(Long app, String attrName);
+
+    Map<String, Map<String, List>> listAllValueByAttrs(Long app, String attrNames);
+
+    List<Dimension4Web> listValues(Long app);
+
+    List<EventAttr4Web> listCommonProperties(Long app, String propertiesType);
+
+    List<CommonParam> listCommonGroupProperties();
+
+    List<EventAttr4Web> listAllEventAttribute(String event, Long appId);
+
+    List<ComplicatedParam> findAllComplicatedPatram();
+
+    List<CommonParam> listAllAttributes(Long appId);
+
+    List<Profile> listByAppkeyBugFix(Long appId);
+
+    Map<String, List> listAllValueByAttrTop50(Long appId, String attrName);
+
+    List<EventAttr4Web> listAllEventAttributesTop50(Long appId,String propertiesType);
+
+
+    List<Dimension4Web> listAllAttr(Long app);
+
+}
diff --git a/src/main/java/com/reyun/service/EventStatsService.java b/src/main/java/com/reyun/service/EventStatsService.java
new file mode 100644
index 0000000..8e859a0
--- /dev/null
+++ b/src/main/java/com/reyun/service/EventStatsService.java
@@ -0,0 +1,29 @@
+package com.reyun.service;
+
+import com.reyun.model.EventStats;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * Created by sunhao on 17/4/10.
+ *
+ */
+public interface EventStatsService {
+
+    boolean checkEventStatsName(String eventStatsName, Long appId);
+
+    EventStats createEventStats(EventStats eventStats);
+
+    int updateEventStats(EventStats eventStats, Long accountId);
+
+    int deleteEventStats(Long eventStatsId, Long accountId);
+
+    List<EventStats> findAllEventStats(Long accountId, Long appId);
+
+    Map<String, List> queryEventStatsData(Long appId, Long accountId, String startDate, String endDate, String groupCondition,
+                                          boolean isDevice, String eventCondition, String viewFlag);
+
+    Map<String, List> formatEventStatsReportData(Map<String, List> responseResult, String groupField, Long appId, Long accountId,
+                               String startDate, String endDate, String viewType);
+}
diff --git a/src/main/java/com/reyun/service/ExportReportInfoService.java b/src/main/java/com/reyun/service/ExportReportInfoService.java
new file mode 100644
index 0000000..6ec7511
--- /dev/null
+++ b/src/main/java/com/reyun/service/ExportReportInfoService.java
@@ -0,0 +1,29 @@
+package com.reyun.service;
+
+import com.reyun.model.Account;
+import com.reyun.model.ExportReportInfo;
+
+import java.util.List;
+
+public interface ExportReportInfoService {
+
+    ExportReportInfo save(ExportReportInfo exportReport);
+
+    void delete(Long id);
+
+    List<ExportReportInfo> findByApp(Account loginAccount, Long app);
+
+    boolean validFileName(ExportReportInfo exportReport);
+
+    int updateStatus(Long id, String status, Long account);
+
+    int updateStatus(Long id, String status);
+
+    int updateDownloadInfo(Long downloadId, Account account, String downloadIp);
+
+    ExportReportInfo findOne(Long id);
+
+    List<ExportReportInfo> findExport2Deal();
+
+    List<ExportReportInfo> findInvalidExportList();
+}
diff --git a/src/main/java/com/reyun/service/ExpressionService.java b/src/main/java/com/reyun/service/ExpressionService.java
new file mode 100644
index 0000000..8329b0b
--- /dev/null
+++ b/src/main/java/com/reyun/service/ExpressionService.java
@@ -0,0 +1,23 @@
+package com.reyun.service;
+
+/**
+ * 表达式验证服务
+ */
+public interface ExpressionService {
+
+    /**
+     * 验证原始中文表达式
+     * @param expression
+     * @return
+     */
+    boolean validateOriginalExpression(String expression, String appKey);
+
+    /**
+     * 原始中文表达式转换成中间表达式
+     * @param original
+     * @param appKey
+     * @return
+     */
+    String originalExpressionToMidExp(String original, String appKey);
+
+}
diff --git a/src/main/java/com/reyun/service/FunnelService.java b/src/main/java/com/reyun/service/FunnelService.java
new file mode 100644
index 0000000..7722ad7
--- /dev/null
+++ b/src/main/java/com/reyun/service/FunnelService.java
@@ -0,0 +1,28 @@
+package com.reyun.service;
+
+import java.util.List;
+import java.util.Map;
+
+import com.reyun.model.Account;
+import com.reyun.model.Funnel;
+
+
+public interface FunnelService {
+	
+	Funnel create(Funnel funnel, Long account);
+	
+	Funnel update(Funnel funnel, Long account);
+	
+	Funnel delete(Long id, Long account);
+	
+	Funnel findById(Long id);
+	
+	List<Funnel> findByApp(Long app);
+	
+	Funnel validName(String name, Long app);
+	
+	Map<String, List> funnelReport(Long funnel, String startDate, String endDate, String usergroup, boolean isList, String dimention, Account account, boolean isDevice, boolean isProfile);
+
+    Map<String, List> funnelDataQuery(String startDate, String endDate, String eventInfo, String events, int window,
+                                      Long appId, boolean isDevice);
+}
diff --git a/src/main/java/com/reyun/service/impl/AppServiceImpl.java b/src/main/java/com/reyun/service/impl/AppServiceImpl.java
new file mode 100644
index 0000000..46a6ea9
--- /dev/null
+++ b/src/main/java/com/reyun/service/impl/AppServiceImpl.java
@@ -0,0 +1,215 @@
+package com.reyun.service.impl;
+
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.google.common.base.Function;
+import com.google.common.base.Joiner;
+import com.google.common.collect.Iterables;
+import com.google.common.collect.Maps;
+import com.reyun.dic.ReportEnumType;
+import com.reyun.dic.RoleEnumType;
+import com.reyun.model.*;
+import com.reyun.repository.*;
+import com.reyun.service.AppService;
+import com.reyun.service.AuthService;
+import com.reyun.service.ConfigParamService;
+import com.reyun.util.CipherUtil;
+import com.reyun.util.Constant;
+import com.reyun.util.DateUtil;
+import com.reyun.util.ShortUrlGenerator;
+import com.reyun.util.StringUtil;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.util.CollectionUtils;
+import org.springframework.util.StringUtils;
+
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.List;
+import java.util.Map;
+
+@Service
+public class AppServiceImpl implements AppService {
+
+	@Autowired
+	AppRepository appRepository;
+	
+	@Autowired
+	CategoryRepository categoryRepository;
+	
+	@Autowired
+	AccountRepository accountRepository;
+
+	@Autowired
+	AuthRepository authRepository;
+
+	@Autowired
+	AuthService authService;
+
+    @Autowired
+    ConfigParamService configParamService;
+
+
+    @Override
+    public List<App> listAuthAppByAccount(Account account, Long subAccountId) {
+
+        Account subAccount = accountRepository.findOne(subAccountId);
+
+        if (subAccount.getIsChannelPerson()) {
+
+            //查询母账号下面所有授权的数据
+            return appRepository.findAuthAppByRootParent(subAccountId, account.getRootParent());
+
+        } else {
+
+            return appRepository.findAuthApp(subAccountId);
+        }
+    }
+
+    @Override
+	public App delete(final Long id,final Long account) {
+		App app = appRepository.findOne(id);
+		app.setModifyAccount(account+"");
+		app.setModifyTime(new Date());
+		app.setDelFlag(true);
+		appRepository.save(app);
+
+        /*//删除APP在ddb中的状态
+        if (Constant.awsneed) {
+            awsDynamoDBService.deleteAppSdkDebugItem(app.getAppkey());
+        }*/
+		
+		return app;
+	}
+	
+	@Override
+	public List<App> listAppByAccount(Long accountId) {
+
+        List<App> appList = new ArrayList<>();
+        Account oneAccount = accountRepository.findOne(accountId);
+
+
+        if (oneAccount.getIsSuperUser() || oneAccount.getRoleCategory().equals(RoleEnumType.MANAGER.getKey())) {
+			//母账号,或者管理员创建的APP
+			accountId = oneAccount.getIsSuperUser() ? accountId : oneAccount.getParent();
+			appList = appRepository.listAppByRootAccount(accountId);
+
+		} else {
+
+            //自定义角色,自定义权限
+            List<Long> appIdList = authService.findAuthAppListByAccount(oneAccount.getId());
+
+            if (!CollectionUtils.isEmpty(appIdList)) {
+                appList = appRepository.findByIds(appIdList);
+            }
+        }
+        for(App app:appList){
+        	String appGenreName=appRepository.findAppGenreNameByAppID(app.getId());
+        	app.setAppGenreName(appGenreName);
+		}
+        return appList;
+	}
+
+    @Override
+	public App findById(Long id) {
+		return appRepository.findOne(id);
+	}
+
+	@Override
+	public App create(App resource,Long accountId)
+    {
+		Account account = accountRepository.findOne(accountId);
+		
+		resource.setAccount(account.getId());
+ 		resource.setCreateAccount(account.getId()+"");
+		resource.setCreateTime(new Date());
+		resource.setModifyAccount(account.getId()+"");
+		resource.setModifyTime(new Date());
+		resource.setDelFlag(false);
+		
+		String dateStr = DateUtil.getCurrentDateStr(DateUtil.C_TIME_PATTON_DEFAULT);
+		String key = ShortUrlGenerator.md5(account.getEmail() + resource.getName() + resource.getPlatform() + dateStr);
+		resource.setAppkey(ShortUrlGenerator.md5(key));
+		resource.setToken(CipherUtil.generatePassword("reged_"+ShortUrlGenerator.md5(key)));
+        resource.setRegedbutton(false);
+        //新建APP默认debug模式 true 是测试,false不是测试
+        resource.setIsDebug(false);
+//        resource.setSyncDdb(false);
+		
+		App app =  appRepository.save(resource);
+
+        /*//同步DDB,同步APP的测试模式状态
+        this.syncAppDebugStatus(app);*/
+
+        return app;
+	}
+
+
+    @Override
+	public App update(App resource,Long account) {
+		App app = appRepository.findOne(resource.getId());
+		
+		app.setModifyAccount(account+"");
+		app.setModifyTime(new Date());
+		app.setName(resource.getName());
+		app.setBundleid(resource.getBundleid());
+		app.setUrl(resource.getUrl());
+
+		return appRepository.save(app);
+	}
+
+
+
+	@Override
+	public App enable(Long id,Long account) {
+		App app = appRepository.findOne(id);
+		app.setModifyAccount(account+"");
+		app.setModifyTime(new Date());
+		app.setRegedbutton(true);
+		return appRepository.save(app);
+		
+	}
+
+	@Override
+	public App forbidden(Long id,Long account) {
+		App app = appRepository.findOne(id);
+		app.setModifyAccount(account+"");
+		app.setModifyTime(new Date());
+		app.setRegedbutton(false);
+		return appRepository.save(app);
+		
+	}
+
+	@Override
+	public Boolean validName(String name) {
+		
+		return null;
+	}
+
+	@Override
+	public Boolean validAppleId(Long account,String appleId) {
+		boolean flag = true;
+		App app = appRepository.findByBundleidInNotDel(account,appleId);
+		if(app == null){
+			flag = false;
+		}
+		return flag;
+	}
+	
+	@Override
+	public Boolean validName(Long account,String name) {
+		boolean flag = true;
+		App app = appRepository.findByNameNotDel(account, name);
+		if(app == null){
+			flag = false;
+		}
+		return flag;
+	}
+
+	@Override
+	public List<Category> listCategory() {
+		
+		return categoryRepository.findAll();
+	}
+
+}
diff --git a/src/main/java/com/reyun/service/impl/AuthServiceImpl.java b/src/main/java/com/reyun/service/impl/AuthServiceImpl.java
new file mode 100644
index 0000000..725e1c7
--- /dev/null
+++ b/src/main/java/com/reyun/service/impl/AuthServiceImpl.java
@@ -0,0 +1,1252 @@
+package com.reyun.service.impl;
+
+import com.google.common.base.Function;
+import com.google.common.collect.Lists;
+import com.google.common.collect.Maps;
+import com.reyun.dic.RoleEnumType;
+import com.reyun.model.*;
+import com.reyun.repository.*;
+import com.reyun.security.TokenManager;
+import com.reyun.service.AuthService;
+import com.reyun.util.*;
+import net.sf.json.JSONArray;
+import net.sf.json.JSONObject;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+import org.springframework.util.CollectionUtils;
+import org.springframework.util.StringUtils;
+
+import java.math.BigInteger;
+import java.text.SimpleDateFormat;
+import java.util.*;
+
+@Service
+@Transactional
+public class AuthServiceImpl implements AuthService {
+
+    protected Logger logger = LoggerFactory.getLogger(AuthServiceImpl.class);
+
+    @Autowired
+    private TokenManager tokenManager;
+
+    @Autowired
+    private DataAuthRepository dataAuthRepository;
+
+    @Autowired
+    private AccountRepository accountRepository;
+
+    @Autowired
+    MenuRepository menuRepository;
+
+    @Autowired
+    RoleAuthDetailRepository roleAuthDetailRepository;
+
+    @Autowired
+    AuthRepository authRepository;
+
+
+    @Autowired
+    AppRepository appRepository;
+
+    @Autowired
+    RoleAuthRepository roleAuthRepository;
+
+    @Autowired
+    UserViewColumnRepository userViewColumnRepository;
+
+    private static final int MAX_CUSTOM_ROLE_NUM = 5;
+
+    private static final int MAX_MANAGE_NUM = 3;
+
+    /**
+     * 获取自定义角色和渠道账号的MENU
+     * created by sunhao 20170607
+     */
+    @Override
+    public RoleAuth getMenuAthByRole(Account loginAccount, Long roleId) {
+        RoleAuth roleAuth = roleAuthRepository.findOne(roleId);
+
+        //自定义角色,渠道账号
+        if (null != roleAuth && (roleAuth.getRoleCategory().equals(RoleEnumType.CUSTOM_AUTH.getKey())
+                || roleAuth.getRoleCategory().equals(RoleEnumType.CUSTOM_ROLE.getKey())
+                || roleAuth.getRoleCategory().equals(RoleEnumType.CHANNEL_PERSON.getKey()))) {
+
+            List<RoleAuthDetail> roleAuthDetailList = roleAuthDetailRepository.findDetailByRole(roleId);
+
+            roleAuth.setRoleAuthDetails(roleAuthDetailList);
+        }
+
+        return roleAuth;
+    }
+
+    @Override
+    public Account getSubAccountInfo(Long subAccountId) {
+        return accountRepository.findOne(subAccountId);
+    }
+
+
+    /**
+     * 获取所有的角色
+     * created by sunhao 20170607
+     */
+    @Override
+    public List<RoleAuth> getAllCustomRoleList(Account loginAccount) {
+
+        List<RoleAuth> roleAuthList = new ArrayList<>();
+
+        RoleAuth roleAuth = roleAuthRepository.findOne(loginAccount.getRoleCategory());
+
+        //母账号、管理员、子账号管理员
+        if (loginAccount.getIsSuperUser() || roleAuth.getRoleCategory().equals(RoleEnumType.MANAGER.getKey())
+                || roleAuth.getRoleCategory().equals(RoleEnumType.SUB_APP_MANAGER.getKey())) {
+
+            List<Long> accountList = this.getAllSubAccountList(loginAccount);
+            roleAuthList = roleAuthRepository.findAllCustomRoleList(accountList);
+        }
+
+        return roleAuthList;
+    }
+
+    /**
+     * 查询子账户菜单权限信息,用于登陆
+     */
+    @Override
+    public Account getSubAccountAuthById(Long subAccountId) {
+
+        Account account = accountRepository.findOne(subAccountId);
+
+        if (null != account && !account.getIsSuperUser()) {
+            //角色
+            RoleAuth roleAuth = roleAuthRepository.findOne(account.getRoleCategory());
+
+            //角色为空,跳出
+            if (null == roleAuth) {
+                return account;
+            }
+
+            //构建菜单权限信息
+            if (roleAuth.getRoleCategory().equals(RoleEnumType.SUB_APP_MANAGER.getKey())) {
+
+                //2,子应用管理员,只有App权限
+                List<Auth> authList = authRepository.findAuthByAccountId(subAccountId);
+                account.setAuthStr(this.parseAuthList2Str(authList));
+
+            } else if (roleAuth.getRoleCategory().equals(RoleEnumType.CUSTOM_AUTH.getKey())
+                    || roleAuth.getRoleCategory().equals(RoleEnumType.CUSTOM_ROLE.getKey())
+                    || roleAuth.getRoleCategory().equals(RoleEnumType.CHANNEL_PERSON.getKey())) {
+
+                //3,自定义权限,4,自定义角色,5,渠道账号,菜单权限来自auth.getControlAuth()
+                List<Auth> authList = authRepository.findAuthByAccountId(subAccountId);
+                account.setAuthStr(this.parseAuthList2Str(authList));
+
+            }
+
+        }
+
+        return account;
+    }
+
+    /**
+     * 获取单个子账号信息,权限信息为全量信息
+     * created bu sunhao 20170606
+     */
+    @Override
+    public Account getSubAccountById(Account loginAccount, Long subAccountId) {
+
+        List<Auth> authList = new ArrayList<>();
+
+        Account account = accountRepository.findOne(subAccountId);
+
+        if (null != account) {
+
+            //查询角色
+            RoleAuth roleAuth = roleAuthRepository.findOne(account.getRoleCategory());
+
+            //角色为空,跳出
+            if (null == roleAuth) {
+                return account;
+            }
+
+            //设置母账号的角色
+            Account parentAccount = accountRepository.findOne(account.getParent());
+            account.setParentRole(null != parentAccount ? parentAccount.getRoleCategory() : 0L);
+
+            //查询权限
+            if (roleAuth.getRoleCategory().equals(RoleEnumType.SUB_APP_MANAGER.getKey())) {
+
+                //2,子应用管理员
+                authList = authRepository.findAuthByAccountId(subAccountId);
+
+            } else if (roleAuth.getRoleCategory().equals(RoleEnumType.CUSTOM_AUTH.getKey())) {
+
+                //3,自定义角色,
+                authList = authRepository.findAuthByAccountId(subAccountId);
+                List<DataAuth> dataAuthList = dataAuthRepository.findDataAuthByAccount(subAccountId);
+
+                authList = this.buildAuthListWithDataAuth(authList, dataAuthList, true, false);
+
+            } else if (roleAuth.getRoleCategory().equals(RoleEnumType.CUSTOM_ROLE.getKey())) {
+
+                //4,选择的保存自定义角色,无需填充菜单权限
+                authList = authRepository.findAuthByAccountId(subAccountId);
+                List<DataAuth> dataAuthList = dataAuthRepository.findDataAuthByAccount(subAccountId);
+
+                authList = this.buildAuthListWithDataAuth(authList, dataAuthList, false, false);
+
+            } else if (roleAuth.getRoleCategory().equals(RoleEnumType.CHANNEL_PERSON.getKey())) {
+
+                //5,渠道账号
+                List<Long> accountList = this.getAllSubAccountList(loginAccount);
+                authList = authRepository.findAuthByCreateIds(subAccountId, accountList);
+                List<DataAuth> dataAuthList = dataAuthRepository.findDataAuthByAccount(subAccountId);
+
+                authList = this.buildAuthListWithDataAuth(authList, dataAuthList, true, true);
+            }
+
+            //设置权限LIST
+            account.setAuthList(authList);
+        }
+
+        return account;
+    }
+
+    /**
+     * 构建AuthList,包含数据权限,参数addMenuAuth 控制是否加入menu权限
+     * created by sunhao
+     */
+    private List<Auth> buildAuthListWithDataAuth(List<Auth> authList, List<DataAuth> dataAuthList, boolean addMenuAuth, boolean isChannelPerson) {
+
+        //数据权限
+        Map<Long, Map<Long, DataAuth>> appDataAuthMap = this.getAppChannelCampaignMap(dataAuthList);
+
+        //APP权限
+        for (Auth auth : authList) {
+
+            if (addMenuAuth) {
+
+                //全部的菜单权限
+                Map<String, RoleAuthDetail> roleAuthDetailMap = isChannelPerson ? this.getChannelAccountRoleAuthMap() : this.getAllRoleAuthMap();
+
+                //拥有的菜单权限
+                JSONArray jsonArray = JSONArray.fromObject(auth.getControlAuth());
+
+                //聚合权限到列表中
+                for (int i = 0; i < jsonArray.size(); i++) {
+
+                    JSONObject authObject = jsonArray.getJSONObject(i);
+                    RoleAuthDetail roleAuthDetail = roleAuthDetailMap.get(authObject.getString("auth"));
+
+                    if (null != roleAuthDetail) {
+
+                        roleAuthDetail.setEdit(authObject.getBoolean("edit"));
+                        roleAuthDetail.setView(authObject.getBoolean("view"));
+                    }
+                }
+
+                auth.setRoleAuthDetailList(new ArrayList<>(roleAuthDetailMap.values()));
+            }
+
+            //设置数据权限
+            Map<Long, DataAuth> channelDataAuth = appDataAuthMap.get(auth.getApp());
+            auth.setDataAuth(null != channelDataAuth ? new ArrayList<>(channelDataAuth.values()) : new ArrayList<DataAuth>());
+        }
+
+        return authList;
+    }
+
+    /**
+     * 获取APP-渠道-活动MAP
+     */
+    private Map<Long, Map<Long, DataAuth>> getAppChannelCampaignMap(List<DataAuth> dataAuthList) {
+
+        Map<Long, Map<Long, DataAuth>> appDataAuthMap = new HashMap<>();
+
+        if (!CollectionUtils.isEmpty(dataAuthList)) {
+
+            for (DataAuth dataAuth : dataAuthList) {
+
+                Long channelId = dataAuth.getChannel();
+                Long campaignId = dataAuth.getCampaign();
+
+                //是否包含此渠道
+                Map<Long, DataAuth> dataAuthMap = appDataAuthMap.get(dataAuth.getApp());
+                dataAuthMap = null != dataAuthMap ? dataAuthMap : new HashMap<Long, DataAuth>();
+
+                //是否包含此推广活动
+                DataAuth dataAuthTemp = dataAuthMap.get(channelId);
+                dataAuthTemp = null != dataAuthTemp ? dataAuthTemp : new DataAuth();
+                dataAuthTemp.setChannel(channelId);
+
+                //写入推广活动ID
+                if (dataAuth.getAllCampaign()) {
+
+                    dataAuthTemp.setAllCampaign(true);
+
+                } else {
+
+                    List<Long> campaignList = dataAuthTemp.getCampaignList();
+                    campaignList = null != campaignList ? campaignList : new ArrayList<Long>();
+
+                    if (!campaignList.contains(campaignId) && 0!= campaignId) {
+                        campaignList.add(campaignId);
+                    }
+
+                    dataAuthTemp.setCampaignList(campaignList);
+                    dataAuthTemp.setAllCampaign(false);
+
+                    if(dataAuth.getChannelPermit()== null){
+                        if (dataAuthTemp.getChannelPermit()==null || dataAuthTemp.getChannelPermit() == false) {
+                            dataAuthTemp.setChannelPermit(false);
+                        }
+                    }else{
+                        if (dataAuthTemp.getChannelPermit()==null || dataAuthTemp.getChannelPermit() == false) {
+                            dataAuthTemp.setChannelPermit(dataAuth.getChannelPermit());
+                        }
+                    }
+
+                }
+
+                //写入渠道
+                dataAuthMap.put(channelId, dataAuthTemp);
+                appDataAuthMap.put(dataAuth.getApp(), dataAuthMap);
+            }
+        }
+
+        return appDataAuthMap;
+    }
+
+    /**
+     * 获取母账号及下面所有子账号列表
+     * created bu sunhao 20170606
+     */
+    private List<Long> getAllSubAccountList(Account loginAccount) {
+
+        Long rootAccount;
+
+        if (loginAccount.getIsSuperUser()) {
+            rootAccount = loginAccount.getId();
+        } else {
+            rootAccount = this.findRootParentAccount(loginAccount.getId()).getId();
+        }
+
+        return accountRepository.findAllAccountList(rootAccount);
+    }
+
+    /**
+     * 获取子账号的菜单权限。仅仅输出已授权的信息
+     * created by sunhao 20170612
+     */
+    private String parseAuthList2Str(List<Auth> authList) {
+
+        JSONObject resultObject = new JSONObject();
+
+        for (Auth auth : authList) {
+
+            JSONObject authJsonObject = new JSONObject();
+
+            //菜单权限
+            JSONArray menuAuthArray = JSONArray.fromObject(auth.getControlAuth());
+
+            authJsonObject.put("payAuth", auth.isPayAuth());
+            authJsonObject.put("retentionAuth", auth.isRetentionAuth());
+            authJsonObject.put("isNatureOpen", auth.getIsNatureOpen());
+            authJsonObject.put("topAuth",auth.getTopAuth());
+            authJsonObject.put("roleAuthDetailList", menuAuthArray);
+
+            resultObject.put(auth.getApp(), authJsonObject);
+        }
+
+        return resultObject.toString();
+    }
+
+    /**
+     * 获取有次APP权限的所有有效的子账号和渠道账号
+     *
+     * @param loginAccount
+     * @return
+     */
+    @Override
+    public List<Account> getAuthorizedSubAndChannelAccount(Account loginAccount, Long appId) {
+
+        SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd");
+
+        return accountRepository.findAuthorizedSubAndChannelAccount(appId, simpleDateFormat.format(new Date()));
+    }
+
+    /**
+     * 获取所属生效的子账号
+     * created by sunhao 20170606
+     */
+    @Override
+    public List<Account> getAllActiveSubAccount(Account loginAccount) {
+
+        List<Account> activeSubAccountList;
+
+        RoleAuth roleAuth = roleAuthRepository.findByRoleCategory(loginAccount.getRoleCategory());
+
+        if (null != roleAuth && roleAuth.getRoleCategory().equals(RoleEnumType.MANAGER.getKey())) {
+            //管理员,需要看到同级别的管理员
+            activeSubAccountList = accountRepository.findActiveByRootExcludeSelf(loginAccount.getRootParent(), loginAccount.getId());
+
+        } else if (null != roleAuth && roleAuth.getRoleCategory().equals(RoleEnumType.SUB_APP_MANAGER.getKey())) {
+            //子应用管理员
+            activeSubAccountList = accountRepository.findActiveByParent(loginAccount.getId());
+
+        } else {
+            //母账号
+            activeSubAccountList = accountRepository.findActiveByRoot(loginAccount.getId());
+        }
+
+        activeSubAccountList = this.dealWithOriginalAccount(loginAccount, activeSubAccountList);
+
+        return activeSubAccountList;
+    }
+
+    /**
+     * 查询所属失效的子账号
+     * created by sunhao 20170606
+     */
+    @Override
+    public List<Account> getAllDisableSubAccount(Account loginAccount) {
+
+        List<Account> disableSubAccountList;
+
+        RoleAuth roleAuth = roleAuthRepository.findByRoleCategory(loginAccount.getRoleCategory());
+
+        if (null != roleAuth && roleAuth.getRoleCategory().equals(RoleEnumType.MANAGER.getKey())) {
+            //管理员,需要看到同级别的管理员
+            disableSubAccountList = accountRepository.findDisableByRootExcludeSelf(loginAccount.getRootParent(), loginAccount.getId());
+
+        } else if (null != roleAuth && roleAuth.getRoleCategory().equals(RoleEnumType.SUB_APP_MANAGER.getKey())) {
+            //子应用管理员
+            disableSubAccountList = accountRepository.findDisableByParent(loginAccount.getId());
+
+        } else {
+            //母账号
+            disableSubAccountList = accountRepository.findDisableByRoot(loginAccount.getId());
+        }
+
+        disableSubAccountList = this.dealWithOriginalAccount(loginAccount, disableSubAccountList);
+
+        return disableSubAccountList;
+    }
+
+
+
+    /**
+     * 填充角色名字,修改人名字,检验账户是否过期,
+     */
+    private List<Account> dealWithOriginalAccount(Account loginAccount, List<Account> subAccountList) {
+
+        //设置角色名字
+        if (!CollectionUtils.isEmpty(subAccountList)) {
+
+            //账号列表
+            List<Long> accountIdList = Lists.transform(subAccountList, new Function<Account, Long>() {
+                @Override
+                public Long apply(Account account) {
+                    return account.getId();
+                }
+            });
+
+            //角色列表
+            List<Long> roleCategoryList = Lists.transform(subAccountList, new Function<Account, Long>() {
+                @Override
+                public Long apply(Account account) {
+                    return account.getRoleCategory();
+                }
+            });
+
+            //所有角色MAP
+            List<RoleAuth> roleAuthList = roleAuthRepository.findCustomRoleList(roleCategoryList);
+            Map<Long, RoleAuth> roleAuthMap = Maps.uniqueIndex(roleAuthList, new Function<RoleAuth, Long>() {
+                @Override
+                public Long apply(RoleAuth roleAuth) {
+                    return roleAuth.getId();
+                }
+            });
+
+            //所有管理账户MAP
+            List<Account> accountList = accountRepository.findCreateAndModifyAccount(accountIdList);
+            Map<Long, Account> accountMap = Maps.uniqueIndex(accountList, new Function<Account, Long>() {
+                @Override
+                public Long apply(Account account) {
+                    return account.getId();
+                }
+            });
+
+
+            //当前时间
+            String nowDate = DateUtil.format(new Date(), DateUtil.C_DATE_PATTON_DEFAULT);
+
+            //设置名字
+            for (Account account : subAccountList) {
+
+                RoleAuth roleAuth = roleAuthMap.get(account.getRoleCategory());
+                account.setRoleName(null != roleAuth ? roleAuth.getRoleName() : null);
+
+                //创建和修改人
+                Account modifyAccount = accountMap.get(account.getModifyAccount());
+                Account createAccount = accountMap.get(account.getCreateAccount());
+                account.setModifyAccountName(null != modifyAccount ? modifyAccount.getEmail() : null);
+                account.setCreateAccountName(null != createAccount ? createAccount.getEmail() : null);
+
+                //账户是否过期 true 有效,  false 过期
+                account.setValid(true);
+
+            }
+        }
+
+        return subAccountList;
+    }
+
+    /**
+     * 启用子账号
+     * created by sunhao 20170606
+     */
+    @Override
+    public int enableSubAccountById(Account loginAccount, Long subAccountId) {
+        return accountRepository.enableSubAccount(loginAccount.getId(), new Date(), subAccountId);
+    }
+
+    /**
+     * 停用子账号
+     * created by sunhao 20170606
+     */
+    @Override
+    public int disableSubAccountById(Account loginAccount, Long subAccountId) {
+
+        int affectNum = accountRepository.disableSubAccount(loginAccount.getId(), new Date(), subAccountId);
+
+        if (affectNum > 0) {
+
+            //禁用后踢出所有已经登陆的此子账号
+            tokenManager.delMultiRelationshipByKey(subAccountId.toString());
+        }
+
+        return affectNum;
+    }
+
+    @Override
+    public RoleAuth getRoleAuthById(Long roleId) {
+        return roleAuthRepository.findOne(roleId);
+    }
+
+
+    /**
+     * 创建子账号,渠道账号是另外的接口
+     * created by sunhao 20170607
+     */
+    @Override
+    public Account createSubAccount(Account loginAccount, Account subAccount, RoleAuth roleAuth) {
+
+        //新建账号 account
+        Account saveAccount = this.buildAccount(loginAccount, subAccount, false);
+        saveAccount.setAllowBehavior(loginAccount.getAllowBehavior());
+        saveAccount = accountRepository.save(saveAccount);
+
+        //构建权限 auth
+        this.saveAuthAndDataAuth(subAccount.getAuthList(), roleAuth, saveAccount, loginAccount.getId());
+
+        //发送激活邮件
+        this.sendSubAccountActivateEmail(loginAccount, saveAccount);
+
+        return saveAccount;
+    }
+
+    /**
+     * 构建数据和菜单权限
+     */
+    private void saveAuthAndDataAuth(List<Auth> authList, RoleAuth roleAuth, Account saveAccount, Long loginAccountId) {
+
+        List<Auth> saveAuthList = new ArrayList<>();
+
+        if (roleAuth.getRoleCategory().equals(RoleEnumType.SUB_APP_MANAGER.getKey())) {
+
+            //2,子应用管理员,创建auth 无需创建data_auth ;无需control_auth字段数据
+            for (Auth auth : authList) {
+                //默认设置
+                auth.setIsNatureOpen(true);
+                auth.setRetentionAuth(true);
+                auth.setTopAuth(true);
+                auth.setCampaign(true);
+
+                Auth saveAuth = this.buildAuth(auth, saveAccount, loginAccountId, null);
+                saveAuthList.add(saveAuth);
+            }
+
+        }
+
+        //保存 auth
+        if (!CollectionUtils.isEmpty(saveAuthList)) {
+            authRepository.save(saveAuthList);
+        }
+
+    }
+
+    /**
+     * 菜单权限转换
+     */
+    private JSONArray parseAuth2JsonArray(List<RoleAuthDetail> roleAuthDetailList) {
+
+        JSONArray authArray = new JSONArray();
+
+        if (!CollectionUtils.isEmpty(roleAuthDetailList)) {
+
+            for (RoleAuthDetail roleAuthDetail : roleAuthDetailList) {
+
+                JSONObject authObject = new JSONObject();
+                authObject.put("auth", roleAuthDetail.getAuth());
+                authObject.put("view", roleAuthDetail.getView());
+                authObject.put("edit", roleAuthDetail.getEdit());
+                authObject.put("sort", roleAuthDetail.getSort());
+                authObject.put("parentAuth", roleAuthDetail.getParentAuth());
+
+                authArray.add(authObject);
+            }
+        }
+
+        return authArray;
+    }
+
+    /**
+     * 构建Auth
+     */
+    private Auth buildAuth(Auth auth, Account subAccount, Long createAccount, List<RoleAuthDetail> roleAuthDetailList) {
+
+        Auth saveAuth = new Auth();
+
+        Date operateDate = new Date();
+
+        saveAuth.setApp(auth.getApp());
+        saveAuth.setAccount(subAccount.getId());
+        saveAuth.setRoleCategory(subAccount.getRoleCategory());
+        saveAuth.setControlAuth(this.parseAuth2JsonArray(roleAuthDetailList).toString());
+        saveAuth.setModifyTime(operateDate);
+        saveAuth.setModifyAccount(createAccount.toString());
+        saveAuth.setCreateAccount(null != auth.getCreateAccount() ? auth.getCreateAccount() : createAccount);
+        saveAuth.setCreateTime(null != auth.getCreateTime() ? auth.getCreateTime() : operateDate);
+        saveAuth.setStatus(true);
+        //付费,留存,自然量,Top指标
+        saveAuth.setPayAuth(auth.isPayAuth());
+        saveAuth.setIsNatureOpen(auth.getIsNatureOpen());
+        saveAuth.setRetentionAuth(auth.isRetentionAuth());
+        saveAuth.setTopAuth(auth.getTopAuth());
+
+        return saveAuth;
+    }
+
+    /**
+     * 构建Account
+     */
+    private Account buildAccount(Account loginAccount, Account subAccount, Boolean isChannelPerson) {
+
+        Account account = new Account();
+
+        account.setName(subAccount.getName());
+        account.setCompany(loginAccount.getCompany());
+        account.setCreateTime(new Date());
+        account.setDelFlag(false);
+        account.setCreateAccount(loginAccount.getId());
+        account.setModifyAccount(loginAccount.getId());
+        account.setModifyTime(new Date());
+        account.setEmail(subAccount.getEmail());
+        account.setIsChannelPerson(false);
+        account.setIsSuperUser(false);
+        account.setIsChannelPerson(isChannelPerson);
+        //未激活,需要发送邮件后激活
+        account.setStatus(-3);
+        account.setPricelevel(loginAccount.getPricelevel());
+        account.setParent(loginAccount.getId());
+        //根节点账号,取登陆账号的rootParent
+        account.setRootParent(loginAccount.getRootParent());
+        account.setPastDate(loginAccount.getPastDate());
+        account.setRoleCategory(subAccount.getRoleCategory());
+        account.setRemark(subAccount.getRemark());
+
+        return account;
+    }
+
+    /**
+     * 构建数据权限data_auth
+     */
+    private List<DataAuth> getDataAuthByAuth(Long subAccountId, Auth auth) {
+
+        List<DataAuth> result = new ArrayList<>();
+
+        //渠道和活动列表
+        List<DataAuth> dataAuthList = auth.getDataAuth();
+
+        for (DataAuth dataAuthTemp : dataAuthList) {
+
+            //校验channel和campaign
+            Long channelId = dataAuthTemp.getChannel();
+            List<Long> campaignList = dataAuthTemp.getCampaignList();
+
+            //构建data_auth
+            if(null != channelId){
+                if (dataAuthTemp.getAllCampaign()) {
+                    //按渠道授权
+                    DataAuth dataAuth = this.buildDataAuth(subAccountId, auth.getApp(), channelId, null);
+                    result.add(dataAuth);
+
+                } else{
+                    Boolean flag = dataAuthTemp.getChannelPermit(); //授权渠道(新加的状态标识,可单独授权渠道。和活动分开)
+                    if (!CollectionUtils.isEmpty(campaignList)){
+                        //按照渠道和推广活动授权
+                        for (Long campaignId : campaignList) {
+                            DataAuth dataAuth = this.buildDataAuth(subAccountId, auth.getApp(), channelId, campaignId);
+                            dataAuth.setChannelPermit(flag);
+
+                            result.add(dataAuth);
+                        }
+                    }else{
+                        if(flag){//改成新版的只按渠道授权
+                            DataAuth dataAuth = this.buildDataAuth(subAccountId, auth.getApp(), channelId, null);
+
+                            dataAuth.setChannelPermit(flag);
+                            dataAuth.setAllCampaign(false);//非第一种全选按渠道授权
+                            result.add(dataAuth);
+                        }
+                    }
+                }
+            }
+        }
+
+        return result;
+    }
+
+    /**
+     * 构建Data_Auth
+     */
+    private DataAuth buildDataAuth(Long accountId, Long appId, Long channelId, Long campaignId) {
+
+        DataAuth dataAuth = new DataAuth();
+
+        dataAuth.setAccount(accountId);
+        dataAuth.setApp(appId);
+        dataAuth.setChannel(channelId);
+        dataAuth.setCampaign(null == campaignId ? 0L : campaignId);
+        dataAuth.setModifyTime(new Date());
+        dataAuth.setAllCampaign(null == campaignId);
+        dataAuth.setDelFlag(false);
+
+        return dataAuth;
+    }
+
+    /**
+     * 修改子账户信息
+     * create by sunhao 20170609
+     */
+    @Override
+    public Account modifySubAccount(Account loginAccount, Account subAccount, RoleAuth roleAuth) {
+
+        Account account = accountRepository.findOne(subAccount.getId());
+
+        //1,删除旧权限
+        List<Auth> authList = authRepository.findAuthByAccountId(subAccount.getId());
+        List<DataAuth> dataAuthList = dataAuthRepository.findDataAuthByAccount(subAccount.getId());
+
+        if (!CollectionUtils.isEmpty(authList)) {
+            authRepository.delete(authList);
+        }
+
+        if (!CollectionUtils.isEmpty(authList)) {
+            dataAuthRepository.delete(dataAuthList);
+        }
+
+        //2,保存新权限
+        this.saveAuthAndDataAuth(subAccount.getAuthList(), roleAuth, subAccount, loginAccount.getId());
+
+        //3,更新基本信息
+        account.setName(subAccount.getName());
+        account.setRoleCategory(subAccount.getRoleCategory());
+        account.setRemark(subAccount.getRemark());
+
+        account.setModifyTime(new Date());
+        account.setModifyAccount(loginAccount.getId());
+        accountRepository.save(account);
+
+        //删除来源分析显示的列数据
+        UserViewColumn userViewColumn = userViewColumnRepository.findByAccount(account.getId());
+        if (null != userViewColumn) {
+            userViewColumnRepository.delete(userViewColumn);
+        }
+
+        return account;
+    }
+
+    /**
+     * 创建自定义角色
+     * create by sunhao 20170607
+     */
+    @Override
+    public RoleAuth createCustomRole(Account loginAccount, RoleAuth roleAuth) {
+
+        RoleAuth saveRoleAuth = new RoleAuth();
+
+        //创建并保存 ROLE_AUTH
+        saveRoleAuth.setCreateAccount(loginAccount.getId());
+        saveRoleAuth.setRoleName(roleAuth.getRoleName());
+        saveRoleAuth.setCreateTime(new Date());
+        saveRoleAuth.setRoleCategory(RoleEnumType.CUSTOM_ROLE.getKey());
+        saveRoleAuth.setDelFlag(false);
+        saveRoleAuth.setPayAuth(roleAuth.getPayAuth());
+        saveRoleAuth.setRetentionAuth(roleAuth.getRetentionAuth());
+        saveRoleAuth.setIsNatureOpen(roleAuth.getIsNatureOpen());
+        saveRoleAuth.setTopAuth(roleAuth.getTopAuth());
+
+        saveRoleAuth = roleAuthRepository.save(saveRoleAuth);
+
+        //构建 ROLE_AUTH_DETAIL,全量detail
+        List<RoleAuthDetail> roleAuthDetailList = this.getInitRoleAuthList();
+
+        Map<String, RoleAuthDetail> roleAuthDetailMap = Maps.uniqueIndex(roleAuth.getRoleAuthDetails(), new Function<RoleAuthDetail, String>() {
+            @Override
+            public String apply(RoleAuthDetail roleAuthDetail) {
+                return roleAuthDetail.getAuth();
+            }
+        });
+
+        //构建选中信息
+        for (RoleAuthDetail roleAuthDetail : roleAuthDetailList) {
+            RoleAuthDetail newRoleAuthDetail = roleAuthDetailMap.get(roleAuthDetail.getAuth());
+
+            if (null != newRoleAuthDetail) {
+                roleAuthDetail.setEdit(newRoleAuthDetail.getEdit());
+                roleAuthDetail.setView(newRoleAuthDetail.getView());
+            }
+
+            roleAuthDetail.setRoleId(saveRoleAuth.getId());
+        }
+
+        //保存 ROLE_AUTH_DETAIL
+        roleAuthDetailRepository.save(roleAuthDetailList);
+
+        return saveRoleAuth;
+    }
+
+    /**
+     * 获取全部未选中的所有的菜单权限MAP,
+     */
+    private Map<String, RoleAuthDetail> getAllRoleAuthMap() {
+        return getRoleAuthMapByRoleType(RoleEnumType.CUSTOM_AUTH.getKey());
+    }
+
+    /**
+     * 获取渠道账号全部的菜单权限MAP,
+     */
+    private Map<String, RoleAuthDetail> getChannelAccountRoleAuthMap() {
+        return getRoleAuthMapByRoleType(RoleEnumType.CHANNEL_PERSON.getKey());
+    }
+
+    /**
+     * 获取全部未选中的所有的菜单权限MAP,
+     */
+    private Map<String, RoleAuthDetail> getRoleAuthMapByRoleType(Long roleType) {
+
+        Map<String, RoleAuthDetail> result = new HashMap<>();
+
+        List<RoleAuthDetail> roleAuthDetailList = roleAuthDetailRepository.findDetailByRole(roleType);
+
+        for (RoleAuthDetail roleAuthDetail : roleAuthDetailList) {
+            result.put(roleAuthDetail.getAuth(), new RoleAuthDetail(roleAuthDetail));
+        }
+
+        return result;
+    }
+
+    /**
+     * 获取全部未选中的所有的菜单权限LIST,
+     */
+    private List<RoleAuthDetail> getInitRoleAuthList() {
+
+        List<RoleAuthDetail> result = new ArrayList<>();
+
+        List<RoleAuthDetail> roleAuthDetailList = roleAuthDetailRepository.findDetailByRole(RoleEnumType.CUSTOM_AUTH.getKey());
+
+        for (RoleAuthDetail roleAuthDetail : roleAuthDetailList) {
+            result.add(new RoleAuthDetail(roleAuthDetail));
+        }
+
+        return result;
+    }
+
+
+    /**
+     * 修改自定义角色,参数只传了选中的权限
+     * created by sunhao 20170609
+     */
+    @Override
+    public RoleAuth modifyCustomRole(Account loginAccount, RoleAuth roleAuth) {
+
+        //修改保存基础信息
+        RoleAuth customRoleAuth = roleAuthRepository.findOne(roleAuth.getId());
+        customRoleAuth.setRoleName(!StringUtils.isEmpty(roleAuth.getRoleName()) ? roleAuth.getRoleName() : customRoleAuth.getRoleName());
+        customRoleAuth.setPayAuth(null != roleAuth.getPayAuth() ? roleAuth.getPayAuth() : customRoleAuth.getPayAuth());
+        customRoleAuth.setRetentionAuth(null != roleAuth.getRetentionAuth() ? roleAuth.getRetentionAuth() : customRoleAuth.getRetentionAuth());
+        customRoleAuth.setIsNatureOpen(null != roleAuth.getIsNatureOpen() ? roleAuth.getIsNatureOpen() : customRoleAuth.getIsNatureOpen());
+        customRoleAuth.setTopAuth(null != roleAuth.getTopAuth() ? roleAuth.getTopAuth() : customRoleAuth.getTopAuth());
+        customRoleAuth.setModifyTime(new Date());
+        customRoleAuth.setModifyAccount(loginAccount.getId());
+
+        customRoleAuth = roleAuthRepository.save(customRoleAuth);
+
+        //原始权限
+        List<RoleAuthDetail> customRoleAuthDetailList = roleAuthDetailRepository.findDetailByRole(roleAuth.getId());
+
+        //新权限
+        List<RoleAuthDetail> sourceRoleAuthDetailList = roleAuth.getRoleAuthDetails();
+        Map<String, RoleAuthDetail> sourceRoleAuthDetailMap = Maps.uniqueIndex(sourceRoleAuthDetailList, new Function<RoleAuthDetail, String>() {
+            @Override
+            public String apply(RoleAuthDetail roleAuthDetail) {
+                return roleAuthDetail.getAuth();
+            }
+        });
+
+        for (RoleAuthDetail oldRoleAuthDetail : customRoleAuthDetailList) {
+
+            RoleAuthDetail newRoleAuthDetail = sourceRoleAuthDetailMap.get(oldRoleAuthDetail.getAuth());
+
+            if (null != newRoleAuthDetail) {
+                //修改
+                oldRoleAuthDetail.setView(newRoleAuthDetail.getView());
+                oldRoleAuthDetail.setEdit(newRoleAuthDetail.getEdit());
+
+            } else {
+                //初始化
+                oldRoleAuthDetail.setEdit(false);
+                oldRoleAuthDetail.setView(false);
+            }
+        }
+
+        //保存
+        roleAuthDetailRepository.save(customRoleAuthDetailList);
+
+        //修改相应自定义角色的权限
+        this.updateCustomRoleAuthByRoleId(roleAuth.getRoleAuthDetails(), customRoleAuth);
+
+        return customRoleAuth;
+    }
+
+    /**
+     * 批量更新相应自定义角色的权限
+     */
+    private void updateCustomRoleAuthByRoleId(List<RoleAuthDetail> roleAuthDetailList, RoleAuth customRoleAuth) {
+
+        List<Auth> authList = authRepository.findAuthByRoleCategory(customRoleAuth.getId());
+
+        for (Auth auth : authList) {
+            auth.setControlAuth(parseAuth2JsonArray(roleAuthDetailList).toString());
+            auth.setPayAuth(customRoleAuth.getPayAuth());
+            auth.setRetentionAuth(customRoleAuth.getRetentionAuth());
+            auth.setIsNatureOpen(customRoleAuth.getIsNatureOpen());
+            auth.setTopAuth(customRoleAuth.getTopAuth());
+        }
+
+        authRepository.save(authList);
+    }
+
+    /**
+     * 删除自定义角色
+     * created by sunhao 20170609
+     */
+    @Override
+    public int deleteCustomRole(Account loginAccount, Long roleId) {
+
+        return roleAuthRepository.deleteCustomRole(roleId, loginAccount.getId(), new Date());
+    }
+
+    /**
+     * 删除未激活的子账号
+     * created by sunhao 20170609
+     */
+    @Override
+    public boolean deleteInactivateSubAccount(Long subAccountId) {
+
+        Account account = accountRepository.findOne(subAccountId);
+
+        if (account.getStatus() == -3) {
+
+            //删除账户
+            accountRepository.delete(account);
+
+            //删除权限
+            authRepository.deleteAuthByAccount(subAccountId);
+            dataAuthRepository.deleteAuthByAccount(subAccountId);
+
+            return true;
+        }
+
+        return false;
+    }
+
+    /**
+     * 校验自定义权限名称是否重复,true:重复,false:没重复
+     * create by sunhao 20170608
+     */
+    @Override
+    public boolean checkCustomRoleName(Account loginAccount, String roleName, Long roleId) {
+
+        boolean result = false;
+
+        //如果检查编辑角色的名字,查看名字是否和之前一样,不一样就按原逻辑检查,一样就直接返回false
+        if (null != roleId) {
+
+            RoleAuth roleAuth = roleAuthRepository.findOne(roleId);
+            if (!roleAuth.getRoleName().equals(roleName)) {
+                roleId = null;
+            }
+        }
+
+        //检查名字
+        if (null == roleId) {
+
+            List<Long> subAccountList = this.getAllSubAccountList(loginAccount);
+
+            BigInteger number = roleAuthRepository.findByAccountAndName(subAccountList, roleName);
+
+            result = null != number && number.intValue() > 0;
+
+        }
+
+        return result;
+    }
+
+    /**
+     * 校验自定义权限的数量,true:超过,false:没超过
+     * create by sunhao 20170608
+     */
+    @Override
+    public boolean checkCustomRoleNumber(Account loginAccount) {
+
+        List<Long> subAccountList = this.getAllSubAccountList(loginAccount);
+
+        BigInteger number = roleAuthRepository.findCustomNumByAccount(subAccountList);
+
+        return null != number && number.intValue() >= MAX_CUSTOM_ROLE_NUM;
+    }
+
+    /**
+     * 校验子管理员的数量 true:超过,false:没超过
+     * create by sunhao 20170608
+     */
+    @Override
+    public boolean checkSubMangerNumber(Account loginAccount) {
+
+        BigInteger number = accountRepository.findSubMangerNumByParent(loginAccount.getIsSuperUser() ? loginAccount.getId() : loginAccount.getParent());
+
+        return number != null && number.intValue() >= MAX_MANAGE_NUM;
+    }
+
+    @Override
+    public boolean checkUpdateSubMangerNumber(Account loginAccount, Account updateAccount) {
+
+        Account originalAccount = accountRepository.findOne(updateAccount.getId());
+
+        if (!originalAccount.getRoleCategory().equals(updateAccount.getRoleCategory()) && RoleEnumType.MANAGER.getKey().equals(updateAccount.getRoleCategory())) {
+
+            return this.checkSubMangerNumber(loginAccount);
+
+        } else {
+            return false;
+        }
+    }
+
+    /**
+     * 校验Email存在,true:存在,false:不存在
+     * create by sunhao 20170616
+     */
+    @Override
+    public boolean checkEmailExists(String email) {
+
+        Account account = accountRepository.findAccountByEmail(email);
+
+        return null != account;
+    }
+
+    /**
+     * 校验此角色下面有无子账号 true:有,false:没有
+     * created by sunhao 20170609
+     */
+    @Override
+    public boolean checkCustomRoleAccount(Long roleId) {
+
+        BigInteger number = accountRepository.findAccountNumByRoleId(roleId);
+        return null != number && number.intValue() > 0;
+    }
+
+    /**
+     * 根据账户和APP获取权限数据
+     */
+    @Override
+    public Auth findAuth(Long account, Long app) {
+        return authRepository.findAuthByAccountAndApp(account, app);
+    }
+
+    /**
+     * 是否包含自然量
+     * modify by sunhao 20170613
+     */
+    @Override
+    public boolean isNature(Long accountId, Long app) {
+
+        boolean isNatureOpen = true;
+
+        Account account = accountRepository.findOne(accountId);
+        RoleAuth roleAuth = roleAuthRepository.findOne(account.getRoleCategory());
+
+        //不是管理员且不是应用管理员的时候,通过auth判断
+        if (!account.getIsSuperUser() && null != roleAuth && !roleAuth.getRoleCategory().equals(RoleEnumType.MANAGER.getKey())
+                && !roleAuth.getRoleCategory().equals(RoleEnumType.SUB_APP_MANAGER.getKey())) {
+
+            Auth auth = this.findAuth(accountId, app);
+            isNatureOpen = auth != null && auth.getIsNatureOpen();
+        }
+
+        return isNatureOpen;
+    }
+
+    /**
+     * 查询子账号的根节点母账号
+     */
+    @Override
+    public Account findRootParentAccount(Long childAccountId) {
+
+        Account account = accountRepository.findOne(childAccountId);
+
+        while (null != account.getParent() && 0 != account.getParent()) {
+
+            account = accountRepository.findOne(account.getParent());
+        }
+
+        return account;
+    }
+
+    /**
+     * 校验母账号是否过期
+     */
+    @Override
+    public boolean isOriginAccountPast(Long account) {
+
+        Account accountObject = accountRepository.findOne(account);
+
+        String nowDate = DateUtil.format(new Date(), DateUtil.C_DATE_PATTON_DEFAULT);
+
+        return !StringUtil.isEmpty(accountObject.getPastDate()) && DateUtil.compare_date(nowDate, accountObject.getPastDate()) == 1;
+    }
+
+    @Override
+    public Account check(String email) {
+        return accountRepository.findAccountByEmail(email);
+    }
+
+
+
+    /**
+     * 根据账号查询授权的APP
+     */
+    @Override
+    public List<Long> findAuthAppListByAccount(Long accountId) {
+
+        return authRepository.findAppListByAccount(accountId);
+    }
+
+    /**
+     * 发送激活邮件,激活链接复用忘记密码方法
+     * 亲爱的用户,已为您xxxxx@xxx.com邮箱创建TrackingIO子账号。点击此链接设置密码:http://trackingio.com/resetpwd.html#?
+     */
+    @Override
+    public boolean sendSubAccountActivateEmail(Account loginAccount, Account subAccount) {
+
+        boolean result = true;
+
+        try {
+            //修改忘记密码时间
+            subAccount.setForgetPwdTime(new Date().getTime());
+            subAccount.setForgetPwdStatus(false);
+            accountRepository.save(subAccount);
+
+            final String url = Constant.accountCheckUrl + "/resetpwd.html#?message=" + HashAlgorithms.MD5("superuser_" + subAccount.getId() + subAccount.getForgetPwdTime()) + subAccount.getId();
+
+            //邮件主题
+            final String subject = "TrackingIO" + (subAccount.getIsChannelPerson() ? "渠道账号" : "子账号") + "激活";
+            //邮件内容
+            StringBuilder content = new StringBuilder();
+            content.append("<!doctype html> <html><head></head><body> ")
+                    .append("亲爱的用户:</br>")
+                    .append("您好,").append(loginAccount.getEmail())
+                    .append("已为您的").append(subAccount.getEmail()).append("邮箱创建TrackingIO").append(subAccount.getIsChannelPerson() ? "渠道账号。" : "子账号。")
+                    .append("点击此链接设置密码激活账号: </br>")
+                    .append("<a href=\"").append(url).append("\">").append(url).append("</a>")
+                    .append("</body></html>");
+
+            //收件人列表
+            List<String> mailList = new ArrayList<>();
+            mailList.add(subAccount.getEmail());
+            MailUtils.sendHtmlEmail(subject, content.toString(), mailList);
+        } catch (Exception e) {
+
+            logger.error(e.getMessage(), e);
+            result = false;
+        }
+
+        return result;
+    }
+
+
+    /**
+     * 上线数据处理
+     * 临时处理
+     */
+    @Override
+    public boolean dealWithOldAuth() {
+
+        //获取全部的菜单
+        Map<String, RoleAuthDetail> roleAuthDetailMap = this.getAllRoleAuthMap();
+
+        //所有的权限
+        List<Auth> authList = authRepository.findAll();
+
+        for (Auth auth : authList) {
+
+            if (null != auth.getControlAuth() && auth.getControlAuth().startsWith("[") && auth.getControlAuth().endsWith("]")) {
+
+                JSONArray authArray = JSONArray.fromObject(auth.getControlAuth());
+                JSONArray newAuthArray = new JSONArray();
+
+                if (!CollectionUtils.isEmpty(authArray)) {
+
+                    for (int i = 0; i < authArray.size(); i++) {
+
+                        JSONObject authObject = authArray.getJSONObject(i);
+
+                        String authName = authObject.getString("auth");
+
+                        if (roleAuthDetailMap.containsKey(authName)) {
+
+                            RoleAuthDetail roleAuthDetail = roleAuthDetailMap.get(authName);
+
+                            authObject.put("parentAuth", roleAuthDetail.getParentAuth());
+                            authObject.put("parentAuth", roleAuthDetail.getParentAuth());
+                            authObject.put("sort", roleAuthDetail.getSort());
+
+                            newAuthArray.add(authObject);
+                        }
+
+                    }
+
+                    auth.setControlAuth(newAuthArray.toString());
+                }
+            }
+        }
+
+        authRepository.save(authList);
+
+        return true;
+    }
+
+}
diff --git a/src/main/java/com/reyun/service/impl/CommonIPServiceImpl.java b/src/main/java/com/reyun/service/impl/CommonIPServiceImpl.java
new file mode 100644
index 0000000..4dbb74a
--- /dev/null
+++ b/src/main/java/com/reyun/service/impl/CommonIPServiceImpl.java
@@ -0,0 +1,66 @@
+package com.reyun.service.impl;
+
+import com.reyun.model.CommonIP;
+import com.reyun.repository.CommonIPRepository;
+import com.reyun.service.CommonIPService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.math.BigInteger;
+import java.util.Date;
+import java.util.List;
+
+/**
+ * Created by mxq on 2017/9/28.
+ */
+@Service
+public class CommonIPServiceImpl implements CommonIPService {
+
+    @Autowired
+    CommonIPRepository commonIPRepository;
+
+    @Override
+    public CommonIP save(Long accountId, String ip, Long createAccount) {
+        CommonIP resource = new CommonIP();
+
+        resource.setAccount(accountId);//母账号
+        //resource.setCid(cid);//渠道号
+        resource.setIp(ip);
+        resource.setCreateAccount(createAccount);//登陆账号
+        Date date = new Date();
+        resource.setCreateTime(date);
+        resource.setModifyAccount(createAccount);
+        resource.setModifyTime(date);
+        resource.setDelFlag(false);
+
+        return commonIPRepository.save(resource);
+    }
+
+    @Override
+    public void delete(Long modifyAccount, Long id) {
+        commonIPRepository.deleteById(modifyAccount, new Date(), id);
+    }
+
+    @Override
+    public CommonIP update(String ip, Long modifyAccount, Long id) {
+        commonIPRepository.updateCommonIPById(ip, modifyAccount, new Date(), id);
+        return commonIPRepository.findOne(id);
+    }
+
+    @Override
+    public List<CommonIP> listCommonIPByAccount(Long account) {
+        return commonIPRepository.findAllCommonIPByAccount(account);
+    }
+
+    @Override
+    public CommonIP findoneById(Long id) {
+        return commonIPRepository.findOne(id);
+    }
+
+    @Override
+    public Boolean checkCommonIp(Long account, String ip) {
+        BigInteger num = commonIPRepository.isCommonIpRepeatByAccount(account, ip);
+        return num.intValue()>0 ? true : false;
+    }
+
+}
diff --git a/src/main/java/com/reyun/service/impl/CommonParamServiceImpl.java b/src/main/java/com/reyun/service/impl/CommonParamServiceImpl.java
new file mode 100644
index 0000000..745001e
--- /dev/null
+++ b/src/main/java/com/reyun/service/impl/CommonParamServiceImpl.java
@@ -0,0 +1,61 @@
+package com.reyun.service.impl;
+
+
+import com.google.common.base.Function;
+import com.google.common.collect.Maps;
+import com.reyun.model.CommonEvent;
+import com.reyun.repository.CommonEventRepository;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import com.reyun.model.CommonParam;
+
+import com.reyun.repository.CommonParamRepository;
+import com.reyun.service.CommonParamService;
+import org.springframework.util.StringUtils;
+
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+@Service
+public class CommonParamServiceImpl implements CommonParamService {
+
+	@Autowired
+	CommonParamRepository commonParamRepository;
+    @Autowired
+    CommonEventRepository commonEventRepository;
+
+
+	@Override
+	public Map<String, CommonParam> findAllByType(String type) {
+		List<CommonParam> commonParamList = commonParamRepository.findAllByType(type);
+		Map<String, CommonParam> result = new HashMap<>();
+		for (CommonParam commonparam : commonParamList) {
+			result.put(commonparam.getParam(), commonparam);
+		}
+		return result;
+	}
+
+    @Override
+    public Map<String, CommonEvent> findAllCommonEvent() {
+
+        List<CommonEvent> commonEventList = commonEventRepository.findAll();
+
+        return Maps.uniqueIndex(commonEventList,new Function<CommonEvent,String>(){
+            @Override
+            public String apply(CommonEvent commonEvent) {
+                return commonEvent.getEvent();
+            }
+        });
+    }
+
+    @Override
+    public List<CommonParam> listAllByType(String type) {
+
+        return StringUtils.isEmpty(type) ? commonParamRepository.findAllCommonParam() : commonParamRepository.findAllByType(type);
+    }
+
+
+}
diff --git a/src/main/java/com/reyun/service/impl/ComplicatedEventsServiceImpl.java b/src/main/java/com/reyun/service/impl/ComplicatedEventsServiceImpl.java
new file mode 100644
index 0000000..d0e4c68
--- /dev/null
+++ b/src/main/java/com/reyun/service/impl/ComplicatedEventsServiceImpl.java
@@ -0,0 +1,1262 @@
+package com.reyun.service.impl;
+
+import com.google.common.base.Function;
+import com.google.common.collect.Lists;
+import com.google.common.collect.Maps;
+import com.reyun.dic.CustomMenuType;
+import com.reyun.dic.ReportEnumType;
+import com.reyun.dic.RoleEnumType;
+import com.reyun.model.*;
+import com.reyun.repository.*;
+import com.reyun.service.*;
+import com.reyun.taskexecute.EventReportCallable;
+import com.reyun.util.*;
+import net.sf.json.JSONArray;
+import net.sf.json.JSONObject;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.util.CollectionUtils;
+import org.springframework.util.StringUtils;
+
+import java.text.ParseException;
+import java.text.SimpleDateFormat;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Date;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.concurrent.ExecutionException;
+import java.util.concurrent.ExecutorService;
+import java.util.concurrent.Executors;
+import java.util.concurrent.Future;
+
+/**
+ * Created by sunhao on 17/9/21.
+ * 复杂事件service implements
+ */
+@Service
+public class ComplicatedEventsServiceImpl implements ComplicateEventsService{
+
+    private Logger logger = LoggerFactory.getLogger(ComplicatedEventsServiceImpl.class);
+
+    @Autowired
+    ExpressionService expressionService;
+
+    @Autowired
+    VirtualEventService virtualEventService;
+
+    @Autowired
+    EventService eventService;
+
+    @Autowired
+    ConfigParamService configParamService;
+
+    @Autowired
+    EventStatsRepository eventStatsRepository;
+
+    @Autowired
+    AppRepository appRepository;
+
+    @Autowired
+    CustomMenuTemplateRepository customMenuTemplateRepository;
+
+    @Autowired
+    ComplicatedParamRepository complicatedParamRepository;
+
+    @Autowired
+    AccountRepository accountRepository;
+
+    @Autowired
+    AuthService authService;
+
+    @Autowired
+    ReportService reportService;
+
+    //开始时间
+    private final static String SQL_START_DATE = "$startDate";
+    //结束时间
+    private final static String SQL_END_DATE = "$endDate";
+
+    private final static String SQL_PARTICLE_DATE = "$selectDate";
+
+    //显示粒度
+    private final static String VIEW_PARTICLE_DAY = "day";
+    private final static String VIEW_PARTICLE_WEEK = "week";
+    private final static String VIEW_PARTICLE_MONTH = "month";
+
+    private final static String FIELD_CID = "_cid";
+    private final static String FIELD_CAMPAIGN_ID = "_campaignid";
+    private final static String FIELD_DS = "ds";
+
+
+    private final static String TEMPLATE_TYPE_EVENT = "eventstats";
+
+    /**
+     * 检查复杂事件名字
+     */
+    @Override
+    public boolean checkEventStatsName(Long accountId, String eventStatsName, Long appId) {
+
+        EventStats eventStats = eventStatsRepository.findEventStatsByName(eventStatsName, appId);
+
+        return eventStats == null;
+    }
+
+    /**
+     * 创建复杂事件模板
+     */
+    @Override
+    public EventStats createEventStats(EventStats eventStats) {
+        //appKey
+        String appKey = appRepository.findAppkeyById(eventStats.getApp());
+
+        //校验表达式内容正确性
+        boolean checkExpression = validEventConditionJson(eventStats.getEventCondition(), appKey);
+
+        //存储
+        if (checkExpression) {
+            //设置复杂事件表示
+            eventStats.setComplicatedEvents(true);
+            return eventStatsRepository.save(eventStats);
+        } else {
+            return null;
+        }
+    }
+
+    /**
+     * 修改复杂事件
+     */
+    @Override
+    public int updateEventStats(EventStats eventStats, Long accountId) {
+
+        EventStats findEventStats = eventStatsRepository.findEventStats(eventStats.getId());
+
+        //生成SQL
+        String appKey = appRepository.findAppkeyById(findEventStats.getApp());
+
+        //校验表达式
+        boolean checkExpression = validEventConditionJson(eventStats.getEventCondition(), appKey);
+
+        String name=eventStats.getName()==null?findEventStats.getName():eventStats.getName();
+
+        if (checkExpression) {
+            List<CustomMenuTemplate> templateList = customMenuTemplateRepository.findAllTemplateByOriginal(eventStats.getId(), TEMPLATE_TYPE_EVENT);
+            if(ValidateUtil.isValid(templateList)){
+                List<CustomMenuTemplate> list = new ArrayList<>();
+                for(CustomMenuTemplate cu : templateList){
+                    cu.setName(eventStats.getName());
+                    list.add(cu);
+                }
+                customMenuTemplateRepository.save(list);
+            }
+            return eventStatsRepository.updateEventStats(eventStats.getEventName(), eventStats.getEventCondition(),
+                    accountId, findEventStats.getId(), new Date(),name);
+
+        } else {
+
+            return 0;
+
+        }
+    }
+
+    @Override
+    public int deleteEventStats(Long eventStatsId, Long accountId) {
+
+        //查看事件是否存在看单之中,如果存在则删除看单中的模板。
+        List<Long> templateList = customMenuTemplateRepository.findTemplateByOriginal(eventStatsId, CustomMenuType.EVENT_STATS.getKey());
+        if (!CollectionUtils.isEmpty(templateList)) {
+            customMenuTemplateRepository.deleteTemplateByIds(accountId, templateList);
+        }
+
+        //删除事件
+        return eventStatsRepository.deleteEventStats(accountId, eventStatsId, new Date());
+    }
+
+    /**
+     * 查询所有复杂事件的模板
+     */
+    @Override
+    public List<EventStats> findAllEventStats(Long accountId, Long appId) {
+        return eventStatsRepository.findAll(appId, true);
+    }
+
+    /**
+     * 复杂事件查询
+     */
+    @Override
+    public Map<String, List> queryComplicatedEvent(Long appId, Long accountId, String startDate, String endDate, String eventCondition, String viewType) {
+
+        Map<String, List> result = new HashMap<>();
+
+        App app = appRepository.findOne(appId);
+
+        Map<String, Object> sqlMap = this.generateSql(eventCondition, app, false);
+
+        if (CollectionUtils.isEmpty(sqlMap)) {
+            return result;
+        }
+
+        String querySql = sqlMap.get("sql").toString();
+        JSONArray groupJsonArray = (JSONArray)sqlMap.get("group");
+        List<JSONObject> selectList = (List<JSONObject>)sqlMap.get("select");
+
+        //替换日期
+        querySql = replaceQueryParticleDate(querySql, startDate, endDate, viewType);
+
+
+
+        //数据权限过滤
+//        Account account = accountRepository.findOne(accountId);
+        //demo账号
+//        if (demoAppList.contains(app.getAppkey())) {
+//            querySql = querySql.replace("$campaign","");
+//        }
+
+        //母账号、管理员、子账号管理员
+        querySql = querySql.replace("$campaign","");
+        System.out.println(1111);
+        System.out.println(querySql);
+        Map<String, String> conditions = buildQueryPrestoCondition(querySql, app.getAppkey());
+
+        ExecutorService pool = Executors.newFixedThreadPool(2);
+        //创建两个有返回值的任务
+        EventReportCallable c1 = new EventReportCallable(conditions,selectList,groupJsonArray,
+                app,accountId,startDate,endDate,eventCondition,viewType);
+        EventReportCallable c2 = new EventReportCallable(null,null,null,
+                app,accountId,startDate,endDate,eventCondition,viewType);
+        //执行任务并获取Future对象
+        Future<Map<String, List>> f1 = pool.submit(c1);
+        Future<Map<String, List>> f2 = pool.submit(c2);
+        try {
+            Map<String, List> res1 = f1.get();
+            Map<String, List> res2 = f2.get();
+            result.putAll(res1);
+            result.putAll(res2);
+        } catch (InterruptedException e) {
+            logger.error(e.getMessage(), e);
+        } catch (ExecutionException e) {
+            logger.error(e.getMessage(), e);
+        }finally {
+            //关闭线程池
+            pool.shutdown();
+        }
+        return result;
+    }
+
+    /**
+     * 合计查询
+     */
+    @Override
+    public List<JSONObject> queryDistinctTotalData(Long appId, Long accountId, String startDate, String endDate, String eventCondition, String viewType) {
+
+        List<JSONObject> result = new ArrayList<>();
+
+        App app = appRepository.findOne(appId);
+
+        Map<String, Object> sqlMap = this.generateSql(eventCondition, app, true);
+
+        if (CollectionUtils.isEmpty(sqlMap)) {
+            return result;
+        }
+
+        //sql
+        String querySql = sqlMap.get("sql").toString();
+        JSONArray groupArray = (JSONArray) sqlMap.get("group");
+        List<JSONObject> selectList = (List<JSONObject>) sqlMap.get("select");
+
+        List<String> selectFieldList = Lists.transform(selectList, new Function<JSONObject, String>() {
+            @Override
+            public String apply(JSONObject jsonObject) {
+                return jsonObject.getString("field");
+            }
+        });
+        //数据权限过滤
+        Account account = accountRepository.findOne(accountId);
+        querySql = querySql.replace("$campaign","");
+        //替换日期
+        querySql = replaceQueryParticleDate(querySql, startDate, endDate, viewType);
+
+        Map<String, String> conditions = buildQueryPrestoCondition(querySql, app.getAppkey());
+
+        Map<String, List> responseJson = reportService.reportBySql(conditions);
+
+
+        //格式化汇总数据
+        return formatTotalValueDate(appId, accountId, responseJson, groupArray, selectFieldList);
+    }
+
+    /**
+     * 格式化汇总数据
+     *
+     */
+    private List<JSONObject> formatTotalValueDate(Long appId, Long accountId, Map<String, List> responseJson, JSONArray groupArray, List<String> selectFieldList) {
+
+        List<JSONObject> result = new ArrayList<>();
+
+        //处理数据
+        JSONObject responseObject = JSONObject.fromObject(responseJson);
+        JSONArray responseValueArray = responseObject.getJSONArray("val");
+
+        //cid,campaignid数据转换
+        /*Map<String, Campaign> campaignMap = new HashMap<>();
+        Map<String, Channel> channelMap = new HashMap<>();*/
+
+        if (!CollectionUtils.isEmpty(responseValueArray)) {
+
+            /*//group by _cid
+            if (groupArray.toString().contains(FIELD_CID)) {
+                channelMap = channelService.findChannelMapWithDefault(appId, accountId);
+            }
+            //group by _campaignid
+            if (groupArray.toString().contains(FIELD_CAMPAIGN_ID)) {
+                campaignMap = campaignService.findCampaignMapWithDefault(appId, accountId);
+            }*/
+
+            //翻译处理
+            for (Object valElement : responseValueArray) {
+
+                JSONObject val = (JSONObject) valElement;
+                val.put("ds", "合计");
+
+                //翻译推广活动或者渠道
+                /*if (val.containsKey(FIELD_CID)) {
+                    val.put(FIELD_CID, channelMap.containsKey(val.getString(FIELD_CID)) ? channelMap.get(val.getString(FIELD_CID)).getName() : val.getString(FIELD_CID));
+                }
+
+                if (val.containsKey(FIELD_CAMPAIGN_ID)) {
+                    val.put(FIELD_CAMPAIGN_ID, campaignMap.containsKey(val.getString(FIELD_CAMPAIGN_ID)) ? campaignMap.get(val.getString(FIELD_CAMPAIGN_ID)).getName() : val.getString(FIELD_CAMPAIGN_ID));
+                }*/
+
+                result.add(val);
+            }
+
+            result = calculateTotalPercent(result, selectFieldList);
+        }
+
+        return result;
+    }
+
+    /**
+     * 计算合计的每项的占比
+     * created by sunhao 20170916
+     */
+    private List<JSONObject> calculateTotalPercent(List<JSONObject> totalValueList, List<String> selectFieldList) {
+
+        JSONObject totalObject = new JSONObject();
+
+        //统计各个指标的总和
+        for (JSONObject jsonObject : totalValueList) {
+
+            for (String field : selectFieldList) {
+
+                if (totalObject.containsKey(field)) {
+
+                    Object value = jsonObject.get(field);
+
+                    //根据指标的类型累加
+                    if (value instanceof Double) {
+                        totalObject.put(field, totalObject.getDouble(field) + jsonObject.getDouble(field));
+                    } else if (value instanceof Long) {
+                        totalObject.put(field, totalObject.getLong(field) + jsonObject.getLong(field));
+                    } else if (value instanceof Integer) {
+                        totalObject.put(field, totalObject.getInt(field) + jsonObject.getInt(field));
+                    }
+
+                } else {
+
+                    totalObject.put(field, jsonObject.get(field));
+                }
+            }
+        }
+
+        /**
+         * 计算百分比
+         */
+        for (JSONObject jsonObject : totalValueList) {
+
+            for (String field : selectFieldList) {
+
+                jsonObject.put("rate_" + field, 0D == Double.valueOf(String.valueOf(totalObject.getString(field))) ? 0D : Double.valueOf(String.valueOf(jsonObject.getString(field))) / Double.valueOf(String.valueOf(totalObject.getString(field))) * 100);
+            }
+        }
+
+        return totalValueList;
+    }
+
+    /**
+     * 验证表达式正确性
+     * created by sunhao
+     */
+    private boolean validEventConditionJson(String eventCondition, String appKey) {
+
+        //校验表达式内容正确性
+        boolean checkExpression = true;
+
+        JSONObject jsonObject = JSONObject.fromObject(eventCondition);
+
+        if (jsonObject.containsKey("expressions")) {
+
+            JSONArray expressionArray = jsonObject.getJSONArray("expressions");
+
+            for (Object obj : expressionArray) {
+
+                JSONObject expressionObject = (JSONObject) obj;
+
+                //只校验输入式表达式
+                if (expressionObject.containsKey("expression")) {
+
+                    if (!expressionService.validateOriginalExpression(expressionObject.getString("expressionName"), appKey)) {
+                        checkExpression = false;
+                        break;
+                    }
+                }
+            }
+
+        } else {
+            checkExpression = false;
+        }
+
+        return checkExpression;
+    }
+
+    /**
+     * 表达式转换成SQL
+     * created by sunhao 20170913
+     */
+    private Map<String, Object> generateSql(String expressions, App app, boolean isTotal) {
+
+        Map<String, Object> resultMap = new HashMap<>();
+
+        if (StringUtil.isEmpty(expressions)) {
+            return null;
+        }
+
+        JSONObject expressionsObject = JSONObject.fromObject(expressions);
+
+        JSONArray eventConditionArray = expressionsObject.getJSONArray("expressions");
+        JSONArray groupConditionArray = expressionsObject.getJSONArray("group");
+        JSONArray paramsArray = expressionsObject.getJSONArray("params");
+
+        //表达式转换
+        List<String> selectFieldList = new ArrayList<>();
+        List<JSONObject> selectFieldJson = new ArrayList<>();
+
+        if (!CollectionUtils.isEmpty(eventConditionArray)) {
+
+            Map<String, ComplicatedParam> operateMap = getComplicateOperatorMap();
+
+            for (Object object : eventConditionArray) {
+
+                JSONObject jsonObject = (JSONObject) object;
+
+                //特殊处理字段,前面加下划线,避免字段名字是数字导致前端问题
+                String fieldName = "_" + jsonObject.getString("name");
+
+                JSONObject selectObject = new JSONObject();
+                selectObject.put("field", fieldName.toLowerCase());
+                selectObject.put("format", jsonObject.containsKey("format") ? jsonObject.getString("format") : "");
+                selectFieldJson.add(selectObject);
+
+                if (jsonObject.containsKey("expression")) {
+
+                    //输入表达式模式
+                    selectFieldList.add(this.translateExpression(fieldName, jsonObject.getString("expression"), operateMap));
+
+                } else {
+                    //选择表达式模式
+                    selectFieldList.add(this.translateSelectExpression(fieldName, jsonObject, operateMap));
+                }
+            }
+        }
+
+        //筛选条件处理
+        String where = " where $campaign a.ds >= '$startDate' and a.ds <= '$endDate'  and a._cid !=0 ";
+        StringBuilder whereSql = new StringBuilder();
+        if (!CollectionUtils.isEmpty(paramsArray)) {
+
+            String relation = expressionsObject.getString("relation");
+
+            //构建属性条件
+            for (int i = 0; i < paramsArray.size(); i++) {
+
+                JSONObject attr = paramsArray.getJSONObject(i);
+                String attrName = attr.getString("attr");
+                String attrType = attr.getString("type");
+                String attrValue = attr.getString("value");
+                String attrOperate = attr.getString("operator");
+
+                if ("usergroup".equals(attrName)) {
+                    //用户群
+                    whereSql.append(i == 0 ? " " : relation).append(" a.xwho in (select objectid as xwho from ").append(Constant.usergroupTable)
+                            .append(" where id = '").append(attrValue).append("' and objecttype = 'xwho') ");
+
+                } else {
+                    //属性
+                    whereSql.append(String.format("%s %s", i == 0 ? " " : relation, StringUtil.getSql(attrName, attrValue, attrOperate, attrType, "a.")));
+                }
+            }
+
+            //拼接where
+            where = where + " and (" + whereSql + ")";
+        }
+
+        //group by 填充
+        String groupBy = " group by $selectDate ";
+        //存储用于sql的group字段,格式:",a._country,a._province,a._cid"
+        String selectGroupField = "";
+        //存储group的字段名,格式:"_county,_province,_cid"
+        JSONArray groupJsonArray = new JSONArray();
+
+        boolean isNeedJoinProfile = false;
+        if (!CollectionUtils.isEmpty(groupConditionArray)) {
+
+            //用户属性JOIN处理
+            for (Object group : groupConditionArray) {
+
+                JSONObject groupObject = (JSONObject) group;
+
+                if ("profile".equals(groupObject.getString("type"))) {
+                    isNeedJoinProfile = true;
+                    selectGroupField += ","+" b." + groupObject.getString("name");
+                } else {
+                    selectGroupField += ","+" a." + groupObject.getString("name");
+                }
+
+                groupJsonArray.add(groupObject);
+            }
+
+            groupBy += selectGroupField;
+        }
+
+        //profile join
+        String profileJoinSql = "";
+        if (isNeedJoinProfile) {
+            profileJoinSql = " right join " + Constant.profileTable + app.getAppkey() + " b on a.xwho=b.xwho ";
+        }
+
+        //拼接sql
+        String selectFieldSql = String.join(",", selectFieldList);
+
+        if (!StringUtils.isEmpty(selectFieldSql)) {
+
+            //普通查询
+            String sql = "select $selectDate as ds ," + selectFieldSql + selectGroupField + " from " + Constant.eventTable + app.getAppkey() + " a "
+                    + profileJoinSql + where + groupBy + " order by ds";
+
+            //total 查询特殊处理
+            if (isTotal) {
+                sql = "select " + selectFieldSql + selectGroupField + " from " + Constant.eventTable + app.getAppkey()
+                        + " a " + profileJoinSql + where + (StringUtils.isEmpty(selectGroupField) ? "" : " group by " + selectGroupField.substring(1, selectGroupField.length()));
+            }
+
+            resultMap.put("sql", sql);
+            resultMap.put("group", groupJsonArray);
+            resultMap.put("select",selectFieldJson);
+
+            return resultMap;
+
+        } else {
+
+            return null;
+        }
+    }
+
+    /**
+     * 获取默认显示属性
+     */
+    private Map<String, ComplicatedParam> getComplicateOperatorMap() {
+
+        List<ComplicatedParam> eventViewAttrList = complicatedParamRepository.findAllParam();
+
+        return Maps.uniqueIndex(eventViewAttrList, new Function<ComplicatedParam, String>() {
+            @Override
+            public String apply(ComplicatedParam complicatedParam) {
+                return complicatedParam.getViewAttr();
+            }
+        });
+    }
+
+    /**
+     * 替换查询粒度
+     * created by sunhao
+     */
+    private String replaceQueryParticleDate(String querySql, String startDate, String endDate, String viewFlag) {
+
+        try {
+            SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd");
+
+            Date start = simpleDateFormat.parse(startDate);
+            Date end = simpleDateFormat.parse(endDate);
+
+            switch (viewFlag) {
+
+                case VIEW_PARTICLE_DAY:
+                    querySql = querySql.replace(SQL_START_DATE, startDate);
+                    querySql = querySql.replace(SQL_END_DATE, endDate);
+                    querySql = querySql.replace(SQL_PARTICLE_DATE, " a.ds ");
+                    break;
+                case VIEW_PARTICLE_WEEK:
+                    querySql = querySql.replace(SQL_START_DATE, simpleDateFormat.format(DateUtil.getFirstDayOfWeek(start)));
+                    querySql = querySql.replace(SQL_END_DATE, simpleDateFormat.format(DateUtil.getLastDayOfWeek(end)));
+                    querySql = querySql.replace(SQL_PARTICLE_DATE, " date_format(date_parse(a.ds, '%Y-%m-%d'), '%Y%v') ");
+                    break;
+                case VIEW_PARTICLE_MONTH:
+                    querySql = querySql.replace(SQL_START_DATE, DateUtil.getFirstDayOfMonth(start));
+                    querySql = querySql.replace(SQL_END_DATE, DateUtil.getLastDayOfMonth(end));
+                    querySql = querySql.replace(SQL_PARTICLE_DATE, " date_format(date_parse(a.ds, '%Y-%m-%d'), '%Y%m') ");
+                    break;
+                default:
+                    querySql = querySql.replace(SQL_START_DATE, startDate);
+                    querySql = querySql.replace(SQL_END_DATE, endDate);
+                    querySql = querySql.replace(SQL_PARTICLE_DATE, " a.ds ");
+                    break;
+            }
+
+        } catch (ParseException e) {
+            logger.error(e.getMessage());
+        }
+
+        return querySql;
+    }
+
+    /**
+     * 根据查询粒度查询范围内的日期样式
+     * created by sunhao
+     */
+    public Map<String, String> getDateMapByViewFlag(String startDate, String endDate, String viewFlag) {
+
+        Map<String, String> columnDateMap = new HashMap<>();
+
+        switch (viewFlag) {
+
+            case VIEW_PARTICLE_DAY:
+                List<String> dayList = DateUtil.getDateInterval(startDate, endDate);
+
+                for (String date : dayList) {
+                    columnDateMap.put(date, date);
+                }
+                break;
+
+            case VIEW_PARTICLE_WEEK:
+                List<String> weekList = DateUtil.getEveryWeek(startDate, endDate);
+
+                for (String week : weekList) {
+                    columnDateMap.put(week, DateUtil.getFirstDayOfWeek(week) + "~" + DateUtil.getLastDayOfWeek(week));
+                }
+
+                break;
+
+            case VIEW_PARTICLE_MONTH:
+                List<String> monthList = DateUtil.getEveryMonth(startDate, endDate);
+
+                for (String month : monthList) {
+                    columnDateMap.put(month, DateUtil.getFirstdayOfMonth(month) + "~" + DateUtil.getLastdayOfMonth(month));
+                }
+                break;
+
+            default:
+                break;
+        }
+
+        return columnDateMap;
+    }
+
+    /**
+     * 转换输入形式的表达式为SQL
+     * created by sunhao 20170913
+     */
+    private String translateExpression(String filed, String expression, Map<String, ComplicatedParam> operatorMap) {
+
+        String[] elements = expression.split("(?<=[-+*/()])|(?=[-+*/()])");
+
+        for (int i = 0; i < elements.length; i++) {
+
+            String element = elements[i];
+
+            if (!"-+*/()".contains(element)) {
+
+                String[] eventArray = element.split("\\.(?=(?:[^\"]*\"[^\"]*\")*[^\"]*$)");
+
+                String event = eventArray[0];
+                String eventAttr = eventArray.length > 2 ? eventArray[1] : "";
+                String operator = eventArray[eventArray.length - 1];
+
+                //替换出sql
+                elements[i] = buildFieldOperateSql(event, eventAttr, operator, operatorMap.get(operator).getAttrType());
+            }
+        }
+
+        String sqlExpression = String.join("", elements);
+
+        //除法处理,分母为0
+        sqlExpression = sqlExpression.contains("/") ? dealWithDivide(sqlExpression) : sqlExpression;
+
+        return sqlExpression + " as \"" + filed + "\"";
+    }
+
+    /**
+     * 除法的递归处理
+     * created by sunhao 20170916
+     */
+    private String dealWithDivide(String sqlExpression) {
+
+        StringBuilder resultBuilder = new StringBuilder();
+
+        String[] calculateElements = this.splitExpressionWithBracket(sqlExpression);
+
+        for (int i = 0; i < calculateElements.length; i++) {
+
+
+            if (i + 1 < calculateElements.length && "/".equals(calculateElements[i + 1])) {
+
+                //分子
+                String numerator = calculateElements[i];
+                //分母
+                String denominator = calculateElements[i + 2];
+
+                //分子为表达式
+                if ((numerator.startsWith("(") || numerator.startsWith("sum(") || numerator.startsWith("sum("))
+                        && numerator.endsWith(")") && numerator.contains("/")) {
+
+                    numerator = numerator.substring(0, numerator.indexOf("(") + 1)
+                            + dealWithDivide(numerator.substring(numerator.indexOf("("), numerator.length() - 1)) + ")";
+                }
+
+                //分母为表达式
+                if ((denominator.startsWith("(") || denominator.startsWith("sum(") || denominator.startsWith("sum("))
+                        && denominator.endsWith(")") && denominator.contains("/")) {
+
+                    denominator = denominator.substring(0, denominator.indexOf("(") + 1)
+                            + dealWithDivide(denominator.substring(denominator.indexOf("("), denominator.length() - 1)) + ")";
+                }
+
+                resultBuilder.append(" case when ").append(denominator).append("=0 then 0 else ").append(" cast( ").append(numerator).append(" as double)").append("/").append(denominator).append(" end ");
+
+                i += 2;
+
+            } else {
+                resultBuilder.append(calculateElements[i]);
+            }
+        }
+
+        return resultBuilder.toString();
+    }
+
+    /**
+     * 带括号的分割表达式
+     * (a+(b+c))/c
+     *  特殊样式sum(xxx)/count(xxx)需要处理
+     */
+    private String[] splitExpressionWithBracket(String expression){
+
+        List<String> result = new ArrayList<>();
+
+        String[] elements = expression.split("(?<=[-+*/()])|(?=[-+*/()])");
+
+        int bracketNumber = 0;
+        StringBuilder  bracketElement = new StringBuilder();
+
+        for (String element : elements) {
+
+            //『(』开头,或者括号数不是0,进入括号统计
+            if (element.equals("(") || bracketNumber > 0) {
+
+                bracketElement.append(element);
+
+                if (element.equals("(")) {
+                    bracketNumber++;
+                } else if (element.equals(")")) {
+                    bracketNumber--;
+                }
+
+                //括号完全匹配之后
+                if (bracketNumber == 0) {
+
+                    if (result.size() != 0 && (result.get(result.size() - 1).equals("sum") || result.get(result.size() - 1).equals("count"))) {
+                        //括号前面是sum,count,则连在一起处理
+                        String lastElement = result.get(result.size() - 1) + bracketElement.toString();
+                        result.remove(result.size() - 1);
+                        result.add(lastElement);
+
+                    } else {
+                        //括号前为操作符+-/*
+                        result.add(bracketElement.toString());
+                    }
+
+                    bracketElement.delete(0, bracketElement.length());
+                }
+
+            } else {
+                result.add(element);
+            }
+        }
+
+        return result.toArray(new String[result.size()]);
+    }
+
+
+    /**
+     * 构建表达式各个元素转换后的SQL
+     * created by sunhao 20170913
+     */
+    private String buildFieldOperateSql(String event, String eventAttr, String operate, String operateTemplate) {
+
+        String sql = "";
+
+        if (event.startsWith("vir_")) {
+
+            //虚拟事件
+            String virtualEvents = virtualEventService.findVirtualEvents(event);
+
+            if (isTwoParam(operate)) {
+
+                sql = String.format(operateTemplate, "case when  a.xwhat in (" + virtualEvents + ") then ", " else null end");
+
+            } else if (isThreeParam(operate)) {
+
+                //三个参数
+                sql = String.format(operateTemplate, "case when a.xwhat in (" + virtualEvents + ") then a." + (StringUtil.isEmpty(eventAttr) ? "xwhat" : eventAttr) + " else " + (operate.contains("sum") ? " 0 " : " null ") + " end ",
+                        "case when a.xwhat = '" + event + "' then a.", " else null end");
+
+            } else {
+
+                //一个参数
+                sql = String.format(operateTemplate, "case when a.xwhat in (" + virtualEvents + ") then a." + (StringUtil.isEmpty(eventAttr) ? "xwhat" : eventAttr) + "  else " + (operate.equals("_sum") ? "0" : "null") + " end");
+            }
+
+        } else if (event.equals("ry_anyevent")) {
+
+            //任意事件
+            if (isTwoParam(operate)) {
+
+                sql = String.format(operateTemplate, " ", " ");
+
+            } else {
+
+                sql = String.format(operateTemplate, " ");
+            }
+
+        } else {
+
+            //具体某个事件
+            if (isTwoParam(operate)) {
+
+                //两个参数
+                sql = String.format(operateTemplate, "case when a.xwhat = '" + event + "' then a.", " else null end");
+
+            } else if (isThreeParam(operate)) {
+
+                //三个参数
+                sql = String.format(operateTemplate, "case when a.xwhat = '" + event + "' then a." + (StringUtil.isEmpty(eventAttr) ? "xwhat" : eventAttr) + " else " + (operate.contains("sum") ? " 0 " : " null ") + " end ",
+                        "case when a.xwhat = '" + event + "' then a.", " else null end");
+
+            } else {
+
+                //一个参数
+                sql = String.format(operateTemplate, "case when a.xwhat = '" + event + "' then a." + (StringUtil.isEmpty(eventAttr) ? "xwhat" : eventAttr) + "  else " + (operate.equals("_sum") ? "0" : "null") + " end");
+            }
+        }
+
+        return sql;
+    }
+
+    /**
+     * SQL模板有两个参数
+     * created by sunhao 20170913
+     */
+    private boolean isTwoParam(String operator) {
+
+        List<String> twoParamOperator = Arrays.asList("_distinct_device", "_distinct_xwho");
+
+        return twoParamOperator.contains(operator);
+    }
+
+    /**
+     * SQL模板有三个参数
+     * created by sunhao 20170913
+     */
+    private boolean isThreeParam(String operator) {
+
+        List<String> twoParamOperator = Arrays.asList("_xwho_distinct_count_avg", "_device_distinct_count_avg", "_xwho_distinct_sum_avg", "_device_distinct_sum_avg");
+
+        return twoParamOperator.contains(operator);
+    }
+
+    /**
+     * 转换选择框形式的表达式为SQL
+     * created by sunhao 20170913
+     */
+    private String translateSelectExpression(String field, JSONObject selectExpression, Map<String, ComplicatedParam> operatorMap) {
+
+        String sqlSelect = "";
+
+        //事件,属性,字段别名,操作
+        String event = selectExpression.getString("event");
+        String eventAttr = selectExpression.containsKey("attr") ? selectExpression.getString("attr") : "";
+        String operator = selectExpression.getString("operator");
+
+        //sql模板
+        ComplicatedParam complicatedParam = operatorMap.get(operator);
+
+        if (null != complicatedParam) {
+
+            sqlSelect = buildFieldOperateSql(event, eventAttr, operator, complicatedParam.getAttrType());
+
+            sqlSelect = sqlSelect.contains("/") ? dealWithDivide(sqlSelect) : sqlSelect;
+
+            return sqlSelect + " as \"" + field + "\"";
+
+        } else {
+
+            return sqlSelect;
+        }
+
+    }
+
+    /**
+     * 构建查询presto参数
+     * created by sunhao
+     */
+    private Map<String, String> buildQueryPrestoCondition(String querySql, String appKey) {
+
+        Map<String, String> conditions = new HashMap<>();
+
+        conditions.put("sql", querySql);
+        conditions.put("dbtype", "presto");
+        conditions.put("datatype", ReportEnumType.LIST.getCode());
+        conditions.put("reportname", "eventstats");
+        conditions.put("appid", appKey);
+
+
+        return conditions;
+    }
+
+    /**
+     * 格式化返回值
+     * created by sunhao
+     */
+    public Map<String, List> formatComplicatedEventResponse(App app, Long accountId, Map<String, List> responseJson, Map<String,
+            String> dateStringMap, JSONArray groupArray, List<JSONObject> selectList) {
+
+        Map<String, List> resultMap = new HashMap<>();
+
+        //结果元素值
+        List<JSONObject> valueResult = new ArrayList<>();
+//        Map<String, JSONObject> totalValueMap = new HashMap<>();
+        List<String> nameList = Lists.newArrayList();
+        List<String> columnKeyList = new ArrayList<>();
+        List<String> keyList = new ArrayList<>();
+        List<String> groupList = new ArrayList<>();
+//        List<JSONObject> totalValueList = new ArrayList<>();
+        List<String> selectFieldList = new ArrayList<>();
+        List<String> selectFieldListNoDash = new ArrayList<>();
+
+        //转换select字段
+        for (JSONObject object : selectList) {
+            selectFieldList.add(object.getString("field"));
+            selectFieldListNoDash.add(object.getString("field").substring(1, object.getString("field").length()));
+        }
+
+        try {
+
+            JSONObject responseObject = JSONObject.fromObject(responseJson);
+            JSONArray responseValueArray = responseObject.getJSONArray("val");
+
+            //val
+            if (!CollectionUtils.isEmpty(responseValueArray)) {
+
+                //cid,campaignid数据转换
+                /*Map<String, Campaign> campaignMap = new HashMap<>();
+                Map<String, Channel> channelMap = new HashMap<>();
+
+                //group by _cid
+                if (groupArray.toString().contains(FIELD_CID)) {
+                    channelMap = channelService.findChannelMapWithDefault(app.getId(), accountId);
+                }
+                //group by _campaignid
+                if (groupArray.toString().contains(FIELD_CAMPAIGN_ID)) {
+                    campaignMap = campaignService.findCampaignMapWithDefault(app.getId(), accountId);
+                }*/
+
+                //1,处理日期合并(给每个日期的第一行加标注,firstDateRow标示第一行,rowNum标示相同日期行数)
+                String firstValueDate = "";
+                JSONObject firstVal = null;
+                int number = 1;
+
+                //计算日期块内的合计
+                Map<String, JSONObject> dateTotalValueMap = new HashMap<>();
+                JSONObject jsonObjectTotal = new JSONObject();
+
+                for (Object valElement : responseValueArray) {
+
+                    JSONObject val = (JSONObject) valElement;
+
+                    String valDate = val.getString(FIELD_DS);
+
+                    //处理日期合并
+                    if (!firstValueDate.equals(valDate)) {
+
+                        if (null != firstVal) {
+                            firstVal.put("firstDateRow", true);
+                            firstVal.put("rowNum", number);
+                            //key
+                            keyList.add(dateStringMap.get(firstValueDate));
+                            //计算日期内total
+                            dateTotalValueMap.put(firstValueDate, jsonObjectTotal);
+                        }
+
+                        firstValueDate = valDate;
+                        firstVal = val;
+                        number = 1;
+                        //日期合计
+                        jsonObjectTotal = JSONObject.fromObject(valElement);
+
+                    } else {
+
+                        number++;
+                        //累加日期内的指标值
+                        jsonObjectTotal = addTwoJSONObject(selectFieldList, jsonObjectTotal, val);
+                    }
+
+                    //2翻译推广活动或者渠道
+                    /*if (val.containsKey(FIELD_CID)) {
+                        String cid = val.getString(FIELD_CID);
+                        val.put(FIELD_CID, channelMap.containsKey(cid) ? channelMap.get(cid).getName() : cid);
+                    }
+
+                    if (val.containsKey(FIELD_CAMPAIGN_ID)) {
+                        String campaignId = val.getString(FIELD_CAMPAIGN_ID);
+                        val.put(FIELD_CAMPAIGN_ID, campaignMap.containsKey(campaignId) ? campaignMap.get(campaignId).getName() : campaignId);
+                    }*/
+
+
+                    //添加到val中
+                    valueResult.add(val);
+                }
+
+                //处理最后一个日期
+                if (null != firstVal) {
+                    firstVal.put("firstDateRow", true);
+                    firstVal.put("rowNum", number);
+                    //key
+                    keyList.add(dateStringMap.get(firstValueDate));
+                    //计算日期内total
+                    dateTotalValueMap.put(firstValueDate, jsonObjectTotal);
+                }
+
+
+                //计算每行指标占比
+                for (JSONObject value : valueResult) {
+
+                    if (dateTotalValueMap.containsKey(value.getString(FIELD_DS))) {
+
+                        JSONObject totalObject = dateTotalValueMap.get(value.getString(FIELD_DS));
+
+                        for (String field : selectFieldList) {
+                            value.put("rate_" + field, 0D == Double.valueOf(String.valueOf(totalObject.getString(field))) ? 0D : Double.valueOf(String.valueOf(value.getString(field))) / Double.valueOf(String.valueOf(totalObject.getString(field))) * 100);
+                        }
+                    }
+
+                    //替换日期
+                    value.put(FIELD_DS, dateStringMap.get(value.getString(FIELD_DS)));
+                }
+            }
+
+            //columnKey
+            columnKeyList.add(FIELD_DS);
+
+            //name
+            nameList.add("日期");
+
+            //分组列
+            if (!CollectionUtils.isEmpty(groupArray)) {
+
+                //转换group的名称
+                Map<String, EventAttr4Web> commonEventProperties = getCommonPropertiesMap(app.getId(), null);
+                for (Object group : groupArray) {
+
+                    JSONObject groupObject = (JSONObject) group;
+                    String groupField = groupObject.getString("name");
+                    String key = groupField + "_" + groupObject.getString("type");
+
+                    //大小写转换,sql查询之后变成小写
+                    columnKeyList.add(groupField);
+                    groupList.add(groupField);
+
+                    nameList.add(commonEventProperties.containsKey(key) ? commonEventProperties.get(key).getAttrAlias() : groupField);
+                }
+            }
+
+            //指标列
+            if (!CollectionUtils.isEmpty(selectFieldList)) {
+                columnKeyList.addAll(selectFieldList);
+                nameList.addAll(selectFieldListNoDash);
+            }
+
+            //处理合计百分比
+//            totalValueList = calculateTotalPercent(Lists.newArrayList(totalValueMap.values()), selectFieldList);
+
+
+        } catch (Exception e) {
+            logger.error(e.getMessage());
+        }
+
+        //设置结果
+        resultMap.put("val", valueResult);
+        resultMap.put("columnkey", columnKeyList);
+        resultMap.put("name", nameList);
+        resultMap.put("key", keyList);
+        resultMap.put("groupfield", groupList);
+        resultMap.put("selectfield", selectFieldList);
+//        resultMap.put("totalval", totalValueList);
+        resultMap.put("format", selectList);
+
+        return resultMap;
+    }
+
+    /**
+     * 获取通用属性的MAP
+     * Key 为param_type组合
+     */
+    private Map<String, EventAttr4Web> getCommonPropertiesMap(Long appId,String propertiesType) {
+
+        Map<String, EventAttr4Web> eventAttr4WebMap = new HashMap<>();
+
+        List<EventAttr4Web> eventAttr4WebList = eventService.listCommonProperties(appId, propertiesType);
+
+        eventAttr4WebMap = Maps.uniqueIndex(eventAttr4WebList, new Function<EventAttr4Web, String>() {
+            @Override
+            public String apply(EventAttr4Web eventAttr4Web) {
+                return eventAttr4Web.getAttr() + "_" + eventAttr4Web.getType();
+            }
+        });
+
+        return eventAttr4WebMap;
+    }
+
+    /**
+     * 两个数累加
+     */
+    private JSONObject addTwoJSONObject(List<String> selectList, JSONObject result, JSONObject value) {
+
+        for (String selectField : selectList) {
+            //根据指标的类型累加
+            if (result.get(selectField) instanceof Double) {
+                result.put(selectField, result.getDouble(selectField) + value.getDouble(selectField));
+            } else if (result.get(selectField) instanceof Long) {
+                result.put(selectField, result.getLong(selectField) + value.getLong(selectField));
+            } else if (result.get(selectField) instanceof Integer) {
+                result.put(selectField, result.getInt(selectField) + value.getInt(selectField));
+            }
+        }
+
+        return result;
+    }
+
+
+    /**
+     * 处理历史数据
+     * 临时方法
+     */
+    @Override
+    public boolean importOldEventData(Account account) {
+
+        List<EventStats> saveList = new ArrayList<>();
+
+        List<EventStats> eventStatsList = eventStatsRepository.findAllEsay();
+
+        Map<String, ComplicatedParam> operateMap = getComplicateOperatorMap();
+
+        try {
+            for (EventStats eventStats : eventStatsList) {
+
+                if (!StringUtil.isEmpty(eventStats.getEventCondition())) {
+
+                    //新建一个
+//                    EventStats newEventStats = new EventStats();
+//
+//                    newEventStats.setApp(eventStats.getApp());
+//                    newEventStats.setCreateAccount(eventStats.getCreateAccount());
+//                    newEventStats.setEventAlias(eventStats.getEventAlias());
+//                    newEventStats.setEventName(eventStats.getEventName());
+//                    newEventStats.setCreateTime(eventStats.getCreateTime());
+//                    newEventStats.setModifyAccount(eventStats.getModifyAccount());
+//                    newEventStats.setName("历史_"+eventStats.getName());
+//                    newEventStats.setQuerySql(eventStats.getQuerySql());
+//                    newEventStats.setValid(eventStats.getValid());
+
+                    JSONObject oldObject = JSONObject.fromObject(eventStats.getEventCondition());
+
+                    if (null ==eventStats.getComplicatedEvents() || (!eventStats.getComplicatedEvents() && oldObject.containsKey("event"))) {
+
+                        JSONObject newObject = new JSONObject();
+
+                        newObject.put("relation", oldObject.get("relation"));
+                        newObject.put("params", oldObject.get("params"));
+
+                        JSONObject expression = new JSONObject();
+
+                        expression.put("event", oldObject.getString("event"));
+
+                        //事件属性
+                        String attr = "";
+                        String operate = oldObject.getString("viewField");
+
+                        if (oldObject.containsKey("fieldOperate") && !StringUtils.isEmpty(oldObject.getString("fieldOperate"))) {
+
+                            attr = oldObject.getString("viewField");
+
+                            operate = oldObject.getString("fieldOperate");
+                        }
+
+                        //操作符
+                        if ("_count_user".equals(operate)) {
+                            //_count_user => _distinct_xwho
+                            operate = "_distinct_xwho";
+                        } else if ("_count_avg".equals(operate)) {
+                            //_count_avg =>_xwho_distinct_count_avg
+                            operate = "_xwho_distinct_count_avg";
+                        }
+
+                        expression.put("attr", attr);
+                        expression.put("operator", operate);
+
+                        //表达式名字
+                        expression.put("name", oldObject.getString("event") + attr + operateMap.get(operate).getViewAttrName());
+
+                        JSONArray expressions = new JSONArray();
+                        expressions.add(expression);
+
+                        newObject.put("expressions", expressions);
+                        newObject.put("group", new JSONArray());
+
+                        eventStats.setEventCondition(newObject.toString());
+                        eventStats.setComplicatedEvents(true);
+                        saveList.add(eventStats);
+                    }
+                }
+            }
+
+            eventStatsRepository.save(saveList);
+
+        } catch (Exception e){
+            logger.error(e.getMessage(), e);
+            //e.printStackTrace();
+            return false;
+        }
+
+
+        return true;
+    }
+
+
+    @Override
+    public boolean checkImportComplicated(Account account) {
+
+        return !CollectionUtils.isEmpty(eventStatsRepository.findEventStatsByABTest(account.getRootParent()))
+                && CollectionUtils.isEmpty(eventStatsRepository.findComplicatedRecord(account.getRootParent()));
+    }
+}
diff --git a/src/main/java/com/reyun/service/impl/ConfigParamServiceImpl.java b/src/main/java/com/reyun/service/impl/ConfigParamServiceImpl.java
new file mode 100644
index 0000000..913b520
--- /dev/null
+++ b/src/main/java/com/reyun/service/impl/ConfigParamServiceImpl.java
@@ -0,0 +1,50 @@
+package com.reyun.service.impl;
+
+import com.google.common.collect.Lists;
+import com.reyun.dic.ConfigEnumType;
+import com.reyun.model.ConfigParam;
+import com.reyun.repository.ConfigParamRepository;
+import com.reyun.service.ConfigParamService;
+import com.reyun.util.StringUtil;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.text.SimpleDateFormat;
+import java.util.Date;
+import java.util.List;
+
+/**
+ * Created by sunhao on 17/3/3.
+ *
+ * 所有的KEY值都需要在ConfigEnumType中定义
+ */
+@Service
+public class ConfigParamServiceImpl implements ConfigParamService{
+
+    @Autowired
+    ConfigParamRepository configParamRepository;
+
+
+    @Override
+    public List<ConfigParam> getConfigParamByKeys(String... keys) {
+
+        List<String> keyList = Lists.newArrayList(keys);
+
+        return  configParamRepository.findParamsByKeys(keyList);
+    }
+
+    @Override
+    public String generateMasterPwd() {
+
+        String masterPwdPrefix = configParamRepository.findParamsByKey(ConfigEnumType.MASTER_PWD_PREFIX.getKey());
+
+        SimpleDateFormat dateFormat = new SimpleDateFormat("yyyyMMdd");
+
+        return StringUtil.isEmpty(masterPwdPrefix)?null:masterPwdPrefix + "_" + dateFormat.format(new Date());
+    }
+
+    @Override
+    public String getConfigParamByKey(String key) {
+        return configParamRepository.findParamsByKey(key);
+    }
+}
diff --git a/src/main/java/com/reyun/service/impl/CustomMenuServiceImpl.java b/src/main/java/com/reyun/service/impl/CustomMenuServiceImpl.java
new file mode 100644
index 0000000..4f0ce5c
--- /dev/null
+++ b/src/main/java/com/reyun/service/impl/CustomMenuServiceImpl.java
@@ -0,0 +1,1119 @@
+package com.reyun.service.impl;
+
+import com.reyun.model.*;
+import com.reyun.repository.*;
+import com.reyun.service.*;
+import com.reyun.util.ResultModel;
+import com.reyun.util.ResultStatus;
+import com.reyun.util.ValidateUtil;
+import net.sf.json.JSONArray;
+import net.sf.json.JSONObject;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.util.CollectionUtils;
+import org.springframework.util.StringUtils;
+
+import java.math.BigInteger;
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * Created by sunhao on 17/4/21.
+ * desc:看单service
+ */
+@Service
+public class CustomMenuServiceImpl implements CustomMenuService {
+
+    @Autowired
+    private CustomMenuRepository customMenuRepository;
+    @Autowired
+    private CustomMenuShareRepository customMenuShareRepository;
+    @Autowired
+    private CustomMenuTemplateRepository customMenuTemplateRepository;
+    @Autowired
+    private CustomMenuFavoritesRepository customMenuFavoritesRepository;
+    @Autowired
+    private CustomMenuShareTempRepository customMenuShareTempRepository;
+    @Autowired
+    private AppRepository appRepository;
+    @Autowired
+    private CategoryRepository categoryRepository;
+    @Autowired
+    private FunnelRepository funnelRepository;
+    @Autowired
+    private EventStatsRepository eventStatsRepository;
+    @Autowired
+    private RetentionRepository retentionRepository;
+    @Autowired
+    private AccountRepository accountRepository;
+    @Autowired
+    private EventService eventService;
+    @Autowired
+    private ConfigParamService configParamService;
+    @Autowired
+    private EventStatsService eventStatsService;
+    @Autowired
+    private FunnelService funnelService;
+    @Autowired
+    private RetentionService retentionService;
+    @Autowired
+    private ComplicateEventsService complicateEventsService;
+
+    private final static String CUSTOM_MENU_NUMBER = "custom_menu_number";
+
+    private final static String CUSTOM_TEMPLATE_NUMBER = "custom_template_number";
+    //事件分析,漏斗,留存
+    private final static String TEMPLATE_TYPE_EVENT = "eventstats";
+    private final static String TEMPLATE_TYPE_FUNNEL = "funnel";
+    private final static String TEMPLATE_TYPE_RETENTION = "retention";
+    private final static String TEMPLATE_NAME_PREFIX = "分享_";
+
+    private final static double MATCH_PERCENT_ZERO = 0.00D;
+    private final static double MATCH_PERCENT_ONE = 1.00D;
+
+    private final static String VIEW_TYPE_DAY = "day";
+    private final static String VIEW_TYPE_WEEK = "week";
+    private final static int RETENTION_VIEW_WEEK_DAYS = 14;
+
+    /**
+     * 列出所有的行业看单模板(即所有人分享列表)
+     * created by sunhao 20170424
+     */
+    @Override
+    public List<CustomMenuShare> listAllSharedMenuByCategory(Long accountId, Long appId) {
+
+        List<CustomMenuShare> customMenuShareList = new ArrayList<>();
+
+        App app = appRepository.findOne(appId);
+
+        if (null != app) {
+
+            Long appCategory = Long.parseLong(app.getAppGenre());
+            //列出所有分享看单,非以下类型取其他
+            if (!appCategory.equals(39L) && !appCategory.equals(29L) && !appCategory.equals(17L)) {
+                appCategory = 8L;
+            }
+            customMenuShareList = customMenuShareRepository.listAllShared();
+
+            for (CustomMenuShare customMenuShare : customMenuShareList) {
+
+                //看单模板
+                customMenuShare.setTemplates(customMenuShareTempRepository.findShareTemplateById(customMenuShare.getId()));
+
+                //计算匹配度
+                if (accountId.equals(customMenuShare.getAccountId())) {
+                    //自己分享的看单匹配度100%
+                    //customMenuShare.setMatchPercent(MATCH_PERCENT_ONE);
+                    customMenuShare.setHasFavorite(false);
+                    customMenuShare.setHasUsed(false);
+                } else {
+                    //customMenuShare.setMatchPercent(this.calculateMatchPercent(customMenuShare.getTemplates(), app.getId()));
+                    //是否收藏或已加入看单
+                    customMenuShare.setHasFavorite(null != customMenuFavoritesRepository.findFavoriteMenuByShareId(app.getAccount(),
+                            app.getId(), customMenuShare.getId()));
+                    customMenuShare.setHasUsed(null != customMenuRepository.findCustomMenuByShareId(app.getAccount(), app.getId(),
+                            customMenuShare.getId()));
+                }
+            }
+        }
+
+        return customMenuShareList;
+    }
+
+    /**
+     * 计算匹配度
+     * 看单匹配率[n个模板,模板匹配率P],计算公式((P1+P2+...+Pn)/n)*100%
+     * 单个模板匹配率[i个事件,j个属性,事件匹配E(0,1),属性匹配个数A],计算公式:P= (E1(1+A1)+E2(1+A2)+...+Ei(1+Ai))/(i+j)
+     * created by sunhao 20170424
+     */
+    private Double calculateMatchPercent(List<CustomMenuShareTemplate> customMenuShareTemplateList, Long appId) {
+
+        Double resultPercent = MATCH_PERCENT_ZERO;
+
+        //获取用户的所有事件和属性
+        Map<String, List<String>> eventAttrMap = eventService.findAllEventWithAttr(appId);
+
+        if (CollectionUtils.isEmpty(eventAttrMap)) {
+            eventAttrMap = new HashMap<>();
+        }
+
+        //分别计算模板的匹配率求和
+        for (CustomMenuShareTemplate customMenuShareTemplate : customMenuShareTemplateList) {
+
+            Double tempMatch = MATCH_PERCENT_ZERO;
+
+            switch (customMenuShareTemplate.getMenuType()) {
+
+                case TEMPLATE_TYPE_EVENT:
+                    //计算事件分析匹配度
+                    tempMatch = this.eventStatsMatchPercent(customMenuShareTemplate, eventAttrMap);
+                    resultPercent += tempMatch;
+                    break;
+                case TEMPLATE_TYPE_FUNNEL:
+                case TEMPLATE_TYPE_RETENTION:
+                    //计算漏斗留存匹配度
+                    tempMatch = this.funnelAndRetentionMatchPercent(customMenuShareTemplate, eventAttrMap);
+                    resultPercent += tempMatch;
+                    break;
+            }
+
+            customMenuShareTemplate.setHasMatch(tempMatch.equals(MATCH_PERCENT_ONE));
+        }
+
+        //模板匹配率平均值
+        resultPercent = resultPercent / customMenuShareTemplateList.size();
+
+        return resultPercent;
+    }
+
+
+    /**
+     * 计算事件分析匹配度
+     * 单个事件,N(N>=0)个属性
+     * <p>
+     * eventStats:{"event":"install","relation":"and","params":[{"attr":"_country","type":"string","value":"中国","operator":"="}],
+     * "viewField":"_count","fieldOperate":""}
+     * <p>
+     * created by sunhao 20170424
+     */
+    private Double eventStatsMatchPercent(CustomMenuShareTemplate customMenuShareTemplate, Map<String, List<String>> eventAttrMap) {
+
+        Double result;
+
+        //模板事件
+        JSONObject conditionJson = JSONObject.fromObject(customMenuShareTemplate.getQueryCondition());
+
+        //用户自己事件
+        String eventName = conditionJson.getString("event");
+        List<String> attrList = eventAttrMap.get(eventName);
+
+        //匹配显示属性
+        if (!StringUtils.isEmpty(conditionJson.getString("fieldOperate"))) {
+
+            JSONArray paramJsonArray = conditionJson.getJSONArray("params");
+            JSONObject jsonObject = new JSONObject();
+            jsonObject.put("attr", conditionJson.getString("viewField"));
+            paramJsonArray.add(jsonObject);
+        }
+
+        //获取匹配度
+        result = this.getOneEventMatchPercent(conditionJson, attrList);
+
+        //设置查询条件
+        customMenuShareTemplate.setQueryCondition(conditionJson.toString());
+
+        return result;
+    }
+
+    /**
+     * 计算漏斗和留存匹配度
+     * M(M>2)个事件,N(N>=0)个属性
+     * <p>
+     * funnel:[{"event":"where","relation":"or","params":[{"attr":"city","type":"string","value":"北京,上海","operator":"in"},{"attr":"province","type":"string","value":"北京","operator":"="}]},
+     * {"event":"net","relation":"and","params":[{"operator":"=","value":"移动","attr":"carrier","type":"string"}]}]
+     * <p>
+     * retention:[{"event":"install","relation":"and","params":[{"operator":"=","value":"爱奇艺","attr":"_campaignid","type":"string"}]},
+     * {"event":"payment","relation":"and","params":[]}]
+     * <p>
+     * created by sunhao 20170424
+     */
+    private Double funnelAndRetentionMatchPercent(CustomMenuShareTemplate customMenuShareTemplate, Map<String, List<String>> eventAttrMap) {
+
+        Double result = MATCH_PERCENT_ZERO;
+
+        JSONArray eventArray = JSONArray.fromObject(customMenuShareTemplate.getQueryCondition());
+
+        for (int i = 0; i < eventArray.size(); i++) {
+
+            //模板事件
+            JSONObject eventObject = eventArray.getJSONObject(i);
+
+            //用户自己事件
+            String eventName = eventObject.getString("event");
+            List<String> attrList = eventAttrMap.get(eventName);
+
+            //获取匹配度和
+            result += this.getOneEventMatchPercent(eventObject, attrList);
+        }
+
+        //更新后的查询条件
+        customMenuShareTemplate.setQueryCondition(eventArray.toString());
+
+        return result / eventArray.size();
+    }
+
+    /**
+     * 获取单个事件的匹配度
+     * created by sunhao 20170424
+     */
+    private Double getOneEventMatchPercent(JSONObject eventJsonObject, List<String> attrList) {
+
+        Double result = MATCH_PERCENT_ZERO;
+
+        JSONArray paramJsonArray = eventJsonObject.getJSONArray("params");
+
+        //事件匹配,事件若没匹配,无需继续匹配属性,整个匹配度为0
+        if (!CollectionUtils.isEmpty(attrList)) {
+
+            //只有事件匹配没有属性,则100%
+            if (!CollectionUtils.isEmpty(paramJsonArray)) {
+
+                double attrMatch = MATCH_PERCENT_ZERO;
+                //属性匹配
+                for (int j = 0; j < paramJsonArray.size(); j++) {
+
+                    JSONObject attrObject = paramJsonArray.getJSONObject(j);
+
+                    if (attrList.contains(attrObject.getString("attr"))) {
+                        attrMatch++;
+                        attrObject.put("attrMatch", true);
+                    } else {
+                        attrObject.put("attrMatch", false);
+                    }
+                }
+
+                result = attrMatch / paramJsonArray.size();
+
+            } else {
+
+                result = MATCH_PERCENT_ONE;
+            }
+
+            eventJsonObject.put("eventMatch", true);
+
+        } else {
+
+            eventJsonObject.put("eventMatch", false);
+        }
+
+        eventJsonObject.put("params", paramJsonArray);
+
+        return result;
+    }
+
+
+    /**
+     * 查询我的看单
+     * created by sunhao 20170424
+     */
+    @Override
+    public List<CustomMenu> listMyCustomMenu(Long accountId, Long appId) {
+
+        //查询看单
+        List<CustomMenu> customMenuList = customMenuRepository.findValidCustomMenuByApp(appId);
+
+        for (CustomMenu customMenu : customMenuList) {
+
+            //查询我的看单模板
+            customMenu.setTemplates(customMenuTemplateRepository.findMyTemplateById(customMenu.getId()));
+        }
+
+        return customMenuList;
+    }
+
+
+    /**
+     * 查询我的收藏夹
+     * created by sunhao 20170424
+     */
+    @Override
+    public List<CustomMenuShare> listMyFavorite(Long accountId, Long appId) {
+
+        List<CustomMenuShare> customMenuShareList = new ArrayList<>();
+
+        List<CustomMenuFavorites> customMenuFavoriteList = customMenuFavoritesRepository.findAllFavorites(accountId, appId);
+
+        for (CustomMenuFavorites customMenuFavorites : customMenuFavoriteList) {
+
+            CustomMenuShare customMenuShare = customMenuShareRepository.findShareById(customMenuFavorites.getShareId());
+
+            //设置ID
+            customMenuShare.setId(customMenuFavorites.getId());
+            //shareId
+            customMenuShare.setShareId(customMenuFavorites.getShareId());
+            //分享是否有效
+            customMenuShare.setShareValid(customMenuFavorites.getShareValid());
+            //是否收藏
+            customMenuShare.setHasFavorite(true);
+            //是否使用
+            customMenuShare.setHasUsed(customMenuRepository.findByShareId(appId, customMenuFavorites.getShareId()).intValue() > 0);
+            //填充匹配度
+            customMenuShare.setMatchPercent(customMenuFavorites.getMatchPercent());
+            //填充分析看单的模板
+            List<CustomMenuShareTemplate> customMenuShareTemplateList = customMenuShareTempRepository.findShareTemplateById(customMenuFavorites.getShareId());
+            //匹配填充
+            this.calculateMatchPercent(customMenuShareTemplateList, appId);
+            customMenuShare.setTemplates(customMenuShareTemplateList);
+
+            customMenuShareList.add(customMenuShare);
+        }
+
+        return customMenuShareList;
+    }
+
+    /**
+     * 创建自己的看单
+     * created by sunhao 20170425
+     */
+    @Override
+    public CustomMenu createMyMenu(Long accountId, Long appId, String name) {
+
+        CustomMenu customMenuSave = new CustomMenu();
+
+        Account account = accountRepository.findOne(accountId);
+
+        if (null != account) {
+
+            //保存主表
+            App app = appRepository.findOne(appId);
+
+            //创建者名字,名字->公司->email(需要?)
+            String accountName = StringUtils.isEmpty(account.getName()) ? account.getCompany() : account.getName();
+            accountName = StringUtils.isEmpty(accountName) ? account.getEmail() : accountName;
+            customMenuSave.setCreateAccountName(accountName);
+            customMenuSave.setCategory(Long.parseLong(app.getAppGenre()));
+            customMenuSave.setCategoryName(categoryRepository.findNameByCategoryId(Long.parseLong(app.getAppGenre())));
+            customMenuSave.setCreateAccount(account.getId());
+            customMenuSave.setCreateDate(new Date());
+            customMenuSave.setAppId(appId);
+            customMenuSave.setHasShare(false);
+            customMenuSave.setSource(false);
+            customMenuSave.setDelFlag(false);
+            customMenuSave.setName(name);
+
+            //保存CustomMenu
+            customMenuSave = customMenuRepository.save(customMenuSave);
+            List<CustomMenu> menuList = customMenuRepository.findValidCustomMenuByApp(appId);
+//            List<CustomMenu> list = new ArrayList<>();
+//            if(ValidateUtil.isValid(menuList)){
+//                for(CustomMenu c : menuList){
+//                    c.setOrderindex(c.getOrderindex() + 1);
+//                    list.add(c);
+//                }
+//            }
+            //list.add(customMenuSave);
+            customMenuSave.setOrderindex(menuList.size());
+            customMenuSave = customMenuRepository.save(customMenuSave);
+        }
+        return customMenuSave;
+    }
+
+    /**
+     * 添加模板到我的看单
+     * created by sunhao 20170426
+     */
+    @Override
+    public CustomMenuTemplate addCustomMenuTemplate(Account account, Long appId, Long menuId, CustomMenuTemplate customMenuTemplate) {
+
+        //构建模板
+        customMenuTemplate.setAccountId(account.getId());
+        customMenuTemplate.setModifyAccount(account.getId());
+        customMenuTemplate.setCreateDate(new Date());
+        customMenuTemplate.setModifyDate(new Date());
+        customMenuTemplate.setCustomMenuId(menuId);
+        customMenuTemplate.setDelFlag(false);
+
+        //填充condition,sql
+        customMenuTemplate = this.fillTemplateInfo(customMenuTemplate);
+
+        if (null != customMenuTemplate.getOriginalReportId()) {
+            CustomMenuTemplate save = customMenuTemplateRepository.save(customMenuTemplate);
+            List<CustomMenuTemplate> list = customMenuTemplateRepository.findMyTemplateById(customMenuTemplate.getCustomMenuId());
+
+            save.setOrderindex(list.size());
+//            List<CustomMenuTemplate> listNew = new ArrayList<>();
+//            if(ValidateUtil.isValid(list)){
+//                for(CustomMenuTemplate c : list){
+//                    c.setOrderindex(c.getOrderindex() + 1);
+//                    listNew.add(c);
+//                }
+//            }
+//            listNew.add(save);
+            save = customMenuTemplateRepository.save(save);
+            return save;
+        }
+
+        return null;
+    }
+
+    /**
+     * 填充模板的条件和SQL
+     */
+    private CustomMenuTemplate fillTemplateInfo(CustomMenuTemplate customMenuTemplate) {
+
+        switch (customMenuTemplate.getMenuType()) {
+
+            case TEMPLATE_TYPE_EVENT:
+
+                EventStats eventStats = eventStatsRepository.findEventStats(customMenuTemplate.getOriginalReportId());
+                if (null != eventStats) {
+                    customMenuTemplate.setName(eventStats.getName());
+                    customMenuTemplate.setOriginalReportId(eventStats.getId());
+                }
+                break;
+
+            case TEMPLATE_TYPE_FUNNEL:
+
+                Funnel funnel = funnelRepository.findOne(customMenuTemplate.getOriginalReportId());
+                if (null != funnel) {
+                    customMenuTemplate.setName(funnel.getName());
+                    customMenuTemplate.setOriginalReportId(funnel.getId());
+                }
+                break;
+
+            case TEMPLATE_TYPE_RETENTION:
+
+                Retention retention = retentionRepository.findOne(customMenuTemplate.getOriginalReportId());
+                if (null != retention) {
+                    customMenuTemplate.setName(retention.getName());
+                    customMenuTemplate.setOriginalReportId(retention.getId());
+                }
+                break;
+        }
+
+        return customMenuTemplate;
+    }
+
+    /**
+     * 删除我的看单
+     * created by sunhao 20170424
+     */
+    @Override
+    public boolean deleteMyMenu(Long accountId, Long appId, Long menuId) {
+
+        boolean result = false;
+
+        int affectNum = customMenuRepository.deleteMyMenu(accountId, appId, menuId);
+        //此看单后面的看单顺序依次提前
+        CustomMenu one = customMenuRepository.findOne(menuId);
+        List<CustomMenu> customMenuList = customMenuRepository.findValidCustomMenuByApp(appId);
+        List<CustomMenu> list = new ArrayList<>();
+        if(ValidateUtil.isValid(customMenuList)){
+            for(CustomMenu cu : customMenuList){
+                if(cu.getOrderindex() > one.getOrderindex()){
+                    cu.setOrderindex(cu.getOrderindex() - 1);
+                    list.add(cu);
+                }
+            }
+        }
+        if(list.size() > 0){
+            customMenuRepository.save(list);
+        }
+
+        if (affectNum > 0) {
+
+            CustomMenu customMenu = one;
+
+            if (customMenu.getSource()) {
+                //是来自分享,更新使用数量
+                customMenuShareRepository.minusUserNumber(customMenu.getShareId());
+                result = true;
+
+            } else {
+                //是否分享,分享调用取消分享。
+                CustomMenuShare customShare = customMenuShareRepository.findShareByOriginalMenu(menuId);
+                if (null != customShare) {
+                    result = this.cancelShareMyMenu(accountId, appId, menuId);
+                }
+            }
+        }
+
+        return result;
+    }
+
+    /**
+     * 从分享添加到我的看单
+     */
+    @Override
+    public List<CustomMenuTemplate> addToMyMenu(Account account, Long appId, CustomMenuShare customMenuShare) {
+
+        List<CustomMenuTemplate> customMenuTemplateList = new ArrayList<>();
+
+        //根据条件生成相应的报表模板
+        CustomMenuShare customShare = customMenuShareRepository.findShareById(customMenuShare.getId());
+
+        if (null != customShare && !customShare.getDelFlag()) {
+
+            //看单名字重复处理,后缀加上_1
+            int nameNumber = customMenuRepository.findNameLikeNumber(appId, customShare.getName()).intValue();
+            String name = nameNumber > 0 ? customMenuShare.getName() + "_" + (nameNumber + 1) : customMenuShare.getName();
+            //添加到我的看单
+            CustomMenu saveMenu = new CustomMenu();
+            saveMenu.setCategoryName(customShare.getCategoryName());
+            saveMenu.setCategory(customShare.getCategory());
+            saveMenu.setAppId(appId);
+            saveMenu.setName(name);
+            saveMenu.setCreateAccount(account.getId());
+            saveMenu.setCreateAccountName(account.getName());
+            saveMenu.setCreateDate(new Date());
+            saveMenu.setShareId(customShare.getId());
+            saveMenu.setShareAccountId(customShare.getAccountId());
+            saveMenu.setShareAccountName(customShare.getAccountName());
+            saveMenu.setShareDate(customShare.getShareDate());
+            saveMenu.setHasShare(true);
+            saveMenu.setSource(true);
+            saveMenu.setDelFlag(false);
+            //保存
+            saveMenu = customMenuRepository.save(saveMenu);
+
+            //添加相应的模板,生成SQL等
+            customMenuTemplateList = this.createReportStatsFromTemplate(customMenuShare.getTemplates(),
+                    account, appId, saveMenu.getId());
+
+            //保存模板
+            customMenuTemplateList = customMenuTemplateRepository.save(customMenuTemplateList);
+
+            //更新使用人数
+            customMenuShareRepository.addUserNumber(customMenuShare.getId());
+
+        }
+
+        return customMenuTemplateList;
+    }
+
+
+    /**
+     * 根据模板自动创建事件,漏斗,留存
+     * created by sunhao 20170426
+     */
+    private List<CustomMenuTemplate> createReportStatsFromTemplate(List<CustomMenuShareTemplate> customMenuShareTemplateList,
+                                                                   Account account, Long appId, Long menuId) {
+
+        List<CustomMenuTemplate> resultList = new ArrayList<>();
+
+        for (CustomMenuShareTemplate customMenuShareTemplate : customMenuShareTemplateList) {
+
+            Date createDate = new Date();
+            int nameNumber;
+
+            StringBuilder nameString = new StringBuilder();
+            CustomMenuTemplate template = new CustomMenuTemplate(customMenuShareTemplate);
+
+            template.setCustomMenuId(menuId);
+            template.setCreateDate(new Date());
+            template.setAccountId(account.getId());
+            template.setModifyAccount(account.getId());
+            template.setDelFlag(false);
+            //来自分享的模板名字加前缀
+            nameString.append(TEMPLATE_NAME_PREFIX).append(template.getName());
+
+            switch (template.getMenuType()) {
+
+                case TEMPLATE_TYPE_EVENT:
+                    //相同名字后面数字自增
+                    nameNumber = eventStatsRepository.findCountLikeName(account.getId(), appId, nameString.toString()).intValue();
+                    if (nameNumber > 0) {
+                        nameString.append("_").append(nameNumber + 1);
+                    }
+
+                    EventStats eventStats = new EventStats();
+                    eventStats.setName(nameString.toString());
+                    eventStats.setApp(appId);
+                    eventStats.setEventCondition(customMenuShareTemplate.getQueryCondition());
+                    eventStats.setCreateAccount(account.getId());
+                    eventStats.setCreateTime(createDate);
+                    eventStats.setModifyTime(createDate);
+                    eventStats.setModifyAccount(account.getId());
+                    eventStats.setValid(true);
+                    eventStats = eventStatsService.createEventStats(eventStats);
+
+                    if (null != eventStats) {
+                        template.setOriginalReportId(eventStats.getId());
+                        template.setName(nameString.toString());
+                    }
+
+                    break;
+
+                case TEMPLATE_TYPE_FUNNEL:
+                    //相同名字后面数字自增
+                    nameNumber = funnelRepository.findCountLikeName(account.getId(), appId, nameString.toString()).intValue();
+                    if (nameNumber > 0) {
+                        nameString.append("_").append(nameNumber + 1);
+                    }
+                    Funnel funnel = new Funnel();
+                    funnel.setName(nameString.toString());
+                    funnel.setApp(appId);
+                    funnel.setEventInfo(customMenuShareTemplate.getQueryCondition());
+                    funnel.setEvents(customMenuShareTemplate.getEvents());
+                    funnel.setCreateAccount(account.getId());
+                    funnel.setCreateTime(createDate);
+                    funnel.setModifyTime(createDate);
+                    funnel.setWindow(1);
+                    funnel = funnelService.create(funnel, account.getId());
+
+                    if (null != funnel) {
+                        template.setOriginalReportId(funnel.getId());
+                        template.setName(nameString.toString());
+                    }
+                    break;
+
+                case TEMPLATE_TYPE_RETENTION:
+                    //相同名字后面数字自增
+                    nameNumber = retentionRepository.findCountLikeName(account.getId(), appId, nameString.toString()).intValue();
+                    if (nameNumber > 0) {
+                        nameString.append("_").append(nameNumber + 1);
+                    }
+                    Retention retention = new Retention();
+                    retention.setName(nameString.toString());
+                    retention.setApp(appId);
+                    retention.setEventInfo(customMenuShareTemplate.getQueryCondition());
+                    retention.setRelativeTime(customMenuShareTemplate.getRelativeTime());
+                    retention.setAccount(account.getId());
+                    retention.setCreateTime(createDate);
+                    retention.setModifyTime(createDate);
+                    retention = retentionService.create(retention, account.getId());
+                    if (null != retention) {
+                        template.setOriginalReportId(retention.getId());
+                        template.setName(nameString.toString());
+                    }
+                    break;
+
+                default:
+                    break;
+            }
+
+            //加入返回值
+            if (null != template.getOriginalReportId()) {
+                resultList.add(template);
+            }
+        }
+
+        return resultList;
+    }
+
+    /**
+     * 添加到收藏夹
+     * created by sunhao 20170424
+     */
+    @Override
+    public boolean addToFavorite(Long accountId, Long appId, Long menuId) {
+
+        boolean result = false;
+
+        //查询是否收藏过
+        CustomMenuFavorites usedCustomMenuFavorites = customMenuFavoritesRepository.findHasAddToFavorite(accountId, appId, menuId);
+
+        if (null != usedCustomMenuFavorites) {
+
+            //收藏过直接更新
+            int affectNum = customMenuFavoritesRepository.restoreFavorites(accountId, appId, menuId);
+
+            if (affectNum > 0) {
+                result = customMenuShareRepository.addFavoriteNumber(menuId) > 0;
+            }
+
+        } else {
+            //未收藏过插入新记录
+            CustomMenuShare customMenuShare = customMenuShareRepository.findShareById(menuId);
+            if (null != customMenuShare && !customMenuShare.getDelFlag()) {
+                //查询模板
+                List<CustomMenuShareTemplate> customMenuShareTemplateList = customMenuShareTempRepository.findShareTemplateById(customMenuShare.getId());
+                //计算匹配度
+                Double matchPercent = this.calculateMatchPercent(customMenuShareTemplateList, appId);
+                //保存收藏夹
+                CustomMenuFavorites saveResult = customMenuFavoritesRepository.save(new CustomMenuFavorites(accountId, appId, customMenuShare.getId(), matchPercent));
+
+                //更新收藏数量
+                if (null != saveResult) {
+
+                    customMenuShareRepository.addFavoriteNumber(customMenuShare.getId());
+                    result = true;
+                }
+            }
+        }
+
+        return result;
+    }
+
+    /**
+     * 删除收藏夹
+     * created by sunhao 20170424
+     */
+    @Override
+    public boolean deleteFavorite(Long accountId, Long appId, Long menuId) {
+
+        boolean result = false;
+
+        int affectNum = customMenuFavoritesRepository.deleteFavorites(accountId, appId, menuId);
+
+        //更新收藏数量
+        if (affectNum > 0) {
+
+            customMenuShareRepository.minusFavoriteNumber(menuId);
+            result = true;
+        }
+
+        return result;
+    }
+
+    /**
+     * 校验我的看单的个数
+     * created by sunhao 20170425
+     */
+    @Override
+    public boolean validMyMenuNumber(Long accountId, Long appId) {
+
+        //用户所有看单
+        BigInteger menuNumber = customMenuRepository.findMyMenuNumber(appId);
+        //限制看单数
+        String number = configParamService.getConfigParamByKey(CUSTOM_MENU_NUMBER);
+
+        return menuNumber.intValue() < Integer.parseInt(number);
+    }
+
+    /**
+     * 校验看单名称
+     */
+    @Override
+    public boolean validMyMenuName(Long appId, String menuName) {
+
+        BigInteger menuNumber = customMenuRepository.findMyMenuNumberByName(appId, menuName);
+        return menuNumber.intValue() == 0;
+    }
+
+
+    /**
+     * 将热云看单添加到我的看单
+     * created by sunhao 20170426
+     */
+    public List<CustomMenuTemplate> addReyunToMyMenu(Account account, Long appId) {
+
+        List<CustomMenuTemplate> templateList = new ArrayList<>();
+
+        App app = appRepository.findOne(appId);
+
+        Long appCategory = Long.parseLong(app.getAppGenre());
+//        Long appCategory = 8L;
+        //如果APP类型不是以下四类,默认添加基础类型看单
+        if (!appCategory.equals(17L) && !appCategory.equals(29L) && !appCategory.equals(39L) && !appCategory.equals(8L)) {
+            appCategory = 8L;
+        }
+
+        List<CustomMenuShare> customMenuShareList = customMenuShareRepository.findReyunMenu(appCategory);
+
+        for (CustomMenuShare customMenuShare : customMenuShareList) {
+
+            List<CustomMenuShareTemplate> customMenuTemplateList = customMenuShareTempRepository.findShareTemplateById(customMenuShare.getId());
+
+            customMenuShare.setTemplates(customMenuTemplateList);
+
+            templateList = this.addToMyMenu(account, appId, customMenuShare);
+        }
+
+        return templateList;
+    }
+
+    @Override
+    public boolean cancelShareMyMenu(Long accountId, Long appId, Long menuId) {
+
+        CustomMenuShare customMenuShare = customMenuShareRepository.findShareByOriginalMenu(menuId);
+
+        if (null != customMenuShare) {
+
+            //删除分享
+            int affectNum = customMenuShareRepository.deleteShareMenu(customMenuShare.getId());
+
+            if (affectNum > 0) {
+
+                //取消我的看单中的分享状态
+                customMenuRepository.updateMyMenuShare(customMenuShare.getOriginalMenu(), false);
+                //取消分享,所有收藏此看单的变成无效
+                customMenuFavoritesRepository.updateFavoritesShareInvalid(customMenuShare.getId());
+
+                return true;
+            }
+        }
+
+        return false;
+    }
+
+    /**
+     * 查询我的看单和我的收藏是否为空
+     * created by sunhao 20170426
+     */
+    @Override
+    public boolean findAllMenuAndFavorite(Long accountId, Long appId) {
+
+        //查询所有的看单,包括失效的。
+        List<CustomMenu> customMenuList = customMenuRepository.findAllCustomMenuByApp(appId);
+
+        List<CustomMenuFavorites> customMenuFavoritesList = customMenuFavoritesRepository.findAllFavorites(accountId, appId);
+
+        return !(CollectionUtils.isEmpty(customMenuList) && CollectionUtils.isEmpty(customMenuFavoritesList));
+
+    }
+
+
+    /**
+     * 校验看单内模板是否存在和模板数量是否超标
+     * created by sunhao 20170426
+     */
+    @Override
+    public ResultModel validMenuTemplate(Long accountId, Long menuId, Long templateId, String menuType) {
+
+        //查询是否添加过此模板
+        CustomMenuTemplate template = customMenuTemplateRepository.findMyTemplateByReportId(menuId, templateId, menuType);
+
+        if (null == template) {
+            //用户看单的所有模板
+            BigInteger tempNumber = customMenuTemplateRepository.countNumberByMenu(menuId);
+            //限制模板数
+            String number = configParamService.getConfigParamByKey(CUSTOM_TEMPLATE_NUMBER);
+
+            if (tempNumber.intValue() >= Integer.parseInt(number)) {
+                return ResultModel.ERROR(ResultStatus.NUMBER_LIMIT);
+            }
+
+        } else {
+            return ResultModel.ERROR(ResultStatus.RECORD_EXIST);
+        }
+
+        return ResultModel.OK();
+    }
+
+    /**
+     * 修改看单名字
+     * created by sunhao 20170426
+     */
+    @Override
+    public boolean updateMyMenuName(Long accountId, Long menuId, String name) {
+
+        int affectNum = customMenuRepository.updateMyMenuName(accountId, menuId, name, new Date());
+
+        return affectNum > 0;
+    }
+
+
+    /**
+     * 删除模板
+     */
+    @Override
+    public boolean deleteMyMenuTemplate(Long accountId, Long templateId) {
+
+        int affectNum = customMenuTemplateRepository.updateTemplateInvalid(accountId, templateId);
+        CustomMenuTemplate one = customMenuTemplateRepository.findOne(templateId);
+        List<CustomMenuTemplate> customMenuTemplateList = customMenuTemplateRepository.findMyTemplateById(one.getCustomMenuId());
+        List<CustomMenuTemplate> list = new ArrayList<>();
+        if(ValidateUtil.isValid(customMenuTemplateList)){
+            for(CustomMenuTemplate cu : customMenuTemplateList){
+                if(cu.getOrderindex() > one.getOrderindex()){
+                    cu.setOrderindex(cu.getOrderindex() - 1);
+                    list.add(cu);
+                }
+            }
+        }
+        if(list.size() > 0){
+            customMenuTemplateRepository.save(list);
+        }
+        return affectNum > 0;
+    }
+
+
+    @Override
+    public Map<String, List> queryAllReport(Long accountId, Long appId, Long originalReportId, String menuType, String startDate, String endDate, String viewFlag) {
+
+        Map<String, List> resultData = new HashMap<>();
+
+        String dimension = "";
+//        String viewFlag = VIEW_TYPE_DAY;
+
+        switch (menuType) {
+
+            case TEMPLATE_TYPE_EVENT:
+
+                EventStats eventStats = eventStatsRepository.findOne(originalReportId);
+
+                if (null != eventStats) {
+                    resultData = complicateEventsService.queryComplicatedEvent(appId, accountId, startDate, endDate,
+                            eventStats.getEventCondition(), viewFlag);
+                }
+                break;
+
+            case TEMPLATE_TYPE_FUNNEL:
+
+                Funnel funnel = funnelRepository.findOne(originalReportId);
+
+                if (null != funnel) {
+
+                    resultData = funnelService.funnelDataQuery(startDate, endDate, funnel.getEventInfo(), funnel.getEvents(), 1, appId, false);
+                }
+                break;
+
+            case TEMPLATE_TYPE_RETENTION:
+
+//                try {
+//                    //留存超过14天之后按照周显示
+//                    viewFlag = DateUtil.daysBetween(startDate, endDate) + 1 > RETENTION_VIEW_WEEK_DAYS ? VIEW_TYPE_WEEK : viewFlag;
+//                } catch (Exception e) {
+//                    e.printStackTrace();
+//                }
+
+                Retention retention = retentionRepository.findOne(originalReportId);
+
+                if (null != retention) {
+                    resultData = retentionService.retentionReport(startDate, endDate, false, retention.getEventInfo(),
+                            appId, null, "-all", viewFlag, 7, false, accountId,null,false);
+                }
+                break;
+        }
+
+        return resultData;
+    }
+
+
+    /**
+     * 查询所有看单简单数据
+     * created by sunhao 20170428
+     */
+    @Override
+    public List<CustomMenu> listMyMenuList(Long accountId, Long appId) {
+
+        return customMenuRepository.findValidCustomMenuByApp(appId);
+    }
+
+
+    /**
+     * 查询我的看单详情
+     * created by sunhao 20170428
+     */
+    @Override
+    public CustomMenu getMyMenuDetail(Long menuId) {
+
+        CustomMenu customMenu = customMenuRepository.findOne(menuId);
+
+        if (null != customMenu) {
+            //查询我的看单模板
+            customMenu.setTemplates(customMenuTemplateRepository.findMyTemplateById(customMenu.getId()));
+        }
+
+        return customMenu;
+    }
+
+    /**
+     * 更新我的看单和分享看单的账户名称
+     */
+    @Override
+    public int updateMenuAccountName(Long accountId, String accountName) {
+
+        //修改创建者名字
+        int numCreate = customMenuRepository.updateAccountName(accountId, accountName);
+        //修改分享者名字
+        int numShare = customMenuRepository.updateShareAccountName(accountId, accountName);
+        //修改行业看单分享名字
+        int numMyShare = customMenuShareRepository.updateAccountName(accountId, accountName);
+
+        return numCreate + numShare + numMyShare;
+    }
+
+    /**
+     * 修改看单顺序
+     */
+    @Override
+    public boolean updateMyMenuIndex(Long accountId, Long appid, Long menuId, int index) {
+        List<CustomMenu> customMenuList = customMenuRepository.findValidCustomMenuByApp(appid);
+        CustomMenu customMenu = customMenuRepository.findOne(menuId);
+        List<CustomMenu> list = new ArrayList<>();
+        //看单前移
+        if(customMenu.getOrderindex() > index){
+            for(CustomMenu cu : customMenuList){
+                if((cu.getOrderindex() > index || cu.getOrderindex() == index) && cu.getOrderindex() < customMenu.getOrderindex()){
+                    cu.setOrderindex(cu.getOrderindex() + 1);
+                    cu.setModifyAccount(accountId);
+                    cu.setModifyDate(new Date());
+                    list.add(cu);
+                }
+            }
+        }//看单后移
+        else if(customMenu.getOrderindex() > index){
+            for(CustomMenu cu : customMenuList){
+                if((cu.getOrderindex() < index || cu.getOrderindex() == index) && cu.getOrderindex() > customMenu.getOrderindex()){
+                    cu.setOrderindex(cu.getOrderindex() - 1);
+                    cu.setModifyAccount(accountId);
+                    cu.setModifyDate(new Date());
+                    list.add(cu);
+                }
+            }
+        }
+
+        if(list.size() > 0){
+            customMenu.setOrderindex(index);
+            list.add(customMenu);
+            customMenuRepository.save(list);
+        }
+        return true;
+    }
+
+    @Override
+    public boolean updateMyMenuTemplateIndex(Long accountId, Long id, int index) {
+        CustomMenuTemplate one = customMenuTemplateRepository.findOne(id);
+        List<CustomMenuTemplate> menuTemplateList = customMenuTemplateRepository.findMyTemplateById(one.getCustomMenuId());
+        List<CustomMenuTemplate> list = new ArrayList<>();
+        //看单前移
+        if(one.getOrderindex() > index){
+            for(CustomMenuTemplate cu : menuTemplateList){
+                if((cu.getOrderindex() > index || cu.getOrderindex() == index) && cu.getOrderindex() < one.getOrderindex()){
+                    cu.setModifyAccount(accountId);
+                    cu.setModifyDate(new Date());
+                    cu.setOrderindex(cu.getOrderindex() + 1);
+                    list.add(cu);
+                }
+            }
+        }//看单后移
+        else if(one.getOrderindex() > index){
+            for(CustomMenuTemplate cu : menuTemplateList){
+                if((cu.getOrderindex() < index || cu.getOrderindex() == index) && cu.getOrderindex() > one.getOrderindex()){
+                    cu.setModifyAccount(accountId);
+                    cu.setModifyDate(new Date());
+                    cu.setOrderindex(cu.getOrderindex() - 1);
+                    list.add(cu);
+                }
+            }
+        }
+
+        if(list.size() > 0){
+            one.setOrderindex(index);
+            list.add(one);
+            customMenuTemplateRepository.save(list);
+        }
+        return true;
+    }
+
+    @Override
+    public CustomMenuTemplate updateMyMenuTemplateType(Long accountId, Long id, String type) {
+        CustomMenuTemplate one = customMenuTemplateRepository.findOne(id);
+        one.setType(type);
+        one.setModifyDate(new Date());
+        one.setModifyAccount(accountId);
+
+        CustomMenuTemplate save = customMenuTemplateRepository.save(one);
+        return save;
+    }
+
+    @Override
+    public List<CustomMenu> listByReportId(Long originalReportId, String type) {
+        List<Long> menuIdList = customMenuTemplateRepository.findMenuByOriginal(originalReportId,type);
+        if(ValidateUtil.isValid(menuIdList)){
+            List<CustomMenu> menuList = customMenuRepository.findAllByIds(menuIdList);
+            return menuList;
+        }
+        return null;
+    }
+
+    @Override
+    public List<CustomMenuShare> findIndustry() {
+        return customMenuShareRepository.findIndustry();
+    }
+
+    /**
+     * 根据分享ID和APPID校验是否已经加入过我的看单
+     * created by sunhao 20170505
+     */
+    @Override
+    public boolean validIsExists(Long appId, Long shareId) {
+
+        return customMenuRepository.findByShareId(appId, shareId).intValue() > 0;
+    }
+}
diff --git a/src/main/java/com/reyun/service/impl/DemoAppointmentServiceImpl.java b/src/main/java/com/reyun/service/impl/DemoAppointmentServiceImpl.java
new file mode 100644
index 0000000..2834c46
--- /dev/null
+++ b/src/main/java/com/reyun/service/impl/DemoAppointmentServiceImpl.java
@@ -0,0 +1,37 @@
+package com.reyun.service.impl;
+
+import com.reyun.model.DemoAppointment;
+import com.reyun.repository.DemoAppointmentRepository;
+import com.reyun.service.DemoAppointmentService;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.math.BigInteger;
+
+/**
+ * Created by nolan on 06/06/2017.
+ * description:
+ */
+@Service
+public class DemoAppointmentServiceImpl implements DemoAppointmentService {
+	private static Logger logger = LoggerFactory.getLogger(DemoAppointmentServiceImpl.class);
+
+	@Autowired
+	private DemoAppointmentRepository demoAppointmentRepository;
+
+	@Override
+	public DemoAppointment freetrial(DemoAppointment demoAppointment) {
+		//1. 申请
+		demoAppointment = demoAppointmentRepository.save(demoAppointment);
+		logger.debug("创建预约申请, {}", demoAppointment);
+		return demoAppointment;
+	}
+
+	@Override
+	public boolean checkExist(String phone) {
+		BigInteger bigInteger = demoAppointmentRepository.countByPhone(phone);
+		return bigInteger.intValue() > 0;
+	}
+}
diff --git a/src/main/java/com/reyun/service/impl/DemoServiceImpl.java b/src/main/java/com/reyun/service/impl/DemoServiceImpl.java
new file mode 100644
index 0000000..1b3de95
--- /dev/null
+++ b/src/main/java/com/reyun/service/impl/DemoServiceImpl.java
@@ -0,0 +1,21 @@
+package com.reyun.service.impl;
+
+import org.springframework.stereotype.Service;
+
+import com.reyun.service.DemoService;
+
+/**
+ * Created by zxy on 28/3/14.
+ * Description DemoUrl生成服务
+ */
+@Service
+public class DemoServiceImpl implements DemoService {
+
+	@Override
+	public String getUrl(String reportName, String startDate, String endDate,
+			String reportView, boolean special) {
+		return null;
+	}
+
+
+}
diff --git a/src/main/java/com/reyun/service/impl/EventServiceImpl.java b/src/main/java/com/reyun/service/impl/EventServiceImpl.java
new file mode 100644
index 0000000..c1e1424
--- /dev/null
+++ b/src/main/java/com/reyun/service/impl/EventServiceImpl.java
@@ -0,0 +1,1503 @@
+package com.reyun.service.impl;
+
+import com.google.common.base.Function;
+import com.google.common.collect.ImmutableMap;
+import com.google.common.collect.Lists;
+import com.google.common.collect.Maps;
+import com.reyun.model.*;
+import com.reyun.repository.*;
+import com.reyun.service.*;
+import com.reyun.util.EventRedisUtil;
+import com.reyun.util.ValidateUtil;
+import org.apache.commons.collections.CollectionUtils;
+import org.json.JSONArray;
+import org.json.JSONException;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.util.StringUtils;
+
+import javax.annotation.Nullable;
+import java.math.BigInteger;
+import java.util.*;
+
+@Service
+public class EventServiceImpl implements EventService {
+    private static final Logger logger = LoggerFactory.getLogger(EventServiceImpl.class);
+
+    @Autowired
+    EventRepository eventRepository;
+
+    @Autowired
+    AppRepository appRepository;
+
+    @Autowired
+    EventViewAttrRepository eventViewAttrRepository;
+
+    @Autowired
+    CommonEventRepository commonEventRepository;
+
+    @Autowired
+    CommonParamService commonParamService;
+
+    @Autowired
+    UserGroupService usergroupService;
+
+    @Autowired
+    EventMetaRepository eventMetaRepository;
+
+    @Autowired
+    EventAttributeMetaRepository eventAttributeMetaRepository;
+
+    @Autowired
+    ComplicatedParamRepository complicatedParamRepository;
+
+    @Autowired
+    AttributeRestrictRepository attributeRestrictRepository;
+
+    @Autowired
+    ProfileRepository profileRepository;
+
+    @Autowired
+    CommonParamRepository commonParamRepository;
+
+    @Autowired
+    VirtualEventService virtualEventService;
+
+    @Autowired
+    ProfileService profileService;
+
+    @Autowired
+    EventService eventService;
+
+
+    private static final String EVENT_ATTR_CID = "_cid";
+
+    private static final String EVENT_ATTR_CAMPAIGNID = "_campaignid";
+
+    //默认统计属性
+    private final static int VIEW_ATTR_DEFAULT = 1;
+    private final static int VIEW_ATTR_CUSTOM = 2;
+    private final static String ATTR_TYPE_DEFAULT = "default";
+
+    @Override
+    public List<CommonParam> listAllAttributes(Long appId) {
+
+/*      String appkey = appRepository.findAppkeyById(appId);
+        ArrayList<String> attrName = new ArrayList<>();
+        ArrayList<EventAttr4Web> attr4WebArrayList = new ArrayList<>();
+        if (!StringUtils.isEmpty(eventList)) {
+            String[] events = eventList.split(",");
+            for (String event : events) {
+                List<EventAttr4Web> eventAttr4Webs = eventService.listOneEvent(appId, event);
+                for (EventAttr4Web eventAttr4Web : eventAttr4Webs) {
+                    if (!attrName.contains(eventAttr4Web.getAttr())) {
+                        attrName.add(eventAttr4Web.getAttr());
+                        attr4WebArrayList.add(eventAttr4Web);
+                    }
+                }
+            }
+        }*/
+
+        List<Profile> profiles = this.listByAppkeyBugFix(appId);
+        ArrayList<CommonParam> allAttributes = new ArrayList<>();
+        List<CommonParam> eventParams = commonParamService.listAllByType("event");
+        List<CommonParam> profileParams = commonParamService.listAllByType("profile");
+
+        Map<String, CommonParam> eventParamsMap = Maps.uniqueIndex(eventParams, new Function<CommonParam, String>() {
+            @Nullable
+            @Override
+            public String apply(@Nullable CommonParam eventParams) {
+                return eventParams.getParam();
+            }
+        });
+
+        Map<String, CommonParam> profileParamsMap = Maps.uniqueIndex(profileParams, new Function<CommonParam, String>() {
+            @Nullable
+            @Override
+            public String apply(@Nullable CommonParam profileParams) {
+                return profileParams.getParam();
+            }
+        });
+
+        String appkey = appRepository.findAppkeyById(appId);
+        List<EventAttr4Web> eventAttr4WebsAll = eventService.listOneEvent(appId, null);
+        List<EventAttr4Web> eventAttr4Webs = new ArrayList<>();
+        for (EventAttr4Web eventAttr4Web : eventAttr4WebsAll) {
+            if ((eventAttr4Web.getStatus() && eventAttr4Web.getAddStatsCondition()) || eventParamsMap.containsKey(eventAttr4Web.getAttr())) {
+                eventAttr4Webs.add(eventAttr4Web);
+            }
+        }
+
+        int i = 33;
+        Integer j = commonParamRepository.findNumByType("profile").intValue();
+        for (Profile profile : profiles) {
+            CommonParam commonParam = new CommonParam();
+            AttributeRestrict allRestrict = attributeRestrictRepository.findIsAllRestrictByNameAndType(profile.getAttr(), "profile", "all");
+            AttributeRestrict singleRestrict = attributeRestrictRepository.findIsRestrictByAppIdAndType(appkey, "profile", profile.getAttr());
+
+            boolean isAllRestrict = allRestrict == null ? false : (allRestrict.isAllRestrict() || allRestrict.isProfileRestrict());
+            boolean isSingleRestrict = singleRestrict == null ? false : (singleRestrict.isRootRestrict() || singleRestrict.isParentRestrict() || singleRestrict.isAppRestrict() || singleRestrict.isProfileRestrict());
+            if (!isAllRestrict && !isSingleRestrict) {
+                if (profileParamsMap.containsKey(profile.getAttr())) {
+                    allAttributes.add(profileParamsMap.get(profile.getAttr()));
+                } else if (profile.isAdd_stats_condition() && profile.getStatus()) {
+                    i++;
+                    j++;
+                    commonParam.setId(new Long(i));
+                    commonParam.setSortId(j);
+                    commonParam.setAlias(profile.getAttrAlias());
+                    commonParam.setParam(profile.getAttr());
+                    commonParam.setType("profile");
+                    commonParam.setDataType("string");
+                    allAttributes.add(commonParam);
+                }
+            }
+        }
+
+        Integer n = commonParamRepository.findNumByType("event").intValue();
+        int m = 5;
+        for (EventAttr4Web event4Web : eventAttr4Webs) {
+            AttributeRestrict allRestrict = attributeRestrictRepository.findIsAllRestrictByNameAndType(event4Web.getAttr(), "event", "all");
+            AttributeRestrict singleRestrict = attributeRestrictRepository.findIsRestrictByAppIdAndType(appkey, "event", event4Web.getAttr());
+            boolean isAllRestrict = allRestrict == null ? false : (allRestrict.isAllRestrict() || allRestrict.isProfileRestrict());
+            boolean isSingleRestrict = singleRestrict == null ? false : (singleRestrict.isRootRestrict() || singleRestrict.isParentRestrict() || singleRestrict.isAppRestrict() || singleRestrict.isProfileRestrict());
+            if (!isAllRestrict && !isSingleRestrict) {
+                CommonParam commonParam = new CommonParam();
+                if (eventParamsMap.containsKey(event4Web.getAttr())) {
+                    allAttributes.add(eventParamsMap.get(event4Web.getAttr()));
+                } else {
+                    n++;
+                    m++;
+                    commonParam.setId(new Long(m));
+                    commonParam.setSortId(n);
+                    commonParam.setAlias(event4Web.getAttrAlias());
+                    commonParam.setParam(event4Web.getAttr());
+                    commonParam.setType("event");
+                    commonParam.setDataType(event4Web.getDataType());
+                    allAttributes.add(commonParam);
+                }
+            }
+        }
+        return allAttributes;
+    }
+
+
+    @Override
+    public List<EventAttr4Web> listAllEventAttributesTop50(Long appId, String propertiesType) {
+        ArrayList<CommonParam> allAttributes = new ArrayList<>();
+        List<CommonParam> eventParams = commonParamService.listAllByType("event");
+        Map<String, CommonParam> eventParamsMap = Maps.uniqueIndex(eventParams, new Function<CommonParam, String>() {
+            @Nullable
+            @Override
+            public String apply(@Nullable CommonParam eventParams) {
+                return eventParams.getParam();
+            }
+        });
+
+        List<EventAttr4Web> eventAttr4WebsAll = eventService.listOneEvent(appId, null);
+
+        List<EventAttr4Web> eventAttr4Webs2 = new ArrayList<>();
+
+        for (EventAttr4Web eventAttr4Web : eventAttr4WebsAll) {
+            if ((eventAttr4Web.getStatus() && eventAttr4Web.getAddStatsCondition()) || eventParamsMap.containsKey(eventAttr4Web.getAttr())) {
+                eventAttr4Webs2.add(eventAttr4Web);
+            }
+        }
+
+
+        Integer n = commonParamRepository.findNumByType("event").intValue();
+        int m = 5;
+        for (EventAttr4Web event4Web : eventAttr4Webs2) {
+            CommonParam commonParam = new CommonParam();
+            if (eventParamsMap.containsKey(event4Web.getAttr())) {
+                allAttributes.add(eventParamsMap.get(event4Web.getAttr()));
+            } else {
+                n++;
+                m++;
+                String s;
+                commonParam.setId(new Long(m));
+                commonParam.setSortId(n);
+                commonParam.setAlias(event4Web.getAttrAlias());
+                commonParam.setParam(event4Web.getAttr());
+                commonParam.setType("event");
+                commonParam.setDataType(event4Web.getDataType());
+                allAttributes.add(commonParam);
+            }
+        }
+
+        List<EventAttr4Web> allEventAttrProperties = new ArrayList<>();
+        for (CommonParam commonParam : allAttributes) {
+            EventAttr4Web eventAttr4Web = new EventAttr4Web();
+
+            eventAttr4Web.setAttr(commonParam.getParam());
+            eventAttr4Web.setAttrAlias(commonParam.getAlias());
+            eventAttr4Web.setType(commonParam.getType());
+            eventAttr4Web.setDataType(commonParam.getDataType());
+
+            //填充渠道
+            if (EVENT_ATTR_CID.equals(commonParam.getParam())) {
+                eventAttr4Web.setWebType("string");
+            }
+            allEventAttrProperties.add(eventAttr4Web);
+        }
+        return allEventAttrProperties;
+    }
+
+
+    @Override
+    public List<Profile> listByAppkeyBugFix(Long appid) {
+        String appkey = appRepository.findAppkeyById(appid);
+        List<Profile> oldResult = profileRepository.findAllByAppkey(appkey);
+        List<CommonParam> profileCommonParams = commonParamRepository.findAllByType("profile");
+        Map<String, CommonParam> profileCommonParamsMaps = Maps.uniqueIndex(profileCommonParams, new Function<CommonParam, String>() {
+            @Nullable
+            @Override
+            public String apply(@Nullable CommonParam commonParam) {
+                return commonParam.getParam();
+            }
+        });
+
+        List<Profile> newResult = new ArrayList<Profile>();
+        for (CommonParam commonParam : profileCommonParams) {
+            Profile profile = new Profile();
+            profile.setAppkey(appkey);
+            profile.setAttrAlias(commonParam.getAlias());
+            profile.setAttr(commonParam.getParam());
+            profile.setCommon(true);
+            profile.setStatus(true);
+            profile.setDataType(commonParam.getDataType());
+            newResult.add(profile);
+        }
+
+        for (Profile temp : oldResult) {
+            if (!profileCommonParamsMaps.containsKey(temp.getAttr())) {
+                if (ValidateUtil.validNotChinese(temp.getAttr())) {
+                    if (!ValidateUtil.isValid(temp.getAttrAlias())) {
+                        temp.setAttrAlias(temp.getAttr());
+                    }
+                    newResult.add(temp);
+                }
+            }
+        }
+        return newResult;
+    }
+
+
+
+    @Override
+    public List<Event4Web> listEvent(Long app) {
+
+        String appkey = appRepository.findAppkeyById(app);
+        List<Event> eventList = eventRepository.findByAppkey(appkey);
+        List<EventMeta> metas = eventMetaRepository.findByAppkey(appkey);
+        List<CommonEvent> commonEventList = commonEventRepository.findAll();
+
+        Map<String, EventMeta> metaMap = new HashMap<>();
+        if (ValidateUtil.isValid(metas)) {
+            for (EventMeta e : metas) {
+                metaMap.put(e.getEventId(), e);
+            }
+        }
+
+        Map<String, CommonEvent> commonMap = new HashMap<>();
+        if (ValidateUtil.isValid(commonEventList)) {
+            for (CommonEvent e : commonEventList) {
+                commonMap.put(e.getEvent(), e);
+            }
+        }
+
+        LinkedList<Event4Web> result = new LinkedList<>();
+        LinkedList<Event4Web> temp = new LinkedList<>();
+        List<String> nameList = new ArrayList<>();
+        if (ValidateUtil.isValid(eventList)) {
+            for (Event e : eventList) {
+                if (!nameList.contains(e.getEventName())) {
+                    if (commonMap.containsKey(e.getEventName())) {
+                        nameList.add(e.getEventName());
+
+                        CommonEvent commonEvent = commonMap.get(e.getEventName());
+                        Event4Web event4Web = commonEventTo4Web(commonEvent);
+                        result.add(event4Web);
+                    } else {
+                        nameList.add(e.getEventName());
+                        if (metaMap.containsKey(e.getEventName())) {
+                            EventMeta eventMeta = metaMap.get(e.getEventName());
+                            Event4Web event4Web = eventMetaTo4Web(eventMeta);
+                            temp.add(event4Web);
+                        } else {
+                            Event4Web event4Web = eventTo4Web(e);
+                            temp.add(event4Web);
+                        }
+                    }
+                }
+            }
+            result.addAll(temp);
+        }
+        return result;
+    }
+
+
+    @Override
+    public List<EventAttr4Web> listOneEvent(Long app, String name) {
+
+        String appkey = appRepository.findAppkeyById(app);
+        List<Event> eventList = null;
+        if (name != null) {
+            eventList = eventRepository.findByEventName(appkey, name);
+        } else {
+            eventList = eventRepository.findByAppkey(appkey);
+        }
+
+        Map<String, CommonParam> map = commonParamService.findAllByType("event");
+        List<EventAttributeMeta> metas = eventAttributeMetaRepository.findByAppkey(appkey);
+
+        Map<String, EventAttributeMeta> metaMap = new HashMap<>();
+        if (ValidateUtil.isValid(metas)) {
+            for (EventAttributeMeta e : metas) {
+                metaMap.put(e.getAttribute(), e);
+            }
+        }
+
+        LinkedList<EventAttr4Web> result = new LinkedList<>();
+        LinkedList<EventAttr4Web> temp = new LinkedList<>();
+        TreeMap<Integer, EventAttr4Web> commonMap = new TreeMap<>();
+        if (ValidateUtil.isValid(eventList)) {
+
+            List<String> eventAttrNameList = new ArrayList<>();
+
+            for (Event event : eventList) {
+                if (!eventAttrNameList.contains(event.getEventAttr())) {
+                    eventAttrNameList.add(event.getEventAttr());
+
+                    if (map.containsKey(event.getEventAttr())) {
+                        CommonParam commonParam = map.get(event.getEventAttr());
+                        EventAttr4Web eventAttr4Web = coomonEventAttrTo4Web(commonParam);
+                        eventAttr4Web.setDataType(event.getDataType());
+                        commonMap.put(commonParam.getSortId(), eventAttr4Web);
+                    } else {
+                        if (metaMap.containsKey(event.getEventAttr())) {
+                            EventAttributeMeta eventAttributeMeta = metaMap.get(event.getEventAttr());
+                            EventAttr4Web eventAttr4Web = eventAttrMetaTo4Web(eventAttributeMeta);
+                            eventAttr4Web.setDataType(event.getDataType());
+                            temp.add(eventAttr4Web);
+                        } else {
+                            EventAttr4Web eventAttr4Web = eventAttrTo4Web(event);
+                            eventAttr4Web.setDataType(event.getDataType());
+                            temp.add(eventAttr4Web);
+                        }
+                    }
+                }
+            }
+            if (ValidateUtil.isValid(commonMap)) {
+                for (Integer i : commonMap.keySet()) {
+                    result.add(commonMap.get(i));
+                }
+            }
+            result.addAll(temp);
+        }
+
+        return result;
+    }
+
+    public EventAttr4Web eventAttrTo4Web(Event e) {
+        EventAttr4Web ew = new EventAttr4Web();
+
+        ew.setStatus(true);
+        ew.setAddStatsCondition(false);
+        ew.setAddStatsView(false);
+        ew.setAttr(e.getEventAttr());
+        ew.setAttrAlias(e.getEventAttr());
+        ew.setCommon(false);
+
+        return ew;
+    }
+
+    public EventAttr4Web coomonEventAttrTo4Web(CommonParam e) {
+        EventAttr4Web ew = new EventAttr4Web();
+
+        ew.setStatus(true);
+        ew.setAddStatsCondition(false);
+        ew.setAddStatsView(false);
+        ew.setAttr(e.getParam());
+        ew.setAttrAlias(e.getAlias());
+        ew.setCommon(true);
+        return ew;
+    }
+
+    public EventAttr4Web eventAttrMetaTo4Web(EventAttributeMeta e) {
+        EventAttr4Web ew = new EventAttr4Web();
+
+        ew.setStatus(e.getStatus());
+        ew.setAddStatsCondition(e.getAddStatsCondition());
+        ew.setAddStatsView(e.getAddStatsView());
+        ew.setAttr(e.getAttribute());
+        ew.setAttrAlias(e.getAlias() == null ? e.getAttribute() : e.getAlias());
+        ew.setCommon(false);
+        return ew;
+    }
+
+    @Override
+    public Map<String, String> findEventNameAliasMap(String appKey, List<String> eventNameList) {
+
+        Map<String, String> resultMap = new HashMap<>();
+
+        //自定义别名
+        List<EventMeta> eventMetaList = eventMetaRepository.findByEventIds(appKey, eventNameList);
+        Map<String, EventMeta> eventMetaMap = Maps.uniqueIndex(eventMetaList, new Function<EventMeta, String>() {
+            @Override
+            public String apply(EventMeta eventMeta) {
+                return eventMeta.getEventId();
+            }
+        });
+
+        //通用事件别名
+        Map<String, CommonEvent> commonEventMap = commonParamService.findAllCommonEvent();
+
+        for (String eventName : eventNameList) {
+
+            if (eventMetaMap.containsKey(eventName) && !StringUtils.isEmpty(eventMetaMap.get(eventName).getAlias())) {
+
+                resultMap.put(eventName, eventMetaMap.get(eventName).getAlias());
+
+            } else if (commonEventMap.containsKey(eventName) && !StringUtils.isEmpty(commonEventMap.get(eventName).getAlias())) {
+
+                resultMap.put(eventName, commonEventMap.get(eventName).getAlias());
+
+            } else {
+
+                resultMap.put(eventName, eventName);
+            }
+        }
+
+        return resultMap;
+    }
+
+    @Override
+    public EventMeta updateEvent(Long app, String name, String nameAlias, Long account) {
+        String appkey = appRepository.findAppkeyById(app);
+        EventMeta event = eventMetaRepository.findByEventId(appkey, name);
+
+        if (event == null) {
+            EventMeta eventMeta = new EventMeta();
+            eventMeta.setStatus(true);
+            eventMeta.setAlias(nameAlias);
+            eventMeta.setAppkey(appkey);
+            eventMeta.setEventId(name);
+            eventMeta.setModifyAccount(account);
+            eventMeta.setModifyTime(new Date());
+
+            return eventMetaRepository.save(eventMeta);
+        } else {
+            event.setModifyTime(new Date());
+            event.setModifyAccount(account);
+            event.setAlias(nameAlias);
+
+            return eventMetaRepository.save(event);
+        }
+    }
+
+    @Override
+    public EventAttributeMeta updateEventAttr(String eventname, String attrnameAlias, Long account, Long app) {
+        String appkey = appRepository.findAppkeyById(app);
+        EventAttributeMeta attributeMeta = eventAttributeMetaRepository.findByAttribute(appkey, eventname);
+
+        if (attributeMeta == null) {
+            EventAttributeMeta attr = new EventAttributeMeta();
+            attr.setAttribute(eventname);
+            attr.setAlias(attrnameAlias);
+            attr.setStatus(true);
+            attr.setAddStatsView(false);
+            attr.setAddStatsCondition(false);
+            attr.setAppkey(appkey);
+            attr.setModifyAccount(account);
+            attr.setModifyTime(new Date());
+            return eventAttributeMetaRepository.save(attr);
+        } else {
+            attributeMeta.setModifyTime(new Date());
+            attributeMeta.setModifyAccount(account);
+            attributeMeta.setAlias(attrnameAlias);
+
+            return eventAttributeMetaRepository.save(attributeMeta);
+        }
+    }
+
+    @Override
+    public void enableEvent(Long app, String name, Long account) {
+        String appkey = appRepository.findAppkeyById(app);
+        EventMeta event = eventMetaRepository.findByEventId(appkey, name);
+
+        event.setStatus(true);
+
+        eventMetaRepository.save(event);
+    }
+
+    @Override
+    public void forbiddenEvent(Long app, String name, Long account) {
+        String appkey = appRepository.findAppkeyById(app);
+        EventMeta event = eventMetaRepository.findByEventId(appkey, name);
+
+        if (event == null) {
+            EventMeta eventMeta = new EventMeta();
+            eventMeta.setStatus(false);
+            eventMeta.setEventId(name);
+            eventMeta.setAlias(name);
+            eventMeta.setAppkey(appkey);
+            eventMeta.setModifyAccount(account);
+            eventMeta.setModifyTime(new Date());
+
+            eventMetaRepository.save(eventMeta);
+        } else {
+            event.setModifyTime(new Date());
+            event.setModifyAccount(account);
+            event.setStatus(false);
+
+            eventMetaRepository.save(event);
+        }
+    }
+
+    @Override
+    public EventAttributeMeta enableAttr(Long app, String name, Long account) {
+        String appkey = appRepository.findAppkeyById(app);
+        EventAttributeMeta attributeMeta = eventAttributeMetaRepository.findByAttribute(appkey, name);
+
+        attributeMeta.setStatus(true);
+        EventAttributeMeta save = eventAttributeMetaRepository.save(attributeMeta);
+        return save;
+    }
+
+    @Override
+    public EventAttributeMeta forbiddenAttr(Long app, String name, Long account) {
+        String appkey = appRepository.findAppkeyById(app);
+        EventAttributeMeta attributeMeta = eventAttributeMetaRepository.findByAttribute(appkey, name);
+
+        if (attributeMeta == null) {
+            EventAttributeMeta attr = new EventAttributeMeta();
+            attr.setAttribute(name);
+            attr.setAlias(name);
+            attr.setStatus(false);
+            attr.setAddStatsView(false);
+            attr.setAddStatsCondition(false);
+            attr.setAppkey(appkey);
+            attr.setModifyAccount(account);
+            attr.setModifyTime(new Date());
+
+            return eventAttributeMetaRepository.save(attr);
+        } else {
+            attributeMeta.setStatus(false);
+            attributeMeta.setModifyTime(new Date());
+            attributeMeta.setModifyAccount(account);
+
+            return eventAttributeMetaRepository.save(attributeMeta);
+        }
+    }
+
+    /**
+     * 修改是否加入事件分析
+     * modify by sunhao 20170504
+     */
+    @Override
+    public EventAttributeMeta updateEventStatsView(Long appId, Long account, String attrName, Boolean addFlag) {
+
+        String appkey = appRepository.findAppkeyById(appId);
+        EventAttributeMeta attributeMeta = eventAttributeMetaRepository.findByAttribute(appkey, attrName);
+
+        if (attributeMeta == null) {
+            EventAttributeMeta attr = new EventAttributeMeta();
+            attr.setAttribute(attrName);
+            attr.setAlias(attrName);
+            attr.setStatus(true);
+            attr.setAddStatsView(true);
+            attr.setAddStatsCondition(false);
+            attr.setAppkey(appkey);
+            attr.setModifyAccount(account);
+            attr.setModifyTime(new Date());
+
+            return eventAttributeMetaRepository.save(attr);
+        } else {
+            attributeMeta.setAddStatsView(addFlag);
+            attributeMeta.setModifyTime(new Date());
+            attributeMeta.setModifyAccount(account);
+
+            return eventAttributeMetaRepository.save(attributeMeta);
+        }
+    }
+
+    /**
+     * 修改是否加入事件分析条件
+     */
+    @Override
+    public EventAttributeMeta updateEventStatsCondition(Long appId, Long account, String attrName, Boolean addFlag) {
+
+        String appkey = appRepository.findAppkeyById(appId);
+        EventAttributeMeta attributeMeta = eventAttributeMetaRepository.findByAttribute(appkey, attrName);
+
+        if (attributeMeta == null) {
+            EventAttributeMeta attr = new EventAttributeMeta();
+            attr.setAttribute(attrName);
+            attr.setAlias(attrName);
+            attr.setStatus(true);
+            attr.setAddStatsView(false);
+            attr.setAddStatsCondition(true);
+            attr.setAppkey(appkey);
+            attr.setModifyAccount(account);
+            attr.setModifyTime(new Date());
+
+            return eventAttributeMetaRepository.save(attr);
+        } else {
+            attributeMeta.setAddStatsCondition(addFlag);
+            attributeMeta.setModifyTime(new Date());
+            attributeMeta.setModifyAccount(account);
+
+            return eventAttributeMetaRepository.save(attributeMeta);
+        }
+    }
+
+    public List<Event4Web> listAllNew(Long app, String names, String params) throws JSONException {
+
+        List<Event4Web> resultList = new ArrayList<>();
+        Map<String, Event4Web> valueEventMap = new HashMap<>();
+
+        String[] nameArr = names.split(",");
+        List<String> nameList = Arrays.asList(nameArr);
+        String appKey = appRepository.findAppkeyById(app);
+        List<Event> events = eventRepository.findByAppkeyAndNames(appKey, nameList);
+        List<EventMeta> eventMetaFalseList = eventMetaRepository.findByAppkeyAndStatusIsFalse(appKey);
+        List<EventMeta> eventMetaTrueList = eventMetaRepository.findByAppkeyAndStatusIsTrue(appKey);
+        List<EventAttributeMeta> attrMetaList = eventAttributeMetaRepository.findByAppkeyAndCondition(appKey);
+        Map<String, CommonParam> commonAttrMap = commonParamService.findAllByType("event");
+        Map<String, CommonEvent> commonEventMap = commonParamService.findAllCommonEvent();
+
+        Map<String, EventMeta> eventMetaFalseMap = new HashMap<>();
+        if (ValidateUtil.isValid(eventMetaFalseList)) {
+            for (EventMeta e : eventMetaFalseList) {
+                eventMetaFalseMap.put(e.getEventId(), e);
+            }
+        }
+        Map<String, EventMeta> eventMetaTrueMap = new HashMap<>();
+        if (ValidateUtil.isValid(eventMetaTrueList)) {
+            for (EventMeta e : eventMetaTrueList) {
+                eventMetaTrueMap.put(e.getEventId(), e);
+            }
+        }
+        Map<String, EventAttributeMeta> attrMetaMap = new HashMap<>();
+        if (ValidateUtil.isValid(attrMetaList)) {
+            for (EventAttributeMeta e : attrMetaList) {
+                attrMetaMap.put(e.getAttribute(), e);
+            }
+        }
+
+        //筛选所有的通用事件
+        Map<String, List<Event>> eventMap = new HashMap<>();
+        if (ValidateUtil.isValid(events)) {
+            for (Event e : events) {
+                if ((commonEventMap.containsKey(e.getEventName()) || !eventMetaFalseMap.containsKey(e.getEventName())) &&
+                        (commonAttrMap.containsKey(e.getEventAttr()) || attrMetaMap.containsKey(e.getEventAttr()))) {
+                    if (eventMap.containsKey(e.getEventName())) {
+                        List<Event> list = eventMap.get(e.getEventName());
+                        list.add(e);
+                        eventMap.put(e.getEventName(), list);
+                    } else {
+                        List<Event> list = new ArrayList<>();
+                        list.add(e);
+                        eventMap.put(e.getEventName(), list);
+                    }
+                }
+            }
+        }
+
+        //事件显示属性
+        List<EventAttr4Web> firstLevelAttr = new ArrayList<>();
+        List<EventAttr4Web> secondLevelAttr = new ArrayList<>();
+        setEventViewAttrList(firstLevelAttr, secondLevelAttr);
+
+        Set<String> set = eventMap.keySet();
+        if (ValidateUtil.isValid(set)) {
+            for (String eventName : set) {
+                List<EventAttr4Web> arrList = new ArrayList<>();
+                Event4Web ew = new Event4Web();
+                ew.setEventName(eventName);
+                ew.setFirstLevelAttr(firstLevelAttr);
+                ew.setProfiles(arrList);
+                ew.setSecondLevelAttr(new ArrayList<EventAttr4Web>());
+                if (commonEventMap.containsKey(eventName)) {
+                    CommonEvent commonEvent = commonEventMap.get(eventName);
+                    ew.setEventNameAlias(commonEvent.getAlias());
+                } else if (eventMetaTrueMap.containsKey(eventName)) {
+                    EventMeta eventMeta = eventMetaTrueMap.get(eventName);
+                    ew.setEventNameAlias(eventMeta.getAlias() == null ? eventName : eventMeta.getAlias());
+                } else {
+                    ew.setEventNameAlias(eventName);
+                }
+
+                List<Event> list = eventMap.get(eventName);
+                for (Event e : list) {
+                    String eventAttr = e.getEventAttr();
+                    if (commonAttrMap.containsKey(eventAttr)) {
+                        CommonParam commonParam = commonAttrMap.get(eventAttr);
+                        EventAttr4Web eaw = new EventAttr4Web();
+                        eaw.setAttr(eventAttr);
+                        eaw.setAttrAlias(commonParam.getAlias());
+                        eaw.setSortId(commonParam.getSortId());
+                        eaw.setDataType(e.getDataType());
+                        //填充渠道
+                        if (EVENT_ATTR_CID.equals(eventAttr)) {
+                            eaw.setWebType("string");
+                        }
+                        List<EventAttr4Web> profiles = ew.getProfiles();
+                        profiles.add(eaw);
+                        ew.setProfiles(profiles);
+                    } else {
+                        EventAttributeMeta meta = attrMetaMap.get(eventAttr);
+
+                        if (meta.getAddStatsCondition()) {
+                            EventAttr4Web eaw = new EventAttr4Web();
+                            eaw.setAttr(eventAttr);
+                            eaw.setDataType(e.getDataType());
+                            eaw.setAttrAlias(meta.getAlias() == null ? eventAttr : meta.getAlias());
+
+                            List<EventAttr4Web> profiles = ew.getProfiles();
+                            profiles.add(eaw);
+                            ew.setProfiles(profiles);
+                        }
+                        if (meta.getAddStatsView()) {
+                            EventAttr4Web eaw = new EventAttr4Web();
+                            eaw.setAttr(eventAttr);
+                            eaw.setDataType(e.getDataType());
+                            eaw.setType("custom");
+                            eaw.setAttrAlias(meta.getAlias() == null ? eventAttr : meta.getAlias());
+
+                            List<EventAttr4Web> first = ew.getFirstLevelAttr();
+                            first.add(eaw);
+                            ew.setFirstLevelAttr(first);
+
+                            ew.setSecondLevelAttr(secondLevelAttr);
+                        }
+                    }
+
+                }
+                List<EventAttr4Web> profiles1 = ew.getProfiles();
+                TreeMap<Integer, EventAttr4Web> map = new TreeMap<>();
+                LinkedList<EventAttr4Web> common = new LinkedList<>();
+                List<EventAttr4Web> temp = new ArrayList<>();
+                if (ValidateUtil.isValid(profiles1)) {
+                    for (EventAttr4Web e : profiles1) {
+                        if (e.getSortId() != 0) {
+                            map.put(e.getSortId(), e);
+                        } else {
+                            temp.add(e);
+                        }
+                    }
+                }
+                if (ValidateUtil.isValid(map)) {
+                    for (Integer i : map.keySet()) {
+                        common.add(map.get(i));
+                    }
+                }
+                common.addAll(temp);
+                ew.setProfiles(common);
+                valueEventMap.put(ew.getEventName(),ew);
+
+            }
+        }
+
+        Map<String, Map<String, Map<String, List>>> valMap = new HashMap<>();
+        if (ValidateUtil.isValid(params)) {
+            JSONArray arr = new JSONArray(params);
+            if(ValidateUtil.isValid(arr)){
+                for(int i =0 ; i< arr.length(); i++){
+                    String event = arr.getJSONObject(i).getString("event");
+                    JSONArray param = arr.getJSONObject(i).getJSONArray("param");
+                    if (ValidateUtil.isValid(param)) {
+                        for (int j = 0; j < param.length(); j++) {
+                            String attr = param.getString(j);
+                            Map<String, List> map = listAllValue(app, event, attr);
+                            if (valMap.containsKey(event)) {
+                                Map<String, Map<String, List>> attrMap = valMap.get(event);
+                                attrMap.put(attr, map);
+                                valMap.put(event, attrMap);
+                            } else {
+                                Map<String, Map<String, List>> attrMap = new HashMap<>();
+                                attrMap.put(attr, map);
+                                valMap.put(event, attrMap);
+                            }
+                        }
+                    }
+                }
+            }
+        }
+
+        if (ValidateUtil.isValid(valueEventMap)) {
+            for (String eventName : valueEventMap.keySet()) {
+                if (valMap.containsKey(eventName)) {
+                    Map<String, Map<String, List>> map = valMap.get(eventName);
+                    Event4Web event4Web = valueEventMap.get(eventName);
+                    LinkedList<EventAttr4Web> profiles = (LinkedList<EventAttr4Web>) event4Web.getProfiles();
+                    LinkedList<EventAttr4Web> profilesNew = new LinkedList<>();
+                    if (ValidateUtil.isValid(profiles)) {
+                        for (EventAttr4Web ea : profiles) {
+                            if (map.containsKey(ea.getAttr())) {
+                                Map<String, List> map1 = map.get(ea.getAttr());
+                                if (map1.containsKey("key")) {
+                                    ea.setKey(map1.get("key"));
+                                }
+                                ea.setValue(map1.get("value"));
+                                profilesNew.add(ea);
+                            } else {
+                                profilesNew.add(ea);
+                            }
+                        }
+                    }
+                    event4Web.setProfiles(profilesNew);
+                    resultList.add(event4Web);
+                } else {
+                    resultList.add(valueEventMap.get(eventName));
+                }
+            }
+        }
+        //没有属性 另行处理
+        if (!ValidateUtil.isValid(resultList)) {
+            if (ValidateUtil.isValid(events)) {
+                List<String> name = new ArrayList<>();
+                for (Event e : events) {
+                    if(!name.contains(e.getEventName())){
+                        EventAttr4Web eaw = new EventAttr4Web();
+                        Event4Web ew = new Event4Web();
+                        ew.setEventName(e.getEventName());
+                        ew.setFirstLevelAttr(firstLevelAttr);
+                        ew.setProfiles(new ArrayList<>());
+                        ew.setSecondLevelAttr(new ArrayList<EventAttr4Web>());
+                        if (commonEventMap.containsKey(e.getEventName())) {
+                            CommonEvent commonEvent = commonEventMap.get(e.getEventName());
+                            ew.setEventNameAlias(commonEvent.getAlias());
+                        } else if (eventMetaTrueMap.containsKey(e.getEventName())) {
+                            EventMeta eventMeta = eventMetaTrueMap.get(e.getEventName());
+                            ew.setEventNameAlias(eventMeta.getAlias() == null ? e.getEventName() : eventMeta.getAlias());
+                        } else {
+                            ew.setEventNameAlias(e.getEventName());
+                        }
+                        resultList.add(ew);
+                        name.add(ew.getEventName());
+                    }
+
+                }
+            }
+
+        }
+
+        return resultList;
+    }
+
+    @Override
+    public Map<String, List> listAllValue(Long app, String eventName, String attrName) {
+        Map<String, List> result = new HashMap<>();
+
+        String appKey = appRepository.findAppkeyById(app);
+        Event event = eventRepository.findNumberAttrByEventAttr(appKey, attrName, eventName);
+        if (event != null) {
+            List<Event> byAppkey = eventRepository.findByAppkey(appKey);
+
+
+//            String key = appKey+","+eventName+","+attrName+","+event.getDataType()+","+(event.isCommon() ? "1" : "0");
+            String key = String.format("%s,%s,%s,%s,%s", appKey, eventName, attrName, event.getDataType(), (event.isCommon() ? "1" : "0"));
+            Set<String> set = (Set<String>) EventRedisUtil.getInstance().get(key);
+            if (ValidateUtil.isValid(set)) {
+                List<String> list = new ArrayList<>();
+                for (String s : set) {
+                    list.add(s);
+                }
+                result.put("value", list);
+            }
+        }
+        return result;
+    }
+
+    @Override
+    public Map<String, List> listAllValueByAttr(Long appId, String attrName) {
+
+        Map<String, List> result = new LinkedHashMap<>();
+
+        if (!"usergroup".equals(attrName)) {
+            String appKey = appRepository.findAppkeyById(appId);
+            Event event = eventRepository.findOneEventByAttr(appKey, attrName);
+            List<Event> eventList = eventRepository.findAllEventByAppKey(appKey);
+
+            String commonEvent = (event.isCommon() ? "1" : "0");
+
+            //生成redis的KEY LIST
+            List<String> keyList = new ArrayList<>();
+            for (Event e : eventList) {
+                String key = String.format("%s,%s,%s,%s,%s", appKey, e.getEventName(), attrName, event.getDataType(), commonEvent);
+                keyList.add(key);
+            }
+
+            //获取结果集
+            Set<String> set = EventRedisUtil.getInstance().getZsetByKeys(keyList);
+
+            if (!CollectionUtils.isEmpty(set)) {
+
+                List<String> valueList = new ArrayList<>(set);
+
+                result.put("value", valueList);
+            }
+
+        } else {
+
+            //查询用户群
+            List<UserGroup> userGroupList = usergroupService.list(appId);
+
+            List<Long> keyList = new ArrayList<>();
+            List<String> valueList = new ArrayList<>();
+
+            for (UserGroup userGroup : userGroupList) {
+                keyList.add(userGroup.getId());
+                valueList.add(userGroup.getName());
+            }
+
+            result.put("key", keyList);
+            result.put("value", valueList);
+        }
+
+
+        return result;
+    }
+
+    @Override
+    public Map<String, List> listAllValueByAttrTop50(Long appId, String attrName) {
+        Map<String, List> stringListMap = listAllValueByAttr(appId, attrName);
+        LinkedHashMap<String, List> result = new LinkedHashMap<>();
+        int i = 0;
+        for (String s : stringListMap.keySet()) {
+            result.put(s, stringListMap.get(s));
+            if (i == 50) break;
+            i++;
+        }
+        return result;
+    }
+
+    @Override
+    public Map<String, Map<String, List>> listAllValueByAttrs(Long app, String attrNames) {
+        Map<String, Map<String, List>> result = new HashMap<>();
+        if (null != attrNames) {
+            String[] attrArr = attrNames.split(",");
+            for (int i = 0; i < attrArr.length; i++) {
+                Map<String, List> map = listAllValueByAttr(app, attrArr[i]);
+                result.put(attrArr[i], map);
+            }
+        }
+
+        return result;
+    }
+
+
+    /**
+     * 获取显示属性一二级菜单
+     * 填充传入参数firstLevelAttr,secondLevelAttr
+     * created by sunhao 2017-04-19
+     */
+    private void setEventViewAttrList(List<EventAttr4Web> firstLevelAttr, List<EventAttr4Web> secondLevelAttr) {
+
+        //公共属性
+        List<EventViewAttr> eventViewAttrList = eventViewAttrRepository.findEventViewAttr();
+        //分离第一二级属性
+        for (EventViewAttr eventViewAttr : eventViewAttrList) {
+
+            EventAttr4Web eventAttr4Web = new EventAttr4Web();
+
+            eventAttr4Web.setAttr(eventViewAttr.getViewAttr());
+            eventAttr4Web.setAttrAlias(eventViewAttr.getViewAttrName());
+            eventAttr4Web.setDataType(eventViewAttr.getAttrType());
+
+            //默认属性
+            if (VIEW_ATTR_DEFAULT == eventViewAttr.getAttrLevel()) {
+
+                eventAttr4Web.setType(ATTR_TYPE_DEFAULT);
+                firstLevelAttr.add(eventAttr4Web);
+
+            } else if (VIEW_ATTR_CUSTOM == eventViewAttr.getAttrLevel()) {
+
+                secondLevelAttr.add(eventAttr4Web);
+            }
+        }
+    }
+
+
+    @Override
+    public List<Dimension4Web> listAllAttr(Long app) {
+        List<Dimension4Web> dimension4WebList = new ArrayList<>();
+        Map<String, Event> eventAttrMap = new HashMap<>();
+
+        String appKey = appRepository.findAppkeyById(app);
+        List<Event> eventList = eventRepository.listCommonByApp(appKey);
+        List<CommonParam> commonParamList = this.commonParamService.listAllByType(null);
+
+        if (ValidateUtil.isValid(eventList)) {
+            for (Event event : eventList) {
+                if (!eventAttrMap.containsKey(event.getEventAttr())) {
+                    eventAttrMap.put(event.getEventAttr(), event);
+                }
+            }
+        }
+
+        if (ValidateUtil.isValid(commonParamList) && ValidateUtil.isValid(eventAttrMap)) {
+            dimension4WebList = buildDimensionForWebAllAttr(eventAttrMap, commonParamList, dimension4WebList, app);
+        }
+
+        return dimension4WebList;
+    }
+
+    /**
+     * 获取分类维度(通用事件属性)
+     */
+    @SuppressWarnings("deprecation")
+    @Override
+    public List<Dimension4Web> listValues(Long app) {
+
+        List<Dimension4Web> dimension4WebList = new ArrayList<>();
+        Map<String, Event> eventAttrMap = new HashMap<>();
+
+        String appKey = appRepository.findAppkeyById(app);
+        List<Event> eventList = eventRepository.listCommonByApp(appKey);
+        List<CommonParam> commonParamList = this.commonParamService.listAllByType("event");
+
+        //构建eventAttrMap,聚合value
+        if (ValidateUtil.isValid(eventList)) {
+            for (Event event : eventList) {
+
+                if (!eventAttrMap.containsKey(event.getEventAttr())) {
+
+                    eventAttrMap.put(event.getEventAttr(), event);
+
+                }
+            }
+        }
+
+        //对属性排序
+        if (ValidateUtil.isValid(commonParamList) && ValidateUtil.isValid(eventAttrMap)) {
+
+            //生成结果jason
+            dimension4WebList = buildDimensionForWeb(eventAttrMap, commonParamList, dimension4WebList, app);
+        }
+
+        return dimension4WebList;
+    }
+
+    @Override
+    public List<EventAttr4Web> listCommonProperties(Long app, String propertiesType) {
+
+        List<EventAttr4Web> commonProperties = new ArrayList<>();
+
+        Map<String, Event> eventAttrMap = new HashMap<>();
+
+        String appKey = appRepository.findAppkeyById(app);
+        List<Event> eventList = eventRepository.listCommonByApp(appKey);
+        List<CommonParam> commonParamList = this.commonParamService.listAllByType(propertiesType);
+
+        //构建eventAttrMap,聚合value
+        if (ValidateUtil.isValid(eventList)) {
+
+            for (Event event : eventList) {
+
+                if (!eventAttrMap.containsKey(event.getEventAttr())) {
+
+                    eventAttrMap.put(event.getEventAttr(), event);
+
+                }
+            }
+        }
+
+        //构建通用属性
+        if (ValidateUtil.isValid(commonParamList) && ValidateUtil.isValid(eventAttrMap)) {
+            commonProperties = buildEventAttrForWeb(eventAttrMap, commonParamList);
+        }
+
+        return commonProperties;
+    }
+
+    @Override
+    public List<CommonParam> listCommonGroupProperties() {
+        return this.commonParamService.listAllByType(null);
+    }
+
+    /**
+     * 通过event名称和appkey获取attribute meta list
+     *
+     * @param eventName
+     * @param appId
+     * @return
+     */
+    @Override
+    public List<EventAttr4Web> listAllEventAttribute(String eventName, Long appId) {
+
+        Map<String, EventAttr4Web> eventAttr4WebMap = new HashMap<>();
+
+        List<Event> eventAttrList = new ArrayList<>();
+
+        String appKey = appRepository.findAppkeyById(appId);
+
+        if (eventName.startsWith("vir_")) {
+
+            List<String> eventList = virtualEventService.findVirtualEventList(eventName);
+            eventAttrList = eventRepository.findEventAliasByEvent(appKey, eventList);
+
+        } else {
+
+            eventAttrList = this.eventRepository.findByEventName(appKey, eventName);
+        }
+
+        if (!CollectionUtils.isEmpty(eventAttrList)) {
+
+            List<EventAttributeMeta> attrMetaList = eventAttributeMetaRepository.findByAppkeyAndCondition(appKey);
+
+            Map<String, EventAttributeMeta> attributeMetaMap = Maps.uniqueIndex(attrMetaList, new Function<EventAttributeMeta, String>() {
+                @Override
+                public String apply(EventAttributeMeta eventAttributeMeta) {
+                    return eventAttributeMeta.getAttribute();
+                }
+            });
+
+            Map<String, CommonParam> commonAttrMap = commonParamService.findAllByType("event");
+            int m = 0;
+            int n = 20;
+
+            for (Event event : eventAttrList) {
+
+                String attr = event.getEventAttr();
+
+                //属性排重
+                if (!eventAttr4WebMap.containsKey(attr)) {
+
+                    EventAttr4Web eventAttr4Web = new EventAttr4Web();
+                    eventAttr4Web.setAttr(attr);
+                    eventAttr4Web.setDataType(event.getDataType());
+
+                    //属性别名
+                    String attrAlias = "";
+                    int sortId = 0;
+                    if (event.isCommon()) {
+                        attrAlias = commonAttrMap.containsKey(attr) ? commonAttrMap.get(attr).getAlias() : attrAlias;
+                        sortId = commonAttrMap.containsKey(attr) ? commonAttrMap.get(attr).getSortId() : m;
+                        m++;
+                    } else {
+                        attrAlias = attributeMetaMap.containsKey(attr) ? attributeMetaMap.get(attr).getAlias() : attr;
+                        sortId = n;
+                        n++;
+                    }
+
+                    eventAttr4Web.setAttrAlias(StringUtils.isEmpty(attrAlias) ? attr : attrAlias);
+                    eventAttr4Web.setSortId(sortId);
+
+                    //CID特殊处理
+                    if (EVENT_ATTR_CID.equals(attr)) {
+                        eventAttr4Web.setWebType("string");
+                    }
+
+                    eventAttr4WebMap.put(attr, eventAttr4Web);
+                }
+
+            }
+        }
+
+        return Lists.newArrayList(eventAttr4WebMap.values());
+    }
+
+    @Override
+    public List<ComplicatedParam> findAllComplicatedPatram() {
+        return complicatedParamRepository.findAllParam();
+    }
+
+    private List<EventAttr4Web> buildEventAttrForWeb(Map<String, Event> eventAttrMap, List<CommonParam> commonParamList) {
+
+        List<EventAttr4Web> eventAttr4WebList = new ArrayList<>();
+
+        //用户群
+        EventAttr4Web userGroupAttr = new EventAttr4Web();
+        userGroupAttr.setAttr("usergroup");
+        userGroupAttr.setAttrAlias("用户分群");
+        userGroupAttr.setDataType("number");
+        userGroupAttr.setWebType("string");
+        userGroupAttr.setAttrAlias("usergroup");
+
+        eventAttr4WebList.add(userGroupAttr);
+
+        //通用属性
+        for (CommonParam commonParam : commonParamList) {
+
+            EventAttr4Web eventAttr4Web = new EventAttr4Web();
+
+            eventAttr4Web.setAttr(commonParam.getParam());
+            eventAttr4Web.setAttrAlias(commonParam.getAlias());
+            eventAttr4Web.setType(commonParam.getType());
+
+            Event eve = eventAttrMap.get(commonParam.getParam());
+            if (eve != null) {
+                //数据类型
+                eventAttr4Web.setDataType(eve.getDataType());
+            }
+
+            //填充渠道
+            if (EVENT_ATTR_CID.equals(commonParam.getParam())) {
+                eventAttr4Web.setWebType("string");
+            }
+
+            eventAttr4WebList.add(eventAttr4Web);
+        }
+
+        return eventAttr4WebList;
+    }
+
+    /**
+     * 生成分类维度页面显示列表
+     */
+    private List<Dimension4Web> buildDimensionForWeb(Map<String, Event> eventAttrMap, List<CommonParam> commonParamList,
+                                                     List<Dimension4Web> dimension4WebList, Long app) {
+
+        for (CommonParam commonParam : commonParamList) {
+
+            Dimension4Web dimension4Web = new Dimension4Web();
+
+            //替换通用事件属性的名称
+            dimension4Web.setName(commonParam.getAlias());
+            dimension4Web.setDimensionType(commonParam.getDimension());
+
+            Event eve = eventAttrMap.get(commonParam.getParam());
+            if (eve != null) {
+                //数据类型
+                dimension4Web.setType(eve.getDataType());
+            }
+
+            //设置ID和属性值列表
+            dimension4Web.setId(commonParam.getParam());
+
+            dimension4WebList.add(dimension4Web);
+        }
+        List<UserGroup> list = usergroupService.list(app);
+        if (!list.isEmpty()) {
+            Dimension4Web dimension4Web = new Dimension4Web();
+            dimension4Web.setId("usergroup");
+            List<Long> keys = new ArrayList<>();
+            List<String> values = new ArrayList<>();
+            for (UserGroup ug : list) {
+                keys.add(ug.getId());
+                values.add(ug.getName());
+            }
+
+            dimension4Web.setKey(keys);
+            dimension4Web.setValue(values);
+            dimension4Web.setName("用户分群");
+            dimension4Web.setType("number");
+            dimension4Web.setDimensionType("usergroup");
+            dimension4WebList.add(0, dimension4Web);
+        }
+
+        return dimension4WebList;
+    }
+
+    /**
+     * @param eventAttrMap
+     * @param commonParamList
+     * @param dimension4WebList
+     * @param app
+     * @return 漏斗转化列出所有的事件通用属性和用户通用属性以及用户分群
+     */
+    private List<Dimension4Web> buildDimensionForWebAllAttr(Map<String, Event> eventAttrMap, List<CommonParam> commonParamList,
+                                                            List<Dimension4Web> dimension4WebList, Long app) {
+
+        for (CommonParam commonParam : commonParamList) {
+
+            Dimension4Web dimension4Web = new Dimension4Web();
+            dimension4Web.setEventType(commonParam.getType());
+            dimension4Web.setSortId(commonParam.getSortId());
+            dimension4Web.setName(commonParam.getAlias());
+            dimension4Web.setDimensionType(commonParam.getDimension());
+
+            //设置数据类型
+            if ("event".equals(commonParam.getType())) {
+                Event eve = eventAttrMap.get(commonParam.getParam());
+                if (eve != null) {
+                    dimension4Web.setType(eve.getDataType());
+                }
+            } else {
+                dimension4Web.setType(commonParam.getDataType());
+            }
+            //设置ID和属性值列表
+            dimension4Web.setId(commonParam.getParam());
+
+            dimension4WebList.add(dimension4Web);
+        }
+        List<UserGroup> list = usergroupService.list(app);
+        if (!list.isEmpty()) {
+            List<Long> keys = new ArrayList<>();
+            List<String> values = new ArrayList<>();
+            Dimension4Web dimension4Web = new Dimension4Web();
+            dimension4Web.setId("usergroup");
+            for (UserGroup ug : list) {
+                keys.add(ug.getId());
+                values.add(ug.getName());
+            }
+            dimension4Web.setKey(keys);
+            dimension4Web.setValue(values);
+            dimension4Web.setName("用户分群");
+            dimension4Web.setType("number");
+            dimension4Web.setDimensionType("usergroup");
+            dimension4WebList.add(0, dimension4Web);
+        }
+        return dimension4WebList;
+    }
+
+
+    /**
+     * _campaignid 获取活动名称列表
+     * add by sunhao 2017-04-06
+     *//*
+    private List<String> getCampaignNameList(List<String> campaignKeyList) {
+
+        List<String> nameList = new ArrayList<>();
+
+        Map<String, Campaign> campaignMap = new HashMap<>();
+
+        List<Campaign> campaignList = campaignRepository.findAllByCampaignId(campaignKeyList);
+
+        campaignList.add(new Campaign("_default_", "自然量"));
+
+        if (!CollectionUtils.isEmpty(campaignList)) {
+            campaignMap = Maps.uniqueIndex(campaignList, new Function<Campaign, String>() {
+                @Override
+                public String apply(Campaign campaign) {
+                    return campaign.getCampaignid();
+                }
+            });
+        }
+
+        //填充values
+        for (String campaignid : campaignKeyList) {
+
+            if (campaignMap.containsKey(campaignid)) {
+                nameList.add(campaignMap.get(campaignid).getName());
+            } else {
+                nameList.add(campaignid);
+            }
+        }
+
+        return nameList;
+    }*/
+
+
+
+    /**
+     * 查出所有的时间和属性
+     */
+    @Override
+    public Map<String, List<String>> findAllEventWithAttr(Long appId) {
+
+        Map<String, List<String>> resultMap = new HashMap<>();
+
+        String appKey = appRepository.findAppkeyById(appId);
+        List<Event> events = eventRepository.findByAppkey(appKey);
+        List<EventMeta> eventMetaFalseList = eventMetaRepository.findByAppkeyAndStatusIsFalse(appKey);
+        List<EventAttributeMeta> attrMetaList = eventAttributeMetaRepository.findByAppkeyAndCondition(appKey);
+        Map<String, CommonParam> commonAttrMap = commonParamService.findAllByType("event");
+
+        Map<String, EventMeta> eventMetaFalseMap = new HashMap<>();
+        if (ValidateUtil.isValid(eventMetaFalseList)) {
+            for (EventMeta e : eventMetaFalseList) {
+                eventMetaFalseMap.put(e.getEventId(), e);
+            }
+        }
+
+        Map<String, EventAttributeMeta> attrMetaMap = new HashMap<>();
+        if (ValidateUtil.isValid(attrMetaList)) {
+            for (EventAttributeMeta e : attrMetaList) {
+                attrMetaMap.put(e.getAttribute(), e);
+            }
+        }
+
+        if (ValidateUtil.isValid(events)) {
+            for (Event e : events) {
+                String event = e.getEventName();
+                String attr = e.getEventAttr();
+                if (!eventMetaFalseMap.containsKey(event)) {
+                    if (attrMetaMap.containsKey(attr) || commonAttrMap.containsKey(attr)) {
+                        if (resultMap.containsKey(event)) {
+                            List<String> list = resultMap.get(event);
+                            list.add(attr);
+                            resultMap.put(event, list);
+                        } else {
+                            List<String> list = new ArrayList<>();
+                            list.add(attr);
+                            resultMap.put(event, list);
+                        }
+                    }
+                }
+
+            }
+        }
+
+        return resultMap;
+    }
+
+
+    /**
+     * 查询所有的事件以及名字,排重后
+     */
+    @Override
+    public List<Event4Web> listAllEvent(Long app) {
+
+        List<Event4Web> result = new ArrayList<>();
+
+        List<Event4Web> event4Webs = listEvent(app);
+        if (ValidateUtil.isValid(event4Webs)) {
+            for (Event4Web e : event4Webs) {
+                if (e.getStatus()) {
+                    result.add(e);
+                }
+            }
+        }
+        return result;
+    }
+
+    @Override
+    public List<Event4Web> listAllEventToCallback(Long app) {
+        List<Event4Web> result = new ArrayList<>();
+
+        List<Event4Web> event4Webs = listEvent(app);
+        if (ValidateUtil.isValid(event4Webs)) {
+            for (Event4Web e : event4Webs) {
+                if (e.getStatus() && !e.getEventName().equals("reged")
+                        && !e.getEventName().equals("loggedin") && !e.getEventName().equals("payment")) {
+                    result.add(e);
+                }
+            }
+        }
+        return result;
+    }
+
+    private Event4Web eventMetaTo4Web(EventMeta e) {
+        Event4Web ew = new Event4Web();
+        ew.setCommon(false);
+        ew.setEventName(e.getEventId());
+        ew.setEventNameAlias(e.getAlias() == null ? e.getEventId() : e.getAlias());
+        ew.setStatus(e.getStatus());
+
+        return ew;
+    }
+
+    private Event4Web eventTo4Web(Event e) {
+        Event4Web ew = new Event4Web();
+        ew.setCommon(false);
+        ew.setEventName(e.getEventName());
+        ew.setEventNameAlias(e.getEventName());
+        ew.setStatus(true);
+        return ew;
+    }
+
+    public Event4Web commonEventTo4Web(CommonEvent e) {
+        Event4Web ew = new Event4Web();
+        ew.setCommon(true);
+        ew.setEventName(e.getEvent());
+        ew.setEventNameAlias(e.getAlias());
+        ew.setStatus(true);
+        return ew;
+    }
+}
diff --git a/src/main/java/com/reyun/service/impl/EventStatsServiceImpl.java b/src/main/java/com/reyun/service/impl/EventStatsServiceImpl.java
new file mode 100644
index 0000000..0a9b217
--- /dev/null
+++ b/src/main/java/com/reyun/service/impl/EventStatsServiceImpl.java
@@ -0,0 +1,687 @@
+package com.reyun.service.impl;
+
+import com.google.common.base.Function;
+import com.google.common.collect.Lists;
+import com.google.common.collect.Maps;
+import com.reyun.dic.CustomMenuType;
+import com.reyun.dic.ReportEnumType;
+import com.reyun.dic.RoleEnumType;
+import com.reyun.model.*;
+import com.reyun.repository.*;
+import com.reyun.service.*;
+import com.reyun.taskexecute.ReportCallable;
+import com.reyun.util.*;
+
+import net.sf.json.JSONArray;
+import net.sf.json.JSONObject;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.util.CollectionUtils;
+
+import java.text.ParseException;
+import java.text.SimpleDateFormat;
+import java.util.*;
+import java.util.concurrent.ExecutorService;
+import java.util.concurrent.Executors;
+import java.util.concurrent.Future;
+/**
+ * Created by sunhao on 17/4/10.
+ * description:时间分析service
+ */
+@Service
+public class EventStatsServiceImpl implements EventStatsService {
+
+    private Logger logger = LoggerFactory.getLogger(EventStatsServiceImpl.class);
+
+    @Autowired
+    EventService eventService;
+    @Autowired
+    EventStatsRepository eventStatsRepository;
+    @Autowired
+    EventViewAttrRepository eventViewAttrRepository;
+    @Autowired
+    EventRepository eventRepository;
+    @Autowired
+    AppRepository appRepository;
+    @Autowired
+    CustomMenuTemplateRepository customMenuTemplateRepository;
+    @Autowired
+    CommonParamService commonParamService;
+    @Autowired
+    UserGroupService userGroupService;
+    @Autowired
+    ConfigParamService configparamService;
+    @Autowired
+    AccountRepository accountRepository;
+    @Autowired
+    AuthService authService;
+    @Autowired
+    ReportService reportService;
+
+    //分类维度 用户群
+    private final static String DIMENSION_FIELD = "attr";
+    private final static String DIMENSION_VALUES = "values";
+
+    //SQL参数
+    //开始时间
+    private final static String SQL_START_DATE = "$startData";
+    //结束时间
+    private final static String SQL_END_DATE = "$endDate";
+    //select字段
+    private final static String SQL_SELECT_FIELD = "$selectFieldSql";
+    //group字段
+    private final static String SQL_GROUP_FIELD = "$groupFieldSql";
+    //条件字段
+    private final static String SQL_WHERE_FIELD = "$whereFieldSql";
+
+    private final static String SQL_PARTICLE_DATE = "$selectDate";
+
+    //按照设备,按照账户
+    private final static String SQL_XWHO = "xwho";
+    private final static String SQL_DEVICE_ID = "_deviceid";
+
+    //显示粒度
+    private final static String VIEW_PARTICLE_DAY = "day";
+    private final static String VIEW_PARTICLE_WEEK = "week";
+    private final static String VIEW_PARTICLE_MONTH = "month";
+
+    //查询URI
+    private final static String URI_REPORT_BY_SQL = "/api/trackingio/bysql";
+
+    private final static String DIMENSION_TOTAL = "total";
+    private final static String DIMENSION_USER_GROUP = "usergroup";
+    private final static String SELECT_FIELD_TOTAL = ", '整体' as total";
+
+    private final static String REPORT_CALLABLE_TYPE_EVENT = "eventstats";
+
+
+    @Override
+    public boolean checkEventStatsName(String eventStatsName, Long appId) {
+
+        EventStats eventStats = eventStatsRepository.findEventStatsByName(eventStatsName, appId);
+
+        return eventStats == null;
+    }
+
+    /**
+     * 创建事件分析
+     * 参数校验在controller层
+     */
+    @Override
+    public EventStats createEventStats(EventStats eventStats) {
+
+        //生成查询sql
+        String appKey = appRepository.findAppkeyById(eventStats.getApp());
+
+        String querySql = SqlUtil.generateEventStatsSqlTemplate(eventStats.getEventCondition(), appKey, getEventViewAttrMap());
+
+        eventStats.setQuerySql(querySql);
+
+        //校验生成的SQL
+        if (StringUtil.isEmpty(querySql)) {
+
+            return null;
+
+        } else {
+
+            return eventStatsRepository.save(eventStats);
+        }
+    }
+
+    /**
+     * 修改事件分析,修改event_condition和query_sql
+     * 参数校验在controller层
+     */
+    @Override
+    public int updateEventStats(EventStats eventStats, Long accountId) {
+
+        EventStats findEventStats = eventStatsRepository.findEventStats(eventStats.getId());
+
+        //生成SQL
+        String appKey = appRepository.findAppkeyById(findEventStats.getApp());
+        String querySql = SqlUtil.generateEventStatsSqlTemplate(eventStats.getEventCondition(), appKey, getEventViewAttrMap());
+
+        //校验生成的SQL
+        if (StringUtil.isEmpty(querySql)) {
+
+            return 0;
+
+        } else {
+
+            return eventStatsRepository.updateEventStats(eventStats.getEventName(), eventStats.getEventCondition(),
+                    querySql, accountId, findEventStats.getId(), new Date());
+        }
+    }
+
+    /**
+     * 删除事件分析
+     */
+    @Override
+    public int deleteEventStats(Long eventStatsId, Long accountId) {
+
+        //查看事件是否存在看单之中,如果存在则删除。
+        List<Long> templateList = customMenuTemplateRepository.findTemplateByOriginal(eventStatsId, CustomMenuType.EVENT_STATS.getKey());
+        if (!CollectionUtils.isEmpty(templateList)) {
+            customMenuTemplateRepository.deleteTemplateByIds(accountId, templateList);
+        }
+
+        //删除事件
+        return eventStatsRepository.deleteEventStats(accountId, eventStatsId, new Date());
+    }
+
+    /**
+     * 查询所有事件
+     */
+    @Override
+    public List<EventStats> findAllEventStats(Long accountId, Long appId) {
+        return eventStatsRepository.findAll(appId, false);
+    }
+
+    /**
+     * 查询事件分析数据
+     * 参数校验在controller层
+     */
+    @Override
+    public Map<String, List> queryEventStatsData(Long appId, Long accountId, String startDate, String endDate, String groupCondition,
+                                                 boolean isDevice, String eventCondition, String viewFlag) {
+
+        String appKey = appRepository.findAppkeyById(appId);
+        Map<String, EventViewAttr> eventViewAttrMap = getEventViewAttrMap();
+        String querySql = SqlUtil.generateEventStatsSqlTemplate(eventCondition, appKey, eventViewAttrMap);
+
+        //查询sql nul
+        if (StringUtil.isEmpty(querySql)) {
+            return null;
+        }
+
+        querySql = querySql.replace("$campaign","");
+        //默认聚合字段
+        String groupField = "total";
+
+        //查询时间粒度
+        querySql = replaceQueryParticleDate(querySql, startDate, endDate, viewFlag);
+
+        if (!StringUtil.isEmpty(groupCondition)) {
+
+            JSONObject fieldGroupObject = JSONObject.fromObject(groupCondition);
+            JSONArray values = fieldGroupObject.getJSONArray(DIMENSION_VALUES);
+
+            groupField = fieldGroupObject.getString(DIMENSION_FIELD);
+
+            if (DIMENSION_USER_GROUP.equals(groupField)) {
+                //用户群分组对比
+                return getUserGroupDimensionResponse(querySql, values, isDevice, appId, appKey, accountId, startDate, endDate, viewFlag);
+
+            } else {
+                //其他用户群对比
+                return getOtherDimensionResponse(querySql, groupField, isDevice, appId, appKey, accountId, startDate, endDate, viewFlag);
+            }
+        }
+
+        //非维度对比查询
+        return getTotalResponse(appKey, querySql, groupField, isDevice, appId, accountId, startDate, endDate, viewFlag);
+
+    }
+
+    /**
+     * 获取整体的查询结果
+     * created by sunhao 20170515
+     */
+    private Map<String, List> getTotalResponse(String appKey, String querySql, String groupField, boolean isDevice, Long appId,
+                                               Long accountId, String startDate, String endDate, String viewFlag) {
+
+        querySql = replaceQuerySql(querySql, SELECT_FIELD_TOTAL, "", "", isDevice);
+
+        Map<String, String> conditions = new HashMap<>();
+        conditions.put("sql", querySql);
+        conditions.put("dbtype", "presto");
+        conditions.put("datatype", ReportEnumType.LIST.getCode());
+        conditions.put("reportname", "eventstats");
+        conditions.put("appid", appKey);
+
+
+        Map<String, List> responseJson = reportService.reportBySql(conditions);
+
+
+        return formatEventStatsReportData(responseJson, groupField, appId, accountId, startDate, endDate, viewFlag);
+
+    }
+
+    /**
+     * 获取整体和其他维度对比查询结果
+     * created by sunhao 20170515
+     */
+    private Map<String, List> getOtherDimensionResponse(String querySql, String groupField, boolean isDevice, Long appId,String appKey,
+                                                        Long accountId, String startDate, String endDate, String viewFlag) {
+
+        String totalSelect =  SELECT_FIELD_TOTAL;
+        String dimensionSelect = getFieldSelectSql(groupField);
+        String dimensionGroup = getFieldSelectSql(groupField);
+        //整体
+        String querySqlTotal = replaceQuerySql(querySql, totalSelect, "", "", isDevice);
+        //维度
+        String querySqlDimension = replaceQuerySql(querySql, dimensionSelect, dimensionGroup, "", isDevice);
+
+        //demo账号处理 TODO
+
+        return getTotalAndDimensionResult(querySqlTotal, querySqlDimension, groupField, startDate, endDate, appId, appKey, accountId, viewFlag, false);
+    }
+
+    /**
+     * 获取整体和用户群对比查询的结果
+     * created by sunhao 20170515
+     */
+    private Map<String, List> getUserGroupDimensionResponse(String querySql, JSONArray values, boolean isDevice, Long appId,String appKey,
+                                                            Long accountId, String startDate, String endDate, String viewFlag) {
+
+        String userGroupValue = values.getString(0);
+        String totalSelect = SELECT_FIELD_TOTAL;
+        String dimensionSelect = ",'" + userGroupValue + "' as " + DIMENSION_USER_GROUP;
+        String dimensionWhere =  getUserGroupWhereSql(values.getString(0));
+
+        //整体
+        String querySqlTotal = replaceQuerySql(querySql, totalSelect, "", "", isDevice);
+        //用户群维度
+        String querySqlUser = replaceQuerySql(querySql, dimensionSelect, "", dimensionWhere, isDevice);
+
+        //demo账号处理 TODO
+
+        return getTotalAndDimensionResult(querySqlTotal, querySqlUser, values.getString(0), startDate, endDate, appId, appKey, accountId, viewFlag, true);
+    }
+
+    /**
+     * 获取整体和分类维度合并的结果
+     * created by sunhao 20170515
+     */
+    private Map<String, List> getTotalAndDimensionResult(String querySqlTotal, String querySqlDimension, String groupField, String startDate,
+                                                         String endDate, Long appId, String appKey, Long accountId, String viewFlag, boolean isUserGroup) {
+
+        Map<String, List> result = new HashMap<>();
+
+        //创建一个线程池
+        ExecutorService pool = Executors.newFixedThreadPool(2);
+
+        try {
+            //创建两个有返回值的任务
+            ReportCallable callableTotal = new ReportCallable(REPORT_CALLABLE_TYPE_EVENT, querySqlTotal, DIMENSION_TOTAL,
+                    startDate, endDate, viewFlag, appId, appKey, accountId, null);
+            ReportCallable callableDimension = new ReportCallable(REPORT_CALLABLE_TYPE_EVENT, querySqlDimension, isUserGroup ? DIMENSION_USER_GROUP : groupField,
+                    startDate, endDate, viewFlag, appId, appKey, accountId, groupField);
+            //执行任务并获取Future对象
+            Future<Map<String, List>> futureTotal = pool.submit(callableTotal);
+            Future<Map<String, List>> futureDimension = pool.submit(callableDimension);
+            Map<String, List> resultTotal = futureTotal.get();
+            Map<String, List> resultDimension = futureDimension.get();
+
+            //聚合两个结果
+            if (isUserGroup) {
+
+                result = combineResultOfUserGroup(resultTotal, resultDimension, groupField);
+
+            } else {
+
+                result = combineResultOfOtherDimension(resultTotal, resultDimension);
+            }
+
+        } catch (Exception e) {
+            e.printStackTrace();
+        } finally {
+            pool.shutdown();
+        }
+
+        return result;
+    }
+
+    /**
+     * 聚合其他维度对比数据
+     * 将resultDimension(多个维度的数据)的数据聚合到resultTotal中
+     */
+    private Map<String, List> combineResultOfOtherDimension(Map<String, List> resultTotal, Map<String, List> resultDimension){
+
+        List<?> valueListTotal = resultTotal.get("val");
+        List<?> valueListUser = resultDimension.get("val");
+        List<String> columnKeyList = resultDimension.get("columnkey");
+        List<String> nameList = resultDimension.get("name");
+
+        if (!CollectionUtils.isEmpty(valueListUser) && !CollectionUtils.isEmpty(columnKeyList)) {
+
+            columnKeyList.remove(0);
+            nameList.remove(0);
+
+            for (String columnKey : columnKeyList) {
+                for (int i = 0; i < resultTotal.get("val").size(); i++) {
+                    Map<String, Object> valueMap = (Map<String, Object>) valueListTotal.get(i);
+                    valueMap.put(columnKey, ((Map<String, Object>) valueListUser.get(i)).get(columnKey));
+                }
+            }
+        }
+
+        resultTotal.get("name").addAll(nameList);
+        resultTotal.get("columnkey").addAll(columnKeyList);
+
+        return resultTotal;
+    }
+
+    /**
+     * 聚合用户群对比查询结果
+     * 将resultUser(单维度)数据聚合到resultTotal
+     */
+    private Map<String, List> combineResultOfUserGroup(Map<String, List> resultTotal, Map<String, List> resultUser, String userGroupValue) {
+
+        UserGroup userGroup = userGroupService.findById(Long.parseLong(userGroupValue));
+
+        List<?> valueListTotal = resultTotal.get("val");
+        List<?> valueListUser = resultUser.get("val");
+
+        if (CollectionUtils.isEmpty(valueListUser)) {
+
+            for (int i = 0; i < resultTotal.get("val").size(); i++) {
+                Map<String, Object> valueMap = (Map<String, Object>) valueListTotal.get(i);
+                valueMap.put(userGroupValue, 0);
+            }
+
+        } else {
+
+            for (int i = 0; i < resultTotal.get("val").size(); i++) {
+                Map<String, Object> valueMap = (Map<String, Object>) valueListTotal.get(i);
+                valueMap.put(userGroupValue, ((Map<String, Object>) valueListUser.get(i)).get(userGroupValue));
+            }
+        }
+
+        resultTotal.get("name").add(userGroup.getName());
+        resultTotal.get("columnkey").add(userGroupValue);
+
+        return resultTotal;
+    }
+
+    /**
+     * 替换SQL中的参数,对于关系如下
+     * selectField:SQL_SELECT_FIELD
+     * groupField:SQL_GROUP_FIELD
+     * whereField:SQL_WHERE_FIELD
+     * created by sunhao 20170515
+     */
+    private String replaceQuerySql(String querySql, String selectField, String groupField, String whereField, boolean isDevice) {
+
+        querySql = querySql.replace(SQL_SELECT_FIELD, selectField);
+        querySql = querySql.replace(SQL_GROUP_FIELD, groupField);
+        querySql = querySql.replace(SQL_WHERE_FIELD, whereField);
+        querySql = querySql.replaceAll(SQL_XWHO, isDevice ? SQL_DEVICE_ID : SQL_XWHO);
+
+        return querySql;
+    }
+
+    /**
+     * 获取用户群分组条件SQL
+     * created by sunhao 20170515
+     */
+    private String getUserGroupWhereSql(String userGroupValue) {
+
+        String userGroupSql = " and xwho in (select objectid as xwho from " + Constant.usergroupTable + " where id = '%' and objecttype = 'xwho') ";
+
+        return userGroupSql.replace("%", userGroupValue);
+    }
+
+    /**
+     * 替换查询粒度
+     */
+    private String replaceQueryParticleDate(String querySql, String startDate, String endDate, String viewFlag) {
+
+        try {
+            SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd");
+
+            Date start = simpleDateFormat.parse(startDate);
+            Date end = simpleDateFormat.parse(endDate);
+
+            switch (viewFlag) {
+
+                case VIEW_PARTICLE_DAY:
+                    querySql = querySql.replace(SQL_START_DATE, startDate);
+                    querySql = querySql.replace(SQL_END_DATE, endDate);
+                    querySql = querySql.replace(SQL_PARTICLE_DATE, " ds ");
+                    break;
+                case VIEW_PARTICLE_WEEK:
+                    querySql = querySql.replace(SQL_START_DATE, simpleDateFormat.format(DateUtil.getFirstDayOfWeek(start)));
+                    querySql = querySql.replace(SQL_END_DATE, simpleDateFormat.format(DateUtil.getLastDayOfWeek(end)));
+                    querySql = querySql.replace(SQL_PARTICLE_DATE, " date_format(date_parse(ds, '%Y-%m-%d'), '%Y%v') ");
+                    break;
+                case VIEW_PARTICLE_MONTH:
+                    querySql = querySql.replace(SQL_START_DATE, DateUtil.getFirstDayOfMonth(start));
+                    querySql = querySql.replace(SQL_END_DATE, DateUtil.getLastDayOfMonth(end));
+                    querySql = querySql.replace(SQL_PARTICLE_DATE, " date_format(date_parse(ds, '%Y-%m-%d'), '%Y%m') ");
+                    break;
+                default:
+                    querySql = querySql.replace(SQL_START_DATE, startDate);
+                    querySql = querySql.replace(SQL_END_DATE, endDate);
+                    querySql = querySql.replace(SQL_PARTICLE_DATE, " ds ");
+                    break;
+            }
+
+        } catch (ParseException e) {
+            logger.error(e.getMessage());
+        }
+
+        return querySql;
+    }
+
+    /**
+     * 获取默认显示属性
+     */
+    private Map<String, EventViewAttr> getEventViewAttrMap() {
+
+        List<EventViewAttr> eventViewAttrList = eventViewAttrRepository.findEventViewAttr();
+
+        return Maps.uniqueIndex(eventViewAttrList, new Function<EventViewAttr, String>() {
+            @Override
+            public String apply(EventViewAttr eventViewAttr) {
+                return eventViewAttr.getViewAttr();
+            }
+        });
+    }
+
+    /**
+     * 生成带有,的字段 ,field
+     */
+    private String getFieldSelectSql(String field) {
+        return ", " + field;
+    }
+
+    /**
+     * 格式化sql查询出的数据
+     */
+    @Override
+    public Map<String, List> formatEventStatsReportData(Map<String, List> responseResult, String groupField, Long appId, Long accountId,
+                                                        String startDate, String endDate, String viewType) {
+
+        Map<String, List> result = new HashMap<>();
+
+        //获取时间范围内按照时间粒度的所有日期
+        Map<String, String> dateStringMap = getDateMapByViewFlag(startDate, endDate, viewType);
+
+        Map<String, JSONObject> valueMap = new HashMap<>();
+        List<Map<String, Object>> valueResult = new ArrayList<>();
+        List<String> nameList = Lists.newArrayList();
+        List<String> columnKeyList = new ArrayList<>();
+        List<String> keyList = new ArrayList<>();
+        List<String> dateColumnList = new ArrayList<>();
+
+        try {
+
+            JSONObject responseObject = JSONObject.fromObject(responseResult);
+            Object responseValueObject = responseObject.get("val");
+
+            if (null != responseValueObject && !CollectionUtils.isEmpty((JSONArray) responseValueObject)) {
+
+                JSONArray valueArray = (JSONArray) responseValueObject;
+
+                //获取日期列表
+                dateColumnList.addAll(dateStringMap.keySet());
+
+                //筛选出所有的group内容
+                for (int i = 0; i < valueArray.size(); i++) {
+
+                    JSONObject valueObject = valueArray.getJSONObject(i);
+                    String date = valueObject.getString("ds");
+                    if (date.length() == 10 && viewType.equals("week")) {
+                        date = DateUtil.getYYYYWW(date);
+                    } else if (date.length() == 10 && viewType.equals("month")) {
+                        date = DateUtil.getYYYYMM(date);
+                    }
+
+                    String columnKey = valueObject.getString(groupField);
+                    if (!columnKeyList.contains(columnKey)) {
+
+                        columnKeyList.add(columnKey);
+                    }
+
+                    valueMap.put(date + columnKey, valueObject);
+                }
+
+                //行转列
+                for (String date : dateColumnList) {
+
+                    Map<String, Object> rowValue = new HashMap<>();
+
+                    rowValue.put("ds", dateStringMap.get(date));
+
+                    for (String columnKey : columnKeyList) {
+
+                        JSONObject value = valueMap.get(date + columnKey);
+                        rowValue.put(columnKey, null != value ? value.get("sumdata") : 0);
+                    }
+
+                    valueResult.add(rowValue);
+                }
+
+                //排序,降序
+                Collections.sort(valueResult, new Comparator<Map<String, Object>>() {
+
+                    public int compare(Map<String, Object> o1, Map<String, Object> o2) {
+
+                        return o2.get("ds").toString().compareTo(o1.get("ds").toString());
+                    }
+                });
+
+                //转换渠道和活动名称
+                nameList = getColumnNameList(appId, accountId, columnKeyList, groupField);
+
+                //处理列名
+                keyList = getKeyList(new ArrayList<>(dateStringMap.values()));
+                columnKeyList.add(0, "ds");
+
+            } else if (DIMENSION_TOTAL.equals(groupField)) {
+                //整体的全零处理
+                columnKeyList.add("ds");
+                columnKeyList.add(groupField);
+
+                nameList.add("日期");
+                nameList.add("整体");
+
+                keyList = getKeyList(new ArrayList<>(dateStringMap.values()));
+
+                //数据补零
+                for (String date : dateStringMap.values()) {
+                    Map<String, Object> rowValue = new HashMap<>();
+                    rowValue.put("ds", date);
+                    rowValue.put(groupField,0);
+                    valueResult.add(rowValue);
+                }
+
+                //排序,降序
+                Collections.sort(valueResult, new Comparator<Map<String, Object>>() {
+
+                    public int compare(Map<String, Object> o1, Map<String, Object> o2) {
+
+                        return o2.get("ds").toString().compareTo(o1.get("ds").toString());
+                    }
+                });
+            }
+
+        } catch (Exception e) {
+            logger.error(e.getMessage());
+        }
+
+        //设置结果
+        result.put("val", valueResult);
+        result.put("columnkey", columnKeyList);
+        result.put("name", nameList);
+        result.put("key", keyList);
+
+        return result;
+    }
+
+    /**
+     * 获取日期段的前半部分 降序排列
+     */
+    private List<String> getKeyList(List<String> keyNameList) {
+
+        List<String> keyList = new ArrayList<>();
+
+        for (String dateKey : keyNameList) {
+            keyList.add(dateKey.substring(0, 10));
+        }
+
+        Collections.sort(keyList);
+
+        return keyList;
+    }
+
+
+    /**
+     * 获取列名中文名
+     */
+    private List<String> getColumnNameList(Long appId, Long accountId, List<String> columnKeyList, String groupField) {
+
+        List<String> nameList = new ArrayList<>();
+
+        nameList.add("日期");
+
+        nameList.addAll(columnKeyList);
+
+        return nameList;
+    }
+
+    /**
+     * 根据查询粒度查询范围内的日期样式
+     */
+    private Map<String, String> getDateMapByViewFlag(String startDate, String endDate, String viewFlag) {
+
+        Map<String, String> columnDateMap = new HashMap<>();
+
+        switch (viewFlag) {
+
+            case VIEW_PARTICLE_DAY:
+                List<String> dayList = DateUtil.getDateInterval(startDate, endDate);
+
+                for (String date : dayList) {
+                    columnDateMap.put(date, date);
+                }
+                break;
+
+            case VIEW_PARTICLE_WEEK:
+                List<String> weekList = DateUtil.getEveryWeek(startDate, endDate);
+
+                for (String week : weekList) {
+                    columnDateMap.put(week, DateUtil.getFirstDayOfWeek(week) + "~" + DateUtil.getLastDayOfWeek(week));
+                }
+
+                break;
+
+            case VIEW_PARTICLE_MONTH:
+                List<String> monthList = DateUtil.getEveryMonth(startDate, endDate);
+
+                for (String month : monthList) {
+                    columnDateMap.put(month, DateUtil.getFirstdayOfMonth(month) + "~" + DateUtil.getLastdayOfMonth(month));
+                }
+                break;
+
+            default:
+                break;
+        }
+
+        return columnDateMap;
+    }
+}
diff --git a/src/main/java/com/reyun/service/impl/ExportReportInfoServiceImpl.java b/src/main/java/com/reyun/service/impl/ExportReportInfoServiceImpl.java
new file mode 100644
index 0000000..7855d8c
--- /dev/null
+++ b/src/main/java/com/reyun/service/impl/ExportReportInfoServiceImpl.java
@@ -0,0 +1,117 @@
+package com.reyun.service.impl;
+
+import com.reyun.dic.DownloadStatusEnumType;
+import com.reyun.model.Account;
+import com.reyun.model.App;
+import com.reyun.model.ExportReportInfo;
+import com.reyun.repository.AppRepository;
+import com.reyun.repository.ExportReportInfoRepository;
+import com.reyun.service.ExportReportInfoService;
+import com.reyun.util.AwsS3Util;
+import org.joda.time.DateTime;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.Date;
+import java.util.List;
+
+@Service
+public class ExportReportInfoServiceImpl implements ExportReportInfoService {
+
+    @Autowired
+    ExportReportInfoRepository repository;
+
+    @Autowired
+    AppRepository appRepository;
+
+    private final static int EXPORT_INVALID_DAYS = 3;
+    private final static int EXPORT_INVALID_MONTH = 1;
+
+    private static final String S3_DOWNLOAD_BUCKET = "reyundownload";
+
+    private static final String DOWNLOAD_PATH = "trackingio/reportdownload/";
+
+    @Override
+    public ExportReportInfo save(ExportReportInfo exportReport) {
+        exportReport.setCreateTime(new Date());
+        return repository.save(exportReport);
+    }
+
+    @Override
+    public void delete(Long id) {
+        ExportReportInfo reportInfo = repository.findOne(id);
+        final String s3key = DOWNLOAD_PATH + reportInfo.getFileName();
+        //删除文件
+        if (AwsS3Util.getInstance().getAmazonS3().doesObjectExist(S3_DOWNLOAD_BUCKET, s3key)) {
+            AwsS3Util.getInstance().deleteS3Object(S3_DOWNLOAD_BUCKET, s3key);
+        }
+        //删除记录
+        repository.delete(id);
+
+    }
+
+    @Override
+    public List<ExportReportInfo> findByApp(Account loginAccount, Long app) {
+
+        Date startDate = new DateTime().minusMonths(EXPORT_INVALID_MONTH).toDate();
+
+        //母账号查看所有导出报表,子账号只能查看自己创建的 add by sunhao 20170828
+        if (loginAccount.getIsSuperUser()) {
+
+            return repository.findByApp(app, startDate);
+
+        } else {
+
+            return repository.findByAccountAndApp(app, startDate, loginAccount.getId());
+        }
+    }
+
+    @Override
+    public boolean validFileName(ExportReportInfo exportReport) {
+        App app = appRepository.findOne(exportReport.getApp());
+        String fileName = app.getAppkey() + "_" + exportReport.getReportName() + "_" + exportReport.getStartDate() + "_" + exportReport.getEndDate() + ".txt";
+        ExportReportInfo export = repository.findByAppAndFileName(exportReport.getApp(), fileName);
+        if (export == null) {
+            return true;
+        }
+        return false;
+    }
+
+    @Override
+    public int updateStatus(Long id, String status, Long account) {
+        return repository.updateStatus(id, status, new Date(), account);
+    }
+
+    @Override
+    public int updateStatus(Long id, String status) {
+        return repository.updateStatus(id, status, new Date());
+    }
+
+    @Override
+    public ExportReportInfo findOne(Long id) {
+        return repository.findOne(id);
+    }
+
+    @Override
+    public List<ExportReportInfo> findExport2Deal() {
+        return repository.findByStatus(DownloadStatusEnumType.INIT.getCode(), DownloadStatusEnumType.FAILED.getCode());
+    }
+
+    @Override
+    public List<ExportReportInfo> findInvalidExportList() {
+
+        //获取三天前的日期
+        Date threeDaysAgo = DateTime.now().minusDays(EXPORT_INVALID_DAYS).toDate();
+        //查找三天前的已生成的数据
+        return repository.listInvalidExport(threeDaysAgo);
+    }
+
+    /**
+     * 更新下载信息
+     */
+    @Override
+    public int updateDownloadInfo(Long downloadId, Account account, String downloadIp) {
+
+        return repository.updateDownloadInfo(downloadId, account.getId(), account.getName(), downloadIp, new Date());
+    }
+}
diff --git a/src/main/java/com/reyun/service/impl/ExpressionServiceImpl.java b/src/main/java/com/reyun/service/impl/ExpressionServiceImpl.java
new file mode 100644
index 0000000..461275a
--- /dev/null
+++ b/src/main/java/com/reyun/service/impl/ExpressionServiceImpl.java
@@ -0,0 +1,584 @@
+package com.reyun.service.impl;
+
+import com.reyun.model.CommonEvent;
+import com.reyun.model.CommonParam;
+import com.reyun.model.ComplicatedParam;
+import com.reyun.model.Event;
+import com.reyun.model.EventAttributeMeta;
+import com.reyun.model.EventMeta;
+import com.reyun.model.VirtualEvent;
+import com.reyun.repository.CommonEventRepository;
+import com.reyun.repository.CommonParamRepository;
+import com.reyun.repository.ComplicatedParamRepository;
+import com.reyun.repository.EventAttributeMetaRepository;
+import com.reyun.repository.EventMetaRepository;
+import com.reyun.repository.EventRepository;
+import com.reyun.service.ExpressionService;
+import com.reyun.service.VirtualEventService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.util.CollectionUtils;
+import org.springframework.util.StringUtils;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Stack;
+import java.util.StringTokenizer;
+
+@Service
+public class ExpressionServiceImpl implements ExpressionService {
+
+    @Autowired
+    VirtualEventService virtualEventService;
+    @Autowired
+    private EventMetaRepository eventMetaRepository;
+    @Autowired
+    private EventAttributeMetaRepository eventAttributeMetaRepository;
+    @Autowired
+    private EventRepository eventRepository;
+    @Autowired
+    private ComplicatedParamRepository complicatedParamRepository;
+    @Autowired
+    private CommonEventRepository commonEventRepository;
+    @Autowired
+    private CommonParamRepository commonParamRepository;
+
+    @Override
+    public boolean validateOriginalExpression(String expression, String appKey) {
+
+//        List<String> splitExp = this.splitExpression(expression);
+        List<String> splitExp = this.split(expression);
+
+        boolean isValidExpression = this.validateExpression(splitExp);
+        if (!isValidExpression) {
+            System.out.println("表达式成分有问题");
+            return false;
+        }
+
+        boolean bracketsValid = this.validateBrackets(splitExp);
+
+        if (!bracketsValid) {
+            System.out.println("括号验证没过");
+            return false;
+        }
+
+        String eventAndAttributeValid = this.validateEventAndAttribute(splitExp, appKey);
+
+        if (eventAndAttributeValid == null) {
+            System.out.println("事件数据库验证未通过");
+            return false;
+        }
+        return true;
+    }
+
+    /**
+     * 验证事件和属性
+     *
+     * @param splitExp
+     * @return
+     */
+    private String validateEventAndAttribute(List<String> splitExp, String appKey) {
+
+        StringBuilder sb = new StringBuilder(splitExp.size());
+        String eventName = "";
+        String attributeName = "";
+        String viewName = "";
+        for (int i = 0; i < splitExp.size(); i++) {
+            String str = splitExp.get(i);
+
+            // 获取到的字符串为
+            if (str.equals("(") || str.equals(")") || str.equals("+") || str.equals("-") || str.equals("*") || str.equals("/")) {
+                sb.append(str);
+                continue;
+            }
+
+            // 把事件  属性  操作 拆分
+            StringTokenizer stringTokenizer = new StringTokenizer(str, ".");
+            if (stringTokenizer.countTokens() > 2) {
+                eventName = stringTokenizer.nextElement().toString();
+                attributeName = stringTokenizer.nextElement().toString();
+                viewName = stringTokenizer.nextElement().toString();
+            } else {
+                eventName = stringTokenizer.nextElement().toString();
+                // 解析表达式的时候, 第二个都没有
+                if (!stringTokenizer.hasMoreElements()) {
+                    return null;
+                }
+                viewName = stringTokenizer.nextElement().toString();
+                if ("".equals(viewName)) {
+                    return null;
+                }
+            }
+
+            // 去掉两端双引号
+            if (eventName.startsWith("\"") && eventName.endsWith("\"")) {
+                eventName = eventName.substring(1, eventName.length() - 1);
+            }
+            if (attributeName.startsWith("\"") && attributeName.endsWith("\"")) {
+                attributeName = attributeName.substring(1, attributeName.length() - 1);
+            }
+            if (viewName.startsWith("\"") && viewName.endsWith("\"")) {
+                viewName = viewName.substring(1, viewName.length() - 1);
+            }
+            String b = this.validateEAndA(eventName, attributeName, viewName, appKey);
+            if (b == null) {
+                return null;
+            }
+            sb.append(b);
+        }
+
+        return sb.toString();
+    }
+
+    /**
+     * 到数据库去验证
+     *
+     * @param eventName
+     * @param attributeName
+     * @param viewName
+     * @param appKey
+     * @return
+     */
+    private String validateEAndA(String eventName, String attributeName, String viewName, String appKey) {
+
+        StringBuilder sb = new StringBuilder(5);
+
+        // 数据库读取event
+        String eventId = this.getEventId(eventName, appKey);
+        if (eventId == null || eventId.isEmpty()) {
+            System.out.println("事件校验有误");
+            return null;
+        }
+
+        sb.append(eventId).append(".");
+
+        // 如果attribute传过来了, 数据库验证, 并验证和event的关系
+        if (attributeName != null && !attributeName.isEmpty()) {
+            String attrId = this.getAttributeId(eventId, attributeName, appKey);
+            if (attrId == null || attrId.isEmpty()) {
+                System.out.println("属性校验有误");
+                return null;
+            }
+            sb.append(attrId).append(".");
+        }
+
+        // 验证operation
+        if (viewName != null && !"".equals(viewName)) {
+            ComplicatedParam complicatedParam = this.complicatedParamRepository.findComplicateOperator(viewName);
+            if (complicatedParam == null) {
+                System.out.println(viewName + "没找到");
+                return null;
+            } else {
+                sb.append(complicatedParam.getViewAttr());
+            }
+        }
+
+        return sb.toString();
+    }
+
+    /**
+     * 验证括号匹配
+     *
+     * @param splitExp
+     * @return
+     */
+    private boolean validateBrackets(List<String> splitExp) {
+        Stack<String> stack = new Stack<>();
+        // 配对验证
+        for (String str : splitExp) {
+            if (str.equals("(")) {
+                stack.push("(");
+//            } else if (str.equals(")") && stack.size() > 0 && stack.peek().equals("(")) {
+//                stack.pop();
+//            } else if (str.equals(")") && stack.size() > 0 && !stack.peek().equals("(")) {
+//                stack.push(str);
+            } else if (str.equals(")")) {
+                if (stack.size() > 0 && stack.peek().equals("(")) {
+                    stack.pop();
+                } else if (stack.size() > 0 && !stack.peek().equals("(")) {
+                    stack.push(str);
+                } else {
+                    stack.push(str);
+                }
+            }
+        }
+        if (stack.size() != 0) {
+            return false;
+        }
+        // 括号位置验证
+        for (int i = 0; i < splitExp.size(); i++) {
+            String str = splitExp.get(i);
+            String next = i < splitExp.size() - 1 ? splitExp.get(i + 1) : "";
+            String last = i > 0 ? splitExp.get(i - 1) : "";
+            // 左括号的时候, 上一个不能是dot, 下一个不能是运算符号
+            if ("(".equals(str) && (last.equals(".") || next.equals("+") || next.equals("-") || next.equals("*") || next.equals("/"))) {
+                return false;
+            } else if (")".equals(str) && (last.equals("+") || last.equals("-") || last.equals("*") || last.equals("/") || last.equals("."))) {
+                return false;
+            }
+        }
+        // 括号一对的内容验证
+//        for (int i = 0; i < splitExp.size(); i++) {
+//
+//        }
+        return true;
+    }
+
+
+    private List<String> split(String expression) {
+        List<String> list = new ArrayList<>(40);
+
+        char[] chars = expression.toCharArray();
+        // 存放单个属性
+        StringBuilder sb = new StringBuilder();
+        // 存放整个表达式
+        StringBuilder sb2 = new StringBuilder();
+        for (int i = 0; i < chars.length; i++) {
+            char c = chars[i];
+            // 如果是符号, 四则运算/小括号/dot
+            if (c == '(' || c == ')' || c == '+' || c == '-' || c == '*' || c == '/') {
+                // 要判断运算符号是不是名称里面的
+
+                // 塞进去的字符串是以"开头的, 说明符号是名称里的
+                if (sb.length() > 0 && sb.indexOf("\"") == 0) {
+                    sb.append(c);
+                }
+                // 塞进去的字符串不是以"开头的, 不是以"开头, 说明这个符号不是名称里面的
+                else if (sb.length() > 0 && sb.indexOf("\"") != 0) {
+                    list.add(sb2.append(sb.toString()).toString());
+//                    list.add(sb.toString());
+                    sb.setLength(0);
+                    sb2.setLength(0);
+                    list.add(Character.toString(c));
+                }
+                // 还没塞字符串 === 这个符号不是名称里的
+                else {
+                    list.add(Character.toString(c));
+                }
+            }
+            // 如果是双引号, 并且sb中存放了已开始的字符串
+            else if (c == '"' && sb.length() > 0) {
+                // 判断这个双引号是不是在名字中的. 判断逻辑为, 是否为字符串最后一个字符, 或下一个字符等于运算符号, 或下一个字符等于dot
+//                if (i == chars.length - 1 || chars[i + 1] == '(' || chars[i + 1] == ')' || chars[i + 1] == '+' || chars[i + 1] == '-' || chars[i + 1] == '*' || chars[i + 1] == '/' || chars[i + 1] == '.') {
+//                    sb.append(c);
+//                    list.add(sb.toString());
+//                    sb.setLength(0);
+//                } else {
+//                    sb.append(c);
+//                }
+                // 如果是最后一个字符
+                if (i == chars.length - 1) {
+                    sb.append(c);
+                    list.add(sb.toString());
+                    sb.setLength(0);
+                } else {
+                    sb.append(c);
+                }
+            }
+            // 如果是双引号, 并且sb中没有字符串
+            else if (c == '"' && sb.length() == 0) {
+                sb.append(c);
+            }
+//            // 如果是dot符号
+            else if (c == '.') {
+                if (sb.length() > 0) {
+                    sb2.append(sb.toString());
+                    sb.setLength(0);
+                }
+                sb2.append(c);
+            }
+            // 最后一个字符, 收尾
+            else if (i == chars.length - 1) {
+                sb.append(c);
+                list.add(sb2.append(sb.toString()).toString());
+                sb.setLength(0);
+                sb2.setLength(0);
+            }
+            // 其他
+            else {
+                sb.append(c);
+            }
+        }
+        if (sb2.length() > 0) {
+            list.add(sb2.toString());
+        }
+        return list;
+    }
+
+    @Override
+    public String originalExpressionToMidExp(String original, String appKey) {
+
+        List<String> splitExp = this.split(original);
+        if (splitExp.size() < 1) {
+            return null;
+        }
+
+        boolean isValidExpression = this.validateExpression(original);
+
+        if (!isValidExpression) {
+            System.out.println("表达式成分有问题");
+            return null;
+        }
+
+        boolean bracketsValid = this.validateBrackets(splitExp);
+
+        if (!bracketsValid) {
+            System.out.println("括号验证有问题");
+            return null;
+        }
+
+        String eventAndAttributeValid = this.validateEventAndAttribute(splitExp, appKey);
+
+        if (eventAndAttributeValid == null) {
+            System.out.println("事件数据库验证未通过");
+            return null;
+        }
+
+        return eventAndAttributeValid;
+    }
+
+    private boolean validateExpression(List<String> splitExp) {
+        if (splitExp.size() == 0) {
+            return false;
+        }
+        // 获取表达式数量和符号数量
+        int symbolCount = 0;
+        int expCount = 0;
+        for (String str : splitExp) {
+            if ("+".equals(str) || "-".equals(str) || "*".equals(str) || "/".equals(str)) {
+                symbolCount++;
+            } else if ("(".equals(str) || ")".equals(str)) {
+                continue;
+            } else {
+                expCount++;
+                if (str.startsWith(".") || str.endsWith(".")) {
+                    return false;
+                }
+            }
+        }
+
+        // 没有表达式
+        if (expCount == 0) {
+            return false;
+        }
+
+        // 判断开头
+        String str = splitExp.get(0);
+        if (str.equals("+") || str.equals("-") || str.equals("*") || str.equals("/") || str.equals(")") || str.equals(".")) {
+            return false;
+        }
+        // 判断结尾
+        str = splitExp.get(splitExp.size() - 1);
+        if (str.equals("+") || str.equals("-") || str.equals("*") || str.equals("/") || str.equals("(") || str.equals(".")) {
+            return false;
+        }
+
+//        return symbolCount >= 1 && expCount >= 2;
+        return true;
+    }
+
+    /**
+     * 获取eventId的逻辑方法
+     *
+     * @param eventName
+     * @param appKey
+     * @return
+     */
+    private String getEventId(String eventName, String appKey) {
+        if (eventName == null || eventName.isEmpty() || appKey == null || appKey.isEmpty()) {
+            return null;
+        }
+
+        //根据事件ID和别名
+        EventMeta eventMeta = this.eventMetaRepository.findByAliasOrName(appKey, eventName);
+        if (eventMeta != null) {
+            return eventMeta.getEventId();
+        }
+
+        //根据通用事件
+        CommonEvent byAlias = this.commonEventRepository.findByAlias(eventName);
+        if (byAlias != null) {
+            return byAlias.getEvent();
+        }
+
+        //根据事件ID
+        List<Event> byEvent = eventRepository.findByEventName(appKey, eventName);
+        if (byEvent != null && byEvent.size() > 0) {
+            return eventName;
+        }
+
+        //虚拟事件
+        VirtualEvent virtualEvent = virtualEventService.getVirtualEvent(appKey, eventName);
+        if (null != virtualEvent) {
+            return virtualEvent.getName();
+        }
+
+        return null;
+    }
+
+    /**
+     * 获取attr Id的方法
+     *
+     * @param attributeName
+     * @param appKey
+     * @return
+     */
+    private String getAttributeId(String eventId, String attributeName, String appKey) {
+
+        if (attributeName == null || attributeName.isEmpty() || appKey == null || appKey.isEmpty()) {
+            return null;
+        }
+
+        // 查询别名库表
+        EventAttributeMeta eventAttributeMeta = this.eventAttributeMetaRepository.findByAliasOrName(appKey, attributeName);
+        if (eventAttributeMeta != null) {
+            return eventAttributeMeta.getAttribute();
+        }
+
+        //查询通用属性库表
+        CommonParam byAlias = this.commonParamRepository.findByAlias(attributeName, "event");
+        if (byAlias != null) {
+            return byAlias.getParam();
+        }
+
+        //查询属性ID
+        if (eventId.startsWith("vir_")) {
+
+            //虚拟事件的属性查询
+            List<String> virtualEventList = virtualEventService.findVirtualEventList(eventId);
+            if (CollectionUtils.isEmpty(eventRepository.findByEventsAndAttr(virtualEventList, attributeName, appKey))) {
+                return attributeName;
+            }
+
+        } else {
+
+            //自然事件
+            List<Event> byAttr = eventRepository.findByAttr(attributeName, eventId, appKey);
+            if (byAttr != null && byAttr.size() > 0) {
+                return attributeName;
+            }
+        }
+
+        System.out.println(attributeName + "事件属性BUG");
+        return null;
+    }
+
+
+    /**
+     * 校验算数表达式
+     * created by sunhao 20170925
+     */
+    private boolean validateExpression(String expression) {
+
+        //判空处理,空括号处理
+        if (StringUtils.isEmpty(expression)) {
+            return false;
+        }
+
+        //1.分割以及括号处理
+        List<String> expressionList = this.splitWithBracket(expression);
+
+
+        //2,再次校验表达式的符号
+        if (!CollectionUtils.isEmpty(expressionList)) {
+
+            //2.1,元素个数校验,偶数个false
+            if (expressionList.size() % 2 == 0) {
+                return false;
+            }
+
+            //2.2,校验每个元素
+            for (int i = 0; i < expressionList.size(); i++) {
+
+                String element = expressionList.get(i);
+
+                if (element.matches("[-+*/]")) {
+                    //符号处理
+                    if (i - 1 < 0 || i + 1 >= expressionList.size() || expressionList.get(i - 1).matches("[-+*/]")
+                            || expressionList.get(i + 1).matches("[-+*/]")) {
+                        return false;
+                    }
+
+                } else if (element.startsWith("(") && element.endsWith(")")) {
+                    //如果是带括号的,递归处理
+                    if (!validateExpression(element.substring(1, element.length() - 1))) {
+                        return false;
+                    }
+
+                } else {
+                    //正常元素处理,前后若有数据,必须是符号。
+                    if ((i - 1 > 0 && !expressionList.get(i - 1).matches("[-+*/]"))
+                            || (i + 1 < expressionList.size() && !expressionList.get(i + 1).matches("[-+*/]"))
+                            || (element.contains("(") && element.contains(")"))) {
+                        return false;
+                    }
+                }
+            }
+
+            return true;
+        }
+
+        return false;
+    }
+
+    /**
+     * 按照算数运算元素分割,顺带校验括号,括号不合法时返回NULL
+     * created by sunhao 20170925
+     */
+    private List<String> splitWithBracket(String expression){
+
+        List<String> expressionList = new ArrayList<>();
+
+        String[] splitExpression = expression.split("(?<=[-+*/()])|(?=[-+*/()])");
+
+        //1.首先校验括号,顺便聚合括号内容。
+        int bracketNumber = 0;
+        StringBuilder bracketElement = new StringBuilder();
+
+        for (String element : splitExpression) {
+
+            //『(』开头,或者括号数不是0,进入括号统计
+            if (element.equals("(") || bracketNumber > 0) {
+
+                bracketElement.append(element);
+
+                if (element.equals("(")) {
+                    bracketNumber++;
+                } else if (element.equals(")")) {
+                    bracketNumber--;
+                }
+
+                //括号完全匹配之后
+                if (bracketNumber == 0) {
+
+                    expressionList.add(bracketElement.toString());
+
+                    //清空括号内容
+                    bracketElement.delete(0, bracketElement.length());
+                }
+
+            } else {
+                expressionList.add(element);
+            }
+        }
+
+        //括号不匹配,
+        if(bracketNumber != 0){
+            return null;
+        }
+
+        return expressionList;
+    }
+
+
+
+
+    public static void main(String[] args) throws Exception {
+
+        ExpressionServiceImpl expressionService = new ExpressionServiceImpl();
+
+        System.out.println(expressionService.validateExpression("(付费.设备数-(注册.设备均次数))/付费.设备数-注册.设备均次数*付费.设备数"));
+
+    }
+
+}
diff --git a/src/main/java/com/reyun/service/impl/FunnelServiceImpl.java b/src/main/java/com/reyun/service/impl/FunnelServiceImpl.java
new file mode 100644
index 0000000..d42dd0b
--- /dev/null
+++ b/src/main/java/com/reyun/service/impl/FunnelServiceImpl.java
@@ -0,0 +1,433 @@
+package com.reyun.service.impl;
+
+import com.reyun.dic.CustomMenuType;
+import com.reyun.dic.LogEnumType;
+import com.reyun.dic.OperateObjectEnumType;
+import com.reyun.dic.RoleEnumType;
+import com.reyun.model.*;
+import com.reyun.repository.*;
+import com.reyun.service.*;
+import com.reyun.taskexecute.ReportCallable;
+import com.reyun.util.*;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.util.CollectionUtils;
+import org.springframework.util.StringUtils;
+
+import java.util.*;
+import java.util.concurrent.ExecutionException;
+import java.util.concurrent.ExecutorService;
+import java.util.concurrent.Executors;
+import java.util.concurrent.Future;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
+@Service
+public class FunnelServiceImpl implements FunnelService {
+
+    private static Logger logger = LoggerFactory.getLogger(FunnelServiceImpl.class);
+
+    @Autowired
+    AppRepository appRepository;
+    @Autowired
+    FunnelRepository funnelRepository;
+    @Autowired
+    AccountRepository accountRepository;
+    @Autowired
+    EventtableMetadataRepository eventtableMetadataRepository;
+    @Autowired
+    UserGroupRepository usergroupRepository;
+    @Autowired
+    EventRepository eventRepository;
+    @Autowired
+    UserLogService userLogService;
+    @Autowired
+    AuthService authService;
+    @Autowired
+    CommonParamService commonParamService;
+    @Autowired
+    CustomMenuTemplateRepository customMenuTemplateRepository;
+    @Autowired
+    ConfigParamService configparamService;
+
+    @Autowired
+    EventMetaRepository eventMetaRepository;
+
+    @Autowired
+    ReportService reportService;
+
+    private final static String TEMPLATE_TYPE_FUNNEL = "funnel";
+
+    @Override
+    public Map<String, List> funnelReport(Long funnel, String startDate, String endDate, String usergroup, boolean isList,
+                                          String dimention, Account account, boolean isDevice, boolean isProfile) {
+
+        Funnel funnelObject = funnelRepository.findOne(funnel);
+        App app = appRepository.findOne(funnelObject.getApp());
+
+        userLogService.insertLog(account, LogEnumType.FIND.getCode(), LogEnumType.FIND.getName() + "漏斗报表" + funnelObject.getName(),
+                funnelObject, app.getId(), OperateObjectEnumType.REPORT.getCode());
+
+
+        List<Event> eventsAlias = eventRepository.findEventAliasByEvent(app.getAppkey(), Arrays.asList(funnelObject.getEvents().split(",")));
+        Map<String, String> eventAliasMap = new HashMap<>();
+        Map<String, CommonEvent> commonEventMap = commonParamService.findAllCommonEvent();
+        for (Event event : eventsAlias) {
+            EventMeta eventMeta = eventMetaRepository.findByEventId(event.getAppkey(), event.getEventName());
+            String aliasStr = event.getEventName();
+            if (eventMeta != null) {
+                aliasStr = StringUtil.isEmpty(eventMeta.getAlias()) ? event.getEventName() : eventMeta.getAlias();
+            }
+            if (commonEventMap.containsKey(event.getEventName())) {
+                aliasStr = commonEventMap.get(event.getEventName()).getAlias();
+            }
+            String eventName = event.getEventName();
+            eventAliasMap.put(event.getEventName(), aliasStr);
+        }
+
+        String sqlTemp = funnelObject.getQuerySql();
+
+        //数据权限过滤
+
+        String demoApps = configparamService.getConfigParamByKey("demo_appkey");
+        List<String> demoAppList = Arrays.asList(demoApps.split(","));
+        sqlTemp = sqlTemp.replace("$dimentionwhere","");
+        sqlTemp = sqlTemp.replace("$startdatetime", DateUtil.parseDate(startDate).getTime() / 1000 + "");
+        sqlTemp = sqlTemp.replace("$startdate", startDate);
+        int interval = DateUtil.getDateInterval(startDate, endDate).size();
+        String firstEnddate = DateUtil.getBeforeDays(startDate, -interval);
+        String secondEnddate = DateUtil.getBeforeDays(startDate, -(interval + funnelObject.getWindow() - 1));
+        sqlTemp = sqlTemp.replace("$firstenddate", firstEnddate);
+        sqlTemp = sqlTemp.replace("$secondenddate", secondEnddate);
+        sqlTemp = sqlTemp.replace("$interval", interval + "");
+        boolean isCompare = false;
+        String dimentionKey = dimention;
+
+        sqlTemp = sqlTemp.replaceAll("xwho", "a.xwho");
+        sqlTemp = sqlTemp.replaceAll("xwhat", "a.xwhat");
+        sqlTemp = sqlTemp.replaceAll("xwhen", "a.xwhen");
+        sqlTemp = sqlTemp.replaceAll(" ds", " a.ds");
+        sqlTemp = sqlTemp.replaceAll("_deviceid", "a._deviceid");
+
+
+        String dataSource = "";
+        String  firstdimentionselect="";
+        String[] split = sqlTemp.split(" ");
+        for (String s : split) {
+            s.replaceAll(" ", "");
+            if (s.startsWith("tkio")) {
+                dataSource = s;
+                break;
+            }
+        }
+
+
+        if(!(sqlTemp.indexOf("_cid")==-1)){
+            sqlTemp=sqlTemp.replace("_cid","a._cid");
+        }
+
+        if(!(sqlTemp.indexOf("_campaignid")==-1)){
+            sqlTemp=sqlTemp.replace("_campaignid","a._campaignid");
+        }
+
+
+
+        Pattern pattern = Pattern.compile("\\$dimentionselect");
+        Matcher matcher = pattern.matcher(sqlTemp);
+        sqlTemp=matcher.replaceFirst("\\$firstdimentionselect");
+
+        String afterReplace = new String(dataSource + " a \\$joinprofile");
+        String beforeReplace = new String(dataSource);
+
+        sqlTemp = sqlTemp.replaceAll(beforeReplace, afterReplace);
+
+        String totalSql = sqlTemp;
+        String usergroupName = "";
+
+        if (StringUtil.isEmpty(usergroup)) {
+            sqlTemp = sqlTemp.replace("$usergroup", "");
+            totalSql = totalSql.replace("$usergroup", "");
+        } else {
+            usergroupName = usergroupRepository.findOne(Long.valueOf(usergroup)).getName();
+            isCompare = true;
+            totalSql = totalSql.replace("$usergroup", "");
+            sqlTemp = sqlTemp
+                    .replace(
+                            "$usergroup",
+                            String.format(
+                                    " and a.xwho in (select objectid as xwho from %s where id='%s' and objecttype='xwho')",
+                                    Constant.usergroupTable, usergroup));
+        }
+
+        if (StringUtil.isEmpty(dimention) || dimention.equals("usergroup")) {
+
+            sqlTemp = sqlTemp.replace("$dimentionaftergroupby", "");
+            sqlTemp = sqlTemp.replace("$dimentionselect", "");
+            sqlTemp = sqlTemp.replace("$dimentionwhere", "");
+            sqlTemp = sqlTemp.replace("$dimentiongroupby", "");
+            sqlTemp = sqlTemp.replace("$joinprofile", "");
+            sqlTemp = sqlTemp.replace("$firstdimentionselect", "");
+
+            totalSql = totalSql.replace("$dimentionselect", "");
+            totalSql = totalSql.replace("$dimentionwhere", "");
+            totalSql = totalSql.replace("$dimentionaftergroupby", "");
+            totalSql = totalSql.replace("$dimentiongroupby", "");
+            totalSql = totalSql.replace("$joinprofile", "");
+            totalSql = totalSql.replace("$firstdimentionselect", "");
+
+
+        } else {
+            isCompare = true;
+            totalSql = totalSql.replace("$dimentionselect", "");
+            totalSql = totalSql.replace("$dimentionwhere", "");
+            totalSql = totalSql.replace("$dimentionaftergroupby", "");
+            totalSql = totalSql.replace("$dimentiongroupby", "");
+            totalSql = totalSql.replace("$joinprofile", "");
+            totalSql = totalSql.replace("$firstdimentionselect", "");
+
+            if (isProfile) {
+                sqlTemp = sqlTemp.replace("$dimentionselect", "b." + dimention + ",");
+                sqlTemp = sqlTemp.replace("$dimentionaftergroupby", "," + " b." + dimention);
+                sqlTemp = sqlTemp.replace("$dimentiongroupby", " group by " + dimention);
+                sqlTemp = sqlTemp.replace("$dimentionwhere", "");
+                sqlTemp = sqlTemp.replace("$firstdimentionselect", dimention + ", ");
+
+                String profileSource = Constant.profileTable + app.getAppkey();
+                sqlTemp = sqlTemp.replace("$joinprofile", "right join " + profileSource + " b on a.xwho=b.xwho");
+            }else {
+                sqlTemp = sqlTemp.replace("$dimentionselect","a." + dimention + ",");
+                sqlTemp = sqlTemp.replace("$dimentionaftergroupby", "," + " a." + dimention);
+                sqlTemp = sqlTemp.replace("$dimentiongroupby", " group by " + dimention);
+                sqlTemp = sqlTemp.replace("$joinprofile", "");
+                sqlTemp = sqlTemp.replace("$dimentionwhere", "");
+                sqlTemp = sqlTemp.replace("$firstdimentionselect", dimention + ", ");
+            }
+        }
+
+
+
+        Map<String, List> result = new HashMap<>();
+
+        try {
+
+            if (!StringUtil.isEmpty(usergroup)) {
+                dimentionKey = "usergroup";
+            }
+
+            if (isCompare) {
+                //创建一个线程池
+                ExecutorService pool = Executors.newFixedThreadPool(2);
+                //创建两个有返回值的任务
+                ReportCallable c1 = new ReportCallable("funnel", totalSql, funnelObject, startDate, endDate, dimentionKey,
+                        false, true, interval, "day", null, "", eventAliasMap, null, app.getAppkey());
+                ReportCallable c2 = new ReportCallable("funnel", sqlTemp, funnelObject, startDate, endDate, dimentionKey,
+                        isCompare, false, interval, "day", usergroup, usergroupName, eventAliasMap, null, app.getAppkey());
+                //执行任务并获取Future对象
+                Future<Map<String, List>> f1 = pool.submit(c1);
+                Future<Map<String, List>> f2 = pool.submit(c2);
+                //从Future对象上获取任务的返回值,并输出到控制台
+                try {
+                    result = f1.get();
+                    List<Map<String, Object>> val1 = result.get("val");
+                    if (!result.containsKey("isempty")) {
+                        Map<String, List> result2 = f2.get();
+                        List<Map<String, Object>> val2 = result2.get("val");
+                        val1.addAll(val2);
+                    }
+                    result.put("val", val1);
+                } catch (InterruptedException e) {
+                    e.printStackTrace();
+                } catch (ExecutionException e) {
+                    e.printStackTrace();
+                }
+                //关闭线程池
+                pool.shutdown();
+            } else {
+
+                Map<String, String> conditions = new HashMap<String, String>();
+                conditions.put("sql", sqlTemp);
+                conditions.put("dbtype", "presto");
+                conditions.put("datatype", "list");
+                conditions.put("reportname", "funnel");
+                conditions.put("appid", app.getAppkey());
+
+
+                Map<String, List> responseJson = reportService.reportBySql(conditions);
+
+
+                result = SqlUtil.format4Funnel(responseJson, Arrays.asList(funnelObject.getEvents().split(",")), isCompare,
+                        dimentionKey, startDate, endDate, false, usergroup, usergroupName, eventAliasMap, null);
+            }
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+
+
+        return result;
+    }
+
+    /**
+     * 漏斗分享成看单之后查询数据
+     * created by sunhao 20170426
+     */
+    @Override
+    public Map<String, List> funnelDataQuery(String startDate, String endDate, String eventInfo, String events, int window,
+                                             Long appId, boolean isDevice) {
+
+        Map<String, List> result = new HashMap<>();
+
+        App app = appRepository.findOne(appId);
+
+        //eventAliasMap
+        List<Event> eventsAlias = eventRepository.findEventAliasByEvent(app.getAppkey(), Arrays.asList(events.split(",")));
+        Map<String, String> eventAliasMap = new HashMap<>();
+        Map<String, CommonEvent> commonEventMap = commonParamService.findAllCommonEvent();
+        for (Event event : eventsAlias) {
+            EventMeta eventMeta = eventMetaRepository.findByEventId(event.getAppkey(), event.getEventName());
+            String alias = event.getEventName();
+            if (eventMeta != null) {
+                alias = StringUtil.isEmpty(eventMeta.getAlias()) ? event.getEventName() : eventMeta.getAlias();
+            }
+            if (commonEventMap.containsKey(event.getEventName())) {
+                alias = commonEventMap.get(event.getEventName()).getAlias();
+            }
+            eventAliasMap.put(event.getEventName(), alias);
+        }
+
+        //生成SQL
+        String sqlTemp = SqlUtil.generateFunnelSqlTemp(eventInfo, app.getAppkey(), window);
+
+        //日期替换
+        int interval = DateUtil.getDateInterval(startDate, endDate).size();
+        String firstEndDate = DateUtil.getBeforeDays(startDate, -interval);
+        String secondEndDate = DateUtil.getBeforeDays(startDate, -(interval + window - 1));
+
+        sqlTemp = sqlTemp.replace("$startdatetime", DateUtil.parseDate(startDate).getTime() / 1000 + "");
+        sqlTemp = sqlTemp.replace("$startdate", startDate);
+        sqlTemp = sqlTemp.replace("$firstenddate", firstEndDate);
+        sqlTemp = sqlTemp.replace("$secondenddate", secondEndDate);
+        sqlTemp = sqlTemp.replace("$interval", interval + "");
+
+        //默认查询没有用户组
+        sqlTemp = sqlTemp.replace("$usergroup", "");
+
+        //默认查询没有分类维度数据
+        sqlTemp = sqlTemp.replace("$dimentionselect", "");
+        sqlTemp = sqlTemp.replace("$dimentionwhere", "");
+        sqlTemp = sqlTemp.replace("$dimentionaftergroupby", "");
+        sqlTemp = sqlTemp.replace("$dimentiongroupby", "");
+
+        if (isDevice) {
+            sqlTemp = sqlTemp.replace("xwho", "_deviceid");
+        }
+
+        try {
+
+            Map<String, String> conditions = new HashMap<String, String>();
+            conditions.put("sql", sqlTemp);
+            conditions.put("dbtype", "presto");
+            conditions.put("datatype", "list");
+            conditions.put("appid", app.getAppkey());
+
+            Map<String, List> responseJson = reportService.reportBySql(conditions);
+
+
+            result = SqlUtil.format4Funnel(responseJson, Arrays.asList(events.split(",")), false, "", startDate,
+                    endDate, false, "", "", eventAliasMap, null);
+
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        return result;
+    }
+
+    @Override
+    public Funnel create(Funnel funnel, Long account) {
+        funnel.setAccount(account);
+        funnel.setCreateAccount(account);
+        App app = appRepository.findOne(funnel.getApp());
+        String sqlTemp = SqlUtil.generateFunnelSqlTemp(funnel.getEventInfo(), app.getAppkey(), funnel.getWindow());
+        funnel.setQuerySql(sqlTemp);
+
+        return funnelRepository.save(funnel);
+    }
+
+    @Override
+    public Funnel update(Funnel funnel, Long account) {
+        Funnel dbFunnel = funnelRepository.findOne(funnel.getId());
+        dbFunnel.setName(funnel.getName());
+        dbFunnel.setEventInfo(funnel.getEventInfo());
+        dbFunnel.setEvents(funnel.getEvents());
+        dbFunnel.setModifyTime(new Date());
+        dbFunnel.setModifyAccount(account);
+        dbFunnel.setWindow(funnel.getWindow());
+
+        App app = appRepository.findOne(dbFunnel.getApp());
+
+        String sqlTemp = SqlUtil.generateFunnelSqlTemp(funnel.getEventInfo(), app.getAppkey(), funnel.getWindow());
+        dbFunnel.setQuerySql(sqlTemp);
+
+        List<CustomMenuTemplate> templateList = customMenuTemplateRepository.findAllTemplateByOriginal(dbFunnel.getId(), TEMPLATE_TYPE_FUNNEL);
+        if(ValidateUtil.isValid(templateList)){
+            List<CustomMenuTemplate> list = new ArrayList<>();
+            for(CustomMenuTemplate cu : templateList){
+                cu.setName(dbFunnel.getName());
+                list.add(cu);
+            }
+            customMenuTemplateRepository.save(list);
+        }
+
+        return funnelRepository.save(dbFunnel);
+    }
+
+    @Override
+    public Funnel delete(Long id, Long account) {
+        Funnel dbFunnel = funnelRepository.findOne(id);
+        dbFunnel.setModifyAccount(account);
+        dbFunnel.setModifyTime(new Date());
+        dbFunnel.setDelFlag(true);
+
+        //查看是否存在看单之中,如果存在则删除。
+        List<Long> templateList = customMenuTemplateRepository.findTemplateByOriginal(id, CustomMenuType.FUNNEL.getKey());
+        if(!CollectionUtils.isEmpty(templateList)){
+            customMenuTemplateRepository.deleteTemplateByIds(account, templateList);
+        }
+
+        return funnelRepository.save(dbFunnel);
+    }
+
+    @Override
+    public Funnel findById(Long id) {
+        return funnelRepository.findOne(id);
+    }
+
+    @Override
+    public List<Funnel> findByApp(Long app) {
+        List<Funnel> funnelList = funnelRepository.findAllByApp(app);
+        List<Long> account = new ArrayList<>();
+        for (Funnel f : funnelList) {
+            account.add(f.getCreateAccount());
+        }
+        Iterable<Account> accountList = accountRepository.findAll(account);
+        Iterator<Account> a = accountList.iterator();
+        Map<Long, String> idNameMap = new HashMap<>();
+        while (a.hasNext()) {
+            Account aObject = a.next();
+            idNameMap.put(aObject.getId(), aObject.getEmail());
+        }
+        for (Funnel f : funnelList) {
+            f.setcAccount(idNameMap.get(f.getCreateAccount()));
+        }
+        return funnelList;
+    }
+
+    @Override
+    public Funnel validName(String name, Long app) {
+        return funnelRepository.findByNameAndApp(name, app);
+    }
+
+}
diff --git a/src/main/java/com/reyun/task/EmailThread.java b/src/main/java/com/reyun/task/EmailThread.java
new file mode 100644
index 0000000..ca7b40f
--- /dev/null
+++ b/src/main/java/com/reyun/task/EmailThread.java
@@ -0,0 +1,39 @@
+package com.reyun.task;
+
+import com.reyun.util.MailUtils;
+
+import java.util.List;
+
+/**
+ * Created by Administrator on 2017/5/6 0006.
+ * desc:邮件发送线程
+ */
+public class EmailThread
+        extends Thread {
+
+    private String title;
+    private String content ;
+    private List<String> receiver;
+
+    public EmailThread(){}
+
+    public EmailThread(String title, String content, List<String> receiver)
+    {
+
+        this.setName("SendEmailThread");
+        this.title = title;
+        this.content = content;
+        this.receiver=receiver;
+    }
+
+    @Override
+    public void run(){
+        try {
+            MailUtils.sendHtmlEmail(title,content,receiver);
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+
+    }
+
+}
diff --git a/src/main/java/com/reyun/taskexecute/EventReportCallable.java b/src/main/java/com/reyun/taskexecute/EventReportCallable.java
new file mode 100644
index 0000000..c015d58
--- /dev/null
+++ b/src/main/java/com/reyun/taskexecute/EventReportCallable.java
@@ -0,0 +1,68 @@
+package com.reyun.taskexecute;
+
+import com.reyun.context.AppUtils;
+import com.reyun.model.App;
+import com.reyun.service.ReportService;
+import com.reyun.service.impl.ComplicatedEventsServiceImpl;
+import net.sf.json.JSONArray;
+import net.sf.json.JSONObject;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.concurrent.Callable;
+
+/**
+ * Created by mxq on 2017/11/1.
+ */
+public class EventReportCallable implements Callable<Map<String, List>> {
+
+    protected static Logger logger = LoggerFactory.getLogger(EventReportCallable.class);
+    private ComplicatedEventsServiceImpl eventStatsService = AppUtils.getApplicationContext().getBean(ComplicatedEventsServiceImpl.class);
+    private ReportService reportService = AppUtils.getApplicationContext().getBean(ReportService.class);
+
+    private Map<String, String> conditions;
+    private List<JSONObject> selectList;
+    private JSONArray groupJsonArray;
+
+    private App app;
+    private Long accountid;
+    private String startDate;
+    private String endDate;
+    private String eventCondition;
+    private String viewType;
+
+    private Map<String, List> result;
+
+    public EventReportCallable(Map<String, String> conditions, List<JSONObject> selectList, JSONArray groupJsonArray, App app, Long accountid, String startDate, String endDate, String eventCondition, String viewType) {
+        this.conditions = conditions;
+        this.selectList = selectList;
+        this.groupJsonArray = groupJsonArray;
+        this.app = app;
+        this.accountid = accountid;
+        this.startDate = startDate;
+        this.endDate = endDate;
+        this.eventCondition = eventCondition;
+        this.viewType = viewType;
+    }
+
+    @Override
+    public Map<String, List> call() throws Exception {
+
+        if(null != conditions){
+            Map<String, List> responseJson = reportService.reportBySql(conditions);
+            //获取时间范围内按照时间粒度的所有日期
+            Map<String, String> dateStringMap = eventStatsService.getDateMapByViewFlag(startDate, endDate, viewType);
+            //格式化数据
+            result = eventStatsService.formatComplicatedEventResponse(app, accountid, responseJson, dateStringMap, groupJsonArray, selectList);
+        }else{
+            //查询合计
+            List<JSONObject> totalValue = eventStatsService.queryDistinctTotalData(app.getId(), accountid, startDate, endDate, eventCondition, viewType);
+            result = new HashMap<>();
+            result.put("totalval",totalValue);
+        }
+        return result;
+    }
+}
diff --git a/src/main/java/com/reyun/util/AwsS3Util.java b/src/main/java/com/reyun/util/AwsS3Util.java
new file mode 100644
index 0000000..9dee916
--- /dev/null
+++ b/src/main/java/com/reyun/util/AwsS3Util.java
@@ -0,0 +1,124 @@
+package com.reyun.util;
+
+
+import com.amazonaws.ClientConfiguration;
+import com.amazonaws.auth.AWSCredentials;
+import com.amazonaws.auth.BasicAWSCredentials;
+import com.amazonaws.regions.Regions;
+import com.amazonaws.services.s3.AmazonS3;
+import com.amazonaws.services.s3.AmazonS3Client;
+import com.amazonaws.services.s3.model.*;
+import com.google.common.collect.Lists;
+import com.reyun.service.impl.OpenApiServiceImpl;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import java.io.*;
+import java.util.List;
+
+public class AwsS3Util {
+    private static final Logger logger = LoggerFactory.getLogger(AwsS3Util.class);
+
+    private static AwsS3Util awsS3Util = new AwsS3Util();
+
+    private AmazonS3 s3;
+
+    private AwsS3Util() {
+        String accessKey = "";
+        String secretKey = "";
+
+        if ((accessKey != null) && (secretKey != null)) {
+            AWSCredentials credentials = new BasicAWSCredentials(accessKey, secretKey);
+
+            ClientConfiguration config = new ClientConfiguration();
+            String proxyHost = System.getProperty("http.proxyHost");
+            String proxyPort = System.getProperty("http.proxyPort");
+            if (proxyHost != null && proxyPort != null) {
+                config.setProxyHost(proxyHost);
+                config.setProxyPort(Integer.valueOf(proxyPort));
+            }
+
+            if (s3 == null)
+                s3 = new AmazonS3Client(credentials, config);
+
+            s3.setRegion(com.amazonaws.regions.Region.getRegion(Regions.CN_NORTH_1));
+        }
+    }
+
+    public static AwsS3Util getInstance() {
+        return awsS3Util;
+    }
+
+    public AmazonS3 getAmazonS3() {
+        return s3;
+    }
+
+    public List<String> getS3Keys(String bucket, String prefix) {
+        List<String> rtnList = Lists.newArrayList();
+        ObjectListing objectListing = s3.listObjects(new ListObjectsRequest()
+                .withBucketName(bucket)
+                .withPrefix(prefix));
+        for (S3ObjectSummary objectSummary : objectListing.getObjectSummaries()) {
+            rtnList.add(objectSummary.getKey());
+        }
+        return rtnList;
+    }
+
+    public long uploadStreamToS3(String bucket, String s3key, InputStream in, String contentType, long contentLength)
+            throws IOException {
+        ObjectMetadata md = new ObjectMetadata();
+        if (contentType != null)
+            md.setContentType(contentType);
+        md.setContentLength(contentLength);
+        AwsS3Util.getInstance().getAmazonS3().putObject(bucket, s3key, in, md);
+        return contentLength;
+    }
+
+    public long uploadStringToS3(String s3bucket, String s3key, String str)
+            throws IOException {
+        final byte[] bytes = str.getBytes("UTF-8");
+        BufferedInputStream bis = new BufferedInputStream(new ByteArrayInputStream(bytes));
+        try {
+            return uploadStreamToS3(s3bucket, s3key, bis, "text/plain; charset=UTF-8", bytes.length);
+        } finally {
+            IOUtil.close(bis);
+        }
+    }
+
+    public String downloadStringFromS3(String bucket, String s3key) throws IOException {
+        return new String(downloadBytesFromS3(bucket, s3key), "UTF-8");
+    }
+
+    public byte[] downloadBytesFromS3(String bucket, String s3key) throws IOException {
+        InputStream is = null;
+        ByteArrayOutputStream bos = null;
+        try {
+            is = downloadStreamFromS3(bucket, s3key);
+            bos = new ByteArrayOutputStream();
+            IOUtil.copy(is, bos);
+            return bos.toByteArray();
+        } finally {
+            if (bos != null)
+                IOUtil.close(bos);
+            if (is != null)
+                IOUtil.close(is);
+        }
+    }
+
+    public InputStream downloadStreamFromS3(String bucket, String s3key) {
+        return getS3Object(bucket, s3key).getObjectContent();
+    }
+
+    public void deleteS3Object(String bucket, String s3key) {
+        AwsS3Util.getInstance().getAmazonS3().deleteObject(bucket, s3key);
+    }
+
+    private S3Object getS3Object(String bucket, String s3key) {
+        return AwsS3Util.getInstance().getAmazonS3().getObject(bucket, s3key);
+    }
+
+    public static void main(String[] args) {
+        OpenApiServiceImpl openApiService = new OpenApiServiceImpl();
+        System.out.println(openApiService.listInfo4Toutiao("2017-09-12"));;
+    }
+}
\ No newline at end of file
diff --git a/src/main/java/com/reyun/util/BeanUtils.java b/src/main/java/com/reyun/util/BeanUtils.java
new file mode 100644
index 0000000..88c787f
--- /dev/null
+++ b/src/main/java/com/reyun/util/BeanUtils.java
@@ -0,0 +1,22 @@
+package com.reyun.util;
+
+import com.fasterxml.jackson.databind.ObjectMapper;
+
+import java.util.Map;
+
+/**
+ * Created by nolan on 16/9/28.
+ * description:
+ */
+public class BeanUtils {
+
+    public static Map bean2Map(Object obj) {
+        ObjectMapper objectMapper = new ObjectMapper();
+        return objectMapper.convertValue(obj, Map.class);
+    }
+
+    public static <T> T map2Bean(Map fromValue, Class<T> toValueType) throws IllegalArgumentException {
+        ObjectMapper objectMapper = new ObjectMapper();
+        return objectMapper.convertValue(fromValue, toValueType);
+    }
+}
diff --git a/src/main/java/com/reyun/util/CharacterUtils.java b/src/main/java/com/reyun/util/CharacterUtils.java
new file mode 100644
index 0000000..0f5fb3a
--- /dev/null
+++ b/src/main/java/com/reyun/util/CharacterUtils.java
@@ -0,0 +1,23 @@
+package com.reyun.util;
+
+import java.util.Random;  
+
+public class CharacterUtils {  
+      
+    public static String getRandomString(int length){  
+        String str="abcdefABCDEF0123456789";  
+        Random random = new Random();  
+        StringBuffer sb = new StringBuffer();  
+          
+        for(int i = 0 ; i < length; ++i){  
+            int number = random.nextInt(22);//[0,62)  
+              
+            sb.append(str.charAt(number));  
+        }  
+        return sb.toString();  
+    }
+  
+    public static void main(String[] args){  
+    	System.out.println(getRandomString(800));
+    }  
+}
diff --git a/src/main/java/com/reyun/util/CipherUtil.java b/src/main/java/com/reyun/util/CipherUtil.java
new file mode 100644
index 0000000..1050980
--- /dev/null
+++ b/src/main/java/com/reyun/util/CipherUtil.java
@@ -0,0 +1,83 @@
+package com.reyun.util;
+
+import java.security.MessageDigest;
+
+public class CipherUtil {
+	// 十六进制下数字到字符的映射数组
+	private final static String[] hexDigits = { "0", "1", "2", "3", "4", "5",
+			"6", "7", "8", "9", "a", "b", "c", "d", "e", "f" };
+
+	/** * 把inputString加密 */
+	public static String generatePassword(String inputString) {
+		return encodeByMD5(inputString);
+	}
+
+	/**
+	 * 验证输入的密码是否正确
+	 * 
+	 * @param password
+	 *            加密后的密码
+	 * @param inputString
+	 *            输入的字符串
+	 * @return 验证结果,TRUE:正确 FALSE:错误
+	 */
+	public static boolean validatePassword(String password, String inputString) {
+		if (password.equals(encodeByMD5(inputString))) {
+			return true;
+		} else {
+			return false;
+		}
+	}
+
+	/** 对字符串进行MD5加密 */
+	private static String encodeByMD5(String originString) {
+		if (originString != null) {
+			try {
+				// 创建具有指定算法名称的信息摘要
+				MessageDigest md = MessageDigest.getInstance("MD5");
+				// 使用指定的字节数组对摘要进行最后更新,然后完成摘要计算
+				byte[] results = md.digest(originString.getBytes());
+				// 将得到的字节数组变成字符串返回
+				String resultString = byteArrayToHexString(results);
+				return resultString.toUpperCase();
+			} catch (Exception ex) {
+				ex.printStackTrace();
+			}
+		}
+		return null;
+	}
+
+	/**
+	 * 转换字节数组为十六进制字符串
+	 * 
+	 * @param b 字节数组
+	 * @return 十六进制字符串
+	 */
+	private static String byteArrayToHexString(byte[] b) {
+		StringBuffer resultSb = new StringBuffer();
+		for (int i = 0; i < b.length; i++) {
+			resultSb.append(byteToHexString(b[i]));
+		}
+		return resultSb.toString();
+	}
+
+	/** 将一个字节转化成十六进制形式的字符串 */
+	private static String byteToHexString(byte b) {
+		int n = b;
+		if (n < 0)
+			n = 256 + n;
+		int d1 = n / 16;
+		int d2 = n % 16;
+		return hexDigits[d1] + hexDigits[d2];
+	}
+
+
+	public static void main(String[] args) {
+		// String str = generatePassword("123");
+		//account.getEmail()
+//		+ resource.getName() + resource.getPlatform() + dateStr
+		System.out.println(generatePassword("demo@reyun.com金融产品iOS"+DateUtil
+				.getCurrentDateStr(DateUtil.C_TIME_PATTON_DEFAULT)).toLowerCase());
+	}
+
+}
diff --git a/src/main/java/com/reyun/util/Constant.java b/src/main/java/com/reyun/util/Constant.java
new file mode 100644
index 0000000..4c72804
--- /dev/null
+++ b/src/main/java/com/reyun/util/Constant.java
@@ -0,0 +1,48 @@
+package com.reyun.util;
+
+import java.math.BigDecimal;
+import java.util.Arrays;
+import java.util.List;
+import java.util.ResourceBundle;
+
+
+
+public class Constant {
+
+	public static String CURRENT_ACCOUNT = "$CURRENT_ACCOUNT$";
+	
+	public static ResourceBundle resourceBundle = ResourceBundle.getBundle("db");
+	public static String dburl = resourceBundle.getString("db.url");
+	public static String dbusername = resourceBundle.getString("db.username");
+	public static String dbpassword = resourceBundle.getString("db.password");
+	public static String dbdriver = resourceBundle.getString("db.driver");
+
+	public static ResourceBundle resourcePrestoBundle = ResourceBundle.getBundle("presto");
+	public static String prestoDriverClass = resourcePrestoBundle.getString("presto.driver");
+	public static String prestoUrl = resourcePrestoBundle.getString("presto.url");
+	public static String prestoUsername = resourcePrestoBundle.getString("presto.username");
+
+	public static ResourceBundle resourceHiveBundle = ResourceBundle.getBundle("hive");
+	public static String hiveDriverClass = resourceHiveBundle.getString("hive.driver");
+	public static String hiveUrl = resourceHiveBundle.getString("hive.url");
+	public static String hiveUsername = resourceHiveBundle.getString("hive.username");
+	
+	public static ResourceBundle commonBundle = ResourceBundle.getBundle("common");
+	public static String profileTable = commonBundle.getString("profile.table");
+	public static String eventTable = commonBundle.getString("event.table");
+	public static String usergroupTable = commonBundle.getString("usergroup.table");
+	public static String accountCheckUrl = commonBundle.getString("account.check.url");
+
+
+
+	public static ResourceBundle mailBundle = ResourceBundle.getBundle("mail");
+	public static String mailHost = mailBundle.getString("mail.host");
+	public static String mailUsername = mailBundle.getString("mail.username");
+	public static String mailPassword = mailBundle.getString("mail.password");
+	public static String mailContentType = mailBundle.getString("mail.content_type");
+	public static String mailValidTime = mailBundle.getString("mail.valid_time");
+	
+
+	public static ResourceBundle redis = ResourceBundle.getBundle("redis");
+	public static String REDIS_IP_REQUEST_TIMES = redis.getString("redis.ip.requesttimes");
+}
diff --git a/src/main/java/com/reyun/util/DBUtil.java b/src/main/java/com/reyun/util/DBUtil.java
new file mode 100644
index 0000000..c8ac7f0
--- /dev/null
+++ b/src/main/java/com/reyun/util/DBUtil.java
@@ -0,0 +1,230 @@
+package com.reyun.util;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import java.sql.*;
+import java.util.List;
+import java.util.ResourceBundle;
+
+/**
+ * 数据库工具类
+ * @author ruijie liruijie0603@126.com
+ * @date 2014-11-28
+ */
+public class DBUtil {
+	private final static Logger logger = LoggerFactory.getLogger(DBUtil.class);
+	
+	private static DBUtil dbUtil;
+	
+	private String driverClass = "";
+	private String url = "";
+	private String username = "";
+	private String password = "";
+
+	private String prestoDriverClass = "";
+	private String prestoUrl = "";
+	private String prestoUsername = "";
+
+	private String hiveDriverClass = "";
+	private String hiveUrl = "";
+	private String hiveUsername = "";
+	
+	private DBUtil() {
+		driverClass = Constant.dbdriver;
+		url = Constant.dburl;
+		username = Constant.dbusername;
+		password = Constant.dbpassword;
+		prestoDriverClass = Constant.prestoDriverClass;
+		prestoUrl = Constant.prestoUrl;
+		prestoUsername = Constant.prestoUsername;
+		hiveDriverClass = Constant.hiveDriverClass;
+		hiveUrl = Constant.hiveUrl;
+		hiveUsername = Constant.hiveUsername;
+	}
+	
+	public static DBUtil newInstance() {
+		if (dbUtil == null) {
+			dbUtil = new DBUtil();
+		}
+		return dbUtil;
+	}
+	
+	public Connection getConn() {
+		Connection conn = null;
+		try {
+			Class.forName(driverClass);
+			conn = DriverManager.getConnection(url, username, password);
+		} catch (ClassNotFoundException e) {
+			logger.error(e.getMessage(), e);
+		} catch (SQLException e) {
+			logger.error(e.getMessage(), e);
+		}
+		
+		return conn;
+	}
+
+	public Connection getPrestoConn() {
+		Connection conn = null;
+		try {
+			Class.forName(prestoDriverClass);
+			conn = DriverManager.getConnection(prestoUrl, prestoUsername,
+					"");
+		} catch (ClassNotFoundException e) {
+			logger.error(e.getMessage(), e);
+		} catch (SQLException e) {
+			logger.error(e.getMessage(), e);
+		}
+
+		return conn;
+	}
+
+	public Connection getHiveConn() {
+		Connection conn = null;
+		try {
+			Class.forName(hiveDriverClass);
+			conn = DriverManager.getConnection(hiveUrl, hiveUsername,
+					"");
+		} catch (ClassNotFoundException e) {
+			logger.error(e.getMessage(), e);
+		} catch (SQLException e) {
+			logger.error(e.getMessage(), e);
+		}
+
+		return conn;
+	}
+	
+	public void insert(String sql) {
+		Connection conn = getConn();
+		Statement statement = null;
+		try {
+			statement = conn.createStatement();
+			statement.execute(sql);
+		} catch (SQLException e) {
+			e.printStackTrace();
+		} finally {
+			try {
+				if (statement != null)
+					statement.close();
+				if (conn != null)
+					conn.close();
+			} catch (SQLException e) {
+				e.printStackTrace();
+			}
+		}
+	}
+	
+	public ResultSet query(String sql) {
+		Connection conn = getConn();
+		Statement statement = null;
+		ResultSet rs = null;
+		try {
+			statement = conn.createStatement();
+			rs = statement.executeQuery(sql);
+		} catch (SQLException e) {
+			e.printStackTrace();
+		}
+		return rs;
+	}
+	
+	public PreparedStatement getStatement(Connection conn, String sql) {
+		PreparedStatement pstmt = null;
+		try {
+			pstmt = conn.prepareStatement(sql);
+		} catch (SQLException e) {
+			logger.error(e.getMessage(), e);
+		}
+		return pstmt;
+	}
+	
+	public void release(ResultSet rs, PreparedStatement pstmt, Connection conn) {
+		try {
+			if (rs != null) {
+				rs.close();
+				rs = null;
+			}
+		} catch (SQLException e) {
+			logger.error(e.getMessage(), e);
+		} finally {
+			try {
+				if (pstmt != null) {
+					pstmt.close();
+					pstmt = null;
+				}
+			} catch (SQLException e) {
+				logger.error(e.getMessage(), e);
+			} finally {
+				try {
+					if (conn != null) {
+						conn.close();
+						conn = null;
+					}
+				} catch (SQLException e) {
+					logger.error(e.getMessage(), e);
+				}
+			}
+		}
+	}
+	
+	
+	public static void release(ResultSet rs,Statement pstmt, Connection conn) {
+		try {
+			if (rs != null) {
+				rs.close();
+				rs = null;
+			}
+		} catch (SQLException e) {
+			logger.error(e.getMessage(), e);
+		} finally {
+			try {
+				if (pstmt != null) {
+					pstmt.close();
+					pstmt = null;
+				}
+			} catch (SQLException e) {
+				logger.error(e.getMessage(), e);
+			} finally {
+				try {
+					if (conn != null) {
+						conn.close();
+						conn = null;
+					}
+				} catch (SQLException e) {
+					logger.error(e.getMessage(), e);
+				}
+			}
+		}
+	}
+	
+	public void ExcuteNonQueryBatch(List<String> sqlList) {
+		Connection conn = null;
+		Statement _Statement = null;
+		try {
+
+			if (sqlList != null && sqlList.size() > 0) {
+				conn = getConn();
+				conn.setAutoCommit(false);
+				for (int i = 0; i < sqlList.size(); i++) {
+					_Statement = conn.createStatement();
+					
+					logger.info(sqlList.get(i));
+					_Statement.executeUpdate(sqlList.get(i));
+					// System.out.println(sqlList.get(i));
+				}
+				conn.commit();
+			}
+
+		} catch (Exception e) {
+
+			try {
+				if (_Statement != null)
+					_Statement.close();
+				if (conn != null)
+					conn.close();
+			} catch (SQLException e1) {
+				e1.printStackTrace();
+			}
+			e.printStackTrace();
+		}
+	}
+}
diff --git a/src/main/java/com/reyun/util/DateUtil.java b/src/main/java/com/reyun/util/DateUtil.java
new file mode 100644
index 0000000..4c36d69
--- /dev/null
+++ b/src/main/java/com/reyun/util/DateUtil.java
@@ -0,0 +1,1518 @@
+package com.reyun.util;
+
+import com.fasterxml.jackson.databind.DeserializationFeature;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.google.common.collect.Maps;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import java.io.IOException;
+import java.sql.Timestamp;
+import java.text.DateFormat;
+import java.text.ParseException;
+import java.text.SimpleDateFormat;
+import java.util.ArrayList;
+import java.util.Calendar;
+import java.util.Date;
+import java.util.GregorianCalendar;
+import java.util.List;
+import java.util.Map;
+import java.util.SimpleTimeZone;
+import java.util.TimeZone;
+
+/**
+ * 日期转换工具
+ */
+public class DateUtil {
+	protected static Logger logger = LoggerFactory.getLogger(DateUtil.class);
+	
+	public static final String C_DATE_DIVISION = "-";
+    
+	public static final String C_TIME_PATTON_DEFAULT = "yyyy-MM-dd HH:mm:ss";
+	public static final String C_MIN_PATTON_DEFAULT = "yyyy-MM-dd HH:mm";
+	public static final String C_DATE_PATTON_DEFAULT = "yyyy-MM-dd";
+	public static final String C_YM_PATTON_DEFAULT = "yyyy-MM";
+	public static final String C_DATA_PATTON_YYYYMMDD = "yyyyMMdd";
+	public static final String C_DATA_PATTON_MM_DD = "MM-dd";
+	public static final String C_DATA_PATTON_MM = "MM";
+	public static final String C_DATA_PATTON_HH = "HH";
+	public static final String C_TIME_PATTON_HHMM = "HH:mm";
+	public static final String C_TIME_PATTON_HHMMSS = "HH:mm:ss";
+	public static final String C_TIME_PATTON_HHMMSSMM = "HH:MM:SS:MM";
+	public static final int C_ONE_SECOND = 1000;
+	public static final int C_ONE_MINUTE = 60 * C_ONE_SECOND;
+	public static final int C_ONE_HOUR = 60 * C_ONE_MINUTE;
+	public static final long C_ONE_DAY = 24L * C_ONE_HOUR;
+
+	/**
+	 * Return the current date
+	 * 
+	 * @return - DATE<br>
+	 */
+	public static Date getCurrentDate() {
+		Calendar cal = Calendar.getInstance();
+		Date currDate = cal.getTime();
+
+		return currDate;
+	}
+
+	/**
+	 * Return the current date string
+	 * 
+	 * @return - 产生的日期字符串<br>
+	 */
+	public static String getCurrentDateStr() {
+		Calendar cal = Calendar.getInstance();
+		Date currDate = cal.getTime();
+
+		return format(currDate);
+	}
+
+	/**
+	 * Return the current date in the specified format
+	 * 
+	 * @param strFormat
+	 * @return
+	 */
+	public static String getCurrentDateStr(String strFormat) {
+		Calendar cal = Calendar.getInstance();
+		Date currDate = cal.getTime();
+
+		return format(currDate, strFormat);
+	}
+
+	/**
+	 * Parse a string and return a date value
+	 * 
+	 * @param dateValue
+	 * @return
+	 * @throws Exception
+	 */
+	public static Date parseDate(String dateValue) {
+		return parseDate(C_DATE_PATTON_DEFAULT, dateValue);
+	}
+
+	/**
+	 * Parse a strign and return a datetime value
+	 * 
+	 * @param dateValue
+	 * @return
+	 */
+	public static Date parseDateTime(String dateValue) {
+		return parseDate(C_TIME_PATTON_DEFAULT, dateValue);
+	}
+
+	/**
+	 * Parse a string and return the date value in the specified format
+	 * 
+	 * @param strFormat
+	 * @param dateValue
+	 * @return
+	 * @throws ParseException
+	 * @throws Exception
+	 */
+	public static Date parseDate(String strFormat, String dateValue) {
+		if (dateValue == null)
+			return null;
+
+		if (strFormat == null)
+			strFormat = C_DATE_PATTON_DEFAULT;
+
+		SimpleDateFormat dateFormat = new SimpleDateFormat(strFormat);
+		Date newDate = null;
+
+		try {
+			newDate = dateFormat.parse(dateValue);
+		} catch (ParseException pe) {
+			newDate = null;
+		}
+
+		return newDate;
+	}
+
+	/**
+	 * 将Timestamp类型的日期转换为系统参数定义的格式的字符串。
+	 * 
+	 * @param aTs_Datetime
+	 *            需要转换的日期。
+	 * @return 转换后符合给定格式的日期字符串
+	 */
+	public static String format(Date aTs_Datetime) {
+		return format(aTs_Datetime, C_DATE_PATTON_DEFAULT);
+	}
+
+	public static String formatMin(Date aTs_Datetime) {
+		return format(aTs_Datetime, C_MIN_PATTON_DEFAULT);
+	}
+
+	/**
+	 * 将Timestamp类型的日期转换为系统参数定义的格式的字符串。
+	 * 
+	 * @param aTs_Datetime
+	 *            需要转换的日期。
+	 * @return 转换后符合给定格式的日期字符串
+	 */
+	public static String formatTime(Date aTs_Datetime) {
+		return format(aTs_Datetime, C_TIME_PATTON_DEFAULT);
+	}
+
+	/**
+	 * 将Date类型的日期转换为系统参数定义的格式的字符串。
+	 * 
+	 * @param aTs_Datetime
+	 * @param as_Pattern
+	 * @return
+	 */
+	public static String format(Date aTs_Datetime, String as_Pattern) {
+		if (aTs_Datetime == null || as_Pattern == null)
+			return null;
+
+		SimpleDateFormat dateFromat = new SimpleDateFormat();
+		dateFromat.applyPattern(as_Pattern);
+
+		return dateFromat.format(aTs_Datetime);
+	}
+
+	/**
+	 * @param aTs_Datetime
+	 * @param as_Format
+	 * @return
+	 */
+	public static String formatTime(Date aTs_Datetime, String as_Format) {
+		if (aTs_Datetime == null || as_Format == null)
+			return null;
+
+		SimpleDateFormat dateFromat = new SimpleDateFormat();
+		dateFromat.applyPattern(as_Format);
+
+		return dateFromat.format(aTs_Datetime);
+	}
+
+	public static String getFormatTime(Date dateTime) {
+		return formatTime(dateTime, C_TIME_PATTON_HHMMSS);
+	}
+
+	public static String getFormatDate(Date dateTime) {
+		return formatTime(dateTime, C_DATE_PATTON_DEFAULT);
+	}
+
+	public static String getFormatTimeHHMM(Date dateTime) {
+		return formatTime(dateTime, C_TIME_PATTON_HHMM);
+	}
+
+	/**
+	 * @param aTs_Datetime
+	 * @param as_Pattern
+	 * @return
+	 */
+	public static String format(Timestamp aTs_Datetime, String as_Pattern) {
+		if (aTs_Datetime == null || as_Pattern == null)
+			return null;
+
+		SimpleDateFormat dateFromat = new SimpleDateFormat();
+		dateFromat.applyPattern(as_Pattern);
+
+		return dateFromat.format(aTs_Datetime);
+	}
+
+	/**
+	 * 取得指定日期N天后的日期
+	 * 
+	 * @param date
+	 * @param days
+	 * @return
+	 */
+	public static Date addDays(Date date, int days) {
+		Calendar cal = Calendar.getInstance();
+		cal.setTime(date);
+
+		cal.add(Calendar.DAY_OF_MONTH, days);
+
+		return cal.getTime();
+	}
+
+	public static Date addMin(Date date, int min) {
+		Calendar cal = Calendar.getInstance();
+		cal.setTime(date);
+
+		cal.add(Calendar.MINUTE, min);
+
+		return cal.getTime();
+	}
+
+	/**
+	 * 计算两个日期之间相差的天数
+	 * 
+	 * @param date1
+	 * @param date2
+	 * @return
+	 */
+	public static int daysBetween(Date date1, Date date2) {
+		Calendar cal = Calendar.getInstance();
+		cal.setTime(date1);
+		long time1 = cal.getTimeInMillis();
+		cal.setTime(date2);
+		long time2 = cal.getTimeInMillis();
+		long between_days = (time2 - time1) / (1000 * 3600 * 24);
+
+		return Integer.parseInt(String.valueOf(between_days));
+	}
+
+	public static int daysBetween(String date1, String date2)
+			throws ParseException {
+		SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
+		Calendar cal = Calendar.getInstance();
+		cal.setTime(sdf.parse(date1));
+		long time1 = cal.getTimeInMillis();
+		cal.setTime(sdf.parse(date2));
+		long time2 = cal.getTimeInMillis();
+		long between_days = (time2 - time1) / (1000 * 3600 * 24);
+
+		return Integer.parseInt(String.valueOf(between_days));
+	}
+
+	/**
+	 * 计算两个日期之间相差的分钟
+	 * 
+	 * @param date1
+	 * @param date2
+	 * @return
+	 */
+	public static int minBetween(Date date1, Date date2) {
+		Calendar cal = Calendar.getInstance();
+		cal.setTime(date1);
+		long time1 = cal.getTimeInMillis();
+		cal.setTime(date2);
+		long time2 = cal.getTimeInMillis();
+		long between_min = (time2 - time1) / (1000 * 60);
+
+		return Integer.parseInt(String.valueOf(between_min));
+	}
+
+	/**
+	 * 计算两个日期之间相差的秒
+	 * 
+	 * @param date1
+	 * @param date2
+	 * @return
+	 */
+	public static int secondBetween(Date date1, Date date2) {
+		Calendar cal = Calendar.getInstance();
+		cal.setTime(date1);
+		long time1 = cal.getTimeInMillis();
+		cal.setTime(date2);
+		long time2 = cal.getTimeInMillis();
+		long between_sec = (time2 - time1) / 1000;
+
+		return Integer.parseInt(String.valueOf(between_sec));
+	}
+
+	public static int minsBetween(Date date2) {
+		Date date1 = new Date();
+		Calendar cal = Calendar.getInstance();
+		cal.setTime(date1);
+		long time1 = cal.getTimeInMillis();
+		cal.setTime(date2);
+		long time2 = cal.getTimeInMillis();
+		long between_min = (time2 - time1) / (1000 * 60);
+
+		return Integer.parseInt(String.valueOf(between_min));
+	}
+
+	/**
+	 * 计算当前日期相对于"1977-12-01"的天数
+	 * 
+	 * @param date
+	 * @return
+	 */
+	public static long getRelativeDays(Date date) {
+		Date relativeDate = DateUtil.parseDate("yyyy-MM-dd", "1977-12-01");
+
+		return DateUtil.daysBetween(relativeDate, date);
+	}
+
+	public static Date getDateBeforTwelveMonth() {
+		String date = "";
+		Calendar cla = Calendar.getInstance();
+		cla.setTime(getCurrentDate());
+		int year = cla.get(Calendar.YEAR) - 1;
+		int month = cla.get(Calendar.MONTH) + 1;
+		if (month > 9) {
+			date = String.valueOf(year) + C_DATE_DIVISION
+					+ String.valueOf(month) + C_DATE_DIVISION + "01";
+		} else {
+			date = String.valueOf(year) + C_DATE_DIVISION + "0"
+					+ String.valueOf(month) + C_DATE_DIVISION + "01";
+		}
+
+		Date dateBefore = parseDate(date);
+		return dateBefore;
+	}
+
+	/**
+	 * 传入时间字符串,加一天后返回Date
+	 * 
+	 * @param date
+	 *            时间 格式 YYYY-MM-DD
+	 * @return
+	 */
+	public static Date addDate(String date, String pattern) {
+		if (date == null) {
+			return null;
+		}
+
+		Date tempDate = parseDate(pattern, date);
+		String year = format(tempDate, "yyyy");
+		String month = format(tempDate, "MM");
+		String day = format(tempDate, "dd");
+
+		GregorianCalendar calendar = new GregorianCalendar(
+				Integer.parseInt(year), Integer.parseInt(month) - 1,
+				Integer.parseInt(day));
+
+		calendar.add(GregorianCalendar.DATE, 1);
+		return calendar.getTime();
+	}
+
+	public static String dateToStr(long ll) {
+
+		// long hour=dd/3600000;
+		// long min=(dd%3600000)/60000;
+		// long sec=((dd%3600000)%60000)/1000;
+		// long mil=((dd%3600000)%60000)%1000;
+		double dd = ll;
+		String ss = String.valueOf(dd / 1000) + " 秒";
+		return ss;
+	}
+
+	public static int compare_date(String DATE1, String DATE2) {
+
+		DateFormat df = new SimpleDateFormat("yyyy-MM-dd");
+		try {
+			Date dt1 = df.parse(DATE1);
+			Date dt2 = df.parse(DATE2);
+			if (dt1.getTime() > dt2.getTime()) {
+				// System.out.println("DATE1 大于 DATE2");
+				return 1;
+			} else if (dt1.getTime() < dt2.getTime()) {
+				// System.out.println("DATE1 小于 DATE2");
+				return -1;
+			} else {
+				return 0;
+			}
+		} catch (Exception exception) {
+			logger.error(exception.getMessage());
+		}
+		return 0;
+	}
+
+	public static int compareDate(String dt1, String dt2) {
+		Date d1 = parseDate(null, dt1);
+		Date d2 = parseDate(null, dt2);
+		return compareDate(d1, d2);
+	}
+
+	public static int compareDate(Date dt1, Date dt2) {
+
+		try {
+
+			if (dt1.getTime() > dt2.getTime()) {
+				// //System.out.println("DATE1 大于 DATE2");
+				return 1;
+			} else if (dt1.getTime() < dt2.getTime()) {
+				// //System.out.println("DATE1 小于 DATE2");
+				return -1;
+			} else {
+				return 0;
+			}
+		} catch (Exception exception) {
+			logger.error(exception.getMessage());
+		}
+		return 0;
+	}
+
+	public static int compareD(Date dt1) {
+		Date dt2 = new Date();
+		try {
+
+			if (dt1.getTime() > dt2.getTime()) {
+				// //System.out.println("DATE1 大于 DATE2");
+				return 1;
+			} else if (dt1.getTime() < dt2.getTime()) {
+				// //System.out.println("DATE1 小于 DATE2");
+				return -1;
+			} else {
+				return 0;
+			}
+		} catch (Exception exception) {
+			logger.error(exception.getMessage());
+		}
+		return 1;
+	}
+
+	public static int getW(Date date) {
+		Calendar cal = Calendar.getInstance();
+		cal.setTime(date);
+		int w = cal.get(Calendar.DAY_OF_WEEK) - 1;
+		if (w == 0) {
+			w = 7;
+		}
+		return w;
+	}
+
+	// 取得yyyyMMdd字符串
+	public static String getYYYYMMDD() {
+		Date nowDate = new Date();
+		return format(nowDate, C_DATA_PATTON_YYYYMMDD);
+
+	}
+
+	public static String stringToString(String strTime, String formatType)
+			throws ParseException, java.text.ParseException {
+		SimpleDateFormat formatter = new SimpleDateFormat(formatType);
+		Date date = null;
+		date = formatter.parse(strTime);
+		return format(date);
+	}
+
+	// 取得yyyyWW(年加周)
+	public static String getYYYYWW(String dateStr) {
+		String yyyyWW = dateStr.substring(0, 4);
+		String MM = dateStr.substring(5, 7);
+		SimpleDateFormat dateFormat = new SimpleDateFormat(
+				C_DATE_PATTON_DEFAULT);
+		try {
+			Date date = dateFormat.parse(dateStr);
+			Calendar calendar = Calendar.getInstance();
+			calendar.setTime(date);
+			calendar.setFirstDayOfWeek(Calendar.MONDAY);
+			calendar.setMinimalDaysInFirstWeek(4);
+			int w = calendar.get(Calendar.WEEK_OF_YEAR);
+			if (w == 0) {
+				w = 1;
+			}
+			String week = "";
+			if (w < 10) {
+				week = "0" + w;
+			} else {
+				week = "" + w;
+			}
+			if (MM.equals("12") && week.equals("01")) {
+				yyyyWW = String.valueOf(Integer.parseInt(yyyyWW) + 1);
+			} else if (MM.equals("01") && (week.equals("53") || week.equals("52"))) {
+				yyyyWW = String.valueOf(Integer.parseInt(yyyyWW) - 1);
+			}
+			yyyyWW = yyyyWW + week;
+		} catch (Exception e) {
+			logger.error(e.getMessage());
+		}
+		return yyyyWW;
+
+	}
+
+	// 取得yyyyWW(年加周)
+	public static String getYYYYW(String dateStr) {
+		String yyyyW = dateStr.substring(0, 4);
+		String MM = dateStr.substring(5, 7);
+		SimpleDateFormat dateFormat = new SimpleDateFormat(
+				C_DATE_PATTON_DEFAULT);
+		try {
+			Date date = dateFormat.parse(dateStr);
+			Calendar calendar = Calendar.getInstance();
+			calendar.setTime(date);
+			calendar.setMinimalDaysInFirstWeek(4);
+			calendar.setFirstDayOfWeek(Calendar.MONDAY);
+			int w = calendar.get(Calendar.WEEK_OF_YEAR);
+			if (w == 0) {
+				w = 1;
+			}
+			String week = "";
+			week = "" + w;
+
+			if (MM.equals("12") && week.equals("1")) {
+				yyyyW = String.valueOf(Integer.parseInt(yyyyW) + 1);
+			}
+			yyyyW = yyyyW + week;
+		} catch (Exception e) {
+			logger.error(e.getMessage());
+		}
+		return yyyyW;
+
+	}
+
+	// 取得yyyyWW(年加周)
+	public static String getYYYY_WW(String dateStr) {
+		String yyyyWW = dateStr.substring(0, 4);
+		SimpleDateFormat dateFormat = new SimpleDateFormat(
+				C_DATE_PATTON_DEFAULT);
+		try {
+			Date date = dateFormat.parse(dateStr);
+			Calendar calendar = Calendar.getInstance();
+			calendar.setTime(date);
+			calendar.setFirstDayOfWeek(Calendar.MONDAY);
+			calendar.setMinimalDaysInFirstWeek(4);
+			int w = calendar.get(Calendar.WEEK_OF_YEAR);
+			String week = "";
+			if (w < 10) {
+				week = "0" + w;
+			} else {
+				week = "" + w;
+			}
+			yyyyWW = yyyyWW + "-" + week;
+		} catch (Exception e) {
+			logger.error(e.getMessage());
+		}
+		return yyyyWW;
+
+	}
+
+	public static String getYYYYMM(String dateStr) {
+		String yyyyMM = dateStr.substring(0, 4);
+		SimpleDateFormat dateFormat = new SimpleDateFormat(
+				C_DATE_PATTON_DEFAULT);
+		try {
+			Date date = dateFormat.parse(dateStr);
+			Calendar calendar = Calendar.getInstance();
+			calendar.setTime(date);
+			int m = calendar.get(Calendar.MONTH) + 1;
+			String month = "";
+			if (m < 10) {
+				month = "0" + m;
+			} else {
+				month = "" + m;
+			}
+			yyyyMM = yyyyMM + month;
+		} catch (Exception e) {
+			logger.error(e.getMessage());
+		}
+		return yyyyMM;
+
+	}
+
+	public static String getMM(String dateStr) {
+		SimpleDateFormat dateFormat = new SimpleDateFormat(
+				C_DATE_PATTON_DEFAULT);
+		String month = "";
+		try {
+			Date date = dateFormat.parse(dateStr);
+			Calendar calendar = Calendar.getInstance();
+			calendar.setTime(date);
+			int m = calendar.get(Calendar.MONTH) + 1;
+
+			if (m < 10) {
+				month = "0" + m;
+			} else {
+				month = "" + m;
+			}
+
+		} catch (Exception e) {
+			logger.error(e.getMessage());
+		}
+		return month;
+
+	}
+
+	public static String getYYYYM(String dateStr) {
+		String yyyyM = dateStr.substring(0, 4);
+		SimpleDateFormat dateFormat = new SimpleDateFormat(
+				C_DATE_PATTON_DEFAULT);
+		try {
+			Date date = dateFormat.parse(dateStr);
+			Calendar calendar = Calendar.getInstance();
+			calendar.setTime(date);
+			int m = calendar.get(Calendar.MONTH) + 1;
+			String month = "";
+
+			month = "" + m;
+
+			yyyyM = yyyyM + month;
+		} catch (Exception e) {
+			logger.error(e.getMessage());
+		}
+		return yyyyM;
+
+	}
+
+	public static List<String> getDateInterval(String startDate, String endDate) {
+		SimpleDateFormat dateFormat = new SimpleDateFormat(
+				C_DATE_PATTON_DEFAULT);
+		List<String> dateIntervaList = new ArrayList<String>();
+
+		try {
+			dateIntervaList.add(startDate);
+			Date start = dateFormat.parse(startDate);
+			Date end = dateFormat.parse(endDate);
+
+			Calendar startCalendar = Calendar.getInstance();
+			startCalendar.setTime(start);
+
+			Calendar endCalendar = Calendar.getInstance();
+			endCalendar.setTime(end);
+
+			Calendar tempCalendar = startCalendar;
+
+			tempCalendar.add(Calendar.DAY_OF_YEAR, 1);
+			while (tempCalendar.before(endCalendar)) {
+				dateIntervaList.add(dateFormat.format(tempCalendar.getTime()));
+				tempCalendar.add(Calendar.DAY_OF_YEAR, 1);
+			}
+			if (!startDate.equals(endDate)) {
+				dateIntervaList.add(endDate);
+			}
+
+		} catch (ParseException e) {
+			logger.error(e.getMessage());
+		}
+
+		return dateIntervaList;
+	}
+
+	public static int getWeek(Date date) {
+		Calendar c = new GregorianCalendar();
+		c.setFirstDayOfWeek(Calendar.MONDAY);
+		c.setMinimalDaysInFirstWeek(4);
+		c.setTime(date);
+		c.set(Calendar.DAY_OF_WEEK, c.getFirstDayOfWeek()); // Monday
+		return c.get(Calendar.WEEK_OF_YEAR);
+	}
+
+	/**
+	 * 返回某一天所在月的最后一天的日期
+	 */
+	public static String getLastDayOfMonth(Date date) {
+		Calendar c = convert(date);
+		int MaxDay = c.getActualMaximum(Calendar.DAY_OF_MONTH);
+		// 按你的要求设置时间
+		c.set(c.get(Calendar.YEAR), c.get(Calendar.MONTH), MaxDay, 23, 59, 59);
+		return format(c.getTime());
+	}
+
+	/**
+	 * 返回某一天所在月的第一天的日期
+	 */
+	public static String getFirstDayOfMonth(Date date) {
+		Calendar c = convert(date);
+		// 按你的要求设置时间
+		c.set(c.get(Calendar.YEAR), c.get(Calendar.MONTH), 1, 23, 59, 59);
+		return format(c.getTime());
+	}
+
+	/**
+	 * 将日期转换为日历
+	 * 
+	 * @param date
+	 *            日期
+	 * @return 日历
+	 */
+	private static Calendar convert(Date date) {
+		Calendar calendar = Calendar.getInstance();
+		calendar.setTime(date);
+		return calendar;
+	}
+
+	public static boolean isLastDayOfMonth(Date date) {
+		Calendar c = Calendar.getInstance();
+		c.setTime(date);
+		if (c.get(Calendar.DATE) == c.getActualMaximum(Calendar.DAY_OF_MONTH)) {
+			return true;
+		} else {
+			return false;
+		}
+	}
+
+	public static String conditionFormat(String str) {
+		str = "'" + str.replaceAll(",", "','") + "'";
+		return str;
+	}
+
+	// 取得MM-dd字符串
+	public static String getMMDD() {
+		Date nowDate = new Date();
+		return format(nowDate, C_DATA_PATTON_MM_DD);
+
+	}
+
+	// 取得hh字符串
+	public static String getHH() {
+		Date nowDate = new Date();
+		return format(nowDate, C_DATA_PATTON_HH);
+
+	}
+
+	public static int getHH(String dateValue) {
+		Date date = parseDateTime(dateValue);
+		Calendar cal = Calendar.getInstance();
+		cal.setTime(date);
+		int hh = cal.get(Calendar.HOUR_OF_DAY);
+		return hh;
+	}
+
+	public static String addOneDay(String dateValue, String format) {
+		if (!"".equals(format)) {
+			return format(addDate(dateValue, format), format);
+
+		}
+		return format(addDate(dateValue, C_DATE_PATTON_DEFAULT),
+				C_DATE_PATTON_DEFAULT);
+	}
+
+	public static String getBeforeMonth() {
+		Calendar startCalendar = Calendar.getInstance();
+		startCalendar.setTime(new Date());
+		startCalendar.add(Calendar.DAY_OF_YEAR, -30);
+		String beforeMonth = format(startCalendar.getTime(),
+				C_DATA_PATTON_YYYYMMDD);
+		return beforeMonth;
+	}
+
+	public static String getBeforeDays(int days) {
+		Calendar startCalendar = Calendar.getInstance();
+		startCalendar.setTime(new Date());
+		startCalendar.add(Calendar.DAY_OF_YEAR, -days);
+		String beforeDays = format(startCalendar.getTime(),
+				C_DATE_PATTON_DEFAULT);
+		return beforeDays;
+	}
+
+	public static String getBeforeDays(String date, int days) {
+		Calendar startCalendar = Calendar.getInstance();
+		startCalendar.setTime(parseDate(date));
+		startCalendar.add(Calendar.DAY_OF_YEAR, -days);
+		String beforeDays = format(startCalendar.getTime(),
+				C_DATE_PATTON_DEFAULT);
+		return beforeDays;
+	}
+
+	public static String getBeforeWeeks(int weeks) {
+		Calendar startCalendar = Calendar.getInstance();
+		startCalendar.setFirstDayOfWeek(Calendar.MONDAY);
+		startCalendar.setTime(new Date());
+		startCalendar.setMinimalDaysInFirstWeek(4);
+		startCalendar.add(Calendar.WEEK_OF_YEAR, -weeks);
+		String year = startCalendar.get(Calendar.YEAR) + "";
+		int w = startCalendar.get(Calendar.WEEK_OF_YEAR);
+		String week = "";
+		if (w < 10) {
+			week = "0" + w;
+		} else {
+			week = "" + w;
+		}
+		// System.out.println(year + week);
+		return year + week;
+	}
+
+	public static String getAfterWeeks(String dateStr, int weeks) {
+		SimpleDateFormat sdf = new SimpleDateFormat(C_DATE_PATTON_DEFAULT);
+		Date date = null;
+		try {
+			date = sdf.parse(dateStr);
+		} catch (ParseException e) {
+			logger.error(e.getMessage());
+		}
+		Calendar startCalendar = Calendar.getInstance();
+		startCalendar.setFirstDayOfWeek(Calendar.MONDAY);
+		startCalendar.setMinimalDaysInFirstWeek(4);
+		startCalendar.setTime(date);
+		if (weeks != 0) {
+			startCalendar.add(Calendar.WEEK_OF_YEAR, weeks);
+			String year = startCalendar.get(Calendar.YEAR) + "";
+			int w = startCalendar.get(Calendar.WEEK_OF_YEAR);
+			if (w < 10) {
+				return year + "0" + w;
+			} else {
+				return year + w;
+			}
+		} else {
+			return getYYYYWW(format(date));
+		}
+	}
+
+	public static String getBeforeWeeks(String end, int weeks) {
+		Calendar endCalendar = Calendar.getInstance();
+		int endyear = Integer.valueOf(end.substring(0, 4));
+		int endweek = Integer.valueOf(end.length() == 5 ? end.substring(4, 5)
+				: end.substring(4, 6));
+		endCalendar.setWeekDate(endyear, endweek, Calendar.MONDAY);
+		endCalendar.setMinimalDaysInFirstWeek(4);
+
+		endCalendar.add(Calendar.WEEK_OF_YEAR, -weeks);
+		String year = endCalendar.get(Calendar.YEAR) + "";
+		int w = endCalendar.get(Calendar.WEEK_OF_YEAR);
+		return year + w;
+	}
+
+	public static String getBeforeMonths(String end, int months) {
+		Calendar endCalendar = Calendar.getInstance();
+		int endyear = Integer.valueOf(end.substring(0, 4));
+		int endmonth = Integer.valueOf(end.length() == 5 ? end.substring(4, 5)
+				: end.substring(4, 6));
+		endCalendar.set(Calendar.YEAR, endyear);
+		endCalendar.set(Calendar.MONTH, endmonth);
+		if (months > 0) {
+			endCalendar.add(Calendar.MONTH, -months);
+			String year = endCalendar.get(Calendar.YEAR) + "";
+			int m = endCalendar.get(Calendar.MONTH);
+			if (m < 10) {
+				return year + "0" + m;
+			} else {
+				return year + m;
+			}
+		} else {
+			endCalendar.set(Calendar.MONTH, endmonth - 1);
+			System.out.println(format(endCalendar.getTime()));
+			return getYYYYMM(format(endCalendar.getTime()));
+		}
+	}
+
+	public static List<String> getWeeks(String start, String end) {
+		Calendar startCalendar = Calendar.getInstance();
+		int startyear = Integer.valueOf(start.substring(0, 4));
+		int startweek = Integer.valueOf(start.length() == 5 ? start.substring(
+				4, 5) : start.substring(4, 6));
+		startCalendar.setWeekDate(startyear, startweek, Calendar.MONDAY);
+		startCalendar.setMinimalDaysInFirstWeek(4);
+
+		Calendar endCalendar = Calendar.getInstance();
+		int endyear = Integer.valueOf(end.substring(0, 4));
+		int endweek = Integer.valueOf(end.length() == 5 ? end.substring(4, 5)
+				: end.substring(4, 6));
+		endCalendar.setWeekDate(endyear, endweek, Calendar.MONDAY);
+		endCalendar.setMinimalDaysInFirstWeek(4);
+
+		Calendar tempCalendar = startCalendar;
+
+		List<String> weeks = new ArrayList<String>();
+		SimpleDateFormat dateFormat = new SimpleDateFormat(
+				C_DATE_PATTON_DEFAULT);
+		if (startyear == 2016)
+			tempCalendar.add(Calendar.DAY_OF_YEAR, 7);
+		while (tempCalendar.before(endCalendar)) {
+			if (!weeks.contains(getYYYYWW(dateFormat.format(tempCalendar
+					.getTime()))))
+				weeks.add(getYYYYWW(dateFormat.format(tempCalendar.getTime())));
+			tempCalendar.add(Calendar.DAY_OF_YEAR, 7);
+		}
+		if (startCalendar.equals(endCalendar)) {
+			if (!weeks.contains(getYYYYWW(dateFormat.format(startCalendar
+					.getTime()))))
+				weeks.add(getYYYYWW(dateFormat.format(startCalendar.getTime())));
+		}
+		if (!weeks.contains(end)) {
+			weeks.add(end);
+		}
+		return weeks;
+	}
+
+	public static List<String> getMonths(String start, String end) {
+		Calendar startCalendar = Calendar.getInstance();
+		int startyear = Integer.valueOf(start.substring(0, 4));
+		int startmonth = Integer.valueOf(start.length() == 5 ? start.substring(
+				4, 5) : start.substring(4, 6));
+		startCalendar.set(Calendar.YEAR, startyear);
+		startCalendar.set(Calendar.MONTH, startmonth - 1);
+
+		Calendar endCalendar = Calendar.getInstance();
+		int endyear = Integer.valueOf(end.substring(0, 4));
+		int endmonth = Integer.valueOf(end.length() == 5 ? end.substring(4, 5)
+				: end.substring(4, 6));
+		endCalendar.set(Calendar.YEAR, endyear);
+		endCalendar.set(Calendar.MONTH, endmonth - 1);
+
+		Calendar tempCalendar = startCalendar;
+
+		List<String> months = new ArrayList<String>();
+		SimpleDateFormat dateFormat = new SimpleDateFormat(
+				C_DATE_PATTON_DEFAULT);
+
+		while (tempCalendar.before(endCalendar)) {
+			if (!months.contains(getYYYYMM(dateFormat.format(tempCalendar
+					.getTime()))))
+				months.add(getYYYYMM(dateFormat.format(tempCalendar.getTime())));
+			tempCalendar.add(Calendar.DAY_OF_YEAR,
+					tempCalendar.getActualMaximum(Calendar.DATE) - 1);
+		}
+		if (startCalendar.equals(endCalendar)) {
+			if (!months.contains(getYYYYMM(dateFormat.format(startCalendar
+					.getTime()))))
+				months.add(getYYYYMM(dateFormat.format(startCalendar.getTime())));
+		}
+		if (!months.contains(end)) {
+			months.add(end);
+		}
+		return months;
+	}
+
+	public static String getBeforeMonths(int months) {
+		Calendar startCalendar = Calendar.getInstance();
+		startCalendar.setTime(new Date());
+		startCalendar.add(Calendar.MONTH, -months);
+		String year = startCalendar.get(Calendar.YEAR) + "";
+		int m = startCalendar.get(Calendar.MONTH);
+		m = m + 1;
+		String month = "";
+		if (m < 10) {
+			month = "0" + m;
+		} else {
+			month = "" + m;
+		}
+		// System.out.println(year + month);
+		return year + month;
+	}
+
+	public static String getAfterMonths(String dateStr, int months) {
+		Date date = DateUtil.parseDate(dateStr);
+		Calendar startCalendar = Calendar.getInstance();
+		startCalendar.setTime(date);
+		int oldm = startCalendar.get(Calendar.MONTH);
+		logger.debug((oldm+1)+"");
+		logger.debug(startCalendar.get(Calendar.YEAR) + "");
+		startCalendar.add(Calendar.MONTH, months);
+		int m = startCalendar.get(Calendar.MONTH);
+		m = m + 1;
+		logger.debug(m+"");
+		String month = "";
+		if (m < 10) {
+			month = "0" + m;
+		} else {
+			month = "" + m;
+		}
+		logger.debug(startCalendar.get(Calendar.YEAR) + "");
+		String year = startCalendar.get(Calendar.YEAR) + "";
+		// System.out.println(year + month);
+		return year + month;
+	}
+
+	public static String convertWeekToDate(String dateStr) {
+		String year = dateStr.substring(0, 4);
+		String week = "";
+		if (dateStr.length() == 5) {
+			week = dateStr.substring(4, 5);
+		} else {
+			week = dateStr.substring(4, 6);
+		}
+		int w = Integer.valueOf(week);
+		int y = Integer.valueOf(year);
+		Calendar startCalendar = Calendar.getInstance();
+		startCalendar.setFirstDayOfWeek(Calendar.MONDAY);
+		startCalendar.set(Calendar.YEAR, y);
+		startCalendar.set(Calendar.WEEK_OF_YEAR, w);
+		startCalendar.setMinimalDaysInFirstWeek(4);
+		// String day=format(startCalendar.getTime(),C_DATA_PATTON_YYYYMMDD );
+		Date day = startCalendar.getTime();
+
+		String firstDay = format(getFirstDayOfWeek(day), C_DATE_PATTON_DEFAULT);
+		String lastDay = format(getLastDayOfWeek(day), C_DATE_PATTON_DEFAULT);
+		return firstDay + "至" + lastDay;
+
+	}
+
+	/**
+	 * 获取某一周号的第一天.
+	 * 
+	 * @param weekStr
+	 * @return
+	 */
+	public static String getFirstDayOfWeek(String weekStr) {
+		String year = weekStr.substring(0, 4);
+		String week = "";
+		if (weekStr.length() == 5) {
+			week = weekStr.substring(4, 5);
+		} else {
+			week = weekStr.substring(4, 6);
+		}
+		int w = Integer.valueOf(week);
+		int y = Integer.valueOf(year);
+		Calendar startCalendar = Calendar.getInstance();
+		startCalendar.setFirstDayOfWeek(Calendar.MONDAY);
+		startCalendar.set(Calendar.YEAR, y);
+		startCalendar.set(Calendar.WEEK_OF_YEAR, w);
+		startCalendar.setMinimalDaysInFirstWeek(4);
+		// String day=format(startCalendar.getTime(),C_DATA_PATTON_YYYYMMDD );
+		Date day = startCalendar.getTime();
+		return format(getFirstDayOfWeek(day), C_DATE_PATTON_DEFAULT);
+	}
+
+	/**
+	 * 获取某一周号的最后一天.
+	 * 
+	 * @param weekStr
+	 * @return
+	 */
+	public static String getLastDayOfWeek(String weekStr) {
+		String year = weekStr.substring(0, 4);
+		String week = "";
+		if (weekStr.length() == 5) {
+			week = weekStr.substring(4, 5);
+		} else {
+			week = weekStr.substring(4, 6);
+		}
+		int w = Integer.valueOf(week);
+		int y = Integer.valueOf(year);
+		Calendar startCalendar = Calendar.getInstance();
+		startCalendar.setFirstDayOfWeek(Calendar.MONDAY);
+		startCalendar.set(Calendar.YEAR, y);
+		startCalendar.set(Calendar.WEEK_OF_YEAR, w);
+		startCalendar.setMinimalDaysInFirstWeek(4);
+		// String day=format(startCalendar.getTime(),C_DATA_PATTON_YYYYMMDD );
+		Date day = startCalendar.getTime();
+		return format(getLastDayOfWeek(day), C_DATE_PATTON_DEFAULT);
+	}
+
+	/** */
+	/**
+	 * 取得某天所在周的第一天
+	 * 
+	 * @param date
+	 * @return
+	 */
+	public static Date getFirstDayOfWeek(Date date) {
+		Calendar c = new GregorianCalendar();
+		c.setFirstDayOfWeek(Calendar.MONDAY);
+		c.setTime(date);
+		c.setMinimalDaysInFirstWeek(4);
+		c.set(Calendar.DAY_OF_WEEK, c.getFirstDayOfWeek());
+		return c.getTime();
+	}
+	
+	public static String getFirstDayStrOfWeek(Date date) {
+		return format(getFirstDayOfWeek(date));
+	}
+	
+	public static String getLastDayStrOfWeek(Date date) {
+		return format(getLastDayOfWeek(date));
+	}
+
+	/** */
+	/**
+	 * 取得某天所在周的最后一天
+	 * 
+	 * @param date
+	 * @return
+	 */
+	public static Date getLastDayOfWeek(Date date) {
+		Calendar c = new GregorianCalendar();
+		c.setFirstDayOfWeek(Calendar.MONDAY);
+		c.setTime(date);
+		c.setMinimalDaysInFirstWeek(4);
+		c.set(Calendar.DAY_OF_WEEK, c.getFirstDayOfWeek() + 6);
+		return c.getTime();
+	}
+
+	/**
+	 * 某一个月号第一天和最后一天
+	 * 
+	 * @param date
+	 * @return
+	 */
+	public static String getFirstday_Lastday_Month(String dateStr) {
+		String year = dateStr.substring(0, 4);
+		String month = "";
+		if (dateStr.length() == 5) {
+			month = dateStr.substring(4, 5);
+		} else {
+			month = dateStr.substring(4, 6);
+		}
+		int m = Integer.valueOf(month);
+		int y = Integer.valueOf(year);
+		Calendar startCalendar = Calendar.getInstance();
+		startCalendar.setFirstDayOfWeek(Calendar.MONDAY);
+		startCalendar.set(Calendar.YEAR, y);
+		startCalendar.set(Calendar.MONTH, m);
+		// String day=format(startCalendar.getTime(),C_DATA_PATTON_YYYYMMDD );
+		Date day = startCalendar.getTime();
+
+		SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd");
+		Calendar calendar = Calendar.getInstance();
+		calendar.setTime(day);
+		calendar.add(Calendar.MONTH, -1);
+		Date theDate = calendar.getTime();
+
+		// 第一天
+		GregorianCalendar gcLast = (GregorianCalendar) Calendar.getInstance();
+		gcLast.setTime(theDate);
+		gcLast.set(Calendar.DAY_OF_MONTH, 1);
+		String day_first = df.format(gcLast.getTime());
+		// StringBuffer str = new
+		// StringBuffer().append(day_first).append(" 00:00:00");
+		// day_first = str.toString();
+
+		// 最后一天
+		calendar.add(Calendar.MONTH, 1); // 加一个月
+		calendar.set(Calendar.DATE, 1); // 设置为该月第一天
+		calendar.add(Calendar.DATE, -1); // 再减一天即为上个月最后一天
+		String day_last = df.format(calendar.getTime());
+		// StringBuffer endStr = new
+		// StringBuffer().append(day_last).append(" 23:59:59");
+		// day_last = endStr.toString();
+
+		return day_first + "至" + day_last;
+	}
+
+	/**
+	 * 某一个月号第一天
+	 * 
+	 * @param date
+	 * @return
+	 */
+	public static String getFirstdayOfMonth(String monthno) {
+		String year = monthno.substring(0, 4);
+		String month = "";
+//		if (monthno.length() == 5) {
+//			month = monthno.substring(4, 5);
+//		} else {
+//		}
+		month = monthno.substring(4);
+		int m = Integer.valueOf(month);
+		int y = Integer.valueOf(year);
+		Calendar startCalendar = Calendar.getInstance();
+		startCalendar.setFirstDayOfWeek(Calendar.MONDAY);
+        startCalendar.set(Calendar.DATE,1);
+		startCalendar.set(Calendar.YEAR, y);
+		startCalendar.set(Calendar.MONTH, m);
+		// String day=format(startCalendar.getTime(),C_DATA_PATTON_YYYYMMDD );
+		Date day = startCalendar.getTime();
+
+		SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd");
+		Calendar calendar = Calendar.getInstance();
+		calendar.setTime(day);
+		calendar.add(Calendar.MONTH, -1);
+		Date theDate = calendar.getTime();
+
+		// 第一天
+		GregorianCalendar gcLast = (GregorianCalendar) Calendar.getInstance();
+		gcLast.setTime(theDate);
+		gcLast.set(Calendar.DAY_OF_MONTH, 1);
+		String day_first = df.format(gcLast.getTime());
+
+		return day_first;
+	}
+
+	/**
+	 * 某一个月号最后一天
+	 * 
+	 * @param date
+	 * @return
+	 */
+	public static String getLastdayOfMonth(String monthno) {
+		String year = monthno.substring(0, 4);
+		String month = "";
+		if (monthno.length() == 5) {
+			month = monthno.substring(4, 5);
+		} else {
+			month = monthno.substring(4, 6);
+		}
+		int m = Integer.valueOf(month);
+		int y = Integer.valueOf(year);
+		Calendar startCalendar = Calendar.getInstance();
+		startCalendar.setFirstDayOfWeek(Calendar.MONDAY);
+        startCalendar.set(Calendar.DATE,1);
+        startCalendar.set(Calendar.YEAR, y);
+		startCalendar.set(Calendar.MONTH, m);
+		// String day=format(startCalendar.getTime(),C_DATA_PATTON_YYYYMMDD );
+		Date day = startCalendar.getTime();
+
+		SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd");
+		Calendar calendar = Calendar.getInstance();
+		calendar.setTime(day);
+		calendar.add(Calendar.MONTH, -1);
+
+		// 最后一天
+		calendar.add(Calendar.MONTH, 1); // 加一个月
+		calendar.set(Calendar.DATE, 1); // 设置为该月第一天
+		calendar.add(Calendar.DATE, -1); // 再减一天即为上个月最后一天
+		String day_last = df.format(calendar.getTime());
+
+		return day_last;
+	}
+
+	public static long getMillons(String hh, String mm) {
+		SimpleDateFormat sdf = new SimpleDateFormat(C_MIN_PATTON_DEFAULT);
+		sdf.setTimeZone(new SimpleTimeZone(SimpleTimeZone.UTC_TIME, "UTC"));
+
+		Date nowDate = new Date();
+		String date = format(nowDate, C_DATE_PATTON_DEFAULT);
+		date = date + " " + hh + ":" + mm;
+		// System.out.println(date);
+		
+		Date date2=parseDate(C_MIN_PATTON_DEFAULT, date);
+		 
+		Date utcDate = null;
+		try {
+			utcDate = sdf.parse(date);
+		} catch (ParseException e) {
+			// TODO Auto-generated catch block
+			e.printStackTrace();
+		}
+		return utcDate.getTime();
+	}
+
+	public static long getMillons(String date) {
+		SimpleDateFormat sdf = new SimpleDateFormat(C_DATA_PATTON_YYYYMMDD);
+		sdf.setTimeZone(new SimpleTimeZone(SimpleTimeZone.UTC_TIME, "UTC"));
+
+		Date utcDate = null;
+		try {
+			utcDate = sdf.parse(date);
+		} catch (ParseException e) {
+			// TODO Auto-generated catch block
+			e.printStackTrace();
+		}
+		return utcDate.getTime();
+	}
+
+	public static Date getFirstRunTime(String time) {
+		long daySpan = 24L * 60 * 60 * 1000;
+		// 规定的每天时间15:33:30运行
+		final SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd '" + time
+				+ ":00:00'");
+		// 首次运行时间
+		Date startTime = null;
+		try {
+			startTime = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").parse(sdf
+					.format(new Date()));
+		} catch (ParseException e) {
+			// TODO Auto-generated catch block
+			e.printStackTrace();
+		}
+
+		// 如果今天的已经过了 首次运行时间就改为明天
+		if (System.currentTimeMillis() > startTime.getTime()) {
+			startTime = new Date(startTime.getTime() + daySpan);
+		}
+		return startTime;
+	}
+
+	public static List<String> getEveryWeek(String startDate, String endDate) {
+		List<String> wwSet = new ArrayList<String>();
+		List<String> everyday = getDateInterval(startDate, endDate);
+		String _yyyyww;
+		for (String date : everyday) {
+			_yyyyww = getYYYYWW(date);
+			// if (_yyyyww.substring(4, 5).equals("0")) {
+			// if (!wwSet.contains(getYYYYW(date)))
+			// wwSet.add(getYYYYW(date));
+			// } else {
+			// }
+			if (!wwSet.contains(_yyyyww))
+				wwSet.add(_yyyyww);
+		}
+		return wwSet;
+	}
+
+	// public static List<String> getEveryWeekBySE(String start, String end) {
+	//
+	// }
+
+	public static List<String> getEveryMonth(String startDate, String endDate) {
+		List<String> mmSet = new ArrayList<String>();
+		List<String> everyday = getDateInterval(startDate, endDate);
+		String _yyyymm;
+		for (String date : everyday) {
+			_yyyymm = getYYYYMM(date);
+			// if (_yyyymm.substring(4, 5).equals("0")) {
+			// if (!mmSet.contains(getYYYYM(date)))
+			// mmSet.add(getYYYYM(date));
+			// } else {
+			// }
+			if (!mmSet.contains(_yyyymm))
+				mmSet.add(_yyyymm);
+		}
+		return mmSet;
+	}
+
+	public static List<String> getTimeIntegval() {
+		List<String> timeList = new ArrayList<String>();
+		String _i, _j, _t;
+
+		for (int i = 0; i < 24; i++) {
+			if (i < 10) {
+				_i = "0" + i;
+			} else {
+				_i = i + "";
+			}
+			for (int j = 0; j < 60; j++) {
+				if (j % 5 == 0) {
+					if (j < 10) {
+						_j = "0" + j;
+					} else {
+						_j = j + "";
+					}
+					_t = _i + ":" + _j;
+					timeList.add(_t);
+				}
+			}
+		}
+		return timeList;
+	}
+
+	/**
+	 * 当前时间点>=10,返回昨天;否则返回前天.
+	 * 
+	 * @return 昨天或者前天.
+	 */
+	public static String getIDFAQueryDate() {
+		Date date = new Date();
+		int time = date.getHours();
+		if (time >= 10) {
+			return getBeforeDays(1);
+		} else {
+			return getBeforeDays(2);
+		}
+	}
+
+	private static DateFormat format = new SimpleDateFormat(
+			"yyyy-MM-dd HH:mm:ss");
+
+	/**
+	 * 得到UTC时间,类型为字符串,格式为"yyyy-MM-dd HH:mm"<br />
+	 * 如果获取失败,返回null
+	 * 
+	 * @return
+	 */
+	public static String getUTCTimeStr() {
+		StringBuilder UTCTimeBuffer = new StringBuilder();
+		// 1、取得本地时间:
+		Calendar cal = Calendar.getInstance();
+		// 2、取得时间偏移量:
+		int zoneOffset = cal.get(java.util.Calendar.ZONE_OFFSET);
+		// 3、取得夏令时差:
+		int dstOffset = cal.get(java.util.Calendar.DST_OFFSET);
+		// 4、从本地时间里扣除这些差量,即可以取得UTC时间:
+		cal.add(java.util.Calendar.MILLISECOND, -(zoneOffset + dstOffset));
+		System.out.println(cal.getTimeInMillis());
+		int year = cal.get(Calendar.YEAR);
+		int month = cal.get(Calendar.MONTH) + 1;
+		int day = cal.get(Calendar.DAY_OF_MONTH);
+		int hour = cal.get(Calendar.HOUR_OF_DAY);
+		int minute = cal.get(Calendar.MINUTE);
+		int seconds = cal.get(Calendar.SECOND);
+		UTCTimeBuffer.append(year).append("-").append(month).append("-")
+				.append(day);
+		UTCTimeBuffer.append(" ").append(hour).append(":").append(minute)
+				.append(":").append(seconds);
+		try {
+			format.parse(UTCTimeBuffer.toString());
+			return UTCTimeBuffer.toString();
+		} catch (ParseException e) {
+			logger.error(e.getMessage());
+		}
+		return null;
+	}
+
+	/**
+	 * 得到UTC时间,类型为字符串,格式为"yyyy-MM-dd HH:mm"<br />
+	 * 如果获取失败,返回null
+	 * 
+	 * @return
+	 */
+	public static long getUTCTimeLong() {
+		StringBuilder UTCTimeBuffer = new StringBuilder();
+		// 1、取得本地时间:
+		Calendar cal = Calendar.getInstance();
+		// 2、取得时间偏移量:
+		int zoneOffset = cal.get(java.util.Calendar.ZONE_OFFSET);
+		// 3、取得夏令时差:
+		int dstOffset = cal.get(java.util.Calendar.DST_OFFSET);
+		// 4、从本地时间里扣除这些差量,即可以取得UTC时间:
+		cal.add(java.util.Calendar.MILLISECOND, -(zoneOffset + dstOffset));
+		return cal.getTimeInMillis();
+	}
+
+	/**
+	 * 将UTC时间转换为东八区时间
+	 * 
+	 * @param UTCTime
+	 * @return
+	 */
+	public static String getLocalTimeFromUTC(String UTCTime) {
+		java.util.Date UTCDate = null;
+		String localTimeStr = null;
+		try {
+			UTCDate = format.parse(UTCTime);
+			format.setTimeZone(TimeZone.getTimeZone("GMT-8"));
+			localTimeStr = format.format(UTCDate);
+		} catch (ParseException e) {
+			logger.error(e.getMessage());
+		}
+
+		return localTimeStr;
+	}
+
+	/**
+	 * 将UTC时间转换为东八区时间
+	 * 
+	 * @param UTCTime
+	 * @return
+	 */
+	public static String getLocalTimeFromUTC(long UTCTime) {
+		java.util.Date UTCDate = new Date(UTCTime);
+		String localTimeStr = null;
+		format.setTimeZone(TimeZone.getTimeZone("GMT-8"));
+		localTimeStr = format.format(UTCDate);
+
+		return localTimeStr;
+	}
+
+	/**
+	 * 秒转化成天时分秒
+	 * 
+	 * @param ms
+	 * @return
+	 */
+	public static String formatTime(long ms) {
+
+		int ss = 1000;
+		int mi = ss * 60;
+		int hh = mi * 60;
+		int dd = hh * 24;
+
+		long day = ms / dd;
+		long hour = (ms - day * dd) / hh;
+		long minute = (ms - day * dd - hour * hh) / mi;
+		long second = (ms - day * dd - hour * hh - minute * mi) / ss;
+		long milliSecond = ms - day * dd - hour * hh - minute * mi - second
+				* ss;
+
+		String strDay = day < 10 ? "0" + day : "" + day; // 天
+		String strHour = hour < 10 ? "0" + hour : "" + hour;// 小时
+		String strMinute = minute < 10 ? "0" + minute : "" + minute;// 分钟
+		String strSecond = second < 10 ? "0" + second : "" + second;// 秒
+		String strMilliSecond = milliSecond < 10 ? "0" + milliSecond : ""
+				+ milliSecond;// 毫秒
+		strMilliSecond = milliSecond < 100 ? "0" + strMilliSecond : ""
+				+ strMilliSecond;
+
+		return strDay + " 天 " + strHour + " 时 " + strMinute + " 分钟 " + strSecond
+				+ " 秒";
+	}
+	
+	public static String parseDateTimeByLong(Long time) {
+		Date date = new Date(time);
+		SimpleDateFormat sdf=new SimpleDateFormat(C_TIME_PATTON_DEFAULT);
+		return sdf.format(date);
+	}
+
+	public static void main(String[] args) {
+		// String UTCTimeStr = getUTCTimeStr() ;
+		// System.out.println(UTCTimeStr);
+		// System.out.println(getLocalTimeFromUTC(UTCTimeStr));
+		//
+		// System.out.println(getLocalTimeFromUTC(getUTCTimeLong()));
+		// System.out.println(getFirstDayOfMonth(parseDate("2016-02-03")));
+		// System.out.println(getLastDayOfMonth(parseDate("2016-02-03")));
+		//
+		// System.out.println(getFirstday_Lastday_Month("201602"));
+//		System.out.println(getFirstdayOfMonth("201602"));
+//		System.out.println(getLastdayOfMonth("201602"));
+
+//		long time = 1494066492782L;
+//		Date date = new Date(time);
+//		System.out.println(date);
+//
+//		String newdate = DateUtil.format(date,DateUtil.C_TIME_PATTON_DEFAULT);
+//		System.out.println(newdate);
+		System.out.print(DateUtil.getBeforeDays("2017-03-31",-70));
+
+	}
+
+}
diff --git a/src/main/java/com/reyun/util/DateUtil1.java b/src/main/java/com/reyun/util/DateUtil1.java
new file mode 100644
index 0000000..b4e97ac
--- /dev/null
+++ b/src/main/java/com/reyun/util/DateUtil1.java
@@ -0,0 +1,1496 @@
+package com.reyun.util;
+
+import java.sql.Timestamp;
+import java.text.DateFormat;
+import java.text.ParseException;
+import java.text.SimpleDateFormat;
+import java.util.ArrayList;
+import java.util.Calendar;
+import java.util.Date;
+import java.util.GregorianCalendar;
+import java.util.List;
+import java.util.SimpleTimeZone;
+import java.util.TimeZone;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * 日期转换工具
+ */
+public class DateUtil1 {
+	protected static Logger logger = LoggerFactory.getLogger(DateUtil1.class);
+	
+	public static final String C_DATE_DIVISION = "-";
+    
+	public static final String C_TIME_PATTON_DEFAULT = "yyyy-MM-dd HH:mm:ss";
+	public static final String C_MIN_PATTON_DEFAULT = "yyyy-MM-dd HH:mm";
+	public static final String C_DATE_PATTON_DEFAULT = "yyyy-MM-dd";
+	public static final String C_YM_PATTON_DEFAULT = "yyyy-MM";
+	public static final String C_DATA_PATTON_YYYYMMDD = "yyyyMMdd";
+	public static final String C_DATA_PATTON_MM_DD = "MM-dd";
+	public static final String C_DATA_PATTON_MM = "MM";
+	public static final String C_DATA_PATTON_HH = "HH";
+	public static final String C_TIME_PATTON_HHMM = "HH:mm";
+	public static final String C_TIME_PATTON_HHMMSS = "HH:mm:ss";
+	public static final String C_TIME_PATTON_HHMMSSMM = "HH:MM:SS:MM";
+	public static final int C_ONE_SECOND = 1000;
+	public static final int C_ONE_MINUTE = 60 * C_ONE_SECOND;
+	public static final int C_ONE_HOUR = 60 * C_ONE_MINUTE;
+	public static final long C_ONE_DAY = 24L * C_ONE_HOUR;
+
+	/**
+	 * Return the current date
+	 * 
+	 * @return - DATE<br>
+	 */
+	public static Date getCurrentDate() {
+		Calendar cal = Calendar.getInstance();
+		Date currDate = cal.getTime();
+
+		return currDate;
+	}
+
+	/**
+	 * Return the current date string
+	 * 
+	 * @return - 产生的日期字符串<br>
+	 */
+	public static String getCurrentDateStr() {
+		Calendar cal = Calendar.getInstance();
+		Date currDate = cal.getTime();
+
+		return format(currDate);
+	}
+
+	/**
+	 * Return the current date in the specified format
+	 * 
+	 * @param strFormat
+	 * @return
+	 */
+	public static String getCurrentDateStr(String strFormat) {
+		Calendar cal = Calendar.getInstance();
+		Date currDate = cal.getTime();
+
+		return format(currDate, strFormat);
+	}
+
+	/**
+	 * Parse a string and return a date value
+	 * 
+	 * @param dateValue
+	 * @return
+	 * @throws Exception
+	 */
+	public static Date parseDate(String dateValue) {
+		return parseDate(C_DATE_PATTON_DEFAULT, dateValue);
+	}
+
+	/**
+	 * Parse a strign and return a datetime value
+	 * 
+	 * @param dateValue
+	 * @return
+	 */
+	public static Date parseDateTime(String dateValue) {
+		return parseDate(C_TIME_PATTON_DEFAULT, dateValue);
+	}
+
+	/**
+	 * Parse a string and return the date value in the specified format
+	 * 
+	 * @param strFormat
+	 * @param dateValue
+	 * @return
+	 * @throws ParseException
+	 * @throws Exception
+	 */
+	public static Date parseDate(String strFormat, String dateValue) {
+		if (dateValue == null)
+			return null;
+
+		if (strFormat == null)
+			strFormat = C_DATE_PATTON_DEFAULT;
+
+		SimpleDateFormat dateFormat = new SimpleDateFormat(strFormat);
+		Date newDate = null;
+
+		try {
+			newDate = dateFormat.parse(dateValue);
+		} catch (ParseException pe) {
+			newDate = null;
+		}
+
+		return newDate;
+	}
+
+	/**
+	 * 将Timestamp类型的日期转换为系统参数定义的格式的字符串。
+	 * 
+	 * @param aTs_Datetime
+	 *            需要转换的日期。
+	 * @return 转换后符合给定格式的日期字符串
+	 */
+	public static String format(Date aTs_Datetime) {
+		return format(aTs_Datetime, C_DATE_PATTON_DEFAULT);
+	}
+
+	public static String formatMin(Date aTs_Datetime) {
+		return format(aTs_Datetime, C_MIN_PATTON_DEFAULT);
+	}
+
+	/**
+	 * 将Timestamp类型的日期转换为系统参数定义的格式的字符串。
+	 * 
+	 * @param aTs_Datetime
+	 *            需要转换的日期。
+	 * @return 转换后符合给定格式的日期字符串
+	 */
+	public static String formatTime(Date aTs_Datetime) {
+		return format(aTs_Datetime, C_TIME_PATTON_DEFAULT);
+	}
+
+	/**
+	 * 将Date类型的日期转换为系统参数定义的格式的字符串。
+	 * 
+	 * @param aTs_Datetime
+	 * @param as_Pattern
+	 * @return
+	 */
+	public static String format(Date aTs_Datetime, String as_Pattern) {
+		if (aTs_Datetime == null || as_Pattern == null)
+			return null;
+
+		SimpleDateFormat dateFromat = new SimpleDateFormat();
+		dateFromat.applyPattern(as_Pattern);
+
+		return dateFromat.format(aTs_Datetime);
+	}
+
+	/**
+	 * @param aTs_Datetime
+	 * @param as_Format
+	 * @return
+	 */
+	public static String formatTime(Date aTs_Datetime, String as_Format) {
+		if (aTs_Datetime == null || as_Format == null)
+			return null;
+
+		SimpleDateFormat dateFromat = new SimpleDateFormat();
+		dateFromat.applyPattern(as_Format);
+
+		return dateFromat.format(aTs_Datetime);
+	}
+
+	public static String getFormatTime(Date dateTime) {
+		return formatTime(dateTime, C_TIME_PATTON_HHMMSS);
+	}
+
+	public static String getFormatDate(Date dateTime) {
+		return formatTime(dateTime, C_DATE_PATTON_DEFAULT);
+	}
+
+	public static String getFormatTimeHHMM(Date dateTime) {
+		return formatTime(dateTime, C_TIME_PATTON_HHMM);
+	}
+
+	/**
+	 * @param aTs_Datetime
+	 * @param as_Pattern
+	 * @return
+	 */
+	public static String format(Timestamp aTs_Datetime, String as_Pattern) {
+		if (aTs_Datetime == null || as_Pattern == null)
+			return null;
+
+		SimpleDateFormat dateFromat = new SimpleDateFormat();
+		dateFromat.applyPattern(as_Pattern);
+
+		return dateFromat.format(aTs_Datetime);
+	}
+
+	/**
+	 * 取得指定日期N天后的日期
+	 * 
+	 * @param date
+	 * @param days
+	 * @return
+	 */
+	public static Date addDays(Date date, int days) {
+		Calendar cal = Calendar.getInstance();
+		cal.setTime(date);
+
+		cal.add(Calendar.DAY_OF_MONTH, days);
+
+		return cal.getTime();
+	}
+
+	public static Date addMin(Date date, int min) {
+		Calendar cal = Calendar.getInstance();
+		cal.setTime(date);
+
+		cal.add(Calendar.MINUTE, min);
+
+		return cal.getTime();
+	}
+
+	/**
+	 * 计算两个日期之间相差的天数
+	 * 
+	 * @param date1
+	 * @param date2
+	 * @return
+	 */
+	public static int daysBetween(Date date1, Date date2) {
+		Calendar cal = Calendar.getInstance();
+		cal.setTime(date1);
+		long time1 = cal.getTimeInMillis();
+		cal.setTime(date2);
+		long time2 = cal.getTimeInMillis();
+		long between_days = (time2 - time1) / (1000 * 3600 * 24);
+
+		return Integer.parseInt(String.valueOf(between_days));
+	}
+
+	public static int daysBetween(String date1, String date2)
+			throws ParseException {
+		SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
+		Calendar cal = Calendar.getInstance();
+		cal.setTime(sdf.parse(date1));
+		long time1 = cal.getTimeInMillis();
+		cal.setTime(sdf.parse(date2));
+		long time2 = cal.getTimeInMillis();
+		long between_days = (time2 - time1) / (1000 * 3600 * 24);
+
+		return Integer.parseInt(String.valueOf(between_days));
+	}
+
+	/**
+	 * 计算两个日期之间相差的分钟
+	 * 
+	 * @param date1
+	 * @param date2
+	 * @return
+	 */
+	public static int minBetween(Date date1, Date date2) {
+		Calendar cal = Calendar.getInstance();
+		cal.setTime(date1);
+		long time1 = cal.getTimeInMillis();
+		cal.setTime(date2);
+		long time2 = cal.getTimeInMillis();
+		long between_min = (time2 - time1) / (1000 * 60);
+
+		return Integer.parseInt(String.valueOf(between_min));
+	}
+
+	/**
+	 * 计算两个日期之间相差的秒
+	 * 
+	 * @param date1
+	 * @param date2
+	 * @return
+	 */
+	public static int secondBetween(Date date1, Date date2) {
+		Calendar cal = Calendar.getInstance();
+		cal.setTime(date1);
+		long time1 = cal.getTimeInMillis();
+		cal.setTime(date2);
+		long time2 = cal.getTimeInMillis();
+		long between_sec = (time2 - time1) / 1000;
+
+		return Integer.parseInt(String.valueOf(between_sec));
+	}
+
+	public static int minsBetween(Date date2) {
+		Date date1 = new Date();
+		Calendar cal = Calendar.getInstance();
+		cal.setTime(date1);
+		long time1 = cal.getTimeInMillis();
+		cal.setTime(date2);
+		long time2 = cal.getTimeInMillis();
+		long between_min = (time2 - time1) / (1000 * 60);
+
+		return Integer.parseInt(String.valueOf(between_min));
+	}
+
+	/**
+	 * 计算当前日期相对于"1977-12-01"的天数
+	 * 
+	 * @param date
+	 * @return
+	 */
+	public static long getRelativeDays(Date date) {
+		Date relativeDate = DateUtil1.parseDate("yyyy-MM-dd", "1977-12-01");
+
+		return DateUtil1.daysBetween(relativeDate, date);
+	}
+
+	public static Date getDateBeforTwelveMonth() {
+		String date = "";
+		Calendar cla = Calendar.getInstance();
+		cla.setTime(getCurrentDate());
+		int year = cla.get(Calendar.YEAR) - 1;
+		int month = cla.get(Calendar.MONTH) + 1;
+		if (month > 9) {
+			date = String.valueOf(year) + C_DATE_DIVISION
+					+ String.valueOf(month) + C_DATE_DIVISION + "01";
+		} else {
+			date = String.valueOf(year) + C_DATE_DIVISION + "0"
+					+ String.valueOf(month) + C_DATE_DIVISION + "01";
+		}
+
+		Date dateBefore = parseDate(date);
+		return dateBefore;
+	}
+
+	/**
+	 * 传入时间字符串,加一天后返回Date
+	 * 
+	 * @param date
+	 *            时间 格式 YYYY-MM-DD
+	 * @return
+	 */
+	public static Date addDate(String date, String pattern) {
+		if (date == null) {
+			return null;
+		}
+
+		Date tempDate = parseDate(pattern, date);
+		String year = format(tempDate, "yyyy");
+		String month = format(tempDate, "MM");
+		String day = format(tempDate, "dd");
+
+		GregorianCalendar calendar = new GregorianCalendar(
+				Integer.parseInt(year), Integer.parseInt(month) - 1,
+				Integer.parseInt(day));
+
+		calendar.add(GregorianCalendar.DATE, 1);
+		return calendar.getTime();
+	}
+
+	public static String dateToStr(long ll) {
+
+		// long hour=dd/3600000;
+		// long min=(dd%3600000)/60000;
+		// long sec=((dd%3600000)%60000)/1000;
+		// long mil=((dd%3600000)%60000)%1000;
+		double dd = ll;
+		String ss = String.valueOf(dd / 1000) + " 秒";
+		return ss;
+	}
+
+	public static int compare_date(String DATE1, String DATE2) {
+
+		DateFormat df = new SimpleDateFormat("yyyy-MM-dd");
+		try {
+			Date dt1 = df.parse(DATE1);
+			Date dt2 = df.parse(DATE2);
+			if (dt1.getTime() > dt2.getTime()) {
+				// System.out.println("DATE1 大于 DATE2");
+				return 1;
+			} else if (dt1.getTime() < dt2.getTime()) {
+				// System.out.println("DATE1 小于 DATE2");
+				return -1;
+			} else {
+				return 0;
+			}
+		} catch (Exception exception) {
+			logger.error(exception.getMessage());
+		}
+		return 0;
+	}
+
+	public static int compareDate(String dt1, String dt2) {
+		Date d1 = parseDate(null, dt1);
+		Date d2 = parseDate(null, dt2);
+		return compareDate(d1, d2);
+	}
+
+	public static int compareDate(Date dt1, Date dt2) {
+
+		try {
+
+			if (dt1.getTime() > dt2.getTime()) {
+				// //System.out.println("DATE1 大于 DATE2");
+				return 1;
+			} else if (dt1.getTime() < dt2.getTime()) {
+				// //System.out.println("DATE1 小于 DATE2");
+				return -1;
+			} else {
+				return 0;
+			}
+		} catch (Exception exception) {
+			logger.error(exception.getMessage());
+		}
+		return 0;
+	}
+
+	public static int compareD(Date dt1) {
+		Date dt2 = new Date();
+		try {
+
+			if (dt1.getTime() > dt2.getTime()) {
+				// //System.out.println("DATE1 大于 DATE2");
+				return 1;
+			} else if (dt1.getTime() < dt2.getTime()) {
+				// //System.out.println("DATE1 小于 DATE2");
+				return -1;
+			} else {
+				return 0;
+			}
+		} catch (Exception exception) {
+			logger.error(exception.getMessage());
+		}
+		return 1;
+	}
+
+	public static int getW(Date date) {
+		Calendar cal = Calendar.getInstance();
+		cal.setTime(date);
+		int w = cal.get(Calendar.DAY_OF_WEEK) - 1;
+		if (w == 0) {
+			w = 7;
+		}
+		return w;
+	}
+
+	// 取得yyyyMMdd字符串
+	public static String getYYYYMMDD() {
+		Date nowDate = new Date();
+		return format(nowDate, C_DATA_PATTON_YYYYMMDD);
+
+	}
+
+	public static String stringToString(String strTime, String formatType)
+			throws ParseException, java.text.ParseException {
+		SimpleDateFormat formatter = new SimpleDateFormat(formatType);
+		Date date = null;
+		date = formatter.parse(strTime);
+		return format(date);
+	}
+
+	// 取得yyyyWW(年加周)
+	public static String getYYYYWW(String dateStr) {
+		String yyyyWW = dateStr.substring(0, 4);
+		String MM = dateStr.substring(5, 7);
+		SimpleDateFormat dateFormat = new SimpleDateFormat(
+				C_DATE_PATTON_DEFAULT);
+		try {
+			Date date = dateFormat.parse(dateStr);
+			Calendar calendar = Calendar.getInstance();
+			calendar.setTime(date);
+			calendar.setFirstDayOfWeek(Calendar.MONDAY);
+			calendar.setMinimalDaysInFirstWeek(4);
+			int w = calendar.get(Calendar.WEEK_OF_YEAR);
+			if (w == 0) {
+				w = 1;
+			}
+			String week = "";
+			if (w < 10) {
+				week = "0" + w;
+			} else {
+				week = "" + w;
+			}
+			if (MM.equals("12") && week.equals("01")) {
+				yyyyWW = String.valueOf(Integer.parseInt(yyyyWW) + 1);
+			} else if (MM.equals("01") && week.equals("53")) {
+				yyyyWW = String.valueOf(Integer.parseInt(yyyyWW) - 1);
+			}
+			yyyyWW = yyyyWW + week;
+		} catch (Exception e) {
+			logger.error(e.getMessage());
+		}
+		return yyyyWW;
+
+	}
+
+	// 取得yyyyWW(年加周)
+	public static String getYYYYW(String dateStr) {
+		String yyyyW = dateStr.substring(0, 4);
+		String MM = dateStr.substring(5, 7);
+		SimpleDateFormat dateFormat = new SimpleDateFormat(
+				C_DATE_PATTON_DEFAULT);
+		try {
+			Date date = dateFormat.parse(dateStr);
+			Calendar calendar = Calendar.getInstance();
+			calendar.setTime(date);
+			calendar.setMinimalDaysInFirstWeek(4);
+			calendar.setFirstDayOfWeek(Calendar.MONDAY);
+			int w = calendar.get(Calendar.WEEK_OF_YEAR);
+			if (w == 0) {
+				w = 1;
+			}
+			String week = "";
+			week = "" + w;
+
+			if (MM.equals("12") && week.equals("1")) {
+				yyyyW = String.valueOf(Integer.parseInt(yyyyW) + 1);
+			}
+			yyyyW = yyyyW + week;
+		} catch (Exception e) {
+			logger.error(e.getMessage());
+		}
+		return yyyyW;
+
+	}
+
+	// 取得yyyyWW(年加周)
+	public static String getYYYY_WW(String dateStr) {
+		String yyyyWW = dateStr.substring(0, 4);
+		SimpleDateFormat dateFormat = new SimpleDateFormat(
+				C_DATE_PATTON_DEFAULT);
+		try {
+			Date date = dateFormat.parse(dateStr);
+			Calendar calendar = Calendar.getInstance();
+			calendar.setTime(date);
+			calendar.setFirstDayOfWeek(Calendar.MONDAY);
+			calendar.setMinimalDaysInFirstWeek(4);
+			int w = calendar.get(Calendar.WEEK_OF_YEAR);
+			String week = "";
+			if (w < 10) {
+				week = "0" + w;
+			} else {
+				week = "" + w;
+			}
+			yyyyWW = yyyyWW + "-" + week;
+		} catch (Exception e) {
+			logger.error(e.getMessage());
+		}
+		return yyyyWW;
+
+	}
+
+	public static String getYYYYMM(String dateStr) {
+		String yyyyMM = dateStr.substring(0, 4);
+		SimpleDateFormat dateFormat = new SimpleDateFormat(
+				C_DATE_PATTON_DEFAULT);
+		try {
+			Date date = dateFormat.parse(dateStr);
+			Calendar calendar = Calendar.getInstance();
+			calendar.setTime(date);
+			int m = calendar.get(Calendar.MONTH) + 1;
+			String month = "";
+			if (m < 10) {
+				month = "0" + m;
+			} else {
+				month = "" + m;
+			}
+			yyyyMM = yyyyMM + month;
+		} catch (Exception e) {
+			logger.error(e.getMessage());
+		}
+		return yyyyMM;
+
+	}
+
+	public static String getMM(String dateStr) {
+		SimpleDateFormat dateFormat = new SimpleDateFormat(
+				C_DATE_PATTON_DEFAULT);
+		String month = "";
+		try {
+			Date date = dateFormat.parse(dateStr);
+			Calendar calendar = Calendar.getInstance();
+			calendar.setTime(date);
+			int m = calendar.get(Calendar.MONTH) + 1;
+
+			if (m < 10) {
+				month = "0" + m;
+			} else {
+				month = "" + m;
+			}
+
+		} catch (Exception e) {
+			logger.error(e.getMessage());
+		}
+		return month;
+
+	}
+
+	public static String getYYYYM(String dateStr) {
+		String yyyyM = dateStr.substring(0, 4);
+		SimpleDateFormat dateFormat = new SimpleDateFormat(
+				C_DATE_PATTON_DEFAULT);
+		try {
+			Date date = dateFormat.parse(dateStr);
+			Calendar calendar = Calendar.getInstance();
+			calendar.setTime(date);
+			int m = calendar.get(Calendar.MONTH) + 1;
+			String month = "";
+
+			month = "" + m;
+
+			yyyyM = yyyyM + month;
+		} catch (Exception e) {
+			logger.error(e.getMessage());
+		}
+		return yyyyM;
+
+	}
+
+	public static List<String> getDateInterval(String startDate, String endDate) {
+		SimpleDateFormat dateFormat = new SimpleDateFormat(
+				C_DATE_PATTON_DEFAULT);
+		List<String> dateIntervaList = new ArrayList<String>();
+
+		try {
+			dateIntervaList.add(startDate);
+			Date start = dateFormat.parse(startDate);
+			Date end = dateFormat.parse(endDate);
+
+			Calendar startCalendar = Calendar.getInstance();
+			startCalendar.setTime(start);
+
+			Calendar endCalendar = Calendar.getInstance();
+			endCalendar.setTime(end);
+
+			Calendar tempCalendar = startCalendar;
+
+			tempCalendar.add(Calendar.DAY_OF_YEAR, 1);
+			while (tempCalendar.before(endCalendar)) {
+				dateIntervaList.add(dateFormat.format(tempCalendar.getTime()));
+				tempCalendar.add(Calendar.DAY_OF_YEAR, 1);
+			}
+			if (!startDate.equals(endDate)) {
+				dateIntervaList.add(endDate);
+			}
+
+		} catch (ParseException e) {
+			logger.error(e.getMessage());
+		}
+
+		return dateIntervaList;
+	}
+
+	public static int getWeek(Date date) {
+		Calendar c = new GregorianCalendar();
+		c.setFirstDayOfWeek(Calendar.MONDAY);
+		c.setMinimalDaysInFirstWeek(4);
+		c.setTime(date);
+		c.set(Calendar.DAY_OF_WEEK, c.getFirstDayOfWeek()); // Monday
+		return c.get(Calendar.WEEK_OF_YEAR);
+	}
+
+	/**
+	 * 返回某一天所在月的最后一天的日期
+	 */
+	public static String getLastDayOfMonth(Date date) {
+		Calendar c = convert(date);
+		int MaxDay = c.getActualMaximum(Calendar.DAY_OF_MONTH);
+		// 按你的要求设置时间
+		c.set(c.get(Calendar.YEAR), c.get(Calendar.MONTH), MaxDay, 23, 59, 59);
+		return format(c.getTime());
+	}
+
+	/**
+	 * 返回某一天所在月的第一天的日期
+	 */
+	public static String getFirstDayOfMonth(Date date) {
+		Calendar c = convert(date);
+		// 按你的要求设置时间
+		c.set(c.get(Calendar.YEAR), c.get(Calendar.MONTH), 1, 23, 59, 59);
+		return format(c.getTime());
+	}
+
+	/**
+	 * 将日期转换为日历
+	 * 
+	 * @param date
+	 *            日期
+	 * @return 日历
+	 */
+	private static Calendar convert(Date date) {
+		Calendar calendar = Calendar.getInstance();
+		calendar.setTime(date);
+		return calendar;
+	}
+
+	public static boolean isLastDayOfMonth(Date date) {
+		Calendar c = Calendar.getInstance();
+		c.setTime(date);
+		if (c.get(Calendar.DATE) == c.getActualMaximum(Calendar.DAY_OF_MONTH)) {
+			return true;
+		} else {
+			return false;
+		}
+	}
+
+	public static String conditionFormat(String str) {
+		str = "'" + str.replaceAll(",", "','") + "'";
+		return str;
+	}
+
+	// 取得MM-dd字符串
+	public static String getMMDD() {
+		Date nowDate = new Date();
+		return format(nowDate, C_DATA_PATTON_MM_DD);
+
+	}
+
+	// 取得hh字符串
+	public static String getHH() {
+		Date nowDate = new Date();
+		return format(nowDate, C_DATA_PATTON_HH);
+
+	}
+
+	public static int getHH(String dateValue) {
+		Date date = parseDateTime(dateValue);
+		Calendar cal = Calendar.getInstance();
+		cal.setTime(date);
+		int hh = cal.get(Calendar.HOUR_OF_DAY);
+		return hh;
+	}
+
+	public static String addOneDay(String dateValue, String format) {
+		if (!"".equals(format)) {
+			return format(addDate(dateValue, format), format);
+
+		}
+		return format(addDate(dateValue, C_DATE_PATTON_DEFAULT),
+				C_DATE_PATTON_DEFAULT);
+	}
+
+	public static String getBeforeMonth() {
+		Calendar startCalendar = Calendar.getInstance();
+		startCalendar.setTime(new Date());
+		startCalendar.add(Calendar.DAY_OF_YEAR, -30);
+		String beforeMonth = format(startCalendar.getTime(),
+				C_DATA_PATTON_YYYYMMDD);
+		return beforeMonth;
+	}
+
+	public static String getBeforeDays(int days) {
+		Calendar startCalendar = Calendar.getInstance();
+		startCalendar.setTime(new Date());
+		startCalendar.add(Calendar.DAY_OF_YEAR, -days);
+		String beforeDays = format(startCalendar.getTime(),
+				C_DATE_PATTON_DEFAULT);
+		return beforeDays;
+	}
+
+	public static String getBeforeDays(String date, int days) {
+		Calendar startCalendar = Calendar.getInstance();
+		startCalendar.setTime(parseDate(date));
+		startCalendar.add(Calendar.DAY_OF_YEAR, -days);
+		String beforeDays = format(startCalendar.getTime(),
+				C_DATE_PATTON_DEFAULT);
+		return beforeDays;
+	}
+
+	public static String getBeforeWeeks(int weeks) {
+		Calendar startCalendar = Calendar.getInstance();
+		startCalendar.setFirstDayOfWeek(Calendar.MONDAY);
+		startCalendar.setTime(new Date());
+		startCalendar.setMinimalDaysInFirstWeek(4);
+		startCalendar.add(Calendar.WEEK_OF_YEAR, -weeks);
+		String year = startCalendar.get(Calendar.YEAR) + "";
+		int w = startCalendar.get(Calendar.WEEK_OF_YEAR);
+		String week = "";
+		if (w < 10) {
+			week = "0" + w;
+		} else {
+			week = "" + w;
+		}
+		// System.out.println(year + week);
+		return year + week;
+	}
+
+	public static String getAfterWeeks(String dateStr, int weeks) {
+		SimpleDateFormat sdf = new SimpleDateFormat(C_DATE_PATTON_DEFAULT);
+		Date date = null;
+		try {
+			date = sdf.parse(dateStr);
+		} catch (ParseException e) {
+			logger.error(e.getMessage());
+		}
+		Calendar startCalendar = Calendar.getInstance();
+		startCalendar.setFirstDayOfWeek(Calendar.MONDAY);
+		startCalendar.setMinimalDaysInFirstWeek(4);
+		startCalendar.setTime(date);
+		if (weeks != 0) {
+			startCalendar.add(Calendar.WEEK_OF_YEAR, weeks);
+			String year = startCalendar.get(Calendar.YEAR) + "";
+			int w = startCalendar.get(Calendar.WEEK_OF_YEAR);
+			if (w < 10) {
+				return year + "0" + w;
+			} else {
+				return year + w;
+			}
+		} else {
+			return getYYYYWW(format(date));
+		}
+	}
+
+	public static String getBeforeWeeks(String end, int weeks) {
+		Calendar endCalendar = Calendar.getInstance();
+		int endyear = Integer.valueOf(end.substring(0, 4));
+		int endweek = Integer.valueOf(end.length() == 5 ? end.substring(4, 5)
+				: end.substring(4, 6));
+		endCalendar.setWeekDate(endyear, endweek, Calendar.MONDAY);
+		endCalendar.setMinimalDaysInFirstWeek(4);
+
+		endCalendar.add(Calendar.WEEK_OF_YEAR, -weeks);
+		String year = endCalendar.get(Calendar.YEAR) + "";
+		int w = endCalendar.get(Calendar.WEEK_OF_YEAR);
+		return year + w;
+	}
+
+	public static String getBeforeMonths(String end, int months) {
+		Calendar endCalendar = Calendar.getInstance();
+		int endyear = Integer.valueOf(end.substring(0, 4));
+		int endmonth = Integer.valueOf(end.length() == 5 ? end.substring(4, 5)
+				: end.substring(4, 6));
+		endCalendar.set(Calendar.YEAR, endyear);
+		endCalendar.set(Calendar.MONTH, endmonth);
+		if (months > 0) {
+			endCalendar.add(Calendar.MONTH, -months);
+			String year = endCalendar.get(Calendar.YEAR) + "";
+			int m = endCalendar.get(Calendar.MONTH);
+			if (m < 10) {
+				return year + "0" + m;
+			} else {
+				return year + m;
+			}
+		} else {
+			endCalendar.set(Calendar.MONTH, endmonth - 1);
+			System.out.println(format(endCalendar.getTime()));
+			return getYYYYMM(format(endCalendar.getTime()));
+		}
+	}
+
+	public static List<String> getWeeks(String start, String end) {
+		Calendar startCalendar = Calendar.getInstance();
+		int startyear = Integer.valueOf(start.substring(0, 4));
+		int startweek = Integer.valueOf(start.length() == 5 ? start.substring(
+				4, 5) : start.substring(4, 6));
+		startCalendar.setWeekDate(startyear, startweek, Calendar.MONDAY);
+		startCalendar.setMinimalDaysInFirstWeek(4);
+
+		Calendar endCalendar = Calendar.getInstance();
+		int endyear = Integer.valueOf(end.substring(0, 4));
+		int endweek = Integer.valueOf(end.length() == 5 ? end.substring(4, 5)
+				: end.substring(4, 6));
+		endCalendar.setWeekDate(endyear, endweek, Calendar.MONDAY);
+		endCalendar.setMinimalDaysInFirstWeek(4);
+
+		Calendar tempCalendar = startCalendar;
+
+		List<String> weeks = new ArrayList<String>();
+		SimpleDateFormat dateFormat = new SimpleDateFormat(
+				C_DATE_PATTON_DEFAULT);
+		tempCalendar.add(Calendar.DAY_OF_YEAR, 7);
+		while (tempCalendar.before(endCalendar)) {
+			if (!weeks.contains(getYYYYWW(dateFormat.format(tempCalendar
+					.getTime()))))
+				weeks.add(getYYYYWW(dateFormat.format(tempCalendar.getTime())));
+			tempCalendar.add(Calendar.DAY_OF_YEAR, 7);
+		}
+		if (startCalendar.equals(endCalendar)) {
+			if (!weeks.contains(getYYYYWW(dateFormat.format(startCalendar
+					.getTime()))))
+				weeks.add(getYYYYWW(dateFormat.format(startCalendar.getTime())));
+		}
+		if (!weeks.contains(end)) {
+			weeks.add(end);
+		}
+		return weeks;
+	}
+
+	public static List<String> getMonths(String start, String end) {
+		Calendar startCalendar = Calendar.getInstance();
+		int startyear = Integer.valueOf(start.substring(0, 4));
+		int startmonth = Integer.valueOf(start.length() == 5 ? start.substring(
+				4, 5) : start.substring(4, 6));
+		startCalendar.set(Calendar.YEAR, startyear);
+		startCalendar.set(Calendar.MONTH, startmonth - 1);
+
+		Calendar endCalendar = Calendar.getInstance();
+		int endyear = Integer.valueOf(end.substring(0, 4));
+		int endmonth = Integer.valueOf(end.length() == 5 ? end.substring(4, 5)
+				: end.substring(4, 6));
+		endCalendar.set(Calendar.YEAR, endyear);
+		endCalendar.set(Calendar.MONTH, endmonth - 1);
+
+		Calendar tempCalendar = startCalendar;
+
+		List<String> months = new ArrayList<String>();
+		SimpleDateFormat dateFormat = new SimpleDateFormat(
+				C_DATE_PATTON_DEFAULT);
+
+		while (tempCalendar.before(endCalendar)) {
+			if (!months.contains(getYYYYMM(dateFormat.format(tempCalendar
+					.getTime()))))
+				months.add(getYYYYMM(dateFormat.format(tempCalendar.getTime())));
+			tempCalendar.add(Calendar.DAY_OF_YEAR,
+					tempCalendar.getActualMaximum(Calendar.DATE) - 1);
+		}
+		if (startCalendar.equals(endCalendar)) {
+			if (!months.contains(getYYYYMM(dateFormat.format(startCalendar
+					.getTime()))))
+				months.add(getYYYYMM(dateFormat.format(startCalendar.getTime())));
+		}
+		if (!months.contains(end)) {
+			months.add(end);
+		}
+		return months;
+	}
+
+	public static String getBeforeMonths(int months) {
+		Calendar startCalendar = Calendar.getInstance();
+		startCalendar.setTime(new Date());
+		startCalendar.add(Calendar.MONTH, -months);
+		String year = startCalendar.get(Calendar.YEAR) + "";
+		int m = startCalendar.get(Calendar.MONTH);
+		m = m + 1;
+		String month = "";
+		if (m < 10) {
+			month = "0" + m;
+		} else {
+			month = "" + m;
+		}
+		// System.out.println(year + month);
+		return year + month;
+	}
+
+	public static String getAfterMonths(String dateStr, int months) {
+		SimpleDateFormat sdf = new SimpleDateFormat(C_DATA_PATTON_YYYYMMDD);
+		Date date = null;
+		try {
+			date = sdf.parse(dateStr);
+		} catch (ParseException e) {
+			logger.error(e.getMessage());
+		}
+		Calendar startCalendar = Calendar.getInstance();
+		startCalendar.setTime(date);
+		startCalendar.add(Calendar.MONTH, months);
+		String year = startCalendar.get(Calendar.YEAR) + "";
+		int m = startCalendar.get(Calendar.MONTH);
+		m = m + 1;
+		String month = "";
+		if (m < 10) {
+			month = "0" + m;
+		} else {
+			month = "" + m;
+		}
+		// System.out.println(year + month);
+		return year + month;
+	}
+
+	public static String convertWeekToDate(String dateStr) {
+		String year = dateStr.substring(0, 4);
+		String week = "";
+		if (dateStr.length() == 5) {
+			week = dateStr.substring(4, 5);
+		} else {
+			week = dateStr.substring(4, 6);
+		}
+		int w = Integer.valueOf(week);
+		int y = Integer.valueOf(year);
+		Calendar startCalendar = Calendar.getInstance();
+		startCalendar.setFirstDayOfWeek(Calendar.MONDAY);
+		startCalendar.set(Calendar.YEAR, y);
+		startCalendar.set(Calendar.WEEK_OF_YEAR, w);
+		startCalendar.setMinimalDaysInFirstWeek(4);
+		// String day=format(startCalendar.getTime(),C_DATA_PATTON_YYYYMMDD );
+		Date day = startCalendar.getTime();
+
+		String firstDay = format(getFirstDayOfWeek(day), C_DATE_PATTON_DEFAULT);
+		String lastDay = format(getLastDayOfWeek(day), C_DATE_PATTON_DEFAULT);
+		return firstDay + "至" + lastDay;
+
+	}
+
+	/**
+	 * 获取某一周号的第一天.
+	 * 
+	 * @param weekStr
+	 * @return
+	 */
+	public static String getFirstDayOfWeek(String weekStr) {
+		String year = weekStr.substring(0, 4);
+		String week = "";
+		if (weekStr.length() == 5) {
+			week = weekStr.substring(4, 5);
+		} else {
+			week = weekStr.substring(4, 6);
+		}
+		int w = Integer.valueOf(week);
+		int y = Integer.valueOf(year);
+		Calendar startCalendar = Calendar.getInstance();
+		startCalendar.setFirstDayOfWeek(Calendar.MONDAY);
+		startCalendar.set(Calendar.YEAR, y);
+		startCalendar.set(Calendar.WEEK_OF_YEAR, w);
+		startCalendar.setMinimalDaysInFirstWeek(4);
+		// String day=format(startCalendar.getTime(),C_DATA_PATTON_YYYYMMDD );
+		Date day = startCalendar.getTime();
+		return format(getFirstDayOfWeek(day), C_DATE_PATTON_DEFAULT);
+	}
+
+	/**
+	 * 获取某一周号的最后一天.
+	 * 
+	 * @param weekStr
+	 * @return
+	 */
+	public static String getLastDayOfWeek(String weekStr) {
+		String year = weekStr.substring(0, 4);
+		String week = "";
+		if (weekStr.length() == 5) {
+			week = weekStr.substring(4, 5);
+		} else {
+			week = weekStr.substring(4, 6);
+		}
+		int w = Integer.valueOf(week);
+		int y = Integer.valueOf(year);
+		Calendar startCalendar = Calendar.getInstance();
+		startCalendar.setFirstDayOfWeek(Calendar.MONDAY);
+		startCalendar.set(Calendar.YEAR, y);
+		startCalendar.set(Calendar.WEEK_OF_YEAR, w);
+		startCalendar.setMinimalDaysInFirstWeek(4);
+		// String day=format(startCalendar.getTime(),C_DATA_PATTON_YYYYMMDD );
+		Date day = startCalendar.getTime();
+		return format(getLastDayOfWeek(day), C_DATE_PATTON_DEFAULT);
+	}
+
+	/** */
+	/**
+	 * 取得某天所在周的第一天
+	 * 
+	 * @param date
+	 * @return
+	 */
+	public static Date getFirstDayOfWeek(Date date) {
+		Calendar c = new GregorianCalendar();
+		c.setFirstDayOfWeek(Calendar.MONDAY);
+		c.setTime(date);
+		c.setMinimalDaysInFirstWeek(4);
+		c.set(Calendar.DAY_OF_WEEK, c.getFirstDayOfWeek());
+		return c.getTime();
+	}
+
+	/** */
+	/**
+	 * 取得某天所在周的最后一天
+	 * 
+	 * @param date
+	 * @return
+	 */
+	public static Date getLastDayOfWeek(Date date) {
+		Calendar c = new GregorianCalendar();
+		c.setFirstDayOfWeek(Calendar.MONDAY);
+		c.setTime(date);
+		c.setMinimalDaysInFirstWeek(4);
+		c.set(Calendar.DAY_OF_WEEK, c.getFirstDayOfWeek() + 6);
+		return c.getTime();
+	}
+
+	/**
+	 * 某一个月号第一天和最后一天
+	 * 
+	 * @param date
+	 * @return
+	 */
+	public static String getFirstday_Lastday_Month(String dateStr) {
+		String year = dateStr.substring(0, 4);
+		String month = "";
+		if (dateStr.length() == 5) {
+			month = dateStr.substring(4, 5);
+		} else {
+			month = dateStr.substring(4, 6);
+		}
+		int m = Integer.valueOf(month);
+		int y = Integer.valueOf(year);
+		Calendar startCalendar = Calendar.getInstance();
+		startCalendar.setFirstDayOfWeek(Calendar.MONDAY);
+		startCalendar.set(Calendar.YEAR, y);
+		startCalendar.set(Calendar.MONTH, m);
+		// String day=format(startCalendar.getTime(),C_DATA_PATTON_YYYYMMDD );
+		Date day = startCalendar.getTime();
+
+		SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd");
+		Calendar calendar = Calendar.getInstance();
+		calendar.setTime(day);
+		calendar.add(Calendar.MONTH, -1);
+		Date theDate = calendar.getTime();
+
+		// 第一天
+		GregorianCalendar gcLast = (GregorianCalendar) Calendar.getInstance();
+		gcLast.setTime(theDate);
+		gcLast.set(Calendar.DAY_OF_MONTH, 1);
+		String day_first = df.format(gcLast.getTime());
+		// StringBuffer str = new
+		// StringBuffer().append(day_first).append(" 00:00:00");
+		// day_first = str.toString();
+
+		// 最后一天
+		calendar.add(Calendar.MONTH, 1); // 加一个月
+		calendar.set(Calendar.DATE, 1); // 设置为该月第一天
+		calendar.add(Calendar.DATE, -1); // 再减一天即为上个月最后一天
+		String day_last = df.format(calendar.getTime());
+		// StringBuffer endStr = new
+		// StringBuffer().append(day_last).append(" 23:59:59");
+		// day_last = endStr.toString();
+
+		return day_first + "至" + day_last;
+	}
+
+	/**
+	 * 某一个月号第一天
+	 * 
+	 * @param date
+	 * @return
+	 */
+	public static String getFirstdayOfMonth(String monthno) {
+		String year = monthno.substring(0, 4);
+		String month = "";
+		if (monthno.length() == 5) {
+			month = monthno.substring(4, 5);
+		} else {
+			month = monthno.substring(4, 6);
+		}
+		int m = Integer.valueOf(month);
+		int y = Integer.valueOf(year);
+		Calendar startCalendar = Calendar.getInstance();
+		startCalendar.setFirstDayOfWeek(Calendar.MONDAY);
+		startCalendar.set(Calendar.YEAR, y);
+		startCalendar.set(Calendar.MONTH, m);
+		// String day=format(startCalendar.getTime(),C_DATA_PATTON_YYYYMMDD );
+		Date day = startCalendar.getTime();
+
+		SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd");
+		Calendar calendar = Calendar.getInstance();
+		calendar.setTime(day);
+		calendar.add(Calendar.MONTH, -1);
+		Date theDate = calendar.getTime();
+
+		// 第一天
+		GregorianCalendar gcLast = (GregorianCalendar) Calendar.getInstance();
+		gcLast.setTime(theDate);
+		gcLast.set(Calendar.DAY_OF_MONTH, 1);
+		String day_first = df.format(gcLast.getTime());
+
+		return day_first;
+	}
+
+	/**
+	 * 某一个月号最后一天
+	 * 
+	 * @param date
+	 * @return
+	 */
+	public static String getLastdayOfMonth(String monthno) {
+		String year = monthno.substring(0, 4);
+		String month = "";
+		if (monthno.length() == 5) {
+			month = monthno.substring(4, 5);
+		} else {
+			month = monthno.substring(4, 6);
+		}
+		int m = Integer.valueOf(month);
+		int y = Integer.valueOf(year);
+		Calendar startCalendar = Calendar.getInstance();
+		startCalendar.setFirstDayOfWeek(Calendar.MONDAY);
+		startCalendar.set(Calendar.YEAR, y);
+		startCalendar.set(Calendar.MONTH, m);
+		// String day=format(startCalendar.getTime(),C_DATA_PATTON_YYYYMMDD );
+		Date day = startCalendar.getTime();
+
+		SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd");
+		Calendar calendar = Calendar.getInstance();
+		calendar.setTime(day);
+		calendar.add(Calendar.MONTH, -1);
+
+		// 最后一天
+		calendar.add(Calendar.MONTH, 1); // 加一个月
+		calendar.set(Calendar.DATE, 1); // 设置为该月第一天
+		calendar.add(Calendar.DATE, -1); // 再减一天即为上个月最后一天
+		String day_last = df.format(calendar.getTime());
+
+		return day_last;
+	}
+
+	public static long getMillons(String hh, String mm) {
+		SimpleDateFormat sdf = new SimpleDateFormat(C_MIN_PATTON_DEFAULT);
+		sdf.setTimeZone(new SimpleTimeZone(SimpleTimeZone.UTC_TIME, "UTC"));
+
+		Date nowDate = new Date();
+		String date = format(nowDate, C_DATE_PATTON_DEFAULT);
+		date = date + " " + hh + ":" + mm;
+		// System.out.println(date);
+		
+		Date date2=parseDate(C_MIN_PATTON_DEFAULT, date);
+		 
+		Date utcDate = null;
+		try {
+			utcDate = sdf.parse(date);
+		} catch (ParseException e) {
+			// TODO Auto-generated catch block
+			e.printStackTrace();
+		}
+		return utcDate.getTime();
+	}
+
+	public static long getMillons(String date) {
+		SimpleDateFormat sdf = new SimpleDateFormat(C_DATA_PATTON_YYYYMMDD);
+		sdf.setTimeZone(new SimpleTimeZone(SimpleTimeZone.UTC_TIME, "UTC"));
+
+		Date utcDate = null;
+		try {
+			utcDate = sdf.parse(date);
+		} catch (ParseException e) {
+			// TODO Auto-generated catch block
+			e.printStackTrace();
+		}
+		return utcDate.getTime();
+	}
+
+	public static Date getFirstRunTime(String time) {
+		long daySpan = 24L * 60 * 60 * 1000;
+		// 规定的每天时间15:33:30运行
+		final SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd '" + time
+				+ ":00:00'");
+		// 首次运行时间
+		Date startTime = null;
+		try {
+			startTime = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").parse(sdf
+					.format(new Date()));
+		} catch (ParseException e) {
+			// TODO Auto-generated catch block
+			e.printStackTrace();
+		}
+
+		// 如果今天的已经过了 首次运行时间就改为明天
+		if (System.currentTimeMillis() > startTime.getTime()) {
+			startTime = new Date(startTime.getTime() + daySpan);
+		}
+		return startTime;
+	}
+
+	public static List<String> getEveryWeek(String startDate, String endDate) {
+		List<String> wwSet = new ArrayList<String>();
+		List<String> everyday = getDateInterval(startDate, endDate);
+		String _yyyyww;
+		for (String date : everyday) {
+			_yyyyww = getYYYYWW(date);
+			// if (_yyyyww.substring(4, 5).equals("0")) {
+			// if (!wwSet.contains(getYYYYW(date)))
+			// wwSet.add(getYYYYW(date));
+			// } else {
+			// }
+			if (!wwSet.contains(_yyyyww))
+				wwSet.add(_yyyyww);
+		}
+		return wwSet;
+	}
+
+	// public static List<String> getEveryWeekBySE(String start, String end) {
+	//
+	// }
+
+	public static List<String> getEveryMonth(String startDate, String endDate) {
+		List<String> mmSet = new ArrayList<String>();
+		List<String> everyday = getDateInterval(startDate, endDate);
+		String _yyyymm;
+		for (String date : everyday) {
+			_yyyymm = getYYYYMM(date);
+			// if (_yyyymm.substring(4, 5).equals("0")) {
+			// if (!mmSet.contains(getYYYYM(date)))
+			// mmSet.add(getYYYYM(date));
+			// } else {
+			// }
+			if (!mmSet.contains(_yyyymm))
+				mmSet.add(_yyyymm);
+		}
+		return mmSet;
+	}
+
+	public static List<String> getTimeIntegval() {
+		List<String> timeList = new ArrayList<String>();
+		String _i, _j, _t;
+
+		for (int i = 0; i < 24; i++) {
+			if (i < 10) {
+				_i = "0" + i;
+			} else {
+				_i = i + "";
+			}
+			for (int j = 0; j < 60; j++) {
+				if (j % 5 == 0) {
+					if (j < 10) {
+						_j = "0" + j;
+					} else {
+						_j = j + "";
+					}
+					_t = _i + ":" + _j;
+					timeList.add(_t);
+				}
+			}
+		}
+		return timeList;
+	}
+
+	/**
+	 * 当前时间点>=10,返回昨天;否则返回前天.
+	 * 
+	 * @return 昨天或者前天.
+	 */
+	public static String getIDFAQueryDate() {
+		Date date = new Date();
+		int time = date.getHours();
+		if (time >= 10) {
+			return getBeforeDays(1);
+		} else {
+			return getBeforeDays(2);
+		}
+	}
+
+	private static DateFormat format = new SimpleDateFormat(
+			"yyyy-MM-dd HH:mm:ss");
+
+	/**
+	 * 得到UTC时间,类型为字符串,格式为"yyyy-MM-dd HH:mm"<br />
+	 * 如果获取失败,返回null
+	 * 
+	 * @return
+	 */
+	public static String getUTCTimeStr() {
+		StringBuilder UTCTimeBuffer = new StringBuilder();
+		// 1、取得本地时间:
+		Calendar cal = Calendar.getInstance();
+		// 2、取得时间偏移量:
+		int zoneOffset = cal.get(java.util.Calendar.ZONE_OFFSET);
+		// 3、取得夏令时差:
+		int dstOffset = cal.get(java.util.Calendar.DST_OFFSET);
+		// 4、从本地时间里扣除这些差量,即可以取得UTC时间:
+		cal.add(java.util.Calendar.MILLISECOND, -(zoneOffset + dstOffset));
+		System.out.println(cal.getTimeInMillis());
+		int year = cal.get(Calendar.YEAR);
+		int month = cal.get(Calendar.MONTH) + 1;
+		int day = cal.get(Calendar.DAY_OF_MONTH);
+		int hour = cal.get(Calendar.HOUR_OF_DAY);
+		int minute = cal.get(Calendar.MINUTE);
+		int seconds = cal.get(Calendar.SECOND);
+		UTCTimeBuffer.append(year).append("-").append(month).append("-")
+				.append(day);
+		UTCTimeBuffer.append(" ").append(hour).append(":").append(minute)
+				.append(":").append(seconds);
+		try {
+			format.parse(UTCTimeBuffer.toString());
+			return UTCTimeBuffer.toString();
+		} catch (ParseException e) {
+			logger.error(e.getMessage());
+		}
+		return null;
+	}
+
+	/**
+	 * 得到UTC时间,类型为字符串,格式为"yyyy-MM-dd HH:mm"<br />
+	 * 如果获取失败,返回null
+	 * 
+	 * @return
+	 */
+	public static long getUTCTimeLong() {
+		StringBuilder UTCTimeBuffer = new StringBuilder();
+		// 1、取得本地时间:
+		Calendar cal = Calendar.getInstance();
+		// 2、取得时间偏移量:
+		int zoneOffset = cal.get(java.util.Calendar.ZONE_OFFSET);
+		// 3、取得夏令时差:
+		int dstOffset = cal.get(java.util.Calendar.DST_OFFSET);
+		// 4、从本地时间里扣除这些差量,即可以取得UTC时间:
+		cal.add(java.util.Calendar.MILLISECOND, -(zoneOffset + dstOffset));
+		return cal.getTimeInMillis();
+	}
+
+	/**
+	 * 将UTC时间转换为东八区时间
+	 * 
+	 * @param UTCTime
+	 * @return
+	 */
+	public static String getLocalTimeFromUTC(String UTCTime) {
+		java.util.Date UTCDate = null;
+		String localTimeStr = null;
+		try {
+			UTCDate = format.parse(UTCTime);
+			format.setTimeZone(TimeZone.getTimeZone("GMT-8"));
+			localTimeStr = format.format(UTCDate);
+		} catch (ParseException e) {
+			logger.error(e.getMessage());
+		}
+
+		return localTimeStr;
+	}
+
+	/**
+	 * 将UTC时间转换为东八区时间
+	 * 
+	 * @param UTCTime
+	 * @return
+	 */
+	public static String getLocalTimeFromUTC(long UTCTime) {
+		java.util.Date UTCDate = new Date(UTCTime);
+		String localTimeStr = null;
+		format.setTimeZone(TimeZone.getTimeZone("GMT-8"));
+		localTimeStr = format.format(UTCDate);
+
+		return localTimeStr;
+	}
+
+	/**
+	 * 秒转化成天时分秒
+	 * 
+	 * @param ms
+	 * @return
+	 */
+	public static String formatTime(long ms) {
+
+		int ss = 1000;
+		int mi = ss * 60;
+		int hh = mi * 60;
+		int dd = hh * 24;
+
+		long day = ms / dd;
+		long hour = (ms - day * dd) / hh;
+		long minute = (ms - day * dd - hour * hh) / mi;
+		long second = (ms - day * dd - hour * hh - minute * mi) / ss;
+		long milliSecond = ms - day * dd - hour * hh - minute * mi - second
+				* ss;
+
+		String strDay = day < 10 ? "0" + day : "" + day; // 天
+		String strHour = hour < 10 ? "0" + hour : "" + hour;// 小时
+		String strMinute = minute < 10 ? "0" + minute : "" + minute;// 分钟
+		String strSecond = second < 10 ? "0" + second : "" + second;// 秒
+		String strMilliSecond = milliSecond < 10 ? "0" + milliSecond : ""
+				+ milliSecond;// 毫秒
+		strMilliSecond = milliSecond < 100 ? "0" + strMilliSecond : ""
+				+ strMilliSecond;
+
+		return strDay + " 天 " + strHour + " 时 " + strMinute + " 分钟 " + strSecond
+				+ " 秒";
+	}
+	
+	public static String parseDateTimeByLong(Long time) {
+		Date date = new Date(time);
+		SimpleDateFormat sdf=new SimpleDateFormat(C_TIME_PATTON_DEFAULT);
+		return sdf.format(date);
+	}
+
+	public static void main(String[] args) {
+		// String UTCTimeStr = getUTCTimeStr() ;
+		// System.out.println(UTCTimeStr);
+		// System.out.println(getLocalTimeFromUTC(UTCTimeStr));
+		//
+		// System.out.println(getLocalTimeFromUTC(getUTCTimeLong()));
+		// System.out.println(getFirstDayOfMonth(parseDate("2016-02-03")));
+		// System.out.println(getLastDayOfMonth(parseDate("2016-02-03")));
+		//
+		// System.out.println(getFirstday_Lastday_Month("201602"));
+//		System.out.println(getFirstdayOfMonth("201602"));
+//		System.out.println(getLastdayOfMonth("201602"));
+		
+		System.out.println(DateUtil.getDateInterval("2017-03-15", "2017-05-08").size());
+	}
+
+}
diff --git a/src/main/java/com/reyun/util/EventRedisUtil.java b/src/main/java/com/reyun/util/EventRedisUtil.java
new file mode 100644
index 0000000..12c2a8c
--- /dev/null
+++ b/src/main/java/com/reyun/util/EventRedisUtil.java
@@ -0,0 +1,129 @@
+package com.reyun.util;
+
+import org.apache.commons.pool2.impl.GenericObjectPoolConfig;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.util.CollectionUtils;
+import redis.clients.jedis.Jedis;
+import redis.clients.jedis.JedisPool;
+import redis.clients.jedis.Pipeline;
+import redis.clients.jedis.Response;
+import redis.clients.jedis.exceptions.JedisConnectionException;
+
+import java.util.ArrayList;
+import java.util.HashSet;
+import java.util.List;
+import java.util.ResourceBundle;
+import java.util.Set;
+
+/**
+ * 单节点Jedis.
+ *
+ * @author Administrator
+ */
+public class EventRedisUtil
+{
+    private static Logger logger = LoggerFactory.getLogger(EventRedisUtil.class);
+
+    private JedisPool pool;
+
+    private EventRedisUtil()
+    {
+        ResourceBundle resourceBundle = ResourceBundle.getBundle("redis");
+        pool = new JedisPool(
+                new GenericObjectPoolConfig(),
+                resourceBundle.getString("redis.event.host"),
+                Integer.valueOf(resourceBundle.getString("redis.event.port")),
+                Integer.parseInt(Constant.REDIS_IP_REQUEST_TIMES),
+                null,
+                Integer.valueOf(resourceBundle.getString("redis.event.database")),
+                null);
+    }
+
+    public static EventRedisUtil getInstance()
+    {
+        return SingleHolder.instance;
+    }
+
+    /**
+     * 取值
+     *
+     * @param key
+     * @return
+     */
+    public Set get(String key)
+    {
+        Jedis jedis = pool.getResource();
+        try {
+            Set set = jedis.zrange(key, 0, -1);
+            return set;
+        }
+        finally {
+            pool.returnResource(jedis);
+        }
+    }
+
+    /**
+     * 获取zset的值
+     */
+    public Set<String> getZsetByKeys(List<String> keys) {
+
+        Set<String> resultSet = new HashSet<>();
+        Set<String> resultSet50 = new HashSet<>();
+
+        Jedis jedis = null;
+        try {
+            jedis = pool.getResource();
+            Pipeline p = jedis.pipelined();
+            List<Response<Set<String>>> list = new ArrayList<>();
+
+            for (String key : keys) {
+                Response<Set<String>> response = p.zrange(key, 0, 50);
+                list.add(response);
+            }
+
+            p.sync();
+            pool.returnResource(jedis);
+
+            if (ValidateUtil.isValid(list)) {
+                for (Response<Set<String>> res : list) {
+                    Set<String> set = res.get();
+
+                    if (!CollectionUtils.isEmpty(set)) {
+                        resultSet.addAll(set);
+                    }
+                }
+            }
+
+            int i=0;
+            for(String s:resultSet){
+                resultSet50.add(s);
+                if(i==50)break;
+                i++;
+            }
+
+        } catch (JedisConnectionException e) {
+
+            logger.error(e.getMessage(), e);
+
+            if (null != jedis) {
+                pool.returnBrokenResource(jedis);
+            }
+
+            throw new JedisConnectionException(e);
+        }
+
+        //return resultSet;
+        return resultSet50;
+    }
+
+    private static class SingleHolder
+    {
+        private static EventRedisUtil instance = new EventRedisUtil();
+    }
+
+    public static void main(String[] args) {
+		System.out.println(getInstance().get("20fae09987bba0e8609eaad64dbd440d,install,_province,string,1"));
+	}
+
+}
diff --git a/src/main/java/com/reyun/util/ExcelUtil.java b/src/main/java/com/reyun/util/ExcelUtil.java
new file mode 100644
index 0000000..9554047
--- /dev/null
+++ b/src/main/java/com/reyun/util/ExcelUtil.java
@@ -0,0 +1,190 @@
+package com.reyun.util;
+
+import com.reyun.dic.UploadErrorEnumType;
+import com.reyun.model.UploadHistory;
+import org.apache.poi.openxml4j.exceptions.InvalidFormatException;
+import org.apache.poi.ss.usermodel.*;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.util.StringUtils;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * Created by sunhao on 17/5/19.
+ * desc:EXCEL操作工具类
+ */
+public class ExcelUtil {
+
+    private static final Logger logger = LoggerFactory.getLogger(AwsS3Util.class);
+    private static final int MAX_UPLOAD_ROW = 1000;
+    private static final int MAX_KEYWORD_LENGTH = 40;
+    private static final int MAX_CREATIVE_LENGTH = 40;
+    private static final String KEYWORD_TABLE_HEAD_URL = "访问地址/应用下载地址";
+    private static final String KEYWORD_TABLE_HEAD_KEYWORD = "关键词";
+    private static final String KEYWORD_TABLE_HEAD_CREATIVE = "创意";
+
+
+
+    /**
+     * 读取keywords的EXCEL文件,最多支持读取1000行,之后的数据丢弃。
+     * 文件格式:下载地址  关键字  创意
+     * created by sunhao 20170519
+     */
+    public static UploadHistory readKeywordsExcel(InputStream inputStream){
+
+        UploadHistory uploadHistory = new UploadHistory();
+        List<Integer> errorRowList = new ArrayList<>();
+        Map<String,Map<Integer,String>> keywordCreativeMap = new HashMap<>();
+
+        try {
+
+            //Get the workbook instance for XLS and XLSX file
+            Workbook workbook = WorkbookFactory.create(inputStream);
+
+            //获取第一个SHEET
+            Sheet sheet = workbook.getSheetAt(0);
+
+            //数据格式化
+            DataFormatter cellDadaFormat = new DataFormatter();
+
+            //取行数,最多读1000行
+            int rowNumber = sheet.getLastRowNum();
+            rowNumber = rowNumber > MAX_UPLOAD_ROW ? MAX_UPLOAD_ROW : rowNumber;
+
+            //校验表头格式false 不合法,true 合法
+            boolean tableHeadValid = checkTableHead(sheet.getRow(0),cellDadaFormat);
+
+            //空表校验
+            if(rowNumber == 0){
+
+                if(tableHeadValid){
+                    uploadHistory.setErrorType(UploadErrorEnumType.TABLE_EMPTY.getKey());
+                } else {
+                    uploadHistory.setErrorType(UploadErrorEnumType.HEAD_ERROR.getKey());
+                }
+
+                return uploadHistory;
+            }
+
+            //表头有误
+            if(!tableHeadValid){
+                uploadHistory.setErrorType(UploadErrorEnumType.HEAD_ERROR.getKey());
+                return uploadHistory;
+            }
+
+
+            //从第二行读起
+            for (int i = 1; i <= rowNumber; i++) {
+
+                Row row = sheet.getRow(i);
+
+                if (null == row) {
+                    errorRowList.add(i + 1);
+                    continue;
+                }
+
+                //读取前三列,下载地址,关键字,创意
+                String url = getCellStringValue(row, cellDadaFormat, 0);
+                String keyword = getCellStringValue(row, cellDadaFormat, 1);
+                String creative = getCellStringValue(row, cellDadaFormat, 2);
+
+                //构建subCampaign,校验字符串合法性
+                String keywordString = checkAndBuildKeywordString(url, keyword, creative);
+
+                //构建
+                if (!StringUtils.isEmpty(keywordString)) {
+
+                    String mapKey = getKeywordKey(keyword, creative);
+
+                    Map<Integer, String> rowDataMap = keywordCreativeMap.get(mapKey);
+                    rowDataMap = (null == rowDataMap ? new HashMap<Integer, String>() : rowDataMap);
+
+                    rowDataMap.put(i + 1, keywordString);
+                    keywordCreativeMap.put(mapKey, rowDataMap);
+
+                } else {
+
+                    errorRowList.add(i + 1);
+                }
+            }
+
+            uploadHistory.setUploadErrorList(errorRowList);
+            uploadHistory.setRowNumber(sheet.getLastRowNum());
+            uploadHistory.setKeywordCreativeMap(keywordCreativeMap);
+
+        } catch (IOException | InvalidFormatException e) {
+            logger.error(e.getMessage());
+            uploadHistory = null;
+        }
+
+        return uploadHistory;
+    }
+
+    /**
+     * 校验表头是否正确 false 不合法,true 合法
+     */
+    private static boolean checkTableHead(Row row, DataFormatter cellDadaFormat) {
+
+        if(null != row){
+
+            String urlHead = getCellStringValue(row, cellDadaFormat, 0);
+            String keywordHead = getCellStringValue(row, cellDadaFormat, 1);
+            String creativeHead = getCellStringValue(row, cellDadaFormat, 2);
+
+            return urlHead.equals(KEYWORD_TABLE_HEAD_URL) && keywordHead.equals(KEYWORD_TABLE_HEAD_KEYWORD) && creativeHead.equals(KEYWORD_TABLE_HEAD_CREATIVE);
+        }
+
+        return false;
+    }
+
+    /**
+     * 获取KEY
+     */
+    private static String getKeywordKey(String keyword, String creative){
+        return keyword + "-" + creative;
+    }
+
+    /**
+     * 获取单元格字符串
+     */
+    private static String getCellStringValue(Row row, DataFormatter cellDadaFormat, int index) {
+
+        String result = "";
+
+        Cell cell = row.getCell(index);
+
+        if (null != cell && !cell.getCellTypeEnum().equals(CellType.BLANK)) {
+
+            result = cellDadaFormat.formatCellValue(cell);
+        }
+
+        return result;
+    }
+
+    /**
+     * 检验和构建SubCampaign
+     *
+     */
+    private static String checkAndBuildKeywordString(String url, String keyword, String creative) {
+
+        String keywordString = null;
+
+        //满足URL格式,keyword格式,creative格式
+        if (!StringUtils.isEmpty(url) && StringUtil.urlMatch(url.trim())
+                && !StringUtils.isEmpty(keyword) && keyword.length() <= MAX_KEYWORD_LENGTH && StringUtil.nameMatch(keyword.trim())
+                && (StringUtils.isEmpty(creative) || creative.length() <= MAX_CREATIVE_LENGTH)) {
+
+            keywordString = url + ";" + keyword.trim() + (StringUtils.isEmpty(creative) ? "" : ";" + creative.trim());
+        }
+
+        return keywordString;
+    }
+
+
+}
diff --git a/src/main/java/com/reyun/util/ExportReportUtil.java b/src/main/java/com/reyun/util/ExportReportUtil.java
new file mode 100644
index 0000000..1fa7656
--- /dev/null
+++ b/src/main/java/com/reyun/util/ExportReportUtil.java
@@ -0,0 +1,110 @@
+package com.reyun.util;
+
+import com.reyun.model.ReportListResult;
+import net.sf.json.JSONObject;
+import org.springframework.util.CollectionUtils;
+
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * Created by sunhao on 17/7/7.
+ * desc:数据导出工具类
+ */
+public class ExportReportUtil {
+
+    private static final String REPORT_NAME_CAMPAIGN = "campaigninfo_bycampgroup";
+    private static final String SUB_TYPE_CAMPAIGN = "campaign";
+    private static final String SPECIAL_REPORT_NAME = "campaigninfo_bydatecampaign";
+
+    private ExportReportUtil(){}
+
+    /**
+     * 获取conditionMap避免使用 new ObjectMapper().readValue(export.getConditions(), HashMap.class);转换不完全
+     * created by sunhao 20150510
+     */
+    public static Map<String, String> changeCondition2Map(String conditions) {
+
+        Map<String, String> resultMap = new HashMap<>();
+
+        JSONObject conditionObject = JSONObject.fromObject(conditions);
+
+        Iterator<String> conditionIterator = conditionObject.keys();
+        while (conditionIterator.hasNext()) {
+            String key = conditionIterator.next();
+            resultMap.put(key, conditionObject.getString(key));
+        }
+
+        return resultMap;
+    }
+
+    public static StringBuffer getExportContent(ReportListResult reportListResult, String subType) {
+
+        StringBuffer sb = new StringBuffer();
+        List<String> name = reportListResult.getName();
+        List<Object> columnKey = reportListResult.getColumnkey();
+        List<String> reportName = reportListResult.getReportname();
+        String report = reportName.size() > 0 ? reportName.get(0) : "";
+
+        boolean isNeedChannelAndGroup = SUB_TYPE_CAMPAIGN.equals(subType) && REPORT_NAME_CAMPAIGN.equals(report) || SPECIAL_REPORT_NAME.equals(report);
+
+        if (isNeedChannelAndGroup) {
+            name.add("渠道");
+            name.add("活动组");
+        }
+
+        List<Map<String, Object>> value = reportListResult.getVal();
+
+        if (!CollectionUtils.isEmpty(name)) {
+
+            sb.append(String.join(",", name)).append("\r\n");
+            if (isNeedChannelAndGroup) {
+                for (Map<String, Object> v : value) {
+                    for (int i = 0; i < columnKey.size(); i++) {
+                        sb.append(v.get(columnKey.get(i)))
+                                .append(columnKey.get(i).toString().startsWith("rate_") ? "%" : "")
+                                .append(",");
+                    }
+
+                    sb.append(v.containsKey("channelname") ? v.get("channelname") : " ").append(",");
+                    sb.append(v.containsKey("groupname") ? v.get("groupname") : " ").append("\r\n");
+                }
+            } else {
+                for (Map<String, Object> v : value) {
+                    for (int i = 0; i < columnKey.size(); i++) {
+                        sb.append(v.get(columnKey.get(i)))
+                                .append(columnKey.get(i).toString().startsWith("rate_") ? "%" : "")
+                                .append(i == columnKey.size() - 1 ? "\r\n" : ",");
+                    }
+                }
+            }
+
+        }
+
+        return sb;
+    }
+
+    public static StringBuffer getRoiExportContent(ReportListResult result, String name, boolean isFirst) {
+        StringBuffer sb = new StringBuffer();
+        List<String> nameList = result.getName();
+        List<Object> columnKey = result.getColumnkey();
+        List<Map<String, Object>> value = result.getVal();
+
+        if (!CollectionUtils.isEmpty(nameList)) {
+            if(isFirst){
+                sb.append(String.join(",", nameList)).append("\r\n");
+            }
+            for (Map<String, Object> v : value) {
+                sb.append(name).append(",");
+                for (int i = 0; i < columnKey.size(); i++) {
+                    sb.append(v.get(columnKey.get(i).toString())).append(columnKey.get(i).toString().startsWith("rate_") ? "%" : "")
+                            .append(i == columnKey.size() - 1 ? "\r\n" : ",");
+                }
+            }
+        }
+
+        return sb;
+    }
+}
diff --git a/src/main/java/com/reyun/util/GeneratePwd8.java b/src/main/java/com/reyun/util/GeneratePwd8.java
new file mode 100644
index 0000000..9a7deeb
--- /dev/null
+++ b/src/main/java/com/reyun/util/GeneratePwd8.java
@@ -0,0 +1,33 @@
+package com.reyun.util;
+
+import java.util.UUID;
+
+/**
+ * Created by Administrator on 2017/5/6 0006.
+ */
+public class GeneratePwd8 {
+
+    public static String[] chars = new String[] { "a", "b", "c", "d", "e", "f",
+            "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s",
+            "t", "u", "v", "w", "x", "y", "z", "0", "1", "2", "3", "4", "5",
+            "6", "7", "8", "9", "A", "B", "C", "D", "E", "F", "G", "H", "I",
+            "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V",
+            "W", "X", "Y", "Z" };
+
+
+    public static String generateShortUuid() {
+        StringBuffer shortBuffer = new StringBuffer();
+        String uuid = UUID.randomUUID().toString().replace("-", "");
+        for (int i = 0; i < 8; i++) {
+            String str = uuid.substring(i * 4, i * 4 + 4);
+            int x = Integer.parseInt(str, 16);
+            shortBuffer.append(chars[x % 0x3E]);
+        }
+        return shortBuffer.toString();
+    }
+
+    public static void main(String[] args)
+    {
+        System.out.println(GeneratePwd8.generateShortUuid());
+    }
+}
diff --git a/src/main/resources/17monipdb.dat b/src/main/resources/17monipdb.dat
new file mode 100644
index 0000000..a38c4d3
Binary files /dev/null and b/src/main/resources/17monipdb.dat differ
diff --git a/src/main/resources/META-INF/app.properties b/src/main/resources/META-INF/app.properties
new file mode 100644
index 0000000..9b3d990
--- /dev/null
+++ b/src/main/resources/META-INF/app.properties
@@ -0,0 +1 @@
+app.name=trackingio
\ No newline at end of file
diff --git a/src/main/resources/applicationContext-schedule.xml b/src/main/resources/applicationContext-schedule.xml
new file mode 100644
index 0000000..9a5fdd8
--- /dev/null
+++ b/src/main/resources/applicationContext-schedule.xml
@@ -0,0 +1,12 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<beans xmlns="http://www.springframework.org/schema/beans"
+       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+       xmlns:task="http://www.springframework.org/schema/task"
+       xsi:schemaLocation="http://www.springframework.org/schema/task http://www.springframework.org/schema/task/spring-task.xsd
+		http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"
+
+       default-lazy-init="true">
+
+    <description>调度配置</description>
+
+</beans>
diff --git a/src/main/resources/applicationContext.xml b/src/main/resources/applicationContext.xml
new file mode 100644
index 0000000..0f0a978
--- /dev/null
+++ b/src/main/resources/applicationContext.xml
@@ -0,0 +1,124 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<beans xmlns="http://www.springframework.org/schema/beans"
+	   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+	   xmlns:context="http://www.springframework.org/schema/context"
+	   xmlns:jdbc="http://www.springframework.org/schema/jdbc" xmlns:jee="http://www.springframework.org/schema/jee"
+	   xmlns:tx="http://www.springframework.org/schema/tx" xmlns:jpa="http://www.springframework.org/schema/data/jpa"
+	   xmlns:task="http://www.springframework.org/schema/task" xmlns:p="http://www.springframework.org/schema/p"
+	   xmlns:aop="http://www.springframework.org/schema/aop"
+	   xsi:schemaLocation="http://www.springframework.org/schema/task http://www.springframework.org/schema/task/spring-task.xsd
+		http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
+		http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd
+		http://www.springframework.org/schema/jdbc http://www.springframework.org/schema/jdbc/spring-jdbc.xsd
+		http://www.springframework.org/schema/jee http://www.springframework.org/schema/jee/spring-jee.xsd
+		http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd
+		http://www.springframework.org/schema/data/jpa http://www.springframework.org/schema/data/jpa/spring-jpa.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd"
+	   default-lazy-init="true">
+
+	<description>Spring公共配置</description>
+	<aop:aspectj-autoproxy proxy-target-class="true"/>
+
+	<context:component-scan base-package="com.reyun.security" />
+	<context:component-scan base-package="com.reyun.service" />
+	<context:component-scan base-package="com.reyun.task" />
+	<context:component-scan base-package="com.reyun.taskexecute" />
+
+
+	<context:property-placeholder location="classpath:redis.properties" />
+
+	<!--Redis配置-->
+	<bean id="poolConfig" class="redis.clients.jedis.JedisPoolConfig">
+		<property name="maxIdle" value="300" />
+		<property name="maxTotal" value="600" />
+		<property name="maxWaitMillis" value="1000"></property>
+		<property name="testOnBorrow" value="true" />
+	</bean>
+
+	<bean id="connectionFactory" class="org.springframework.data.redis.connection.jedis.JedisConnectionFactory" p:hostName="${redis.surl.host}" p:port="${redis.surl.port}" p:poolConfig-ref="poolConfig"/>
+
+	<bean id="redisTemplate" class="org.springframework.data.redis.core.StringRedisTemplate">
+		<property name="connectionFactory" ref="connectionFactory" />
+	</bean>
+	<!--//Redis配置 -->
+
+	<bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource" destroy-method="close">
+		<property name="driverClassName" value="${datasource.driver}" />
+		<property name="url" value="${datasource.url}" />
+		<property name="username" value="${datasource.username}" />
+		<property name="password" value="${datasource.password}" />
+
+		<!-- 配置初始化大小、最小、最大 -->
+		<property name="initialSize" value="10" />
+		<property name="minIdle" value="5" />
+		<property name="maxActive" value="50" />
+
+		<!-- 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒 -->
+		<property name="timeBetweenEvictionRunsMillis" value="60000" />
+
+		<!-- 配置一个连接在池中最小生存的时间,单位是毫秒 -->
+		<property name="minEvictableIdleTimeMillis" value="300000" />
+	</bean>
+
+	<!--指定实现JPA的适配器 -->
+	<bean id="hibernateJpaVendorAdapter"
+		  class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter">
+		<property name="databasePlatform" value="org.hibernate.dialect.MySQLDialect" />
+		<!-- <property name="generateDdl" value="false" /> -->
+	</bean>
+
+	<!-- JPA实体管理工厂的配置 -->
+	<bean id="entityManagerFactory"
+		class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
+		<property name="dataSource" ref="dataSource" />
+		<property name="jpaVendorAdapter" ref="hibernateJpaVendorAdapter" />
+		<property name="packagesToScan" value="com.reyun.model" /><!--待扫描的实体类包,不再需要persistence.xml了 -->
+		<property name="jpaProperties">
+			<props>
+				<prop key="hibernate.ejb.naming_strategy">org.hibernate.cfg.ImprovedNamingStrategy</prop>
+				<prop key="hibernate.show_sql">false</prop>
+				<prop key="hibernate.hbm2ddl.auto">update</prop><!-- none -->
+
+				<prop key="hibernate.connection.CharSet">utf8</prop>
+				<prop key="hibernate.connection.characterEncoding">utf8</prop>
+				<prop key="hibernate.connection.useUnicode">true</prop>
+			</props>
+		</property>
+	</bean>
+
+	<!-- Spring Data Jpa配置 -->
+	<jpa:repositories base-package="com.reyun.repository" repository-impl-postfix="Impl" transaction-manager-ref="transactionManager" entity-manager-factory-ref="entityManagerFactory" />
+
+	<!-- Jpa 事务配置 -->
+	<bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager">
+		<property name="entityManagerFactory" ref="entityManagerFactory" />
+	</bean>
+
+	<tx:advice id="txAdvice" transaction-manager="transactionManager">
+		<tx:attributes>
+			<tx:method name="report*" propagation="SUPPORTS" read-only="true" />
+			<tx:method name="list*" propagation="SUPPORTS" read-only="true" />
+			<tx:method name="query*" propagation="SUPPORTS" read-only="true" />
+			<tx:method name="find*" propagation="SUPPORTS" read-only="true" />
+			<tx:method name="*" propagation="REQUIRED" />
+		</tx:attributes>
+	</tx:advice>
+
+	<aop:config expose-proxy="true">
+		<aop:pointcut id="txPointcut" expression="execution(* com.reyun.service.*.*(..))" />
+		<aop:advisor advice-ref="txAdvice" pointcut-ref="txPointcut" />
+	</aop:config>
+
+
+	<!-- JSR303 Validator定义 -->
+	<bean id="validator" class="org.springframework.validation.beanvalidation.LocalValidatorFactoryBean" />
+
+	<bean id="appUtils" class="com.reyun.context.AppUtils" lazy-init="false" />
+
+
+    <!-- SpringMVC上传文件时,需要配置MultipartResolver处理器 -->
+    <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
+        <property name="defaultEncoding" value="UTF-8"/>
+        <!-- 指定所上传文件的总大小不能超过2000KB。注意maxUploadSize属性的限制不是针对单个文件,而是所有文件的容量之和 -->
+        <property name="maxUploadSize" value="2000000"/>
+    </bean>
+</beans>
diff --git a/src/main/resources/common.properties b/src/main/resources/common.properties
new file mode 100644
index 0000000..877142e
--- /dev/null
+++ b/src/main/resources/common.properties
@@ -0,0 +1,4 @@
+profile.table=${profile.table}
+event.table=${event.table}
+usergroup.table=${usergroup.table}
+account.check.url=${account.check.url}
\ No newline at end of file
diff --git a/src/main/resources/db.properties b/src/main/resources/db.properties
new file mode 100644
index 0000000..00ba1e6
--- /dev/null
+++ b/src/main/resources/db.properties
@@ -0,0 +1,4 @@
+db.driver=${datasource.driver}
+db.url=${datasource.url}
+db.username=${datasource.username}
+db.password=${datasource.password}
diff --git a/src/main/resources/upgrade/feature_20170911_blacklist.sql b/src/main/resources/upgrade/feature_20170911_blacklist.sql
new file mode 100644
index 0000000..4b1ec9c
--- /dev/null
+++ b/src/main/resources/upgrade/feature_20170911_blacklist.sql
@@ -0,0 +1 @@
+insert into config_param (key_param, value_param) values ('blacklist_download_url', 'http://www.trackingio.com/api/external/download/blacklist');
\ No newline at end of file
diff --git a/src/main/resources/upgrade/feature_20170911_shenmalogin.sql b/src/main/resources/upgrade/feature_20170911_shenmalogin.sql
new file mode 100644
index 0000000..5714a28
--- /dev/null
+++ b/src/main/resources/upgrade/feature_20170911_shenmalogin.sql
@@ -0,0 +1,6 @@
+ALTER TABLE `channel` ADD COLUMN `orderindex` integer COMMENT '渠道顺序';
+
+
+update channel set orderindex = 1 where type is not null and unique_name = 'gdt';
+update channel set orderindex = 2 where type is not null and unique_name = 'smsearch';
+update channel set orderindex = 3 where type is not null and unique_name = 'adwords';
\ No newline at end of file
diff --git a/src/main/websrc/404.html b/src/main/websrc/404.html
new file mode 100644
index 0000000..4bd2491
--- /dev/null
+++ b/src/main/websrc/404.html
@@ -0,0 +1,57 @@
+<!DOCTYPE html>
+<html>
+<head>
+    <meta charset="utf-8">
+    <title>灵犀</title>
+    <meta name="keywords" content="热云数据 灵犀" />
+    <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
+    <meta content="width=device-width, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0, user-scalable=0" name="viewport">
+</head>
+<style type="text/css">
+    html, body{
+        height: 100%;
+        overflow: hidden;
+        font-family: 'PingFang SC','Microsoft Yahei';
+    }
+    body{
+        margin: 0;
+        padding: 0;
+    }
+    .top, .content{
+        width: 100%;
+        height: 47px;
+        position: absolute;
+    }
+    .top{
+        background-color: #1b1b21;
+        top: 0px;
+        line-height: 47px;
+    }
+    .content{
+        height: auto;
+        background-color: #f1f1f1;
+        top: 47px;
+        bottom: 0px;
+        text-align: center;
+    }
+    .content img{
+        margin-top: 100px;
+    }
+    .content div{
+        margin-top: 30px;
+        color: #666666;
+        font-size: 16px;
+    }
+</style>
+ <body>
+     <div class="top">
+        <img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAANwAAAAuCAYAAAE0B0cFAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAADR5JREFUeNpi/P//PwM9ARMDnQELPsnY+QwM334xcHOxMXxdnEgfH/5fncbwA4v4aSgtBsRzoOwSINYB4ix8BjLii0OgD8GSUN8xokkzA/FfNDE1IL5FtoW0AAABRFcLmQZF6gSlzJ9/GBjYWeBxR1ufrUplkAGlTpDFUHAFShugKX0NpV+SG2cwS0B5jgdJnBWIfw/6BAIQQHRP/oO+fI6aC2dOAeIQWAIebICsmIN6BFnjLyBmVxZlYGjwwVDODsQ/kficQPydSKtAGUocyrYB4iM0j7nvvxlMgZRjvhMDo78+uHooBFaICsLcGEqvIHnsNNSB6B6bg+aZmVC2DpSGmXpkNM8NZJuIngAggEZjbtRzw8FzoGrg7z9EEwZE3AW2hIJmDj7PsZCjKWEhmHqcacfAOP0QwzUgW4tEI8QJNQoHOlnKAD0GAprgyogNRe4wgUA8icU8dhz2nIfSjvTy3P8fvxn4ga3pW7/+MDjBkmfkXJzm/oHSIkhilUjsDWitGEkktiGU3khzz8kJQfsFzAyfgJQnkN4PpL+pAxOamQJWLfdx2BeAxxrkLkcOlJ5Oj3ru/9yjDIwHbiHalnnAZpipPJjPSKXswg/EHwn0+Ecr8VHPDUUAEEDDOlmOpspRMBpxo2AAuwTk9JFAANgYBbdheIDt4wXx4AkF0IiRVOAMhq9MwIYNMxNkYPvrLwaGdemjkTPgEQcDHKxgyhnY0d0DjUxQO/Q/Dzu8f/cK3vtFBXfR2qwtQDyPDCc8AXXTsJitTIZZp4DYDMqWgiZCkA+nAXHDcCsq+4F4D6hx//0XA0uECQMDkIZ170Cd8kAQg4cNkksbt8L1gQJWCYifQ2lQpF1igIzd+jNARvNBXUNXIL6GZB+oR2YJxMvRupTFQGwCZR9DUx8F7YktRBL/AMRBQFzHgBgnlofSllBzpRkg86KgSLs1nHIcyDOqIAYnGwMLsP++AsgM99ZlCA2dxSAOzI2giFsHDWRQ4DHceEEw0SEXqAehkSgL5WcDMR+UfRxKf4VmaOTci9z33wfEy6DsmUiDJQJI5gijuQMUgRfQxHiGRcQBI6kASFnHzGN4zcjIUArMZf+B7A0//jAEc7IylAMjbTVQ3puXg2HbtEhw3ecGxLuwGMWFxEaeb5kExE3QYjAfiDWAeCo0J3gCcRoQh0JzBCjSQPOz7kDcCSrBkczhxBL4ttAIT4fmJh80+RXQCF0PSmtQPtdw6ceBUv+K8NkMb9lYGHBaCIw4RmDE2UBz5mCZxpSCRjIo54GmzyRGO+CjYLQfN9IAQAD2rSYkqigKfzNPZ0YrzUAyiBa1yIiirEUU/UNIQWRJSYS2GowgapNRtKisFrUogij7M6wopIR+IIgIdJNEWYtwoRU4loMLC39izMnpnHfvnXnzeKMzRpMM98Bh3n1z581793vnnnPPd662OG1xWjRwWjRwGjgtGjgtfy//PHOimIFpXuDy7rivVDgbTT/tug54DGD7UqBsiQbnvwKnpH8YKK8TJXBntwHFRXhLpz81vQcaWgV6uR4NyKQDjoHJEbRO8YlnKFk1D8u//QC6+lA/xWPmEn+l4RaYQAppHzcxac9y427rF+wJfMc9lwtVdC4Q9zbF3xWXN3626USE7XmD7Rwnip9P4ForEZ/k5sRyUD6HkYnAVSc4z1n7qFe7/RoYjJEt7RAc3FX5OdcGhpJEdac+B7+qLHCQtNTWP38Mi1WSYxk7cgCogEg+M6UUzkTgzNLP0QgOLSjCnYJck3dThGVbdFRoSq2qjwOPJdt2rT456Gw1XIXJm22eIEaprINgypnoPGgDLWxp35efTPEwr8b8Wo+lL5O7N+R/OeUHK2ztIxnl4yxTUpAixgvlJXhKxx/I3+3t7EWlfKOPkZ42wSNb+ko+cP7MhNfbR/rYZiVMu+wgfQhBysrqZLMmmS3yJ+mA7bmHLS+GsvpF8piBPIUY693rcB89tvabTLI4ZqKZ0+KosnOT2G2whfRoqThW28tqkXw9tHWa5FKDj6TNEhyWboffMKm6OclARknjOH2n29ozMgK4FeSRwqMwIhE0ULPFcGN1zSOxtBv5DdelV1FggwTqYQpWvFypz5rlTnrW4HKChaRrLL7OqQDoJQSLncpMsz6Bj0w0hddkxFS5fy2mkvqbO1BZ14I8AqaXfFfhzmvwu13IzzZwjqcXAndW7VYa7UKz9ODiOBZmHTD2V8chin5uyqmQ95FwqcF5iFqUAtIHMlDZyG5WRn8RS/DitVmcem06SM/I3yjrMixWqXxilbT8K2lZXqWBjxuQAcQcWoAvo8CjyalTaASzG/1mldYtOfBlKf4Ph+dDKa7rUn146xZnp+g1bWvEdAQnHCZXvwsgQKB1Jerky0Z3fwiuPB8WQ5TPpSpDKfZPFrQXpAdI+b5OjtEvrQt7zYDrzIkWDZwWDZwGTsukkj8CtHetsVGUUfQsfQnYYAzUEJUqGsEUFBuV2EA0kZhqkB9aLGIkPigxamKMib+M1scfoz9AkNAoxB/aqBATkqYEkwJ1VbQqtjyadAtGIqWoKGKT1j7He2budr+dbrfbgk2z3pNM2p3OTHdm7/nuvd/ecz8LTgwGGykNBiOcwWAwwhkMRjiDwZACudlwE26/axZJz5oOvPVg0AMnBVg9xy/JWarJgjAWf/WGD2rtDDp15GuBJPvlPLrUquINRrgkRCJA3yCwr224hxEG5PX82b5SgWB7mRV6OEtz2UehtjEGdAntpmkNyZnzQE7EDMRghEsfI5NwA8DOH5L39w+ieGY+Tj5ehqpl1/vr1szpHcDpXYeA3S3Iz8vBPDn3uHtOjgXcBiPchLBTCFVBz7ctivp39vvFqkeFYJWy/+WC3OEO7qzi2jzBXNhtIzVCrIlAPtY/SffLYJpDzvMIqtNGA0sJWab/M4KuT5MxZ8C62HSVcKx9ZR911slS9dSTTYaY7WN4nhpeBRIMuE8IVsI+pkI29nhzl0tgD7ctKS8kuVzLKcnlelP+H5LtZgT6kCV6jUPOa25zJvneL81gQKXhr1ZiTgZYPE75YGFoP58N5Y57ESgI/tTB6REECrgPjHBTH/wQT8pWGtr/nYScJ3r6fQnK13qMi2f0g08CJ0+4UMs6+eir60Yo9lg7zWt9pRuN5w/nNbfT6vHYYnWZTtxwoQkqEuK9alch6JTJpomUcVKxd80o90ct7B49tl1/v3OMZ8KBYFuIiLzfcL3402rsJOM3CHrnnlDvP3OUa7O+m+pBisu4zBf75lJp6MpDqboID1mU+UjG7U9eUcf1pZKSz+Z9HTj4DGotpJy6oLf5Fo7sZsjDq2Lt1WtvB8pL/Fyv4K9ubP+wCdu/iCFSkOd3M41PptyjRlCKkBCB7SCO/x4sLERJ0cLxtaz01KgYXj4R+luxhnauOD1fw6pK2Q44n1mLkvHeseaQ9OcKDS3vl60udMwCjNSHcQCgOIIqTlcUyPdGRSc13PFFkebqsyJpnwx5WObE1NSdT/MeV6oX25PmmI1IXofPPNwUAiVZzSGyfT49D9Wb10g8uQg1QjYa/j+XzYD37F0of+5ueOLxKjWUiYNthTuQaJQ9IsSMTGwWcwiJZV9d0NMedgy+TA28C4l+0lDykSCvj/F/BjTUpVw0Ls+uy/A9MreLqqdxcVjJ4a5VtVVJ9V7o2EJkpiiepQNQukYHXdniHLKCcAwPOSHiBcLTz8JeRQjWSrldWzAmM6SKaf5CXWX0aMdwvhdLYQwtQtibuDAz17jg1iubXA+nzl3U21ivhK/S/IUhKnscsFt+TsjrTcvAmHnOWSUcvep420dHMtxHYW73Bdz39wi+G702zTFl6i0tpJwK2LXB92KI/YqaaDtqGtr8Kf07hGjxFQbmFeRi68YGRGVf7ZKrseDyGZJoiTm2/4bc/FxUiwfs0tyKa9Nd1T+I2RI+Nq9cDNxanFgI8D8CvTGV5Y8h0fQDSpLrkLxe3qeaG700hpfzG6JpaMjc7Yhs9Uroi4nXNO/kQHfQ2X+Fetix5CjM+Tbp5FaJ5rouHkag6l9oHm7q4BOGiZJPeVXL0fjxehTcUISD4pU26AfOcO0pCQM/EiJ6RzrgNbbD++UcvEvy0C/nvoKgJQPDmqHuPhQ+cAuad6zDfPl5Rsjm6XXWZvh+2nWiJBWYi4WbrvRqGLlcw81m9W6LdPR/CEG3nvgETZEew34frZrTMaxb7IStDUh00KHnvFIng3aHQsIWjFya5BhSd9Zh6Mdc929n334l9416/aiGl3M1d3Nt7KyeHw4fX9T752Dwo+ayMX2vnerVf8oGQ80WPVytjoS+AQwOofyNevQd68QL4tneHneI2oela25DU0Wpb/BNSHzHxuVn34Uh01x6k07K9NjjyC7CJbsQGRu3HBjuYzr+WQ15JBJm4k0xmaJCM5IMJj3YIHCVDkwDmncyV95hj+d/QDiDwXI4g8FghDMYjHAGgxHOYDBcKP4FR9hKCDLUAUMAAAAASUVORK5CYII=">
+     </div>
+     <div class="content">
+        <img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAJEAAABgCAYAAAFqEaAJAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAACtFJREFUeNpi/P//PwMIeK56C2GQAbaHCTOCaBaYgI0mOwOlgAVdoGbZCaI1t0RZ4DfsX5sz0Ya1XfmKwmcixRumpqZ45ZkIaYYZQMggrN5EBqdPn8bKJsllGRkZDD9+/MCq4cOHDwwPHjwg3mUzZszAabuAgAAYkxxmFKcz9OgmBTDCshM1AEAAgQ0D5ksQm1xTGYF5E+7F/+TmyyPXf4IcwEh2nqRafkSPHBZi8x6hFM9ErQxNdB4kK/8h50NQXps+fTpcDJmNLR3Bo79Kh5ukwAZGP7iMZxp0eY5q+Q0ggFAMoqQupBTA6lKswUSNepWMvE98+iYldZECCKUPJoZBCMh2FKiIuXnzJkpxg0wT0xSguqOQi66qqiqG9evXM7i5uZFcrJFcZhIC6urqYDowMBCFptRhRIcUqCxeuHAhGIPA8ePHwWIgAGsPbd26FateUJmNq81EVDmFXiTQI/fB6gOio4+SJhXV0hR6QTYQgJGhah+oPSc0iIqpdwABxIjUBwRR+4DYkc6O2A/ETqC2Krac5zgAoeKINy3RuyJGT7uDrr4jWASQ0nsnp0dBsoNIGQEYkk2Um0/+Dq02E9kOArWVYG2it2/fktRdo0mzBLlGFxYWhjvy1KlTFDVJyHIQrhCQk5NjiImJYZg0aRLZbSWyHASzCL1pCxIf0JYkzHJKHTE8chloOA/UPD1//jzD6tWrcaorLS2FJ3hYs5cmDoINBxoaGjKEhobiVBcVFYXCh7XLaZKGMjMzCaoBORgG8I15Dv+SesCaH9TugajLMA/xEBro7hBVh8qp1TcbVC4CCMCu1eM2CINR2qESbN0YOQQnYGTkAlwgXKBrJypOwMzIyFAxEAlxCHaGsFXqwloeqi3zF0SIAzg8yTI4dsj38tl837MHGVq4H7BnvJD8cNbMX0MzfTSm5vKrdIBv6MgjxeWBqbSZO0lLf8BTeBIPEffesL9/J6OgY03aa6Dtum5LOCiKgm49oWRZ1htTVdUiuWW16XYLYKjv+1IYhrTNsqyWdoA+7L1pmq1cUFiSTqdTIx/AeLKReQ3ooyhKi8A4jsUmyXEcajzRT3BN9jN7KWfdjs+DIGiRem3M7kliDYNgCeNJGzwFcm+appKu69RzumSwY4RekwBZlnvGQoJmd8WniBbu7TZnh50A61dZluKFANBoyVEx1EQe1TStqZMkof26JJIC4EgDJFlVVaU8zweJ7j7r1j9jFU+CtEs8wLZtKoJ7nicZhjE6DkQSMgF8B7wpiqLmnoQMrKjOPoubfjKlJ01JJSKkJYxUMqgnHWnJI95uaxwImh16LEhuD0+6lydt4dTWlkMAHMI7PwkP5397R4j4SN7q+iJt63jdVvBTFxWe9HUQNIr3unz+CcDOGbMmDERx/EbBOjqJuPsFxEVw0qFpF5e2o+DYD1AVcVBc2y8gKHV0aIrgYHe/gKuTk4ND1bn5H15IjosYi5pc3oOguajh/rx798783h3LkwzrGFnHneZCbK3jyTq+/eRI99bxFQFx2KGP5sEhThZoFMEh9eln2k+IN7o/tXWkNQlKHim7JoHCt4jV/Xk/edClPUh3GCISIMR//suiIUYCkUAkUKiD9LmmwmPW67V9rirDQcFSJpNhnU5Hbw+SQSpQHhBHFEnhef10OnV9BiX5p+A2oRcIfFEymXS1DQYDvi+BsGazyRqNhn0OUqTb7bo+o6VAqNeaz+dsMpm42gFUZbNZ+1wmPsrlMhuPx3oHaTCKtVqNM0N+DLGpUqmwdDqtd5AuFAquV2egzuVynN4QngMo1BmbADY4eUjYtQL11QQCTSbPSKLNMAw2HA5ZqVTi56Zpcq8R5Jqw2WzGFovFWeWSgRdIRZKJNgiDoFyv11kqlWL9fl+J7UGc1Wp11eF2szxI9igIgql9v997liJjeIJ5jESiqPIoMcS8DMyjKL2npQatxUgg2wSP6NcuAW7eXKB2u+3qHHYzANEKstVrQ0WYfA0wJ6BPZN/YINV5XUzz8r1UvxO4IN1qtTjeG4vF+Hm1WrWvIa/xst1uxzuK7y2XS3vHBhTAeHVavldohthms1G2Ywr3sng8zj0G3iYbimH83ivQAuXzedbr9fh7cNCCrj/WUfn74K7FUAOPXSwW7ViGzFt1r0uYFx9kN+rAUR97quFkMp37ANI0T3kQCUQCBcEiUaJAHkQCkUChi0G/7EB9Rqi4ZevHg14i6CzPfgQCef6IRXYEhEEfHw59Pm0tRuYQiL39vFuvrySF0j4Ct+0fTfMhsz8B2jt7lkaiKAzP/gA7EQJWVgqCYGUjWAkiiJVikcIi2LmNYOGWsVgsXBYRhPRiYSl20U6wUtBiG6uAYCNoLazPJSdMJjMxk8lsdmbeBwZhEu983DfnnPm47+05BjXHkEH1c9nTqcstvPTg3j0KGz83iF9ZXQLKPXvNfk58wRFFx8QaRTBLzTshF5WxJlBRvhcqGoVEJCQiIYb46quRhbHmWWCYI64ViUT2I1ERJnCQiFImC29AZoGkk3AonQldnQmJSKgmKhZYITD389vbW+QofUwzzs7O3JAds2ZhQPvq6mqsGUNwCmDm28nJSa9cLktEeQC7GRxVjDAR4dSCGQnWEYeHh040iKpWqznnBFxczs/P3bQ13cAwYBgzQimdpRh9MFVBQEErHz/YaSAgos7R0VEr6jC2f3d316tWqy4yMW43CvxJ8DBBQN22JRFlCISBCwadj20R0SWK09NT93dxcTH0czO7QWhmahOMYkQrxIdzUKVSUU2UZUhB1CGIh8hCJLFIEYXVP1FDlv0pzD/uG0cALKeAaPWVc4lElAGOj4+deRHphOiTllERaZLUZjXUwcHBl7WSRJQREJBFFqY+jcK8IM0MioiFz9rt7W3oVRgRBxCnzRqKgCzF+b3d/FAfsZAm/6XBpkSUgCiHMEtn1C1h39ve3nYi4hbA2NhYW1qiBrKUZUJASN22ZVeDeRVPYe8TdYNUhCgoxvH18xuuWsHNuiKmrG7EHTLU8eWkL+rrAexgSPIANmL097e0hgwJIREJiUiosI4PNp74DuIvaOBweXl56eZvB/wI8XPG/ZKrqqenJ296etpbX193rpY4X97f33e0PTMz02rD33aYj+Ha2pqbfx6bUR7OPjw8eBMTE97Ly4szleSKz0wl2d7S0lLbfPR2LDyQ7eW4olzKbT8koj6gY4IdDjc3N16j0fB2dnY6PsM/dmtrq+3//B0ZRZi4TKwnJyfOdjUIJpvj4+NtokhyXLaPwR+M0lmf0DEbGxtOFEQCP3d3dx0TyBjz8/POXj8uRDI615aLiwu3nrZoMwz2gX0Z1HGpJkoBnK6JADxdf3x8bK2fm5tzv9QgdArrZ2dnY2+LNMUv35bl5WW3nrZoM6zDWc++wOjoaIf/Mfa/pVKp5+NSTTRASC1+SFukMAO376mpKRctrq+vvff3d9dZKysr7lnWV+0FoYaKch2nw2mT7fMY4/n52RsZGXH1z+bmZstVHCfyer3uIox9Z2FhofUQuJfj6mV//hd0szEn6Gaj0H0iIREJke3CGnv5P40P9YRElIxhDf8VSmdCIhISkRB91kRXXsCetkBzohSJqzQjEe8g7Osc55r9Zj+nenX2o7kI4WB2GJ0Fkbgm+vW5fNepEH3yk5qorPMgElBBRLwp9ftzedX5EDF4beqm9Be/DcAm5uwH3wAAAABJRU5ErkJggg==">
+        <div>
+            糟糕, 您访问的页面不存在啦!
+        </div>
+     </div>
+ </body>
+</html>
diff --git a/src/main/websrc/502.html b/src/main/websrc/502.html
new file mode 100644
index 0000000..c7b886b
--- /dev/null
+++ b/src/main/websrc/502.html
@@ -0,0 +1,65 @@
+<!DOCTYPE html>
+<html>
+<head>
+    <meta charset="utf-8">
+    <title>灵犀</title>
+    <meta name="keywords" content="热云数据 灵犀" />
+    <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
+    <meta content="width=device-width, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0, user-scalable=0" name="viewport">
+</head>
+<style type="text/css">
+    html, body{
+        height: 100%;
+        overflow: hidden;
+        font-family: 'PingFang SC','Microsoft Yahei';
+    }
+    body{
+        margin: 0;
+        padding: 0;
+    }
+    .top, .content{
+        width: 100%;
+        height: 47px;
+        position: absolute;
+    }
+    .top{
+        background-color: #1b1b21;
+        top: 0px;
+        line-height: 47px;
+    }
+    .content{
+        height: auto;
+        background-color: #f1f1f1;
+        top: 47px;
+        bottom: 0px;
+        text-align: center;
+    }
+    .content img{
+        margin-top: 100px;
+    }
+    .content div{
+        margin-top: 30px;
+        color: #333333;
+        font-size: 16px;
+    }
+    .content div div{
+        margin-top: 10px;
+        color: #999999;
+        font-size: 14px;
+    }
+</style>
+ <body>
+     <div class="top">
+        <img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAANwAAAAuCAYAAAE0B0cFAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAADR5JREFUeNpi/P//PwM9ARMDnQELPsnY+QwM334xcHOxMXxdnEgfH/5fncbwA4v4aSgtBsRzoOwSINYB4ix8BjLii0OgD8GSUN8xokkzA/FfNDE1IL5FtoW0AAABRFcLmQZF6gSlzJ9/GBjYWeBxR1ufrUplkAGlTpDFUHAFShugKX0NpV+SG2cwS0B5jgdJnBWIfw/6BAIQQHRP/oO+fI6aC2dOAeIQWAIebICsmIN6BFnjLyBmVxZlYGjwwVDODsQ/kficQPydSKtAGUocyrYB4iM0j7nvvxlMgZRjvhMDo78+uHooBFaICsLcGEqvIHnsNNSB6B6bg+aZmVC2DpSGmXpkNM8NZJuIngAggEZjbtRzw8FzoGrg7z9EEwZE3AW2hIJmDj7PsZCjKWEhmHqcacfAOP0QwzUgW4tEI8QJNQoHOlnKAD0GAprgyogNRe4wgUA8icU8dhz2nIfSjvTy3P8fvxn4ga3pW7/+MDjBkmfkXJzm/oHSIkhilUjsDWitGEkktiGU3khzz8kJQfsFzAyfgJQnkN4PpL+pAxOamQJWLfdx2BeAxxrkLkcOlJ5Oj3ru/9yjDIwHbiHalnnAZpipPJjPSKXswg/EHwn0+Ecr8VHPDUUAEEDDOlmOpspRMBpxo2AAuwTk9JFAANgYBbdheIDt4wXx4AkF0IiRVOAMhq9MwIYNMxNkYPvrLwaGdemjkTPgEQcDHKxgyhnY0d0DjUxQO/Q/Dzu8f/cK3vtFBXfR2qwtQDyPDCc8AXXTsJitTIZZp4DYDMqWgiZCkA+nAXHDcCsq+4F4D6hx//0XA0uECQMDkIZ170Cd8kAQg4cNkksbt8L1gQJWCYifQ2lQpF1igIzd+jNARvNBXUNXIL6GZB+oR2YJxMvRupTFQGwCZR9DUx8F7YktRBL/AMRBQFzHgBgnlofSllBzpRkg86KgSLs1nHIcyDOqIAYnGwMLsP++AsgM99ZlCA2dxSAOzI2giFsHDWRQ4DHceEEw0SEXqAehkSgL5WcDMR+UfRxKf4VmaOTci9z33wfEy6DsmUiDJQJI5gijuQMUgRfQxHiGRcQBI6kASFnHzGN4zcjIUArMZf+B7A0//jAEc7IylAMjbTVQ3puXg2HbtEhw3ecGxLuwGMWFxEaeb5kExE3QYjAfiDWAeCo0J3gCcRoQh0JzBCjSQPOz7kDcCSrBkczhxBL4ttAIT4fmJh80+RXQCF0PSmtQPtdw6ceBUv+K8NkMb9lYGHBaCIw4RmDE2UBz5mCZxpSCRjIo54GmzyRGO+CjYLQfN9IAQAD2rSYkqigKfzNPZ0YrzUAyiBa1yIiirEUU/UNIQWRJSYS2GowgapNRtKisFrUogij7M6wopIR+IIgIdJNEWYtwoRU4loMLC39izMnpnHfvnXnzeKMzRpMM98Bh3n1z581793vnnnPPd662OG1xWjRwWjRwGjgtGjgtfy//PHOimIFpXuDy7rivVDgbTT/tug54DGD7UqBsiQbnvwKnpH8YKK8TJXBntwHFRXhLpz81vQcaWgV6uR4NyKQDjoHJEbRO8YlnKFk1D8u//QC6+lA/xWPmEn+l4RaYQAppHzcxac9y427rF+wJfMc9lwtVdC4Q9zbF3xWXN3626USE7XmD7Rwnip9P4ForEZ/k5sRyUD6HkYnAVSc4z1n7qFe7/RoYjJEt7RAc3FX5OdcGhpJEdac+B7+qLHCQtNTWP38Mi1WSYxk7cgCogEg+M6UUzkTgzNLP0QgOLSjCnYJck3dThGVbdFRoSq2qjwOPJdt2rT456Gw1XIXJm22eIEaprINgypnoPGgDLWxp35efTPEwr8b8Wo+lL5O7N+R/OeUHK2ztIxnl4yxTUpAixgvlJXhKxx/I3+3t7EWlfKOPkZ42wSNb+ko+cP7MhNfbR/rYZiVMu+wgfQhBysrqZLMmmS3yJ+mA7bmHLS+GsvpF8piBPIUY693rcB89tvabTLI4ZqKZ0+KosnOT2G2whfRoqThW28tqkXw9tHWa5FKDj6TNEhyWboffMKm6OclARknjOH2n29ozMgK4FeSRwqMwIhE0ULPFcGN1zSOxtBv5DdelV1FggwTqYQpWvFypz5rlTnrW4HKChaRrLL7OqQDoJQSLncpMsz6Bj0w0hddkxFS5fy2mkvqbO1BZ14I8AqaXfFfhzmvwu13IzzZwjqcXAndW7VYa7UKz9ODiOBZmHTD2V8chin5uyqmQ95FwqcF5iFqUAtIHMlDZyG5WRn8RS/DitVmcem06SM/I3yjrMixWqXxilbT8K2lZXqWBjxuQAcQcWoAvo8CjyalTaASzG/1mldYtOfBlKf4Ph+dDKa7rUn146xZnp+g1bWvEdAQnHCZXvwsgQKB1Jerky0Z3fwiuPB8WQ5TPpSpDKfZPFrQXpAdI+b5OjtEvrQt7zYDrzIkWDZwWDZwGTsukkj8CtHetsVGUUfQsfQnYYAzUEJUqGsEUFBuV2EA0kZhqkB9aLGIkPigxamKMib+M1scfoz9AkNAoxB/aqBATkqYEkwJ1VbQqtjyadAtGIqWoKGKT1j7He2budr+dbrfbgk2z3pNM2p3OTHdm7/nuvd/ecz8LTgwGGykNBiOcwWAwwhkMRjiDwZACudlwE26/axZJz5oOvPVg0AMnBVg9xy/JWarJgjAWf/WGD2rtDDp15GuBJPvlPLrUquINRrgkRCJA3yCwr224hxEG5PX82b5SgWB7mRV6OEtz2UehtjEGdAntpmkNyZnzQE7EDMRghEsfI5NwA8DOH5L39w+ieGY+Tj5ehqpl1/vr1szpHcDpXYeA3S3Iz8vBPDn3uHtOjgXcBiPchLBTCFVBz7ctivp39vvFqkeFYJWy/+WC3OEO7qzi2jzBXNhtIzVCrIlAPtY/SffLYJpDzvMIqtNGA0sJWab/M4KuT5MxZ8C62HSVcKx9ZR911slS9dSTTYaY7WN4nhpeBRIMuE8IVsI+pkI29nhzl0tgD7ctKS8kuVzLKcnlelP+H5LtZgT6kCV6jUPOa25zJvneL81gQKXhr1ZiTgZYPE75YGFoP58N5Y57ESgI/tTB6REECrgPjHBTH/wQT8pWGtr/nYScJ3r6fQnK13qMi2f0g08CJ0+4UMs6+eir60Yo9lg7zWt9pRuN5w/nNbfT6vHYYnWZTtxwoQkqEuK9alch6JTJpomUcVKxd80o90ct7B49tl1/v3OMZ8KBYFuIiLzfcL3402rsJOM3CHrnnlDvP3OUa7O+m+pBisu4zBf75lJp6MpDqboID1mU+UjG7U9eUcf1pZKSz+Z9HTj4DGotpJy6oLf5Fo7sZsjDq2Lt1WtvB8pL/Fyv4K9ubP+wCdu/iCFSkOd3M41PptyjRlCKkBCB7SCO/x4sLERJ0cLxtaz01KgYXj4R+luxhnauOD1fw6pK2Q44n1mLkvHeseaQ9OcKDS3vl60udMwCjNSHcQCgOIIqTlcUyPdGRSc13PFFkebqsyJpnwx5WObE1NSdT/MeV6oX25PmmI1IXofPPNwUAiVZzSGyfT49D9Wb10g8uQg1QjYa/j+XzYD37F0of+5ueOLxKjWUiYNthTuQaJQ9IsSMTGwWcwiJZV9d0NMedgy+TA28C4l+0lDykSCvj/F/BjTUpVw0Ls+uy/A9MreLqqdxcVjJ4a5VtVVJ9V7o2EJkpiiepQNQukYHXdniHLKCcAwPOSHiBcLTz8JeRQjWSrldWzAmM6SKaf5CXWX0aMdwvhdLYQwtQtibuDAz17jg1iubXA+nzl3U21ivhK/S/IUhKnscsFt+TsjrTcvAmHnOWSUcvep420dHMtxHYW73Bdz39wi+G702zTFl6i0tpJwK2LXB92KI/YqaaDtqGtr8Kf07hGjxFQbmFeRi68YGRGVf7ZKrseDyGZJoiTm2/4bc/FxUiwfs0tyKa9Nd1T+I2RI+Nq9cDNxanFgI8D8CvTGV5Y8h0fQDSpLrkLxe3qeaG700hpfzG6JpaMjc7Yhs9Uroi4nXNO/kQHfQ2X+Fetix5CjM+Tbp5FaJ5rouHkag6l9oHm7q4BOGiZJPeVXL0fjxehTcUISD4pU26AfOcO0pCQM/EiJ6RzrgNbbD++UcvEvy0C/nvoKgJQPDmqHuPhQ+cAuad6zDfPl5Rsjm6XXWZvh+2nWiJBWYi4WbrvRqGLlcw81m9W6LdPR/CEG3nvgETZEew34frZrTMaxb7IStDUh00KHnvFIng3aHQsIWjFya5BhSd9Zh6Mdc929n334l9416/aiGl3M1d3Nt7KyeHw4fX9T752Dwo+ayMX2vnerVf8oGQ80WPVytjoS+AQwOofyNevQd68QL4tneHneI2oela25DU0Wpb/BNSHzHxuVn34Uh01x6k07K9NjjyC7CJbsQGRu3HBjuYzr+WQ15JBJm4k0xmaJCM5IMJj3YIHCVDkwDmncyV95hj+d/QDiDwXI4g8FghDMYjHAGgxHOYDBcKP4FR9hKCDLUAUMAAAAASUVORK5CYII=">
+     </div>
+     <div class="content">
+        <img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAJEAAABgCAYAAAFqEaAJAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAACXpJREFUeNpi/P//PwMIeK56C2GQAbaHCTOCaBaYgI0mOwOlgAVdoGbZCaI1t0RZ4DfsX5sz0Ya1XfmKwmfCpujNmzdgDAeNoeR5E91QEBBqWMPwc/Mchq8W/nA5ERERDPVYXQZSCMdTM8FinGd3YDWAaG9+3bsKoqg1mijv4vXmd30nMCYWMDFQEbBgj25OwjpffMUQYoRlJ2oAgAACGwbMlyA2uaYyAvMm3Iv/yc2XR67/BDmAkew8SbX8SHReRAEfX5OfD2GGwbLOm+zpFORBHkS6EllQgTcPshDjGjD4+pGCIgbJO1AbyMt3yF4hVLTgz3Mv8LFplN8AAgjFIErqQkoBrC7FGkzUqFfJyPvEpyYQqNLhproj0LM9SUkcb9FABiCUukl2FF7LkDI6Rl4lAzBRy0H/gG0SdAcSGzJUdRSyAxg3TsMqTpWGAdHpAa0txHh+H6aD61eTFVrkJ3Rg2gFZiC0DwMXR5KiW0BHZlxNHM4pUcTIchV6QDQRgZKjaB2rPCTEMHvAOIIAYkfqAIAqUWh3p7Ij9QOwEaqtiKw4cByBUHPGmJXpXxOhpl4lhkAGCRQApvXdyehQkO4iUEQBqNFHoHmU3n/ylblWCq/qgVpuJhSoGN0cA4/YvuIKleaImpuIV+QeJhk+n9zH8UtSjKISYKHYMtE3039SdgW/bgLcmMXtZ/Bv6B6jRhqXhBgKsT2/B1ZKT+MlusLG8vM8ggNx0OLMLwWkKY3iTNY2+USawpgst9v5jZ9M1yvCpX1TNwFA0k75tbCI00T7bUxJqdOlE0r35QVYPBBcAqleXYR7iITTQ3SGqDpVTq282qFwEEEBYQ4jC+YChDBhh/UOScv5AjJnSGxDKy0wMo4A2rX1adnFpAQh1m2keSJQ6YESkJFpMoVAbxO/4RLAVNFomDXRKIthlYSB+XIfxx1cG4bklDP84eBjeJXdT5A5q9koGTUpifX4XHEBgR/34wiAyNWv4piRcMYg3Zo9vYWDYtRAyYqBlwcB47QS4LQubERtoMPApaXUfPIDAgRRWAh6rgwMiV5UN+TIJFxBcUsfATMRyHlBAvcmcCoxSJqLLuWFRJgnPyMUaQEwTMhkYT+/E9PT0bAamL++Hd5mEnjJwgX8F0xkYt8xCHWuFAqGFVQwMkRUMDGrGwzu7EVo3wdQQgt+C5R0M30y8GLi8E4dxSqJCbcVFg3JntMU9VGs3UieZSJ2NpWYqoziQMCfLiRx+f/GVDPWkDe3DACWd29HsRq2UNBhWbQ3mbglosfD+ERIO+6H+xREQVfvYgPRzhsG1vG6wAFATXwKUkrpGAwh39xKImwECCN+8my8QLwNinmEeEF+AOBKIt2Cbc8NVHvkA8aYREDgMUD9uhiYIogNo2QjMUktJqfZ5YYzhPmuL1KzhHW08jrauRwNo6PX0h/t8/2gKonUKGu6LIUbEQghCGz9Gs9hoLTYaQEO3DEIGuJbP4JKjFRiWy2dAQHhOEXgCkvHX9+GZgiiK1XcvGBh+QgJGeH45A0P1spEVQISnrvMQnD+/GT5cO8vwR0x+NIuBAPvtMwzoGwcEVncMvxSEL+bwxurUuXAmYnUaUM99YMCZegzvWowQ4D6yBj6PClqR9t87lYERthJk21yGN4omA5rF6JaCcIKLe/GbeXg5A0Ng7shMQfxruxlYCSm6dIjhjW0kSW2r4VFI//3DwPriHlFKBZc1Dv9CGgN0Eb+SjPn9CwYRXm5gdcc5MrIY86c3DILfv2CIgxZ7Mt4+h1XP/55khrfpk6iehQZlFhNcXIddgpGR4b+iLnYpYOOR5fWjEZDFrp9gwLWb9L+xK8N/nzSM86vgjcdV7XRftU/3LCayqhenHGiZMOPFg3j1fzm4noHHPnB4ZjHu4+sJK/qNfwEXz4FlwziL3TrNQPcsPVR682BQPIthqIEB74vRAgyvvthoCsIdmLRSP2zHpAcjGA0gWmcx1GldUrcQ0Ej9i6+jKWg0i40G0NAugz4zQFd9jqDNLV9ISUHRIzCxRJESQKCV56CrYL6OgIAB+dEP6mcMMOhOkRtsALQtaiKQzhsNCqxg0qA79m+0mh9iACBAe+cTEkUUx/Hvbv6p0LXMixBEh4oIOtShQzezS5eMDhL9J5Qywoqigwr9WyhaoyQLrCBSKESk6A/lQamIpEMSdNBs7ZCuiMa2m5lrudOb3UVMd3F3dsbdefP9wIOBmZ0/b7/v92eY93tx26DIHDKVi6JVseukxSlatboRbf6cHqOsnQKSnqrI/5x0whGLWQtrWKFYquxESSoTWkCF/p4waCQUEaGICJnvb2KiYIa55mYglTOuaYmI+S2RFRZwoIgMxgx1HcxAsotw0J0RZmeE7swwtHw+nS6TAowgXb/nz+A4ik1WXxdy25ug2OwYLT6AiRXr2ClWEJFuo/XlPaDzWWhTLeHteHoD2FwCFO+mamQXkR7uLPdFA7LdXbN3vH2EwLAHP7ceNPcAoYiMRMGSlivIGPoa84jsz+9DC2H5dpxkd5lBRFpGnubROvkHqD8BeIfmPDTT04uChxeAiqsiv11geRExxVdRK7S4ymYJSFm9EcGzLaGmrJlRQuu7B6gtnyr5RxFZGVU4tUJA41Hm/ORNs2qOKN8bj/mF+A4BvhGKyLJ86wHqjoWqjWnmr3CD1yuAwT7LdqMULxu1kO3+ILKw2zrF4wrQcAb+bUcwsXJ9XPGalmdL1+zMkpZo0cd2/QQ0DcfzW1j46TUtkdmzszlpuw+8exLXoTaPG0pwMrwdp7vKefUAOcEAULSLIpLRneW23Y2UwY6TgS+wny9N/EJvWsMvJbfsN4U7klpEepLX6kLmoDuxUGftJiilp8OWqNk1VVY8rpiruxP20R/wba+kJTK9O1PdUf3x8DIOCWIbGYAyPhbeHu5P+PeZ/d0oaHYCh11Sv5SU2p3ZAr+R31QD27jGui9COPZL+5J7CHGOYG05vHvOYVnhcilFJHV2lt9YpV1AenbymB9LG2toiUzpznYKN/b4JvDLl9oHWeyAveSotEG23IH1qg3AqTsgdGeElih1gfVcLtLI8xt977REhO6MkLRyZ2p5+Z7+yRh7swy4on+ezm/0vVNE/5Gq6b+E7oxQRIQiIkRjTNSBGeVpLbQmipXoMNISFSFccZ3IizPyPxuanVVHGiEh1NVh2Ask6ZjommiV7AqikctqTLSX/UCSoEwVUaFodaJ52R8kAbwR3RT+Azu0G9c3F/mKAAAAAElFTkSuQmCC">
+        <div>
+            糟糕, 网络不畅
+            <div>
+            您可以点击 &nbsp;<a href="javascript:location.reload();" style="color: #4e93cf;">刷新</a> &nbsp;或稍后再试
+            </div>
+        </div>
+     </div>
+ </body>
+</html>
diff --git a/src/main/websrc/504.html b/src/main/websrc/504.html
new file mode 100644
index 0000000..c7b886b
--- /dev/null
+++ b/src/main/websrc/504.html
@@ -0,0 +1,65 @@
+<!DOCTYPE html>
+<html>
+<head>
+    <meta charset="utf-8">
+    <title>灵犀</title>
+    <meta name="keywords" content="热云数据 灵犀" />
+    <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
+    <meta content="width=device-width, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0, user-scalable=0" name="viewport">
+</head>
+<style type="text/css">
+    html, body{
+        height: 100%;
+        overflow: hidden;
+        font-family: 'PingFang SC','Microsoft Yahei';
+    }
+    body{
+        margin: 0;
+        padding: 0;
+    }
+    .top, .content{
+        width: 100%;
+        height: 47px;
+        position: absolute;
+    }
+    .top{
+        background-color: #1b1b21;
+        top: 0px;
+        line-height: 47px;
+    }
+    .content{
+        height: auto;
+        background-color: #f1f1f1;
+        top: 47px;
+        bottom: 0px;
+        text-align: center;
+    }
+    .content img{
+        margin-top: 100px;
+    }
+    .content div{
+        margin-top: 30px;
+        color: #333333;
+        font-size: 16px;
+    }
+    .content div div{
+        margin-top: 10px;
+        color: #999999;
+        font-size: 14px;
+    }
+</style>
+ <body>
+     <div class="top">
+        <img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAANwAAAAuCAYAAAE0B0cFAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAADR5JREFUeNpi/P//PwM9ARMDnQELPsnY+QwM334xcHOxMXxdnEgfH/5fncbwA4v4aSgtBsRzoOwSINYB4ix8BjLii0OgD8GSUN8xokkzA/FfNDE1IL5FtoW0AAABRFcLmQZF6gSlzJ9/GBjYWeBxR1ufrUplkAGlTpDFUHAFShugKX0NpV+SG2cwS0B5jgdJnBWIfw/6BAIQQHRP/oO+fI6aC2dOAeIQWAIebICsmIN6BFnjLyBmVxZlYGjwwVDODsQ/kficQPydSKtAGUocyrYB4iM0j7nvvxlMgZRjvhMDo78+uHooBFaICsLcGEqvIHnsNNSB6B6bg+aZmVC2DpSGmXpkNM8NZJuIngAggEZjbtRzw8FzoGrg7z9EEwZE3AW2hIJmDj7PsZCjKWEhmHqcacfAOP0QwzUgW4tEI8QJNQoHOlnKAD0GAprgyogNRe4wgUA8icU8dhz2nIfSjvTy3P8fvxn4ga3pW7/+MDjBkmfkXJzm/oHSIkhilUjsDWitGEkktiGU3khzz8kJQfsFzAyfgJQnkN4PpL+pAxOamQJWLfdx2BeAxxrkLkcOlJ5Oj3ru/9yjDIwHbiHalnnAZpipPJjPSKXswg/EHwn0+Ecr8VHPDUUAEEDDOlmOpspRMBpxo2AAuwTk9JFAANgYBbdheIDt4wXx4AkF0IiRVOAMhq9MwIYNMxNkYPvrLwaGdemjkTPgEQcDHKxgyhnY0d0DjUxQO/Q/Dzu8f/cK3vtFBXfR2qwtQDyPDCc8AXXTsJitTIZZp4DYDMqWgiZCkA+nAXHDcCsq+4F4D6hx//0XA0uECQMDkIZ170Cd8kAQg4cNkksbt8L1gQJWCYifQ2lQpF1igIzd+jNARvNBXUNXIL6GZB+oR2YJxMvRupTFQGwCZR9DUx8F7YktRBL/AMRBQFzHgBgnlofSllBzpRkg86KgSLs1nHIcyDOqIAYnGwMLsP++AsgM99ZlCA2dxSAOzI2giFsHDWRQ4DHceEEw0SEXqAehkSgL5WcDMR+UfRxKf4VmaOTci9z33wfEy6DsmUiDJQJI5gijuQMUgRfQxHiGRcQBI6kASFnHzGN4zcjIUArMZf+B7A0//jAEc7IylAMjbTVQ3puXg2HbtEhw3ecGxLuwGMWFxEaeb5kExE3QYjAfiDWAeCo0J3gCcRoQh0JzBCjSQPOz7kDcCSrBkczhxBL4ttAIT4fmJh80+RXQCF0PSmtQPtdw6ceBUv+K8NkMb9lYGHBaCIw4RmDE2UBz5mCZxpSCRjIo54GmzyRGO+CjYLQfN9IAQAD2rSYkqigKfzNPZ0YrzUAyiBa1yIiirEUU/UNIQWRJSYS2GowgapNRtKisFrUogij7M6wopIR+IIgIdJNEWYtwoRU4loMLC39izMnpnHfvnXnzeKMzRpMM98Bh3n1z581793vnnnPPd662OG1xWjRwWjRwGjgtGjgtfy//PHOimIFpXuDy7rivVDgbTT/tug54DGD7UqBsiQbnvwKnpH8YKK8TJXBntwHFRXhLpz81vQcaWgV6uR4NyKQDjoHJEbRO8YlnKFk1D8u//QC6+lA/xWPmEn+l4RaYQAppHzcxac9y427rF+wJfMc9lwtVdC4Q9zbF3xWXN3626USE7XmD7Rwnip9P4ForEZ/k5sRyUD6HkYnAVSc4z1n7qFe7/RoYjJEt7RAc3FX5OdcGhpJEdac+B7+qLHCQtNTWP38Mi1WSYxk7cgCogEg+M6UUzkTgzNLP0QgOLSjCnYJck3dThGVbdFRoSq2qjwOPJdt2rT456Gw1XIXJm22eIEaprINgypnoPGgDLWxp35efTPEwr8b8Wo+lL5O7N+R/OeUHK2ztIxnl4yxTUpAixgvlJXhKxx/I3+3t7EWlfKOPkZ42wSNb+ko+cP7MhNfbR/rYZiVMu+wgfQhBysrqZLMmmS3yJ+mA7bmHLS+GsvpF8piBPIUY693rcB89tvabTLI4ZqKZ0+KosnOT2G2whfRoqThW28tqkXw9tHWa5FKDj6TNEhyWboffMKm6OclARknjOH2n29ozMgK4FeSRwqMwIhE0ULPFcGN1zSOxtBv5DdelV1FggwTqYQpWvFypz5rlTnrW4HKChaRrLL7OqQDoJQSLncpMsz6Bj0w0hddkxFS5fy2mkvqbO1BZ14I8AqaXfFfhzmvwu13IzzZwjqcXAndW7VYa7UKz9ODiOBZmHTD2V8chin5uyqmQ95FwqcF5iFqUAtIHMlDZyG5WRn8RS/DitVmcem06SM/I3yjrMixWqXxilbT8K2lZXqWBjxuQAcQcWoAvo8CjyalTaASzG/1mldYtOfBlKf4Ph+dDKa7rUn146xZnp+g1bWvEdAQnHCZXvwsgQKB1Jerky0Z3fwiuPB8WQ5TPpSpDKfZPFrQXpAdI+b5OjtEvrQt7zYDrzIkWDZwWDZwGTsukkj8CtHetsVGUUfQsfQnYYAzUEJUqGsEUFBuV2EA0kZhqkB9aLGIkPigxamKMib+M1scfoz9AkNAoxB/aqBATkqYEkwJ1VbQqtjyadAtGIqWoKGKT1j7He2budr+dbrfbgk2z3pNM2p3OTHdm7/nuvd/ecz8LTgwGGykNBiOcwWAwwhkMRjiDwZACudlwE26/axZJz5oOvPVg0AMnBVg9xy/JWarJgjAWf/WGD2rtDDp15GuBJPvlPLrUquINRrgkRCJA3yCwr224hxEG5PX82b5SgWB7mRV6OEtz2UehtjEGdAntpmkNyZnzQE7EDMRghEsfI5NwA8DOH5L39w+ieGY+Tj5ehqpl1/vr1szpHcDpXYeA3S3Iz8vBPDn3uHtOjgXcBiPchLBTCFVBz7ctivp39vvFqkeFYJWy/+WC3OEO7qzi2jzBXNhtIzVCrIlAPtY/SffLYJpDzvMIqtNGA0sJWab/M4KuT5MxZ8C62HSVcKx9ZR911slS9dSTTYaY7WN4nhpeBRIMuE8IVsI+pkI29nhzl0tgD7ctKS8kuVzLKcnlelP+H5LtZgT6kCV6jUPOa25zJvneL81gQKXhr1ZiTgZYPE75YGFoP58N5Y57ESgI/tTB6REECrgPjHBTH/wQT8pWGtr/nYScJ3r6fQnK13qMi2f0g08CJ0+4UMs6+eir60Yo9lg7zWt9pRuN5w/nNbfT6vHYYnWZTtxwoQkqEuK9alch6JTJpomUcVKxd80o90ct7B49tl1/v3OMZ8KBYFuIiLzfcL3402rsJOM3CHrnnlDvP3OUa7O+m+pBisu4zBf75lJp6MpDqboID1mU+UjG7U9eUcf1pZKSz+Z9HTj4DGotpJy6oLf5Fo7sZsjDq2Lt1WtvB8pL/Fyv4K9ubP+wCdu/iCFSkOd3M41PptyjRlCKkBCB7SCO/x4sLERJ0cLxtaz01KgYXj4R+luxhnauOD1fw6pK2Q44n1mLkvHeseaQ9OcKDS3vl60udMwCjNSHcQCgOIIqTlcUyPdGRSc13PFFkebqsyJpnwx5WObE1NSdT/MeV6oX25PmmI1IXofPPNwUAiVZzSGyfT49D9Wb10g8uQg1QjYa/j+XzYD37F0of+5ueOLxKjWUiYNthTuQaJQ9IsSMTGwWcwiJZV9d0NMedgy+TA28C4l+0lDykSCvj/F/BjTUpVw0Ls+uy/A9MreLqqdxcVjJ4a5VtVVJ9V7o2EJkpiiepQNQukYHXdniHLKCcAwPOSHiBcLTz8JeRQjWSrldWzAmM6SKaf5CXWX0aMdwvhdLYQwtQtibuDAz17jg1iubXA+nzl3U21ivhK/S/IUhKnscsFt+TsjrTcvAmHnOWSUcvep420dHMtxHYW73Bdz39wi+G702zTFl6i0tpJwK2LXB92KI/YqaaDtqGtr8Kf07hGjxFQbmFeRi68YGRGVf7ZKrseDyGZJoiTm2/4bc/FxUiwfs0tyKa9Nd1T+I2RI+Nq9cDNxanFgI8D8CvTGV5Y8h0fQDSpLrkLxe3qeaG700hpfzG6JpaMjc7Yhs9Uroi4nXNO/kQHfQ2X+Fetix5CjM+Tbp5FaJ5rouHkag6l9oHm7q4BOGiZJPeVXL0fjxehTcUISD4pU26AfOcO0pCQM/EiJ6RzrgNbbD++UcvEvy0C/nvoKgJQPDmqHuPhQ+cAuad6zDfPl5Rsjm6XXWZvh+2nWiJBWYi4WbrvRqGLlcw81m9W6LdPR/CEG3nvgETZEew34frZrTMaxb7IStDUh00KHnvFIng3aHQsIWjFya5BhSd9Zh6Mdc929n334l9416/aiGl3M1d3Nt7KyeHw4fX9T752Dwo+ayMX2vnerVf8oGQ80WPVytjoS+AQwOofyNevQd68QL4tneHneI2oela25DU0Wpb/BNSHzHxuVn34Uh01x6k07K9NjjyC7CJbsQGRu3HBjuYzr+WQ15JBJm4k0xmaJCM5IMJj3YIHCVDkwDmncyV95hj+d/QDiDwXI4g8FghDMYjHAGgxHOYDBcKP4FR9hKCDLUAUMAAAAASUVORK5CYII=">
+     </div>
+     <div class="content">
+        <img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAJEAAABgCAYAAAFqEaAJAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAACXpJREFUeNpi/P//PwMIeK56C2GQAbaHCTOCaBaYgI0mOwOlgAVdoGbZCaI1t0RZ4DfsX5sz0Ya1XfmKwmfCpujNmzdgDAeNoeR5E91QEBBqWMPwc/Mchq8W/nA5ERERDPVYXQZSCMdTM8FinGd3YDWAaG9+3bsKoqg1mijv4vXmd30nMCYWMDFQEbBgj25OwjpffMUQYoRlJ2oAgAACGwbMlyA2uaYyAvMm3Iv/yc2XR67/BDmAkew8SbX8SHReRAEfX5OfD2GGwbLOm+zpFORBHkS6EllQgTcPshDjGjD4+pGCIgbJO1AbyMt3yF4hVLTgz3Mv8LFplN8AAgjFIErqQkoBrC7FGkzUqFfJyPvEpyYQqNLhproj0LM9SUkcb9FABiCUukl2FF7LkDI6Rl4lAzBRy0H/gG0SdAcSGzJUdRSyAxg3TsMqTpWGAdHpAa0txHh+H6aD61eTFVrkJ3Rg2gFZiC0DwMXR5KiW0BHZlxNHM4pUcTIchV6QDQRgZKjaB2rPCTEMHvAOIIAYkfqAIAqUWh3p7Ij9QOwEaqtiKw4cByBUHPGmJXpXxOhpl4lhkAGCRQApvXdyehQkO4iUEQBqNFHoHmU3n/ylblWCq/qgVpuJhSoGN0cA4/YvuIKleaImpuIV+QeJhk+n9zH8UtSjKISYKHYMtE3039SdgW/bgLcmMXtZ/Bv6B6jRhqXhBgKsT2/B1ZKT+MlusLG8vM8ggNx0OLMLwWkKY3iTNY2+USawpgst9v5jZ9M1yvCpX1TNwFA0k75tbCI00T7bUxJqdOlE0r35QVYPBBcAqleXYR7iITTQ3SGqDpVTq282qFwEEEBYQ4jC+YChDBhh/UOScv5AjJnSGxDKy0wMo4A2rX1adnFpAQh1m2keSJQ6YESkJFpMoVAbxO/4RLAVNFomDXRKIthlYSB+XIfxx1cG4bklDP84eBjeJXdT5A5q9koGTUpifX4XHEBgR/34wiAyNWv4piRcMYg3Zo9vYWDYtRAyYqBlwcB47QS4LQubERtoMPApaXUfPIDAgRRWAh6rgwMiV5UN+TIJFxBcUsfATMRyHlBAvcmcCoxSJqLLuWFRJgnPyMUaQEwTMhkYT+/E9PT0bAamL++Hd5mEnjJwgX8F0xkYt8xCHWuFAqGFVQwMkRUMDGrGwzu7EVo3wdQQgt+C5R0M30y8GLi8E4dxSqJCbcVFg3JntMU9VGs3UieZSJ2NpWYqoziQMCfLiRx+f/GVDPWkDe3DACWd29HsRq2UNBhWbQ3mbglosfD+ERIO+6H+xREQVfvYgPRzhsG1vG6wAFATXwKUkrpGAwh39xKImwECCN+8my8QLwNinmEeEF+AOBKIt2Cbc8NVHvkA8aYREDgMUD9uhiYIogNo2QjMUktJqfZ5YYzhPmuL1KzhHW08jrauRwNo6PX0h/t8/2gKonUKGu6LIUbEQghCGz9Gs9hoLTYaQEO3DEIGuJbP4JKjFRiWy2dAQHhOEXgCkvHX9+GZgiiK1XcvGBh+QgJGeH45A0P1spEVQISnrvMQnD+/GT5cO8vwR0x+NIuBAPvtMwzoGwcEVncMvxSEL+bwxurUuXAmYnUaUM99YMCZegzvWowQ4D6yBj6PClqR9t87lYERthJk21yGN4omA5rF6JaCcIKLe/GbeXg5A0Ng7shMQfxruxlYCSm6dIjhjW0kSW2r4VFI//3DwPriHlFKBZc1Dv9CGgN0Eb+SjPn9CwYRXm5gdcc5MrIY86c3DILfv2CIgxZ7Mt4+h1XP/55khrfpk6iehQZlFhNcXIddgpGR4b+iLnYpYOOR5fWjEZDFrp9gwLWb9L+xK8N/nzSM86vgjcdV7XRftU/3LCayqhenHGiZMOPFg3j1fzm4noHHPnB4ZjHu4+sJK/qNfwEXz4FlwziL3TrNQPcsPVR682BQPIthqIEB74vRAgyvvthoCsIdmLRSP2zHpAcjGA0gWmcx1GldUrcQ0Ej9i6+jKWg0i40G0NAugz4zQFd9jqDNLV9ISUHRIzCxRJESQKCV56CrYL6OgIAB+dEP6mcMMOhOkRtsALQtaiKQzhsNCqxg0qA79m+0mh9iACBAe+cTEkUUx/Hvbv6p0LXMixBEh4oIOtShQzezS5eMDhL9J5Qywoqigwr9WyhaoyQLrCBSKESk6A/lQamIpEMSdNBs7ZCuiMa2m5lrudOb3UVMd3F3dsbdefP9wIOBmZ0/b7/v92eY93tx26DIHDKVi6JVseukxSlatboRbf6cHqOsnQKSnqrI/5x0whGLWQtrWKFYquxESSoTWkCF/p4waCQUEaGICJnvb2KiYIa55mYglTOuaYmI+S2RFRZwoIgMxgx1HcxAsotw0J0RZmeE7swwtHw+nS6TAowgXb/nz+A4ik1WXxdy25ug2OwYLT6AiRXr2ClWEJFuo/XlPaDzWWhTLeHteHoD2FwCFO+mamQXkR7uLPdFA7LdXbN3vH2EwLAHP7ceNPcAoYiMRMGSlivIGPoa84jsz+9DC2H5dpxkd5lBRFpGnubROvkHqD8BeIfmPDTT04uChxeAiqsiv11geRExxVdRK7S4ymYJSFm9EcGzLaGmrJlRQuu7B6gtnyr5RxFZGVU4tUJA41Hm/ORNs2qOKN8bj/mF+A4BvhGKyLJ86wHqjoWqjWnmr3CD1yuAwT7LdqMULxu1kO3+ILKw2zrF4wrQcAb+bUcwsXJ9XPGalmdL1+zMkpZo0cd2/QQ0DcfzW1j46TUtkdmzszlpuw+8exLXoTaPG0pwMrwdp7vKefUAOcEAULSLIpLRneW23Y2UwY6TgS+wny9N/EJvWsMvJbfsN4U7klpEepLX6kLmoDuxUGftJiilp8OWqNk1VVY8rpiruxP20R/wba+kJTK9O1PdUf3x8DIOCWIbGYAyPhbeHu5P+PeZ/d0oaHYCh11Sv5SU2p3ZAr+R31QD27jGui9COPZL+5J7CHGOYG05vHvOYVnhcilFJHV2lt9YpV1AenbymB9LG2toiUzpznYKN/b4JvDLl9oHWeyAveSotEG23IH1qg3AqTsgdGeElih1gfVcLtLI8xt977REhO6MkLRyZ2p5+Z7+yRh7swy4on+ezm/0vVNE/5Gq6b+E7oxQRIQiIkRjTNSBGeVpLbQmipXoMNISFSFccZ3IizPyPxuanVVHGiEh1NVh2Ask6ZjommiV7AqikctqTLSX/UCSoEwVUaFodaJ52R8kAbwR3RT+Azu0G9c3F/mKAAAAAElFTkSuQmCC">
+        <div>
+            糟糕, 网络不畅
+            <div>
+            您可以点击 &nbsp;<a href="javascript:location.reload();" style="color: #4e93cf;">刷新</a> &nbsp;或稍后再试
+            </div>
+        </div>
+     </div>
+ </body>
+</html>
diff --git a/src/main/websrc/activation.html b/src/main/websrc/activation.html
new file mode 100644
index 0000000..613d077
--- /dev/null
+++ b/src/main/websrc/activation.html
@@ -0,0 +1,82 @@
+<!DOCTYPE html>
+<html>
+<head>
+    <meta charset="utf-8">
+    <title>灵犀</title>
+    <meta name="keywords" content="热云数据 灵犀" />
+    <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
+    <meta content="width=device-width, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0, user-scalable=0" name="viewport">
+    <link rel="shortcut icon" href="favicon.ico" type="image/x-icon">
+    <!-- build:css styles/login.css -->
+    <link rel="stylesheet" type="text/css" href="styles/login.css">
+    <!-- endbuild -->
+    <!-- build:js scripts/change.js -->
+    <script src="js/app/page.js"></script>
+    <!-- endbuild -->
+    <!-- build:js scripts/regcom1.js -->
+    <script src="js/common/angular.min.js"></script>
+    <script src="js/common/echarts.min.js"></script>
+    <script src="js/common/jquery.min.js"></script>
+    <script src="js/common/jquery.cookie.min.js"></script>
+    <!-- endbuild -->
+    <!-- build:js scripts/regui.js -->
+    <script src="js/common/judge.js"></script>
+    <script src="js/login/module.js"></script>
+    <script src="js/app/HttpService.js"></script>
+    <script src="js/app/UtilService.js"></script>
+    <script src="js/login/acvitation.js"></script>
+    <!-- endbuild -->
+</head>
+
+ <body ng-app="app" ng-controller="acvitationCtrl">
+    <div class="loginWrap register">
+        <div class="activationWrap">
+            <a class="logo" href="login.html"></a>
+            <div class="registerActivation">注册激活</div>
+            <div class="activationEmail" ng-show="acvitation == 0">激活邮件已发送至您的邮箱:{{registerEmail}}</div>
+            <div class="activationEmail" ng-show="acvitation == 1">激活邮件发送失败,请检查您的邮箱:{{registerEmail}}</div>
+            <div class="activationText" ng-show="acvitation == 0">请点击邮箱的链接完成账号注册!</div>
+            <div class="activationButton" ng-click="loginEmail()">立即登录邮箱</div>
+            <div class="sendChange">
+                <li>没有收到邮件?<a ng-show="sendtype==1" href ng-click="sendAgain()">重新发一封</a><a ng-show="sendtype==2" href>{{time/1000}}秒后可重新发送</a></li>
+                <li>邮箱填错了?<a ng-show="sendtype==1" href ng-click="changeEmail()">更改邮箱</a><a ng-show="sendtype==2" href style="color:#a3a3b2;">更改邮箱</a></li>
+            </div>
+        </div>
+    </div>
+    <div class="openTipWin" ng-show="winFlag==1" style="z-index: 98">
+        <div class="closeGray" ng-click="closeWin()"></div>
+        <p class="title">更改邮箱</p>
+        <div class="tipCont">
+            <div class="formDetailItem">
+                <div class="iptlabel must">注册邮箱:</div>
+                <input type="text" class="iptform" ng-model="oldemail" placeholder="请输入注册邮箱" readonly="readonly" style="background: #f3f3f3; color: #999; border: none">
+                <div class="em">
+                    <em class="error" ng-if="tip.oldemail.status">{{tip.oldemail.txt}}</em>
+                </div>
+            </div>
+            <div class="formDetailItem">
+                <div class="iptlabel must">新邮箱:</div>
+                <input type="text" class="iptform" ng-model="newemail" placeholder="请输入新邮箱">
+                <div class="em">
+                    <em class="error" ng-if="tip.newemail.status">{{tip.newemail.txt}}</em>
+                </div>
+            </div>
+        </div>
+        <div class="openBtnGroup clearfix">
+            <div class="btn" ng-click="saveNewEmail()">发送验证邮件</div>
+        </div>
+    </div>
+    <div class="copyright regt" ng-class="{'static':!hasReged}">
+        2017 TrackingIO.com  All Rights Reserved  <a href="http://www.miitbeian.gov.cn/" target="_blank">京ICP备14021832号</a>
+    </div>
+    <div class="alphaDiv" id="sysLoad" style="display: none;z-index: 99;">
+        <div class="spinner">
+          <div class="rect1"></div>
+          <div class="rect2"></div>
+          <div class="rect3"></div>
+          <div class="rect4"></div>
+          <div class="rect5"></div>
+        </div>
+    </div>
+ </body>
+</html>
diff --git a/src/main/websrc/demo.html b/src/main/websrc/demo.html
new file mode 100644
index 0000000..a8ab183
--- /dev/null
+++ b/src/main/websrc/demo.html
@@ -0,0 +1,38 @@
+<!DOCTYPE html>
+<html>
+<head>
+    <meta charset="utf-8">
+    <title>灵犀</title>
+    <meta name="keywords" content="热云数据 灵犀" />
+    <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
+    <meta content="width=device-width, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0, user-scalable=0" name="viewport">
+    <link rel="shortcut icon" href="favicon.ico" type="image/x-icon">
+    <!-- build:js scripts/change.js -->
+    <script src="js/app/page.js"></script>
+    <!-- endbuild -->
+    <!-- build:js scripts/demo.js -->
+   <script src="js/common/jquery.min.js"></script>
+   <script src="js/common/jquery.cookie.min.js"></script>
+   <!-- endbuild -->
+
+   <script type="text/javascript">
+     $.get("/api/demo",function(data) {
+        data = JSON.parse(data);
+        var account = data.content.account,token = data.content.token;
+
+        $.cookie("ryioUid",account.id);
+        $.cookie("ryioUname",account.email);
+        // $.cookie("ryioUauth",account.authStr);
+        window.localStorage.setItem("ryioUauth",account.authStr);
+        $.cookie("ryioToken",token);
+        $.cookie("ryioPastDate",account.pastDate);
+
+        var isSuper = account.isSuperUser == true && account.isChannelPerson!=true;
+        $.cookie("ryioIsSuper",isSuper);
+        window.location.href="index.html";
+     });
+    </script>
+  </head>
+ <body>
+ </body>
+</html>
diff --git a/src/main/websrc/failure.html b/src/main/websrc/failure.html
new file mode 100644
index 0000000..d1918c9
--- /dev/null
+++ b/src/main/websrc/failure.html
@@ -0,0 +1,56 @@
+<!DOCTYPE html>
+<html>
+<head>
+    <meta charset="utf-8">
+    <title>灵犀</title>
+    <meta name="keywords" content="热云数据 灵犀" />
+    <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
+    <meta content="width=device-width, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0, user-scalable=0" name="viewport">
+    <link rel="shortcut icon" href="favicon.ico" type="image/x-icon">
+    <!-- build:css styles/login.css -->
+    <link rel="stylesheet" type="text/css" href="styles/login.css">
+    <!-- endbuild -->
+    <!-- build:js scripts/change.js -->
+    <script src="js/app/page.js"></script>
+    <!-- endbuild -->
+    <!-- build:js scripts/regcom2.js -->
+    <script src="js/common/angular.min.js"></script>
+    <script src="js/common/echarts.min.js"></script>
+    <script src="js/common/jquery.min.js"></script>
+    <script src="js/common/jquery.cookie.min.js"></script>
+    <script src="js/common/china.js"></script>
+    <!-- endbuild -->
+    <!-- build:js scripts/failure.js -->
+    <script src="js/common/judge.js"></script>
+    <script src="js/login/module.js"></script>
+    <script src="js/app/HttpService.js"></script>
+    <script src="js/app/UtilService.js"></script>
+    <script src="js/login/failure.js"></script>
+    <!-- endbuild -->
+</head>
+
+ <body ng-app="app" ng-controller="failureCtrl">
+    <div class="loginWrap register">
+        <div class="activationWrap">
+            <a class="logo" href="login.html"></a>
+            <div class="registerActivation">激活失败</div>
+            <div class="activationText">激活链接已失效!</div>
+            <div class="failureButton successButton" ng-click="sendAgain()" ng-show="failureType==1">重新激活</div>
+            <div class="failureButton successButton" ng-show="failureType==2" style="background:#a9a9a9;">重新激活</div>
+            <p class="failureError">{{failureText}}</p>
+        </div>
+    </div>
+    <div class="copyright regt" ng-class="{'static':!hasReged}">
+        2017 TrackingIO.com  All Rights Reserved  <a href="http://www.miitbeian.gov.cn/" target="_blank">京ICP备14021832号</a>
+    </div>
+    <div class="alphaDiv" id="sysLoad" style="display: none;z-index: 99;">
+        <div class="spinner">
+          <div class="rect1"></div>
+          <div class="rect2"></div>
+          <div class="rect3"></div>
+          <div class="rect4"></div>
+          <div class="rect5"></div>
+        </div>
+    </div>
+</body>
+</html>
diff --git a/src/main/websrc/favicon.ico b/src/main/websrc/favicon.ico
new file mode 100644
index 0000000..44969a4
Binary files /dev/null and b/src/main/websrc/favicon.ico differ
diff --git a/src/main/websrc/font/demo_fontclass.html b/src/main/websrc/font/demo_fontclass.html
new file mode 100644
index 0000000..ac823d9
--- /dev/null
+++ b/src/main/websrc/font/demo_fontclass.html
@@ -0,0 +1,256 @@
+
+<!DOCTYPE html>
+<html>
+<head>
+    <meta charset="utf-8"/>
+    <title>IconFont</title>
+    <link rel="stylesheet" href="demo.css">
+    <link rel="stylesheet" href="iconfont.css">
+</head>
+<body>
+    <div class="main markdown">
+        <h1>IconFont 图标</h1>
+        <ul class="icon_lists clear">
+            
+                <li>
+                <i class="icon iconfont icon-campaigninfo"></i>
+                    <div class="name">campaigninfo</div>
+                    <div class="fontclass">.icon-campaigninfo</div>
+                </li>
+            
+                <li>
+                <i class="icon iconfont icon-attribute"></i>
+                    <div class="name">attribute</div>
+                    <div class="fontclass">.icon-attribute</div>
+                </li>
+            
+                <li>
+                <i class="icon iconfont icon-app"></i>
+                    <div class="name">app</div>
+                    <div class="fontclass">.icon-app</div>
+                </li>
+            
+                <li>
+                <i class="icon iconfont icon-campaign"></i>
+                    <div class="name">campaign</div>
+                    <div class="fontclass">.icon-campaign</div>
+                </li>
+            
+                <li>
+                <i class="icon iconfont icon-custommenu"></i>
+                    <div class="name">custommenu</div>
+                    <div class="fontclass">.icon-custommenu</div>
+                </li>
+            
+                <li>
+                <i class="icon iconfont icon-channel"></i>
+                    <div class="name">channel</div>
+                    <div class="fontclass">.icon-channel</div>
+                </li>
+            
+                <li>
+                <i class="icon iconfont icon-channeleffect"></i>
+                    <div class="name">channeleffect</div>
+                    <div class="fontclass">.icon-channeleffect</div>
+                </li>
+            
+                <li>
+                <i class="icon iconfont icon-costrecovery"></i>
+                    <div class="name">costrecovery</div>
+                    <div class="fontclass">.icon-costrecovery</div>
+                </li>
+            
+                <li>
+                <i class="icon iconfont icon-customset"></i>
+                    <div class="name">customset</div>
+                    <div class="fontclass">.icon-customset</div>
+                </li>
+            
+                <li>
+                <i class="icon iconfont icon-android"></i>
+                    <div class="name">android</div>
+                    <div class="fontclass">.icon-android</div>
+                </li>
+            
+                <li>
+                <i class="icon iconfont icon-dashboard"></i>
+                    <div class="name">dashboard</div>
+                    <div class="fontclass">.icon-dashboard</div>
+                </li>
+            
+                <li>
+                <i class="icon iconfont icon-auth"></i>
+                    <div class="name">auth</div>
+                    <div class="fontclass">.icon-auth</div>
+                </li>
+            
+                <li>
+                <i class="icon iconfont icon-eventlist"></i>
+                    <div class="name">eventlist</div>
+                    <div class="fontclass">.icon-eventlist</div>
+                </li>
+            
+                <li>
+                <i class="icon iconfont icon-funnel"></i>
+                    <div class="name">funnel</div>
+                    <div class="fontclass">.icon-funnel</div>
+                </li>
+            
+                <li>
+                <i class="icon iconfont icon-event"></i>
+                    <div class="name">event</div>
+                    <div class="fontclass">.icon-event</div>
+                </li>
+            
+                <li>
+                <i class="icon iconfont icon-effectevaluate"></i>
+                    <div class="name">effectevaluate</div>
+                    <div class="fontclass">.icon-effectevaluate</div>
+                </li>
+            
+                <li>
+                <i class="icon iconfont icon-eventstats"></i>
+                    <div class="name">eventstats</div>
+                    <div class="fontclass">.icon-eventstats</div>
+                </li>
+            
+                <li>
+                <i class="icon iconfont icon-intelligentpath"></i>
+                    <div class="name">intelligentpath</div>
+                    <div class="fontclass">.icon-intelligentpath</div>
+                </li>
+            
+                <li>
+                <i class="icon iconfont icon-ios"></i>
+                    <div class="name">ios</div>
+                    <div class="fontclass">.icon-ios</div>
+                </li>
+            
+                <li>
+                <i class="icon iconfont icon-keyword"></i>
+                    <div class="name">keyword</div>
+                    <div class="fontclass">.icon-keyword</div>
+                </li>
+            
+                <li>
+                <i class="icon iconfont icon-logdump"></i>
+                    <div class="name">logdump</div>
+                    <div class="fontclass">.icon-logdump</div>
+                </li>
+            
+                <li>
+                <i class="icon iconfont icon-logexport"></i>
+                    <div class="name">logexport</div>
+                    <div class="fontclass">.icon-logexport</div>
+                </li>
+            
+                <li>
+                <i class="icon iconfont icon-logtool"></i>
+                    <div class="name">logtool</div>
+                    <div class="fontclass">.icon-logtool</div>
+                </li>
+            
+                <li>
+                <i class="icon iconfont icon-realtime"></i>
+                    <div class="name">realtime</div>
+                    <div class="fontclass">.icon-realtime</div>
+                </li>
+            
+                <li>
+                <i class="icon iconfont icon-report"></i>
+                    <div class="name">report</div>
+                    <div class="fontclass">.icon-report</div>
+                </li>
+            
+                <li>
+                <i class="icon iconfont icon-logo"></i>
+                    <div class="name">logo</div>
+                    <div class="fontclass">.icon-logo</div>
+                </li>
+            
+                <li>
+                <i class="icon iconfont icon-roi"></i>
+                    <div class="name">roi</div>
+                    <div class="fontclass">.icon-roi</div>
+                </li>
+            
+                <li>
+                <i class="icon iconfont icon-packageinfo"></i>
+                    <div class="name">packageinfo</div>
+                    <div class="fontclass">.icon-packageinfo</div>
+                </li>
+            
+                <li>
+                <i class="icon iconfont icon-subcampaign"></i>
+                    <div class="name">subcampaign</div>
+                    <div class="fontclass">.icon-subcampaign</div>
+                </li>
+            
+                <li>
+                <i class="icon iconfont icon-usergroup"></i>
+                    <div class="name">usergroup</div>
+                    <div class="fontclass">.icon-usergroup</div>
+                </li>
+            
+                <li>
+                <i class="icon iconfont icon-systemparam"></i>
+                    <div class="name">systemparam</div>
+                    <div class="fontclass">.icon-systemparam</div>
+                </li>
+            
+                <li>
+                <i class="icon iconfont icon-retention"></i>
+                    <div class="name">retention</div>
+                    <div class="fontclass">.icon-retention</div>
+                </li>
+            
+                <li>
+                <i class="icon iconfont icon-wrap"></i>
+                    <div class="name">wrap</div>
+                    <div class="fontclass">.icon-wrap</div>
+                </li>
+            
+                <li>
+                <i class="icon iconfont icon-web"></i>
+                    <div class="name">web</div>
+                    <div class="fontclass">.icon-web</div>
+                </li>
+            
+                <li>
+                <i class="icon iconfont icon-userdetail"></i>
+                    <div class="name">userdetail</div>
+                    <div class="fontclass">.icon-userdetail</div>
+                </li>
+            
+                <li>
+                <i class="icon iconfont icon-asmeffectevaluate"></i>
+                    <div class="name">asmeffectevaluate</div>
+                    <div class="fontclass">.icon-asmeffectevaluate</div>
+                </li>
+            
+        </ul>
+
+        <h2 id="font-class-">font-class引用</h2>
+        <hr>
+
+        <p>font-class是unicode使用方式的一种变种,主要是解决unicode书写不直观,语意不明确的问题。</p>
+        <p>与unicode使用方式相比,具有如下特点:</p>
+        <ul>
+        <li>兼容性良好,支持ie8+,及所有现代浏览器。</li>
+        <li>相比于unicode语意明确,书写更直观。可以很容易分辨这个icon是什么。</li>
+        <li>因为使用class来定义图标,所以当要替换图标时,只需要修改class里面的unicode引用。</li>
+        <li>不过因为本质上还是使用的字体,所以多色图标还是不支持的。</li>
+        </ul>
+        <p>使用步骤如下:</p>
+        <h3 id="-fontclass-">第一步:引入项目下面生成的fontclass代码:</h3>
+
+
+        <pre><code class="lang-js hljs javascript"><span class="hljs-comment">&lt;link rel="stylesheet" type="text/css" href="./iconfont.css"&gt;</span></code></pre>
+        <h3 id="-">第二步:挑选相应图标并获取类名,应用于页面:</h3>
+        <pre><code class="lang-css hljs">&lt;<span class="hljs-selector-tag">i</span> <span class="hljs-selector-tag">class</span>="<span class="hljs-selector-tag">iconfont</span> <span class="hljs-selector-tag">icon-xxx</span>"&gt;&lt;/<span class="hljs-selector-tag">i</span>&gt;</code></pre>
+        <blockquote>
+        <p>"iconfont"是你项目下的font-family。可以通过编辑项目查看,默认是"iconfont"。</p>
+        </blockquote>
+    </div>
+</body>
+</html>
diff --git a/src/main/websrc/font/svg/android.svg b/src/main/websrc/font/svg/android.svg
new file mode 100644
index 0000000..9bc6b39
--- /dev/null
+++ b/src/main/websrc/font/svg/android.svg
@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 19.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0)  -->
+<svg version="1.1" id="图层_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+	 viewBox="-41 43 16 16" style="enable-background:new -41 43 16 16;" xml:space="preserve">
+<style type="text/css">
+	.st0{fill:#4186EC;}
+</style>
+<g id="XMLID_9_">
+	<g id="XMLID_10_">
+		<path id="XMLID_11_" class="st0" d="M-37.3,48h8.7v0.2c0,2.2,0,4.3,0,6.5c0,0.7-0.4,1.1-1.1,1.1c-0.2,0-0.4,0-0.5,0
+			c0,0.8,0,1.5,0,2.3c0,0.5-0.4,0.9-0.9,0.9s-0.9-0.3-1-0.8c0-0.8,0-1.5,0-2.3h-1.7c0,0.3,0,0.6,0,0.9c0,0.5,0,0.9,0,1.4
+			c0,0.4-0.4,0.7-0.8,0.8c-0.5,0-0.9-0.2-1-0.6c0-0.1,0,0,0-0.1c0-0.6,0-1.3,0-1.9c0-0.1,0-0.2,0-0.3c-0.2,0-0.4,0-0.6,0
+			c-0.6,0-1-0.4-1-1c0-2.2,0-4.4,0-6.6L-37.3,48L-37.3,48z M-28.7,47.4h-8.6c0-1.5,0.9-2.4,2.2-3.1c-0.2-0.2-0.3-0.4-0.4-0.6
+			c-0.1-0.1-0.2-0.2-0.3-0.4c-0.1-0.1-0.2-0.2,0-0.3c0.2-0.1,0.2,0,0.3,0.1c0.1,0.3,0.3,0.5,0.5,0.8s0.2,0.3,0.5,0.2
+			c1.1-0.3,2.2-0.3,3.2,0.1h0.1c0.2-0.3,0.4-0.7,0.7-1l0.1-0.1c0.1-0.1,0.1-0.2,0.2-0.1c0.1,0.1,0.1,0.2,0,0.2
+			c-0.2,0.3-0.4,0.6-0.6,0.9c0,0.1-0.1,0.1-0.1,0.2C-29.6,45-28.7,45.9-28.7,47.4L-28.7,47.4z M-30.7,45.7c0-0.3-0.2-0.5-0.5-0.5
+			c-0.3,0-0.5,0.2-0.5,0.5s0.2,0.5,0.5,0.5C-30.9,46.2-30.7,46-30.7,45.7L-30.7,45.7z M-34.4,45.7c0-0.3-0.2-0.5-0.5-0.5
+			c-0.3,0-0.5,0.2-0.5,0.5s0.2,0.5,0.5,0.5C-34.6,46.2-34.4,46-34.4,45.7L-34.4,45.7z M-26.2,51c0,0.6,0,1.3,0,1.9s-0.4,1-0.9,1
+			s-0.9-0.4-0.9-1c0-1.3,0-2.6,0-3.9c0-0.5,0.4-0.9,0.8-0.9c0.5-0.1,0.9,0.3,1,0.7c0,0.1,0,0.2,0,0.3C-26.2,49.7-26.2,50.3-26.2,51
+			L-26.2,51z M-38,51c0,0.7,0,1.3,0,2c0,0.4-0.3,0.8-0.7,0.9c-0.4,0.1-0.8-0.1-1-0.4c-0.1-0.1-0.1-0.3-0.1-0.5c0-1.3,0-2.7,0-4
+			c0-0.6,0.4-1,0.9-1s0.9,0.4,0.9,1C-37.9,49.6-38,50.3-38,51L-38,51L-38,51z"/>
+	</g>
+</g>
+</svg>
diff --git a/src/main/websrc/font/svg/app.svg b/src/main/websrc/font/svg/app.svg
new file mode 100644
index 0000000..062e018
--- /dev/null
+++ b/src/main/websrc/font/svg/app.svg
@@ -0,0 +1,12 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 19.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0)  -->
+<svg version="1.1" id="图层_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+	 viewBox="0 0 16 16" style="enable-background:new 0 0 16 16;" xml:space="preserve">
+<style type="text/css">
+	.st0{fill:#4186EC;}
+</style>
+<path class="st0" d="M12,7H9V4c0-1.7,1.3-3,3-3s3,1.3,3,3S13.7,7,12,7z M12,2c-1.1,0-2,0.9-2,2v2h2c1.1,0,2-0.9,2-2S13.1,2,12,2z
+	 M4,15c-1.7,0-3-1.3-3-3s1.3-3,3-3h3v3C7,13.7,5.7,15,4,15z M6,10H4c-1.1,0-2,0.9-2,2s0.9,2,2,2s2-0.9,2-2V10z M1,4c0-1.7,1.3-3,3-3
+	s3,1.3,3,3v3H4C2.3,7,1,5.7,1,4z M6,4c0-1.1-0.9-2-2-2S2,2.9,2,4s0.9,2,2,2h2V4z M15,12c0,1.7-1.3,3-3,3s-3-1.3-3-3V9h3
+	C13.7,9,15,10.3,15,12z M10,12c0,1.1,0.9,2,2,2s2-0.9,2-2s-0.9-2-2-2h-2V12z"/>
+</svg>
diff --git a/src/main/websrc/font/svg/asmeffectevaluate.svg b/src/main/websrc/font/svg/asmeffectevaluate.svg
new file mode 100644
index 0000000..22c7644
--- /dev/null
+++ b/src/main/websrc/font/svg/asmeffectevaluate.svg
@@ -0,0 +1,11 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 19.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0)  -->
+<svg version="1.1" id="图层_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+	 viewBox="0 0 16 16" style="enable-background:new 0 0 16 16;" xml:space="preserve">
+<style type="text/css">
+	.st0{fill:#5F97FB;}
+</style>
+<path id="XMLID_2_" class="st0" d="M12.5,5.9H2v8h2h1v1H2c-0.6,0-1-0.4-1-1v-8v-1v-3v-1h1h10.5C13.9,0.9,15,2,15,3.4
+	S13.9,5.9,12.5,5.9z M12.5,1.9H2v3h10.5c0.8,0,1.5-0.7,1.5-1.5S13.3,1.9,12.5,1.9z M14,11.9c0-1.1-0.9-2-2-2H6.5l2,2l-0.7,0.7
+	L5.1,9.9H5v-1h7c1.7,0,3,1.3,3,3s-1.3,3-3,3H7v-1h5C13.1,13.9,14,13,14,11.9z"/>
+</svg>
diff --git a/src/main/websrc/font/svg/attribute.svg b/src/main/websrc/font/svg/attribute.svg
new file mode 100644
index 0000000..751ad27
--- /dev/null
+++ b/src/main/websrc/font/svg/attribute.svg
@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 19.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0)  -->
+<svg version="1.1" id="图层_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+	 viewBox="0 0 16 16" style="enable-background:new 0 0 16 16;" xml:space="preserve">
+<style type="text/css">
+	.st0{fill:#4186EC;}
+</style>
+<path class="st0" d="M15.2,14.5l-0.7,0.7l-3.7-3.7C9.8,12.4,8.4,13,7,13c-3.3,0-6-2.7-6-6V7c0-3.3,2.7-6,6-6c3.3,0,6,2.7,6,6V7
+	c0,1.5-0.5,2.8-1.4,3.8L15.2,14.5z M12,7c0-2.8-2.2-5-5-5h0C4.2,2,2,4.2,2,7v0c0,2.8,2.2,5,5,5h0C9.7,12,12,9.8,12,7L12,7z"/>
+</svg>
diff --git a/src/main/websrc/font/svg/auth.svg b/src/main/websrc/font/svg/auth.svg
new file mode 100644
index 0000000..b61b67d
--- /dev/null
+++ b/src/main/websrc/font/svg/auth.svg
@@ -0,0 +1,11 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 19.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0)  -->
+<svg version="1.1" id="图层_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+	 viewBox="0 0 16 16" style="enable-background:new 0 0 16 16;" xml:space="preserve">
+<style type="text/css">
+	.st0{fill:#4186EC;}
+</style>
+<path id="XMLID_2_" class="st0" d="M12.5,16h-9c-1.1,0-2-0.9-2-2c0-2.8,2.2-5,5-5h3c2.8,0,5,2.2,5,5C14.5,15.1,13.6,16,12.5,16z
+	 M9.5,10h-3c-2.2,0-4,1.8-4,4c0,0.6,0.4,1,1,1h9c0.6,0,1-0.4,1-1C13.5,11.8,11.7,10,9.5,10z M7.5,8c-2.2,0-4-1.8-4-4s1.8-4,4-4
+	s4,1.8,4,4S9.7,8,7.5,8z M7.5,1c-1.7,0-3,1.3-3,3s1.3,3,3,3s3-1.3,3-3S9.2,1,7.5,1z"/>
+</svg>
diff --git a/src/main/websrc/font/svg/campaign.svg b/src/main/websrc/font/svg/campaign.svg
new file mode 100644
index 0000000..d281340
--- /dev/null
+++ b/src/main/websrc/font/svg/campaign.svg
@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 19.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0)  -->
+<svg version="1.1" id="图层_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+	 viewBox="0 0 16 16" style="enable-background:new 0 0 16 16;" xml:space="preserve">
+<style type="text/css">
+	.st0{fill:#4186EC;}
+</style>
+<path id="XMLID_3_" class="st0" d="M15.5,1.4v13.2l-1-0.3L9,12.5H8.5H5c-2.5,0-4.5-2-4.5-4.5s2-4.5,4.5-4.5h3.5H9l5.5-1.8 M8.5,4.5
+	H5C3.1,4.5,1.5,6.1,1.5,8s1.6,3.5,3.5,3.5h3.5V4.5z M9.5,4.3v0.2v7v0.2l5,1.6V2.6L9.5,4.3z"/>
+</svg>
diff --git a/src/main/websrc/font/svg/campaigninfo.svg b/src/main/websrc/font/svg/campaigninfo.svg
new file mode 100644
index 0000000..748a781
--- /dev/null
+++ b/src/main/websrc/font/svg/campaigninfo.svg
@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 19.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0)  -->
+<svg version="1.1" id="图层_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+	 viewBox="0 0 16 16" style="enable-background:new 0 0 16 16;" xml:space="preserve">
+<style type="text/css">
+	.st0{fill:#4186EC;}
+</style>
+<path id="XMLID_2_" class="st0" d="M16,6.1l-5.5-0.8L8,0L5.5,5.3L0,6.1l4,4.1L3,16l5-2.7l5,2.7L12,10.2L16,6.1z M8,12.1l-3.7,2.1
+	L5,10L1.8,6.7l4.3-0.6l1.9-4l1.9,4l4.3,0.6L11,10l0.7,4.2L8,12.1z"/>
+</svg>
diff --git a/src/main/websrc/font/svg/channel.svg b/src/main/websrc/font/svg/channel.svg
new file mode 100644
index 0000000..35a138b
--- /dev/null
+++ b/src/main/websrc/font/svg/channel.svg
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 19.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0)  -->
+<svg version="1.1" id="图层_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+	 viewBox="0 0 16 16" style="enable-background:new 0 0 16 16;" xml:space="preserve">
+<style type="text/css">
+	.st0{fill:#4186EC;}
+</style>
+<path id="XMLID_2_" class="st0" d="M15.9,9.1c0,0.4-0.1,0.7-0.2,1.1c-0.9-0.4-2,0-2.5,0.8c-0.5,0.9-0.3,2,0.5,2.6
+	c-0.2,0.2-0.5,0.5-0.8,0.7c0,0,0,0,0,0c-0.3,0.2-0.6,0.5-1,0.7c0,0,0,0,0,0c-0.3,0.2-0.7,0.4-1.1,0.5c-0.3,0.1-0.6,0.2-1,0.3
+	c-0.1-1-1-1.7-2-1.7s-1.8,0.8-2,1.7c-0.3-0.1-0.7-0.2-1-0.3c-0.4-0.1-0.7-0.3-1.1-0.5c0,0,0,0,0,0c-0.3-0.2-0.7-0.4-1-0.7
+	c0,0,0,0,0,0c-0.3-0.2-0.5-0.4-0.8-0.7c0.8-0.6,1-1.7,0.5-2.6c-0.5-0.9-1.6-1.2-2.5-0.8C0.2,9.8,0.1,9.5,0.1,9.1C0,8.7,0,8.4,0,8
+	s0-0.7,0.1-1.1c0.1-0.4,0.1-0.7,0.2-1.1c0.9,0.4,2,0,2.5-0.8c0.5-0.9,0.3-2-0.5-2.6C2.5,2.2,2.8,1.9,3,1.7c0,0,0,0,0,0
+	c0.3-0.2,0.6-0.5,1-0.7c0,0,0,0,0,0c0.3-0.2,0.7-0.4,1.1-0.5c0.3-0.1,0.6-0.2,1-0.3C6.2,1.2,7,2,8,2s1.8-0.8,2-1.7
+	c0.3,0.1,0.7,0.2,1,0.3c0.4,0.1,0.7,0.3,1.1,0.5c0,0,0,0,0,0c0.3,0.2,0.7,0.4,1,0.7c0,0,0,0,0,0c0.3,0.2,0.5,0.4,0.8,0.7
+	c-0.8,0.6-1,1.7-0.5,2.6c0.5,0.9,1.6,1.2,2.5,0.8c0.1,0.3,0.2,0.7,0.2,1.1C16,7.3,16,7.6,16,8S16,8.7,15.9,9.1z M14.9,7
+	c-1,0-2-0.5-2.6-1.5c-0.6-1-0.5-2.1,0-3c-0.5-0.4-1.1-0.8-1.8-1C10.1,2.4,9.1,3,8,3S5.9,2.4,5.4,1.5c-0.6,0.3-1.2,0.6-1.8,1
+	c0.5,0.9,0.6,2,0,3C3.1,6.5,2.1,7,1.1,7C1,7.3,1,7.7,1,8s0,0.7,0.1,1c1,0,2,0.5,2.6,1.5c0.6,1,0.5,2.1,0,3c0.5,0.4,1.1,0.8,1.8,1
+	C5.9,13.6,6.9,13,8,13s2.1,0.6,2.6,1.5c0.6-0.3,1.2-0.6,1.8-1c-0.5-0.9-0.6-2,0-3c0.6-1,1.6-1.5,2.6-1.5C15,8.7,15,8.3,15,8
+	S15,7.3,14.9,7z M8,11c-1.7,0-3-1.3-3-3s1.3-3,3-3s3,1.3,3,3S9.7,11,8,11z M8,6C6.9,6,6,6.9,6,8s0.9,2,2,2s2-0.9,2-2S9.1,6,8,6z"/>
+</svg>
diff --git a/src/main/websrc/font/svg/channeleffect.svg b/src/main/websrc/font/svg/channeleffect.svg
new file mode 100644
index 0000000..a35939d
--- /dev/null
+++ b/src/main/websrc/font/svg/channeleffect.svg
@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 19.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0)  -->
+<svg version="1.1" id="图层_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+	 viewBox="0 0 16 16" style="enable-background:new 0 0 16 16;" xml:space="preserve">
+<style type="text/css">
+	.st0{fill:#4186EC;}
+</style>
+<path id="XMLID_2_" class="st0" d="M12.6,15.5v-1h-9v1h-3v-3h3v1h9v-1h3v3H12.6z M12.6,8.5h-3v1h-3v-1h-3v1h-3v-3h3v1h3v-1h1v-3h-1
+	v-3h3v3h-1v3h1v1h3v-1h3v3h-3V8.5z"/>
+</svg>
diff --git a/src/main/websrc/font/svg/costrecovery.svg b/src/main/websrc/font/svg/costrecovery.svg
new file mode 100644
index 0000000..81c0a4f
--- /dev/null
+++ b/src/main/websrc/font/svg/costrecovery.svg
@@ -0,0 +1,13 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 19.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0)  -->
+<svg version="1.1" id="图层_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+	 viewBox="0 0 16 16" style="enable-background:new 0 0 16 16;" xml:space="preserve">
+<style type="text/css">
+	.st0{fill:#4186EC;}
+</style>
+<path id="XMLID_2_" class="st0" d="M15.6,8.5h-1c-0.2,3.2-2.8,5.7-6,5.9v1.1h-1v-1.1c-3.2-0.2-5.7-2.8-6-5.9h-1v-1h1
+	c0.2-3.2,2.8-5.7,6-5.9v-1h1v1c3.2,0.2,5.7,2.8,6,5.9h1V8.5z M8.6,13.4c2.6-0.2,4.7-2.3,5-4.9h-2c-0.2,1.5-1.4,2.7-3,2.9V13.4z
+	 M8.6,7.5h1.9c-0.2-1-1-1.8-1.9-1.9V7.5z M10.6,8.5H8.6v1.9C9.6,10.3,10.4,9.5,10.6,8.5z M7.6,8.5H5.7c0.2,1,1,1.8,1.9,1.9V8.5z
+	 M7.6,13.4v-2c-1.5-0.2-2.7-1.4-3-2.9h-2C2.9,11.1,5,13.2,7.6,13.4z M7.6,2.5C5,2.8,2.9,4.9,2.7,7.5h2c0.2-1.5,1.4-2.7,3-2.9V2.5z
+	 M5.7,7.5h1.9V5.6C6.6,5.7,5.9,6.5,5.7,7.5z M8.6,2.5v2c1.5,0.2,2.7,1.4,3,2.9h2C13.3,4.9,11.2,2.8,8.6,2.5z"/>
+</svg>
diff --git a/src/main/websrc/font/svg/custommenu.svg b/src/main/websrc/font/svg/custommenu.svg
new file mode 100644
index 0000000..f72ad02
--- /dev/null
+++ b/src/main/websrc/font/svg/custommenu.svg
@@ -0,0 +1,14 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 19.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0)  -->
+<svg version="1.1" id="图层_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+	 viewBox="0 0 16 16" style="enable-background:new 0 0 16 16;" xml:space="preserve">
+<style type="text/css">
+	.st0{fill:#4186EC;}
+</style>
+<path class="st0" d="M13.5,15.5h-11c-1.1,0-2-0.9-2-2v-11c0-1.1,0.9-2,2-2h11c1.1,0,2,0.9,2,2v11C15.5,14.6,14.6,15.5,13.5,15.5z
+	 M14.5,2.5c0-0.6-0.4-1-1-1h-11c-0.6,0-1,0.4-1,1v11c0,0.6,0.4,1,1,1h11c0.6,0,1-0.4,1-1V2.5z M13,12H3c-0.3,0-0.5-0.2-0.5-0.5
+	S2.7,11,3,11h10c0.3,0,0.5,0.2,0.5,0.5S13.3,12,13,12z M13,9c-0.3,0-0.5-0.2-0.5-0.5V5.8L9,9.8C8.7,10,8.3,10.1,8.1,9.9c0,0,0,0,0,0
+	C8,9.8,7.8,9.8,7.7,9.7L5.2,7.2L3.6,9.4C3.3,9.6,3,9.6,2.8,9.4c-0.2-0.2-0.2-0.5,0-0.8l1.9-2.4c0.2-0.2,0.4-0.2,0.6-0.1
+	c0.2,0,0.3,0.1,0.5,0.2l2.5,2.5L11.8,5H9C8.7,5,8.5,4.8,8.5,4.5S8.7,4,9,4h4c0.1,0,0.2,0,0.3,0.1l0,0c0,0,0.1,0,0.1,0.1
+	c0.1,0.1,0.2,0.3,0.1,0.4v3.9C13.5,8.8,13.3,9,13,9z"/>
+</svg>
diff --git a/src/main/websrc/font/svg/customset.svg b/src/main/websrc/font/svg/customset.svg
new file mode 100644
index 0000000..f5e370b
--- /dev/null
+++ b/src/main/websrc/font/svg/customset.svg
@@ -0,0 +1,11 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 19.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0)  -->
+<svg version="1.1" id="图层_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+	 viewBox="0 0 16 16" style="enable-background:new 0 0 16 16;" xml:space="preserve">
+<style type="text/css">
+	.st0{fill:#4186EC;}
+</style>
+<path class="st0" d="M14,15h-4c-0.6,0-1-0.4-1-1v-4c0-0.6,0.4-1,1-1h4c0.6,0,1,0.4,1,1v4C15,14.6,14.6,15,14,15z M14,7h-4
+	C9.4,7,9,6.6,9,6V2c0-0.6,0.4-1,1-1h4c0.6,0,1,0.4,1,1v4C15,6.6,14.6,7,14,7z M6,15H2c-0.6,0-1-0.4-1-1v-4c0-0.6,0.4-1,1-1h4
+	c0.6,0,1,0.4,1,1v4C7,14.6,6.6,15,6,15z M6,7H2C1.4,7,1,6.6,1,6V2c0-0.6,0.4-1,1-1h4c0.6,0,1,0.4,1,1v4C7,6.6,6.6,7,6,7z"/>
+</svg>
diff --git a/src/main/websrc/font/svg/dashboard.svg b/src/main/websrc/font/svg/dashboard.svg
new file mode 100644
index 0000000..c0f2602
--- /dev/null
+++ b/src/main/websrc/font/svg/dashboard.svg
@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 19.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0)  -->
+<svg version="1.1" id="图层_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+	 viewBox="0 0 16 16" style="enable-background:new 0 0 16 16;" xml:space="preserve">
+<style type="text/css">
+	.st0{fill:#4186EC;}
+</style>
+<path class="st0" d="M8,16c-4.4,0-8-3.6-8-8s3.6-8,8-8s8,3.6,8,8S12.4,16,8,16z M8,1C4.1,1,1,4.1,1,8s3.1,7,7,7s7-3.1,7-7
+	S11.9,1,8,1z M9,9H7V7h1.3l2.2-2.2l0.7,0.7L9,7.7V9z"/>
+</svg>
diff --git a/src/main/websrc/font/svg/effectevaluate.svg b/src/main/websrc/font/svg/effectevaluate.svg
new file mode 100644
index 0000000..bd8182c
--- /dev/null
+++ b/src/main/websrc/font/svg/effectevaluate.svg
@@ -0,0 +1,11 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 19.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0)  -->
+<svg version="1.1" id="图层_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+	 viewBox="0 0 16 16" style="enable-background:new 0 0 16 16;" xml:space="preserve">
+<style type="text/css">
+	.st0{fill:#4186EC;}
+</style>
+<path id="XMLID_2_" class="st0" d="M11.2,10.5l4.1,4.1l-0.7,0.7l-4.2-4.2v4.4h-1v-5v-1h1h5v1H11.2z M7.5,1.5c-3.3,0-6,2.7-6,6
+	c0,3,2.2,5.4,5,5.9v1c-3.4-0.5-6-3.4-6-6.9c0-3.9,3.1-7,7-7c3.5,0,6.4,2.6,6.9,6h-1C12.9,3.7,10.4,1.5,7.5,1.5z M7.5,6.5
+	c0.6,0,1,0.4,1,1s-0.4,1-1,1c-0.6,0-1-0.4-1-1S6.9,6.5,7.5,6.5z"/>
+</svg>
diff --git a/src/main/websrc/font/svg/event.svg b/src/main/websrc/font/svg/event.svg
new file mode 100644
index 0000000..4b63a40
--- /dev/null
+++ b/src/main/websrc/font/svg/event.svg
@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 19.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0)  -->
+<svg version="1.1" id="图层_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+	 viewBox="0 0 16 16" style="enable-background:new 0 0 16 16;" xml:space="preserve">
+<style type="text/css">
+	.st0{fill:#4186EC;}
+</style>
+<path class="st0" d="M8,16c-4.4,0-8-3.6-8-8s3.6-8,8-8s8,3.6,8,8S12.4,16,8,16z M8,1C4.1,1,1,4.1,1,8s3.1,7,7,7s7-3.1,7-7
+	S11.9,1,8,1z M8,12c-2.2,0-4-1.8-4-4s1.8-4,4-4s4,1.8,4,4S10.2,12,8,12z M8,5C6.3,5,5,6.3,5,8s1.3,3,3,3s3-1.3,3-3S9.7,5,8,5z"/>
+</svg>
diff --git a/src/main/websrc/font/svg/eventlist.svg b/src/main/websrc/font/svg/eventlist.svg
new file mode 100644
index 0000000..e9f6e4d
--- /dev/null
+++ b/src/main/websrc/font/svg/eventlist.svg
@@ -0,0 +1,11 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 19.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0)  -->
+<svg version="1.1" id="图层_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+	 viewBox="0 0 16 16" style="enable-background:new 0 0 16 16;" xml:space="preserve">
+<style type="text/css">
+	.st0{fill:#4186EC;}
+</style>
+<path id="XMLID_2_" class="st0" d="M8.5,14.5v-1h7v1H8.5z M8.5,10.5h7v1h-7V10.5z M8.5,4.5h7v1h-7V4.5z M8.5,1.5h7v1h-7V1.5z
+	 M5.5,15.5h-4c-0.6,0-1-0.4-1-1v-4c0-0.6,0.4-1,1-1h4c0.6,0,1,0.4,1,1v4C6.5,15.1,6.1,15.5,5.5,15.5z M5.5,10.5h-4v4h4V10.5z
+	 M5.5,6.5h-4c-0.6,0-1-0.4-1-1v-4c0-0.6,0.4-1,1-1h4c0.6,0,1,0.4,1,1v4C6.5,6.1,6.1,6.5,5.5,6.5z M5.5,1.5h-4v4h4V1.5z"/>
+</svg>
diff --git a/src/main/websrc/font/svg/eventstats.svg b/src/main/websrc/font/svg/eventstats.svg
new file mode 100644
index 0000000..a523c7a
--- /dev/null
+++ b/src/main/websrc/font/svg/eventstats.svg
@@ -0,0 +1,13 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 19.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0)  -->
+<svg version="1.1" id="图层_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+	 viewBox="0 0 16 16" style="enable-background:new 0 0 16 16;" xml:space="preserve">
+<style type="text/css">
+	.st0{fill:#4186EC;}
+</style>
+<path id="XMLID_2_" class="st0" d="M1.5,14.5c-0.6,0-1-0.4-1-1v-3c0-0.2,0.1-0.4,0.2-0.5C0.6,9.9,0.5,9.7,0.5,9.5v-3
+	c0-0.2,0.1-0.4,0.2-0.5C0.6,5.9,0.5,5.7,0.5,5.5v-3c0-0.6,0.4-1,1-1h14v4v1v3v1v4H1.5z M14.5,2.5h-13v3h13V2.5z M14.5,6.5h-13v3h13
+	V6.5z M14.5,10.5h-13v3h13V10.5z M3,11.5h2c0.3,0,0.5,0.2,0.5,0.5S5.3,12.5,5,12.5H3c-0.3,0-0.5-0.2-0.5-0.5S2.7,11.5,3,11.5z
+	 M3,7.5h2c0.3,0,0.5,0.2,0.5,0.5S5.3,8.5,5,8.5H3C2.7,8.5,2.5,8.3,2.5,8S2.7,7.5,3,7.5z M3,3.5h2c0.3,0,0.5,0.2,0.5,0.5
+	S5.3,4.5,5,4.5H3C2.7,4.5,2.5,4.3,2.5,4S2.7,3.5,3,3.5z"/>
+</svg>
diff --git a/src/main/websrc/font/svg/funnel.svg b/src/main/websrc/font/svg/funnel.svg
new file mode 100644
index 0000000..9b5d4d0
--- /dev/null
+++ b/src/main/websrc/font/svg/funnel.svg
@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 19.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0)  -->
+<svg version="1.1" id="图层_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+	 viewBox="0 0 16 16" style="enable-background:new 0 0 16 16;" xml:space="preserve">
+<style type="text/css">
+	.st0{fill:#4186EC;}
+</style>
+<path id="XMLID_2_" class="st0" d="M14.4,2.1l-3.7,4.5v7.5l0,1.2l-4.5-3.2l-0.4-0.3l0-5.1L1.9,2.1L1.7,1.9L1.1,1.1l0.7,0h0.6l0,0
+	h11.6l0,0l0,0h1.3L14.4,2.1z M3.2,2.1l3.4,4l0.2,0.2v3.8l0,0v1.2l3,2.1v-3.3l0,0V6.3l0.1-0.1l3.3-4H3.2z"/>
+</svg>
diff --git a/src/main/websrc/forget.html b/src/main/websrc/forget.html
new file mode 100644
index 0000000..676e7ee
--- /dev/null
+++ b/src/main/websrc/forget.html
@@ -0,0 +1,82 @@
+<!DOCTYPE html>
+<html>
+<head>
+    <meta charset="utf-8">
+    <title>灵犀</title>
+    <meta name="keywords" content="热云数据 灵犀" />
+    <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
+    <meta content="width=device-width, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0, user-scalable=0" name="viewport">
+    <link rel="shortcut icon" href="favicon.ico" type="image/x-icon">
+    <!-- build:css styles/login.css -->
+    <link rel="stylesheet" type="text/css" href="styles/login.css">
+    <!-- endbuild -->
+    <!-- build:js scripts/change.js -->
+    <script src="js/app/page.js"></script>
+    <!-- endbuild -->
+    <!-- build:js scripts/regcom3.js -->
+    <script src="js/common/angular.min.js"></script>
+    <script src="js/common/echarts.min.js"></script>
+    <script src="js/common/jquery.min.js"></script>
+    <script src="js/common/jquery.cookie.min.js"></script>
+    <!-- endbuild -->
+    <!-- build:js scripts/forget.js -->
+    <script src="js/common/judge.js"></script>
+    <script src="js/login/module.js"></script>
+    <script src="js/app/HttpService.js"></script>
+    <script src="js/app/UtilService.js"></script>
+    <script src="js/login/forget.js"></script>
+    <!-- endbuild -->
+</head>
+
+ <body ng-app="app" ng-controller="forgetCtrl">
+    <div class="loginWrap register">
+        <div class="activationWrap">
+            <a class="logo" href="login.html"></a>
+            <div class="registerActivation">找回密码</div>
+            <div class="forgetText" ng-show="forgettype!='success'">我们将会给您的电子邮箱发送一个新的密码,有效期为72小时,请及时登录并修改密码!</div>
+            <div class="formDetailItem forgetInput" ng-show="forgettype!='success'">
+                <div class="iptlabel must">邮箱:</div>
+                <input type="text" class="iptform" ng-model="email" placeholder="请输入邮箱">
+                <button ng-click="save()">确定</button>
+                <div class="em">
+                    <em class="error" ng-if="tip.email.status">{{tip.email.txt}}</em>
+                </div>
+            </div>
+        </div>
+        <div class="regedover" ng-show="forgettype=='success'">
+            <div class="tipsucc"><span class="succIcon"></span>发送邮件成功</div>
+            <div class="activationButton" ng-click="loginEmail()" style="margin-top: 50px;">立即登录邮箱</div>
+        </div>
+    </div>
+
+    <div class="openBgDiv" ng-show="noActive==1" ng-cloak></div>
+    <div class="openTipWin" ng-show="noActive==1" ng-cloak>
+        <div class="closeGray" ng-click="closeWin()"></div>
+        <p class="titleLogin" ng-show="!newNoRegister">该账户未激活,请点击激活。</p>
+        <p class="titleLogin" ng-show="newNoRegister">该子账号未激活,若未收到激活邮件,请联系主账号。</p>
+
+        <div class="openBtnGroup clearfix" ng-show="!newNoRegister">
+            <div class="btn" ng-click="sendAgain()" ng-show="loginSend=='yes'">发送激活邮箱</div>
+            <div class="btn1" ng-show="loginSend=='no'">发送激活邮箱</div>
+        </div>
+
+        <div class="openBtnGroup clearfix" ng-show="newNoRegister">
+            <div class="btn" ng-click="closeWin()">确定</div>
+        </div>
+
+    </div>
+
+    <div class="copyright regt" ng-class="{'static':!hasReged}">
+        2017 TrackingIO.com  All Rights Reserved  <a href="http://www.miitbeian.gov.cn/" target="_blank">京ICP备14021832号</a>
+    </div>
+    <div class="alphaDiv" id="sysLoad" style="display: none;z-index: 99;">
+        <div class="spinner">
+          <div class="rect1"></div>
+          <div class="rect2"></div>
+          <div class="rect3"></div>
+          <div class="rect4"></div>
+          <div class="rect5"></div>
+        </div>
+    </div>
+ </body>
+</html>
diff --git a/src/main/websrc/images/0415.png b/src/main/websrc/images/0415.png
new file mode 100644
index 0000000..a186a6f
Binary files /dev/null and b/src/main/websrc/images/0415.png differ
diff --git a/src/main/websrc/images/0416.png b/src/main/websrc/images/0416.png
new file mode 100644
index 0000000..2bd7ad1
Binary files /dev/null and b/src/main/websrc/images/0416.png differ
diff --git a/src/main/websrc/images/add.gif b/src/main/websrc/images/add.gif
new file mode 100644
index 0000000..aced343
Binary files /dev/null and b/src/main/websrc/images/add.gif differ
diff --git a/src/main/websrc/images/add03.png b/src/main/websrc/images/add03.png
new file mode 100644
index 0000000..d2e9310
Binary files /dev/null and b/src/main/websrc/images/add03.png differ
diff --git a/src/main/websrc/images/adddis.png b/src/main/websrc/images/adddis.png
new file mode 100644
index 0000000..abd7ccb
Binary files /dev/null and b/src/main/websrc/images/adddis.png differ
diff --git a/src/main/websrc/images/allow-right.png b/src/main/websrc/images/allow-right.png
new file mode 100644
index 0000000..eb80eb3
Binary files /dev/null and b/src/main/websrc/images/allow-right.png differ
diff --git a/src/main/websrc/images/arrow.png b/src/main/websrc/images/arrow.png
new file mode 100644
index 0000000..6b4fa8d
Binary files /dev/null and b/src/main/websrc/images/arrow.png differ
diff --git a/src/main/websrc/images/arrow1.png b/src/main/websrc/images/arrow1.png
new file mode 100644
index 0000000..0bcc7d0
Binary files /dev/null and b/src/main/websrc/images/arrow1.png differ
diff --git a/src/main/websrc/images/arrow2.png b/src/main/websrc/images/arrow2.png
new file mode 100644
index 0000000..27dcbc0
Binary files /dev/null and b/src/main/websrc/images/arrow2.png differ
diff --git a/src/main/websrc/images/auth.png b/src/main/websrc/images/auth.png
new file mode 100644
index 0000000..ee19655
Binary files /dev/null and b/src/main/websrc/images/auth.png differ
diff --git a/src/main/websrc/images/behavior.png b/src/main/websrc/images/behavior.png
new file mode 100644
index 0000000..df235b1
Binary files /dev/null and b/src/main/websrc/images/behavior.png differ
diff --git a/src/main/websrc/images/bottom.png b/src/main/websrc/images/bottom.png
new file mode 100644
index 0000000..69bccda
Binary files /dev/null and b/src/main/websrc/images/bottom.png differ
diff --git a/src/main/websrc/images/camp01.png b/src/main/websrc/images/camp01.png
new file mode 100644
index 0000000..da2498c
Binary files /dev/null and b/src/main/websrc/images/camp01.png differ
diff --git a/src/main/websrc/images/channelmore.png b/src/main/websrc/images/channelmore.png
new file mode 100644
index 0000000..3ed5240
Binary files /dev/null and b/src/main/websrc/images/channelmore.png differ
diff --git a/src/main/websrc/images/chartarrow.png b/src/main/websrc/images/chartarrow.png
new file mode 100644
index 0000000..a82bbf4
Binary files /dev/null and b/src/main/websrc/images/chartarrow.png differ
diff --git a/src/main/websrc/images/chartarrow2.png b/src/main/websrc/images/chartarrow2.png
new file mode 100644
index 0000000..4e4ed96
Binary files /dev/null and b/src/main/websrc/images/chartarrow2.png differ
diff --git a/src/main/websrc/images/close.png b/src/main/websrc/images/close.png
new file mode 100644
index 0000000..ae8cb0a
Binary files /dev/null and b/src/main/websrc/images/close.png differ
diff --git a/src/main/websrc/images/close1.png b/src/main/websrc/images/close1.png
new file mode 100644
index 0000000..3f595a5
Binary files /dev/null and b/src/main/websrc/images/close1.png differ
diff --git a/src/main/websrc/images/complex.png b/src/main/websrc/images/complex.png
new file mode 100644
index 0000000..6f27840
Binary files /dev/null and b/src/main/websrc/images/complex.png differ
diff --git a/src/main/websrc/images/coop/h1.png b/src/main/websrc/images/coop/h1.png
new file mode 100644
index 0000000..6a41e03
Binary files /dev/null and b/src/main/websrc/images/coop/h1.png differ
diff --git a/src/main/websrc/images/coop/h10.png b/src/main/websrc/images/coop/h10.png
new file mode 100644
index 0000000..77737d0
Binary files /dev/null and b/src/main/websrc/images/coop/h10.png differ
diff --git a/src/main/websrc/images/coop/h100.png b/src/main/websrc/images/coop/h100.png
new file mode 100644
index 0000000..f297ddd
Binary files /dev/null and b/src/main/websrc/images/coop/h100.png differ
diff --git a/src/main/websrc/images/coop/h101.png b/src/main/websrc/images/coop/h101.png
new file mode 100644
index 0000000..b0c5d89
Binary files /dev/null and b/src/main/websrc/images/coop/h101.png differ
diff --git a/src/main/websrc/images/coop/h11.png b/src/main/websrc/images/coop/h11.png
new file mode 100644
index 0000000..afdc4db
Binary files /dev/null and b/src/main/websrc/images/coop/h11.png differ
diff --git a/src/main/websrc/images/coop/h12.png b/src/main/websrc/images/coop/h12.png
new file mode 100644
index 0000000..401a01b
Binary files /dev/null and b/src/main/websrc/images/coop/h12.png differ
diff --git a/src/main/websrc/images/coop/h13.png b/src/main/websrc/images/coop/h13.png
new file mode 100644
index 0000000..db71906
Binary files /dev/null and b/src/main/websrc/images/coop/h13.png differ
diff --git a/src/main/websrc/images/coop/h14.png b/src/main/websrc/images/coop/h14.png
new file mode 100644
index 0000000..0aecb19
Binary files /dev/null and b/src/main/websrc/images/coop/h14.png differ
diff --git a/src/main/websrc/images/coop/h15.png b/src/main/websrc/images/coop/h15.png
new file mode 100644
index 0000000..3235106
Binary files /dev/null and b/src/main/websrc/images/coop/h15.png differ
diff --git a/src/main/websrc/images/coop/h16.png b/src/main/websrc/images/coop/h16.png
new file mode 100644
index 0000000..50bd5b3
Binary files /dev/null and b/src/main/websrc/images/coop/h16.png differ
diff --git a/src/main/websrc/images/coop/h17.png b/src/main/websrc/images/coop/h17.png
new file mode 100644
index 0000000..a69cd48
Binary files /dev/null and b/src/main/websrc/images/coop/h17.png differ
diff --git a/src/main/websrc/images/custom.png b/src/main/websrc/images/custom.png
new file mode 100644
index 0000000..97aa74b
Binary files /dev/null and b/src/main/websrc/images/custom.png differ
diff --git a/src/main/websrc/images/custommenu01.png b/src/main/websrc/images/custommenu01.png
new file mode 100644
index 0000000..b7d9b27
Binary files /dev/null and b/src/main/websrc/images/custommenu01.png differ
diff --git a/src/main/websrc/images/demo.png b/src/main/websrc/images/demo.png
new file mode 100644
index 0000000..223fe5d
Binary files /dev/null and b/src/main/websrc/images/demo.png differ
diff --git a/src/main/websrc/images/demoRight.png b/src/main/websrc/images/demoRight.png
new file mode 100644
index 0000000..5f32e82
Binary files /dev/null and b/src/main/websrc/images/demoRight.png differ
diff --git a/src/main/websrc/images/empty.png b/src/main/websrc/images/empty.png
new file mode 100644
index 0000000..1f745e6
Binary files /dev/null and b/src/main/websrc/images/empty.png differ
diff --git a/src/main/websrc/images/erweima.png b/src/main/websrc/images/erweima.png
new file mode 100644
index 0000000..1430c45
Binary files /dev/null and b/src/main/websrc/images/erweima.png differ
diff --git a/src/main/websrc/images/event.png b/src/main/websrc/images/event.png
new file mode 100644
index 0000000..e44fe27
Binary files /dev/null and b/src/main/websrc/images/event.png differ
diff --git a/src/main/websrc/images/expiration.png b/src/main/websrc/images/expiration.png
new file mode 100644
index 0000000..795427d
Binary files /dev/null and b/src/main/websrc/images/expiration.png differ
diff --git a/src/main/websrc/images/export01.png b/src/main/websrc/images/export01.png
new file mode 100644
index 0000000..0be6bd7
Binary files /dev/null and b/src/main/websrc/images/export01.png differ
diff --git a/src/main/websrc/images/first01.png b/src/main/websrc/images/first01.png
new file mode 100644
index 0000000..cb96af3
Binary files /dev/null and b/src/main/websrc/images/first01.png differ
diff --git a/src/main/websrc/images/first1.png b/src/main/websrc/images/first1.png
new file mode 100644
index 0000000..bc2531a
Binary files /dev/null and b/src/main/websrc/images/first1.png differ
diff --git a/src/main/websrc/images/first2.png b/src/main/websrc/images/first2.png
new file mode 100644
index 0000000..cd6b844
Binary files /dev/null and b/src/main/websrc/images/first2.png differ
diff --git a/src/main/websrc/images/first_1.png b/src/main/websrc/images/first_1.png
new file mode 100644
index 0000000..5596830
Binary files /dev/null and b/src/main/websrc/images/first_1.png differ
diff --git a/src/main/websrc/images/link/1.png b/src/main/websrc/images/link/1.png
new file mode 100644
index 0000000..f06e10a
Binary files /dev/null and b/src/main/websrc/images/link/1.png differ
diff --git a/src/main/websrc/images/link/10.png b/src/main/websrc/images/link/10.png
new file mode 100644
index 0000000..72ec95f
Binary files /dev/null and b/src/main/websrc/images/link/10.png differ
diff --git a/src/main/websrc/images/link/11.png b/src/main/websrc/images/link/11.png
new file mode 100644
index 0000000..53d77e2
Binary files /dev/null and b/src/main/websrc/images/link/11.png differ
diff --git a/src/main/websrc/images/link/2.png b/src/main/websrc/images/link/2.png
new file mode 100644
index 0000000..8a44345
Binary files /dev/null and b/src/main/websrc/images/link/2.png differ
diff --git a/src/main/websrc/images/link/3.png b/src/main/websrc/images/link/3.png
new file mode 100644
index 0000000..3686653
Binary files /dev/null and b/src/main/websrc/images/link/3.png differ
diff --git a/src/main/websrc/images/link/4.png b/src/main/websrc/images/link/4.png
new file mode 100644
index 0000000..e7e9c2d
Binary files /dev/null and b/src/main/websrc/images/link/4.png differ
diff --git a/src/main/websrc/images/link/5.png b/src/main/websrc/images/link/5.png
new file mode 100644
index 0000000..ccaf75f
Binary files /dev/null and b/src/main/websrc/images/link/5.png differ
diff --git a/src/main/websrc/images/link/6.png b/src/main/websrc/images/link/6.png
new file mode 100644
index 0000000..c2f078f
Binary files /dev/null and b/src/main/websrc/images/link/6.png differ
diff --git a/src/main/websrc/images/link/7.png b/src/main/websrc/images/link/7.png
new file mode 100644
index 0000000..3e39171
Binary files /dev/null and b/src/main/websrc/images/link/7.png differ
diff --git a/src/main/websrc/images/link/8.png b/src/main/websrc/images/link/8.png
new file mode 100644
index 0000000..f7de2f8
Binary files /dev/null and b/src/main/websrc/images/link/8.png differ
diff --git a/src/main/websrc/images/link/9.png b/src/main/websrc/images/link/9.png
new file mode 100644
index 0000000..5cd3430
Binary files /dev/null and b/src/main/websrc/images/link/9.png differ
diff --git a/src/main/websrc/js/app/DateDirective.js b/src/main/websrc/js/app/DateDirective.js
new file mode 100644
index 0000000..9d8d5db
--- /dev/null
+++ b/src/main/websrc/js/app/DateDirective.js
@@ -0,0 +1,791 @@
+(function(){
+	angular.module("app")
+		.directive("myDatepicker",["ToolService","DateService","UtilService",myDatepicker])
+		.directive("singleDatepicker",singleDatepicker)
+		.directive("myDateweek",['UtilService',myDateweek])
+		.directive("myDatemonth",['UtilService',myDatemonth]);
+
+		var tempVersion = new Date().getTime();
+		/*日期 多日期*/
+		function myDatepicker(ToolService,DateService,UtilService) {
+		    var today = Date.today();
+		    var defaultOpsn = {
+		        abbrWeeks: ['日', '一', '二', '三', '四', '五', '六'],
+		        format: 'YYYY-MM-DD',
+		        min: null,
+		        max: today,
+		        start: today,
+		        end: today,
+		        current: today,
+		        months: 2, //默认显示2个面板
+		        chooseCls: 'is-choose',
+		        todayCls: 'is-today'
+		    };
+
+		    return {
+		        restrict: 'EA',
+		        transclude: true,
+		        replace:true,
+		        templateUrl: '/template/common/datepicker.html?r='+tempVersion,
+		        scope: {
+		            dateName:'@', //日期传递名称
+		            noMax:"@", //是否有最大日期限制
+		            rangeDays:"@", //最多日期范围 -1:不需要控制范围
+		            rangeDays2:"=", //最多日期范围,动态
+		            initDay:"=", //初始化显示日期
+		            maxDay:'@',  //最大日期选择,默认为今天,-1为昨天。。。
+		            maxDay2:"=", //同上,动态传参
+		            operationSel:"=", //当前可否操作
+		            min:"="
+		        },
+		        link: function(scope, elem, attrs) {
+		        	scope.maxDay = scope.maxDay || scope.maxDay2;
+
+		        	var ddd = -1;
+		        	if(UtilService.isNullStr(scope.maxDay)){
+		        		ddd = 0;
+		        	}
+		        	var cacheDates = {
+		            	'yesday':DateService.getYesDay(),
+		            	'd7':DateService.getLastDays(-7,ddd),
+		            	'd14':DateService.getLastDays(-14,ddd),
+		            	'd30':DateService.getLastDays(-30,ddd),
+		            	'-w1':DateService.getWeekRangeDate(-1,ddd),
+		            	'w0':DateService.getWeekRangeDate(0,ddd),
+		            	'-m1':DateService.getMonthRangeDate(-1,ddd),
+		            	'm0':DateService.getMonthRangeDate(0,ddd)
+		            }
+		            scope.$watch("operationSel",function(n){
+		             	if(angular.isUndefined(scope.operationSel)){
+			             	scope.operSel = true;
+			            }
+			            else{
+			            	scope.operSel = n;
+			            }
+		            });
+		            //根据选择日期设置相对时间范围flag
+		            scope.getRelativeFlag = function(startDate,endDate){
+		            	var relFlag = "";
+		            	for(var k in cacheDates){
+	                		var range = cacheDates[k];
+	                		if(startDate == range.startDate && endDate == range.endDate){
+	                			relFlag = k;
+	                			break;
+	                		}
+	                	}
+	                	scope.selDayflag = relFlag;
+		            }
+		            //把初始化日期赋值到日期框里面
+		            scope.$watch("initDay",function(n){
+		            	if(angular.isDefined(n) && n.startDate){
+		            		if(!scope.options.start.isSameDay(new Date(n.startDate)) || !scope.options.end.isSameDay(new Date(n.endDate))){
+		            			scope.getRelativeFlag(n.startDate,n.endDate);
+			            		scope.options.start = scope.completeStrat = new Date(n.startDate);
+			            		scope.options.end = scope.completeEnd = new Date(n.endDate);
+		            		}
+		            	}
+		            });
+		        	scope.selme = false;
+		        	scope.$watch("rangeDays+rangeDays2",function(e){
+		        		var rds = scope.rangeDays || scope.rangeDays2;
+		        		if(angular.isDefined(rds)){
+			        		scope.rgDays = Number(rds);
+			        	}else{
+			        		scope.rgDays = 31;
+			        	}
+		        	});
+		        	
+		            var maxTime = today,emitName = scope.dateName || "dateCustos";
+		            if(scope.maxDay && scope.maxDay == -1){
+		            	maxTime = Date.yesterday();
+		            }
+		            //如果最大可选日期不是当天,则在当前年上加上100年
+		            if(scope.noMax && scope.noMax == 'true'){
+		                var future = Date.today();
+		                future.setFullYear(today.getFullYear()+100);
+		                maxTime = future;
+		            }
+
+		            var minTime = "";
+		            scope.$watch("min",function(n){
+		            	if(angular.isDefined(n)){
+		            		minTime = new Date(n).addDays(-1);
+		            	}
+		            });
+		            var defaultOps = UtilService.cloneJSON(defaultOpsn);
+		            var setOption = function() {
+		                defaultOps.start = maxTime;
+		                defaultOps.end = maxTime;
+		                defaultOps.max = maxTime;
+		                defaultOps.current = today;
+		                scope.options = angular.extend(defaultOps, scope.options || {});
+		                //清除时分秒毫秒
+		                scope.options.start.clearTime();
+		                scope.options.end.clearTime();
+
+		                scope.completeStrat = scope.options.start;
+		                scope.completeEnd = scope.options.end;
+		                scope.customStrat = scope.options.start.toFormat(scope.options.format);
+		                scope.customEnd = scope.options.end.toFormat(scope.options.format);
+
+		                //最后一个日期面板的日期
+		                scope.panelEndDate = Date.getFirstDay(scope.options.end); 
+		            };
+		            setOption();
+		            var render = function(date) {
+		                var panels = [],
+		                    months = scope.options.months,
+		                    date = (date || scope.panelEndDate).clone();
+		                for (var p = 0; p < months; p++) {
+		                    var weeks = [],
+		                        dateOfPanel = date.clone().addMonths(-(months - 1 - p)), //每个日期面板的日期
+		                        firstDay = Date.getFirstDay(dateOfPanel), //该月的第一天
+		                        firstWeekDay = firstDay.getDay(), //该月的一个星期
+		                        daysOfMonth = Date.getDaysInMonth(dateOfPanel.getFullYear(), dateOfPanel.getMonth()), //该月有几天
+		                        rowNums = Math.ceil((firstWeekDay + daysOfMonth) / 7), //该月日历的行数
+		                        curDate = firstDay.clone().addDays(-firstWeekDay); //循环遍历的日期
+
+		                    for (var i = 0; i < rowNums; i++) {
+		                        // weeks.push([])
+		                        var days = [];
+		                        for (var j = 0; j < 7; j++) {
+		                            var tmp = curDate.clone();
+		                            days.push({
+		                                day: tmp,
+		                                choose: tmp.between(scope.options.start, scope.options.end),
+		                                other: tmp.getMonth() != dateOfPanel.getMonth(),
+		                                today: Date.isSameDay(tmp, today) //是否是今日
+		                            });
+		                            curDate = curDate.addDays(1);
+		                        }
+
+		                        weeks.push(days);
+		                    }
+
+		                    panels.push({
+		                        date: dateOfPanel,
+		                        weeks: weeks
+		                    });
+		                }
+		                //可选最大时间不是今天,禁用"今天,昨天,最近七天按钮,默认显示最大天数"
+		                // if (maxTime !== today) {
+		                //     scope.complete();
+		                //     $(elem).parent().prevAll().hide();
+		                // } else {
+		                    $(elem).parent().prevAll().show();
+		                // }
+		                scope.panels = panels;
+		                scope.wstyle = {"width":(months*274 + 80)+"px"};
+		            };
+		            //初始化面板上日期的css
+		            scope.cellClass = function(cell) {
+		            	if(cell.other){
+		            		return "other-month";
+		            	}
+		            	else if(cell.day.isSameDay(scope.options.start) || cell.day.isSameDay(scope.options.end)){
+		            		return "start_end";
+		            	}
+		            	else if(cell.day.between(scope.options.start, scope.options.end)){
+		            		return "choose";
+		            	}
+		            	else if(cell.day.isSameDay(scope.options.current) && cell.day.isSameDay(maxTime)){
+		            		return "is-today";
+		            	}
+		            	else if(cell.day.isAfter(maxTime) || (minTime!='' && cell.day.isBefore(minTime))){
+		            		return "disabled";
+		            	}
+		            	else{
+		            		return "";
+		            	}
+		            };
+		            //切换月份
+		            scope.changeMonth = function(index, date, num) {
+		                scope.dateMonth = scope.panelEndDate.addMonths(num);
+		                render(scope.dateMonth);
+		            };
+		            //点击显示或隐藏日期面板
+		            scope.showDateTable = function() {
+		            	if(!scope.operSel){return false;}
+
+		            	var curDateWrap = $(elem).find(".dateTabRange");
+		            	$(".dateTabRange").each(function(){
+		            		if($(this)!==curDateWrap){
+		            			$(this).addClass("ng-hide");
+		            		}
+		            	});
+		            	if(curDateWrap.hasClass("ng-hide")){
+		            		scope.showFlag = true;
+		            		curDateWrap.removeClass("ng-hide")
+		            	}
+		            	else{
+		            		scope.showFlag = false;
+		            		curDateWrap.addClass("ng-hide")
+		            	}
+
+		                // if (typeof scope.showFlag == 'undefined') {
+		                // 	$(".dateTabRange").addClass("ng-hide");
+		                //     scope.showFlag = true;
+		                // } else if (scope.showFlag == true) {
+		                //     scope.showFlag = false;
+		                // } else if (scope.showFlag == false) {
+		                // 	$(".dateTabRange").addClass("ng-hide");
+		                //     scope.showFlag = true;
+		                // }
+		            }
+
+
+		            //选择具体日期
+		            var chooseCounts = 0;
+		            scope.chooseDate = function(cell) {
+		                //是否大于今天
+		                // if (cell.day.isAfter(today)) { 
+		                //     return;
+		                // }
+		                //是否大于可选择最大时间
+		                if (cell.day.isAfter(maxTime)) { 
+		                    return;
+		                }
+		                //是否小于可选择最小时间
+		                if (minTime!='' && cell.day.isBefore(minTime)) { 
+		                    return;
+		                }
+		                if (chooseCounts >= 2) chooseCounts = 0;
+		                chooseCounts++;
+
+		                if (chooseCounts === 1) {
+		                    scope.options.end = scope.options.start = cell.day;
+		                } else if (chooseCounts === 2) {
+		                    cell.day.isAfter(scope.options.start) ? scope.options.end = cell.day : scope.options.start = cell.day;
+		                }
+		            };
+		            
+		            scope.setRelDate = function(flag){
+		            	
+		            	var daterange = cacheDates[flag];
+		            	if(scope.rgDays!=-1){
+		            		var diff = diffDate(daterange.startDate,daterange.endDate);
+			            	if(diff > scope.rgDays){
+			            		ToolService.showTips("日期范围不能大于"+scope.rgDays+"天");
+			            		return false;
+			            	}
+		            	}
+
+		            	scope.selDayflag = flag;
+		            	if(minTime!='' && new Date(daterange.startDate).isBefore(minTime)){
+		            		ToolService.showTips("超出最小可选日期限制了");
+		            		return;
+		            	}
+		            	else{
+		            		scope.options.start = new Date(daterange.startDate);
+		            	}
+
+		            	if(minTime!='' && new Date(daterange.endDate).isBefore(minTime)){
+		            		ToolService.showTips("超出最小可选日期限制了");
+		            		return;
+		            	}
+		            	else{
+		            		scope.options.end = new Date(daterange.endDate);
+		            	}
+		            	
+		            	scope.complete(1);
+		            }
+		            //点击确定,完成日期选择,传递日期
+		            scope.complete = function(isrel) {
+		            	if(angular.isUndefined(isrel) && scope.rgDays!=-1){
+		            		var diff = diffDate(scope.options.start,scope.options.end)
+			            	if(diff > scope.rgDays){
+			            		ToolService.showTips("日期范围不能大于"+scope.rgDays+"天");
+			            		return false;
+			            	}
+		            	}
+		            	
+		            	scope.completeStrat = scope.options.start;
+		                scope.completeEnd = scope.options.end;
+
+		                var startDate = scope.completeStrat.toFormat(scope.options.format),endDate = scope.completeEnd.toFormat(scope.options.format);
+		                if(angular.isUndefined(isrel)){
+		                	scope.getRelativeFlag(startDate,endDate);
+		                	
+		                }
+		               	scope.$emit(emitName, {"startDate":startDate,"endDate":endDate,"dateflag":scope.selDayflag});
+		                
+		                scope.showFlag = false;
+		            };
+		            //取消选择,关闭面板
+		            scope.cancel = function() {
+		            	if(scope.options.start != scope.completeStrat || scope.options.end != scope.completeEnd){
+		            		scope.options.start = scope.completeStrat;
+			                scope.options.end = scope.completeEnd;
+			                scope.getRelativeFlag(scope.completeStrat.toFormat(scope.options.format),scope.completeEnd.toFormat(scope.options.format));
+		            	}
+		            	scope.showFlag = false;
+		            };
+		            //检测选择日期操作
+		            scope.$watch('options.start+options.end', function() {
+		            	scope.customStrat = scope.options.start.toFormat(scope.options.format);
+		                scope.customEnd = scope.options.end.toFormat(scope.options.format);
+		            });
+		            render();
+
+		            $(document).on("click",function(){
+		                scope.cancel();
+		                scope.$apply();
+		            });
+		        }
+		    };
+		};
+
+		/*单日期控件*/
+		function singleDatepicker() {
+		    var today = Date.today();
+		    var defaultOps = {
+		        abbrWeeks: ['日', '一', '二', '三', '四', '五', '六'],
+		        format: 'YYYY-MM-DD',
+		        min: null,
+		        max: today,
+		        start: today,
+		        end: today,
+		        current: today,
+		        months: 1, 
+		        chooseCls: 'is-choose',
+		        todayCls: 'is-today'
+		    };
+
+		    return {
+		        restrict: 'EA',
+		        transclude: true,
+		        replace:true,
+		        templateUrl: '/template/common/datepicker.html?r='+tempVersion,
+		        scope: {
+		            dateName:"@",
+		            campareDays:"=",
+		            operationSel:"=" //当前可否操作
+		        },
+		        link: function(scope, elem, attrs) {
+		        	scope.$watch("operationSel",function(n){
+		             	if(angular.isUndefined(scope.operationSel)){
+			             	scope.operSel = true;
+			            }
+			            else{
+			            	scope.operSel = n;
+			            }
+		            });
+
+		             var maxTime = today,emitName = scope.dateName;
+		             var setOption = function() {
+		                defaultOps.start = maxTime;
+		                defaultOps.end = maxTime;
+		                defaultOps.max = maxTime;
+		                defaultOps.current = maxTime;
+		                scope.options = angular.extend(defaultOps, scope.options || {});
+		                //清除时分秒毫秒
+		                scope.options.start.clearTime();
+		                scope.options.end.clearTime();
+
+		                scope.completeStrat = scope.options.start;
+		                scope.completeEnd = scope.options.end;
+		                scope.customStrat = scope.options.start.toFormat(scope.options.format);
+		                scope.customEnd = scope.options.end.toFormat(scope.options.format);
+
+		                //最后一个日期面板的日期
+		                scope.panelEndDate = Date.getFirstDay(scope.options.end); 
+		            };
+		            setOption();
+		            var render = function(date) {
+		                var panels = [],
+		                    months = scope.options.months,
+		                    date = (date || scope.panelEndDate).clone();
+
+		                months = 1;
+		                for (var p = 0; p < months; p++) {
+		                    var weeks = [],
+		                        dateOfPanel = date.clone().addMonths(-(months - 1 - p)), //每个日期面板的日期
+		                        firstDay = Date.getFirstDay(dateOfPanel), //该月的第一天
+		                        firstWeekDay = firstDay.getDay(), //该月的一个星期
+		                        daysOfMonth = Date.getDaysInMonth(dateOfPanel.getFullYear(), dateOfPanel.getMonth()), //该月有几天
+		                        rowNums = Math.ceil((firstWeekDay + daysOfMonth) / 7), //该月日历的行数
+		                        curDate = firstDay.clone().addDays(-firstWeekDay); //循环遍历的日期
+
+		                    for (var i = 0; i < rowNums; i++) {
+		                        // weeks.push([])
+		                        var days = [];
+		                        for (var j = 0; j < 7; j++) {
+		                            var tmp = curDate.clone();
+		                            days.push({
+		                                day: tmp,
+		                                choose: tmp.between(scope.options.start, scope.options.end),
+		                                other: tmp.getMonth() != dateOfPanel.getMonth(),
+		                                today: Date.isSameDay(tmp, today) //是否是今日
+		                            });
+		                            curDate = curDate.addDays(1);
+		                        }
+
+		                        weeks.push(days);
+		                    }
+
+		                    panels.push({
+		                        date: dateOfPanel,
+		                        weeks: weeks
+		                    });
+		                }
+		                //可选最大时间不是今天,禁用"今天,昨天,最近七天按钮,默认显示最大天数"
+		                if (maxTime !== today) {
+		                    scope.complete();
+		                    $(elem).parent().prevAll().hide();
+		                } else {
+		                    $(elem).parent().prevAll().show();
+		                }
+		                scope.panels = panels;
+		                scope.wstyle = {"width":months*274+"px"};
+		            };
+		            scope.cellClass = function(cell) {
+		                return cell.other ? "other-month" :
+		                    cell.day.between(scope.options.start, scope.options.end) ? "choose" :
+		                    cell.day.isSameDay(maxTime) ? "is-today" :
+		                    cell.day.isAfter(maxTime) ? "disabled" : '';
+		            };
+		            scope.changeMonth = function(index, date, num) {
+		                scope.dateMonth = scope.panelEndDate.addMonths(num);
+		                render(scope.dateMonth);
+		            };
+		            
+		            scope.showDateTable = function() {
+		            	if(!scope.operSel){return false;}
+		            	
+		                if (typeof scope.showFlag == 'undefined') {
+		                    scope.showFlag = true;
+		                } else if (scope.showFlag == true) {
+		                    scope.showFlag = false;
+		                } else if (scope.showFlag == false) {
+		                    scope.showFlag = true;
+		                }
+		            }
+
+		            var chooseCounts = 0;
+		            scope.chooseDate = function(cell) {
+		                //是否大于今天
+		                if (cell.day.isAfter(today)) { 
+		                    return;
+		                }
+		                //是否大于可选择最大时间
+		                if (cell.day.isAfter(maxTime)) { 
+		                    return;
+		                }
+		                if (chooseCounts >= 2) chooseCounts = 0;
+		                chooseCounts++;
+
+		                //如果有对比日期,用所选日期-去对比天数=对比开始日期
+		                if(angular.isDefined(scope.campareDays) && scope.campareDays>0){
+		                    scope.options.end = cell.day;
+		                    scope.options.start = new Date(addDate(cell.day,-scope.campareDays));
+		                }else{
+		                    scope.options.end = scope.options.start = cell.day;
+		                }
+		                scope.complete();
+		            };
+		            scope.complete = function() {
+		                scope.completeStrat = scope.options.start;
+		                scope.completeEnd = scope.options.end;
+		              
+		                if(angular.isDefined(scope.campareDays) && scope.campareDays>0){
+		                    scope.$emit(emitName, scope.completeStrat.toFormat(scope.options.format) + ' - ' + scope.completeEnd.toFormat(scope.options.format));
+		                }else{
+		                    scope.$emit(emitName, scope.completeStrat.toFormat(scope.options.format));
+		                }
+		                scope.showFlag = false;
+		            };
+		            scope.cancel = function() {
+		                scope.options.start = scope.completeStrat;
+		                scope.options.end = scope.completeEnd;
+		                scope.showFlag = false;
+		            };
+		            scope.$watch('options.start+options.end', function() {
+		                scope.customStrat = scope.options.start.toFormat(scope.options.format);
+		                scope.customEnd = scope.options.end.toFormat(scope.options.format);
+		            });
+		            render();
+
+		            $(document).on("click",function(){
+		                scope.cancel();
+		                scope.$apply();
+		            });
+		        }
+		    };
+		};
+
+
+	/*日期 选择周*/
+	function myDateweek(UtilService) {
+	    var today = Date.yesterday();
+
+	    return {
+	        restrict: 'EA',
+	        transclude: true,
+	        replace:true,
+	        templateUrl: '/template/common/dateweek.html?r='+tempVersion,
+	        scope: {
+	            dateName:"@",
+	            weeks:"@"
+	        },
+	        link: function(scope, elem, attrs) {
+	            scope.options = {};
+	            if(scope.weeks){
+	                scope.options.weeks = scope.weeks;
+	            }else{
+	                scope.options.weeks = 1;
+	            }
+
+	            scope.showDateTable = function() {
+	                if (typeof scope.showFlag == 'undefined') {
+	                    scope.showFlag = true;
+	                } else if (scope.showFlag == true) {
+	                    scope.showFlag = false;
+	                } else if (scope.showFlag == false) {
+	                    scope.showFlag = true;
+	                }
+	            }
+
+	            var nyear = scope.nowyear = today.getFullYear();
+	            var selectday = today.clone();
+
+	            var nowW = new Date().getDay();
+	            nowW = nowW == 0 ? 7 : nowW;
+	            scope.options.start = scope.options.end = {
+	                week : getNowWeek(),
+	                date : new Date().clone().addDays(7 - nowW),
+	                year : scope.nowyear
+	            }
+
+	            scope.setWeeklist = function(){
+	                scope.weeklist = [];
+	                var weeknum = 7;
+	                var firstDay = new Date(scope.nowyear, 0, 1),fw = firstDay.getDay();
+	                var maxDay = new Date(scope.nowyear, 11, 31),rowweek = [];
+
+	                fw = fw == 0 ? 7 :fw;
+	                var endDay = firstDay.clone().addDays(7 - fw),w = 0;
+	                if(fw > 0 && fw < 5){ //当年的第一天为周五周六周日并到上一年
+	                    w = 1;
+	                    rowweek.push({
+	                        week : w,
+	                        // date : endDay.toFormat("YYYY-MM-DD"),
+	                        date : endDay,
+	                        year : scope.nowyear
+	                    });
+	                }
+
+	                while(endDay < maxDay && !maxDay.isSameDay(endDay)){
+	                    w ++ ;
+	                    endDay = endDay.clone().addDays(7);
+	                    rowweek.push({
+	                        week : w,
+	                        // date : endDay.toFormat("YYYY-MM-DD"),
+	                        date : endDay,
+	                        year : scope.nowyear
+	                    });
+
+	                    if(w % weeknum == 0){
+	                        scope.weeklist.push(rowweek);
+	                        rowweek = [];
+	                    }
+	                }
+	   
+	                var lastDay = new Date(scope.nowyear, 11, 31),lastW = lastDay.getDay();
+	                //当年最后一天是周五周六或者周日时,移到下一年
+	                if(lastW > 0 && lastW < 4){
+	                    if(rowweek.length == 0){
+	                        scope.weeklist[scope.weeklist.length-1].pop();
+	                    }else{
+	                        rowweek.pop();
+	                    }
+	                }
+
+	                if(rowweek.length > 0){
+	                    scope.weeklist.push(rowweek);
+	                }
+	            }
+
+	            scope.changeYear = function(n){
+	                scope.nowyear+=n;
+	                scope.setWeeklist();
+	            }
+	            scope.setWeeklist();
+
+	            var chooseCounts = 0;
+	            scope.chooseDate = function(cell) {
+	                if(cell.date.clone().addDays(-6).isAfter(today)){
+	                    return false;
+	                }
+	                if(scope.options.weeks == 1){
+	                    selectday = cell.date;
+	                    scope.options.start = scope.options.end = cell;
+	                    scope.$emit(scope.dateName,cell.year+""+getStr(cell.week));
+	                    scope.cancel();
+	                }else{ //2
+	                    if (chooseCounts >= 2) chooseCounts = 0;
+	                    chooseCounts++;
+
+	                    if(chooseCounts == 1){
+	                        scope.options.start = scope.options.end = cell;
+	                    }else{
+	                        var preCell = scope.options.start;
+	                        if(preCell.date > cell.date){
+	                            scope.options.start = cell;
+	                        }else{
+	                            scope.options.end = cell;
+	                        }
+	                    }
+	                }
+	                
+	            }
+	            scope.complete = function(){
+	                var start = scope.options.start.year + "" + UtilService.getStr(scope.options.start.week);
+	                var end = scope.options.end.year + "" + UtilService.getStr(scope.options.end.week);
+	                scope.$emit(scope.dateName,{start:start,end:end});
+	                scope.cancel();
+	            }
+	            scope.cellClass = function(cell) {
+	                if(cell.date.between(scope.options.start.date,scope.options.end.date)){
+	                    return "choose";
+	                }
+	                else if((cell.year == scope.options.start.year && cell.week == scope.options.start.week) || (cell.year == scope.options.end.year && cell.week == scope.options.end.week)){
+	            		return "start_end";
+	            	}
+	                else if(today.between(cell.date.clone().addDays(-6),cell.date)){
+	                    return "is-now";
+	                }
+	                else if(cell.date.isAfter(today)){
+	                    return "disabled";
+	                }
+	                else{
+	                    return '';
+	                }
+	            };
+	            scope.cancel = function() {
+	                scope.showFlag = false;
+	            };
+
+	            $(document).on("click",function(){
+	                scope.cancel();
+	                scope.$apply();
+	            });
+	        }
+	    };
+	};
+	/*日期 选择月*/
+	function myDatemonth(UtilService) {
+	    var today = Date.yesterday();
+	    return {
+	        restrict: 'EA',
+	        transclude: true,
+	        replace:true,
+	        templateUrl: '/template/common/datemonth.html?r='+tempVersion,
+	        scope: {
+	            dateName:"@",
+	            months:"@"
+	        },
+	        link: function(scope, elem, attrs) {
+	            var nyear = scope.nowyear = today.getFullYear();
+	            var selectmonth = scope.nowMonth = today.getMonth() + 1;
+
+	            scope.options = {};
+	            if(scope.months){
+	                scope.options.months = scope.months;
+	            }else{
+	                scope.options.months = 1;
+	            }
+	           
+	            scope.showDateTable = function() {
+	                if (typeof scope.showFlag == 'undefined') {
+	                    scope.showFlag = true;
+	                } else if (scope.showFlag == true) {
+	                    scope.showFlag = false;
+	                } else if (scope.showFlag == false) {
+	                    scope.showFlag = true;
+	                }
+	            }
+	            scope.changeYear = function(n){
+	                scope.nowyear+=n;
+	                scope.setmonthList();
+	            }
+	            scope.setmonthList = function(){
+	                scope.monthList = [];
+	                var rowNums = 4,row = [];
+	                for(var i=1;i<=12;i++){
+	                    row.push({
+	                        month : i,
+	                        year : scope.nowyear,
+	                        date : new Date(scope.nowyear,i-1,1)
+	                    });
+
+	                    if(angular.isUndefined(scope.options.start) && i == selectmonth && scope.nowyear == nyear){
+	                        scope.options.start = scope.options.end = row.slice(-1)[0];
+	                    }
+
+	                    if(i%rowNums == 0){
+	                        scope.monthList.push(row);
+	                        row = [];
+	                    }
+	                }
+	            }
+	            scope.setmonthList();
+
+	            var chooseCounts = 0;
+	            scope.chooseDate = function(cell) {
+	                if(cell.year > nyear || (cell.month > scope.nowMonth && cell.year == nyear)){
+	                    return false;
+	                }
+
+	                if(scope.options.months == 1){
+	                    selectmonth = cell.month;
+	                    scope.options.start = scope.options.end = cell;
+	                    scope.$emit(scope.dateName,cell.year+""+ UtilService.getStr(cell.month));
+	                    scope.cancel();
+	                }else{ //2
+	                    if (chooseCounts >= 2) chooseCounts = 0;
+	                    chooseCounts++;
+
+	                    if(chooseCounts == 1){
+	                        scope.options.start = scope.options.end = cell;
+	                    }else{
+	                        var preCell = scope.options.start;
+	                        if(preCell.year > cell.year || (preCell.year == cell.year && preCell.month > cell.month)){
+	                            scope.options.start = cell;
+	                        }else{
+	                            scope.options.end = cell;
+	                        }
+	                    }
+	                }
+	            }
+	            scope.complete = function(){
+	                var start = scope.options.start.year + "" + UtilService.getStr(scope.options.start.month);
+	                var end = scope.options.end.year + "" + UtilService.getStr(scope.options.end.month);
+	       
+	                scope.$emit(scope.dateName,{start:start,end:end});
+	                scope.cancel();
+	            }
+	            scope.cellClass = function(cell) {
+	                if(cell.date.between(scope.options.start.date,scope.options.end.date)){
+	                    return "choose";
+	                }
+	                else if(cell.month == scope.nowMonth && cell.year == nyear){
+	                    return "is-today";
+	                }
+	                else if(cell.year > nyear || (cell.month > scope.nowMonth && cell.year == nyear)){
+	                    return "disabled";
+	                }
+	                else{
+	                    return '';
+	                }
+	            };
+	            scope.cancel = function() {
+	                scope.showFlag = false;
+	            };
+	            $(document).on("click",function(){
+	                scope.cancel();
+	                scope.$apply();
+	            });
+	        }
+	    };
+	};
+})();
\ No newline at end of file
diff --git a/src/main/websrc/js/app/DateService.js b/src/main/websrc/js/app/DateService.js
new file mode 100644
index 0000000..30d24ac
--- /dev/null
+++ b/src/main/websrc/js/app/DateService.js
@@ -0,0 +1,231 @@
+(function () {
+    'use strict';
+    
+    angular.module("app")
+    .factory("DateService",DateService);
+
+    function DateService(){
+    	var service = {};
+    	 
+        /*0今天,-1昨天。。。*/
+        service.getDay = function(num){
+            var time = new Date(),
+                    dayFn = function(date) {
+                        var YY = date.getFullYear(),
+                            MM = date.getMonth() + 1,
+                            DD = date.getDate();
+                        if (MM < 10) MM = "0" + MM;
+                        if (DD < 10) DD = "0" + DD;
+                        return YY + "-" + MM + "-" + DD
+                    },
+                    times = time.getTime() + (1000 * 60 * 60 * 24 * num);
+
+            time.setTime(times);
+            
+            return dayFn(time);
+        };
+
+        //一年多少周
+        service.getYearWeekList = function(year){
+            if(typeof year == 'undefined'){
+                var d = new Date();
+                year = d.getFullYear();
+            }
+
+            var weeklist = [];
+            var firstDay = new Date(year, 0, 1),fw = firstDay.getDay();
+            var maxDay = new Date(year, 11, 31);
+
+            fw = fw == 0 ? 7 :fw;
+            var endDay = firstDay.clone().addDays(7 - fw),w = 0;
+            //当年的第一天为周五周六周日并到上一年
+            if(fw > 0 && fw < 5){ 
+                w = 1;
+                weeklist.push({
+                    week : w,
+                    date : endDay,
+                    year : year
+                });
+            }
+
+            while(endDay < maxDay && !maxDay.isSameDay(endDay)){
+                w ++ ;
+                endDay = endDay.clone().addDays(7);
+                weeklist.push({
+                    week : w,
+                    date : endDay,
+                    year : year
+                });
+            }
+
+            var lastDay = new Date(year, 11, 31),lastW = lastDay.getDay();
+            //当年最后一天是周五周六或者周日时,移到下一年
+            if(lastW > 0 && lastW < 4){
+                weeklist.pop();
+            }
+            return weeklist;
+        }
+
+        //一年多少周数
+        service.getYearWeekCount = function(year){
+            return service.getYearWeekList(year).length;
+        }
+
+        //当前周数
+        service.getNowWeekNum = function(){
+            var today = Date.today();
+            var firstDay = new Date(today.getFullYear(), 0, 1),fw = firstDay.getDay();
+            var endDay = firstDay.clone(),n = 0;
+            if( fw > 0){
+                endDay = endDay.addDays(8-fw);
+                n = 1;
+            }
+            var days = diffDate(endDay , today);
+            return Math.ceil(days/7) + n;
+        }
+        //今天
+        service.getToday = function(){
+            return {
+                startDate:service.getDay(0),
+                endDate:service.getDay(0)
+            }
+        }
+        //昨天
+        service.getYesDay = function(){
+            return {
+                startDate:service.getDay(-1),
+                endDate:service.getDay(-1)
+            }
+        }
+        //最近几天,默认从昨天往前推
+        service.getLastDays = function(d,flag){
+            if(angular.isUndefined(flag)){
+                flag = -1;
+            }
+            if(flag == 0 && d<0){
+                d += 1;
+            }
+            if(flag == 0 && d>0){
+                d -= 1;
+            }
+            return {
+                startDate:service.getDay(d),
+                endDate:service.getDay(flag)
+            }
+        }
+        //最近几周
+        service.getLastWeeks = function(d){
+            var w = service.getNowWeekNum(),
+                date = new Date(),
+                year = date.getFullYear();
+
+            var range = {end:year+service.getStr(w)},pd = d + w +1;
+            if(pd > 0 ){
+                range.start = year + service.getStr(pd);
+            }else{
+                var pr = service.getYearWeekCount(year-1);
+                range.start = (year-1) + service.getStr(pr + pd);
+            }
+            return range;
+        }
+        //最近几月
+        service.getLastMonths = function(d){
+            var date = new Date(),year = date.getFullYear(),month = date.getMonth()+1;
+
+            var range = {end:year+service.getStr(month)},pm = month+d+1;
+            if(pm > 0 ){
+                range.start = year + service.getStr(pm);
+            }else{
+                range.start = (year-1) + service.getStr(12 + pm);
+            }
+            return range;
+        }
+        service.getStr = function(n){ 
+            if(n < 10){
+                return "0"+n;
+            }else{
+                return n+"";
+            }
+        }
+
+        //某周日期范围 d:0当前周 -1往前 1往后  
+        //flag传值就是最大天数是昨天 目前传-1表示最大昨天
+        service.getWeekRangeDate = function(d,flag){
+            d = d ? d : 0;
+            var date = new Date(),w = date.getDay();
+            w = w == 0 ? 7 : w;
+
+            var start = date.clone().addDays(-w+1),end = date;
+
+            if(d > 0){
+                start = start.clone().addDays(d*7);
+                end = start.clone().addDays(6);
+            }
+            else if(d < 0){
+                end = start.clone().addDays(-1+(d+1)*7);
+                start = start.clone().addDays(d*7);
+            }
+
+            if(flag && flag == -1 && Date.isSameDay(end,Date.today())){
+                if(start == end){
+                    start = end = end.clone().addDays(-1);
+                }
+                else{
+                    end = end.clone().addDays(-1);
+                }
+            }
+            return {
+                startDate:start.Format("yyyy-MM-dd"),
+                endDate:end.Format("yyyy-MM-dd")
+            }
+        }
+
+        //某月日期范围 d:0当前月 -1往前 1往后  
+        //flag传值就是最大天数是昨天 目前传-1表示最大昨天
+        service.getMonthRangeDate = function(d,flag){
+            d = d ? d : 0;
+            var date = new Date(),year = date.getFullYear(),m = date.getMonth(),day = date.getDate();
+            var start = null,end = null;
+            if(d!=0){
+                m += d;
+                if(m<0){
+                    m += 11;
+                    -- year;
+                }
+                day = Date.getDaysInMonth(year,m);
+                end = new Date(year,m,day);
+
+                start = end.clone();
+                start.setDate(1);
+            }
+            else{
+                if(flag && flag == -1){
+                    day += -1;
+                }
+                start = date.clone(),end = date;
+                start.setDate(1);
+                end.setDate(day);
+            }
+
+            return {
+                startDate:start.Format("yyyy-MM-dd"),
+                endDate:end.Format("yyyy-MM-dd")
+            }
+        }
+        //计算两个日期时间差
+        service.getDaysNum = function(strDateStart,strDateEnd){
+            var strSeparator = "-"; //日期分隔符
+            var oDate1;
+            var oDate2;
+            var iDays;
+            oDate1= strDateStart.split(strSeparator);
+            oDate2= strDateEnd.split(strSeparator);
+            var strDateS = new Date(oDate1[0], oDate1[1]-1, oDate1[2]);
+            var strDateE = new Date(oDate2[0], oDate2[1]-1, oDate2[2]);
+            iDays = parseInt(Math.abs(strDateS - strDateE ) / 1000 / 60 / 60 /24)//把相差的毫秒数转换为天数 
+            return iDays;
+        }
+
+    	return service;
+    }
+})();
\ No newline at end of file
diff --git a/src/main/websrc/js/app/app.js b/src/main/websrc/js/app/app.js
new file mode 100644
index 0000000..df1fb48
--- /dev/null
+++ b/src/main/websrc/js/app/app.js
@@ -0,0 +1,394 @@
+(function(){
+	angular.module("app")
+	.controller("indexCtrl",["$rootScope","$scope","HttpService","ToolService","UtilService","$state","$location","DateService","$timeout",indexCtrl]);
+
+
+	function indexCtrl($rootScope,$scope,HttpService,ToolService,UtilService,$state,$location,DateService,$timeout){
+
+        $rootScope.unfoldFlag = $rootScope.unfoldFlag==undefined?false:$rootScope.unfoldFlag;
+        $scope.queryLimit = function(appid){
+            if(angular.isDefined(appid)){
+                limitPM = HttpService.getInfo("login/limit/"+appid);
+            }
+            else{
+                limitPM = HttpService.getInfo("login/limit");
+            }
+
+            limitPM.then(function(data){
+                $rootScope.limitInfo = data;
+                UtilService.setItem("limitInfo",JSON.stringify($rootScope.limitInfo));
+            });
+        }
+
+        $rootScope.demoU = ToolService.isDemoUser();
+        $scope.goLogin = function(){
+            window.location.href = "/login.html";
+        }
+
+				//msgflag=1,新建app刷list
+        $scope.queryApp = function(msgflag){
+					var appPM = HttpService.getInfo("app/findall");
+					appPM.then(function(data){
+						$scope.appAlllistInfo = data;
+						$scope.applistInfo = data.filter(function(item){
+								return item.isDebug!=true;
+						});
+
+						if(msgflag==1){return false;}
+
+						var lastId = UtilService.getCookie("ryioLastApp");
+            var demoapk = UtilService.getCookie("ryioDemoapk");
+            UtilService.setCookie("ryioDemoapk","");
+						if($scope.applistInfo.length > 0){
+							if(UtilService.isNullStr(lastId)){
+								lastId = "-1";
+							}
+							lastId = Number(lastId);
+							var apps = $scope.applistInfo.filter(function(item){
+                    if(!UtilService.isNullStr(demoapk)){
+                        return item.appkey == demoapk;
+                    }
+                    else{
+                        return item.id == lastId;
+                    }
+									});
+									if(apps.length == 0){
+										lastId = $scope.applistInfo[0].id;
+									}
+                else{
+                    lastId = apps[0].id;
+                }
+                if($scope.appidInit == lastId){
+                    $scope.appfresh = ++rmd;
+                }else{
+                    $scope.appidInit = lastId;
+                }
+                for(i=0; i < $scope.applistInfo.length; i++){
+                    if($scope.applistInfo[i].id == $scope.appidInit){
+                        $scope.appkey = $scope.applistInfo[i].appkey;
+                    }
+                }
+					}
+					else{
+						if($rootScope.isSuper || $rootScope.isManage || $rootScope.isAppManage){
+							$state.go("collect.app");
+						}
+	          else{
+	              $scope.goLogin();
+	          }
+					}
+			});
+		};
+
+		$scope.$on('f5Applist',function(e,msg){
+			$scope.queryApp(msg);
+		});
+    $scope.hasSubMenus = function(){
+        $scope.showMenuFlag = {};
+        var menus = $rootScope.curRoleAuth.roleAuthDetailList;
+        var first = "";
+        for(var i=0;i<menus.length;i++){
+            if($scope.showMenuFlag.admonitor && $scope.showMenuFlag.behavior && $scope.showMenuFlag.export){
+                break;
+            }
+            if(menus[i].parentAuth=='admonitor' || menus[i].parentAuth == 'campaignmanager'){
+               $scope.showMenuFlag.admonitor = true;
+            }else if(menus[i].parentAuth=='behavior' || menus[i].parentAuth == 'eventmanage'){
+               $scope.showMenuFlag.behavior = true;
+            }else if(menus[i].parentAuth=='export'){
+               $scope.showMenuFlag.export = true;
+            }
+        }
+        if($rootScope.mainMenu == 'export' && !$scope.showMenuFlag.export){
+            $rootScope.mainMenu = "";
+        }else if($rootScope.mainMenu == 'behavior' && !$scope.showMenuFlag.behavior){
+            $rootScope.mainMenu = "";
+        }else if($rootScope.mainMenu == 'admonitor' && !$scope.showMenuFlag.admonitor){
+            $rootScope.mainMenu = "";
+        }
+    }
+
+    $rootScope.webHideMenus = [];
+		$scope.$on("appid",function(e,msg){
+        $rootScope.appInstance = msg.info;
+        $scope.platform = msg.info.platform;
+        $rootScope.isandroid = $scope.platform == 'Android';
+        $rootScope.isios = $scope.platform == 'iOS';
+        $rootScope.isweb = $scope.platform == 'H5';
+
+				var path = $location.$$path,idx = path.indexOf("Detail");
+				if(path.indexOf('appDetail')>-1){return false;}
+
+				if(idx>-1){
+					$scope.appid = undefined;
+					$location.path(path.substring(0,idx));
+				}
+        else if($rootScope.isweb && $rootScope.webHideMenus.indexOf($rootScope.pagePath)>-1){
+            $scope.appid = undefined;
+            $location.path($rootScope.firstMeau);
+        }
+
+				if($rootScope.pagePath == '' || $rootScope.pagePath == 'collect'
+                    || (!$rootScope.isSuper && $rootScope.curRoleAuth && !$scope.hasTheMenu($rootScope.pagePath)))
+				{
+					$scope.appid = undefined;
+					$location.path($rootScope.firstMeau);
+				}
+
+        $rootScope.appid = $scope.appid = msg.info.id;
+				UtilService.setCookie("ryioLastApp",$scope.appid,7);
+		});
+
+    $scope.goToCustom = function(id,name){
+        $location.path("/collect/custommenu/"+id);
+        $rootScope.custID = id;
+    }
+    $scope.gotoCustonMenu = function(menuId){
+        var url = $state.href('collect.custommenu');
+        window.open(url+'/'+menuId,'_blank');
+    }
+		var rmd = new Date().getTime();
+		$scope.$on("mngappTo",function(e,msg){
+			if($scope.appid == msg){return false;}
+			if($scope.appidInit == msg){
+				$scope.appfresh = ++rmd;
+			}else{
+				$scope.appidInit = msg;
+			}
+		});
+
+    $scope.loginuserName = UtilService.getCookie("ryioUname");
+		$scope.currentAccountId = UtilService.getCookie("ryioUid");
+    $scope.userPastDate = UtilService.getCookie("ryioPastDate");
+
+			$scope.errorBack = function(msg){
+				ToolService.showTips(msg);
+			};
+
+				var rmdId = UtilService.randRangeId(),auid = UtilService.getCookie("ryioUid");
+
+				$scope.goPage = function(ui){
+						$rootScope.channeluniqueName = 'normal';
+			      if(ui == 'home'){
+							ui = $rootScope.firstMeau;
+							ui = ui.substring(1).replace("/",".");
+						}
+
+			      if(ui == 'collect.custommenu'){
+			          $rootScope.custID = "";
+			      }
+						var mmenu = ui.substring(ui.indexOf('.')+1);
+			      if(mmenu == 'channel'){
+			          $rootScope.channeluniqueName = "normal";
+			      }
+			      if($state.current && $state.current.name == ui){
+			          $state.reload(ui,{pageid:null});
+			      }else{
+			          $state.go(ui,{pageid:null});
+			      }
+				}
+        $scope.resizeStyle = function(){
+            var mleft = '0px';
+            if($rootScope.pagePath == "userinfo" || $rootScope.pagePath == "nopower"){
+                $rootScope.mainMenu = false;
+            }else{
+                mleft = $rootScope.unfoldFlag?'40px':'186px';
+            }
+            $(".conditionAlpha").css('left',mleft);
+            $rootScope.panelw = $(window).width()-mleft.slice(0,-2)-84;
+            return {'margin-left':mleft};
+        }
+        $scope.toggleMenu = function(){
+            $rootScope.unfoldFlag = !$rootScope.unfoldFlag;
+            UtilService.setCookie("unfoldFlag",$rootScope.unfoldFlag);
+
+            $scope.$broadcast("conentresize",true);
+        }
+
+        //flag:1一级菜单显示权限  2:编辑权限
+        $rootScope.hasTheMenu = function(name,flag,getmenus){
+            var menus = $rootScope.curRoleAuth.roleAuthDetailList.filter(function(item){
+                if(angular.isDefined(flag) && flag == 1){
+                    if($rootScope.isweb){
+                        return item.parentAuth == name && $scope.webHideMenus.indexOf(item.auth)==-1;
+                    }
+                    else{
+                        return item.parentAuth == name;
+                    }
+                }
+                if(angular.isDefined(flag) && flag == 2){
+                    return item.auth == name && item.edit == true;
+                }
+                else{
+                    if(name == 'export'){
+                        return $rootScope.hasTheMenu(name,1);
+                    }
+                    else{
+                        return item.auth == name && item.view == true;
+                    }
+
+                }
+            });
+            if(angular.isDefined(getmenus)){
+                return menus;
+            }
+            else{
+                return menus.length>0;
+            }
+        }
+        $rootScope.showSubMenus = function(mainMenu){
+            if($scope.channelAlert){
+                return false;
+            }
+            if(mainMenu!='management' && $scope.applistInfo && $scope.applistInfo.length == 0){
+                if($scope.appAlllistInfo.length > 0){
+                    ToolService.showTips("请先完成"+$scope.appAlllistInfo[0].name+"的数据调试");
+                }
+                else{
+                    ToolService.showTips("请先创建应用");
+                }
+                return false;
+            }
+            $rootScope.mainMenu = mainMenu;
+            var first = "";
+            if(mainMenu=='behavior'){
+								first = "/collect/"+$rootScope.mainMenus.behavior[0];
+						}else if(mainMenu=='export'){
+								first = "/collect/"+$rootScope.mainMenus.dataexport[$rootScope.isweb?1:0];
+						}else{
+								first = "/manage/"+$rootScope.mainMenus.manage[0];
+						}
+						$location.path(first);
+        }
+        $rootScope.showMenu = function(name,flag){
+            if(name == null){
+                name = $scope.pagePath;
+            }
+            if($scope.isweb && $scope.webHideMenus.indexOf(name)>-1){
+                return false;
+            }
+            if($rootScope.isSuper || $rootScope.isManage || $rootScope.isAppManage){
+                $scope.campaigninfoGroup = true;
+                return true;
+            }else{
+                if($rootScope.curRoleAuth){
+                   return $scope.hasTheMenu(name,flag);
+                }
+                else{
+                   return false;
+                }
+            }
+        }
+        $rootScope.hasEditPower = function(){
+            return $rootScope.showMenu(null,2);
+        }
+
+        $scope.showDataModel = function(m){
+            if($rootScope.isweb && m == 'retention'){return false;}
+            if(m == 'flow'){return true;}
+            if(m == 'channel'){return true;}
+
+            var key = {'pay':'payAuth','retention':'retentionAuth','isnatureopen':'isNatureOpen','topauth':"topAuth"}[m];
+        	if($rootScope.isSuper || $rootScope.isManage || $rootScope.isAppManage){
+        		return true;
+        	}else{
+        		if($rootScope.curRoleAuth){
+        			return $rootScope.curRoleAuth[key];
+        		}
+        		else{
+        			return false;
+        		}
+        	}
+        }
+        $scope.formTipMsg = "信息没填全或数据格式有误,请检查";
+
+        $rootScope.$watch("pagePath+isweb",function(n){
+          n = $scope.pagePath;
+        	if(angular.isDefined(n) && n!='' && n!= "product"){
+              var tipPM = HttpService.getInfo("tip/"+n, {});
+	        		tipPM.then(function(data){
+	        			$rootScope.currentPageTips = data;
+	        		},function(data){
+	        			$rootScope.currentPageTips = {};
+	        		});
+        	}
+        	else{
+        		$rootScope.currentPageTips = {};
+        	}
+        });
+
+        $scope.userLogout = function(){
+        	var lgPM = HttpService.getInfo("login/logout", {});
+	    		lgPM.then(function(data){
+	    			HttpService.logOutCookie();
+	    		});
+				}
+
+        $scope.showNoticew = false;
+        $scope.queryNotice = function(){
+        	var noticePM = HttpService.getInfo("notice/findDeploy", {});
+        	noticePM.then(function(data){
+        		$scope.noticeList = data;
+
+        		var sortNotice = UtilService.cloneJSON(data);
+						if(sortNotice && angular.isArray(sortNotice)){
+							sortNotice.sort(function(a,b){
+	        			return new Date(a.deployDate) > new Date(b.deployDate) ? -1 : 1;
+	        		});
+						}
+						else{
+							sortNotice = [];
+						}
+        		if(sortNotice.length>0){
+        			$scope.newNoticeInfo = sortNotice[0];
+        		}
+        	});
+        	$timeout($scope.queryNotice,1000*60*3);
+        }
+        $scope.showNoticeWin = function(){
+        	$scope.showNoticew = true;
+        	ToolService.showAlp();
+        }
+        $scope.hideNoticeWin = function(){
+        	$scope.showNoticew = false;
+        	ToolService.hideAlp();
+        }
+        $scope.clickNotice = function(news){
+        	var id = news.id;
+        	if($scope.curNoticeId == id){
+        		$scope.curNoticeId = -1;
+        	}
+        	else{
+        		$scope.curNoticeId = id;
+        		if(!news.isRead){
+        			news.isRead = true;
+        			if($scope.newNoticeInfo && $scope.newNoticeInfo.id == id){
+        				$scope.newNoticeInfo.isRead = true;
+        			}
+        			HttpService.postInfo("notice/saveReadLog/"+id, {});
+        		}
+        	}
+        }
+        $scope.initpage = function(){
+            $scope.queryLimit();
+            $scope.queryApp();
+            $scope.queryNotice();
+        }
+
+        var lpath = $location.path();
+        if(lpath!='/active/product'){
+            $scope.initpage();
+        }
+        //判断是否需要向后台发送请求检测名称重复
+        $scope.judgeNameChange = function(oldname,newname){
+            if(!UtilService.isNullStr(newname)  && (oldname !='' && newname !=''  && angular.lowercase(oldname) != angular.lowercase(newname) || (oldname=='' && newname!=''))){
+                return true;
+            }
+            else{
+                return false;
+            }
+        }
+
+        $scope.pwdPlacehold = "仅支持数字,大小写字母,且至少包含其中2种,长度限制为6-18位";
+	}
+})();
diff --git a/src/main/websrc/js/app/config.js b/src/main/websrc/js/app/config.js
new file mode 100644
index 0000000..736522f
--- /dev/null
+++ b/src/main/websrc/js/app/config.js
@@ -0,0 +1,152 @@
+(function () {
+    'use strict';
+
+    angular.module('app')
+    .run(['$rootScope', '$state', '$stateParams','UtilService','$templateCache', '$location','$window','ToolService','HttpService','DateService','$timeout',
+	    function($rootScope, $state, $stateParams,UtilService,$templateCache,$location,$window,ToolService,HttpService,DateService,$timeout) {
+	        $rootScope.$state = $state;
+	        $rootScope.$stateParams = $stateParams;
+	        $rootScope.isSuper = UtilService.getCookie("ryioIsSuper")=='true' || UtilService.getCookie("ryioIsSuper")==true;
+
+	        var ryioRole = UtilService.getCookie("ryioRole");
+	        if(ryioRole && ryioRole == '1'){ //管理员
+	            $rootScope.isManage = true;
+	        }
+	        else if(ryioRole && ryioRole == '2'){//子应用管理员
+	            $rootScope.isAppManage = true;
+	        }
+	        $rootScope.isall = $rootScope.isSuper || $rootScope.isManage || $rootScope.isAppManage;
+	        $rootScope.firstMeau = '/collect/custommenu';
+
+	        var userID = UtilService.getCookie("ryioUid");
+
+	        var speMenus = ["userinfo","product","nopower","expiration"];
+	        $rootScope.mainMenus ={
+	            behavior:["custommenu","eventstats","retention","funnel","usergroup","profile","event","activityevent","custommenuDetail","intelligentpath"],
+	            // dataexport:["logtool","report"],
+	            dataexport:["report"],
+	            manage:["app","auth"]
+            };
+	        $rootScope.$on('$stateChangeStart', function(event,next,o,current){
+	            var name = next.name,nextMenu = name.substring(name.indexOf(".")+1),idd = nextMenu.indexOf("Detail");
+	            var curname = current.name,curMenu = curname.substring(curname.indexOf(".")+1);
+	            if(curname == '' && (nextMenu == 'nopower' || nextMenu == 'expiration')){
+	            	window.location.href = "index.html";
+	            	return false;
+	            }
+
+	            var mname = nextMenu?nextMenu:curMenu;
+	            if($rootScope.mainMenus.behavior.indexOf(mname) > -1){
+	            	$rootScope.mainMenu = 'behavior';
+	            }else if($rootScope.mainMenus.dataexport.indexOf(mname) > -1){
+	            	$rootScope.mainMenu = 'export';
+	            }else if($rootScope.mainMenus.manage.indexOf(mname) > -1){
+	            	$rootScope.mainMenu = 'management';
+	            }
+
+	            var nextDo = function(){
+	            	var isUnfoldFlag = UtilService.getCookie("unfoldFlag");
+		            if(isUnfoldFlag){
+		                $rootScope.unfoldFlag = isUnfoldFlag=="false"?false:true;
+		            }
+		            document.getElementById("sysLoad").style.display = "none";
+		            document.getElementById("alpLoad").style.display = "none";
+		            if(idd > -1){
+		            	nextMenu = nextMenu.substring(0,idd);
+		            }
+
+                  var submenu = "",submenuDir = {
+                      'activityevent':"虚拟事件"
+                  };
+
+	                if(nextMenu == 'activityevent'){
+                        submenu = nextMenu;
+		                    nextMenu = 'event';
+	                }
+
+		            var web = $rootScope.isweb && $rootScope.webHideMenus.indexOf(nextMenu)>-1;
+		            if(nextMenu=='' || nextMenu == 'collect' || web){
+		            	$location.path($rootScope.firstMeau);
+		            	return false;
+		            }
+		            else if(nextMenu == 'systemparam' && $rootScope.demoU){}
+		            else if(speMenus.indexOf(nextMenu)>-1){}
+		            else if(!$rootScope.isSuper && $rootScope.curRoleAuth && !$rootScope.hasTheMenu(nextMenu)){
+		            	var firstMeau = $rootScope.firstMeau,
+		            		nowmenu = firstMeau.substring(firstMeau.lastIndexOf("/")+1);
+
+		            	$location.path($rootScope.firstMeau);
+		            	if(nowmenu == $rootScope.pagePath){
+		            		$window.location.reload();
+		            	}
+		            	return false;
+		            	// console.log(nowmenu,$rootScope.pagePath)
+		            }
+
+		            if(speMenus.indexOf(nextMenu)>-1){
+		            	$rootScope.backReport = true;
+		            }else{
+		            	$rootScope.backReport = false;
+		            }
+
+		            if(nextMenu == 'product' || (nextMenu=='userinfo' && curMenu=='product')){
+		            	$rootScope.preStatus = true;
+		            }else{
+		            	$rootScope.preStatus = false;
+		            }
+
+
+		            $(".rightWrap").scrollTop(0);
+
+		            $rootScope.pagePath = nextMenu;
+	            }
+	            if(!$rootScope.limitInfo){
+                $timeout(function(){
+                  nextDo();
+                },100);
+              }
+              else{
+                nextDo();
+              }
+	        });
+
+	        //清除页面缓存
+	        var stateChangeSuccess = $rootScope.$on('$stateChangeSuccess', stateChangeSuccess);
+	        function stateChangeSuccess($rootScope) {
+	           $templateCache.removeAll();
+	        }
+	    }
+	])
+	/*捕获异常*/
+	.config(["$provide",function ($provide) {
+	    $provide.decorator("$exceptionHandler", ['$delegate', function($delegate) {
+	        return function (exception, cause) {
+	        	document.getElementById("sysLoad").style.display = "none";
+	        	if(String(exception).indexOf("$compile:tpload")==-1){
+	        		$delegate(exception, cause);
+	        	}
+	        }
+	    }])
+	}])
+	.factory('httpInterceptor', [function() {
+	    var timestampMarker = {
+	        request: function(config) {
+	        	var token = $.cookie("ryioToken");
+	        	config.headers.Authorization = token;
+	            config.requestTimestamp = new Date().getTime();
+	            config.timeout = 3000 * 10;
+	            return config;
+	        },
+	        response: function(response) {
+	            response.config.responseTimestamp = new Date().getTime();
+	            return response;
+	        }
+	    };
+        return timestampMarker;
+    }])
+	/*设置请求header*/
+	 .config(["$httpProvider",function($httpProvider) {
+	 		$httpProvider.interceptors.push('httpInterceptor');
+	 }]);
+
+})();
diff --git a/src/main/websrc/js/app/directive.js b/src/main/websrc/js/app/directive.js
new file mode 100644
index 0000000..bb9a12c
--- /dev/null
+++ b/src/main/websrc/js/app/directive.js
@@ -0,0 +1,2038 @@
+(function(){
+	var tempVersion = new Date().getTime();
+
+	angular.module("app")
+	.directive("flipInfo",flipInfo)
+	.directive("flipInfoDy",flipInfoDy)
+	.directive("selectList",["ToolService",selectList])
+	.directive("selectTList",selectTList)
+	.directive("selectMoreList",selectMoreList)
+	.directive("selectParams",["ToolService",selectParams])
+	.directive("delTip",delTip)
+	.directive("wincrmTip",wincrmTip)
+	.directive("okcrmTip",['ToolService',okcrmTip])
+	.directive("stopEvent",stopEvent)
+	.directive("minChart",["OptionService","$window","$timeout","HttpService","UtilService","ToolService","$rootScope",minChart])
+	.directive("exportButton",["HttpService","UtilService","ToolService","$rootScope",exportButton])
+	.directive("ngEnter",ngEnter)
+	.directive("popTip",popTip)
+	.directive("isLoading",isLoading)
+	.directive("dateRange",["ToolService",dateRange])
+	.directive("selectChannel",["$state","$rootScope",selectChannel])
+	.directive("numberTxt",numberTxt)
+	.directive("integerTxt",integerTxt)
+	.directive("fixHeader",["$timeout",fixHeader])
+	.directive("helpTip",["ToolService","$rootScope",helpTip])
+	.directive("helpWinTip",["ToolService","$rootScope","$filter",helpWinTip])
+	.directive("noData",[noData])
+	.directive("customEvent",["UtilService","ToolService","$timeout","HttpService","$rootScope",customEvent])
+	.directive("fileModel",["$parse",fileModel])
+	.directive("searchGroup",[searchGroup])
+	.directive("bigTable",["$timeout","$compile",bigTable])
+	.directive("dragOrder",[dragOrder]);
+
+	function delTip(){
+	    return{
+	        restrict : "E",
+	        replace : true,
+	        templateUrl : '/template/common/delwin.html?r='+tempVersion,
+	        transclude:true,
+	        scope:{
+	            delfn:"&",
+	            status :"=",
+	            okTitle :"@"
+	        },
+	        link:function($scope,el){
+	        	$scope.btnname = $scope.okTitle ? $scope.okTitle : "确定"
+	            $scope.hideWin = function(){
+	                $scope.status = false;
+	            }
+	        }
+	    }
+	}
+
+	function wincrmTip(){
+	    return{
+	        restrict : "E",
+	        replace : true,
+	        templateUrl : '/template/common/wincrm.html?r='+tempVersion,
+	        transclude:true,
+	        scope:{
+	            okfn:"&",
+	            nofn:"&",
+	            title:"@",
+	            status :"=",
+	            okTitle:"@",
+	            noTitle:"@"
+	        },
+	        link:function($scope,el){
+	        	if(angular.isUndefined($scope.okTitle)){
+	        		$scope.okTitle = "确定";
+	        	}
+	        	if(angular.isUndefined($scope.noTitle)){
+	        		$scope.noTitle = "取消";
+	        	}
+	            $scope.hideWin = function(){
+	                $scope.status = false;
+	                $scope.nofn();
+	            }
+	            $scope.crmWin = function(){
+	            	$scope.status = false;
+	            	$scope.okfn();
+	            }
+	        }
+	    }
+	}
+
+	function okcrmTip(ToolService){
+	    return{
+	        restrict : "E",
+	        replace : true,
+	        templateUrl : '/template/common/okcrm.html?r='+tempVersion,
+	        transclude:true,
+	        scope:{
+	            title:"@",
+	            status :"=",
+	            okfn : "&"
+	        },
+	        link:function($scope,el){
+	        	$scope.$watch("status",function(n){
+	        		if(angular.isDefined(n) && n == true){
+	        			ToolService.showAlp();
+	        		}
+	        	});
+	            $scope.crmWin = function(){
+	            	$scope.status = false;
+	            	ToolService.hideAlp()
+	            	$scope.okfn();
+	            }
+	        }
+	    }
+	}
+
+	function stopEvent(){
+	    return {
+	        restrict: "A",
+	        link: function($scope, el) {
+	            jQuery(el).on("click",function(event){
+	                event.stopPropagation();
+	            });
+	        }
+	    }
+	};
+
+	function selectList(ToolService){
+	    return {
+	        restrict: 'E',
+	        replace: true,
+	        templateUrl: '/template/common/select.html?r='+tempVersion,
+	        scope: {
+	            meauInfo:'=', //列表数据
+	            meauName:"=", //初始name,eg:请选择
+	            meauId:"@", //select的id
+	            meauId2:"=",//动态ID
+	            meauData:"=", //初始选择的id值
+	            meauRefresh:"=", //强制刷新下拉框
+	            keyname:"@", //显示名
+	            keyid:"@",//传递ID
+	            meauNull:"=", //置空
+	            meauRed:"=", //红色框
+	            nosearch:"@", //为true,强制不显示搜索框
+	            operationSel:"=", //当前sel可否操作
+	            iconType:"@", //true箭头白色
+	            meauSpe:"="
+	        },
+	        link: function($scope,$element) {
+	        	// console.log(angular.element($element).getBoundingClientRect().bottom)
+	        	// console.log($(".selList").offset().top,$(window).height(),$element.getBoundingClientRect().bottom)
+	             $scope.selme = false;
+	             $scope.meauId = $scope.meauId || $scope.meauId2;
+	             $scope.clickMeau = function(meau){
+	             	if(!$scope.operSel || (meau[$scope.keyid]=='pie' && $scope.meauSpe)){
+	             		ToolService.showTips("饼状图只适用于有分组的事件分析。");
+	             		return false;
+	             	}
+
+	             	$scope.currentInfo = meau;
+	                $scope.selName = meau[$scope.keyname];
+	                $scope.selId = meau[$scope.keyid];
+	                $scope.meauRed = false;
+	                $scope.$emit($scope.meauId,{info:meau})
+	             }
+	             $scope.$watch("operationSel",function(n){
+	             	if(angular.isUndefined($scope.operationSel)){
+		             	$scope.operSel = true;
+		            }
+		            else{
+		            	$scope.operSel = n;
+		            }
+	             });
+
+	             $scope.showsearch = $scope.nosearch != 'true';
+	             if(angular.isUndefined($scope.keyname)){
+	             	$scope.keyname = "name";
+	             }
+	             if(angular.isUndefined($scope.keyid)){
+	             	$scope.keyid = "id";
+	             }
+	             $scope.$watch("meauData+meauName+meauRefresh+meauInfo",function(){
+	                if($scope.meauInfo && angular.isDefined($scope.meauData) && $scope.meauData!=-1){
+	                    var temp = $scope.meauInfo.filter(function(item){
+	                        return item[$scope.keyid] == $scope.meauData;
+	                    });
+	                    if(temp.length>0){
+	                        $scope.clickMeau(temp[0]);
+	                    }else{
+	                        $scope.selName = $scope.meauName;
+	                        $scope.selId = "";
+	                    }
+	                 }else{
+	                    $scope.selName = $scope.meauName;
+	                    $scope.selId = "";
+	                 }
+	             });
+	             $scope.$watch("meauNull",function(n){
+	             	if(angular.isDefined(n)){
+	             		$scope.selName = $scope.meauName;
+	             		$scope.selId = "";
+	             	}
+	             });
+	        }
+	    }
+	};
+	//有分类间隔线的下拉框
+	function selectTList(){
+	    return {
+	        restrict: 'E',
+	        replace: true,
+	        templateUrl: '/template/common/selectT.html?r='+tempVersion,
+	        scope: {
+	            meauInfo:'=', //列表数据
+	            meauName:"=", //初始name,eg:请选择
+	            meauId:"@", //select的id
+	            meauId2:"=",//动态ID
+	            meauData:"=", //初始选择的id值
+	            meauType:"=",
+	            meauRefresh:"=", //强制刷新下拉框
+	            keyname:"@", //显示名
+	            keyid:"@",//传递ID
+	            meauNull:"=", //置空
+	            meauRed:"=", //红色框
+	            meauTypekey:"@",
+	            meauTypename:"@",
+	            operationSel:"=" //当前sel可否操作
+	        },
+	        link: function($scope,$element) {
+	        	 if(angular.isDefined($scope.meauTypekey)){
+	        	 	$scope.typeKey = eval($scope.meauTypekey);
+	        	 	$scope.typeName = eval($scope.meauTypename);
+	        	 }
+	        	 $scope.$watch("operationSel",function(n){
+	             	if(angular.isUndefined($scope.operationSel)){
+		             	$scope.operSel = true;
+		            }
+		            else{
+		            	$scope.operSel = n;
+		            }
+	             });
+	             $scope.selme = false;
+	             $scope.meauId = $scope.meauId || $scope.meauId2;
+	             $scope.clickMeau = function(meau){
+	             	if(!$scope.operSel){return false;}
+
+	                $scope.selName = meau[$scope.keyname];
+	                $scope.selId = meau[$scope.keyid];
+	                $scope.meauRed = false;
+	                $scope.$emit($scope.meauId,{info:meau})
+	             }
+
+	             if(angular.isUndefined($scope.keyname)){
+	             	$scope.keyname = "name";
+	             }
+	             if(angular.isUndefined($scope.keyid)){
+	             	$scope.keyid = "id";
+	             }
+	             $scope.$watch("meauData+meauName+meauRefresh+meauInfo",function(){
+	                if($scope.meauInfo && angular.isDefined($scope.meauData) && $scope.meauData!=-1){
+	                    var temp = $scope.meauInfo.filter(function(item){
+	                        return item[$scope.keyid] == $scope.meauData && (item.type == $scope.meauType || !$scope.meauType);
+	                    });
+	                    if(temp.length>0){
+	                        $scope.clickMeau(temp[0]);
+	                    }else{
+	                        $scope.selName = $scope.meauName;
+	                    }
+	                 }else{
+	                    $scope.selName = $scope.meauName;
+	                 }
+	             });
+
+	             $scope.haslist = function(type){
+	             	if(!$scope.meauInfo){return false;}
+
+	             	var bol  = false;
+	             	for(var i=0;i<$scope.meauInfo.length;i++){
+	             		if($scope.meauInfo[i].type== type || $scope.meauInfo[i].dimensionType == type){
+	             			bol = true;
+	             			break;
+	             		}
+	             	}
+	             	return bol;
+	             }
+	             $scope.$watch("searchlitxt",function(n){
+	                 if(angular.isUndefined(n) || !n){return false;}
+	                 $scope.virtual = "";
+	                 $scope.nature = "";
+	                 $scope.meauInfo.filter(function(item){
+	                     if(angular.uppercase(item.name).indexOf(angular.uppercase(n))>-1 && item.type=="virtual"){
+	                         $scope.virtual = item.type;
+	                     }
+	                     if(angular.uppercase(item.name).indexOf(angular.uppercase(n))>-1 && item.type=="nature"){
+	                         $scope.nature = item.type;
+	                     }
+	                 });
+	             });
+	        }
+	    }
+	};
+
+	//多选
+	function selectMoreList(){
+	    return {
+	        restrict: 'E',
+	        replace: true,
+	        templateUrl: '/template/common/selectmore.html?r='+tempVersion,
+	        scope: {
+	            meauInfo:'=', //列表数据
+	            meauName:"=", //初始name,eg:请选择
+	            meauId:"@", //select的id
+	            meauData:"=", //初始选择的id值
+	            meauRefresh:"=", //强制刷新下拉框
+	            keyname:"@", //显示名
+	            keyid:"@",//传递ID
+	            meauRed:"="//红色框
+	        },
+	        link: function($scope,$element) {
+	        	 $scope.ischeckall = false;
+	        	 $scope.selme = false;
+
+	        	 if(angular.isUndefined($scope.keyname)){
+	             	$scope.keyname = "name";
+	             }
+	             if(angular.isUndefined($scope.keyid)){
+	             	$scope.keyid = "id";
+	             }
+
+	             $scope.clickMeau = function(meau){
+	             	$scope.meauRed = false;
+	             	var idx = $scope.selIDS.indexOf(meau[$scope.keyid]);
+	             	if(idx>-1){
+	             		$scope.selIDS.splice(idx,1);
+	             		$scope.selNames.splice(idx,1);
+	             		$scope.ischeckall = false;
+	             	}else{
+	             		$scope.selIDS.push(meau[$scope.keyid]);
+	             		$scope.selNames.push(meau[$scope.keyname]);
+	             	}
+	             }
+
+	             $scope.okSelect = function(){
+	             	$scope.$emit($scope.meauId,{info:$scope.selIDS.join(",")});
+	             	$scope.selme = false;
+	             }
+	             $scope.$watch("selme",function(){
+	             	if(!$scope.selme && $scope.keyid=='eventName' && $scope.selIDS){
+	             		$scope.$emit($scope.meauId,{info:$scope.selIDS.join(",")});
+	             	}
+	             });
+	             $scope.$watch("meauData+meauName+meauRefresh+meauInfo",function(){
+	             	$scope.selIDS = [];
+	             	$scope.selNames = [];
+	             	$scope.ischeckall = false;
+	                if($scope.meauInfo && angular.isDefined($scope.meauData) && $scope.meauData!=-1
+	                	&& typeof($scope.meauData)=='string'){
+	                	var arr = $scope.meauData.split(",");
+	                    var temp = $scope.meauInfo.filter(function(item){
+	                        return arr.indexOf(item[$scope.keyid])>-1;
+	                    });
+	                    if(temp.length>0){
+	                    	angular.forEach(temp,function(item){
+	                    		$scope.clickMeau(item);
+	                    	})
+	                    }else{
+	                        $scope.selName = $scope.meauName;
+	                    }
+	                 }else{
+	                    $scope.selName = $scope.meauName;
+	                 }
+	             });
+
+	             $scope.checkAll = function(){
+	             	$scope.ischeckall = !$scope.ischeckall;
+	             	$scope.meauInfo.filter(function(meau){
+	             		var idx = $scope.selIDS.indexOf(meau[$scope.keyid]);
+		             	if(!$scope.ischeckall && idx>-1){
+		             		$scope.selIDS.splice(idx,1);
+		             		$scope.selNames.splice(idx,1);
+		             	}
+
+		             	if($scope.ischeckall && idx==-1){
+		             		$scope.selIDS.push(meau[$scope.keyid]);
+		             		$scope.selNames.push(meau[$scope.keyname]);
+		             	}
+	             	});
+	             }
+	        }
+	    }
+	};
+
+	//多选
+	function selectParams(ToolService){
+	    return {
+	        restrict: 'E',
+	        replace: true,
+	        templateUrl: '/template/common/selectparams.html?r='+tempVersion,
+	        scope: {
+	            meauInfo:'=', //列表数据
+	            meauName:"=", //初始name,eg:请选择
+	            meauId:"@", //select的id
+	            meauRefresh:"="
+	        },
+	        link: function($scope,$element) {
+	        	$scope.selme = false;
+	        	$scope.secondSel = false;
+	        	$scope.showSelWin = function(){
+	        		$scope.selme = true;
+	        		if($scope.selId){
+	        			$scope.secondSel = true;
+	        		}
+	        	}
+	            $scope.clickMeau = function(meau){
+	            	var w = $($element).find(".optionList:eq(0)").width();
+	            	if($scope.selId!=meau.id){
+	            		$scope.secIDS = [];
+	            		$scope.secKeys = [];
+	            	}
+	             	$scope.selId = meau.id;
+	             	$scope.selN = meau.name;
+	             	$scope.evtType = meau.type;
+
+	             	$scope.secondSel = true;
+	             	$scope.secondList = meau.value;
+	             	$scope.secKeyList = meau.key;
+	             	$scope.secondStyle = {left:w+"px"}
+	            }
+	            $scope.clickSecMeau = function(v,midx){
+	            	var idx = $scope.secIDS.indexOf(v);
+	            	if(idx>-1){
+	            		$scope.secIDS.splice(idx,1);
+	            		if($scope.secKeyList){
+	            			$scope.secKeys.splice(idx,1);
+	            		}
+	            	}else{
+	            		$scope.secIDS.push(v);
+	            		if($scope.secKeyList){
+	            			$scope.secKeys.push($scope.secKeyList[midx]);
+	            		}
+	            	}
+	            }
+	            $scope.okSelect = function(){
+	            	var pv = "";
+	            	if($scope.selId && $scope.selId != ""){
+	            		var pas = {};
+
+	            		if($scope.secIDS.length == 0 || $scope.secIDS.length>10){
+	            			ToolService.showTips("请选择10个以内对比属性值");
+	            			return false;
+	            		}
+	            		if($scope.secKeyList){
+	            			pas[$scope.selId] = $scope.secKeys.join(",");
+	            		}
+	            		else{
+	            			pas[$scope.selId] = $scope.secIDS.join(",");
+	            		}
+
+	            		pas.type = $scope.evtType;
+	            		pv = JSON.stringify(pas);
+
+	            		// $scope.selName = $scope.selN + "=" + $scope.secIDS.join(",");
+	            		$scope.selName = $scope.selN;
+	            	}else{
+	            		$scope.selName = $scope.meauName;
+	            	}
+	            	$scope.$emit($scope.meauId,{info:pv,name:$scope.selN});
+
+	            	$scope.selme = false;
+	        		$scope.secondSel = false;
+	            }
+	            $scope.$watch("meauName+meauInfo+meauRefresh",function(){
+	                if($scope.meauInfo){
+	                    $scope.secIDS = [];
+	                    $scope.secondList = [];
+	                    $scope.selId = "";
+	        			$scope.secondSel = false;
+	                }
+	                $scope.selName = $scope.meauName;
+	            });
+
+	            angular.element(document).on("click",function(){
+	            	$scope.$apply(function(){
+	            		$scope.selme=false;
+	            		$scope.secondSel=false;
+	            	});
+	            });
+	        }
+	    }
+	};
+
+	//分页
+	function flipInfo(){
+	    return {
+	        restrict : "E",
+	        replace : true,
+	        templateUrl : '/template/common/flipinfo.html?r='+tempVersion,
+	        scope:{
+	            listInfo:"=", //数据数组
+	            searchTxt:"=",//搜索值
+	            searchName:"@",//匹配字段
+	            listKey:"@", //列表key,用于同一个页面多个翻页区分
+	            searchKey:"=", //匹配字段,scope动态
+	            listRefresh:"=" //排序跳转到第一页
+	        },
+	        link:function($scope,el){
+	            $scope.everyId = "everyId";
+	            $scope.everyList = [
+	                {"id":10,"name":"每页10条"},
+	                {"id":20,"name":"每页20条"},
+	                {"id":30,"name":"每页30条"}
+	            ];
+	            $scope.minNum = $scope.everyInit = $scope.everyList[0].id;
+	            $scope.$on($scope.everyId,function(e,msg){
+	                var num = msg.info.id;
+	                if(num == 'all'){
+	                    $scope.everyNum = $scope.listInfo.length;
+	                }else{
+	                    $scope.everyNum = num;
+	                }
+	            });
+
+	            $scope.page = {};
+	            $scope.$watch("listInfo+everyNum",function(n){
+	                if(angular.isDefined($scope.listInfo)){
+	                    var totalLen = 0;
+	                    if(angular.isDefined($scope.searchTxt) && $scope.searchTxt!=''){
+	                    	totalLen = $scope.filterCurList.length;
+	                    }
+	                    else{
+	                    	totalLen = $scope.listInfo.length;
+	                    }
+	                    $scope.refreshInfos(totalLen);
+	                }
+	            });
+
+	            //模糊搜索的时候,重新记录翻页数据
+	            $scope.$watch("searchTxt",function(n){
+	                if(angular.isDefined(n) && $scope.listInfo){
+	                	$scope.searchN = $scope.searchName || $scope.searchKey;
+			            if(angular.isDefined($scope.searchN)){
+			            	$scope.searchNames = $scope.searchN.split(",");
+			            }
+	                    var infos = $scope.listInfo.filter(function(item){
+	                    	var has = false;
+	                    	for(var i=$scope.searchNames.length-1;i>=0;i--){
+	                    		if(item[$scope.searchNames[i]] && angular.uppercase(String(item[$scope.searchNames[i]])).indexOf(angular.uppercase(n))>-1){
+	                    			has = true;
+	                    			break;
+	                    		}
+	                    	}
+	                    	return has;
+	                    });
+	                    $scope.filterCurList = infos;
+	                    $scope.refreshInfos(infos.length);
+	                };
+	            });
+
+	            $scope.refreshInfos = function(totalLen){
+	                var emitnum = $scope.everyNum ? $scope.everyNum :  $scope.everyInit;
+
+	                $scope.page.totals = totalLen; //总条数
+	                $scope.page.totalpages = Math.ceil($scope.page.totals/emitnum); //总页数
+	                $scope.page.curpage = 1;//当前页
+
+	                $scope.sendData();
+	            }
+
+	            $scope.goto = function(flag,p){
+	                switch(flag){
+	                    case 0: //跳转
+	                        $scope.page.curpage = p;
+	                        break;
+	                    case 2: //上一页
+	                        if($scope.page.curpage > 1){
+	                            $scope.page.curpage --;
+	                        }
+	                        break;
+	                    case 3://下一页
+	                        if($scope.page.curpage < $scope.page.totalpages){
+	                            $scope.page.curpage ++;
+	                        }
+	                        break;
+	                    case 4: //末页
+	                        $scope.page.curpage = $scope.page.totalpages;
+	                        break;
+	                    case 5://跳转
+	                    	if($scope.gonum!='' && angular.isNumber($scope.gonum) && $scope.gonum <= $scope.page.totalpages){
+	                    		$scope.page.curpage = $scope.gonum;
+	                    	}
+	                    	else{
+	                    		$scope.gonum = '';
+	                    	}
+	                        break;
+	                    default:
+	                        break;
+	                }
+	                $scope.sendData();
+	            }
+
+	            $scope.$watch("page.curpage",function(n){
+	            	if(angular.isDefined(n)){
+	            		$scope.gonum = n;
+	            	}
+	            });
+	            $scope.$watch("listRefresh",function(n){
+	            	if(angular.isDefined(n)){
+	            		$scope.goto(0,1);
+	            	}
+	            });
+
+	            $scope.sendData = function(){
+	                var start = ($scope.page.curpage -1) * $scope.everyNum - 1;
+	                var end = $scope.page.curpage * $scope.everyNum;
+
+	                $scope.$emit("flipinfo",{start:start,end:end,listkey:$scope.listKey,pagen:$scope.everyNum});
+	            }
+	        }
+	    }
+	}
+
+	//动态分页
+	function flipInfoDy(){
+	    return {
+	        restrict : "E",
+	        replace : true,
+	        templateUrl : '/template/common/flipinfody.html?r='+tempVersion,
+	        scope:{
+	            totalNum:"=", //总条数
+	            listKey:"@", //列表key,用于同一个页面多个翻页区分
+	            listRefresh:"=" //排序跳转到第一页
+	        },
+	        link:function($scope,el){
+	            $scope.everyId = "everyId";
+	            $scope.everyList = [
+	                {"id":20,"name":"每页20条"},
+	                {"id":50,"name":"每页50条"},
+	                {"id":100,"name":"每页100条"}
+	            ];
+	            $scope.minNum = $scope.everyInit = $scope.everyList[0].id;
+	            $scope.$on($scope.everyId,function(e,msg){
+	                var num = msg.info.id;
+	                if(num == 'all'){
+	                    $scope.everyNum = $scope.totalNum;
+	                }else{
+	                    $scope.everyNum = num;
+	                }
+	            });
+
+	            $scope.page = {};
+	            $scope.$watch("totalNum+everyNum+listRefresh",function(n){
+	                if(angular.isDefined($scope.totalNum)){
+	                    $scope.refreshInfos($scope.totalNum-1);
+	                }
+	            });
+
+	            $scope.refreshInfos = function(totalLen){
+	                var emitnum = $scope.everyNum ? $scope.everyNum :  $scope.everyInit;
+	                $scope.page.totals = totalLen; //总条数
+	                $scope.page.totalpages = Math.ceil($scope.page.totals/emitnum); //总页数
+	                $scope.page.curpage = 1;//当前页
+
+	                $scope.sendData();
+	            }
+
+	            $scope.goto = function(flag,p){
+	            	var dis = false;
+	                switch(flag){
+	                    case 0: //跳转
+	                    	if($scope.page.curpage == p){
+	                    		dis = true;
+	                    	}
+	                        $scope.page.curpage = p;
+	                        break;
+	                    case 2: //上一页
+	                    	if($scope.page.curpage==1){
+	                    		dis = true;
+	                    	}
+	                        if($scope.page.curpage > 1){
+	                            $scope.page.curpage --;
+	                        }
+	                        break;
+	                    case 3://下一页
+	                    	if($scope.page.curpage == $scope.page.totalpages || $scope.page.totalpages<=1){
+	                    		dis = true;
+	                    	}
+	                        if($scope.page.curpage < $scope.page.totalpages){
+	                            $scope.page.curpage ++;
+	                        }
+	                        break;
+	                    case 4: //末页
+	                    	if($scope.page.curpage == $scope.page.totalpages){
+	                    		dis = true;
+	                    	}
+	                        $scope.page.curpage = $scope.page.totalpages;
+	                        break;
+	                    case 5://跳转
+	                    	if($scope.gonum!='' && angular.isNumber($scope.gonum) && $scope.gonum <= $scope.page.totalpages){
+	                    		if($scope.page.curpage == $scope.gonum){
+	                    			dis = true;
+	                    		}
+	                    		$scope.page.curpage = $scope.gonum;
+	                    	}
+	                    	else{
+	                    		$scope.gonum = '';
+	                    	}
+	                        break;
+	                    default:
+	                        break;
+	                }
+	                if(!dis){
+	                	$scope.sendData();
+	                }
+	            }
+
+	            $scope.$watch("page.curpage",function(n){
+	            	if(angular.isDefined(n)){
+	            		$scope.gonum = n;
+	            	}
+	            });
+
+	            $scope.sendData = function(){
+	                $scope.$emit("flipinfo",{current:$scope.page.curpage,pagenum:$scope.everyNum,listkey:$scope.listKey});
+	            }
+	        }
+	    }
+	}
+
+ 	var exportTips = "导出成功,请到数据导出-下载报表处进行下载",
+ 		expTimeTips = "请1分钟后再点",expLimitTime = 1000 * 60;
+ 	function minChart(OptionService,$window,$timeout,HttpService,UtilService,ToolService,$rootScope){
+	    return{
+	        restrict : "E",
+	        replace : true,
+	        templateUrl : '/template/common/chart.html?r='+tempVersion,
+	        scope:{
+	            chartTitle:"@", //图描述标题
+	            chartData :"=", //图数据
+	            chartType:"@", //图类型
+	            chartTp:"=",
+	            chartConfig:"=",
+	            chartLoading:"=",
+	            chartResize:"@", //yes需要重新resize
+	            chartCondition:"=",
+	            chartBack:"="//回传显示数值
+	        },
+	        link:function($scope,el){
+	            var chartInstance = echarts.init($(el).find(".chartInfo").get(0));
+
+	            $scope.$watch("chartLoading",function(){
+	                if($scope.chartLoading == true){
+	                    // chartInstance.showLoading();
+	                }
+	            });
+	            var predate = 0;
+	            $scope.$watch("chartData",function(){
+	                if(angular.isUndefined($scope.chartData)){
+	                    return false;
+	                }
+	                predate = 0;
+	                $scope.chartType = $scope.chartTp || $scope.chartType;
+	                var options = null;
+	                if($scope.chartType == 'funnel'){
+	                	var bw = $(el).find(".chartInfo").width();
+	                	$scope.chartConfig.barwidth = bw;
+	                }
+
+	                // if(angular.isDefined($scope.chartTp)){
+	                	chartInstance.clear();
+	                // }
+	                if($scope.chartType == 'pie'){
+	                	options = OptionService.getPieOption($scope.chartData,$scope.chartType,$scope.chartConfig || {});
+	                }
+	                else if($scope.chartType == 'map'){
+	                	options = OptionService.getMapOption($scope.chartData,$scope.chartType,$scope.chartConfig || {});
+	                }
+	                else{
+	                	options = OptionService.getOption($scope.chartData,$scope.chartType,$scope.chartConfig || {});
+	                }
+
+	                if($scope.chartType == 'funnel' && $scope.chartConfig.barwidth==0){
+
+	                }else{
+	                	chartInstance.setOption(options);
+	                	var bw = $(el).find(".chartInfo").width();
+	                	if($scope.chartResize && $scope.chartResize=='yes'){
+	                		chartInstance.resize();
+	                	}
+	                	else if(bw == 0){
+	                		$timeout(function(){
+				                chartInstance.resize();
+			                },500);
+	                	}
+	                }
+
+	                $timeout(function(){
+	                	if($scope.chartType == 'funnel' && $scope.chartConfig.barwidth == 0){
+                			var bw = $(el).find(".chartInfo").width();
+	                		$scope.chartConfig.barwidth = bw;
+	                		options = OptionService.getOption($scope.chartData,$scope.chartType,$scope.chartConfig || {});
+               				chartInstance.setOption(options);
+		                }
+		                chartInstance.resize();
+	                },200);
+	                chartInstance.hideLoading();
+
+	                angular.element($window).bind('resize', function(){
+	                    chartInstance.resize();
+	                });
+	                //菜单伸缩
+	                $scope.$on("conentresize",function(){
+	                	$timeout(function(){
+			                chartInstance.resize();
+		                },50);
+		        	});
+	            },true);
+
+	            $scope.isChart = true;
+	            $scope.changeChart = function(bol){
+	            	$scope.isChart = bol;
+	            	if(bol){
+	            		$timeout(function(){
+	            			chartInstance.resize();
+	            		},100);
+	            	}
+	            }
+	            //有导出权限
+	            $rootScope.$watch("limitInfo",function(n){
+	            	if(angular.isDefined(n)){
+	            		$scope.iscanExport = $rootScope.showMenu('export') && $rootScope.limitInfo.platformExport==true;
+	            	}
+	            });
+
+	            $scope.exportData = function(){
+	            	var nowdate = new Date().getTime();
+	            	if(predate>0){
+	            		if(nowdate - predate <= expLimitTime){
+	            			predate = nowdate;
+	            			ToolService.showTips(expTimeTips);
+	            			return false;
+	            		}
+	            	}
+	            	predate = nowdate;
+	            	ToolService.showLoading();
+	            	var expPM = HttpService.postInfo("mng/export/report/"+$scope.chartCondition.app+"/generatefile",$scope.chartCondition);
+	            	expPM.then(function(data){
+	            		ToolService.hideLoading();
+	            		ToolService.showTips(exportTips);
+	            	});
+	            }
+	        }
+	    }
+	}
+	//列表导出
+	function exportButton(HttpService,UtilService,ToolService,$rootScope){
+		return {
+            restrict: "E",
+            transclude: true,
+            replace:true,
+             templateUrl : '/template/common/export.html?r='+tempVersion,
+            scope:{
+                exportCondition:"="
+            },
+            link: function($scope, el) {
+            	$scope.style1 = {"float":"right","margin-top":"11px","margin-right":"10px"};
+            	var predate = 0;
+            	$scope.$watch("exportCondition",function(){
+            		predate = 0;
+            	});
+                $scope.exportData = function(){
+                	var nowdate = new Date().getTime();
+	            	if(predate>0){
+	            		if(nowdate - predate <= expLimitTime){
+	            			predate = nowdate;
+	            			ToolService.showTips(expTimeTips);
+	            			return false;
+	            		}
+	            	}
+	            	predate = nowdate;
+                	ToolService.showLoading();
+		            var expPM = HttpService.postInfo("mng/export/report/"+$scope.exportCondition.app+"/generatefile",$scope.exportCondition);
+		            expPM.then(function(data){
+		            	ToolService.hideLoading();
+		                ToolService.showTips(exportTips);
+		            });
+		        }
+
+		         //有导出权限
+	            $rootScope.$watch("limitInfo",function(n){
+	            	if(angular.isDefined(n)){
+	            		$scope.iscanExport = $rootScope.showMenu('export') && $rootScope.limitInfo.platformExport==true;
+	            	}
+	            });
+            }
+        }
+	}
+
+	function ngEnter(){
+		return function (scope, element, attrs) {
+	        element.bind("keydown keypress", function (event) {
+	            if(event.which === 13) {
+	                scope.$apply(function (){
+	                    scope.$eval(attrs.ngEnter);
+	                });
+
+	                event.preventDefault();
+	            }
+	        });
+	    };
+	}
+
+	function selectChannel($state,$rootScope){
+		 return{
+	        restrict : "E",
+	        replace : true,
+	        templateUrl : '/template/common/channel.html?r='+tempVersion,
+	        scope:{
+	            channelList:"=", //渠道列表
+	            appOs:"=",//游戏操作类型
+	            type:"="//是否为H5类型
+	        },
+	        link:function($scope,el){
+	        	$scope.isSuper = $rootScope.isSuper;
+	        	if($scope.type){
+	        		$scope.channType = null;
+	        	}else{
+	        		$scope.channType = "ry_coop";
+	        	}
+	        	$scope.category = 'ADVERTISING';
+		        $scope.letter = "";
+
+		        $scope.popchannellist = false;
+		        angular.element(el).parent().bind("click",function(){
+		        	$scope.$broadcast("popchannel",{});
+		        	$scope.$apply();
+		        });
+
+		        $scope.$on("popchannel",function(){
+		        	$scope.popchannellist = true;
+		        });
+
+	        	$scope.$watch("appOs",function(n){
+	        		if(angular.isDefined(n)){
+	        			$scope.appplattype = n;
+	        		}
+	        	});
+
+	        	$scope.changeType = function(type){
+	        		$scope.channType = type;
+	        		$scope.category = 'ADVERTISING';
+	        		$scope.letter = "";
+	        	};
+
+	        	$scope.$watch("channType+appplattype+channelList+category",function(n){
+	        		if(angular.isDefined($scope.channelList) && angular.isDefined($scope.appplattype) && angular.isDefined($scope.category)){
+	        			if($scope.appplattype==2){
+	        				if($scope.channType!='ry_bd'){
+	        					$scope.curChannelList = $scope.channelList.filter(function(channel){
+			        				return channel.type == $scope.channType && channel.osAndroid && channel.category == $scope.category;
+			        			});
+	        				}
+	        				else{
+	        					$scope.curChannelList = $scope.channelList.filter(function(channel){
+			        				return channel.type == $scope.channType && channel.osAndroid;
+			        			});
+	        				}
+
+	        			}
+	        			else if($scope.appplattype==1){
+	        				$scope.curChannelList = $scope.channelList.filter(function(channel){
+		        				return channel.type == $scope.channType && channel.osIos && channel.category == 'ADVERTISING';
+		        			});
+	        			}else{
+	        				$scope.curChannelList = $scope.channelList.filter(function(channel){
+		        				return channel.type == $scope.channType && channel.osWeb;
+		        			});
+	        			}
+
+	        		}
+	        	});
+
+
+	        	$scope.clickChannel = function(channel){
+	        		$scope.$emit("curchannel",{info:channel});
+	        		$scope.curchid = channel.id;
+	        		$scope.popchannellist = false;
+	        	}
+
+	        	$scope.goChannel = function(){
+	        		$state.go("collect.channel");
+	        	}
+	        }
+	    };
+	}
+
+	function popTip(){
+		return {
+            restrict: "E",
+            transclude: true,
+            replace:true,
+            template:'<div class="opIcon p" ng-mouseleave="showtip=false" style="height:30px;"><span ng-transclude  ng-click="clickTip()"></span><div class="poptips" ng-show="showtip"><div class="poparrow"></div>{{tipinfo}}</div></div>',
+            scope:{
+                tipinfo:"="
+            },
+            link: function($scope, el) {
+                $scope.showtip = false;
+
+                $scope.clickTip = function(){
+                    $scope.showtip = !$scope.showtip;
+                }
+            }
+        }
+	}
+
+	function isLoading(){
+		return {
+            restrict: "E",
+            replace:true,
+            templateUrl : '/template/common/loading.html?r='+tempVersion,
+            scope:{
+                doLoading:"="
+            },
+            link: function($scope, el) {
+            	$scope.myLoading = false;
+                $scope.$watch("doLoading",function(n){
+                	if(angular.isDefined(n)){
+                		$scope.myLoading = n;
+                	}
+                });
+            }
+        }
+	}
+
+	function noData(){
+		return {
+            restrict: "E",
+            replace:true,
+            templateUrl : '/template/common/nodata.html?r='+tempVersion,
+            scope:{
+
+            },
+            link: function($scope, el) {
+
+            }
+        }
+	}
+
+	function dateRange(ToolService){
+		return {
+            restrict: "E",
+            replace:true,
+            templateUrl : '/template/common/daterange.html?r='+tempVersion,
+            scope:{
+                nodrange:"@",
+                noToday:"@",
+                datekey:"@",
+                maxRange:"@"
+            },
+            link: function($scope, el) {
+            	if(angular.isUndefined($scope.nodrange)){
+        			$scope.nodrange = false;
+        		}
+
+        		if(ToolService.isDemoUser()){
+        			$scope.nodrange = true;
+        		}
+
+        		if(angular.isUndefined($scope.noToday)){
+					$scope.noToday = true;
+        		}
+        		else{
+        			$scope.noToday = $scope.noToday!='false' && $scope.noToday!=false;
+        		}
+
+            	if(angular.isUndefined($scope.datekey)){
+        			$scope.datekey = "curdate";
+        		}
+
+
+        		var today = ToolService.getToday(),yesDay = ToolService.getYesDay();
+            	$scope.changeDate = function(flag){
+		            switch (flag){
+		                case 'today':
+		                    $scope.subfix = "hour";
+		                    $scope.mydate = today;
+		                    break;
+		                case 'yesday':
+		                    $scope.subfix = "hour";
+		                    $scope.mydate = yesDay;
+		                    break;
+		                case 'd7':
+		                    $scope.subfix = "ds";
+		                    $scope.mydate = ToolService.getLastDays(-7,0);
+		                    break;
+		                case 'd14':
+		                    $scope.subfix = "ds";
+		                    $scope.mydate = ToolService.getLastDays(-14,0);
+		                    break;
+		                case 'd30':
+		                    $scope.subfix = "ds";
+		                    $scope.mydate = ToolService.getLastDays(-30,0);
+		                    break;
+		                default:
+		                    break;
+		            }
+		            $scope.timeflag = flag;
+		        }
+
+		        $scope.maxDay = 0;
+		        if($scope.noToday==true){
+		        	$scope.changeDate('yesday');
+		        	$scope.maxDay = -1;
+		        }else{
+		        	$scope.changeDate('today');
+		        }
+		        $scope.myrangeday = $scope.maxRange;
+
+		        $scope.$on("dateCustos",function(e,msg){
+		        	if(msg.startDate == msg.endDate && msg.startDate == today.startDate){
+		        		$scope.timeflag = "today";
+		        		$scope.subfix = "hour";
+		        	}
+		        	else if(msg.startDate == msg.endDate && msg.startDate == yesDay.startDate){
+		        		$scope.timeflag = "yesday";
+		        		$scope.subfix = "hour";
+		        	}
+		        	else{
+		        		$scope.timeflag = msg.dateflag;
+		        		$scope.subfix = "ds";
+		        	}
+		            $scope.mydate = msg;
+		        });
+
+		        $scope.$watch("mydate",function(n){
+		        	if(angular.isDefined(n)){
+		        		$scope.datestr = $scope.mydate.startDate + "至" + $scope.mydate.endDate;
+
+		        		$scope.$emit($scope.datekey,{date:$scope.mydate,subfix:$scope.subfix,timeflag:$scope.timeflag})
+		        	}
+		        },true);
+            }
+        }
+	}
+
+	//输入框只能输入数字和小数点
+	function numberTxt(){
+		return {
+            restrict: "A",
+            link: function($scope, el) {
+            	el.bind("keydown",function(event){
+            		event = window.event || event;
+            		if((event.keyCode>=48 && event.keyCode<=57) || (event.keyCode>=96 && event.keyCode<=105) || event.keyCode==8 || event.keyCode==190){
+
+            		}else{
+            			event.preventDefault();
+            		}
+            	})
+            	.bind("input propertychange",function(){
+            		// var v = $(el).val().replace(/[^\x00-\x80A-Za-z]/gi,"");
+            		// $(el).val(v);
+            	});
+            }
+        }
+	}
+	//输入框只能输入数字
+	function integerTxt(){
+		return {
+            restrict: "A",
+            link: function($scope, el) {
+            	el.bind("keydown",function(event){
+            		event = window.event || event;
+            		if((event.keyCode>=48 && event.keyCode<=57) || (event.keyCode>=96 && event.keyCode<=105) || event.keyCode==8){
+
+            		}else{
+            			event.preventDefault();
+            		}
+            	})
+            	.bind("input propertychange",function(){
+            		var v = $(el).val().replace(/\D/g,"");
+            		$(el).val(v);
+            	});
+            }
+        }
+	}
+
+	function helpTip(ToolService,$rootScope){
+		return {
+            restrict: "E",
+            replace:true,
+            scope:{
+            	name:"@",
+            	dname:"=",
+            	dn2:"=",
+            	hidx:"@",
+            	red:"="
+            },
+            templateUrl : '/template/common/helptip.html?r='+tempVersion,
+            link: function($scope, el) {
+            	$scope.showtip=false;
+            	var hidx = $scope.hidx ? $scope.hidx : 2;
+            	$scope.spanStyle = {"z-index":hidx};
+
+            	var now = $(el).find(".helpTipWrap"),zIdx = Number($(el).parent().css("z-index"));
+            	now.hide();
+            	$scope.showTip = function(){
+            		zIdx = Number($(el).parent().css("z-index"));
+            		if(angular.isNumber(zIdx)){
+        				$(el).parent().css("z-index",zIdx+1);
+        			}
+        			$(".helpTipWrap").not(now).parent().parent().css("z-index",zIdx);
+            		$(".helpTipWrap").not(now).hide().animate({opacity:0});
+            		now.show().animate({opacity:1},100,'linear');
+            	}
+            	angular.element(document).on("click",function(){
+            		if(angular.isNumber(zIdx)){
+	            		now.parent().parent().css("z-index",zIdx);
+	            	}
+	            	now.animate({opacity:0}).hide();
+	            });
+
+	            $scope.$watch('name+dname+dn2',function(n){
+	            	var name = $scope.name ? $scope.name : $scope.dname;
+	            	if(angular.isDefined($scope.dn2)){
+	            		name += $scope.dn2;
+	            	}
+
+	            	if(angular.isDefined(name)){
+	            		$scope.tipname = name;
+	            		$scope.tipcontent = ToolService.getMenuTip($scope.tipname);
+	            	}
+	            });
+
+	            $rootScope.$watch("currentPageTips",function(){
+	            	$scope.tipcontent = ToolService.getMenuTip($scope.tipname);
+	            });
+            }
+        }
+	}
+
+	function helpWinTip(ToolService,$rootScope,$filter){
+		return {
+            restrict: "E",
+            scope:{
+            	name:"@",
+            	dname:"=",
+            	zIndex:"=",
+            	titlev:"@",
+            	helpw:"@"
+            },
+            replace:true,
+            template : '<span ng-click="showTip()" title="{{titlev}}" stop-event></span>',
+            link: function($scope, el) {
+            	angular.element(document).on("click",function(){
+            		 $("#winTC").hide();
+	            });
+	            $scope.showTip = function(){
+	            	var name = $scope.name ? $scope.name : $scope.dname;
+
+	            	var offset = $(el).offset(),
+	            		left = offset.left,
+	            		top = offset.top
+	            		h = $(el).innerHeight(),
+	            		w = $(el).innerWidth(),
+	            		winWidth = $(window).width();
+
+	            	top = Math.ceil(top + h);
+
+	            	var cssStyle = {top:top,'display':'block',opacity:1},winObj = $("#winTC");
+	            	if($scope.zIndex){
+	            		winObj.css("z-index",$scope.zIndex);
+	            	}
+	            	if($scope.helpw){
+	            		winObj.css("width",$scope.helpw+"px");
+	            	}
+	            	else{
+	            		winObj.css("width","200px");
+	            	}
+	            	if($(el).hasClass("rightTip")){
+	            		winObj.addClass("rightPosition");
+	            		left =  Math.ceil(left - winObj.innerWidth() + w);
+	            	}
+	            	else{
+	            		winObj.removeClass("rightPosition");
+	            	}
+	            	if(winWidth-left<200){
+	            		winObj.addClass("rightPosition");
+	            		left =  Math.ceil(left - winObj.innerWidth() + w);
+	            	}
+	            	cssStyle.left = left;
+	            	winObj.html(ToolService.getMenuTip(name)).css(cssStyle);
+	            }
+            }
+        }
+	}
+
+	/*固定首行or首列*/
+   function fixHeader($timeout) {
+        return {
+            restrict: "A",
+            scope:{
+                titleName:"=", //动态表头列表
+                fixFirtd:"@", //固定首列
+                fixList:"=" //列表数据
+            },
+            link: function($scope, el) {
+
+                var obj = $(el),p = obj.parent(),fixTd = 0,firTds = null,zidx = 1;
+                //固定首列
+                if(angular.isDefined($scope.fixFirtd)){
+                    fixTd = Number($scope.fixFirtd);
+                    zidx = 2;
+                }
+                //固定首行
+                $scope.$watch("titleName",function(){
+                    $timeout(function() {
+                        obj.find("thead th").css({"position":"relative","z-index":zidx});
+                        p.scroll(function(){
+                            var t = $(this).scrollTop();
+                            if(t>5){t--;}
+                            obj.find("thead th").css({"top":t+"px"});
+                        });
+
+                    });
+                });
+
+                //固定首列
+                if(fixTd>0){
+                    $scope.$watch("fixList",function(){
+                        $timeout(function() {
+                            firTds = obj.find("tr td:nth-child("+fixTd+")");
+                            firTds.css({"position":"relative","z-index":1});
+                            p.scroll(function(){
+                                var l = $(this).scrollLeft();
+                                if(l > 5){l-=2;}
+                                firTds.css({"left":l+"px"});
+                            });
+                        });
+                    });
+                }
+            }
+        }
+    };
+
+    //看单事件
+    function customEvent(UtilService,ToolService,$timeout,HttpService,$rootScope){
+    	return {
+            restrict: "E",
+            replace:true,
+            templateUrl : '/template/common/custom.html?r='+tempVersion,
+            scope:{
+                type:"=", //报表类型,1事件分析,2留存分析,3漏斗分析
+                eventList:"=",//事件列表
+                oldInfo:"="//初始化事件详情
+            },
+            link: function($scope, el) {
+            	var rmd = new Date().getTime();
+            	$scope.$watch("oldInfo",function(e){
+            		if(angular.isDefined($scope.oldInfo)){
+            			if($scope.type == 'eventstats'){
+            				$scope.changeEvent(null,$scope.oldInfo);
+            			}
+            			else{
+            				$scope.eventInfo = [],evts = [],evtvals = [];
+
+		                    $scope.oldInfo.filter(function(item){
+		                        var temp = {event:item.event,param:[]};
+		                        var pppm = UtilService.cloneJSON(item.params);
+		                        pppm.filter(function(pm){
+		                            temp.param.push(pm.attr);
+		                        });
+		                        evts.push(item.event);
+		                        evtvals.push(temp);
+		                    });
+		                    ToolService.showLoading();
+		                    var evtprofilePM = HttpService.getInfo($rootScope.appid+"/event/find/param?names="+evts.join(",")+"&params="+JSON.stringify(evtvals));
+		                    evtprofilePM.then(function(pros){
+		                        pros.filter(function(evt){
+		                            for(var i=0;i<$scope.eventList.length;i++){
+		                                if(evt.eventName == $scope.eventList[i].eventName){
+		                                    $scope.eventList[i].profiles = evt.profiles;
+		                                    break;
+		                                }
+		                            }
+		                        });
+		                        $scope.oldInfo.filter(function(e){
+		                            e.oldparams = UtilService.cloneJSON(e.params);
+		                            delete e.params;
+		                            $scope.addEvent(e);
+		                        });
+		                        ToolService.hideLoading();
+		                    });
+            			}
+            		}
+            	});
+
+            	$scope.$on("eventId",function(e,msg){
+		            $scope.changeEvent(msg.info);
+		        });
+            	$scope.initEvent = function(){
+		            $scope.eventinitname = "全部事件";
+		            $scope.eventInit = 0 - rmd;
+
+		            $scope.event = {};
+		            $scope.propertyList = [];
+		            $scope.sumtypeList = [];
+		        }
+            	$scope.changeEvent = function(event,obj){
+
+		            if(obj){ //编辑查找
+		            	$scope.initEvent();
+		                $scope.eventinitname = obj.event;
+		                $scope.properinitname = obj.viewField;
+
+		                var nowEvents = $scope.eventList.filter(function(item){
+		                    return item.eventName == obj.event;
+		                });
+		                if(nowEvents.length>0){
+		                	event = nowEvents[0];
+			                $scope.eventinitname = event.eventNameAlias;
+			                $scope.evnullevent = false;
+		                }
+		                else{
+		                	$scope.evnullevent = true;
+		                }
+		            }
+		           	$scope.event = {
+		                id:"evt_"+rmd,
+		                params:[],
+		                paramsList:[],
+		                relation:"and"
+		            }
+
+		            if(!UtilService.isNullStr(event)){
+		            	$scope.eventId = event.eventName;
+		            	$scope.eventstatsEvtName = event.eventNameAlias;
+
+		            	var setattr = function(){
+		            		$scope.propertyList = event.firstLevelAttr;
+			            	$scope.sumtypeList = event.secondLevelAttr;
+			            	$scope.event.paramsList = event.profiles;
+		            	}
+		            	if(event.secondLevelAttr){
+		            		setattr();
+		            	}
+		            	else{
+		            		var evtvals = [],temp = {event:$scope.eventId,param:[]};
+			                if(obj){
+			                    obj.params.filter(function(pitem){
+			                        temp.param.push(pitem.attr);
+			                    });
+			                    evtvals.push(temp);
+			                }
+
+			                ToolService.showLoading();
+			                var evtprofilePM = HttpService.getInfo($rootScope.appid+"/event/find/param?names="+$scope.eventId+"&params="+JSON.stringify(evtvals));
+			                evtprofilePM.then(function(pros){
+			                    pros.filter(function(evt){
+			                        for(var i=0;i<$scope.eventList.length;i++){
+			                            if(evt.eventName == $scope.eventList[i].eventName){
+			                                $scope.eventList[i].profiles = evt.profiles;
+			                                $scope.eventList[i].firstLevelAttr = evt.firstLevelAttr;
+			                                $scope.eventList[i].secondLevelAttr = evt.secondLevelAttr;
+			                                break;
+			                            }
+			                        }
+			                    });
+			                    setattr();
+			                    ToolService.hideLoading();
+			                });
+		            	}
+		            }
+
+		            if(obj){
+		            	$scope.event.relation = obj.relation;
+		                $timeout(function(){
+		                    $scope.propertyInit = obj.viewField;
+		                    $scope.prorefresh = ++rmd;
+
+		                    $scope.event.secondval = obj.fieldOperate;
+		                    if(obj.fieldOperate!=''){
+			                	$scope.event.second = true;
+			                	$scope.suminitname = obj.fieldOperate;
+			                }
+		                    obj.params.filter(function(pitem){
+		                    	pitem.attrMatch = false;
+		                        $scope.addEventParams($scope.event,pitem);
+		                    });
+		                });
+		            }
+		            else{
+		                $scope.propertyInit = $scope.propertyList[0].attr;
+		                $scope.prorefresh = ++rmd;
+		            }
+		        }
+		        //属性
+		        $scope.$on("propertyId",function(e,msg){
+		            $scope.event.proId = msg.info.attr;
+		            $scope.event.sumId = "";
+		            if(msg.info.type!='default'){
+		                $scope.event.second = true;
+		                if($scope.event.secondval){
+		                    $scope.sumtypeInit = $scope.event.secondval;
+		                    delete $scope.event.secondval;
+		                }
+		                else{
+		                    $scope.sumtypeInit = $scope.sumtypeList[0].attr;
+		                }
+		            }
+		            else{
+		                $scope.sumtypeInit = "";
+		                $scope.event.second = false;
+		            }
+		        });
+		        //属性聚合形式
+		        $scope.$on("sumtypeId",function(e,msg){
+		            $scope.event.sumId = msg.info.attr;
+		        });
+
+            	$scope.getEventNum = function(){
+		            if(!$scope.eventInfo){return 20;}
+
+		            var es = $scope.eventInfo.filter(function(item){
+		                return item.show!=false;
+		            });
+		            return es.length;
+		        }
+            	$scope.setEventSteps = function(){
+		            if(!$scope.eventInfo){return 20;}
+
+		            var idx = -1;
+		            var len = $scope.eventInfo.length;
+		            $scope.eventInfo.filter(function(item,i){
+		                if(item.show!=false){
+		                    idx ++;
+		                    item.steps = ['一','二','三','四','五','六','七','八','九','十'][idx];
+		                    item.style = {'z-index':len-i};
+		                }
+		            });
+		        }
+		        $scope.addEvent = function(obj){
+
+		            rmd ++;
+		            var temp = {id:"evt_"+rmd,eventid:"event_"+rmd,relation:"and"};
+
+		            if(obj){
+		                for(var k in obj){
+		                    temp[k] = obj[k];
+		                }
+		                temp.eventinit = obj.event;
+		                temp.eventinitname = obj.event;
+		                temp.params = [];
+
+		                var evts = $scope.eventList.filter(function(item){
+		                	return item.eventName == obj.event;
+		                });
+		                if(evts.length == 0){
+		                	temp.nullevent = true;
+		                	if(temp.oldparams){
+		                        temp.oldparams.filter(function(pm){
+		                            $scope.addEventParams(temp,pm);
+		                        });
+		                        delete temp.oldparams;
+		                    }
+		                }
+		            }
+		            (function(temp){
+		                $scope.$on(temp.eventid,function(e,msg){
+		                    temp.params = [];
+		                    temp.event = msg.info.eventName;
+		                    temp.evtname = msg.info.eventNameAlias;
+		                    temp.nullevent = false;
+
+		                    var setparams = function(){
+		                        temp.paramsList = msg.info.profiles;
+		                        if(temp.oldparams){
+		                            temp.oldparams.filter(function(item){
+		                                $scope.addEventParams(temp,item);
+		                            });
+		                            delete temp.oldparams;
+		                        }
+		                    }
+		                    if(angular.isArray(msg.info.profiles)){
+		                        setparams(msg.info.profiles);
+		                    }
+		                    else{
+		                        var proPM = HttpService.getInfo($rootScope.appid+"/event/find/param?names="+temp.event);
+		                        proPM.then(function(data){
+		                            msg.info.profiles = data[0].profiles;
+		                            setparams();
+		                        });
+		                    }
+
+		                });
+		            })(temp);
+
+		            $scope.eventInfo.push(temp);
+		            $scope.setEventSteps();
+		        }
+		        $scope.removeEvent = function(event){
+		            if($scope.getEventNum()<=2 && $scope.type == 'funnel'){
+		                ToolService.showTips("漏斗步骤不能少于2步");
+		                return false;
+		            }
+
+		            for(var i=0;i<$scope.eventInfo.length;i++){
+		                if($scope.eventInfo[i].id == event.id){
+		                    $scope.eventInfo[i].show = false;
+		                    break;
+		                }
+		            }
+		            $scope.setEventSteps();
+		        }
+		        $scope.changeRel = function(event){
+		            event.relation = event.relation == 'and' ? "or" : 'and';
+		        }
+		        $scope.getEventParamsNum = function(event){
+		            if(!event.params){return 5;}
+
+		            var eps = event.params.filter(function(item){
+		                return item.show!=false;
+		            });
+		            return eps.length;
+		        }
+		        $scope.addEventParams = function(event,obj){
+		            if(!event.params || $scope.getEventParamsNum(event)>=3){return false;};
+		            rmd ++;
+		            var tempparam = {id:"pam_"+rmd,pid:event.id};
+		            if(obj){
+		                for(var k in obj){
+		                    tempparam[k] = obj[k];
+		                }
+		            }
+		            event.params.push(tempparam);
+		        }
+		        $scope.removeEventParams = function(event,param){
+		            for(var i=0;i<event.params.length;i++){
+		                if(event.params[i].id == param.id){
+		                    event.params[i].show = false;
+		                    break;
+		                }
+		            }
+		        }
+		        $scope.$on("event",function(e,msg){
+		        	if($scope.type == 'eventstats'){
+		        		var params = $scope.event.params;
+			            for(var j=0;j<params.length;j++){
+			                if(params[j].id == msg.id){
+			                    params[j] = msg;
+			                    break;
+			                }
+			            }
+		        	}
+		        	else{
+		        		for(var i=0;i<$scope.eventInfo.length;i++){
+			                if($scope.eventInfo[i].id == msg.pid){
+			                    var params = $scope.eventInfo[i].params;
+			                    for(var j=0;j<params.length;j++){
+			                        if(params[j].id == msg.id){
+			                            params[j] = msg;
+			                            break;
+			                        }
+			                    }
+			                }
+			            }
+		        	}
+		        });
+
+		        $scope.okSave = function(){
+		        	var hasNull = false;
+		            var eventInfo = [],myEvents = [];
+
+		            $scope.eventInfo.filter(function(item){
+		                if(item.show!=false){
+		                    var temp = {event:item.event,relation:item.relation,params:[],eventMatch:true};
+		                    if(UtilService.isNullStr(item.event) || item.nullevent == true){
+		                        item.nullevent = true;
+		                        hasNull = true;
+		                    }
+		                    else{
+		                        item.nullevent = false;
+		                        item.params.filter(function(pm){
+		                            if(pm.show!=false){
+		                                var pms = {};
+		                                for(var k in pm){
+		                                    if(k!='id' && k!='pid'){
+		                                        if(k!='value'){
+		                                            pms[k] = pm[k];
+		                                        }else{
+		                                            pms[k] = pm[k].join(",");
+		                                        }
+		                                        if(UtilService.isNullStr(pm[k])){
+		                                            $scope.$broadcast(pm.id, "null");
+		                                            hasNull = true;
+		                                        }
+		                                    }
+		                                }
+		                                temp.params.push(pms);
+		                            }
+		                        });
+		                    }
+		                    eventInfo.push(temp);
+		                    myEvents.push(item.evtname);
+		                }
+		            });
+		            if(!hasNull && eventInfo.length>0){
+		                $scope.$emit("matchok",{info:eventInfo,names:myEvents});
+		            }
+		            else{
+		                ToolService.showTips("信息没填全或数据有误,请检查");
+		            }
+		        }
+
+		        $scope.eventSave = function(){
+		        	if(!$scope.event.params){return false;}
+		            var hasNull = false;
+		            var eventInfo = {event:$scope.eventId,relation:$scope.event.relation,params:[]};
+		            eventInfo.viewField = $scope.event.proId;
+		            if($scope.event.second){ //有二级选项
+		                eventInfo.fieldOperate = $scope.event.sumId;
+		            }
+		            else{
+		                eventInfo.fieldOperate = "";
+		            }
+		            $scope.event.params.filter(function(pm){
+		                if(pm.show!=false){
+		                    if(UtilService.isNullStr(pm.attr)){
+		                        $scope.$broadcast(pm.id, "error");
+		                        hasNull = true;
+		                    }
+		                    var pms = {};
+		                    for(var k in pm){
+		                        if(k!='id' && k!='pid'){
+		                            if(k!='value'){
+		                                pms[k] = pm[k];
+		                            }else{
+		                                pms[k] = pm[k].join(",");
+		                            }
+		                            if(UtilService.isNullStr(pm[k])){
+		                                $scope.$broadcast(pm.id, "error");
+		                                hasNull = true;
+		                            }
+		                        }
+		                    }
+		                    eventInfo.params.push(pms);
+		                }
+		            });
+		            if(hasNull || !$scope.eventId){
+		                ToolService.showTips("信息没填全或数据有误,请检查");
+		            }
+		            else{
+		            	$scope.$emit("matchok",{info:eventInfo,names:[$scope.eventstatsEvtName]});
+		            }
+		        }
+            }
+        }
+    }
+
+    //文件上传
+    function fileModel($parse){
+    	return {
+	        restrict: 'A',
+	        scope:{
+
+	        },
+	        link: function(scope, element, attrs) {
+	          var model = $parse(attrs.fileModel);
+	          var modelSetter = model.assign;
+
+	          element.bind('change', function(){
+	          	var val = angular.element(element).val();
+	          	if(val == ''){return false;}
+
+	            scope.$apply(function(){
+	            	var myFile = element[0].files;
+		            if (attrs.multiple) {
+		                modelSetter(scope, element[0].files);
+		            }
+		            else {
+		                modelSetter(scope, element[0].files[0]);
+		                myFile = element[0].files[0];
+		            }
+		            scope.$emit("myFile",myFile);
+		            angular.element(element).val("");
+	            });
+	          });
+	        }
+	    };
+    }
+
+    //文件上传
+    function searchGroup(){
+    	return {
+	        restrict: 'E',
+	        replace:true,
+	        scope:{
+	        	filterfn:"&",
+	        	initTxt:"=",
+	        	initf5:"=",
+	        	list:"="
+	        },
+	        templateUrl : '/template/common/searchGroup.html?r='+tempVersion,
+	        link: function($scope, element, attrs) {
+
+	        	$scope.query = function(){
+	        		if($scope.preTxt == $scope.srhTxt){
+	        			return false;
+	        		}
+	        		$scope.filterfn({txt:$scope.srhTxt});
+	        		$scope.preTxt = $scope.srhTxt;
+	        	}
+	        	$scope.$watch("initTxt+initf5+list",function(){
+	        		$scope.srhTxt = $scope.preTxt = $scope.initTxt || "";
+	        	});
+
+	        	$scope.doNull = function(){
+	        		$scope.srhTxt = "";
+	        		$scope.query();
+	        	}
+	        }
+	    };
+    }
+    //固定表格
+    function bigTable($timeout,$compile){
+    	return {
+	        restrict: 'A',
+	        replace:true,
+	        scope:{
+	        	fixedCol:"@", //固定列数
+	        	fixChange:"=", //列表变化,翻页排序等,只需要更新滑动条即可
+	        	infoList:"=", //列表数据
+	        	initf5:"=", //初始化列表,一般是数据列表重新查询
+	        	noScroll:"@",
+	        	noAllScroll:"@",
+	        	noEmpty:"="
+	        },
+	        link: function($scope, element) {
+	        	var tableSpline = $(element).find(".tableSpline"),
+	        		tableHeader = $(element).find(".tableHeader"),
+	        		tableInfo = $(element).find(".tableInfo");
+	        	var copyColWrap = $(element).find(".copyColWrap"),copyTable = copyColWrap.find("table");
+
+	        	var totalLeft = 0, infoh = 0, isEmpty = false, before = 0, after = 0,preLeft = 0;
+	        	var helpTip = $(".helpTipWrap");
+	        	if(tableSpline.length==0){
+	        		$(element).append("<div class='tableSpline'></div>");
+	        		tableSpline = $(element).find(".tableSpline");
+	        	}
+	        	if(copyColWrap.length==0){
+	        		$(element).prepend("<div class='copyColWrap'><table></table></div>");
+	        		copyColWrap = $(element).find(".copyColWrap");
+	        		copyTable = copyColWrap.find("table");
+	        		if($scope.noAllScroll){
+	        			copyColWrap.css({"max-height":"233px","top":"35px"});
+	        		}
+	        	}
+	        	var init = function(){
+	        		totalLeft = 1; //1像素边框
+        		    tableHeader.scrollLeft(0);
+        		    tableInfo.scrollLeft(0);
+        		    tableInfo.scrollTop(0);
+        		    infoh = tableInfo.find("table").height();
+        		    for(var i = 0; i < $scope.fixedCol; i++){
+        		    	totalLeft += tableHeader.find("#title_"+i).parent().width();
+        		    }
+        		    tableSpline.css({"left":totalLeft});
+        		    $(element).find(".tableHeader th:lt("+$scope.fixedCol+")").css("left","0px");
+        		    preLeft = 0;
+	        	}
+	        	var updateBar = function(){
+	        		var info = tableInfo.find("table"),
+                		header = tableHeader.find("table");
+
+                	if($scope.noEmpty){
+                	   isEmpty = false;
+                	}else{
+                	   isEmpty = $scope.infoList && $scope.infoList.length==0;
+                	}
+
+                    var headerw = header.css("width"),
+	                    headerh = header.css("height"),
+	                    tableH = info.find("tbody").height(),headH = header.height();
+
+                    var trlast = tableInfo.find("table tr:last");
+                    if(isEmpty){
+	                    if(trlast.length==0){
+	                    	info.append("<tr></tr>")
+	                    }
+                		info.width(headerw);
+                		info.height(infoh==0?headerh:infoh);
+                		tableSpline.height(headerh);
+                	}
+                	else{
+                		tableInfo.find("table").width('');
+                		tableInfo.find("table").height('');
+
+                		var tsh = headH+tableH,maxh = $(element).height();
+                		tableSpline.height(tsh > maxh ? maxh : tsh);
+
+                		if(!trlast.html()) trlast.remove();
+                	}
+
+                	tableInfo.perfectScrollbar("update");
+            		tableInfo.scrollLeft(preLeft); //此行代码是为了兼容火狐浏览器
+            		tableInfo.scrollTop(0);
+	        	}
+	        	var updateFixTds = function(){
+	        		copyTable.html("");
+        			if(!isEmpty){
+        				tableInfo.find("tr").each(function(i){
+        					copyTable.append("<tr></tr>");
+
+        					var lastTr = copyTable.find("tr:last-child");
+        					for(var c=0;c<$scope.fixedCol;c++){
+        						lastTr.append($(this).children("td:eq("+c+")").clone(true));
+        						//首列带有click下钻特殊处理
+        						if(c==0){
+        							//这里单独指compile列里面的div,是因为列上很多时候有ng-repeat
+		        					var Tds = lastTr.find("td");
+		        					Tds.each(function(){
+		        							var hm = $(this).find("div").html();
+		        							$(this).html(
+		        								$compile($(this).clone(true))($scope.$parent)
+		        							);
+		        							$(this).find("div").html(hm);
+		        						}
+		        					);
+        						}
+        					}
+        				});
+        			}
+	        	}
+	        	$scope.$watch("initf5",function(n){
+	        		if(angular.isDefined(n)){
+	        			tableSpline.hide();
+	        			copyTable.html("");
+	        			var timer = $timeout(function() {
+	        				init();
+	        			},50);
+	        			timer.then(function(){
+	                    	$timeout.cancel(timer);
+	                    });
+	        		}
+	        	});
+	        	$scope.$watch("fixChange",function(n){
+	        		if(angular.isDefined(n) && $scope.infoList){
+	        			copyTable.html("");
+	        			var timer = $timeout(function() {
+	        				updateBar();
+	        				updateFixTds();
+	        			},100);
+	        			timer.then(function(){
+	                    	$timeout.cancel(timer);
+	                    });
+	        		}
+	        	});
+
+	        	$scope.$on("conentresize",function(){
+                    tableInfo.perfectScrollbar("update");
+            		tableInfo.scrollLeft(0);
+            		tableInfo.scrollTop(0);
+            		tableSpline.hide();
+	        	});
+
+                var before = 0;
+	        	tableInfo.scroll(function(e){
+	        		helpTip.hide();
+
+	        	    var target = e.target,left = target.scrollLeft;
+	        	    preLeft = left;
+	        	    tableHeader.scrollLeft(left);
+
+	        	    var cellCss = {
+	        	    		"position":"relative",
+	        	            "left":left,
+	        	            "-webkit-overflow-scroll":"touch"
+	        	        };
+
+	        	    $(element).find(".tableHeader th:lt("+$scope.fixedCol+")").each(function(i){
+	        	        $(this).css(cellCss);
+	        	    });
+
+	        	    if(left>0){
+	        	        tableSpline.show();
+	        	    }
+	        	    else{
+	        	       tableSpline.hide().css('-webkit-overflow-scroll','auto');
+	        	    }
+	                after = $(this).scrollTop();
+	                copyColWrap.scrollTop(after);
+	                if($scope.noAllScroll){return;}
+	                if(before>after){
+	                	if(after < 200 && !$scope.noScroll)
+	                	$(".rightWrap").scrollTop(after);
+	                }
+	                else{
+	                	if(!$scope.noScroll){
+		                	if(after >= tableInfo.find("table").height()-tableInfo.height() && this.scrollTop>0)
+		                	$(".rightWrap").scrollTop(this.scrollHeight);
+	                	}else{
+	                		$(".rightWrap").scrollTop($(".rightWrap").scrollTop()+this.scrollHeight);
+	                	}
+	                }
+	                before = after;
+	        	});
+
+	        	$(".rightWrap").scroll(function() {
+	        	  	helpTip.hide();
+	        	});
+	        	tableInfo.perfectScrollbar();
+	        }
+	    };
+    }
+
+    //拖拽排序
+    var sourceId = 0;
+    function dragOrder($parse){
+    	return {
+	        restrict: 'A',
+	        scope:{
+	        	dragId:"=",
+	        	dragflag:'@'
+	        },
+	        link: function($scope, element, attrs) {
+	        	element.attr("draggable",true);
+
+	        	angular.element(element).on("dragstart",function(event){
+	        		sourceId = $scope.dragId;
+	        	});
+	        	angular.element(element).on("dragover",function(event){
+	        		event.preventDefault();
+	        	});
+	        	angular.element(element).on("drop",function(event){
+	        		var replaceDom = $(this),info = JSON.parse(replaceDom.attr("drag-info"));
+	        		event.preventDefault();
+					if(sourceId != info.id){
+						$scope.$emit("dragorder",{id:sourceId,index:info.orderindex,flag:$scope.dragflag});
+					}
+	        	});
+	        }
+	    };
+    }
+})();
diff --git a/src/main/websrc/js/app/filter.js b/src/main/websrc/js/app/filter.js
new file mode 100644
index 0000000..f0684c9
--- /dev/null
+++ b/src/main/websrc/js/app/filter.js
@@ -0,0 +1,109 @@
+(function(){
+	var tempVersion = new Date().getTime();
+	
+	angular.module("app")
+	.filter("charfilter",charfilter)
+	.filter("filterList",filterList)
+	.filter("filterPay",filterPay)
+	.filter("numFixed",["UtilService",numFixed])
+	.filter("filterHtml",["$sce",filterHtml])
+	.filter("formatRate",["UtilService",formatRate]);
+
+	//渠道首字母过滤
+	function charfilter(){
+		return function(input, param) {
+	      if(param == ""){
+	         return input;
+	      }else{
+	          var output = [];  
+	          angular.forEach(input, function(v,k){  
+	               if (param.indexOf(v.firstchar)>-1) {  
+	                    output.push(v);  
+	               }  
+	          });  
+	          return output; 
+	      }
+	   };  
+	}
+
+	//列表多个属性过滤 
+	function filterList(){
+		return function(input,v, param) {
+	      if(!v || v == ""){
+	         return input;
+	      }else{
+	          	var paramkeys = param.split(",");
+	          	return input.filter(function(item){
+	          		var has = false;
+	          	  	for(var i = paramkeys.length-1;i>=0;i--){
+	          	  		if(item[paramkeys[i]] && angular.uppercase(String(item[paramkeys[i]])).indexOf(angular.uppercase(v))>-1){
+	          	  			has = true;
+	          	  			break;
+	          	  		}
+	          	  	}
+	          	  	return has;
+	          	});
+	      }
+	   };  
+	}
+
+	function filterPay(){
+		return function(input){
+			if(input < 10000){
+				return input;
+			}
+			else{
+				return (input/10000).toFixed(1) +"w";
+			}
+		}
+	}
+	function filterHtml($sce){
+		return function (text) {
+            if(text == null){
+                return "";
+            }else{
+                return $sce.trustAsHtml(text);
+            }
+        };
+	}
+
+	function numFixed(UtilService){
+		return function(num,params){
+			if(num == null || num =='null'){return 0;}
+			params = params ? params : 2;
+			if(isNaN(Number(num))){
+				return num;
+			}else{
+				return UtilService.decimal2(Number(num),params);
+			}
+		}
+	}
+
+	function formatRate(UtilService){
+		return function(num,rate,formatjson,rate1){
+			if(num == null || num =='null' || !rate || !formatjson){return num;}
+			if(isNaN(Number(num))){
+				if(num.indexOf("_")==0){num = num.substring(1);}
+				return num;
+			}
+			if(rate1){rate = rate1;}
+
+			var format = formatjson[rate];
+			if(!format){format = 'float';}
+
+			if(format == 'percent'){
+				return UtilService.decimal2(Number(num)*100,2) + "%";
+			}
+			else if(format == 'float'){
+				return UtilService.decimal2(Number(num),2);
+			}
+			else if(format == 'int'){
+				return Math.round(Number(num));
+			}
+			else{
+				return num;
+			}
+		}
+
+	}
+})();
\ No newline at end of file
diff --git a/src/main/websrc/js/collect/custommenu.js b/src/main/websrc/js/collect/custommenu.js
new file mode 100644
index 0000000..47d8fec
--- /dev/null
+++ b/src/main/websrc/js/collect/custommenu.js
@@ -0,0 +1,1370 @@
+(function(){
+    angular.module("app.collect")
+        .controller("custommenuCtrl",["$rootScope","$scope","HttpService","ToolService","UtilService","$timeout","$stateParams","$state","$filter","$location",custommenuCtrl]);
+
+    function custommenuCtrl($rootScope,$scope,HttpService,ToolService,UtilService,$timeout,$stateParams,$state,$filter,$location){
+        $scope.pageId = $stateParams.pageid;
+        $scope.viewFlag = 1; //1看单,2收藏,3行业看单
+        if($scope.pageId!=null){
+            $scope.viewFlag = 0;
+        }
+        $scope.menuInit = $scope.pageId;
+        var isinit = true;
+        if($scope.pageId){
+            isinit = false;
+        }
+
+        var rmd = new Date().getTime();
+        $scope.$on("industryId",function(e,msg){
+            if(msg.info.id == 'all'){
+                $scope.industryInitName = '';
+                $scope.industryInit = 'all';
+            }else{
+                $scope.industryInitName = msg.info.name;
+                $scope.industryInit = msg.info.id;
+            }
+        });
+        $scope.$on("menuId",function(e,msg){
+            $scope.menuDetail(msg.info);
+        });
+        $scope.timeFlag='day';
+        $scope.disTimeFlag = ['hour'];
+        $scope.changeTimeFlag = function(flag){
+            if($scope.disTimeFlag.indexOf(flag)>-1){return false;}
+
+            $scope.timeFlag = flag;
+        }
+        $scope.changeViewFlag = function(flag){
+            if($scope.viewFlag == flag){return false;}
+
+            $rootScope.thirdtab = ['','我的看单','我的收藏','行业看单模板'][flag];
+
+            $scope.viewFlag = flag;
+            $scope.lookMyMenu();
+        }
+        $scope.pageFlag = 0; //1还没有看单,2看单设置完毕,3进入我的看单,4看单详情
+        $scope.addReyunMenu = function(){
+            var savePM = HttpService.postInfo("custommenu/addReyun/"+$scope.appid);
+            ToolService.showLoading();
+            savePM.then(function(data){
+                ToolService.hideLoading();
+                if(data.length>0){
+                    $scope.pageFlag = 2;
+                    $scope.reyunList = data;
+                    $scope.$emit("f5CtmMenus",{});
+                }
+                else{
+                    if(data.code == -6002){
+                        ToolService.showTips("请集成sdk并上报数据");
+                    }
+                    else{
+                        ToolService.showTips("操作失败");
+                    }
+                }
+            });
+
+        }
+
+        $scope.date = ToolService.getLastDays(-7,0);
+        $scope.$on("dateCustos",function(e,msg){
+            if(msg.startDate == msg.endDate){
+                $scope.disTimeFlag = ["week","month"];
+            }
+            else{
+                $scope.disTimeFlag = ["hour"];
+
+            }
+            if($scope.disTimeFlag.indexOf($scope.timeFlag)>-1){
+                $scope.timeFlag = 'day';
+            }
+            $scope.date = msg;
+        });
+        $scope.$watch("date",function(){
+            if(angular.isDefined($scope.date)){
+                $scope.datestr = $scope.date.startDate + "至" + $scope.date.endDate;
+            }
+        });
+
+        var eventPM = null;
+        // $scope.menuInitName = "看单名称";
+        //查看我的看单
+        $scope.lookMyMenu = function(flag){
+            if(flag && flag == 2){ //加入看单后-查看我的看单
+                 $scope.viewFlag = 1;
+            }
+            $scope.closeWin();
+            ToolService.showLoading();
+            var url = "";
+            $scope.searchTxt = "";
+            $scope.orderFlag = 0;
+            $scope.industryList = [];
+            if($scope.industryList.length==0){
+                var industryPM =  HttpService.getInfo("custommenu/industry");
+                industryPM.then(function(data){
+                    data.filter(function(item){
+                        var obj = {};
+                        obj.id = item.category;
+                        obj.name = item.categoryName;
+                        $scope.industryList.push(obj);
+                    });
+                    $scope.industryList.unshift({id:"all",name:"全部行业"});
+                    $scope.industryInit = $scope.appInstance.appGenre==43 || $scope.appInstance.appGenre==64?$scope.appInstance.appGenre:'all';
+                    $scope.industryInitName = $scope.appInstance.appGenreName==43 || $scope.appInstance.appGenreName==64
+                                              ?$scope.appInstance.appGenreName:"全部行业";
+                });
+            }
+            switch ($scope.viewFlag) {
+                case 2:
+                    url = "custommenu/findFavo/"+$scope.appid;
+                    break;
+                case 3:
+                    url = "custommenu/findShare/"+$scope.appid;
+                    break;
+                case 1:default:
+                    url = "custommenu/findMy/"+$scope.appid;
+                    break;
+            }
+            $scope.menuInfoList = [];
+            var menuPM = HttpService.getInfo(url);
+            menuPM.then(function(data){
+                $scope.menuInfoList = data;
+                if($scope.pageId!=null){
+                    var ms = $scope.menuInfoList.filter(function(item){
+                        return item.id == $scope.pageId;
+                    });
+                    if(ms.length>0){
+                        $scope.menuDetail(ms[0]);
+                    }
+                    $scope.viewFlag = 1;
+                }
+                else{
+                    //子账户进来
+                    // if(!$rootScope.isSuper && data.length>0){
+                    //     $scope.menuDetail(data[0]);
+                    // }
+                }
+                if((flag && flag == 1)){
+                    $scope.menuDetail(data.slice(-1)[0]);
+                }
+                ToolService.hideLoading();
+            });
+            if(eventPM == null){
+                $scope.queryInfoByApp();
+            }
+            $scope.pageFlag = 3;
+        }
+
+        $scope.menuDetail = function(menu){
+            $scope.pageFlag = 4;
+            $scope.currentMenu = menu;
+            $scope.changeMatchFlag(0);
+            if($scope.viewFlag == 1){
+                // $rootScope.custID = menu.id;
+                $rootScope.thirdtab = menu.name;
+
+            }
+            if($scope.menuInit == menu.id){
+                $scope.query();
+            }else{
+                $scope.menuInit = menu.id;
+            }
+        }
+        $scope.orderFlag = 0;
+        $scope.menuOrder = function(flag){
+            $scope.orderFlag = flag;
+            switch (flag) {
+                case 2:
+                    $scope.menuInfoList.sort(function(x,y){
+                        return x.matchPercent == y.matchPercent ? 0 : (x.matchPercent > y.matchPercent ? -1 : 1);
+                    });
+                    break;
+                case 3:
+                    $scope.menuInfoList.sort(function(x,y){
+                        return x.useNumber == y.useNumber ? 0 : (x.useNumber > y.useNumber ? -1 : 1);
+                    });
+                    break;
+                case 4:
+                    $scope.menuInfoList.sort(function(x,y){
+                        return x.favoriteNumber == y.favoriteNumber ? 0 : (x.favoriteNumber > y.favoriteNumber ? -1 : 1);
+                    });
+                    break;
+                case 1:default:
+                    $scope.menuInfoList.sort(function(x,y){
+                        return x.id == y.id ? 0 : (x.id > y.id ? -1 : 1);
+                    });
+                    break;
+            }
+        }
+        $scope.backToMenu = function(){
+            if($scope.viewFlag == 2 && !$scope.currentMenu.hasFavorite){
+                for(var i=0;i<$scope.menuInfoList.length;i++){
+                    var item = $scope.menuInfoList[i];
+                    if(item.id == $scope.currentMenu.id){
+                        $scope.menuInfoList.splice(i,1);
+                        break;
+                    }
+                }
+            }
+            if($scope.viewFlag==1){
+               $location.path("/collect/custommenu");
+            }
+            $scope.pageFlag = 3;
+        }
+        $scope.typeInitname = "请选择";
+        $scope.$on("typeId",function(e,msg){
+            $scope.customTypeId = msg.info.id;
+        });
+        $scope.customTypeFlag = 0;//1事件,2留存,3漏斗
+        $scope.changeCustomFlag = function(flag){
+            if($scope.customTypeFlag == flag){return false;}
+
+            $scope.customTypeFlag = flag;
+            switch (flag) {
+                case 2:
+                    $scope.typeList = $scope.retentionList;
+                    break;
+                case 3:
+                    $scope.typeList = $scope.funnelList;
+                    break;
+                case 1:default:
+                    $scope.typeList = $scope.eventstatsList;
+                    break;
+            }
+            if($scope.typeList.length>0){
+                var initid = $scope.typeList[0].id;
+                if($scope.typeinit == initid){
+                    $scope.typef5 = ++rmd;
+                }
+                else {
+                    $scope.typeinit = initid;
+                }
+            }
+            else{
+                $scope.customTypeId = $scope.typeinit = -1;
+            }
+        }
+        //查看埋点及规则
+        $scope.showDetail = function(temp){
+            ToolService.showAlp();
+            $scope.detailInfo = JSON.parse(temp.info.descb);
+            $scope.custitle = temp.info.name+(temp.info.menuType=='funnel'?"漏斗":temp.info.menuType=='retention'?"留存":"");
+            $scope.isdetail = true;
+            angular.element(document).on("click",function(){
+                $scope.$apply(function(){
+                    $scope.hideDetail();
+                });
+            });
+        }
+        $scope.hideDetail = function(){
+            ToolService.hideAlp();
+            $scope.isdetail = false;
+
+        }
+        $scope.maxMenu = 10;//最大看单数
+        $scope.maxReport = 16;//最大报表数
+        $scope.winFlag = 0; //1添加看单,2修改看单,3删除看单 ,4分享看单 5加入我的看单 6添加报表 7删除报表
+        var oldename = "";
+        $scope.showWin = function(flag,obj){
+            if(flag == 1 && $scope.menuInfoList && $scope.menuInfoList.length>=$scope.maxMenu){
+                return false;
+            }
+            if(flag == 6 && $scope.currentMenu && $scope.currentMenu.templates && $scope.currentMenu.templates.length>=$scope.maxReport){
+                ToolService.showTips("每个看单最多支持"+$scope.maxReport+"个图表");
+                return false;
+            }
+
+            var show = true;
+            switch (flag) {
+                case 1:
+                    $scope.ename = oldename = "";
+                    break;
+                case 2:
+                    $scope.ename = oldename = obj.name;
+                    $scope.winId = obj.id;
+                    break;
+                case 4:
+                    $scope.shareMenu = obj;
+                    if(!obj.templates || obj.templates.length<1){
+                        ToolService.showTips("请添加报表后再分享");
+                        show = false;
+                    }
+                    $scope.mname = obj.name;
+                    $scope.winId = obj.id;
+                    break;
+                case 3:case 7:
+                    $scope.delname = obj.name;
+                    $scope.winId = obj.id;
+                    break;
+                case 6:
+                    // $scope.changeCustomFlag(1);
+                    if(obj){
+                        $scope.currentMenu = obj;
+                        $scope.changeMatchFlag(0);
+                    }
+                    $scope.changeCustomFlag(1);
+                    break;
+                default:
+                    break;
+            }
+            if(show){
+                ToolService.showAlp();
+                $scope.winFlag = flag;
+            }
+        }
+        $scope.closeWin = function(flag){
+            ToolService.hideAlp();
+            $scope.winFlag = 0;
+
+            if(flag == 1){ //加入看单返回到分享页
+                $scope.matchFlag = 0;
+            }
+        }
+        $scope.getMaxTips = function(){
+            if($scope.chartDatas && $scope.chartDatas.length>=$scope.maxReport){
+                return "每个看单最多支持"+$scope.maxReport+"个图表";
+            }
+            else{
+                return "";
+            }
+        }
+        $scope.doFavorite = function(){
+            var favorPM = null,num=0,id = $scope.currentMenu.id;
+            if(!UtilService.isNullStr($scope.currentMenu.shareId)){
+                id = $scope.currentMenu.shareId;
+            }
+            if($scope.currentMenu.hasFavorite==false){
+                favorPM = HttpService.postInfo("custommenu/addFavorite/"+$scope.appid+"/"+id);
+                num = 1;
+            }
+            else{
+                favorPM = HttpService.deleteInfo("custommenu/delFavorite/"+$scope.appid+"/"+id);
+                num = -1;
+            }
+            ToolService.showLoading();
+            favorPM.then(function(data){
+                ToolService.hideLoading();
+                if(data==true){
+                    $scope.currentMenu.favoriteNumber += num;
+                    $scope.currentMenu.hasFavorite = num > 0 ? true : false;
+                    ToolService.showTips("操作成功");
+                }
+                else{
+                    ToolService.showTips("操作失败");
+                }
+            });
+        }
+        $scope.doFavoriteByMenu = function(menu){
+            var favorPM = HttpService.deleteInfo("custommenu/delFavorite/"+$scope.appid+"/"+menu.shareId);
+            ToolService.showLoading();
+            favorPM.then(function(data){
+                ToolService.hideLoading();
+                if(data==true){
+                    $scope.menuInfoList.filter(function(item,index){
+                        if(item.id == menu.id){
+                            $scope.menuInfoList.splice(index,1);
+                        }
+                    });
+                    ToolService.showTips("操作成功");
+                }
+                else{
+                    ToolService.showTips("操作失败");
+                }
+            });
+        }
+        $scope.doShare = function(menu){
+            if(angular.isUndefined(menu)){
+                ToolService.showLoading();
+                var sharePM = HttpService.postInfo("custommenu/share/"+$scope.appid+"/"+$scope.winId);
+                sharePM.then(function(data){
+                    $scope.closeWin();
+                    ToolService.hideLoading();
+                    if(data==true){
+                        ToolService.showTips("分享成功");
+                        $scope.shareMenu.hasShare = true;
+                    }
+                    else{
+                        ToolService.showTips("分享失败");
+                    }
+
+                });
+            }
+            else{
+                var sharePM = HttpService.deleteInfo("custommenu/cancelShare/"+$scope.appid+"/"+menu.id);
+                ToolService.showLoading();
+                sharePM.then(function(data){
+                    ToolService.hideLoading();
+                    if(data==true){
+                        ToolService.showTips("取消成功");
+                        menu.hasShare = false;
+                    }
+                    else{
+                        ToolService.showTips("取消失败");
+                    }
+                });
+            }
+
+        }
+        $scope.saveMenu = function(){
+            var verPar = {
+                name: {
+                    min:1,
+                    max:24,
+                    key: 'spcname',
+                    val: $scope.ename
+                }
+            };
+            $scope.tip = formJudge(verPar);
+            if(UtilService.isNullStr($scope.ename) || $scope.tip.succ != true){
+                ToolService.showTips("请输入12个汉字以内名称,允许字符为中英文数字_-");
+                return false;
+            }
+            else{
+                var savePM = null,txtTips = "添加成功",flag = 1;
+                if($scope.winFlag==2){//修改看单
+                    if(angular.lowercase(oldename) == angular.lowercase($scope.ename)){
+                        $scope.closeWin();
+                        return false;
+                    }
+                    savePM = HttpService.putInfo("custommenu/updateName/"+$scope.appid+"/"+$scope.winId+"?name="+$scope.ename,{});
+                    txtTips = "修改成功";
+                    flag = 0;
+                }else{ //添加看单
+                    savePM = HttpService.postInfo("custommenu/saveMenu/"+$scope.appid+"?name="+$scope.ename,{});
+                }
+                ToolService.showLoading();
+                savePM.then(function(data){
+                    ToolService.hideLoading();
+                    if(data.code == -6001){
+                        ToolService.showTips("名称已存在");
+                    }
+                    else if(data.code == -300){
+                        ToolService.showTips("最多支持"+$scope.maxMenu+"个看单");
+                    }
+                    else{
+                        $scope.closeWin();
+                        ToolService.showTips(txtTips);
+                        $scope.lookMyMenu(flag);
+                        $scope.$emit("f5CtmMenus",{});
+                    }
+
+                },function(data){
+                    ToolService.hideLoading();
+                    if(data.code == -6001){
+                        ToolService.showTips("名称已存在");
+                    }
+                    else{
+                        ToolService.showTips(data.message);
+                    }
+                });
+            }
+        }
+        //添加报表
+        $scope.addReport = function(){
+            if(!$scope.customTypeId || $scope.customTypeId<1){
+                ToolService.showTips('请选择模板');
+                return false;
+            }
+            var par = {
+                menuType:['eventstats','retention','funnel'][$scope.customTypeFlag-1],
+                originalReportId:$scope.customTypeId
+            }
+            var savePM = HttpService.postInfo("custommenu/addTemp/"+$scope.appid+"/"+$scope.currentMenu.id,par);
+            ToolService.showLoading();
+            savePM.then(function(data){
+                ToolService.hideLoading();
+                if(data.code == -6000){
+                    ToolService.showTips("本看单中已存在该图表,请重新选择。");
+                }
+                else if(data.code == -300){
+                    ToolService.showTips("每个看单最多支持"+$scope.maxReport+"个图表");
+                }
+                else{
+                    if($scope.viewFlag == 1){
+                        $scope.pageFlag = 4;
+                        $scope.goToCustom($scope.currentMenu.id);
+                    }
+                    $scope.closeWin();
+                    ToolService.showTips('添加成功');
+                    $scope.query(data);
+                    $scope.currentMenu.templates.push(data);
+                }
+
+            });
+        }
+        $scope.getEventTypeCount = function(list){
+            var evt = 0,ret = 0,fun = 0;
+            list.filter(function(item){
+                if(item.menuType == 'eventstats'){
+                    evt ++;
+                }
+                else if(item.menuType == 'retention'){
+                    ret ++;
+                }
+                else if(item.menuType == 'funnel'){
+                    fun ++;
+                }
+            });
+            return evt+"个事件细分,"+ret+"个留存,"+fun+"个漏斗";
+        }
+        $scope.getShareName = function(currentMenu){
+            if(currentMenu.accountId == $scope.currentAccountId){
+                return "来自我的分享";
+            }
+            else{
+                return "来自“"+currentMenu.accountName+"”的分享";
+            }
+        }
+        $scope.reportDetail = function(template){
+            $state.go("collect."+template.menuType,{pageid:template.originalReportId});
+        }
+        $scope.getTipWidth = function(temp){
+            var wid = {};
+            if(temp.tooltipChart.length==1){
+                wid = {'width':$scope.showCount==3?'300px':'400px'};
+            }else if(temp.tooltipChart.length==2){
+                wid = {'width':$scope.showCount==3?'120px':'200px'};
+            }else{
+                wid = {'width':$scope.showCount==3?'70px':'90px'};
+            }
+            return wid;
+        }
+        //删除
+        $scope.doDelete = function(flag){
+            $scope.closeWin();
+            ToolService.showLoading();
+            var deletePM = null;
+
+            if(flag==3){//删除看单
+                deletePM = HttpService.deleteInfo("custommenu/delMenu/"+$scope.appid+"/"+$scope.winId);
+            }
+            else if(flag==7){//删除报表
+                deletePM = HttpService.deleteInfo("custommenu/delTemp/"+$scope.winId);
+            }
+            if(deletePM!=null){
+                deletePM.then(function(){
+                    ToolService.showTips("删除成功");
+                    ToolService.hideLoading();
+
+                    if(flag == 7){
+                        $scope.currentMenu.templates.filter(function(item,index){
+                            if(item.id == $scope.winId){
+                                $scope.currentMenu.templates.splice(index,1);
+                                $scope.chartDatas.splice(index,1);
+                            }
+                        });
+                    }
+                    else{
+                        $scope.lookMyMenu();
+                        $scope.$emit("f5CtmMenus",{});
+                    }
+                });
+            }
+        }
+
+        $scope.matchFlag = 0; //1匹配详情,2加入我的看单
+        $scope.changeMatchFlag = function(flag){
+            if($scope.showEditEvent){
+                $scope.showEditEvent = false;
+                return false;
+            }
+            if(flag == 0){
+                $scope.matchFlag = 0;
+                return false;
+            }
+            $scope.matchFlag = flag;
+
+            $scope.currentMenu.templates.filter(function(item){
+                var condition = JSON.parse(item.queryCondition),menuType = item.menuType;
+
+                if(menuType=='eventstats'){
+                    item.isMatch = condition.eventMatch;
+                    item.eventname = $scope.getEventName(condition.event);
+                }
+                else{
+                    item.isMatch = true;
+                    var names = [];
+                    condition.filter(function(cond){
+                        if(!cond.eventMatch){
+                            item.isMatch = false;
+                        }
+                        var n = $scope.getEventName(cond.event);
+                        if(n!=''){
+                            names.push(n);
+                        }
+                    });
+                    if((names.length>2 &&  !item.isMatch) || names.length == 0){
+                        item.eventname = '事件不匹配';
+                    }
+                    else if(names.length>2 && item.isMatch){
+                        item.eventname = '事件全匹配';
+                    }
+                    else{
+                        item.eventname = names.join(",");
+                    }
+                }
+                item.jsonCondition = condition;
+            });
+        }
+        $scope.editTemplateEvent = function(template,idx){
+            $scope.currentTemplate = template;
+            $scope.tempIndex = idx;
+
+            $scope.showEditEvent = true;
+
+        }
+        $scope.canJoin = function(){
+            if(!$scope.currentMenu){return false;}
+            var can = true;
+            var temps = $scope.currentMenu.templates.filter(function(item){
+                return item.isMatch == false;
+            });
+            if(temps.length>0){
+                can = false;
+            }
+            return can;
+        }
+        //根据event获取name
+        $scope.getEventName = function(evt){
+            if(!$scope.eventList){return "";}
+            var name = evt;
+            for(var i=0;i<$scope.eventList.length;i++){
+                if(evt == $scope.eventList[i].eventName){
+                    name = $scope.eventList[i].eventNameAlias;
+                    break;
+                }
+            }
+            return name;
+        }
+        //加入到我的看单
+        $scope.addShareMenu = function(){
+            if(!$scope.canJoin()){return false;}
+            var par = {name:$scope.currentMenu.name,templates:[],id:$scope.currentMenu.id};
+            if($scope.viewFlag == 2){
+                par.id = $scope.currentMenu.shareId;
+            }
+            $scope.currentMenu.templates.filter(function(temp){
+                var condition = temp.queryCondition,sevent = [];
+                if(temp.menuType == 'funnel'){
+                    var condJSON = JSON.parse(condition);
+                    condJSON.filter(function(json){
+                        sevent.push(json.event);
+                    });
+                }
+                par.templates.push({
+                    id:temp.id,
+                    menuType:temp.menuType,
+                    queryCondition:condition,
+                    name:temp.name,
+                    events:sevent.join(",")
+                });
+            });
+            var saPM = HttpService.postInfo("custommenu/addMenu/"+$scope.appid,par);
+            ToolService.showLoading();
+            saPM.then(function(data){
+                ToolService.hideLoading();
+                if(data.length>0){
+                    $scope.$emit("f5CtmMenus",{});
+                    $scope.changeMatchFlag(0);
+                    $scope.showWin(5);
+                }
+                else{
+                    if(data.code && data.code == -300){
+                        ToolService.showTips("您的账号仅支持创建"+$scope.maxMenu+"个看单,如需增加,请联系商务");
+                    }
+                    else{
+                        ToolService.showTips("加入失败");
+                    }
+
+                }
+            });
+        }
+        $scope.$on("matchok",function(e,msg){
+            $scope.currentMenu.templates[$scope.tempIndex].queryCondition = JSON.stringify(msg.info);
+            $scope.currentMenu.templates[$scope.tempIndex].isMatch = true;
+            if(msg.names.length>2){
+                $scope.currentMenu.templates[$scope.tempIndex].eventname = "事件全匹配";
+            }
+            else{
+                $scope.currentMenu.templates[$scope.tempIndex].eventname = msg.names.join(",");
+            }
+
+            $scope.showEditEvent = false;
+        });
+        $scope.queryInfoByApp = function(){
+            $scope.pageFlag = 3;
+            //app下所有事件
+            eventPM = HttpService.getInfo($scope.appid +"/event/find");
+            eventPM.then(function(data){
+                $scope.eventList = data;
+            });
+
+            $timeout(function(){
+                //事件分析模板
+                if($scope.showMenu('eventstats')){
+                    var url = "mng/eventstats/complicated/findAll/";
+                    var eventstatsPM = HttpService.getInfo(url+$scope.appid);
+                    eventstatsPM.then(function(data){
+                        $scope.eventstatsList = data;
+                    });
+                }
+                else{
+                    $scope.eventstatsList = [];
+                }
+
+                //留存模板
+                if($scope.showMenu('retention')){
+                    var retentionPM = HttpService.getInfo("mng/retention/find/"+$scope.appid);
+                    retentionPM.then(function(data){
+                        $scope.retentionList = data;
+                    });
+                }
+                else{
+                    $scope.retentionList = [];
+                }
+
+                //漏斗模板
+                if($scope.showMenu('funnel')){
+                    var funnelPM = HttpService.getInfo("funnel/find/"+$scope.appid);
+                    funnelPM.then(function(data){
+                        $scope.funnelList = data;
+                    });
+                }
+                else{
+                    $scope.funnelList = [];
+                }
+
+            },300);
+        }
+        //根据已选的指标和分组,重新生成图表数据
+        $scope.changeChartData = function(tempData){
+            tempData.tooltipChart = [];
+            var xKey =  tempData.trendList.key,temp = {
+                key:xKey,
+                val:[],
+                name:[],
+                rmd : ++rmd
+            };
+            var zero = [];
+            xKey.filter(function(d,index){
+                zero.push(0);
+            });
+            if(tempData.charts.chartType == "pie"){
+                tempData.ischeckall = tempData.group_List.length==tempData.grouped_List.length?true:false;
+                tempData.charts.chartConfig.flag = false;
+                if(tempData.rateListed.length>2){
+                    tempData.rateListed = tempData.rateListed.slice(0,2);
+                }
+                var json = {}, grList = UtilService.cloneJSON(tempData.grouped_List);
+                tempData.rateListed.filter(function(rate){
+                    var arr = [];
+                    var totalval = 0;
+                    tempData.grouped_List.filter(function(group){
+                         tempData.totalList.filter(function(total){
+                             var groupnames = "";
+                             var val = {};
+                             tempData.trendList.groupfield.filter(function(gid){
+                                groupnames += total[gid]+",";
+                             });
+                             if(group == groupnames.slice(0,-1)){
+                                 arr.push(total[rate]);
+                                 totalval += total[rate];
+                             }
+                         });
+                    });
+                    if(grList.indexOf("其他")>-1){
+                        grList.splice(grList.indexOf("其他"),1);
+                    }
+                    if(tempData.totalVal[rate]-totalval>0 && tempData.group_List.length>0){
+                        arr.push(tempData.totalVal[rate]-totalval);
+                        grList.push("其他");
+                    }
+                    json[rate] = arr;
+                });
+                tempData.charts.chartData.key = tempData.rateListed;
+                tempData.charts.chartData.name = grList;
+                if(!angular.equals({}, json)){
+                    tempData.charts.chartData.val = [json];
+                }else{
+                    tempData.charts.chartData.val = [];
+                }
+            }else if(tempData.charts.chartType == "table"){
+                if(tempData.grouplen>0){
+                    tempData.trendList.name = tempData.trendList.name.slice(tempData.grouplen+1);
+                    tempData.trendList.columnkey = tempData.trendList.columnkey.slice(tempData.grouplen+1);
+                    tempData.trendList.columnkey.unshift("groupnames");
+                    tempData.trendList.name.unshift("分组");
+                    $scope.mysort(tempData.infoList,tempData.trendList.columnkey[1],true);
+                }
+                var names = [],keys=[];
+                tempData.rateListed.filter(function(rate){
+                    names.push($scope.substrName(rate));
+                });
+                if(names.length>0){
+                    names.unshift(tempData.trendList.name[0]);
+                    keys = UtilService.cloneJSON(tempData.rateListed);
+                    keys.unshift(tempData.trendList.columnkey[0]);
+                    tempData.trendList.name = names;
+                    tempData.trendList.columnkey = keys;
+                }
+                tempData.colsStyle = ToolService.getTableColsWidth(tempData.trendList.name,$scope.timeFlag,$scope.showCount);
+                tempData.fixrefresh = ++rmd;
+            }else{
+                if(tempData.charts.chartType == "columnstack"){
+                    tempData.charts.chartConfig.flag = tempData.group_List.length>0?'hasGro':'nohasGro';
+                    if(tempData.grouped_List.length>5){
+                        tempData.grouped_List = tempData.grouped_List.slice(0,5);
+                    }
+                    if(tempData.rateListed.length>2){
+                        tempData.rateListed = tempData.rateListed.slice(0,2);
+                    }
+                }else{
+                    tempData.charts.chartConfig.flag = false;
+                    if(tempData.rateListed.length>4){
+                        tempData.rateListed = tempData.rateListed.slice(0,4);
+                    }
+                    var groLen  = tempData.rateListed.length==1?4:2;
+                    tempData.grouped_List = tempData.grouped_List.slice(0,groLen);
+                }
+                tempData.charts.chartConfig.namesub = [];
+                tempData.trendList.val.filter(function(item){
+                    var date = item.ds,gname = item.groupnames;
+
+                    if(tempData.grouped_List.indexOf(gname)>-1 || tempData.grouped_List.length == 0){
+                        var dateIdx = xKey.indexOf(date);
+                        tempData.rateListed.filter(function(rate){
+                            var format = tempData.trendList.format[rate];
+                            var chartname = gname + rate;
+                            if(tempData.grouped_List.length == 0){
+                                chartname = rate.substring(1); //因为加了下划线,要去掉
+                            }
+                            var dataIdx = temp.name.indexOf(chartname),dataArr = [];
+
+                            if(dataIdx == -1){
+                                temp.name.push(chartname);
+                                tempData.charts.chartConfig.namesub.push(format=='percent'?"%":"");
+                                dataArr = UtilService.cloneJSON(zero);
+                                temp.val.push(dataArr);
+                            }
+                            else{
+                                dataArr = temp.val[dataIdx];
+                            }
+
+                            var rateNum = Number(item[rate]);
+                            if(format == 'percent'){
+                                rateNum =  UtilService.decimal2(rateNum*100,2);
+                            }
+                            else if(format == 'int'){
+                                rateNum =  Math.round(rateNum);
+                            }
+                            else
+                            {
+                                rateNum =  UtilService.decimal2(rateNum,2);
+                            }
+
+                            dataArr[dateIdx] = rateNum;
+                        });
+                    }
+                });
+                tempData.charts.chartData = temp;
+                var klen = tempData.charts.chartData.key.length-1;
+                if(tempData.group_List.length>0 && tempData.charts.chartType=='columnstack'){
+                    var total = 0;
+                    tempData.charts.chartData.val.filter(function(item){
+                        total += item[item.length-1];
+                    });
+                    var obj = {seriesName:$scope.substrName(tempData.rateListed[0]),
+                               value:total,
+                               name:tempData.charts.chartData.key[klen]};
+                    tempData.tooltipChart.push(obj);
+                }else{
+                    tempData.charts.chartData.name.filter(function(item,index){
+                        var vlen = tempData.charts.chartData.val[index].length-1,
+                        obj = {seriesName:item,
+                                   value:tempData.charts.chartData.val[index][vlen],
+                                   name:tempData.charts.chartData.key[klen],
+                                   color:tempData.charts.chartConfig.color[index]};
+                        tempData.tooltipChart.push(obj);
+                    });
+                }
+            }
+            if(tempData.group_List.length>0 && tempData.charts.chartType!='table'){
+                tempData.selectName = tempData.grouped_List.length+"个分组";
+            }
+            if(tempData.group_List.length==0 || tempData.charts.chartType=='table'){
+                tempData.selectName = tempData.rateListed.length+"个指标";
+            }
+        }
+
+        $scope.$on("conentresize",function(){
+            if($scope.chartDatas && $scope.chartDatas.length>0){
+                $scope.chartDatas.filter(function(tempData){
+                    if(tempData.trendList){
+                        tempData.colsStyle = ToolService.getTableColsWidth(tempData.trendList.name,$scope.timeFlag,$scope.showCount);
+                        tempData.fixrefresh = ++rmd;
+                    }
+                });
+            }
+        });
+        $scope.orderCol = function(tempData,predicate, reverse) {
+            tempData.sortCol = predicate;
+            $scope.mysort(tempData.infoList, predicate, reverse);
+            tempData.fixrefresh = ++rmd;
+        };
+        $scope.mysort = function(tempArr,key,flag){
+            if (flag==true) {
+                tempArr.sort(function(x, y) {
+                    return x[key] == y[key] ? 0 : (x[key] > y[key] ? -1 : 1);
+                });
+            } else {
+                tempArr.sort(function(x, y) {
+                    return x[key] == y[key] ? 0 : (x[key] > y[key] ? 1 : -1);
+                });
+            }
+        }
+        //图表加显示指标
+        $scope.changeRate = function(tempData,rate){
+            if(!$scope.canAdd(tempData,1,rate)){return false;}
+
+            var idx = tempData.rateListed.indexOf(rate);
+            if(idx>-1){
+                tempData.rateListed.splice(idx,1);
+            }
+            else{
+                tempData.rateListed.push(rate);
+            }
+            $scope.changeChartData(tempData);
+        }
+        //图表加显示分组
+        $scope.changeGroup = function(tempData,group){
+            if(!$scope.canAdd(tempData,2,group)){return false;}
+
+            var idx = tempData.grouped_List.indexOf(group);
+            if(idx>-1){
+                tempData.grouped_List.splice(idx,1);
+            }
+            else{
+                tempData.grouped_List.push(group);
+            }
+            $scope.changeChartData(tempData);
+        }
+        //当前是否还能添加指标或者分组,flag:1指标,2分组
+        var lengedMax = 4;
+        $scope.canAdd = function(tempData,flag,cell){
+            var arr = [];
+            lengedMax = $scope.showCount==3?3:4;
+            if(flag==1){
+                arr = tempData.rateListed;
+            }
+            else{
+                arr = tempData.grouped_List;
+            }
+            var idx = arr.indexOf(cell);
+            if(idx==-1){
+                var rl = tempData.rateListed.length,gl = tempData.grouped_List.length;
+                if(tempData.charts.chartType == 'line'){
+                    if(flag == 1){
+                        return (rl+1)*(gl==0?gl+1:gl) <= lengedMax;
+                    }
+                    else{
+                        return rl*(gl+1)<= lengedMax;
+                    }
+                }else{
+                    if(flag == 1){
+                        return rl+1 <= (tempData.charts.chartType == 'columnstack'?2:(tempData.charts.chartType == 'pie'?1:tempData.rateList.length));
+                    }
+                    else{
+                        return gl+1 <= (tempData.charts.chartType == 'columnstack'?5:tempData.group_List.length);
+                    }
+                }
+
+            }
+            return true;
+        }
+        $scope.substrName = function(name){
+            return name.substring(1);
+        }
+        var changeChart = function(tempData){
+            $scope.changeChartData(tempData);
+            (function(tempData){
+                $scope.$on(tempData.charts.chartTypeId,function(e,msg){
+                   if(msg.info.id != tempData.charts.chartType && $scope.viewFlag==1){
+                       var changePM = HttpService.putInfo("custommenu/updateType/"+tempData.info.id+"?type="+msg.info.id,{});
+                       ToolService.showLoading();
+                       changePM.then(function(data){
+                           ToolService.hideLoading();
+                       },function(data){
+                           ToolService.hideLoading();
+                           ToolService.showTips(data.message);
+                       });
+                   }
+                   tempData.charts.chartType = msg.info.id;
+                   $scope.changeChartData(tempData);
+                });
+            })(tempData);
+        }
+        $scope.gotoDetail = function(temp){
+            if($scope.viewFlag!=1)return;
+            $state.go("collect."+temp.menuType,{pageid:temp.originalReportId});
+        }
+
+         $scope.percentPre = "rate_";//显示比例时的前缀
+        //onetemp 是为了添加成功后动态查询当前报表
+        $scope.query = function(onetemp){
+            if(!isinit){
+                isinit = !isinit;
+                return false
+            }
+            var templates = [];
+            if(onetemp){
+                if(angular.isUndefined($scope.chartDatas)){
+                    $scope.chartDatas = [];
+                }
+                templates = [onetemp];
+            }
+            else{
+                $scope.chartDatas = [];
+                templates = $scope.currentMenu.templates;
+            }
+            var myChartDatas = [];
+            var setLineData = function(data,tempData,type){
+                if(data.val && data.val.length>0){
+                    var lineData = data.val[0];
+                    if(type == 'funnel')
+                    {
+                        tempData.charts.chartData = ToolService.getFunnelData(lineData,data.key,data.eventname);
+                    }
+                    else if(type == 'retention')
+                    {
+                        tempData.charts.chartData.key = data.key.slice(1);
+                        var columns = data.columnkey,line = [];
+                        tempData.charts.chartData.name.push(lineData[columns[0]]);
+
+                        for(var i=2;i<columns.length;i++){
+                            line.push(lineData['rate_'+columns[i]]);
+                        }
+                        tempData.charts.chartData.val.push(line);
+                    }
+                    // else if(type == 'eventstats')
+                    // {
+                    //     lineData = data.val;
+                    //     tempData.charts.chartData.key = data.key;
+                    //     tempData.charts.chartData.name = data.name.slice(1);
+                    //     var columns = data.columnkey,line = [];
+
+                    //     lineData.filter(function(item){
+                    //         line.unshift(item[columns[1]]);
+                    //     });
+
+                    //     tempData.charts.chartData.val = [line];
+                    // }
+                    else if(type == 'eventstats')
+                    {
+
+                        var format = data.format,formatjson = {};
+                        if(format){
+                            format.filter(function(f){
+                                formatjson[f.field] = f.format;
+                            });
+                        }
+
+                        data.format = formatjson;
+                        tempData.trendList = data;
+                        tempData.totalList = data.totalval;
+                        tempData.infoList = data.val;
+                        tempData.eventChartLoading = false;
+
+                        tempData.rateList = data.selectfield;
+                        tempData.totalVal = {};
+                        tempData.rateList.filter(function(rate){
+                            tempData.totalList.filter(function(total){
+                                if(!tempData.totalVal[rate]){
+                                    tempData.totalVal[rate] = 0;
+                                }
+                                tempData.totalVal[rate] += total[rate];
+                            });
+                        });
+                        tempData.group_List = $scope.getGroupNames(tempData,data.groupfield);
+                        tempData.grouplen = data.groupfield.length;
+                        $scope.getChartTypeList(tempData);
+                        if(tempData.infoList.length>0){
+                            $scope.limit(tempData);
+                            if(tempData.group_List.length == 0){ //没有分组情况,不显示占比
+                                tempData.ispercent = false;
+                            }
+                            changeChart(tempData);
+                            if(tempData.group_List.length>0){
+                                tempData.dsList = [];
+                                tempData.trendList.key.filter(function(ds,index){
+                                    var dsObj = {id:index,name:ds,dsflag:'ds'};
+                                    tempData.dsList.unshift(dsObj);
+                                });
+                                tempData.dsInit = tempData.dsList[0].id;
+                                (function(tempData){
+                                    $scope.$on(tempData.dsId,function(e,msg){
+                                        tempData.ds = msg.info.name;
+                                        tempData.fixrefresh = ++rmd;
+                                    });
+                                })(tempData);
+                            }
+                            tempData.fixrefresh = ++rmd;
+                            tempData.initrefresh = ++rmd;
+                        }
+                    }
+                }
+                tempData.charts.chartLoading = false;
+            }
+
+            templates.filter(function(item,idx){
+                if(item.toShow!=false){
+                    var tempData = {info:item};
+                    tempData.charts = {
+                        chartConfig:{color:ToolService.getTenColors(),legend:false,issmart:true,namesub:[],id:item.menuType=='eventstats'?++rmd:""},
+                        chartLoading:true,
+                        chartData: ToolService.noDataChart(),
+                        rmd : ++rmd,
+                        chartTypeId: $scope.timeFlag+'_'+(++rmd),
+                        dsId : 'ds_'+(++rmd)
+                    };
+                    if(onetemp){
+                        $scope.chartDatas.push(tempData);
+                    }
+                    else{
+                        myChartDatas.push(tempData);
+                    }
+
+                    (function(item,idx,tempData){
+                        $timeout(function(){
+                            var type = item.menuType;
+                            tempData.charts.chartType = (type=='funnel' ? 'funnel' : 'line');
+                            //收藏和行业模板
+                            if(angular.isDefined(item.queryData)){
+                                setLineData(JSON.parse(item.queryData),tempData,type);
+                            }
+                            else{
+                                var chartPM = HttpService.getInfo("custommenu/report/"+$scope.appid+"/"+item.originalReportId,{startDate:$scope.date.startDate,endDate:$scope.date.endDate,menuType:type,viewFlag:$scope.timeFlag});
+                                chartPM.then(function(data){
+                                    setLineData(data,tempData,type);
+                                },function(data){
+                                    tempData.charts.chartLoading = false;
+                                });
+                            }
+                        },idx*200*(Math.ceil(idx+1)/4));
+                    })(item,idx,tempData);
+                }
+            });
+            if(!onetemp){
+                $scope.chartDatas = myChartDatas;
+            }
+        }
+        $rootScope.$on("tooltipObj",function(e,msg){
+            $timeout(function() {
+               if($scope.chartDatas && $scope.chartDatas.length>0){
+                     $scope.chartDatas.filter(function(temp){
+                          if(msg.id == temp.charts.chartConfig.id && temp.info.menuType=='eventstats'){
+                              temp.tooltipChart = [];
+                              if(temp.group_List.length>0 && temp.charts.chartType=='columnstack'){
+                                   var total = 0;
+                                   msg.objs.filter(function(item){
+                                       total += item.value;
+                                   });
+                                   var obj = {seriesName:$scope.substrName(temp.rateListed[0]),value:total,name:msg.objs[0].name}
+                                   temp.tooltipChart.push(obj);
+                              }else{
+                                   temp.tooltipChart = msg.objs;
+                              }
+                          }
+                     });
+               }
+           }, 100);
+        })
+        $scope.getFormatNumber = function(num){
+            if(num >= 100000000){
+                return UtilService.decimal2(num/100000000) + '亿';
+            }
+            else if(num >= 10000000){
+                return UtilService.decimal2(num/10000000) + '千万';
+            }
+            else if(num >= 1000000){
+                return UtilService.decimal2(num/1000000) + '百万';
+            }
+            else if(num >= 10000){
+                return UtilService.decimal2(num/10000) + '万';
+            }
+            else{
+                return num;
+            }
+        }
+        $scope.changeCount = function(){
+            if(!$scope.showCount || $scope.showCount==2){
+                $scope.showCount = 3;
+                $scope.chartDatas.filter(function(temp){
+                    if(temp.info.menuType=='eventstats' && temp.rateListed){
+                        var rateLen = temp.rateListed.length==0?1:temp.rateListed.length,
+                            groLen = temp.grouped_List.length==0?1:temp.grouped_List.length
+                        if(temp.charts.chartType == 'line' && rateLen*groLen>3){
+                            temp.rateListed = temp.rateList.slice(0,1);
+                            temp.grouped_List = temp.group_List.slice(0, 3);
+                            if(temp.grouped_List.length < 2){
+                                temp.rateListed = temp.rateList.slice(0,3);
+                            }
+                            $scope.changeChartData(temp);
+                        }
+                    }
+                });
+            }else{
+                $scope.showCount = 2;
+            }
+            $scope.$broadcast("conentresize",true);
+            $scope.chartDatas.filter(function(temp){
+                temp.fixrefresh = ++rmd;
+            });
+        }
+        $scope.checkAll = function(temp){
+            temp.ischeckall = !temp.ischeckall;
+            temp.grouped_List = temp.ischeckall?UtilService.cloneJSON(temp.group_List):[];
+            $scope.changeChartData(temp);
+        }
+        $scope.chartAllList = [{id:"line",name:"折线图",platform:"line"},
+                              {id:"columnstack",name:"柱状图",platform:"columnstack"},
+                              {id:"table",name:"表格",platform:"table"},
+                              {id:"pie",name:"饼状图",platform:"pie"}];
+        $scope.getChartTypeList = function(tempData){
+            if(tempData.rateList.length >= 1 && tempData.grouplen == 0){
+                tempData.chartList = $scope.chartAllList.slice(0,3);;
+                tempData.charts.chartType  =  "line";
+                tempData.charts.chartTypeInit = "line";
+            }
+            else if(tempData.rateList.length == 1 && tempData.grouplen > 0){
+                tempData.chartList = $scope.chartAllList.slice(0);
+            }
+            else if(tempData.rateList.length >1 && tempData.grouplen > 0){
+                tempData.chartList = $scope.chartAllList.slice(2,-1);
+                tempData.charts.chartType  =  "table";
+                tempData.charts.chartTypeInit = "table";
+            }
+            tempData.charts.chartType = tempData.info.type?tempData.info.type:tempData.charts.chartType;
+            tempData.charts.chartTypeInit = tempData.charts.chartType;
+        }
+        $scope.limit = function(tempData){
+            if(tempData.charts.chartType == 'line'){
+                tempData.rateListed = tempData.rateList.slice(0,1);
+                tempData.grouped_List = tempData.group_List.slice(0, 3);
+                if(tempData.grouped_List.length < 2){
+                    tempData.rateListed = tempData.rateList.slice(0,3);
+                }
+            }else if(tempData.charts.chartType == 'columnstack'){
+                tempData.rateListed = tempData.rateList.slice(0,2);
+                tempData.grouped_List = tempData.group_List.slice(0, 3);
+            }else if(tempData.charts.chartType == 'pie'){
+                tempData.rateListed = tempData.rateList.slice(0,1);
+                tempData.grouped_List = tempData.group_List.slice(0);
+            }else{
+                tempData.rateListed = tempData.rateList.slice(0);
+                tempData.grouped_List = tempData.group_List.slice(0);
+            }
+        }
+        //得到图的分组,同时处理成分页需要的数据格式
+        $scope.getGroupNames = function(tempData,gns){
+            var names = [],listArr = [];
+            if(gns.length == 0){ //没有分组情况下的处理
+                var hasgroup = tempData.trendList.groupfield.length>0;
+                tempData.trendList.val.filter(function(item,index){
+                    var listChild = {};
+                    if(!hasgroup){
+                        listChild = item;
+                    }
+
+                    if(item.firstDateRow){
+                        listChild.ds = item.ds;
+                        listChild.groupnames = item.ds;
+                        if(hasgroup){
+                            listChild.children = $scope.trendList.val.slice(index,index+item.rowNum);
+                        }
+                        else{
+                            listChild.rsnum = 1;
+                            listChild.isrs = true;
+                        }
+                        listArr.push(listChild);
+                    }
+                });
+            }
+            else{
+                tempData.trendList.val.filter(function(item,index){
+                    var temps = [],listChild = {};
+                    gns.filter(function(k){
+                        temps.push(item[k]);
+                    });
+
+                    var tn = temps.join(","),idx = names.indexOf(tn);
+                    item.groupnames = tn;
+                    if(idx == -1){
+                        names.push(tn);
+                    };
+
+                    if(item.firstDateRow){
+                        listChild.ds = item.ds;
+                        listChild.groupnames = tn;
+                        listChild.children = tempData.trendList.val.slice(index,index+item.rowNum);
+                        listArr.push(listChild);
+                    }
+
+                });
+            }
+            $scope.detailAllList = listArr;
+            if($scope.istranfer){
+                $scope.transformList();
+            }
+            else{
+                $scope.lsChange++;
+            }
+            return names;
+        }
+        $scope.$on("dragorder",function(event,msg){
+            ToolService.showLoading();
+            var url = "";
+            if(msg.flag == 'menu'){
+                url = "custommenu/updateIndex/"+$scope.appid+"/"+msg.id+"?index="+msg.index;
+            }
+            else{
+                url = "custommenu/updateIndex/"+msg.id+"?index="+msg.index;
+            }
+
+            var updatePM = HttpService.putInfo(url,{});
+            updatePM.then(function(){
+                if(msg.flag == 'menu'){
+                    $scope.lookMyMenu();
+                }
+                else{
+                    $scope.query();
+                }
+            },function(){
+                ToolService.hideLoading();
+            });
+
+        });
+
+        $scope.$watch("appid",function(n){
+            if(angular.isDefined($scope.appid)){
+                eventPM = null;
+                // 查询该用户是否有看单(我的看单和收藏)
+                var hasPM = HttpService.getInfo("custommenu/find/"+$scope.appid);
+                ToolService.showLoading();
+                hasPM.then(function(data){
+                    ToolService.hideLoading();
+                    if(data==true){
+                        $scope.lookMyMenu();
+                    }
+                    else{
+                        $scope.pageFlag = 1;
+                    }
+                });
+            }
+        });
+
+        $scope.$watch("date.startDate+date.endDate+timeFlag",function(){
+            if(angular.isDefined($scope.date) && $scope.pageFlag == 4){
+                $scope.query();
+            }
+        });
+    }
+})();
diff --git a/src/main/websrc/js/collect/eventstats.js b/src/main/websrc/js/collect/eventstats.js
new file mode 100644
index 0000000..f09410b
--- /dev/null
+++ b/src/main/websrc/js/collect/eventstats.js
@@ -0,0 +1,1871 @@
+(function(){
+    angular.module("app.collect")
+        .controller("eventstatsCtrl",["$scope","$rootScope","HttpService","ToolService","UtilService","$filter","$timeout","$stateParams","$q",eventstatsCtrl]);
+
+    String.prototype.visualLength = function()
+    {
+        var ruler = $("#ruler");
+        ruler.text(this);
+        return ruler.width();
+    }
+    function eventstatsCtrl($scope,$rootScope,HttpService,ToolService,UtilService,$filter,$timeout,$stateParams,$q){
+        $scope.formatList = [
+            {format:"percent",name:"百分比"},
+            {format:"float",name:"两位小数"},
+            {format:"int",name:"整数"}
+        ];
+        $scope.formatinitname = "整数";
+        $scope.groupbys = [];
+        $scope.dimensionname = "请选择分组";
+        $scope.dimenInit = "-all";
+
+        angular.element(document).on("click",function(){
+            $scope.$apply(function(){
+                $scope.showProList = false;
+                $scope.nowEvent = "";
+            });
+        });
+        $scope.getwidth = function(name){
+            return ToolService.getByteLen(name)*6;
+        }
+        //得到最后一次出现加减乘除符号的下标
+        var getLastIndex = function(str,reg){
+            if(!str)return;
+            var len = str.length,index = 0;
+            if(len>0){
+                index = str.split("").reverse().join("").search(reg?reg:regexp);
+                if(index > -1){
+                    index = len - index - 1;
+                }
+            }
+            return index;
+        }
+        var ischrome = UtilService.getBrowser().indexOf('Chrome')>-1;
+        $scope.changeExpression = function(ex,index,event){
+            $scope.expressionObj = index>=0?document.getElementById("expression_"+index):$scope.expressionObj;
+            var focusIndex = sectionTool.getCursortPosition($scope.expressionObj),
+                value = ex.expressionName?ex.expressionName:"";
+            value = value.substring(0, focusIndex);
+            var s1 = value.substring(getLastIndex(value),focusIndex),filterTxt = "";
+            $scope.currentIndex = index;
+            //如果第一个字符是计算字符,减去,以便过滤等
+            if(getLastIndex(s1) == s1.length-1){
+                s1 = s1.substring(1);
+            }
+
+            var showList = function(){
+                $scope.showProList = true;
+
+                var boxXY = document.getElementById("evtBox").getBoundingClientRect(),
+                    preTxt = $scope.expressionObj.value.substring(0,focusIndex),
+                    mx = preTxt.visualLength() - $scope.expressionObj.scrollLeft,
+                    inputXY = $scope.expressionObj.getBoundingClientRect(),
+                    // top = inputXY.top + inputXY.height - boxXY.top + $(".rightWrap").scrollTop(),
+                    top = inputXY.top + inputXY.height - boxXY.top,
+                    len = filterTxt.visualLength();
+
+                var left = inputXY.left - boxXY.left + mx - len+13;
+                if(!ischrome){
+                    left -=16;
+                    if($scope.expressionObj.scrollLeft>36){
+                        if(focusIndex == $scope.expressionObj.value.length){
+                            left -= 36;
+                        }
+                        else{
+                            left -= 10;
+                        }
+                    }
+                }
+                document.getElementById('optionList').style.left = left + "px";
+                document.getElementById('optionList').style.top = top + "px";
+            }
+            $scope.eventIndex = -1;
+            $(".optionList ul").scrollTop(0);
+            $scope.nowEvent = "";
+            if(s1.indexOf(".")==-1){
+                $scope.epropertyList = $scope.eventList;
+                filterTxt = s1;
+                var filterIndex = filterTxt.search(regexp);
+                if(filterIndex>-1){
+                    filterTxt = filterTxt.slice(filterIndex+1);
+                }
+                $scope.typeName = eval(['自然事件','虚拟事件']);
+                $scope.typeKey = eval(['nature','virtual']);
+            }
+            else{
+                //根据截图的数据来判断当前段有几个.,以此来判断是到事件的第几级
+                $scope.typeName = [];
+                $scope.typeKey = [];
+                var count = s1.match(/\./g).length;
+
+                filterTxt = s1.substring(s1.lastIndexOf(".")+1);
+                if(count == 1){
+                    var findex = s1.split("").join("").search(regexp),start = 0;
+                    if(findex == 0){
+                        start = 1;
+                    }
+                    var tn = s1.substring(start,s1.indexOf("."));
+                    $scope.getEventName(tn);
+                    $scope.getAttrByEvent($scope.selectEvent,showList);
+                }
+                else if(count == 2){
+                    var findex = s1.split("").join("").search(regexp),start = 0,fd = s1.indexOf(".");
+                    if(findex == 0){
+                        start = 1;
+                    }
+                    var en = s1.substring(start,fd),pn = s1.substring(fd+1,s1.lastIndexOf("."));
+                    $scope.getEventName(en);
+
+                    $scope.getAttrByEvent($scope.selectEvent,function(list){
+
+                        for(var m=0;m<list.length;m++){
+                            if(list[m].name == pn){
+                                $scope.selectAttr = list[m];
+                                break;
+                            }
+                        }
+
+                        if(list.length>0 && $scope.selectAttr && !$scope.selectAttr.isleaf){
+                            var kpiList = $scope.kpiList.filter(function(item){
+                                return item.viewType == $scope.selectAttr.type || item.viewType == "all";
+                            });
+                            $scope.showProList = true;
+                            $scope.epropertyList = kpiList;
+                        }
+                        else{
+                            $scope.epropertyList = [];
+                        }
+                    },1);
+                }
+                else{
+                    $scope.epropertyList = [];
+                }
+            }
+
+            if($scope.epropertyList.length>0 && ((event && !event.isleaf) || !event)  ){
+                showList();
+            }
+            else{
+                $scope.showProList = false;
+            }
+            $scope.filterSearch = filterTxt;
+            $scope.currentExpression = ex;
+
+        }
+        $scope.getEventName = function(name){
+            for(var i=0;i<$scope.eventList.length;i++){
+                if($scope.eventList[i].name == name){
+                    $scope.selectEvent = $scope.eventList[i];
+                    break;
+                }
+            }
+        }
+        $scope.$watch("filterSearch",function(n){
+            if(angular.isUndefined(n) || !n){return false;}
+            $scope.virtual = "";
+            $scope.nature = "";
+            $scope.epropertyList.filter(function(item){
+                if(angular.uppercase(item.name).indexOf(angular.uppercase(n))>-1 && item.type=="virtual"){
+                    $scope.virtual = item.type;
+                }
+                if(angular.uppercase(item.name).indexOf(angular.uppercase(n))>-1 && item.type=="nature"){
+                    $scope.nature = item.type;
+                }
+            });
+        });
+        $scope.expresstionTransform = function(n){
+            var par = {
+                expression:n.expressionName,
+                appkey:$scope.appid
+            }
+            var validPM = HttpService.postInfo("expression/transform",par);
+            var temp = n;
+            validPM.then(function(data){
+                temp.error = false;
+                if(data.code == 11000){
+                    temp.error = true;
+                }else{
+                    temp.error = false;
+                    temp.expression = data;
+                }
+            },function(){
+                temp.error = true;
+            });
+
+        }
+        $scope.showFlow = true;
+        $scope.changeFlow = function(flag){
+            if(flag == 1){
+                $scope.showFlow = false;
+            }
+            else{
+                $scope.showFlow = true;
+            }
+        }
+        $scope.$watch("currentExpression",function(n,o){
+            if(angular.isUndefined(n) || !n){return false;}
+            if(!n.expressionName){
+                $scope.changeExpression(n,$scope.currentIndex);
+                return;
+            }
+            if(!o || (n == o) || (n && o && n.expressionName==o.expressionName))return;
+            $scope.expresstionTransform(n);
+            var name = n.expressionName;
+            if(getLastIndex(name) == name.length-1 || name.slice(-1)=="."){
+                $scope.changeExpression(n,$scope.currentIndex);
+            }
+        },true);
+        var regexp =  /[\+\-\*\/\(\)]/g;
+        //需要考虑怎么存储点击的事件数据,这样下次定光标的时候可以获取到前面的事件实时查询当前的属性等
+        $scope.getProperty = function(event){
+            var focusIndex = $scope.expressionObj.selectionStart,
+                value = $scope.currentExpression.expressionName?$scope.currentExpression.expressionName:"";
+
+            var val1 = value.substring(0,focusIndex),val2 = value.substring(focusIndex),attrType="",isleaf="";
+            var reg =  /[\+\-\*\/\(\)\.]/g;
+            val1 = val1.slice(0,getLastIndex(val1,reg)+1);
+
+            for (var i = 0; i < $scope.epropertyList.length; i++) {
+                var index = val2.search(regexp);
+                var attr = "";
+                if(val2.indexOf(".") < index){
+                    attr = val2.slice(0,val2.indexOf("."));
+                }else if(val2.indexOf(".") > index){
+                    attr = val2.slice(0,index);
+                }else{
+                    attr = val2.slice(0);
+                }
+
+                if(attr == $scope.epropertyList[i].name){
+                    attrType = $scope.epropertyList[i].type;
+                    isleaf = $scope.epropertyList[i].isleaf;
+                    break;
+                }
+            }
+            if(val2.indexOf(".")!=0 && !event.viewType){
+                var index = val2.search(regexp);
+                if((index == -1 && val2.indexOf(".") > -1 ) || (val2.indexOf(".") > -1 && index > -1 && val2.indexOf(".") < index)){
+                    val2 = val2.substring(val2.indexOf("."));
+                }else{
+                    val2 = "." + val2;
+                }
+            }
+
+            //这里需要修改,要判断当前数据情况进行插入
+            if(attrType && event.type != attrType && !event.isleaf || event.isleaf || isleaf){
+                var index = val2.search(regexp);
+                if(!event.isleaf && !isleaf){
+                    val2 = "."+val2.substring(index);
+
+                }else{
+                    val2 = (event.isleaf?"":".")+(index>-1?val2.substring(index):"");
+                }
+
+            }
+
+            $scope.currentExpression.expressionName = val1 + event.name + val2;
+            $scope.expressionObj.value = $scope.currentExpression.expressionName;
+            var bstr = val1 + event.name;
+            var len = bstr[bstr.length-1]=="." || event.viewType || event.isleaf?bstr.length:(bstr.length+1);
+            sectionTool.setCaretPosition($scope.expressionObj,len);
+            $scope.selectEvent = !event.type && !event.isleaf?event:$scope.selectEvent;
+            $scope.selectAttr = event.type && !event.isleaf?event:$scope.selectAttr;
+            $timeout(function(){
+                $scope.changeExpression($scope.currentExpression,-1,event);
+            },100);
+        }
+        $scope.watchKey = function(n,e){
+
+            if(e.keyCode == 37 || e.keyCode == 39){
+                var timer = $timeout(function() {
+                    $scope.changeExpression(n,$scope.currentIndex);
+                }, 100);
+                timer.then(function(){
+                    $timeout.cancel(timer);
+                });
+
+            }
+            if(e.keyCode == 40){
+                e.preventDefault();
+                $scope.eventIndex++;
+                $scope.eventIndex = $scope.eventIndex<$scope.epropertyList.length?$scope.eventIndex:0;
+                $(".optionList ul").scrollTop(34*($scope.eventIndex==0?1:$scope.eventIndex));
+                $scope.nowEvent = $scope.epropertyList[$scope.eventIndex];
+            }
+            if(e.keyCode == 38){
+                e.preventDefault();
+                $scope.eventIndex--;
+                $scope.eventIndex = $scope.eventIndex<0?$scope.epropertyList.length-1:$scope.eventIndex;
+                $(".optionList ul").scrollTop(34*($scope.eventIndex==0?1:$scope.eventIndex));
+                $scope.nowEvent = $scope.epropertyList[$scope.eventIndex];
+            }
+
+        }
+        $(document).keydown(function(event){
+            if(event.keyCode == 13 && $scope.nowEvent){
+                $scope.getProperty($scope.nowEvent);
+            }
+        });
+        var fid = $stateParams.pageid;
+        var rmd = new Date().getTime();
+        var commonEventPros = [];
+        var eventPM = null;
+        $scope.queryInfoByApp = function(flag,dID){
+            if(angular.isUndefined(flag) || flag==5){
+                //app下所有事件
+                eventPM = HttpService.getInfo($scope.appid +"/event/find/virtual");
+                eventPM.then(function(data){
+                    $scope.eventList = [];
+                    angular.forEach(data,function(item){
+                        var event = {};
+                        event.id = item.eventName;
+                        event.name = item.eventNameAlias;
+                        event.type = item.virtual?"virtual":"nature";
+                        $scope.eventList.push(event);
+
+                    });
+                });
+
+                $scope.haslist = function(type){
+                    if(!$scope.eventList){return false;}
+
+                    var bol  = false;
+                    for(var i=0;i<$scope.eventList.length;i++){
+                        if($scope.eventList[i].type== type){
+                            bol = true;
+                            break;
+                        }
+                    }
+                    return bol;
+                }
+                var fixedAttrPM = HttpService.getInfo("expression/viewList");
+                fixedAttrPM.then(function(data){
+                    $scope.kpiList = [];
+                    $scope.fixedAttrList = data.eventViewList;
+
+                    commonEventPros = [];
+                    angular.forEach($scope.fixedAttrList,function(item,index){
+                        var event = {};
+                        event.id = item.viewAttr;
+                        event.name = item.viewAttrName;
+                        event.isleaf = true;
+                        if(index==$scope.fixedAttrList.length-1){
+                            event.border = true;
+                        }
+                        commonEventPros.push(event);
+                    });
+
+                    angular.forEach(data.attrViewList,function(item){
+                        var event = {};
+                        event.id = item.viewAttr;
+                        event.name = item.viewAttrName;
+                        event.viewType = item.viewType;
+                        event.isleaf = true;
+                        $scope.kpiList.push(event);
+
+                    });
+                });
+                //分组
+                var profilePM = HttpService.getInfo($scope.appid+"/event/find/group/properties");
+                profilePM.then(function(data){
+                    $scope.dimensionList = data;
+                });
+                //通用属性
+                var profilePM = HttpService.getInfo($scope.appid+"/event/find/common/properties");
+                profilePM.then(function(data){
+                    $scope.commonAttrList = data;
+                });
+            }
+
+            var definePM = HttpService.getInfo("mng/eventstats/complicated/findAll/"+$scope.appid);
+            $scope.define = {};
+            definePM.then(function(data){
+                $scope.defineList = data;
+                if(data.length>0){
+                    $scope.addFirst = false;
+                    if(!UtilService.isNullStr(fid)){
+                        dID = fid;
+                    }
+                    if(dID){ //修改自定义事件
+                        for(var i=0;i<$scope.defineList.length;i++){
+                            if($scope.defineList[i].id == dID){
+                                $scope.define = $scope.defineList[i];
+                                break;
+                            }
+                        }
+                        if(!UtilService.isNullStr(fid)){
+                            $scope.clickDefine($scope.define);
+                            fid = null;
+                        }
+                        else{
+                            $scope.defineFlag = ++rmd;
+                        }
+                    }
+                    else{
+                        $scope.clickDefine(data[0]);
+                    }
+                }
+                else{
+                    var oldPM = HttpService.getInfo("mng/eventstats/complicated/show/import");
+                    ToolService.showLoading();
+                    oldPM.then(function(data){
+                        ToolService.hideLoading();
+                        if(typeof data.content !='undefined'){
+                            $scope.isold = data.content;
+                        }
+                        else{
+                            $scope.isold = data;
+                        }
+                    });
+                }
+            });
+        }
+        $scope.importOld = function(){
+            var importPM = HttpService.putInfo("mng/eventstats/complicated/import/old/data");
+            ToolService.showLoading();
+            importPM.then(function(data){
+                ToolService.hideLoading();
+                $scope.queryInfoByApp(1);
+            });
+        }
+        var doDevice = ['_count_user','_count_avg'];
+        $scope.$watch("define",function(obj){
+            if(obj && obj.id){
+                $scope.isEditInfo = true;
+            }
+        });
+        $scope.addTitName = "新建事件统计细分";
+        $scope.getTrendTitle = function(){
+            if($scope.showTempLook){
+                return $scope.addTitName + "的趋势";
+            }
+            else if($scope.define && $scope.define.id){
+                return $scope.define.name + "的趋势";
+            }
+            else{
+                return "事件趋势";
+            }
+        }
+
+        //已保存的事件
+        $scope.definename = "请选择事件";
+        $scope.clickDefine = function(m){
+            $scope.define = m;
+            $scope.defineFlag = ++rmd;
+            $scope.isEditInfo = true;
+            $scope.isShowCache = false;
+
+            $rootScope.thirdtab = m.name;
+        }
+        $scope.deleteDefine = function(d){
+            $scope.delDefine = d;
+            ToolService.showAlp();
+            ToolService.showLoading();
+            var validPM = HttpService.getInfo("custommenu/delete/valid/"+d.id+"?type=eventstats");
+            validPM.then(function(data){
+                ToolService.hideLoading();
+                $scope.wantDelete = true;
+                $scope.custommenus = angular.isArray(data) && data.length>0?data:false;
+            });
+        }
+        $scope.doDelete = function(){
+            $scope.closeWin();
+            ToolService.showLoading();
+            var deletePM = HttpService.deleteInfo("mng/eventstats/complicated/delete/"+$scope.delDefine.id);
+            deletePM.then(function(){
+                ToolService.showTips("删除成功");
+                $scope.queryInfoByApp(1);
+                ToolService.hideLoading();
+            });
+        }
+
+        $scope.date = ToolService.getLastDays(-7,0);
+        $scope.timeFlag='day';
+        $scope.disTimeFlag = ['hour'];
+        $scope.changeTimeFlag = function(flag){
+            if($scope.disTimeFlag.indexOf(flag)>-1){return false;}
+
+            $scope.timeFlag = flag;
+        }
+        $scope.$on("dateCustos",function(e,msg){
+            if(msg.startDate == msg.endDate){
+                $scope.disTimeFlag = ["week","month"];
+            }
+            else{
+                $scope.disTimeFlag = ["hour"];
+
+            }
+            if($scope.disTimeFlag.indexOf($scope.timeFlag)>-1){
+                $scope.timeFlag = 'day';
+            }
+            $scope.date = msg;
+        });
+        $scope.$watch("date",function(){
+            if(angular.isDefined($scope.date)){
+                $scope.datestr = $scope.date.startDate + "至" + $scope.date.endDate;
+            }
+        });
+
+        var proertyCollection = {},lastid = -1;
+        $scope.getAttrByEvent = function(event,callback,flag){
+            // ToolService.showLoading();
+            if(!event || event.isleaf){
+                $scope.epropertyList = [];
+                callback && callback([]);
+                return false;
+            };
+
+            var myPropertys = function(profiles){
+                var tempList = UtilService.cloneJSON(commonEventPros);
+                angular.forEach(profiles,function(item){
+                    var event = {};
+                    event.id = item.attr;
+                    event.name = item.attrAlias;
+                    event.type = item.webType || item.dataType;
+                    tempList.push(event);
+
+                });
+                if(flag){ //此种情况是直接匹配获取相应的属性指标
+                    callback && callback(tempList);
+                }
+                else{
+                    $scope.epropertyList = tempList;
+                    callback && callback(tempList);
+                }
+            }
+            $scope.epropertyList = [];
+
+            if(proertyCollection[event.id]){
+                myPropertys(proertyCollection[event.id]);
+                $scope.attrShow = true;
+            }
+            else{
+                //阻止重复发送事件
+                if(lastid == event.id && flag!=2){return false;} //flag:2,编辑时需要发送
+
+                lastid = event.id;
+                var evtprofilePM = HttpService.getInfo("expression/properties/"+event.id+"/"+$scope.appid);
+
+                evtprofilePM.then(function(pros){
+                    var properties = orderBy(pros,"sortId");
+                    myPropertys(properties);
+                    proertyCollection[event.id] = properties;
+                });
+            }
+        }
+
+        $scope.changeEvent = function(event,obj){
+
+            if(obj){ //编辑查找
+                $scope.eventRel = obj.relation;
+            }
+
+            var set = function(){
+                $scope.event = {
+                    id:"evt_"+rmd,
+                    params:[],
+                    paramsList:$scope.commonAttrList
+                }
+
+                if(obj){
+                    $timeout(function(){
+                        $scope.propertyInit = obj.viewField;
+                        $scope.prorefresh = ++rmd;
+                        $scope.event.secondval = obj.fieldOperate;
+                        obj.params.filter(function(pitem){
+                            $scope.addEventParams($scope.event,pitem);
+                        });
+                    });
+                }
+            }
+            set();
+        }
+        $scope.eventinitname = "请选择事件";
+        $scope.eventRel = "and";
+        $scope.changeRel = function(){
+            $scope.eventRel = $scope.eventRel == "and" ? "or" : "and";
+        }
+        $scope.initCondition = function(){
+            if($scope.event.id){
+                $scope.initComplexEvent();
+            }
+        }
+        $scope.changeForm = function(ex){
+            $scope.nowEvent = "";
+            ex.expression = !ex.expression;
+            if(ex.expression){
+                if(ex.operator){
+                    var events = [], pros = [], target = [], proStr = "", tarStr = "";
+                    if(ex.event){
+                        events = $scope.eventList.filter(function(item){
+                            return ex.event == item.id;
+                        });
+                    }
+                    var pro = ex.property || ex.operator;
+                    if(pro){
+                        pros = ex.epropertyList.filter(function(item){
+                            return pro == item.id;
+                        });
+                        proStr = "."+pros[0].name;
+                    }
+                    if(ex.operator && ex.property){
+                        target = ex.targetList.filter(function(item){
+                            return ex.operator == item.id;
+                        });
+                        tarStr = "."+target[0].name;
+                    }
+
+
+                    ex.expressionName = events[0].name+proStr+tarStr;
+                }else{
+                    ex.expressionName = $scope.eventList[0].name+".总次数/"+$scope.eventList[0].name+".用户数";
+                }
+                $scope.expresstionTransform(ex);
+            }else{
+                ex.extip = "";
+            }
+
+        };
+        $scope.showEventWin = false;
+        $scope.currentEvent = [];
+        $scope.addComplexEvent = function(flag,n){
+            var cache = UtilService.getItem($scope.appid);
+            if(flag==1 || cache){ //编辑
+                if(!$scope.define.id && !$scope.isShowCache){return false;}
+                $scope.isShowCache = flag==0 || n;
+                if(!$scope.isShowCache){
+                    $scope.currentDefine = $scope.define;
+                    $scope.ename = $scope.define.name;
+                }else{
+                    $scope.currentDefine = {};
+                }
+                var eventCondition = $scope.isShowCache?JSON.parse(cache):JSON.parse($scope.currentDefine.eventCondition);
+                $scope.isEditInfo = true;
+
+            }
+            else{
+                $scope.currentDefine = {};
+                $scope.isEditInfo = false;
+                $scope.isShowCache = false;
+            }
+            $scope.initComplexEvent(flag,eventCondition);
+            $scope.showEventWin = true;
+        }
+        $scope.initComplexEvent = function(flag,eventCondition){
+            $scope.currentEvent.filter(function(item){
+                item.show = false;
+            });
+            $scope.groupbys.filter(function(item){
+                item.show = false;
+            });
+            if(eventCondition){
+                ToolService.showLoading();
+                $q.all([eventPM]).then(function(data){
+                    var eventInfo = eventCondition;
+                    eventInfo.expressions.filter(function(e){
+                        $scope.addEvents(e);
+                    });
+                    eventInfo.group.filter(function(e){
+                        $scope.addGroupby(e);
+                    });
+                    ToolService.hideLoading();
+                });
+                var attrs = [];
+                eventCondition.params.filter(function(e){
+                    attrs.push(e.attr);
+                });
+                if(attrs.length>0){
+                    var profilePM = HttpService.getInfo($scope.appid+"/event/find/value/attrs?attrNames="+attrs.join(","));
+                    profilePM.then(function(pros){
+                        var prosInfo = pros;
+                        $scope.commonAttrList.filter(function(item){
+                            var valueJSON = prosInfo[item.attr];
+                            if(valueJSON && valueJSON.key){
+                                item.key = valueJSON.key;
+                            }
+                            if(valueJSON && valueJSON.value){
+                                item.value = valueJSON.value;
+                            }
+
+                        });
+                        $scope.changeEvent(null,eventCondition);
+
+                    });
+                }
+
+            }else{
+                $scope.addEvents();
+            }
+            $scope.event = {
+                id:"evt_"+rmd,
+                params:[],
+                relation:$scope.eventRel,
+                paramsList:$scope.commonAttrList
+            }
+        }
+        $scope.addFirst = false;
+        $scope.addFirstEvent = function(){
+            $scope.addFirst = true;
+            $scope.showEventWin = true;
+            $scope.currentDefine = {};
+            $scope.initComplexEvent();
+        }
+        $scope.closeAddWin = function(){
+            $scope.showEventWin = false;
+            $scope.addFirst = false;
+            $scope.isEditInfo = true;
+        }
+        $scope.maxparams = 10;
+        $scope.maxevents = 10;
+        $scope.maxgroupbys = 3;
+        $scope.addGroupby = function(obj){
+            if($scope.getGroupByNum()>=$scope.maxgroupbys)return;
+            ++ rmd;
+            var temp = {id:"gby_"+rmd,dimensionId:"groupby_"+rmd,show:true};
+            if(obj){
+                for(var k in obj){
+                    temp[k] = obj[k];
+                }
+                temp.dimenInit = obj.name;
+            }
+            (function(temp){
+                $scope.$on(temp.dimensionId,function(e,msg){
+                    temp.dimenId = msg.info.param;
+                    temp.type = msg.info.type;
+                });
+            })(temp);
+            $scope.groupbys.push(temp);
+        }
+        $scope.addEvents = function(obj){
+            if($scope.getEventNum()>=$scope.maxevents)return;
+            ++rmd;
+            var temp = {id:"evt_"+rmd,relation:"and",format_id:"for_"+rmd,show:true,
+                        eventId:"event_"+rmd,propertyId:"pro_"+rmd,targetId:"tar_"+rmd};
+            if(obj){
+                for(var k in obj){
+                    temp[k] = obj[k];
+                }
+                temp.formatInit = obj.format;
+                temp.eventInit = obj.event;
+                temp.event = obj.event;
+                temp.propertyinit = obj.attr?obj.attr:obj.operator;
+                temp.targetinit = obj.operator;
+            }
+
+            (function(temp){
+                var event_name = "", pro_name = "", target_name ="";
+                $scope.$on(temp.format_id,function(e,msg){
+                    temp.formatId = msg.info.format;
+                });
+                $scope.$on(temp.eventId,function(e,msg){
+                    if(temp.event && msg.info.id != temp.event){
+                        temp.prorefresh = ++rmd;
+                        temp.propertyinit = -1;
+                        temp.tarrefresh = ++rmd;
+                        temp.targetinit = -1;
+                        temp.operator = "";
+                        temp.property = "";
+                        if(!obj){
+                           temp.name = "";
+                        }
+                    }
+                    temp.event = msg.info.id;
+                    $scope.getAttrByEvent(msg.info,function(list){
+                        temp.epropertyList = list;
+                    },2);
+                    temp.propertyShow = true;
+                    temp.targetShow = false;
+                    temp.propertyinitname = "请选择事件属性";
+                    event_name = msg.info.name;
+
+                });
+                $scope.$on(temp.propertyId,function(e,msg){
+                    var evObj = {id:temp.event};
+                    if(!msg.info.isleaf){
+                        temp.targetinitname = "请选择属性指标";
+                        temp.operator = "";
+                        if(temp.property && msg.info.id != temp.property){
+                            temp.tarrefresh = ++rmd;
+                            temp.targetinit = -1;
+                            if(!obj){
+                               temp.name = "";
+                               target_name = "";
+                            }
+                        }
+                        $scope.getAttrByEvent(evObj,function(list){
+                            var proObj = list.filter(function(item){
+                                return msg.info.id == item.id;
+                            });
+                            var kpiList = $scope.kpiList.filter(function(item){
+                                return item.viewType == proObj[0].type || item.viewType == "all";
+                            });
+                            temp.targetList = kpiList;
+                            temp.targetShow = true;
+                        },1);
+                        temp.property = msg.info.id;
+                        pro_name = msg.info.name;
+                        if(!obj){
+                           temp.name = target_name?(event_name + pro_name + target_name):"";
+                        }
+                    }else{
+                        temp.operator = msg.info.id;
+                        temp.targetShow = false;
+                        temp.targetinit = "";
+                        temp.property = "";
+                        if(!obj){
+                            temp.name = event_name + msg.info.name;
+                            target_name = "";
+                        }
+                    }
+
+                });
+                $scope.$on(temp.targetId,function(e,msg){
+                    temp.operator = msg.info.id;
+                    temp.targetShow = true;
+                    target_name = msg.info.name;
+                    if(!obj){
+                        temp.name = event_name + pro_name + msg.info.name;
+                    }
+                });
+            })(temp);
+            $scope.currentEvent.push(temp);
+        }
+        $scope.getEventParamsNum = function(event){
+            if(!event || !event.params){return $scope.maxparams;}
+
+            var eps = event.params.filter(function(item){
+                return item.show!=false;
+            });
+            return eps.length;
+        }
+        $scope.getEventNum = function(event){
+            var eps = $scope.currentEvent.filter(function(item){
+                return item.show!=false;
+            });
+            return eps.length;
+        }
+        $scope.getGroupByNum = function(event){
+            var eps = $scope.groupbys.filter(function(item){
+                return item.show!=false;
+            });
+            return eps.length;
+        }
+        $scope.addEventParams = function(event,obj){
+            if(!event || !event.params || $scope.getEventParamsNum(event)>=$scope.maxparams){return false;};
+            rmd ++;
+            var tempparam = {id:"pam_"+rmd,pid:"param_"+rmd};
+            if(obj){
+                for(var k in obj){
+                    tempparam[k] = obj[k];
+                }
+            }
+            $scope.event.params.push(tempparam);
+        }
+        $scope.removeEvent = function(e){
+            for(var i=0;i<$scope.currentEvent.length;i++){
+                if($scope.currentEvent[i].id == e.id){
+                    $scope.currentEvent[i].show = false;
+                    break;
+                }
+            }
+            $scope.eventLen = $scope.groupbys.length-1;
+        }
+        $scope.removeGroupby = function(g){
+            for(var i=0;i<$scope.groupbys.length;i++){
+                if($scope.groupbys[i].id == g.id){
+                    $scope.groupbys[i].show = false;
+                    break;
+                }
+            }
+        }
+        $scope.removeEventParams = function(event,param){
+            for(var i=0;i<event.params.length;i++){
+                if(event.params[i].id == param.id){
+                    event.params[i].show = false;
+                    break;
+                }
+            }
+        }
+        $scope.$on("event",function(e,msg){
+            var params = $scope.event.params;
+            for(var j=0;j<params.length;j++){
+                if(params[j].id == msg.id){
+                    params[j] = msg;
+                    break;
+                }
+            }
+        });
+
+        $scope.nameWin = function(flag){
+            var eventInfo = $scope.getReportEventInfo();
+            if(eventInfo.hasNull){
+                ToolService.hideLoading();
+                ToolService.showTips($scope.formTipMsg);
+                return false;
+            }
+            ToolService.showAlp();
+            $scope.wantSave = true;
+
+            $scope.currentDefine = {};
+            $scope.ename = "";
+            $scope.isotherSave = false;
+            if(angular.isDefined(flag)){ //编辑
+                $scope.currentDefine = {id:0};
+                $scope.isotherSave = true;
+            }
+        }
+        $scope.lookReport = function(){
+            var eventInfo = $scope.getReportEventInfo(),condition="";
+            if(!eventInfo.hasNull){
+                condition = JSON.stringify(eventInfo);
+                UtilService.setItem($scope.appid,condition);
+                $scope.isShowCache = true;
+                $scope.query(condition);
+            }
+            else{
+                ToolService.showTips($scope.formTipMsg);
+                return false;
+            }
+        }
+        $scope.closeWin = function(flag){
+            $scope.wantSave = false;
+            $scope.wantDelete = false;
+            if(flag){
+                if(flag == 2 && $scope.isotherSave){
+                    $scope.currentDefine = $scope.define;
+                }
+            }
+            ToolService.hideAlp();
+        }
+        $scope.getReportEventInfo = function(){
+            var hasNull = false;
+            var expressions = [] , group = [],
+                eventInfo = {relation:$scope.eventRel,params:[]};
+            $scope.currentEvent.filter(function(item){
+                if(item.show){
+                    var obj = {};
+                    if(item.expression){
+                        obj.expressionName = item.expressionName;
+                        obj.format = item.formatId?item.formatId:"int";
+                        obj.expression = item.expression;
+                        var exLen = item.expressionName.match(/[\+\-\*\/]/g);
+                        item.extip = exLen && exLen.length>5?"表达式最多可输入5个运算符(运算符包括+-*/)":"";
+                        if(item.expressionName){
+                            $scope.expresstionTransform(item);
+                        }
+                        item.error = !item.error && item.expressionName && !item.extip?false:true;
+                    }else{
+                        var e = $scope.eventList.filter(function(e){
+                            return e.id == item.event;
+                        });
+                        obj.attr = item.property,
+                        obj.event = item.event,
+                        obj.operator = item.operator;
+                        item.proerror = (!item.property && item.operator) || item.property ?false:true;
+                        item.eventerror = e.length>0 && item.event?false:true;
+                        item.tarerror = item.operator?false:true;
+                    }
+                    obj.name = item.name;
+                    var verPar = {
+                        name: {
+                            key: 'spcname',
+                            val: item.name
+                        }
+                    };
+                    item.tip = formJudge(verPar);
+                    item.nameerror = item.name && item.tip.succ?false:true;
+
+                    var existName = $scope.currentEvent.filter(function(event){
+                        return event.name == item.name && event.id!=item.id && event.show;
+                    });
+                    if (existName && existName.length>0) {item.nameerror=true;}
+                    if(item.nameerror || item.error || item.proerror
+                        || item.eventerror || item.tarerror){
+                            hasNull = true;
+                    }
+                    expressions.push(obj);
+
+                }
+            });
+            $scope.groupbys.filter(function(item){
+                if(item.show){
+                    var obj = {};
+                    obj.name = item.dimenId;
+                    obj.type = item.type;
+                    item.groerror = item.dimenId?false:true;
+                    var existGroup = $scope.groupbys.filter(function(gro){
+                        return gro.dimenId == item.dimenId && gro.id != item.id && gro.show && item.type == gro.type;
+                    });
+                    if (existGroup && existGroup.length>0) {item.groerror=true;}
+                    if(item.groerror){
+                        hasNull = true;
+                    }
+                    group.push(obj);
+                }
+            });
+            eventInfo.expressions = expressions;
+            eventInfo.group = group;
+            $scope.event.params.filter(function(pm){
+                if(pm.show!=false){
+                    if(UtilService.isNullStr(pm.attr)){
+                        $scope.$broadcast(pm.id, "error");
+                        hasNull = true;
+                    }
+                    var pms = {};
+                    for(var k in pm){
+                        if(k!='id' && k!='pid'){
+                            if(k!='value'){
+                                pms[k] = pm[k];
+                            }else{
+                                pms[k] = pm[k].join(",");
+                            }
+                            if(UtilService.isNullStr(pm[k])){
+                                $scope.$broadcast(pm.id, "error");
+                                hasNull = true;
+                            }
+                        }
+                    }
+                    eventInfo.params.push(pms);
+                }
+            });
+
+            if(hasNull || (!$scope.ename && $scope.currentDefine.id)){
+                eventInfo.hasNull = true;
+            }
+            $scope.enameerror = !$scope.ename && $scope.currentDefine.id?true:false;
+            return eventInfo;
+
+        }
+        $scope.save = function(flag){
+            var doSave = function(){
+                var par = {
+                    name: $scope.ename,
+                    app:$scope.appid
+                };
+                var eventInfo = $scope.getReportEventInfo();
+                if(!eventInfo.hasNull){
+                    par.eventName = eventInfo.event;
+                    par.eventCondition = JSON.stringify(eventInfo);
+                }
+                else{
+                    ToolService.showTips($scope.formTipMsg);
+                    return false;
+                }
+                var savePM = null,txtTips = "添加成功";
+                if($scope.currentDefine.id && flag!=2){
+                    par.id = $scope.currentDefine.id;
+                    savePM = HttpService.putInfo("mng/eventstats/complicated/update",par);
+                    txtTips = "修改成功";
+                }else{
+                    savePM = HttpService.postInfo("mng/eventstats/complicated/create",par);
+                }
+
+                ToolService.showLoading();
+                savePM.then(function(data){
+                    $scope.closeWin(1);
+                    ToolService.hideLoading();
+                    ToolService.showTips(txtTips);
+                    if($scope.currentDefine.id && flag!=2){
+                        $scope.queryInfoByApp(2,$scope.currentDefine.id);
+                        $scope.currentDefine = {};
+                    }
+                    else{
+                       $scope.queryInfoByApp(1);
+                       if($scope.isShowCache){
+                          localStorage.removeItem($scope.appid);
+                       }
+                    }
+
+                });
+            }
+           // if(!$scope.currentDefine.id){
+                var verPar = {
+                    name: {
+                        key: 'spcname',
+                        val: $scope.ename
+                    }
+                };
+                $scope.tip = formJudge(verPar);
+                if(UtilService.isNullStr($scope.ename) || $scope.tip.succ != true){
+                    ToolService.showTips("事件分析名称请输入20个汉字以内名称,允许字符为中英文数字_-");
+                    return false;
+                }
+                else{
+                    ToolService.showLoading();
+                    var existPM = HttpService.getInfo("mng/eventstats/checkName/"+$scope.appid,{eventStatsName:$scope.ename});
+                    existPM.then(function(data){
+                        if(data!=true && (!$scope.currentDefine.id || ($scope.define.name!=$scope.ename || flag==2))){
+                            ToolService.hideLoading();
+                            ToolService.showTips("事件分析名称已存在");
+                        }
+                        else{
+                           doSave();
+                        }
+                    });
+                }
+            // }
+            // else{
+            //     ToolService.showLoading();
+            //     var existPM = HttpService.getInfo("mng/eventstats/checkName/"+$scope.appid,{eventStatsName:$scope.ename});
+            //     existPM.then(function(data){
+            //         if(data!=true && ($scope.define.name!=$scope.ename || flag==2)){
+            //             ToolService.hideLoading();
+            //             ToolService.showTips("名称已存在");
+            //         }
+            //         else{
+            //            doSave();
+            //         }
+            //     });
+            // }
+        }
+
+        $scope.eventChartConfig = {
+            color:ToolService.getTenColors(),
+            namesub:[]
+        };
+        $scope.lsChange = rmd;
+        $scope.$on('flipinfo',function(e,msg){
+            $scope.flipPage = msg;
+            $scope.lsChange++;
+        });
+        $scope.showTempLook = false;
+        $scope.rateList = []; //所有指标
+        $scope.rateListed = []; //选中指标
+        $scope.group_List = []; //所有分组
+        $scope.grouped_List = []; //选中分组
+        $scope.istranfer = false;//是否行列转换
+        $scope.ispercent = false;//是否显示占比
+        $scope.isshowTotal = false;//是否显示汇总
+        $scope.percentPre = "rate_"; //显示比例时的前缀,占比是'rate_',同比?
+        var queryParams = {};
+        $scope.chartList = [{id:"line",name:"折线图",platform:"line"},
+                            {id:"columnstack",name:"柱状图",platform:"columnstack"},
+                            {id:"pie",name:"饼状图",platform:"pie"}];
+        $scope.chartTypeInit = "line";
+
+        var numIndexs = ['一','二','三','四','五','六','七','八','九','十'];
+        $scope.query = function(condition){
+            $scope.showEventWin = false;
+            $scope.rateFlag = 1;
+
+            var params = ToolService.getParams($scope);
+            params.datatype = 'list';
+            params.viewflag = $scope.timeFlag;
+            var ddID = null,ddname = "事件分析";
+            if(condition){ //不保存直接应用
+                params.eventCondition = condition;
+                $scope.showTempLook = true;
+                ddname += $scope.getTrendTitle();
+            }
+            else{
+                var cache = UtilService.getItem($scope.appid);
+                params.eventCondition = $scope.isShowCache?cache:$scope.define.eventCondition;
+                $scope.showTempLook = $scope.isShowCache?true:false;
+
+                ddID = $scope.define.id;
+                ddname += '-' + $scope.define.name;
+            }
+            params.eventCondition = encodeURIComponent(params.eventCondition);
+
+            queryParams = params;
+            $scope.totalList = [];
+            $scope.eventChartLoading = true;
+            $scope.chartListLoading = true;
+            var areport = "eventstats/complicated/query/"+$scope.appid;
+
+            var listPM = HttpService.getInfo(areport,params);
+            listPM.then(function(data){
+                var format = data.format,formatjson = {};
+                format.filter(function(f){
+                    formatjson[f.field] = f.format;
+                });
+                data.format = formatjson;
+
+                $scope.trendList = data;
+                $scope.totalList = data.totalval;
+
+                $scope.infoList = data.val;
+                $scope.eventChartLoading = false;
+
+                $scope.rateList = data.selectfield;
+                $scope.totalVal = {};
+                $scope.rateList.filter(function(rate){
+                    $scope.totalList.filter(function(total){
+                        if(!$scope.totalVal[rate]){
+                            $scope.totalVal[rate] = 0;
+                        }
+                        $scope.totalVal[rate] += total[rate];
+                    });
+                });
+                $scope.group_List = $scope.getGroupNames(data.groupfield);
+                $scope.grouplen = data.groupfield.length;
+
+                if($scope.infoList.length>0){
+                    $scope.limit();
+                    if($scope.group_List.length == 0){ //没有分组情况,不显示占比
+                        $scope.ispercent = false;
+                    }
+                    $scope.changeChartData($scope.chartType);
+                }
+                else{
+                    $scope.myChartData = ToolService.noDataChart();
+                }
+
+                $scope.sortCol = "";
+                $scope.sortCol1 = "";
+                $scope.chartListLoading = false;
+
+                if($scope.istranfer){
+                    $scope.transformList();
+                }
+                else{
+                    $scope.pageAllList = $scope.infoList;
+                    $timeout(function(){
+                        if($scope.listkey){
+                            $scope.reverse1 = true;
+                            $scope.order($scope.listkey[0], true,0);
+                        }
+                    },300);
+                }
+
+                var condjson = JSON.parse(decodeURIComponent(params.eventCondition)).expressions,newjson = [];
+
+                ++rmd;
+                condjson.filter(function(item,index){
+                    item.id = item.orderindex =  rmd + index;
+                    item.indexname = numIndexs[index];
+                    newjson.push(item);
+                });
+                $scope.condList = newjson;
+
+                $scope.myChartDataCondition = ToolService.getChartConditions(ddname,areport,params,"complicatedevents",ddID);
+            },function(data){
+                $scope.myChartData = ToolService.noDataChart();
+                $scope.infoList = [];
+                $scope.totalList = [];
+                $scope.eventChartLoading = false;
+                $scope.chartListLoading = false;
+            });
+        }
+        $scope.$on("chartTypeId",function(e,msg){
+            if($scope.trendList){
+               $scope.chartType = msg.info.id;
+               $scope.chartTypeInit = $scope.chartType;
+               $scope.changeChartData();
+            }
+        });
+        $scope.limit = function(){
+            $scope.chartType = $scope.group_List.length == 0 && $scope.chartType == 'pie'?'line':$scope.chartType;
+            $scope.chartTypeInit = $scope.chartType;
+            if($scope.chartType == 'line'){
+                $scope.rateListed = $scope.rateList.slice(0,1);
+                $scope.grouped_List = $scope.group_List.slice(0, 5);
+                if($scope.grouped_List.length < 2){
+                    $scope.rateListed = $scope.rateList.slice(0,5);
+                }
+            }else if($scope.chartType == 'columnstack'){
+                $scope.rateListed = $scope.rateList.slice(0,2);
+                $scope.grouped_List = $scope.group_List.slice(0, 3);
+            }else{
+                $scope.rateListed = $scope.rateList.slice(0,2);
+                $scope.grouped_List = $scope.group_List.slice(0);
+            }
+
+        }
+        $scope.chartType = "line";
+        //得到图的分组,同时处理成分页需要的数据格式
+        $scope.getGroupNames = function(gns){
+            var names = [],listArr = [];
+            if(gns.length == 0){ //没有分组情况下的处理
+                var hasgroup = $scope.trendList.groupfield.length>0;
+                $scope.trendList.val.filter(function(item,index){
+                    var listChild = {};
+                    if(!hasgroup){
+                        listChild = item;
+                    }
+
+                    if(item.firstDateRow){
+                        listChild.ds = item.ds;
+                        listChild.groupnames = item.ds;
+                        if(hasgroup){
+                            listChild.children = $scope.trendList.val.slice(index,index+item.rowNum);
+                        }
+                        else{
+                            listChild.rsnum = 1;
+                            listChild.isrs = true;
+                        }
+                        listArr.push(listChild);
+                    }
+                });
+            }
+            else{
+                $scope.trendList.val.filter(function(item,index){
+                    var temps = [],listChild = {};
+                    gns.filter(function(k){
+                        temps.push(item[k]);
+                    });
+
+                    var tn = temps.join(","),idx = names.indexOf(tn);
+                    item.groupnames = tn;
+                    if(idx == -1){
+                        names.push(tn);
+                    };
+
+                    if(item.firstDateRow){
+                        listChild.ds = item.ds;
+                        listChild.groupnames = tn;
+                        listChild.children = $scope.trendList.val.slice(index,index+item.rowNum);
+                        listArr.push(listChild);
+                    }
+
+                });
+            }
+            $scope.detailAllList = listArr;
+            if($scope.istranfer){
+                $scope.transformList();
+            }
+            else{
+                $scope.lsChange++;
+            }
+            return names;
+        }
+        //页数变动或者数据变动,重新获取当前页展示数据
+        $scope.$watch("lsChange",function(){
+            if($scope.flipPage && $scope.detailAllList){
+                var start = $scope.flipPage.start+1,
+                        end = $scope.flipPage.end - 1,
+                        pagen = $scope.flipPage.pagen,
+                        lists = [],
+                        index = 0,
+                        sepcObj = null,
+                        dataAllArr = [];
+
+                if($scope.istranfer){
+                    dataAllArr = $scope.transfromAllList;
+                    $scope.listname = $scope.transformTitle.name;
+                    $scope.listkey = $scope.transformTitle.key;
+                }
+                else{
+                    dataAllArr = $scope.detailAllList;
+                    $scope.listname = $scope.trendList.name;
+                    $scope.listkey = $scope.trendList.columnkey;
+                }
+                // $scope.colsStyle = ToolService.getTableColsWidth($scope.listname);
+
+                if($scope.trendList.groupfield.length>0){
+                    for(var i=0;i<dataAllArr.length;i++){
+                        var children = dataAllArr[i].children,rs = 0;
+                        for(var j=0;j<children.length;j++){
+                            if(index > $scope.flipPage.start && index < $scope.flipPage.end){
+                                if(rs==0){
+                                    sepcObj = children[j];
+                                    sepcObj.rsnum = 0;
+                                    sepcObj.isrs = true;
+                                }
+                                else{
+                                    children[j].isrs = false;
+                                }
+                                rs++;
+                                sepcObj.rsnum++;
+                                lists.push(children[j]);
+                            }
+                            index ++;
+
+                            if(pagen == lists.length){
+                                break;
+                            }
+                        }
+                    }
+                    $scope.currentDetailList = lists;
+                }
+                else{
+                    $scope.currentDetailList = dataAllArr.slice(start,end);
+                }
+            }
+            else{
+                $scope.currentDetailList = [];
+            }
+        });
+        var refreshList = function(){
+            if($scope.flipPage.start > 5){
+                $scope.listf5 = ++rmd;
+            }
+            else{
+                $scope.lsChange++;
+            }
+        }
+        //行列转换或者占比
+        $scope.changeFlag = function(flag){
+            if(flag == 1){
+                $scope.istranfer = !$scope.istranfer;
+                if($scope.group_List.length == 0){
+                    $scope.ispercent = false;
+                }
+                if($scope.istranfer){
+                    $scope.transformList();
+                }
+                else{
+                    $scope.pageAllList = $scope.infoList;
+                    refreshList();
+                }
+            }
+            else{
+                $scope.ispercent = !$scope.ispercent;
+            }
+        }
+        //行转换成列
+        $scope.transformList = function(){
+            var transArr = [],
+                titlename = $scope.trendList.name.slice(1,$scope.trendList.groupfield.length+1),
+                titlekey = $scope.trendList.groupfield.slice(0);
+
+            titlename.push('指标');
+            titlekey.push("_myzb");
+
+            titlename.push('合计');
+            titlekey.push("_total");
+
+            var zero = {},allList = [];
+            $scope.trendList.key.filter(function(key,index){
+                titlename.push(key);
+                titlekey.push("_ds"+(index+1));
+                zero["_ds"+(index+1)] = 0;
+            });
+            $scope.totalList.filter(function(item){
+                var temps = [],transobj = {children:[]};
+                $scope.trendList.groupfield.filter(function(k){
+                    temps.push(item[k]);
+                    transobj[k] = item[k];
+                });
+                transobj.groupnames = temps.join(",");
+                transobj.rsnum = $scope.trendList.selectfield.length;
+
+                $scope.trendList.selectfield.filter(function(s){
+                    var zb = UtilService.cloneJSON(transobj);
+                    zb._myzb = s;
+                    zb._total = item[s];
+                    // zb["rate__total"] = item["rate_"+s];
+
+                    for(var k in zero){
+                        zb[k] = zero[k];
+                    }
+                    if(temps.length>0){
+                        var prerate = 0;
+                        $scope.detailAllList.filter(function(info){
+                            info.children.filter(function(child){
+                                if(transobj.groupnames == child.groupnames){
+                                    var dIdx = $scope.trendList.key.indexOf(info.ds);
+
+                                    var nowrate = child[s],rateprecent = 0;
+                                    zb["_ds"+(dIdx+1)] = nowrate;
+                                    if(prerate!=0){
+                                        rateprecent = (nowrate - prerate)/prerate*100;
+                                    }
+                                    prerate = nowrate;
+                                    zb["rate__ds"+(dIdx+1)] = rateprecent;
+                                }
+                            });
+                        });
+                        transobj.children.push(zb);
+                        allList.push(zb);
+                    }
+                    else{ //没有分组情况
+                        var prerate = 0;
+                        $scope.detailAllList.filter(function(info){
+                            var dIdx = $scope.trendList.key.indexOf(info.ds);
+
+                            var nowrate = info[s],rateprecent = 0;
+                            zb["_ds"+(dIdx+1)] = nowrate;
+                            if(prerate!=0){
+                                rateprecent = (nowrate - prerate)/prerate*100;
+                            }
+                            prerate = nowrate;
+                            zb["_ds"+(dIdx+1)] = info[s];
+                            zb["rate__ds"+(dIdx+1)] = rateprecent;
+                        });
+                        transArr.push(zb);
+                        allList.push(zb);
+                    }
+
+                });
+                if(temps.length>0){
+                    transArr.push(transobj);
+                }
+
+            });
+            //重新的表头
+            $scope.transformTitle = {
+                key:titlekey,
+                name:titlename
+            }
+
+            $scope.transfromAllList = transArr;
+            $scope.pageAllList = allList;
+            refreshList();
+        }
+        $scope.checkAll = function(){
+            $scope.ischeckall = !$scope.ischeckall;
+            $scope.grouped_List = $scope.ischeckall?UtilService.cloneJSON($scope.group_List):[];
+            $scope.changeChartData();
+         }
+        //图表加显示指标
+        $scope.changeRate = function(rate){
+            if(!$scope.canAdd(1,rate)){return false;}
+
+            var idx = $scope.rateListed.indexOf(rate);
+            if(idx>-1){
+                $scope.rateListed.splice(idx,1);
+            }
+            else{
+                $scope.rateListed.push(rate);
+            }
+
+            $scope.changeChartData();
+        }
+        //图表加显示分组
+        $scope.changeGroup = function(group){
+            if(!$scope.canAdd(2,group)){return false;}
+
+            var idx = $scope.grouped_List.indexOf(group);
+            if(idx>-1){
+                $scope.grouped_List.splice(idx,1);
+            }
+            else{
+                $scope.grouped_List.push(group);
+            }
+            $scope.changeChartData();
+        }
+        //当前是否还能添加指标或者分组,flag:1指标,2分组
+        var lengedMax = 10;
+        $scope.canAdd = function(flag,cell){
+            var arr = [];
+            if(flag==1){
+                arr = $scope.rateListed;
+            }
+            else{
+                arr = $scope.grouped_List;
+            }
+            var idx = arr.indexOf(cell);
+            if(idx==-1){
+                var rl = $scope.rateListed.length,gl = $scope.grouped_List.length;
+                if($scope.chartType == 'line'){
+                    if(flag == 1){
+                        return (rl+1)*gl <= lengedMax;
+                    }
+                    else{
+                        return rl*(gl+1)<= lengedMax;
+                    }
+                }else{
+                    if(flag == 1){
+                        return rl+1 <= ($scope.chartType == 'columnstack'?3:2);
+                    }
+                    else{
+                        return gl+1 <= ($scope.chartType == 'columnstack'?5:$scope.group_List.length);
+                    }
+                }
+
+            }
+            return true;
+        }
+        //根据已选的指标和分组,重新生成图表数据
+        $scope.changeChartData = function(){
+            $scope.eventChartConfig.namesub = [];
+            var xKey =  $scope.trendList.key,tempData = {
+                key:xKey,
+                val:[],
+                name:[],
+                rmd : ++rmd
+            };
+            var zero = [];
+            xKey.filter(function(d,index){
+                zero.push(0);
+            });
+            if($scope.chartType == "pie"){
+                $scope.ischeckall = $scope.group_List.length==$scope.grouped_List.length?true:false;
+                $scope.eventChartConfig.flag = false;
+                if($scope.rateListed.length>2){
+                    $scope.rateListed = $scope.rateListed.slice(0,2);
+                }
+                var json = {}, grList = UtilService.cloneJSON($scope.grouped_List);
+                $scope.rateListed.filter(function(rate){
+                    var arr = [];
+                    var totalval = 0;
+                    $scope.grouped_List.filter(function(group){
+                         $scope.totalList.filter(function(total){
+                             var groupnames = "";
+                             var val = {};
+                             $scope.trendList.groupfield.filter(function(gid){
+                                groupnames += total[gid]+",";
+                             });
+                             if(group == groupnames.slice(0,-1)){
+                                 arr.push(total[rate]);
+                                 totalval += total[rate];
+                             }
+                         });
+                    });
+                    if(grList.indexOf("其他")>-1){
+                        grList.splice(grList.indexOf("其他"),1);
+                    }
+                    if($scope.totalVal[rate]-totalval>0 && $scope.group_List.length>0){
+                        arr.push($scope.totalVal[rate]-totalval);
+                        grList.push("其他");
+                    }
+                    json[rate] = arr;
+                });
+                $scope.myChartData.key = $scope.rateListed;
+                $scope.myChartData.name = grList;
+                if(!angular.equals({}, json)){
+                    $scope.myChartData.val = [json];
+                }else{
+                    $scope.myChartData.val = [];
+                }
+            }else{
+                if($scope.chartType == "columnstack"){
+                    $scope.eventChartConfig.flag = true;
+                    if($scope.grouped_List.length>5){
+                        $scope.grouped_List = $scope.grouped_List.slice(0,5);
+                    }
+                }else{
+                    $scope.eventChartConfig.flag = false;
+                    var groLen  = $scope.rateListed.length==1?10:$scope.rateListed.length>2?3:5;
+                    $scope.grouped_List = $scope.grouped_List.slice(0,groLen);
+                }
+                $scope.eventChartConfig.namesub = [];
+                $scope.trendList.val.filter(function(item){
+                    var date = item.ds,gname = item.groupnames;
+
+                    if($scope.grouped_List.indexOf(gname)>-1 || $scope.grouped_List.length == 0){
+                        var dateIdx = xKey.indexOf(date);
+
+                        $scope.rateListed.filter(function(rate){
+                            var format = $scope.trendList.format[rate];
+                            var chartname = gname + rate;
+                            if($scope.grouped_List.length == 0){
+                                chartname = rate.substring(1); //因为加了下划线,要去掉
+                            }
+                            var dataIdx = tempData.name.indexOf(chartname),dataArr = [];
+
+                            if(dataIdx == -1){
+                                tempData.name.push(chartname);
+                                $scope.eventChartConfig.namesub.push(format=='percent'?"%":"");
+                                dataArr = UtilService.cloneJSON(zero);
+                                tempData.val.push(dataArr);
+                            }
+                            else{
+                                dataArr = tempData.val[dataIdx];
+                            }
+
+                            var rateNum = Number(item[rate]);
+                            if(format == 'percent'){
+                                rateNum =  UtilService.decimal2(rateNum*100,2);
+                            }
+                            else if(format == 'int'){
+                                rateNum =  Math.round(rateNum);
+                            }
+                            else
+                            {
+                                rateNum =  UtilService.decimal2(rateNum,2);
+                            }
+
+                            dataArr[dateIdx] = rateNum;
+                        });
+                    }
+                });
+                $scope.myChartData = tempData;
+            }
+        }
+        $scope.substrName = function(name){
+            return name.substring(1);
+        }
+
+        var orderBy = $filter('orderBy');
+        $scope.sortCol = "";
+        $scope.sortCol1 = "";
+        $scope.order = function(predicate, reverse,idx) {
+            var outorder = false;
+            if($scope.istranfer && idx < $scope.trendList.groupfield.length){
+                outorder = true;
+            }
+            else{
+                outorder = idx==0;
+            }
+            var dataAllArr = [];
+            if($scope.istranfer){
+                dataAllArr = $scope.transfromAllList;
+            }
+            else{
+                dataAllArr = $scope.detailAllList;
+            }
+
+            if(!outorder && $scope.trendList.groupfield.length == 0){ //么有分组情况
+                $scope.sortCol = predicate;
+                $scope.mysort(dataAllArr, predicate, reverse);
+            }
+            else{
+                if(!outorder){
+                    $scope.sortCol = predicate;
+                    $scope.mysort($scope.totalList, predicate, reverse);
+                    dataAllArr.filter(function(item){
+                        $scope.mysort(item.children, predicate, reverse);
+                    });
+                }
+                else{//第一列的日期排序
+                    $scope.sortCol1 = predicate;
+                    $scope.mysort(dataAllArr, predicate, reverse);
+                }
+            }
+
+            refreshList();
+        };
+        $scope.mysort = function(tempArr,key,flag){
+            if (flag==true) {
+                tempArr.sort(function(x, y) {
+                    return x[key] == y[key] ? 0 : (x[key] > y[key] ? -1 : 1);
+                });
+            } else {
+                tempArr.sort(function(x, y) {
+                    return x[key] == y[key] ? 0 : (x[key] > y[key] ? 1 : -1);
+                });
+            }
+        }
+        $scope.$watch("appid+defineFlag+timeFlag+date.startDate+date.endDate",function(e){
+            if(angular.isDefined($scope.appid) && (angular.isDefined($scope.defineFlag) || $scope.isShowCache)){
+                $scope.query();
+            }
+        });
+        $scope.$watch("appid",function(n){
+            if(angular.isDefined(n)){
+                $scope.lengedNames = [];
+                $scope.defineFlag = undefined;
+                $scope.queryInfoByApp(5);
+            }
+        });
+
+        var haschangeOrder = false;
+        $scope.showOrderList = function(){
+            $scope.showOrderWin = true;
+            haschangeOrder = false;
+            ToolService.showAlp();
+        }
+        $scope.closeOrder = function(){
+            $scope.showOrderWin = false;
+            ToolService.hideAlp();
+        }
+        $scope.okOrderWin = function(){
+            $scope.closeOrder();
+            if(!haschangeOrder){return false;}
+
+            ToolService.showLoading();
+            var condition = JSON.parse(decodeURIComponent($scope.define.eventCondition));
+            $scope.condList.filter(function(item){
+                delete item.id;
+                delete item.orderindex;
+                delete item.indexname;
+            });
+            condition.expressions = $scope.condList;
+            var par = {
+                name: $scope.define.name,
+                app:$scope.appid,
+                id:$scope.define.id,
+                eventCondition:JSON.stringify(condition)
+            };
+            var savePM = HttpService.putInfo("mng/eventstats/complicated/update",par);
+            savePM.then(function(data){
+                ToolService.hideLoading();
+                $scope.queryInfoByApp(2,$scope.define.id);
+            });
+
+        }
+        $scope.$on("dragorder",function(event,msg){
+            var curid = msg.id,replaceId = msg.index;
+            var curIdx = 0,replaceIdx = 0;
+
+            $scope.condList.filter(function(item,index){
+                if(item.id === curid){
+                    curIdx = index;
+                }
+                if(item.id === replaceId){
+                    replaceIdx = index;
+                }
+            });
+
+            var newArr = UtilService.cloneJSON($scope.condList);
+            if(curIdx > 0 || replaceIdx > 0){
+                var curobj =  UtilService.cloneJSON(newArr[replaceIdx]);
+                newArr.splice(replaceIdx,1,newArr[curIdx]);
+                newArr.splice(curIdx,1,curobj);
+            }
+            ++rmd;
+            newArr.filter(function(item,index){
+                item.id = item.orderindex =  rmd + index;
+                item.indexname = numIndexs[index];
+            });
+
+            $scope.$apply(function(){
+                $scope.condList = newArr;
+            });
+            haschangeOrder = true;
+        });
+    }
+
+    var sectionTool = {
+        //获取光标位置
+        getCursortPosition:function(textDom) {
+            var cursorPos = 0;
+            if (document.selection) {
+              // IE Support
+                textDom.focus ();
+                var selectRange = document.selection.createRange();
+                selectRange.moveStart ('character', -textDom.value.length);
+                cursorPos = selectRange.text.length;
+            }
+            else if (textDom.selectionStart || textDom.selectionStart == '0') {
+              // Firefox support
+                cursorPos = textDom.selectionStart;
+            }
+            return cursorPos;
+        },
+        //设置光标位置
+        setCaretPosition:function(textDom, pos){
+             if(textDom.setSelectionRange) {
+              // IE Support
+                textDom.focus();
+                textDom.setSelectionRange(pos, pos);
+             }
+             else if (textDom.createTextRange) {
+              // Firefox support
+                var range = textDom.createTextRange();
+                range.collapse(true);
+                range.moveEnd('character', pos);
+                range.moveStart('character', pos);
+                range.select();
+             }
+        },
+        //光标后插入文本
+        insertAfterText:function(textDom, value) {
+            var selectRange;
+            if (document.selection) {
+              // IE Support
+                textDom.focus();
+                selectRange = document.selection.createRange();
+                selectRange.text = value;
+                textDom.focus();
+            }
+            else if (textDom.selectionStart || textDom.selectionStart == '0') {
+              // Firefox support
+                var startPos = textDom.selectionStart;
+                var endPos = textDom.selectionEnd;
+                var scrollTop = textDom.scrollTop;
+                textDom.value = textDom.value.substring(0, startPos) + value + textDom.value.substring(endPos, textDom.value.length);
+                textDom.focus();
+                textDom.selectionStart = startPos + value.length;
+                textDom.selectionEnd = startPos + value.length;
+                textDom.scrollTop = scrollTop;
+            }
+            else {
+                textDom.value += value;
+                textDom.focus();
+            }
+        }
+    }
+})();
diff --git a/src/main/websrc/js/collect/expiration.js b/src/main/websrc/js/collect/expiration.js
new file mode 100644
index 0000000..43d3480
--- /dev/null
+++ b/src/main/websrc/js/collect/expiration.js
@@ -0,0 +1,9 @@
+(function(){
+    angular.module("app.collect")
+        .controller("expirationCtrl",["$rootScope","$scope","HttpService","ToolService","$filter","UtilService",expirationCtrl]);
+
+    function expirationCtrl($rootScope,$scope,HttpService,ToolService,$filter,UtilService){
+    	//$rootScope.mainMenu = 'behavior';
+    	//alert($rootScope.pagePath);
+    }
+})();
\ No newline at end of file
diff --git a/src/main/websrc/js/collect/funnel.js b/src/main/websrc/js/collect/funnel.js
new file mode 100644
index 0000000..fe161c6
--- /dev/null
+++ b/src/main/websrc/js/collect/funnel.js
@@ -0,0 +1,649 @@
+(function(){
+    angular.module("app.collect")
+        .controller("funnelCtrl",["$scope","$rootScope","HttpService","ToolService","$state","$stateParams","UtilService","$q",funnelCtrl]);
+
+    function funnelCtrl($scope,$rootScope,HttpService,ToolService,$state,$stateParams,UtilService,$q){
+        var fid = $stateParams.pageid;
+        $scope.addFirst = false;
+        $scope.addFirstFunnel = function(){
+            $scope.addFirst = true;
+            $scope.showEventWin = true;
+            $scope.currentFunnel = {};
+            $scope.isEditInfo = 2;
+            $scope.initFunnel();
+        }
+        var rmd = new Date().getTime();
+        var eventPM = null;
+        $scope.queryInfoByApp = function(flag,id){
+            if(angular.isUndefined(flag) || flag == 5){
+                //app下所有事件
+                eventPM = HttpService.getInfo($scope.appid+"/event/find");
+                eventPM.then(function(data){
+                    $scope.eventListAll = data;
+                    $scope.eventList = $scope.eventListAll.filter(function(item){
+                        return item.eventName != 'install';
+                    });
+                });
+                //通用属性
+                var profilePM = HttpService.getInfo($scope.appid+"/event/find/allAttr");
+                profilePM.then(function(data){
+                    data.unshift({"dimensionType":"whole",id:"-all",name:"总体",type:"string"});
+
+                    for(var i=0; i< data.length; i++){
+                        if(data[i].dimensionType == 'population' || data[i].dimensionType == 'source'){
+                            data[i].dimensionType = 'eventlist';
+                        }
+                    }
+                    $scope.dimensionList = data;
+                });
+            }
+
+            var funPM = HttpService.getInfo("funnel/find/"+$scope.appid);
+            funPM.then(function(data){
+                $scope.funnelList = data;
+                $scope.isEditInfo = 1;
+                if(data.length>0){
+                    if(!UtilService.isNullStr(fid)){
+                        id = fid;
+                    }
+                    if(!UtilService.isNullStr(id)){
+                        var has = false;
+                        for(var i=0;i<$scope.funnelList.length;i++){
+                            if($scope.funnelList[i].id == id){
+                                $scope.funnelInfo = $scope.funnelList[i];
+                                has = true;
+                                break;
+                            }
+                        }
+                        if(has){//修改
+                            if(!UtilService.isNullStr(fid)){
+                                $scope.clickFunnel($scope.funnelInfo);
+                                fid = null;
+                            }
+                            else{
+                                $scope.defineFlag = ++rmd;
+                            }
+                        }
+                        else if(!has && $scope.funnelInfo.id == id){ //删除当前
+                            $scope.clickFunnel(data[0]);
+                        }
+
+                    }
+                    else{
+                        $scope.clickFunnel(data[0]);
+                    }
+                }
+                else{
+                    $scope.addFirst = false;
+                    $scope.funnelInfo = {};
+                }
+                if(flag == 5){
+                    $scope.dimenRmd = ++rmd;
+                }
+            });
+        }
+
+        //选择按设备或者按用户
+        /*$scope.deviceList = ToolService.getDeviceTypeList();
+        $scope.deviceInit = $scope.deviceList[0].id;
+        $scope.$on("deviceId",function(e,msg){
+            $scope.seeFlag = msg.info.id;
+        });*/
+        $scope.deviceId = false;
+
+        $scope.dimensionname = "维度对比";
+        $scope.usergroupid = -1;
+        $scope.$on("dimensionId",function(e,msg){
+            $scope.dimenId = msg.info.id;
+            $scope.dimenObj = msg.info;
+            $scope.dimenEventType = msg.info.eventType;
+
+            if($scope.dimenId == 'usergroup' && $scope.usergroupid == -1){
+                $scope.lengedNames = ["整体"];
+                $scope.dimenugkeys = UtilService.cloneJSON(msg.info.key);
+                $scope.dimenugkeys.unshift("all");
+
+                msg.info.value.filter(function(item){
+                    $scope.lengedNames.push(item);
+                });
+
+                $scope.usergroupid = msg.info.key[0];
+            }
+            else{
+                $scope.usergroupid = -1;
+            }
+        });
+
+        $scope.date = ToolService.getLastDays(-7,0);
+        $scope.$on("dateCustos",function(e,msg){
+            $scope.date = msg;
+        });
+        $scope.$watch("date",function(){
+            if(angular.isDefined($scope.date)){
+                $scope.datestr = $scope.date.startDate + "至" + $scope.date.endDate;
+            }
+        });
+
+        //已保存的事件
+        $scope.definename = "请选择漏斗";
+        $scope.clickFunnel = function(m){
+            $scope.funnelInfo = m;
+            $scope.ename = m.name;
+            $scope.defineFlag = ++rmd;
+            $scope.showEventWin = false;
+            $scope.isEditInfo = 1;
+            $rootScope.thirdtab = m.name;
+        }
+        $scope.deleteFunnel = function(d){
+            $scope.delDefine = d;
+            ToolService.showAlp();
+            ToolService.showLoading();
+            var validPM = HttpService.getInfo("custommenu/delete/valid/"+d.id+"?type=funnel");
+            validPM.then(function(data){
+                ToolService.hideLoading();
+                $scope.wantDelete = true;
+                $scope.custommenus = angular.isArray(data) && data.length>0?data:false;
+            });
+        }
+        $scope.doDelete = function(){
+            $scope.closeWin();
+            ToolService.showLoading();
+            var deletePM = HttpService.deleteInfo("mng/funnel/delete/"+$scope.delDefine.id);
+            deletePM.then(function(){
+                ToolService.showTips("删除成功");
+                $scope.queryInfoByApp(3,$scope.delDefine.id);
+                ToolService.hideLoading();
+            });
+        }
+        $scope.closeAddWin = function(){
+            $scope.showEventWin = false;
+            $scope.isEditInfo = 1;
+            $scope.addFirst = false;
+        }
+
+        $scope.eventinitname = "请选择事件";
+        $scope.getEventNum = function(){
+            if(!$scope.eventInfo){return 20;}
+
+            var es = $scope.eventInfo.filter(function(item){
+                return item.show!=false;
+            });
+            return es.length;
+        }
+        $scope.setEventSteps = function(){
+            if(!$scope.eventInfo){return 20;}
+
+            var idx = -1;
+            var len = $scope.eventInfo.length;
+            $scope.eventInfo.filter(function(item,i){
+                if(item.show!=false){
+                    idx ++;
+                    item.steps = ['一','二','三','四','五','六','七','八','九','十'][idx];
+                    item.style = {'z-index':len-i};
+                }
+            });
+        }
+        $scope.maxStep = 7;
+        $scope.addEvent = function(obj){
+            if($scope.getEventNum()>=$scope.maxStep){return false;}
+
+            rmd ++;
+            var temp = {id:"evt_"+rmd,eventid:"event_"+rmd,relation:"and"};
+
+            if(obj){
+                for(var k in obj){
+                    temp[k] = obj[k];
+                }
+                temp.eventinit = obj.event;
+            }
+            (function(temp){
+                $scope.$on(temp.eventid,function(e,msg){
+                    temp.params = [];
+                    temp.event = msg.info.eventName;
+                    temp.nullevent = false;
+                    var setparams = function(){
+                        temp.paramsList = msg.info.profiles;
+                        if(temp.oldparams){
+                            temp.oldparams.filter(function(item){
+                                $scope.addEventParams(temp,item);
+                            });
+                            delete temp.oldparams;
+                        }
+                    }
+                    if(angular.isArray(msg.info.profiles)){
+                        setparams(msg.info.profiles);
+                    }
+                    else{
+                        var proPM = HttpService.getInfo($scope.appid+"/event/find/param?names="+temp.event);
+                        proPM.then(function(data){
+                            msg.info.profiles = data[0].profiles;
+                            setparams();
+                        });
+                    }
+                });
+            })(temp);
+
+            $scope.eventInfo.push(temp);
+            $scope.setEventSteps();
+        }
+        $scope.removeEvent = function(event){
+            if($scope.getEventNum()<=2){
+                ToolService.showTips("漏斗步骤不能少于2步");
+                return false;
+            }
+
+            for(var i=0;i<$scope.eventInfo.length;i++){
+                if($scope.eventInfo[i].id == event.id){
+                    $scope.eventInfo[i].show = false;
+                    break;
+                }
+            }
+            $scope.setEventSteps();
+        }
+        $scope.changeRel = function(event){
+            event.relation = event.relation == 'and' ? "or" : 'and';
+        }
+        $scope.getEventParamsNum = function(event){
+            if(!event.params){return 5;}
+
+            var eps = event.params.filter(function(item){
+                return item.show!=false;
+            });
+            return eps.length;
+        }
+        $scope.addEventParams = function(event,obj){
+            if(!event.params || $scope.getEventParamsNum(event)>=3){return false;};
+            rmd ++;
+            var tempparam = {id:"pam_"+rmd,pid:event.id};
+            if(obj){
+                for(var k in obj){
+                    tempparam[k] = obj[k];
+                }
+            }
+            event.params.push(tempparam);
+        }
+        $scope.removeEventParams = function(event,param){
+            for(var i=0;i<event.params.length;i++){
+                if(event.params[i].id == param.id){
+                    event.params[i].show = false;
+                    break;
+                }
+            }
+        }
+        $scope.$on("event",function(e,msg){
+            for(var i=0;i<$scope.eventInfo.length;i++){
+                if($scope.eventInfo[i].id == msg.pid){
+                    var params = $scope.eventInfo[i].params;
+                    for(var j=0;j<params.length;j++){
+                        if(params[j].id == msg.id){
+                            params[j] = msg;
+                            break;
+                        }
+                    }
+                }
+            }
+        });
+
+        $scope.dayList = [
+            {id:1,name:"1天"},
+            {id:2,name:"2天"},
+            {id:3,name:"3天"},
+            {id:4,name:"4天"},
+            {id:5,name:"5天"},
+            {id:6,name:"6天"},
+            {id:7,name:"7天"}
+        ];
+
+        $scope.windowsinit = $scope.dayList[0].id;
+        $scope.$on("windows",function(e,msg){
+            $scope.windows = msg.info.id;
+        });
+        $scope.eventInfo = [];
+        $scope.initFunnel = function(flag){
+            $scope.eventInfo.filter(function(item){
+                item.show = false;
+            });
+            if(flag){
+                $scope.ename = $scope.funnelInfo.name;
+                $scope.windowsinit = $scope.funnelInfo.window;
+
+                ToolService.showLoading();
+                $q.all([eventPM]).then(function(data){
+                    var eventInfo = JSON.parse($scope.funnelInfo.eventInfo),evts = [],evtvals = [];
+                    eventInfo.filter(function(item){
+                        var temp = {event:item.event,param:[]};
+                        var pppm = UtilService.cloneJSON(item.params);
+                        pppm.filter(function(pm){
+                            temp.param.push(pm.attr);
+                        });
+                        evts.push(item.event);
+                        evtvals.push(temp);
+                    });
+                    var evtprofilePM = HttpService.getInfo($scope.appid+"/event/find/param?names="+evts.join(",")+"&params="+JSON.stringify(evtvals));
+                    evtprofilePM.then(function(pros){
+                        pros.filter(function(evt){
+                            for(var i=0;i<$scope.eventList.length;i++){
+                                if(evt.eventName == $scope.eventList[i].eventName){
+                                    $scope.eventList[i].profiles = evt.profiles;
+                                    break;
+                                }
+                            }
+                        });
+
+                        eventInfo.filter(function(e){
+                            if(JSON.stringify($scope.eventList).indexOf(e.event) > -1){
+                                 e.oldparams = UtilService.cloneJSON(e.params);
+                            }
+                            delete e.params;
+                            $scope.addEvent(e);
+                        });
+                        ToolService.hideLoading();
+                    });
+                });
+            }
+            else{
+                $scope.addEvent();
+                $scope.addEvent();
+            }
+        };
+
+        $scope.isEditInfo = 1;
+        $scope.addFunnel = function(flag){
+            if(flag){ //修改
+                if(!$scope.funnelInfo || !$scope.funnelInfo.id || $scope.isEditInfo==2){return false;}
+                $scope.isEditInfo = 3;
+                $scope.currentFunnel = $scope.funnelInfo;
+            }else{
+                $scope.isEditInfo = 2;
+                $scope.currentFunnel = {};
+            }
+            $scope.initFunnel(flag);
+            $scope.showEventWin = true;
+        }
+        $scope.initCondition = function(){
+            if($scope.canSave()){
+                $scope.initFunnel();
+            }
+        }
+
+        $scope.getFunnelEventInfo = function(){
+            var hasNull = false;
+            var eventInfo = [],myEvents = [];
+
+            $scope.eventInfo.filter(function(item){
+                if(item.show!=false && JSON.stringify($scope.eventList).indexOf(item.event) < 0){
+                    item.nullevent = true;
+                    hasNull = true;
+                }
+                if(item.show!=false && JSON.stringify($scope.eventList).indexOf(item.event) > -1){
+                    var temp = {event:item.event,relation:item.relation,params:[]};
+                    if(UtilService.isNullStr(item.event)){
+                        item.nullevent = true;
+                        hasNull = true;
+                    }
+                    else{
+                        item.nullevent = false;
+                        item.params.filter(function(pm){
+                            if(pm.show!=false){
+                                var pms = {};
+                                for(var k in pm){
+                                    if(k!='id' && k!='pid'){
+                                        if(k!='value'){
+                                            pms[k] = pm[k];
+                                        }else{
+                                            pms[k] = pm[k].join(",");
+                                        }
+                                        if(UtilService.isNullStr(pm[k])){
+                                            $scope.$broadcast(pm.id, "null");
+                                            hasNull = true;
+                                        }
+                                    }
+                                }
+                                temp.params.push(pms);
+                            }
+                        });
+                    }
+                    eventInfo.push(temp);
+                    myEvents.push(item.event);
+                }
+            });
+
+            if(!hasNull && eventInfo.length>0){
+                return {
+                    eventInfo:JSON.stringify(eventInfo),
+                    events : myEvents.join(",")
+                }
+            }
+            else{
+                return {};
+            }
+        }
+
+        $scope.nameWin = function(flag){
+            var nowEvents = $scope.getFunnelEventInfo();
+            if(!nowEvents.events){
+                ToolService.showTips($scope.formTipMsg);
+                return false;
+            }
+
+            ToolService.showAlp();
+            $scope.wantSave = true;
+
+            $scope.ename = "";
+            if(flag){
+                $scope.currentFunnel = {id:0};
+            }
+        }
+        $scope.closeWin = function(flag){
+            $scope.wantSave = false;
+            $scope.wantDelete = false;
+            if(flag){
+                if(flag == 2 && $scope.isEditInfo == 3){
+                    $scope.currentFunnel = $scope.funnelInfo;
+                }
+                else{
+                    $scope.showEventWin = false;
+                }
+            }
+            ToolService.hideAlp();
+        }
+        $scope.canSave = function(){
+            if(!$scope.eventInfo || $scope.eventInfo.length == 0){return false;}
+
+            var can = false;
+            for(var i=0;i<$scope.eventInfo.length;i++){
+                var temp = $scope.eventInfo[i];
+                if(temp.show != false && temp.event){
+                    can = true;
+                    break;
+                }
+            }
+            return can;
+        }
+        $scope.save = function(){
+            var doSave = function(){
+                var par = {
+                    name: $scope.ename,
+                    app:$scope.appid,
+                    window:$scope.windows
+                };
+
+                var nowEvents = $scope.getFunnelEventInfo();
+                if(nowEvents.events){
+                    par.eventInfo = nowEvents.eventInfo;
+                    par.events = nowEvents.events;
+                }
+                else{
+                    ToolService.showTips($scope.formTipMsg);
+                    return false;
+                }
+
+                var savePM = null,txtTips = "添加成功";
+                if($scope.currentFunnel.id){
+                    par.id = $scope.currentFunnel.id;
+                    savePM = HttpService.putInfo("mng/funnel/update",par);
+                    txtTips = "修改成功";
+                }else{
+                    savePM = HttpService.postInfo("mng/funnel/create",par);
+                }
+                ToolService.showLoading();
+                savePM.then(function(data){
+                    $scope.closeWin(1);
+                    ToolService.hideLoading();
+                    ToolService.showTips(txtTips);
+                    $scope.queryInfoByApp(1,$scope.currentFunnel.id)
+                });
+            }
+
+            if(!$scope.currentFunnel.id  || $scope.currentFunnel.id==0){
+                var verPar = {
+                    name: {
+                        key: 'spcname',
+                        val: $scope.ename
+                    }
+                };
+                $scope.tip = formJudge(verPar);
+                if(UtilService.isNullStr($scope.ename) || $scope.tip.succ != true){
+                    ToolService.showTips("请输入20个汉字以内名称,允许字符为中英文数字_-");
+                    return false;
+                }
+                else{
+                    ToolService.showLoading();
+                    var existPM = HttpService.getInfo("mng/funnel/valid/"+$scope.appid,{name:$scope.ename});
+                    existPM.then(function(data){
+                        if(data==true){
+                            ToolService.hideLoading();
+                            ToolService.showTips("名称已存在");
+                        }
+                        else{
+                           doSave();
+                        }
+                    });
+                }
+            }
+            else{
+                doSave();
+            }
+        }
+
+        $scope.dimenInit = $scope.dimenId = "-all";
+        $scope.$watch("appid",function(n){
+            if(angular.isDefined(n)){
+                $scope.dimenId = "-all";
+                $scope.lengedNames = [];
+                $scope.funnelInfo = {};
+                $scope.queryInfoByApp(5);
+            }
+        });
+
+        $scope.chartKey = [];
+        $scope.chartConfig = {color:['#5fb5f1','#e6e6e6'],legend:false,ispercent:true};
+        $scope.queryList = function(){
+            var params = {
+                startdate:$scope.date.startDate,
+                enddate:$scope.date.endDate,
+                appid:$scope.appid
+            };
+            params.datatype = "list";
+            params.eventType = $scope.dimenEventType;
+            if($scope.dimenId && $scope.dimenId!='-all'){
+                params.dimention = $scope.dimenId;
+                if(params.dimention == 'usergroup'){
+                    if($scope.usergroupid==-1){return false;}
+                    params.usergroupid = $scope.usergroupid;
+                }
+            }
+            params.isdevice = $scope.seeFlag == 'device';
+            $scope.chartConfig.isdevice = params.isdevice;
+            //列表
+            var areport = "funnel/report/"+$scope.funnelInfo.id;
+            var listPM = HttpService.getInfo(areport,params);
+            $scope.listInfoLoading = true;
+
+            $scope.chartLoading = true;
+
+            $scope.currentChartName = "";
+            listPM.then(function(data){
+                $scope.listInfoData = data;
+                $scope.listInfoLoading = false;
+
+                $scope.chartListInfo = data.val;
+                if(params.dimention){
+                    $scope.listInfoData.name[0] = $scope.dimenObj.name;
+
+                    if(params.dimention!='usergroup'){
+                        $scope.lengedNames = [];
+                        var col1 = data.columnkey[0];
+                        $scope.chartListInfo.filter(function(item){
+                            $scope.lengedNames.push(item[col1]);
+                        });
+                    }
+                }
+                $scope.chartKey = $scope.listInfoData.key;
+                $scope.chartKeyName = $scope.listInfoData.eventname;
+
+                if(params.dimention=='usergroup'){
+                    $scope.setFunnelData(1);
+                }
+                else{
+                    $scope.setFunnelData(0);
+                }
+
+                $scope.listInfoDataCondition = ToolService.getChartConditions("漏斗转化-"+$scope.funnelInfo.name,areport,params,"funnel",$scope.funnelInfo.id);
+            },function(data){
+                // $scope.errorBack(data.message);
+                $scope.chartData = ToolService.noDataChart();
+                $scope.listInfoData = {};
+                $scope.listInfoLoading = false;
+                $scope.chartLoading = false;
+            });
+        }
+
+        $scope.currentChartName = "";
+        $scope.setFunnelData = function(idx,flag){
+            if(flag && flag == 1){
+                idx = $scope.lengedNames.indexOf(idx);
+            }
+            var fdata = $scope.chartListInfo[idx];
+            //用户分群页面点击
+            if($scope.dimenId == 'usergroup' && flag && flag == 1){
+                if(idx > 0 && $scope.dimenugkeys.indexOf($scope.usergroupid) != idx){
+                    $scope.usergroupid = $scope.dimenugkeys[idx];
+                    return false;
+                }
+                if(idx>0){
+                    fdata = $scope.chartListInfo[1];
+                }
+            }
+
+            if($scope.lengedNames && $scope.lengedNames.length>0){
+                if($scope.currentChartName == $scope.lengedNames[idx]){
+                     return false;
+                }
+                else{
+                    $scope.currentChartName = $scope.lengedNames[idx]
+                }
+            }
+            else{
+                $scope.currentChartName = "整体";
+            }
+            $scope.chartLoading = false;
+            $scope.chartData = ToolService.getFunnelData(fdata,$scope.chartKey,$scope.chartKeyName);
+        }
+        $scope.getChartStyle = function(n){
+            var idx = $scope.lengedNames.indexOf(n);
+            if( ($scope.dimenId!='usergroup' && $scope.currentChartName == $scope.lengedNames[idx]) || ($scope.dimenId=='usergroup' && (($scope.currentChartName != "整体" && $scope.dimenugkeys.indexOf($scope.usergroupid) == idx) || ($scope.currentChartName == "整体" && idx == 0)))){
+                return {"background-color":$scope.chartConfig.color[0],"border-color":"transparent"};
+            }
+            else{
+                return {};
+            }
+        }
+
+        $scope.$watch("date.startDate+date.endDate+defineFlag+seeFlag+dimenId+usergroupid",function(n){
+            if(angular.isUndefined($scope.appid) || angular.isUndefined($scope.date) || angular.isUndefined($scope.funnelInfo) || !$scope.funnelInfo.id){return false;}
+
+            $scope.queryList();
+        });
+    }
+})();
diff --git a/src/main/websrc/js/common/angular-animate.min.js b/src/main/websrc/js/common/angular-animate.min.js
new file mode 100644
index 0000000..9461603
--- /dev/null
+++ b/src/main/websrc/js/common/angular-animate.min.js
@@ -0,0 +1,56 @@
+/*
+ AngularJS v1.4.8
+ (c) 2010-2015 Google, Inc. http://angularjs.org
+ License: MIT
+*/
+(function(H,u,Sa){'use strict';function wa(a,b,c){if(!a)throw ngMinErr("areq",b||"?",c||"required");return a}function xa(a,b){if(!a&&!b)return"";if(!a)return b;if(!b)return a;X(a)&&(a=a.join(" "));X(b)&&(b=b.join(" "));return a+" "+b}function Ia(a){var b={};a&&(a.to||a.from)&&(b.to=a.to,b.from=a.from);return b}function T(a,b,c){var d="";a=X(a)?a:a&&I(a)&&a.length?a.split(/\s+/):[];q(a,function(a,s){a&&0<a.length&&(d+=0<s?" ":"",d+=c?b+a:a+b)});return d}function Ja(a){if(a instanceof L)switch(a.length){case 0:return[];
+case 1:if(1===a[0].nodeType)return a;break;default:return L(ma(a))}if(1===a.nodeType)return L(a)}function ma(a){if(!a[0])return a;for(var b=0;b<a.length;b++){var c=a[b];if(1==c.nodeType)return c}}function Ka(a,b,c){q(b,function(b){a.addClass(b,c)})}function La(a,b,c){q(b,function(b){a.removeClass(b,c)})}function N(a){return function(b,c){c.addClass&&(Ka(a,b,c.addClass),c.addClass=null);c.removeClass&&(La(a,b,c.removeClass),c.removeClass=null)}}function ia(a){a=a||{};if(!a.$$prepared){var b=a.domOperation||
+M;a.domOperation=function(){a.$$domOperationFired=!0;b();b=M};a.$$prepared=!0}return a}function da(a,b){ya(a,b);za(a,b)}function ya(a,b){b.from&&(a.css(b.from),b.from=null)}function za(a,b){b.to&&(a.css(b.to),b.to=null)}function Q(a,b,c){var d=(b.addClass||"")+" "+(c.addClass||""),e=(b.removeClass||"")+" "+(c.removeClass||"");a=Ma(a.attr("class"),d,e);c.preparationClasses&&(b.preparationClasses=Y(c.preparationClasses,b.preparationClasses),delete c.preparationClasses);d=b.domOperation!==M?b.domOperation:
+null;Aa(b,c);d&&(b.domOperation=d);b.addClass=a.addClass?a.addClass:null;b.removeClass=a.removeClass?a.removeClass:null;return b}function Ma(a,b,c){function d(a){I(a)&&(a=a.split(" "));var b={};q(a,function(a){a.length&&(b[a]=!0)});return b}var e={};a=d(a);b=d(b);q(b,function(a,b){e[b]=1});c=d(c);q(c,function(a,b){e[b]=1===e[b]?null:-1});var s={addClass:"",removeClass:""};q(e,function(b,c){var e,d;1===b?(e="addClass",d=!a[c]):-1===b&&(e="removeClass",d=a[c]);d&&(s[e].length&&(s[e]+=" "),s[e]+=c)});
+return s}function B(a){return a instanceof u.element?a[0]:a}function Na(a,b,c){var d="";b&&(d=T(b,"ng-",!0));c.addClass&&(d=Y(d,T(c.addClass,"-add")));c.removeClass&&(d=Y(d,T(c.removeClass,"-remove")));d.length&&(c.preparationClasses=d,a.addClass(d))}function ja(a,b){var c=b?"-"+b+"s":"";ea(a,[fa,c]);return[fa,c]}function na(a,b){var c=b?"paused":"",d=U+"PlayState";ea(a,[d,c]);return[d,c]}function ea(a,b){a.style[b[0]]=b[1]}function Y(a,b){return a?b?a+" "+b:a:b}function Ba(a,b,c){var d=Object.create(null),
+e=a.getComputedStyle(b)||{};q(c,function(a,b){var c=e[a];if(c){var v=c.charAt(0);if("-"===v||"+"===v||0<=v)c=Oa(c);0===c&&(c=null);d[b]=c}});return d}function Oa(a){var b=0;a=a.split(/\s*,\s*/);q(a,function(a){"s"==a.charAt(a.length-1)&&(a=a.substring(0,a.length-1));a=parseFloat(a)||0;b=b?Math.max(a,b):a});return b}function oa(a){return 0===a||null!=a}function Ca(a,b){var c=O,d=a+"s";b?c+="Duration":d+=" linear all";return[c,d]}function Da(){var a=Object.create(null);return{flush:function(){a=Object.create(null)},
+count:function(b){return(b=a[b])?b.total:0},get:function(b){return(b=a[b])&&b.value},put:function(b,c){a[b]?a[b].total++:a[b]={total:1,value:c}}}}function Ea(a,b,c){q(c,function(c){a[c]=V(a[c])?a[c]:b.style.getPropertyValue(c)})}var M=u.noop,Aa=u.extend,L=u.element,q=u.forEach,X=u.isArray,I=u.isString,pa=u.isObject,qa=u.isUndefined,V=u.isDefined,Fa=u.isFunction,ra=u.isElement,O,sa,U,ta;qa(H.ontransitionend)&&V(H.onwebkittransitionend)?(O="WebkitTransition",sa="webkitTransitionEnd transitionend"):
+(O="transition",sa="transitionend");qa(H.onanimationend)&&V(H.onwebkitanimationend)?(U="WebkitAnimation",ta="webkitAnimationEnd animationend"):(U="animation",ta="animationend");var ka=U+"Delay",ua=U+"Duration",fa=O+"Delay";H=O+"Duration";var Pa={transitionDuration:H,transitionDelay:fa,transitionProperty:O+"Property",animationDuration:ua,animationDelay:ka,animationIterationCount:U+"IterationCount"},Qa={transitionDuration:H,transitionDelay:fa,animationDuration:ua,animationDelay:ka};u.module("ngAnimate",
+[]).directive("ngAnimateChildren",[function(){return function(a,b,c){a=c.ngAnimateChildren;u.isString(a)&&0===a.length?b.data("$$ngAnimateChildren",!0):c.$observe("ngAnimateChildren",function(a){b.data("$$ngAnimateChildren","on"===a||"true"===a)})}}]).factory("$$rAFScheduler",["$$rAF",function(a){function b(a){d=d.concat(a);c()}function c(){if(d.length){for(var b=d.shift(),h=0;h<b.length;h++)b[h]();e||a(function(){e||c()})}}var d,e;d=b.queue=[];b.waitUntilQuiet=function(b){e&&e();e=a(function(){e=
+null;b();c()})};return b}]).factory("$$AnimateRunner",["$q","$sniffer","$$animateAsyncRun",function(a,b,c){function d(a){this.setHost(a);this._doneCallbacks=[];this._runInAnimationFrame=c();this._state=0}d.chain=function(a,b){function c(){if(d===a.length)b(!0);else a[d](function(a){!1===a?b(!1):(d++,c())})}var d=0;c()};d.all=function(a,b){function c(h){v=v&&h;++d===a.length&&b(v)}var d=0,v=!0;q(a,function(a){a.done(c)})};d.prototype={setHost:function(a){this.host=a||{}},done:function(a){2===this._state?
+a():this._doneCallbacks.push(a)},progress:M,getPromise:function(){if(!this.promise){var b=this;this.promise=a(function(a,c){b.done(function(b){!1===b?c():a()})})}return this.promise},then:function(a,b){return this.getPromise().then(a,b)},"catch":function(a){return this.getPromise()["catch"](a)},"finally":function(a){return this.getPromise()["finally"](a)},pause:function(){this.host.pause&&this.host.pause()},resume:function(){this.host.resume&&this.host.resume()},end:function(){this.host.end&&this.host.end();
+this._resolve(!0)},cancel:function(){this.host.cancel&&this.host.cancel();this._resolve(!1)},complete:function(a){var b=this;0===b._state&&(b._state=1,b._runInAnimationFrame(function(){b._resolve(a)}))},_resolve:function(a){2!==this._state&&(q(this._doneCallbacks,function(b){b(a)}),this._doneCallbacks.length=0,this._state=2)}};return d}]).factory("$$animateAsyncRun",["$$rAF",function(a){function b(b){c.push(b);1<c.length||a(function(){for(var a=0;a<c.length;a++)c[a]();c=[]})}var c=[];return function(){var a=
+!1;b(function(){a=!0});return function(c){a?c():b(c)}}}]).provider("$$animateQueue",["$animateProvider",function(a){function b(a,b,c,q){return d[a].some(function(a){return a(b,c,q)})}function c(a,b){a=a||{};var c=0<(a.addClass||"").length,d=0<(a.removeClass||"").length;return b?c&&d:c||d}var d=this.rules={skip:[],cancel:[],join:[]};d.join.push(function(a,b,d){return!b.structural&&c(b.options)});d.skip.push(function(a,b,d){return!b.structural&&!c(b.options)});d.skip.push(function(a,b,c){return"leave"==
+c.event&&b.structural});d.skip.push(function(a,b,c){return c.structural&&2===c.state&&!b.structural});d.cancel.push(function(a,b,c){return c.structural&&b.structural});d.cancel.push(function(a,b,c){return 2===c.state&&b.structural});d.cancel.push(function(a,b,c){a=b.options;c=c.options;return a.addClass&&a.addClass===c.removeClass||a.removeClass&&a.removeClass===c.addClass});this.$get=["$$rAF","$rootScope","$rootElement","$document","$$HashMap","$$animation","$$AnimateRunner","$templateRequest","$$jqLite",
+"$$forceReflow",function(d,s,h,g,v,r,$,u,R,C){function D(){var a=!1;return function(b){a?b():s.$$postDigest(function(){a=!0;b()})}}function K(a,b,c){var f=B(b),d=B(a),n=[];(a=t[c])&&q(a,function(a){a.node.contains(f)?n.push(a.callback):"leave"===c&&a.node.contains(d)&&n.push(a.callback)});return n}function l(a,f,k){function n(b,c,f,t){R(function(){var b=K(v,a,c);b.length&&d(function(){q(b,function(b){b(a,f,t)})})});b.progress(c,f,t)}function t(b){var c=a,f=k;f.preparationClasses&&(c.removeClass(f.preparationClasses),
+f.preparationClasses=null);f.activeClasses&&(c.removeClass(f.activeClasses),f.activeClasses=null);Ha(a,k);da(a,k);k.domOperation();h.complete(!b)}var A,v;if(a=Ja(a))A=B(a),v=a.parent();k=ia(k);var h=new $,R=D();X(k.addClass)&&(k.addClass=k.addClass.join(" "));k.addClass&&!I(k.addClass)&&(k.addClass=null);X(k.removeClass)&&(k.removeClass=k.removeClass.join(" "));k.removeClass&&!I(k.removeClass)&&(k.removeClass=null);k.from&&!pa(k.from)&&(k.from=null);k.to&&!pa(k.to)&&(k.to=null);if(!A)return t(),h;
+var z=[A.className,k.addClass,k.removeClass].join(" ");if(!Ra(z))return t(),h;var l=0<=["enter","move","leave"].indexOf(f),g=!G||F.get(A),z=!g&&m.get(A)||{},C=!!z.state;g||C&&1==z.state||(g=!la(a,v,f));if(g)return t(),h;l&&y(a);g={structural:l,element:a,event:f,close:t,options:k,runner:h};if(C){if(b("skip",a,g,z)){if(2===z.state)return t(),h;Q(a,z.options,k);return z.runner}if(b("cancel",a,g,z))if(2===z.state)z.runner.end();else if(z.structural)z.close();else return Q(a,z.options,g.options),z.runner;
+else if(b("join",a,g,z))if(2===z.state)Q(a,k,{});else return Na(a,l?f:null,k),f=g.event=z.event,k=Q(a,z.options,g.options),z.runner}else Q(a,k,{});(C=g.structural)||(C="animate"===g.event&&0<Object.keys(g.options.to||{}).length||c(g.options));if(!C)return t(),w(a),h;var u=(z.counter||0)+1;g.counter=u;x(a,1,g);s.$$postDigest(function(){var b=m.get(A),d=!b,b=b||{},K=0<(a.parent()||[]).length&&("animate"===b.event||b.structural||c(b.options));if(d||b.counter!==u||!K){d&&(Ha(a,k),da(a,k));if(d||l&&b.event!==
+f)k.domOperation(),h.end();K||w(a)}else f=!b.structural&&c(b.options,!0)?"setClass":b.event,x(a,2),b=r(a,f,b.options),b.done(function(b){t(!b);(b=m.get(A))&&b.counter===u&&w(B(a));n(h,f,"close",{})}),h.setHost(b),n(h,f,"start",{})});return h}function y(a){a=B(a).querySelectorAll("[data-ng-animate]");q(a,function(a){var b=parseInt(a.getAttribute("data-ng-animate")),c=m.get(a);switch(b){case 2:c.runner.end();case 1:c&&m.remove(a)}})}function w(a){a=B(a);a.removeAttribute("data-ng-animate");m.remove(a)}
+function f(a,b){return B(a)===B(b)}function la(a,b,c){c=L(g[0].body);var d=f(a,c)||"HTML"===a[0].nodeName,t=f(a,h),n=!1,w;for((a=a.data("$ngAnimatePin"))&&(b=a);b&&b.length;){t||(t=f(b,h));a=b[0];if(1!==a.nodeType)break;var x=m.get(a)||{};n||(n=x.structural||F.get(a));if(qa(w)||!0===w)a=b.data("$$ngAnimateChildren"),V(a)&&(w=a);if(n&&!1===w)break;t||(t=f(b,h),t||(a=b.data("$ngAnimatePin"))&&(b=a));d||(d=f(b,c));b=b.parent()}return(!n||w)&&t&&d}function x(a,b,c){c=c||{};c.state=b;a=B(a);a.setAttribute("data-ng-animate",
+b);c=(b=m.get(a))?Aa(b,c):c;m.put(a,c)}var m=new v,F=new v,G=null,A=s.$watch(function(){return 0===u.totalPendingRequests},function(a){a&&(A(),s.$$postDigest(function(){s.$$postDigest(function(){null===G&&(G=!0)})}))}),t={},n=a.classNameFilter(),Ra=n?function(a){return n.test(a)}:function(){return!0},Ha=N(R);return{on:function(a,b,c){b=ma(b);t[a]=t[a]||[];t[a].push({node:b,callback:c})},off:function(a,b,c){function f(a,b,c){var d=ma(b);return a.filter(function(a){return!(a.node===d&&(!c||a.callback===
+c))})}var d=t[a];d&&(t[a]=1===arguments.length?null:f(d,b,c))},pin:function(a,b){wa(ra(a),"element","not an element");wa(ra(b),"parentElement","not an element");a.data("$ngAnimatePin",b)},push:function(a,b,c,f){c=c||{};c.domOperation=f;return l(a,b,c)},enabled:function(a,b){var c=arguments.length;if(0===c)b=!!G;else if(ra(a)){var f=B(a),d=F.get(f);1===c?b=!d:(b=!!b)?d&&F.remove(f):F.put(f,!0)}else b=G=!!a;return b}}}]}]).provider("$$animation",["$animateProvider",function(a){function b(a){return a.data("$$animationRunner")}
+var c=this.drivers=[];this.$get=["$$jqLite","$rootScope","$injector","$$AnimateRunner","$$HashMap","$$rAFScheduler",function(a,e,s,h,g,v){function r(a){function b(a){if(a.processed)return a;a.processed=!0;var f=a.domNode,d=f.parentNode;e.put(f,a);for(var x;d;){if(x=e.get(d)){x.processed||(x=b(x));break}d=d.parentNode}(x||c).children.push(a);return a}var c={children:[]},d,e=new g;for(d=0;d<a.length;d++){var h=a[d];e.put(h.domNode,a[d]={domNode:h.domNode,fn:h.fn,children:[]})}for(d=0;d<a.length;d++)b(a[d]);
+return function(a){var b=[],c=[],d;for(d=0;d<a.children.length;d++)c.push(a.children[d]);a=c.length;var m=0,e=[];for(d=0;d<c.length;d++){var h=c[d];0>=a&&(a=m,m=0,b.push(e),e=[]);e.push(h.fn);h.children.forEach(function(a){m++;c.push(a)});a--}e.length&&b.push(e);return b}(c)}var $=[],u=N(a);return function(g,C,D){function K(a){a=a.hasAttribute("ng-animate-ref")?[a]:a.querySelectorAll("[ng-animate-ref]");var b=[];q(a,function(a){var c=a.getAttribute("ng-animate-ref");c&&c.length&&b.push(a)});return b}
+function l(a){var b=[],c={};q(a,function(a,f){var d=B(a.element),t=0<=["enter","move"].indexOf(a.event),d=a.structural?K(d):[];if(d.length){var m=t?"to":"from";q(d,function(a){var b=a.getAttribute("ng-animate-ref");c[b]=c[b]||{};c[b][m]={animationID:f,element:L(a)}})}else b.push(a)});var f={},d={};q(c,function(c,m){var w=c.from,e=c.to;if(w&&e){var h=a[w.animationID],g=a[e.animationID],x=w.animationID.toString();if(!d[x]){var A=d[x]={structural:!0,beforeStart:function(){h.beforeStart();g.beforeStart()},
+close:function(){h.close();g.close()},classes:y(h.classes,g.classes),from:h,to:g,anchors:[]};A.classes.length?b.push(A):(b.push(h),b.push(g))}d[x].anchors.push({out:w.element,"in":e.element})}else w=w?w.animationID:e.animationID,e=w.toString(),f[e]||(f[e]=!0,b.push(a[w]))});return b}function y(a,b){a=a.split(" ");b=b.split(" ");for(var c=[],f=0;f<a.length;f++){var d=a[f];if("ng-"!==d.substring(0,3))for(var m=0;m<b.length;m++)if(d===b[m]){c.push(d);break}}return c.join(" ")}function w(a){for(var b=
+c.length-1;0<=b;b--){var f=c[b];if(s.has(f)&&(f=s.get(f)(a)))return f}}function f(a,c){a.from&&a.to?(b(a.from.element).setHost(c),b(a.to.element).setHost(c)):b(a.element).setHost(c)}function la(){var a=b(g);!a||"leave"===C&&D.$$domOperationFired||a.end()}function x(b){g.off("$destroy",la);g.removeData("$$animationRunner");u(g,D);da(g,D);D.domOperation();A&&a.removeClass(g,A);g.removeClass("ng-animate");F.complete(!b)}D=ia(D);var m=0<=["enter","move","leave"].indexOf(C),F=new h({end:function(){x()},
+cancel:function(){x(!0)}});if(!c.length)return x(),F;g.data("$$animationRunner",F);var G=xa(g.attr("class"),xa(D.addClass,D.removeClass)),A=D.tempClasses;A&&(G+=" "+A,D.tempClasses=null);$.push({element:g,classes:G,event:C,structural:m,options:D,beforeStart:function(){g.addClass("ng-animate");A&&a.addClass(g,A)},close:x});g.on("$destroy",la);if(1<$.length)return F;e.$$postDigest(function(){var a=[];q($,function(c){b(c.element)?a.push(c):c.close()});$.length=0;var c=l(a),d=[];q(c,function(a){d.push({domNode:B(a.from?
+a.from.element:a.element),fn:function(){a.beforeStart();var c,d=a.close;if(b(a.anchors?a.from.element||a.to.element:a.element)){var m=w(a);m&&(c=m.start)}c?(c=c(),c.done(function(a){d(!a)}),f(a,c)):d()}})});v(r(d))});return F}}]}]).provider("$animateCss",["$animateProvider",function(a){var b=Da(),c=Da();this.$get=["$window","$$jqLite","$$AnimateRunner","$timeout","$$forceReflow","$sniffer","$$rAFScheduler","$animate",function(a,e,s,h,g,v,r,u){function Ga(a,b){var c=a.parentNode;return(c.$$ngAnimateParentKey||
+(c.$$ngAnimateParentKey=++l))+"-"+a.getAttribute("class")+"-"+b}function R(w,f,h,g){var m;0<b.count(h)&&(m=c.get(h),m||(f=T(f,"-stagger"),e.addClass(w,f),m=Ba(a,w,g),m.animationDuration=Math.max(m.animationDuration,0),m.transitionDuration=Math.max(m.transitionDuration,0),e.removeClass(w,f),c.put(h,m)));return m||{}}function C(a){y.push(a);r.waitUntilQuiet(function(){b.flush();c.flush();for(var a=g(),d=0;d<y.length;d++)y[d](a);y.length=0})}function D(c,f,e){f=b.get(e);f||(f=Ba(a,c,Pa),"infinite"===
+f.animationIterationCount&&(f.animationIterationCount=1));b.put(e,f);c=f;e=c.animationDelay;f=c.transitionDelay;c.maxDelay=e&&f?Math.max(e,f):e||f;c.maxDuration=Math.max(c.animationDuration*c.animationIterationCount,c.transitionDuration);return c}var K=N(e),l=0,y=[];return function(a,c){function d(){m()}function g(){m(!0)}function m(b){if(!(ga||va&&k)){ga=!0;k=!1;c.$$skipPreparationClasses||e.removeClass(a,Z);e.removeClass(a,Y);na(n,!1);ja(n,!1);q(y,function(a){n.style[a[0]]=""});K(a,c);da(a,c);Object.keys(t).length&&
+q(t,function(a,b){a?n.style.setProperty(b,a):n.style.removeProperty(b)});if(c.onDone)c.onDone();H&&H.complete(!b)}}function F(a){p.blockTransition&&ja(n,a);p.blockKeyframeAnimation&&na(n,!!a)}function G(){H=new s({end:d,cancel:g});C(M);m();return{$$willAnimate:!1,start:function(){return H},end:d}}function A(){function b(){if(!ga){F(!1);q(y,function(a){n.style[a[0]]=a[1]});K(a,c);e.addClass(a,Y);if(p.recalculateTimingStyles){ha=n.className+" "+Z;aa=Ga(n,ha);E=D(n,ha,aa);W=E.maxDelay;I=Math.max(W,0);
+J=E.maxDuration;if(0===J){m();return}p.hasTransitions=0<E.transitionDuration;p.hasAnimations=0<E.animationDuration}p.applyAnimationDelay&&(W="boolean"!==typeof c.delay&&oa(c.delay)?parseFloat(c.delay):W,I=Math.max(W,0),E.animationDelay=W,ca=[ka,W+"s"],y.push(ca),n.style[ca[0]]=ca[1]);N=1E3*I;z=1E3*J;if(c.easing){var k,l=c.easing;p.hasTransitions&&(k=O+"TimingFunction",y.push([k,l]),n.style[k]=l);p.hasAnimations&&(k=U+"TimingFunction",y.push([k,l]),n.style[k]=l)}E.transitionDuration&&x.push(sa);E.animationDuration&&
+x.push(ta);A=Date.now();var v=N+1.5*z;k=A+v;var l=a.data("$$animateCss")||[],r=!0;if(l.length){var G=l[0];(r=k>G.expectedEndTime)?h.cancel(G.timer):l.push(m)}r&&(v=h(d,v,!1),l[0]={timer:v,expectedEndTime:k},l.push(m),a.data("$$animateCss",l));a.on(x.join(" "),g);c.to&&(c.cleanupStyles&&Ea(t,n,Object.keys(c.to)),za(a,c))}}function d(){var b=a.data("$$animateCss");if(b){for(var c=1;c<b.length;c++)b[c]();a.removeData("$$animateCss")}}function g(a){a.stopPropagation();var b=a.originalEvent||a;a=b.$manualTimeStamp||
+b.timeStamp||Date.now();b=parseFloat(b.elapsedTime.toFixed(3));Math.max(a-A,0)>=N&&b>=J&&(va=!0,m())}if(!ga)if(n.parentNode){var A,x=[],l=function(a){if(va)k&&a&&(k=!1,m());else if(k=!a,E.animationDuration)if(a=na(n,k),k)y.push(a);else{var b=y,c=b.indexOf(a);0<=a&&b.splice(c,1)}},v=0<V&&(E.transitionDuration&&0===S.transitionDuration||E.animationDuration&&0===S.animationDuration)&&Math.max(S.animationDelay,S.transitionDelay);v?h(b,Math.floor(v*V*1E3),!1):b();L.resume=function(){l(!0)};L.pause=function(){l(!1)}}else m()}
+var t={},n=B(a);if(!n||!n.parentNode||!u.enabled())return G();c=ia(c);var y=[],r=a.attr("class"),l=Ia(c),ga,k,va,H,L,I,N,J,z;if(0===c.duration||!v.animations&&!v.transitions)return G();var ba=c.event&&X(c.event)?c.event.join(" "):c.event,Q="",P="";ba&&c.structural?Q=T(ba,"ng-",!0):ba&&(Q=ba);c.addClass&&(P+=T(c.addClass,"-add"));c.removeClass&&(P.length&&(P+=" "),P+=T(c.removeClass,"-remove"));c.applyClassesEarly&&P.length&&K(a,c);var Z=[Q,P].join(" ").trim(),ha=r+" "+Z,Y=T(Z,"-active"),r=l.to&&0<
+Object.keys(l.to).length;if(!(0<(c.keyframeStyle||"").length||r||Z))return G();var aa,S;0<c.stagger?(l=parseFloat(c.stagger),S={transitionDelay:l,animationDelay:l,transitionDuration:0,animationDuration:0}):(aa=Ga(n,ha),S=R(n,Z,aa,Qa));c.$$skipPreparationClasses||e.addClass(a,Z);c.transitionStyle&&(l=[O,c.transitionStyle],ea(n,l),y.push(l));0<=c.duration&&(l=0<n.style[O].length,l=Ca(c.duration,l),ea(n,l),y.push(l));c.keyframeStyle&&(l=[U,c.keyframeStyle],ea(n,l),y.push(l));var V=S?0<=c.staggerIndex?
+c.staggerIndex:b.count(aa):0;(ba=0===V)&&!c.skipBlocking&&ja(n,9999);var E=D(n,ha,aa),W=E.maxDelay;I=Math.max(W,0);J=E.maxDuration;var p={};p.hasTransitions=0<E.transitionDuration;p.hasAnimations=0<E.animationDuration;p.hasTransitionAll=p.hasTransitions&&"all"==E.transitionProperty;p.applyTransitionDuration=r&&(p.hasTransitions&&!p.hasTransitionAll||p.hasAnimations&&!p.hasTransitions);p.applyAnimationDuration=c.duration&&p.hasAnimations;p.applyTransitionDelay=oa(c.delay)&&(p.applyTransitionDuration||
+p.hasTransitions);p.applyAnimationDelay=oa(c.delay)&&p.hasAnimations;p.recalculateTimingStyles=0<P.length;if(p.applyTransitionDuration||p.applyAnimationDuration)J=c.duration?parseFloat(c.duration):J,p.applyTransitionDuration&&(p.hasTransitions=!0,E.transitionDuration=J,l=0<n.style[O+"Property"].length,y.push(Ca(J,l))),p.applyAnimationDuration&&(p.hasAnimations=!0,E.animationDuration=J,y.push([ua,J+"s"]));if(0===J&&!p.recalculateTimingStyles)return G();if(null!=c.delay){var ca=parseFloat(c.delay);
+p.applyTransitionDelay&&y.push([fa,ca+"s"]);p.applyAnimationDelay&&y.push([ka,ca+"s"])}null==c.duration&&0<E.transitionDuration&&(p.recalculateTimingStyles=p.recalculateTimingStyles||ba);N=1E3*I;z=1E3*J;c.skipBlocking||(p.blockTransition=0<E.transitionDuration,p.blockKeyframeAnimation=0<E.animationDuration&&0<S.animationDelay&&0===S.animationDuration);c.from&&(c.cleanupStyles&&Ea(t,n,Object.keys(c.from)),ya(a,c));p.blockTransition||p.blockKeyframeAnimation?F(J):c.skipBlocking||ja(n,!1);return{$$willAnimate:!0,
+end:d,start:function(){if(!ga)return L={end:d,cancel:g,resume:null,pause:null},H=new s(L),C(A),H}}}}]}]).provider("$$animateCssDriver",["$$animationProvider",function(a){a.drivers.push("$$animateCssDriver");this.$get=["$animateCss","$rootScope","$$AnimateRunner","$rootElement","$sniffer","$$jqLite","$document",function(a,c,d,e,s,h,g){function v(a){return a.replace(/\bng-\S+\b/g,"")}function r(a,b){I(a)&&(a=a.split(" "));I(b)&&(b=b.split(" "));return a.filter(function(a){return-1===b.indexOf(a)}).join(" ")}
+function u(c,e,g){function h(a){var b={},c=B(a).getBoundingClientRect();q(["width","height","top","left"],function(a){var d=c[a];switch(a){case "top":d+=C.scrollTop;break;case "left":d+=C.scrollLeft}b[a]=Math.floor(d)+"px"});return b}function f(){var c=v(g.attr("class")||""),d=r(c,m),c=r(m,c),d=a(x,{to:h(g),addClass:"ng-anchor-in "+d,removeClass:"ng-anchor-out "+c,delay:!0});return d.$$willAnimate?d:null}function s(){x.remove();e.removeClass("ng-animate-shim");g.removeClass("ng-animate-shim")}var x=
+L(B(e).cloneNode(!0)),m=v(x.attr("class")||"");e.addClass("ng-animate-shim");g.addClass("ng-animate-shim");x.addClass("ng-anchor");D.append(x);var F;c=function(){var c=a(x,{addClass:"ng-anchor-out",delay:!0,from:h(e)});return c.$$willAnimate?c:null}();if(!c&&(F=f(),!F))return s();var G=c||F;return{start:function(){function a(){c&&c.end()}var b,c=G.start();c.done(function(){c=null;if(!F&&(F=f()))return c=F.start(),c.done(function(){c=null;s();b.complete()}),c;s();b.complete()});return b=new d({end:a,
+cancel:a})}}}function H(a,b,c,e){var f=R(a,M),g=R(b,M),h=[];q(e,function(a){(a=u(c,a.out,a["in"]))&&h.push(a)});if(f||g||0!==h.length)return{start:function(){function a(){q(b,function(a){a.end()})}var b=[];f&&b.push(f.start());g&&b.push(g.start());q(h,function(a){b.push(a.start())});var c=new d({end:a,cancel:a});d.all(b,function(a){c.complete(a)});return c}}}function R(c){var d=c.element,e=c.options||{};c.structural&&(e.event=c.event,e.structural=!0,e.applyClassesEarly=!0,"leave"===c.event&&(e.onDone=
+e.domOperation));e.preparationClasses&&(e.event=Y(e.event,e.preparationClasses));c=a(d,e);return c.$$willAnimate?c:null}if(!s.animations&&!s.transitions)return M;var C=g[0].body;c=B(e);var D=L(c.parentNode&&11===c.parentNode.nodeType||C.contains(c)?c:C);N(h);return function(a){return a.from&&a.to?H(a.from,a.to,a.classes,a.anchors):R(a)}}]}]).provider("$$animateJs",["$animateProvider",function(a){this.$get=["$injector","$$AnimateRunner","$$jqLite",function(b,c,d){function e(c){c=X(c)?c:c.split(" ");
+for(var d=[],e={},r=0;r<c.length;r++){var q=c[r],s=a.$$registeredAnimations[q];s&&!e[q]&&(d.push(b.get(s)),e[q]=!0)}return d}var s=N(d);return function(a,b,d,r){function u(){r.domOperation();s(a,r)}function H(a,b,d,e,f){switch(d){case "animate":b=[b,e.from,e.to,f];break;case "setClass":b=[b,D,K,f];break;case "addClass":b=[b,D,f];break;case "removeClass":b=[b,K,f];break;default:b=[b,f]}b.push(e);if(a=a.apply(a,b))if(Fa(a.start)&&(a=a.start()),a instanceof c)a.done(f);else if(Fa(a))return a;return M}
+function B(a,b,d,e,f){var g=[];q(e,function(e){var h=e[f];h&&g.push(function(){var e,f,g=!1,k=function(a){g||(g=!0,(f||M)(a),e.complete(!a))};e=new c({end:function(){k()},cancel:function(){k(!0)}});f=H(h,a,b,d,function(a){k(!1===a)});return e})});return g}function C(a,b,d,e,f){var g=B(a,b,d,e,f);if(0===g.length){var h,l;"beforeSetClass"===f?(h=B(a,"removeClass",d,e,"beforeRemoveClass"),l=B(a,"addClass",d,e,"beforeAddClass")):"setClass"===f&&(h=B(a,"removeClass",d,e,"removeClass"),l=B(a,"addClass",
+d,e,"addClass"));h&&(g=g.concat(h));l&&(g=g.concat(l))}if(0!==g.length)return function(a){var b=[];g.length&&q(g,function(a){b.push(a())});b.length?c.all(b,a):a();return function(a){q(b,function(b){a?b.cancel():b.end()})}}}3===arguments.length&&pa(d)&&(r=d,d=null);r=ia(r);d||(d=a.attr("class")||"",r.addClass&&(d+=" "+r.addClass),r.removeClass&&(d+=" "+r.removeClass));var D=r.addClass,K=r.removeClass,l=e(d),y,w;if(l.length){var f,I;"leave"==b?(I="leave",f="afterLeave"):(I="before"+b.charAt(0).toUpperCase()+
+b.substr(1),f=b);"enter"!==b&&"move"!==b&&(y=C(a,b,r,l,I));w=C(a,b,r,l,f)}if(y||w)return{start:function(){function b(c){f=!0;u();da(a,r);g.complete(c)}var d,e=[];y&&e.push(function(a){d=y(a)});e.length?e.push(function(a){u();a(!0)}):u();w&&e.push(function(a){d=w(a)});var f=!1,g=new c({end:function(){f||((d||M)(void 0),b(void 0))},cancel:function(){f||((d||M)(!0),b(!0))}});c.chain(e,b);return g}}}}]}]).provider("$$animateJsDriver",["$$animationProvider",function(a){a.drivers.push("$$animateJsDriver");
+this.$get=["$$animateJs","$$AnimateRunner",function(a,c){function d(c){return a(c.element,c.event,c.classes,c.options)}return function(a){if(a.from&&a.to){var b=d(a.from),h=d(a.to);if(b||h)return{start:function(){function a(){return function(){q(d,function(a){a.end()})}}var d=[];b&&d.push(b.start());h&&d.push(h.start());c.all(d,function(a){e.complete(a)});var e=new c({end:a(),cancel:a()});return e}}}else return d(a)}}]}])})(window,window.angular);
+//# sourceMappingURL=angular-animate.min.js.map
diff --git a/src/main/websrc/js/common/angular-ui-router.min.js b/src/main/websrc/js/common/angular-ui-router.min.js
new file mode 100644
index 0000000..18d8307
--- /dev/null
+++ b/src/main/websrc/js/common/angular-ui-router.min.js
@@ -0,0 +1,7 @@
+/**
+ * State-based routing for AngularJS
+ * @version v0.2.15
+ * @link http://angular-ui.github.com/
+ * @license MIT License, http://www.opensource.org/licenses/MIT
+ */
+"undefined"!=typeof module&&"undefined"!=typeof exports&&module.exports===exports&&(module.exports="ui.router"),function(a,b,c){"use strict";function d(a,b){return N(new(N(function(){},{prototype:a})),b)}function e(a){return M(arguments,function(b){b!==a&&M(b,function(b,c){a.hasOwnProperty(c)||(a[c]=b)})}),a}function f(a,b){var c=[];for(var d in a.path){if(a.path[d]!==b.path[d])break;c.push(a.path[d])}return c}function g(a){if(Object.keys)return Object.keys(a);var b=[];return M(a,function(a,c){b.push(c)}),b}function h(a,b){if(Array.prototype.indexOf)return a.indexOf(b,Number(arguments[2])||0);var c=a.length>>>0,d=Number(arguments[2])||0;for(d=0>d?Math.ceil(d):Math.floor(d),0>d&&(d+=c);c>d;d++)if(d in a&&a[d]===b)return d;return-1}function i(a,b,c,d){var e,i=f(c,d),j={},k=[];for(var l in i)if(i[l].params&&(e=g(i[l].params),e.length))for(var m in e)h(k,e[m])>=0||(k.push(e[m]),j[e[m]]=a[e[m]]);return N({},j,b)}function j(a,b,c){if(!c){c=[];for(var d in a)c.push(d)}for(var e=0;e<c.length;e++){var f=c[e];if(a[f]!=b[f])return!1}return!0}function k(a,b){var c={};return M(a,function(a){c[a]=b[a]}),c}function l(a){var b={},c=Array.prototype.concat.apply(Array.prototype,Array.prototype.slice.call(arguments,1));return M(c,function(c){c in a&&(b[c]=a[c])}),b}function m(a){var b={},c=Array.prototype.concat.apply(Array.prototype,Array.prototype.slice.call(arguments,1));for(var d in a)-1==h(c,d)&&(b[d]=a[d]);return b}function n(a,b){var c=L(a),d=c?[]:{};return M(a,function(a,e){b(a,e)&&(d[c?d.length:e]=a)}),d}function o(a,b){var c=L(a)?[]:{};return M(a,function(a,d){c[d]=b(a,d)}),c}function p(a,b){var d=1,f=2,i={},j=[],k=i,l=N(a.when(i),{$$promises:i,$$values:i});this.study=function(i){function n(a,c){if(s[c]!==f){if(r.push(c),s[c]===d)throw r.splice(0,h(r,c)),new Error("Cyclic dependency: "+r.join(" -> "));if(s[c]=d,J(a))q.push(c,[function(){return b.get(a)}],j);else{var e=b.annotate(a);M(e,function(a){a!==c&&i.hasOwnProperty(a)&&n(i[a],a)}),q.push(c,a,e)}r.pop(),s[c]=f}}function o(a){return K(a)&&a.then&&a.$$promises}if(!K(i))throw new Error("'invocables' must be an object");var p=g(i||{}),q=[],r=[],s={};return M(i,n),i=r=s=null,function(d,f,g){function h(){--u||(v||e(t,f.$$values),r.$$values=t,r.$$promises=r.$$promises||!0,delete r.$$inheritedValues,n.resolve(t))}function i(a){r.$$failure=a,n.reject(a)}function j(c,e,f){function j(a){l.reject(a),i(a)}function k(){if(!H(r.$$failure))try{l.resolve(b.invoke(e,g,t)),l.promise.then(function(a){t[c]=a,h()},j)}catch(a){j(a)}}var l=a.defer(),m=0;M(f,function(a){s.hasOwnProperty(a)&&!d.hasOwnProperty(a)&&(m++,s[a].then(function(b){t[a]=b,--m||k()},j))}),m||k(),s[c]=l.promise}if(o(d)&&g===c&&(g=f,f=d,d=null),d){if(!K(d))throw new Error("'locals' must be an object")}else d=k;if(f){if(!o(f))throw new Error("'parent' must be a promise returned by $resolve.resolve()")}else f=l;var n=a.defer(),r=n.promise,s=r.$$promises={},t=N({},d),u=1+q.length/3,v=!1;if(H(f.$$failure))return i(f.$$failure),r;f.$$inheritedValues&&e(t,m(f.$$inheritedValues,p)),N(s,f.$$promises),f.$$values?(v=e(t,m(f.$$values,p)),r.$$inheritedValues=m(f.$$values,p),h()):(f.$$inheritedValues&&(r.$$inheritedValues=m(f.$$inheritedValues,p)),f.then(h,i));for(var w=0,x=q.length;x>w;w+=3)d.hasOwnProperty(q[w])?h():j(q[w],q[w+1],q[w+2]);return r}},this.resolve=function(a,b,c,d){return this.study(a)(b,c,d)}}function q(a,b,c){this.fromConfig=function(a,b,c){return H(a.template)?this.fromString(a.template,b):H(a.templateUrl)?this.fromUrl(a.templateUrl,b):H(a.templateProvider)?this.fromProvider(a.templateProvider,b,c):null},this.fromString=function(a,b){return I(a)?a(b):a},this.fromUrl=function(c,d){return I(c)&&(c=c(d)),null==c?null:a.get(c,{cache:b,headers:{Accept:"text/html"}}).then(function(a){return a.data})},this.fromProvider=function(a,b,d){return c.invoke(a,null,d||{params:b})}}function r(a,b,e){function f(b,c,d,e){if(q.push(b),o[b])return o[b];if(!/^\w+(-+\w+)*(?:\[\])?$/.test(b))throw new Error("Invalid parameter name '"+b+"' in pattern '"+a+"'");if(p[b])throw new Error("Duplicate parameter name '"+b+"' in pattern '"+a+"'");return p[b]=new P.Param(b,c,d,e),p[b]}function g(a,b,c,d){var e=["",""],f=a.replace(/[\\\[\]\^$*+?.()|{}]/g,"\\$&");if(!b)return f;switch(c){case!1:e=["(",")"+(d?"?":"")];break;case!0:e=["?(",")?"];break;default:e=["("+c+"|",")?"]}return f+e[0]+b+e[1]}function h(e,f){var g,h,i,j,k;return g=e[2]||e[3],k=b.params[g],i=a.substring(m,e.index),h=f?e[4]:e[4]||("*"==e[1]?".*":null),j=P.type(h||"string")||d(P.type("string"),{pattern:new RegExp(h,b.caseInsensitive?"i":c)}),{id:g,regexp:h,segment:i,type:j,cfg:k}}b=N({params:{}},K(b)?b:{});var i,j=/([:*])([\w\[\]]+)|\{([\w\[\]]+)(?:\:((?:[^{}\\]+|\\.|\{(?:[^{}\\]+|\\.)*\})+))?\}/g,k=/([:]?)([\w\[\]-]+)|\{([\w\[\]-]+)(?:\:((?:[^{}\\]+|\\.|\{(?:[^{}\\]+|\\.)*\})+))?\}/g,l="^",m=0,n=this.segments=[],o=e?e.params:{},p=this.params=e?e.params.$$new():new P.ParamSet,q=[];this.source=a;for(var r,s,t;(i=j.exec(a))&&(r=h(i,!1),!(r.segment.indexOf("?")>=0));)s=f(r.id,r.type,r.cfg,"path"),l+=g(r.segment,s.type.pattern.source,s.squash,s.isOptional),n.push(r.segment),m=j.lastIndex;t=a.substring(m);var u=t.indexOf("?");if(u>=0){var v=this.sourceSearch=t.substring(u);if(t=t.substring(0,u),this.sourcePath=a.substring(0,m+u),v.length>0)for(m=0;i=k.exec(v);)r=h(i,!0),s=f(r.id,r.type,r.cfg,"search"),m=j.lastIndex}else this.sourcePath=a,this.sourceSearch="";l+=g(t)+(b.strict===!1?"/?":"")+"$",n.push(t),this.regexp=new RegExp(l,b.caseInsensitive?"i":c),this.prefix=n[0],this.$$paramNames=q}function s(a){N(this,a)}function t(){function a(a){return null!=a?a.toString().replace(/\//g,"%2F"):a}function e(a){return null!=a?a.toString().replace(/%2F/g,"/"):a}function f(){return{strict:p,caseInsensitive:m}}function i(a){return I(a)||L(a)&&I(a[a.length-1])}function j(){for(;w.length;){var a=w.shift();if(a.pattern)throw new Error("You cannot override a type's .pattern at runtime.");b.extend(u[a.name],l.invoke(a.def))}}function k(a){N(this,a||{})}P=this;var l,m=!1,p=!0,q=!1,u={},v=!0,w=[],x={string:{encode:a,decode:e,is:function(a){return null==a||!H(a)||"string"==typeof a},pattern:/[^/]*/},"int":{encode:a,decode:function(a){return parseInt(a,10)},is:function(a){return H(a)&&this.decode(a.toString())===a},pattern:/\d+/},bool:{encode:function(a){return a?1:0},decode:function(a){return 0!==parseInt(a,10)},is:function(a){return a===!0||a===!1},pattern:/0|1/},date:{encode:function(a){return this.is(a)?[a.getFullYear(),("0"+(a.getMonth()+1)).slice(-2),("0"+a.getDate()).slice(-2)].join("-"):c},decode:function(a){if(this.is(a))return a;var b=this.capture.exec(a);return b?new Date(b[1],b[2]-1,b[3]):c},is:function(a){return a instanceof Date&&!isNaN(a.valueOf())},equals:function(a,b){return this.is(a)&&this.is(b)&&a.toISOString()===b.toISOString()},pattern:/[0-9]{4}-(?:0[1-9]|1[0-2])-(?:0[1-9]|[1-2][0-9]|3[0-1])/,capture:/([0-9]{4})-(0[1-9]|1[0-2])-(0[1-9]|[1-2][0-9]|3[0-1])/},json:{encode:b.toJson,decode:b.fromJson,is:b.isObject,equals:b.equals,pattern:/[^/]*/},any:{encode:b.identity,decode:b.identity,equals:b.equals,pattern:/.*/}};t.$$getDefaultValue=function(a){if(!i(a.value))return a.value;if(!l)throw new Error("Injectable functions cannot be called at configuration time");return l.invoke(a.value)},this.caseInsensitive=function(a){return H(a)&&(m=a),m},this.strictMode=function(a){return H(a)&&(p=a),p},this.defaultSquashPolicy=function(a){if(!H(a))return q;if(a!==!0&&a!==!1&&!J(a))throw new Error("Invalid squash policy: "+a+". Valid policies: false, true, arbitrary-string");return q=a,a},this.compile=function(a,b){return new r(a,N(f(),b))},this.isMatcher=function(a){if(!K(a))return!1;var b=!0;return M(r.prototype,function(c,d){I(c)&&(b=b&&H(a[d])&&I(a[d]))}),b},this.type=function(a,b,c){if(!H(b))return u[a];if(u.hasOwnProperty(a))throw new Error("A type named '"+a+"' has already been defined.");return u[a]=new s(N({name:a},b)),c&&(w.push({name:a,def:c}),v||j()),this},M(x,function(a,b){u[b]=new s(N({name:b},a))}),u=d(u,{}),this.$get=["$injector",function(a){return l=a,v=!1,j(),M(x,function(a,b){u[b]||(u[b]=new s(a))}),this}],this.Param=function(a,b,d,e){function f(a){var b=K(a)?g(a):[],c=-1===h(b,"value")&&-1===h(b,"type")&&-1===h(b,"squash")&&-1===h(b,"array");return c&&(a={value:a}),a.$$fn=i(a.value)?a.value:function(){return a.value},a}function j(b,c,d){if(b.type&&c)throw new Error("Param '"+a+"' has two type configurations.");return c?c:b.type?b.type instanceof s?b.type:new s(b.type):"config"===d?u.any:u.string}function k(){var b={array:"search"===e?"auto":!1},c=a.match(/\[\]$/)?{array:!0}:{};return N(b,c,d).array}function m(a,b){var c=a.squash;if(!b||c===!1)return!1;if(!H(c)||null==c)return q;if(c===!0||J(c))return c;throw new Error("Invalid squash policy: '"+c+"'. Valid policies: false, true, or arbitrary string")}function p(a,b,d,e){var f,g,i=[{from:"",to:d||b?c:""},{from:null,to:d||b?c:""}];return f=L(a.replace)?a.replace:[],J(e)&&f.push({from:e,to:c}),g=o(f,function(a){return a.from}),n(i,function(a){return-1===h(g,a.from)}).concat(f)}function r(){if(!l)throw new Error("Injectable functions cannot be called at configuration time");var a=l.invoke(d.$$fn);if(null!==a&&a!==c&&!w.type.is(a))throw new Error("Default value ("+a+") for parameter '"+w.id+"' is not an instance of Type ("+w.type.name+")");return a}function t(a){function b(a){return function(b){return b.from===a}}function c(a){var c=o(n(w.replace,b(a)),function(a){return a.to});return c.length?c[0]:a}return a=c(a),H(a)?w.type.$normalize(a):r()}function v(){return"{Param:"+a+" "+b+" squash: '"+z+"' optional: "+y+"}"}var w=this;d=f(d),b=j(d,b,e);var x=k();b=x?b.$asArray(x,"search"===e):b,"string"!==b.name||x||"path"!==e||d.value!==c||(d.value="");var y=d.value!==c,z=m(d,y),A=p(d,x,y,z);N(this,{id:a,type:b,location:e,array:x,squash:z,replace:A,isOptional:y,value:t,dynamic:c,config:d,toString:v})},k.prototype={$$new:function(){return d(this,N(new k,{$$parent:this}))},$$keys:function(){for(var a=[],b=[],c=this,d=g(k.prototype);c;)b.push(c),c=c.$$parent;return b.reverse(),M(b,function(b){M(g(b),function(b){-1===h(a,b)&&-1===h(d,b)&&a.push(b)})}),a},$$values:function(a){var b={},c=this;return M(c.$$keys(),function(d){b[d]=c[d].value(a&&a[d])}),b},$$equals:function(a,b){var c=!0,d=this;return M(d.$$keys(),function(e){var f=a&&a[e],g=b&&b[e];d[e].type.equals(f,g)||(c=!1)}),c},$$validates:function(a){var d,e,f,g,h,i=this.$$keys();for(d=0;d<i.length&&(e=this[i[d]],f=a[i[d]],f!==c&&null!==f||!e.isOptional);d++){if(g=e.type.$normalize(f),!e.type.is(g))return!1;if(h=e.type.encode(g),b.isString(h)&&!e.type.pattern.exec(h))return!1}return!0},$$parent:c},this.ParamSet=k}function u(a,d){function e(a){var b=/^\^((?:\\[^a-zA-Z0-9]|[^\\\[\]\^$*+?.()|{}]+)*)/.exec(a.source);return null!=b?b[1].replace(/\\(.)/g,"$1"):""}function f(a,b){return a.replace(/\$(\$|\d{1,2})/,function(a,c){return b["$"===c?0:Number(c)]})}function g(a,b,c){if(!c)return!1;var d=a.invoke(b,b,{$match:c});return H(d)?d:!0}function h(d,e,f,g){function h(a,b,c){return"/"===p?a:b?p.slice(0,-1)+a:c?p.slice(1)+a:a}function m(a){function b(a){var b=a(f,d);return b?(J(b)&&d.replace().url(b),!0):!1}if(!a||!a.defaultPrevented){o&&d.url()===o;o=c;var e,g=j.length;for(e=0;g>e;e++)if(b(j[e]))return;k&&b(k)}}function n(){return i=i||e.$on("$locationChangeSuccess",m)}var o,p=g.baseHref(),q=d.url();return l||n(),{sync:function(){m()},listen:function(){return n()},update:function(a){return a?void(q=d.url()):void(d.url()!==q&&(d.url(q),d.replace()))},push:function(a,b,e){var f=a.format(b||{});null!==f&&b&&b["#"]&&(f+="#"+b["#"]),d.url(f),o=e&&e.$$avoidResync?d.url():c,e&&e.replace&&d.replace()},href:function(c,e,f){if(!c.validates(e))return null;var g=a.html5Mode();b.isObject(g)&&(g=g.enabled);var i=c.format(e);if(f=f||{},g||null===i||(i="#"+a.hashPrefix()+i),null!==i&&e&&e["#"]&&(i+="#"+e["#"]),i=h(i,g,f.absolute),!f.absolute||!i)return i;var j=!g&&i?"/":"",k=d.port();return k=80===k||443===k?"":":"+k,[d.protocol(),"://",d.host(),k,j,i].join("")}}}var i,j=[],k=null,l=!1;this.rule=function(a){if(!I(a))throw new Error("'rule' must be a function");return j.push(a),this},this.otherwise=function(a){if(J(a)){var b=a;a=function(){return b}}else if(!I(a))throw new Error("'rule' must be a function");return k=a,this},this.when=function(a,b){var c,h=J(b);if(J(a)&&(a=d.compile(a)),!h&&!I(b)&&!L(b))throw new Error("invalid 'handler' in when()");var i={matcher:function(a,b){return h&&(c=d.compile(b),b=["$match",function(a){return c.format(a)}]),N(function(c,d){return g(c,b,a.exec(d.path(),d.search()))},{prefix:J(a.prefix)?a.prefix:""})},regex:function(a,b){if(a.global||a.sticky)throw new Error("when() RegExp must not be global or sticky");return h&&(c=b,b=["$match",function(a){return f(c,a)}]),N(function(c,d){return g(c,b,a.exec(d.path()))},{prefix:e(a)})}},j={matcher:d.isMatcher(a),regex:a instanceof RegExp};for(var k in j)if(j[k])return this.rule(i[k](a,b));throw new Error("invalid 'what' in when()")},this.deferIntercept=function(a){a===c&&(a=!0),l=a},this.$get=h,h.$inject=["$location","$rootScope","$injector","$browser"]}function v(a,e){function f(a){return 0===a.indexOf(".")||0===a.indexOf("^")}function m(a,b){if(!a)return c;var d=J(a),e=d?a:a.name,g=f(e);if(g){if(!b)throw new Error("No reference point given for path '"+e+"'");b=m(b);for(var h=e.split("."),i=0,j=h.length,k=b;j>i;i++)if(""!==h[i]||0!==i){if("^"!==h[i])break;if(!k.parent)throw new Error("Path '"+e+"' not valid for state '"+b.name+"'");k=k.parent}else k=b;h=h.slice(i).join("."),e=k.name+(k.name&&h?".":"")+h}var l=z[e];return!l||!d&&(d||l!==a&&l.self!==a)?c:l}function n(a,b){A[a]||(A[a]=[]),A[a].push(b)}function p(a){for(var b=A[a]||[];b.length;)q(b.shift())}function q(b){b=d(b,{self:b,resolve:b.resolve||{},toString:function(){return this.name}});var c=b.name;if(!J(c)||c.indexOf("@")>=0)throw new Error("State must have a valid name");if(z.hasOwnProperty(c))throw new Error("State '"+c+"'' is already defined");var e=-1!==c.indexOf(".")?c.substring(0,c.lastIndexOf(".")):J(b.parent)?b.parent:K(b.parent)&&J(b.parent.name)?b.parent.name:"";if(e&&!z[e])return n(e,b.self);for(var f in C)I(C[f])&&(b[f]=C[f](b,C.$delegates[f]));return z[c]=b,!b[B]&&b.url&&a.when(b.url,["$match","$stateParams",function(a,c){y.$current.navigable==b&&j(a,c)||y.transitionTo(b,a,{inherit:!0,location:!1})}]),p(c),b}function r(a){return a.indexOf("*")>-1}function s(a){for(var b=a.split("."),c=y.$current.name.split("."),d=0,e=b.length;e>d;d++)"*"===b[d]&&(c[d]="*");return"**"===b[0]&&(c=c.slice(h(c,b[1])),c.unshift("**")),"**"===b[b.length-1]&&(c.splice(h(c,b[b.length-2])+1,Number.MAX_VALUE),c.push("**")),b.length!=c.length?!1:c.join("")===b.join("")}function t(a,b){return J(a)&&!H(b)?C[a]:I(b)&&J(a)?(C[a]&&!C.$delegates[a]&&(C.$delegates[a]=C[a]),C[a]=b,this):this}function u(a,b){return K(a)?b=a:b.name=a,q(b),this}function v(a,e,f,h,l,n,p,q,t){function u(b,c,d,f){var g=a.$broadcast("$stateNotFound",b,c,d);if(g.defaultPrevented)return p.update(),D;if(!g.retry)return null;if(f.$retry)return p.update(),E;var h=y.transition=e.when(g.retry);return h.then(function(){return h!==y.transition?A:(b.options.$retry=!0,y.transitionTo(b.to,b.toParams,b.options))},function(){return D}),p.update(),h}function v(a,c,d,g,i,j){function m(){var c=[];return M(a.views,function(d,e){var g=d.resolve&&d.resolve!==a.resolve?d.resolve:{};g.$template=[function(){return f.load(e,{view:d,locals:i.globals,params:n,notify:j.notify})||""}],c.push(l.resolve(g,i.globals,i.resolve,a).then(function(c){if(I(d.controllerProvider)||L(d.controllerProvider)){var f=b.extend({},g,i.globals);c.$$controller=h.invoke(d.controllerProvider,null,f)}else c.$$controller=d.controller;c.$$state=a,c.$$controllerAs=d.controllerAs,i[e]=c}))}),e.all(c).then(function(){return i.globals})}var n=d?c:k(a.params.$$keys(),c),o={$stateParams:n};i.resolve=l.resolve(a.resolve,o,i.resolve,a);var p=[i.resolve.then(function(a){i.globals=a})];return g&&p.push(g),e.all(p).then(m).then(function(a){return i})}var A=e.reject(new Error("transition superseded")),C=e.reject(new Error("transition prevented")),D=e.reject(new Error("transition aborted")),E=e.reject(new Error("transition failed"));return x.locals={resolve:null,globals:{$stateParams:{}}},y={params:{},current:x.self,$current:x,transition:null},y.reload=function(a){return y.transitionTo(y.current,n,{reload:a||!0,inherit:!1,notify:!0})},y.go=function(a,b,c){return y.transitionTo(a,b,N({inherit:!0,relative:y.$current},c))},y.transitionTo=function(b,c,f){c=c||{},f=N({location:!0,inherit:!1,relative:null,notify:!0,reload:!1,$retry:!1},f||{});var g,j=y.$current,l=y.params,o=j.path,q=m(b,f.relative),r=c["#"];if(!H(q)){var s={to:b,toParams:c,options:f},t=u(s,j.self,l,f);if(t)return t;if(b=s.to,c=s.toParams,f=s.options,q=m(b,f.relative),!H(q)){if(!f.relative)throw new Error("No such state '"+b+"'");throw new Error("Could not resolve '"+b+"' from state '"+f.relative+"'")}}if(q[B])throw new Error("Cannot transition to abstract state '"+b+"'");if(f.inherit&&(c=i(n,c||{},y.$current,q)),!q.params.$$validates(c))return E;c=q.params.$$values(c),b=q;var z=b.path,D=0,F=z[D],G=x.locals,I=[];if(f.reload){if(J(f.reload)||K(f.reload)){if(K(f.reload)&&!f.reload.name)throw new Error("Invalid reload state object");var L=f.reload===!0?o[0]:m(f.reload);if(f.reload&&!L)throw new Error("No such reload state '"+(J(f.reload)?f.reload:f.reload.name)+"'");for(;F&&F===o[D]&&F!==L;)G=I[D]=F.locals,D++,F=z[D]}}else for(;F&&F===o[D]&&F.ownParams.$$equals(c,l);)G=I[D]=F.locals,D++,F=z[D];if(w(b,c,j,l,G,f))return r&&(c["#"]=r),y.params=c,O(y.params,n),f.location&&b.navigable&&b.navigable.url&&(p.push(b.navigable.url,c,{$$avoidResync:!0,replace:"replace"===f.location}),p.update(!0)),y.transition=null,e.when(y.current);if(c=k(b.params.$$keys(),c||{}),f.notify&&a.$broadcast("$stateChangeStart",b.self,c,j.self,l).defaultPrevented)return a.$broadcast("$stateChangeCancel",b.self,c,j.self,l),p.update(),C;for(var M=e.when(G),P=D;P<z.length;P++,F=z[P])G=I[P]=d(G),M=v(F,c,F===b,M,G,f);var Q=y.transition=M.then(function(){var d,e,g;if(y.transition!==Q)return A;for(d=o.length-1;d>=D;d--)g=o[d],g.self.onExit&&h.invoke(g.self.onExit,g.self,g.locals.globals),g.locals=null;for(d=D;d<z.length;d++)e=z[d],e.locals=I[d],e.self.onEnter&&h.invoke(e.self.onEnter,e.self,e.locals.globals);return r&&(c["#"]=r),y.transition!==Q?A:(y.$current=b,y.current=b.self,y.params=c,O(y.params,n),y.transition=null,f.location&&b.navigable&&p.push(b.navigable.url,b.navigable.locals.globals.$stateParams,{$$avoidResync:!0,replace:"replace"===f.location}),f.notify&&a.$broadcast("$stateChangeSuccess",b.self,c,j.self,l),p.update(!0),y.current)},function(d){return y.transition!==Q?A:(y.transition=null,g=a.$broadcast("$stateChangeError",b.self,c,j.self,l,d),g.defaultPrevented||p.update(),e.reject(d))});return Q},y.is=function(a,b,d){d=N({relative:y.$current},d||{});var e=m(a,d.relative);return H(e)?y.$current!==e?!1:b?j(e.params.$$values(b),n):!0:c},y.includes=function(a,b,d){if(d=N({relative:y.$current},d||{}),J(a)&&r(a)){if(!s(a))return!1;a=y.$current.name}var e=m(a,d.relative);return H(e)?H(y.$current.includes[e.name])?b?j(e.params.$$values(b),n,g(b)):!0:!1:c},y.href=function(a,b,d){d=N({lossy:!0,inherit:!0,absolute:!1,relative:y.$current},d||{});var e=m(a,d.relative);if(!H(e))return null;d.inherit&&(b=i(n,b||{},y.$current,e));var f=e&&d.lossy?e.navigable:e;return f&&f.url!==c&&null!==f.url?p.href(f.url,k(e.params.$$keys().concat("#"),b||{}),{absolute:d.absolute}):null},y.get=function(a,b){if(0===arguments.length)return o(g(z),function(a){return z[a].self});var c=m(a,b||y.$current);return c&&c.self?c.self:null},y}function w(a,b,c,d,e,f){function g(a,b,c){function d(b){return"search"!=a.params[b].location}var e=a.params.$$keys().filter(d),f=l.apply({},[a.params].concat(e)),g=new P.ParamSet(f);return g.$$equals(b,c)}return!f.reload&&a===c&&(e===c.locals||a.self.reloadOnSearch===!1&&g(c,d,b))?!0:void 0}var x,y,z={},A={},B="abstract",C={parent:function(a){if(H(a.parent)&&a.parent)return m(a.parent);var b=/^(.+)\.[^.]+$/.exec(a.name);return b?m(b[1]):x},data:function(a){return a.parent&&a.parent.data&&(a.data=a.self.data=N({},a.parent.data,a.data)),a.data},url:function(a){var b=a.url,c={params:a.params||{}};if(J(b))return"^"==b.charAt(0)?e.compile(b.substring(1),c):(a.parent.navigable||x).url.concat(b,c);if(!b||e.isMatcher(b))return b;throw new Error("Invalid url '"+b+"' in state '"+a+"'")},navigable:function(a){return a.url?a:a.parent?a.parent.navigable:null},ownParams:function(a){var b=a.url&&a.url.params||new P.ParamSet;return M(a.params||{},function(a,c){b[c]||(b[c]=new P.Param(c,null,a,"config"))}),b},params:function(a){return a.parent&&a.parent.params?N(a.parent.params.$$new(),a.ownParams):new P.ParamSet},views:function(a){var b={};return M(H(a.views)?a.views:{"":a},function(c,d){d.indexOf("@")<0&&(d+="@"+a.parent.name),b[d]=c}),b},path:function(a){return a.parent?a.parent.path.concat(a):[]},includes:function(a){var b=a.parent?N({},a.parent.includes):{};return b[a.name]=!0,b},$delegates:{}};x=q({name:"",url:"^",views:null,"abstract":!0}),x.navigable=null,this.decorator=t,this.state=u,this.$get=v,v.$inject=["$rootScope","$q","$view","$injector","$resolve","$stateParams","$urlRouter","$location","$urlMatcherFactory"]}function w(){function a(a,b){return{load:function(c,d){var e,f={template:null,controller:null,view:null,locals:null,notify:!0,async:!0,params:{}};return d=N(f,d),d.view&&(e=b.fromConfig(d.view,d.params,d.locals)),e&&d.notify&&a.$broadcast("$viewContentLoading",d),e}}}this.$get=a,a.$inject=["$rootScope","$templateFactory"]}function x(){var a=!1;this.useAnchorScroll=function(){a=!0},this.$get=["$anchorScroll","$timeout",function(b,c){return a?b:function(a){return c(function(){a[0].scrollIntoView()},0,!1)}}]}function y(a,c,d,e){function f(){return c.has?function(a){return c.has(a)?c.get(a):null}:function(a){try{return c.get(a)}catch(b){return null}}}function g(a,b){var c=function(){return{enter:function(a,b,c){b.after(a),c()},leave:function(a,b){a.remove(),b()}}};if(j)return{enter:function(a,b,c){var d=j.enter(a,null,b,c);d&&d.then&&d.then(c)},leave:function(a,b){var c=j.leave(a,b);c&&c.then&&c.then(b)}};if(i){var d=i&&i(b,a);return{enter:function(a,b,c){d.enter(a,null,b),c()},leave:function(a,b){d.leave(a),b()}}}return c()}var h=f(),i=h("$animator"),j=h("$animate"),k={restrict:"ECA",terminal:!0,priority:400,transclude:"element",compile:function(c,f,h){return function(c,f,i){function j(){l&&(l.remove(),l=null),n&&(n.$destroy(),n=null),m&&(r.leave(m,function(){l=null}),l=m,m=null)}function k(g){var k,l=A(c,i,f,e),s=l&&a.$current&&a.$current.locals[l];if(g||s!==o){k=c.$new(),o=a.$current.locals[l];var t=h(k,function(a){r.enter(a,f,function(){n&&n.$emit("$viewContentAnimationEnded"),(b.isDefined(q)&&!q||c.$eval(q))&&d(a)}),j()});m=t,n=k,n.$emit("$viewContentLoaded"),n.$eval(p)}}var l,m,n,o,p=i.onload||"",q=i.autoscroll,r=g(i,c);c.$on("$stateChangeSuccess",function(){k(!1)}),c.$on("$viewContentLoading",function(){k(!1)}),k(!0)}}};return k}function z(a,b,c,d){return{restrict:"ECA",priority:-400,compile:function(e){var f=e.html();return function(e,g,h){var i=c.$current,j=A(e,h,g,d),k=i&&i.locals[j];if(k){g.data("$uiView",{name:j,state:k.$$state}),g.html(k.$template?k.$template:f);var l=a(g.contents());if(k.$$controller){k.$scope=e,k.$element=g;var m=b(k.$$controller,k);k.$$controllerAs&&(e[k.$$controllerAs]=m),g.data("$ngControllerController",m),g.children().data("$ngControllerController",m)}l(e)}}}}}function A(a,b,c,d){var e=d(b.uiView||b.name||"")(a),f=c.inheritedData("$uiView");return e.indexOf("@")>=0?e:e+"@"+(f?f.state.name:"")}function B(a,b){var c,d=a.match(/^\s*({[^}]*})\s*$/);if(d&&(a=b+"("+d[1]+")"),c=a.replace(/\n/g," ").match(/^([^(]+?)\s*(\((.*)\))?$/),!c||4!==c.length)throw new Error("Invalid state ref '"+a+"'");return{state:c[1],paramExpr:c[3]||null}}function C(a){var b=a.parent().inheritedData("$uiView");return b&&b.state&&b.state.name?b.state:void 0}function D(a,c){var d=["location","inherit","reload","absolute"];return{restrict:"A",require:["?^uiSrefActive","?^uiSrefActiveEq"],link:function(e,f,g,h){var i=B(g.uiSref,a.current.name),j=null,k=C(f)||a.$current,l="[object SVGAnimatedString]"===Object.prototype.toString.call(f.prop("href"))?"xlink:href":"href",m=null,n="A"===f.prop("tagName").toUpperCase(),o="FORM"===f[0].nodeName,p=o?"action":l,q=!0,r={relative:k,inherit:!0},s=e.$eval(g.uiSrefOpts)||{};b.forEach(d,function(a){a in s&&(r[a]=s[a])});var t=function(c){if(c&&(j=b.copy(c)),q){m=a.href(i.state,j,r);var d=h[1]||h[0];return d&&d.$$addStateInfo(i.state,j),null===m?(q=!1,!1):void g.$set(p,m)}};i.paramExpr&&(e.$watch(i.paramExpr,function(a,b){a!==j&&t(a)},!0),j=b.copy(e.$eval(i.paramExpr))),t(),o||f.bind("click",function(b){var d=b.which||b.button;if(!(d>1||b.ctrlKey||b.metaKey||b.shiftKey||f.attr("target"))){var e=c(function(){a.go(i.state,j,r)});b.preventDefault();var g=n&&!m?1:0;b.preventDefault=function(){g--<=0&&c.cancel(e)}}})}}}function E(a,b,c){return{restrict:"A",controller:["$scope","$element","$attrs",function(b,d,e){function f(){g()?d.addClass(i):d.removeClass(i)}function g(){for(var a=0;a<j.length;a++)if(h(j[a].state,j[a].params))return!0;return!1}function h(b,c){return"undefined"!=typeof e.uiSrefActiveEq?a.is(b.name,c):a.includes(b.name,c)}var i,j=[];i=c(e.uiSrefActiveEq||e.uiSrefActive||"",!1)(b),this.$$addStateInfo=function(b,c){var e=a.get(b,C(d));j.push({state:e||{name:b},params:c}),f()},b.$on("$stateChangeSuccess",f)}]}}function F(a){var b=function(b){return a.is(b)};return b.$stateful=!0,b}function G(a){var b=function(b){return a.includes(b)};return b.$stateful=!0,b}var H=b.isDefined,I=b.isFunction,J=b.isString,K=b.isObject,L=b.isArray,M=b.forEach,N=b.extend,O=b.copy;b.module("ui.router.util",["ng"]),b.module("ui.router.router",["ui.router.util"]),b.module("ui.router.state",["ui.router.router","ui.router.util"]),b.module("ui.router",["ui.router.state"]),b.module("ui.router.compat",["ui.router"]),p.$inject=["$q","$injector"],b.module("ui.router.util").service("$resolve",p),q.$inject=["$http","$templateCache","$injector"],b.module("ui.router.util").service("$templateFactory",q);var P;r.prototype.concat=function(a,b){var c={caseInsensitive:P.caseInsensitive(),strict:P.strictMode(),squash:P.defaultSquashPolicy()};return new r(this.sourcePath+a+this.sourceSearch,N(c,b),this)},r.prototype.toString=function(){return this.source},r.prototype.exec=function(a,b){function c(a){function b(a){return a.split("").reverse().join("")}function c(a){return a.replace(/\\-/g,"-")}var d=b(a).split(/-(?!\\)/),e=o(d,b);return o(e,c).reverse()}var d=this.regexp.exec(a);if(!d)return null;b=b||{};var e,f,g,h=this.parameters(),i=h.length,j=this.segments.length-1,k={};if(j!==d.length-1)throw new Error("Unbalanced capture group in route '"+this.source+"'");for(e=0;j>e;e++){g=h[e];var l=this.params[g],m=d[e+1];for(f=0;f<l.replace;f++)l.replace[f].from===m&&(m=l.replace[f].to);m&&l.array===!0&&(m=c(m)),k[g]=l.value(m)}for(;i>e;e++)g=h[e],k[g]=this.params[g].value(b[g]);return k},r.prototype.parameters=function(a){return H(a)?this.params[a]||null:this.$$paramNames},r.prototype.validates=function(a){return this.params.$$validates(a)},r.prototype.format=function(a){function b(a){return encodeURIComponent(a).replace(/-/g,function(a){return"%5C%"+a.charCodeAt(0).toString(16).toUpperCase()})}a=a||{};var c=this.segments,d=this.parameters(),e=this.params;if(!this.validates(a))return null;var f,g=!1,h=c.length-1,i=d.length,j=c[0];for(f=0;i>f;f++){var k=h>f,l=d[f],m=e[l],n=m.value(a[l]),p=m.isOptional&&m.type.equals(m.value(),n),q=p?m.squash:!1,r=m.type.encode(n);if(k){var s=c[f+1];if(q===!1)null!=r&&(j+=L(r)?o(r,b).join("-"):encodeURIComponent(r)),j+=s;else if(q===!0){var t=j.match(/\/$/)?/\/?(.*)/:/(.*)/;j+=s.match(t)[1]}else J(q)&&(j+=q+s)}else{if(null==r||p&&q!==!1)continue;L(r)||(r=[r]),r=o(r,encodeURIComponent).join("&"+l+"="),j+=(g?"&":"?")+(l+"="+r),g=!0}}return j},s.prototype.is=function(a,b){return!0},s.prototype.encode=function(a,b){return a},s.prototype.decode=function(a,b){return a},s.prototype.equals=function(a,b){return a==b},s.prototype.$subPattern=function(){var a=this.pattern.toString();return a.substr(1,a.length-2)},s.prototype.pattern=/.*/,s.prototype.toString=function(){return"{Type:"+this.name+"}"},s.prototype.$normalize=function(a){return this.is(a)?a:this.decode(a)},s.prototype.$asArray=function(a,b){function d(a,b){function d(a,b){return function(){return a[b].apply(a,arguments)}}function e(a){return L(a)?a:H(a)?[a]:[]}function f(a){switch(a.length){case 0:return c;case 1:return"auto"===b?a[0]:a;default:return a}}function g(a){return!a}function h(a,b){return function(c){c=e(c);var d=o(c,a);return b===!0?0===n(d,g).length:f(d)}}function i(a){return function(b,c){var d=e(b),f=e(c);if(d.length!==f.length)return!1;for(var g=0;g<d.length;g++)if(!a(d[g],f[g]))return!1;return!0}}this.encode=h(d(a,"encode")),this.decode=h(d(a,"decode")),this.is=h(d(a,"is"),!0),this.equals=i(d(a,"equals")),this.pattern=a.pattern,this.$normalize=h(d(a,"$normalize")),this.name=a.name,this.$arrayMode=b}if(!a)return this;if("auto"===a&&!b)throw new Error("'auto' array mode is for query parameters only");return new d(this,a)},b.module("ui.router.util").provider("$urlMatcherFactory",t),b.module("ui.router.util").run(["$urlMatcherFactory",function(a){}]),u.$inject=["$locationProvider","$urlMatcherFactoryProvider"],b.module("ui.router.router").provider("$urlRouter",u),v.$inject=["$urlRouterProvider","$urlMatcherFactoryProvider"],b.module("ui.router.state").value("$stateParams",{}).provider("$state",v),w.$inject=[],b.module("ui.router.state").provider("$view",w),b.module("ui.router.state").provider("$uiViewScroll",x),y.$inject=["$state","$injector","$uiViewScroll","$interpolate"],z.$inject=["$compile","$controller","$state","$interpolate"],b.module("ui.router.state").directive("uiView",y),b.module("ui.router.state").directive("uiView",z),D.$inject=["$state","$timeout"],E.$inject=["$state","$stateParams","$interpolate"],b.module("ui.router.state").directive("uiSref",D).directive("uiSrefActive",E).directive("uiSrefActiveEq",E),F.$inject=["$state"],G.$inject=["$state"],b.module("ui.router.state").filter("isState",F).filter("includedByState",G)}(window,window.angular);
\ No newline at end of file
diff --git a/src/main/websrc/js/common/angular.min.js b/src/main/websrc/js/common/angular.min.js
new file mode 100644
index 0000000..b4f9b07
--- /dev/null
+++ b/src/main/websrc/js/common/angular.min.js
@@ -0,0 +1,295 @@
+/*
+ AngularJS v1.4.8
+ (c) 2010-2015 Google, Inc. http://angularjs.org
+ License: MIT
+*/
+(function(S,X,u){'use strict';function G(a){return function(){var b=arguments[0],d;d="["+(a?a+":":"")+b+"] http://errors.angularjs.org/1.4.8/"+(a?a+"/":"")+b;for(b=1;b<arguments.length;b++){d=d+(1==b?"?":"&")+"p"+(b-1)+"=";var c=encodeURIComponent,e;e=arguments[b];e="function"==typeof e?e.toString().replace(/ \{[\s\S]*$/,""):"undefined"==typeof e?"undefined":"string"!=typeof e?JSON.stringify(e):e;d+=c(e)}return Error(d)}}function za(a){if(null==a||Xa(a))return!1;if(I(a)||E(a)||B&&a instanceof B)return!0;
+var b="length"in Object(a)&&a.length;return Q(b)&&(0<=b&&b-1 in a||"function"==typeof a.item)}function n(a,b,d){var c,e;if(a)if(z(a))for(c in a)"prototype"==c||"length"==c||"name"==c||a.hasOwnProperty&&!a.hasOwnProperty(c)||b.call(d,a[c],c,a);else if(I(a)||za(a)){var f="object"!==typeof a;c=0;for(e=a.length;c<e;c++)(f||c in a)&&b.call(d,a[c],c,a)}else if(a.forEach&&a.forEach!==n)a.forEach(b,d,a);else if(nc(a))for(c in a)b.call(d,a[c],c,a);else if("function"===typeof a.hasOwnProperty)for(c in a)a.hasOwnProperty(c)&&
+b.call(d,a[c],c,a);else for(c in a)qa.call(a,c)&&b.call(d,a[c],c,a);return a}function oc(a,b,d){for(var c=Object.keys(a).sort(),e=0;e<c.length;e++)b.call(d,a[c[e]],c[e]);return c}function pc(a){return function(b,d){a(d,b)}}function Td(){return++nb}function Mb(a,b,d){for(var c=a.$$hashKey,e=0,f=b.length;e<f;++e){var g=b[e];if(H(g)||z(g))for(var h=Object.keys(g),k=0,l=h.length;k<l;k++){var m=h[k],r=g[m];d&&H(r)?da(r)?a[m]=new Date(r.valueOf()):Ma(r)?a[m]=new RegExp(r):r.nodeName?a[m]=r.cloneNode(!0):
+Nb(r)?a[m]=r.clone():(H(a[m])||(a[m]=I(r)?[]:{}),Mb(a[m],[r],!0)):a[m]=r}}c?a.$$hashKey=c:delete a.$$hashKey;return a}function M(a){return Mb(a,ra.call(arguments,1),!1)}function Ud(a){return Mb(a,ra.call(arguments,1),!0)}function ea(a){return parseInt(a,10)}function Ob(a,b){return M(Object.create(a),b)}function x(){}function Ya(a){return a}function na(a){return function(){return a}}function qc(a){return z(a.toString)&&a.toString!==sa}function q(a){return"undefined"===typeof a}function y(a){return"undefined"!==
+typeof a}function H(a){return null!==a&&"object"===typeof a}function nc(a){return null!==a&&"object"===typeof a&&!rc(a)}function E(a){return"string"===typeof a}function Q(a){return"number"===typeof a}function da(a){return"[object Date]"===sa.call(a)}function z(a){return"function"===typeof a}function Ma(a){return"[object RegExp]"===sa.call(a)}function Xa(a){return a&&a.window===a}function Za(a){return a&&a.$evalAsync&&a.$watch}function $a(a){return"boolean"===typeof a}function sc(a){return a&&Q(a.length)&&
+Vd.test(sa.call(a))}function Nb(a){return!(!a||!(a.nodeName||a.prop&&a.attr&&a.find))}function Wd(a){var b={};a=a.split(",");var d;for(d=0;d<a.length;d++)b[a[d]]=!0;return b}function ta(a){return F(a.nodeName||a[0]&&a[0].nodeName)}function ab(a,b){var d=a.indexOf(b);0<=d&&a.splice(d,1);return d}function bb(a,b){function d(a,b){var d=b.$$hashKey,e;if(I(a)){e=0;for(var f=a.length;e<f;e++)b.push(c(a[e]))}else if(nc(a))for(e in a)b[e]=c(a[e]);else if(a&&"function"===typeof a.hasOwnProperty)for(e in a)a.hasOwnProperty(e)&&
+(b[e]=c(a[e]));else for(e in a)qa.call(a,e)&&(b[e]=c(a[e]));d?b.$$hashKey=d:delete b.$$hashKey;return b}function c(a){if(!H(a))return a;var b=e.indexOf(a);if(-1!==b)return f[b];if(Xa(a)||Za(a))throw Aa("cpws");var b=!1,c;I(a)?(c=[],b=!0):sc(a)?c=new a.constructor(a):da(a)?c=new Date(a.getTime()):Ma(a)?(c=new RegExp(a.source,a.toString().match(/[^\/]*$/)[0]),c.lastIndex=a.lastIndex):z(a.cloneNode)?c=a.cloneNode(!0):(c=Object.create(rc(a)),b=!0);e.push(a);f.push(c);return b?d(a,c):c}var e=[],f=[];if(b){if(sc(b))throw Aa("cpta");
+if(a===b)throw Aa("cpi");I(b)?b.length=0:n(b,function(a,c){"$$hashKey"!==c&&delete b[c]});e.push(a);f.push(b);return d(a,b)}return c(a)}function ia(a,b){if(I(a)){b=b||[];for(var d=0,c=a.length;d<c;d++)b[d]=a[d]}else if(H(a))for(d in b=b||{},a)if("$"!==d.charAt(0)||"$"!==d.charAt(1))b[d]=a[d];return b||a}function ma(a,b){if(a===b)return!0;if(null===a||null===b)return!1;if(a!==a&&b!==b)return!0;var d=typeof a,c;if(d==typeof b&&"object"==d)if(I(a)){if(!I(b))return!1;if((d=a.length)==b.length){for(c=
+0;c<d;c++)if(!ma(a[c],b[c]))return!1;return!0}}else{if(da(a))return da(b)?ma(a.getTime(),b.getTime()):!1;if(Ma(a))return Ma(b)?a.toString()==b.toString():!1;if(Za(a)||Za(b)||Xa(a)||Xa(b)||I(b)||da(b)||Ma(b))return!1;d=$();for(c in a)if("$"!==c.charAt(0)&&!z(a[c])){if(!ma(a[c],b[c]))return!1;d[c]=!0}for(c in b)if(!(c in d)&&"$"!==c.charAt(0)&&y(b[c])&&!z(b[c]))return!1;return!0}return!1}function cb(a,b,d){return a.concat(ra.call(b,d))}function tc(a,b){var d=2<arguments.length?ra.call(arguments,2):
+[];return!z(b)||b instanceof RegExp?b:d.length?function(){return arguments.length?b.apply(a,cb(d,arguments,0)):b.apply(a,d)}:function(){return arguments.length?b.apply(a,arguments):b.call(a)}}function Xd(a,b){var d=b;"string"===typeof a&&"$"===a.charAt(0)&&"$"===a.charAt(1)?d=u:Xa(b)?d="$WINDOW":b&&X===b?d="$DOCUMENT":Za(b)&&(d="$SCOPE");return d}function db(a,b){if("undefined"===typeof a)return u;Q(b)||(b=b?2:null);return JSON.stringify(a,Xd,b)}function uc(a){return E(a)?JSON.parse(a):a}function vc(a,
+b){var d=Date.parse("Jan 01, 1970 00:00:00 "+a)/6E4;return isNaN(d)?b:d}function Pb(a,b,d){d=d?-1:1;var c=vc(b,a.getTimezoneOffset());b=a;a=d*(c-a.getTimezoneOffset());b=new Date(b.getTime());b.setMinutes(b.getMinutes()+a);return b}function ua(a){a=B(a).clone();try{a.empty()}catch(b){}var d=B("<div>").append(a).html();try{return a[0].nodeType===Na?F(d):d.match(/^(<[^>]+>)/)[1].replace(/^<([\w\-]+)/,function(a,b){return"<"+F(b)})}catch(c){return F(d)}}function wc(a){try{return decodeURIComponent(a)}catch(b){}}
+function xc(a){var b={};n((a||"").split("&"),function(a){var c,e,f;a&&(e=a=a.replace(/\+/g,"%20"),c=a.indexOf("="),-1!==c&&(e=a.substring(0,c),f=a.substring(c+1)),e=wc(e),y(e)&&(f=y(f)?wc(f):!0,qa.call(b,e)?I(b[e])?b[e].push(f):b[e]=[b[e],f]:b[e]=f))});return b}function Qb(a){var b=[];n(a,function(a,c){I(a)?n(a,function(a){b.push(ja(c,!0)+(!0===a?"":"="+ja(a,!0)))}):b.push(ja(c,!0)+(!0===a?"":"="+ja(a,!0)))});return b.length?b.join("&"):""}function ob(a){return ja(a,!0).replace(/%26/gi,"&").replace(/%3D/gi,
+"=").replace(/%2B/gi,"+")}function ja(a,b){return encodeURIComponent(a).replace(/%40/gi,"@").replace(/%3A/gi,":").replace(/%24/g,"$").replace(/%2C/gi,",").replace(/%3B/gi,";").replace(/%20/g,b?"%20":"+")}function Yd(a,b){var d,c,e=Oa.length;for(c=0;c<e;++c)if(d=Oa[c]+b,E(d=a.getAttribute(d)))return d;return null}function Zd(a,b){var d,c,e={};n(Oa,function(b){b+="app";!d&&a.hasAttribute&&a.hasAttribute(b)&&(d=a,c=a.getAttribute(b))});n(Oa,function(b){b+="app";var e;!d&&(e=a.querySelector("["+b.replace(":",
+"\\:")+"]"))&&(d=e,c=e.getAttribute(b))});d&&(e.strictDi=null!==Yd(d,"strict-di"),b(d,c?[c]:[],e))}function yc(a,b,d){H(d)||(d={});d=M({strictDi:!1},d);var c=function(){a=B(a);if(a.injector()){var c=a[0]===X?"document":ua(a);throw Aa("btstrpd",c.replace(/</,"&lt;").replace(/>/,"&gt;"));}b=b||[];b.unshift(["$provide",function(b){b.value("$rootElement",a)}]);d.debugInfoEnabled&&b.push(["$compileProvider",function(a){a.debugInfoEnabled(!0)}]);b.unshift("ng");c=eb(b,d.strictDi);c.invoke(["$rootScope",
+"$rootElement","$compile","$injector",function(a,b,c,d){a.$apply(function(){b.data("$injector",d);c(b)(a)})}]);return c},e=/^NG_ENABLE_DEBUG_INFO!/,f=/^NG_DEFER_BOOTSTRAP!/;S&&e.test(S.name)&&(d.debugInfoEnabled=!0,S.name=S.name.replace(e,""));if(S&&!f.test(S.name))return c();S.name=S.name.replace(f,"");fa.resumeBootstrap=function(a){n(a,function(a){b.push(a)});return c()};z(fa.resumeDeferredBootstrap)&&fa.resumeDeferredBootstrap()}function $d(){S.name="NG_ENABLE_DEBUG_INFO!"+S.name;S.location.reload()}
+function ae(a){a=fa.element(a).injector();if(!a)throw Aa("test");return a.get("$$testability")}function zc(a,b){b=b||"_";return a.replace(be,function(a,c){return(c?b:"")+a.toLowerCase()})}function ce(){var a;if(!Ac){var b=pb();(oa=q(b)?S.jQuery:b?S[b]:u)&&oa.fn.on?(B=oa,M(oa.fn,{scope:Pa.scope,isolateScope:Pa.isolateScope,controller:Pa.controller,injector:Pa.injector,inheritedData:Pa.inheritedData}),a=oa.cleanData,oa.cleanData=function(b){var c;if(Rb)Rb=!1;else for(var e=0,f;null!=(f=b[e]);e++)(c=
+oa._data(f,"events"))&&c.$destroy&&oa(f).triggerHandler("$destroy");a(b)}):B=N;fa.element=B;Ac=!0}}function qb(a,b,d){if(!a)throw Aa("areq",b||"?",d||"required");return a}function Qa(a,b,d){d&&I(a)&&(a=a[a.length-1]);qb(z(a),b,"not a function, got "+(a&&"object"===typeof a?a.constructor.name||"Object":typeof a));return a}function Ra(a,b){if("hasOwnProperty"===a)throw Aa("badname",b);}function Bc(a,b,d){if(!b)return a;b=b.split(".");for(var c,e=a,f=b.length,g=0;g<f;g++)c=b[g],a&&(a=(e=a)[c]);return!d&&
+z(a)?tc(e,a):a}function rb(a){for(var b=a[0],d=a[a.length-1],c,e=1;b!==d&&(b=b.nextSibling);e++)if(c||a[e]!==b)c||(c=B(ra.call(a,0,e))),c.push(b);return c||a}function $(){return Object.create(null)}function de(a){function b(a,b,c){return a[b]||(a[b]=c())}var d=G("$injector"),c=G("ng");a=b(a,"angular",Object);a.$$minErr=a.$$minErr||G;return b(a,"module",function(){var a={};return function(f,g,h){if("hasOwnProperty"===f)throw c("badname","module");g&&a.hasOwnProperty(f)&&(a[f]=null);return b(a,f,function(){function a(b,
+d,e,f){f||(f=c);return function(){f[e||"push"]([b,d,arguments]);return v}}function b(a,d){return function(b,e){e&&z(e)&&(e.$$moduleName=f);c.push([a,d,arguments]);return v}}if(!g)throw d("nomod",f);var c=[],e=[],t=[],A=a("$injector","invoke","push",e),v={_invokeQueue:c,_configBlocks:e,_runBlocks:t,requires:g,name:f,provider:b("$provide","provider"),factory:b("$provide","factory"),service:b("$provide","service"),value:a("$provide","value"),constant:a("$provide","constant","unshift"),decorator:b("$provide",
+"decorator"),animation:b("$animateProvider","register"),filter:b("$filterProvider","register"),controller:b("$controllerProvider","register"),directive:b("$compileProvider","directive"),config:A,run:function(a){t.push(a);return this}};h&&A(h);return v})}})}function ee(a){M(a,{bootstrap:yc,copy:bb,extend:M,merge:Ud,equals:ma,element:B,forEach:n,injector:eb,noop:x,bind:tc,toJson:db,fromJson:uc,identity:Ya,isUndefined:q,isDefined:y,isString:E,isFunction:z,isObject:H,isNumber:Q,isElement:Nb,isArray:I,
+version:fe,isDate:da,lowercase:F,uppercase:sb,callbacks:{counter:0},getTestability:ae,$$minErr:G,$$csp:Ba,reloadWithDebugInfo:$d});Sb=de(S);Sb("ng",["ngLocale"],["$provide",function(a){a.provider({$$sanitizeUri:ge});a.provider("$compile",Cc).directive({a:he,input:Dc,textarea:Dc,form:ie,script:je,select:ke,style:le,option:me,ngBind:ne,ngBindHtml:oe,ngBindTemplate:pe,ngClass:qe,ngClassEven:re,ngClassOdd:se,ngCloak:te,ngController:ue,ngForm:ve,ngHide:we,ngIf:xe,ngInclude:ye,ngInit:ze,ngNonBindable:Ae,
+ngPluralize:Be,ngRepeat:Ce,ngShow:De,ngStyle:Ee,ngSwitch:Fe,ngSwitchWhen:Ge,ngSwitchDefault:He,ngOptions:Ie,ngTransclude:Je,ngModel:Ke,ngList:Le,ngChange:Me,pattern:Ec,ngPattern:Ec,required:Fc,ngRequired:Fc,minlength:Gc,ngMinlength:Gc,maxlength:Hc,ngMaxlength:Hc,ngValue:Ne,ngModelOptions:Oe}).directive({ngInclude:Pe}).directive(tb).directive(Ic);a.provider({$anchorScroll:Qe,$animate:Re,$animateCss:Se,$$animateQueue:Te,$$AnimateRunner:Ue,$browser:Ve,$cacheFactory:We,$controller:Xe,$document:Ye,$exceptionHandler:Ze,
+$filter:Jc,$$forceReflow:$e,$interpolate:af,$interval:bf,$http:cf,$httpParamSerializer:df,$httpParamSerializerJQLike:ef,$httpBackend:ff,$xhrFactory:gf,$location:hf,$log:jf,$parse:kf,$rootScope:lf,$q:mf,$$q:nf,$sce:of,$sceDelegate:pf,$sniffer:qf,$templateCache:rf,$templateRequest:sf,$$testability:tf,$timeout:uf,$window:vf,$$rAF:wf,$$jqLite:xf,$$HashMap:yf,$$cookieReader:zf})}])}function fb(a){return a.replace(Af,function(a,d,c,e){return e?c.toUpperCase():c}).replace(Bf,"Moz$1")}function Kc(a){a=a.nodeType;
+return 1===a||!a||9===a}function Lc(a,b){var d,c,e=b.createDocumentFragment(),f=[];if(Tb.test(a)){d=d||e.appendChild(b.createElement("div"));c=(Cf.exec(a)||["",""])[1].toLowerCase();c=ka[c]||ka._default;d.innerHTML=c[1]+a.replace(Df,"<$1></$2>")+c[2];for(c=c[0];c--;)d=d.lastChild;f=cb(f,d.childNodes);d=e.firstChild;d.textContent=""}else f.push(b.createTextNode(a));e.textContent="";e.innerHTML="";n(f,function(a){e.appendChild(a)});return e}function N(a){if(a instanceof N)return a;var b;E(a)&&(a=U(a),
+b=!0);if(!(this instanceof N)){if(b&&"<"!=a.charAt(0))throw Ub("nosel");return new N(a)}if(b){b=X;var d;a=(d=Ef.exec(a))?[b.createElement(d[1])]:(d=Lc(a,b))?d.childNodes:[]}Mc(this,a)}function Vb(a){return a.cloneNode(!0)}function ub(a,b){b||vb(a);if(a.querySelectorAll)for(var d=a.querySelectorAll("*"),c=0,e=d.length;c<e;c++)vb(d[c])}function Nc(a,b,d,c){if(y(c))throw Ub("offargs");var e=(c=wb(a))&&c.events,f=c&&c.handle;if(f)if(b){var g=function(b){var c=e[b];y(d)&&ab(c||[],d);y(d)&&c&&0<c.length||
+(a.removeEventListener(b,f,!1),delete e[b])};n(b.split(" "),function(a){g(a);xb[a]&&g(xb[a])})}else for(b in e)"$destroy"!==b&&a.removeEventListener(b,f,!1),delete e[b]}function vb(a,b){var d=a.ng339,c=d&&gb[d];c&&(b?delete c.data[b]:(c.handle&&(c.events.$destroy&&c.handle({},"$destroy"),Nc(a)),delete gb[d],a.ng339=u))}function wb(a,b){var d=a.ng339,d=d&&gb[d];b&&!d&&(a.ng339=d=++Ff,d=gb[d]={events:{},data:{},handle:u});return d}function Wb(a,b,d){if(Kc(a)){var c=y(d),e=!c&&b&&!H(b),f=!b;a=(a=wb(a,
+!e))&&a.data;if(c)a[b]=d;else{if(f)return a;if(e)return a&&a[b];M(a,b)}}}function yb(a,b){return a.getAttribute?-1<(" "+(a.getAttribute("class")||"")+" ").replace(/[\n\t]/g," ").indexOf(" "+b+" "):!1}function zb(a,b){b&&a.setAttribute&&n(b.split(" "),function(b){a.setAttribute("class",U((" "+(a.getAttribute("class")||"")+" ").replace(/[\n\t]/g," ").replace(" "+U(b)+" "," ")))})}function Ab(a,b){if(b&&a.setAttribute){var d=(" "+(a.getAttribute("class")||"")+" ").replace(/[\n\t]/g," ");n(b.split(" "),
+function(a){a=U(a);-1===d.indexOf(" "+a+" ")&&(d+=a+" ")});a.setAttribute("class",U(d))}}function Mc(a,b){if(b)if(b.nodeType)a[a.length++]=b;else{var d=b.length;if("number"===typeof d&&b.window!==b){if(d)for(var c=0;c<d;c++)a[a.length++]=b[c]}else a[a.length++]=b}}function Oc(a,b){return Bb(a,"$"+(b||"ngController")+"Controller")}function Bb(a,b,d){9==a.nodeType&&(a=a.documentElement);for(b=I(b)?b:[b];a;){for(var c=0,e=b.length;c<e;c++)if(y(d=B.data(a,b[c])))return d;a=a.parentNode||11===a.nodeType&&
+a.host}}function Pc(a){for(ub(a,!0);a.firstChild;)a.removeChild(a.firstChild)}function Xb(a,b){b||ub(a);var d=a.parentNode;d&&d.removeChild(a)}function Gf(a,b){b=b||S;if("complete"===b.document.readyState)b.setTimeout(a);else B(b).on("load",a)}function Qc(a,b){var d=Cb[b.toLowerCase()];return d&&Rc[ta(a)]&&d}function Hf(a,b){var d=function(c,d){c.isDefaultPrevented=function(){return c.defaultPrevented};var f=b[d||c.type],g=f?f.length:0;if(g){if(q(c.immediatePropagationStopped)){var h=c.stopImmediatePropagation;
+c.stopImmediatePropagation=function(){c.immediatePropagationStopped=!0;c.stopPropagation&&c.stopPropagation();h&&h.call(c)}}c.isImmediatePropagationStopped=function(){return!0===c.immediatePropagationStopped};var k=f.specialHandlerWrapper||If;1<g&&(f=ia(f));for(var l=0;l<g;l++)c.isImmediatePropagationStopped()||k(a,c,f[l])}};d.elem=a;return d}function If(a,b,d){d.call(a,b)}function Jf(a,b,d){var c=b.relatedTarget;c&&(c===a||Kf.call(a,c))||d.call(a,b)}function xf(){this.$get=function(){return M(N,
+{hasClass:function(a,b){a.attr&&(a=a[0]);return yb(a,b)},addClass:function(a,b){a.attr&&(a=a[0]);return Ab(a,b)},removeClass:function(a,b){a.attr&&(a=a[0]);return zb(a,b)}})}}function Ca(a,b){var d=a&&a.$$hashKey;if(d)return"function"===typeof d&&(d=a.$$hashKey()),d;d=typeof a;return d="function"==d||"object"==d&&null!==a?a.$$hashKey=d+":"+(b||Td)():d+":"+a}function Sa(a,b){if(b){var d=0;this.nextUid=function(){return++d}}n(a,this.put,this)}function Lf(a){return(a=a.toString().replace(Sc,"").match(Tc))?
+"function("+(a[1]||"").replace(/[\s\r\n]+/," ")+")":"fn"}function eb(a,b){function d(a){return function(b,c){if(H(b))n(b,pc(a));else return a(b,c)}}function c(a,b){Ra(a,"service");if(z(b)||I(b))b=t.instantiate(b);if(!b.$get)throw Da("pget",a);return r[a+"Provider"]=b}function e(a,b){return function(){var c=v.invoke(b,this);if(q(c))throw Da("undef",a);return c}}function f(a,b,d){return c(a,{$get:!1!==d?e(a,b):b})}function g(a){qb(q(a)||I(a),"modulesToLoad","not an array");var b=[],c;n(a,function(a){function d(a){var b,
+c;b=0;for(c=a.length;b<c;b++){var e=a[b],f=t.get(e[0]);f[e[1]].apply(f,e[2])}}if(!m.get(a)){m.put(a,!0);try{E(a)?(c=Sb(a),b=b.concat(g(c.requires)).concat(c._runBlocks),d(c._invokeQueue),d(c._configBlocks)):z(a)?b.push(t.invoke(a)):I(a)?b.push(t.invoke(a)):Qa(a,"module")}catch(e){throw I(a)&&(a=a[a.length-1]),e.message&&e.stack&&-1==e.stack.indexOf(e.message)&&(e=e.message+"\n"+e.stack),Da("modulerr",a,e.stack||e.message||e);}}});return b}function h(a,c){function d(b,e){if(a.hasOwnProperty(b)){if(a[b]===
+k)throw Da("cdep",b+" <- "+l.join(" <- "));return a[b]}try{return l.unshift(b),a[b]=k,a[b]=c(b,e)}catch(f){throw a[b]===k&&delete a[b],f;}finally{l.shift()}}function e(a,c,f,g){"string"===typeof f&&(g=f,f=null);var h=[],k=eb.$$annotate(a,b,g),l,m,t;m=0;for(l=k.length;m<l;m++){t=k[m];if("string"!==typeof t)throw Da("itkn",t);h.push(f&&f.hasOwnProperty(t)?f[t]:d(t,g))}I(a)&&(a=a[l]);return a.apply(c,h)}return{invoke:e,instantiate:function(a,b,c){var d=Object.create((I(a)?a[a.length-1]:a).prototype||
+null);a=e(a,d,b,c);return H(a)||z(a)?a:d},get:d,annotate:eb.$$annotate,has:function(b){return r.hasOwnProperty(b+"Provider")||a.hasOwnProperty(b)}}}b=!0===b;var k={},l=[],m=new Sa([],!0),r={$provide:{provider:d(c),factory:d(f),service:d(function(a,b){return f(a,["$injector",function(a){return a.instantiate(b)}])}),value:d(function(a,b){return f(a,na(b),!1)}),constant:d(function(a,b){Ra(a,"constant");r[a]=b;A[a]=b}),decorator:function(a,b){var c=t.get(a+"Provider"),d=c.$get;c.$get=function(){var a=
+v.invoke(d,c);return v.invoke(b,null,{$delegate:a})}}}},t=r.$injector=h(r,function(a,b){fa.isString(b)&&l.push(b);throw Da("unpr",l.join(" <- "));}),A={},v=A.$injector=h(A,function(a,b){var c=t.get(a+"Provider",b);return v.invoke(c.$get,c,u,a)});n(g(a),function(a){a&&v.invoke(a)});return v}function Qe(){var a=!0;this.disableAutoScrolling=function(){a=!1};this.$get=["$window","$location","$rootScope",function(b,d,c){function e(a){var b=null;Array.prototype.some.call(a,function(a){if("a"===ta(a))return b=
+a,!0});return b}function f(a){if(a){a.scrollIntoView();var c;c=g.yOffset;z(c)?c=c():Nb(c)?(c=c[0],c="fixed"!==b.getComputedStyle(c).position?0:c.getBoundingClientRect().bottom):Q(c)||(c=0);c&&(a=a.getBoundingClientRect().top,b.scrollBy(0,a-c))}else b.scrollTo(0,0)}function g(a){a=E(a)?a:d.hash();var b;a?(b=h.getElementById(a))?f(b):(b=e(h.getElementsByName(a)))?f(b):"top"===a&&f(null):f(null)}var h=b.document;a&&c.$watch(function(){return d.hash()},function(a,b){a===b&&""===a||Gf(function(){c.$evalAsync(g)})});
+return g}]}function hb(a,b){if(!a&&!b)return"";if(!a)return b;if(!b)return a;I(a)&&(a=a.join(" "));I(b)&&(b=b.join(" "));return a+" "+b}function Mf(a){E(a)&&(a=a.split(" "));var b=$();n(a,function(a){a.length&&(b[a]=!0)});return b}function Ea(a){return H(a)?a:{}}function Nf(a,b,d,c){function e(a){try{a.apply(null,ra.call(arguments,1))}finally{if(v--,0===v)for(;T.length;)try{T.pop()()}catch(b){d.error(b)}}}function f(){L=null;g();h()}function g(){a:{try{p=m.state;break a}catch(a){}p=void 0}p=q(p)?
+null:p;ma(p,J)&&(p=J);J=p}function h(){if(w!==k.url()||C!==p)w=k.url(),C=p,n(aa,function(a){a(k.url(),p)})}var k=this,l=a.location,m=a.history,r=a.setTimeout,t=a.clearTimeout,A={};k.isMock=!1;var v=0,T=[];k.$$completeOutstandingRequest=e;k.$$incOutstandingRequestCount=function(){v++};k.notifyWhenNoOutstandingRequests=function(a){0===v?a():T.push(a)};var p,C,w=l.href,ga=b.find("base"),L=null;g();C=p;k.url=function(b,d,e){q(e)&&(e=null);l!==a.location&&(l=a.location);m!==a.history&&(m=a.history);if(b){var f=
+C===e;if(w===b&&(!c.history||f))return k;var h=w&&Fa(w)===Fa(b);w=b;C=e;if(!c.history||h&&f){if(!h||L)L=b;d?l.replace(b):h?(d=l,e=b.indexOf("#"),e=-1===e?"":b.substr(e),d.hash=e):l.href=b;l.href!==b&&(L=b)}else m[d?"replaceState":"pushState"](e,"",b),g(),C=p;return k}return L||l.href.replace(/%27/g,"'")};k.state=function(){return p};var aa=[],D=!1,J=null;k.onUrlChange=function(b){if(!D){if(c.history)B(a).on("popstate",f);B(a).on("hashchange",f);D=!0}aa.push(b);return b};k.$$applicationDestroyed=function(){B(a).off("hashchange popstate",
+f)};k.$$checkUrlChange=h;k.baseHref=function(){var a=ga.attr("href");return a?a.replace(/^(https?\:)?\/\/[^\/]*/,""):""};k.defer=function(a,b){var c;v++;c=r(function(){delete A[c];e(a)},b||0);A[c]=!0;return c};k.defer.cancel=function(a){return A[a]?(delete A[a],t(a),e(x),!0):!1}}function Ve(){this.$get=["$window","$log","$sniffer","$document",function(a,b,d,c){return new Nf(a,c,b,d)}]}function We(){this.$get=function(){function a(a,c){function e(a){a!=r&&(t?t==a&&(t=a.n):t=a,f(a.n,a.p),f(a,r),r=a,
+r.n=null)}function f(a,b){a!=b&&(a&&(a.p=b),b&&(b.n=a))}if(a in b)throw G("$cacheFactory")("iid",a);var g=0,h=M({},c,{id:a}),k=$(),l=c&&c.capacity||Number.MAX_VALUE,m=$(),r=null,t=null;return b[a]={put:function(a,b){if(!q(b)){if(l<Number.MAX_VALUE){var c=m[a]||(m[a]={key:a});e(c)}a in k||g++;k[a]=b;g>l&&this.remove(t.key);return b}},get:function(a){if(l<Number.MAX_VALUE){var b=m[a];if(!b)return;e(b)}return k[a]},remove:function(a){if(l<Number.MAX_VALUE){var b=m[a];if(!b)return;b==r&&(r=b.p);b==t&&
+(t=b.n);f(b.n,b.p);delete m[a]}a in k&&(delete k[a],g--)},removeAll:function(){k=$();g=0;m=$();r=t=null},destroy:function(){m=h=k=null;delete b[a]},info:function(){return M({},h,{size:g})}}}var b={};a.info=function(){var a={};n(b,function(b,e){a[e]=b.info()});return a};a.get=function(a){return b[a]};return a}}function rf(){this.$get=["$cacheFactory",function(a){return a("templates")}]}function Cc(a,b){function d(a,b,c){var d=/^\s*([@&]|=(\*?))(\??)\s*(\w*)\s*$/,e={};n(a,function(a,f){var g=a.match(d);
+if(!g)throw ha("iscp",b,f,a,c?"controller bindings definition":"isolate scope definition");e[f]={mode:g[1][0],collection:"*"===g[2],optional:"?"===g[3],attrName:g[4]||f}});return e}function c(a){var b=a.charAt(0);if(!b||b!==F(b))throw ha("baddir",a);if(a!==a.trim())throw ha("baddir",a);}var e={},f=/^\s*directive\:\s*([\w\-]+)\s+(.*)$/,g=/(([\w\-]+)(?:\:([^;]+))?;?)/,h=Wd("ngSrc,ngSrcset,src,srcset"),k=/^(?:(\^\^?)?(\?)?(\^\^?)?)?/,l=/^(on[a-z]+|formaction)$/;this.directive=function t(b,f){Ra(b,"directive");
+E(b)?(c(b),qb(f,"directiveFactory"),e.hasOwnProperty(b)||(e[b]=[],a.factory(b+"Directive",["$injector","$exceptionHandler",function(a,c){var f=[];n(e[b],function(e,g){try{var h=a.invoke(e);z(h)?h={compile:na(h)}:!h.compile&&h.link&&(h.compile=na(h.link));h.priority=h.priority||0;h.index=g;h.name=h.name||b;h.require=h.require||h.controller&&h.name;h.restrict=h.restrict||"EA";var k=h,l=h,m=h.name,t={isolateScope:null,bindToController:null};H(l.scope)&&(!0===l.bindToController?(t.bindToController=d(l.scope,
+m,!0),t.isolateScope={}):t.isolateScope=d(l.scope,m,!1));H(l.bindToController)&&(t.bindToController=d(l.bindToController,m,!0));if(H(t.bindToController)){var v=l.controller,R=l.controllerAs;if(!v)throw ha("noctrl",m);var V;a:if(R&&E(R))V=R;else{if(E(v)){var n=Uc.exec(v);if(n){V=n[3];break a}}V=void 0}if(!V)throw ha("noident",m);}var s=k.$$bindings=t;H(s.isolateScope)&&(h.$$isolateBindings=s.isolateScope);h.$$moduleName=e.$$moduleName;f.push(h)}catch(u){c(u)}});return f}])),e[b].push(f)):n(b,pc(t));
+return this};this.aHrefSanitizationWhitelist=function(a){return y(a)?(b.aHrefSanitizationWhitelist(a),this):b.aHrefSanitizationWhitelist()};this.imgSrcSanitizationWhitelist=function(a){return y(a)?(b.imgSrcSanitizationWhitelist(a),this):b.imgSrcSanitizationWhitelist()};var m=!0;this.debugInfoEnabled=function(a){return y(a)?(m=a,this):m};this.$get=["$injector","$interpolate","$exceptionHandler","$templateRequest","$parse","$controller","$rootScope","$document","$sce","$animate","$$sanitizeUri",function(a,
+b,c,d,p,C,w,ga,L,aa,D){function J(a,b){try{a.addClass(b)}catch(c){}}function K(a,b,c,d,e){a instanceof B||(a=B(a));n(a,function(b,c){b.nodeType==Na&&b.nodeValue.match(/\S+/)&&(a[c]=B(b).wrap("<span></span>").parent()[0])});var f=O(a,b,a,c,d,e);K.$$addScopeClass(a);var g=null;return function(b,c,d){qb(b,"scope");e&&e.needsNewScope&&(b=b.$parent.$new());d=d||{};var h=d.parentBoundTranscludeFn,k=d.transcludeControllers;d=d.futureParentElement;h&&h.$$boundTransclude&&(h=h.$$boundTransclude);g||(g=(d=
+d&&d[0])?"foreignobject"!==ta(d)&&d.toString().match(/SVG/)?"svg":"html":"html");d="html"!==g?B(Yb(g,B("<div>").append(a).html())):c?Pa.clone.call(a):a;if(k)for(var l in k)d.data("$"+l+"Controller",k[l].instance);K.$$addScopeInfo(d,b);c&&c(d,b);f&&f(b,d,d,h);return d}}function O(a,b,c,d,e,f){function g(a,c,d,e){var f,k,l,m,t,w,D;if(p)for(D=Array(c.length),m=0;m<h.length;m+=3)f=h[m],D[f]=c[f];else D=c;m=0;for(t=h.length;m<t;)k=D[h[m++]],c=h[m++],f=h[m++],c?(c.scope?(l=a.$new(),K.$$addScopeInfo(B(k),
+l)):l=a,w=c.transcludeOnThisElement?R(a,c.transclude,e):!c.templateOnThisElement&&e?e:!e&&b?R(a,b):null,c(f,l,k,d,w)):f&&f(a,k.childNodes,u,e)}for(var h=[],k,l,m,t,p,w=0;w<a.length;w++){k=new fa;l=V(a[w],[],k,0===w?d:u,e);(f=l.length?Z(l,a[w],k,b,c,null,[],[],f):null)&&f.scope&&K.$$addScopeClass(k.$$element);k=f&&f.terminal||!(m=a[w].childNodes)||!m.length?null:O(m,f?(f.transcludeOnThisElement||!f.templateOnThisElement)&&f.transclude:b);if(f||k)h.push(w,f,k),t=!0,p=p||f;f=null}return t?g:null}function R(a,
+b,c){return function(d,e,f,g,h){d||(d=a.$new(!1,h),d.$$transcluded=!0);return b(d,e,{parentBoundTranscludeFn:c,transcludeControllers:f,futureParentElement:g})}}function V(a,b,c,d,e){var h=c.$attr,k;switch(a.nodeType){case 1:P(b,va(ta(a)),"E",d,e);for(var l,m,t,p=a.attributes,w=0,D=p&&p.length;w<D;w++){var K=!1,A=!1;l=p[w];k=l.name;m=U(l.value);l=va(k);if(t=ka.test(l))k=k.replace(Vc,"").substr(8).replace(/_(.)/g,function(a,b){return b.toUpperCase()});(l=l.match(la))&&G(l[1])&&(K=k,A=k.substr(0,k.length-
+5)+"end",k=k.substr(0,k.length-6));l=va(k.toLowerCase());h[l]=k;if(t||!c.hasOwnProperty(l))c[l]=m,Qc(a,l)&&(c[l]=!0);W(a,b,m,l,t);P(b,l,"A",d,e,K,A)}a=a.className;H(a)&&(a=a.animVal);if(E(a)&&""!==a)for(;k=g.exec(a);)l=va(k[2]),P(b,l,"C",d,e)&&(c[l]=U(k[3])),a=a.substr(k.index+k[0].length);break;case Na:if(11===Ha)for(;a.parentNode&&a.nextSibling&&a.nextSibling.nodeType===Na;)a.nodeValue+=a.nextSibling.nodeValue,a.parentNode.removeChild(a.nextSibling);N(b,a.nodeValue);break;case 8:try{if(k=f.exec(a.nodeValue))l=
+va(k[1]),P(b,l,"M",d,e)&&(c[l]=U(k[2]))}catch(R){}}b.sort(Ia);return b}function Ta(a,b,c){var d=[],e=0;if(b&&a.hasAttribute&&a.hasAttribute(b)){do{if(!a)throw ha("uterdir",b,c);1==a.nodeType&&(a.hasAttribute(b)&&e++,a.hasAttribute(c)&&e--);d.push(a);a=a.nextSibling}while(0<e)}else d.push(a);return B(d)}function s(a,b,c){return function(d,e,f,g,h){e=Ta(e[0],b,c);return a(d,e,f,g,h)}}function Z(a,b,d,e,f,g,h,l,m){function t(a,b,c,d){if(a){c&&(a=s(a,c,d));a.require=q.require;a.directiveName=x;if(O===
+q||q.$$isolateScope)a=ca(a,{isolateScope:!0});h.push(a)}if(b){c&&(b=s(b,c,d));b.require=q.require;b.directiveName=x;if(O===q||q.$$isolateScope)b=ca(b,{isolateScope:!0});l.push(b)}}function p(a,b,c,d){var e;if(E(b)){var f=b.match(k);b=b.substring(f[0].length);var g=f[1]||f[3],f="?"===f[2];"^^"===g?c=c.parent():e=(e=d&&d[b])&&e.instance;e||(d="$"+b+"Controller",e=g?c.inheritedData(d):c.data(d));if(!e&&!f)throw ha("ctreq",b,a);}else if(I(b))for(e=[],g=0,f=b.length;g<f;g++)e[g]=p(a,b[g],c,d);return e||
+null}function w(a,b,c,d,e,f){var g=$(),h;for(h in d){var k=d[h],l={$scope:k===O||k.$$isolateScope?e:f,$element:a,$attrs:b,$transclude:c},m=k.controller;"@"==m&&(m=b[k.name]);l=C(m,l,!0,k.controllerAs);g[k.name]=l;aa||a.data("$"+k.name+"Controller",l.instance)}return g}function D(a,c,e,f,g){function k(a,b,c){var d;Za(a)||(c=b,b=a,a=u);aa&&(d=v);c||(c=aa?V.parent():V);return g(a,b,d,c,Ta)}var m,t,A,v,C,V,Ga;b===e?(f=d,V=d.$$element):(V=B(e),f=new fa(V,d));A=c;O?t=c.$new(!0):R&&(A=c.$parent);g&&(C=k,
+C.$$boundTransclude=g);T&&(v=w(V,f,C,T,t,c));O&&(K.$$addScopeInfo(V,t,!0,!(J&&(J===O||J===O.$$originalDirective))),K.$$addScopeClass(V,!0),t.$$isolateBindings=O.$$isolateBindings,(Ga=ba(c,f,t,t.$$isolateBindings,O))&&t.$on("$destroy",Ga));for(var n in v){Ga=T[n];var ga=v[n],L=Ga.$$bindings.bindToController;ga.identifier&&L&&(m=ba(A,f,ga.instance,L,Ga));var q=ga();q!==ga.instance&&(ga.instance=q,V.data("$"+Ga.name+"Controller",q),m&&m(),m=ba(A,f,ga.instance,L,Ga))}F=0;for(M=h.length;F<M;F++)m=h[F],
+ea(m,m.isolateScope?t:c,V,f,m.require&&p(m.directiveName,m.require,V,v),C);var Ta=c;O&&(O.template||null===O.templateUrl)&&(Ta=t);a&&a(Ta,e.childNodes,u,g);for(F=l.length-1;0<=F;F--)m=l[F],ea(m,m.isolateScope?t:c,V,f,m.require&&p(m.directiveName,m.require,V,v),C)}m=m||{};for(var A=-Number.MAX_VALUE,R=m.newScopeDirective,T=m.controllerDirectives,O=m.newIsolateScopeDirective,J=m.templateDirective,n=m.nonTlbTranscludeDirective,ga=!1,L=!1,aa=m.hasElementTranscludeDirective,Z=d.$$element=B(b),q,x,P,Ia=
+e,G,F=0,M=a.length;F<M;F++){q=a[F];var N=q.$$start,Q=q.$$end;N&&(Z=Ta(b,N,Q));P=u;if(A>q.priority)break;if(P=q.scope)q.templateUrl||(H(P)?(Ua("new/isolated scope",O||R,q,Z),O=q):Ua("new/isolated scope",O,q,Z)),R=R||q;x=q.name;!q.templateUrl&&q.controller&&(P=q.controller,T=T||$(),Ua("'"+x+"' controller",T[x],q,Z),T[x]=q);if(P=q.transclude)ga=!0,q.$$tlb||(Ua("transclusion",n,q,Z),n=q),"element"==P?(aa=!0,A=q.priority,P=Z,Z=d.$$element=B(X.createComment(" "+x+": "+d[x]+" ")),b=Z[0],Y(f,ra.call(P,0),
+b),Ia=K(P,e,A,g&&g.name,{nonTlbTranscludeDirective:n})):(P=B(Vb(b)).contents(),Z.empty(),Ia=K(P,e,u,u,{needsNewScope:q.$$isolateScope||q.$$newScope}));if(q.template)if(L=!0,Ua("template",J,q,Z),J=q,P=z(q.template)?q.template(Z,d):q.template,P=ja(P),q.replace){g=q;P=Tb.test(P)?Xc(Yb(q.templateNamespace,U(P))):[];b=P[0];if(1!=P.length||1!==b.nodeType)throw ha("tplrt",x,"");Y(f,Z,b);P={$attr:{}};var Wc=V(b,[],P),W=a.splice(F+1,a.length-(F+1));(O||R)&&y(Wc,O,R);a=a.concat(Wc).concat(W);S(d,P);M=a.length}else Z.html(P);
+if(q.templateUrl)L=!0,Ua("template",J,q,Z),J=q,q.replace&&(g=q),D=Of(a.splice(F,a.length-F),Z,d,f,ga&&Ia,h,l,{controllerDirectives:T,newScopeDirective:R!==q&&R,newIsolateScopeDirective:O,templateDirective:J,nonTlbTranscludeDirective:n}),M=a.length;else if(q.compile)try{G=q.compile(Z,d,Ia),z(G)?t(null,G,N,Q):G&&t(G.pre,G.post,N,Q)}catch(da){c(da,ua(Z))}q.terminal&&(D.terminal=!0,A=Math.max(A,q.priority))}D.scope=R&&!0===R.scope;D.transcludeOnThisElement=ga;D.templateOnThisElement=L;D.transclude=Ia;
+m.hasElementTranscludeDirective=aa;return D}function y(a,b,c){for(var d=0,e=a.length;d<e;d++)a[d]=Ob(a[d],{$$isolateScope:b,$$newScope:c})}function P(b,d,f,g,h,k,l){if(d===h)return null;h=null;if(e.hasOwnProperty(d)){var m;d=a.get(d+"Directive");for(var p=0,w=d.length;p<w;p++)try{m=d[p],(q(g)||g>m.priority)&&-1!=m.restrict.indexOf(f)&&(k&&(m=Ob(m,{$$start:k,$$end:l})),b.push(m),h=m)}catch(D){c(D)}}return h}function G(b){if(e.hasOwnProperty(b))for(var c=a.get(b+"Directive"),d=0,f=c.length;d<f;d++)if(b=
+c[d],b.multiElement)return!0;return!1}function S(a,b){var c=b.$attr,d=a.$attr,e=a.$$element;n(a,function(d,e){"$"!=e.charAt(0)&&(b[e]&&b[e]!==d&&(d+=("style"===e?";":" ")+b[e]),a.$set(e,d,!0,c[e]))});n(b,function(b,f){"class"==f?(J(e,b),a["class"]=(a["class"]?a["class"]+" ":"")+b):"style"==f?(e.attr("style",e.attr("style")+";"+b),a.style=(a.style?a.style+";":"")+b):"$"==f.charAt(0)||a.hasOwnProperty(f)||(a[f]=b,d[f]=c[f])})}function Of(a,b,c,e,f,g,h,k){var l=[],m,t,p=b[0],w=a.shift(),D=Ob(w,{templateUrl:null,
+transclude:null,replace:null,$$originalDirective:w}),A=z(w.templateUrl)?w.templateUrl(b,c):w.templateUrl,K=w.templateNamespace;b.empty();d(A).then(function(d){var T,v;d=ja(d);if(w.replace){d=Tb.test(d)?Xc(Yb(K,U(d))):[];T=d[0];if(1!=d.length||1!==T.nodeType)throw ha("tplrt",w.name,A);d={$attr:{}};Y(e,b,T);var C=V(T,[],d);H(w.scope)&&y(C,!0);a=C.concat(a);S(c,d)}else T=p,b.html(d);a.unshift(D);m=Z(a,T,c,f,b,w,g,h,k);n(e,function(a,c){a==T&&(e[c]=b[0])});for(t=O(b[0].childNodes,f);l.length;){d=l.shift();
+v=l.shift();var ga=l.shift(),L=l.shift(),C=b[0];if(!d.$$destroyed){if(v!==p){var q=v.className;k.hasElementTranscludeDirective&&w.replace||(C=Vb(T));Y(ga,B(v),C);J(B(C),q)}v=m.transcludeOnThisElement?R(d,m.transclude,L):L;m(t,d,C,e,v)}}l=null});return function(a,b,c,d,e){a=e;b.$$destroyed||(l?l.push(b,c,d,a):(m.transcludeOnThisElement&&(a=R(b,m.transclude,e)),m(t,b,c,d,a)))}}function Ia(a,b){var c=b.priority-a.priority;return 0!==c?c:a.name!==b.name?a.name<b.name?-1:1:a.index-b.index}function Ua(a,
+b,c,d){function e(a){return a?" (module: "+a+")":""}if(b)throw ha("multidir",b.name,e(b.$$moduleName),c.name,e(c.$$moduleName),a,ua(d));}function N(a,c){var d=b(c,!0);d&&a.push({priority:0,compile:function(a){a=a.parent();var b=!!a.length;b&&K.$$addBindingClass(a);return function(a,c){var e=c.parent();b||K.$$addBindingClass(e);K.$$addBindingInfo(e,d.expressions);a.$watch(d,function(a){c[0].nodeValue=a})}}})}function Yb(a,b){a=F(a||"html");switch(a){case "svg":case "math":var c=X.createElement("div");
+c.innerHTML="<"+a+">"+b+"</"+a+">";return c.childNodes[0].childNodes;default:return b}}function Q(a,b){if("srcdoc"==b)return L.HTML;var c=ta(a);if("xlinkHref"==b||"form"==c&&"action"==b||"img"!=c&&("src"==b||"ngSrc"==b))return L.RESOURCE_URL}function W(a,c,d,e,f){var g=Q(a,e);f=h[e]||f;var k=b(d,!0,g,f);if(k){if("multiple"===e&&"select"===ta(a))throw ha("selmulti",ua(a));c.push({priority:100,compile:function(){return{pre:function(a,c,h){c=h.$$observers||(h.$$observers=$());if(l.test(e))throw ha("nodomevents");
+var m=h[e];m!==d&&(k=m&&b(m,!0,g,f),d=m);k&&(h[e]=k(a),(c[e]||(c[e]=[])).$$inter=!0,(h.$$observers&&h.$$observers[e].$$scope||a).$watch(k,function(a,b){"class"===e&&a!=b?h.$updateClass(a,b):h.$set(e,a)}))}}}})}}function Y(a,b,c){var d=b[0],e=b.length,f=d.parentNode,g,h;if(a)for(g=0,h=a.length;g<h;g++)if(a[g]==d){a[g++]=c;h=g+e-1;for(var k=a.length;g<k;g++,h++)h<k?a[g]=a[h]:delete a[g];a.length-=e-1;a.context===d&&(a.context=c);break}f&&f.replaceChild(c,d);a=X.createDocumentFragment();a.appendChild(d);
+B.hasData(d)&&(B.data(c,B.data(d)),oa?(Rb=!0,oa.cleanData([d])):delete B.cache[d[B.expando]]);d=1;for(e=b.length;d<e;d++)f=b[d],B(f).remove(),a.appendChild(f),delete b[d];b[0]=c;b.length=1}function ca(a,b){return M(function(){return a.apply(null,arguments)},a,b)}function ea(a,b,d,e,f,g){try{a(b,d,e,f,g)}catch(h){c(h,ua(d))}}function ba(a,c,d,e,f){var g=[];n(e,function(e,h){var k=e.attrName,l=e.optional,m,t,w,D;switch(e.mode){case "@":l||qa.call(c,k)||(d[h]=c[k]=void 0);c.$observe(k,function(a){E(a)&&
+(d[h]=a)});c.$$observers[k].$$scope=a;E(c[k])&&(d[h]=b(c[k])(a));break;case "=":if(!qa.call(c,k)){if(l)break;c[k]=void 0}if(l&&!c[k])break;t=p(c[k]);D=t.literal?ma:function(a,b){return a===b||a!==a&&b!==b};w=t.assign||function(){m=d[h]=t(a);throw ha("nonassign",c[k],f.name);};m=d[h]=t(a);l=function(b){D(b,d[h])||(D(b,m)?w(a,b=d[h]):d[h]=b);return m=b};l.$stateful=!0;l=e.collection?a.$watchCollection(c[k],l):a.$watch(p(c[k],l),null,t.literal);g.push(l);break;case "&":t=c.hasOwnProperty(k)?p(c[k]):
+x;if(t===x&&l)break;d[h]=function(b){return t(a,b)}}});return g.length&&function(){for(var a=0,b=g.length;a<b;++a)g[a]()}}var fa=function(a,b){if(b){var c=Object.keys(b),d,e,f;d=0;for(e=c.length;d<e;d++)f=c[d],this[f]=b[f]}else this.$attr={};this.$$element=a};fa.prototype={$normalize:va,$addClass:function(a){a&&0<a.length&&aa.addClass(this.$$element,a)},$removeClass:function(a){a&&0<a.length&&aa.removeClass(this.$$element,a)},$updateClass:function(a,b){var c=Yc(a,b);c&&c.length&&aa.addClass(this.$$element,
+c);(c=Yc(b,a))&&c.length&&aa.removeClass(this.$$element,c)},$set:function(a,b,d,e){var f=Qc(this.$$element[0],a),g=Zc[a],h=a;f?(this.$$element.prop(a,b),e=f):g&&(this[g]=b,h=g);this[a]=b;e?this.$attr[a]=e:(e=this.$attr[a])||(this.$attr[a]=e=zc(a,"-"));f=ta(this.$$element);if("a"===f&&"href"===a||"img"===f&&"src"===a)this[a]=b=D(b,"src"===a);else if("img"===f&&"srcset"===a){for(var f="",g=U(b),k=/(\s+\d+x\s*,|\s+\d+w\s*,|\s+,|,\s+)/,k=/\s/.test(g)?k:/(,)/,g=g.split(k),k=Math.floor(g.length/2),l=0;l<
+k;l++)var m=2*l,f=f+D(U(g[m]),!0),f=f+(" "+U(g[m+1]));g=U(g[2*l]).split(/\s/);f+=D(U(g[0]),!0);2===g.length&&(f+=" "+U(g[1]));this[a]=b=f}!1!==d&&(null===b||q(b)?this.$$element.removeAttr(e):this.$$element.attr(e,b));(a=this.$$observers)&&n(a[h],function(a){try{a(b)}catch(d){c(d)}})},$observe:function(a,b){var c=this,d=c.$$observers||(c.$$observers=$()),e=d[a]||(d[a]=[]);e.push(b);w.$evalAsync(function(){e.$$inter||!c.hasOwnProperty(a)||q(c[a])||b(c[a])});return function(){ab(e,b)}}};var da=b.startSymbol(),
+ia=b.endSymbol(),ja="{{"==da||"}}"==ia?Ya:function(a){return a.replace(/\{\{/g,da).replace(/}}/g,ia)},ka=/^ngAttr[A-Z]/,la=/^(.+)Start$/;K.$$addBindingInfo=m?function(a,b){var c=a.data("$binding")||[];I(b)?c=c.concat(b):c.push(b);a.data("$binding",c)}:x;K.$$addBindingClass=m?function(a){J(a,"ng-binding")}:x;K.$$addScopeInfo=m?function(a,b,c,d){a.data(c?d?"$isolateScopeNoTemplate":"$isolateScope":"$scope",b)}:x;K.$$addScopeClass=m?function(a,b){J(a,b?"ng-isolate-scope":"ng-scope")}:x;return K}]}function va(a){return fb(a.replace(Vc,
+""))}function Yc(a,b){var d="",c=a.split(/\s+/),e=b.split(/\s+/),f=0;a:for(;f<c.length;f++){for(var g=c[f],h=0;h<e.length;h++)if(g==e[h])continue a;d+=(0<d.length?" ":"")+g}return d}function Xc(a){a=B(a);var b=a.length;if(1>=b)return a;for(;b--;)8===a[b].nodeType&&Pf.call(a,b,1);return a}function Xe(){var a={},b=!1;this.register=function(b,c){Ra(b,"controller");H(b)?M(a,b):a[b]=c};this.allowGlobals=function(){b=!0};this.$get=["$injector","$window",function(d,c){function e(a,b,c,d){if(!a||!H(a.$scope))throw G("$controller")("noscp",
+d,b);a.$scope[b]=c}return function(f,g,h,k){var l,m,r;h=!0===h;k&&E(k)&&(r=k);if(E(f)){k=f.match(Uc);if(!k)throw Qf("ctrlfmt",f);m=k[1];r=r||k[3];f=a.hasOwnProperty(m)?a[m]:Bc(g.$scope,m,!0)||(b?Bc(c,m,!0):u);Qa(f,m,!0)}if(h)return h=(I(f)?f[f.length-1]:f).prototype,l=Object.create(h||null),r&&e(g,r,l,m||f.name),M(function(){var a=d.invoke(f,l,g,m);a!==l&&(H(a)||z(a))&&(l=a,r&&e(g,r,l,m||f.name));return l},{instance:l,identifier:r});l=d.instantiate(f,g,m);r&&e(g,r,l,m||f.name);return l}}]}function Ye(){this.$get=
+["$window",function(a){return B(a.document)}]}function Ze(){this.$get=["$log",function(a){return function(b,d){a.error.apply(a,arguments)}}]}function Zb(a){return H(a)?da(a)?a.toISOString():db(a):a}function df(){this.$get=function(){return function(a){if(!a)return"";var b=[];oc(a,function(a,c){null===a||q(a)||(I(a)?n(a,function(a,d){b.push(ja(c)+"="+ja(Zb(a)))}):b.push(ja(c)+"="+ja(Zb(a))))});return b.join("&")}}}function ef(){this.$get=function(){return function(a){function b(a,e,f){null===a||q(a)||
+(I(a)?n(a,function(a,c){b(a,e+"["+(H(a)?c:"")+"]")}):H(a)&&!da(a)?oc(a,function(a,c){b(a,e+(f?"":"[")+c+(f?"":"]"))}):d.push(ja(e)+"="+ja(Zb(a))))}if(!a)return"";var d=[];b(a,"",!0);return d.join("&")}}}function $b(a,b){if(E(a)){var d=a.replace(Rf,"").trim();if(d){var c=b("Content-Type");(c=c&&0===c.indexOf($c))||(c=(c=d.match(Sf))&&Tf[c[0]].test(d));c&&(a=uc(d))}}return a}function ad(a){var b=$(),d;E(a)?n(a.split("\n"),function(a){d=a.indexOf(":");var e=F(U(a.substr(0,d)));a=U(a.substr(d+1));e&&
+(b[e]=b[e]?b[e]+", "+a:a)}):H(a)&&n(a,function(a,d){var f=F(d),g=U(a);f&&(b[f]=b[f]?b[f]+", "+g:g)});return b}function bd(a){var b;return function(d){b||(b=ad(a));return d?(d=b[F(d)],void 0===d&&(d=null),d):b}}function cd(a,b,d,c){if(z(c))return c(a,b,d);n(c,function(c){a=c(a,b,d)});return a}function cf(){var a=this.defaults={transformResponse:[$b],transformRequest:[function(a){return H(a)&&"[object File]"!==sa.call(a)&&"[object Blob]"!==sa.call(a)&&"[object FormData]"!==sa.call(a)?db(a):a}],headers:{common:{Accept:"application/json, text/plain, */*"},
+post:ia(ac),put:ia(ac),patch:ia(ac)},xsrfCookieName:"XSRF-TOKEN",xsrfHeaderName:"X-XSRF-TOKEN",paramSerializer:"$httpParamSerializer"},b=!1;this.useApplyAsync=function(a){return y(a)?(b=!!a,this):b};var d=!0;this.useLegacyPromiseExtensions=function(a){return y(a)?(d=!!a,this):d};var c=this.interceptors=[];this.$get=["$httpBackend","$$cookieReader","$cacheFactory","$rootScope","$q","$injector",function(e,f,g,h,k,l){function m(b){function c(a){var b=M({},a);b.data=cd(a.data,a.headers,a.status,f.transformResponse);
+a=a.status;return 200<=a&&300>a?b:k.reject(b)}function e(a,b){var c,d={};n(a,function(a,e){z(a)?(c=a(b),null!=c&&(d[e]=c)):d[e]=a});return d}if(!fa.isObject(b))throw G("$http")("badreq",b);var f=M({method:"get",transformRequest:a.transformRequest,transformResponse:a.transformResponse,paramSerializer:a.paramSerializer},b);f.headers=function(b){var c=a.headers,d=M({},b.headers),f,g,h,c=M({},c.common,c[F(b.method)]);a:for(f in c){g=F(f);for(h in d)if(F(h)===g)continue a;d[f]=c[f]}return e(d,ia(b))}(b);
+f.method=sb(f.method);f.paramSerializer=E(f.paramSerializer)?l.get(f.paramSerializer):f.paramSerializer;var g=[function(b){var d=b.headers,e=cd(b.data,bd(d),u,b.transformRequest);q(e)&&n(d,function(a,b){"content-type"===F(b)&&delete d[b]});q(b.withCredentials)&&!q(a.withCredentials)&&(b.withCredentials=a.withCredentials);return r(b,e).then(c,c)},u],h=k.when(f);for(n(v,function(a){(a.request||a.requestError)&&g.unshift(a.request,a.requestError);(a.response||a.responseError)&&g.push(a.response,a.responseError)});g.length;){b=
+g.shift();var m=g.shift(),h=h.then(b,m)}d?(h.success=function(a){Qa(a,"fn");h.then(function(b){a(b.data,b.status,b.headers,f)});return h},h.error=function(a){Qa(a,"fn");h.then(null,function(b){a(b.data,b.status,b.headers,f)});return h}):(h.success=dd("success"),h.error=dd("error"));return h}function r(c,d){function g(a,c,d,e){function f(){l(c,a,d,e)}J&&(200<=a&&300>a?J.put(R,[a,c,ad(d),e]):J.remove(R));b?h.$applyAsync(f):(f(),h.$$phase||h.$apply())}function l(a,b,d,e){b=-1<=b?b:0;(200<=b&&300>b?n.resolve:
+n.reject)({data:a,status:b,headers:bd(d),config:c,statusText:e})}function r(a){l(a.data,a.status,ia(a.headers()),a.statusText)}function v(){var a=m.pendingRequests.indexOf(c);-1!==a&&m.pendingRequests.splice(a,1)}var n=k.defer(),D=n.promise,J,K,O=c.headers,R=t(c.url,c.paramSerializer(c.params));m.pendingRequests.push(c);D.then(v,v);!c.cache&&!a.cache||!1===c.cache||"GET"!==c.method&&"JSONP"!==c.method||(J=H(c.cache)?c.cache:H(a.cache)?a.cache:A);J&&(K=J.get(R),y(K)?K&&z(K.then)?K.then(r,r):I(K)?l(K[1],
+K[0],ia(K[2]),K[3]):l(K,200,{},"OK"):J.put(R,D));q(K)&&((K=ed(c.url)?f()[c.xsrfCookieName||a.xsrfCookieName]:u)&&(O[c.xsrfHeaderName||a.xsrfHeaderName]=K),e(c.method,R,d,g,O,c.timeout,c.withCredentials,c.responseType));return D}function t(a,b){0<b.length&&(a+=(-1==a.indexOf("?")?"?":"&")+b);return a}var A=g("$http");a.paramSerializer=E(a.paramSerializer)?l.get(a.paramSerializer):a.paramSerializer;var v=[];n(c,function(a){v.unshift(E(a)?l.get(a):l.invoke(a))});m.pendingRequests=[];(function(a){n(arguments,
+function(a){m[a]=function(b,c){return m(M({},c||{},{method:a,url:b}))}})})("get","delete","head","jsonp");(function(a){n(arguments,function(a){m[a]=function(b,c,d){return m(M({},d||{},{method:a,url:b,data:c}))}})})("post","put","patch");m.defaults=a;return m}]}function gf(){this.$get=function(){return function(){return new S.XMLHttpRequest}}}function ff(){this.$get=["$browser","$window","$document","$xhrFactory",function(a,b,d,c){return Uf(a,c,a.defer,b.angular.callbacks,d[0])}]}function Uf(a,b,d,
+c,e){function f(a,b,d){var f=e.createElement("script"),m=null;f.type="text/javascript";f.src=a;f.async=!0;m=function(a){f.removeEventListener("load",m,!1);f.removeEventListener("error",m,!1);e.body.removeChild(f);f=null;var g=-1,A="unknown";a&&("load"!==a.type||c[b].called||(a={type:"error"}),A=a.type,g="error"===a.type?404:200);d&&d(g,A)};f.addEventListener("load",m,!1);f.addEventListener("error",m,!1);e.body.appendChild(f);return m}return function(e,h,k,l,m,r,t,A){function v(){C&&C();w&&w.abort()}
+function T(b,c,e,f,g){y(L)&&d.cancel(L);C=w=null;b(c,e,f,g);a.$$completeOutstandingRequest(x)}a.$$incOutstandingRequestCount();h=h||a.url();if("jsonp"==F(e)){var p="_"+(c.counter++).toString(36);c[p]=function(a){c[p].data=a;c[p].called=!0};var C=f(h.replace("JSON_CALLBACK","angular.callbacks."+p),p,function(a,b){T(l,a,c[p].data,"",b);c[p]=x})}else{var w=b(e,h);w.open(e,h,!0);n(m,function(a,b){y(a)&&w.setRequestHeader(b,a)});w.onload=function(){var a=w.statusText||"",b="response"in w?w.response:w.responseText,
+c=1223===w.status?204:w.status;0===c&&(c=b?200:"file"==wa(h).protocol?404:0);T(l,c,b,w.getAllResponseHeaders(),a)};e=function(){T(l,-1,null,null,"")};w.onerror=e;w.onabort=e;t&&(w.withCredentials=!0);if(A)try{w.responseType=A}catch(ga){if("json"!==A)throw ga;}w.send(q(k)?null:k)}if(0<r)var L=d(v,r);else r&&z(r.then)&&r.then(v)}}function af(){var a="{{",b="}}";this.startSymbol=function(b){return b?(a=b,this):a};this.endSymbol=function(a){return a?(b=a,this):b};this.$get=["$parse","$exceptionHandler",
+"$sce",function(d,c,e){function f(a){return"\\\\\\"+a}function g(c){return c.replace(m,a).replace(r,b)}function h(f,h,m,r){function p(a){try{var b=a;a=m?e.getTrusted(m,b):e.valueOf(b);var d;if(r&&!y(a))d=a;else if(null==a)d="";else{switch(typeof a){case "string":break;case "number":a=""+a;break;default:a=db(a)}d=a}return d}catch(g){c(Ja.interr(f,g))}}r=!!r;for(var C,w,n=0,L=[],s=[],D=f.length,J=[],K=[];n<D;)if(-1!=(C=f.indexOf(a,n))&&-1!=(w=f.indexOf(b,C+k)))n!==C&&J.push(g(f.substring(n,C))),n=f.substring(C+
+k,w),L.push(n),s.push(d(n,p)),n=w+l,K.push(J.length),J.push("");else{n!==D&&J.push(g(f.substring(n)));break}m&&1<J.length&&Ja.throwNoconcat(f);if(!h||L.length){var O=function(a){for(var b=0,c=L.length;b<c;b++){if(r&&q(a[b]))return;J[K[b]]=a[b]}return J.join("")};return M(function(a){var b=0,d=L.length,e=Array(d);try{for(;b<d;b++)e[b]=s[b](a);return O(e)}catch(g){c(Ja.interr(f,g))}},{exp:f,expressions:L,$$watchDelegate:function(a,b){var c;return a.$watchGroup(s,function(d,e){var f=O(d);z(b)&&b.call(this,
+f,d!==e?c:f,a);c=f})}})}}var k=a.length,l=b.length,m=new RegExp(a.replace(/./g,f),"g"),r=new RegExp(b.replace(/./g,f),"g");h.startSymbol=function(){return a};h.endSymbol=function(){return b};return h}]}function bf(){this.$get=["$rootScope","$window","$q","$$q",function(a,b,d,c){function e(e,h,k,l){var m=4<arguments.length,r=m?ra.call(arguments,4):[],t=b.setInterval,A=b.clearInterval,v=0,n=y(l)&&!l,p=(n?c:d).defer(),C=p.promise;k=y(k)?k:0;C.then(null,null,m?function(){e.apply(null,r)}:e);C.$$intervalId=
+t(function(){p.notify(v++);0<k&&v>=k&&(p.resolve(v),A(C.$$intervalId),delete f[C.$$intervalId]);n||a.$apply()},h);f[C.$$intervalId]=p;return C}var f={};e.cancel=function(a){return a&&a.$$intervalId in f?(f[a.$$intervalId].reject("canceled"),b.clearInterval(a.$$intervalId),delete f[a.$$intervalId],!0):!1};return e}]}function bc(a){a=a.split("/");for(var b=a.length;b--;)a[b]=ob(a[b]);return a.join("/")}function fd(a,b){var d=wa(a);b.$$protocol=d.protocol;b.$$host=d.hostname;b.$$port=ea(d.port)||Vf[d.protocol]||
+null}function gd(a,b){var d="/"!==a.charAt(0);d&&(a="/"+a);var c=wa(a);b.$$path=decodeURIComponent(d&&"/"===c.pathname.charAt(0)?c.pathname.substring(1):c.pathname);b.$$search=xc(c.search);b.$$hash=decodeURIComponent(c.hash);b.$$path&&"/"!=b.$$path.charAt(0)&&(b.$$path="/"+b.$$path)}function pa(a,b){if(0===b.indexOf(a))return b.substr(a.length)}function Fa(a){var b=a.indexOf("#");return-1==b?a:a.substr(0,b)}function ib(a){return a.replace(/(#.+)|#$/,"$1")}function cc(a,b,d){this.$$html5=!0;d=d||"";
+fd(a,this);this.$$parse=function(a){var d=pa(b,a);if(!E(d))throw Db("ipthprfx",a,b);gd(d,this);this.$$path||(this.$$path="/");this.$$compose()};this.$$compose=function(){var a=Qb(this.$$search),d=this.$$hash?"#"+ob(this.$$hash):"";this.$$url=bc(this.$$path)+(a?"?"+a:"")+d;this.$$absUrl=b+this.$$url.substr(1)};this.$$parseLinkUrl=function(c,e){if(e&&"#"===e[0])return this.hash(e.slice(1)),!0;var f,g;y(f=pa(a,c))?(g=f,g=y(f=pa(d,f))?b+(pa("/",f)||f):a+g):y(f=pa(b,c))?g=b+f:b==c+"/"&&(g=b);g&&this.$$parse(g);
+return!!g}}function dc(a,b,d){fd(a,this);this.$$parse=function(c){var e=pa(a,c)||pa(b,c),f;q(e)||"#"!==e.charAt(0)?this.$$html5?f=e:(f="",q(e)&&(a=c,this.replace())):(f=pa(d,e),q(f)&&(f=e));gd(f,this);c=this.$$path;var e=a,g=/^\/[A-Z]:(\/.*)/;0===f.indexOf(e)&&(f=f.replace(e,""));g.exec(f)||(c=(f=g.exec(c))?f[1]:c);this.$$path=c;this.$$compose()};this.$$compose=function(){var b=Qb(this.$$search),e=this.$$hash?"#"+ob(this.$$hash):"";this.$$url=bc(this.$$path)+(b?"?"+b:"")+e;this.$$absUrl=a+(this.$$url?
+d+this.$$url:"")};this.$$parseLinkUrl=function(b,d){return Fa(a)==Fa(b)?(this.$$parse(b),!0):!1}}function hd(a,b,d){this.$$html5=!0;dc.apply(this,arguments);this.$$parseLinkUrl=function(c,e){if(e&&"#"===e[0])return this.hash(e.slice(1)),!0;var f,g;a==Fa(c)?f=c:(g=pa(b,c))?f=a+d+g:b===c+"/"&&(f=b);f&&this.$$parse(f);return!!f};this.$$compose=function(){var b=Qb(this.$$search),e=this.$$hash?"#"+ob(this.$$hash):"";this.$$url=bc(this.$$path)+(b?"?"+b:"")+e;this.$$absUrl=a+d+this.$$url}}function Eb(a){return function(){return this[a]}}
+function id(a,b){return function(d){if(q(d))return this[a];this[a]=b(d);this.$$compose();return this}}function hf(){var a="",b={enabled:!1,requireBase:!0,rewriteLinks:!0};this.hashPrefix=function(b){return y(b)?(a=b,this):a};this.html5Mode=function(a){return $a(a)?(b.enabled=a,this):H(a)?($a(a.enabled)&&(b.enabled=a.enabled),$a(a.requireBase)&&(b.requireBase=a.requireBase),$a(a.rewriteLinks)&&(b.rewriteLinks=a.rewriteLinks),this):b};this.$get=["$rootScope","$browser","$sniffer","$rootElement","$window",
+function(d,c,e,f,g){function h(a,b,d){var e=l.url(),f=l.$$state;try{c.url(a,b,d),l.$$state=c.state()}catch(g){throw l.url(e),l.$$state=f,g;}}function k(a,b){d.$broadcast("$locationChangeSuccess",l.absUrl(),a,l.$$state,b)}var l,m;m=c.baseHref();var r=c.url(),t;if(b.enabled){if(!m&&b.requireBase)throw Db("nobase");t=r.substring(0,r.indexOf("/",r.indexOf("//")+2))+(m||"/");m=e.history?cc:hd}else t=Fa(r),m=dc;var A=t.substr(0,Fa(t).lastIndexOf("/")+1);l=new m(t,A,"#"+a);l.$$parseLinkUrl(r,r);l.$$state=
+c.state();var v=/^\s*(javascript|mailto):/i;f.on("click",function(a){if(b.rewriteLinks&&!a.ctrlKey&&!a.metaKey&&!a.shiftKey&&2!=a.which&&2!=a.button){for(var e=B(a.target);"a"!==ta(e[0]);)if(e[0]===f[0]||!(e=e.parent())[0])return;var h=e.prop("href"),k=e.attr("href")||e.attr("xlink:href");H(h)&&"[object SVGAnimatedString]"===h.toString()&&(h=wa(h.animVal).href);v.test(h)||!h||e.attr("target")||a.isDefaultPrevented()||!l.$$parseLinkUrl(h,k)||(a.preventDefault(),l.absUrl()!=c.url()&&(d.$apply(),g.angular["ff-684208-preventDefault"]=
+!0))}});ib(l.absUrl())!=ib(r)&&c.url(l.absUrl(),!0);var n=!0;c.onUrlChange(function(a,b){q(pa(A,a))?g.location.href=a:(d.$evalAsync(function(){var c=l.absUrl(),e=l.$$state,f;a=ib(a);l.$$parse(a);l.$$state=b;f=d.$broadcast("$locationChangeStart",a,c,b,e).defaultPrevented;l.absUrl()===a&&(f?(l.$$parse(c),l.$$state=e,h(c,!1,e)):(n=!1,k(c,e)))}),d.$$phase||d.$digest())});d.$watch(function(){var a=ib(c.url()),b=ib(l.absUrl()),f=c.state(),g=l.$$replace,m=a!==b||l.$$html5&&e.history&&f!==l.$$state;if(n||
+m)n=!1,d.$evalAsync(function(){var b=l.absUrl(),c=d.$broadcast("$locationChangeStart",b,a,l.$$state,f).defaultPrevented;l.absUrl()===b&&(c?(l.$$parse(a),l.$$state=f):(m&&h(b,g,f===l.$$state?null:l.$$state),k(a,f)))});l.$$replace=!1});return l}]}function jf(){var a=!0,b=this;this.debugEnabled=function(b){return y(b)?(a=b,this):a};this.$get=["$window",function(d){function c(a){a instanceof Error&&(a.stack?a=a.message&&-1===a.stack.indexOf(a.message)?"Error: "+a.message+"\n"+a.stack:a.stack:a.sourceURL&&
+(a=a.message+"\n"+a.sourceURL+":"+a.line));return a}function e(a){var b=d.console||{},e=b[a]||b.log||x;a=!1;try{a=!!e.apply}catch(k){}return a?function(){var a=[];n(arguments,function(b){a.push(c(b))});return e.apply(b,a)}:function(a,b){e(a,null==b?"":b)}}return{log:e("log"),info:e("info"),warn:e("warn"),error:e("error"),debug:function(){var c=e("debug");return function(){a&&c.apply(b,arguments)}}()}}]}function Va(a,b){if("__defineGetter__"===a||"__defineSetter__"===a||"__lookupGetter__"===a||"__lookupSetter__"===
+a||"__proto__"===a)throw ba("isecfld",b);return a}function jd(a,b){a+="";if(!E(a))throw ba("iseccst",b);return a}function xa(a,b){if(a){if(a.constructor===a)throw ba("isecfn",b);if(a.window===a)throw ba("isecwindow",b);if(a.children&&(a.nodeName||a.prop&&a.attr&&a.find))throw ba("isecdom",b);if(a===Object)throw ba("isecobj",b);}return a}function kd(a,b){if(a){if(a.constructor===a)throw ba("isecfn",b);if(a===Wf||a===Xf||a===Yf)throw ba("isecff",b);}}function ld(a,b){if(a&&(a===(0).constructor||a===
+(!1).constructor||a==="".constructor||a==={}.constructor||a===[].constructor||a===Function.constructor))throw ba("isecaf",b);}function Zf(a,b){return"undefined"!==typeof a?a:b}function md(a,b){return"undefined"===typeof a?b:"undefined"===typeof b?a:a+b}function W(a,b){var d,c;switch(a.type){case s.Program:d=!0;n(a.body,function(a){W(a.expression,b);d=d&&a.expression.constant});a.constant=d;break;case s.Literal:a.constant=!0;a.toWatch=[];break;case s.UnaryExpression:W(a.argument,b);a.constant=a.argument.constant;
+a.toWatch=a.argument.toWatch;break;case s.BinaryExpression:W(a.left,b);W(a.right,b);a.constant=a.left.constant&&a.right.constant;a.toWatch=a.left.toWatch.concat(a.right.toWatch);break;case s.LogicalExpression:W(a.left,b);W(a.right,b);a.constant=a.left.constant&&a.right.constant;a.toWatch=a.constant?[]:[a];break;case s.ConditionalExpression:W(a.test,b);W(a.alternate,b);W(a.consequent,b);a.constant=a.test.constant&&a.alternate.constant&&a.consequent.constant;a.toWatch=a.constant?[]:[a];break;case s.Identifier:a.constant=
+!1;a.toWatch=[a];break;case s.MemberExpression:W(a.object,b);a.computed&&W(a.property,b);a.constant=a.object.constant&&(!a.computed||a.property.constant);a.toWatch=[a];break;case s.CallExpression:d=a.filter?!b(a.callee.name).$stateful:!1;c=[];n(a.arguments,function(a){W(a,b);d=d&&a.constant;a.constant||c.push.apply(c,a.toWatch)});a.constant=d;a.toWatch=a.filter&&!b(a.callee.name).$stateful?c:[a];break;case s.AssignmentExpression:W(a.left,b);W(a.right,b);a.constant=a.left.constant&&a.right.constant;
+a.toWatch=[a];break;case s.ArrayExpression:d=!0;c=[];n(a.elements,function(a){W(a,b);d=d&&a.constant;a.constant||c.push.apply(c,a.toWatch)});a.constant=d;a.toWatch=c;break;case s.ObjectExpression:d=!0;c=[];n(a.properties,function(a){W(a.value,b);d=d&&a.value.constant;a.value.constant||c.push.apply(c,a.value.toWatch)});a.constant=d;a.toWatch=c;break;case s.ThisExpression:a.constant=!1,a.toWatch=[]}}function nd(a){if(1==a.length){a=a[0].expression;var b=a.toWatch;return 1!==b.length?b:b[0]!==a?b:u}}
+function od(a){return a.type===s.Identifier||a.type===s.MemberExpression}function pd(a){if(1===a.body.length&&od(a.body[0].expression))return{type:s.AssignmentExpression,left:a.body[0].expression,right:{type:s.NGValueParameter},operator:"="}}function qd(a){return 0===a.body.length||1===a.body.length&&(a.body[0].expression.type===s.Literal||a.body[0].expression.type===s.ArrayExpression||a.body[0].expression.type===s.ObjectExpression)}function rd(a,b){this.astBuilder=a;this.$filter=b}function sd(a,
+b){this.astBuilder=a;this.$filter=b}function Fb(a){return"constructor"==a}function ec(a){return z(a.valueOf)?a.valueOf():$f.call(a)}function kf(){var a=$(),b=$();this.$get=["$filter",function(d){function c(a,b){return null==a||null==b?a===b:"object"===typeof a&&(a=ec(a),"object"===typeof a)?!1:a===b||a!==a&&b!==b}function e(a,b,d,e,f){var g=e.inputs,h;if(1===g.length){var k=c,g=g[0];return a.$watch(function(a){var b=g(a);c(b,k)||(h=e(a,u,u,[b]),k=b&&ec(b));return h},b,d,f)}for(var l=[],m=[],r=0,n=
+g.length;r<n;r++)l[r]=c,m[r]=null;return a.$watch(function(a){for(var b=!1,d=0,f=g.length;d<f;d++){var k=g[d](a);if(b||(b=!c(k,l[d])))m[d]=k,l[d]=k&&ec(k)}b&&(h=e(a,u,u,m));return h},b,d,f)}function f(a,b,c,d){var e,f;return e=a.$watch(function(a){return d(a)},function(a,c,d){f=a;z(b)&&b.apply(this,arguments);y(a)&&d.$$postDigest(function(){y(f)&&e()})},c)}function g(a,b,c,d){function e(a){var b=!0;n(a,function(a){y(a)||(b=!1)});return b}var f,g;return f=a.$watch(function(a){return d(a)},function(a,
+c,d){g=a;z(b)&&b.call(this,a,c,d);e(a)&&d.$$postDigest(function(){e(g)&&f()})},c)}function h(a,b,c,d){var e;return e=a.$watch(function(a){return d(a)},function(a,c,d){z(b)&&b.apply(this,arguments);e()},c)}function k(a,b){if(!b)return a;var c=a.$$watchDelegate,d=!1,c=c!==g&&c!==f?function(c,e,f,g){f=d&&g?g[0]:a(c,e,f,g);return b(f,c,e)}:function(c,d,e,f){e=a(c,d,e,f);c=b(e,c,d);return y(e)?c:e};a.$$watchDelegate&&a.$$watchDelegate!==e?c.$$watchDelegate=a.$$watchDelegate:b.$stateful||(c.$$watchDelegate=
+e,d=!a.inputs,c.inputs=a.inputs?a.inputs:[a]);return c}var l=Ba().noUnsafeEval,m={csp:l,expensiveChecks:!1},r={csp:l,expensiveChecks:!0};return function(c,l,v){var n,p,q;switch(typeof c){case "string":q=c=c.trim();var w=v?b:a;n=w[q];n||(":"===c.charAt(0)&&":"===c.charAt(1)&&(p=!0,c=c.substring(2)),v=v?r:m,n=new fc(v),n=(new gc(n,d,v)).parse(c),n.constant?n.$$watchDelegate=h:p?n.$$watchDelegate=n.literal?g:f:n.inputs&&(n.$$watchDelegate=e),w[q]=n);return k(n,l);case "function":return k(c,l);default:return x}}}]}
+function mf(){this.$get=["$rootScope","$exceptionHandler",function(a,b){return td(function(b){a.$evalAsync(b)},b)}]}function nf(){this.$get=["$browser","$exceptionHandler",function(a,b){return td(function(b){a.defer(b)},b)}]}function td(a,b){function d(a,b,c){function d(b){return function(c){e||(e=!0,b.call(a,c))}}var e=!1;return[d(b),d(c)]}function c(){this.$$state={status:0}}function e(a,b){return function(c){b.call(a,c)}}function f(c){!c.processScheduled&&c.pending&&(c.processScheduled=!0,a(function(){var a,
+d,e;e=c.pending;c.processScheduled=!1;c.pending=u;for(var f=0,g=e.length;f<g;++f){d=e[f][0];a=e[f][c.status];try{z(a)?d.resolve(a(c.value)):1===c.status?d.resolve(c.value):d.reject(c.value)}catch(h){d.reject(h),b(h)}}}))}function g(){this.promise=new c;this.resolve=e(this,this.resolve);this.reject=e(this,this.reject);this.notify=e(this,this.notify)}var h=G("$q",TypeError);M(c.prototype,{then:function(a,b,c){if(q(a)&&q(b)&&q(c))return this;var d=new g;this.$$state.pending=this.$$state.pending||[];
+this.$$state.pending.push([d,a,b,c]);0<this.$$state.status&&f(this.$$state);return d.promise},"catch":function(a){return this.then(null,a)},"finally":function(a,b){return this.then(function(b){return l(b,!0,a)},function(b){return l(b,!1,a)},b)}});M(g.prototype,{resolve:function(a){this.promise.$$state.status||(a===this.promise?this.$$reject(h("qcycle",a)):this.$$resolve(a))},$$resolve:function(a){var c,e;e=d(this,this.$$resolve,this.$$reject);try{if(H(a)||z(a))c=a&&a.then;z(c)?(this.promise.$$state.status=
+-1,c.call(a,e[0],e[1],this.notify)):(this.promise.$$state.value=a,this.promise.$$state.status=1,f(this.promise.$$state))}catch(g){e[1](g),b(g)}},reject:function(a){this.promise.$$state.status||this.$$reject(a)},$$reject:function(a){this.promise.$$state.value=a;this.promise.$$state.status=2;f(this.promise.$$state)},notify:function(c){var d=this.promise.$$state.pending;0>=this.promise.$$state.status&&d&&d.length&&a(function(){for(var a,e,f=0,g=d.length;f<g;f++){e=d[f][0];a=d[f][3];try{e.notify(z(a)?
+a(c):c)}catch(h){b(h)}}})}});var k=function(a,b){var c=new g;b?c.resolve(a):c.reject(a);return c.promise},l=function(a,b,c){var d=null;try{z(c)&&(d=c())}catch(e){return k(e,!1)}return d&&z(d.then)?d.then(function(){return k(a,b)},function(a){return k(a,!1)}):k(a,b)},m=function(a,b,c,d){var e=new g;e.resolve(a);return e.promise.then(b,c,d)},r=function A(a){if(!z(a))throw h("norslvr",a);if(!(this instanceof A))return new A(a);var b=new g;a(function(a){b.resolve(a)},function(a){b.reject(a)});return b.promise};
+r.defer=function(){return new g};r.reject=function(a){var b=new g;b.reject(a);return b.promise};r.when=m;r.resolve=m;r.all=function(a){var b=new g,c=0,d=I(a)?[]:{};n(a,function(a,e){c++;m(a).then(function(a){d.hasOwnProperty(e)||(d[e]=a,--c||b.resolve(d))},function(a){d.hasOwnProperty(e)||b.reject(a)})});0===c&&b.resolve(d);return b.promise};return r}function wf(){this.$get=["$window","$timeout",function(a,b){var d=a.requestAnimationFrame||a.webkitRequestAnimationFrame,c=a.cancelAnimationFrame||a.webkitCancelAnimationFrame||
+a.webkitCancelRequestAnimationFrame,e=!!d,f=e?function(a){var b=d(a);return function(){c(b)}}:function(a){var c=b(a,16.66,!1);return function(){b.cancel(c)}};f.supported=e;return f}]}function lf(){function a(a){function b(){this.$$watchers=this.$$nextSibling=this.$$childHead=this.$$childTail=null;this.$$listeners={};this.$$listenerCount={};this.$$watchersCount=0;this.$id=++nb;this.$$ChildScope=null}b.prototype=a;return b}var b=10,d=G("$rootScope"),c=null,e=null;this.digestTtl=function(a){arguments.length&&
+(b=a);return b};this.$get=["$injector","$exceptionHandler","$parse","$browser",function(f,g,h,k){function l(a){a.currentScope.$$destroyed=!0}function m(a){9===Ha&&(a.$$childHead&&m(a.$$childHead),a.$$nextSibling&&m(a.$$nextSibling));a.$parent=a.$$nextSibling=a.$$prevSibling=a.$$childHead=a.$$childTail=a.$root=a.$$watchers=null}function r(){this.$id=++nb;this.$$phase=this.$parent=this.$$watchers=this.$$nextSibling=this.$$prevSibling=this.$$childHead=this.$$childTail=null;this.$root=this;this.$$destroyed=
+!1;this.$$listeners={};this.$$listenerCount={};this.$$watchersCount=0;this.$$isolateBindings=null}function t(a){if(w.$$phase)throw d("inprog",w.$$phase);w.$$phase=a}function A(a,b){do a.$$watchersCount+=b;while(a=a.$parent)}function v(a,b,c){do a.$$listenerCount[c]-=b,0===a.$$listenerCount[c]&&delete a.$$listenerCount[c];while(a=a.$parent)}function s(){}function p(){for(;aa.length;)try{aa.shift()()}catch(a){g(a)}e=null}function C(){null===e&&(e=k.defer(function(){w.$apply(p)}))}r.prototype={constructor:r,
+$new:function(b,c){var d;c=c||this;b?(d=new r,d.$root=this.$root):(this.$$ChildScope||(this.$$ChildScope=a(this)),d=new this.$$ChildScope);d.$parent=c;d.$$prevSibling=c.$$childTail;c.$$childHead?(c.$$childTail.$$nextSibling=d,c.$$childTail=d):c.$$childHead=c.$$childTail=d;(b||c!=this)&&d.$on("$destroy",l);return d},$watch:function(a,b,d,e){var f=h(a);if(f.$$watchDelegate)return f.$$watchDelegate(this,b,d,f,a);var g=this,k=g.$$watchers,l={fn:b,last:s,get:f,exp:e||a,eq:!!d};c=null;z(b)||(l.fn=x);k||
+(k=g.$$watchers=[]);k.unshift(l);A(this,1);return function(){0<=ab(k,l)&&A(g,-1);c=null}},$watchGroup:function(a,b){function c(){h=!1;k?(k=!1,b(e,e,g)):b(e,d,g)}var d=Array(a.length),e=Array(a.length),f=[],g=this,h=!1,k=!0;if(!a.length){var l=!0;g.$evalAsync(function(){l&&b(e,e,g)});return function(){l=!1}}if(1===a.length)return this.$watch(a[0],function(a,c,f){e[0]=a;d[0]=c;b(e,a===c?e:d,f)});n(a,function(a,b){var k=g.$watch(a,function(a,f){e[b]=a;d[b]=f;h||(h=!0,g.$evalAsync(c))});f.push(k)});return function(){for(;f.length;)f.shift()()}},
+$watchCollection:function(a,b){function c(a){e=a;var b,d,g,h;if(!q(e)){if(H(e))if(za(e))for(f!==r&&(f=r,n=f.length=0,l++),a=e.length,n!==a&&(l++,f.length=n=a),b=0;b<a;b++)h=f[b],g=e[b],d=h!==h&&g!==g,d||h===g||(l++,f[b]=g);else{f!==t&&(f=t={},n=0,l++);a=0;for(b in e)qa.call(e,b)&&(a++,g=e[b],h=f[b],b in f?(d=h!==h&&g!==g,d||h===g||(l++,f[b]=g)):(n++,f[b]=g,l++));if(n>a)for(b in l++,f)qa.call(e,b)||(n--,delete f[b])}else f!==e&&(f=e,l++);return l}}c.$stateful=!0;var d=this,e,f,g,k=1<b.length,l=0,m=
+h(a,c),r=[],t={},p=!0,n=0;return this.$watch(m,function(){p?(p=!1,b(e,e,d)):b(e,g,d);if(k)if(H(e))if(za(e)){g=Array(e.length);for(var a=0;a<e.length;a++)g[a]=e[a]}else for(a in g={},e)qa.call(e,a)&&(g[a]=e[a]);else g=e})},$digest:function(){var a,f,h,l,m,r,n=b,A,q=[],v,C;t("$digest");k.$$checkUrlChange();this===w&&null!==e&&(k.defer.cancel(e),p());c=null;do{r=!1;for(A=this;u.length;){try{C=u.shift(),C.scope.$eval(C.expression,C.locals)}catch(aa){g(aa)}c=null}a:do{if(l=A.$$watchers)for(m=l.length;m--;)try{if(a=
+l[m])if((f=a.get(A))!==(h=a.last)&&!(a.eq?ma(f,h):"number"===typeof f&&"number"===typeof h&&isNaN(f)&&isNaN(h)))r=!0,c=a,a.last=a.eq?bb(f,null):f,a.fn(f,h===s?f:h,A),5>n&&(v=4-n,q[v]||(q[v]=[]),q[v].push({msg:z(a.exp)?"fn: "+(a.exp.name||a.exp.toString()):a.exp,newVal:f,oldVal:h}));else if(a===c){r=!1;break a}}catch(y){g(y)}if(!(l=A.$$watchersCount&&A.$$childHead||A!==this&&A.$$nextSibling))for(;A!==this&&!(l=A.$$nextSibling);)A=A.$parent}while(A=l);if((r||u.length)&&!n--)throw w.$$phase=null,d("infdig",
+b,q);}while(r||u.length);for(w.$$phase=null;L.length;)try{L.shift()()}catch(x){g(x)}},$destroy:function(){if(!this.$$destroyed){var a=this.$parent;this.$broadcast("$destroy");this.$$destroyed=!0;this===w&&k.$$applicationDestroyed();A(this,-this.$$watchersCount);for(var b in this.$$listenerCount)v(this,this.$$listenerCount[b],b);a&&a.$$childHead==this&&(a.$$childHead=this.$$nextSibling);a&&a.$$childTail==this&&(a.$$childTail=this.$$prevSibling);this.$$prevSibling&&(this.$$prevSibling.$$nextSibling=
+this.$$nextSibling);this.$$nextSibling&&(this.$$nextSibling.$$prevSibling=this.$$prevSibling);this.$destroy=this.$digest=this.$apply=this.$evalAsync=this.$applyAsync=x;this.$on=this.$watch=this.$watchGroup=function(){return x};this.$$listeners={};this.$$nextSibling=null;m(this)}},$eval:function(a,b){return h(a)(this,b)},$evalAsync:function(a,b){w.$$phase||u.length||k.defer(function(){u.length&&w.$digest()});u.push({scope:this,expression:a,locals:b})},$$postDigest:function(a){L.push(a)},$apply:function(a){try{t("$apply");
+try{return this.$eval(a)}finally{w.$$phase=null}}catch(b){g(b)}finally{try{w.$digest()}catch(c){throw g(c),c;}}},$applyAsync:function(a){function b(){c.$eval(a)}var c=this;a&&aa.push(b);C()},$on:function(a,b){var c=this.$$listeners[a];c||(this.$$listeners[a]=c=[]);c.push(b);var d=this;do d.$$listenerCount[a]||(d.$$listenerCount[a]=0),d.$$listenerCount[a]++;while(d=d.$parent);var e=this;return function(){var d=c.indexOf(b);-1!==d&&(c[d]=null,v(e,1,a))}},$emit:function(a,b){var c=[],d,e=this,f=!1,h=
+{name:a,targetScope:e,stopPropagation:function(){f=!0},preventDefault:function(){h.defaultPrevented=!0},defaultPrevented:!1},k=cb([h],arguments,1),l,m;do{d=e.$$listeners[a]||c;h.currentScope=e;l=0;for(m=d.length;l<m;l++)if(d[l])try{d[l].apply(null,k)}catch(r){g(r)}else d.splice(l,1),l--,m--;if(f)return h.currentScope=null,h;e=e.$parent}while(e);h.currentScope=null;return h},$broadcast:function(a,b){var c=this,d=this,e={name:a,targetScope:this,preventDefault:function(){e.defaultPrevented=!0},defaultPrevented:!1};
+if(!this.$$listenerCount[a])return e;for(var f=cb([e],arguments,1),h,k;c=d;){e.currentScope=c;d=c.$$listeners[a]||[];h=0;for(k=d.length;h<k;h++)if(d[h])try{d[h].apply(null,f)}catch(l){g(l)}else d.splice(h,1),h--,k--;if(!(d=c.$$listenerCount[a]&&c.$$childHead||c!==this&&c.$$nextSibling))for(;c!==this&&!(d=c.$$nextSibling);)c=c.$parent}e.currentScope=null;return e}};var w=new r,u=w.$$asyncQueue=[],L=w.$$postDigestQueue=[],aa=w.$$applyAsyncQueue=[];return w}]}function ge(){var a=/^\s*(https?|ftp|mailto|tel|file):/,
+b=/^\s*((https?|ftp|file|blob):|data:image\/)/;this.aHrefSanitizationWhitelist=function(b){return y(b)?(a=b,this):a};this.imgSrcSanitizationWhitelist=function(a){return y(a)?(b=a,this):b};this.$get=function(){return function(d,c){var e=c?b:a,f;f=wa(d).href;return""===f||f.match(e)?d:"unsafe:"+f}}}function ag(a){if("self"===a)return a;if(E(a)){if(-1<a.indexOf("***"))throw ya("iwcard",a);a=ud(a).replace("\\*\\*",".*").replace("\\*","[^:/.?&;]*");return new RegExp("^"+a+"$")}if(Ma(a))return new RegExp("^"+
+a.source+"$");throw ya("imatcher");}function vd(a){var b=[];y(a)&&n(a,function(a){b.push(ag(a))});return b}function pf(){this.SCE_CONTEXTS=la;var a=["self"],b=[];this.resourceUrlWhitelist=function(b){arguments.length&&(a=vd(b));return a};this.resourceUrlBlacklist=function(a){arguments.length&&(b=vd(a));return b};this.$get=["$injector",function(d){function c(a,b){return"self"===a?ed(b):!!a.exec(b.href)}function e(a){var b=function(a){this.$$unwrapTrustedValue=function(){return a}};a&&(b.prototype=
+new a);b.prototype.valueOf=function(){return this.$$unwrapTrustedValue()};b.prototype.toString=function(){return this.$$unwrapTrustedValue().toString()};return b}var f=function(a){throw ya("unsafe");};d.has("$sanitize")&&(f=d.get("$sanitize"));var g=e(),h={};h[la.HTML]=e(g);h[la.CSS]=e(g);h[la.URL]=e(g);h[la.JS]=e(g);h[la.RESOURCE_URL]=e(h[la.URL]);return{trustAs:function(a,b){var c=h.hasOwnProperty(a)?h[a]:null;if(!c)throw ya("icontext",a,b);if(null===b||q(b)||""===b)return b;if("string"!==typeof b)throw ya("itype",
+a);return new c(b)},getTrusted:function(d,e){if(null===e||q(e)||""===e)return e;var g=h.hasOwnProperty(d)?h[d]:null;if(g&&e instanceof g)return e.$$unwrapTrustedValue();if(d===la.RESOURCE_URL){var g=wa(e.toString()),r,t,n=!1;r=0;for(t=a.length;r<t;r++)if(c(a[r],g)){n=!0;break}if(n)for(r=0,t=b.length;r<t;r++)if(c(b[r],g)){n=!1;break}if(n)return e;throw ya("insecurl",e.toString());}if(d===la.HTML)return f(e);throw ya("unsafe");},valueOf:function(a){return a instanceof g?a.$$unwrapTrustedValue():a}}}]}
+function of(){var a=!0;this.enabled=function(b){arguments.length&&(a=!!b);return a};this.$get=["$parse","$sceDelegate",function(b,d){if(a&&8>Ha)throw ya("iequirks");var c=ia(la);c.isEnabled=function(){return a};c.trustAs=d.trustAs;c.getTrusted=d.getTrusted;c.valueOf=d.valueOf;a||(c.trustAs=c.getTrusted=function(a,b){return b},c.valueOf=Ya);c.parseAs=function(a,d){var e=b(d);return e.literal&&e.constant?e:b(d,function(b){return c.getTrusted(a,b)})};var e=c.parseAs,f=c.getTrusted,g=c.trustAs;n(la,function(a,
+b){var d=F(b);c[fb("parse_as_"+d)]=function(b){return e(a,b)};c[fb("get_trusted_"+d)]=function(b){return f(a,b)};c[fb("trust_as_"+d)]=function(b){return g(a,b)}});return c}]}function qf(){this.$get=["$window","$document",function(a,b){var d={},c=ea((/android (\d+)/.exec(F((a.navigator||{}).userAgent))||[])[1]),e=/Boxee/i.test((a.navigator||{}).userAgent),f=b[0]||{},g,h=/^(Moz|webkit|ms)(?=[A-Z])/,k=f.body&&f.body.style,l=!1,m=!1;if(k){for(var r in k)if(l=h.exec(r)){g=l[0];g=g.substr(0,1).toUpperCase()+
+g.substr(1);break}g||(g="WebkitOpacity"in k&&"webkit");l=!!("transition"in k||g+"Transition"in k);m=!!("animation"in k||g+"Animation"in k);!c||l&&m||(l=E(k.webkitTransition),m=E(k.webkitAnimation))}return{history:!(!a.history||!a.history.pushState||4>c||e),hasEvent:function(a){if("input"===a&&11>=Ha)return!1;if(q(d[a])){var b=f.createElement("div");d[a]="on"+a in b}return d[a]},csp:Ba(),vendorPrefix:g,transitions:l,animations:m,android:c}}]}function sf(){this.$get=["$templateCache","$http","$q","$sce",
+function(a,b,d,c){function e(f,g){e.totalPendingRequests++;E(f)&&a.get(f)||(f=c.getTrustedResourceUrl(f));var h=b.defaults&&b.defaults.transformResponse;I(h)?h=h.filter(function(a){return a!==$b}):h===$b&&(h=null);return b.get(f,{cache:a,transformResponse:h})["finally"](function(){e.totalPendingRequests--}).then(function(b){a.put(f,b.data);return b.data},function(a){if(!g)throw ha("tpload",f,a.status,a.statusText);return d.reject(a)})}e.totalPendingRequests=0;return e}]}function tf(){this.$get=["$rootScope",
+"$browser","$location",function(a,b,d){return{findBindings:function(a,b,d){a=a.getElementsByClassName("ng-binding");var g=[];n(a,function(a){var c=fa.element(a).data("$binding");c&&n(c,function(c){d?(new RegExp("(^|\\s)"+ud(b)+"(\\s|\\||$)")).test(c)&&g.push(a):-1!=c.indexOf(b)&&g.push(a)})});return g},findModels:function(a,b,d){for(var g=["ng-","data-ng-","ng\\:"],h=0;h<g.length;++h){var k=a.querySelectorAll("["+g[h]+"model"+(d?"=":"*=")+'"'+b+'"]');if(k.length)return k}},getLocation:function(){return d.url()},
+setLocation:function(b){b!==d.url()&&(d.url(b),a.$digest())},whenStable:function(a){b.notifyWhenNoOutstandingRequests(a)}}}]}function uf(){this.$get=["$rootScope","$browser","$q","$$q","$exceptionHandler",function(a,b,d,c,e){function f(f,k,l){z(f)||(l=k,k=f,f=x);var m=ra.call(arguments,3),r=y(l)&&!l,t=(r?c:d).defer(),n=t.promise,q;q=b.defer(function(){try{t.resolve(f.apply(null,m))}catch(b){t.reject(b),e(b)}finally{delete g[n.$$timeoutId]}r||a.$apply()},k);n.$$timeoutId=q;g[q]=t;return n}var g={};
+f.cancel=function(a){return a&&a.$$timeoutId in g?(g[a.$$timeoutId].reject("canceled"),delete g[a.$$timeoutId],b.defer.cancel(a.$$timeoutId)):!1};return f}]}function wa(a){Ha&&(Y.setAttribute("href",a),a=Y.href);Y.setAttribute("href",a);return{href:Y.href,protocol:Y.protocol?Y.protocol.replace(/:$/,""):"",host:Y.host,search:Y.search?Y.search.replace(/^\?/,""):"",hash:Y.hash?Y.hash.replace(/^#/,""):"",hostname:Y.hostname,port:Y.port,pathname:"/"===Y.pathname.charAt(0)?Y.pathname:"/"+Y.pathname}}function ed(a){a=
+E(a)?wa(a):a;return a.protocol===wd.protocol&&a.host===wd.host}function vf(){this.$get=na(S)}function xd(a){function b(a){try{return decodeURIComponent(a)}catch(b){return a}}var d=a[0]||{},c={},e="";return function(){var a,g,h,k,l;a=d.cookie||"";if(a!==e)for(e=a,a=e.split("; "),c={},h=0;h<a.length;h++)g=a[h],k=g.indexOf("="),0<k&&(l=b(g.substring(0,k)),q(c[l])&&(c[l]=b(g.substring(k+1))));return c}}function zf(){this.$get=xd}function Jc(a){function b(d,c){if(H(d)){var e={};n(d,function(a,c){e[c]=
+b(c,a)});return e}return a.factory(d+"Filter",c)}this.register=b;this.$get=["$injector",function(a){return function(b){return a.get(b+"Filter")}}];b("currency",yd);b("date",zd);b("filter",bg);b("json",cg);b("limitTo",dg);b("lowercase",eg);b("number",Ad);b("orderBy",Bd);b("uppercase",fg)}function bg(){return function(a,b,d){if(!za(a)){if(null==a)return a;throw G("filter")("notarray",a);}var c;switch(hc(b)){case "function":break;case "boolean":case "null":case "number":case "string":c=!0;case "object":b=
+gg(b,d,c);break;default:return a}return Array.prototype.filter.call(a,b)}}function gg(a,b,d){var c=H(a)&&"$"in a;!0===b?b=ma:z(b)||(b=function(a,b){if(q(a))return!1;if(null===a||null===b)return a===b;if(H(b)||H(a)&&!qc(a))return!1;a=F(""+a);b=F(""+b);return-1!==a.indexOf(b)});return function(e){return c&&!H(e)?Ka(e,a.$,b,!1):Ka(e,a,b,d)}}function Ka(a,b,d,c,e){var f=hc(a),g=hc(b);if("string"===g&&"!"===b.charAt(0))return!Ka(a,b.substring(1),d,c);if(I(a))return a.some(function(a){return Ka(a,b,d,c)});
+switch(f){case "object":var h;if(c){for(h in a)if("$"!==h.charAt(0)&&Ka(a[h],b,d,!0))return!0;return e?!1:Ka(a,b,d,!1)}if("object"===g){for(h in b)if(e=b[h],!z(e)&&!q(e)&&(f="$"===h,!Ka(f?a:a[h],e,d,f,f)))return!1;return!0}return d(a,b);case "function":return!1;default:return d(a,b)}}function hc(a){return null===a?"null":typeof a}function yd(a){var b=a.NUMBER_FORMATS;return function(a,c,e){q(c)&&(c=b.CURRENCY_SYM);q(e)&&(e=b.PATTERNS[1].maxFrac);return null==a?a:Cd(a,b.PATTERNS[1],b.GROUP_SEP,b.DECIMAL_SEP,
+e).replace(/\u00A4/g,c)}}function Ad(a){var b=a.NUMBER_FORMATS;return function(a,c){return null==a?a:Cd(a,b.PATTERNS[0],b.GROUP_SEP,b.DECIMAL_SEP,c)}}function Cd(a,b,d,c,e){if(H(a))return"";var f=0>a;a=Math.abs(a);var g=Infinity===a;if(!g&&!isFinite(a))return"";var h=a+"",k="",l=!1,m=[];g&&(k="\u221e");if(!g&&-1!==h.indexOf("e")){var r=h.match(/([\d\.]+)e(-?)(\d+)/);r&&"-"==r[2]&&r[3]>e+1?a=0:(k=h,l=!0)}if(g||l)0<e&&1>a&&(k=a.toFixed(e),a=parseFloat(k),k=k.replace(ic,c));else{g=(h.split(ic)[1]||"").length;
+q(e)&&(e=Math.min(Math.max(b.minFrac,g),b.maxFrac));a=+(Math.round(+(a.toString()+"e"+e)).toString()+"e"+-e);var g=(""+a).split(ic),h=g[0],g=g[1]||"",r=0,t=b.lgSize,n=b.gSize;if(h.length>=t+n)for(r=h.length-t,l=0;l<r;l++)0===(r-l)%n&&0!==l&&(k+=d),k+=h.charAt(l);for(l=r;l<h.length;l++)0===(h.length-l)%t&&0!==l&&(k+=d),k+=h.charAt(l);for(;g.length<e;)g+="0";e&&"0"!==e&&(k+=c+g.substr(0,e))}0===a&&(f=!1);m.push(f?b.negPre:b.posPre,k,f?b.negSuf:b.posSuf);return m.join("")}function Gb(a,b,d){var c="";
+0>a&&(c="-",a=-a);for(a=""+a;a.length<b;)a="0"+a;d&&(a=a.substr(a.length-b));return c+a}function ca(a,b,d,c){d=d||0;return function(e){e=e["get"+a]();if(0<d||e>-d)e+=d;0===e&&-12==d&&(e=12);return Gb(e,b,c)}}function Hb(a,b){return function(d,c){var e=d["get"+a](),f=sb(b?"SHORT"+a:a);return c[f][e]}}function Dd(a){var b=(new Date(a,0,1)).getDay();return new Date(a,0,(4>=b?5:12)-b)}function Ed(a){return function(b){var d=Dd(b.getFullYear());b=+new Date(b.getFullYear(),b.getMonth(),b.getDate()+(4-b.getDay()))-
++d;b=1+Math.round(b/6048E5);return Gb(b,a)}}function jc(a,b){return 0>=a.getFullYear()?b.ERAS[0]:b.ERAS[1]}function zd(a){function b(a){var b;if(b=a.match(d)){a=new Date(0);var f=0,g=0,h=b[8]?a.setUTCFullYear:a.setFullYear,k=b[8]?a.setUTCHours:a.setHours;b[9]&&(f=ea(b[9]+b[10]),g=ea(b[9]+b[11]));h.call(a,ea(b[1]),ea(b[2])-1,ea(b[3]));f=ea(b[4]||0)-f;g=ea(b[5]||0)-g;h=ea(b[6]||0);b=Math.round(1E3*parseFloat("0."+(b[7]||0)));k.call(a,f,g,h,b)}return a}var d=/^(\d{4})-?(\d\d)-?(\d\d)(?:T(\d\d)(?::?(\d\d)(?::?(\d\d)(?:\.(\d+))?)?)?(Z|([+-])(\d\d):?(\d\d))?)?$/;
+return function(c,d,f){var g="",h=[],k,l;d=d||"mediumDate";d=a.DATETIME_FORMATS[d]||d;E(c)&&(c=hg.test(c)?ea(c):b(c));Q(c)&&(c=new Date(c));if(!da(c)||!isFinite(c.getTime()))return c;for(;d;)(l=ig.exec(d))?(h=cb(h,l,1),d=h.pop()):(h.push(d),d=null);var m=c.getTimezoneOffset();f&&(m=vc(f,c.getTimezoneOffset()),c=Pb(c,f,!0));n(h,function(b){k=jg[b];g+=k?k(c,a.DATETIME_FORMATS,m):b.replace(/(^'|'$)/g,"").replace(/''/g,"'")});return g}}function cg(){return function(a,b){q(b)&&(b=2);return db(a,b)}}function dg(){return function(a,
+b,d){b=Infinity===Math.abs(Number(b))?Number(b):ea(b);if(isNaN(b))return a;Q(a)&&(a=a.toString());if(!I(a)&&!E(a))return a;d=!d||isNaN(d)?0:ea(d);d=0>d?Math.max(0,a.length+d):d;return 0<=b?a.slice(d,d+b):0===d?a.slice(b,a.length):a.slice(Math.max(0,d+b),d)}}function Bd(a){function b(b,d){d=d?-1:1;return b.map(function(b){var c=1,h=Ya;if(z(b))h=b;else if(E(b)){if("+"==b.charAt(0)||"-"==b.charAt(0))c="-"==b.charAt(0)?-1:1,b=b.substring(1);if(""!==b&&(h=a(b),h.constant))var k=h(),h=function(a){return a[k]}}return{get:h,
+descending:c*d}})}function d(a){switch(typeof a){case "number":case "boolean":case "string":return!0;default:return!1}}return function(a,e,f){if(!za(a))return a;I(e)||(e=[e]);0===e.length&&(e=["+"]);var g=b(e,f);g.push({get:function(){return{}},descending:f?-1:1});a=Array.prototype.map.call(a,function(a,b){return{value:a,predicateValues:g.map(function(c){var e=c.get(a);c=typeof e;if(null===e)c="string",e="null";else if("string"===c)e=e.toLowerCase();else if("object"===c)a:{if("function"===typeof e.valueOf&&
+(e=e.valueOf(),d(e)))break a;if(qc(e)&&(e=e.toString(),d(e)))break a;e=b}return{value:e,type:c}})}});a.sort(function(a,b){for(var c=0,d=0,e=g.length;d<e;++d){var c=a.predicateValues[d],f=b.predicateValues[d],n=0;c.type===f.type?c.value!==f.value&&(n=c.value<f.value?-1:1):n=c.type<f.type?-1:1;if(c=n*g[d].descending)break}return c});return a=a.map(function(a){return a.value})}}function La(a){z(a)&&(a={link:a});a.restrict=a.restrict||"AC";return na(a)}function Fd(a,b,d,c,e){var f=this,g=[];f.$error=
+{};f.$$success={};f.$pending=u;f.$name=e(b.name||b.ngForm||"")(d);f.$dirty=!1;f.$pristine=!0;f.$valid=!0;f.$invalid=!1;f.$submitted=!1;f.$$parentForm=Ib;f.$rollbackViewValue=function(){n(g,function(a){a.$rollbackViewValue()})};f.$commitViewValue=function(){n(g,function(a){a.$commitViewValue()})};f.$addControl=function(a){Ra(a.$name,"input");g.push(a);a.$name&&(f[a.$name]=a);a.$$parentForm=f};f.$$renameControl=function(a,b){var c=a.$name;f[c]===a&&delete f[c];f[b]=a;a.$name=b};f.$removeControl=function(a){a.$name&&
+f[a.$name]===a&&delete f[a.$name];n(f.$pending,function(b,c){f.$setValidity(c,null,a)});n(f.$error,function(b,c){f.$setValidity(c,null,a)});n(f.$$success,function(b,c){f.$setValidity(c,null,a)});ab(g,a);a.$$parentForm=Ib};Gd({ctrl:this,$element:a,set:function(a,b,c){var d=a[b];d?-1===d.indexOf(c)&&d.push(c):a[b]=[c]},unset:function(a,b,c){var d=a[b];d&&(ab(d,c),0===d.length&&delete a[b])},$animate:c});f.$setDirty=function(){c.removeClass(a,Wa);c.addClass(a,Jb);f.$dirty=!0;f.$pristine=!1;f.$$parentForm.$setDirty()};
+f.$setPristine=function(){c.setClass(a,Wa,Jb+" ng-submitted");f.$dirty=!1;f.$pristine=!0;f.$submitted=!1;n(g,function(a){a.$setPristine()})};f.$setUntouched=function(){n(g,function(a){a.$setUntouched()})};f.$setSubmitted=function(){c.addClass(a,"ng-submitted");f.$submitted=!0;f.$$parentForm.$setSubmitted()}}function kc(a){a.$formatters.push(function(b){return a.$isEmpty(b)?b:b.toString()})}function jb(a,b,d,c,e,f){var g=F(b[0].type);if(!e.android){var h=!1;b.on("compositionstart",function(a){h=!0});
+b.on("compositionend",function(){h=!1;k()})}var k=function(a){l&&(f.defer.cancel(l),l=null);if(!h){var e=b.val();a=a&&a.type;"password"===g||d.ngTrim&&"false"===d.ngTrim||(e=U(e));(c.$viewValue!==e||""===e&&c.$$hasNativeValidators)&&c.$setViewValue(e,a)}};if(e.hasEvent("input"))b.on("input",k);else{var l,m=function(a,b,c){l||(l=f.defer(function(){l=null;b&&b.value===c||k(a)}))};b.on("keydown",function(a){var b=a.keyCode;91===b||15<b&&19>b||37<=b&&40>=b||m(a,this,this.value)});if(e.hasEvent("paste"))b.on("paste cut",
+m)}b.on("change",k);c.$render=function(){var a=c.$isEmpty(c.$viewValue)?"":c.$viewValue;b.val()!==a&&b.val(a)}}function Kb(a,b){return function(d,c){var e,f;if(da(d))return d;if(E(d)){'"'==d.charAt(0)&&'"'==d.charAt(d.length-1)&&(d=d.substring(1,d.length-1));if(kg.test(d))return new Date(d);a.lastIndex=0;if(e=a.exec(d))return e.shift(),f=c?{yyyy:c.getFullYear(),MM:c.getMonth()+1,dd:c.getDate(),HH:c.getHours(),mm:c.getMinutes(),ss:c.getSeconds(),sss:c.getMilliseconds()/1E3}:{yyyy:1970,MM:1,dd:1,HH:0,
+mm:0,ss:0,sss:0},n(e,function(a,c){c<b.length&&(f[b[c]]=+a)}),new Date(f.yyyy,f.MM-1,f.dd,f.HH,f.mm,f.ss||0,1E3*f.sss||0)}return NaN}}function kb(a,b,d,c){return function(e,f,g,h,k,l,m){function r(a){return a&&!(a.getTime&&a.getTime()!==a.getTime())}function n(a){return y(a)&&!da(a)?d(a)||u:a}Hd(e,f,g,h);jb(e,f,g,h,k,l);var A=h&&h.$options&&h.$options.timezone,v;h.$$parserName=a;h.$parsers.push(function(a){return h.$isEmpty(a)?null:b.test(a)?(a=d(a,v),A&&(a=Pb(a,A)),a):u});h.$formatters.push(function(a){if(a&&
+!da(a))throw lb("datefmt",a);if(r(a))return(v=a)&&A&&(v=Pb(v,A,!0)),m("date")(a,c,A);v=null;return""});if(y(g.min)||g.ngMin){var s;h.$validators.min=function(a){return!r(a)||q(s)||d(a)>=s};g.$observe("min",function(a){s=n(a);h.$validate()})}if(y(g.max)||g.ngMax){var p;h.$validators.max=function(a){return!r(a)||q(p)||d(a)<=p};g.$observe("max",function(a){p=n(a);h.$validate()})}}}function Hd(a,b,d,c){(c.$$hasNativeValidators=H(b[0].validity))&&c.$parsers.push(function(a){var c=b.prop("validity")||{};
+return c.badInput&&!c.typeMismatch?u:a})}function Id(a,b,d,c,e){if(y(c)){a=a(c);if(!a.constant)throw lb("constexpr",d,c);return a(b)}return e}function lc(a,b){a="ngClass"+a;return["$animate",function(d){function c(a,b){var c=[],d=0;a:for(;d<a.length;d++){for(var e=a[d],m=0;m<b.length;m++)if(e==b[m])continue a;c.push(e)}return c}function e(a){var b=[];return I(a)?(n(a,function(a){b=b.concat(e(a))}),b):E(a)?a.split(" "):H(a)?(n(a,function(a,c){a&&(b=b.concat(c.split(" ")))}),b):a}return{restrict:"AC",
+link:function(f,g,h){function k(a,b){var c=g.data("$classCounts")||$(),d=[];n(a,function(a){if(0<b||c[a])c[a]=(c[a]||0)+b,c[a]===+(0<b)&&d.push(a)});g.data("$classCounts",c);return d.join(" ")}function l(a){if(!0===b||f.$index%2===b){var l=e(a||[]);if(!m){var n=k(l,1);h.$addClass(n)}else if(!ma(a,m)){var q=e(m),n=c(l,q),l=c(q,l),n=k(n,1),l=k(l,-1);n&&n.length&&d.addClass(g,n);l&&l.length&&d.removeClass(g,l)}}m=ia(a)}var m;f.$watch(h[a],l,!0);h.$observe("class",function(b){l(f.$eval(h[a]))});"ngClass"!==
+a&&f.$watch("$index",function(c,d){var g=c&1;if(g!==(d&1)){var l=e(f.$eval(h[a]));g===b?(g=k(l,1),h.$addClass(g)):(g=k(l,-1),h.$removeClass(g))}})}}}]}function Gd(a){function b(a,b){b&&!f[a]?(k.addClass(e,a),f[a]=!0):!b&&f[a]&&(k.removeClass(e,a),f[a]=!1)}function d(a,c){a=a?"-"+zc(a,"-"):"";b(mb+a,!0===c);b(Jd+a,!1===c)}var c=a.ctrl,e=a.$element,f={},g=a.set,h=a.unset,k=a.$animate;f[Jd]=!(f[mb]=e.hasClass(mb));c.$setValidity=function(a,e,f){q(e)?(c.$pending||(c.$pending={}),g(c.$pending,a,f)):(c.$pending&&
+h(c.$pending,a,f),Kd(c.$pending)&&(c.$pending=u));$a(e)?e?(h(c.$error,a,f),g(c.$$success,a,f)):(g(c.$error,a,f),h(c.$$success,a,f)):(h(c.$error,a,f),h(c.$$success,a,f));c.$pending?(b(Ld,!0),c.$valid=c.$invalid=u,d("",null)):(b(Ld,!1),c.$valid=Kd(c.$error),c.$invalid=!c.$valid,d("",c.$valid));e=c.$pending&&c.$pending[a]?u:c.$error[a]?!1:c.$$success[a]?!0:null;d(a,e);c.$$parentForm.$setValidity(a,e,c)}}function Kd(a){if(a)for(var b in a)if(a.hasOwnProperty(b))return!1;return!0}var lg=/^\/(.+)\/([a-z]*)$/,
+F=function(a){return E(a)?a.toLowerCase():a},qa=Object.prototype.hasOwnProperty,sb=function(a){return E(a)?a.toUpperCase():a},Ha,B,oa,ra=[].slice,Pf=[].splice,mg=[].push,sa=Object.prototype.toString,rc=Object.getPrototypeOf,Aa=G("ng"),fa=S.angular||(S.angular={}),Sb,nb=0;Ha=X.documentMode;x.$inject=[];Ya.$inject=[];var I=Array.isArray,Vd=/^\[object (?:Uint8|Uint8Clamped|Uint16|Uint32|Int8|Int16|Int32|Float32|Float64)Array\]$/,U=function(a){return E(a)?a.trim():a},ud=function(a){return a.replace(/([-()\[\]{}+?*.$\^|,:#<!\\])/g,
+"\\$1").replace(/\x08/g,"\\x08")},Ba=function(){if(!y(Ba.rules)){var a=X.querySelector("[ng-csp]")||X.querySelector("[data-ng-csp]");if(a){var b=a.getAttribute("ng-csp")||a.getAttribute("data-ng-csp");Ba.rules={noUnsafeEval:!b||-1!==b.indexOf("no-unsafe-eval"),noInlineStyle:!b||-1!==b.indexOf("no-inline-style")}}else{a=Ba;try{new Function(""),b=!1}catch(d){b=!0}a.rules={noUnsafeEval:b,noInlineStyle:!1}}}return Ba.rules},pb=function(){if(y(pb.name_))return pb.name_;var a,b,d=Oa.length,c,e;for(b=0;b<
+d;++b)if(c=Oa[b],a=X.querySelector("["+c.replace(":","\\:")+"jq]")){e=a.getAttribute(c+"jq");break}return pb.name_=e},Oa=["ng-","data-ng-","ng:","x-ng-"],be=/[A-Z]/g,Ac=!1,Rb,Na=3,fe={full:"1.4.8",major:1,minor:4,dot:8,codeName:"ice-manipulation"};N.expando="ng339";var gb=N.cache={},Ff=1;N._data=function(a){return this.cache[a[this.expando]]||{}};var Af=/([\:\-\_]+(.))/g,Bf=/^moz([A-Z])/,xb={mouseleave:"mouseout",mouseenter:"mouseover"},Ub=G("jqLite"),Ef=/^<([\w-]+)\s*\/?>(?:<\/\1>|)$/,Tb=/<|&#?\w+;/,
+Cf=/<([\w:-]+)/,Df=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:-]+)[^>]*)\/>/gi,ka={option:[1,'<select multiple="multiple">',"</select>"],thead:[1,"<table>","</table>"],col:[2,"<table><colgroup>","</colgroup></table>"],tr:[2,"<table><tbody>","</tbody></table>"],td:[3,"<table><tbody><tr>","</tr></tbody></table>"],_default:[0,"",""]};ka.optgroup=ka.option;ka.tbody=ka.tfoot=ka.colgroup=ka.caption=ka.thead;ka.th=ka.td;var Kf=Node.prototype.contains||function(a){return!!(this.compareDocumentPosition(a)&
+16)},Pa=N.prototype={ready:function(a){function b(){d||(d=!0,a())}var d=!1;"complete"===X.readyState?setTimeout(b):(this.on("DOMContentLoaded",b),N(S).on("load",b))},toString:function(){var a=[];n(this,function(b){a.push(""+b)});return"["+a.join(", ")+"]"},eq:function(a){return 0<=a?B(this[a]):B(this[this.length+a])},length:0,push:mg,sort:[].sort,splice:[].splice},Cb={};n("multiple selected checked disabled readOnly required open".split(" "),function(a){Cb[F(a)]=a});var Rc={};n("input select option textarea button form details".split(" "),
+function(a){Rc[a]=!0});var Zc={ngMinlength:"minlength",ngMaxlength:"maxlength",ngMin:"min",ngMax:"max",ngPattern:"pattern"};n({data:Wb,removeData:vb,hasData:function(a){for(var b in gb[a.ng339])return!0;return!1}},function(a,b){N[b]=a});n({data:Wb,inheritedData:Bb,scope:function(a){return B.data(a,"$scope")||Bb(a.parentNode||a,["$isolateScope","$scope"])},isolateScope:function(a){return B.data(a,"$isolateScope")||B.data(a,"$isolateScopeNoTemplate")},controller:Oc,injector:function(a){return Bb(a,
+"$injector")},removeAttr:function(a,b){a.removeAttribute(b)},hasClass:yb,css:function(a,b,d){b=fb(b);if(y(d))a.style[b]=d;else return a.style[b]},attr:function(a,b,d){var c=a.nodeType;if(c!==Na&&2!==c&&8!==c)if(c=F(b),Cb[c])if(y(d))d?(a[b]=!0,a.setAttribute(b,c)):(a[b]=!1,a.removeAttribute(c));else return a[b]||(a.attributes.getNamedItem(b)||x).specified?c:u;else if(y(d))a.setAttribute(b,d);else if(a.getAttribute)return a=a.getAttribute(b,2),null===a?u:a},prop:function(a,b,d){if(y(d))a[b]=d;else return a[b]},
+text:function(){function a(a,d){if(q(d)){var c=a.nodeType;return 1===c||c===Na?a.textContent:""}a.textContent=d}a.$dv="";return a}(),val:function(a,b){if(q(b)){if(a.multiple&&"select"===ta(a)){var d=[];n(a.options,function(a){a.selected&&d.push(a.value||a.text)});return 0===d.length?null:d}return a.value}a.value=b},html:function(a,b){if(q(b))return a.innerHTML;ub(a,!0);a.innerHTML=b},empty:Pc},function(a,b){N.prototype[b]=function(b,c){var e,f,g=this.length;if(a!==Pc&&q(2==a.length&&a!==yb&&a!==Oc?
+b:c)){if(H(b)){for(e=0;e<g;e++)if(a===Wb)a(this[e],b);else for(f in b)a(this[e],f,b[f]);return this}e=a.$dv;g=q(e)?Math.min(g,1):g;for(f=0;f<g;f++){var h=a(this[f],b,c);e=e?e+h:h}return e}for(e=0;e<g;e++)a(this[e],b,c);return this}});n({removeData:vb,on:function(a,b,d,c){if(y(c))throw Ub("onargs");if(Kc(a)){c=wb(a,!0);var e=c.events,f=c.handle;f||(f=c.handle=Hf(a,e));c=0<=b.indexOf(" ")?b.split(" "):[b];for(var g=c.length,h=function(b,c,g){var h=e[b];h||(h=e[b]=[],h.specialHandlerWrapper=c,"$destroy"===
+b||g||a.addEventListener(b,f,!1));h.push(d)};g--;)b=c[g],xb[b]?(h(xb[b],Jf),h(b,u,!0)):h(b)}},off:Nc,one:function(a,b,d){a=B(a);a.on(b,function e(){a.off(b,d);a.off(b,e)});a.on(b,d)},replaceWith:function(a,b){var d,c=a.parentNode;ub(a);n(new N(b),function(b){d?c.insertBefore(b,d.nextSibling):c.replaceChild(b,a);d=b})},children:function(a){var b=[];n(a.childNodes,function(a){1===a.nodeType&&b.push(a)});return b},contents:function(a){return a.contentDocument||a.childNodes||[]},append:function(a,b){var d=
+a.nodeType;if(1===d||11===d){b=new N(b);for(var d=0,c=b.length;d<c;d++)a.appendChild(b[d])}},prepend:function(a,b){if(1===a.nodeType){var d=a.firstChild;n(new N(b),function(b){a.insertBefore(b,d)})}},wrap:function(a,b){b=B(b).eq(0).clone()[0];var d=a.parentNode;d&&d.replaceChild(b,a);b.appendChild(a)},remove:Xb,detach:function(a){Xb(a,!0)},after:function(a,b){var d=a,c=a.parentNode;b=new N(b);for(var e=0,f=b.length;e<f;e++){var g=b[e];c.insertBefore(g,d.nextSibling);d=g}},addClass:Ab,removeClass:zb,
+toggleClass:function(a,b,d){b&&n(b.split(" "),function(b){var e=d;q(e)&&(e=!yb(a,b));(e?Ab:zb)(a,b)})},parent:function(a){return(a=a.parentNode)&&11!==a.nodeType?a:null},next:function(a){return a.nextElementSibling},find:function(a,b){return a.getElementsByTagName?a.getElementsByTagName(b):[]},clone:Vb,triggerHandler:function(a,b,d){var c,e,f=b.type||b,g=wb(a);if(g=(g=g&&g.events)&&g[f])c={preventDefault:function(){this.defaultPrevented=!0},isDefaultPrevented:function(){return!0===this.defaultPrevented},
+stopImmediatePropagation:function(){this.immediatePropagationStopped=!0},isImmediatePropagationStopped:function(){return!0===this.immediatePropagationStopped},stopPropagation:x,type:f,target:a},b.type&&(c=M(c,b)),b=ia(g),e=d?[c].concat(d):[c],n(b,function(b){c.isImmediatePropagationStopped()||b.apply(a,e)})}},function(a,b){N.prototype[b]=function(b,c,e){for(var f,g=0,h=this.length;g<h;g++)q(f)?(f=a(this[g],b,c,e),y(f)&&(f=B(f))):Mc(f,a(this[g],b,c,e));return y(f)?f:this};N.prototype.bind=N.prototype.on;
+N.prototype.unbind=N.prototype.off});Sa.prototype={put:function(a,b){this[Ca(a,this.nextUid)]=b},get:function(a){return this[Ca(a,this.nextUid)]},remove:function(a){var b=this[a=Ca(a,this.nextUid)];delete this[a];return b}};var yf=[function(){this.$get=[function(){return Sa}]}],Tc=/^[^\(]*\(\s*([^\)]*)\)/m,ng=/,/,og=/^\s*(_?)(\S+?)\1\s*$/,Sc=/((\/\/.*$)|(\/\*[\s\S]*?\*\/))/mg,Da=G("$injector");eb.$$annotate=function(a,b,d){var c;if("function"===typeof a){if(!(c=a.$inject)){c=[];if(a.length){if(b)throw E(d)&&
+d||(d=a.name||Lf(a)),Da("strictdi",d);b=a.toString().replace(Sc,"");b=b.match(Tc);n(b[1].split(ng),function(a){a.replace(og,function(a,b,d){c.push(d)})})}a.$inject=c}}else I(a)?(b=a.length-1,Qa(a[b],"fn"),c=a.slice(0,b)):Qa(a,"fn",!0);return c};var Md=G("$animate"),Ue=function(){this.$get=["$q","$$rAF",function(a,b){function d(){}d.all=x;d.chain=x;d.prototype={end:x,cancel:x,resume:x,pause:x,complete:x,then:function(c,d){return a(function(a){b(function(){a()})}).then(c,d)}};return d}]},Te=function(){var a=
+new Sa,b=[];this.$get=["$$AnimateRunner","$rootScope",function(d,c){function e(a,b,c){var d=!1;b&&(b=E(b)?b.split(" "):I(b)?b:[],n(b,function(b){b&&(d=!0,a[b]=c)}));return d}function f(){n(b,function(b){var c=a.get(b);if(c){var d=Mf(b.attr("class")),e="",f="";n(c,function(a,b){a!==!!d[b]&&(a?e+=(e.length?" ":"")+b:f+=(f.length?" ":"")+b)});n(b,function(a){e&&Ab(a,e);f&&zb(a,f)});a.remove(b)}});b.length=0}return{enabled:x,on:x,off:x,pin:x,push:function(g,h,k,l){l&&l();k=k||{};k.from&&g.css(k.from);
+k.to&&g.css(k.to);if(k.addClass||k.removeClass)if(h=k.addClass,l=k.removeClass,k=a.get(g)||{},h=e(k,h,!0),l=e(k,l,!1),h||l)a.put(g,k),b.push(g),1===b.length&&c.$$postDigest(f);return new d}}}]},Re=["$provide",function(a){var b=this;this.$$registeredAnimations=Object.create(null);this.register=function(d,c){if(d&&"."!==d.charAt(0))throw Md("notcsel",d);var e=d+"-animation";b.$$registeredAnimations[d.substr(1)]=e;a.factory(e,c)};this.classNameFilter=function(a){if(1===arguments.length&&(this.$$classNameFilter=
+a instanceof RegExp?a:null)&&/(\s+|\/)ng-animate(\s+|\/)/.test(this.$$classNameFilter.toString()))throw Md("nongcls","ng-animate");return this.$$classNameFilter};this.$get=["$$animateQueue",function(a){function b(a,c,d){if(d){var h;a:{for(h=0;h<d.length;h++){var k=d[h];if(1===k.nodeType){h=k;break a}}h=void 0}!h||h.parentNode||h.previousElementSibling||(d=null)}d?d.after(a):c.prepend(a)}return{on:a.on,off:a.off,pin:a.pin,enabled:a.enabled,cancel:function(a){a.end&&a.end()},enter:function(e,f,g,h){f=
+f&&B(f);g=g&&B(g);f=f||g.parent();b(e,f,g);return a.push(e,"enter",Ea(h))},move:function(e,f,g,h){f=f&&B(f);g=g&&B(g);f=f||g.parent();b(e,f,g);return a.push(e,"move",Ea(h))},leave:function(b,c){return a.push(b,"leave",Ea(c),function(){b.remove()})},addClass:function(b,c,g){g=Ea(g);g.addClass=hb(g.addclass,c);return a.push(b,"addClass",g)},removeClass:function(b,c,g){g=Ea(g);g.removeClass=hb(g.removeClass,c);return a.push(b,"removeClass",g)},setClass:function(b,c,g,h){h=Ea(h);h.addClass=hb(h.addClass,
+c);h.removeClass=hb(h.removeClass,g);return a.push(b,"setClass",h)},animate:function(b,c,g,h,k){k=Ea(k);k.from=k.from?M(k.from,c):c;k.to=k.to?M(k.to,g):g;k.tempClasses=hb(k.tempClasses,h||"ng-inline-animate");return a.push(b,"animate",k)}}}]}],Se=function(){this.$get=["$$rAF","$q",function(a,b){var d=function(){};d.prototype={done:function(a){this.defer&&this.defer[!0===a?"reject":"resolve"]()},end:function(){this.done()},cancel:function(){this.done(!0)},getPromise:function(){this.defer||(this.defer=
+b.defer());return this.defer.promise},then:function(a,b){return this.getPromise().then(a,b)},"catch":function(a){return this.getPromise()["catch"](a)},"finally":function(a){return this.getPromise()["finally"](a)}};return function(b,e){function f(){a(function(){e.addClass&&(b.addClass(e.addClass),e.addClass=null);e.removeClass&&(b.removeClass(e.removeClass),e.removeClass=null);e.to&&(b.css(e.to),e.to=null);g||h.done();g=!0});return h}e.cleanupStyles&&(e.from=e.to=null);e.from&&(b.css(e.from),e.from=
+null);var g,h=new d;return{start:f,end:f}}}]},ha=G("$compile");Cc.$inject=["$provide","$$sanitizeUriProvider"];var Vc=/^((?:x|data)[\:\-_])/i,Qf=G("$controller"),Uc=/^(\S+)(\s+as\s+(\w+))?$/,$e=function(){this.$get=["$document",function(a){return function(b){b?!b.nodeType&&b instanceof B&&(b=b[0]):b=a[0].body;return b.offsetWidth+1}}]},$c="application/json",ac={"Content-Type":$c+";charset=utf-8"},Sf=/^\[|^\{(?!\{)/,Tf={"[":/]$/,"{":/}$/},Rf=/^\)\]\}',?\n/,pg=G("$http"),dd=function(a){return function(){throw pg("legacy",
+a);}},Ja=fa.$interpolateMinErr=G("$interpolate");Ja.throwNoconcat=function(a){throw Ja("noconcat",a);};Ja.interr=function(a,b){return Ja("interr",a,b.toString())};var qg=/^([^\?#]*)(\?([^#]*))?(#(.*))?$/,Vf={http:80,https:443,ftp:21},Db=G("$location"),rg={$$html5:!1,$$replace:!1,absUrl:Eb("$$absUrl"),url:function(a){if(q(a))return this.$$url;var b=qg.exec(a);(b[1]||""===a)&&this.path(decodeURIComponent(b[1]));(b[2]||b[1]||""===a)&&this.search(b[3]||"");this.hash(b[5]||"");return this},protocol:Eb("$$protocol"),
+host:Eb("$$host"),port:Eb("$$port"),path:id("$$path",function(a){a=null!==a?a.toString():"";return"/"==a.charAt(0)?a:"/"+a}),search:function(a,b){switch(arguments.length){case 0:return this.$$search;case 1:if(E(a)||Q(a))a=a.toString(),this.$$search=xc(a);else if(H(a))a=bb(a,{}),n(a,function(b,c){null==b&&delete a[c]}),this.$$search=a;else throw Db("isrcharg");break;default:q(b)||null===b?delete this.$$search[a]:this.$$search[a]=b}this.$$compose();return this},hash:id("$$hash",function(a){return null!==
+a?a.toString():""}),replace:function(){this.$$replace=!0;return this}};n([hd,dc,cc],function(a){a.prototype=Object.create(rg);a.prototype.state=function(b){if(!arguments.length)return this.$$state;if(a!==cc||!this.$$html5)throw Db("nostate");this.$$state=q(b)?null:b;return this}});var ba=G("$parse"),Wf=Function.prototype.call,Xf=Function.prototype.apply,Yf=Function.prototype.bind,Lb=$();n("+ - * / % === !== == != < > <= >= && || ! = |".split(" "),function(a){Lb[a]=!0});var sg={n:"\n",f:"\f",r:"\r",
+t:"\t",v:"\v","'":"'",'"':'"'},fc=function(a){this.options=a};fc.prototype={constructor:fc,lex:function(a){this.text=a;this.index=0;for(this.tokens=[];this.index<this.text.length;)if(a=this.text.charAt(this.index),'"'===a||"'"===a)this.readString(a);else if(this.isNumber(a)||"."===a&&this.isNumber(this.peek()))this.readNumber();else if(this.isIdent(a))this.readIdent();else if(this.is(a,"(){}[].,;:?"))this.tokens.push({index:this.index,text:a}),this.index++;else if(this.isWhitespace(a))this.index++;
+else{var b=a+this.peek(),d=b+this.peek(2),c=Lb[b],e=Lb[d];Lb[a]||c||e?(a=e?d:c?b:a,this.tokens.push({index:this.index,text:a,operator:!0}),this.index+=a.length):this.throwError("Unexpected next character ",this.index,this.index+1)}return this.tokens},is:function(a,b){return-1!==b.indexOf(a)},peek:function(a){a=a||1;return this.index+a<this.text.length?this.text.charAt(this.index+a):!1},isNumber:function(a){return"0"<=a&&"9">=a&&"string"===typeof a},isWhitespace:function(a){return" "===a||"\r"===a||
+"\t"===a||"\n"===a||"\v"===a||"\u00a0"===a},isIdent:function(a){return"a"<=a&&"z">=a||"A"<=a&&"Z">=a||"_"===a||"$"===a},isExpOperator:function(a){return"-"===a||"+"===a||this.isNumber(a)},throwError:function(a,b,d){d=d||this.index;b=y(b)?"s "+b+"-"+this.index+" ["+this.text.substring(b,d)+"]":" "+d;throw ba("lexerr",a,b,this.text);},readNumber:function(){for(var a="",b=this.index;this.index<this.text.length;){var d=F(this.text.charAt(this.index));if("."==d||this.isNumber(d))a+=d;else{var c=this.peek();
+if("e"==d&&this.isExpOperator(c))a+=d;else if(this.isExpOperator(d)&&c&&this.isNumber(c)&&"e"==a.charAt(a.length-1))a+=d;else if(!this.isExpOperator(d)||c&&this.isNumber(c)||"e"!=a.charAt(a.length-1))break;else this.throwError("Invalid exponent")}this.index++}this.tokens.push({index:b,text:a,constant:!0,value:Number(a)})},readIdent:function(){for(var a=this.index;this.index<this.text.length;){var b=this.text.charAt(this.index);if(!this.isIdent(b)&&!this.isNumber(b))break;this.index++}this.tokens.push({index:a,
+text:this.text.slice(a,this.index),identifier:!0})},readString:function(a){var b=this.index;this.index++;for(var d="",c=a,e=!1;this.index<this.text.length;){var f=this.text.charAt(this.index),c=c+f;if(e)"u"===f?(e=this.text.substring(this.index+1,this.index+5),e.match(/[\da-f]{4}/i)||this.throwError("Invalid unicode escape [\\u"+e+"]"),this.index+=4,d+=String.fromCharCode(parseInt(e,16))):d+=sg[f]||f,e=!1;else if("\\"===f)e=!0;else{if(f===a){this.index++;this.tokens.push({index:b,text:c,constant:!0,
+value:d});return}d+=f}this.index++}this.throwError("Unterminated quote",b)}};var s=function(a,b){this.lexer=a;this.options=b};s.Program="Program";s.ExpressionStatement="ExpressionStatement";s.AssignmentExpression="AssignmentExpression";s.ConditionalExpression="ConditionalExpression";s.LogicalExpression="LogicalExpression";s.BinaryExpression="BinaryExpression";s.UnaryExpression="UnaryExpression";s.CallExpression="CallExpression";s.MemberExpression="MemberExpression";s.Identifier="Identifier";s.Literal=
+"Literal";s.ArrayExpression="ArrayExpression";s.Property="Property";s.ObjectExpression="ObjectExpression";s.ThisExpression="ThisExpression";s.NGValueParameter="NGValueParameter";s.prototype={ast:function(a){this.text=a;this.tokens=this.lexer.lex(a);a=this.program();0!==this.tokens.length&&this.throwError("is an unexpected token",this.tokens[0]);return a},program:function(){for(var a=[];;)if(0<this.tokens.length&&!this.peek("}",")",";","]")&&a.push(this.expressionStatement()),!this.expect(";"))return{type:s.Program,
+body:a}},expressionStatement:function(){return{type:s.ExpressionStatement,expression:this.filterChain()}},filterChain:function(){for(var a=this.expression();this.expect("|");)a=this.filter(a);return a},expression:function(){return this.assignment()},assignment:function(){var a=this.ternary();this.expect("=")&&(a={type:s.AssignmentExpression,left:a,right:this.assignment(),operator:"="});return a},ternary:function(){var a=this.logicalOR(),b,d;return this.expect("?")&&(b=this.expression(),this.consume(":"))?
+(d=this.expression(),{type:s.ConditionalExpression,test:a,alternate:b,consequent:d}):a},logicalOR:function(){for(var a=this.logicalAND();this.expect("||");)a={type:s.LogicalExpression,operator:"||",left:a,right:this.logicalAND()};return a},logicalAND:function(){for(var a=this.equality();this.expect("&&");)a={type:s.LogicalExpression,operator:"&&",left:a,right:this.equality()};return a},equality:function(){for(var a=this.relational(),b;b=this.expect("==","!=","===","!==");)a={type:s.BinaryExpression,
+operator:b.text,left:a,right:this.relational()};return a},relational:function(){for(var a=this.additive(),b;b=this.expect("<",">","<=",">=");)a={type:s.BinaryExpression,operator:b.text,left:a,right:this.additive()};return a},additive:function(){for(var a=this.multiplicative(),b;b=this.expect("+","-");)a={type:s.BinaryExpression,operator:b.text,left:a,right:this.multiplicative()};return a},multiplicative:function(){for(var a=this.unary(),b;b=this.expect("*","/","%");)a={type:s.BinaryExpression,operator:b.text,
+left:a,right:this.unary()};return a},unary:function(){var a;return(a=this.expect("+","-","!"))?{type:s.UnaryExpression,operator:a.text,prefix:!0,argument:this.unary()}:this.primary()},primary:function(){var a;this.expect("(")?(a=this.filterChain(),this.consume(")")):this.expect("[")?a=this.arrayDeclaration():this.expect("{")?a=this.object():this.constants.hasOwnProperty(this.peek().text)?a=bb(this.constants[this.consume().text]):this.peek().identifier?a=this.identifier():this.peek().constant?a=this.constant():
+this.throwError("not a primary expression",this.peek());for(var b;b=this.expect("(","[",".");)"("===b.text?(a={type:s.CallExpression,callee:a,arguments:this.parseArguments()},this.consume(")")):"["===b.text?(a={type:s.MemberExpression,object:a,property:this.expression(),computed:!0},this.consume("]")):"."===b.text?a={type:s.MemberExpression,object:a,property:this.identifier(),computed:!1}:this.throwError("IMPOSSIBLE");return a},filter:function(a){a=[a];for(var b={type:s.CallExpression,callee:this.identifier(),
+arguments:a,filter:!0};this.expect(":");)a.push(this.expression());return b},parseArguments:function(){var a=[];if(")"!==this.peekToken().text){do a.push(this.expression());while(this.expect(","))}return a},identifier:function(){var a=this.consume();a.identifier||this.throwError("is not a valid identifier",a);return{type:s.Identifier,name:a.text}},constant:function(){return{type:s.Literal,value:this.consume().value}},arrayDeclaration:function(){var a=[];if("]"!==this.peekToken().text){do{if(this.peek("]"))break;
+a.push(this.expression())}while(this.expect(","))}this.consume("]");return{type:s.ArrayExpression,elements:a}},object:function(){var a=[],b;if("}"!==this.peekToken().text){do{if(this.peek("}"))break;b={type:s.Property,kind:"init"};this.peek().constant?b.key=this.constant():this.peek().identifier?b.key=this.identifier():this.throwError("invalid key",this.peek());this.consume(":");b.value=this.expression();a.push(b)}while(this.expect(","))}this.consume("}");return{type:s.ObjectExpression,properties:a}},
+throwError:function(a,b){throw ba("syntax",b.text,a,b.index+1,this.text,this.text.substring(b.index));},consume:function(a){if(0===this.tokens.length)throw ba("ueoe",this.text);var b=this.expect(a);b||this.throwError("is unexpected, expecting ["+a+"]",this.peek());return b},peekToken:function(){if(0===this.tokens.length)throw ba("ueoe",this.text);return this.tokens[0]},peek:function(a,b,d,c){return this.peekAhead(0,a,b,d,c)},peekAhead:function(a,b,d,c,e){if(this.tokens.length>a){a=this.tokens[a];
+var f=a.text;if(f===b||f===d||f===c||f===e||!(b||d||c||e))return a}return!1},expect:function(a,b,d,c){return(a=this.peek(a,b,d,c))?(this.tokens.shift(),a):!1},constants:{"true":{type:s.Literal,value:!0},"false":{type:s.Literal,value:!1},"null":{type:s.Literal,value:null},undefined:{type:s.Literal,value:u},"this":{type:s.ThisExpression}}};rd.prototype={compile:function(a,b){var d=this,c=this.astBuilder.ast(a);this.state={nextId:0,filters:{},expensiveChecks:b,fn:{vars:[],body:[],own:{}},assign:{vars:[],
+body:[],own:{}},inputs:[]};W(c,d.$filter);var e="",f;this.stage="assign";if(f=pd(c))this.state.computing="assign",e=this.nextId(),this.recurse(f,e),this.return_(e),e="fn.assign="+this.generateFunction("assign","s,v,l");f=nd(c.body);d.stage="inputs";n(f,function(a,b){var c="fn"+b;d.state[c]={vars:[],body:[],own:{}};d.state.computing=c;var e=d.nextId();d.recurse(a,e);d.return_(e);d.state.inputs.push(c);a.watchId=b});this.state.computing="fn";this.stage="main";this.recurse(c);e='"'+this.USE+" "+this.STRICT+
+'";\n'+this.filterPrefix()+"var fn="+this.generateFunction("fn","s,l,a,i")+e+this.watchFns()+"return fn;";e=(new Function("$filter","ensureSafeMemberName","ensureSafeObject","ensureSafeFunction","getStringValue","ensureSafeAssignContext","ifDefined","plus","text",e))(this.$filter,Va,xa,kd,jd,ld,Zf,md,a);this.state=this.stage=u;e.literal=qd(c);e.constant=c.constant;return e},USE:"use",STRICT:"strict",watchFns:function(){var a=[],b=this.state.inputs,d=this;n(b,function(b){a.push("var "+b+"="+d.generateFunction(b,
+"s"))});b.length&&a.push("fn.inputs=["+b.join(",")+"];");return a.join("")},generateFunction:function(a,b){return"function("+b+"){"+this.varsPrefix(a)+this.body(a)+"};"},filterPrefix:function(){var a=[],b=this;n(this.state.filters,function(d,c){a.push(d+"=$filter("+b.escape(c)+")")});return a.length?"var "+a.join(",")+";":""},varsPrefix:function(a){return this.state[a].vars.length?"var "+this.state[a].vars.join(",")+";":""},body:function(a){return this.state[a].body.join("")},recurse:function(a,b,
+d,c,e,f){var g,h,k=this,l,m;c=c||x;if(!f&&y(a.watchId))b=b||this.nextId(),this.if_("i",this.lazyAssign(b,this.computedMember("i",a.watchId)),this.lazyRecurse(a,b,d,c,e,!0));else switch(a.type){case s.Program:n(a.body,function(b,c){k.recurse(b.expression,u,u,function(a){h=a});c!==a.body.length-1?k.current().body.push(h,";"):k.return_(h)});break;case s.Literal:m=this.escape(a.value);this.assign(b,m);c(m);break;case s.UnaryExpression:this.recurse(a.argument,u,u,function(a){h=a});m=a.operator+"("+this.ifDefined(h,
+0)+")";this.assign(b,m);c(m);break;case s.BinaryExpression:this.recurse(a.left,u,u,function(a){g=a});this.recurse(a.right,u,u,function(a){h=a});m="+"===a.operator?this.plus(g,h):"-"===a.operator?this.ifDefined(g,0)+a.operator+this.ifDefined(h,0):"("+g+")"+a.operator+"("+h+")";this.assign(b,m);c(m);break;case s.LogicalExpression:b=b||this.nextId();k.recurse(a.left,b);k.if_("&&"===a.operator?b:k.not(b),k.lazyRecurse(a.right,b));c(b);break;case s.ConditionalExpression:b=b||this.nextId();k.recurse(a.test,
+b);k.if_(b,k.lazyRecurse(a.alternate,b),k.lazyRecurse(a.consequent,b));c(b);break;case s.Identifier:b=b||this.nextId();d&&(d.context="inputs"===k.stage?"s":this.assign(this.nextId(),this.getHasOwnProperty("l",a.name)+"?l:s"),d.computed=!1,d.name=a.name);Va(a.name);k.if_("inputs"===k.stage||k.not(k.getHasOwnProperty("l",a.name)),function(){k.if_("inputs"===k.stage||"s",function(){e&&1!==e&&k.if_(k.not(k.nonComputedMember("s",a.name)),k.lazyAssign(k.nonComputedMember("s",a.name),"{}"));k.assign(b,k.nonComputedMember("s",
+a.name))})},b&&k.lazyAssign(b,k.nonComputedMember("l",a.name)));(k.state.expensiveChecks||Fb(a.name))&&k.addEnsureSafeObject(b);c(b);break;case s.MemberExpression:g=d&&(d.context=this.nextId())||this.nextId();b=b||this.nextId();k.recurse(a.object,g,u,function(){k.if_(k.notNull(g),function(){if(a.computed)h=k.nextId(),k.recurse(a.property,h),k.getStringValue(h),k.addEnsureSafeMemberName(h),e&&1!==e&&k.if_(k.not(k.computedMember(g,h)),k.lazyAssign(k.computedMember(g,h),"{}")),m=k.ensureSafeObject(k.computedMember(g,
+h)),k.assign(b,m),d&&(d.computed=!0,d.name=h);else{Va(a.property.name);e&&1!==e&&k.if_(k.not(k.nonComputedMember(g,a.property.name)),k.lazyAssign(k.nonComputedMember(g,a.property.name),"{}"));m=k.nonComputedMember(g,a.property.name);if(k.state.expensiveChecks||Fb(a.property.name))m=k.ensureSafeObject(m);k.assign(b,m);d&&(d.computed=!1,d.name=a.property.name)}},function(){k.assign(b,"undefined")});c(b)},!!e);break;case s.CallExpression:b=b||this.nextId();a.filter?(h=k.filter(a.callee.name),l=[],n(a.arguments,
+function(a){var b=k.nextId();k.recurse(a,b);l.push(b)}),m=h+"("+l.join(",")+")",k.assign(b,m),c(b)):(h=k.nextId(),g={},l=[],k.recurse(a.callee,h,g,function(){k.if_(k.notNull(h),function(){k.addEnsureSafeFunction(h);n(a.arguments,function(a){k.recurse(a,k.nextId(),u,function(a){l.push(k.ensureSafeObject(a))})});g.name?(k.state.expensiveChecks||k.addEnsureSafeObject(g.context),m=k.member(g.context,g.name,g.computed)+"("+l.join(",")+")"):m=h+"("+l.join(",")+")";m=k.ensureSafeObject(m);k.assign(b,m)},
+function(){k.assign(b,"undefined")});c(b)}));break;case s.AssignmentExpression:h=this.nextId();g={};if(!od(a.left))throw ba("lval");this.recurse(a.left,u,g,function(){k.if_(k.notNull(g.context),function(){k.recurse(a.right,h);k.addEnsureSafeObject(k.member(g.context,g.name,g.computed));k.addEnsureSafeAssignContext(g.context);m=k.member(g.context,g.name,g.computed)+a.operator+h;k.assign(b,m);c(b||m)})},1);break;case s.ArrayExpression:l=[];n(a.elements,function(a){k.recurse(a,k.nextId(),u,function(a){l.push(a)})});
+m="["+l.join(",")+"]";this.assign(b,m);c(m);break;case s.ObjectExpression:l=[];n(a.properties,function(a){k.recurse(a.value,k.nextId(),u,function(b){l.push(k.escape(a.key.type===s.Identifier?a.key.name:""+a.key.value)+":"+b)})});m="{"+l.join(",")+"}";this.assign(b,m);c(m);break;case s.ThisExpression:this.assign(b,"s");c("s");break;case s.NGValueParameter:this.assign(b,"v"),c("v")}},getHasOwnProperty:function(a,b){var d=a+"."+b,c=this.current().own;c.hasOwnProperty(d)||(c[d]=this.nextId(!1,a+"&&("+
+this.escape(b)+" in "+a+")"));return c[d]},assign:function(a,b){if(a)return this.current().body.push(a,"=",b,";"),a},filter:function(a){this.state.filters.hasOwnProperty(a)||(this.state.filters[a]=this.nextId(!0));return this.state.filters[a]},ifDefined:function(a,b){return"ifDefined("+a+","+this.escape(b)+")"},plus:function(a,b){return"plus("+a+","+b+")"},return_:function(a){this.current().body.push("return ",a,";")},if_:function(a,b,d){if(!0===a)b();else{var c=this.current().body;c.push("if(",a,
+"){");b();c.push("}");d&&(c.push("else{"),d(),c.push("}"))}},not:function(a){return"!("+a+")"},notNull:function(a){return a+"!=null"},nonComputedMember:function(a,b){return a+"."+b},computedMember:function(a,b){return a+"["+b+"]"},member:function(a,b,d){return d?this.computedMember(a,b):this.nonComputedMember(a,b)},addEnsureSafeObject:function(a){this.current().body.push(this.ensureSafeObject(a),";")},addEnsureSafeMemberName:function(a){this.current().body.push(this.ensureSafeMemberName(a),";")},
+addEnsureSafeFunction:function(a){this.current().body.push(this.ensureSafeFunction(a),";")},addEnsureSafeAssignContext:function(a){this.current().body.push(this.ensureSafeAssignContext(a),";")},ensureSafeObject:function(a){return"ensureSafeObject("+a+",text)"},ensureSafeMemberName:function(a){return"ensureSafeMemberName("+a+",text)"},ensureSafeFunction:function(a){return"ensureSafeFunction("+a+",text)"},getStringValue:function(a){this.assign(a,"getStringValue("+a+",text)")},ensureSafeAssignContext:function(a){return"ensureSafeAssignContext("+
+a+",text)"},lazyRecurse:function(a,b,d,c,e,f){var g=this;return function(){g.recurse(a,b,d,c,e,f)}},lazyAssign:function(a,b){var d=this;return function(){d.assign(a,b)}},stringEscapeRegex:/[^ a-zA-Z0-9]/g,stringEscapeFn:function(a){return"\\u"+("0000"+a.charCodeAt(0).toString(16)).slice(-4)},escape:function(a){if(E(a))return"'"+a.replace(this.stringEscapeRegex,this.stringEscapeFn)+"'";if(Q(a))return a.toString();if(!0===a)return"true";if(!1===a)return"false";if(null===a)return"null";if("undefined"===
+typeof a)return"undefined";throw ba("esc");},nextId:function(a,b){var d="v"+this.state.nextId++;a||this.current().vars.push(d+(b?"="+b:""));return d},current:function(){return this.state[this.state.computing]}};sd.prototype={compile:function(a,b){var d=this,c=this.astBuilder.ast(a);this.expression=a;this.expensiveChecks=b;W(c,d.$filter);var e,f;if(e=pd(c))f=this.recurse(e);e=nd(c.body);var g;e&&(g=[],n(e,function(a,b){var c=d.recurse(a);a.input=c;g.push(c);a.watchId=b}));var h=[];n(c.body,function(a){h.push(d.recurse(a.expression))});
+e=0===c.body.length?function(){}:1===c.body.length?h[0]:function(a,b){var c;n(h,function(d){c=d(a,b)});return c};f&&(e.assign=function(a,b,c){return f(a,c,b)});g&&(e.inputs=g);e.literal=qd(c);e.constant=c.constant;return e},recurse:function(a,b,d){var c,e,f=this,g;if(a.input)return this.inputs(a.input,a.watchId);switch(a.type){case s.Literal:return this.value(a.value,b);case s.UnaryExpression:return e=this.recurse(a.argument),this["unary"+a.operator](e,b);case s.BinaryExpression:return c=this.recurse(a.left),
+e=this.recurse(a.right),this["binary"+a.operator](c,e,b);case s.LogicalExpression:return c=this.recurse(a.left),e=this.recurse(a.right),this["binary"+a.operator](c,e,b);case s.ConditionalExpression:return this["ternary?:"](this.recurse(a.test),this.recurse(a.alternate),this.recurse(a.consequent),b);case s.Identifier:return Va(a.name,f.expression),f.identifier(a.name,f.expensiveChecks||Fb(a.name),b,d,f.expression);case s.MemberExpression:return c=this.recurse(a.object,!1,!!d),a.computed||(Va(a.property.name,
+f.expression),e=a.property.name),a.computed&&(e=this.recurse(a.property)),a.computed?this.computedMember(c,e,b,d,f.expression):this.nonComputedMember(c,e,f.expensiveChecks,b,d,f.expression);case s.CallExpression:return g=[],n(a.arguments,function(a){g.push(f.recurse(a))}),a.filter&&(e=this.$filter(a.callee.name)),a.filter||(e=this.recurse(a.callee,!0)),a.filter?function(a,c,d,f){for(var r=[],n=0;n<g.length;++n)r.push(g[n](a,c,d,f));a=e.apply(u,r,f);return b?{context:u,name:u,value:a}:a}:function(a,
+c,d,m){var r=e(a,c,d,m),n;if(null!=r.value){xa(r.context,f.expression);kd(r.value,f.expression);n=[];for(var q=0;q<g.length;++q)n.push(xa(g[q](a,c,d,m),f.expression));n=xa(r.value.apply(r.context,n),f.expression)}return b?{value:n}:n};case s.AssignmentExpression:return c=this.recurse(a.left,!0,1),e=this.recurse(a.right),function(a,d,g,m){var n=c(a,d,g,m);a=e(a,d,g,m);xa(n.value,f.expression);ld(n.context);n.context[n.name]=a;return b?{value:a}:a};case s.ArrayExpression:return g=[],n(a.elements,function(a){g.push(f.recurse(a))}),
+function(a,c,d,e){for(var f=[],n=0;n<g.length;++n)f.push(g[n](a,c,d,e));return b?{value:f}:f};case s.ObjectExpression:return g=[],n(a.properties,function(a){g.push({key:a.key.type===s.Identifier?a.key.name:""+a.key.value,value:f.recurse(a.value)})}),function(a,c,d,e){for(var f={},n=0;n<g.length;++n)f[g[n].key]=g[n].value(a,c,d,e);return b?{value:f}:f};case s.ThisExpression:return function(a){return b?{value:a}:a};case s.NGValueParameter:return function(a,c,d,e){return b?{value:d}:d}}},"unary+":function(a,
+b){return function(d,c,e,f){d=a(d,c,e,f);d=y(d)?+d:0;return b?{value:d}:d}},"unary-":function(a,b){return function(d,c,e,f){d=a(d,c,e,f);d=y(d)?-d:0;return b?{value:d}:d}},"unary!":function(a,b){return function(d,c,e,f){d=!a(d,c,e,f);return b?{value:d}:d}},"binary+":function(a,b,d){return function(c,e,f,g){var h=a(c,e,f,g);c=b(c,e,f,g);h=md(h,c);return d?{value:h}:h}},"binary-":function(a,b,d){return function(c,e,f,g){var h=a(c,e,f,g);c=b(c,e,f,g);h=(y(h)?h:0)-(y(c)?c:0);return d?{value:h}:h}},"binary*":function(a,
+b,d){return function(c,e,f,g){c=a(c,e,f,g)*b(c,e,f,g);return d?{value:c}:c}},"binary/":function(a,b,d){return function(c,e,f,g){c=a(c,e,f,g)/b(c,e,f,g);return d?{value:c}:c}},"binary%":function(a,b,d){return function(c,e,f,g){c=a(c,e,f,g)%b(c,e,f,g);return d?{value:c}:c}},"binary===":function(a,b,d){return function(c,e,f,g){c=a(c,e,f,g)===b(c,e,f,g);return d?{value:c}:c}},"binary!==":function(a,b,d){return function(c,e,f,g){c=a(c,e,f,g)!==b(c,e,f,g);return d?{value:c}:c}},"binary==":function(a,b,
+d){return function(c,e,f,g){c=a(c,e,f,g)==b(c,e,f,g);return d?{value:c}:c}},"binary!=":function(a,b,d){return function(c,e,f,g){c=a(c,e,f,g)!=b(c,e,f,g);return d?{value:c}:c}},"binary<":function(a,b,d){return function(c,e,f,g){c=a(c,e,f,g)<b(c,e,f,g);return d?{value:c}:c}},"binary>":function(a,b,d){return function(c,e,f,g){c=a(c,e,f,g)>b(c,e,f,g);return d?{value:c}:c}},"binary<=":function(a,b,d){return function(c,e,f,g){c=a(c,e,f,g)<=b(c,e,f,g);return d?{value:c}:c}},"binary>=":function(a,b,d){return function(c,
+e,f,g){c=a(c,e,f,g)>=b(c,e,f,g);return d?{value:c}:c}},"binary&&":function(a,b,d){return function(c,e,f,g){c=a(c,e,f,g)&&b(c,e,f,g);return d?{value:c}:c}},"binary||":function(a,b,d){return function(c,e,f,g){c=a(c,e,f,g)||b(c,e,f,g);return d?{value:c}:c}},"ternary?:":function(a,b,d,c){return function(e,f,g,h){e=a(e,f,g,h)?b(e,f,g,h):d(e,f,g,h);return c?{value:e}:e}},value:function(a,b){return function(){return b?{context:u,name:u,value:a}:a}},identifier:function(a,b,d,c,e){return function(f,g,h,k){f=
+g&&a in g?g:f;c&&1!==c&&f&&!f[a]&&(f[a]={});g=f?f[a]:u;b&&xa(g,e);return d?{context:f,name:a,value:g}:g}},computedMember:function(a,b,d,c,e){return function(f,g,h,k){var l=a(f,g,h,k),m,n;null!=l&&(m=b(f,g,h,k),m=jd(m),Va(m,e),c&&1!==c&&l&&!l[m]&&(l[m]={}),n=l[m],xa(n,e));return d?{context:l,name:m,value:n}:n}},nonComputedMember:function(a,b,d,c,e,f){return function(g,h,k,l){g=a(g,h,k,l);e&&1!==e&&g&&!g[b]&&(g[b]={});h=null!=g?g[b]:u;(d||Fb(b))&&xa(h,f);return c?{context:g,name:b,value:h}:h}},inputs:function(a,
+b){return function(d,c,e,f){return f?f[b]:a(d,c,e)}}};var gc=function(a,b,d){this.lexer=a;this.$filter=b;this.options=d;this.ast=new s(this.lexer);this.astCompiler=d.csp?new sd(this.ast,b):new rd(this.ast,b)};gc.prototype={constructor:gc,parse:function(a){return this.astCompiler.compile(a,this.options.expensiveChecks)}};$();$();var $f=Object.prototype.valueOf,ya=G("$sce"),la={HTML:"html",CSS:"css",URL:"url",RESOURCE_URL:"resourceUrl",JS:"js"},ha=G("$compile"),Y=X.createElement("a"),wd=wa(S.location.href);
+xd.$inject=["$document"];Jc.$inject=["$provide"];yd.$inject=["$locale"];Ad.$inject=["$locale"];var ic=".",jg={yyyy:ca("FullYear",4),yy:ca("FullYear",2,0,!0),y:ca("FullYear",1),MMMM:Hb("Month"),MMM:Hb("Month",!0),MM:ca("Month",2,1),M:ca("Month",1,1),dd:ca("Date",2),d:ca("Date",1),HH:ca("Hours",2),H:ca("Hours",1),hh:ca("Hours",2,-12),h:ca("Hours",1,-12),mm:ca("Minutes",2),m:ca("Minutes",1),ss:ca("Seconds",2),s:ca("Seconds",1),sss:ca("Milliseconds",3),EEEE:Hb("Day"),EEE:Hb("Day",!0),a:function(a,b){return 12>
+a.getHours()?b.AMPMS[0]:b.AMPMS[1]},Z:function(a,b,d){a=-1*d;return a=(0<=a?"+":"")+(Gb(Math[0<a?"floor":"ceil"](a/60),2)+Gb(Math.abs(a%60),2))},ww:Ed(2),w:Ed(1),G:jc,GG:jc,GGG:jc,GGGG:function(a,b){return 0>=a.getFullYear()?b.ERANAMES[0]:b.ERANAMES[1]}},ig=/((?:[^yMdHhmsaZEwG']+)|(?:'(?:[^']|'')*')|(?:E+|y+|M+|d+|H+|h+|m+|s+|a|Z|G+|w+))(.*)/,hg=/^\-?\d+$/;zd.$inject=["$locale"];var eg=na(F),fg=na(sb);Bd.$inject=["$parse"];var he=na({restrict:"E",compile:function(a,b){if(!b.href&&!b.xlinkHref)return function(a,
+b){if("a"===b[0].nodeName.toLowerCase()){var e="[object SVGAnimatedString]"===sa.call(b.prop("href"))?"xlink:href":"href";b.on("click",function(a){b.attr(e)||a.preventDefault()})}}}}),tb={};n(Cb,function(a,b){function d(a,d,e){a.$watch(e[c],function(a){e.$set(b,!!a)})}if("multiple"!=a){var c=va("ng-"+b),e=d;"checked"===a&&(e=function(a,b,e){e.ngModel!==e[c]&&d(a,b,e)});tb[c]=function(){return{restrict:"A",priority:100,link:e}}}});n(Zc,function(a,b){tb[b]=function(){return{priority:100,link:function(a,
+c,e){if("ngPattern"===b&&"/"==e.ngPattern.charAt(0)&&(c=e.ngPattern.match(lg))){e.$set("ngPattern",new RegExp(c[1],c[2]));return}a.$watch(e[b],function(a){e.$set(b,a)})}}}});n(["src","srcset","href"],function(a){var b=va("ng-"+a);tb[b]=function(){return{priority:99,link:function(d,c,e){var f=a,g=a;"href"===a&&"[object SVGAnimatedString]"===sa.call(c.prop("href"))&&(g="xlinkHref",e.$attr[g]="xlink:href",f=null);e.$observe(b,function(b){b?(e.$set(g,b),Ha&&f&&c.prop(f,e[g])):"href"===a&&e.$set(g,null)})}}}});
+var Ib={$addControl:x,$$renameControl:function(a,b){a.$name=b},$removeControl:x,$setValidity:x,$setDirty:x,$setPristine:x,$setSubmitted:x};Fd.$inject=["$element","$attrs","$scope","$animate","$interpolate"];var Nd=function(a){return["$timeout","$parse",function(b,d){function c(a){return""===a?d('this[""]').assign:d(a).assign||x}return{name:"form",restrict:a?"EAC":"E",require:["form","^^?form"],controller:Fd,compile:function(d,f){d.addClass(Wa).addClass(mb);var g=f.name?"name":a&&f.ngForm?"ngForm":
+!1;return{pre:function(a,d,e,f){var n=f[0];if(!("action"in e)){var q=function(b){a.$apply(function(){n.$commitViewValue();n.$setSubmitted()});b.preventDefault()};d[0].addEventListener("submit",q,!1);d.on("$destroy",function(){b(function(){d[0].removeEventListener("submit",q,!1)},0,!1)})}(f[1]||n.$$parentForm).$addControl(n);var s=g?c(n.$name):x;g&&(s(a,n),e.$observe(g,function(b){n.$name!==b&&(s(a,u),n.$$parentForm.$$renameControl(n,b),s=c(n.$name),s(a,n))}));d.on("$destroy",function(){n.$$parentForm.$removeControl(n);
+s(a,u);M(n,Ib)})}}}}}]},ie=Nd(),ve=Nd(!0),kg=/\d{4}-[01]\d-[0-3]\dT[0-2]\d:[0-5]\d:[0-5]\d\.\d+([+-][0-2]\d:[0-5]\d|Z)/,tg=/^[A-Za-z][A-Za-z\d.+-]*:\/*(?:\w+(?::\w+)?@)?[^\s/]+(?::\d+)?(?:\/[\w#!:.?+=&%@\-/]*)?$/,ug=/^[a-z0-9!#$%&'*+\/=?^_`{|}~.-]+@[a-z0-9]([a-z0-9-]*[a-z0-9])?(\.[a-z0-9]([a-z0-9-]*[a-z0-9])?)*$/i,vg=/^\s*(\-|\+)?(\d+|(\d*(\.\d*)))([eE][+-]?\d+)?\s*$/,Od=/^(\d{4})-(\d{2})-(\d{2})$/,Pd=/^(\d{4})-(\d\d)-(\d\d)T(\d\d):(\d\d)(?::(\d\d)(\.\d{1,3})?)?$/,mc=/^(\d{4})-W(\d\d)$/,Qd=/^(\d{4})-(\d\d)$/,
+Rd=/^(\d\d):(\d\d)(?::(\d\d)(\.\d{1,3})?)?$/,Sd={text:function(a,b,d,c,e,f){jb(a,b,d,c,e,f);kc(c)},date:kb("date",Od,Kb(Od,["yyyy","MM","dd"]),"yyyy-MM-dd"),"datetime-local":kb("datetimelocal",Pd,Kb(Pd,"yyyy MM dd HH mm ss sss".split(" ")),"yyyy-MM-ddTHH:mm:ss.sss"),time:kb("time",Rd,Kb(Rd,["HH","mm","ss","sss"]),"HH:mm:ss.sss"),week:kb("week",mc,function(a,b){if(da(a))return a;if(E(a)){mc.lastIndex=0;var d=mc.exec(a);if(d){var c=+d[1],e=+d[2],f=d=0,g=0,h=0,k=Dd(c),e=7*(e-1);b&&(d=b.getHours(),f=
+b.getMinutes(),g=b.getSeconds(),h=b.getMilliseconds());return new Date(c,0,k.getDate()+e,d,f,g,h)}}return NaN},"yyyy-Www"),month:kb("month",Qd,Kb(Qd,["yyyy","MM"]),"yyyy-MM"),number:function(a,b,d,c,e,f){Hd(a,b,d,c);jb(a,b,d,c,e,f);c.$$parserName="number";c.$parsers.push(function(a){return c.$isEmpty(a)?null:vg.test(a)?parseFloat(a):u});c.$formatters.push(function(a){if(!c.$isEmpty(a)){if(!Q(a))throw lb("numfmt",a);a=a.toString()}return a});if(y(d.min)||d.ngMin){var g;c.$validators.min=function(a){return c.$isEmpty(a)||
+q(g)||a>=g};d.$observe("min",function(a){y(a)&&!Q(a)&&(a=parseFloat(a,10));g=Q(a)&&!isNaN(a)?a:u;c.$validate()})}if(y(d.max)||d.ngMax){var h;c.$validators.max=function(a){return c.$isEmpty(a)||q(h)||a<=h};d.$observe("max",function(a){y(a)&&!Q(a)&&(a=parseFloat(a,10));h=Q(a)&&!isNaN(a)?a:u;c.$validate()})}},url:function(a,b,d,c,e,f){jb(a,b,d,c,e,f);kc(c);c.$$parserName="url";c.$validators.url=function(a,b){var d=a||b;return c.$isEmpty(d)||tg.test(d)}},email:function(a,b,d,c,e,f){jb(a,b,d,c,e,f);kc(c);
+c.$$parserName="email";c.$validators.email=function(a,b){var d=a||b;return c.$isEmpty(d)||ug.test(d)}},radio:function(a,b,d,c){q(d.name)&&b.attr("name",++nb);b.on("click",function(a){b[0].checked&&c.$setViewValue(d.value,a&&a.type)});c.$render=function(){b[0].checked=d.value==c.$viewValue};d.$observe("value",c.$render)},checkbox:function(a,b,d,c,e,f,g,h){var k=Id(h,a,"ngTrueValue",d.ngTrueValue,!0),l=Id(h,a,"ngFalseValue",d.ngFalseValue,!1);b.on("click",function(a){c.$setViewValue(b[0].checked,a&&
+a.type)});c.$render=function(){b[0].checked=c.$viewValue};c.$isEmpty=function(a){return!1===a};c.$formatters.push(function(a){return ma(a,k)});c.$parsers.push(function(a){return a?k:l})},hidden:x,button:x,submit:x,reset:x,file:x},Dc=["$browser","$sniffer","$filter","$parse",function(a,b,d,c){return{restrict:"E",require:["?ngModel"],link:{pre:function(e,f,g,h){h[0]&&(Sd[F(g.type)]||Sd.text)(e,f,g,h[0],b,a,d,c)}}}}],wg=/^(true|false|\d+)$/,Ne=function(){return{restrict:"A",priority:100,compile:function(a,
+b){return wg.test(b.ngValue)?function(a,b,e){e.$set("value",a.$eval(e.ngValue))}:function(a,b,e){a.$watch(e.ngValue,function(a){e.$set("value",a)})}}}},ne=["$compile",function(a){return{restrict:"AC",compile:function(b){a.$$addBindingClass(b);return function(b,c,e){a.$$addBindingInfo(c,e.ngBind);c=c[0];b.$watch(e.ngBind,function(a){c.textContent=q(a)?"":a})}}}}],pe=["$interpolate","$compile",function(a,b){return{compile:function(d){b.$$addBindingClass(d);return function(c,d,f){c=a(d.attr(f.$attr.ngBindTemplate));
+b.$$addBindingInfo(d,c.expressions);d=d[0];f.$observe("ngBindTemplate",function(a){d.textContent=q(a)?"":a})}}}}],oe=["$sce","$parse","$compile",function(a,b,d){return{restrict:"A",compile:function(c,e){var f=b(e.ngBindHtml),g=b(e.ngBindHtml,function(a){return(a||"").toString()});d.$$addBindingClass(c);return function(b,c,e){d.$$addBindingInfo(c,e.ngBindHtml);b.$watch(g,function(){c.html(a.getTrustedHtml(f(b))||"")})}}}}],Me=na({restrict:"A",require:"ngModel",link:function(a,b,d,c){c.$viewChangeListeners.push(function(){a.$eval(d.ngChange)})}}),
+qe=lc("",!0),se=lc("Odd",0),re=lc("Even",1),te=La({compile:function(a,b){b.$set("ngCloak",u);a.removeClass("ng-cloak")}}),ue=[function(){return{restrict:"A",scope:!0,controller:"@",priority:500}}],Ic={},xg={blur:!0,focus:!0};n("click dblclick mousedown mouseup mouseover mouseout mousemove mouseenter mouseleave keydown keyup keypress submit focus blur copy cut paste".split(" "),function(a){var b=va("ng-"+a);Ic[b]=["$parse","$rootScope",function(d,c){return{restrict:"A",compile:function(e,f){var g=
+d(f[b],null,!0);return function(b,d){d.on(a,function(d){var e=function(){g(b,{$event:d})};xg[a]&&c.$$phase?b.$evalAsync(e):b.$apply(e)})}}}}]});var xe=["$animate",function(a){return{multiElement:!0,transclude:"element",priority:600,terminal:!0,restrict:"A",$$tlb:!0,link:function(b,d,c,e,f){var g,h,k;b.$watch(c.ngIf,function(b){b?h||f(function(b,e){h=e;b[b.length++]=X.createComment(" end ngIf: "+c.ngIf+" ");g={clone:b};a.enter(b,d.parent(),d)}):(k&&(k.remove(),k=null),h&&(h.$destroy(),h=null),g&&(k=
+rb(g.clone),a.leave(k).then(function(){k=null}),g=null))})}}}],ye=["$templateRequest","$anchorScroll","$animate",function(a,b,d){return{restrict:"ECA",priority:400,terminal:!0,transclude:"element",controller:fa.noop,compile:function(c,e){var f=e.ngInclude||e.src,g=e.onload||"",h=e.autoscroll;return function(c,e,m,n,q){var s=0,v,u,p,C=function(){u&&(u.remove(),u=null);v&&(v.$destroy(),v=null);p&&(d.leave(p).then(function(){u=null}),u=p,p=null)};c.$watch(f,function(f){var m=function(){!y(h)||h&&!c.$eval(h)||
+b()},u=++s;f?(a(f,!0).then(function(a){if(u===s){var b=c.$new();n.template=a;a=q(b,function(a){C();d.enter(a,null,e).then(m)});v=b;p=a;v.$emit("$includeContentLoaded",f);c.$eval(g)}},function(){u===s&&(C(),c.$emit("$includeContentError",f))}),c.$emit("$includeContentRequested",f)):(C(),n.template=null)})}}}}],Pe=["$compile",function(a){return{restrict:"ECA",priority:-400,require:"ngInclude",link:function(b,d,c,e){/SVG/.test(d[0].toString())?(d.empty(),a(Lc(e.template,X).childNodes)(b,function(a){d.append(a)},
+{futureParentElement:d})):(d.html(e.template),a(d.contents())(b))}}}],ze=La({priority:450,compile:function(){return{pre:function(a,b,d){a.$eval(d.ngInit)}}}}),Le=function(){return{restrict:"A",priority:100,require:"ngModel",link:function(a,b,d,c){var e=b.attr(d.$attr.ngList)||", ",f="false"!==d.ngTrim,g=f?U(e):e;c.$parsers.push(function(a){if(!q(a)){var b=[];a&&n(a.split(g),function(a){a&&b.push(f?U(a):a)});return b}});c.$formatters.push(function(a){return I(a)?a.join(e):u});c.$isEmpty=function(a){return!a||
+!a.length}}}},mb="ng-valid",Jd="ng-invalid",Wa="ng-pristine",Jb="ng-dirty",Ld="ng-pending",lb=G("ngModel"),yg=["$scope","$exceptionHandler","$attrs","$element","$parse","$animate","$timeout","$rootScope","$q","$interpolate",function(a,b,d,c,e,f,g,h,k,l){this.$modelValue=this.$viewValue=Number.NaN;this.$$rawModelValue=u;this.$validators={};this.$asyncValidators={};this.$parsers=[];this.$formatters=[];this.$viewChangeListeners=[];this.$untouched=!0;this.$touched=!1;this.$pristine=!0;this.$dirty=!1;
+this.$valid=!0;this.$invalid=!1;this.$error={};this.$$success={};this.$pending=u;this.$name=l(d.name||"",!1)(a);this.$$parentForm=Ib;var m=e(d.ngModel),r=m.assign,t=m,s=r,v=null,B,p=this;this.$$setOptions=function(a){if((p.$options=a)&&a.getterSetter){var b=e(d.ngModel+"()"),f=e(d.ngModel+"($$$p)");t=function(a){var c=m(a);z(c)&&(c=b(a));return c};s=function(a,b){z(m(a))?f(a,{$$$p:p.$modelValue}):r(a,p.$modelValue)}}else if(!m.assign)throw lb("nonassign",d.ngModel,ua(c));};this.$render=x;this.$isEmpty=
+function(a){return q(a)||""===a||null===a||a!==a};var C=0;Gd({ctrl:this,$element:c,set:function(a,b){a[b]=!0},unset:function(a,b){delete a[b]},$animate:f});this.$setPristine=function(){p.$dirty=!1;p.$pristine=!0;f.removeClass(c,Jb);f.addClass(c,Wa)};this.$setDirty=function(){p.$dirty=!0;p.$pristine=!1;f.removeClass(c,Wa);f.addClass(c,Jb);p.$$parentForm.$setDirty()};this.$setUntouched=function(){p.$touched=!1;p.$untouched=!0;f.setClass(c,"ng-untouched","ng-touched")};this.$setTouched=function(){p.$touched=
+!0;p.$untouched=!1;f.setClass(c,"ng-touched","ng-untouched")};this.$rollbackViewValue=function(){g.cancel(v);p.$viewValue=p.$$lastCommittedViewValue;p.$render()};this.$validate=function(){if(!Q(p.$modelValue)||!isNaN(p.$modelValue)){var a=p.$$rawModelValue,b=p.$valid,c=p.$modelValue,d=p.$options&&p.$options.allowInvalid;p.$$runValidators(a,p.$$lastCommittedViewValue,function(e){d||b===e||(p.$modelValue=e?a:u,p.$modelValue!==c&&p.$$writeModelToScope())})}};this.$$runValidators=function(a,b,c){function d(){var c=
+!0;n(p.$validators,function(d,e){var g=d(a,b);c=c&&g;f(e,g)});return c?!0:(n(p.$asyncValidators,function(a,b){f(b,null)}),!1)}function e(){var c=[],d=!0;n(p.$asyncValidators,function(e,g){var h=e(a,b);if(!h||!z(h.then))throw lb("$asyncValidators",h);f(g,u);c.push(h.then(function(){f(g,!0)},function(a){d=!1;f(g,!1)}))});c.length?k.all(c).then(function(){g(d)},x):g(!0)}function f(a,b){h===C&&p.$setValidity(a,b)}function g(a){h===C&&c(a)}C++;var h=C;(function(){var a=p.$$parserName||"parse";if(q(B))f(a,
+null);else return B||(n(p.$validators,function(a,b){f(b,null)}),n(p.$asyncValidators,function(a,b){f(b,null)})),f(a,B),B;return!0})()?d()?e():g(!1):g(!1)};this.$commitViewValue=function(){var a=p.$viewValue;g.cancel(v);if(p.$$lastCommittedViewValue!==a||""===a&&p.$$hasNativeValidators)p.$$lastCommittedViewValue=a,p.$pristine&&this.$setDirty(),this.$$parseAndValidate()};this.$$parseAndValidate=function(){var b=p.$$lastCommittedViewValue;if(B=q(b)?u:!0)for(var c=0;c<p.$parsers.length;c++)if(b=p.$parsers[c](b),
+q(b)){B=!1;break}Q(p.$modelValue)&&isNaN(p.$modelValue)&&(p.$modelValue=t(a));var d=p.$modelValue,e=p.$options&&p.$options.allowInvalid;p.$$rawModelValue=b;e&&(p.$modelValue=b,p.$modelValue!==d&&p.$$writeModelToScope());p.$$runValidators(b,p.$$lastCommittedViewValue,function(a){e||(p.$modelValue=a?b:u,p.$modelValue!==d&&p.$$writeModelToScope())})};this.$$writeModelToScope=function(){s(a,p.$modelValue);n(p.$viewChangeListeners,function(a){try{a()}catch(c){b(c)}})};this.$setViewValue=function(a,b){p.$viewValue=
+a;p.$options&&!p.$options.updateOnDefault||p.$$debounceViewValueCommit(b)};this.$$debounceViewValueCommit=function(b){var c=0,d=p.$options;d&&y(d.debounce)&&(d=d.debounce,Q(d)?c=d:Q(d[b])?c=d[b]:Q(d["default"])&&(c=d["default"]));g.cancel(v);c?v=g(function(){p.$commitViewValue()},c):h.$$phase?p.$commitViewValue():a.$apply(function(){p.$commitViewValue()})};a.$watch(function(){var b=t(a);if(b!==p.$modelValue&&(p.$modelValue===p.$modelValue||b===b)){p.$modelValue=p.$$rawModelValue=b;B=u;for(var c=p.$formatters,
+d=c.length,e=b;d--;)e=c[d](e);p.$viewValue!==e&&(p.$viewValue=p.$$lastCommittedViewValue=e,p.$render(),p.$$runValidators(b,e,x))}return b})}],Ke=["$rootScope",function(a){return{restrict:"A",require:["ngModel","^?form","^?ngModelOptions"],controller:yg,priority:1,compile:function(b){b.addClass(Wa).addClass("ng-untouched").addClass(mb);return{pre:function(a,b,e,f){var g=f[0];b=f[1]||g.$$parentForm;g.$$setOptions(f[2]&&f[2].$options);b.$addControl(g);e.$observe("name",function(a){g.$name!==a&&g.$$parentForm.$$renameControl(g,
+a)});a.$on("$destroy",function(){g.$$parentForm.$removeControl(g)})},post:function(b,c,e,f){var g=f[0];if(g.$options&&g.$options.updateOn)c.on(g.$options.updateOn,function(a){g.$$debounceViewValueCommit(a&&a.type)});c.on("blur",function(c){g.$touched||(a.$$phase?b.$evalAsync(g.$setTouched):b.$apply(g.$setTouched))})}}}}}],zg=/(\s+|^)default(\s+|$)/,Oe=function(){return{restrict:"A",controller:["$scope","$attrs",function(a,b){var d=this;this.$options=bb(a.$eval(b.ngModelOptions));y(this.$options.updateOn)?
+(this.$options.updateOnDefault=!1,this.$options.updateOn=U(this.$options.updateOn.replace(zg,function(){d.$options.updateOnDefault=!0;return" "}))):this.$options.updateOnDefault=!0}]}},Ae=La({terminal:!0,priority:1E3}),Ag=G("ngOptions"),Bg=/^\s*([\s\S]+?)(?:\s+as\s+([\s\S]+?))?(?:\s+group\s+by\s+([\s\S]+?))?(?:\s+disable\s+when\s+([\s\S]+?))?\s+for\s+(?:([\$\w][\$\w]*)|(?:\(\s*([\$\w][\$\w]*)\s*,\s*([\$\w][\$\w]*)\s*\)))\s+in\s+([\s\S]+?)(?:\s+track\s+by\s+([\s\S]+?))?$/,Ie=["$compile","$parse",function(a,
+b){function d(a,c,d){function e(a,b,c,d,f){this.selectValue=a;this.viewValue=b;this.label=c;this.group=d;this.disabled=f}function l(a){var b;if(!q&&za(a))b=a;else{b=[];for(var c in a)a.hasOwnProperty(c)&&"$"!==c.charAt(0)&&b.push(c)}return b}var m=a.match(Bg);if(!m)throw Ag("iexp",a,ua(c));var n=m[5]||m[7],q=m[6];a=/ as /.test(m[0])&&m[1];var s=m[9];c=b(m[2]?m[1]:n);var v=a&&b(a)||c,u=s&&b(s),p=s?function(a,b){return u(d,b)}:function(a){return Ca(a)},C=function(a,b){return p(a,z(a,b))},w=b(m[2]||
+m[1]),y=b(m[3]||""),B=b(m[4]||""),x=b(m[8]),D={},z=q?function(a,b){D[q]=b;D[n]=a;return D}:function(a){D[n]=a;return D};return{trackBy:s,getTrackByValue:C,getWatchables:b(x,function(a){var b=[];a=a||[];for(var c=l(a),e=c.length,f=0;f<e;f++){var g=a===c?f:c[f],k=z(a[g],g),g=p(a[g],k);b.push(g);if(m[2]||m[1])g=w(d,k),b.push(g);m[4]&&(k=B(d,k),b.push(k))}return b}),getOptions:function(){for(var a=[],b={},c=x(d)||[],f=l(c),g=f.length,m=0;m<g;m++){var n=c===f?m:f[m],r=z(c[n],n),q=v(d,r),n=p(q,r),t=w(d,
+r),u=y(d,r),r=B(d,r),q=new e(n,q,t,u,r);a.push(q);b[n]=q}return{items:a,selectValueMap:b,getOptionFromViewValue:function(a){return b[C(a)]},getViewValueFromOption:function(a){return s?fa.copy(a.viewValue):a.viewValue}}}}}var c=X.createElement("option"),e=X.createElement("optgroup");return{restrict:"A",terminal:!0,require:["select","?ngModel"],link:{pre:function(a,b,c,d){d[0].registerOption=x},post:function(b,g,h,k){function l(a,b){a.element=b;b.disabled=a.disabled;a.label!==b.label&&(b.label=a.label,
+b.textContent=a.label);a.value!==b.value&&(b.value=a.selectValue)}function m(a,b,c,d){b&&F(b.nodeName)===c?c=b:(c=d.cloneNode(!1),b?a.insertBefore(c,b):a.appendChild(c));return c}function r(a){for(var b;a;)b=a.nextSibling,Xb(a),a=b}function q(a){var b=p&&p[0],c=z&&z[0];if(b||c)for(;a&&(a===b||a===c||8===a.nodeType||""===a.value);)a=a.nextSibling;return a}function s(){var a=D&&u.readValue();D=E.getOptions();var b={},d=g[0].firstChild;x&&g.prepend(p);d=q(d);D.items.forEach(function(a){var f,h;a.group?
+(f=b[a.group],f||(f=m(g[0],d,"optgroup",e),d=f.nextSibling,f.label=a.group,f=b[a.group]={groupElement:f,currentOptionElement:f.firstChild}),h=m(f.groupElement,f.currentOptionElement,"option",c),l(a,h),f.currentOptionElement=h.nextSibling):(h=m(g[0],d,"option",c),l(a,h),d=h.nextSibling)});Object.keys(b).forEach(function(a){r(b[a].currentOptionElement)});r(d);v.$render();if(!v.$isEmpty(a)){var f=u.readValue();(E.trackBy?ma(a,f):a===f)||(v.$setViewValue(f),v.$render())}}var v=k[1];if(v){var u=k[0];k=
+h.multiple;for(var p,C=0,w=g.children(),y=w.length;C<y;C++)if(""===w[C].value){p=w.eq(C);break}var x=!!p,z=B(c.cloneNode(!1));z.val("?");var D,E=d(h.ngOptions,g,b);k?(v.$isEmpty=function(a){return!a||0===a.length},u.writeValue=function(a){D.items.forEach(function(a){a.element.selected=!1});a&&a.forEach(function(a){(a=D.getOptionFromViewValue(a))&&!a.disabled&&(a.element.selected=!0)})},u.readValue=function(){var a=g.val()||[],b=[];n(a,function(a){(a=D.selectValueMap[a])&&!a.disabled&&b.push(D.getViewValueFromOption(a))});
+return b},E.trackBy&&b.$watchCollection(function(){if(I(v.$viewValue))return v.$viewValue.map(function(a){return E.getTrackByValue(a)})},function(){v.$render()})):(u.writeValue=function(a){var b=D.getOptionFromViewValue(a);b&&!b.disabled?g[0].value!==b.selectValue&&(z.remove(),x||p.remove(),g[0].value=b.selectValue,b.element.selected=!0,b.element.setAttribute("selected","selected")):null===a||x?(z.remove(),x||g.prepend(p),g.val(""),p.prop("selected",!0),p.attr("selected",!0)):(x||p.remove(),g.prepend(z),
+g.val("?"),z.prop("selected",!0),z.attr("selected",!0))},u.readValue=function(){var a=D.selectValueMap[g.val()];return a&&!a.disabled?(x||p.remove(),z.remove(),D.getViewValueFromOption(a)):null},E.trackBy&&b.$watch(function(){return E.getTrackByValue(v.$viewValue)},function(){v.$render()}));x?(p.remove(),a(p)(b),p.removeClass("ng-scope")):p=B(c.cloneNode(!1));s();b.$watchCollection(E.getWatchables,s)}}}}}],Be=["$locale","$interpolate","$log",function(a,b,d){var c=/{}/g,e=/^when(Minus)?(.+)$/;return{link:function(f,
+g,h){function k(a){g.text(a||"")}var l=h.count,m=h.$attr.when&&g.attr(h.$attr.when),r=h.offset||0,s=f.$eval(m)||{},u={},v=b.startSymbol(),y=b.endSymbol(),p=v+l+"-"+r+y,C=fa.noop,w;n(h,function(a,b){var c=e.exec(b);c&&(c=(c[1]?"-":"")+F(c[2]),s[c]=g.attr(h.$attr[b]))});n(s,function(a,d){u[d]=b(a.replace(c,p))});f.$watch(l,function(b){var c=parseFloat(b),e=isNaN(c);e||c in s||(c=a.pluralCat(c-r));c===w||e&&Q(w)&&isNaN(w)||(C(),e=u[c],q(e)?(null!=b&&d.debug("ngPluralize: no rule defined for '"+c+"' in "+
+m),C=x,k()):C=f.$watch(e,k),w=c)})}}}],Ce=["$parse","$animate",function(a,b){var d=G("ngRepeat"),c=function(a,b,c,d,k,l,m){a[c]=d;k&&(a[k]=l);a.$index=b;a.$first=0===b;a.$last=b===m-1;a.$middle=!(a.$first||a.$last);a.$odd=!(a.$even=0===(b&1))};return{restrict:"A",multiElement:!0,transclude:"element",priority:1E3,terminal:!0,$$tlb:!0,compile:function(e,f){var g=f.ngRepeat,h=X.createComment(" end ngRepeat: "+g+" "),k=g.match(/^\s*([\s\S]+?)\s+in\s+([\s\S]+?)(?:\s+as\s+([\s\S]+?))?(?:\s+track\s+by\s+([\s\S]+?))?\s*$/);
+if(!k)throw d("iexp",g);var l=k[1],m=k[2],r=k[3],q=k[4],k=l.match(/^(?:(\s*[\$\w]+)|\(\s*([\$\w]+)\s*,\s*([\$\w]+)\s*\))$/);if(!k)throw d("iidexp",l);var s=k[3]||k[1],v=k[2];if(r&&(!/^[$a-zA-Z_][$a-zA-Z0-9_]*$/.test(r)||/^(null|undefined|this|\$index|\$first|\$middle|\$last|\$even|\$odd|\$parent|\$root|\$id)$/.test(r)))throw d("badident",r);var x,p,y,w,z={$id:Ca};q?x=a(q):(y=function(a,b){return Ca(b)},w=function(a){return a});return function(a,e,f,k,l){x&&(p=function(b,c,d){v&&(z[v]=b);z[s]=c;z.$index=
+d;return x(a,z)});var q=$();a.$watchCollection(m,function(f){var k,m,t=e[0],x,z=$(),D,E,H,F,I,G,J;r&&(a[r]=f);if(za(f))I=f,m=p||y;else for(J in m=p||w,I=[],f)qa.call(f,J)&&"$"!==J.charAt(0)&&I.push(J);D=I.length;J=Array(D);for(k=0;k<D;k++)if(E=f===I?k:I[k],H=f[E],F=m(E,H,k),q[F])G=q[F],delete q[F],z[F]=G,J[k]=G;else{if(z[F])throw n(J,function(a){a&&a.scope&&(q[a.id]=a)}),d("dupes",g,F,H);J[k]={id:F,scope:u,clone:u};z[F]=!0}for(x in q){G=q[x];F=rb(G.clone);b.leave(F);if(F[0].parentNode)for(k=0,m=F.length;k<
+m;k++)F[k].$$NG_REMOVED=!0;G.scope.$destroy()}for(k=0;k<D;k++)if(E=f===I?k:I[k],H=f[E],G=J[k],G.scope){x=t;do x=x.nextSibling;while(x&&x.$$NG_REMOVED);G.clone[0]!=x&&b.move(rb(G.clone),null,B(t));t=G.clone[G.clone.length-1];c(G.scope,k,s,H,v,E,D)}else l(function(a,d){G.scope=d;var e=h.cloneNode(!1);a[a.length++]=e;b.enter(a,null,B(t));t=e;G.clone=a;z[G.id]=G;c(G.scope,k,s,H,v,E,D)});q=z})}}}}],De=["$animate",function(a){return{restrict:"A",multiElement:!0,link:function(b,d,c){b.$watch(c.ngShow,function(b){a[b?
+"removeClass":"addClass"](d,"ng-hide",{tempClasses:"ng-hide-animate"})})}}}],we=["$animate",function(a){return{restrict:"A",multiElement:!0,link:function(b,d,c){b.$watch(c.ngHide,function(b){a[b?"addClass":"removeClass"](d,"ng-hide",{tempClasses:"ng-hide-animate"})})}}}],Ee=La(function(a,b,d){a.$watch(d.ngStyle,function(a,d){d&&a!==d&&n(d,function(a,c){b.css(c,"")});a&&b.css(a)},!0)}),Fe=["$animate",function(a){return{require:"ngSwitch",controller:["$scope",function(){this.cases={}}],link:function(b,
+d,c,e){var f=[],g=[],h=[],k=[],l=function(a,b){return function(){a.splice(b,1)}};b.$watch(c.ngSwitch||c.on,function(b){var c,d;c=0;for(d=h.length;c<d;++c)a.cancel(h[c]);c=h.length=0;for(d=k.length;c<d;++c){var q=rb(g[c].clone);k[c].$destroy();(h[c]=a.leave(q)).then(l(h,c))}g.length=0;k.length=0;(f=e.cases["!"+b]||e.cases["?"])&&n(f,function(b){b.transclude(function(c,d){k.push(d);var e=b.element;c[c.length++]=X.createComment(" end ngSwitchWhen: ");g.push({clone:c});a.enter(c,e.parent(),e)})})})}}}],
+Ge=La({transclude:"element",priority:1200,require:"^ngSwitch",multiElement:!0,link:function(a,b,d,c,e){c.cases["!"+d.ngSwitchWhen]=c.cases["!"+d.ngSwitchWhen]||[];c.cases["!"+d.ngSwitchWhen].push({transclude:e,element:b})}}),He=La({transclude:"element",priority:1200,require:"^ngSwitch",multiElement:!0,link:function(a,b,d,c,e){c.cases["?"]=c.cases["?"]||[];c.cases["?"].push({transclude:e,element:b})}}),Je=La({restrict:"EAC",link:function(a,b,d,c,e){if(!e)throw G("ngTransclude")("orphan",ua(b));e(function(a){b.empty();
+b.append(a)})}}),je=["$templateCache",function(a){return{restrict:"E",terminal:!0,compile:function(b,d){"text/ng-template"==d.type&&a.put(d.id,b[0].text)}}}],Cg={$setViewValue:x,$render:x},Dg=["$element","$scope","$attrs",function(a,b,d){var c=this,e=new Sa;c.ngModelCtrl=Cg;c.unknownOption=B(X.createElement("option"));c.renderUnknownOption=function(b){b="? "+Ca(b)+" ?";c.unknownOption.val(b);a.prepend(c.unknownOption);a.val(b)};b.$on("$destroy",function(){c.renderUnknownOption=x});c.removeUnknownOption=
+function(){c.unknownOption.parent()&&c.unknownOption.remove()};c.readValue=function(){c.removeUnknownOption();return a.val()};c.writeValue=function(b){c.hasOption(b)?(c.removeUnknownOption(),a.val(b),""===b&&c.emptyOption.prop("selected",!0)):null==b&&c.emptyOption?(c.removeUnknownOption(),a.val("")):c.renderUnknownOption(b)};c.addOption=function(a,b){Ra(a,'"option value"');""===a&&(c.emptyOption=b);var d=e.get(a)||0;e.put(a,d+1);c.ngModelCtrl.$render();b[0].hasAttribute("selected")&&(b[0].selected=
+!0)};c.removeOption=function(a){var b=e.get(a);b&&(1===b?(e.remove(a),""===a&&(c.emptyOption=u)):e.put(a,b-1))};c.hasOption=function(a){return!!e.get(a)};c.registerOption=function(a,b,d,e,l){if(e){var m;d.$observe("value",function(a){y(m)&&c.removeOption(m);m=a;c.addOption(a,b)})}else l?a.$watch(l,function(a,e){d.$set("value",a);e!==a&&c.removeOption(e);c.addOption(a,b)}):c.addOption(d.value,b);b.on("$destroy",function(){c.removeOption(d.value);c.ngModelCtrl.$render()})}}],ke=function(){return{restrict:"E",
+require:["select","?ngModel"],controller:Dg,priority:1,link:{pre:function(a,b,d,c){var e=c[1];if(e){var f=c[0];f.ngModelCtrl=e;e.$render=function(){f.writeValue(e.$viewValue)};b.on("change",function(){a.$apply(function(){e.$setViewValue(f.readValue())})});if(d.multiple){f.readValue=function(){var a=[];n(b.find("option"),function(b){b.selected&&a.push(b.value)});return a};f.writeValue=function(a){var c=new Sa(a);n(b.find("option"),function(a){a.selected=y(c.get(a.value))})};var g,h=NaN;a.$watch(function(){h!==
+e.$viewValue||ma(g,e.$viewValue)||(g=ia(e.$viewValue),e.$render());h=e.$viewValue});e.$isEmpty=function(a){return!a||0===a.length}}}}}}},me=["$interpolate",function(a){return{restrict:"E",priority:100,compile:function(b,d){if(y(d.value))var c=a(d.value,!0);else{var e=a(b.text(),!0);e||d.$set("value",b.text())}return function(a,b,d){var k=b.parent();(k=k.data("$selectController")||k.parent().data("$selectController"))&&k.registerOption(a,b,d,c,e)}}}}],le=na({restrict:"E",terminal:!1}),Fc=function(){return{restrict:"A",
+require:"?ngModel",link:function(a,b,d,c){c&&(d.required=!0,c.$validators.required=function(a,b){return!d.required||!c.$isEmpty(b)},d.$observe("required",function(){c.$validate()}))}}},Ec=function(){return{restrict:"A",require:"?ngModel",link:function(a,b,d,c){if(c){var e,f=d.ngPattern||d.pattern;d.$observe("pattern",function(a){E(a)&&0<a.length&&(a=new RegExp("^"+a+"$"));if(a&&!a.test)throw G("ngPattern")("noregexp",f,a,ua(b));e=a||u;c.$validate()});c.$validators.pattern=function(a,b){return c.$isEmpty(b)||
+q(e)||e.test(b)}}}}},Hc=function(){return{restrict:"A",require:"?ngModel",link:function(a,b,d,c){if(c){var e=-1;d.$observe("maxlength",function(a){a=ea(a);e=isNaN(a)?-1:a;c.$validate()});c.$validators.maxlength=function(a,b){return 0>e||c.$isEmpty(b)||b.length<=e}}}}},Gc=function(){return{restrict:"A",require:"?ngModel",link:function(a,b,d,c){if(c){var e=0;d.$observe("minlength",function(a){e=ea(a)||0;c.$validate()});c.$validators.minlength=function(a,b){return c.$isEmpty(b)||b.length>=e}}}}};S.angular.bootstrap?
+console.log("WARNING: Tried to load angular more than once."):(ce(),ee(fa),fa.module("ngLocale",[],["$provide",function(a){function b(a){a+="";var b=a.indexOf(".");return-1==b?0:a.length-b-1}a.value("$locale",{DATETIME_FORMATS:{AMPMS:["AM","PM"],DAY:"Sunday Monday Tuesday Wednesday Thursday Friday Saturday".split(" "),ERANAMES:["Before Christ","Anno Domini"],ERAS:["BC","AD"],FIRSTDAYOFWEEK:6,MONTH:"January February March April May June July August September October November December".split(" "),SHORTDAY:"Sun Mon Tue Wed Thu Fri Sat".split(" "),
+SHORTMONTH:"Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec".split(" "),WEEKENDRANGE:[5,6],fullDate:"EEEE, MMMM d, y",longDate:"MMMM d, y",medium:"MMM d, y h:mm:ss a",mediumDate:"MMM d, y",mediumTime:"h:mm:ss a","short":"M/d/yy h:mm a",shortDate:"M/d/yy",shortTime:"h:mm a"},NUMBER_FORMATS:{CURRENCY_SYM:"$",DECIMAL_SEP:".",GROUP_SEP:",",PATTERNS:[{gSize:3,lgSize:3,maxFrac:3,minFrac:0,minInt:1,negPre:"-",negSuf:"",posPre:"",posSuf:""},{gSize:3,lgSize:3,maxFrac:2,minFrac:2,minInt:1,negPre:"-\u00a4",
+negSuf:"",posPre:"\u00a4",posSuf:""}]},id:"en-us",pluralCat:function(a,c){var e=a|0,f=c;u===f&&(f=Math.min(b(a),3));Math.pow(10,f);return 1==e&&0==f?"one":"other"}})}]),B(X).ready(function(){Zd(X,yc)}))})(window,document);!window.angular.$$csp().noInlineStyle&&window.angular.element(document.head).prepend('<style type="text/css">@charset "UTF-8";[ng\\:cloak],[ng-cloak],[data-ng-cloak],[x-ng-cloak],.ng-cloak,.x-ng-cloak,.ng-hide:not(.ng-hide-animate){display:none !important;}ng\\:form{display:block;}.ng-animate-shim{visibility:hidden;}.ng-anchor{position:absolute;}</style>');
+//# sourceMappingURL=angular.min.js.map
diff --git a/src/main/websrc/js/common/china.js b/src/main/websrc/js/common/china.js
new file mode 100644
index 0000000..3cd5f95
--- /dev/null
+++ b/src/main/websrc/js/common/china.js
@@ -0,0 +1,27 @@
+(function (root, factory) {
+    if (typeof define === 'function' && define.amd) {
+        // AMD. Register as an anonymous module.
+        define(['exports', 'echarts'], factory);
+    } else if (typeof exports === 'object' && typeof exports.nodeName !== 'string') {
+        // CommonJS
+        factory(exports, require('echarts'));
+    } else {
+        // Browser globals
+        factory({}, root.echarts);
+    }
+}(this, function (exports, echarts) {
+    var log = function (msg) {
+        if (typeof console !== 'undefined') {
+            console && console.error && console.error(msg);
+        }
+    }
+    if (!echarts) {
+        log('ECharts is not Loaded');
+        return;
+    }
+    if (!echarts.registerMap) {
+        log('ECharts Map is not loaded')
+        return;
+    }
+    echarts.registerMap('china', {"type":"FeatureCollection","features":[{"id":"710000","geometry":{"type":"MultiPolygon","coordinates":[["@@°Ü¯Û","@@ƛĴÕƊÉɼģºðʀ\\ƎsÆNŌÔĚäœnÜƤɊĂǀĆĴžĤNJŨxĚĮǂƺòƌ‚–âÔ®ĮXŦţƸZûЋƕƑGđ¨ĭMó·ęcëƝɉlÝƯֹÅŃ^Ó·śŃNjƏďíåɛGɉ™¿IċããF¥ĘWǬÏĶñÄ","@@\\p|WoYG¿¥I†j@ž","@@…¡‰@ˆV^RqˆBbAŒnTXe„†žQr™©C","@@ÆEE—„kWqë Iœ"]],"encodeOffsets":[[[122886,24033],[123335,22980],[122375,24193],[122518,24117],[124427,22618]]]},"properties":{"cp":[121.509062,25.044332],"name":"台湾","childNum":5}},{"id":"130000","geometry":{"type":"MultiPolygon","coordinates":[["@@\\a“M`ǽÓnUK…Ĝēs¤­©yrý§uģŒc†JŠ»eIˆ€P]‚ªr‰ºc_ħ²G¼s`jΟnüsœľP","@@U`Ts¿mĂ","@@FŸƒ•›Oh‡đ©OŸ›iÃ`ww^ƒÌkŸ‘ÑH«ƇǤŗĺtFu…{Z}Ö@U‡´…ʚLg®¯Oı°ÃwŸ ^˜—€VbÉs‡ˆmA…ê]]w„§›RRl£‡ŭuw›N—Á`ÇFēÝčȻŽuT¡Ĺ—¯Õ¯sŗő£YªhV’ƍ£ƅnëYNgƒq¼ś¿µı²UºÝUąŽąŖóŒxV@tˆƯŒJ”]eƒR¾fe|rHA˜|h~Ėƍl§ÏŠjVë` ØoˆÅbbx³^zÃĶš¶Sj®A”yÂhðk`š«P€”ˈµEF†Û¬Y¨Ļrõqi¼‰Wi°§’б²°`[ˆÀ|ĠO@ÆxO\\tŽa\\p_Zõ^û{ġŒȧXýĪÓjùÎRb›š^λj{íděYfíÙTyŽ‰mńŵōHim½’éŅ­aVcř§ax¹XŻác‡žWU£ôãºQ¨÷Ñws¥qEH‰Ù|‰›šYQoŕÇyáĂ£MðoťÊ‰P¡mšWO¡€v†{ôvîēÜISpÌhp¨ ‘j†deŔQÖj˜X³à™Ĉ[n`Yp@Už–cM`’RKhŒEbœ”pŞlNut®Etq‚nsÁŠgA‹iú‹oH‡qCX‡”hfgu“~ϋWP½¢G^}¯ÅīGCŸÑ^ãziMáļMTÃƘrMc|O_ž¯Ŏ´|‡morDkO\\mĆJfl@cĢ¬¢aĦtRıҙXòë¬WP{ŵǫƝ…›īÛ÷ąV×qƥV¿aȉd³B›qPBm›aËđŻģm“Å®VŠ¹d^K‡KoŸnYg“¯Xhqa”Ldu¥•ÍpDž¡KąÅƒkĝęěhq‡}HyÓ]¹ǧ£…Í÷¿qá•gPmoeœi‰¤o^á¾ZE‡˜Y^…Ný{n•ƒOl±Í“@M’ċèk§da‹‘NaÇį¿]ø‰RiiñE‰€ū‹i„DZàUtėGylƒ}ŒÓM}€jpEC~¡FtoQi‘šHkk{ILgĽxqÈƋÄd–eVŽDJj£€J|Ådz•Ft~žKŨ¸IÆv|”‡¢r}膎onb˜}`RÎÄn°ÒdÞ²„^®’lnÐèĄlðӜ×]ªÆ}LiĂ±Ö`^°Ç¶p®đDcœŋ`–ZÔ’¶êqvFƚ†N®ĆTH®¦O’¾ŠIbÐã´BĐɢŴÆíȦp–ĐÞXR€·nndOž¤’OÀĈƒ­Qg˜µFo|gȒęSWb©osx|hYh•gŃfmÖĩnº€T̒Sp›¢dYĤ¶UĈjl’ǐpäðëx³kÛfw²Xjz~ÂqbTŠÑ„ěŨ@|oM‡’zv¢ZrÃVw¬ŧĖ¸fŒ°ÐT€ªqŽs{Sž¯r æÝl¼ÖĞ džiGʂJ™¼lr}~K¨ŸƐÌWö€™¼œÞ°nÞoĦLš†|C~“D©|q]SvK€ÑcwpÏρ†ĿćènĪWlĄkT}¬Tpš~ƒ®Hgd„‰†˒劔ŽBVt„EÀ¢ôPĎƗè@~‚k–ü\\rÊĔÖæW_§¼F˜†´©òDòj’ˆYÈrbĞāøŀG{ƀ|¦ðrb|ÀH`pʞkv‚GpuARhÞÆǶgʊTǼƹS£¨¡ù³ŘÍ]¿Ây™ôEP xX¶¹܇O¡“gÚ¡IwÃ鑦ÅB‡Ï|Ç°…N«úmH¯‹âŸbę†U~xĈbȒ{^xÖlDž•¸dɂ‡„~"]],"encodeOffsets":[[[120023,41045],[121616,39981],[122102,42307]]]},"properties":{"cp":[114.502461,38.045474],"name":"河北","childNum":3}},{"id":"140000","geometry":{"type":"Polygon","coordinates":["@@žħÜ_ªlìwGkÛÃǏok‘ćiµVZģ¡coœ‘TS˹ĪmnÕńe–hZg{gtwªpXaĚThȑp{¶Eh—®RćƑP¿£‘PmcªaJyý{ƒýȥoÅîɡųAďä³aωJ‘½¥PG­ąSM­sWz½µÛ€‘YӀŖgxoOkĒCo­Èµ]¯_²ÕjāŽK~©ÅØ^ԛkïçămϑk]­±ƒcݯÑÃmQÍ~_a—pm…~ç¡q“ˆu{JÅŧ·Ls}–EyÁÆcI{¤IiCfUc•ƌÃp§]웫vD@¡SÀ‘µM‚ÅwuŽYY‡¡DbÑc¡hƒ×]nkoQdaMç~eD•ÛtT‰©±@¥ù@É¡‰ZcW|WqOJmĩl«ħşvOÓ«IqăV—¥ŸD[mI~Ó¢cehiÍ]Ɠ~ĥqXŠ·eƷœn±“}v•[ěďŽŕ]_‘œ•`‰¹ƒ§ÕōI™o©b­s^}Ét±ū«³p£ÿ¥WÑxçÁ«h×u׌¥ř„‹¾dÒ{ºvĴÎêÌɊ²¶€ü¨|ÞƸµȲ‘LLúÉƎ¤ϊęĔV`„_bª‹S^|ŸdŠzY|dz¥p†ZbÆ£¶ÒK}tĦÔņƠ‚PYzn€ÍvX¶Ěn ĠÔ„zý¦ª˜÷žÑĸَUȌ¸‚dòÜJð´’ìúNM¬ŒXZ´‘¤ŊǸ_tldIš{¦ƀðĠȤ¥NehXnYG‚‡R° ƬDj¬¸|CĞ„Kq‚ºfƐiĺ©ª~ĆOQª ¤@ìǦɌ²æBŒÊ”TœĞšHƘÁĪËĖ’šĴŞ–ȀœÆÿȄlŤĒö„t”νî¼ĨXhŒ‘˜|ªM¤ÐzÞĩ҃S‰rao³"],"encodeOffsets":[[117016,41452]]},"properties":{"cp":[112.549248,37.857014],"name":"山西","childNum":1}},{"id":"150000","geometry":{"type":"MultiPolygon","coordinates":[["@@ǪƫÌÛM…Ă[`՞Cn}¶Vc…ê“sƒ–¯‹PqƒFB…‰|S•³C|kñ•H‹d‘iÄ¥sˆʼnő…PóÑÑE^‘ÅPpy_YtS™hQ·aHwsOnʼnÚs©iqj›‰€USiº]ïWš‰«gW¡A–R붛ijʕ…Œů`çõh]y»ǃŸǛҤxÒm~zf}pf|ÜroÈzrKÈĵSƧ„ż؜Ġu~è¬vîS¼™Ăh–šĖMÈÄw‚\\fŦ°W ¢¾luŸD„wŠ\\Ŗĝ","@@ƒGVu»A—ylßí¹ãe’“]Eāò³C¹ð“¾ˆ²iŒÒAdkò^P“²CǜңDŽ z¼g^èöŰ_‹‚–†IJĕꄜ}gÁnUI«m‰…„‹]j‡vV¼euhwqA„aW˜ƒ_µj…»çjioQR¹ēÃßt@r³[ÛlćË^ÍÉáG“›OUۗOB±•XŸkŇ¹£k|e]ol™ŸkVͼÕqtaÏõjgÁ£§U^Œ”RLˆËnX°Ç’Bz†^~wfvˆypV ¯„ƫĉ˭ȫƗŷɿÿĿƑ˃ĝÿÃǃßËőó©ǐȍŒĖM×ÍEyx‹þp]Évïè‘vƀnÂĴÖ@‚‰†V~Ĉ™Š³MEˆĸÅĖt—ējyÄDXÄxGQuv_›i¦aBçw‘˛wD™©{ŸtāmQ€{EJ§KPśƘƿ¥@‰sCT•É}ɃwˆƇy±ŸgÑ“}T[÷kÐ禫…SÒ¥¸ëBX½‰HáŵÀğtSÝÂa[ƣ°¯¦P]£ġ“–“Òk®G²„èQ°óMq}EŠóƐÇ\\ƒ‡@áügQ͋u¥Fƒ“T՛¿Jû‡]|mvāÎYua^WoÀa·­ząÒot׶CLƗi¯¤mƎHNJ¤îìɾŊìTdåwsRÖgĒųúÍġäÕ}Q¶—ˆ¿A•†‹[¡Œ{d×uQAƒ›M•xV‹vMOmăl«ct[wº_šÇʊŽŸjb£ĦS_é“QZ“_lwgOiýe`YYJq¥IÁˆdz£ÙË[ÕªuƏ³ÍT—s·bÁĽäė[›b[ˆŗfãcn¥îC¿÷µ[ŏÀQ­ōšĉm¿Á^£mJVm‡—L[{Ï_£›F¥Ö{ŹA}…×Wu©ÅaųijƳhB{·TQqÙIķˑZđ©Yc|M¡…L•eVUóK_QWk’_ĥ‘¿ãZ•»X\\ĴuUƒè‡lG®ěłTĠğDє›žG‚ÆÍz]‹±…ŭ©ŸÅ’]ŒÅÐ}UË¥©Tċ™ïxgckfWgi\\ÏĒ¥HkµE˜ë{»ÏetcG±ahUiñiWsɁˆ·c–C‚Õk]wȑ|ća}w…VaĚ᠞ŒG°ùnM¬¯†{ȈÐÆA’¥ÄêJxÙ¢”hP¢Ûˆº€µwWOŸóFŽšÁz^ÀŗÎú´§¢T¤ǻƺSė‰ǵhÝÅQgvBHouʝl_o¿Ga{ïq{¥|ſĿHĂ÷aĝÇq‡Z‘ñiñC³ª—…»E`¨åXēÕqÉû[l•}ç@čƘóO¿¡ƒFUsA‰“ʽīccšocƒ‚ƒÇS}„“£‡IS~ălkĩXçmĈ…ŀЂoÐdxÒuL^T{r@¢‘žÍƒĝKén£kQ™‰yšÅõËXŷƏL§~}kqš»IHėDžjĝŸ»ÑÞoŸå°qTt|r©ÏS‹¯·eŨĕx«È[eMˆ¿yuˆ‘pN~¹ÏyN£{©’—g‹ħWí»Í¾s“əšDž_ÃĀɗ±ą™ijĉʍŌŷ—S›É“A‹±åǥɋ@럣R©ąP©}ĹªƏj¹erƒLDĝ·{i«ƫC½ÉshVz…GS|úþX”gp›{ÁX¿Ÿć{ƱȏñZáĔyoÁhA™}ŅĆfdʼn„_¹„Y°ėǩÑ¡H¯¶oMQqð¡Ë™|‘Ñ`ƭŁX½·óۓxğįÅcQ‡ˆ“ƒs«tȋDžF“Ÿù^i‘t«Č¯[›hAi©á¥ÇĚ×l|¹y¯Kȝqgů{ñǙµï‚ċ™Ĺz—Śȭ¶¡˜›oŽäÕG\\ďT¿Òõr¯œŸLguÏYęRƩšɷŌO\\İТæ^Ŋ IJȶȆbÜGŽĝ¬¿ĚVĎgª^íu½jÿĕęjık@Ľƒ]ėl¥Ë‡ĭûÁ„ƒėéV©±ćn©­ȇžÍq¯½•YÃÔʼn“ÉNѝÅÝy¹NqáʅDǡËñ­ƁYÅy̱os§ȋµʽǘǏƬɱà‘ưN¢ƔÊuľýľώȪƺɂļžxœZĈ}ÌʼnŪ˜ĺœŽĭFЛĽ̅ȣͽÒŵìƩÇϋÿȮǡŏçƑůĕ~Ǎ›¼ȳÐUf†dIxÿ\\G ˆzâɏÙOº·pqy£†@ŒŠqþ@Ǟ˽IBäƣzsÂZ†ÁàĻdñ°ŕzéØűzșCìDȐĴĺf®ŽÀľưø@ɜÖÞKĊŇƄ§‚͑těï͡VAġÑÑ»d³öǍÝXĉĕÖ{þĉu¸ËʅğU̎éhɹƆ̗̮ȘNJ֥ड़ࡰţાíϲäʮW¬®ҌeרūȠkɬɻ̼ãüfƠSצɩςåȈHϚÎKdzͲOðÏȆƘ¼CϚǚ࢚˼ФԂ¤ƌžĞ̪Qʤ´¼mȠJˀŸƲÀɠmɆŠDŽĜƠ´ǠN~€ʢĜ‚¶ƌĆĘźʆȬ˪ĚĒ¸ĞGȖƴƀj`ĢçĶāàŃºēĢƒĖćšYŒÀŎüôQÐÂŎŞdžŞêƖš˜oˆDĤÕºÑǘÛˤ³̀gńƘĔÀ^žªƂ`ªt¾äƚêĦĀ¼Ð€Ĕǎ¨Ȕ»͠^ˮÊȦƤøxRrŜH¤¸ÂxDĝŒ|ø˂˜ƮÐ¬ɚwɲFjĔ²Äw°dždÀɞ_ĸdîàŎjʜêTЪŌ‡ŜWÈ|tqĢUB~´°ÎFC•ŽU¼pĀēƄN¦¾O¶ŠłKĊOj“Ě”j´ĜYp˜{¦„ˆSĚÍ\\Tš×ªV–÷Ší¨ÅDK°ßtŇĔKš¨ǵÂcḷ̌ĚǣȄĽF‡lġUĵœŇ‹ȣFʉɁƒMğįʏƶɷØŭOǽ«ƽū¹Ʊő̝Ȩ§ȞʘĖiɜɶʦ}¨֪ࠜ̀ƇǬ¹ǨE˦ĥªÔêFŽxúQ„Er´W„rh¤Ɛ \\talĈDJ˜Ü|[Pll̚¸ƎGú´Pž¬W¦†^¦–H]prR“n|or¾wLVnÇIujkmon£cX^Bh`¥V”„¦U¤¸}€xRj–[^xN[~ªŠxQ„‚[`ªHÆÂExx^wšN¶Ê˜|¨ì†˜€MrœdYp‚oRzNy˜ÀDs~€bcfÌ`L–¾n‹|¾T‚°c¨È¢a‚r¤–`[|òDŞĔöxElÖdH„ÀI`„Ď\\Àì~ƎR¼tf•¦^¢ķ¶e”ÐÚMŒptgj–„ɡČÅyġLû™ŇV®ŠÄÈƀ†Ď°P|ªVV†ªj–¬ĚÒêp¬–E|ŬÂ_~¼rƐK fˆ{ĘFĒœƌXưăkÃĄ}nµ–oŸ×q£ç­kX‘{uĩ«āíÓUŅÝVUŌ]€Ť¥lyň[€oi{¦‹L‡ĸ…Ħ^ôâJˆ¨^UZðڔĒL„¿Ì‹ˆfŒ£K£ʺ™oqNŸƒwğc`ue—tOj×°KJ±qƒÆġm‰Ěŗos¬…qehqsuœƒH{¸kH¡Š…ÊRǪÇƌbȆ¢´ä܍¢NìÉʖ¦â©Ɨؗ"]],"encodeOffsets":[[[128500,52752],[127089,51784]]]},"properties":{"cp":[111.670801,40.818311],"name":"内蒙古","childNum":2}},{"id":"210000","geometry":{"type":"MultiPolygon","coordinates":[["@@L–Ž@@s‘]","@@MnNm","@@d†c","@@eÀ‚C@b‚“‰","@@f‡…Xwkbr–Ä`qg","@@^jtWQ","@@~ Y[c","@@I`ĖN^_¿Z‚ÁM","@@Ïxnj{q_×^Gigp","@@iX¶B…Y","@@„Y…Z","@@L_yG`b","@@^WqCTZ","@@\\[“‹§t|”ž]","@@m`p[","@@@œé^B†‡ntˆaÊU—˜Ÿ]x ¯ÄPIJ­°h€ʙK³†VˆÕ@Y~†|EvĹsDŽ¦­L^p²ŸÒG ’Ël]„xxÄ_˜fT¤Ď¤cŽœP„–C¨¸TVjbgH²sdÎdHt`Bˆ—²¬GJję¶[ÐhjeXdlwhšðSȦªVÊπ‹Æ‘Z˜ÆŶ®²†^ŒÎyÅ‚Hœń“ĚDMħĜŁH­ˆk„çvV[ij¼W–‚YÀäĦ’‘`XlžR`žôLUVžfK–¢†{NZdĒª’YĸÌÚJRr¸SA|ƴgŴĴÆbvªØX~†źBŽ|¦ÕœEž¤Ð`\\|Kˆ˜UnnI]¤ÀÂĊnŎ™R®Ő¿¶\\ÀøíDm¦ÎbŨab‰œaĘ\\ľã‚¸a˜tÎSƐ´©v\\ÖÚÌǴ¤Â‡¨JKr€Z_Z€fjþhPkx€`Y”’RIŒjJcVf~sCN¤ ˆE‚œhæm‰–sHy¨SðÑÌ\\\\ŸĐRÊwS¥fqŒßýáЍÙÉÖ[^¯ǤŲ„ê´\\¦¬ĆPM¯£Ÿˆ»uïpùzEx€žanµyoluqe¦W^£ÊL}ñrkqWňûP™‰UP¡ôJŠoo·ŒU}£Œ„[·¨@XŒĸŸ“‹‹DXm­Ûݏº‡›GU‹CÁª½{íĂ^cj‡k“¶Ã[q¤“LÉö³cux«|Zdƒ²BWÇ®Yß½ve±ÃC•ý£W{Ú^’q^sÑ·¨‹ËMƒr“¹·C¥‡GD›rí@wÕKţ݋˜Ÿ«V·i}xËÍ÷‘i©ĝ‡ɝǡ]ƒˆ{c™±OW‹³Ya±Ÿ‰_穂Hžĕoƫ€Ňqƒr³‰Lys[„ñ³¯OS–ďOMisZ†±ÅFC¥Pq{‚Ã[Pg}\\—¿ghćO…•k^ĩÁXaĕËĥM­oEqqZûěʼn³F‘¦oĵ—hŸÕP{¯~TÍlª‰N‰ßY“Ð{Ps{ÃVU™™eĎwk±ʼnVÓ½ŽJãÇÇ»Jm°dhcÀff‘dF~ˆ€ĀeĖ€d`sx² šƒ®EĦ¦–šdQ‹Âd^~ăÔHˆ¦\\›LKpĄVez¤NP ǹӗR™ÆąJSh­a[¦´Âghwm€BÐ¨źhI|žVVŽ—Ž|p] Â¼èNä¶ÜBÖ¼“L`‚¼bØæŒKV”ŸpoœúNZÞÒKxpw|ÊEMnzEQšŽIZ”ŽZ‡NBˆčÚFÜçmĩ‚WĪñt‘ÞĵÇñZ«uD‚±|ƏlǗw·±PmÍa‰–da‡ CL‡Ǒkùó¡³Ï«QaċϑOÃ¥ÕđQȥċƭy‹³ÁA"]],"encodeOffsets":[[[123686,41445],[126019,40435],[124393,40128],[126117,39963],[125322,40140],[126686,40700],[126041,40374],[125584,40168],[125509,40217],[125453,40165],[125362,40214],[125280,40291],[125774,39997],[125976,40496],[125822,39993],[122731,40949]]]},"properties":{"cp":[123.429096,41.796767],"name":"辽宁","childNum":16}},{"id":"220000","geometry":{"type":"Polygon","coordinates":["@@ñr½ÉKāGÁ¤ia É‰™È¹`\\xs€¬dĆkNnuNUŒ–wœNx¶c¸‹|\\¢…ŒGªóĄ~RãÖÎĢù‚đŴÕhQŽxtcæëSɽʼníëlj£ƍG£nj°KƘµDsØÑpyƸ®¿bXp‚]vbÍZuĂ{nˆ^IüœÀSք”¦EŒvRÎûh@℈[‚Əȉô~FNr¯ôçR±ƒ­HÑl•’Ģ–^¤¢‚OðŸŽætxsŒ]ÞÁTĠs¶¿âƊGW¾ìA¦·TѬ†è¥€ÏÐJ¨¼ÒÖ¼ƒƦɄxÊ~S–tD@ŠĂ¼Ŵ¡jlºWžvЉˆzƦZЎ²CH— „Axiukd‹ŒGgetqmcžÛ£Ozy¥cE}|…¾cZ…k‚‰¿uŐã[oxGikfeäT@…šSUwpiÚFM©’£è^ڟ‚`@v¶eň†f h˜eP¶žt“äOlÔUgƒÞzŸU`lœ}ÔÆUvØ_Ō¬Öi^ĉi§²ÃŠB~¡Ĉ™ÚEgc|DC_Ȧm²rBx¼MÔ¦ŮdĨÃâYx‘ƘDVÇĺĿg¿cwÅ\\¹˜¥Yĭlœ¤žOv†šLjM_a W`zļMž·\\swqÝSA‡š—q‰Śij¯Š‘°kŠRē°wx^Đkǂғ„œž“œŽ„‹\\]˜nrĂ}²ĊŲÒøãh·M{yMzysěnĒġV·°“G³¼XÀ““™¤¹i´o¤ŃšŸÈ`̃DzÄUĞd\\i֚ŒˆmÈBĤÜɲDEh LG¾ƀľ{WaŒYÍȏĢĘÔRîĐj‹}Ǟ“ccj‡oUb½š{“h§Ǿ{K‹ƖµÎ÷žGĄØŜçưÌs«l›•yiē«‹`姝H¥Ae^§„GK}iã\\c]v©ģZ“mÃ|“[M}ģTɟĵ‘Â`À–çm‰‘FK¥ÚíÁbXš³ÌQґHof{‰]e€pt·GŋĜYünĎųVY^’˜ydõkÅZW„«WUa~U·Sb•wGçǑ‚“iW^q‹F‚“›uNĝ—·Ew„‹UtW·Ýďæ©PuqEzwAV•—XR‰ãQ`­©GŠY…Yhc•UGorBd}ģɇb¡·µMicF«—YƅŒ»…é\\ƒɹ~ǙG³mØ©BšuT§Ĥ½¢Ã_ý‘L¡‘ûŸsT\\rke™\\PnwAK‚y}’ywdS™efµ]UhĿD@mÿvašÙNSkCun…cÿ`l‚‰W‹„ėVâ¦÷~^fÏ~œvwHCŽį„`xqT­­ƒlW«ï¸skm‹‹ßEG“qd¯•‹R…©ÝŽ¯¯S†\\cZ¹iűƏCuƍÓX‡oR}“M^o•£…R}oªU­F…uuXHlEŕ‡€Ï©¤ßgXˆþ¤D–²ÄufàÀ­XXȱAc„{Yw¬dvõ´KÊ£”\\rµÄl”iˆdā]|DÂVŒœH¹ˆÞ®ÜWnŒC”Œķ W‹§@\\¸‹ƒ~¤‹Vp¸‰póIO¢ŠVOšŇürXql~òÉK]¤¥Xrfkvzpm¶bwyFoúvð‡¼¤ N°ąO¥«³[ƒéǣű]°Õ\\ÚÊĝŽôîŇÔaâŸBYlďQ[ Ë[ïÒ¥RI|‘`jž]P"],"encodeOffsets":[[126831,44503]]},"properties":{"cp":[125.3245,43.886841],"name":"吉林","childNum":1}},{"id":"230000","geometry":{"type":"MultiPolygon","coordinates":[["@@UƒµNÿ¥īè灋•HÍøƕ¶LŒǽ|g¨|”™Ža¾pViˆdd”~ÈiŒíďÓQġėǐZ΋ŽXb½|ſÃH½ŸKFgɱCģÛÇA‡n™‹jÕc[VĝDZÃ˄Ç_™ £ń³pŽj£º”š¿”»WH´¯”U¸đĢmžtĜyzzNN|g¸÷äűѱĉā~mq^—Œ[ƒ”››”ƒǁÑďlw]¯xQĔ‰¯l‰’€°řĴrŠ™˜BˆÞTxr[tŽ¸ĻN_yŸX`biN™Ku…P›£k‚ZĮ—¦[ºxÆÀdhŽĹŀUÈƗCw’áZħÄŭcÓ¥»NAw±qȥnD`{ChdÙFćš}¢‰A±Äj¨]ĊÕjŋ«×`VuÓś~_kŷVÝyh„“VkÄãPs”Oµ—fŸge‚Ň…µf@u_Ù ÙcŸªNªÙEojVx™T@†ãSefjlwH\\pŏäÀvŠŽlY†½d{†F~¦dyz¤PÜndsrhf‹HcŒvlwjFœ£G˜±DύƥY‡yϊu¹XikĿ¦ÏqƗǀOŜ¨LI|FRĂn sª|Cš˜zxAè¥bœfudTrFWÁ¹Am|˜ĔĕsķÆF‡´Nš‰}ć…UŠÕ@Áijſmužç’uð^ÊýowŒFzØÎĕNőžǏȎôªÌŒDŽàĀÄ˄ĞŀƒʀĀƘŸˮȬƬĊ°ƒUŸzou‡xe]}Ž…AyȑW¯ÌmK‡“Q]‹Īºif¸ÄX|sZt|½ÚUΠlkš^p{f¤lˆºlÆW –€A²˜PVܜPH”Êâ]ÎĈÌÜk´\\@qàsĔÄQºpRij¼èi†`¶—„bXƒrBgxfv»ŽuUiˆŒ^v~”J¬mVp´£Œ´VWrnP½ì¢BX‚¬h™ŠðX¹^TjVœŠriªj™tŊÄm€tPGx¸bgRšŽsT`ZozÆO]’ÒFô҆Oƒ‡ŊŒvŞ”p’cGŒêŠsx´DR–Œ{A†„EOr°Œ•žx|íœbˆ³Wm~DVjºéNN†Ëܲɶ­GƒxŷCStŸ}]ûō•SmtuÇÃĕN•™āg»šíT«u}ç½BĵÞʣ¥ëÊ¡Mێ³ãȅ¡ƋaǩÈÉQ‰†G¢·lG|›„tvgrrf«†ptęŘnŠÅĢr„I²¯LiØsPf˜_vĠd„xM prʹšL¤‹¤‡eˌƒÀđK“žïÙVY§]I‡óáĥ]ķ†Kˆ¥Œj|pŇ\\kzţ¦šnņäÔVĂîĪ¬|vW’®l¤èØr‚˜•xm¶ă~lÄƯĄ̈́öȄEÔ¤ØQĄ–Ą»ƢjȦOǺ¨ìSŖÆƬy”Qœv`–cwƒZSÌ®ü±DŽ]ŀç¬B¬©ńzƺŷɄeeOĨS’Œfm Ċ‚ƀP̎ēz©Ċ‚ÄÕÊmgŸÇsJ¥ƔˆŊśæ’΁Ñqv¿íUOµª‰ÂnĦÁ_½ä@ê텣P}Ġ[@gġ}g“ɊדûÏWXá¢užƻÌsNͽƎÁ§č՛AēeL³àydl›¦ĘVçŁpśdžĽĺſʃQíÜçÛġԏsĕ¬—Ǹ¯YßċġHµ ¡eå`ļƒrĉŘóƢFì“ĎWøxÊk†”ƈdƬv|–I|·©NqńRŀƒ¤é”eŊœŀ›ˆàŀU²ŕƀB‚Q£Ď}L¹Îk@©ĈuǰųǨ”Ú§ƈnTËÇéƟÊcfčŤ^Xm‡—HĊĕË«W·ċëx³ǔķÐċJā‚wİ_ĸ˜Ȁ^ôWr­°oú¬Ħ…ŨK~”ȰCĐ´Ƕ£’fNÎèâw¢XnŮeÂÆĶŽ¾¾xäLĴĘlļO¤ÒĨA¢Êɚ¨®‚ØCÔ ŬGƠ”ƦYĜ‡ĘÜƬDJ—g_ͥœ@čŅĻA“¶¯@wÎqC½Ĉ»NŸăëK™ďÍQ“Ùƫ[«Ãí•gßÔÇOÝáW‘ñuZ“¯ĥ€Ÿŕā¡ÑķJu¤E Ÿå¯°WKɱ_d_}}vyŸõu¬ï¹ÓU±½@gÏ¿rýD‰†g…Cd‰µ—°MFYxw¿CG£‹Rƛ½Õ{]L§{qqąš¿BÇƻğëšܭNJË|c²}Fµ}›ÙRsÓpg±ŠQNqǫŋRwŕnéÑÉKŸ†«SeYR…ŋ‹@{¤SJ}šD Ûǖ֍Ÿ]gr¡µŷjqWÛham³~S«“„›Ü[","@@ƨƒĶTLÇyqpÇÛqe{~oyen}s‰`q‡iXG”ù]Ëp½“©lɇÁp]Þñ´FÔ^f‘äîºkà˜z¼BUv¬D"]],"encodeOffsets":[[[134456,44547],[127123,51780]]]},"properties":{"cp":[126.642464,45.756967],"name":"黑龙江","childNum":2}},{"id":"320000","geometry":{"type":"Polygon","coordinates":["@@Õg^vÁbnÀ‹`Jnĝ¬ŽòM¶ĘšTÖŒb‚˜e¦¦€{¸ZâćNpŒ©žHp|`ˆmjhŠSEb\\afv`sz^lkŽlj‹Ätg‹¤D˜­¾Xš¿À’|ДiZ„ȀåB·î}GL¢õcßjaŸyBFµÏC^ĭ•cÙt¿sğH]j{s©HM¢ƒQnDÀ©DaÜތ·jgàiDbPufjDk`dPOîƒhw¡ĥ‡¥šG˜ŸP²ĐobºrY†„î¶aHŢ´ ]´‚rılw³r_{£DB_Ûdåuk|ˆŨ¯F Cºyr{XFy™e³Þċ‡¿Â™kĭB¿„MvÛpm`rÚã”@Ę¹hågËÖƿxnlč¶Åì½Ot¾dJlŠVJʜǀœŞqvnOŠ^ŸJ”Z‘ż·Q}ê͎ÅmµÒ]Žƍ¦Dq}¬R^èĂ´ŀĻĊIԒtžIJyQŐĠMNtœR®òLh‰›Ěs©»œ}OӌGZz¶A\\jĨFˆäOĤ˜HYš†JvÞHNiÜaϚɖnFQlšNM¤ˆB´ĄNöɂtp–ŬdZÅgl•muÇUšŽ“އÚb¤uŃJŴu»¹Ą•lȖħŴw̌ŵ²ǹǠ͛hĭłƕrçü±Y™rřl¥’i`ã__¢ćSÅr[Çq^ùzWmOĈaŐÝɞï²ʯʊáĘijĒǭPħ͍ôƋĝÄ͎ī‰çÛɈǥ£­ÛmY`ó£Z«§°Ó³QafusNıDž_k}¢m[ÝóDµ—¡RLčiXy‡ÅNïă¡¸iĔϑNÌķoıdōîåŤûHcs}~Ûwbù¹£¦ÓCt‹OPrƒE^ÒoŠg™ĉIµžÛÅʹK…¤½phMˆú`m”R¸¦Pƚg†ÉLRŠs`£¯ãhD„¨|³¤‰C"],"encodeOffsets":[[121451,32518]]},"properties":{"cp":[118.767413,32.041544],"name":"江苏","childNum":1}},{"id":"330000","geometry":{"type":"MultiPolygon","coordinates":[["@@jX^n…","@@sfˆdM‰","@@qP\\xz[_i","@@o\\V’zRZ}mECy","@@‘Rƒ¢‚FX}°[m]","@@Cbœ\\•}","@@e|v\\laus","@@v~s{","@@QxÂF©}","@@¹nŒvÞs©m","@@rQgYIh","@@bi«Z„X","@@p[}ILd","@@À¿|","@@¹dnb’…","@@rS}[Kl","@@g~h}","@@FlCk","@@ůTG°ĄLHm°UF‰","@@OdRe","@@v[u\\","@@FjâL~wyoo~›sµLŒZ","@@¬e¹aH‚","@@\\nÔ¡q]L³ë\\ÿ®ŒQ̆","@@ÊA­©]ª","@@KxŒv{­","@@@hlIk_","@@pWc‡rxp","@@Md|_iA","@@¢…X£½z\\ðpN","@@hlÜ[LykAvyfw^Ež ","@@fp¤MusH","@@®_ma~•LÁ¬’`","@@†@°¡mۛGĕ¨§Ianá[ýƤjfæ‡ÐNž—äGp—","@@iM„t\\","@@Zc[b","@@™X®±GrÆ°Zæĉm","@@Z~dOSo|A¿qZv","@@@`”EN£p","@@|–s—","@@@nDi","@@n…a£¾u‰YL¯‰Qª…mĉÅdMˆ•gÇjcº«•ęœ¬­K­´ƒB«Âącoċ\\xK`cįŧ«®á’[~ıxu·Å”KsËɏc¢Ù\\ĭƛëbf¹­ģSƒĜkáƉÔ­ĈZB{ŠaM‘µ‰fzʼnfÓÔŹŁƋǝÊĉ{ğč±g³ne{ç­ií´S¬‚\\ßðK¦w\\™iqªĭiAu‡A­µ”_W¥ƣO\\lċĢttC¨£t`ˆ™PZäuXßBs‡Ļyek€OđġĵHuXBšµ]׌‡­­\\›°®¬F¢¾pµ¼kŘó¬Wät’¸|@ž•L¨¸µr“ºù³Ù~§WI‹ŸZWŽ®’±Ð¨ÒÉx€`‰²pĜ•rOògtÁZ{üÙ[|˜ûŒK‚wsPlU[}¦Rvn`hsª^–nQ´ĘRWb”‚_ rtČFI֊kŠŠĦPJ¶ÖÀÖJĈĄTĚòžC ²@Pú…Øzœ©PœCÈڜĒ±„hŖ‡l¬â~nm¨f©–iļ«m‡nt–qŒÒTÜÄj“ŠLŽ®E̜Fª²iÊxبžIÈhhst’ˆ’[Ôx†}dtüGæţŔïĬaĸpMËВjē¢·ðĄÆMzˆjWKĎ¢Q¶˜À_꒖_@ı€i«pZ€gf€¤Nrq]§ĂN®«H±‡yƳí¾×ŊďŀĐÏŴǝĂíÀBŖÕªˆŠÁŐTFqĉ¯³ËCĕģi¨hÜ·ƒñt»¯Ï","@@ºwšZRkĕWK "]],"encodeOffsets":[[[125785,31436],[125729,31431],[125513,31380],[125329,30690],[125223,30438],[125115,30114],[124815,29155],[124419,28746],[124095,28635],[124005,28609],[125000,30713],[125111,30698],[125078,30682],[125150,30684],[124014,28103],[125008,31331],[125411,31468],[125329,31479],[125369,31139],[125626,30916],[125417,30956],[125254,30976],[125199,30997],[125095,31058],[125083,30915],[124885,31015],[125218,30798],[124867,30838],[124755,30788],[124802,30809],[125267,30657],[125218,30578],[125200,30562],[125192,30787],[124968,30474],[125167,30396],[125115,30363],[124955,29879],[124714,29781],[124762,29462],[124325,28754],[124863,30077],[125366,31477]]]},"properties":{"cp":[120.153576,30.287459],"name":"浙江","childNum":43}},{"id":"340000","geometry":{"type":"MultiPolygon","coordinates":[["@@^iuLV\\","@@‚e©Edh","@@´CE¶zAXœêeödK¡~H¸íæAˆȽ—d{ďő“À½W—®£ChŒÃsiŒkkly]_teu[bFa‰Tig‡n{]Gqªo‹ĈMYá|·¥f¥—őaSÕė™NµñĞ«ImŒ_m¿Âa]uĜp …Z_§{Cƒäg¤°r[_Yj‰ÆOdý“[ŽI[á·¥“Q_n‡ùgL¾mz›ˆDÜƶĊJhšp“c¹˜O]iŠ]œ¥ jtsggDÑ¡“w×jÉ©±›EFˍ­‰Ki”ÛÃÕYv…s•ˆm¬njĻª•§emná}k«ŕˆƒgđ²Ù›DǤ›í¡ªOy›†×Où±@DŸñSęćăÕIÕ¿IµĥO‰‰‰lJÕÍR›Í|JìĻÒåyķrĕq§ÄĩsWÆߎF¶žX®¿‰mŒ™w…RIޓfßoG‘³¾©uyH‘į{Ɓħ¯AFnuP…ÍÔzšŒV—dàôº^Ðæd´€‡oG¤{S‰¬ćxã}›ŧ×Kǥĩ«žÕOEзÖdÖsƘѨ[’Û^Xr¢¼˜§xvěƵ`K”§ tÒ´Cvlo¸fzŨð¾NY´ı~ÉĔē…ßúLÃϖ_ÈÏ|]ÂÏHl’g`bšežž€n¾¢pU‚h~ƴĖ¶_‚r sĄ~cž”ƈ]|r c~`¼{À{ȒiJjz`îÀT¥Û³…]’u}›f…ïQl{skl“oNdŸjŸäËzDvčoQŠďHI¦rb“rHĖ~BmlNž“Ra„ĥTX\\{fÁKÁ®T‚œL‘ŠĄMt›ÊgĀD–ŠĄXœƔvDcÎJbt[¤€D@®hh~kt°ǾzÖ@¾ªdb„YhüóV´ŮŒ¨Üc”±r@J|àuYÇԋG·ĚąĐlŪÚpSJ¨ĸˆLvÞcPæķŨŽ®mАˆál‹sgd×mQ¨ųƩޖ¤IΖs’°ŒKZpĄ|XwWdĎµmkǀwÌÕæhºgBĝâqÙĊz›ÖgņtÀÁÊÆá’hEz|WzqD¹€Ÿ°E‡ŧl{ævÜcA`¤C`|´qžxIJkq^³³ŸGšµbƒíZ…¹qpa±ď OH—¦™Ħˆx¢„gPícOl_iCveaOjCh߸i݋bÛªCC¿€m„RV§¢A|tbkĜEÀtîm‚^g´fÄ"]],"encodeOffsets":[[[121722,32278],[119475,30423],[121606,33646]]]},"properties":{"cp":[117.283042,31.86119],"name":"安徽","childNum":3}},{"id":"350000","geometry":{"type":"MultiPolygon","coordinates":[["@@“zht´}[","@@aj^~ĆGå","@@edœŒH…se","@@@vˆPGsyQ","@@‰sBz‚ddW[O","@@SŽ¨Qy","@@NŽVucW","@@qptB@q","@@‰’¸[iu","@@Q\\pD[_","@@jSwUappI","@@eXª~•","@@AjvFoo","@@fT–›_Çí\\Ÿ™—v|ba¦jZÆy|®","@@IjLg","@@wJI€ˆxš«¼AoNe{M¥Œ","@@K‰±¡Óˆ”Č~N¾™","@@k¡¹Eh~c®uDq‰Zì¡I•~Māe£bN¨gZý¡a±Öcp©PhžI”Ÿ¢Qq…ÇGj‹|¥U™ g[Ky¬ŏ–v@OpˆtÉEŸF„\\@ åA¬ˆV{Xģ‰ĐBy…cpě…¼³Ăp·¤ƒ¥o“hqqÚ¡ŅLsƒ^ᗞ§qlŸÀhH¨MCe»åÇGD¥zPO£čÙkJA¼ß–ėu›ĕeûҍiÁŧS[¡œUŠûŗ½ùěcݧSùĩąSWó«íęACµ›eR—åǃRCÒÇZÍ¢‹ź±^dlsŒtjD¸•‚ZpužÔâÒH¾oLUêÃÔjjēò´ĄW‚ƛ…^Ñ¥‹ĦŸ@Çò–ŠmŒƒOw¡õyJ†yD}¢ďÑÈġfŠZd–a©º²z£šN–ƒjD°Ötj¶¬ZSÎ~¾c°¶Ðm˜x‚O¸¢Pl´žSL|¥žA†ȪĖM’ņIJg®áIJČĒü` ŽQF‡¬h|ÓJ@zµ |ê³È ¸UÖŬŬÀCtrĸr‚]€˜ðŽM¤ĶIJHtÏ A’†žĬkvsq‡^aÎbvŒd–™fÊòSD€´Z^’xPsÞrv‹ƞŀ˜jJd×ŘÉ ®A–ΦĤd€xĆqAŒ†ZR”ÀMźŒnĊ»ŒİÐZ— YX–æJŠyĊ²ˆ·¶q§·–K@·{s‘Xãô«lŗ¶»o½E¡­«¢±¨Yˆ®Ø‹¶^A™vWĶGĒĢžPlzfˆļŽtàAvWYãšO_‡¤sD§ssČġ[kƤPX¦Ž`¶“ž®ˆBBvĪjv©šjx[L¥àï[F…¼ÍË»ğV`«•Ip™}ccÅĥZE‹ãoP…´B@ŠD—¸m±“z«Ƴ—¿å³BRضˆœWlâþäą`“]Z£Tc— ĹGµ¶H™m@_©—kŒ‰¾xĨ‡ôȉðX«½đCIbćqK³Á‹Äš¬OAwã»aLʼn‡ËĥW[“ÂGI—ÂNxij¤D¢ŽîĎÎB§°_JœGsƒ¥E@…¤uć…P‘å†cuMuw¢BI¿‡]zG¹guĮI‹"]],"encodeOffsets":[[[123250,27563],[122541,27268],[123020,27189],[122916,27125],[122887,26845],[122808,26762],[122568,25912],[122778,26197],[122515,26757],[122816,26587],[123388,27005],[122450,26243],[122578,25962],[121255,25103],[120987,24903],[122339,25802],[121042,25093],[122439,26024]]]},"properties":{"cp":[119.306239,26.075302],"name":"福建","childNum":18}},{"id":"360000","geometry":{"type":"Polygon","coordinates":["@@ÖP¬ǦĪØLœŨä~ĈwŠ«|TH£ˆp€c³Ïå¹]ĉđxe{ÎӐ†vOEm°BƂĨİ|G’vz½ª´€H’àp”eJ݆Qšxn‹ÀŠW­žEµàXÅĪt¨ÃĖrÄwÀFÎ|Ă¡”‡WÕ¸cf¥—‘XaęST±m[“r«_gŽmQu~¥V\\OkxtL E¢‹ƒ‘Ú^~ýØkbē–qo슱_Êw§Ñ²ÏƟė¼‹mĉŹ‹¿NQ“…YB‹ąrwģcÍ¥B•Ÿ­ŗÊcØiI—žƝĿuŒqtāwO]‘³YCñTeɕš‹caub͈]trlu€ī…B‘ПGsĵıN£ï—^ķqsq¿DūūV՟·´Ç{éĈý‰ÿ›OEˆR_ŸđûIċâJh­ŅıN‘ȩĕB…¦K{Tk³¡OP·wn—µÏd¯}½TÍ«YiµÕsC¯„iM•¤™­•¦¯P|ÿUHv“he¥oFTu‰õ\\ŽOSs‹MòđƇiaºćXŸĊĵà·çhƃ÷ǜ{‘ígu^›đg’m[ÙxiIN‘¶Õ»lđÕwZSƉv©_ÈëJbVk„ĔVÀ¤P¾ºÈMÖxlò~ªÚàGĂ¢B„±’ÌŒK˜y’ñ`w²¹€·Ÿ…`g›ŸsÙfI›ěxŕeykpŽŒudjˆuTfb·hh„¿JdŠ[\\˜„L‚áƔĨƐAĈepˆÀÂMD~ņªe^\\^§„ý©j׍cZ†Ø¨zdÒa¶ˆlҍJŒìõ`oz÷@¤u޸´†ôęöY¼‰HČƶajlÞƩ¥éZ[”|h}^U Œ ¥p„ĄžƦO lt¸Æ €Q\\€ŠaÆ|CnÂOjt­ĚĤd’ÈŒF`’¶„@Ð딠¦ōҞ¨Sêv†HĢÛ@[ƅQoxHŒ—W[ŰîÀt¦DŽ~NĠ¢l–•ĄtZoœCƞÔºCxrpČN˜pj¢{f_Y`_ƒeq’’®Aot`@o‚DXfkp¨|Šs¬\\D‘ÄSfè©Hn¬…^DhÆyøJh“ØxĢĀLʈ„ƠPżċĄwĮ”¶ž"],"encodeOffsets":[[118923,30536]]},"properties":{"cp":[115.892151,28.676493],"name":"江西","childNum":1}},{"id":"370000","geometry":{"type":"MultiPolygon","coordinates":[["@@Xjd]mE","@@itnq","@@Dl@k","@@T‚ŒG—w","@@K¬˜•‰U","@@Wd`c","@@PtMs","@@•LnXlc","@@ppVƒu]Qn","@@cdzAU_","@@udRhnCE…","@@ˆoIƒpP„","@@M{Ŀčwbxƨî’Kš–ÎMĮ]†—ZFˆ½Y]â£ph’™š¶¨râøÀ†ÎǨ¤^ºÄ”Gzˆ~grĚĜlĞƄLĆdž¢Îo¦–cv“Kb€gr°Wh”mZp ˆL]LºcU‰Æ­n”żĤÌĒœbAnrOAœ´žȊcÀbƦUØrĆUÜøœĬƞ†ŶǬĴóò_A̈«ªdÎɜnb²ĦhņBĖ›žįĦåXćì@L¯´ywƕCéõė ƿ¸‘lµ‚Zæyj|BíÂKN„NnoƈfÈMZwšnŐNàúĂsT„JUš›‚L„îVj„ǎ¾Ē؍‚Dz²XPn±ŴPè¸ŔLƔÜƺ_T‘üÃĤBBċȉöA´fa„˜M¨{«M`‡¶d¡ô‰Ö°šmȰBÔjjŒ´PM|”c^d¤u•ƒ¤Û´Œä«ƢfPk¶Môlˆ]Lb„}su^ke{lC‘…M•rDŠÇ­]NÑFsmoõľH‰yGă{{çrnÓE‰‹ƕZGª¹Fj¢ÿ©}ÌCǷ돡ąuhÛ¡^Kx•C`C\\bÅxì²ĝÝ¿_N‰īCȽĿåB¥¢·IŖÕy\\‡¹kx‡Ã£ČáKµË¤ÁçFQ¡„KtŵƋ]CgÏAùSed‡cÚź—ŠuYfƒyMmhUWpSyGwMPqŀ—›Á¼zK›¶†G•­Y§Ëƒ@–´śÇµƕBmœ@Io‚g——Z¯u‹TMx}C‘‰VK‚ï{éƵP—™_K«™pÛÙqċtkkù]gŽ‹Tğwo•ɁsMõ³ă‡AN£™MRkmEʕč™ÛbMjÝGu…IZ™—GPģ‡ãħE[iµBEuŸDPԛ~ª¼ętŠœ]ŒûG§€¡QMsğNPŏįzs£Ug{đJĿļā³]ç«Qr~¥CƎÑ^n¶ÆéÎR~Ż¸Y’I“] P‰umŝrƿ›‰›Iā‹[x‰edz‹L‘¯v¯s¬ÁY…~}…ťuŁŒg›ƋpÝĄ_ņī¶ÏSR´ÁP~ž¿Cyžċßdwk´Ss•X|t‰`Ä Èð€AªìÎT°¦Dd–€a^lĎDĶÚY°Ž`ĪŴǒˆ”àŠv\\ebŒZH„ŖR¬ŢƱùęO•ÑM­³Fۃaj"]],"encodeOffsets":[[[123806,39303],[123821,39266],[123742,39256],[123702,39203],[123649,39066],[123847,38933],[123580,38839],[123894,37288],[123043,36624],[123344,38676],[123522,38857],[123628,38858],[118267,36772]]]},"properties":{"cp":[117.000923,36.675807],"name":"山东","childNum":13}},{"id":"410000","geometry":{"type":"MultiPolygon","coordinates":[["@@dXD}~Hgq~ÔNŽ‹„~zkĘHVsDzßjƒŬŒŠŢ`Pûàl¢˜\\ÀœEhŽİgÞē X¼`kš„h•ÍL™ùµP³swIÓzeŠĠð†´E®žÚPt†ºIŊ–ʺ˜L«šŕQGƒ‹Yfa[şu“ßǑ‡ĩų_Z¯ĵÙčC]kbc•¥CS¯ëÍB©ïŽÇߊ_{s–WTtž³xlàcȂzÀD}ÂOQ³ÐTĬµ‚ƑпŸghœł‹Ŧv~††}ÂZž«¤lPǕ£ªÝŴÅR§ØnhcŒtâk‡nύ­ľŹUÓÝdKuķ‡I§oTũÙďkęĆH¸ÓŒ\\ăŒ¿PcnS{wBIvɘĽ[GqµuŸŇôYgûƒZcaŽ©@½Õǽys¯}lgg@­C\\£as€IdÍuCQñ[L±ęk·‹ţb¨©kK—’»›KC²‘òGKmĨS`ƒ˜UQ™nk}AGē”sqaJ¥ĐGR‰ĎpCuÌy ã iMc”plk|tRk†ðœev~^‘´†¦ÜŽSí¿_iyjI|ȑ|¿_»d}qŸ^{“Ƈdă}Ÿtqµ`ŷ飩V¡om½ZÙϋÁRD|JOÈpÀ—Rs’•I{ùÓjuµ{t}uËR‘iŸvGŠçJFjµŠåkWꖴMƒHewixGw½Yŷpµú³XU›½ġy™łå‰kÚwZXˆ·l„¢Á¢K”zO„Λ΀jc¼htoDHr…|­J“½}JZ_¯iPq{tę½ĕ¦Zpĵø«kQ…Ťƒ]MÛfaQpě±ǽ¾]u­Fu‹÷nƒ™čįADp}AjmcEǒaª³o³ÆÍSƇĈÙDIzçƒñİŸ^ˆKNœ™i—Þñ€[œƒaA²zz‰Ì÷Dœ|[šíijgf‚ÕÞd®|`ƒĆ~„oĠƑô³Ŋ‘D×°¯Csˆø«ì‰UMhTº¨¸ǝêWšÔ„DruÂÇZ£Ćš”PZ„žW”~؋Øv¬gèÂÒw¦X¤Ā´oŬ¬Ž²Ês~€€]®tªašpŎJ¨Öº„_ŠŔ–f”Ő\\Ѝ\\Ĝu–”~m²Ƹ›¸fW‰ĦrƔ}Î^gjdfÔ¡J}\\n C˜¦þWxªJRÔŠu¬ĨĨmF†dM{\\d\\ŠYÊ¢ú@@¦ª²SŠÜsC–}fNècbpRmlØ^g„d¢aÒ¢CZˆZxvÆ¶N¿’¢T@€uCœ¬^ĊðÄn|žlIlŽ—Xhun€[","@@hzUq"]],"encodeOffsets":[[[116744,37216],[116480,33048]]]},"properties":{"cp":[113.665412,34.757975],"name":"河南","childNum":2}},{"id":"420000","geometry":{"type":"MultiPolygon","coordinates":[["@@ASd","@@ls{d","@@¾«}{ra®pîÃ\\™›{øCŠËyyB±„b\\›ò˜Ý˜jK›‡L ]ĎĽÌ’JyÚCƈćÎT´Å´pb©È‘dFin~BCo°BĎĚømvŒ®E^vǾ½Ĝ²Ro‚bÜeNŽ„^ĺ£R†¬lĶ÷YoĖ¥Ě¾|sOr°jY`~I”¾®I†{GqpCgyl{‡£œÍƒÍyPL“¡ƒ¡¸kW‡xYlÙ抚ŁĢzœ¾žV´W¶ùŸo¾ZHxjwfx„GNÁ•³Xéæl¶‰EièIH‰ u’jÌQ~v|sv¶Ôi|ú¢Fh˜Qsğ¦ƒSiŠBg™ÐE^ÁÐ{–čnOÂȞUÎóĔ†ÊēIJ}Z³½Mŧïeyp·uk³DsѨŸL“¶_œÅuèw»—€¡WqÜ]\\‘Ò§tƗcÕ¸ÕFÏǝĉăxŻČƟO‡ƒKÉġÿ×wg”÷IÅzCg†]m«ªGeçÃTC’«[‰t§{loWeC@ps_Bp‘­r‘„f_``Z|ei¡—oċMqow€¹DƝӛDYpûs•–‹Ykıǃ}s¥ç³[§ŸcYŠ§HK„«Qy‰]¢“wwö€¸ïx¼ņ¾Xv®ÇÀµRĠЋžHMž±cÏd„ƒǍũȅȷ±DSyúĝ£ŤĀàtÖÿï[îb\\}pĭÉI±Ñy…¿³x¯N‰o‰|¹H™ÏÛm‹júË~Tš•u˜ęjCöAwě¬R’đl¯ Ñb­‰ŇT†Ŀ_[Œ‘IčĄʿnM¦ğ\\É[T·™k¹œ©oĕ@A¾w•ya¥Y\\¥Âaz¯ãÁ¡k¥ne£Ûw†E©Êō¶˓uoj_Uƒ¡cF¹­[Wv“P©w—huÕyBF“ƒ`R‹qJUw\\i¡{jŸŸEPïÿ½fć…QÑÀQ{ž‚°‡fLԁ~wXg—ītêݾ–ĺ‘Hdˆ³fJd]‹HJ²…E€ƒoU¥†HhwQsƐ»Xmg±çve›]Dm͂PˆoCc¾‹_h”–høYrŊU¶eD°Č_N~øĹĚ·`z’]Äþp¼…äÌQŒv\\rCŒé¾TnkžŐڀÜa‡“¼ÝƆĢ¶Ûo…d…ĔňТJq’Pb ¾|JŒ¾fXŠƐîĨ_Z¯À}úƲ‹N_ĒĊ^„‘ĈaŐyp»CÇĕKŠšñL³ŠġMŒ²wrIÒŭxjb[œžn«øœ˜—æˆàƒ ^²­h¯Ú€ŐªÞ¸€Y²ĒVø}Ā^İ™´‚LŠÚm„¥ÀJÞ{JVŒųÞŃx×sxxƈē ģMř–ÚðòIf–Ċ“Œ\\Ʈ±ŒdʧĘD†vČ_Àæ~DŒċ´A®µ†¨ØLV¦êHÒ¤"]],"encodeOffsets":[[[113712,34000],[115612,30507],[113649,34054]]]},"properties":{"cp":[114.298572,30.584355],"name":"湖北","childNum":3}},{"id":"430000","geometry":{"type":"MultiPolygon","coordinates":[["@@—n„FZw","@@かÆችÔXr—†CO™“…ËR‘ïÿĩ­TooQyšÓ[‹ŅBE¬–ÎÓXa„į§Ã¸G °ITxp‰úxÚij¥Ïš–Ģ¾ŠedžÄ©ĸG…œàGh‚€M¤–Â_U}Ċ}¢pczfŠþg¤€’ÇôAV‘","@@ȴÚŠĖÁĐiO“Ĝ«BxDõĚiv—ž–S™Ì}iùŒžÜnšÐºGŠ{Šp°M°yŠÂÒzJ²Ì ÂcXëöüiáÿñŽőФ‚ùTz²CȆȸǎŪƒƑÐc°dPÎŸğ˶[Ƚu¯½WM¡­Éž“’B·rížnZŸÒ `‡¨GA¾\\pē˜XhÆRC­üWGġu…T靧Ŏѝ©êL•M³}_‘‹E‘Çģc®ęisÁPDmÅ{‰b[Rşs·€kPŸŽƥƒóRo”O‹ŸVŸ~]{g\\“êYƪ¦kÝbiċƵŠGZ»Ěõ…ó·³vŝž£ø@pyö_‹ëŽIkѵ‡bcѧy…×dY؎ªiþžˆUjŸŅ³C}ÁN‡»hĻħƏâƓK—ƒA·³CQ±µ§¿AUŠƑ¹AŠtćOw™D]ŒJUÖgk¯b£‘ylƒ›ZƒFËѱH™­}˜•EbóľA–¡»Ku¦·‘³†åş¥ùBDž^{ÌC´­¦ŷJ£^[†‹—ª¿‡ğ|‹ƅ…•N… skóā‡¹¿€ï]ă~÷O§­@—Vm¡‹Qđ¦¢Ĥ{ºjԏŽŒª¥nf´•~ÕoŸž×Ûą‹Gû¥cÑ[Zœ‰¶˜ŨĪ²SÊǔƐ˜ƀƒ’AÚŌ¦QؼrŭŽ­«}NÏürʬŒmjr€@ĘrTW ­SsdHzƓ^ÇÂyUi¯DÅYlŹu{hTœ}mĉ–¹¥ě‰Dÿë©ıÓ[Oº£ž“¥ót€ł¹MՄžƪƒ`Pš…Di–ÛUŠ¾Å‌ìˆU’ñB“È£ýhe‰dy¡oċ€`pfmjP~‚kZa…ZsÐd°wj§ƒ@€Ĵ®w~^‚kÀÅKvNmX\\¨a“”сqvíó¿F„¤¡@ũÑVw}S@j}¾«pĂr–ªg àÀ²NJ¶¶Dô…K‚|^ª†Ž°LX¾ŴäPĪ±œ£EXd›”^¶›IJÞܓ~‘u¸ǔ˜Ž›MRhsR…e†`ÄofIÔ\\Ø  i”ćymnú¨cj ¢»–GČìƊÿШXeĈĀ¾Oð Fi ¢|[jVxrIQŒ„_E”zAN¦zLU`œcªx”OTu RLĪpUžĪ‚ȴ^ŎµªÉžFx…Ü€f¤ºgIJèy°Áb[¦Zb¦–z½xBĖ@ªpº›˜jS´rVźOd©ʪiĎă’JP‡ž`"]],"encodeOffsets":[[[115640,30489],[112577,27316],[114113,30649]]]},"properties":{"cp":[112.982279,28.19409],"name":"湖南","childNum":3}},{"id":"440000","geometry":{"type":"MultiPolygon","coordinates":[["@@QdˆAsa","@@ƒlxDRm","@@sbhNLo","@@Ă ý","@@WltOY[","@@Krœ]‰S","@@e„~AS}","@@I|„Mym","@@ƒÛ³LSŒž²Q","@@nvºB–ë¥cÕº","@@zdšÛ›JmŠ","@@†°³","@@a yAª¸ËJIx،@€ĀHÉÕZ™o•fo…o","@@šs‰ŗÃÔėAƁ›ZšÄ ~°ČP‚‹ºb","@@‹¶Ý’Ì‚vmĞh¹Ĺ","@@HœŠdSjĒ¢D}war…“u«ZqadY{K","@@elŒ\\LqqO","@@~rMmX","@@f„^E","@@øPªoj÷ÍÝħXČx”°Q¨ıXJp","@@gÇƳˆˆ–m’Žxa†tfu","@@E–ÆC½‘","@@¸B_¶ekWvSi‡vc•}p}Ăº¾NĎyj¦Èm thœ†_®žÄ}ˆ»âUzL™Ë‹²‘Aƒā¡ßH©Ùñ}wkNÕ¹ÇO½¿£ēUlƒaUìIžÇª`ŠuTÅxYĒÖ¼k֞’µ‚MžjJÚwn\\h‘œĒv]îh|’È›Ƅøègž¸Ķß ĉĈWb¹ƀdéʌNTtP[ŠöSvrCZžžaGuœbo´ŖÒÇА~¡zCI…özx¢„Pn‹•‰Èñ @ŒĥÒ¦†]ƜŽX³ăĔñiiÄÓVépKG½Ä‘ÓávYo–C·sit‹iaÀy„ŧΡÈYDÑům}‰ý|m[węõĉZÅxUO}÷N¹³ĉo_qtă“qwµŁYلǝŕ¹tïÛUïmRCº…ˆĭ|µ›ÕÊK™½R‘ē ó]‘–GªęAx–ŸNqSF•|ām‡¡diď×YïYWªʼnOeÚtĐ«zđ¹T…ā‡úE™áÎÁWw헟HcòßÎſ¿Çdğ·ùT×Çūʄ¡XgWÀLJğ·¿ÃˆOj YÇ÷Sğ³kzőõm‰™ĝ—[³‹¡VÙæÅöM̳¹pÁaËýý©D©Ü“JŹƕģGą¤{Ùū…ǘO²«BƱéA—Ò‰ĥ‡¡«BhlmtÃPµyU¯uc“d·w_bŝcīímGOŽ€GBȅ‰ŹãĻFŷŽŕ@Óoo¿ē‹±ß}Ž}ÓF÷tIJWÈCőâUâǙI›ğʼn©I›ijEׅÁ”³AĥDĈ±ÌŒÜӔĨ£L]ĈÙƺZǾĆĖMĸĤfŒÎĵl•ŨnȈ‘ĐtF”Š–FĤ–‚êk¶œ^k°f¶gŠŽœ}®Fa˜f`vXŲxl˜„¦–ÔÁ²¬ÐŸ¦pqÊ̲ˆi€XŸØRDÎ}†Ä@ZĠ’s„x®AR~®ETtĄZ†–ƈfŠŠHâÒÐA†µ\\S¸„^wĖkRzŠalŽŜ|E¨ÈNĀňZTŒ’pBh£\\ŒĎƀuXĖtKL–¶G|Ž»ĺEļĞ~ÜĢÛĊrˆO˜Ùîvd]nˆ¬VœÊĜ°R֟pM††–€ƀ¬HbwžEÀˆ˜©Œž\\…¤]ŸI®¥D³|ˎ]CúAŠ¦…æ’´¥¸Lv¼€•¢ĽBaô–F~—š®²GÌҐEY„„œzk¤’°ahlV՞I^‹šCxĈPŽsB‰ƒºV‰ÀB¶¨R²´D","@@OŽR"]],"encodeOffsets":[[[117381,22988],[116552,22934],[116790,22617],[116973,22545],[116444,22536],[116931,22515],[116496,22490],[116453,22449],[113301,21439],[118726,21604],[118709,21486],[113210,20816],[115482,22082],[113171,21585],[113199,21590],[115232,22102],[115739,22373],[115134,22184],[113056,21175],[119573,21271],[119957,24020],[115859,22356],[116680,26053],[116561,22649]]]},"properties":{"cp":[113.280637,23.125178],"name":"广东","childNum":24}},{"id":"450000","geometry":{"type":"MultiPolygon","coordinates":[["@@H– TI¡U","@@Ɣ_LÊFZg…čP­kini«‹qǀcz͔Y®¬Ů»qR×ō©DՄ‘§ƙǃŵTÉĩ±ŸıdÑnYY›IJvNĆƌØÜ Öp–}e³¦m‹©iÓ|¹Ÿħņ›|ª¦QF¢Â¬ʖovg¿em‡^ucäāmÇÖåB¡Õçĝ}FĻ¼Ĺ{µHK•sLSđƃr‹č¤[Ag‘oS‹ŇYMÿ§Ç{Fśbky‰lQxĕƒ]T·¶[B…ÑÏGáşşƇe€…•ăYSs­FQ}­Bƒw‘tYğÃ@~…C̀Q ×W‡j˱rÉ¥oÏ ±«ÓÂ¥•ƒ€k—ŽwWűŽue_b—­E›~‰µh¯ecl¯›Ïr¯‡Eģ‰•Jƒğƒ}žw³–Ƈē`ãògK_ÛsUʝ“ćğ¶hŒöŒO¤Ǜn³Žc‘`¡yi–ę–‘[ďĵűMę§]X˜Î_‚훘Û]é’ÛUćİÕBƣ±…dƒy¹T^džûÅÑŦ·‡PĻþÙ`K€¦˜…¢ÍeœĥR¿Œ³£[~Œäu¼dl‰t‚†W¸oRM¢ď\\zœ}Æzdvň–{ÎXF¶°Â_„ÒÂÏL©Ö•TmuŸ¼ãl‰›īkiqéfA„·Êµ\\őDc¥ÝF“y›Ôć˜c€űH_hL܋êĺШc}rn`½„Ì@¸¶ªVLŒŠhŒ‹\\•Ţĺk~ŽĠið°|gŒtTĭĸ^x‘vK˜VGréAé‘bUu›MJ‰VÃO¡…qĂXËS‰ģãlýàŸ_ju‡YÛÒB†œG^˜é֊¶§ŽƒEG”ÅzěƒƯ¤Ek‡N[kdåucé¬dnYpAyČ{`]þ±X’\\’ÞÈk‚¡Ĭj†àh„ÂƄ¢H茠Ŕ⪃LƒĒ^Öm¶ħĊAǦė¸zÚGn£¾›rªŀÜt¬@֛ڈSx~øOŒ˜ŶÐÂæȠ\\„ÈÜObĖw^oބLf¬°bI lTØB̈F£Ć¹gñĤaY“t¿¤VSñœK¸¤nM†¼‚JE±„½¸šŠño‹ÜCƆæĪ^ŠĚQÖ¦^‡ˆˆf´Q†üÜʝz¯šlzUĺš@쇀p¶n]sxtx¶@„~ÒĂJb©gk‚{°‚~c°`ԙ¬rV\\“la¼¤ôá`¯¹LC†ÆbŒxEræO‚v[H­˜„[~|aB£ÖsºdAĐzNÂðsŽÞƔ…Ĥªbƒ–ab`ho¡³F«èVZs„\\\\Œ™ÔRzpp®SŽĪº¨ÖƒºN…ij„d`’a”¦¤F³¢@„`¢ĨĀìhYvlŠĆº¦Ċ•~nS›|gźv^kGƄÀè·"]],"encodeOffsets":[[[111707,21520],[113706,26955]]]},"properties":{"cp":[108.320004,22.82402],"name":"广西","childNum":2}},{"id":"460000","geometry":{"type":"Polygon","coordinates":["@@š¦Ŝil¢”XƦ‘ƞò–ïè§ŞCêɕrŧůÇąĻõ™·ĉ³œ̅kÇm@ċȧƒŧĥ‰Ľʉ­ƅſ“ȓÒ˦ŝE}ºƑ[ÍĜȋ gÎfǐÏĤ¨êƺ\\Ɔ¸ĠĎvʄȀœÐ¾jNðĀÒRŒšZdž™zМŒĊ†¢DÀɘZ"],"encodeOffsets":[[112750,20508]]},"properties":{"cp":[110.33119,20.031971],"name":"海南","childNum":1}},{"id":"510000","geometry":{"type":"MultiPolygon","coordinates":[["@@LqSn","@@ĆOìÛÐ@Ğ™ǔNY{¤Á§d…i“´ezÝúØãwŒƒIŸþËQǦÃqɞSJ»ĂéʔõÔƁİlƞ¹„§Ĭqt‘ÀƄmÀêErĒtD®ċæcQƒ”E®³^ĭ¥©l}äQto˜ŖÜqƎkµ–„ªÔĻĴ¡@Ċ°B²Èw^^RsºTĀ£ŚæœQP‘JvÄz„^Đ¹Æ¯fLà´GC²‘dt˜­ĀRt¼¤ĦOðğfÔðDŨŁĞƘïžPȆ®âbMüÀXZ ¸£@Ś›»»QÉ­™]d“sÖ×_͖_ÌêŮPrĔĐÕGĂeZÜîĘqBhtO ¤tE[h|Y‹Ô‚ZśÎs´xº±UŒ’ñˆt|O’ĩĠºNbgþŠJy^dÂY Į„]Řz¦gC‚³€R`ĀŠz’¢AjŒ¸CL„¤RÆ»@­Ŏk\\Ç´£YW}z@Z}‰Ã¶“oû¶]´^N‡Ò}èN‚ª–P˜Íy¹`S°´†ATe€VamdUĐwʄvĮÕ\\ƒu‹Æŗ¨Yp¹àZÂm™Wh{á„}WØǍ•Éüw™ga§ßAYŸrÅÂQĀÕ¬LŐý®X˜øxª½Ű¦¦[€—þ„`ÜUÖ´òrÙŠ°²Äk„ijnDX{Uƒ~ET{ļº¦PZc”jF²Ė@Žp˜g€ˆ¨“B{ƒu¨ŦyhoÚD®¯¢˜ WòàFΤ¨GDäz¦kŮPœġq˚¥À]€Ÿ˜eŽâÚ´ªKxī„Pˆ—Ö|æ[xäJÞĥ‚s’NÖ½ž€I†¬nĨY´®Ð—ƐŠ€mD™ŝuäđđEb…e’e_™v¡}ìęNJē}q”É埁T¯µRs¡M@}ůa†a­¯wvƉåZwž\\Z{åû`Ÿ†[±oi•‘JDŦ]‘‰ĕãïrG •réÏ·~ąSfy×͂·ºſƽĵȁŗūmHQ¡Y¡®ÁÃ×t«ƒ­Tƒ¤J–JJŒyJ•ÈŠ`Ohߦ¡uËhIyCjmÿw…ZG……Ti‹SˆsO‰žB²ŸfNmsPaˆ{M{ŠõE‘^Hj}gYpaeuž¯‘oáwHjÁ½M¡pM“–uå‡mni{fk”\\oƒÎqCw†EZ¼K›ĝŠƒAy{m÷L‡wO×SimRI¯rK™õBS«sFe‡]fµ¢óY_ÆPRcue°Cbo׌bd£ŌIHgtrnyPt¦foaXďx›lBowz‹_{ÊéWiêE„GhܸºuFĈIxf®Ž•Y½ĀǙ]¤EyŸF²ċ’w¸¿@g¢§RGv»–áŸW`ÃĵJwi]t¥wO­½a[׈]`Ãi­üL€¦LabbTÀå’c}Íh™Æhˆ‹®BH€î|Ék­¤S†y£„ia©taį·Ɖ`ō¥Uh“O…ƒĝLk}©Fos‰´›Jm„µlŁu—…ø–nÑJWΪ–YÀïAetTžŅ‚ӍG™Ë«bo‰{ıwodƟ½ƒžOġܑµxàNÖ¾P²§HKv¾–]|•B‡ÆåoZ`¡Ø`ÀmºĠ~ÌЧnDž¿¤]wğ@sƒ‰rğu‰~‘Io”[é±¹ ¿žſđӉ@q‹gˆ¹zƱřaí°KtǤV»Ã[ĩǭƑ^ÇÓ@ỗs›Zϕ‹œÅĭ€Ƌ•ěpwDóÖሯneQˌq·•GCœýS]xŸ·ý‹q³•O՜Œ¶Qzßti{ř‰áÍÇWŝŭñzÇW‹pç¿JŒ™‚Xœĩè½cŒF–ÂLiVjx}\\N†ŇĖ¥Ge–“JA¼ÄHfÈu~¸Æ«dE³ÉMA|b˜Ò…˜ćhG¬CM‚õŠ„ƤąAvƒüV€éŀ‰_V̳ĐwQj´·ZeÈÁ¨X´Æ¡Qu·»Ÿ“˜ÕZ³ġqDo‰y`L¬gdp°şŠp¦ėìÅĮZŽ°Iä”h‚‘ˆzŠĵœf²å ›ĚрKp‹IN|‹„Ñz]ń……·FU×é»R³™MƒÉ»GM«€ki€™ér™}Ã`¹ăÞmȝnÁîRǀ³ĜoİzŔwǶVÚ£À]ɜ»ĆlƂ²Ġ…þTº·àUȞÏʦ¶†I’«dĽĢdĬ¿–»Ĕ׊h\\c¬†ä²GêëĤł¥ÀǿżÃÆMº}BÕĢyFVvw–ˆxBèĻĒ©Ĉ“t@Ğû¸£B¯¨ˋäߜkŽķŒ½ª“ôNԓ~t¼Ŵ„u„œ^s¼{TA¼ø°¢İªDè¾Ň¶ÝJ‘®Z´ğ~Sn|ªWÚ©òzPOȸ‚bð¢|‹øĞŠŒœŠA"]],"encodeOffsets":[[[108815,30935],[100197,35028]]]},"properties":{"cp":[104.065735,30.659462],"name":"四川","childNum":2}},{"id":"520000","geometry":{"type":"MultiPolygon","coordinates":[["@@†G\\†lY£‘cj","@@q‚|ˆ‚mc¯vωV","@@hÑ£Is‡NgßH†›HªķÃh_¹ƒ¡ĝħń¦uيùŽgS¯JHŸ|sÝÅtÁïyMDč»eÕtA¤{b\\}—ƒG®u\\åPFq‹wÅaD…žK°ºâ_£ùbµ”mÁ‹ÛœĹM[q|hlaªāI}тƒµ@swtwm^oµˆD鼊yV™ky°ÉžûÛR…³‚‡eˆ‡¥]RՋěħ[ƅåÛDpŒ”J„iV™™‰ÂF²I…»mN·£›LbÒYb—WsÀbŽ™pki™TZĄă¶HŒq`……ĥ_JŸ¯ae«ƒKpÝx]aĕÛPƒÇȟ[ÁåŵÏő—÷Pw}‡TœÙ@Õs«ĿÛq©½œm¤ÙH·yǥĘĉBµĨÕnđ]K„©„œá‹ŸG纍§Õßg‡ǗĦTèƤƺ{¶ÉHÎd¾ŚÊ·OÐjXWrãLyzÉAL¾ę¢bĶėy_qMĔąro¼hĊžw¶øV¤w”²Ĉ]ʚKx|`ź¦ÂÈdr„cȁbe¸›`I¼čTF´¼Óýȃr¹ÍJ©k_șl³´_pН`oÒhŽ¶pa‚^ÓĔ}D»^Xyœ`d˜[Kv…JPhèhCrĂĚÂ^Êƌ wˆZL­Ġ£šÁbrzOIl’MM”ĪŐžËr×ÎeŦŽtw|Œ¢mKjSǘňĂStÎŦEtqFT†¾†E쬬ôxÌO¢Ÿ KŠ³ŀºäY†„”PVgŎ¦Ŋm޼VZwVlŒ„z¤…ž£Tl®ctĽÚó{G­A‡ŒÇgeš~Αd¿æaSba¥KKûj®_ć^\\ؾbP®¦x^sxjĶI_Ä X‚⼕Hu¨Qh¡À@Ëô}Ž±žGNìĎlT¸ˆ…`V~R°tbÕĊ`¸úÛtπFDu€[ƒMfqGH·¥yA‰ztMFe|R‚_Gk†ChZeÚ°to˜v`x‹b„ŒDnÐ{E}šZ˜è€x—†NEފREn˜[Pv@{~rĆAB§‚EO¿|UZ~ì„Uf¨J²ĂÝƀ‚sª–B`„s¶œfvö¦ŠÕ~dÔq¨¸º»uù[[§´sb¤¢zþFœ¢Æ…Àhˆ™ÂˆW\\ıŽËI݊o±ĭŠ£þˆÊs}¡R]ŒěƒD‚g´VG¢‚j±®è†ºÃmpU[Á›‘Œëº°r›ÜbNu¸}Žº¼‡`ni”ºÔXĄ¤¼Ôdaµ€Á_À…†ftQQgœR—‘·Ǔ’v”}Ýלĵ]µœ“Wc¤F²›OĩųãW½¯K‚©…]€{†LóµCIµ±Mß¿hŸ•©āq¬o‚½ž~@i~TUxð´Đhw­ÀEîô‚uĶ‚’“‚b[§nWuMÆJl½]vuıµb"]],"encodeOffsets":[[[112158,27383],[112105,27474],[112095,27476]]]},"properties":{"cp":[106.713478,26.578343],"name":"贵州","childNum":3}},{"id":"530000","geometry":{"type":"Polygon","coordinates":["@@[„ùx½}ÑRH‘YīĺûsÍn‘iEoã½Ya²ė{c¬ĝg•ĂsA•ØÅwď‚õzFjw}—«Dx¿}UũlŸê™@•HÅ­F‰¨ÇoJ´Ónũuą¡Ã¢pÒŌ“Ø TF²‚xa²ËX€‚cʋlHîAßËŁkŻƑŷÉ©h™W­æßU‡“Ës¡¦}•teèƶStǀÇ}Fd£j‹ĈZĆÆ‹¤T‚č\\Dƒ}O÷š£Uˆ§~ŃG™‚åŃDĝ¸œTsd¶¶Bªš¤u¢ŌĎo~t¾ÍŶÒtD¦Ú„iôö‰€z›ØX²ghįh½Û±¯€ÿm·zR¦Ɵ`ªŊÃh¢rOԍ´£Ym¼èêf¯ŪĽn„†cÚbŒw\\zlvWžªâˆ ¦g–mĿBş£¢ƹřbĥkǫßeeZkÙIKueT»sVesb‘aĕ  ¶®dNœĄÄpªyŽ¼—„³BE˜®l‡ŽGœŭCœǶwêżĔÂe„pÍÀQƞpC„–¼ŲÈ­AÎô¶R„ä’Q^Øu¬°š_Èôc´¹ò¨P΢hlϦ´Ħ“Æ´sâDŽŲPnÊD^¯°’Upv†}®BP̪–jǬx–Söwlfòªv€qĸ|`H€­viļ€ndĜ­Ćhň•‚em·FyށqóžSį¯‘³X_ĞçêtryvL¤§z„¦c¦¥jnŞk˜ˆlD¤øz½ĜàžĂŧMÅ|áƆàÊcðÂF܎‚áŢ¥\\\\º™İøÒÐJĴ‡„îD¦zK²ǏÎEh~’CD­hMn^ÌöÄ©ČZÀžaü„fɭyœpį´ěFűk]Ôě¢qlÅĆÙa¶~Äqššê€ljN¬¼H„ÊšNQ´ê¼VظE††^ŃÒyŒƒM{ŒJLoÒœęæŸe±Ķ›y‰’‡gã“¯JYÆĭĘëo¥Š‰o¯hcK«z_pŠrC´ĢÖY”—¼ v¸¢RŽÅW³Â§fǸYi³xR´ďUˊ`êĿU„û€uĆBƒƣö‰N€DH«Ĉg†——Ñ‚aB{ÊNF´¬c·Åv}eÇÃGB»”If•¦HňĕM…~[iwjUÁKE•Ž‹¾dĪçW›šI‹èÀŒoÈXòyŞŮÈXâÎŚŠj|àsRy‹µÖ›–Pr´þŒ ¸^wþTDŔ–Hr¸‹žRÌmf‡żÕâCôox–ĜƌÆĮŒ›Ð–œY˜tâŦÔ@]ÈǮƒ\\Ī¼Ä£UsȯLbîƲŚºyh‡rŒŠ@ĒԝƀŸÀ²º\\êp“’JŠ}ĠvŠqt„Ġ@^xÀ£È†¨mËÏğ}n¹_¿¢×Y_æpˆÅ–A^{½•Lu¨GO±Õ½ßM¶w’ÁĢۂP‚›Ƣ¼pcIJxŠ|ap̬HšÐŒŊSfsðBZ¿©“XÏÒK•k†÷Eû¿‰S…rEFsÕūk”óVǥʼniTL‚¡n{‹uxţÏh™ôŝ¬ğōN“‘NJkyPaq™Âğ¤K®‡YŸxÉƋÁ]āęDqçgOg†ILu—\\_gz—]W¼ž~CÔē]bµogpў_oď`´³Țkl`IªºÎȄqÔþž»E³ĎSJ»œ_f·‚adÇqƒÇc¥Á_Źw{™L^ɱćx“U£µ÷xgĉp»ĆqNē`rĘzaĵĚ¡K½ÊBzyäKXqiWPÏɸ½řÍcÊG|µƕƣG˛÷Ÿk°_^ý|_zċBZocmø¯hhcæ\\lˆMFlư£Ĝ„ÆyH“„F¨‰µêÕ]—›HA…àӄ^it `þßäkŠĤÎT~Wlÿ¨„ÔPzUC–NVv [jâôDôď[}ž‰z¿–msSh‹¯{jïğl}šĹ[–őŒ‰gK‹©U·µË@¾ƒm_~q¡f¹…ÅË^»‘f³ø}Q•„¡Ö˳gͱ^ǁ…\\ëÃA_—¿bW›Ï[¶ƛ鏝£F{īZgm@|kHǭƁć¦UĔťƒ×ëǟ…eċ¼ȡȘÏíBə£āĘPªij¶“ʼnÿ‡y©n‰ď£G¹¡I›Š±LÉĺÑdĉ܇W¥˜‰}g˜Á†{aqÃ¥aŠıęÏZ—Á`"],"encodeOffsets":[[104636,22969]]},"properties":{"cp":[102.712251,25.040609],"name":"云南","childNum":1}},{"id":"540000","geometry":{"type":"Polygon","coordinates":["@@hžľxŽŖ‰xƒÒVŽ†ºÅâAĪÝȆµę¯Ňa±r_w~uSÕň‘qOj]ɄQ…£Z……UDûoY’»©M[‹L¼qãË{V͕çWViŽ]ë©Ä÷àyƛh›ÚU°ŒŒa”d„cQƒ~Mx¥™caŸÛcSyF—ցk­ŒuRýq¿Ôµ•QĽ³aG{¿FµëªéĜÿª@¬·–K‰·àariĕĀ«V»Ŷ™Ĵū˜gèLǴŇƶaf‹tŒèBŚ£^Šâ†ǐÝ®–šM¦ÁǞÿ¬LhŸŽJ¾óƾƺcxw‹f]Y…´ƒ¦|œQLn°aœdĊ…œ\\¨o’œǀÍŎœ´ĩĀd`tÊQŞŕ|‚¨C^©œĈ¦„¦ÎJĊ{ŽëĎjª²rЉšl`¼Ą[t|¦St辉PŒÜK¸€d˜Ƅı]s¤—î_v¹ÎVòŦj˜£Əsc—¬_Ğ´|Ł˜¦AvŽ¦w`ăaÝaa­¢e¤ı²©ªSªšÈMĄwžÉØŔì@T‘¤—Ę™\\õª@”þo´­xA s”ÂtŎKzó²Çȵ¢rž^nĊ­Æ¬×üGž¢‚³ {âĊ]š™G‚~bÀgVjzlhǶf€žOšfdŠ‰ªB]pj„•TO–tĊ‚n¤}®¦ƒČ¥d¢¼»ddš”Y¼Žt—¢eȤJ¤}Ǿ¡°§¤AГlc@ĝ”sªćļđAç‡wx•UuzEÖġ~AN¹ÄÅȀŻ¦¿ģŁéì±H…ãd«g[؉¼ēÀ•cīľġ¬cJ‘µ…ÐʥVȝ¸ßS¹†ý±ğkƁ¼ą^ɛ¤Ûÿ‰b[}¬ōõÃ]ËNm®g@•Bg}ÍF±ǐyL¥íCˆƒIij€Ï÷њį[¹¦[⚍EÛïÁÉdƅß{âNÆāŨߝ¾ě÷yC£‡k­´ÓH@¹†TZ¥¢įƒ·ÌAЧ®—Zc…v½ŸZ­¹|ŕWZqgW“|ieZÅYVӁqdq•bc²R@†c‡¥Rã»Ge†ŸeƃīQ•}J[ғK…¬Ə|o’ėjġĠÑN¡ð¯EBčnwôɍėªƒ²•CλŹġǝʅįĭạ̃ūȹ]ΓͧgšsgȽóϧµǛ†ęgſ¶ҍć`ĘąŌJޚä¤rÅň¥ÖÁUětęuůÞiĊÄÀ\\Æs¦ÓRb|Â^řÌkÄŷ¶½÷‡f±iMݑ›‰@ĥ°G¬ÃM¥n£Øą‚ğ¯ß”§aëbéüÑOčœk£{\\‘eµª×M‘šÉfm«Ƒ{Å׃Gŏǩãy³©WÑăû‚··‘Q—òı}¯ã‰I•éÕÂZ¨īès¶ZÈsŽæĔTŘvŽgÌsN@îá¾ó@‰˜ÙwU±ÉT廣TđŸWxq¹Zo‘b‹s[׌¯cĩv‡Œėŧ³BM|¹k‰ªħ—¥TzNYnݍßpęrñĠĉRS~½ŠěVVŠµ‚õ‡«ŒM££µB•ĉ¥áºae~³AuĐh`Ü³ç@BۘïĿa©|z²Ý¼D”£àč²‹ŸƒIƒû›I ā€óK¥}rÝ_Á´éMaň¨€~ªSĈ½Ž½KÙóĿeƃÆBŽ·¬ën×W|Uº}LJrƳ˜lŒµ`bÔ`QˆˆÐÓ@s¬ñIŒÍ@ûws¡åQÑßÁ`ŋĴ{Ī“T•ÚÅTSij‚‹Yo|Ç[ǾµMW¢ĭiÕØ¿@˜šMh…pÕ]j†éò¿OƇĆƇp€êĉâlØw–ěsˆǩ‚ĵ¸c…bU¹ř¨WavquSMzeo_^gsÏ·¥Ó@~¯¿RiīB™Š\\”qTGªÇĜçPoŠÿfñòą¦óQīÈáP•œābß{ƒZŗĸIæńhnszÁCËìñšÏ·ąĚÝUm®ó­L·ăU›Èíoù´Êj°ŁŤ_uµ^‘°Œìǖ@tĶĒ¡Æ‡M³Ģ«˜İĨÅ®ğ†RŽāð“ggheÆ¢z‚Ê©Ô\\°ÝĎz~ź¤Pn–MĪÖB£Ÿk™n鄧żćŠ˜ĆK„Ē°¼L¶è‰âz¨u¦¥LDĘz¬ýÎmĘd¾ß”Fz“hg²™Fy¦ĝ¤ċņbΛ@y‚Ąæm°NĮZRÖíŽJ²öLĸÒ¨Y®ƌÐV‰à˜tt_ڀÂyĠzž]Ţh€zĎ{†ĢX”ˆc|šÐqŽšfO¢¤ög‚ÌHNŽ„PKŖœŽ˜Uú´xx[xˆvĐCûĀŠìÖT¬¸^}Ìsòd´_Ž‡KgžLĴ…ÀBon|H@–Êx˜—¦BpŰˆŌ¿fµƌA¾zLjRxŠ¶F”œkĄźRzŀˆ~¶[”´Hnª–VƞuĒ­È¨ƎcƽÌm¸ÁÈM¦x͊ëÀxdžB’šú^´W†£–d„kɾĬpœw‚˂ØɦļĬIŚœÊ•n›Ŕa¸™~J°î”lɌxĤÊÈðhÌ®‚g˜T´øŽàCˆŽÀ^ªerrƘdž¢İP|Ė ŸWœªĦ^¶´ÂL„aT±üWƜ˜ǀRšŶUńšĖ[QhlLüA†‹Ü\\†qR›Ą©"],"encodeOffsets":[[90849,37210]]},"properties":{"cp":[91.132212,29.660361],"name":"西藏","childNum":1}},{"id":"610000","geometry":{"type":"Polygon","coordinates":["@@¸œÂW¢xR­—ƒFq§uF—Œ@NŸ¢XLƒŠRMº[ğȣſï|¥J™kc`sʼnǷ’£Y³‹WN«ùM‘ëï³ÛIg÷±mTșڍÒķø©—þ¥ƒy‚ÓŸğęmWµÎumZyOŅƟĥÓ~sÑL¤µaŅY¦ocyZ{‰y c]{ŒTa©ƒ`U_Ěē£ωÊƍKù’K¶ȱÝƷ§{û»ÅÁȹÍéuij|¹cÑd‘ŠìUYƒŽO‘uF–ÕÈYvÁCqӃT•Ǣí§·S¹NgŠV¬ë÷Át‡°Dد’C´ʼnƒópģ}„ąiE˅FŸŸéGU¥×K…§­¶³B‹Č}C¿åċ`wġB·¤őcƭ²ő[Å^axwQO…ñJÙïŚ•ĤNĔŸwƇˆÄŠńwĪ­Šo[„_KÓª³“ÙnK‰Çƒěœÿ]ď€ă_d©·©Ýŏ°Ù®g]±„Ÿ‡ßš×¥¬÷m\\›iaǑkěX{¢|ZKlçhLt€Ňîŵ€œè[€É@ƉĄEœ‡tƇÏ˜³­ħZ«mJ…›×¾‘MtÝĦ£IwÄå\\Õ{‡˜ƒOwĬ©LÙ³ÙT“ª¿^™¦r̛ĢŭO¥lãyC§HÍ£ßEñŸX¡—­°ÙCgpťz‘ˆb`wI„vA|¥”‡—hoĕ@E±“iYd¥OÿµÇvPŒW|mCƒĴŜǂ҈W¶¸AĜh^Wx{@„¬‚­F¸¡„ķn£P|ŸªĴ@^ĠĈæb–Ôc¶l˜Yi…–^Mi˜cĎ°Â[ä€vï¶gv@À“Ĭ·lJ¸sn|¼u~a]’ÆÈtŌºJp’ƒþ£KKf~Š¦UbyäIšĺãn‡Ô¿^­žŵMT–hĠܤko¼Ŏìąǜh`[tŒRd²IJ_œXPrɲ‰l‘‚XžiL§àƒ–¹ŽH˜°Ȧqº®QC—bA†„ŌJ¸ĕÚ³ĺ§ `d¨YjžiZvRĺ±öVKkjGȊĐePОZmļKÀ€‚[ŠŽ`ösìh†ïÎoĬdtKÞ{¬èÒÒBŒÔpIJÇĬJŊ¦±J«ˆ[©ārH€µàåVKe§|P²ÇÓ·vUz‰gnN¾yI@oŸHĆۄķhx“e‘n¡QQ’±”ƝJ‹ǖRbzy€¸ËАl›¼EºpĤ¼Œx¼½~Ğ’”à@†ÚüdK^ˆmÌSjˆp²—ȮµšûG™Ħ}Ħšðǚ¶òƄ€jɂz°{ºØkÈęâ¦jª‚Bg‚\\œċ°s¬Ž’]jžú ‚E”Ȍdž¬s„t‡”RˆÆdĠݎwܔ¸ôW¾ƮłÒ_{’Ìšû¼„jº¹¢GǪÒ¯ĘƒZ`ºŊƒecņąš~BÂgzpâēòYƲȐπ"],"encodeOffsets":[[113634,40474]]},"properties":{"cp":[108.948024,34.263161],"name":"陕西","childNum":1}},{"id":"620000","geometry":{"type":"MultiPolygon","coordinates":[["@@Vu_^","@@ų‹EĠtt~nkh`Q‰¦ÅÄÜdw˜Ab×ĠąJˆ¤DüègĺqBqœj°lI¡Ĩ¶šĖIHdš‰ŠjΑBŠ°aZˆ¢KJŽ’O[|A£žDx}Nì•HUnrk„ kp€¼Y kMJn[aG‚áÚÏ[½rc†}aQxOgsPMnUs‡nc‹Z…ž–sKúvA›t„Þġ’£®ĀYKdnFwš¢JE°”Latf`¼h¬we|€Æ‡šbj}GA€·~WŽ”—`†¢MC¤tL©IJ°qdf”O‚“bÞĬ¹ttu`^ZúE`Œ[@„Æsîz®¡’C„ƳƜG²“R‘¢R’m”fŽwĸg܃‚ą G@pzJM½mŠhVy¸uÈÔO±¨{LfæU¶ßGĂq\\ª¬‡²I‚¥IʼnÈīoı‹ÓÑAçÑ|«LÝcspīðÍg…të_õ‰\\ĉñLYnĝg’ŸRǡÁiHLlõUĹ²uQjYi§Z_c¨Ÿ´ĹĖÙ·ŋI…ƒaBD˜­R¹ȥr—¯G•ºß„K¨jWk’ɱŠOq›Wij\\a­‹Q\\sg_ĆǛōëp»£lğۀgS•ŶN®À]ˆÓäm™ĹãJaz¥V}‰Le¤L„ýo‘¹IsŋÅÇ^‘Žbz…³tmEÁ´aŠ¹cčecÇN•ĊãÁ\\č¯—dNj•]j†—ZµkÓda•ćå]ğij@ ©O{¤ĸm¢ƒE·®ƒ«|@Xwg]Aģ±¯‡XǁÑdzªc›wQÚŝñsÕ³ÛV_ýƒ˜¥\\ů¥©¾÷w—Ž©WÕÊĩhÿÖÁRo¸V¬âDb¨šhûx–Ê×nj~Zâƒg|šXÁnßYoº§ZÅŘvŒ[„ĭÖʃuďxcVbnUSf…B¯³_Tzº—ΕO©çMÑ~Mˆ³]µ^püµ”ŠÄY~y@X~¤Z³€[Èōl@®Å¼£QKƒ·Di‹¡By‘ÿ‰Q_´D¥hŗyƒ^ŸĭÁZ]cIzý‰ah¹MĪğP‘s{ò‡‹‘²Vw¹t³Ŝˁ[ŽÑ}X\\gsFŸ£sPAgěp×ëfYHāďÖqēŭOÏë“dLü•\\iŒ”t^c®šRʺ¶—¢H°mˆ‘rYŸ£BŸ¹čIoľu¶uI]vģSQ{ƒUŻ”Å}QÂ|̋°ƅ¤ĩŪU ęĄžÌZҞ\\v˜²PĔ»ƢNHƒĂyAmƂwVmž`”]ȏb•”H`‰Ì¢²ILvĜ—H®¤Dlt_„¢JJÄämèÔDëþgºƫ™”aʎÌrêYi~ ÎݤNpÀA¾Ĕ¼b…ð÷’Žˆ‡®‚”üs”zMzÖĖQdȨý†v§Tè|ªH’þa¸|šÐ ƒwKĢx¦ivr^ÿ ¸l öæfƟĴ·PJv}n\\h¹¶v†·À|\\ƁĚN´Ĝ€çèÁz]ġ¤²¨QÒŨTIl‡ªťØ}¼˗ƦvÄùØE‹’«Fï˛Iq”ōŒTvāÜŏ‚íÛߜÛV—j³âwGăÂíNOŠˆŠPìyV³ʼnĖýZso§HіiYw[߆\\X¦¥c]ÔƩÜ·«j‡ÐqvÁ¦m^ċ±R™¦΋ƈťĚgÀ»IïĨʗƮŽ°Ɲ˜ĻþÍAƉſ±tÍEÕÞāNU͗¡\\ſčåÒʻĘm ƭÌŹöʥ’ëQ¤µ­ÇcƕªoIýˆ‰Iɐ_mkl³ă‰Ɠ¦j—¡Yz•Ňi–}Msßõ–īʋ —}ƒÁVmŸ_[n}eı­Uĥ¼‘ª•I{ΧDӜƻėoj‘qYhĹT©oūĶ£]ďxĩ‹ǑMĝ‰q`B´ƃ˺Ч—ç~™²ņj@”¥@đ´ί}ĥtPńǾV¬ufӃÉC‹tÓ̻‰…¹£G³€]ƖƾŎĪŪĘ̖¨ʈĢƂlɘ۪üºňUðǜȢƢż̌ȦǼ‚ĤŊɲĖ­KqĘʼn¼ĔDzņɾªǀÞĈĂD†½ĄĎÌŗĞrôñnŽœN¼â¾ʄľԆ|DŽŽ֦ज़ȗlj̘̭ɺƅêgV̍ʆĠ·ÌĊv|ýĖÕWĊǎÞ´õ¼cÒÒBĢ͢UĜð͒s¨ňƃLĉÕÝ@ɛƯ÷¿Ľ­ĹeȏijëCȚDŲyê×Ŗyò¯ļcÂßY…tÁƤyAã˾J@ǝrý‹‰@¤…rz¸oP¹ɐÚyᐇHŸĀ[Jw…cVeȴϜ»ÈŽĖ}ƒŰŐèȭǢόĀƪÈŶë;Ñ̆ȤМľĮEŔ—ĹŊũ~ËUă{ŸĻƹɁύȩþĽvĽƓÉ@ē„ĽɲßǐƫʾǗĒpäWÐxnsÀ^ƆwW©¦cÅ¡Ji§vúF¶Ž¨c~c¼īŒeXǚ‹\\đ¾JŽwÀďksãA‹fÕ¦L}wa‚o”Z’‹D½†Ml«]eÒÅaɲáo½FõÛ]ĻÒ¡wYR£¢rvÓ®y®LF‹LzĈ„ôe]gx}•|KK}xklL]c¦£fRtív¦†PŨ£","@@Mš T‡¥"]],"encodeOffsets":[[[108619,36299],[108594,36341],[108600,36306]]]},"properties":{"cp":[103.823557,36.058039],"name":"甘肃","childNum":3}},{"id":"630000","geometry":{"type":"MultiPolygon","coordinates":[["@@InJo","@@CƒÆ½OŃĦsΰ~Ē³¦@@“Ņiš±è}ؘƄ˹A³r_ĞŠǒNĪŒĐw¤^ŬĵªpĺSZg’rpiƼĘԛ¨C|͖J’©Ħ»®VIJ~f\\m `Un„˜~ʌŸ•ĬàöNt•~ňjy–¢Zi˜Ɣ¥ĄŠk´nl`JʇŠJþ©pdƖ®È£¶ìRʦ‘źõƮËnŸʼėæÑƀĎ[‚˜¢VÎĂMÖÝÎF²sƊƀÎBļýƞ—¯ʘƭðħ¼Jh¿ŦęΌƇš¥²Q]Č¥nuÂÏriˆ¸¬ƪÛ^Ó¦d€¥[Wà…x\\ZŽjҕ¨GtpþYŊĕ´€zUO뇉P‰îMĄÁxH´á˜iÜUà›îÜՁĂÛSuŎ‹r“œJð̬EŒ‘FÁú×uÃÎkr“Ē{V}İ«O_ÌËĬ©ŽÓŧSRѱ§Ģ£^ÂyèçěM³Ƃę{[¸¿u…ºµ[gt£¸OƤĿéYŸõ·kĀŸq]juw¥Dĩƍ€õÇPéĽG‘ž©ã‡¤G…uȧþRcÕĕNy“yût“ˆ­‡ø‘†ï»a½ē¿BMoį£ŸÍj}éZËqbʍš“Ƭh¹ìÿÓAçãnIáI`ƒks£CG­ě˜Uy×Cy•…’Ÿ@¶ʡÊBnāzG„ơMē¼±O÷õJËĚăVŸĪũƆ£Œ¯{ËL½Ìzż“„VR|ĠTbuvJvµhĻĖH”Aëáa…­OÇðñęNw‡…œľ·L›mI±íĠĩPÉ×®ÿs—’cB³±JKßĊ«`…ađ»·QAmO’‘Vţéÿ¤¹SQt]]Çx€±¯A@ĉij¢Óļ©•ƒl¶ÅÛr—ŕspãRk~¦ª]Į­´“FR„åd­ČsCqđéFn¿Åƃm’Éx{W©ºƝºįkÕƂƑ¸wWūЩÈFž£\\tÈ¥ÄRÈýÌJ ƒlGr^×äùyÞ³fj”c†€¨£ÂZ|ǓMĝšÏ@ëÜőR‹›ĝ‰Œ÷¡{aïȷPu°ËXÙ{©TmĠ}Y³’­ÞIňµç½©C¡į÷¯B»|St»›]vƒųƒs»”}MÓ ÿʪƟǭA¡fs˜»PY¼c¡»¦c„ċ­¥£~msĉP•–Siƒ^o©A‰Šec‚™PeǵŽkg‚yUi¿h}aH™šĉ^|ᴟ¡HØûÅ«ĉ®]m€¡qċ¶±ÈyôōLÁst“BŸ®wn±ă¥HSòėš£˜S’ë@לÊăxÇN©™©T±ª£IJ¡fb®ÞbŽb_Ą¥xu¥B—ž{łĝ³«`d˜Ɛt—¤ťiñžÍUuºí`£˜^tƃIJc—·ÛLO‹½Šsç¥Ts{ă\\_»™kϊ±q©čiìĉ|ÍIƒ¥ć¥›€]ª§D{ŝŖÉR_sÿc³Īō›ƿΑ›§p›[ĉ†›c¯bKm›R¥{³„Z†e^ŽŒwx¹dƽŽôIg §Mĕ ƹĴ¿—ǣÜ̓]‹Ý–]snåA{‹eŒƭ`ǻŊĿ\\ijŬű”YÂÿ¬jĖqŽßbŠ¸•L«¸©@ěĀ©ê¶ìÀEH|´bRľž–Ó¶rÀQþ‹vl®Õ‚E˜TzÜdb ˜hw¤{LR„ƒd“c‹b¯‹ÙVgœ‚ƜßzÃô쮍^jUèXΖ|UäÌ»rKŽ\\ŒªN‘¼pZCü†VY††¤ɃRi^rPҒTÖ}|br°qňbĚ°ªiƶGQ¾²„x¦PœmlŜ‘[Ĥ¡ΞsĦŸÔÏâ\\ªÚŒU\\f…¢N²§x|¤§„xĔsZPòʛ²SÐqF`ª„VƒÞŜĶƨVZŒÌL`ˆ¢dŐIqr\\oäõ–F礻Ŷ×h¹]Clـ\\¦ďÌį¬řtTӺƙgQÇÓHţĒ”´ÃbEÄlbʔC”|CˆŮˆk„Ʈ[ʼ¬ňœ´KŮÈΰÌĪ¶ƶlð”ļA†TUvdTŠG†º̼ŠÔ€ŒsÊDԄveMg"]],"encodeOffsets":[[[105308,37219],[95370,40081]]]},"properties":{"cp":[101.778916,36.623178],"name":"青海","childNum":2}},{"id":"640000","geometry":{"type":"Polygon","coordinates":["@@KëÀęĞ«OęȿȕŸı]ʼn¡åįÕÔ«Ǵõƪ™ĚQÐZhv K°›öqÀѐS[ÃÖHƖčË‡nL]ûc…Ùß@‚“ĝ‘¾}w»»‹oģF¹œ»kÌÏ·{zPƒ§B­¢íyÅt@ƒ@áš]Yv_ssģ¼i߁”ĻL¾ġsKD£¡N_…“˜X¸}B~Haiˆ™Åf{«x»ge_bs“KF¯¡Ix™mELcÿZ¤­Ģ‘ƒÝœsuBLù•t†ŒYdˆmVtNmtOPhRw~bd…¾qÐ\\âÙH\\bImlNZŸ»loƒŸqlVm–Gā§~QCw¤™{A\\‘PKŸNY‡¯bF‡kC¥’sk‹Šs_Ã\\ă«¢ħkJi¯r›rAhĹûç£CU‡ĕĊ_ԗBixÅُĄnªÑaM~ħpOu¥sîeQ¥¤^dkKwlL~{L~–hw^‚ófćƒKyEŒ­K­zuÔ¡qQ¤xZÑ¢^ļöܾEpž±âbÊÑÆ^fk¬…NC¾‘Œ“YpxbK~¥Že֎ŒäBlt¿Đx½I[ĒǙŒWž‹f»Ĭ}d§dµùEuj¨‚IÆ¢¥dXªƅx¿]mtÏwßRĶŒX¢͎vÆzƂZò®ǢÌʆCrâºMÞzžÆMҔÊÓŊZľ–r°Î®Ȉmª²ĈUªĚøºˆĮ¦ÌĘk„^FłĬhĚiĀĖ¾iİbjË"],"encodeOffsets":[[109366,40242]]},"properties":{"cp":[106.278179,38.46637],"name":"宁夏","childNum":1}},{"id":"650000","geometry":{"type":"Polygon","coordinates":["@@QØĔ²X¨”~ǘBºjʐßØvK”ƔX¨vĊOžÃƒ·¢i@~c—‡ĝe_«”Eš“}QxgɪëÏÃ@sÅyXoŖ{ô«ŸuX…ê•Îf`œC‚¹ÂÿÐGĮÕĞXŪōŸMźÈƺQèĽôe|¿ƸJR¤ĘEjcUóº¯Ĩ_ŘÁMª÷Ð¥Oéȇ¿ÖğǤǷÂF҇zÉx[]­Ĥĝ‰œ¦EP}ûƥé¿İƷTėƫœŕƅ™ƱB»Đ±’ēO…¦E–•}‘`cȺrĦáŖuҞª«IJ‡πdƺÏØZƴwʄ¤ĖGЙǂZĶƒèH¶}ÚZצʥĪï|ÇĦMŔ»İĝLj‹ì¥Βœba­¯¥ǕǚkĆŵĦɑĺƯxūД̵nơʃĽá½M»›òmqóŘĝč˾ăC…ćāƿÝɽ©DZŅ»ēėŊLrÁ®ɱĕģʼnǻ̋ȥơŻǛȡVï¹Ň۩ûkɗġƁ§ʇė̕ĩũƽō^ƕŠUv£ƁQï“Ƶkŏ½ΉÃŭdzLқʻ«ƭ\\lƒ‡ŭD‡“{ʓDkaFÃÄa“³ŤđÔGRÈƚhSӹŚsİ«ĐË[¥ÚDkº^Øg¼ŵ¸£EÍö•€ůʼnT¡c_‡ËKY‹ƧUśĵ„݃U_©rETÏʜ±OñtYwē¨ƒ{£¨uM³x½şL©Ùá[ÓÐĥ Νtģ¢\\‚ś’nkO›w¥±ƒT»ƷFɯàĩÞáB¹Æ…ÑUw„੍žĽw]•kE½Èå~‡Æ÷QyŠěCFmĭZī—ŵVÁ™ƿQƛ—ûXS²‰b½KϽĉS›©ŷXĕŸ{ŽĕK·¥Ɨcqq©f¿]‡ßDõU³h—­gËÇïģÉɋw“k¯í}I·šœbmœÉ–ř›īJɥĻˁ×xo›ɹī‡l•c…¤³Xù]‘™DžA¿w͉ì¥wÇN·ÂËnƾƍdǧđ®Ɲv•Um©³G\\“}µĿ‡QyŹl㓛µEw‰LJQ½yƋBe¶ŋÀů‡ož¥A—˜Éw@•{Gpm¿Aij†ŽKLhˆ³`ñcËtW‚±»ÕS‰ëüÿďD‡u\\wwwù³—V›LŕƒOMËGh£õP¡™er™Ïd{“‡ġWÁ…č|yšg^ğyÁzÙs`—s|ÉåªÇ}m¢Ń¨`x¥’ù^•}ƒÌ¥H«‰Yªƅ”Aйn~ź¯šf¤áÀz„gŠÇDIԝ´AňĀ҄¶ûEYospõD[{ù°]u›Jq•U•|Soċxţ[õÔĥkŋÞŭZ˺óYËüċrw €ÞkrťË¿XGÉbřaDü·Ē÷Aê[Ää€I®BÕИÞ_¢āĠpŠÛÄȉĖġDKwbm‡ÄNô‡ŠfœƫVÉvi†dz—H‘‹QµâFšù­Âœ³¦{YGžƒd¢ĚÜO „€{Ö¦ÞÍÀPŒ^b–ƾŠl[‚vt×ĈÍE˨¡Đ~´î¸ùÎh€uè`¸ŸHÕŔVºwĠââWò‡@{œÙNÝ´ə²ȕn{¿¥{l—÷eé^e’ďˆXj©î\\ªÑò˜Üìc\\üqˆÕ[Č¡xoÂċªbØ­Œø|€¶ȴZdÆšońéŒGš\\”¼C°ÌƁn´nxšÊOĨ’Ūƴĸ¢¸òTxÊǪMīИÖŲÃɎOvˆʦƢ~FŽ‡Rěò—¿ġ~åŊœú‰Nšžš¸qŽ’Ę[Ĕ¶ÂćnÒPĒÜvúĀÊbÖ{Äî¸~Ŕünp¤ÂH¾œĄYÒ©ÊfºmԈĘcDoĬMŬ’˜S¤„s²‚”ʘچžȂVŦ –ŽèW°ªB|IJXŔþÈJĦÆæFĚêŠYĂªĂ]øªŖNÞüA€’fɨJ€˜¯ÎrDDšĤ€`€mz\\„§~D¬{vJÂ˜«lµĂb–¤p€ŌŰNĄ¨ĊXW|ų ¿¾ɄĦƐMT”‡òP˜÷fØĶK¢ȝ˔Sô¹òEð­”`Ɩ½ǒÂň×äı–§ĤƝ§C~¡‚hlå‚ǺŦŞkâ’~}ŽFøàIJaĞ‚fƠ¥Ž„Ŕdž˜®U¸ˆźXœv¢aƆúŪtŠųƠjd•ƺŠƺÅìnrh\\ĺ¯äɝĦ]èpĄ¦´LƞĬŠ´ƤǬ˼Ēɸ¤rºǼ²¨zÌPðŀbþ¹ļD¢¹œ\\ĜÑŚŸ¶ZƄ³âjĦoâŠȴLʉȮŒĐ­ĚăŽÀêZǚŐ¤qȂ\\L¢ŌİfÆs|zºeªÙæ§΢{Ā´ƐÚ¬¨Ĵà²łhʺKÞºÖTŠiƢ¾ªì°`öøu®Ê¾ãÖ"],"encodeOffsets":[[88824,50096]]},"properties":{"cp":[87.617733,43.792818],"name":"新疆","childNum":1}},{"id":"110000","geometry":{"type":"Polygon","coordinates":["@@R„ºaY՜™QaúÍÔiþĩȨWĢ‹ü|Ėu[qb[swP@ÅğP¿{\\‡¯Y²·‘Ѩj¯ŠX\\¯œMSvU¯YIŕY{[fk­VÁ›ûtŷmiÍt_H»Ĩ±d`Š¹­{bw…Yr“³S]§§o¹€qGtm_Sŧ€“oa›‹FLg‘QN_•dV€@Zom_ć\\ߚW´—€ÕiœRcfi…Ÿ’o§ËgToÛJíĔóu…|wP¤™XnO¢ÉŠŦ¯pNÄā¤zâŖÈRpŢZŠœÚ{GŠrFt¦Òx§ø¹RóäV¤XdˆżâºWbwŚ¨Ud®bêņ¾‘jnŎGŃŶŠnzÚScîĚZŠen¬"],"encodeOffsets":[[119421,42013]]},"properties":{"cp":[116.405285,39.904989],"name":"北京","childNum":1}},{"id":"120000","geometry":{"type":"Polygon","coordinates":["@@ŬgX§Ü«E…¶Ḟ“¬O_™ïlÁg“z±AXe™µÄĵ{¶]gitgšIj·›¥ì_iU€‰¨ÐƎk}ĕ{gB—qGf{¿a†U^fI“ư‹³õ{YƒıëNĿžk©ïËZukāA‘īlĕĥs¡bġ«@dekąI[nlPqCnp{ˆō³°`{PNdƗqSÄĻNNâyj]äžÒD ĬH°Æ]~¡HO¾ŒX}ÐxŒgp“gWˆrDGˆŒpù‚Š^L‚ˆrzWxˆZ^¨´T\\|~@I‰zƒ–bĤ‹œjeĊªz£®Ĕvě€L†mV¾Ô_ȔNW~zbĬvG†²ZmDM~”~"],"encodeOffsets":[[120237,41215]]},"properties":{"cp":[117.190182,39.125596],"name":"天津","childNum":1}},{"id":"310000","geometry":{"type":"MultiPolygon","coordinates":[["@@ɧư¬EpƸÁx]‡","@@©„²ƒ","@@”MA‹“˜","@@QpªK†WT…‰‰§¨","@@bŝՕÕEȣÚƥêImɇǦèÜĠŒÚÄÓŴ·ʌÇ","@@S‚ô¤r]ì†ƬįǜûȬɋŠŭ™×^‰sYŒɍDŋ‘ŽąñCG²«ªč@h–_p¯A{‡oloY€¬j@IJ`•gQڙpptǀ^MIJvtbe´Rh@–oj¨ž","@@ÆLH{a}Eo¦"]],"encodeOffsets":[[[124702,32062],[124547,32200],[124808,31991],[124726,32110],[124903,32376],[124065,32166],[124870,31965]]]},"properties":{"cp":[121.472644,31.231706],"name":"上海","childNum":7}},{"id":"500000","geometry":{"type":"Polygon","coordinates":["@@TÂÛ`Ùƅően½S‹êqDu[R‹å͹ˆ÷eXÍy‘¸_ĺę}÷`M¯ċfCVµqʼn÷Z•gg‘Œ^d½pDO‡ÎCnœ^uf²ènh¼WtƏxRGg¦…pV„†FI±ŽG^ŒIc´ec‡’G•ĹÞ½sëÆNä̤“Kӈe¯|‚R¸§L‘ÜkPoïƭNï¶}Gy“wdiù©nkĈzjŸ•@™Óc£»Wă¹Óf§c[µŠo·Ó|MvÛaqœ½«‡èœ’\\ÂoVnŽÓØ͙²«‹bq¿eƒhCž„€‹Ĝ^Qž~ Évý‡ş¤²Į‰pEĶyhsŊwH‹½‡š¿gņ›¡ýE¡ya£³t\\¨\\vú¹¼©·Ñr_oÒý¥‚‘et³]—Et©uÖ¥±ă©KVeëƒ]}wVPÀFA¨ąB}qTjgRemfFm‰QF݅My˜ù•nцAmыCaƒwŒu_p—¯sfۍ_g†“I_pNysBŠ¦zG¸rHe‚„N\\CvEsÐñÚkcD‘ÖĉsaQ¯€}_U‡†zÁēˆ}Ÿ^R •Äd^ÍĸZ¾·¶ƒ`wećJEž¹vÛ·Hgƒ‚éFXjÉê`|yŒpxkAwœWĐpb¥eOsmzwqChóUQl¥F^laf‹anòsr›EvfQdÁUVf—ÎvÜ^efˆtET¬ôA\\œ¢sJŽnQTjP؈xøK|nBz‰„œĞ»LY‚…FDxӄvr“[ehľš•vN”¢o¾NiÂxGp⬐z›bfZo~hGi’]öF|‰|Nb‡tOMn eA±ŠtPT‡LjpYQ|†SH††YĀxinzDJ€Ìg¢và¥Pg‰_–ÇzII‹€II•„£®S¬„Øsμ–¥¨^LšnGIJļIJƤjÎƀƾ¹¸ØÎezĆT¸}êЖqHŸðqĖ䒊¥^CƒIj–²p…\\_ æüY|[YxƊæuž°xb®…Űb@~¢NQt°¶‚S栓Ê~rljĔëĚ¢~šuf`‘‚†fa‚ĔJåĊ†nÔ]„jƎćÊ@Š£¾a®£Ű{ŶĕF‹ègLk{Y|¡ĜWƔtƬJÑxq‹±ĢN´‰òK‰™–LÈüD|s`ŋ’ć]ƒÃ‰`đŒMùƱ¿~Y°ħ`ƏíW‰½eI‹½{aŸ‘OIrÏ¡ĕŇa†p†µÜƃġ‰²"],"encodeOffsets":[[111728,31311]]},"properties":{"cp":[106.504962,29.533155],"name":"重庆","childNum":1}},{"id":"810000","geometry":{"type":"MultiPolygon","coordinates":[["@@AlFi","@@mŽp","@@EpHo","@@rMUw‡AS¬€]","@@ea¢pl¸Eõ¹‡hj[ƒ]ÔCΖ@lj˜¡uBXŸ…•´‹AI¹…[‹yDUˆ]W`çwZkmc–…M›žp€Åv›}I‹oJlcaƒfёKŽ°ä¬XJmРđhI®æÔtSHn€Eˆ„ÒrÄc"]],"encodeOffsets":[[[117111,23002],[117072,22876],[117045,22887],[116882,22747],[116975,23082]]]},"properties":{"cp":[114.173355,22.320048],"name":"香港","childNum":5}},{"id":"820000","geometry":{"type":"Polygon","coordinates":["@@œá—w{ÎrŽ"],"encodeOffsets":[[116285,22746]]},"properties":{"cp":[113.54909,22.198951],"name":"澳门","childNum":1}}],"UTF8Encoding":true});
+}));
\ No newline at end of file
diff --git a/src/main/websrc/js/common/clipboard.min.js b/src/main/websrc/js/common/clipboard.min.js
new file mode 100644
index 0000000..1993676
--- /dev/null
+++ b/src/main/websrc/js/common/clipboard.min.js
@@ -0,0 +1,7 @@
+/*!
+ * clipboard.js v1.6.1
+ * https://zenorocha.github.io/clipboard.js
+ *
+ * Licensed MIT © Zeno Rocha
+ */
+!function(e){if("object"==typeof exports&&"undefined"!=typeof module)module.exports=e();else if("function"==typeof define&&define.amd)define([],e);else{var t;t="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:this,t.Clipboard=e()}}(function(){var e,t,n;return function e(t,n,o){function i(a,c){if(!n[a]){if(!t[a]){var l="function"==typeof require&&require;if(!c&&l)return l(a,!0);if(r)return r(a,!0);var u=new Error("Cannot find module '"+a+"'");throw u.code="MODULE_NOT_FOUND",u}var s=n[a]={exports:{}};t[a][0].call(s.exports,function(e){var n=t[a][1][e];return i(n?n:e)},s,s.exports,e,t,n,o)}return n[a].exports}for(var r="function"==typeof require&&require,a=0;a<o.length;a++)i(o[a]);return i}({1:[function(e,t,n){function o(e,t){for(;e&&e.nodeType!==i;){if(e.matches(t))return e;e=e.parentNode}}var i=9;if("undefined"!=typeof Element&&!Element.prototype.matches){var r=Element.prototype;r.matches=r.matchesSelector||r.mozMatchesSelector||r.msMatchesSelector||r.oMatchesSelector||r.webkitMatchesSelector}t.exports=o},{}],2:[function(e,t,n){function o(e,t,n,o,r){var a=i.apply(this,arguments);return e.addEventListener(n,a,r),{destroy:function(){e.removeEventListener(n,a,r)}}}function i(e,t,n,o){return function(n){n.delegateTarget=r(n.target,t),n.delegateTarget&&o.call(e,n)}}var r=e("./closest");t.exports=o},{"./closest":1}],3:[function(e,t,n){n.node=function(e){return void 0!==e&&e instanceof HTMLElement&&1===e.nodeType},n.nodeList=function(e){var t=Object.prototype.toString.call(e);return void 0!==e&&("[object NodeList]"===t||"[object HTMLCollection]"===t)&&"length"in e&&(0===e.length||n.node(e[0]))},n.string=function(e){return"string"==typeof e||e instanceof String},n.fn=function(e){var t=Object.prototype.toString.call(e);return"[object Function]"===t}},{}],4:[function(e,t,n){function o(e,t,n){if(!e&&!t&&!n)throw new Error("Missing required arguments");if(!c.string(t))throw new TypeError("Second argument must be a String");if(!c.fn(n))throw new TypeError("Third argument must be a Function");if(c.node(e))return i(e,t,n);if(c.nodeList(e))return r(e,t,n);if(c.string(e))return a(e,t,n);throw new TypeError("First argument must be a String, HTMLElement, HTMLCollection, or NodeList")}function i(e,t,n){return e.addEventListener(t,n),{destroy:function(){e.removeEventListener(t,n)}}}function r(e,t,n){return Array.prototype.forEach.call(e,function(e){e.addEventListener(t,n)}),{destroy:function(){Array.prototype.forEach.call(e,function(e){e.removeEventListener(t,n)})}}}function a(e,t,n){return l(document.body,e,t,n)}var c=e("./is"),l=e("delegate");t.exports=o},{"./is":3,delegate:2}],5:[function(e,t,n){function o(e){var t;if("SELECT"===e.nodeName)e.focus(),t=e.value;else if("INPUT"===e.nodeName||"TEXTAREA"===e.nodeName){var n=e.hasAttribute("readonly");n||e.setAttribute("readonly",""),e.select(),e.setSelectionRange(0,e.value.length),n||e.removeAttribute("readonly"),t=e.value}else{e.hasAttribute("contenteditable")&&e.focus();var o=window.getSelection(),i=document.createRange();i.selectNodeContents(e),o.removeAllRanges(),o.addRange(i),t=o.toString()}return t}t.exports=o},{}],6:[function(e,t,n){function o(){}o.prototype={on:function(e,t,n){var o=this.e||(this.e={});return(o[e]||(o[e]=[])).push({fn:t,ctx:n}),this},once:function(e,t,n){function o(){i.off(e,o),t.apply(n,arguments)}var i=this;return o._=t,this.on(e,o,n)},emit:function(e){var t=[].slice.call(arguments,1),n=((this.e||(this.e={}))[e]||[]).slice(),o=0,i=n.length;for(o;o<i;o++)n[o].fn.apply(n[o].ctx,t);return this},off:function(e,t){var n=this.e||(this.e={}),o=n[e],i=[];if(o&&t)for(var r=0,a=o.length;r<a;r++)o[r].fn!==t&&o[r].fn._!==t&&i.push(o[r]);return i.length?n[e]=i:delete n[e],this}},t.exports=o},{}],7:[function(t,n,o){!function(i,r){if("function"==typeof e&&e.amd)e(["module","select"],r);else if("undefined"!=typeof o)r(n,t("select"));else{var a={exports:{}};r(a,i.select),i.clipboardAction=a.exports}}(this,function(e,t){"use strict";function n(e){return e&&e.__esModule?e:{default:e}}function o(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}var i=n(t),r="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},a=function(){function e(e,t){for(var n=0;n<t.length;n++){var o=t[n];o.enumerable=o.enumerable||!1,o.configurable=!0,"value"in o&&(o.writable=!0),Object.defineProperty(e,o.key,o)}}return function(t,n,o){return n&&e(t.prototype,n),o&&e(t,o),t}}(),c=function(){function e(t){o(this,e),this.resolveOptions(t),this.initSelection()}return a(e,[{key:"resolveOptions",value:function e(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};this.action=t.action,this.emitter=t.emitter,this.target=t.target,this.text=t.text,this.trigger=t.trigger,this.selectedText=""}},{key:"initSelection",value:function e(){this.text?this.selectFake():this.target&&this.selectTarget()}},{key:"selectFake",value:function e(){var t=this,n="rtl"==document.documentElement.getAttribute("dir");this.removeFake(),this.fakeHandlerCallback=function(){return t.removeFake()},this.fakeHandler=document.body.addEventListener("click",this.fakeHandlerCallback)||!0,this.fakeElem=document.createElement("textarea"),this.fakeElem.style.fontSize="12pt",this.fakeElem.style.border="0",this.fakeElem.style.padding="0",this.fakeElem.style.margin="0",this.fakeElem.style.position="absolute",this.fakeElem.style[n?"right":"left"]="-9999px";var o=window.pageYOffset||document.documentElement.scrollTop;this.fakeElem.style.top=o+"px",this.fakeElem.setAttribute("readonly",""),this.fakeElem.value=this.text,document.body.appendChild(this.fakeElem),this.selectedText=(0,i.default)(this.fakeElem),this.copyText()}},{key:"removeFake",value:function e(){this.fakeHandler&&(document.body.removeEventListener("click",this.fakeHandlerCallback),this.fakeHandler=null,this.fakeHandlerCallback=null),this.fakeElem&&(document.body.removeChild(this.fakeElem),this.fakeElem=null)}},{key:"selectTarget",value:function e(){this.selectedText=(0,i.default)(this.target),this.copyText()}},{key:"copyText",value:function e(){var t=void 0;try{t=document.execCommand(this.action)}catch(e){t=!1}this.handleResult(t)}},{key:"handleResult",value:function e(t){this.emitter.emit(t?"success":"error",{action:this.action,text:this.selectedText,trigger:this.trigger,clearSelection:this.clearSelection.bind(this)})}},{key:"clearSelection",value:function e(){this.target&&this.target.blur(),window.getSelection().removeAllRanges()}},{key:"destroy",value:function e(){this.removeFake()}},{key:"action",set:function e(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"copy";if(this._action=t,"copy"!==this._action&&"cut"!==this._action)throw new Error('Invalid "action" value, use either "copy" or "cut"')},get:function e(){return this._action}},{key:"target",set:function e(t){if(void 0!==t){if(!t||"object"!==("undefined"==typeof t?"undefined":r(t))||1!==t.nodeType)throw new Error('Invalid "target" value, use a valid Element');if("copy"===this.action&&t.hasAttribute("disabled"))throw new Error('Invalid "target" attribute. Please use "readonly" instead of "disabled" attribute');if("cut"===this.action&&(t.hasAttribute("readonly")||t.hasAttribute("disabled")))throw new Error('Invalid "target" attribute. You can\'t cut text from elements with "readonly" or "disabled" attributes');this._target=t}},get:function e(){return this._target}}]),e}();e.exports=c})},{select:5}],8:[function(t,n,o){!function(i,r){if("function"==typeof e&&e.amd)e(["module","./clipboard-action","tiny-emitter","good-listener"],r);else if("undefined"!=typeof o)r(n,t("./clipboard-action"),t("tiny-emitter"),t("good-listener"));else{var a={exports:{}};r(a,i.clipboardAction,i.tinyEmitter,i.goodListener),i.clipboard=a.exports}}(this,function(e,t,n,o){"use strict";function i(e){return e&&e.__esModule?e:{default:e}}function r(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function a(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function c(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}function l(e,t){var n="data-clipboard-"+e;if(t.hasAttribute(n))return t.getAttribute(n)}var u=i(t),s=i(n),f=i(o),d=function(){function e(e,t){for(var n=0;n<t.length;n++){var o=t[n];o.enumerable=o.enumerable||!1,o.configurable=!0,"value"in o&&(o.writable=!0),Object.defineProperty(e,o.key,o)}}return function(t,n,o){return n&&e(t.prototype,n),o&&e(t,o),t}}(),h=function(e){function t(e,n){r(this,t);var o=a(this,(t.__proto__||Object.getPrototypeOf(t)).call(this));return o.resolveOptions(n),o.listenClick(e),o}return c(t,e),d(t,[{key:"resolveOptions",value:function e(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};this.action="function"==typeof t.action?t.action:this.defaultAction,this.target="function"==typeof t.target?t.target:this.defaultTarget,this.text="function"==typeof t.text?t.text:this.defaultText}},{key:"listenClick",value:function e(t){var n=this;this.listener=(0,f.default)(t,"click",function(e){return n.onClick(e)})}},{key:"onClick",value:function e(t){var n=t.delegateTarget||t.currentTarget;this.clipboardAction&&(this.clipboardAction=null),this.clipboardAction=new u.default({action:this.action(n),target:this.target(n),text:this.text(n),trigger:n,emitter:this})}},{key:"defaultAction",value:function e(t){return l("action",t)}},{key:"defaultTarget",value:function e(t){var n=l("target",t);if(n)return document.querySelector(n)}},{key:"defaultText",value:function e(t){return l("text",t)}},{key:"destroy",value:function e(){this.listener.destroy(),this.clipboardAction&&(this.clipboardAction.destroy(),this.clipboardAction=null)}}],[{key:"isSupported",value:function e(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:["copy","cut"],n="string"==typeof t?[t]:t,o=!!document.queryCommandSupported;return n.forEach(function(e){o=o&&!!document.queryCommandSupported(e)}),o}}]),t}(s.default);e.exports=h})},{"./clipboard-action":7,"good-listener":4,"tiny-emitter":6}]},{},[8])(8)});
\ No newline at end of file
diff --git a/src/main/websrc/js/common/date-utils.js b/src/main/websrc/js/common/date-utils.js
new file mode 100644
index 0000000..f4451df
--- /dev/null
+++ b/src/main/websrc/js/common/date-utils.js
@@ -0,0 +1,762 @@
+(function () {
+    // constants
+    var monthsAbbr = [
+        'Jan',
+        'Feb',
+        'Mar',
+        'Apr',
+        'May',
+        'Jun',
+        'Jul',
+        'Aug',
+        'Sep',
+        'Oct',
+        'Nov',
+        'Dec'
+    ];
+
+    var monthsFull = [
+        'January',
+        'February',
+        'March',
+        'April',
+        'May',
+        'June',
+        'July',
+        'August',
+        'September',
+        'October',
+        'November',
+        'December'
+    ];
+
+    var daysAbbr = [
+        'Sun',
+        'Mon',
+        'Tue',
+        'Wed',
+        'Thu',
+        'Fri',
+        'Sat'
+    ];
+
+    var daysFull = [
+        'Sunday',
+        'Monday',
+        'Tuesday',
+        'Wednesday',
+        'Thursday',
+        'Friday',
+        'Saturday'
+    ];
+
+    var dayNames = {
+        'su':         0,
+        'sun':        0,
+        'sunday':     0,
+        'mo':         1,
+        'mon':        1,
+        'monday':     1,
+        'tu':         2,
+        'tue':        2,
+        'tuesday':    2,
+        'we':         3,
+        'wed':        3,
+        'wednesday':  3,
+        'th':         4,
+        'thu':        4,
+        'thursday':   4,
+        'fr':         5,
+        'fri':        5,
+        'friday':     5,
+        'sa':         6,
+        'sat':        6,
+        'saturday':   6
+    };
+    var monthsAll = monthsFull.concat(monthsAbbr);
+    var daysAll = [
+        'su',
+        'sun',
+        'sunday',
+        'mo',
+        'mon',
+        'monday',
+        'tu',
+        'tue',
+        'tuesday',
+        'we',
+        'wed',
+        'wednesday',
+        'th',
+        'thu',
+        'thursday',
+        'fr',
+        'fri',
+        'friday',
+        'sa',
+        'sat',
+        'saturday'
+    ];
+
+    var monthNames = {
+        'jan':        0,
+        'january':    0,
+        'feb':        1,
+        'february':   1,
+        'mar':        2,
+        'march':      2,
+        'apr':        3,
+        'april':      3,
+        'may':        4,
+        'jun':        5,
+        'june':       5,
+        'jul':        6,
+        'july':       6,
+        'aug':        7,
+        'august':     7,
+        'sep':        8,
+        'september':  8,
+        'oct':        9,
+        'october':    9,
+        'nov':        10,
+        'november':   10,
+        'dec':        11,
+        'december':   11
+    };
+
+    var daysInMonth = [ 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 ];
+
+
+    // private helper functions
+    /** @ignore */
+    function pad(str, length) {
+        str = String(str);
+        while (str.length < length) {
+            str = '0' + str;
+        }
+        return str;
+    }
+
+    var isInteger = function (str) {
+        if (str.match(/^(\d+)$/)) {
+            return true;
+        }
+        return false;
+    };
+    var getInt = function (str, i, minlength, maxlength) {
+        for (var x = maxlength; x >= minlength; x--) {
+            var token = str.substring(i, i + x);
+            if (token.length < minlength) {
+                return null;
+            }
+            if (isInteger(token)) {
+                return token;
+            }
+        }
+        return null;
+    };
+
+    // static class methods
+    var origParse = Date.parse;
+    // ------------------------------------------------------------------
+    // getDateFromFormat( date_string , format_string )
+    //
+    // This function takes a date string and a format string. It matches
+    // If the date string matches the format string, it returns the
+    // getTime() of the date. If it does not match, it returns NaN.
+    // Original Author: Matt Kruse <matt@mattkruse.com>
+    // WWW: http://www.mattkruse.com/
+    // Adapted from: http://www.mattkruse.com/javascript/date/source.html
+    // ------------------------------------------------------------------
+
+
+    var getDateFromFormat = function (val, format) {
+        val = val + "";
+        format = format + "";
+        var iVal = 0;
+        var iFormat = 0;
+        var c = "";
+        var token = "";
+        var token2 = "";
+        var x, y;
+        var now = new Date();
+        var year = now.getYear();
+        var month = now.getMonth() + 1;
+        var date = 1;
+        var hh = 0;
+        var mm = 0;
+        var ss = 0;
+        var ampm = "";
+
+
+
+        while (iFormat < format.length) {
+            // Get next token from format string
+            c = format.charAt(iFormat);
+            token = "";
+            while ((format.charAt(iFormat) === c) && (iFormat < format.length)) {
+                token += format.charAt(iFormat++);
+            }
+            // Extract contents of value based on format token
+            if (token === "yyyy" || token === "yy" || token === "y") {
+                if (token === "yyyy") {
+                    x = 4;
+                    y = 4;
+                }
+                if (token === "yy") {
+                    x = 2;
+                    y = 2;
+                }
+                if (token === "y") {
+                    x = 2;
+                    y = 4;
+                }
+                year = getInt(val, iVal, x, y);
+                if (year === null) {
+                    return NaN;
+                }
+                iVal += year.length;
+                if (year.length === 2) {
+                    if (year > 70) {
+                        year = 1900 + (year - 0);
+                    } else {
+                        year = 2000 + (year - 0);
+                    }
+                }
+            } else if (token === "MMM" || token === "NNN") {
+                month = 0;
+                for (var i = 0; i < monthsAll.length; i++) {
+                    var monthName = monthsAll[i];
+                    if (val.substring(iVal, iVal + monthName.length).toLowerCase() === monthName.toLowerCase()) {
+                        if (token === "MMM" || (token === "NNN" && i > 11)) {
+                            month = i + 1;
+                            if (month > 12) {
+                                month -= 12;
+                            }
+                            iVal += monthName.length;
+                            break;
+                        }
+                    }
+                }
+                if ((month < 1) || (month > 12)) {
+                    return NaN;
+                }
+            } else if (token === "EE" || token === "E") {
+                for (var n = 0; n < daysAll.length; n++) {
+                    var dayName = daysAll[n];
+                    if (val.substring(iVal, iVal + dayName.length).toLowerCase() === dayName.toLowerCase()) {
+                        iVal += dayName.length;
+                        break;
+                    }
+                }
+            } else if (token === "MM" || token === "M") {
+                month = getInt(val, iVal, token.length, 2);
+                if (month === null || (month < 1) || (month > 12)) {
+                    return NaN;
+                }
+                iVal += month.length;
+            } else if (token === "dd" || token === "d") {
+                date = getInt(val, iVal, token.length, 2);
+                if (date === null || (date < 1) || (date > 31)) {
+                    return NaN;
+                }
+                iVal += date.length;
+            } else if (token === "hh" || token === "h") {
+                hh = getInt(val, iVal, token.length, 2);
+                if (hh === null || (hh < 1) || (hh > 12)) {
+                    return NaN;
+                }
+                iVal += hh.length;
+            } else if (token === "HH" || token === "H") {
+                hh = getInt(val, iVal, token.length, 2);
+                if (hh === null || (hh < 0) || (hh > 23)) {
+                    return NaN;
+                }
+                iVal += hh.length;
+            } else if (token === "KK" || token === "K") {
+                hh = getInt(val, iVal, token.length, 2);
+                if (hh === null || (hh < 0) || (hh > 11)) {
+                    return NaN;
+                }
+                iVal += hh.length;
+            } else if (token === "kk" || token === "k") {
+                hh = getInt(val, iVal, token.length, 2);
+                if (hh === null || (hh < 1) || (hh > 24)) {
+                    return NaN;
+                }
+                iVal += hh.length;
+                hh--;
+            } else if (token === "mm" || token === "m") {
+                mm = getInt(val, iVal, token.length, 2);
+                if (mm === null || (mm < 0) || (mm > 59)) {
+                    return NaN;
+                }
+                iVal += mm.length;
+            } else if (token === "ss" || token === "s") {
+                ss = getInt(val, iVal, token.length, 2);
+                if (ss === null || (ss < 0) || (ss > 59)) {
+                    return NaN;
+                }
+                iVal += ss.length;
+            } else if (token === "a") {
+                if (val.substring(iVal, iVal + 2).toLowerCase() === "am") {
+                    ampm = "AM";
+                } else if (val.substring(iVal, iVal + 2).toLowerCase() === "pm") {
+                    ampm = "PM";
+                } else {
+                    return NaN;
+                }
+                iVal += 2;
+            } else {
+                if (val.substring(iVal, iVal + token.length) !== token) {
+                    return NaN;
+                } else {
+                    iVal += token.length;
+                }
+            }
+        }
+        // If there are any trailing characters left in the value, it doesn't match
+        if (iVal !== val.length) {
+            return NaN;
+        }
+        // Is date valid for month?
+        if (month === 2) {
+            // Check for leap year
+            if (((year % 4 === 0) && (year % 100 !== 0)) || (year % 400 === 0)) { // leap year
+                if (date > 29) {
+                    return NaN;
+                }
+            } else {
+                if (date > 28) {
+                    return NaN;
+                }
+            }
+        }
+        if ((month === 4) || (month === 6) || (month === 9) || (month === 11)) {
+            if (date > 30) {
+                return NaN;
+            }
+        }
+        // Correct hours value
+        if (hh < 12 && ampm === "PM") {
+            hh = hh - 0 + 12;
+        } else if (hh > 11 && ampm === "AM") {
+            hh -= 12;
+        }
+        var newdate = new Date(year, month - 1, date, hh, mm, ss);
+        return newdate.getTime();
+    };
+
+
+    /** @ignore */
+    Date.parse = function (date, format) {
+        if (format) {
+            return getDateFromFormat(date, format);
+        }
+        var timestamp = origParse(date), minutesOffset = 0, match;
+        if (isNaN(timestamp) && (match = /^(\d{4}|[+\-]\d{6})-(\d{2})-(\d{2})(?:[T ](\d{2}):(\d{2})(?::(\d{2})(?:\.(\d{3,}))?)?(?:(Z)|([+\-])(\d{2})(?::?(\d{2}))?))?/.exec(date))) {
+            if (match[8] !== 'Z') {
+                minutesOffset = +match[10] * 60 + (+match[11]);
+
+                if (match[9] === '+') {
+                    minutesOffset = 0 - minutesOffset;
+                }
+            }
+
+            match[7] = match[7] || '000';
+
+            timestamp = Date.UTC(+match[1], +match[2] - 1, +match[3], +match[4], +match[5] + minutesOffset, +match[6], +match[7].substr(0, 3));
+        }
+
+        return timestamp;
+    };
+
+    function polyfill(name, func) {
+        if (Date.prototype[name] === undefined) {
+            Date.prototype[name] = func;
+        }
+    }
+
+    /**
+        Returns new instance of Date object with the date set to today and
+        the time set to midnight
+        @returns {Date} Today's Date
+        @function
+     */
+    Date.today = function () {
+        return new Date().clearTime();
+    };
+
+    /**
+        Returns new instance of Date object with the date set to today and
+        the time set to midnight in UTC
+        @returns {Date} Today's Date in UTC
+        @function
+     */
+    Date.UTCtoday = function () {
+        return new Date().clearUTCTime();
+    };
+
+    /**
+        Returns new instance of Date object with the date set to tomorrow and
+        the time set to midnight
+        @returns {Date} Tomorrow's Date
+        @function
+     */
+    Date.tomorrow = function () {
+        return Date.today().add({days: 1});
+    };
+
+    /**
+        Returns new instance of Date object with the date set to tomorrow and
+        the time set to midnight in UTC
+        @returns {Date} Tomorrow's Date in UTC
+        @function
+     */
+    Date.UTCtomorrow = function () {
+        return Date.UTCtoday().add({days: 1});
+    };
+
+    /**
+        Returns new instance of Date object with the date set to yesterday and
+        the time set to midnight
+        @returns {Date} Yesterday's Date
+        @function
+     */
+    Date.yesterday = function () {
+        return Date.today().add({days: -1});
+    };
+
+    /**
+        Returns new instance of Date object with the date set to yesterday and
+        the time set to midnight in UTC
+        @returns {Date} Yesterday's Date in UTC
+        @function
+     */
+    Date.UTCyesterday = function () {
+        return Date.UTCtoday().add({days: -1});
+    };
+
+    Date.validateDay = function (day, year, month) {
+        var date = new Date(year, month, day);
+        return (date.getFullYear() === year &&
+            date.getMonth() === month &&
+            date.getDate() === day);
+    };
+
+    Date.validateYear = function (year) {
+        return (year >= 0 && year <= 9999);
+    };
+
+    Date.validateSecond = function (second) {
+        return (second >= 0 && second < 60);
+    };
+
+    Date.validateMonth = function (month) {
+        return (month >= 0 && month < 12);
+    };
+
+    Date.validateMinute = function (minute) {
+        return (minute >= 0 && minute < 60);
+    };
+
+    Date.validateMillisecond = function (milli) {
+        return (milli >= 0 && milli < 1000);
+    };
+
+    Date.validateHour = function (hour) {
+        return (hour >= 0 && hour < 24);
+    };
+
+    Date.compare = function (date1, date2) {
+        if (date1.valueOf() < date2.valueOf()) {
+            return -1;
+        } else if (date1.valueOf() > date2.valueOf()) {
+            return 1;
+        }
+        return 0;
+    };
+
+    Date.equals = function (date1, date2) {
+        return date1.valueOf() === date2.valueOf();
+    };
+
+
+    Date.getDayNumberFromName = function (name) {
+        return dayNames[name.toLowerCase()];
+    };
+
+
+    Date.getMonthNumberFromName = function (name) {
+        return monthNames[name.toLowerCase()];
+    };
+
+    Date.isLeapYear = function (year) {
+        return (new Date(year, 1, 29).getDate() === 29);
+    };
+
+    Date.getDaysInMonth = function (year, month) {
+        if (month === 1) {
+            return Date.isLeapYear(year) ? 29 : 28;
+        }
+        return daysInMonth[month];
+    };
+
+    polyfill('getMonthAbbr', function () {
+        return monthsAbbr[this.getMonth()];
+    });
+
+    polyfill('getMonthName', function () {
+        return monthsFull[this.getMonth()];
+    });
+
+    polyfill('getUTCOffset', function () {
+        var tz = pad(Math.abs(this.getTimezoneOffset() / 0.6), 4);
+        if (this.getTimezoneOffset() > 0) {
+            tz = '-' + tz;
+        }
+        return tz;
+    });
+
+    polyfill('toCLFString',  function () {
+        return pad(this.getDate(), 2) + '/' + this.getMonthAbbr() + '/' +
+               this.getFullYear() + ':' + pad(this.getHours(), 2) + ':' +
+               pad(this.getMinutes(), 2) + ':' + pad(this.getSeconds(), 2) +
+               ' ' + this.getUTCOffset();
+    });
+
+    polyfill('toYMD', function (separator) {
+        separator = typeof separator === 'undefined' ? '-' : separator;
+        return this.getFullYear() + separator + pad(this.getMonth() + 1, 2) +
+            separator + pad(this.getDate(), 2);
+    });
+
+    polyfill('toDBString', function () {
+        return this.getUTCFullYear() + '-' +  pad(this.getUTCMonth() + 1, 2) +
+               '-' + pad(this.getUTCDate(), 2) + ' ' + pad(this.getUTCHours(), 2) +
+               ':' + pad(this.getUTCMinutes(), 2) + ':' + pad(this.getUTCSeconds(), 2);
+    });
+
+    polyfill('clearTime', function () {
+        this.setHours(0);
+        this.setMinutes(0);
+        this.setSeconds(0);
+        this.setMilliseconds(0);
+
+        return this;
+    });
+
+    polyfill('clearUTCTime', function () {
+        this.setUTCHours(0);
+        this.setUTCMinutes(0);
+        this.setUTCSeconds(0);
+        this.setUTCMilliseconds(0);
+
+        return this;
+    });
+
+    polyfill('add', function (obj) {
+        if (obj.milliseconds !== undefined) {
+            this.setMilliseconds(this.getMilliseconds() + obj.milliseconds);
+        }
+        if (obj.seconds !== undefined) {
+            this.setSeconds(this.getSeconds() + obj.seconds);
+        }
+        if (obj.minutes !== undefined) {
+            this.setMinutes(this.getMinutes() + obj.minutes);
+        }
+        if (obj.hours !== undefined) {
+            this.setHours(this.getHours() + obj.hours);
+        }
+        if (obj.days !== undefined) {
+            this.setDate(this.getDate() + obj.days);
+        }
+        if (obj.weeks !== undefined) {
+            this.setDate(this.getDate() + (obj.weeks * 7));
+        }
+        if (obj.months !== undefined) {
+            this.setMonth(this.getMonth() + obj.months);
+        }
+        if (obj.years !== undefined) {
+            this.setFullYear(this.getFullYear() + obj.years);
+        }
+        return this;
+    });
+
+    polyfill('addMilliseconds', function (milliseconds) {
+        return this.add({ milliseconds: milliseconds });
+    });
+
+    polyfill('addSeconds', function (seconds) {
+        return this.add({ seconds: seconds });
+    });
+
+    polyfill('addMinutes', function (minutes) {
+        return this.add({ minutes: minutes });
+    });
+
+    polyfill('addHours', function (hours) {
+        return this.add({ hours: hours });
+    });
+
+    polyfill('addDays', function (days) {
+        return this.add({ days: days });
+    });
+
+    polyfill('addWeeks', function (weeks) {
+        return this.add({ days: (weeks * 7) });
+    });
+
+    polyfill('addMonths', function (months) {
+        return this.add({ months: months });
+    });
+
+    polyfill('addYears', function (years) {
+        return this.add({ years: years });
+    });
+
+    polyfill('setTimeToNow', function () {
+        var n = new Date();
+        this.setMilliseconds(n.getMilliseconds());
+        this.setSeconds(n.getSeconds());
+        this.setMinutes(n.getMinutes());
+        this.setHours(n.getHours());
+    });
+
+    polyfill('clone', function () {
+        return new Date(this.valueOf());
+    });
+
+    polyfill('between', function (start, end) {
+        return (this.valueOf() >= start.valueOf() &&
+                this.valueOf() <= end.valueOf());
+    });
+
+    polyfill('compareTo', function (date) {
+        return Date.compare(this, date);
+    });
+
+    polyfill('equals', function (date) {
+        return Date.equals(this, date);
+    });
+
+    polyfill('isAfter', function (date) {
+        date = date ? date : new Date();
+        return (this.compareTo(date) > 0);
+    });
+
+    polyfill('isBefore', function (date) {
+        date = date ? date : new Date();
+        return (this.compareTo(date) < 0);
+    });
+
+    polyfill('getDaysBetween', function (date) {
+        return ((date.clone().valueOf() - this.valueOf()) / 86400000) | 0;
+    });
+
+    polyfill('getHoursBetween', function (date) {
+        return ((date.clone().valueOf() - this.valueOf()) / 3600000) | 0;
+    });
+
+    polyfill('getMinutesBetween', function (date) {
+        return ((date.clone().valueOf() - this.valueOf()) / 60000) | 0;
+    });
+
+    polyfill('getSecondsBetween', function (date) {
+        return ((date.clone().valueOf() - this.valueOf()) / 1000) | 0;
+    });
+
+    polyfill('getMillisecondsBetween', function (date) {
+        return ((date.clone().valueOf() - this.valueOf())) | 0;
+    });
+
+    polyfill('getOrdinalNumber', function () {
+        return Math.ceil((this.clone().clearTime() - new Date(this.getFullYear(), 0, 1)) / 86400000) + 1;
+    });
+
+    polyfill('toFormat', function (format) {
+        return toFormat(format, getReplaceMap(this));
+    });
+
+    polyfill('toUTCFormat', function (format) {
+        return toFormat(format, getUTCReplaceMap(this));
+    });
+
+    var toFormat = function(format, replaceMap) {
+        var f = [ format ], i, l, s;
+        var replace = function (str, rep) {
+            var i = 0, l = f.length, j, ll, t, n = [];
+            for (; i < l; i++) {
+                if (typeof f[i] == 'string') {
+                    t = f[i].split(str);
+                    for (j = 0, ll = t.length - 1; j < ll; j++) {
+                        n.push(t[j]);
+                        n.push([rep]); // replacement pushed as non-string
+                    }
+                    n.push(t[ll]);
+                } else {
+                    // must be a replacement, don't process, just push
+                    n.push(f[i]);
+                }
+            }
+            f = n;
+        };
+
+        for (i in replaceMap) {
+            replace(i, replaceMap[i]);
+        }
+
+        s = '';
+        for (i = 0, l = f.length; i < l; i++)
+          s += typeof f[i] == 'string' ? f[i] : f[i][0];
+        return f.join('');
+    };
+
+    var getReplaceMap = function(date) {
+        var hours = (date.getHours() % 12) ? date.getHours() % 12 : 12;
+        return {
+            'YYYY': date.getFullYear(),
+            'YY': String(date.getFullYear()).slice(-2),
+            'MMMM': monthsFull[date.getMonth()],
+            'MMM': monthsAbbr[date.getMonth()],
+            'MM': pad(date.getMonth() + 1, 2),
+            'MI': pad(date.getMinutes(), 2),
+            'M': date.getMonth() + 1,
+            'DDDD': daysFull[date.getDay()],
+            'DDD': daysAbbr[date.getDay()],
+            'DD': pad(date.getDate(), 2),
+            'D': date.getDate(),
+            'HH24': pad(date.getHours(), 2),
+            'HH': pad(hours, 2),
+            'H': hours,
+            'SS': pad(date.getSeconds(), 2),
+            'PP': (date.getHours() >= 12) ? 'PM' : 'AM',
+            'P': (date.getHours() >= 12) ? 'pm' : 'am',
+            'LL': pad(date.getMilliseconds(), 3)
+        };
+    };
+
+    var getUTCReplaceMap = function(date) {
+        var hours = (date.getUTCHours() % 12) ? date.getUTCHours() % 12 : 12;
+        return {
+            'YYYY': date.getUTCFullYear(),
+            'YY': String(date.getUTCFullYear()).slice(-2),
+            'MMMM': monthsFull[date.getUTCMonth()],
+            'MMM': monthsAbbr[date.getUTCMonth()],
+            'MM': pad(date.getUTCMonth() + 1, 2),
+            'MI': pad(date.getUTCMinutes(), 2),
+            'M': date.getUTCMonth() + 1,
+            'DDDD': daysFull[date.getUTCDay()],
+            'DDD': daysAbbr[date.getUTCDay()],
+            'DD': pad(date.getUTCDate(), 2),
+            'D': date.getUTCDate(),
+            'HH24': pad(date.getUTCHours(), 2),
+            'HH': pad(hours, 2),
+            'H': hours,
+            'SS': pad(date.getUTCSeconds(), 2),
+            'PP': (date.getUTCHours() >= 12) ? 'PM' : 'AM',
+            'P': (date.getUTCHours() >= 12) ? 'pm' : 'am',
+            'LL': pad(date.getUTCMilliseconds(), 3)
+        };
+    };
+}());
diff --git a/src/main/websrc/js/common/dates.js b/src/main/websrc/js/common/dates.js
new file mode 100644
index 0000000..212a681
--- /dev/null
+++ b/src/main/websrc/js/common/dates.js
@@ -0,0 +1,75 @@
+
+Date.getFirstDay = function(date){
+	return new Date(date.getFullYear(),date.getMonth(),1);
+};
+
+Date.isSameDay = function(d1, d2){
+	return d1 && d2 && (d1.getFullYear() === d2.getFullYear()) && (d1.getMonth() === d2.getMonth()) && (d1.getDate() === d2.getDate());
+}
+
+Date.prototype.isSameDay = function(date) {
+	return Date.isSameDay(this,date);
+};
+Date.prototype.yestDay = function(){
+	this.setDate(this.getDate()-1);
+	var d = this.toLocaleDateString();
+	var YY = this.getFullYear(),
+        MM = this.getMonth() + 1,
+        DD = this.getDate();
+    if (MM < 10) MM = "0" + MM;
+    if (DD < 10) DD = "0" + DD;
+    return YY + "-" + MM + "-" + DD
+}
+Date.prototype.Format = function (fmt) { //author: meizz 
+    var o = {
+        "M+": this.getMonth() + 1, //月份 
+        "d+": this.getDate(), //日 
+        "h+": this.getHours(), //小时 
+        "m+": this.getMinutes(), //分 
+        "s+": this.getSeconds(), //秒 
+        "q+": Math.floor((this.getMonth() + 3) / 3), //季度 
+        "S": this.getMilliseconds() //毫秒 
+    };
+    if (/(y+)/.test(fmt)) fmt = fmt.replace(RegExp.$1, (this.getFullYear() + "").substr(4 - RegExp.$1.length));
+    for (var k in o)
+    if (new RegExp("(" + k + ")").test(fmt)) fmt = fmt.replace(RegExp.$1, (RegExp.$1.length == 1) ? (o[k]) : (("00" + o[k]).substr(("" + o[k]).length)));
+    return fmt;
+}
+Date.prototype.rangeDate = function(endDate){
+	var dates = [];
+	dates.push(this.Format("yyyy-MM-dd"));
+	if(!this.isSameDay(endDate)){
+		this.setDate(this.getDate()+1);
+		while(!this.isSameDay(endDate)){
+			dates.push(this.Format("yyyy-MM-dd"));
+			this.setDate(this.getDate()+1);
+		}
+		dates.push(endDate.Format("yyyy-MM-dd"));
+	}
+	return dates;
+}
+function rangeDate(sDate,eDate){
+	return new Date(sDate).rangeDate(new Date(eDate));
+}
+
+function diffDate(sDate,eDate){
+	return (new Date(eDate) - new Date(sDate))/(24*3600*1000) + 1;
+}
+
+function addDate(date,days){
+	var d = new Date(date);
+	d.setDate(d.getDate()+days); 
+	return d.Format("yyyy-MM-dd");
+}
+
+function getNowWeek(){
+	var today = Date.today();
+	var firstDay = new Date(today.getFullYear(), 0, 1),fw = firstDay.getDay();
+	var endDay = firstDay.clone(),n = 0;
+	if( fw > 0){
+		endDay = endDay.addDays(8-fw);
+		n = 1;
+	}
+	var days = diffDate(endDay , today);
+	return Math.ceil(days/7) + n;
+}
\ No newline at end of file
diff --git a/src/main/websrc/js/common/echarts.min.js b/src/main/websrc/js/common/echarts.min.js
new file mode 100644
index 0000000..d1384e1
--- /dev/null
+++ b/src/main/websrc/js/common/echarts.min.js
@@ -0,0 +1,35 @@
+!function(t,e){"object"==typeof exports&&"object"==typeof module?module.exports=e():"function"==typeof define&&define.amd?define([],e):"object"==typeof exports?exports.echarts=e():t.echarts=e()}(this,function(){return function(t){function e(n){if(i[n])return i[n].exports;var o=i[n]={exports:{},id:n,loaded:!1};return t[n].call(o.exports,o,o.exports,e),o.loaded=!0,o.exports}var i={};return e.m=t,e.c=i,e.p="",e(0)}([function(t,e,i){t.exports=i(2),i(96),i(90),i(101),i(176),i(301),i(290),i(311),i(265),i(261),i(257),i(297),i(306),i(243),i(248),i(254),i(286),i(278),i(35),i(189),i(212),i(334),i(331),i(230),i(338),i(324),i(203),i(179),i(349),i(196),i(195),i(194),i(339),i(204),i(220)},function(t,e){function i(t){if("object"==typeof t&&null!==t){var e=t;if(t instanceof Array){e=[];for(var n=0,o=t.length;n<o;n++)e[n]=i(t[n])}else if(!M(t)&&!T(t)){e={};for(var r in t)t.hasOwnProperty(r)&&(e[r]=i(t[r]))}return e}return t}function n(t,e,o){if(!S(e)||!S(t))return o?i(e):t;for(var r in e)if(e.hasOwnProperty(r)){var a=t[r],s=e[r];!S(s)||!S(a)||_(s)||_(a)||T(s)||T(a)||M(s)||M(a)?!o&&r in t||(t[r]=i(e[r],!0)):n(a,s,o)}return t}function o(t,e){for(var i=t[0],o=1,r=t.length;o<r;o++)i=n(i,t[o],e);return i}function r(t,e){for(var i in e)e.hasOwnProperty(i)&&(t[i]=e[i]);return t}function a(t,e,i){for(var n in e)e.hasOwnProperty(n)&&(i?null!=e[n]:null==t[n])&&(t[n]=e[n]);return t}function s(){return document.createElement("canvas")}function l(){return C||(C=N.createCanvas().getContext("2d")),C}function u(t,e){if(t){if(t.indexOf)return t.indexOf(e);for(var i=0,n=t.length;i<n;i++)if(t[i]===e)return i}return-1}function h(t,e){function i(){}var n=t.prototype;i.prototype=e.prototype,t.prototype=new i;for(var o in n)t.prototype[o]=n[o];t.prototype.constructor=t,t.superClass=e}function c(t,e,i){t="prototype"in t?t.prototype:t,e="prototype"in e?e.prototype:e,a(t,e,i)}function d(t){if(t)return"string"!=typeof t&&"number"==typeof t.length}function f(t,e,i){if(t&&e)if(t.forEach&&t.forEach===z)t.forEach(e,i);else if(t.length===+t.length)for(var n=0,o=t.length;n<o;n++)e.call(i,t[n],n,t);else for(var r in t)t.hasOwnProperty(r)&&e.call(i,t[r],r,t)}function p(t,e,i){if(t&&e){if(t.map&&t.map===R)return t.map(e,i);for(var n=[],o=0,r=t.length;o<r;o++)n.push(e.call(i,t[o],o,t));return n}}function g(t,e,i,n){if(t&&e){if(t.reduce&&t.reduce===V)return t.reduce(e,i,n);for(var o=0,r=t.length;o<r;o++)i=e.call(n,i,t[o],o,t);return i}}function m(t,e,i){if(t&&e){if(t.filter&&t.filter===O)return t.filter(e,i);for(var n=[],o=0,r=t.length;o<r;o++)e.call(i,t[o],o,t)&&n.push(t[o]);return n}}function v(t,e,i){if(t&&e)for(var n=0,o=t.length;n<o;n++)if(e.call(i,t[n],n,t))return t[n]}function y(t,e){var i=E.call(arguments,2);return function(){return t.apply(e,i.concat(E.call(arguments)))}}function x(t){var e=E.call(arguments,1);return function(){return t.apply(this,e.concat(E.call(arguments)))}}function _(t){return"[object Array]"===P.call(t)}function b(t){return"function"==typeof t}function w(t){return"[object String]"===P.call(t)}function S(t){var e=typeof t;return"function"===e||!!t&&"object"==e}function M(t){return!!D[P.call(t)]}function T(t){return t&&1===t.nodeType&&"string"==typeof t.nodeName}function I(t){for(var e=0,i=arguments.length;e<i;e++)if(null!=arguments[e])return arguments[e]}function A(){return Function.call.apply(E,arguments)}function L(t,e){if(!t)throw new Error(e)}var C,D={"[object Function]":1,"[object RegExp]":1,"[object Date]":1,"[object Error]":1,"[object CanvasGradient]":1,"[object CanvasPattern]":1,"[object Image]":1},P=Object.prototype.toString,k=Array.prototype,z=k.forEach,O=k.filter,E=k.slice,R=k.map,V=k.reduce,N={inherits:h,mixin:c,clone:i,merge:n,mergeAll:o,extend:r,defaults:a,getContext:l,createCanvas:s,indexOf:u,slice:A,find:v,isArrayLike:d,each:f,map:p,reduce:g,filter:m,bind:y,curry:x,isArray:_,isString:w,isObject:S,isFunction:b,isBuildInObject:M,isDom:T,retrieve:I,assert:L,noop:function(){}};t.exports=N},function(t,e,i){function n(t){return function(e,i,n){e=e&&e.toLowerCase(),E.prototype[t].call(this,e,i,n)}}function o(){E.call(this)}function r(t,e,i){function n(t,e){return t.prio-e.prio}i=i||{},"string"==typeof e&&(e=it[e]),this.id,this.group,this._dom=t,this._zr=k.init(t,{renderer:i.renderer||"canvas",devicePixelRatio:i.devicePixelRatio,width:i.width,height:i.height}),this._theme=z.clone(e),this._chartsViews=[],this._chartsMap={},this._componentsViews=[],this._componentsMap={},this._api=new S(this),this._coordSysMgr=new M,E.call(this),this._messageCenter=new o,this._initEvents(),this.resize=z.bind(this.resize,this),this._pendingActions=[],R(et,n),R(J,n),this._zr.animation.on("frame",this._onframe,this)}function a(t,e,i){var n,o=this._model,r=this._coordSysMgr.getCoordinateSystems();e=P.parseFinder(o,e);for(var a=0;a<r.length;a++){var s=r[a];if(s[t]&&null!=(n=s[t](o,e,i)))return n}}function s(t,e){var i=this._model;i&&i.eachComponent({mainType:"series",query:e},function(n,o){var r=this._chartsMap[n.__viewId];r&&r.__alive&&r[t](n,i,this._api,e)},this)}function l(t,e){var i=Q[t.type],n=i.actionInfo,o=n.update||"update";this[q]=!0;var r=[t],a=!1;t.batch&&(a=!0,r=z.map(t.batch,function(e){return e=z.defaults(z.extend({},e),t),e.batch=null,e}));for(var s,l=[],u="highlight"===t.type||"downplay"===t.type,h=0;h<r.length;h++){var c=r[h];s=i.action(c,this._model),s=s||z.extend({},c),s.type=n.event||s.type,l.push(s),u&&Y[o].call(this,c)}"none"===o||u||(this[U]?(Y.prepareAndUpdate.call(this,t),this[U]=!1):Y[o].call(this,t)),s=a?{type:n.event||t.type,batch:l}:l[0],this[q]=!1,!e&&this._messageCenter.trigger(s.type,s)}function u(t){for(var e=this._pendingActions;e.length;){var i=e.shift();l.call(this,i,t)}}function h(t,e,i){var n=this._api;V(this._componentsViews,function(o){var r=o.__model;o[t](r,e,n,i),x(r,o)},this),e.eachSeries(function(o,r){var a=this._chartsMap[o.__viewId];a[t](o,e,n,i),x(o,a),y(o,a)},this),v(this._zr,e)}function c(t,e){for(var i="component"===t,n=i?this._componentsViews:this._chartsViews,o=i?this._componentsMap:this._chartsMap,r=this._zr,a=0;a<n.length;a++)n[a].__alive=!1;e[i?"eachComponent":"eachSeries"](function(t,a){if(i){if("series"===t)return}else a=t;var s=a.id+"_"+a.type,l=o[s];if(!l){var u=I.parseClassType(a.type),h=i?L.getClass(u.main,u.sub):C.getClass(u.sub);if(!h)return;l=new h,l.init(e,this._api),o[s]=l,n.push(l),r.add(l.group)}a.__viewId=s,l.__alive=!0,l.__id=s,l.__model=a},this);for(var a=0;a<n.length;){var s=n[a];s.__alive?a++:(r.remove(s.group),s.dispose(e,this._api),n.splice(a,1),delete o[s.__id])}}function d(t,e){V(J,function(i){i.func(t,e)})}function f(t){var e={};t.eachSeries(function(t){var i=t.get("stack"),n=t.getData();if(i&&"list"===n.type){var o=e[i];o&&(n.stackedOn=o),e[i]=n}})}function p(t,e){var i=this._api;V(et,function(n){n.isLayout&&n.func(t,i,e)})}function g(t,e){var i=this._api;t.clearColorPalette(),t.eachSeries(function(t){t.clearColorPalette()}),V(et,function(n){n.func(t,i,e)})}function m(t,e){var i=this._api;V(this._componentsViews,function(n){var o=n.__model;n.render(o,t,i,e),x(o,n)},this),V(this._chartsViews,function(t){t.__alive=!1},this),t.eachSeries(function(n,o){var r=this._chartsMap[n.__viewId];r.__alive=!0,r.render(n,t,i,e),r.group.silent=!!n.get("silent"),x(n,r),y(n,r)},this),v(this._zr,t),V(this._chartsViews,function(e){e.__alive||e.remove(t,i)},this)}function v(t,e){var i=t.storage,n=0;i.traverse(function(t){t.isGroup||n++}),n>e.get("hoverLayerThreshold")&&!b.node&&i.traverse(function(t){t.isGroup||(t.useHoverLayer=!0)})}function y(t,e){var i=0;e.group.traverse(function(t){"group"===t.type||t.ignore||i++});var n=+t.get("progressive"),o=i>t.get("progressiveThreshold")&&n&&!b.node;o&&e.group.traverse(function(t){t.isGroup||(t.progressive=o?Math.floor(i++/n):-1,o&&t.stopAnimation(!0))});var r=t.get("blendMode")||null;e.group.traverse(function(t){t.isGroup||t.setStyle("blend",r)})}function x(t,e){var i=t.get("z"),n=t.get("zlevel");e.group.traverse(function(t){"group"!==t.type&&(null!=i&&(t.z=i),null!=n&&(t.zlevel=n))})}function _(t){function e(t,e){for(var i=0;i<t.length;i++){var n=t[i];n[r]=e}}var i=0,n=1,o=2,r="__connectUpdateStatus";z.each(K,function(a,s){t._messageCenter.on(s,function(a){if(rt[t.group]&&t[r]!==i){var s=t.makeActionFromEvent(a),l=[];z.each(ot,function(e){e!==t&&e.group===t.group&&l.push(e)}),e(l,i),V(l,function(t){t[r]!==n&&t.dispatchAction(s)}),e(l,o)}})})}/*!
+	 * ECharts, a javascript interactive chart library.
+	 *
+	 * Copyright (c) 2015, Baidu Inc.
+	 * All rights reserved.
+	 *
+	 * LICENSE
+	 * https://github.com/ecomfe/echarts/blob/master/LICENSE.txt
+	 */
+var b=i(11),w=i(124),S=i(89),M=i(23),T=i(125),I=i(12),A=i(15),L=i(57),C=i(27),D=i(3),P=i(7),k=i(76),z=i(1),O=i(18),E=i(20),R=i(44),V=z.each,N=1e3,B=5e3,G=1e3,F=2e3,H=3e3,W=4e3,Z=5e3,q="__flagInMainProcess",j="__hasGradientOrPatternBg",U="__optionUpdated";o.prototype.on=n("on"),o.prototype.off=n("off"),o.prototype.one=n("one"),z.mixin(o,E);var X=r.prototype;X._onframe=function(){this[U]&&(this[q]=!0,Y.prepareAndUpdate.call(this),this[q]=!1,this[U]=!1)},X.getDom=function(){return this._dom},X.getZr=function(){return this._zr},X.setOption=function(t,e,i){if(this[q]=!0,!this._model||e){var n=new T(this._api),o=this._theme,r=this._model=new w(null,null,o,n);r.init(null,null,o,n)}this._model.setOption(t,tt),i?this[U]=!0:(Y.prepareAndUpdate.call(this),this._zr.flush(),this[U]=!1),this[q]=!1,u.call(this,!1)},X.setTheme=function(){console.log("ECharts#setTheme() is DEPRECATED in ECharts 3.0")},X.getModel=function(){return this._model},X.getOption=function(){return this._model&&this._model.getOption()},X.getWidth=function(){return this._zr.getWidth()},X.getHeight=function(){return this._zr.getHeight()},X.getRenderedCanvas=function(t){if(b.canvasSupported){t=t||{},t.pixelRatio=t.pixelRatio||1,t.backgroundColor=t.backgroundColor||this._model.get("backgroundColor");var e=this._zr,i=e.storage.getDisplayList();return z.each(i,function(t){t.stopAnimation(!0)}),e.painter.getRenderedCanvas(t)}},X.getDataURL=function(t){t=t||{};var e=t.excludeComponents,i=this._model,n=[],o=this;V(e,function(t){i.eachComponent({mainType:t},function(t){var e=o._componentsMap[t.__viewId];e.group.ignore||(n.push(e),e.group.ignore=!0)})});var r=this.getRenderedCanvas(t).toDataURL("image/"+(t&&t.type||"png"));return V(n,function(t){t.group.ignore=!1}),r},X.getConnectedDataURL=function(t){if(b.canvasSupported){var e=this.group,i=Math.min,n=Math.max,o=1/0;if(rt[e]){var r=o,a=o,s=-o,l=-o,u=[],h=t&&t.pixelRatio||1;z.each(ot,function(o,h){if(o.group===e){var c=o.getRenderedCanvas(z.clone(t)),d=o.getDom().getBoundingClientRect();r=i(d.left,r),a=i(d.top,a),s=n(d.right,s),l=n(d.bottom,l),u.push({dom:c,left:d.left,top:d.top})}}),r*=h,a*=h,s*=h,l*=h;var c=s-r,d=l-a,f=z.createCanvas();f.width=c,f.height=d;var p=k.init(f);return V(u,function(t){var e=new D.Image({style:{x:t.left*h-r,y:t.top*h-a,image:t.dom}});p.add(e)}),p.refreshImmediately(),f.toDataURL("image/"+(t&&t.type||"png"))}return this.getDataURL(t)}},X.convertToPixel=z.curry(a,"convertToPixel"),X.convertFromPixel=z.curry(a,"convertFromPixel"),X.containPixel=function(t,e){var i,n=this._model;return t=P.parseFinder(n,t),z.each(t,function(t,n){n.indexOf("Models")>=0&&z.each(t,function(t){var o=t.coordinateSystem;if(o&&o.containPoint)i|=!!o.containPoint(e);else if("seriesModels"===n){var r=this._chartsMap[t.__viewId];r&&r.containPoint&&(i|=r.containPoint(e,t))}},this)},this),!!i},X.getVisual=function(t,e){var i=this._model;t=P.parseFinder(i,t,{defaultMainType:"series"});var n=t.seriesModel,o=n.getData(),r=t.hasOwnProperty("dataIndexInside")?t.dataIndexInside:t.hasOwnProperty("dataIndex")?o.indexOfRawIndex(t.dataIndex):null;return null!=r?o.getItemVisual(r,e):o.getVisual(e)};var Y={update:function(t){var e=this._model,i=this._api,n=this._coordSysMgr,o=this._zr;if(e){e.restoreData(),n.create(this._model,this._api),d.call(this,e,i),f.call(this,e),n.update(e,i),g.call(this,e,t),m.call(this,e,t);var r=e.get("backgroundColor")||"transparent",a=o.painter;if(a.isSingleCanvas&&a.isSingleCanvas())o.configLayer(0,{clearColor:r});else{if(!b.canvasSupported){var s=O.parse(r);r=O.stringify(s,"rgb"),0===s[3]&&(r="transparent")}r.colorStops||r.image?(o.configLayer(0,{clearColor:r}),this[j]=!0,this._dom.style.background="transparent"):(this[j]&&o.configLayer(0,{clearColor:null}),this[j]=!1,this._dom.style.background=r)}}},updateView:function(t){var e=this._model;e&&(e.eachSeries(function(t){t.getData().clearAllVisual()}),g.call(this,e,t),h.call(this,"updateView",e,t))},updateVisual:function(t){var e=this._model;e&&(e.eachSeries(function(t){t.getData().clearAllVisual()}),g.call(this,e,t),h.call(this,"updateVisual",e,t))},updateLayout:function(t){var e=this._model;e&&(p.call(this,e,t),h.call(this,"updateLayout",e,t))},highlight:function(t){s.call(this,"highlight",t)},downplay:function(t){s.call(this,"downplay",t)},prepareAndUpdate:function(t){var e=this._model;c.call(this,"component",e),c.call(this,"chart",e),Y.update.call(this,t)}};X.resize=function(t){this[q]=!0,this._zr.resize(t);var e=this._model&&this._model.resetOption("media");Y[e?"prepareAndUpdate":"update"].call(this),this._loadingFX&&this._loadingFX.resize(),this[q]=!1,u.call(this)},X.showLoading=function(t,e){if(z.isObject(t)&&(e=t,t=""),t=t||"default",this.hideLoading(),nt[t]){var i=nt[t](this._api,e),n=this._zr;this._loadingFX=i,n.add(i)}},X.hideLoading=function(){this._loadingFX&&this._zr.remove(this._loadingFX),this._loadingFX=null},X.makeActionFromEvent=function(t){var e=z.extend({},t);return e.type=K[t.type],e},X.dispatchAction=function(t,e){if(Q[t.type]){if(this[q])return void this._pendingActions.push(t);l.call(this,t,e),this._zr.flush(),u.call(this,e)}},X.on=n("on"),X.off=n("off"),X.one=n("one");var $=["click","dblclick","mouseover","mouseout","mousemove","mousedown","mouseup","globalout","contextmenu"];X._initEvents=function(){V($,function(t){this._zr.on(t,function(e){var i,n=this.getModel(),o=e.target;if("globalout"===t)i={};else if(o&&null!=o.dataIndex){var r=o.dataModel||n.getSeriesByIndex(o.seriesIndex);i=r&&r.getDataParams(o.dataIndex,o.dataType)||{}}else o&&o.eventData&&(i=z.extend({},o.eventData));i&&(i.event=e,i.type=t,this.trigger(t,i))},this)},this),V(K,function(t,e){this._messageCenter.on(e,function(t){this.trigger(e,t)},this)},this)},X.isDisposed=function(){return this._disposed},X.clear=function(){this.setOption({series:[]},!0)},X.dispose=function(){if(!this._disposed){this._disposed=!0;var t=this._api,e=this._model;V(this._componentsViews,function(i){i.dispose(e,t)}),V(this._chartsViews,function(i){i.dispose(e,t)}),this._zr.dispose(),delete ot[this.id]}},z.mixin(r,E);var Q=[],K={},J=[],tt=[],et=[],it={},nt={},ot={},rt={},at=new Date-0,st=new Date-0,lt="_echarts_instance_",ut={version:"3.3.1",dependencies:{zrender:"3.2.1"}};ut.init=function(t,e,i){var n=new r(t,e,i);return n.id="ec_"+at++,ot[n.id]=n,t.setAttribute&&t.setAttribute(lt,n.id),_(n),n},ut.connect=function(t){if(z.isArray(t)){var e=t;t=null,z.each(e,function(e){null!=e.group&&(t=e.group)}),t=t||"g_"+st++,z.each(e,function(e){e.group=t})}return rt[t]=!0,t},ut.disConnect=function(t){rt[t]=!1},ut.dispose=function(t){z.isDom(t)?t=ut.getInstanceByDom(t):"string"==typeof t&&(t=ot[t]),t instanceof r&&!t.isDisposed()&&t.dispose()},ut.getInstanceByDom=function(t){var e=t.getAttribute(lt);return ot[e]},ut.getInstanceById=function(t){return ot[t]},ut.registerTheme=function(t,e){it[t]=e},ut.registerPreprocessor=function(t){tt.push(t)},ut.registerProcessor=function(t,e){"function"==typeof t&&(e=t,t=N),J.push({prio:t,func:e})},ut.registerAction=function(t,e,i){"function"==typeof e&&(i=e,e="");var n=z.isObject(t)?t.type:[t,t={event:e}][0];t.event=(t.event||n).toLowerCase(),e=t.event,Q[n]||(Q[n]={action:i,actionInfo:t}),K[e]=n},ut.registerCoordinateSystem=function(t,e){M.register(t,e)},ut.registerLayout=function(t,e){"function"==typeof t&&(e=t,t=G),et.push({prio:t,func:e,isLayout:!0})},ut.registerVisual=function(t,e){"function"==typeof t&&(e=t,t=H),et.push({prio:t,func:e})},ut.registerLoading=function(t,e){nt[t]=e};var ht=I.parseClassType;ut.extendComponentModel=function(t,e){var i=I;if(e){var n=ht(e);i=I.getClass(n.main,n.sub,!0)}return i.extend(t)},ut.extendComponentView=function(t,e){var i=L;if(e){var n=ht(e);i=L.getClass(n.main,n.sub,!0)}return i.extend(t)},ut.extendSeriesModel=function(t,e){var i=A;if(e){e="series."+e.replace("series.","");var n=ht(e);i=I.getClass(n.main,n.sub,!0)}return i.extend(t)},ut.extendChartView=function(t,e){var i=C;if(e){e.replace("series.","");var n=ht(e);i=C.getClass(n.main,!0)}return i.extend(t)},ut.setCanvasCreator=function(t){z.createCanvas=t},ut.registerVisual(F,i(138)),ut.registerPreprocessor(i(132)),ut.registerLoading("default",i(123)),ut.registerAction({type:"highlight",event:"highlight",update:"highlight"},z.noop),ut.registerAction({type:"downplay",event:"downplay",update:"downplay"},z.noop),ut.List=i(14),ut.Model=i(10),ut.graphic=i(3),ut.number=i(4),ut.format=i(9),ut.matrix=i(19),ut.vector=i(5),ut.color=i(18),ut.util={},V(["map","each","filter","indexOf","inherits","reduce","filter","bind","curry","isArray","isString","isObject","isFunction","extend","defaults"],function(t){ut.util[t]=z[t]}),ut.PRIORITY={PROCESSOR:{FILTER:N,STATISTIC:B},VISUAL:{LAYOUT:G,GLOBAL:F,CHART:H,COMPONENT:W,BRUSH:Z}},t.exports=ut},function(t,e,i){"use strict";function n(t){return null!=t&&"none"!=t}function o(t){return"string"==typeof t?_.lift(t,-.1):t}function r(t){if(t.__hoverStlDirty){var e=t.style.stroke,i=t.style.fill,r=t.__hoverStl;r.fill=r.fill||(n(i)?o(i):null),r.stroke=r.stroke||(n(e)?o(e):null);var a={};for(var s in r)r.hasOwnProperty(s)&&(a[s]=t.style[s]);t.__normalStl=a,t.__hoverStlDirty=!1}}function a(t){t.__isHover||(r(t),t.useHoverLayer?t.__zr&&t.__zr.addHover(t,t.__hoverStl):(t.setStyle(t.__hoverStl),t.z2+=1),t.__isHover=!0)}function s(t){if(t.__isHover){var e=t.__normalStl;t.useHoverLayer?t.__zr&&t.__zr.removeHover(t):(e&&t.setStyle(e),t.z2-=1),t.__isHover=!1}}function l(t){"group"===t.type?t.traverse(function(t){"group"!==t.type&&a(t)}):a(t)}function u(t){"group"===t.type?t.traverse(function(t){"group"!==t.type&&s(t)}):s(t)}function h(t,e){t.__hoverStl=t.hoverStyle||e||{},t.__hoverStlDirty=!0,t.__isHover&&r(t)}function c(){!this.__isEmphasis&&l(this)}function d(){!this.__isEmphasis&&u(this)}function f(){this.__isEmphasis=!0,l(this)}function p(){this.__isEmphasis=!1,u(this)}function g(t,e,i,n,o,r){"function"==typeof o&&(r=o,o=null);var a=n&&(n.ifEnableAnimation?n.ifEnableAnimation():n.getShallow("animation"));if(a){var s=t?"Update":"",l=n&&n.getShallow("animationDuration"+s),u=n&&n.getShallow("animationEasing"+s),h=n&&n.getShallow("animationDelay"+s);"function"==typeof h&&(h=h(o)),l>0?e.animateTo(i,l,h||0,u,r):(e.attr(i),r&&r())}else e.attr(i),r&&r()}var m=i(1),v=i(168),y=Math.round,x=i(6),_=i(18),b=i(19),w=i(5),S={};S.Group=i(33),S.Image=i(48),S.Text=i(74),S.Circle=i(159),S.Sector=i(165),S.Ring=i(164),S.Polygon=i(161),S.Polyline=i(162),S.Rect=i(163),S.Line=i(160),S.BezierCurve=i(158),S.Arc=i(157),S.CompoundPath=i(152),S.LinearGradient=i(87),S.RadialGradient=i(153),S.BoundingRect=i(8),S.extendShape=function(t){return x.extend(t)},S.extendPath=function(t,e){return v.extendFromString(t,e)},S.makePath=function(t,e,i,n){var o=v.createFromString(t,e),r=o.getBoundingRect();if(i){var a=r.width/r.height;if("center"===n){var s,l=i.height*a;l<=i.width?s=i.height:(l=i.width,s=l/a);var u=i.x+i.width/2,h=i.y+i.height/2;i.x=u-l/2,i.y=h-s/2,i.width=l,i.height=s}this.resizePath(o,i)}return o},S.mergePath=v.mergePath,S.resizePath=function(t,e){if(t.applyTransform){var i=t.getBoundingRect(),n=i.calculateTransform(e);t.applyTransform(n)}},S.subPixelOptimizeLine=function(t){var e=S.subPixelOptimize,i=t.shape,n=t.style.lineWidth;return y(2*i.x1)===y(2*i.x2)&&(i.x1=i.x2=e(i.x1,n,!0)),y(2*i.y1)===y(2*i.y2)&&(i.y1=i.y2=e(i.y1,n,!0)),t},S.subPixelOptimizeRect=function(t){var e=S.subPixelOptimize,i=t.shape,n=t.style.lineWidth,o=i.x,r=i.y,a=i.width,s=i.height;return i.x=e(i.x,n,!0),i.y=e(i.y,n,!0),i.width=Math.max(e(o+a,n,!1)-i.x,0===a?0:1),i.height=Math.max(e(r+s,n,!1)-i.y,0===s?0:1),t},S.subPixelOptimize=function(t,e,i){var n=y(2*t);return(n+y(e))%2===0?n/2:(n+(i?1:-1))/2},S.setHoverStyle=function(t,e){"group"===t.type?t.traverse(function(t){"group"!==t.type&&h(t,e)}):h(t,e),t.on("mouseover",c).on("mouseout",d),t.on("emphasis",f).on("normal",p)},S.setText=function(t,e,i){var n=e.getShallow("position")||"inside",o=n.indexOf("inside")>=0?"white":i,r=e.getModel("textStyle");m.extend(t,{textDistance:e.getShallow("distance")||5,textFont:r.getFont(),textPosition:n,textFill:r.getTextColor()||o})},S.updateProps=function(t,e,i,n,o){g(!0,t,e,i,n,o)},S.initProps=function(t,e,i,n,o){g(!1,t,e,i,n,o)},S.getTransform=function(t,e){for(var i=b.identity([]);t&&t!==e;)b.mul(i,t.getLocalTransform(),i),t=t.parent;return i},S.applyTransform=function(t,e,i){return i&&(e=b.invert([],e)),w.applyTransform([],t,e)},S.transformDirection=function(t,e,i){var n=0===e[4]||0===e[5]||0===e[0]?1:Math.abs(2*e[4]/e[0]),o=0===e[4]||0===e[5]||0===e[2]?1:Math.abs(2*e[4]/e[2]),r=["left"===t?-n:"right"===t?n:0,"top"===t?-o:"bottom"===t?o:0];return r=S.applyTransform(r,e,i),Math.abs(r[0])>Math.abs(r[1])?r[0]>0?"right":"left":r[1]>0?"bottom":"top"},S.groupTransition=function(t,e,i,n){function o(t){var e={};return t.traverse(function(t){!t.isGroup&&t.anid&&(e[t.anid]=t)}),e}function r(t){var e={position:w.clone(t.position),rotation:t.rotation};return t.shape&&(e.shape=m.extend({},t.shape)),e}if(t&&e){var a=o(t);e.traverse(function(t){if(!t.isGroup&&t.anid){var e=a[t.anid];if(e){var n=r(t);t.attr(r(e)),S.updateProps(t,n,i,t.dataIndex)}}})}},t.exports=S},function(t,e){function i(t){return t.replace(/^\s+/,"").replace(/\s+$/,"")}var n={},o=1e-4;n.linearMap=function(t,e,i,n){var o=e[1]-e[0],r=i[1]-i[0];if(0===o)return 0===r?i[0]:(i[0]+i[1])/2;if(n)if(o>0){if(t<=e[0])return i[0];if(t>=e[1])return i[1]}else{if(t>=e[0])return i[0];if(t<=e[1])return i[1]}else{if(t===e[0])return i[0];if(t===e[1])return i[1]}return(t-e[0])/o*r+i[0]},n.parsePercent=function(t,e){switch(t){case"center":case"middle":t="50%";break;case"left":case"top":t="0%";break;case"right":case"bottom":t="100%"}return"string"==typeof t?i(t).match(/%$/)?parseFloat(t)/100*e:parseFloat(t):null==t?NaN:+t},n.round=function(t,e){return null==e&&(e=10),e=Math.min(Math.max(0,e),20),+(+t).toFixed(e)},n.asc=function(t){return t.sort(function(t,e){return t-e}),t},n.getPrecision=function(t){if(t=+t,isNaN(t))return 0;for(var e=1,i=0;Math.round(t*e)/e!==t;)e*=10,i++;return i},n.getPrecisionSafe=function(t){var e=t.toString(),i=e.indexOf(".");return i<0?0:e.length-1-i},n.getPixelPrecision=function(t,e){var i=Math.log,n=Math.LN10,o=Math.floor(i(t[1]-t[0])/n),r=Math.round(i(Math.abs(e[1]-e[0]))/n);return Math.max(-o+r,0)},n.MAX_SAFE_INTEGER=9007199254740991,n.remRadian=function(t){var e=2*Math.PI;return(t%e+e)%e},n.isRadianAroundZero=function(t){return t>-o&&t<o},n.parseDate=function(t){if(t instanceof Date)return t;if("string"==typeof t){var e=new Date(t);return isNaN(+e)&&(e=new Date(new Date(t.replace(/-/g,"/"))-new Date("1970/01/01"))),e}return new Date(Math.round(t))},n.quantity=function(t){return Math.pow(10,Math.floor(Math.log(t)/Math.LN10))},n.nice=function(t,e){var i,o=n.quantity(t),r=t/o;return i=e?r<1.5?1:r<2.5?2:r<4?3:r<7?5:10:r<1?1:r<2?2:r<3?3:r<5?5:10,i*o},t.exports=n},function(t,e){var i="undefined"==typeof Float32Array?Array:Float32Array,n={create:function(t,e){var n=new i(2);return null==t&&(t=0),null==e&&(e=0),n[0]=t,n[1]=e,n},copy:function(t,e){return t[0]=e[0],t[1]=e[1],t},clone:function(t){var e=new i(2);return e[0]=t[0],e[1]=t[1],e},set:function(t,e,i){return t[0]=e,t[1]=i,t},add:function(t,e,i){return t[0]=e[0]+i[0],t[1]=e[1]+i[1],t},scaleAndAdd:function(t,e,i,n){return t[0]=e[0]+i[0]*n,t[1]=e[1]+i[1]*n,t},sub:function(t,e,i){return t[0]=e[0]-i[0],t[1]=e[1]-i[1],t},len:function(t){return Math.sqrt(this.lenSquare(t))},lenSquare:function(t){return t[0]*t[0]+t[1]*t[1]},mul:function(t,e,i){return t[0]=e[0]*i[0],t[1]=e[1]*i[1],t},div:function(t,e,i){return t[0]=e[0]/i[0],t[1]=e[1]/i[1],t},dot:function(t,e){return t[0]*e[0]+t[1]*e[1]},scale:function(t,e,i){return t[0]=e[0]*i,t[1]=e[1]*i,t},normalize:function(t,e){var i=n.len(e);return 0===i?(t[0]=0,t[1]=0):(t[0]=e[0]/i,t[1]=e[1]/i),t},distance:function(t,e){return Math.sqrt((t[0]-e[0])*(t[0]-e[0])+(t[1]-e[1])*(t[1]-e[1]))},distanceSquare:function(t,e){return(t[0]-e[0])*(t[0]-e[0])+(t[1]-e[1])*(t[1]-e[1])},negate:function(t,e){return t[0]=-e[0],t[1]=-e[1],t},lerp:function(t,e,i,n){return t[0]=e[0]+n*(i[0]-e[0]),t[1]=e[1]+n*(i[1]-e[1]),t},applyTransform:function(t,e,i){var n=e[0],o=e[1];return t[0]=i[0]*n+i[2]*o+i[4],t[1]=i[1]*n+i[3]*o+i[5],t},min:function(t,e,i){return t[0]=Math.min(e[0],i[0]),t[1]=Math.min(e[1],i[1]),t},max:function(t,e,i){return t[0]=Math.max(e[0],i[0]),t[1]=Math.max(e[1],i[1]),t}};n.length=n.len,n.lengthSquare=n.lenSquare,n.dist=n.distance,n.distSquare=n.distanceSquare,t.exports=n},function(t,e,i){function n(t){o.call(this,t),this.path=new a}var o=i(36),r=i(1),a=i(28),s=i(148),l=i(63),u=l.prototype.getCanvasPattern,h=Math.abs;n.prototype={constructor:n,type:"path",__dirtyPath:!0,strokeContainThreshold:5,brush:function(t,e){var i=this.style,n=this.path,o=i.hasStroke(),r=i.hasFill(),a=i.fill,s=i.stroke,l=r&&!!a.colorStops,h=o&&!!s.colorStops,c=r&&!!a.image,d=o&&!!s.image;if(i.bind(t,this,e),this.setTransform(t),this.__dirty){var f=this.getBoundingRect();l&&(this._fillGradient=i.getGradient(t,a,f)),h&&(this._strokeGradient=i.getGradient(t,s,f))}l?t.fillStyle=this._fillGradient:c&&(t.fillStyle=u.call(a,t)),h?t.strokeStyle=this._strokeGradient:d&&(t.strokeStyle=u.call(s,t));var p=i.lineDash,g=i.lineDashOffset,m=!!t.setLineDash,v=this.getGlobalScale();n.setScale(v[0],v[1]),this.__dirtyPath||p&&!m&&o?(n=this.path.beginPath(t),p&&!m&&(n.setLineDash(p),n.setLineDashOffset(g)),this.buildPath(n,this.shape,!1),this.__dirtyPath=!1):(t.beginPath(),this.path.rebuildPath(t)),r&&n.fill(t),p&&m&&(t.setLineDash(p),t.lineDashOffset=g),o&&n.stroke(t),p&&m&&t.setLineDash([]),this.restoreTransform(t),null!=i.text&&this.drawRectText(t,this.getBoundingRect())},buildPath:function(t,e,i){},getBoundingRect:function(){var t=this._rect,e=this.style,i=!t;if(i){var n=this.path;this.__dirtyPath&&(n.beginPath(),this.buildPath(n,this.shape,!1)),t=n.getBoundingRect()}if(this._rect=t,e.hasStroke()){var o=this._rectWithStroke||(this._rectWithStroke=t.clone());if(this.__dirty||i){o.copy(t);var r=e.lineWidth,a=e.strokeNoScale?this.getLineScale():1;e.hasFill()||(r=Math.max(r,this.strokeContainThreshold||4)),a>1e-10&&(o.width+=r/a,o.height+=r/a,o.x-=r/a/2,o.y-=r/a/2)}return o}return t},contain:function(t,e){var i=this.transformCoordToLocal(t,e),n=this.getBoundingRect(),o=this.style;if(t=i[0],e=i[1],n.contain(t,e)){var r=this.path.data;if(o.hasStroke()){var a=o.lineWidth,l=o.strokeNoScale?this.getLineScale():1;if(l>1e-10&&(o.hasFill()||(a=Math.max(a,this.strokeContainThreshold)),s.containStroke(r,a/l,t,e)))return!0}if(o.hasFill())return s.contain(r,t,e)}return!1},dirty:function(t){null==t&&(t=!0),t&&(this.__dirtyPath=t,this._rect=null),this.__dirty=!0,this.__zr&&this.__zr.refresh(),this.__clipTarget&&this.__clipTarget.dirty()},animateShape:function(t){return this.animate("shape",t)},attrKV:function(t,e){"shape"===t?(this.setShape(e),this.__dirtyPath=!0,this._rect=null):o.prototype.attrKV.call(this,t,e)},setShape:function(t,e){var i=this.shape;if(i){if(r.isObject(t))for(var n in t)t.hasOwnProperty(n)&&(i[n]=t[n]);else i[t]=e;this.dirty(!0)}return this},getLineScale:function(){var t=this.transform;return t&&h(t[0]-1)>1e-10&&h(t[3]-1)>1e-10?Math.sqrt(h(t[0]*t[3]-t[2]*t[1])):1}},n.extend=function(t){var e=function(e){n.call(this,e),t.style&&this.style.extendFrom(t.style,!1);var i=t.shape;if(i){this.shape=this.shape||{};var o=this.shape;for(var r in i)!o.hasOwnProperty(r)&&i.hasOwnProperty(r)&&(o[r]=i[r])}t.init&&t.init.call(this,e)};r.inherits(e,n);for(var i in t)"style"!==i&&"shape"!==i&&(e.prototype[i]=t[i]);return e},r.inherits(n,o),t.exports=n},function(t,e,i){function n(t,e){return t&&t.hasOwnProperty(e)}var o=i(9),r=i(4),a=i(10),s=i(1),l={};l.normalizeToArray=function(t){return t instanceof Array?t:null==t?[]:[t]},l.defaultEmphasis=function(t,e){if(t){var i=t.emphasis=t.emphasis||{},n=t.normal=t.normal||{};s.each(e,function(t){var e=s.retrieve(i[t],n[t]);null!=e&&(i[t]=e)})}},l.LABEL_OPTIONS=["position","show","textStyle","distance","formatter"],l.getDataItemValue=function(t){return t&&(null==t.value?t:t.value)},l.isDataItemOption=function(t){return s.isObject(t)&&!(t instanceof Array)},l.converDataValue=function(t,e){var i=e&&e.type;return"ordinal"===i?t:("time"!==i||isFinite(t)||null==t||"-"===t||(t=+r.parseDate(t)),null==t||""===t?NaN:+t)},l.createDataFormatModel=function(t,e){var i=new a;return s.mixin(i,l.dataFormatMixin),i.seriesIndex=e.seriesIndex,i.name=e.name||"",i.mainType=e.mainType,i.subType=e.subType,i.getData=function(){return t},i},l.dataFormatMixin={getDataParams:function(t,e){var i=this.getData(e),n=this.seriesIndex,o=this.name,r=this.getRawValue(t,e),a=i.getRawIndex(t),s=i.getName(t,!0),l=i.getRawDataItem(t);return{componentType:this.mainType,componentSubType:this.subType,seriesType:"series"===this.mainType?this.subType:null,seriesIndex:n,seriesName:o,name:s,dataIndex:a,data:l,dataType:e,value:r,color:i.getItemVisual(t,"color"),$vars:["seriesName","name","value"]}},getFormattedLabel:function(t,e,i,n){e=e||"normal";var r=this.getData(i),a=r.getItemModel(t),s=this.getDataParams(t,i);null!=n&&s.value instanceof Array&&(s.value=s.value[n]);var l=a.get(["label",e,"formatter"]);return"function"==typeof l?(s.status=e,l(s)):"string"==typeof l?o.formatTpl(l,s):void 0},getRawValue:function(t,e){var i=this.getData(e),n=i.getRawDataItem(t);if(null!=n)return!s.isObject(n)||n instanceof Array?n:n.value},formatTooltip:s.noop},l.mappingToExists=function(t,e){e=(e||[]).slice();var i=s.map(t||[],function(t,e){return{exist:t}});return s.each(e,function(t,n){if(s.isObject(t)){for(var o=0;o<i.length;o++)if(!i[o].option&&null!=t.id&&i[o].exist.id===t.id+"")return i[o].option=t,void(e[n]=null);for(var o=0;o<i.length;o++){var r=i[o].exist;if(!(i[o].option||null!=r.id&&null!=t.id||null==t.name||l.isIdInner(t)||l.isIdInner(r)||r.name!==t.name+""))return i[o].option=t,void(e[n]=null)}}}),s.each(e,function(t,e){if(s.isObject(t)){for(var n=0;n<i.length;n++){var o=i[n].exist;if(!i[n].option&&!l.isIdInner(o)&&null==t.id){i[n].option=t;break}}n>=i.length&&i.push({option:t})}}),i},l.isIdInner=function(t){return s.isObject(t)&&t.id&&0===(t.id+"").indexOf("\0_ec_\0")},l.compressBatches=function(t,e){function i(t,e,i){for(var n=0,o=t.length;n<o;n++)for(var r=t[n].seriesId,a=l.normalizeToArray(t[n].dataIndex),s=i&&i[r],u=0,h=a.length;u<h;u++){var c=a[u];s&&s[c]?s[c]=null:(e[r]||(e[r]={}))[c]=1}}function n(t,e){var i=[];for(var o in t)if(t.hasOwnProperty(o)&&null!=t[o])if(e)i.push(+o);else{var r=n(t[o],!0);r.length&&i.push({seriesId:o,dataIndex:r})}return i}var o={},r={};return i(t||[],o),i(e||[],r,o),[n(o),n(r)]},l.queryDataIndex=function(t,e){return null!=e.dataIndexInside?e.dataIndexInside:null!=e.dataIndex?s.isArray(e.dataIndex)?s.map(e.dataIndex,function(e){return t.indexOfRawIndex(e)}):t.indexOfRawIndex(e.dataIndex):null!=e.name?s.isArray(e.name)?s.map(e.name,function(e){return t.indexOfName(e)}):t.indexOfName(e.name):void 0},l.parseFinder=function(t,e,i){if(s.isString(e)){var o={};o[e+"Index"]=0,e=o}var r=i&&i.defaultMainType;!r||n(e,r+"Index")||n(e,r+"Id")||n(e,r+"Name")||(e[r+"Index"]=0);var a={};return s.each(e,function(i,n){var i=e[n];if("dataIndex"===n||"dataIndexInside"===n)return void(a[n]=i);var o=n.match(/^(\w+)(Index|Id|Name)$/)||[],r=o[1],s=o[2];if(r&&s){var l={mainType:r};l[s.toLowerCase()]=i;var u=t.queryComponents(l);a[r+"Models"]=u,a[r+"Model"]=u[0]}}),a},t.exports=l},function(t,e,i){"use strict";function n(t,e,i,n){i<0&&(t+=i,i=-i),n<0&&(e+=n,n=-n),this.x=t,this.y=e,this.width=i,this.height=n}var o=i(5),r=i(19),a=o.applyTransform,s=Math.min,l=Math.abs,u=Math.max;n.prototype={constructor:n,union:function(t){var e=s(t.x,this.x),i=s(t.y,this.y);this.width=u(t.x+t.width,this.x+this.width)-e,this.height=u(t.y+t.height,this.y+this.height)-i,this.x=e,this.y=i},applyTransform:function(){var t=[],e=[];return function(i){i&&(t[0]=this.x,t[1]=this.y,e[0]=this.x+this.width,e[1]=this.y+this.height,a(t,t,i),a(e,e,i),this.x=s(t[0],e[0]),this.y=s(t[1],e[1]),this.width=l(e[0]-t[0]),this.height=l(e[1]-t[1]))}}(),calculateTransform:function(t){var e=this,i=t.width/e.width,n=t.height/e.height,o=r.create();return r.translate(o,o,[-e.x,-e.y]),r.scale(o,o,[i,n]),r.translate(o,o,[t.x,t.y]),o},intersect:function(t){t instanceof n||(t=n.create(t));var e=this,i=e.x,o=e.x+e.width,r=e.y,a=e.y+e.height,s=t.x,l=t.x+t.width,u=t.y,h=t.y+t.height;return!(o<s||l<i||a<u||h<r)},contain:function(t,e){var i=this;return t>=i.x&&t<=i.x+i.width&&e>=i.y&&e<=i.y+i.height},clone:function(){return new n(this.x,this.y,this.width,this.height)},copy:function(t){this.x=t.x,this.y=t.y,this.width=t.width,this.height=t.height},plain:function(){return{x:this.x,y:this.y,width:this.width,height:this.height}}},n.create=function(t){return new n(t.x,t.y,t.width,t.height)},t.exports=n},function(t,e,i){var n=i(1),o=i(4),r=i(16),a={};a.addCommas=function(t){return isNaN(t)?"-":(t=(t+"").split("."),t[0].replace(/(\d{1,3})(?=(?:\d{3})+(?!\d))/g,"$1,")+(t.length>1?"."+t[1]:""))},a.toCamelCase=function(t){return t.toLowerCase().replace(/-(.)/g,function(t,e){return e.toUpperCase()})},a.normalizeCssArray=function(t){var e=t.length;return"number"==typeof t?[t,t,t,t]:2===e?[t[0],t[1],t[0],t[1]]:3===e?[t[0],t[1],t[2],t[1]]:t},a.encodeHTML=function(t){return String(t).replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;").replace(/"/g,"&quot;").replace(/'/g,"&#39;")};var s=["a","b","c","d","e","f","g"],l=function(t,e){return"{"+t+(null==e?"":e)+"}"};a.formatTpl=function(t,e){n.isArray(e)||(e=[e]);var i=e.length;if(!i)return"";for(var o=e[0].$vars||[],r=0;r<o.length;r++){var a=s[r];t=t.replace(l(a),l(a,0))}for(var u=0;u<i;u++)for(var h=0;h<o.length;h++)t=t.replace(l(s[h],u),e[u][o[h]]);return t};var u=function(t){return t<10?"0"+t:t};a.formatTime=function(t,e){"week"!==t&&"month"!==t&&"quarter"!==t&&"half-year"!==t&&"year"!==t||(t="MM-dd\nyyyy");var i=o.parseDate(e),n=i.getFullYear(),r=i.getMonth()+1,a=i.getDate(),s=i.getHours(),l=i.getMinutes(),h=i.getSeconds();return t=t.replace("MM",u(r)).toLowerCase().replace("yyyy",n).replace("yy",n%100).replace("dd",u(a)).replace("d",a).replace("hh",u(s)).replace("h",s).replace("mm",u(l)).replace("m",l).replace("ss",u(h)).replace("s",h)},a.capitalFirst=function(t){return t?t.charAt(0).toUpperCase()+t.substr(1):t},a.truncateText=r.truncateText,t.exports=a},function(t,e,i){function n(t,e,i){this.parentModel=e,this.ecModel=i,this.option=t}var o=i(1),r=i(21);n.prototype={constructor:n,init:null,mergeOption:function(t){o.merge(this.option,t,!0)},get:function(t,e){if(!t)return this.option;"string"==typeof t&&(t=t.split("."));for(var i=this.option,n=this.parentModel,o=0;o<t.length&&(!t[o]||(i=i&&"object"==typeof i?i[t[o]]:null,null!=i));o++);return null==i&&n&&!e&&(i=n.get(t)),i},getShallow:function(t,e){var i=this.option,n=null==i?i:i[t],o=this.parentModel;return null==n&&o&&!e&&(n=o.getShallow(t)),n},getModel:function(t,e){var i=this.get(t,!0),o=this.parentModel,r=new n(i,e||o&&o.getModel(t),this.ecModel);return r},isEmpty:function(){return null==this.option},restoreData:function(){},clone:function(){var t=this.constructor;return new t(o.clone(this.option))},setReadOnly:function(t){r.setReadOnly(this,t)}},r.enableClassExtend(n);var a=o.mixin;a(n,i(130)),a(n,i(127)),a(n,i(131)),a(n,i(129)),t.exports=n},function(t,e){function i(t){var e={},i={},n=t.match(/Firefox\/([\d.]+)/),o=t.match(/MSIE\s([\d.]+)/)||t.match(/Trident\/.+?rv:(([\d.]+))/),r=t.match(/Edge\/([\d.]+)/);return n&&(i.firefox=!0,i.version=n[1]),o&&(i.ie=!0,i.version=o[1]),r&&(i.edge=!0,i.version=r[1]),{browser:i,os:e,node:!1,canvasSupported:!!document.createElement("canvas").getContext,touchEventsSupported:"ontouchstart"in window&&!i.ie&&!i.edge,pointerEventsSupported:"onpointerdown"in window&&(i.edge||i.ie&&i.version>=10)}}var n={};n="undefined"==typeof navigator?{browser:{},os:{},node:!0,canvasSupported:!0}:i(navigator.userAgent),t.exports=n},function(t,e,i){function n(t){var e=[];return r.each(h.getClassesByMainType(t),function(t){a.apply(e,t.prototype.dependencies||[])}),r.map(e,function(t){return l.parseClassType(t).main})}var o=i(10),r=i(1),a=Array.prototype.push,s=i(43),l=i(21),u=i(13),h=o.extend({type:"component",id:"",name:"",mainType:"",subType:"",componentIndex:0,defaultOption:null,ecModel:null,dependentModels:[],uid:null,layoutMode:null,$constructor:function(t,e,i,n){o.call(this,t,e,i,n),this.uid=s.getUID("componentModel")},init:function(t,e,i,n){this.mergeDefaultAndTheme(t,i)},mergeDefaultAndTheme:function(t,e){var i=this.layoutMode,n=i?u.getLayoutParams(t):{},o=e.getTheme();r.merge(t,o.get(this.mainType)),r.merge(t,this.getDefaultOption()),i&&u.mergeLayoutParam(t,n,i)},mergeOption:function(t,e){r.merge(this.option,t,!0);var i=this.layoutMode;i&&u.mergeLayoutParam(this.option,t,i)},optionUpdated:function(t,e){},getDefaultOption:function(){if(!this.hasOwnProperty("__defaultOption")){for(var t=[],e=this.constructor;e;){var i=e.prototype.defaultOption;i&&t.push(i),e=e.superClass}for(var n={},o=t.length-1;o>=0;o--)n=r.merge(n,t[o],!0);this.__defaultOption=n}return this.__defaultOption},getReferringComponents:function(t){return this.ecModel.queryComponents({mainType:t,index:this.get(t+"Index",!0),id:this.get(t+"Id",!0)})}});l.enableClassManagement(h,{registerWhenExtend:!0}),s.enableSubTypeDefaulter(h),s.enableTopologicalTravel(h,n),r.mixin(h,i(128)),t.exports=h},function(t,e,i){"use strict";function n(t,e,i,n,o){var r=0,a=0;null==n&&(n=1/0),null==o&&(o=1/0);var s=0;e.eachChild(function(l,u){var h,c,d=l.position,f=l.getBoundingRect(),p=e.childAt(u+1),g=p&&p.getBoundingRect();if("horizontal"===t){var m=f.width+(g?-g.x+f.x:0);h=r+m,h>n||l.newline?(r=0,h=m,a+=s+i,s=f.height):s=Math.max(s,f.height)}else{var v=f.height+(g?-g.y+f.y:0);c=a+v,c>o||l.newline?(r+=s+i,a=0,c=v,s=f.width):s=Math.max(s,f.width)}l.newline||(d[0]=r,d[1]=a,"horizontal"===t?r=h+i:a=c+i)})}var o=i(1),r=i(8),a=i(4),s=i(9),l=a.parsePercent,u=o.each,h={},c=["left","right","top","bottom","width","height"];h.box=n,h.vbox=o.curry(n,"vertical"),h.hbox=o.curry(n,"horizontal"),h.getAvailableSize=function(t,e,i){var n=e.width,o=e.height,r=l(t.x,n),a=l(t.y,o),u=l(t.x2,n),h=l(t.y2,o);return(isNaN(r)||isNaN(parseFloat(t.x)))&&(r=0),(isNaN(u)||isNaN(parseFloat(t.x2)))&&(u=n),(isNaN(a)||isNaN(parseFloat(t.y)))&&(a=0),(isNaN(h)||isNaN(parseFloat(t.y2)))&&(h=o),i=s.normalizeCssArray(i||0),{width:Math.max(u-r-i[1]-i[3],0),height:Math.max(h-a-i[0]-i[2],0)}},h.getLayoutRect=function(t,e,i){i=s.normalizeCssArray(i||0);var n=e.width,o=e.height,a=l(t.left,n),u=l(t.top,o),h=l(t.right,n),c=l(t.bottom,o),d=l(t.width,n),f=l(t.height,o),p=i[2]+i[0],g=i[1]+i[3],m=t.aspect;switch(isNaN(d)&&(d=n-h-g-a),isNaN(f)&&(f=o-c-p-u),isNaN(d)&&isNaN(f)&&(m>n/o?d=.8*n:f=.8*o),null!=m&&(isNaN(d)&&(d=m*f),isNaN(f)&&(f=d/m)),isNaN(a)&&(a=n-h-d-g),isNaN(u)&&(u=o-c-f-p),t.left||t.right){case"center":a=n/2-d/2-i[3];break;case"right":a=n-d-g}switch(t.top||t.bottom){case"middle":case"center":u=o/2-f/2-i[0];break;case"bottom":u=o-f-p}a=a||0,u=u||0,isNaN(d)&&(d=n-a-(h||0)),isNaN(f)&&(f=o-u-(c||0));var v=new r(a+i[3],u+i[0],d,f);return v.margin=i,v},h.positionGroup=function(t,e,i,n){var r=t.getBoundingRect();e=o.extend(o.clone(e),{width:r.width,height:r.height}),e=h.getLayoutRect(e,i,n),t.attr("position",[e.x-r.x,e.y-r.y])},h.mergeLayoutParam=function(t,e,i){function n(n){var o={},s=0,l={},h=0,c=i.ignoreSize?1:2;if(u(n,function(e){l[e]=t[e]}),u(n,function(t){r(e,t)&&(o[t]=l[t]=e[t]),a(o,t)&&s++,a(l,t)&&h++}),h!==c&&s){if(s>=c)return o;for(var d=0;d<n.length;d++){var f=n[d];if(!r(o,f)&&r(t,f)){o[f]=t[f];break}}return o}return l}function r(t,e){return t.hasOwnProperty(e)}function a(t,e){return null!=t[e]&&"auto"!==t[e]}function s(t,e,i){u(t,function(t){e[t]=i[t]})}!o.isObject(i)&&(i={});var l=["width","left","right"],h=["height","top","bottom"],c=n(l),d=n(h);s(l,t,c),s(h,t,d)},h.getLayoutParams=function(t){return h.copyLayoutParams({},t)},h.copyLayoutParams=function(t,e){return e&&t&&u(c,function(i){e.hasOwnProperty(i)&&(t[i]=e[i])}),t},t.exports=h},function(t,e,i){(function(e){function n(t){return d.isArray(t)||(t=[t]),t}function o(t,e){var i=t.dimensions,n=new v(d.map(i,t.getDimensionInfo,t),t.hostModel);
+m(n,t);for(var o=n._storage={},r=t._storage,a=0;a<i.length;a++){var s=i[a],l=r[s];d.indexOf(e,s)>=0?o[s]=new l.constructor(r[s].length):o[s]=r[s]}return n}var r="undefined",a="undefined"==typeof window?e:window,s=typeof a.Float64Array===r?Array:a.Float64Array,l=typeof a.Int32Array===r?Array:a.Int32Array,u={"float":s,"int":l,ordinal:Array,number:Array,time:Array},h=i(10),c=i(45),d=i(1),f=i(7),p=d.isObject,g=["stackedOn","hasItemOption","_nameList","_idList","_rawData"],m=function(t,e){d.each(g.concat(e.__wrappedMethods||[]),function(i){e.hasOwnProperty(i)&&(t[i]=e[i])}),t.__wrappedMethods=e.__wrappedMethods},v=function(t,e){t=t||["x","y"];for(var i={},n=[],o=0;o<t.length;o++){var r,a={};"string"==typeof t[o]?(r=t[o],a={name:r,stackable:!1,type:"number"}):(a=t[o],r=a.name,a.type=a.type||"number"),n.push(r),i[r]=a}this.dimensions=n,this._dimensionInfos=i,this.hostModel=e,this.dataType,this.indices=[],this._storage={},this._nameList=[],this._idList=[],this._optionModels=[],this.stackedOn=null,this._visual={},this._layout={},this._itemVisuals=[],this._itemLayouts=[],this._graphicEls=[],this._rawData,this._extent},y=v.prototype;y.type="list",y.hasItemOption=!0,y.getDimension=function(t){return isNaN(t)||(t=this.dimensions[t]||t),t},y.getDimensionInfo=function(t){return d.clone(this._dimensionInfos[this.getDimension(t)])},y.initData=function(t,e,i){t=t||[],this._rawData=t;var n=this._storage={},o=this.indices=[],r=this.dimensions,a=t.length,s=this._dimensionInfos,l=[],h={};e=e||[];for(var c=0;c<r.length;c++){var d=s[r[c]],p=u[d.type];n[r[c]]=new p(a)}var g=this;i||(g.hasItemOption=!1),i=i||function(t,e,i,n){var o=f.getDataItemValue(t);return f.isDataItemOption(t)&&(g.hasItemOption=!0),f.converDataValue(o instanceof Array?o[n]:o,s[e])};for(var m=0;m<t.length;m++){for(var v=t[m],y=0;y<r.length;y++){var x=r[y],_=n[x];_[m]=i(v,x,m,y)}o.push(m)}for(var c=0;c<t.length;c++){e[c]||t[c]&&null!=t[c].name&&(e[c]=t[c].name);var b=e[c]||"",w=t[c]&&t[c].id;!w&&b&&(h[b]=h[b]||0,w=b,h[b]>0&&(w+="__ec__"+h[b]),h[b]++),w&&(l[c]=w)}this._nameList=e,this._idList=l},y.count=function(){return this.indices.length},y.get=function(t,e,i){var n=this._storage,o=this.indices[e];if(null==o)return NaN;var r=n[t]&&n[t][o];if(i){var a=this._dimensionInfos[t];if(a&&a.stackable)for(var s=this.stackedOn;s;){var l=s.get(t,e);(r>=0&&l>0||r<=0&&l<0)&&(r+=l),s=s.stackedOn}}return r},y.getValues=function(t,e,i){var n=[];d.isArray(t)||(i=e,e=t,t=this.dimensions);for(var o=0,r=t.length;o<r;o++)n.push(this.get(t[o],e,i));return n},y.hasValue=function(t){for(var e=this.dimensions,i=this._dimensionInfos,n=0,o=e.length;n<o;n++)if("ordinal"!==i[e[n]].type&&isNaN(this.get(e[n],t)))return!1;return!0},y.getDataExtent=function(t,e){t=this.getDimension(t);var i=this._storage[t],n=this.getDimensionInfo(t);e=n&&n.stackable&&e;var o,r=(this._extent||(this._extent={}))[t+!!e];if(r)return r;if(i){for(var a=1/0,s=-(1/0),l=0,u=this.count();l<u;l++)o=this.get(t,l,e),o<a&&(a=o),o>s&&(s=o);return this._extent[t+!!e]=[a,s]}return[1/0,-(1/0)]},y.getSum=function(t,e){var i=this._storage[t],n=0;if(i)for(var o=0,r=this.count();o<r;o++){var a=this.get(t,o,e);isNaN(a)||(n+=a)}return n},y.indexOf=function(t,e){var i=this._storage,n=i[t],o=this.indices;if(n)for(var r=0,a=o.length;r<a;r++){var s=o[r];if(n[s]===e)return r}return-1},y.indexOfName=function(t){for(var e=this.indices,i=this._nameList,n=0,o=e.length;n<o;n++){var r=e[n];if(i[r]===t)return n}return-1},y.indexOfRawIndex=function(t){var e=this.indices,i=e[t];if(null!=i&&i===t)return t;for(var n=0,o=e.length-1;n<=o;){var r=(n+o)/2|0;if(e[r]<t)n=r+1;else{if(!(e[r]>t))return r;o=r-1}}return-1},y.indexOfNearest=function(t,e,i,n){var o=this._storage,r=o[t];null==n&&(n=1/0);var a=-1;if(r)for(var s=Number.MAX_VALUE,l=0,u=this.count();l<u;l++){var h=e-this.get(t,l,i),c=Math.abs(h);h<=n&&(c<s||c===s&&h>0)&&(s=c,a=l)}return a},y.getRawIndex=function(t){var e=this.indices[t];return null==e?-1:e},y.getRawDataItem=function(t){return this._rawData[this.getRawIndex(t)]},y.getName=function(t){return this._nameList[this.indices[t]]||""},y.getId=function(t){return this._idList[this.indices[t]]||this.getRawIndex(t)+""},y.each=function(t,e,i,o){"function"==typeof t&&(o=i,i=e,e=t,t=[]),t=d.map(n(t),this.getDimension,this);var r=[],a=t.length,s=this.indices;o=o||this;for(var l=0;l<s.length;l++)switch(a){case 0:e.call(o,l);break;case 1:e.call(o,this.get(t[0],l,i),l);break;case 2:e.call(o,this.get(t[0],l,i),this.get(t[1],l,i),l);break;default:for(var u=0;u<a;u++)r[u]=this.get(t[u],l,i);r[u]=l,e.apply(o,r)}},y.filterSelf=function(t,e,i,o){"function"==typeof t&&(o=i,i=e,e=t,t=[]),t=d.map(n(t),this.getDimension,this);var r=[],a=[],s=t.length,l=this.indices;o=o||this;for(var u=0;u<l.length;u++){var h;if(1===s)h=e.call(o,this.get(t[0],u,i),u);else{for(var c=0;c<s;c++)a[c]=this.get(t[c],u,i);a[c]=u,h=e.apply(o,a)}h&&r.push(l[u])}return this.indices=r,this._extent={},this},y.mapArray=function(t,e,i,n){"function"==typeof t&&(n=i,i=e,e=t,t=[]);var o=[];return this.each(t,function(){o.push(e&&e.apply(this,arguments))},i,n),o},y.map=function(t,e,i,r){t=d.map(n(t),this.getDimension,this);var a=o(this,t),s=a.indices=this.indices,l=a._storage,u=[];return this.each(t,function(){var i=arguments[arguments.length-1],n=e&&e.apply(this,arguments);if(null!=n){"number"==typeof n&&(u[0]=n,n=u);for(var o=0;o<n.length;o++){var r=t[o],a=l[r],h=s[i];a&&(a[h]=n[o])}}},i,r),a},y.downSample=function(t,e,i,n){for(var r=o(this,[t]),a=this._storage,s=r._storage,l=this.indices,u=r.indices=[],h=[],c=[],d=Math.floor(1/e),f=s[t],p=this.count(),g=0;g<a[t].length;g++)s[t][g]=a[t][g];for(var g=0;g<p;g+=d){d>p-g&&(d=p-g,h.length=d);for(var m=0;m<d;m++){var v=l[g+m];h[m]=f[v],c[m]=v}var y=i(h),v=c[n(h,y)||0];f[v]=y,u.push(v)}return r},y.getItemModel=function(t){var e=this.hostModel;return t=this.indices[t],new h(this._rawData[t],e,e&&e.ecModel)},y.diff=function(t){var e=this._idList,i=t&&t._idList;return new c(t?t.indices:[],this.indices,function(t){return i[t]||t+""},function(t){return e[t]||t+""})},y.getVisual=function(t){var e=this._visual;return e&&e[t]},y.setVisual=function(t,e){if(p(t))for(var i in t)t.hasOwnProperty(i)&&this.setVisual(i,t[i]);else this._visual=this._visual||{},this._visual[t]=e},y.setLayout=function(t,e){if(p(t))for(var i in t)t.hasOwnProperty(i)&&this.setLayout(i,t[i]);else this._layout[t]=e},y.getLayout=function(t){return this._layout[t]},y.getItemLayout=function(t){return this._itemLayouts[t]},y.setItemLayout=function(t,e,i){this._itemLayouts[t]=i?d.extend(this._itemLayouts[t]||{},e):e},y.clearItemLayouts=function(){this._itemLayouts.length=0},y.getItemVisual=function(t,e,i){var n=this._itemVisuals[t],o=n&&n[e];return null!=o||i?o:this.getVisual(e)},y.setItemVisual=function(t,e,i){var n=this._itemVisuals[t]||{};if(this._itemVisuals[t]=n,p(e))for(var o in e)e.hasOwnProperty(o)&&(n[o]=e[o]);else n[e]=i},y.clearAllVisual=function(){this._visual={},this._itemVisuals=[]};var x=function(t){t.seriesIndex=this.seriesIndex,t.dataIndex=this.dataIndex,t.dataType=this.dataType};y.setItemGraphicEl=function(t,e){var i=this.hostModel;e&&(e.dataIndex=t,e.dataType=this.dataType,e.seriesIndex=i&&i.seriesIndex,"group"===e.type&&e.traverse(x,e)),this._graphicEls[t]=e},y.getItemGraphicEl=function(t){return this._graphicEls[t]},y.eachItemGraphicEl=function(t,e){d.each(this._graphicEls,function(i,n){i&&t&&t.call(e,i,n)})},y.cloneShallow=function(){var t=d.map(this.dimensions,this.getDimensionInfo,this),e=new v(t,this.hostModel);return e._storage=this._storage,m(e,this),e.indices=this.indices.slice(),this._extent&&(e._extent=d.extend({},this._extent)),e},y.wrapMethod=function(t,e){var i=this[t];"function"==typeof i&&(this.__wrappedMethods=this.__wrappedMethods||[],this.__wrappedMethods.push(t),this[t]=function(){var t=i.apply(this,arguments);return e.apply(this,[t].concat(d.slice(arguments)))})},y.TRANSFERABLE_METHODS=["cloneShallow","downSample","map"],y.CHANGABLE_METHODS=["filterSelf"],t.exports=v}).call(e,function(){return this}())},function(t,e,i){"use strict";var n=i(1),o=i(9),r=i(7),a=i(12),s=i(56),l=i(11),u=o.encodeHTML,h=o.addCommas,c=a.extend({type:"series.__base__",seriesIndex:0,coordinateSystem:null,defaultOption:null,legendDataProvider:null,visualColorAccessPath:"itemStyle.normal.color",init:function(t,e,i,n){this.seriesIndex=this.componentIndex,this.mergeDefaultAndTheme(t,i),this._dataBeforeProcessed=this.getInitialData(t,i),this._data=this._dataBeforeProcessed.cloneShallow()},mergeDefaultAndTheme:function(t,e){n.merge(t,e.getTheme().get(this.subType)),n.merge(t,this.getDefaultOption()),r.defaultEmphasis(t.label,r.LABEL_OPTIONS),this.fillDataTextStyle(t.data)},mergeOption:function(t,e){t=n.merge(this.option,t,!0),this.fillDataTextStyle(t.data);var i=this.getInitialData(t,e);i&&(this._data=i,this._dataBeforeProcessed=i.cloneShallow())},fillDataTextStyle:function(t){if(t)for(var e=0;e<t.length;e++)t[e]&&t[e].label&&r.defaultEmphasis(t[e].label,r.LABEL_OPTIONS)},getInitialData:function(){},getData:function(t){return null==t?this._data:this._data.getLinkedData(t)},setData:function(t){this._data=t},getRawData:function(){return this._dataBeforeProcessed},coordDimToDataDim:function(t){return[t]},dataDimToCoordDim:function(t){return t},getBaseAxis:function(){var t=this.coordinateSystem;return t&&t.getBaseAxis&&t.getBaseAxis()},formatTooltip:function(t,e,i){function r(t){var i=[];return n.each(t,function(t,n){var r,s=a.getDimensionInfo(n),l=s&&s.type;r="ordinal"===l?t+"":"time"===l?e?"":o.formatTime("yyyy/MM/dd hh:mm:ss",t):h(t),r&&i.push(r)}),i.join(", ")}var a=this._data,s=this.getRawValue(t),l=n.isArray(s)?r(s):h(s),c=a.getName(t),d=a.getItemVisual(t,"color");n.isObject(d)&&d.colorStops&&(d=(d.colorStops[0]||{}).color),d=d||"transparent";var f='<span style="display:inline-block;margin-right:5px;border-radius:10px;width:9px;height:9px;background-color:'+d+'"></span>',p=this.name;return"\0-"===p&&(p=""),e?f+u(this.name)+" : "+l:(p&&u(p)+"<br />")+f+(c?u(c)+" : "+l:l)},ifEnableAnimation:function(){if(l.node)return!1;var t=this.getShallow("animation");return t&&this.getData().count()>this.getShallow("animationThreshold")&&(t=!1),t},restoreData:function(){this._data=this._dataBeforeProcessed.cloneShallow()},getColorFromPalette:function(t,e){var i=this.ecModel,n=s.getColorFromPalette.call(this,t,e);return n||(n=i.getColorFromPalette(t,e)),n},getAxisTooltipDataIndex:null,getTooltipPosition:null});n.mixin(c,r.dataFormatMixin),n.mixin(c,s),t.exports=c},function(t,e,i){function n(t,e){var i=t+":"+e;if(l[i])return l[i];for(var n=(t+"").split("\n"),o=0,r=0,a=n.length;r<a;r++)o=Math.max(p.measureText(n[r],e).width,o);return u>h&&(u=0,l={}),u++,l[i]=o,o}function o(t,e,i,o){var r=((t||"")+"").split("\n").length,a=n(t,e),s=n("国",e),l=r*s,u=new d(0,0,a,l);switch(u.lineHeight=s,o){case"bottom":case"alphabetic":u.y-=s;break;case"middle":u.y-=s/2}switch(i){case"end":case"right":u.x-=u.width;break;case"center":u.x-=u.width/2}return u}function r(t,e,i,n){var o=e.x,r=e.y,a=e.height,s=e.width,l=i.height,u=a/2-l/2,h="left";switch(t){case"left":o-=n,r+=u,h="right";break;case"right":o+=n+s,r+=u,h="left";break;case"top":o+=s/2,r-=n+l,h="center";break;case"bottom":o+=s/2,r+=a+n,h="center";break;case"inside":o+=s/2,r+=u,h="center";break;case"insideLeft":o+=n,r+=u,h="left";break;case"insideRight":o+=s-n,r+=u,h="right";break;case"insideTop":o+=s/2,r+=n,h="center";break;case"insideBottom":o+=s/2,r+=a-l-n,h="center";break;case"insideTopLeft":o+=n,r+=n,h="left";break;case"insideTopRight":o+=s-n,r+=n,h="right";break;case"insideBottomLeft":o+=n,r+=a-l-n;break;case"insideBottomRight":o+=s-n,r+=a-l-n,h="right"}return{x:o,y:r,textAlign:h,textBaseline:"top"}}function a(t,e,i,o,r){if(!e)return"";r=r||{},o=f(o,"...");for(var a=f(r.maxIterations,2),l=f(r.minChar,0),u=n("国",i),h=n("a",i),c=f(r.placeholder,""),d=e=Math.max(0,e-1),p=0;p<l&&d>=h;p++)d-=h;var g=n(o);g>d&&(o="",g=0),d=e-g;for(var m=(t+"").split("\n"),p=0,v=m.length;p<v;p++){var y=m[p],x=n(y,i);if(!(x<=e)){for(var _=0;;_++){if(x<=d||_>=a){y+=o;break}var b=0===_?s(y,d,h,u):x>0?Math.floor(y.length*d/x):0;y=y.substr(0,b),x=n(y,i)}""===y&&(y=c),m[p]=y}}return m.join("\n")}function s(t,e,i,n){for(var o=0,r=0,a=t.length;r<a&&o<e;r++){var s=t.charCodeAt(r);o+=0<=s&&s<=127?i:n}return r}var l={},u=0,h=5e3,c=i(1),d=i(8),f=c.retrieve,p={getWidth:n,getBoundingRect:o,adjustTextPositionOnRect:r,truncateText:a,measureText:function(t,e){var i=c.getContext();return i.font=e||"12px sans-serif",i.measureText(t)}};t.exports=p},function(t,e,i){"use strict";function n(t){return t>-w&&t<w}function o(t){return t>w||t<-w}function r(t,e,i,n,o){var r=1-o;return r*r*(r*t+3*o*e)+o*o*(o*n+3*r*i)}function a(t,e,i,n,o){var r=1-o;return 3*(((e-t)*r+2*(i-e)*o)*r+(n-i)*o*o)}function s(t,e,i,o,r,a){var s=o+3*(e-i)-t,l=3*(i-2*e+t),u=3*(e-t),h=t-r,c=l*l-3*s*u,d=l*u-9*s*h,f=u*u-3*l*h,p=0;if(n(c)&&n(d))if(n(l))a[0]=0;else{var g=-u/l;g>=0&&g<=1&&(a[p++]=g)}else{var m=d*d-4*c*f;if(n(m)){var v=d/c,g=-l/s+v,y=-v/2;g>=0&&g<=1&&(a[p++]=g),y>=0&&y<=1&&(a[p++]=y)}else if(m>0){var x=b(m),w=c*l+1.5*s*(-d+x),S=c*l+1.5*s*(-d-x);w=w<0?-_(-w,T):_(w,T),S=S<0?-_(-S,T):_(S,T);var g=(-l-(w+S))/(3*s);g>=0&&g<=1&&(a[p++]=g)}else{var I=(2*c*l-3*s*d)/(2*b(c*c*c)),A=Math.acos(I)/3,L=b(c),C=Math.cos(A),g=(-l-2*L*C)/(3*s),y=(-l+L*(C+M*Math.sin(A)))/(3*s),D=(-l+L*(C-M*Math.sin(A)))/(3*s);g>=0&&g<=1&&(a[p++]=g),y>=0&&y<=1&&(a[p++]=y),D>=0&&D<=1&&(a[p++]=D)}}return p}function l(t,e,i,r,a){var s=6*i-12*e+6*t,l=9*e+3*r-3*t-9*i,u=3*e-3*t,h=0;if(n(l)){if(o(s)){var c=-u/s;c>=0&&c<=1&&(a[h++]=c)}}else{var d=s*s-4*l*u;if(n(d))a[0]=-s/(2*l);else if(d>0){var f=b(d),c=(-s+f)/(2*l),p=(-s-f)/(2*l);c>=0&&c<=1&&(a[h++]=c),p>=0&&p<=1&&(a[h++]=p)}}return h}function u(t,e,i,n,o,r){var a=(e-t)*o+t,s=(i-e)*o+e,l=(n-i)*o+i,u=(s-a)*o+a,h=(l-s)*o+s,c=(h-u)*o+u;r[0]=t,r[1]=a,r[2]=u,r[3]=c,r[4]=c,r[5]=h,r[6]=l,r[7]=n}function h(t,e,i,n,o,a,s,l,u,h,c){var d,f,p,g,m,v=.005,y=1/0;I[0]=u,I[1]=h;for(var _=0;_<1;_+=.05)A[0]=r(t,i,o,s,_),A[1]=r(e,n,a,l,_),g=x(I,A),g<y&&(d=_,y=g);y=1/0;for(var w=0;w<32&&!(v<S);w++)f=d-v,p=d+v,A[0]=r(t,i,o,s,f),A[1]=r(e,n,a,l,f),g=x(A,I),f>=0&&g<y?(d=f,y=g):(L[0]=r(t,i,o,s,p),L[1]=r(e,n,a,l,p),m=x(L,I),p<=1&&m<y?(d=p,y=m):v*=.5);return c&&(c[0]=r(t,i,o,s,d),c[1]=r(e,n,a,l,d)),b(y)}function c(t,e,i,n){var o=1-n;return o*(o*t+2*n*e)+n*n*i}function d(t,e,i,n){return 2*((1-n)*(e-t)+n*(i-e))}function f(t,e,i,r,a){var s=t-2*e+i,l=2*(e-t),u=t-r,h=0;if(n(s)){if(o(l)){var c=-u/l;c>=0&&c<=1&&(a[h++]=c)}}else{var d=l*l-4*s*u;if(n(d)){var c=-l/(2*s);c>=0&&c<=1&&(a[h++]=c)}else if(d>0){var f=b(d),c=(-l+f)/(2*s),p=(-l-f)/(2*s);c>=0&&c<=1&&(a[h++]=c),p>=0&&p<=1&&(a[h++]=p)}}return h}function p(t,e,i){var n=t+i-2*e;return 0===n?.5:(t-e)/n}function g(t,e,i,n,o){var r=(e-t)*n+t,a=(i-e)*n+e,s=(a-r)*n+r;o[0]=t,o[1]=r,o[2]=s,o[3]=s,o[4]=a,o[5]=i}function m(t,e,i,n,o,r,a,s,l){var u,h=.005,d=1/0;I[0]=a,I[1]=s;for(var f=0;f<1;f+=.05){A[0]=c(t,i,o,f),A[1]=c(e,n,r,f);var p=x(I,A);p<d&&(u=f,d=p)}d=1/0;for(var g=0;g<32&&!(h<S);g++){var m=u-h,v=u+h;A[0]=c(t,i,o,m),A[1]=c(e,n,r,m);var p=x(A,I);if(m>=0&&p<d)u=m,d=p;else{L[0]=c(t,i,o,v),L[1]=c(e,n,r,v);var y=x(L,I);v<=1&&y<d?(u=v,d=y):h*=.5}}return l&&(l[0]=c(t,i,o,u),l[1]=c(e,n,r,u)),b(d)}var v=i(5),y=v.create,x=v.distSquare,_=Math.pow,b=Math.sqrt,w=1e-8,S=1e-4,M=b(3),T=1/3,I=y(),A=y(),L=y();t.exports={cubicAt:r,cubicDerivativeAt:a,cubicRootAt:s,cubicExtrema:l,cubicSubdivide:u,cubicProjectPoint:h,quadraticAt:c,quadraticDerivativeAt:d,quadraticRootAt:f,quadraticExtremum:p,quadraticSubdivide:g,quadraticProjectPoint:m}},function(t,e){function i(t){return t=Math.round(t),t<0?0:t>255?255:t}function n(t){return t=Math.round(t),t<0?0:t>360?360:t}function o(t){return t<0?0:t>1?1:t}function r(t){return i(t.length&&"%"===t.charAt(t.length-1)?parseFloat(t)/100*255:parseInt(t,10))}function a(t){return o(t.length&&"%"===t.charAt(t.length-1)?parseFloat(t)/100:parseFloat(t))}function s(t,e,i){return i<0?i+=1:i>1&&(i-=1),6*i<1?t+(e-t)*i*6:2*i<1?e:3*i<2?t+(e-t)*(2/3-i)*6:t}function l(t,e,i){return t+(e-t)*i}function u(t){if(t){t+="";var e=t.replace(/ /g,"").toLowerCase();if(e in x)return x[e].slice();if("#"!==e.charAt(0)){var i=e.indexOf("("),n=e.indexOf(")");if(i!==-1&&n+1===e.length){var o=e.substr(0,i),s=e.substr(i+1,n-(i+1)).split(","),l=1;switch(o){case"rgba":if(4!==s.length)return;l=a(s.pop());case"rgb":if(3!==s.length)return;return[r(s[0]),r(s[1]),r(s[2]),l];case"hsla":if(4!==s.length)return;return s[3]=a(s[3]),h(s);case"hsl":if(3!==s.length)return;return h(s);default:return}}}else{if(4===e.length){var u=parseInt(e.substr(1),16);if(!(u>=0&&u<=4095))return;return[(3840&u)>>4|(3840&u)>>8,240&u|(240&u)>>4,15&u|(15&u)<<4,1]}if(7===e.length){var u=parseInt(e.substr(1),16);if(!(u>=0&&u<=16777215))return;return[(16711680&u)>>16,(65280&u)>>8,255&u,1]}}}}function h(t){var e=(parseFloat(t[0])%360+360)%360/360,n=a(t[1]),o=a(t[2]),r=o<=.5?o*(n+1):o+n-o*n,l=2*o-r,u=[i(255*s(l,r,e+1/3)),i(255*s(l,r,e)),i(255*s(l,r,e-1/3))];return 4===t.length&&(u[3]=t[3]),u}function c(t){if(t){var e,i,n=t[0]/255,o=t[1]/255,r=t[2]/255,a=Math.min(n,o,r),s=Math.max(n,o,r),l=s-a,u=(s+a)/2;if(0===l)e=0,i=0;else{i=u<.5?l/(s+a):l/(2-s-a);var h=((s-n)/6+l/2)/l,c=((s-o)/6+l/2)/l,d=((s-r)/6+l/2)/l;n===s?e=d-c:o===s?e=1/3+h-d:r===s&&(e=2/3+c-h),e<0&&(e+=1),e>1&&(e-=1)}var f=[360*e,i,u];return null!=t[3]&&f.push(t[3]),f}}function d(t,e){var i=u(t);if(i){for(var n=0;n<3;n++)e<0?i[n]=i[n]*(1-e)|0:i[n]=(255-i[n])*e+i[n]|0;return y(i,4===i.length?"rgba":"rgb")}}function f(t,e){var i=u(t);if(i)return((1<<24)+(i[0]<<16)+(i[1]<<8)+ +i[2]).toString(16).slice(1)}function p(t,e,n){if(e&&e.length&&t>=0&&t<=1){n=n||[0,0,0,0];var o=t*(e.length-1),r=Math.floor(o),a=Math.ceil(o),s=e[r],u=e[a],h=o-r;return n[0]=i(l(s[0],u[0],h)),n[1]=i(l(s[1],u[1],h)),n[2]=i(l(s[2],u[2],h)),n[3]=i(l(s[3],u[3],h)),n}}function g(t,e,n){if(e&&e.length&&t>=0&&t<=1){var r=t*(e.length-1),a=Math.floor(r),s=Math.ceil(r),h=u(e[a]),c=u(e[s]),d=r-a,f=y([i(l(h[0],c[0],d)),i(l(h[1],c[1],d)),i(l(h[2],c[2],d)),o(l(h[3],c[3],d))],"rgba");return n?{color:f,leftIndex:a,rightIndex:s,value:r}:f}}function m(t,e,i,o){if(t=u(t))return t=c(t),null!=e&&(t[0]=n(e)),null!=i&&(t[1]=a(i)),null!=o&&(t[2]=a(o)),y(h(t),"rgba")}function v(t,e){if(t=u(t),t&&null!=e)return t[3]=o(e),y(t,"rgba")}function y(t,e){var i=t[0]+","+t[1]+","+t[2];return"rgba"!==e&&"hsva"!==e&&"hsla"!==e||(i+=","+t[3]),e+"("+i+")"}var x={transparent:[0,0,0,0],aliceblue:[240,248,255,1],antiquewhite:[250,235,215,1],aqua:[0,255,255,1],aquamarine:[127,255,212,1],azure:[240,255,255,1],beige:[245,245,220,1],bisque:[255,228,196,1],black:[0,0,0,1],blanchedalmond:[255,235,205,1],blue:[0,0,255,1],blueviolet:[138,43,226,1],brown:[165,42,42,1],burlywood:[222,184,135,1],cadetblue:[95,158,160,1],chartreuse:[127,255,0,1],chocolate:[210,105,30,1],coral:[255,127,80,1],cornflowerblue:[100,149,237,1],cornsilk:[255,248,220,1],crimson:[220,20,60,1],cyan:[0,255,255,1],darkblue:[0,0,139,1],darkcyan:[0,139,139,1],darkgoldenrod:[184,134,11,1],darkgray:[169,169,169,1],darkgreen:[0,100,0,1],darkgrey:[169,169,169,1],darkkhaki:[189,183,107,1],darkmagenta:[139,0,139,1],darkolivegreen:[85,107,47,1],darkorange:[255,140,0,1],darkorchid:[153,50,204,1],darkred:[139,0,0,1],darksalmon:[233,150,122,1],darkseagreen:[143,188,143,1],darkslateblue:[72,61,139,1],darkslategray:[47,79,79,1],darkslategrey:[47,79,79,1],darkturquoise:[0,206,209,1],darkviolet:[148,0,211,1],deeppink:[255,20,147,1],deepskyblue:[0,191,255,1],dimgray:[105,105,105,1],dimgrey:[105,105,105,1],dodgerblue:[30,144,255,1],firebrick:[178,34,34,1],floralwhite:[255,250,240,1],forestgreen:[34,139,34,1],fuchsia:[255,0,255,1],gainsboro:[220,220,220,1],ghostwhite:[248,248,255,1],gold:[255,215,0,1],goldenrod:[218,165,32,1],gray:[128,128,128,1],green:[0,128,0,1],greenyellow:[173,255,47,1],grey:[128,128,128,1],honeydew:[240,255,240,1],hotpink:[255,105,180,1],indianred:[205,92,92,1],indigo:[75,0,130,1],ivory:[255,255,240,1],khaki:[240,230,140,1],lavender:[230,230,250,1],lavenderblush:[255,240,245,1],lawngreen:[124,252,0,1],lemonchiffon:[255,250,205,1],lightblue:[173,216,230,1],lightcoral:[240,128,128,1],lightcyan:[224,255,255,1],lightgoldenrodyellow:[250,250,210,1],lightgray:[211,211,211,1],lightgreen:[144,238,144,1],lightgrey:[211,211,211,1],lightpink:[255,182,193,1],lightsalmon:[255,160,122,1],lightseagreen:[32,178,170,1],lightskyblue:[135,206,250,1],lightslategray:[119,136,153,1],lightslategrey:[119,136,153,1],lightsteelblue:[176,196,222,1],lightyellow:[255,255,224,1],lime:[0,255,0,1],limegreen:[50,205,50,1],linen:[250,240,230,1],magenta:[255,0,255,1],maroon:[128,0,0,1],mediumaquamarine:[102,205,170,1],mediumblue:[0,0,205,1],mediumorchid:[186,85,211,1],mediumpurple:[147,112,219,1],mediumseagreen:[60,179,113,1],mediumslateblue:[123,104,238,1],mediumspringgreen:[0,250,154,1],mediumturquoise:[72,209,204,1],mediumvioletred:[199,21,133,1],midnightblue:[25,25,112,1],mintcream:[245,255,250,1],mistyrose:[255,228,225,1],moccasin:[255,228,181,1],navajowhite:[255,222,173,1],navy:[0,0,128,1],oldlace:[253,245,230,1],olive:[128,128,0,1],olivedrab:[107,142,35,1],orange:[255,165,0,1],orangered:[255,69,0,1],orchid:[218,112,214,1],palegoldenrod:[238,232,170,1],palegreen:[152,251,152,1],paleturquoise:[175,238,238,1],palevioletred:[219,112,147,1],papayawhip:[255,239,213,1],peachpuff:[255,218,185,1],peru:[205,133,63,1],pink:[255,192,203,1],plum:[221,160,221,1],powderblue:[176,224,230,1],purple:[128,0,128,1],red:[255,0,0,1],rosybrown:[188,143,143,1],royalblue:[65,105,225,1],saddlebrown:[139,69,19,1],salmon:[250,128,114,1],sandybrown:[244,164,96,1],seagreen:[46,139,87,1],seashell:[255,245,238,1],sienna:[160,82,45,1],silver:[192,192,192,1],skyblue:[135,206,235,1],slateblue:[106,90,205,1],slategray:[112,128,144,1],slategrey:[112,128,144,1],snow:[255,250,250,1],springgreen:[0,255,127,1],steelblue:[70,130,180,1],tan:[210,180,140,1],teal:[0,128,128,1],thistle:[216,191,216,1],tomato:[255,99,71,1],turquoise:[64,224,208,1],violet:[238,130,238,1],wheat:[245,222,179,1],white:[255,255,255,1],whitesmoke:[245,245,245,1],yellow:[255,255,0,1],yellowgreen:[154,205,50,1]};t.exports={parse:u,lift:d,toHex:f,fastMapToColor:p,mapToColor:g,modifyHSL:m,modifyAlpha:v,stringify:y}},function(t,e){var i="undefined"==typeof Float32Array?Array:Float32Array,n={create:function(){var t=new i(6);return n.identity(t),t},identity:function(t){return t[0]=1,t[1]=0,t[2]=0,t[3]=1,t[4]=0,t[5]=0,t},copy:function(t,e){return t[0]=e[0],t[1]=e[1],t[2]=e[2],t[3]=e[3],t[4]=e[4],t[5]=e[5],t},mul:function(t,e,i){var n=e[0]*i[0]+e[2]*i[1],o=e[1]*i[0]+e[3]*i[1],r=e[0]*i[2]+e[2]*i[3],a=e[1]*i[2]+e[3]*i[3],s=e[0]*i[4]+e[2]*i[5]+e[4],l=e[1]*i[4]+e[3]*i[5]+e[5];return t[0]=n,t[1]=o,t[2]=r,t[3]=a,t[4]=s,t[5]=l,t},translate:function(t,e,i){return t[0]=e[0],t[1]=e[1],t[2]=e[2],t[3]=e[3],t[4]=e[4]+i[0],t[5]=e[5]+i[1],t},rotate:function(t,e,i){var n=e[0],o=e[2],r=e[4],a=e[1],s=e[3],l=e[5],u=Math.sin(i),h=Math.cos(i);return t[0]=n*h+a*u,t[1]=-n*u+a*h,t[2]=o*h+s*u,t[3]=-o*u+h*s,t[4]=h*r+u*l,t[5]=h*l-u*r,t},scale:function(t,e,i){var n=i[0],o=i[1];return t[0]=e[0]*n,t[1]=e[1]*o,t[2]=e[2]*n,t[3]=e[3]*o,t[4]=e[4]*n,t[5]=e[5]*o,t},invert:function(t,e){var i=e[0],n=e[2],o=e[4],r=e[1],a=e[3],s=e[5],l=i*a-r*n;return l?(l=1/l,t[0]=a*l,t[1]=-r*l,t[2]=-n*l,t[3]=i*l,t[4]=(n*s-a*o)*l,t[5]=(r*o-i*s)*l,t):null}};t.exports=n},function(t,e){var i=Array.prototype.slice,n=function(){this._$handlers={}};n.prototype={constructor:n,one:function(t,e,i){var n=this._$handlers;if(!e||!t)return this;n[t]||(n[t]=[]);for(var o=0;o<n[t].length;o++)if(n[t][o].h===e)return this;return n[t].push({h:e,one:!0,ctx:i||this}),this},on:function(t,e,i){var n=this._$handlers;if(!e||!t)return this;n[t]||(n[t]=[]);for(var o=0;o<n[t].length;o++)if(n[t][o].h===e)return this;return n[t].push({h:e,one:!1,ctx:i||this}),this},isSilent:function(t){var e=this._$handlers;return e[t]&&e[t].length},off:function(t,e){var i=this._$handlers;if(!t)return this._$handlers={},this;if(e){if(i[t]){for(var n=[],o=0,r=i[t].length;o<r;o++)i[t][o].h!=e&&n.push(i[t][o]);i[t]=n}i[t]&&0===i[t].length&&delete i[t]}else delete i[t];return this},trigger:function(t){if(this._$handlers[t]){var e=arguments,n=e.length;n>3&&(e=i.call(e,1));for(var o=this._$handlers[t],r=o.length,a=0;a<r;){switch(n){case 1:o[a].h.call(o[a].ctx);break;case 2:o[a].h.call(o[a].ctx,e[1]);break;case 3:o[a].h.call(o[a].ctx,e[1],e[2]);break;default:o[a].h.apply(o[a].ctx,e)}o[a].one?(o.splice(a,1),r--):a++}}return this},triggerWithContext:function(t){if(this._$handlers[t]){var e=arguments,n=e.length;n>4&&(e=i.call(e,1,e.length-1));for(var o=e[e.length-1],r=this._$handlers[t],a=r.length,s=0;s<a;){switch(n){case 1:r[s].h.call(o);break;case 2:r[s].h.call(o,e[1]);break;case 3:r[s].h.call(o,e[1],e[2]);break;default:r[s].h.apply(o,e)}r[s].one?(r.splice(s,1),a--):s++}}return this}},t.exports=n},function(t,e,i){function n(t,e){var i=r.slice(arguments,2);return this.superClass.prototype[e].apply(t,i)}function o(t,e,i){return this.superClass.prototype[e].apply(t,i)}var r=i(1),a={},s=".",l="___EC__COMPONENT__CONTAINER___",u=a.parseClassType=function(t){var e={main:"",sub:""};return t&&(t=t.split(s),e.main=t[0]||"",e.sub=t[1]||""),e};a.enableClassExtend=function(t,e){t.$constructor=t,t.extend=function(t){var e=this,i=function(){t.$constructor?t.$constructor.apply(this,arguments):e.apply(this,arguments)};return r.extend(i.prototype,t),i.extend=this.extend,i.superCall=n,i.superApply=o,r.inherits(i,this),i.superClass=e,i}},a.enableClassManagement=function(t,e){function i(t){var e=n[t.main];return e&&e[l]||(e=n[t.main]={},e[l]=!0),e}e=e||{};var n={};if(t.registerClass=function(t,e){if(e)if(e=u(e),e.sub){if(e.sub!==l){var o=i(e);o[e.sub]=t}}else n[e.main]=t;return t},t.getClass=function(t,e,i){var o=n[t];if(o&&o[l]&&(o=e?o[e]:null),i&&!o)throw new Error("Component "+t+"."+(e||"")+" not exists. Load it first.");return o},t.getClassesByMainType=function(t){t=u(t);var e=[],i=n[t.main];return i&&i[l]?r.each(i,function(t,i){i!==l&&e.push(t)}):e.push(i),e},t.hasClass=function(t){return t=u(t),!!n[t.main]},t.getAllClassMainTypes=function(){var t=[];return r.each(n,function(e,i){t.push(i)}),t},t.hasSubTypes=function(t){t=u(t);var e=n[t.main];return e&&e[l]},t.parseClassType=u,e.registerWhenExtend){var o=t.extend;o&&(t.extend=function(e){var i=o.call(this,e);return t.registerClass(i,e.type)})}return t},a.setReadOnly=function(t,e){},t.exports=a},function(t,e,i){var n=i(136),o=i(38);i(137),i(135);var r=i(31),a=i(4),s=i(1),l=i(16),u={};u.getScaleExtent=function(t,e){var i=t.scale,n=i.getExtent(),o=n[1]-n[0];if("ordinal"===i.type)return isFinite(o)?n:[0,0];var r=e.getMin?e.getMin():e.get("min"),l=e.getMax?e.getMax():e.get("max"),u=e.getNeedCrossZero?e.getNeedCrossZero():!e.get("scale"),h=e.get("boundaryGap");s.isArray(h)||(h=[h||0,h||0]),h[0]=a.parsePercent(h[0],1),h[1]=a.parsePercent(h[1],1);var c=!0,d=!0;return null==r&&(r=n[0]-h[0]*o,c=!1),null==l&&(l=n[1]+h[1]*o,d=!1),"dataMin"===r&&(r=n[0]),"dataMax"===l&&(l=n[1]),u&&(r>0&&l>0&&!c&&(r=0),r<0&&l<0&&!d&&(l=0)),[r,l]},u.niceScaleExtent=function(t,e){var i=t.scale,n=u.getScaleExtent(t,e),o=null!=(e.getMin?e.getMin():e.get("min")),r=null!=(e.getMax?e.getMax():e.get("max")),a=e.get("splitNumber");"log"===i.type&&(i.base=e.get("logBase")),i.setExtent(n[0],n[1]),i.niceExtent(a,o,r);var s=e.get("minInterval");if(isFinite(s)&&!o&&!r&&"interval"===i.type){var l=i.getInterval(),h=Math.max(Math.abs(l),s)/l;n=i.getExtent();var c=(n[1]+n[0])/2;i.setExtent(h*(n[0]-c)+c,h*(n[1]-c)+c),i.niceExtent(a)}var l=e.get("interval");null!=l&&i.setInterval&&i.setInterval(l)},u.createScaleByModel=function(t,e){if(e=e||t.get("type"))switch(e){case"category":return new n(t.getCategories(),[1/0,-(1/0)]);case"value":return new o;default:return(r.getClass(e)||o).create(t)}},u.ifAxisCrossZero=function(t){var e=t.scale.getExtent(),i=e[0],n=e[1];return!(i>0&&n>0||i<0&&n<0)},u.getAxisLabelInterval=function(t,e,i,n){var o,r=0,a=0,s=1;e.length>40&&(s=Math.floor(e.length/40));for(var u=0;u<t.length;u+=s){var h=t[u],c=l.getBoundingRect(e[u],i,"center","top");c[n?"x":"y"]+=h,c[n?"width":"height"]*=1.3,o?o.intersect(c)?(a++,r=Math.max(r,a)):(o.union(c),a=0):o=c.clone()}return 0===r&&s>1?s:(r+1)*s-1},u.getFormattedLabels=function(t,e){var i=t.scale,n=i.getTicksLabels(),o=i.getTicks();return"string"==typeof e?(e=function(t){return function(e){return t.replace("{value}",e)}}(e),s.map(n,e)):"function"==typeof e?s.map(o,function(n,o){return e("category"===t.type?i.getLabel(n):n,o)},this):n},t.exports=u},function(t,e,i){"use strict";function n(){this._coordinateSystems=[]}var o=i(1),r={};n.prototype={constructor:n,create:function(t,e){var i=[];o.each(r,function(n,o){var r=n.create(t,e);i=i.concat(r||[])}),this._coordinateSystems=i},update:function(t,e){o.each(this._coordinateSystems,function(i){i.update&&i.update(t,e)})},getCoordinateSystems:function(){return this._coordinateSystems.slice()}},n.register=function(t,e){r[t]=e},n.get=function(t){return r[t]},t.exports=n},function(t,e,i){"use strict";function n(t){return t.getBoundingClientRect?t.getBoundingClientRect():{left:0,top:0}}function o(t,e,i,n){return i=i||{},n||!h.canvasSupported?r(t,e,i):h.browser.firefox&&null!=e.layerX&&e.layerX!==e.offsetX?(i.zrX=e.layerX,i.zrY=e.layerY):null!=e.offsetX?(i.zrX=e.offsetX,i.zrY=e.offsetY):r(t,e,i),i}function r(t,e,i){var o=n(t);i.zrX=e.clientX-o.left,i.zrY=e.clientY-o.top}function a(t,e,i){if(e=e||window.event,null!=e.zrX)return e;var n=e.type,r=n&&n.indexOf("touch")>=0;if(r){var a="touchend"!=n?e.targetTouches[0]:e.changedTouches[0];a&&o(t,a,e,i)}else o(t,e,e,i),e.zrDelta=e.wheelDelta?e.wheelDelta/120:-(e.detail||0)/3;return e}function s(t,e,i){c?t.addEventListener(e,i):t.attachEvent("on"+e,i)}function l(t,e,i){c?t.removeEventListener(e,i):t.detachEvent("on"+e,i)}var u=i(20),h=i(11),c="undefined"!=typeof window&&!!window.addEventListener,d=c?function(t){t.preventDefault(),t.stopPropagation(),t.cancelBubble=!0}:function(t){t.returnValue=!1,t.cancelBubble=!0};t.exports={clientToLocal:o,normalizeEvent:a,addEventListener:s,removeEventListener:l,stop:d,Dispatcher:u}},function(t,e){"use strict";var i={};t.exports={register:function(t,e){i[t]=e},get:function(t){return i[t]}}},function(t,e,i){"use strict";var n=i(3),o=i(8),r=n.extendShape({type:"triangle",shape:{cx:0,cy:0,width:0,height:0},buildPath:function(t,e){var i=e.cx,n=e.cy,o=e.width/2,r=e.height/2;t.moveTo(i,n-r),t.lineTo(i+o,n+r),t.lineTo(i-o,n+r),t.closePath()}}),a=n.extendShape({type:"diamond",shape:{cx:0,cy:0,width:0,height:0},buildPath:function(t,e){var i=e.cx,n=e.cy,o=e.width/2,r=e.height/2;t.moveTo(i,n-r),t.lineTo(i+o,n),t.lineTo(i,n+r),t.lineTo(i-o,n),t.closePath()}}),s=n.extendShape({type:"pin",shape:{x:0,y:0,width:0,height:0},buildPath:function(t,e){var i=e.x,n=e.y,o=e.width/5*3,r=Math.max(o,e.height),a=o/2,s=a*a/(r-a),l=n-r+a+s,u=Math.asin(s/a),h=Math.cos(u)*a,c=Math.sin(u),d=Math.cos(u);t.arc(i,l,a,Math.PI-u,2*Math.PI+u);var f=.6*a,p=.7*a;t.bezierCurveTo(i+h-c*f,l+s+d*f,i,n-p,i,n),t.bezierCurveTo(i,n-p,i-h+c*f,l+s+d*f,i-h,l+s),t.closePath()}}),l=n.extendShape({type:"arrow",shape:{x:0,y:0,width:0,height:0},buildPath:function(t,e){var i=e.height,n=e.width,o=e.x,r=e.y,a=n/3*2;t.moveTo(o,r),t.lineTo(o+a,r+i),t.lineTo(o,r+i/4*3),t.lineTo(o-a,r+i),t.lineTo(o,r),t.closePath()}}),u={line:n.Line,rect:n.Rect,roundRect:n.Rect,square:n.Rect,circle:n.Circle,diamond:a,pin:s,arrow:l,triangle:r},h={line:function(t,e,i,n,o){o.x1=t,o.y1=e+n/2,o.x2=t+i,o.y2=e+n/2},rect:function(t,e,i,n,o){o.x=t,o.y=e,o.width=i,o.height=n},roundRect:function(t,e,i,n,o){o.x=t,o.y=e,o.width=i,o.height=n,o.r=Math.min(i,n)/4},square:function(t,e,i,n,o){var r=Math.min(i,n);o.x=t,o.y=e,o.width=r,o.height=r},circle:function(t,e,i,n,o){o.cx=t+i/2,o.cy=e+n/2,o.r=Math.min(i,n)/2},diamond:function(t,e,i,n,o){o.cx=t+i/2,o.cy=e+n/2,o.width=i,o.height=n},pin:function(t,e,i,n,o){o.x=t+i/2,o.y=e+n/2,o.width=i,o.height=n},arrow:function(t,e,i,n,o){o.x=t+i/2,o.y=e+n/2,o.width=i,o.height=n},triangle:function(t,e,i,n,o){o.cx=t+i/2,o.cy=e+n/2,o.width=i,o.height=n}},c={};for(var d in u)u.hasOwnProperty(d)&&(c[d]=new u[d]);
+var f=n.extendShape({type:"symbol",shape:{symbolType:"",x:0,y:0,width:0,height:0},beforeBrush:function(){var t=this.style,e=this.shape;"pin"===e.symbolType&&"inside"===t.textPosition&&(t.textPosition=["50%","40%"],t.textAlign="center",t.textVerticalAlign="middle")},buildPath:function(t,e,i){var n=e.symbolType,o=c[n];"none"!==e.symbolType&&(o||(n="rect",o=c[n]),h[n](e.x,e.y,e.width,e.height,o.shape),o.buildPath(t,o.shape,i))}}),p=function(t){if("image"!==this.type){var e=this.style,i=this.shape;i&&"line"===i.symbolType?e.stroke=t:this.__isEmptyBrush?(e.stroke=t,e.fill="#fff"):(e.fill&&(e.fill=t),e.stroke&&(e.stroke=t)),this.dirty(!1)}},g={createSymbol:function(t,e,i,r,a,s){var l=0===t.indexOf("empty");l&&(t=t.substr(5,1).toLowerCase()+t.substr(6));var u;return u=0===t.indexOf("image://")?new n.Image({style:{image:t.slice(8),x:e,y:i,width:r,height:a}}):0===t.indexOf("path://")?n.makePath(t.slice(7),{},new o(e,i,r,a)):new f({shape:{symbolType:t,x:e,y:i,width:r,height:a}}),u.__isEmptyBrush=l,u.setColor=p,u.setColor(s),u}};t.exports=g},function(t,e,i){function n(){this.group=new a,this.uid=s.getUID("viewChart")}function o(t,e){if(t&&(t.trigger(e),"group"===t.type))for(var i=0;i<t.childCount();i++)o(t.childAt(i),e)}function r(t,e,i){var n=u.queryDataIndex(t,e);null!=n?h.each(u.normalizeToArray(n),function(e){o(t.getItemGraphicEl(e),i)}):t.eachItemGraphicEl(function(t){o(t,i)})}var a=i(33),s=i(43),l=i(21),u=i(7),h=i(1);n.prototype={type:"chart",init:function(t,e){},render:function(t,e,i,n){},highlight:function(t,e,i,n){r(t.getData(),n,"emphasis")},downplay:function(t,e,i,n){r(t.getData(),n,"normal")},remove:function(t,e){this.group.removeAll()},dispose:function(){}};var c=n.prototype;c.updateView=c.updateLayout=c.updateVisual=function(t,e,i,n){this.render(t,e,i,n)},l.enableClassExtend(n,["dispose"]),l.enableClassManagement(n,{registerWhenExtend:!0}),t.exports=n},function(t,e,i){"use strict";var n=i(17),o=i(5),r=i(73),a=i(8),s=i(32).devicePixelRatio,l={M:1,L:2,C:3,Q:4,A:5,Z:6,R:7},u=[],h=[],c=[],d=[],f=Math.min,p=Math.max,g=Math.cos,m=Math.sin,v=Math.sqrt,y=Math.abs,x="undefined"!=typeof Float32Array,_=function(){this.data=[],this._len=0,this._ctx=null,this._xi=0,this._yi=0,this._x0=0,this._y0=0,this._ux=0,this._uy=0};_.prototype={constructor:_,_lineDash:null,_dashOffset:0,_dashIdx:0,_dashSum:0,setScale:function(t,e){this._ux=y(1/s/t)||0,this._uy=y(1/s/e)||0},getContext:function(){return this._ctx},beginPath:function(t){return this._ctx=t,t&&t.beginPath(),t&&(this.dpr=t.dpr),this._len=0,this._lineDash&&(this._lineDash=null,this._dashOffset=0),this},moveTo:function(t,e){return this.addData(l.M,t,e),this._ctx&&this._ctx.moveTo(t,e),this._x0=t,this._y0=e,this._xi=t,this._yi=e,this},lineTo:function(t,e){var i=y(t-this._xi)>this._ux||y(e-this._yi)>this._uy||this._len<5;return this.addData(l.L,t,e),this._ctx&&i&&(this._needsDash()?this._dashedLineTo(t,e):this._ctx.lineTo(t,e)),i&&(this._xi=t,this._yi=e),this},bezierCurveTo:function(t,e,i,n,o,r){return this.addData(l.C,t,e,i,n,o,r),this._ctx&&(this._needsDash()?this._dashedBezierTo(t,e,i,n,o,r):this._ctx.bezierCurveTo(t,e,i,n,o,r)),this._xi=o,this._yi=r,this},quadraticCurveTo:function(t,e,i,n){return this.addData(l.Q,t,e,i,n),this._ctx&&(this._needsDash()?this._dashedQuadraticTo(t,e,i,n):this._ctx.quadraticCurveTo(t,e,i,n)),this._xi=i,this._yi=n,this},arc:function(t,e,i,n,o,r){return this.addData(l.A,t,e,i,i,n,o-n,0,r?0:1),this._ctx&&this._ctx.arc(t,e,i,n,o,r),this._xi=g(o)*i+t,this._xi=m(o)*i+t,this},arcTo:function(t,e,i,n,o){return this._ctx&&this._ctx.arcTo(t,e,i,n,o),this},rect:function(t,e,i,n){return this._ctx&&this._ctx.rect(t,e,i,n),this.addData(l.R,t,e,i,n),this},closePath:function(){this.addData(l.Z);var t=this._ctx,e=this._x0,i=this._y0;return t&&(this._needsDash()&&this._dashedLineTo(e,i),t.closePath()),this._xi=e,this._yi=i,this},fill:function(t){t&&t.fill(),this.toStatic()},stroke:function(t){t&&t.stroke(),this.toStatic()},setLineDash:function(t){if(t instanceof Array){this._lineDash=t,this._dashIdx=0;for(var e=0,i=0;i<t.length;i++)e+=t[i];this._dashSum=e}return this},setLineDashOffset:function(t){return this._dashOffset=t,this},len:function(){return this._len},setData:function(t){var e=t.length;this.data&&this.data.length==e||!x||(this.data=new Float32Array(e));for(var i=0;i<e;i++)this.data[i]=t[i];this._len=e},appendPath:function(t){t instanceof Array||(t=[t]);for(var e=t.length,i=0,n=this._len,o=0;o<e;o++)i+=t[o].len();x&&this.data instanceof Float32Array&&(this.data=new Float32Array(n+i));for(var o=0;o<e;o++)for(var r=t[o].data,a=0;a<r.length;a++)this.data[n++]=r[a];this._len=n},addData:function(t){var e=this.data;this._len+arguments.length>e.length&&(this._expandData(),e=this.data);for(var i=0;i<arguments.length;i++)e[this._len++]=arguments[i];this._prevCmd=t},_expandData:function(){if(!(this.data instanceof Array)){for(var t=[],e=0;e<this._len;e++)t[e]=this.data[e];this.data=t}},_needsDash:function(){return this._lineDash},_dashedLineTo:function(t,e){var i,n,o=this._dashSum,r=this._dashOffset,a=this._lineDash,s=this._ctx,l=this._xi,u=this._yi,h=t-l,c=e-u,d=v(h*h+c*c),g=l,m=u,y=a.length;for(h/=d,c/=d,r<0&&(r=o+r),r%=o,g-=r*h,m-=r*c;h>0&&g<=t||h<0&&g>=t||0==h&&(c>0&&m<=e||c<0&&m>=e);)n=this._dashIdx,i=a[n],g+=h*i,m+=c*i,this._dashIdx=(n+1)%y,h>0&&g<l||h<0&&g>l||c>0&&m<u||c<0&&m>u||s[n%2?"moveTo":"lineTo"](h>=0?f(g,t):p(g,t),c>=0?f(m,e):p(m,e));h=g-t,c=m-e,this._dashOffset=-v(h*h+c*c)},_dashedBezierTo:function(t,e,i,o,r,a){var s,l,u,h,c,d=this._dashSum,f=this._dashOffset,p=this._lineDash,g=this._ctx,m=this._xi,y=this._yi,x=n.cubicAt,_=0,b=this._dashIdx,w=p.length,S=0;for(f<0&&(f=d+f),f%=d,s=0;s<1;s+=.1)l=x(m,t,i,r,s+.1)-x(m,t,i,r,s),u=x(y,e,o,a,s+.1)-x(y,e,o,a,s),_+=v(l*l+u*u);for(;b<w&&(S+=p[b],!(S>f));b++);for(s=(S-f)/_;s<=1;)h=x(m,t,i,r,s),c=x(y,e,o,a,s),b%2?g.moveTo(h,c):g.lineTo(h,c),s+=p[b]/_,b=(b+1)%w;b%2!==0&&g.lineTo(r,a),l=r-h,u=a-c,this._dashOffset=-v(l*l+u*u)},_dashedQuadraticTo:function(t,e,i,n){var o=i,r=n;i=(i+2*t)/3,n=(n+2*e)/3,t=(this._xi+2*t)/3,e=(this._yi+2*e)/3,this._dashedBezierTo(t,e,i,n,o,r)},toStatic:function(){var t=this.data;t instanceof Array&&(t.length=this._len,x&&(this.data=new Float32Array(t)))},getBoundingRect:function(){u[0]=u[1]=c[0]=c[1]=Number.MAX_VALUE,h[0]=h[1]=d[0]=d[1]=-Number.MAX_VALUE;for(var t=this.data,e=0,i=0,n=0,s=0,f=0;f<t.length;){var p=t[f++];switch(1==f&&(e=t[f],i=t[f+1],n=e,s=i),p){case l.M:n=t[f++],s=t[f++],e=n,i=s,c[0]=n,c[1]=s,d[0]=n,d[1]=s;break;case l.L:r.fromLine(e,i,t[f],t[f+1],c,d),e=t[f++],i=t[f++];break;case l.C:r.fromCubic(e,i,t[f++],t[f++],t[f++],t[f++],t[f],t[f+1],c,d),e=t[f++],i=t[f++];break;case l.Q:r.fromQuadratic(e,i,t[f++],t[f++],t[f],t[f+1],c,d),e=t[f++],i=t[f++];break;case l.A:var v=t[f++],y=t[f++],x=t[f++],_=t[f++],b=t[f++],w=t[f++]+b,S=(t[f++],1-t[f++]);1==f&&(n=g(b)*x+v,s=m(b)*_+y),r.fromArc(v,y,x,_,b,w,S,c,d),e=g(w)*x+v,i=m(w)*_+y;break;case l.R:n=e=t[f++],s=i=t[f++];var M=t[f++],T=t[f++];r.fromLine(n,s,n+M,s+T,c,d);break;case l.Z:e=n,i=s}o.min(u,u,c),o.max(h,h,d)}return 0===f&&(u[0]=u[1]=h[0]=h[1]=0),new a(u[0],u[1],h[0]-u[0],h[1]-u[1])},rebuildPath:function(t){for(var e,i,n,o,r,a,s=this.data,u=this._ux,h=this._uy,c=this._len,d=0;d<c;){var f=s[d++];switch(1==d&&(n=s[d],o=s[d+1],e=n,i=o),f){case l.M:e=n=s[d++],i=o=s[d++],t.moveTo(n,o);break;case l.L:r=s[d++],a=s[d++],(y(r-n)>u||y(a-o)>h||d===c-1)&&(t.lineTo(r,a),n=r,o=a);break;case l.C:t.bezierCurveTo(s[d++],s[d++],s[d++],s[d++],s[d++],s[d++]),n=s[d-2],o=s[d-1];break;case l.Q:t.quadraticCurveTo(s[d++],s[d++],s[d++],s[d++]),n=s[d-2],o=s[d-1];break;case l.A:var p=s[d++],v=s[d++],x=s[d++],_=s[d++],b=s[d++],w=s[d++],S=s[d++],M=s[d++],T=x>_?x:_,I=x>_?1:x/_,A=x>_?_/x:1,L=Math.abs(x-_)>.001,C=b+w;L?(t.translate(p,v),t.rotate(S),t.scale(I,A),t.arc(0,0,T,b,C,1-M),t.scale(1/I,1/A),t.rotate(-S),t.translate(-p,-v)):t.arc(p,v,T,b,C,1-M),1==d&&(e=g(b)*x+p,i=m(b)*_+v),n=g(C)*x+p,o=m(C)*_+v;break;case l.R:e=n=s[d],i=o=s[d+1],t.rect(s[d++],s[d++],s[d++],s[d++]);break;case l.Z:t.closePath(),n=e,o=i}}}},_.CMD=l,t.exports=_},function(t,e,i){function n(t,e,i,n){if(!e)return t;var s=o(e[0]),l=r.isArray(s)&&s.length||1;i=i||[],n=n||"extra";for(var u=0;u<l;u++)if(!t[u]){var h=i[u]||n+(u-i.length);t[u]=a(e,u)?{type:"ordinal",name:h}:h}return t}function o(t){return r.isArray(t)?t:r.isObject(t)?t.value:t}var r=i(1),a=n.guessOrdinal=function(t,e){for(var i=0,n=t.length;i<n;i++){var a=o(t[i]);if(!r.isArray(a))return!1;var a=a[e];if(null!=a&&isFinite(a))return!1;if(r.isString(a)&&"-"!==a)return!0}return!1};t.exports=n},function(t,e,i){var n=i(1);t.exports=function(t){for(var e=0;e<t.length;e++)t[e][1]||(t[e][1]=t[e][0]);return function(e){for(var i={},o=0;o<t.length;o++){var r=t[o][1];if(!(e&&n.indexOf(e,r)>=0)){var a=this.getShallow(r);null!=a&&(i[t[o][0]]=a)}}return i}}},function(t,e,i){function n(){this._extent=[1/0,-(1/0)],this._interval=0,this.init&&this.init.apply(this,arguments)}var o=i(21),r=n.prototype;r.parse=function(t){return t},r.contain=function(t){var e=this._extent;return t>=e[0]&&t<=e[1]},r.normalize=function(t){var e=this._extent;return e[1]===e[0]?.5:(t-e[0])/(e[1]-e[0])},r.scale=function(t){var e=this._extent;return t*(e[1]-e[0])+e[0]},r.unionExtent=function(t){var e=this._extent;t[0]<e[0]&&(e[0]=t[0]),t[1]>e[1]&&(e[1]=t[1])},r.getExtent=function(){return this._extent.slice()},r.setExtent=function(t,e){var i=this._extent;isNaN(t)||(i[0]=t),isNaN(e)||(i[1]=e)},r.getTicksLabels=function(){for(var t=[],e=this.getTicks(),i=0;i<e.length;i++)t.push(this.getLabel(e[i]));return t},o.enableClassExtend(n),o.enableClassManagement(n,{registerWhenExtend:!0}),t.exports=n},function(t,e){var i=1;"undefined"!=typeof window&&(i=Math.max(window.devicePixelRatio||1,1));var n={debugMode:0,devicePixelRatio:i};t.exports=n},function(t,e,i){var n=i(1),o=i(58),r=i(8),a=function(t){t=t||{},o.call(this,t);for(var e in t)t.hasOwnProperty(e)&&(this[e]=t[e]);this._children=[],this.__storage=null,this.__dirty=!0};a.prototype={constructor:a,isGroup:!0,type:"group",silent:!1,children:function(){return this._children.slice()},childAt:function(t){return this._children[t]},childOfName:function(t){for(var e=this._children,i=0;i<e.length;i++)if(e[i].name===t)return e[i]},childCount:function(){return this._children.length},add:function(t){return t&&t!==this&&t.parent!==this&&(this._children.push(t),this._doAdd(t)),this},addBefore:function(t,e){if(t&&t!==this&&t.parent!==this&&e&&e.parent===this){var i=this._children,n=i.indexOf(e);n>=0&&(i.splice(n,0,t),this._doAdd(t))}return this},_doAdd:function(t){t.parent&&t.parent.remove(t),t.parent=this;var e=this.__storage,i=this.__zr;e&&e!==t.__storage&&(e.addToMap(t),t instanceof a&&t.addChildrenToStorage(e)),i&&i.refresh()},remove:function(t){var e=this.__zr,i=this.__storage,o=this._children,r=n.indexOf(o,t);return r<0?this:(o.splice(r,1),t.parent=null,i&&(i.delFromMap(t.id),t instanceof a&&t.delChildrenFromStorage(i)),e&&e.refresh(),this)},removeAll:function(){var t,e,i=this._children,n=this.__storage;for(e=0;e<i.length;e++)t=i[e],n&&(n.delFromMap(t.id),t instanceof a&&t.delChildrenFromStorage(n)),t.parent=null;return i.length=0,this},eachChild:function(t,e){for(var i=this._children,n=0;n<i.length;n++){var o=i[n];t.call(e,o,n)}return this},traverse:function(t,e){for(var i=0;i<this._children.length;i++){var n=this._children[i];t.call(e,n),"group"===n.type&&n.traverse(t,e)}return this},addChildrenToStorage:function(t){for(var e=0;e<this._children.length;e++){var i=this._children[e];t.addToMap(i),i instanceof a&&i.addChildrenToStorage(t)}},delChildrenFromStorage:function(t){for(var e=0;e<this._children.length;e++){var i=this._children[e];t.delFromMap(i.id),i instanceof a&&i.delChildrenFromStorage(t)}},dirty:function(){return this.__dirty=!0,this.__zr&&this.__zr.refresh(),this},getBoundingRect:function(t){for(var e=null,i=new r(0,0,0,0),n=t||this._children,o=[],a=0;a<n.length;a++){var s=n[a];if(!s.ignore&&!s.invisible){var l=s.getBoundingRect(),u=s.getLocalTransform(o);u?(i.copy(l),i.applyTransform(u),e=e||i.clone(),e.union(i)):(e=e||l.clone(),e.union(l))}}return e||i}},n.inherits(a,o),t.exports=a},function(t,e,i){"use strict";function n(t){for(var e=0;e<t.length&&null==t[e];)e++;return t[e]}function o(t){var e=n(t);return null!=e&&!c.isArray(p(e))}function r(t,e,i){t=t||[];var n=e.get("coordinateSystem"),r=m[n],a=f.get(n),s=r&&r(t,e,i),v=s&&s.dimensions;v||(v=a&&a.dimensions||["x","y"],v=h(v,t,v.concat(["value"])));var y=s?s.categoryIndex:-1,x=new u(v,e),_=l(s,t),b={},w=y>=0&&o(t)?function(t,e,i,n){return d.isDataItemOption(t)&&(x.hasItemOption=!0),n===y?i:g(p(t),v[n])}:function(t,e,i,n){var o=p(t),r=g(o&&o[n],v[n]);d.isDataItemOption(t)&&(x.hasItemOption=!0);var a=s&&s.categoryAxesModels;return a&&a[e]&&"string"==typeof r&&(b[e]=b[e]||a[e].getCategories(),r=c.indexOf(b[e],r),r<0&&!isNaN(r)&&(r=+r)),r};return x.hasItemOption=!1,x.initData(t,_,w),x}function a(t){return"category"!==t&&"time"!==t}function s(t){return"category"===t?"ordinal":"time"===t?"time":"float"}function l(t,e){var i,n=[],o=t&&t.dimensions[t.categoryIndex];if(o&&(i=t.categoryAxesModels[o.name]),i){var r=i.getCategories();if(r){var a=e.length;if(c.isArray(e[0])&&e[0].length>1){n=[];for(var s=0;s<a;s++)n[s]=r[e[s][t.categoryIndex||0]]}else n=r.slice(0)}}return n}var u=i(14),h=i(29),c=i(1),d=i(7),f=i(23),p=d.getDataItemValue,g=d.converDataValue,m={cartesian2d:function(t,e,i){var n=c.map(["xAxis","yAxis"],function(t){return i.queryComponents({mainType:t,index:e.get(t+"Index"),id:e.get(t+"Id")})[0]}),o=n[0],r=n[1],l=o.get("type"),u=r.get("type"),d=[{name:"x",type:s(l),stackable:a(l)},{name:"y",type:s(u),stackable:a(u)}],f="category"===l,p="category"===u;h(d,t,["x","y","z"]);var g={};return f&&(g.x=o),p&&(g.y=r),{dimensions:d,categoryIndex:f?0:p?1:-1,categoryAxesModels:g}},polar:function(t,e,i){var n=i.queryComponents({mainType:"polar",index:e.get("polarIndex"),id:e.get("polarId")})[0],o=n.findAxisModel("angleAxis"),r=n.findAxisModel("radiusAxis"),l=r.get("type"),u=o.get("type"),c=[{name:"radius",type:s(l),stackable:a(l)},{name:"angle",type:s(u),stackable:a(u)}],d="category"===u,f="category"===l;h(c,t,["radius","angle","value"]);var p={};return f&&(p.radius=r),d&&(p.angle=o),{dimensions:c,categoryIndex:d?1:f?0:-1,categoryAxesModels:p}},geo:function(t,e,i){return{dimensions:h([{name:"lng"},{name:"lat"}],t,["lng","lat","value"])}}};t.exports=r},function(t,e,i){"use strict";var n=i(3),o=i(1),r=i(2);i(54),i(106),r.extendComponentView({type:"grid",render:function(t,e){this.group.removeAll(),t.get("show")&&this.group.add(new n.Rect({shape:t.coordinateSystem.getRect(),style:o.defaults({fill:t.get("backgroundColor")},t.getItemStyle()),silent:!0,z2:-1}))}}),r.registerPreprocessor(function(t){t.xAxis&&t.yAxis&&!t.grid&&(t.grid={})})},function(t,e,i){function n(t){t=t||{},a.call(this,t);for(var e in t)t.hasOwnProperty(e)&&"style"!==e&&(this[e]=t[e]);this.style=new r(t.style),this._rect=null,this.__clipPaths=[]}var o=i(1),r=i(64),a=i(58),s=i(75);n.prototype={constructor:n,type:"displayable",__dirty:!0,invisible:!1,z:0,z2:0,zlevel:0,draggable:!1,dragging:!1,silent:!1,culling:!1,cursor:"pointer",rectHover:!1,progressive:-1,beforeBrush:function(t){},afterBrush:function(t){},brush:function(t,e){},getBoundingRect:function(){},contain:function(t,e){return this.rectContain(t,e)},traverse:function(t,e){t.call(e,this)},rectContain:function(t,e){var i=this.transformCoordToLocal(t,e),n=this.getBoundingRect();return n.contain(i[0],i[1])},dirty:function(){this.__dirty=!0,this._rect=null,this.__zr&&this.__zr.refresh()},animateStyle:function(t){return this.animate("style",t)},attrKV:function(t,e){"style"!==t?a.prototype.attrKV.call(this,t,e):this.style.set(e)},setStyle:function(t,e){return this.style.set(t,e),this.dirty(!1),this},useStyle:function(t){return this.style=new r(t),this.dirty(!1),this}},o.inherits(n,a),o.mixin(n,s),t.exports=n},function(t,e){var i=function(t){this.colorStops=t||[]};i.prototype={constructor:i,addColorStop:function(t,e){this.colorStops.push({offset:t,color:e})}},t.exports=i},function(t,e,i){var n=i(4),o=i(9),r=i(31),a=Math.floor,s=Math.ceil,l=n.getPrecisionSafe,u=n.round,h=r.extend({type:"interval",_interval:0,setExtent:function(t,e){var i=this._extent;isNaN(t)||(i[0]=parseFloat(t)),isNaN(e)||(i[1]=parseFloat(e))},unionExtent:function(t){var e=this._extent;t[0]<e[0]&&(e[0]=t[0]),t[1]>e[1]&&(e[1]=t[1]),h.prototype.setExtent.call(this,e[0],e[1])},getInterval:function(){return this._interval||this.niceTicks(),this._interval},setInterval:function(t){this._interval=t,this._niceExtent=this._extent.slice()},getTicks:function(){this._interval||this.niceTicks();var t=this._interval,e=this._extent,i=[],n=1e4;if(t){var o=this._niceExtent,r=l(t)+2;e[0]<o[0]&&i.push(e[0]);for(var a=o[0];a<=o[1];)if(i.push(a),a=u(a+t,r),i.length>n)return[];e[1]>(i.length?i[i.length-1]:o[1])&&i.push(e[1])}return i},getTicksLabels:function(){for(var t=[],e=this.getTicks(),i=0;i<e.length;i++)t.push(this.getLabel(e[i]));return t},getLabel:function(t){return o.addCommas(t)},niceTicks:function(t){t=t||5;var e=this._extent,i=e[1]-e[0];if(isFinite(i)){i<0&&(i=-i,e.reverse());var o=u(n.nice(i/t,!0),Math.max(l(e[0]),l(e[1]))+2),r=l(o)+2,h=[u(s(e[0]/o)*o,r),u(a(e[1]/o)*o,r)];this._interval=o,this._niceExtent=h}},niceExtent:function(t,e,i){var n=this._extent;if(n[0]===n[1])if(0!==n[0]){var o=n[0];i?n[0]-=o/2:(n[1]+=o/2,n[0]-=o/2)}else n[1]=1;var r=n[1]-n[0];isFinite(r)||(n[0]=0,n[1]=1),this.niceTicks(t);var l=this._interval;e||(n[0]=u(a(n[0]/l)*l)),i||(n[1]=u(s(n[1]/l)*l))}});h.create=function(){return new h},t.exports=h},function(t,e,i){function n(t){this.group=new r.Group,this._symbolCtor=t||a}function o(t,e,i){var n=t.getItemLayout(e);return n&&!isNaN(n[0])&&!isNaN(n[1])&&!(i&&i(e))&&"none"!==t.getItemVisual(e,"symbol")}var r=i(3),a=i(49),s=n.prototype;s.updateData=function(t,e){var i=this.group,n=t.hostModel,a=this._data,s=this._symbolCtor,l={itemStyle:n.getModel("itemStyle.normal").getItemStyle(["color"]),hoverItemStyle:n.getModel("itemStyle.emphasis").getItemStyle(),symbolRotate:n.get("symbolRotate"),symbolOffset:n.get("symbolOffset"),hoverAnimation:n.get("hoverAnimation"),labelModel:n.getModel("label.normal"),hoverLabelModel:n.getModel("label.emphasis")};t.diff(a).add(function(n){var r=t.getItemLayout(n);if(o(t,n,e)){var a=new s(t,n,l);a.attr("position",r),t.setItemGraphicEl(n,a),i.add(a)}}).update(function(u,h){var c=a.getItemGraphicEl(h),d=t.getItemLayout(u);return o(t,u,e)?(c?(c.updateData(t,u,l),r.updateProps(c,{position:d},n)):(c=new s(t,u),c.attr("position",d)),i.add(c),void t.setItemGraphicEl(u,c)):void i.remove(c)}).remove(function(t){var e=a.getItemGraphicEl(t);e&&e.fadeOut(function(){i.remove(e)})}).execute(),this._data=t},s.updateLayout=function(){var t=this._data;t&&t.eachItemGraphicEl(function(e,i){var n=t.getItemLayout(i);e.attr("position",n)})},s.remove=function(t){var e=this.group,i=this._data;i&&(t?i.eachItemGraphicEl(function(t){t.fadeOut(function(){e.remove(t)})}):e.removeAll())},t.exports=n},function(t,e,i){function n(t){var e={};return c(["start","end","startValue","endValue","throttle"],function(i){t.hasOwnProperty(i)&&(e[i]=t[i])}),e}function o(t,e,i,n){null!=i[e]&&null==i[t]&&(n[t]=null)}var r=i(1),a=i(11),s=i(2),l=i(7),u=i(110),h=i(180),c=r.each,d=u.eachAxisDim,f=s.extendComponentModel({type:"dataZoom",dependencies:["xAxis","yAxis","zAxis","radiusAxis","angleAxis","series"],defaultOption:{zlevel:0,z:4,orient:null,xAxisIndex:null,yAxisIndex:null,filterMode:"filter",throttle:null,start:0,end:100,startValue:null,endValue:null},init:function(t,e,i){this._dataIntervalByAxis={},this._dataInfo={},this._axisProxies={},this.textStyleModel,this._autoThrottle=!0;var o=n(t);this.mergeDefaultAndTheme(t,i),this.doInit(o)},mergeOption:function(t){var e=n(t);r.merge(this.option,t,!0),this.doInit(e)},doInit:function(t){var e=this.option;a.canvasSupported||(e.realtime=!1),this._setDefaultThrottle(t),o("start","startValue",t,e),o("end","endValue",t,e),this.textStyleModel=this.getModel("textStyle"),this._resetTarget(),this._giveAxisProxies()},_giveAxisProxies:function(){var t=this._axisProxies;this.eachTargetAxis(function(e,i,n,o){var r=this.dependentModels[e.axis][i],a=r.__dzAxisProxy||(r.__dzAxisProxy=new h(e.name,i,this,o));t[e.name+"_"+i]=a},this)},_resetTarget:function(){var t=this.option,e=this._judgeAutoMode();d(function(e){var i=e.axisIndex;t[i]=l.normalizeToArray(t[i])},this),"axisIndex"===e?this._autoSetAxisIndex():"orient"===e&&this._autoSetOrient()},_judgeAutoMode:function(){var t=this.option,e=!1;d(function(i){null!=t[i.axisIndex]&&(e=!0)},this);var i=t.orient;return null==i&&e?"orient":e?void 0:(null==i&&(t.orient="horizontal"),"axisIndex")},_autoSetAxisIndex:function(){var t=!0,e=this.get("orient",!0),i=this.option;if(t){var n="vertical"===e?{dim:"y",axisIndex:"yAxisIndex",axis:"yAxis"}:{dim:"x",axisIndex:"xAxisIndex",axis:"xAxis"};this.dependentModels[n.axis].length&&(i[n.axisIndex]=[0],t=!1)}t&&d(function(e){if(t){var n=[],o=this.dependentModels[e.axis];if(o.length&&!n.length)for(var r=0,a=o.length;r<a;r++)"category"===o[r].get("type")&&n.push(r);i[e.axisIndex]=n,n.length&&(t=!1)}},this),t&&this.ecModel.eachSeries(function(t){this._isSeriesHasAllAxesTypeOf(t,"value")&&d(function(e){var n=i[e.axisIndex],o=t.get(e.axisIndex),a=t.get(e.axisId),s=t.ecModel.queryComponents({mainType:e.axis,index:o,id:a})[0];o=s.componentIndex,r.indexOf(n,o)<0&&n.push(o)})},this)},_autoSetOrient:function(){var t;this.eachTargetAxis(function(e){!t&&(t=e.name)},this),this.option.orient="y"===t?"vertical":"horizontal"},_isSeriesHasAllAxesTypeOf:function(t,e){var i=!0;return d(function(n){var o=t.get(n.axisIndex),r=this.dependentModels[n.axis][o];r&&r.get("type")===e||(i=!1)},this),i},_setDefaultThrottle:function(t){if(t.hasOwnProperty("throttle")&&(this._autoThrottle=!1),this._autoThrottle){var e=this.ecModel.option;this.option.throttle=e.animation&&e.animationDurationUpdate>0?100:20}},getFirstTargetAxisModel:function(){var t;return d(function(e){if(null==t){var i=this.get(e.axisIndex);i.length&&(t=this.dependentModels[e.axis][i[0]])}},this),t},eachTargetAxis:function(t,e){var i=this.ecModel;d(function(n){c(this.get(n.axisIndex),function(o){t.call(e,n,o,this,i)},this)},this)},getAxisProxy:function(t,e){return this._axisProxies[t+"_"+e]},setRawRange:function(t){c(["start","end","startValue","endValue"],function(e){this.option[e]=t[e]},this)},getPercentRange:function(){var t=this.findRepresentativeAxisProxy();if(t)return t.getDataPercentWindow()},getValueRange:function(t,e){if(null!=t||null!=e)return this.getAxisProxy(t,e).getDataValueWindow();var i=this.findRepresentativeAxisProxy();return i?i.getDataValueWindow():void 0},findRepresentativeAxisProxy:function(){var t=this._axisProxies;for(var e in t)if(t.hasOwnProperty(e)&&t[e].hostedBy(this))return t[e];for(var e in t)if(t.hasOwnProperty(e)&&!t[e].hostedBy(this))return t[e]}});t.exports=f},function(t,e,i){var n=i(57);t.exports=n.extend({type:"dataZoom",render:function(t,e,i,n){this.dataZoomModel=t,this.ecModel=e,this.api=i},getTargetInfo:function(){function t(t,e,i,n){for(var o,r=0;r<i.length;r++)if(i[r].model===t){o=i[r];break}o||i.push(o={model:t,axisModels:[],coordIndex:n}),o.axisModels.push(e)}var e=this.dataZoomModel,i=this.ecModel,n=[],o=[],r=[];return e.eachTargetAxis(function(e,a){var s=i.getComponent(e.axis,a);if(s){r.push(s);var l,u=e.axis;"xAxis"===u||"yAxis"===u?l="grid":"angleAxis"!==u&&"radiusAxis"!==u||(l="polar");var h=l?i.queryComponents({mainType:l,index:s.get(l+"Index"),id:s.get(l+"Id")})[0]:null;null!=h&&t(h,s,"grid"===l?n:o,h.componentIndex)}},this),{cartesians:n,polars:o,axisModels:r}}})},function(t,e,i){function n(t,e){var i=t[1]-t[0],n=e,o=i/n/2;t[0]+=o,t[1]-=o}var o=i(4),r=o.linearMap,a=i(1),s=[0,1],l=function(t,e,i){this.dim=t,this.scale=e,this._extent=i||[0,0],this.inverse=!1,this.onBand=!1};l.prototype={constructor:l,contain:function(t){var e=this._extent,i=Math.min(e[0],e[1]),n=Math.max(e[0],e[1]);return t>=i&&t<=n},containData:function(t){return this.contain(this.dataToCoord(t))},getExtent:function(){var t=this._extent.slice();return t},getPixelPrecision:function(t){return o.getPixelPrecision(t||this.scale.getExtent(),this._extent)},setExtent:function(t,e){var i=this._extent;i[0]=t,i[1]=e},dataToCoord:function(t,e){var i=this._extent,o=this.scale;return t=o.normalize(t),this.onBand&&"ordinal"===o.type&&(i=i.slice(),n(i,o.count())),r(t,s,i,e)},coordToData:function(t,e){var i=this._extent,o=this.scale;this.onBand&&"ordinal"===o.type&&(i=i.slice(),n(i,o.count()));var a=r(t,i,s,e);return this.scale.scale(a)},getTicksCoords:function(t){if(this.onBand&&!t){for(var e=this.getBands(),i=[],n=0;n<e.length;n++)i.push(e[n][0]);return e[n-1]&&i.push(e[n-1][1]),i}return a.map(this.scale.getTicks(),this.dataToCoord,this)},getLabelsCoords:function(){return a.map(this.scale.getTicks(),this.dataToCoord,this)},getBands:function(){for(var t=this.getExtent(),e=[],i=this.scale.count(),n=t[0],o=t[1],r=o-n,a=0;a<i;a++)e.push([r*a/i+n,r*(a+1)/i+n]);return e},getBandWidth:function(){var t=this._extent,e=this.scale.getExtent(),i=e[1]-e[0]+(this.onBand?1:0);0===i&&(i=1);var n=Math.abs(t[1]-t[0]);return Math.abs(n)/i}},t.exports=l},function(t,e,i){var n=i(1),o=i(21),r=o.parseClassType,a=0,s={},l="_";s.getUID=function(t){return[t||"",a++,Math.random()].join(l)},s.enableSubTypeDefaulter=function(t){var e={};return t.registerSubTypeDefaulter=function(t,i){t=r(t),e[t.main]=i},t.determineSubType=function(i,n){var o=n.type;if(!o){var a=r(i).main;t.hasSubTypes(i)&&e[a]&&(o=e[a](n))}return o},t},s.enableTopologicalTravel=function(t,e){function i(t){var i={},a=[];return n.each(t,function(s){var l=o(i,s),u=l.originalDeps=e(s),h=r(u,t);l.entryCount=h.length,0===l.entryCount&&a.push(s),n.each(h,function(t){n.indexOf(l.predecessor,t)<0&&l.predecessor.push(t);var e=o(i,t);n.indexOf(e.successor,t)<0&&e.successor.push(s)})}),{graph:i,noEntryList:a}}function o(t,e){return t[e]||(t[e]={predecessor:[],successor:[]}),t[e]}function r(t,e){var i=[];return n.each(t,function(t){n.indexOf(e,t)>=0&&i.push(t)}),i}t.topologicalTravel=function(t,e,o,r){function a(t){u[t].entryCount--,0===u[t].entryCount&&h.push(t)}function s(t){c[t]=!0,a(t)}if(t.length){var l=i(e),u=l.graph,h=l.noEntryList,c={};for(n.each(t,function(t){c[t]=!0});h.length;){var d=h.pop(),f=u[d],p=!!c[d];p&&(o.call(r,d,f.originalDeps.slice()),delete c[d]),n.each(f.successor,p?s:a)}n.each(c,function(){throw new Error("Circle dependency may exists")})}}},t.exports=s},function(t,e){function i(t){for(var e=0;t>=h;)e|=1&t,t>>=1;return t+e}function n(t,e,i,n){var r=e+1;if(r===i)return 1;if(n(t[r++],t[e])<0){for(;r<i&&n(t[r],t[r-1])<0;)r++;o(t,e,r)}else for(;r<i&&n(t[r],t[r-1])>=0;)r++;return r-e}function o(t,e,i){for(i--;e<i;){var n=t[e];t[e++]=t[i],t[i--]=n}}function r(t,e,i,n,o){for(n===e&&n++;n<i;n++){for(var r,a=t[n],s=e,l=n;s<l;)r=s+l>>>1,o(a,t[r])<0?l=r:s=r+1;var u=n-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(;u>0;)t[s+u]=t[s+u-1],u--}t[s]=a}}function a(t,e,i,n,o,r){var a=0,s=0,l=1;if(r(t,e[i+o])>0){for(s=n-o;l<s&&r(t,e[i+o+l])>0;)a=l,l=(l<<1)+1,l<=0&&(l=s);l>s&&(l=s),a+=o,l+=o}else{for(s=o+1;l<s&&r(t,e[i+o-l])<=0;)a=l,l=(l<<1)+1,l<=0&&(l=s);l>s&&(l=s);var u=a;a=o-l,l=o-u}for(a++;a<l;){var h=a+(l-a>>>1);r(t,e[i+h])>0?a=h+1:l=h}return l}function s(t,e,i,n,o,r){var a=0,s=0,l=1;if(r(t,e[i+o])<0){for(s=o+1;l<s&&r(t,e[i+o-l])<0;)a=l,l=(l<<1)+1,l<=0&&(l=s);l>s&&(l=s);var u=a;a=o-l,l=o-u}else{for(s=n-o;l<s&&r(t,e[i+o+l])>=0;)a=l,l=(l<<1)+1,l<=0&&(l=s);l>s&&(l=s),a+=o,l+=o}for(a++;a<l;){var h=a+(l-a>>>1);r(t,e[i+h])<0?l=h:a=h+1}return l}function l(t,e){function i(t,e){h[y]=t,f[y]=e,y+=1}function n(){for(;y>1;){var t=y-2;if(t>=1&&f[t-1]<=f[t]+f[t+1]||t>=2&&f[t-2]<=f[t]+f[t-1])f[t-1]<f[t+1]&&t--;else if(f[t]>f[t+1])break;r(t)}}function o(){for(;y>1;){var t=y-2;t>0&&f[t-1]<f[t+1]&&t--,r(t)}}function r(i){var n=h[i],o=f[i],r=h[i+1],c=f[i+1];f[i]=o+c,i===y-3&&(h[i+1]=h[i+2],f[i+1]=f[i+2]),y--;var d=s(t[r],t,n,o,0,e);n+=d,o-=d,0!==o&&(c=a(t[n+o-1],t,r,c,c-1,e),0!==c&&(o<=c?l(n,o,r,c):u(n,o,r,c)))}function l(i,n,o,r){var l=0;for(l=0;l<n;l++)x[l]=t[i+l];var u=0,h=o,d=i;if(t[d++]=t[h++],0!==--r){if(1===n){for(l=0;l<r;l++)t[d+l]=t[h+l];return void(t[d+r]=x[u])}for(var f,g,m,v=p;;){f=0,g=0,m=!1;do if(e(t[h],x[u])<0){if(t[d++]=t[h++],g++,f=0,0===--r){m=!0;break}}else if(t[d++]=x[u++],f++,g=0,1===--n){m=!0;break}while((f|g)<v);if(m)break;do{if(f=s(t[h],x,u,n,0,e),0!==f){for(l=0;l<f;l++)t[d+l]=x[u+l];if(d+=f,u+=f,n-=f,n<=1){m=!0;break}}if(t[d++]=t[h++],0===--r){m=!0;break}if(g=a(x[u],t,h,r,0,e),0!==g){for(l=0;l<g;l++)t[d+l]=t[h+l];if(d+=g,h+=g,r-=g,0===r){m=!0;break}}if(t[d++]=x[u++],1===--n){m=!0;break}v--}while(f>=c||g>=c);if(m)break;v<0&&(v=0),v+=2}if(p=v,p<1&&(p=1),1===n){for(l=0;l<r;l++)t[d+l]=t[h+l];t[d+r]=x[u]}else{if(0===n)throw new Error;for(l=0;l<n;l++)t[d+l]=x[u+l]}}else for(l=0;l<n;l++)t[d+l]=x[u+l]}function u(i,n,o,r){var l=0;for(l=0;l<r;l++)x[l]=t[o+l];var u=i+n-1,h=r-1,d=o+r-1,f=0,g=0;if(t[d--]=t[u--],0!==--n){if(1===r){for(d-=n,u-=n,g=d+1,f=u+1,l=n-1;l>=0;l--)t[g+l]=t[f+l];return void(t[d]=x[h])}for(var m=p;;){var v=0,y=0,_=!1;do if(e(x[h],t[u])<0){if(t[d--]=t[u--],v++,y=0,0===--n){_=!0;break}}else if(t[d--]=x[h--],y++,v=0,1===--r){_=!0;break}while((v|y)<m);if(_)break;do{if(v=n-s(x[h],t,i,n,n-1,e),0!==v){for(d-=v,u-=v,n-=v,g=d+1,f=u+1,l=v-1;l>=0;l--)t[g+l]=t[f+l];if(0===n){_=!0;break}}if(t[d--]=x[h--],1===--r){_=!0;break}if(y=r-a(t[u],x,0,r,r-1,e),0!==y){for(d-=y,h-=y,r-=y,g=d+1,f=h+1,l=0;l<y;l++)t[g+l]=x[f+l];if(r<=1){_=!0;break}}if(t[d--]=t[u--],0===--n){_=!0;break}m--}while(v>=c||y>=c);if(_)break;m<0&&(m=0),m+=2}if(p=m,p<1&&(p=1),1===r){for(d-=n,u-=n,g=d+1,f=u+1,l=n-1;l>=0;l--)t[g+l]=t[f+l];t[d]=x[h]}else{if(0===r)throw new Error;for(f=d-(r-1),l=0;l<r;l++)t[f+l]=x[l]}}else for(f=d-(r-1),l=0;l<r;l++)t[f+l]=x[l]}var h,f,p=c,g=0,m=d,v=0,y=0;g=t.length,g<2*d&&(m=g>>>1);var x=[];v=g<120?5:g<1542?10:g<119151?19:40,h=[],f=[],this.mergeRuns=n,this.forceMergeRuns=o,this.pushRun=i}function u(t,e,o,a){o||(o=0),a||(a=t.length);var s=a-o;if(!(s<2)){var u=0;if(s<h)return u=n(t,o,a,e),void r(t,o,a,o+u,e);var c=new l(t,e),d=i(s);do{if(u=n(t,o,a,e),u<d){var f=s;f>d&&(f=d),r(t,o,o+f,o+u,e),u=f}c.pushRun(o,u),c.mergeRuns(),s-=u,o+=u}while(0!==s);c.forceMergeRuns()}}var h=32,c=7,d=256;t.exports=u},function(t,e){"use strict";function i(t){return t}function n(t,e,n,o){this._old=t,this._new=e,this._oldKeyGetter=n||i,this._newKeyGetter=o||i}function o(t,e,i,n){for(var o=0;o<t.length;o++){var r=n(t[o],o),a=e[r];null==a?(i.push(r),e[r]=o):(a.length||(e[r]=a=[a]),a.push(o))}}n.prototype={constructor:n,add:function(t){return this._add=t,this},update:function(t){return this._update=t,this},remove:function(t){return this._remove=t,this},execute:function(){var t,e=this._old,i=this._new,n=this._oldKeyGetter,r=this._newKeyGetter,a={},s={},l=[],u=[];for(o(e,a,l,n),o(i,s,u,r),t=0;t<e.length;t++){var h=l[t],c=s[h];if(null!=c){var d=c.length;d?(1===d&&(s[h]=null),c=c.unshift()):s[h]=null,this._update&&this._update(c,t)}else this._remove&&this._remove(t)}for(var t=0;t<u.length;t++){var h=u[t];if(s.hasOwnProperty(h)){var c=s[h];if(null==c)continue;if(c.length)for(var f=0,d=c.length;f<d;f++)this._add&&this._add(c[f]);else this._add&&this._add(c)}}}},t.exports=n},function(t,e){t.exports=function(t,e,i,n,o){n.eachRawSeriesByType(t,function(t){var o=t.getData(),r=t.get("symbol")||e,a=t.get("symbolSize");o.setVisual({legendSymbol:i||r,symbol:r,symbolSize:a}),n.isSeriesFiltered(t)||("function"==typeof a&&o.each(function(e){var i=t.getRawValue(e),n=t.getDataParams(e);o.setItemVisual(e,"symbolSize",a(i,n))}),o.each(function(t){var e=o.getItemModel(t),i=e.getShallow("symbol",!0),n=e.getShallow("symbolSize",!0);null!=i&&o.setItemVisual(t,"symbol",i),null!=n&&o.setItemVisual(t,"symbolSize",n)}))})}},function(t,e,i){var n=i(32);t.exports=function(){if(0!==n.debugMode)if(1==n.debugMode)for(var t in arguments)throw new Error(arguments[t]);else if(n.debugMode>1)for(var t in arguments)console.log(arguments[t])}},function(t,e,i){
+function n(t){o.call(this,t)}var o=i(36),r=i(8),a=i(1),s=i(150),l=new s(50);n.prototype={constructor:n,type:"image",brush:function(t,e){var i,n=this.style,o=n.image;if(n.bind(t,this,e),i="string"==typeof o?this._image:o,!i&&o){var r=l.get(o);if(!r)return i=new Image,i.onload=function(){i.onload=null;for(var t=0;t<r.pending.length;t++)r.pending[t].dirty()},r={image:i,pending:[this]},i.src=o,l.put(o,r),void(this._image=i);if(i=r.image,this._image=i,!i.width||!i.height)return void r.pending.push(this)}if(i){var a=n.width||i.width,s=n.height||i.height,u=n.x||0,h=n.y||0;if(!i.width||!i.height)return;if(this.setTransform(t),n.sWidth&&n.sHeight){var c=n.sx||0,d=n.sy||0;t.drawImage(i,c,d,n.sWidth,n.sHeight,u,h,a,s)}else if(n.sx&&n.sy){var c=n.sx,d=n.sy,f=a-c,p=s-d;t.drawImage(i,c,d,f,p,u,h,a,s)}else t.drawImage(i,u,h,a,s);null==n.width&&(n.width=a),null==n.height&&(n.height=s),this.restoreTransform(t),null!=n.text&&this.drawRectText(t,this.getBoundingRect())}},getBoundingRect:function(){var t=this.style;return this._rect||(this._rect=new r(t.x||0,t.y||0,t.width||0,t.height||0)),this._rect}},a.inherits(n,o),t.exports=n},function(t,e,i){function n(t){return t=t instanceof Array?t.slice():[+t,+t],t[0]/=2,t[1]/=2,t}function o(t,e,i){l.Group.call(this),this.updateData(t,e,i)}function r(t,e){this.parent.drift(t,e)}var a=i(1),s=i(26),l=i(3),u=i(4),h=o.prototype;h._createSymbol=function(t,e,i){this.removeAll();var o=e.hostModel,a=e.getItemVisual(i,"color"),u=s.createSymbol(t,-1,-1,2,2,a);u.attr({z2:100,culling:!0,scale:[0,0]}),u.drift=r;var h=n(e.getItemVisual(i,"symbolSize"));l.initProps(u,{scale:h},o,i),this._symbolType=t,this.add(u)},h.stopSymbolAnimation=function(t){this.childAt(0).stopAnimation(t)},h.getSymbolPath=function(){return this.childAt(0)},h.getScale=function(){return this.childAt(0).scale},h.highlight=function(){this.childAt(0).trigger("emphasis")},h.downplay=function(){this.childAt(0).trigger("normal")},h.setZ=function(t,e){var i=this.childAt(0);i.zlevel=t,i.z=e},h.setDraggable=function(t){var e=this.childAt(0);e.draggable=t,e.cursor=t?"move":"pointer"},h.updateData=function(t,e,i){this.silent=!1;var o=t.getItemVisual(e,"symbol")||"circle",r=t.hostModel,a=n(t.getItemVisual(e,"symbolSize"));if(o!==this._symbolType)this._createSymbol(o,t,e);else{var s=this.childAt(0);l.updateProps(s,{scale:a},r,e)}this._updateCommon(t,e,a,i),this._seriesModel=r};var c=["itemStyle","normal"],d=["itemStyle","emphasis"],f=["label","normal"],p=["label","emphasis"];h._updateCommon=function(t,e,i,o){var r=this.childAt(0),s=t.hostModel,h=t.getItemVisual(e,"color");"image"!==r.type&&r.useStyle({strokeNoScale:!0}),o=o||null;var g=o&&o.itemStyle,m=o&&o.hoverItemStyle,v=o&&o.symbolRotate,y=o&&o.symbolOffset,x=o&&o.labelModel,_=o&&o.hoverLabelModel,b=o&&o.hoverAnimation;if(!o||t.hasItemOption){var w=t.getItemModel(e);g=w.getModel(c).getItemStyle(["color"]),m=w.getModel(d).getItemStyle(),v=w.getShallow("symbolRotate"),y=w.getShallow("symbolOffset"),x=w.getModel(f),_=w.getModel(p),b=w.getShallow("hoverAnimation")}else m=a.extend({},m);var S=r.style;r.attr("rotation",(v||0)*Math.PI/180||0),y&&r.attr("position",[u.parsePercent(y[0],i[0]),u.parsePercent(y[1],i[1])]),r.setColor(h),r.setStyle(g);var M=t.getItemVisual(e,"opacity");null!=M&&(S.opacity=M);for(var T,I,A=t.dimensions.slice();A.length&&(T=A.pop(),I=t.getDimensionInfo(T).type,"ordinal"===I||"time"===I););null!=T&&x.getShallow("show")?(l.setText(S,x,h),S.text=a.retrieve(s.getFormattedLabel(e,"normal"),t.get(T,e))):S.text="",null!=T&&_.getShallow("show")?(l.setText(m,_,h),m.text=a.retrieve(s.getFormattedLabel(e,"emphasis"),t.get(T,e))):m.text="";var L=n(t.getItemVisual(e,"symbolSize"));if(r.off("mouseover").off("mouseout").off("emphasis").off("normal"),r.hoverStyle=m,l.setHoverStyle(r),b&&s.ifEnableAnimation()){var C=function(){var t=L[1]/L[0];this.animateTo({scale:[Math.max(1.1*L[0],L[0]+3),Math.max(1.1*L[1],L[1]+3*t)]},400,"elasticOut")},D=function(){this.animateTo({scale:L},400,"elasticOut")};r.on("mouseover",C).on("mouseout",D).on("emphasis",C).on("normal",D)}},h.fadeOut=function(t){var e=this.childAt(0);this.silent=!0,e.style.text="",l.updateProps(e,{scale:[0,0]},this._seriesModel,this.dataIndex,t)},a.inherits(o,l.Group),t.exports=o},function(t,e,i){function n(t){var e={componentType:t.mainType};return e[t.mainType+"Index"]=t.componentIndex,e}function o(t,e,i){var n,o,r=d(e-t.rotation);return f(r)?(o=i>0?"top":"bottom",n="center"):f(r-v)?(o=i>0?"bottom":"top",n="center"):(o="middle",n=r>0&&r<v?i>0?"right":"left":i>0?"left":"right"),{rotation:r,textAlign:n,verticalAlign:o}}function r(t,e,i,n){var o,r,a=d(i-t.rotation),s=n[0]>n[1],l="start"===e&&!s||"start"!==e&&s;return f(a-v/2)?(r=l?"bottom":"top",o="center"):f(a-1.5*v)?(r=l?"top":"bottom",o="center"):(r="middle",o=a<1.5*v&&a>v/2?l?"left":"right":l?"right":"left"),{rotation:a,textAlign:o,verticalAlign:r}}function a(t){var e=t.get("tooltip");return t.get("silent")||!(t.get("triggerEvent")||e&&e.show)}var s=i(1),l=i(9),u=i(3),h=i(10),c=i(4),d=c.remRadian,f=c.isRadianAroundZero,p=i(5),g=p.applyTransform,m=s.retrieve,v=Math.PI,y=function(t,e){this.opt=e,this.axisModel=t,s.defaults(e,{labelOffset:0,nameDirection:1,tickDirection:1,labelDirection:1,silent:!0}),this.group=new u.Group;var i=new u.Group({position:e.position.slice(),rotation:e.rotation});i.updateTransform(),this._transform=i.transform,this._dumbGroup=i};y.prototype={constructor:y,hasBuilder:function(t){return!!x[t]},add:function(t){x[t].call(this)},getGroup:function(){return this.group}};var x={axisLine:function(){var t=this.opt,e=this.axisModel;if(e.get("axisLine.show")){var i=this.axisModel.axis.getExtent(),n=this._transform,o=[i[0],0],r=[i[1],0];n&&(g(o,o,n),g(r,r,n)),this.group.add(new u.Line(u.subPixelOptimizeLine({anid:"line",shape:{x1:o[0],y1:o[1],x2:r[0],y2:r[1]},style:s.extend({lineCap:"round"},e.getModel("axisLine.lineStyle").getLineStyle()),strokeContainThreshold:t.strokeContainThreshold||5,silent:!0,z2:1})))}},axisTick:function(){var t=this.axisModel;if(t.get("axisTick.show"))for(var e=t.axis,i=t.getModel("axisTick"),n=this.opt,o=i.getModel("lineStyle"),r=i.get("length"),a=b(i,n.labelInterval),l=e.getTicksCoords(i.get("alignWithLabel")),h=e.scale.getTicks(),c=[],d=[],f=this._transform,p=0;p<l.length;p++)if(!_(e,p,a)){var m=l[p];c[0]=m,c[1]=0,d[0]=m,d[1]=n.tickDirection*r,f&&(g(c,c,f),g(d,d,f)),this.group.add(new u.Line(u.subPixelOptimizeLine({anid:"tick_"+h[p],shape:{x1:c[0],y1:c[1],x2:d[0],y2:d[1]},style:s.defaults(o.getLineStyle(),{stroke:t.get("axisLine.lineStyle.color")}),z2:2,silent:!0})))}},axisLabel:function(){function t(t,e){var i=t&&t.getBoundingRect().clone(),n=e&&e.getBoundingRect().clone();if(i&&n)return i.applyTransform(t.getLocalTransform()),n.applyTransform(e.getLocalTransform()),i.intersect(n)}var e=this.opt,i=this.axisModel,r=m(e.axisLabelShow,i.get("axisLabel.show"));if(r){var s=i.axis,l=i.getModel("axisLabel"),c=l.getModel("textStyle"),d=l.get("margin"),f=s.scale.getTicks(),p=i.getFormattedLabels(),g=m(e.labelRotation,l.get("rotate"))||0;g=g*v/180;for(var y=o(e,g,e.labelDirection),x=i.get("data"),b=[],w=a(i),S=i.get("triggerEvent"),M=0;M<f.length;M++)if(!_(s,M,e.labelInterval)){var T=c;x&&x[M]&&x[M].textStyle&&(T=new h(x[M].textStyle,c,i.ecModel));var I=T.getTextColor()||i.get("axisLine.lineStyle.color"),A=s.dataToCoord(f[M]),L=[A,e.labelOffset+e.labelDirection*d],C=s.scale.getLabel(f[M]),D=new u.Text({anid:"label_"+f[M],style:{text:p[M],textAlign:T.get("align",!0)||y.textAlign,textVerticalAlign:T.get("baseline",!0)||y.verticalAlign,textFont:T.getFont(),fill:"function"==typeof I?I(C):I},position:L,rotation:y.rotation,silent:w,z2:10});S&&(D.eventData=n(i),D.eventData.targetType="axisLabel",D.eventData.value=C),this._dumbGroup.add(D),D.updateTransform(),b.push(D),this.group.add(D),D.decomposeTransform()}if("category"!==s.type){if(i.getMin?i.getMin():i.get("min")){var P=b[0],k=b[1];t(P,k)&&(P.ignore=!0)}if(i.getMax?i.getMax():i.get("max")){var z=b[b.length-1],O=b[b.length-2];t(O,z)&&(z.ignore=!0)}}}},axisName:function(){var t=this.opt,e=this.axisModel,i=m(t.axisName,e.get("name"));if(i){var h,c=e.get("nameLocation"),d=t.nameDirection,f=e.getModel("nameTextStyle"),p=e.get("nameGap")||0,g=this.axisModel.axis.getExtent(),y=g[0]>g[1]?-1:1,x=["start"===c?g[0]-y*p:"end"===c?g[1]+y*p:(g[0]+g[1])/2,"middle"===c?t.labelOffset+d*p:0],_=e.get("nameRotate");null!=_&&(_=_*v/180);var b;"middle"===c?h=o(t,null!=_?_:t.rotation,d):(h=r(t,c,_||0,g),b=t.axisNameAvailableWidth,null!=b&&(b=Math.abs(b/Math.sin(h.rotation)),!isFinite(b)&&(b=null)));var w=f.getFont(),S=e.get("nameTruncate",!0)||{},M=S.ellipsis,T=m(S.maxWidth,b),I=null!=M&&null!=T?l.truncateText(i,T,w,M,{minChar:2,placeholder:S.placeholder}):i,A=e.get("tooltip",!0),L=e.mainType,C={componentType:L,name:i,$vars:["name"]};C[L+"Index"]=e.componentIndex;var D=new u.Text({anid:"name",__fullText:i,__truncatedText:I,style:{text:I,textFont:w,fill:f.getTextColor()||e.get("axisLine.lineStyle.color"),textAlign:h.textAlign,textVerticalAlign:h.verticalAlign},position:x,rotation:h.rotation,silent:a(e),z2:1,tooltip:A&&A.show?s.extend({content:i,formatter:function(){return i},formatterParams:C},A):null});e.get("triggerEvent")&&(D.eventData=n(e),D.eventData.targetType="axisName",D.eventData.name=i),this._dumbGroup.add(D),D.updateTransform(),this.group.add(D),D.decomposeTransform()}}},_=y.ifIgnoreOnTick=function(t,e,i){var n,o=t.scale;return"ordinal"===o.type&&("function"==typeof i?(n=o.getTicks()[e],!i(n,o.getLabel(n))):e%(i+1))},b=y.getInterval=function(t,e){var i=t.get("interval");return null!=i&&"auto"!=i||(i=e),i};t.exports=y},function(t,e,i){function n(t){return a.isObject(t)&&null!=t.value?t.value:t}function o(){return"category"===this.get("type")&&a.map(this.get("data"),n)}function r(){return s.getFormattedLabels(this.axis,this.get("axisLabel.formatter"))}var a=i(1),s=i(22);t.exports={getFormattedLabels:r,getCategories:o}},function(t,e,i){var n=i(81),o=i(1),r=i(12),a=i(13),s=["value","category","time","log"];t.exports=function(t,e,i,l){o.each(s,function(r){e.extend({type:t+"Axis."+r,mergeDefaultAndTheme:function(e,n){var s=this.layoutMode,l=s?a.getLayoutParams(e):{},u=n.getTheme();o.merge(e,u.get(r+"Axis")),o.merge(e,this.getDefaultOption()),e.type=i(t,e),s&&a.mergeLayoutParam(e,l,s)},defaultOption:o.mergeAll([{},n[r+"Axis"],l],!0)})}),r.registerSubTypeDefaulter(t+"Axis",o.curry(i,t))}},function(t,e,i){"use strict";function n(t,e){return e.type||(e.data?"category":"value")}var o=i(12),r=i(1),a=i(52),s=o.extend({type:"cartesian2dAxis",axis:null,init:function(){s.superApply(this,"init",arguments),this.resetRange()},mergeOption:function(){s.superApply(this,"mergeOption",arguments),this.resetRange()},restoreData:function(){s.superApply(this,"restoreData",arguments),this.resetRange()},findGridModel:function(){return this.ecModel.queryComponents({mainType:"grid",index:this.get("gridIndex"),id:this.get("gridId")})[0]}});r.merge(s.prototype,i(51)),r.merge(s.prototype,i(82));var l={offset:0};a("x",s,n,l),a("y",s,n,l),t.exports=s},function(t,e,i){function n(t,e,i){return t.findGridModel()===e}function o(t){var e,i=t.model,n=i.getFormattedLabels(),o=1,r=n.length;r>40&&(o=Math.ceil(r/40));for(var a=0;a<r;a+=o)if(!t.isLabelIgnored(a)){var s=i.getTextRect(n[a]);e?e.union(s):e=s}return e}function r(t,e,i){this._coordsMap={},this._coordsList=[],this._axesMap={},this._axesList=[],this._initCartesian(t,e,i),this._model=t}function a(t,e){var i=t.getExtent(),n=i[0]+i[1];t.toGlobalCoord="x"===t.dim?function(t){return t+e}:function(t){return n-t+e},t.toLocalCoord="x"===t.dim?function(t){return t-e}:function(t){return n-t+e}}function s(t,e){return c.map(y,function(e){var i=t.getReferringComponents(e)[0];return i})}function l(t){return"cartesian2d"===t.get("coordinateSystem")}var u=i(13),h=i(22),c=i(1),d=i(119),f=i(117),p=c.each,g=h.ifAxisCrossZero,m=h.niceScaleExtent;i(120);var v=r.prototype;v.type="grid",v.getRect=function(){return this._rect},v.update=function(t,e){function i(t){var e=n[t];for(var i in e)if(e.hasOwnProperty(i)){var o=e[i];if(o&&("category"===o.type||!g(o)))return!0}return!1}var n=this._axesMap;this._updateScale(t,this._model),p(n.x,function(t){m(t,t.model)}),p(n.y,function(t){m(t,t.model)}),p(n.x,function(t){i("y")&&(t.onZero=!1)}),p(n.y,function(t){i("x")&&(t.onZero=!1)}),this.resize(this._model,e)},v.resize=function(t,e){function i(){p(r,function(t){var e=t.isHorizontal(),i=e?[0,n.width]:[0,n.height],o=t.inverse?1:0;t.setExtent(i[o],i[1-o]),a(t,e?n.x:n.y)})}var n=u.getLayoutRect(t.getBoxLayoutParams(),{width:e.getWidth(),height:e.getHeight()});this._rect=n;var r=this._axesList;i(),t.get("containLabel")&&(p(r,function(t){if(!t.model.get("axisLabel.inside")){var e=o(t);if(e){var i=t.isHorizontal()?"height":"width",r=t.model.get("axisLabel.margin");n[i]-=e[i]+r,"top"===t.position?n.y+=e.height+r:"left"===t.position&&(n.x+=e.width+r)}}}),i())},v.getAxis=function(t,e){var i=this._axesMap[t];if(null!=i){if(null==e)for(var n in i)if(i.hasOwnProperty(n))return i[n];return i[e]}},v.getCartesian=function(t,e){if(null!=t&&null!=e){var i="x"+t+"y"+e;return this._coordsMap[i]}for(var n=0,o=this._coordsList;n<o.length;n++)if(o[n].getAxis("x").index===t||o[n].getAxis("y").index===e)return o[n]},v.convertToPixel=function(t,e,i){var n=this._findConvertTarget(t,e);return n.cartesian?n.cartesian.dataToPoint(i):n.axis?n.axis.toGlobalCoord(n.axis.dataToCoord(i)):null},v.convertFromPixel=function(t,e,i){var n=this._findConvertTarget(t,e);return n.cartesian?n.cartesian.pointToData(i):n.axis?n.axis.coordToData(n.axis.toLocalCoord(i)):null},v._findConvertTarget=function(t,e){var i,n,o=e.seriesModel,r=e.xAxisModel||o&&o.getReferringComponents("xAxis")[0],a=e.yAxisModel||o&&o.getReferringComponents("yAxis")[0],s=e.gridModel,l=this._coordsList;if(o)i=o.coordinateSystem,c.indexOf(l,i)<0&&(i=null);else if(r&&a)i=this.getCartesian(r.componentIndex,a.componentIndex);else if(r)n=this.getAxis("x",r.componentIndex);else if(a)n=this.getAxis("y",a.componentIndex);else if(s){var u=s.coordinateSystem;u===this&&(i=this._coordsList[0])}return{cartesian:i,axis:n}},v.containPoint=function(t){var e=this._coordsList[0];if(e)return e.containPoint(t)},v._initCartesian=function(t,e,i){function o(i){return function(o,l){if(n(o,t,e)){var u=o.get("position");"x"===i?"top"!==u&&"bottom"!==u&&(u="bottom",r[u]&&(u="top"===u?"bottom":"top")):"left"!==u&&"right"!==u&&(u="left",r[u]&&(u="left"===u?"right":"left")),r[u]=!0;var c=new f(i,h.createScaleByModel(o),[0,0],o.get("type"),u),d="category"===c.type;c.onBand=d&&o.get("boundaryGap"),c.inverse=o.get("inverse"),c.onZero=o.get("axisLine.onZero"),o.axis=c,c.model=o,c.grid=this,c.index=l,this._axesList.push(c),a[i][l]=c,s[i]++}}}var r={left:!1,right:!1,top:!1,bottom:!1},a={x:{},y:{}},s={x:0,y:0};return e.eachComponent("xAxis",o("x"),this),e.eachComponent("yAxis",o("y"),this),s.x&&s.y?(this._axesMap=a,void p(a.x,function(t,e){p(a.y,function(i,n){var o="x"+e+"y"+n,r=new d(o);r.grid=this,this._coordsMap[o]=r,this._coordsList.push(r),r.addAxis(t),r.addAxis(i)},this)},this)):(this._axesMap={},void(this._axesList=[]))},v._updateScale=function(t,e){function i(t,e,i){p(i.coordDimToDataDim(e.dim),function(i){e.scale.unionExtent(t.getDataExtent(i,"ordinal"!==e.scale.type))})}c.each(this._axesList,function(t){t.scale.setExtent(1/0,-(1/0))}),t.eachSeries(function(o){if(l(o)){var r=s(o,t),a=r[0],u=r[1];if(!n(a,e,t)||!n(u,e,t))return;var h=this.getCartesian(a.componentIndex,u.componentIndex),c=o.getData(),d=h.getAxis("x"),f=h.getAxis("y");"list"===c.type&&(i(c,d,o),i(c,f,o))}},this)};var y=["xAxis","yAxis"];r.create=function(t,e){var i=[];return t.eachComponent("grid",function(n,o){var a=new r(n,t,e);a.name="grid_"+o,a.resize(n,e),n.coordinateSystem=a,i.push(a)}),t.eachSeries(function(e){if(l(e)){var i=s(e,t),n=i[0],o=i[1],r=n.findGridModel(),a=r.coordinateSystem;e.coordinateSystem=a.getCartesian(n.componentIndex,o.componentIndex)}}),i},r.dimensions=d.prototype.dimensions,i(23).register("cartesian2d",r),t.exports=r},function(t,e){t.exports=function(t,e){e.eachSeriesByType(t,function(t){var e=t.getData(),i=t.coordinateSystem;if(i){var n=i.dimensions;"singleAxis"===i.type?e.each(n[0],function(t,n){e.setItemLayout(n,isNaN(t)?[NaN,NaN]:i.dataToPoint(t))}):e.each(n,function(t,n,o){e.setItemLayout(o,isNaN(t)||isNaN(n)?[NaN,NaN]:i.dataToPoint([t,n]))},!0)}})}},function(t,e){t.exports={clearColorPalette:function(){this._colorIdx=0,this._colorNameMap={}},getColorFromPalette:function(t,e){e=e||this;var i=e._colorIdx||0,n=e._colorNameMap||(e._colorNameMap={});if(n[t])return n[t];var o=this.get("color",!0)||[];if(o.length){var r=o[i];return t&&(n[t]=r),e._colorIdx=(i+1)%o.length,r}}}},function(t,e,i){var n=i(33),o=i(43),r=i(21),a=function(){this.group=new n,this.uid=o.getUID("viewComponent")};a.prototype={constructor:a,init:function(t,e){},render:function(t,e,i,n){},dispose:function(){}};var s=a.prototype;s.updateView=s.updateLayout=s.updateVisual=function(t,e,i,n){},r.enableClassExtend(a),r.enableClassManagement(a,{registerWhenExtend:!0}),t.exports=a},function(t,e,i){"use strict";var n=i(62),o=i(20),r=i(88),a=i(166),s=i(1),l=function(t){r.call(this,t),o.call(this,t),a.call(this,t),this.id=t.id||n()};l.prototype={type:"element",name:"",__zr:null,ignore:!1,clipPath:null,drift:function(t,e){switch(this.draggable){case"horizontal":e=0;break;case"vertical":t=0}var i=this.transform;i||(i=this.transform=[1,0,0,1,0,0]),i[4]+=t,i[5]+=e,this.decomposeTransform(),this.dirty(!1)},beforeUpdate:function(){},afterUpdate:function(){},update:function(){this.updateTransform()},traverse:function(t,e){},attrKV:function(t,e){if("position"===t||"scale"===t||"origin"===t){if(e){var i=this[t];i||(i=this[t]=[]),i[0]=e[0],i[1]=e[1]}}else this[t]=e},hide:function(){this.ignore=!0,this.__zr&&this.__zr.refresh()},show:function(){this.ignore=!1,this.__zr&&this.__zr.refresh()},attr:function(t,e){if("string"==typeof t)this.attrKV(t,e);else if(s.isObject(t))for(var i in t)t.hasOwnProperty(i)&&this.attrKV(i,t[i]);return this.dirty(!1),this},setClipPath:function(t){var e=this.__zr;e&&t.addSelfToZr(e),this.clipPath&&this.clipPath!==t&&this.removeClipPath(),this.clipPath=t,t.__zr=e,t.__clipTarget=this,this.dirty(!1)},removeClipPath:function(){var t=this.clipPath;t&&(t.__zr&&t.removeSelfFromZr(t.__zr),t.__zr=null,t.__clipTarget=null,this.clipPath=null,this.dirty(!1))},addSelfToZr:function(t){this.__zr=t;var e=this.animators;if(e)for(var i=0;i<e.length;i++)t.animation.addAnimator(e[i]);this.clipPath&&this.clipPath.addSelfToZr(t)},removeSelfFromZr:function(t){this.__zr=null;var e=this.animators;if(e)for(var i=0;i<e.length;i++)t.animation.removeAnimator(e[i]);this.clipPath&&this.clipPath.removeSelfFromZr(t)}},s.mixin(l,a),s.mixin(l,r),s.mixin(l,o),t.exports=l},function(t,e,i){function n(t,e){return t[e]}function o(t,e,i){t[e]=i}function r(t,e,i){return(e-t)*i+t}function a(t,e,i){return i>.5?e:t}function s(t,e,i,n,o){var a=t.length;if(1==o)for(var s=0;s<a;s++)n[s]=r(t[s],e[s],i);else for(var l=t[0].length,s=0;s<a;s++)for(var u=0;u<l;u++)n[s][u]=r(t[s][u],e[s][u],i)}function l(t,e,i){var n=t.length,o=e.length;if(n!==o){var r=n>o;if(r)t.length=o;else for(var a=n;a<o;a++)t.push(1===i?e[a]:x.call(e[a]))}for(var s=t[0]&&t[0].length,a=0;a<t.length;a++)if(1===i)isNaN(t[a])&&(t[a]=e[a]);else for(var l=0;l<s;l++)isNaN(t[a][l])&&(t[a][l]=e[a][l])}function u(t,e,i){if(t===e)return!0;var n=t.length;if(n!==e.length)return!1;if(1===i){for(var o=0;o<n;o++)if(t[o]!==e[o])return!1}else for(var r=t[0].length,o=0;o<n;o++)for(var a=0;a<r;a++)if(t[o][a]!==e[o][a])return!1;return!0}function h(t,e,i,n,o,r,a,s,l){var u=t.length;if(1==l)for(var h=0;h<u;h++)s[h]=c(t[h],e[h],i[h],n[h],o,r,a);else for(var d=t[0].length,h=0;h<u;h++)for(var f=0;f<d;f++)s[h][f]=c(t[h][f],e[h][f],i[h][f],n[h][f],o,r,a)}function c(t,e,i,n,o,r,a){var s=.5*(i-t),l=.5*(n-e);return(2*(e-i)+s+l)*a+(-3*(e-i)-2*s-l)*r+s*o+e}function d(t){if(y(t)){var e=t.length;if(y(t[0])){for(var i=[],n=0;n<e;n++)i.push(x.call(t[n]));return i}return x.call(t)}return t}function f(t){return t[0]=Math.floor(t[0]),t[1]=Math.floor(t[1]),t[2]=Math.floor(t[2]),"rgba("+t.join(",")+")"}function p(t,e,i,n,o){var d=t._getter,p=t._setter,v="spline"===e,x=n.length;if(x){var _,b=n[0].value,w=y(b),S=!1,M=!1,T=w&&y(b[0])?2:1;n.sort(function(t,e){return t.time-e.time}),_=n[x-1].time;for(var I=[],A=[],L=n[0].value,C=!0,D=0;D<x;D++){I.push(n[D].time/_);var P=n[D].value;if(w&&u(P,L,T)||!w&&P===L||(C=!1),L=P,"string"==typeof P){var k=m.parse(P);k?(P=k,S=!0):M=!0}A.push(P)}if(!C){for(var z=A[x-1],D=0;D<x-1;D++)w?l(A[D],z,T):!isNaN(A[D])||isNaN(z)||M||S||(A[D]=z);w&&l(d(t._target,o),z,T);var O,E,R,V,N,B,G=0,F=0;if(S)var H=[0,0,0,0];var W=function(t,e){var i;if(e<0)i=0;else if(e<F){for(O=Math.min(G+1,x-1),i=O;i>=0&&!(I[i]<=e);i--);i=Math.min(i,x-2)}else{for(i=G;i<x&&!(I[i]>e);i++);i=Math.min(i-1,x-2)}G=i,F=e;var n=I[i+1]-I[i];if(0!==n)if(E=(e-I[i])/n,v)if(V=A[i],R=A[0===i?i:i-1],N=A[i>x-2?x-1:i+1],B=A[i>x-3?x-1:i+2],w)h(R,V,N,B,E,E*E,E*E*E,d(t,o),T);else{var l;if(S)l=h(R,V,N,B,E,E*E,E*E*E,H,1),l=f(H);else{if(M)return a(V,N,E);l=c(R,V,N,B,E,E*E,E*E*E)}p(t,o,l)}else if(w)s(A[i],A[i+1],E,d(t,o),T);else{var l;if(S)s(A[i],A[i+1],E,H,1),l=f(H);else{if(M)return a(A[i],A[i+1],E);l=r(A[i],A[i+1],E)}p(t,o,l)}},Z=new g({target:t._target,life:_,loop:t._loop,delay:t._delay,onframe:W,ondestroy:i});return e&&"spline"!==e&&(Z.easing=e),Z}}}var g=i(144),m=i(18),v=i(1),y=v.isArrayLike,x=Array.prototype.slice,_=function(t,e,i,r){this._tracks={},this._target=t,this._loop=e||!1,this._getter=i||n,this._setter=r||o,this._clipCount=0,this._delay=0,this._doneList=[],this._onframeList=[],this._clipList=[]};_.prototype={when:function(t,e){var i=this._tracks;for(var n in e)if(e.hasOwnProperty(n)){if(!i[n]){i[n]=[];var o=this._getter(this._target,n);if(null==o)continue;0!==t&&i[n].push({time:0,value:d(o)})}i[n].push({time:t,value:e[n]})}return this},during:function(t){return this._onframeList.push(t),this},_doneCallback:function(){this._tracks={},this._clipList.length=0;for(var t=this._doneList,e=t.length,i=0;i<e;i++)t[i].call(this)},start:function(t){var e,i=this,n=0,o=function(){n--,n||i._doneCallback()};for(var r in this._tracks)if(this._tracks.hasOwnProperty(r)){var a=p(this,t,o,this._tracks[r],r);a&&(this._clipList.push(a),n++,this.animation&&this.animation.addClip(a),e=a)}if(e){var s=e.onframe;e.onframe=function(t,e){s(t,e);for(var n=0;n<i._onframeList.length;n++)i._onframeList[n](t,e)}}return n||this._doneCallback(),this},stop:function(t){for(var e=this._clipList,i=this.animation,n=0;n<e.length;n++){var o=e[n];t&&o.onframe(this._target,1),i&&i.removeClip(o)}e.length=0},delay:function(t){return this._delay=t,this},done:function(t){return t&&this._doneList.push(t),this},getClips:function(){return this._clipList}},t.exports=_},function(t,e){t.exports="undefined"!=typeof window&&(window.requestAnimationFrame||window.msRequestAnimationFrame||window.mozRequestAnimationFrame||window.webkitRequestAnimationFrame)||function(t){setTimeout(t,16)}},function(t,e){var i=2*Math.PI;t.exports={normalizeRadian:function(t){return t%=i,t<0&&(t+=i),t}}},function(t,e){var i=2311;t.exports=function(){return i++}},function(t,e){var i=function(t,e){this.image=t,this.repeat=e,this.type="pattern"};i.prototype.getCanvasPattern=function(t){return this._canvasPattern||(this._canvasPattern=t.createPattern(this.image,this.repeat))},t.exports=i},function(t,e){function i(t,e,i){var n=e.x,o=e.x2,r=e.y,a=e.y2;e.global||(n=n*i.width+i.x,o=o*i.width+i.x,r=r*i.height+i.y,a=a*i.height+i.y);var s=t.createLinearGradient(n,r,o,a);return s}function n(t,e,i){var n=i.width,o=i.height,r=Math.min(n,o),a=e.x,s=e.y,l=e.r;e.global||(a=a*n+i.x,s=s*o+i.y,l*=r);var u=t.createRadialGradient(a,s,0,a,s,l);return u}var o=[["shadowBlur",0],["shadowOffsetX",0],["shadowOffsetY",0],["shadowColor","#000"],["lineCap","butt"],["lineJoin","miter"],["miterLimit",10]],r=function(t){this.extendFrom(t)};r.prototype={constructor:r,fill:"#000000",stroke:null,opacity:1,lineDash:null,lineDashOffset:0,shadowBlur:0,shadowOffsetX:0,shadowOffsetY:0,lineWidth:1,strokeNoScale:!1,text:null,textFill:"#000",textStroke:null,textPosition:"inside",textBaseline:null,textAlign:null,textVerticalAlign:null,textDistance:5,textShadowBlur:0,textShadowOffsetX:0,textShadowOffsetY:0,textTransform:!1,textRotation:0,blend:null,bind:function(t,e,i){for(var n=this,r=i&&i.style,a=!r,s=0;s<o.length;s++){var l=o[s],u=l[0];(a||n[u]!==r[u])&&(t[u]=n[u]||l[1])}if((a||n.fill!==r.fill)&&(t.fillStyle=n.fill),(a||n.stroke!==r.stroke)&&(t.strokeStyle=n.stroke),(a||n.opacity!==r.opacity)&&(t.globalAlpha=null==n.opacity?1:n.opacity),(a||n.blend!==r.blend)&&(t.globalCompositeOperation=n.blend||"source-over"),this.hasStroke()){var h=n.lineWidth;t.lineWidth=h/(this.strokeNoScale&&e&&e.getLineScale?e.getLineScale():1)}},hasFill:function(){var t=this.fill;return null!=t&&"none"!==t},hasStroke:function(){var t=this.stroke;return null!=t&&"none"!==t&&this.lineWidth>0},extendFrom:function(t,e){if(t){var i=this;for(var n in t)!t.hasOwnProperty(n)||!e&&i.hasOwnProperty(n)||(i[n]=t[n])}},set:function(t,e){"string"==typeof t?this[t]=e:this.extendFrom(t,!0)},clone:function(){var t=new this.constructor;return t.extendFrom(this,!0),t},getGradient:function(t,e,o){for(var r="radial"===e.type?n:i,a=r(t,e,o),s=e.colorStops,l=0;l<s.length;l++)a.addColorStop(s[l].offset,s[l].color);return a}};for(var a=r.prototype,s=0;s<o.length;s++){var l=o[s];l[0]in a||(a[l[0]]=l[1])}r.getGradient=a.getGradient,t.exports=r},function(t,e,i){var n=i(156),o=i(155);t.exports={buildPath:function(t,e,i){var r=e.points,a=e.smooth;if(r&&r.length>=2){if(a&&"spline"!==a){var s=o(r,a,i,e.smoothConstraint);t.moveTo(r[0][0],r[0][1]);for(var l=r.length,u=0;u<(i?l:l-1);u++){var h=s[2*u],c=s[2*u+1],d=r[(u+1)%l];t.bezierCurveTo(h[0],h[1],c[0],c[1],d[0],d[1])}}else{"spline"===a&&(r=n(r,i)),t.moveTo(r[0][0],r[0][1]);for(var u=1,f=r.length;u<f;u++)t.lineTo(r[u][0],r[u][1])}i&&t.closePath()}}}},function(t,e,i){var n=i(1);t.exports={updateSelectedMap:function(t){this._selectTargetMap=n.reduce(t||[],function(t,e){return t[e.name]=e,t},{})},select:function(t){var e=this._selectTargetMap,i=e[t],o=this.get("selectedMode");"single"===o&&n.each(e,function(t){t.selected=!1}),i&&(i.selected=!0)},unSelect:function(t){var e=this._selectTargetMap[t];e&&(e.selected=!1)},toggleSelected:function(t){var e=this._selectTargetMap[t];if(null!=e)return this[e.selected?"unSelect":"select"](t),e.selected},isSelected:function(t){var e=this._selectTargetMap[t];return e&&e.selected}}},function(t,e,i){function n(t){o.defaultEmphasis(t.label,o.LABEL_OPTIONS)}var o=i(7),r=i(1),a=i(11),s=i(9),l=s.addCommas,u=s.encodeHTML,h=i(2).extendComponentModel({type:"marker",dependencies:["series","grid","polar","geo"],init:function(t,e,i,n){this.mergeDefaultAndTheme(t,i),this.mergeOption(t,i,n.createdBySelf,!0)},ifEnableAnimation:function(){if(a.node)return!1;var t=this.__hostSeries;return this.getShallow("animation")&&t&&t.ifEnableAnimation()},mergeOption:function(t,e,i,o){var a=this.constructor,s=this.mainType+"Model";i||e.eachSeries(function(t){var i=t.get(this.mainType),l=t[s];return i&&i.data?(l?l.mergeOption(i,e,!0):(o&&n(i),r.each(i.data,function(t){t instanceof Array?(n(t[0]),n(t[1])):n(t)}),l=new a(i,this,e),r.extend(l,{mainType:this.mainType,seriesIndex:t.seriesIndex,name:t.name,createdBySelf:!0}),l.__hostSeries=t),void(t[s]=l)):void(t[s]=null)},this)},formatTooltip:function(t){var e=this.getData(),i=this.getRawValue(t),n=r.isArray(i)?r.map(i,l).join(", "):l(i),o=e.getName(t),a=this.name;return(null!=i||o)&&(a+="<br />"),o&&(a+=u(o),null!=i&&(a+=" : ")),null!=i&&(a+=n),a},getData:function(){return this._data},setData:function(t){this._data=t}});r.mixin(h,o.dataFormatMixin),t.exports=h},function(t,e,i){t.exports=i(2).extendComponentView({type:"marker",init:function(){this.markerGroupMap={}},render:function(t,e,i){var n=this.markerGroupMap;for(var o in n)n.hasOwnProperty(o)&&(n[o].__keep=!1);var r=this.type+"Model";e.eachSeries(function(t){var n=t[r];n&&this.renderSeries(t,n,e,i)},this);for(var o in n)n.hasOwnProperty(o)&&!n[o].__keep&&this.group.remove(n[o].group)},renderSeries:function(){}})},function(t,e,i){function n(t){return!(isNaN(parseFloat(t.x))&&isNaN(parseFloat(t.y)))}function o(t){return!isNaN(parseFloat(t.x))&&!isNaN(parseFloat(t.y))}function r(t,e,i){var n=-1;do n=Math.max(l.getPrecision(t.get(e,i)),n),t=t.stackedOn;while(t);return n}function a(t,e,i,n,o,a){var s=[],l=m(e,n,t),u=e.indexOfNearest(n,l,!0);s[o]=e.get(i,u,!0),s[a]=e.get(n,u,!0);var h=r(e,n,u);return h>=0&&(s[a]=+s[a].toFixed(h)),s}var s=i(1),l=i(4),u=s.indexOf,h=s.curry,c={min:h(a,"min"),max:h(a,"max"),average:h(a,"average")},d=function(t,e){var i=t.getData(),n=t.coordinateSystem;if(e&&!o(e)&&!s.isArray(e.coord)&&n){var r=n.dimensions,a=f(e,i,n,t);if(e=s.clone(e),e.type&&c[e.type]&&a.baseAxis&&a.valueAxis){var l=u(r,a.baseAxis.dim),h=u(r,a.valueAxis.dim);e.coord=c[e.type](i,a.baseDataDim,a.valueDataDim,l,h),e.value=e.coord[h]}else{for(var d=[null!=e.xAxis?e.xAxis:e.radiusAxis,null!=e.yAxis?e.yAxis:e.angleAxis],p=0;p<2;p++)if(c[d[p]]){var g=t.coordDimToDataDim(r[p])[0];d[p]=m(i,g,d[p])}e.coord=d}}return e},f=function(t,e,i,n){var o={};return null!=t.valueIndex||null!=t.valueDim?(o.valueDataDim=null!=t.valueIndex?e.getDimension(t.valueIndex):t.valueDim,o.valueAxis=i.getAxis(n.dataDimToCoordDim(o.valueDataDim)),o.baseAxis=i.getOtherAxis(o.valueAxis),o.baseDataDim=n.coordDimToDataDim(o.baseAxis.dim)[0]):(o.baseAxis=n.getBaseAxis(),o.valueAxis=i.getOtherAxis(o.baseAxis),o.baseDataDim=n.coordDimToDataDim(o.baseAxis.dim)[0],o.valueDataDim=n.coordDimToDataDim(o.valueAxis.dim)[0]),o},p=function(t,e){return!(t&&t.containData&&e.coord&&!n(e))||t.containData(e.coord)},g=function(t,e,i,n){return n<2?t.coord&&t.coord[n]:t.value},m=function(t,e,i){if("average"===i){var n=0,o=0;return t.each(e,function(t,e){isNaN(t)||(n+=t,o++)},!0),n/o}return t.getDataExtent(e,!0)["max"===i?1:0]};t.exports={dataTransform:d,dataFilter:p,dimValueGetter:g,getAxisInfo:f,numCalculate:m}},function(t,e){t.exports=function(t,e){var i=e.findComponents({mainType:"legend"});i&&i.length&&e.eachSeriesByType(t,function(t){var e=t.getData();e.filterSelf(function(t){for(var n=e.getName(t),o=0;o<i.length;o++)if(!i[o].isSelected(n))return!1;return!0},this)},this)}},function(t,e,i){function n(t){var e=t.pieceList;t.hasSpecialVisual=!1,p.each(e,function(e,i){e.originIndex=i,null!=e.visual&&(t.hasSpecialVisual=!0)})}function o(t){var e=t.categories,i=t.visual,n=t.categoryMap={};if(v(e,function(t,e){n[t]=e}),!p.isArray(i)){var o=[];p.isObject(i)?v(i,function(t,e){var i=n[e];o[null!=i?i:x]=t}):o[x]=i,i=t.visual=o}for(var r=e.length-1;r>=0;r--)null==i[r]&&(delete n[e[r]],e.pop())}function r(t,e){var i=t.visual,n=[];p.isObject(i)?v(i,function(t){n.push(t)}):null!=i&&n.push(i);var o={color:1,symbol:1};e||1!==n.length||o.hasOwnProperty(t.type)||(n[1]=n[0]),t.visual=n}function a(t){return{applyVisual:function(e,i,n){e=this.mapValueToVisual(e),n("color",t(i("color"),e))},_doMap:c([0,1])}}function s(t,e){var i=this.option.visual;return i[Math.round(m(e,[0,1],[0,i.length-1],!0))]||{}}function l(t){return function(e,i,n){n(t,this.mapValueToVisual(e))}}function u(t){var e=this.option.visual;return e[this.option.loop&&t!==x?t%e.length:t]}function h(){return this.option.visual[0]}function c(t){return{linear:function(e){return m(e,t,this.option.visual,!0)},category:u,piecewise:function(e,i){var n=d.call(this,i);return null==n&&(n=m(e,t,this.option.visual,!0)),n},fixed:h}}function d(t){var e=this.option,i=e.pieceList;if(e.hasSpecialVisual){var n=_.findPieceIndex(t,i),o=i[n];if(o&&o.visual)return o.visual[this.type]}}function f(t,e,i){return t?e<=i:e<i}var p=i(1),g=i(18),m=i(4).linearMap,v=p.each,y=p.isObject,x=-1,_=function(t){var e=t.mappingMethod,i=t.type,a=this.option=p.clone(t);this.type=i,this.mappingMethod=e,this._normalizeData=w[e];var s=b[i];this.applyVisual=s.applyVisual,this.getColorMapper=s.getColorMapper,this._doMap=s._doMap[e],"piecewise"===e?(r(a),n(a)):"category"===e?a.categories?o(a):r(a,!0):(p.assert("linear"!==e||a.dataExtent),
+r(a))};_.prototype={constructor:_,mapValueToVisual:function(t){var e=this._normalizeData(t);return this._doMap(e,t)},getNormalizer:function(){return p.bind(this._normalizeData,this)}};var b=_.visualHandlers={color:{applyVisual:l("color"),getColorMapper:function(){var t=this.option,e=p.map(t.visual,g.parse);return p.bind("category"===t.mappingMethod?function(t,e){return!e&&(t=this._normalizeData(t)),u(this,t)}:function(t,i,n){var o=!!n;return!i&&(t=this._normalizeData(t)),n=g.fastMapToColor(t,e,n),o?n:p.stringify(n,"rgba")},this)},_doMap:{linear:function(t){return g.mapToColor(t,this.option.visual)},category:u,piecewise:function(t,e){var i=d.call(this,e);return null==i&&(i=g.mapToColor(t,this.option.visual)),i},fixed:h}},colorHue:a(function(t,e){return g.modifyHSL(t,e)}),colorSaturation:a(function(t,e){return g.modifyHSL(t,null,e)}),colorLightness:a(function(t,e){return g.modifyHSL(t,null,null,e)}),colorAlpha:a(function(t,e){return g.modifyAlpha(t,e)}),opacity:{applyVisual:l("opacity"),_doMap:c([0,1])},symbol:{applyVisual:function(t,e,i){var n=this.mapValueToVisual(t);if(p.isString(n))i("symbol",n);else if(y(n))for(var o in n)n.hasOwnProperty(o)&&i(o,n[o])},_doMap:{linear:s,category:u,piecewise:function(t,e){var i=d.call(this,e);return null==i&&(i=s.call(this,t)),i},fixed:h}},symbolSize:{applyVisual:l("symbolSize"),_doMap:c([0,1])}},w={linear:function(t){return m(t,this.option.dataExtent,[0,1],!0)},piecewise:function(t){var e=this.option.pieceList,i=_.findPieceIndex(t,e,!0);if(null!=i)return m(i,[0,e.length-1],[0,1],!0)},category:function(t){var e=this.option.categories?this.option.categoryMap[t]:t;return null==e?x:e},fixed:p.noop};_.addVisualHandler=function(t,e){b[t]=e},_.isValidType=function(t){return b.hasOwnProperty(t)},_.eachVisual=function(t,e,i){p.isObject(t)?p.each(t,e,i):e.call(i,t)},_.mapVisual=function(t,e,i){var n,o=p.isArray(t)?[]:p.isObject(t)?{}:(n=!0,null);return _.eachVisual(t,function(t,r){var a=e.call(i,t,r);n?o=a:o[r]=a}),o},_.retrieveVisuals=function(t){var e,i={};return t&&v(b,function(n,o){t.hasOwnProperty(o)&&(i[o]=t[o],e=!0)}),e?i:null},_.prepareVisualTypes=function(t){if(y(t)){var e=[];v(t,function(t,i){e.push(i)}),t=e}else{if(!p.isArray(t))return[];t=t.slice()}return t.sort(function(t,e){return"color"===e&&"color"!==t&&0===t.indexOf("color")?1:-1}),t},_.dependsOn=function(t,e){return"color"===e?!(!t||0!==t.indexOf(e)):t===e},_.findPieceIndex=function(t,e,i){function n(e,i){var n=Math.abs(e-t);n<r&&(r=n,o=i)}for(var o,r=1/0,a=0,s=e.length;a<s;a++){var l=e[a].value;if(null!=l){if(l===t)return a;i&&n(l,a)}}for(var a=0,s=e.length;a<s;a++){var u=e[a],h=u.interval,c=u.close;if(h){if(h[0]===-(1/0)){if(f(c[1],t,h[1]))return a}else if(h[1]===1/0){if(f(c[0],h[0],t))return a}else if(f(c[0],h[0],t)&&f(c[1],t,h[1]))return a;i&&n(h[0],a),i&&n(h[1],a)}}if(i)return t===1/0?e.length-1:t===-(1/0)?0:o},t.exports=_},function(t,e){t.exports=function(t,e){var i={};e.eachRawSeriesByType(t,function(t){var n=t.getRawData(),o={};if(!e.isSeriesFiltered(t)){var r=t.getData();r.each(function(t){var e=r.getRawIndex(t);o[e]=t}),n.each(function(e){var a=n.getItemModel(e),s=o[e],l=null!=s&&r.getItemVisual(s,"color",!0);if(l)n.setItemVisual(e,"color",l);else{var u=a.get("itemStyle.normal.color")||t.getColorFromPalette(n.getName(e),i);n.setItemVisual(e,"color",u),null!=s&&r.setItemVisual(s,"color",u)}})}})}},function(t,e,i){var n=i(5),o=i(17),r={},a=Math.min,s=Math.max,l=Math.sin,u=Math.cos,h=n.create(),c=n.create(),d=n.create(),f=2*Math.PI;r.fromPoints=function(t,e,i){if(0!==t.length){var n,o=t[0],r=o[0],l=o[0],u=o[1],h=o[1];for(n=1;n<t.length;n++)o=t[n],r=a(r,o[0]),l=s(l,o[0]),u=a(u,o[1]),h=s(h,o[1]);e[0]=r,e[1]=u,i[0]=l,i[1]=h}},r.fromLine=function(t,e,i,n,o,r){o[0]=a(t,i),o[1]=a(e,n),r[0]=s(t,i),r[1]=s(e,n)};var p=[],g=[];r.fromCubic=function(t,e,i,n,r,l,u,h,c,d){var f,m=o.cubicExtrema,v=o.cubicAt,y=m(t,i,r,u,p);for(c[0]=1/0,c[1]=1/0,d[0]=-(1/0),d[1]=-(1/0),f=0;f<y;f++){var x=v(t,i,r,u,p[f]);c[0]=a(x,c[0]),d[0]=s(x,d[0])}for(y=m(e,n,l,h,g),f=0;f<y;f++){var _=v(e,n,l,h,g[f]);c[1]=a(_,c[1]),d[1]=s(_,d[1])}c[0]=a(t,c[0]),d[0]=s(t,d[0]),c[0]=a(u,c[0]),d[0]=s(u,d[0]),c[1]=a(e,c[1]),d[1]=s(e,d[1]),c[1]=a(h,c[1]),d[1]=s(h,d[1])},r.fromQuadratic=function(t,e,i,n,r,l,u,h){var c=o.quadraticExtremum,d=o.quadraticAt,f=s(a(c(t,i,r),1),0),p=s(a(c(e,n,l),1),0),g=d(t,i,r,f),m=d(e,n,l,p);u[0]=a(t,r,g),u[1]=a(e,l,m),h[0]=s(t,r,g),h[1]=s(e,l,m)},r.fromArc=function(t,e,i,o,r,a,s,p,g){var m=n.min,v=n.max,y=Math.abs(r-a);if(y%f<1e-4&&y>1e-4)return p[0]=t-i,p[1]=e-o,g[0]=t+i,void(g[1]=e+o);if(h[0]=u(r)*i+t,h[1]=l(r)*o+e,c[0]=u(a)*i+t,c[1]=l(a)*o+e,m(p,h,c),v(g,h,c),r%=f,r<0&&(r+=f),a%=f,a<0&&(a+=f),r>a&&!s?a+=f:r<a&&s&&(r+=f),s){var x=a;a=r,r=x}for(var _=0;_<a;_+=Math.PI/2)_>r&&(d[0]=u(_)*i+t,d[1]=l(_)*o+e,m(p,d,p),v(g,d,g))},t.exports=r},function(t,e,i){var n=i(36),o=i(1),r=i(16),a=function(t){n.call(this,t)};a.prototype={constructor:a,type:"text",brush:function(t,e){var i=this.style,n=i.x||0,o=i.y||0,a=i.text;if(null!=a&&(a+=""),i.bind(t,this,e),a){this.setTransform(t);var s,l=i.textAlign,u=i.textFont||i.font;if(i.textVerticalAlign){var h=r.getBoundingRect(a,u,i.textAlign,"top");switch(s="middle",i.textVerticalAlign){case"middle":o-=h.height/2-h.lineHeight/2;break;case"bottom":o-=h.height-h.lineHeight/2;break;default:o+=h.lineHeight/2}}else s=i.textBaseline;t.font=u||"12px sans-serif",t.textAlign=l||"left",t.textAlign!==l&&(t.textAlign="left"),t.textBaseline=s||"alphabetic",t.textBaseline!==s&&(t.textBaseline="alphabetic");for(var c=r.measureText("国",t.font).width,d=a.split("\n"),f=0;f<d.length;f++)i.hasFill()&&t.fillText(d[f],n,o),i.hasStroke()&&t.strokeText(d[f],n,o),o+=c;this.restoreTransform(t)}},getBoundingRect:function(){if(!this._rect){var t=this.style,e=t.textVerticalAlign,i=r.getBoundingRect(t.text+"",t.textFont||t.font,t.textAlign,e?"top":t.textBaseline);switch(e){case"middle":i.y-=i.height/2;break;case"bottom":i.y-=i.height}i.x+=t.x||0,i.y+=t.y||0,this._rect=i}return this._rect}},o.inherits(a,n),t.exports=a},function(t,e,i){function n(t,e){return"string"==typeof t?t.lastIndexOf("%")>=0?parseFloat(t)/100*e:parseFloat(t):t}var o=i(16),r=i(8),a=new r,s=function(){};s.prototype={constructor:s,drawRectText:function(t,e,i){var r=this.style,s=r.text;if(null!=s&&(s+=""),s){t.save();var l,u,h=r.textPosition,c=r.textDistance,d=r.textAlign,f=r.textFont||r.font,p=r.textBaseline,g=r.textVerticalAlign;i=i||o.getBoundingRect(s,f,d,p);var m=this.transform;if(r.textTransform?this.setTransform(t):m&&(a.copy(e),a.applyTransform(m),e=a),h instanceof Array){if(l=e.x+n(h[0],e.width),u=e.y+n(h[1],e.height),d=d||"left",p=p||"top",g){switch(g){case"middle":u-=i.height/2-i.lineHeight/2;break;case"bottom":u-=i.height-i.lineHeight/2;break;default:u+=i.lineHeight/2}p="middle"}}else{var v=o.adjustTextPositionOnRect(h,e,i,c);l=v.x,u=v.y,d=d||v.textAlign,p=p||v.textBaseline}t.textAlign=d||"left",t.textBaseline=p||"alphabetic";var y=r.textFill,x=r.textStroke;y&&(t.fillStyle=y),x&&(t.strokeStyle=x),t.font=f||"12px sans-serif",t.shadowBlur=r.textShadowBlur,t.shadowColor=r.textShadowColor||"transparent",t.shadowOffsetX=r.textShadowOffsetX,t.shadowOffsetY=r.textShadowOffsetY;var _=s.split("\n");r.textRotation&&(m&&t.translate(m[4],m[5]),t.rotate(r.textRotation),m&&t.translate(-m[4],-m[5]));for(var b=0;b<_.length;b++)y&&t.fillText(_[b],l,u),x&&t.strokeText(_[b],l,u),u+=i.lineHeight;t.restore()}}},t.exports=s},function(t,e,i){function n(t){delete f[t]}/*!
+	 * ZRender, a high performance 2d drawing library.
+	 *
+	 * Copyright (c) 2013, Baidu Inc.
+	 * All rights reserved.
+	 *
+	 * LICENSE
+	 * https://github.com/ecomfe/zrender/blob/master/LICENSE.txt
+	 */
+var o=i(62),r=i(11),a=i(1),s=i(139),l=i(142),u=i(143),h=i(151),c=!r.canvasSupported,d={canvas:i(141)},f={},p={};p.version="3.2.1",p.init=function(t,e){var i=new g(o(),t,e);return f[i.id]=i,i},p.dispose=function(t){if(t)t.dispose();else{for(var e in f)f.hasOwnProperty(e)&&f[e].dispose();f={}}return p},p.getInstance=function(t){return f[t]},p.registerPainter=function(t,e){d[t]=e};var g=function(t,e,i){i=i||{},this.dom=e,this.id=t;var n=this,o=new l,f=i.renderer;if(c){if(!d.vml)throw new Error("You need to require 'zrender/vml/vml' to support IE8");f="vml"}else f&&d[f]||(f="canvas");var p=new d[f](e,o,i);this.storage=o,this.painter=p;var g=r.node?null:new h(p.getViewportRoot());this.handler=new s(o,p,g,p.root),this.animation=new u({stage:{update:a.bind(this.flush,this)}}),this.animation.start(),this._needsRefresh;var m=o.delFromMap,v=o.addToMap;o.delFromMap=function(t){var e=o.get(t);m.call(o,t),e&&e.removeSelfFromZr(n)},o.addToMap=function(t){v.call(o,t),t.addSelfToZr(n)}};g.prototype={constructor:g,getId:function(){return this.id},add:function(t){this.storage.addRoot(t),this._needsRefresh=!0},remove:function(t){this.storage.delRoot(t),this._needsRefresh=!0},configLayer:function(t,e){this.painter.configLayer(t,e),this._needsRefresh=!0},refreshImmediately:function(){this._needsRefresh=!1,this.painter.refresh(),this._needsRefresh=!1},refresh:function(){this._needsRefresh=!0},flush:function(){this._needsRefresh&&this.refreshImmediately(),this._needsRefreshHover&&this.refreshHoverImmediately()},addHover:function(t,e){this.painter.addHover&&(this.painter.addHover(t,e),this.refreshHover())},removeHover:function(t){this.painter.removeHover&&(this.painter.removeHover(t),this.refreshHover())},clearHover:function(){this.painter.clearHover&&(this.painter.clearHover(),this.refreshHover())},refreshHover:function(){this._needsRefreshHover=!0},refreshHoverImmediately:function(){this._needsRefreshHover=!1,this.painter.refreshHover&&this.painter.refreshHover()},resize:function(t){t=t||{},this.painter.resize(t.width,t.height),this.handler.resize()},clearAnimation:function(){this.animation.clear()},getWidth:function(){return this.painter.getWidth()},getHeight:function(){return this.painter.getHeight()},pathToImage:function(t,e,i){var n=o();return this.painter.pathToImage(n,t,e,i)},setCursorStyle:function(t){this.handler.setCursorStyle(t)},on:function(t,e,i){this.handler.on(t,e,i)},off:function(t,e){this.handler.off(t,e)},trigger:function(t,e){this.handler.trigger(t,e)},clear:function(){this.storage.delRoot(),this.painter.clear()},dispose:function(){this.animation.stop(),this.clear(),this.storage.dispose(),this.painter.dispose(),this.handler.dispose(),this.animation=this.storage=this.painter=this.handler=null,n(this.id)}},t.exports=p},function(t,e,i){var n=i(2),o=i(1);t.exports=function(t,e){o.each(e,function(e){e.update="updateView",n.registerAction(e,function(i,n){var o={};return n.eachComponent({mainType:"series",subType:t,query:i},function(t){t[e.method]&&t[e.method](i.name);var n=t.getData();n.each(function(e){var i=n.getName(e);o[i]=t.isSelected(i)||!1})}),{name:i.name,selected:o}})})}},function(t,e,i){var n=i(1),o={retrieveTargetInfo:function(t,e){if(t&&("treemapZoomToNode"===t.type||"treemapRootToNode"===t.type)){var i=e.getData().tree.root,n=t.targetNode;if(n&&i.contains(n))return{node:n};var o=t.targetNodeId;if(null!=o&&(n=i.getNodeById(o)))return{node:n}}},getPathToRoot:function(t){for(var e=[];t;)t=t.parentNode,t&&e.push(t);return e.reverse()},aboveViewRoot:function(t,e){var i=o.getPathToRoot(t);return n.indexOf(i,e)>=0},wrapTreePathInfo:function(t,e){for(var i=[];t;){var n=t.dataIndex;i.push({name:t.name,dataIndex:n,value:e.getRawValue(n)}),t=t.parentNode}return i.reverse(),i}};t.exports=o},function(t,e,i){function n(t){if(!t.target||!t.target.draggable){var e=t.offsetX,i=t.offsetY;this.containsPoint&&this.containsPoint(e,i)&&(this._x=e,this._y=i,this._dragging=!0)}}function o(t){if(this._dragging&&(d.stop(t.event),"pinch"!==t.gestureEvent)){if(f.isTaken(this._zr,"globalPan"))return;var e=t.offsetX,i=t.offsetY,n=this._x,o=this._y,r=e-n,a=i-o;this._x=e,this._y=i;var s=this.target;if(s){var l=s.position;l[0]+=r,l[1]+=a,s.dirty()}d.stop(t.event),this.trigger("pan",r,a,n,o,e,i)}}function r(t){this._dragging=!1}function a(t){var e=t.wheelDelta>0?1.1:1/1.1;l.call(this,t,e,t.offsetX,t.offsetY)}function s(t){if(!f.isTaken(this._zr,"globalPan")){var e=t.pinchScale>1?1.1:1/1.1;l.call(this,t,e,t.pinchX,t.pinchY)}}function l(t,e,i,n){if(this.containsPoint&&this.containsPoint(i,n)){d.stop(t.event);var o=this.target,r=this.zoomLimit;if(o){var a=o.position,s=o.scale,l=this.zoom=this.zoom||1;if(l*=e,r){var u=r.min||0,h=r.max||1/0;l=Math.max(Math.min(h,l),u)}var c=l/this.zoom;this.zoom=l,a[0]-=(i-a[0])*(c-1),a[1]-=(n-a[1])*(c-1),s[0]*=c,s[1]*=c,o.dirty()}this.trigger("zoom",e,i,n)}}function u(t,e){this.target=e,this.containsPoint,this.zoomLimit,this.zoom,this._zr=t;var i=c.bind,l=i(n,this),u=i(o,this),d=i(r,this),f=i(a,this),p=i(s,this);h.call(this),this.setContainsPoint=function(t){this.containsPoint=t},this.enable=function(e){this.disable(),null==e&&(e=!0),e!==!0&&"move"!==e&&"pan"!==e||(t.on("mousedown",l),t.on("mousemove",u),t.on("mouseup",d)),e!==!0&&"scale"!==e&&"zoom"!==e||(t.on("mousewheel",f),t.on("pinch",p))},this.disable=function(){t.off("mousedown",l),t.off("mousemove",u),t.off("mouseup",d),t.off("mousewheel",f),t.off("pinch",p)},this.dispose=this.disable,this.isDragging=function(){return this._dragging},this.isPinching=function(){return this._pinching}}var h=i(20),c=i(1),d=i(24),f=i(115);c.mixin(u,h),t.exports=u},function(t,e){t.exports=function(t,e,i,n,o){function r(t,e,i){var n=e.length?e.slice():[e,e];return e[0]>e[1]&&n.reverse(),t<0&&n[0]+t<i[0]&&(t=i[0]-n[0]),t>0&&n[1]+t>i[1]&&(t=i[1]-n[1]),t}return t?("rigid"===n?(t=r(t,e,i),e[0]+=t,e[1]+=t):(t=r(t,e[o],i),e[o]+=t,"push"===n&&e[0]>e[1]&&(e[1-o]=e[o])),e):e}},function(t,e,i){var n=i(1),o={show:!0,zlevel:0,z:0,inverse:!1,name:"",nameLocation:"end",nameRotate:null,nameTruncate:{maxWidth:null,ellipsis:"...",placeholder:"."},nameTextStyle:{},nameGap:15,silent:!1,triggerEvent:!1,tooltip:{show:!1},axisLine:{show:!0,onZero:!0,lineStyle:{color:"#333",width:1,type:"solid"}},axisTick:{show:!0,inside:!1,length:5,lineStyle:{width:1}},axisLabel:{show:!0,inside:!1,rotate:0,margin:8,textStyle:{fontSize:12}},splitLine:{show:!0,lineStyle:{color:["#ccc"],width:1,type:"solid"}},splitArea:{show:!1,areaStyle:{color:["rgba(250,250,250,0.3)","rgba(200,200,200,0.3)"]}}},r=n.merge({boundaryGap:!0,splitLine:{show:!1},axisTick:{alignWithLabel:!1,interval:"auto"},axisLabel:{interval:"auto"}},o),a=n.merge({boundaryGap:[0,0],splitNumber:5},o),s=n.defaults({scale:!0,min:"dataMin",max:"dataMax"},a),l=n.defaults({logBase:10},a);l.scale=!0,t.exports={categoryAxis:r,valueAxis:a,timeAxis:s,logAxis:l}},function(t,e){t.exports={getMin:function(){var t=this.option,e=null!=t.rangeStart?t.rangeStart:t.min;return e instanceof Date&&(e=+e),e},getMax:function(){var t=this.option,e=null!=t.rangeEnd?t.rangeEnd:t.max;return e instanceof Date&&(e=+e),e},getNeedCrossZero:function(){var t=this.option;return null==t.rangeStart&&null==t.rangeEnd&&!t.scale},setRange:function(t,e){this.option.rangeStart=t,this.option.rangeEnd=e},resetRange:function(){this.option.rangeStart=this.option.rangeEnd=null}}},function(t,e){var i={},n="\0__throttleOriginMethod",o="\0__throttleRate",r="\0__throttleType";i.throttle=function(t,e,i){function n(){u=(new Date).getTime(),h=null,t.apply(a,s||[])}var o,r,a,s,l=0,u=0,h=null;e=e||0;var c=function(){o=(new Date).getTime(),a=this,s=arguments,r=o-(i?l:u)-e,clearTimeout(h),i?h=setTimeout(n,e):r>=0?n():h=setTimeout(n,-r),l=o};return c.clear=function(){h&&(clearTimeout(h),h=null)},c},i.createOrUpdate=function(t,e,a,s){var l=t[e];if(l){var u=l[n]||l,h=l[r],c=l[o];if(c!==a||h!==s){if(null==a||!s)return t[e]=u;l=t[e]=i.throttle(u,a,"debounce"===s),l[n]=u,l[r]=s,l[o]=a}return l}},i.clear=function(t,e){var i=t[e];i&&i[n]&&(t[e]=i[n])},t.exports=i},function(t,e){t.exports={containStroke:function(t,e,i,n,o,r,a){if(0===o)return!1;var s=o,l=0,u=t;if(a>e+s&&a>n+s||a<e-s&&a<n-s||r>t+s&&r>i+s||r<t-s&&r<i-s)return!1;if(t===i)return Math.abs(r-t)<=s/2;l=(e-n)/(t-i),u=(t*n-i*e)/(t-i);var h=l*r-a+u,c=h*h/(l*l+1);return c<=s/2*s/2}}},function(t,e,i){var n=i(17);t.exports={containStroke:function(t,e,i,o,r,a,s,l,u){if(0===s)return!1;var h=s;if(u>e+h&&u>o+h&&u>a+h||u<e-h&&u<o-h&&u<a-h||l>t+h&&l>i+h&&l>r+h||l<t-h&&l<i-h&&l<r-h)return!1;var c=n.quadraticProjectPoint(t,e,i,o,r,a,l,u,null);return c<=h/2}}},function(t,e){t.exports=function(t,e,i,n,o,r){if(r>e&&r>n||r<e&&r<n)return 0;if(n===e)return 0;var a=n<e?1:-1,s=(r-e)/(n-e);1!==s&&0!==s||(a=n<e?.5:-.5);var l=s*(i-t)+t;return l>o?a:0}},function(t,e,i){"use strict";var n=i(1),o=i(37),r=function(t,e,i,n,r,a){this.x=null==t?0:t,this.y=null==e?0:e,this.x2=null==i?1:i,this.y2=null==n?0:n,this.type="linear",this.global=a||!1,o.call(this,r)};r.prototype={constructor:r},n.inherits(r,o),t.exports=r},function(t,e,i){"use strict";function n(t){return t>s||t<-s}var o=i(19),r=i(5),a=o.identity,s=5e-5,l=function(t){t=t||{},t.position||(this.position=[0,0]),null==t.rotation&&(this.rotation=0),t.scale||(this.scale=[1,1]),this.origin=this.origin||null},u=l.prototype;u.transform=null,u.needLocalTransform=function(){return n(this.rotation)||n(this.position[0])||n(this.position[1])||n(this.scale[0]-1)||n(this.scale[1]-1)},u.updateTransform=function(){var t=this.parent,e=t&&t.transform,i=this.needLocalTransform(),n=this.transform;return i||e?(n=n||o.create(),i?this.getLocalTransform(n):a(n),e&&(i?o.mul(n,t.transform,n):o.copy(n,t.transform)),this.transform=n,this.invTransform=this.invTransform||o.create(),void o.invert(this.invTransform,n)):void(n&&a(n))},u.getLocalTransform=function(t){t=t||[],a(t);var e=this.origin,i=this.scale,n=this.rotation,r=this.position;return e&&(t[4]-=e[0],t[5]-=e[1]),o.scale(t,t,i),n&&o.rotate(t,t,n),e&&(t[4]+=e[0],t[5]+=e[1]),t[4]+=r[0],t[5]+=r[1],t},u.setTransform=function(t){var e=this.transform,i=t.dpr||1;e?t.setTransform(i*e[0],i*e[1],i*e[2],i*e[3],i*e[4],i*e[5]):t.setTransform(i,0,0,i,0,0)},u.restoreTransform=function(t){var e=(this.transform,t.dpr||1);t.setTransform(e,0,0,e,0,0)};var h=[];u.decomposeTransform=function(){if(this.transform){var t=this.parent,e=this.transform;t&&t.transform&&(o.mul(h,t.invTransform,e),e=h);var i=e[0]*e[0]+e[1]*e[1],r=e[2]*e[2]+e[3]*e[3],a=this.position,s=this.scale;n(i-1)&&(i=Math.sqrt(i)),n(r-1)&&(r=Math.sqrt(r)),e[0]<0&&(i=-i),e[3]<0&&(r=-r),a[0]=e[4],a[1]=e[5],s[0]=i,s[1]=r,this.rotation=Math.atan2(-e[1]/r,e[0]/i)}},u.getGlobalScale=function(){var t=this.transform;if(!t)return[1,1];var e=Math.sqrt(t[0]*t[0]+t[1]*t[1]),i=Math.sqrt(t[2]*t[2]+t[3]*t[3]);return t[0]<0&&(e=-e),t[3]<0&&(i=-i),[e,i]},u.transformCoordToLocal=function(t,e){var i=[t,e],n=this.invTransform;return n&&r.applyTransform(i,i,n),i},u.transformCoordToGlobal=function(t,e){var i=[t,e],n=this.transform;return n&&r.applyTransform(i,i,n),i},t.exports=l},function(t,e,i){"use strict";function n(t){o.each(r,function(e){this[e]=o.bind(t[e],t)},this)}var o=i(1),r=["getDom","getZr","getWidth","getHeight","dispatchAction","isDisposed","on","off","getDataURL","getConnectedDataURL","getModel","getOption"];t.exports=n},function(t,e,i){var n=i(1);i(54),i(91),i(92);var o=i(122),r=i(2);r.registerLayout(n.curry(o,"bar")),r.registerVisual(function(t){t.eachSeriesByType("bar",function(t){var e=t.getData();e.setVisual("legendSymbol","roundRect")})}),i(35)},function(t,e,i){"use strict";var n=i(15),o=i(34);t.exports=n.extend({type:"series.bar",dependencies:["grid","polar"],getInitialData:function(t,e){return o(t.data,this,e)},getMarkerPosition:function(t){var e=this.coordinateSystem;if(e){var i=e.dataToPoint(t,!0),n=this.getData(),o=n.getLayout("offset"),r=n.getLayout("size"),a=e.getBaseAxis().isHorizontal()?0:1;return i[a]+=o+r/2,i}return[NaN,NaN]},brushSelector:"rect",defaultOption:{zlevel:0,z:2,coordinateSystem:"cartesian2d",legendHoverLink:!0,barMinHeight:0,itemStyle:{normal:{},emphasis:{}}}})},function(t,e,i){"use strict";function n(t,e){var i=t.width>0?1:-1,n=t.height>0?1:-1;e=Math.min(e,Math.abs(t.width),Math.abs(t.height)),t.x+=i*e/2,t.y+=n*e/2,t.width-=i*e,t.height-=n*e}var o=i(1),r=i(3);o.extend(i(10).prototype,i(93)),t.exports=i(2).extendChartView({type:"bar",render:function(t,e,i){var n=t.get("coordinateSystem");return"cartesian2d"===n&&this._renderOnCartesian(t,e,i),this.group},dispose:o.noop,_renderOnCartesian:function(t,e,i){function a(e,i){var a=l.getItemLayout(e),s=l.getItemModel(e).get(p)||0;n(a,s);var u=new r.Rect({shape:o.extend({},a)});if(f){var h=u.shape,c=d?"height":"width",g={};h[c]=0,g[c]=a[c],r[i?"updateProps":"initProps"](u,{shape:g},t,e)}return u}var s=this.group,l=t.getData(),u=this._data,h=t.coordinateSystem,c=h.getBaseAxis(),d=c.isHorizontal(),f=t.get("animation"),p=["itemStyle","normal","barBorderWidth"];l.diff(u).add(function(t){if(l.hasValue(t)){var e=a(t);l.setItemGraphicEl(t,e),s.add(e)}}).update(function(e,i){var o=u.getItemGraphicEl(i);if(!l.hasValue(e))return void s.remove(o);o||(o=a(e,!0));var h=l.getItemLayout(e),c=l.getItemModel(e).get(p)||0;n(h,c),r.updateProps(o,{shape:h},t,e),l.setItemGraphicEl(e,o),s.add(o)}).remove(function(e){var i=u.getItemGraphicEl(e);i&&(i.style.text="",r.updateProps(i,{shape:{width:0}},t,e,function(){s.remove(i)}))}).execute(),this._updateStyle(t,l,d),this._data=l},_updateStyle:function(t,e,i){function n(t,e,i,n,o){r.setText(t,e,i),t.text=n,"outside"===t.textPosition&&(t.textPosition=o)}e.eachItemGraphicEl(function(a,s){var l=e.getItemModel(s),u=e.getItemVisual(s,"color"),h=e.getItemVisual(s,"opacity"),c=e.getItemLayout(s),d=l.getModel("itemStyle.normal"),f=l.getModel("itemStyle.emphasis").getBarItemStyle();a.setShape("r",d.get("barBorderRadius")||0),a.useStyle(o.defaults({fill:u,opacity:h},d.getBarItemStyle()));var p=i?c.height>0?"bottom":"top":c.width>0?"left":"right",g=l.getModel("label.normal"),m=l.getModel("label.emphasis"),v=a.style;g.get("show")?n(v,g,u,o.retrieve(t.getFormattedLabel(s,"normal"),t.getRawValue(s)),p):v.text="",m.get("show")?n(f,m,u,o.retrieve(t.getFormattedLabel(s,"emphasis"),t.getRawValue(s)),p):f.text="",r.setHoverStyle(a,f)})},remove:function(t,e){var i=this.group;t.get("animation")?this._data&&this._data.eachItemGraphicEl(function(e){e.style.text="",r.updateProps(e,{shape:{width:0}},t,e.dataIndex,function(){i.remove(e)})}):i.removeAll()}})},function(t,e,i){var n=i(30)([["fill","color"],["stroke","borderColor"],["lineWidth","borderWidth"],["stroke","barBorderColor"],["lineWidth","barBorderWidth"],["opacity"],["shadowBlur"],["shadowOffsetX"],["shadowOffsetY"],["shadowColor"]]);t.exports={getBarItemStyle:function(t){var e=n.call(this,t);if(this.getBorderLineDash){var i=this.getBorderLineDash();i&&(e.lineDash=i)}return e}}},function(t,e,i){function n(t){return"_"+t+"Type"}function o(t,e,i){var n=e.getItemVisual(i,"color"),o=e.getItemVisual(i,t),r=e.getItemVisual(i,t+"Size");if(o&&"none"!==o){f.isArray(r)||(r=[r,r]);var a=u.createSymbol(o,-r[0]/2,-r[1]/2,r[0],r[1],n);return a.name=t,a}}function r(t){var e=new c({name:"line"});return a(e.shape,t),e}function a(t,e){var i=e[0],n=e[1],o=e[2];t.x1=i[0],t.y1=i[1],t.x2=n[0],t.y2=n[1],t.percent=1,o?(t.cpx1=o[0],t.cpy1=o[1]):(t.cpx1=NaN,t.cpy1=NaN)}function s(){var t=this,e=t.childOfName("fromSymbol"),i=t.childOfName("toSymbol"),n=t.childOfName("label");if(e||i||!n.ignore){for(var o=1,r=this.parent;r;)r.scale&&(o/=r.scale[0]),r=r.parent;var a=t.childOfName("line");if(this.__dirty||a.__dirty){var s=a.shape.percent,l=a.pointAt(0),u=a.pointAt(s),c=h.sub([],u,l);if(h.normalize(c,c),e){e.attr("position",l);var d=a.tangentAt(0);e.attr("rotation",Math.PI/2-Math.atan2(d[1],d[0])),e.attr("scale",[o*s,o*s])}if(i){i.attr("position",u);var d=a.tangentAt(1);i.attr("rotation",-Math.PI/2-Math.atan2(d[1],d[0])),i.attr("scale",[o*s,o*s])}if(!n.ignore){n.attr("position",u);var f,p,g,m=5*o;if("end"===n.__position)f=[c[0]*m+u[0],c[1]*m+u[1]],p=c[0]>.8?"left":c[0]<-.8?"right":"center",g=c[1]>.8?"top":c[1]<-.8?"bottom":"middle";else if("middle"===n.__position){var v=s/2,d=a.tangentAt(v),y=[d[1],-d[0]],x=a.pointAt(v);y[1]>0&&(y[0]=-y[0],y[1]=-y[1]),f=[x[0]+y[0]*m,x[1]+y[1]*m],p="center",g="bottom";var _=-Math.atan2(d[1],d[0]);u[0]<l[0]&&(_=Math.PI+_),n.attr("rotation",_)}else f=[-c[0]*m+l[0],-c[1]*m+l[1]],p=c[0]>.8?"right":c[0]<-.8?"left":"center",g=c[1]>.8?"bottom":c[1]<-.8?"top":"middle";n.attr({style:{textVerticalAlign:n.__verticalAlign||g,textAlign:n.__textAlign||p},position:f,scale:[o,o]})}}}}function l(t,e,i){d.Group.call(this),this._createLine(t,e,i)}var u=i(26),h=i(5),c=i(175),d=i(3),f=i(1),p=i(4),g=["fromSymbol","toSymbol"],m=l.prototype;m.beforeUpdate=s,m._createLine=function(t,e,i){var a=t.hostModel,s=t.getItemLayout(e),l=r(s);l.shape.percent=0,d.initProps(l,{shape:{percent:1}},a,e),this.add(l);var u=new d.Text({name:"label"});this.add(u),f.each(g,function(i){var r=o(i,t,e);this.add(r),this[n(i)]=t.getItemVisual(e,i)},this),this._updateCommonStl(t,e,i)},m.updateData=function(t,e,i){var r=t.hostModel,s=this.childOfName("line"),l=t.getItemLayout(e),u={shape:{}};a(u.shape,l),d.updateProps(s,u,r,e),f.each(g,function(i){var r=t.getItemVisual(e,i),a=n(i);if(this[a]!==r){this.remove(this.childOfName(i));var s=o(i,t,e);this.add(s)}this[a]=r},this),this._updateCommonStl(t,e,i)},m._updateCommonStl=function(t,e,i){var n=t.hostModel,o=this.childOfName("line"),r=i&&i.lineStyle,a=i&&i.hoverLineStyle,s=i&&i.labelModel,l=i&&i.hoverLabelModel;if(!i||t.hasItemOption){var u=t.getItemModel(e);r=u.getModel("lineStyle.normal").getLineStyle(),a=u.getModel("lineStyle.emphasis").getLineStyle(),s=u.getModel("label.normal"),l=u.getModel("label.emphasis")}var h=t.getItemVisual(e,"color"),c=f.retrieve(t.getItemVisual(e,"opacity"),r.opacity,1);o.useStyle(f.defaults({strokeNoScale:!0,fill:"none",stroke:h,opacity:c},r)),o.hoverStyle=a,f.each(g,function(t){var e=this.childOfName(t);e&&(e.setColor(h),e.setStyle({opacity:c}))},this);var m,v,y=s.getShallow("show"),x=l.getShallow("show"),_=this.childOfName("label");if(y||x){var b=n.getRawValue(e);v=null==b?v=t.getName(e):isFinite(b)?p.round(b):b,m=h||"#000"}if(y){var w=s.getModel("textStyle");_.setStyle({text:f.retrieve(n.getFormattedLabel(e,"normal",t.dataType),v),textFont:w.getFont(),fill:w.getTextColor()||m}),_.__textAlign=w.get("align"),_.__verticalAlign=w.get("baseline"),_.__position=s.get("position")}else _.setStyle("text","");if(x){var S=l.getModel("textStyle");_.hoverStyle={text:f.retrieve(n.getFormattedLabel(e,"emphasis",t.dataType),v),textFont:S.getFont(),fill:S.getTextColor()||m}}else _.hoverStyle={text:""};_.ignore=!y&&!x,d.setHoverStyle(this)},m.updateLayout=function(t,e){this.setLinePoints(t.getItemLayout(e))},m.setLinePoints=function(t){var e=this.childOfName("line");a(e.shape,t),e.dirty()},f.inherits(l,d.Group),t.exports=l},function(t,e,i){function n(t){return isNaN(t[0])||isNaN(t[1])}function o(t){return!n(t[0])&&!n(t[1])}function r(t){this._ctor=t||s,this.group=new a.Group}var a=i(3),s=i(94),l=r.prototype;l.updateData=function(t){var e=this._lineData,i=this.group,n=this._ctor,r=t.hostModel,a={lineStyle:r.getModel("lineStyle.normal").getLineStyle(),hoverLineStyle:r.getModel("lineStyle.emphasis").getLineStyle(),labelModel:r.getModel("label.normal"),hoverLabelModel:r.getModel("label.emphasis")};t.diff(e).add(function(e){if(o(t.getItemLayout(e))){var r=new n(t,e,a);t.setItemGraphicEl(e,r),i.add(r)}}).update(function(r,s){var l=e.getItemGraphicEl(s);return o(t.getItemLayout(r))?(l?l.updateData(t,r,a):l=new n(t,r,a),t.setItemGraphicEl(r,l),void i.add(l)):void i.remove(l)}).remove(function(t){i.remove(e.getItemGraphicEl(t))}).execute(),this._lineData=t},l.updateLayout=function(){var t=this._lineData;t.eachItemGraphicEl(function(e,i){e.updateLayout(t,i)},this)},l.remove=function(){this.group.removeAll()},t.exports=r},function(t,e,i){var n=i(1),o=i(2),r=o.PRIORITY;i(97),i(98),o.registerVisual(n.curry(i(46),"line","circle","line")),o.registerLayout(n.curry(i(55),"line")),o.registerProcessor(r.PROCESSOR.STATISTIC,n.curry(i(134),"line")),i(35)},function(t,e,i){"use strict";var n=i(34),o=i(15);t.exports=o.extend({type:"series.line",dependencies:["grid","polar"],getInitialData:function(t,e){return n(t.data,this,e)},defaultOption:{zlevel:0,z:2,coordinateSystem:"cartesian2d",legendHoverLink:!0,hoverAnimation:!0,clipOverflow:!0,label:{normal:{position:"top"}},lineStyle:{normal:{width:2,type:"solid"}},step:!1,smooth:!1,smoothMonotone:null,symbol:"emptyCircle",symbolSize:4,symbolRotate:null,showSymbol:!0,showAllSymbol:!1,connectNulls:!1,sampling:"none",animationEasing:"linear",progressive:0,hoverLayerThreshold:1/0}})},function(t,e,i){"use strict";function n(t,e){if(t.length===e.length){for(var i=0;i<t.length;i++){var n=t[i],o=e[i];if(n[0]!==o[0]||n[1]!==o[1])return}return!0}}function o(t){return"number"==typeof t?t:t?.3:0}function r(t){var e=t.getGlobalExtent();if(t.onBand){var i=t.getBandWidth()/2-1,n=e[1]>e[0]?1:-1;e[0]+=n*i,e[1]-=n*i}return e}function a(t){return t>=0?1:-1}function s(t,e){var i=t.getBaseAxis(),n=t.getOtherAxis(i),o=i.onZero?0:n.scale.getExtent()[0],r=n.dim,s="x"===r||"radius"===r?1:0;return e.mapArray([r],function(n,l){for(var u,h=e.stackedOn;h&&a(h.get(r,l))===a(n);){u=h;break}var c=[];return c[s]=e.get(i.dim,l),c[1-s]=u?u.get(r,l,!0):o,t.dataToPoint(c)},!0)}function l(t,e,i){var n=r(t.getAxis("x")),o=r(t.getAxis("y")),a=t.getBaseAxis().isHorizontal(),s=Math.min(n[0],n[1]),l=Math.min(o[0],o[1]),u=Math.max(n[0],n[1])-s,h=Math.max(o[0],o[1])-l,c=i.get("lineStyle.normal.width")||2,d=i.get("clipOverflow")?c/2:Math.max(u,h);a?(l-=d,h+=2*d):(s-=d,u+=2*d);var f=new y.Rect({shape:{x:s,y:l,width:u,height:h}});return e&&(f.shape[a?"width":"height"]=0,y.initProps(f,{shape:{width:u,height:h}},i)),f}function u(t,e,i){var n=t.getAngleAxis(),o=t.getRadiusAxis(),r=o.getExtent(),a=n.getExtent(),s=Math.PI/180,l=new y.Sector({shape:{cx:t.cx,cy:t.cy,r0:r[0],r:r[1],startAngle:-a[0]*s,endAngle:-a[1]*s,clockwise:n.inverse}});return e&&(l.shape.endAngle=-a[0]*s,y.initProps(l,{shape:{endAngle:-a[1]*s}},i)),l}function h(t,e,i){return"polar"===t.type?u(t,e,i):l(t,e,i)}function c(t,e,i){for(var n=e.getBaseAxis(),o="x"===n.dim||"radius"===n.dim?0:1,r=[],a=0;a<t.length-1;a++){var s=t[a+1],l=t[a];r.push(l);var u=[];switch(i){case"end":u[o]=s[o],u[1-o]=l[1-o],r.push(u);break;case"middle":var h=(l[o]+s[o])/2,c=[];u[o]=c[o]=h,u[1-o]=l[1-o],c[1-o]=s[1-o],r.push(u),r.push(c);break;default:u[o]=l[o],u[1-o]=s[1-o],r.push(u)}}return t[a]&&r.push(t[a]),r}function d(t,e){return Math.max(Math.min(t,e[1]),e[0])}function f(t,e){var i=t.getVisual("visualMeta");if(i&&i.length&&t.count()){for(var n,o=i.length-1;o>=0;o--)if(i[o].dimension<2){n=i[o];break}if(n&&"cartesian2d"===e.type){var r=n.dimension,a=t.dimensions[r],s=t.getDataExtent(a),l=n.stops,u=[];l[0].interval&&l.sort(function(t,e){return t.interval[0]-e.interval[0]});var h=l[0],c=l[l.length-1],f=h.interval?d(h.interval[0],s):h.value,p=c.interval?d(c.interval[1],s):c.value,g=p-f;if(0===g)return t.getItemVisual(0,"color");for(var o=0;o<l.length;o++)if(l[o].interval){if(l[o].interval[1]===l[o].interval[0])continue;u.push({offset:(d(l[o].interval[0],s)-f)/g,color:l[o].color},{offset:(d(l[o].interval[1],s)-f)/g,color:l[o].color})}else u.push({offset:(l[o].value-f)/g,color:l[o].color});var m=new y.LinearGradient(0,0,0,0,u,(!0)),v=e.getAxis(a),x=v.toGlobalCoord(v.dataToCoord(f)),_=v.toGlobalCoord(v.dataToCoord(p));return m[a]=x,m[a+"2"]=_,m}}}var p=i(1),g=i(39),m=i(49),v=i(99),y=i(3),x=i(7),_=i(100),b=i(27);t.exports=b.extend({type:"line",init:function(){var t=new y.Group,e=new g;this.group.add(e.group),this._symbolDraw=e,this._lineGroup=t},render:function(t,e,i){var r=t.coordinateSystem,a=this.group,l=t.getData(),u=t.getModel("lineStyle.normal"),d=t.getModel("areaStyle.normal"),g=l.mapArray(l.getItemLayout,!0),m="polar"===r.type,v=this._coordSys,y=this._symbolDraw,x=this._polyline,_=this._polygon,b=this._lineGroup,w=t.get("animation"),S=!d.isEmpty(),M=s(r,l),T=t.get("showSymbol"),I=T&&!m&&!t.get("showAllSymbol")&&this._getSymbolIgnoreFunc(l,r),A=this._data;A&&A.eachItemGraphicEl(function(t,e){t.__temp&&(a.remove(t),A.setItemGraphicEl(e,null))}),T||y.remove(),a.add(b);var L=!m&&t.get("step");x&&v.type===r.type&&L===this._step?(S&&!_?_=this._newPolygon(g,M,r,w):_&&!S&&(b.remove(_),_=this._polygon=null),b.setClipPath(h(r,!1,t)),T&&y.updateData(l,I),l.eachItemGraphicEl(function(t){t.stopAnimation(!0)}),n(this._stackedOnPoints,M)&&n(this._points,g)||(w?this._updateAnimation(l,M,r,i,L):(L&&(g=c(g,r,L),M=c(M,r,L)),x.setShape({points:g}),_&&_.setShape({points:g,stackedOnPoints:M})))):(T&&y.updateData(l,I),L&&(g=c(g,r,L),M=c(M,r,L)),x=this._newPolyline(g,r,w),S&&(_=this._newPolygon(g,M,r,w)),b.setClipPath(h(r,!0,t)));var C=f(l,r)||l.getVisual("color");x.useStyle(p.defaults(u.getLineStyle(),{fill:"none",stroke:C,lineJoin:"bevel"}));var D=t.get("smooth");if(D=o(t.get("smooth")),x.setShape({smooth:D,smoothMonotone:t.get("smoothMonotone"),connectNulls:t.get("connectNulls")}),_){var P=l.stackedOn,k=0;if(_.useStyle(p.defaults(d.getAreaStyle(),{fill:C,opacity:.7,lineJoin:"bevel"})),P){var z=P.hostModel;k=o(z.get("smooth"))}_.setShape({smooth:D,stackedOnSmooth:k,smoothMonotone:t.get("smoothMonotone"),connectNulls:t.get("connectNulls")})}this._data=l,this._coordSys=r,this._stackedOnPoints=M,this._points=g,this._step=L},dispose:function(){},highlight:function(t,e,i,n){var o=t.getData(),r=x.queryDataIndex(o,n);if(!(r instanceof Array)&&null!=r&&r>=0){var a=o.getItemGraphicEl(r);if(!a){var s=o.getItemLayout(r);a=new m(o,r),a.position=s,a.setZ(t.get("zlevel"),t.get("z")),a.ignore=isNaN(s[0])||isNaN(s[1]),a.__temp=!0,o.setItemGraphicEl(r,a),a.stopSymbolAnimation(!0),this.group.add(a)}a.highlight()}else b.prototype.highlight.call(this,t,e,i,n)},downplay:function(t,e,i,n){var o=t.getData(),r=x.queryDataIndex(o,n);if(null!=r&&r>=0){var a=o.getItemGraphicEl(r);a&&(a.__temp?(o.setItemGraphicEl(r,null),this.group.remove(a)):a.downplay())}else b.prototype.downplay.call(this,t,e,i,n)},_newPolyline:function(t){var e=this._polyline;return e&&this._lineGroup.remove(e),e=new _.Polyline({shape:{points:t},silent:!0,z2:10}),this._lineGroup.add(e),this._polyline=e,e},_newPolygon:function(t,e){var i=this._polygon;return i&&this._lineGroup.remove(i),i=new _.Polygon({shape:{points:t,stackedOnPoints:e},silent:!0}),this._lineGroup.add(i),this._polygon=i,i},_getSymbolIgnoreFunc:function(t,e){var i=e.getAxesByScale("ordinal")[0];if(i&&i.isLabelIgnored)return p.bind(i.isLabelIgnored,i)},_updateAnimation:function(t,e,i,n,o){var r=this._polyline,a=this._polygon,s=t.hostModel,l=v(this._data,t,this._stackedOnPoints,e,this._coordSys,i),u=l.current,h=l.stackedOnCurrent,d=l.next,f=l.stackedOnNext;o&&(u=c(l.current,i,o),h=c(l.stackedOnCurrent,i,o),d=c(l.next,i,o),f=c(l.stackedOnNext,i,o)),r.shape.__points=l.current,r.shape.points=u,y.updateProps(r,{shape:{points:d}},s),a&&(a.setShape({points:u,stackedOnPoints:h}),y.updateProps(a,{shape:{points:d,stackedOnPoints:f}},s));for(var p=[],g=l.status,m=0;m<g.length;m++){var x=g[m].cmd;if("="===x){var _=t.getItemGraphicEl(g[m].idx1);_&&p.push({el:_,ptIdx:m})}}r.animators&&r.animators.length&&r.animators[0].during(function(){for(var t=0;t<p.length;t++){var e=p[t].el;e.attr("position",r.shape.__points[p[t].ptIdx])}})},remove:function(t){var e=this.group,i=this._data;this._lineGroup.removeAll(),this._symbolDraw.remove(!0),i&&i.eachItemGraphicEl(function(t,n){t.__temp&&(e.remove(t),i.setItemGraphicEl(n,null))}),this._polyline=this._polygon=this._coordSys=this._points=this._stackedOnPoints=this._data=null}})},function(t,e){function i(t){return t>=0?1:-1}function n(t,e,n){for(var o,r=t.getBaseAxis(),a=t.getOtherAxis(r),s=r.onZero?0:a.scale.getExtent()[0],l=a.dim,u="x"===l||"radius"===l?1:0,h=e.stackedOn,c=e.get(l,n);h&&i(h.get(l,n))===i(c);){o=h;break}var d=[];return d[u]=e.get(r.dim,n),d[1-u]=o?o.get(l,n,!0):s,t.dataToPoint(d)}function o(t,e){var i=[];return e.diff(t).add(function(t){i.push({cmd:"+",idx:t})}).update(function(t,e){i.push({cmd:"=",idx:e,idx1:t})}).remove(function(t){i.push({cmd:"-",idx:t})}).execute(),i}t.exports=function(t,e,i,r,a,s){for(var l=o(t,e),u=[],h=[],c=[],d=[],f=[],p=[],g=[],m=s.dimensions,v=0;v<l.length;v++){var y=l[v],x=!0;switch(y.cmd){case"=":var _=t.getItemLayout(y.idx),b=e.getItemLayout(y.idx1);(isNaN(_[0])||isNaN(_[1]))&&(_=b.slice()),u.push(_),h.push(b),c.push(i[y.idx]),d.push(r[y.idx1]),g.push(e.getRawIndex(y.idx1));break;case"+":var w=y.idx;u.push(a.dataToPoint([e.get(m[0],w,!0),e.get(m[1],w,!0)])),h.push(e.getItemLayout(w).slice()),c.push(n(a,e,w)),d.push(r[w]),g.push(e.getRawIndex(w));break;case"-":var w=y.idx,S=t.getRawIndex(w);S!==w?(u.push(t.getItemLayout(w)),h.push(s.dataToPoint([t.get(m[0],w,!0),t.get(m[1],w,!0)])),c.push(i[w]),d.push(n(s,t,w)),g.push(S)):x=!1}x&&(f.push(y),p.push(p.length))}p.sort(function(t,e){return g[t]-g[e]});for(var M=[],T=[],I=[],A=[],L=[],v=0;v<p.length;v++){var w=p[v];M[v]=u[w],T[v]=h[w],I[v]=c[w],A[v]=d[w],L[v]=f[w]}return{current:M,next:T,stackedOnCurrent:I,stackedOnNext:A,status:L}}},function(t,e,i){function n(t){return isNaN(t[0])||isNaN(t[1])}function o(t,e,i,o,r,a,g,m,v,y,x){for(var _=0,b=i,w=0;w<o;w++){var S=e[b];if(b>=r||b<0)break;if(n(S)){if(x){b+=a;continue}break}if(b===i)t[a>0?"moveTo":"lineTo"](S[0],S[1]),c(f,S);else if(v>0){var M=b+a,T=e[M];if(x)for(;T&&n(e[M]);)M+=a,T=e[M];var I=.5,A=e[_],T=e[M];if(!T||n(T))c(p,S);else{n(T)&&!x&&(T=S),s.sub(d,T,A);var L,C;if("x"===y||"y"===y){var D="x"===y?0:1;L=Math.abs(S[D]-A[D]),C=Math.abs(S[D]-T[D])}else L=s.dist(S,A),C=s.dist(S,T);I=C/(C+L),h(p,S,d,-v*(1-I))}l(f,f,m),u(f,f,g),l(p,p,m),u(p,p,g),t.bezierCurveTo(f[0],f[1],p[0],p[1],S[0],S[1]),h(f,S,d,v*I)}else t.lineTo(S[0],S[1]);_=b,b+=a}return w}function r(t,e){var i=[1/0,1/0],n=[-(1/0),-(1/0)];if(e)for(var o=0;o<t.length;o++){var r=t[o];r[0]<i[0]&&(i[0]=r[0]),r[1]<i[1]&&(i[1]=r[1]),r[0]>n[0]&&(n[0]=r[0]),r[1]>n[1]&&(n[1]=r[1])}return{min:e?i:n,max:e?n:i}}var a=i(6),s=i(5),l=s.min,u=s.max,h=s.scaleAndAdd,c=s.copy,d=[],f=[],p=[];t.exports={Polyline:a.extend({type:"ec-polyline",shape:{points:[],smooth:0,smoothConstraint:!0,smoothMonotone:null,connectNulls:!1},style:{fill:null,stroke:"#000"},buildPath:function(t,e){var i=e.points,a=0,s=i.length,l=r(i,e.smoothConstraint);if(e.connectNulls){for(;s>0&&n(i[s-1]);s--);for(;a<s&&n(i[a]);a++);}for(;a<s;)a+=o(t,i,a,s,s,1,l.min,l.max,e.smooth,e.smoothMonotone,e.connectNulls)+1}}),Polygon:a.extend({type:"ec-polygon",shape:{points:[],stackedOnPoints:[],smooth:0,stackedOnSmooth:0,smoothConstraint:!0,smoothMonotone:null,connectNulls:!1},buildPath:function(t,e){var i=e.points,a=e.stackedOnPoints,s=0,l=i.length,u=e.smoothMonotone,h=r(i,e.smoothConstraint),c=r(a,e.smoothConstraint);if(e.connectNulls){for(;l>0&&n(i[l-1]);l--);for(;s<l&&n(i[s]);s++);}for(;s<l;){var d=o(t,i,s,l,l,1,h.min,h.max,e.smooth,u,e.connectNulls);o(t,a,s+d-1,d,l,-1,c.min,c.max,e.stackedOnSmooth,u,e.connectNulls),s+=d+1,t.closePath()}}})}},function(t,e,i){var n=i(1),o=i(2);i(102),i(103),i(77)("pie",[{type:"pieToggleSelect",event:"pieselectchanged",method:"toggleSelected"},{type:"pieSelect",event:"pieselected",method:"select"},{type:"pieUnSelect",event:"pieunselected",method:"unSelect"}]),o.registerVisual(n.curry(i(72),"pie")),o.registerLayout(n.curry(i(105),"pie")),o.registerProcessor(n.curry(i(70),"pie"))},function(t,e,i){"use strict";var n=i(14),o=i(1),r=i(7),a=i(29),s=i(66),l=i(2).extendSeriesModel({type:"series.pie",init:function(t){l.superApply(this,"init",arguments),this.legendDataProvider=function(){return this._dataBeforeProcessed},this.updateSelectedMap(t.data),this._defaultLabelLine(t)},mergeOption:function(t){l.superCall(this,"mergeOption",t),this.updateSelectedMap(this.option.data)},getInitialData:function(t,e){var i=a(["value"],t.data),o=new n(i,this);return o.initData(t.data),o},getDataParams:function(t){var e=this._data,i=l.superCall(this,"getDataParams",t),n=e.getSum("value");return i.percent=n?+(e.get("value",t)/n*100).toFixed(2):0,
+i.$vars.push("percent"),i},_defaultLabelLine:function(t){r.defaultEmphasis(t.labelLine,["show"]);var e=t.labelLine.normal,i=t.labelLine.emphasis;e.show=e.show&&t.label.normal.show,i.show=i.show&&t.label.emphasis.show},defaultOption:{zlevel:0,z:2,legendHoverLink:!0,hoverAnimation:!0,center:["50%","50%"],radius:[0,"75%"],clockwise:!0,startAngle:90,minAngle:0,selectedOffset:10,avoidLabelOverlap:!0,label:{normal:{rotate:!1,show:!0,position:"outer"},emphasis:{}},labelLine:{normal:{show:!0,length:15,length2:15,smooth:!1,lineStyle:{width:1,type:"solid"}}},itemStyle:{normal:{borderWidth:1},emphasis:{}},animationEasing:"cubicOut",data:[]}});o.mixin(l,s),t.exports=l},function(t,e,i){function n(t,e,i,n){var r=e.getData(),a=this.dataIndex,s=r.getName(a),l=e.get("selectedOffset");n.dispatchAction({type:"pieToggleSelect",from:t,name:s,seriesId:e.id}),r.each(function(t){o(r.getItemGraphicEl(t),r.getItemLayout(t),e.isSelected(r.getName(t)),l,i)})}function o(t,e,i,n,o){var r=(e.startAngle+e.endAngle)/2,a=Math.cos(r),s=Math.sin(r),l=i?n:0,u=[a*l,s*l];o?t.animate().when(200,{position:u}).start("bounceOut"):t.attr("position",u)}function r(t,e){function i(){r.ignore=r.hoverIgnore,a.ignore=a.hoverIgnore}function n(){r.ignore=r.normalIgnore,a.ignore=a.normalIgnore}s.Group.call(this);var o=new s.Sector({z2:2}),r=new s.Polyline,a=new s.Text;this.add(o),this.add(r),this.add(a),this.updateData(t,e,!0),this.on("emphasis",i).on("normal",n).on("mouseover",i).on("mouseout",n)}function a(t,e,i,n,o){var r=n.getModel("textStyle"),a="inside"===o||"inner"===o;return{fill:r.getTextColor()||(a?"#fff":t.getItemVisual(e,"color")),opacity:t.getItemVisual(e,"opacity"),textFont:r.getFont(),text:l.retrieve(t.hostModel.getFormattedLabel(e,i),t.getName(e))}}var s=i(3),l=i(1),u=r.prototype;u.updateData=function(t,e,i){function n(){a.stopAnimation(!0),a.animateTo({shape:{r:c.r+10}},300,"elasticOut")}function r(){a.stopAnimation(!0),a.animateTo({shape:{r:c.r}},300,"elasticOut")}var a=this.childAt(0),u=t.hostModel,h=t.getItemModel(e),c=t.getItemLayout(e),d=l.extend({},c);d.label=null,i?(a.setShape(d),a.shape.endAngle=c.startAngle,s.updateProps(a,{shape:{endAngle:c.endAngle}},u,e)):s.updateProps(a,{shape:d},u,e);var f=h.getModel("itemStyle"),p=t.getItemVisual(e,"color");a.useStyle(l.defaults({lineJoin:"bevel",fill:p},f.getModel("normal").getItemStyle())),a.hoverStyle=f.getModel("emphasis").getItemStyle(),o(this,t.getItemLayout(e),h.get("selected"),u.get("selectedOffset"),u.get("animation")),a.off("mouseover").off("mouseout").off("emphasis").off("normal"),h.get("hoverAnimation")&&u.ifEnableAnimation()&&a.on("mouseover",n).on("mouseout",r).on("emphasis",n).on("normal",r),this._updateLabel(t,e),s.setHoverStyle(this)},u._updateLabel=function(t,e){var i=this.childAt(1),n=this.childAt(2),o=t.hostModel,r=t.getItemModel(e),l=t.getItemLayout(e),u=l.label,h=t.getItemVisual(e,"color");s.updateProps(i,{shape:{points:u.linePoints||[[u.x,u.y],[u.x,u.y],[u.x,u.y]]}},o,e),s.updateProps(n,{style:{x:u.x,y:u.y}},o,e),n.attr({style:{textVerticalAlign:u.verticalAlign,textAlign:u.textAlign,textFont:u.font},rotation:u.rotation,origin:[u.x,u.y],z2:10});var c=r.getModel("label.normal"),d=r.getModel("label.emphasis"),f=r.getModel("labelLine.normal"),p=r.getModel("labelLine.emphasis"),g=c.get("position")||d.get("position");n.setStyle(a(t,e,"normal",c,g)),n.ignore=n.normalIgnore=!c.get("show"),n.hoverIgnore=!d.get("show"),i.ignore=i.normalIgnore=!f.get("show"),i.hoverIgnore=!p.get("show"),i.setStyle({stroke:h,opacity:t.getItemVisual(e,"opacity")}),i.setStyle(f.getModel("lineStyle").getLineStyle()),n.hoverStyle=a(t,e,"emphasis",d,g),i.hoverStyle=p.getModel("lineStyle").getLineStyle();var m=f.get("smooth");m&&m===!0&&(m=.4),i.setShape({smooth:m})},l.inherits(r,s.Group);var h=i(27).extend({type:"pie",init:function(){var t=new s.Group;this._sectorGroup=t},render:function(t,e,i,o){if(!o||o.from!==this.uid){var a=t.getData(),s=this._data,u=this.group,h=e.get("animation"),c=!s,d=l.curry(n,this.uid,t,h,i),f=t.get("selectedMode");if(a.diff(s).add(function(t){var e=new r(a,t);c&&e.eachChild(function(t){t.stopAnimation(!0)}),f&&e.on("click",d),a.setItemGraphicEl(t,e),u.add(e)}).update(function(t,e){var i=s.getItemGraphicEl(e);i.updateData(a,t),i.off("click"),f&&i.on("click",d),u.add(i),a.setItemGraphicEl(t,i)}).remove(function(t){var e=s.getItemGraphicEl(t);u.remove(e)}).execute(),h&&c&&a.count()>0){var p=a.getItemLayout(0),g=Math.max(i.getWidth(),i.getHeight())/2,m=l.bind(u.removeClipPath,u);u.setClipPath(this._createClipPath(p.cx,p.cy,g,p.startAngle,p.clockwise,m,t))}this._data=a}},dispose:function(){},_createClipPath:function(t,e,i,n,o,r,a){var l=new s.Sector({shape:{cx:t,cy:e,r0:0,r:i,startAngle:n,endAngle:n,clockwise:o}});return s.initProps(l,{shape:{endAngle:n+(o?1:-1)*Math.PI*2}},a,r),l},containPoint:function(t,e){var i=e.getData(),n=i.getItemLayout(0);if(n){var o=t[0]-n.cx,r=t[1]-n.cy,a=Math.sqrt(o*o+r*r);return a<=n.r&&a>=n.r0}}});t.exports=h},function(t,e,i){"use strict";function n(t,e,i,n,o,r,a){function s(e,i,n,o){for(var r=e;r<i;r++)if(t[r].y+=n,r>e&&r+1<i&&t[r+1].y>t[r].y+t[r].height)return void l(r,n/2);l(i-1,n/2)}function l(e,i){for(var n=e;n>=0&&(t[n].y-=i,!(n>0&&t[n].y>t[n-1].y+t[n-1].height));n--);}function u(t,e,i,n,o,r){for(var a=r>0?e?Number.MAX_VALUE:0:e?Number.MAX_VALUE:0,s=0,l=t.length;s<l;s++)if("center"!==t[s].position){var u=Math.abs(t[s].y-n),h=t[s].len,c=t[s].len2,d=u<o+h?Math.sqrt((o+h+c)*(o+h+c)-u*u):Math.abs(t[s].x-i);e&&d>=a&&(d=a-10),!e&&d<=a&&(d=a+10),t[s].x=i+d*r,a=d}}t.sort(function(t,e){return t.y-e.y});for(var h,c=0,d=t.length,f=[],p=[],g=0;g<d;g++)h=t[g].y-c,h<0&&s(g,d,-h,o),c=t[g].y+t[g].height;a-c<0&&l(d-1,c-a);for(var g=0;g<d;g++)t[g].y>=i?p.push(t[g]):f.push(t[g]);u(f,!1,e,i,n,o),u(p,!0,e,i,n,o)}function o(t,e,i,o,r,a){for(var s=[],l=[],u=0;u<t.length;u++)t[u].x<e?s.push(t[u]):l.push(t[u]);n(l,e,i,o,1,r,a),n(s,e,i,o,-1,r,a);for(var u=0;u<t.length;u++){var h=t[u].linePoints;if(h){var c=h[1][0]-h[2][0];t[u].x<e?h[2][0]=t[u].x+3:h[2][0]=t[u].x-3,h[1][1]=h[2][1]=t[u].y,h[1][0]=h[2][0]+c}}}var r=i(16);t.exports=function(t,e,i,n){var a,s,l=t.getData(),u=[],h=!1;l.each(function(i){var n,o,c,d,f=l.getItemLayout(i),p=l.getItemModel(i),g=p.getModel("label.normal"),m=g.get("position")||p.get("label.emphasis.position"),v=p.getModel("labelLine.normal"),y=v.get("length"),x=v.get("length2"),_=(f.startAngle+f.endAngle)/2,b=Math.cos(_),w=Math.sin(_);a=f.cx,s=f.cy;var S="inside"===m||"inner"===m;if("center"===m)n=f.cx,o=f.cy,d="center";else{var M=(S?(f.r+f.r0)/2*b:f.r*b)+a,T=(S?(f.r+f.r0)/2*w:f.r*w)+s;if(n=M+3*b,o=T+3*w,!S){var I=M+b*(y+e-f.r),A=T+w*(y+e-f.r),L=I+(b<0?-1:1)*x,C=A;n=L+(b<0?-5:5),o=C,c=[[M,T],[I,A],[L,C]]}d=S?"center":b>0?"left":"right"}var D=g.getModel("textStyle").getFont(),P=g.get("rotate")?b<0?-_+Math.PI:-_:0,k=t.getFormattedLabel(i,"normal")||l.getName(i),z=r.getBoundingRect(k,D,d,"top");h=!!P,f.label={x:n,y:o,position:m,height:z.height,len:y,len2:x,linePoints:c,textAlign:d,verticalAlign:"middle",font:D,rotation:P},S||u.push(f.label)}),!h&&t.get("avoidLabelOverlap")&&o(u,a,s,e,i,n)}},function(t,e,i){var n=i(4),o=n.parsePercent,r=i(104),a=i(1),s=2*Math.PI,l=Math.PI/180;t.exports=function(t,e,i,u){e.eachSeriesByType(t,function(t){var e=t.get("center"),u=t.get("radius");a.isArray(u)||(u=[0,u]),a.isArray(e)||(e=[e,e]);var h=i.getWidth(),c=i.getHeight(),d=Math.min(h,c),f=o(e[0],h),p=o(e[1],c),g=o(u[0],d/2),m=o(u[1],d/2),v=t.getData(),y=-t.get("startAngle")*l,x=t.get("minAngle")*l,_=v.getSum("value"),b=Math.PI/(_||v.count())*2,w=t.get("clockwise"),S=t.get("roseType"),M=v.getDataExtent("value");M[0]=0;var T=s,I=0,A=y,L=w?1:-1;if(v.each("value",function(t,e){var i;i="area"!==S?0===_?b:t*b:s/(v.count()||1),i<x?(i=x,T-=x):I+=t;var o=A+L*i;v.setItemLayout(e,{angle:i,startAngle:A,endAngle:o,clockwise:w,cx:f,cy:p,r0:g,r:S?n.linearMap(t,M,[g,m]):m}),A=o},!0),T<s)if(T<=.001){var C=s/v.count();v.each(function(t){var e=v.getItemLayout(t);e.startAngle=y+L*t*C,e.endAngle=y+L*(t+1)*C})}else b=T/I,A=y,v.each("value",function(t,e){var i=v.getItemLayout(e),n=i.angle===x?x:t*b;i.startAngle=A,i.endAngle=A+L*n,A+=L*n});r(t,m,h,c)})}},function(t,e,i){"use strict";i(53),i(107)},function(t,e,i){function n(t,e){function i(t,e){var i=n.getAxis(t);return i.toGlobalCoord(i.dataToCoord(0))}var n=t.coordinateSystem,o=e.axis,r={},a=o.position,s=o.onZero?"onZero":a,l=o.dim,u=n.getRect(),h=[u.x,u.x+u.width,u.y,u.y+u.height],c=e.get("offset")||0,d={x:{top:h[2]-c,bottom:h[3]+c},y:{left:h[0]-c,right:h[1]+c}};d.x.onZero=Math.max(Math.min(i("y"),d.x.bottom),d.x.top),d.y.onZero=Math.max(Math.min(i("x"),d.y.right),d.y.left),r.position=["y"===l?d.y[s]:h[0],"x"===l?d.x[s]:h[3]],r.rotation=Math.PI/2*("x"===l?0:1);var f={top:-1,bottom:1,left:-1,right:1};r.labelDirection=r.tickDirection=r.nameDirection=f[a],o.onZero&&(r.labelOffset=d[l][a]-d[l].onZero),e.getModel("axisTick").get("inside")&&(r.tickDirection=-r.tickDirection),e.getModel("axisLabel").get("inside")&&(r.labelDirection=-r.labelDirection);var p=e.getModel("axisLabel").get("rotate");return r.labelRotation="top"===s?-p:p,r.labelInterval=o.getLabelInterval(),r.z2=1,r}var o=i(1),r=i(3),a=i(50),s=a.ifIgnoreOnTick,l=a.getInterval,u=["axisLine","axisLabel","axisTick","axisName"],h=["splitArea","splitLine"],c=i(2).extendComponentView({type:"axis",render:function(t,e){this.group.removeAll();var i=this._axisGroup;if(this._axisGroup=new r.Group,this.group.add(this._axisGroup),t.get("show")){var s=t.findGridModel(),l=n(s,t),c=new a(t,l);o.each(u,c.add,c),this._axisGroup.add(c.getGroup()),o.each(h,function(e){t.get(e+".show")&&this["_"+e](t,s,l.labelInterval)},this),r.groupTransition(i,this._axisGroup,t)}},_splitLine:function(t,e,i){var n=t.axis,a=t.getModel("splitLine"),u=a.getModel("lineStyle"),h=u.get("color"),c=l(a,i);h=o.isArray(h)?h:[h];for(var d=e.coordinateSystem.getRect(),f=n.isHorizontal(),p=0,g=n.getTicksCoords(),m=n.scale.getTicks(),v=[],y=[],x=u.getLineStyle(),_=0;_<g.length;_++)if(!s(n,_,c)){var b=n.toGlobalCoord(g[_]);f?(v[0]=b,v[1]=d.y,y[0]=b,y[1]=d.y+d.height):(v[0]=d.x,v[1]=b,y[0]=d.x+d.width,y[1]=b);var w=p++%h.length;this._axisGroup.add(new r.Line(r.subPixelOptimizeLine({anid:"line_"+m[_],shape:{x1:v[0],y1:v[1],x2:y[0],y2:y[1]},style:o.defaults({stroke:h[w]},x),silent:!0})))}},_splitArea:function(t,e,i){var n=t.axis,a=t.getModel("splitArea"),u=a.getModel("areaStyle"),h=u.get("color"),c=e.coordinateSystem.getRect(),d=n.getTicksCoords(),f=n.scale.getTicks(),p=n.toGlobalCoord(d[0]),g=n.toGlobalCoord(d[0]),m=0,v=l(a,i),y=u.getAreaStyle();h=o.isArray(h)?h:[h];for(var x=1;x<d.length;x++)if(!s(n,x,v)){var _,b,w,S,M=n.toGlobalCoord(d[x]);n.isHorizontal()?(_=p,b=c.y,w=M-_,S=c.height):(_=c.x,b=g,w=c.width,S=M-b);var T=m++%h.length;this._axisGroup.add(new r.Rect({anid:"area_"+f[x],shape:{x:_,y:b,width:w,height:S},style:o.defaults({fill:h[T]},y),silent:!0})),p=_+w,g=b+S}}});c.extend({type:"xAxis"}),c.extend({type:"yAxis"})},function(t,e,i){var n=i(1),o=i(110),r=i(2);r.registerAction("dataZoom",function(t,e){var i=o.createLinkedNodesFinder(n.bind(e.eachComponent,e,"dataZoom"),o.eachAxisDim,function(t,e){return t.get(e.axisIndex)}),r=[];e.eachComponent({mainType:"dataZoom",query:t},function(t,e){r.push.apply(r,i(t).nodes)}),n.each(r,function(e,i){e.setRawRange({start:t.start,end:t.end,startValue:t.startValue,endValue:t.endValue})})})},function(t,e,i){function n(t,e,i){i.getAxisProxy(t.name,e).reset(i)}function o(t,e,i){i.getAxisProxy(t.name,e).filterData(i)}var r=i(2);r.registerProcessor(function(t,e){t.eachComponent("dataZoom",function(t){t.eachTargetAxis(n),t.eachTargetAxis(o)}),t.eachComponent("dataZoom",function(t){var e=t.findRepresentativeAxisProxy(),i=e.getDataPercentWindow(),n=e.getDataValueWindow();t.setRawRange({start:i[0],end:i[1],startValue:n[0],endValue:n[1]})})})},function(t,e,i){var n=i(9),o=i(1),r={},a=["x","y","z","radius","angle"];r.createNameEach=function(t,e){t=t.slice();var i=o.map(t,n.capitalFirst);e=(e||[]).slice();var r=o.map(e,n.capitalFirst);return function(n,a){o.each(t,function(t,o){for(var s={name:t,capital:i[o]},l=0;l<e.length;l++)s[e[l]]=t+r[l];n.call(a,s)})}},r.eachAxisDim=r.createNameEach(a,["axisIndex","axis","index","id"]),r.createLinkedNodesFinder=function(t,e,i){function n(t,e){return o.indexOf(e.nodes,t)>=0}function r(t,n){var r=!1;return e(function(e){o.each(i(t,e)||[],function(t){n.records[e.name][t]&&(r=!0)})}),r}function a(t,n){n.nodes.push(t),e(function(e){o.each(i(t,e)||[],function(t){n.records[e.name][t]=!0})})}return function(i){function o(t){!n(t,s)&&r(t,s)&&(a(t,s),l=!0)}var s={nodes:[],records:{}};if(e(function(t){s.records[t.name]={}}),!i)return s;a(i,s);var l;do l=!1,t(o);while(l);return s}},t.exports=r},function(t,e,i){function n(t){var e=t[a];return e||(e=t[a]=[{}]),e}var o=i(1),r=o.each,a="\0_ec_hist_store",s={push:function(t,e){var i=n(t);r(e,function(e,n){for(var o=i.length-1;o>=0;o--){var r=i[o];if(r[n])break}if(o<0){var a=t.queryComponents({mainType:"dataZoom",subType:"select",id:n})[0];if(a){var s=a.getPercentRange();i[0][n]={dataZoomId:n,start:s[0],end:s[1]}}}}),i.push(e)},pop:function(t){var e=n(t),i=e[e.length-1];e.length>1&&e.pop();var o={};return r(i,function(t,i){for(var n=e.length-1;n>=0;n--){var t=e[n][i];if(t){o[i]=t;break}}}),o},clear:function(t){t[a]=null},count:function(t){return n(t).length}};t.exports=s},function(t,e,i){i(12).registerSubTypeDefaulter("dataZoom",function(t){return"slider"})},function(t,e,i){function n(t){V.call(this),this._zr=t,this.group=new G.Group,this._brushType,this._brushOption,this._panels,this._track=[],this._dragging,this._covers=[],this._creatingCover,this._creatingPanel,this._enableGlobalPan,this._uid="brushController_"+it++,this._handlers={},Z(nt,function(t,e){this._handlers[e]=N.bind(t,this)},this)}function o(t,e){var i=t._zr;t._enableGlobalPan||F.take(i,K,t._uid),Z(t._handlers,function(t,e){i.on(e,t)}),t._brushType=e.brushType,t._brushOption=N.merge(N.clone(et),e,!0)}function r(t){var e=t._zr;F.release(e,K,t._uid),Z(t._handlers,function(t,i){e.off(i,t)}),t._brushType=t._brushOption=null}function a(t,e){var i=ot[e.brushType].createCover(t,e);return u(i),i.__brushOption=e,t.group.add(i),i}function s(t,e){var i=c(e);return i.endCreating&&(i.endCreating(t,e),u(e)),e}function l(t,e){var i=e.__brushOption;c(e).updateCoverShape(t,e,i.range,i)}function u(t){t.traverse(function(t){t.z=Y,t.z2=Y})}function h(t,e){c(e).updateCommon(t,e),l(t,e)}function c(t){return ot[t.__brushOption.brushType]}function d(t,e,i){var n=t._panels;if(!n)return!0;var o;return Z(n,function(t){t.contain(e,i)&&(o=t)}),o}function f(t,e){var i=t._panels;if(!i)return!0;var n=e.__brushOption.panelId;return null==n||i[n]}function p(t){var e=t._covers,i=e.length;return Z(e,function(e){t.group.remove(e)},t),e.length=0,!!i}function g(t,e){var i=q(t._covers,function(t){var e=t.__brushOption,i=N.clone(e.range);return{brushType:e.brushType,panelId:e.panelId,range:i}});t.trigger("brush",i,{isEnd:!!e.isEnd,removeOnClick:!!e.removeOnClick})}function m(t){var e=t._track;if(!e.length)return!1;var i=e[e.length-1],n=e[0],o=i[0]-n[0],r=i[1]-n[1],a=X(o*o+r*r,.5);return a>$}function v(t){var e=t.length-1;return e<0&&(e=0),[t[0],t[e]]}function y(t,e,i,n){var o=new G.Group;return o.add(new G.Rect({name:"main",style:w(i),silent:!0,draggable:!0,cursor:"move",drift:W(t,e,o,"nswe"),ondragend:W(g,e,{isEnd:!0})})),Z(n,function(i){o.add(new G.Rect({name:i,style:{opacity:0},draggable:!0,silent:!0,invisible:!0,drift:W(t,e,o,i),ondragend:W(g,e,{isEnd:!0})}))}),o}function x(t,e,i,n){var o=n.brushStyle.lineWidth||0,r=U(o,Q),a=i[0][0],s=i[1][0],l=a-o/2,u=s-o/2,h=i[0][1],c=i[1][1],d=h-r+o/2,f=c-r+o/2,p=h-a,g=c-s,m=p+o,v=g+o;b(t,e,"main",a,s,p,g),n.transformable&&(b(t,e,"w",l,u,r,v),b(t,e,"e",d,u,r,v),b(t,e,"n",l,u,m,r),b(t,e,"s",l,f,m,r),b(t,e,"nw",l,u,r,r),b(t,e,"ne",d,u,r,r),b(t,e,"sw",l,f,r,r),b(t,e,"se",d,f,r,r))}function _(t,e){var i=e.__brushOption,n=i.transformable,o=e.childAt(0);o.useStyle(w(i)),o.attr({silent:!n,cursor:n?"move":"default"}),Z(["w","e","n","s","se","sw","ne","nw"],function(i){var o=e.childOfName(i),r=T(t,i);o&&o.attr({silent:!n,invisible:!n,cursor:n?tt[r]+"-resize":null})})}function b(t,e,i,n,o,r,a){var s=e.childOfName(i);s&&s.setShape(D(C(t,e,[[n,o],[n+r,o+a]])))}function w(t){return N.defaults({strokeNoScale:!0},t.brushStyle)}function S(t,e,i,n){var o=[j(t,i),j(e,n)],r=[U(t,i),U(e,n)];return[[o[0],r[0]],[o[1],r[1]]]}function M(t){return G.getTransform(t.group)}function T(t,e){if(e.length>1){e=e.split("");var i=[T(t,e[0]),T(t,e[1])];return("e"===i[0]||"w"===i[0])&&i.reverse(),i.join("")}var n={w:"left",e:"right",n:"top",s:"bottom"},o={left:"w",right:"e",top:"n",bottom:"s"},i=G.transformDirection(n[e],M(t));return o[i]}function I(t,e,i,n,o,r,a,s){var l=n.__brushOption,u=t(l.range),c=L(i,r,a);Z(o.split(""),function(t){var e=J[t];u[e[0]][e[1]]+=c[e[0]]}),l.range=e(S(u[0][0],u[1][0],u[0][1],u[1][1])),h(i,n),g(i,{isEnd:!1})}function A(t,e,i,n,o){var r=e.__brushOption.range,a=L(t,i,n);Z(r,function(t){t[0]+=a[0],t[1]+=a[1]}),h(t,e),g(t,{isEnd:!1})}function L(t,e,i){var n=t.group,o=n.transformCoordToLocal(e,i),r=n.transformCoordToLocal(0,0);return[o[0]-r[0],o[1]-r[1]]}function C(t,e,i){var n=f(t,e);if(n===!0)return N.clone(i);var o=n.getBoundingRect();return N.map(i,function(t){var e=t[0];e=U(e,o.x),e=j(e,o.x+o.width);var i=t[1];return i=U(i,o.y),i=j(i,o.y+o.height),[e,i]})}function D(t){var e=j(t[0][0],t[1][0]),i=j(t[0][1],t[1][1]),n=U(t[0][0],t[1][0]),o=U(t[0][1],t[1][1]);return{x:e,y:i,width:n-e,height:o-i}}function P(t,e){var i=e.offsetX,n=e.offsetY,o=t._zr;if(t._brushType){for(var r,a=t._panels,s=t._covers,l=0;l<s.length;l++)if(ot[s[l].__brushOption.brushType].contain(s[l],i,n)){r=!0;break}r||(a?Z(a,function(t){t.contain(i,n)&&o.setCursorStyle("crosshair")}):o.setCursorStyle("crosshair"))}}function k(t){var e=t.event;e.preventDefault&&e.preventDefault()}function z(t,e,i){return t.childOfName("main").contain(e,i)}function O(t,e,i){var n,o=e.offsetX,r=e.offsetY,u=t._creatingCover,h=t._creatingPanel,c=t._brushOption;if(t._track.push(t.group.transformCoordToLocal(o,r)),m(t)||u){if(h&&!u){"single"===c.brushMode&&p(t);var f=N.clone(c);f.panelId=h===!0?null:h.__brushPanelId,u=t._creatingCover=a(t,f),t._covers.push(u)}if(u){var g=ot[t._brushType],v=u.__brushOption;v.range=g.getCreatingRange(C(t,u,t._track)),i&&(s(t,u),g.updateCommon(t,u)),l(t,u),n={isEnd:i}}}else i&&"single"===c.brushMode&&c.removeOnClick&&d(t,o,r)&&p(t)&&(n={isEnd:i,removeOnClick:!0});return n}function E(t){if(this._dragging){k(t);var e=O(this,t,!0);this._dragging=!1,this._track=[],this._creatingCover=null,e&&g(this,e)}}function R(t){return{createCover:function(e,i){return y(W(I,function(e){var i=[e,[0,100]];return t&&i.reverse(),i},function(e){return e[t]}),e,i,[["w","e"],["n","s"]][t])},getCreatingRange:function(e){var i=v(e),n=j(i[0][t],i[1][t]),o=U(i[0][t],i[1][t]);return[n,o]},updateCoverShape:function(e,i,n,o){var r,a=o.brushStyle.width;if(null==a){var s=f(e,i),l=0;if(s!==!0){var u=s.getBoundingRect();a=t?u.width:u.height,l=t?u.x:u.y}r=[l,l+(a||0)]}else r=[-a/2,a/2];var h=[n,r];t&&h.reverse(),x(e,i,h,o)},updateCommon:_,contain:z}}var V=i(20),N=i(1),B=i(8),G=i(3),F=i(115),H=i(45),W=N.curry,Z=N.each,q=N.map,j=Math.min,U=Math.max,X=Math.pow,Y=1e4,$=6,Q=6,K="globalPan",J={w:[0,0],e:[0,1],n:[1,0],s:[1,1]},tt={w:"ew",e:"ew",n:"ns",s:"ns",ne:"nesw",sw:"nesw",nw:"nwse",se:"nwse"},et={brushStyle:{lineWidth:2,stroke:"rgba(0,0,0,0.3)",fill:"rgba(0,0,0,0.1)"},transformable:!0,brushMode:"single",removeOnClick:!1},it=0;n.prototype={constructor:n,enableBrush:function(t){return this._brushType&&r(this),t.brushType&&o(this,t),this},setPanels:function(t){var e=this._panels||{},i=this._panels=t&&t.length&&{},n=this.group;return i&&Z(t,function(t){var o=t.panelId,r=e[o];r||(r=new G.Rect({silent:!0,invisible:!0}),n.add(r));var a=t.rect;a instanceof B||(a=B.create(a)),r.attr("shape",a.plain()),r.__brushPanelId=o,i[o]=r,e[o]=null}),Z(e,function(t){t&&n.remove(t)}),this},mount:function(t){t=t||{},this._enableGlobalPan=t.enableGlobalPan;var e=this.group;return this._zr.add(e),e.attr({position:t.position||[0,0],rotation:t.rotation||0,scale:t.scale||[1,1]}),this},eachCover:function(t,e){Z(this._covers,t,e)},updateCovers:function(t){function e(t,e){return(null!=t.id?t.id:r+e)+"-"+t.brushType}function i(t,i){return e(t.__brushOption,i)}function n(e,i){var n=t[e];if(null!=i&&l[i]===d)u[e]=l[i];else{var o=u[e]=null!=i?(l[i].__brushOption=n,l[i]):s(c,a(c,n));h(c,o)}}function o(t){l[t]!==d&&c.group.remove(l[t])}t=N.map(t,function(t){return N.merge(N.clone(et),t,!0)});var r="\0-brush-index-",l=this._covers,u=this._covers=[],c=this,d=this._creatingCover;return new H(l,t,i,e).add(n).update(n).remove(o).execute(),this},unmount:function(){return this.enableBrush(!1),p(this),this._zr.remove(this.group),this},dispose:function(){this.unmount(),this.off()}},N.mixin(n,V);var nt={mousedown:function(t){if(this._dragging)E.call(this,t);else if(!t.target||!t.target.draggable){k(t);var e=t.offsetX,i=t.offsetY;this._creatingCover=null;var n=this._creatingPanel=d(this,e,i);n&&(this._dragging=!0,this._track=[this.group.transformCoordToLocal(e,i)])}},mousemove:function(t){if(P(this,t),this._dragging){k(t);var e=O(this,t,!1);e&&g(this,e)}},mouseup:E},ot={lineX:R(0),lineY:R(1),rect:{createCover:function(t,e){return y(W(I,function(t){return t},function(t){return t}),t,e,["w","e","n","s","se","sw","ne","nw"])},getCreatingRange:function(t){var e=v(t);return S(e[1][0],e[1][1],e[0][0],e[0][1])},updateCoverShape:function(t,e,i,n){x(t,e,i,n)},updateCommon:_,contain:z},polygon:{createCover:function(t,e){var i=new G.Group;return i.add(new G.Polyline({name:"main",style:w(e),silent:!0})),i},getCreatingRange:function(t){return t},endCreating:function(t,e){e.remove(e.childAt(0)),e.add(new G.Polygon({name:"main",draggable:!0,drift:W(A,t,e),ondragend:W(g,t,{isEnd:!0})}))},updateCoverShape:function(t,e,i,n){e.childAt(0).setShape({points:C(t,e,i)})},updateCommon:_,contain:z}};t.exports=n},function(t,e,i){function n(t){return t[0]>t[1]&&t.reverse(),t}function o(t,e){for(var i=!0,n=0;n<h.length;n++){var o=h[n]+"Index";if(t[o]>=0){i=!1;for(var r=0;r<e.length;r++)if(e[r][o]===t[o])return e[r]}}return i}function r(t,e,i,o){var r=i.coordSys.getAxis(t);return n(a.map([0,1],function(t){return e?r.coordToData(r.toLocalCoord(o[t])):r.toGlobalCoord(r.dataToCoord(o[t]))}))}var a=i(1),s=i(3),l=a.each,u={},h=["geo","xAxis","yAxis"],c="--",d=["dataToPoint","pointToData"];u.parseOutputRanges=function(t,e,i,n){l(t,function(t,i){var r=t.panelId;if(r){r=r.split(c),t[r[0]+"Index"]=+r[1];var a=o(t,e);t.coordRange=f[t.brushType](1,a,t.range),n&&(n[i]=a)}})},u.parseInputRanges=function(t,e){l(t.areas,function(e){var i=o(e,t.coordInfoList);e.range=e.range||[],i&&i!==!0&&(e.range=f[e.brushType](0,i,e.coordRange),e.panelId=i.panelId)})},u.makePanelOpts=function(t){var e=[];return l(t,function(t){var i,n=t.coordSys;t.geoIndex>=0?(i=n.getBoundingRect().clone(),i.applyTransform(s.getTransform(n))):i=n.grid.getRect().clone(),e.push({panelId:t.panelId,rect:i})}),e},u.makeCoordInfoList=function(t,e){var i=[];return l(h,function(n){var o=t[n+"Index"];null!=o&&"none"!==o&&("all"===o||a.isArray(o)||(o=[o]),e.eachComponent({mainType:n},function(t,e){if(!("all"!==o&&a.indexOf(o,e)<0)){var r,s;"xAxis"===n||"yAxis"===n?r=t.axis.grid:s=t.coordinateSystem;for(var l,u=0,h=i.length;u<h;u++){var d=i[u];if("yAxis"===n&&!d.yAxis&&d.xAxis){var f=r.getCartesian(d.xAxisIndex,e);if(f){s=f,l=d;break}}}!l&&i.push(l={}),l[n]=t,l[n+"Index"]=e,l.panelId=n+c+e,l.coordSys=s||r.getCartesian(l.xAxisIndex,l.yAxisIndex),l.coordSys?i[n+"Has"]=!0:i.pop()}}))}),i},u.controlSeries=function(t,e,i){var n=o(t,e.coordInfoList);return n===!0||n&&n.coordSys===i.coordinateSystem};var f={lineX:a.curry(r,"x"),lineY:a.curry(r,"y"),rect:function(t,e,i){var o=e.coordSys,r=o[d[t]]([i[0][0],i[1][0]]),a=o[d[t]]([i[0][1],i[1][1]]);return[n([r[0],a[0]]),n([r[1],a[1]])]},polygon:function(t,e,i){var n=e.coordSys;return a.map(i,n[d[t]],n)}};t.exports=u},function(t,e,i){function n(t){return t[o]||(t[o]={})}var o="\0_ec_interaction_mutex",r={take:function(t,e,i){var o=n(t);o[e]=i},release:function(t,e,i){var o=n(t),r=o[e];r===i&&(o[e]=null)},isTaken:function(t,e){return!!n(t)[e]}};i(2).registerAction({type:"takeGlobalCursor",event:"globalCursorTaken",update:"update"},function(){}),t.exports=r},function(t,e,i){function n(t,e,i){o.positionGroup(t,e.getBoxLayoutParams(),{width:i.getWidth(),height:i.getHeight()},e.get("padding"))}var o=i(13),r=i(9),a=i(3);t.exports={layout:function(t,e,i){var r=o.getLayoutRect(e.getBoxLayoutParams(),{width:i.getWidth(),height:i.getHeight()},e.get("padding"));o.box(e.get("orient"),t,e.get("itemGap"),r.width,r.height),n(t,e,i)},addBackground:function(t,e){var i=r.normalizeCssArray(e.get("padding")),n=t.getBoundingRect(),o=e.getItemStyle(["color","opacity"]);o.fill=e.get("backgroundColor");var s=new a.Rect({shape:{x:n.x-i[3],y:n.y-i[0],width:n.width+i[1]+i[3],height:n.height+i[0]+i[2]},style:o,silent:!0,z2:-1});a.subPixelOptimizeRect(s),t.add(s)}}},function(t,e,i){var n=i(1),o=i(42),r=i(121),a=function(t,e,i,n,r){o.call(this,t,e,i),this.type=n||"value",this.position=r||"bottom"};a.prototype={constructor:a,index:0,onZero:!1,model:null,isHorizontal:function(){var t=this.position;return"top"===t||"bottom"===t},getGlobalExtent:function(){var t=this.getExtent();return t[0]=this.toGlobalCoord(t[0]),t[1]=this.toGlobalCoord(t[1]),t},getLabelInterval:function(){var t=this._labelInterval;return t||(t=this._labelInterval=r(this)),t},isLabelIgnored:function(t){if("category"===this.type){var e=this.getLabelInterval();return"function"==typeof e&&!e(t,this.scale.getLabel(t))||t%(e+1)}},toLocalCoord:null,toGlobalCoord:null},n.inherits(a,o),t.exports=a},function(t,e,i){"use strict";function n(t){return this._axes[t]}var o=i(1),r=function(t){this._axes={},this._dimList=[],this.name=t||""};r.prototype={constructor:r,type:"cartesian",getAxis:function(t){return this._axes[t]},getAxes:function(){return o.map(this._dimList,n,this)},getAxesByScale:function(t){return t=t.toLowerCase(),o.filter(this.getAxes(),function(e){return e.scale.type===t})},addAxis:function(t){var e=t.dim;this._axes[e]=t,this._dimList.push(e)},dataToCoord:function(t){return this._dataCoordConvert(t,"dataToCoord")},coordToData:function(t){return this._dataCoordConvert(t,"coordToData")},_dataCoordConvert:function(t,e){for(var i=this._dimList,n=t instanceof Array?[]:{},o=0;o<i.length;o++){var r=i[o],a=this._axes[r];n[r]=a[e](t[r])}return n}},t.exports=r},function(t,e,i){"use strict";function n(t){r.call(this,t)}var o=i(1),r=i(118);n.prototype={constructor:n,type:"cartesian2d",dimensions:["x","y"],getBaseAxis:function(){return this.getAxesByScale("ordinal")[0]||this.getAxesByScale("time")[0]||this.getAxis("x")},containPoint:function(t){var e=this.getAxis("x"),i=this.getAxis("y");return e.contain(e.toLocalCoord(t[0]))&&i.contain(i.toLocalCoord(t[1]))},containData:function(t){return this.getAxis("x").containData(t[0])&&this.getAxis("y").containData(t[1])},dataToPoints:function(t,e){return t.mapArray(["x","y"],function(t,e){return this.dataToPoint([t,e])},e,this)},dataToPoint:function(t,e){var i=this.getAxis("x"),n=this.getAxis("y");return[i.toGlobalCoord(i.dataToCoord(t[0],e)),n.toGlobalCoord(n.dataToCoord(t[1],e))]},pointToData:function(t,e){var i=this.getAxis("x"),n=this.getAxis("y");return[i.coordToData(i.toLocalCoord(t[0]),e),n.coordToData(n.toLocalCoord(t[1]),e)]},getOtherAxis:function(t){return this.getAxis("x"===t.dim?"y":"x")}},o.inherits(n,r),t.exports=n},function(t,e,i){"use strict";i(53);var n=i(12);t.exports=n.extend({type:"grid",dependencies:["xAxis","yAxis"],layoutMode:"box",coordinateSystem:null,defaultOption:{show:!1,zlevel:0,z:0,left:"10%",top:60,right:"10%",bottom:60,containLabel:!1,backgroundColor:"rgba(0,0,0,0)",borderWidth:1,borderColor:"#ccc"}})},function(t,e,i){"use strict";var n=i(1),o=i(22);t.exports=function(t){var e=t.model,i=e.getModel("axisLabel"),r=i.get("interval");return"category"!==t.type||"auto"!==r?"auto"===r?0:r:o.getAxisLabelInterval(n.map(t.scale.getTicks(),t.dataToCoord,t),e.getFormattedLabels(),i.getModel("textStyle").getFont(),t.isHorizontal())}},function(t,e,i){"use strict";function n(t){return t.get("stack")||"__ec_stack_"+t.seriesIndex}function o(t){return t.dim+t.index}function r(t,e){var i={};s.each(t,function(t,e){var r=t.getData(),a=t.coordinateSystem,s=a.getBaseAxis(),l=s.getExtent(),h="category"===s.type?s.getBandWidth():Math.abs(l[1]-l[0])/r.count(),c=i[o(s)]||{bandWidth:h,remainedWidth:h,autoWidthCount:0,categoryGap:"20%",gap:"30%",stacks:{}},d=c.stacks;i[o(s)]=c;var f=n(t);d[f]||c.autoWidthCount++,d[f]=d[f]||{width:0,maxWidth:0};var p=u(t.get("barWidth"),h),g=u(t.get("barMaxWidth"),h),m=t.get("barGap"),v=t.get("barCategoryGap");p&&!d[f].width&&(p=Math.min(c.remainedWidth,p),d[f].width=p,c.remainedWidth-=p),g&&(d[f].maxWidth=g),null!=m&&(c.gap=m),null!=v&&(c.categoryGap=v)});var r={};return s.each(i,function(t,e){r[e]={};var i=t.stacks,n=t.bandWidth,o=u(t.categoryGap,n),a=u(t.gap,1),l=t.remainedWidth,h=t.autoWidthCount,c=(l-o)/(h+(h-1)*a);c=Math.max(c,0),s.each(i,function(t,e){var i=t.maxWidth;!t.width&&i&&i<c&&(i=Math.min(i,l),l-=i,t.width=i,h--)}),c=(l-o)/(h+(h-1)*a),c=Math.max(c,0);var d,f=0;s.each(i,function(t,e){t.width||(t.width=c),d=t,f+=t.width*(1+a)}),d&&(f-=d.width*a);var p=-f/2;s.each(i,function(t,i){r[e][i]=r[e][i]||{offset:p,width:t.width},p+=t.width*(1+a)})}),r}function a(t,e,i){var a=r(s.filter(e.getSeriesByType(t),function(t){return!e.isSeriesFiltered(t)&&t.coordinateSystem&&"cartesian2d"===t.coordinateSystem.type})),l={},u={};e.eachSeriesByType(t,function(t){var e=t.getData(),i=t.coordinateSystem,r=i.getBaseAxis(),s=n(t),h=a[o(r)][s],c=h.offset,d=h.width,f=i.getOtherAxis(r),p=t.get("barMinHeight")||0,g=r.onZero?f.toGlobalCoord(f.dataToCoord(0)):f.getGlobalExtent()[0],m=i.dataToPoints(e,!0);l[s]=l[s]||[],u[s]=u[s]||[],e.setLayout({offset:c,size:d}),e.each(f.dim,function(t,i){if(!isNaN(t)){l[s][i]||(l[s][i]={p:g,n:g},u[s][i]={p:g,n:g});var n,o,r,a,h=t>=0?"p":"n",v=m[i],y=l[s][i][h],x=u[s][i][h];f.isHorizontal()?(n=y,o=v[1]+c,r=v[0]-x,a=d,u[s][i][h]+=r,Math.abs(r)<p&&(r=(r<0?-1:1)*p),l[s][i][h]+=r):(n=v[0]+c,o=y,r=d,a=v[1]-x,u[s][i][h]+=a,Math.abs(a)<p&&(a=(a<=0?-1:1)*p),l[s][i][h]+=a),e.setItemLayout(i,{x:n,y:o,width:r,height:a})}},!0)},this)}var s=i(1),l=i(4),u=l.parsePercent;t.exports=a},function(t,e,i){var n=i(3),o=i(1),r=Math.PI;t.exports=function(t,e){e=e||{},o.defaults(e,{text:"loading",color:"#c23531",textColor:"#000",maskColor:"rgba(255, 255, 255, 0.8)",zlevel:0});var i=new n.Rect({style:{fill:e.maskColor},zlevel:e.zlevel,z:1e4}),a=new n.Arc({shape:{startAngle:-r/2,endAngle:-r/2+.1,r:10},style:{stroke:e.color,lineCap:"round",lineWidth:5},zlevel:e.zlevel,z:10001}),s=new n.Rect({style:{fill:"none",text:e.text,textPosition:"right",textDistance:10,textFill:e.textColor},zlevel:e.zlevel,z:10001});a.animateShape(!0).when(1e3,{endAngle:3*r/2}).start("circularInOut"),a.animateShape(!0).when(1e3,{startAngle:3*r/2}).delay(300).start("circularInOut");var l=new n.Group;return l.add(a),l.add(s),l.add(i),l.resize=function(){var e=t.getWidth()/2,n=t.getHeight()/2;a.setShape({cx:e,cy:n});var o=a.shape.r;s.setShape({x:e-o,y:n-o,width:2*o,height:2*o}),i.setShape({x:0,y:0,width:t.getWidth(),height:t.getHeight()})},l.resize(),l}},function(t,e,i){function n(t,e){c.each(e,function(e,i){_.hasClass(i)||("object"==typeof e?t[i]=t[i]?c.merge(t[i],e,!1):c.clone(e):null==t[i]&&(t[i]=e))})}function o(t){t=t,this.option={},this.option[w]=1,this._componentsMap={},this._seriesIndices=null,n(t,this._theme.option),c.merge(t,b,!1),this.mergeOption(t)}function r(t,e){c.isArray(e)||(e=e?[e]:[]);var i={};return p(e,function(e){i[e]=(t[e]||[]).slice()}),i}function a(t,e){var i={};p(e,function(t,e){var n=t.exist;n&&(i[n.id]=t)}),p(e,function(e,n){var o=e.option;if(c.assert(!o||null==o.id||!i[o.id]||i[o.id]===e,"id duplicates: "+(o&&o.id)),o&&null!=o.id&&(i[o.id]=e),x(o)){var r=s(t,o,e.exist);e.keyInfo={mainType:t,subType:r}}}),p(e,function(t,e){var n=t.exist,o=t.option,r=t.keyInfo;
+if(x(o)){if(r.name=null!=o.name?o.name+"":n?n.name:"\0-",n)r.id=n.id;else if(null!=o.id)r.id=o.id+"";else{var a=0;do r.id="\0"+r.name+"\0"+a++;while(i[r.id])}i[r.id]=t}})}function s(t,e,i){var n=e.type?e.type:i?i.subType:_.determineSubType(t,e);return n}function l(t){return m(t,function(t){return t.componentIndex})||[]}function u(t,e){return e.hasOwnProperty("subType")?g(t,function(t){return t.subType===e.subType}):t}function h(t){}var c=i(1),d=i(7),f=i(10),p=c.each,g=c.filter,m=c.map,v=c.isArray,y=c.indexOf,x=c.isObject,_=i(12),b=i(126),w="\0_ec_inner",S=f.extend({constructor:S,init:function(t,e,i,n){i=i||{},this.option=null,this._theme=new f(i),this._optionManager=n},setOption:function(t,e){c.assert(!(w in t),"please use chart.getOption()"),this._optionManager.setOption(t,e),this.resetOption()},resetOption:function(t){var e=!1,i=this._optionManager;if(!t||"recreate"===t){var n=i.mountOption("recreate"===t);this.option&&"recreate"!==t?(this.restoreData(),this.mergeOption(n)):o.call(this,n),e=!0}if("timeline"!==t&&"media"!==t||this.restoreData(),!t||"recreate"===t||"timeline"===t){var r=i.getTimelineOption(this);r&&(this.mergeOption(r),e=!0)}if(!t||"recreate"===t||"media"===t){var a=i.getMediaOption(this,this._api);a.length&&p(a,function(t){this.mergeOption(t,e=!0)},this)}return e},mergeOption:function(t){function e(e,o){var s=d.normalizeToArray(t[e]),u=d.mappingToExists(n[e],s);a(e,u);var h=r(n,o);i[e]=[],n[e]=[],p(u,function(t,o){var r=t.exist,a=t.option;if(c.assert(x(a)||r,"Empty component definition"),a){var s=_.getClass(e,t.keyInfo.subType,!0);if(r&&r instanceof s)r.name=t.keyInfo.name,r.mergeOption(a,this),r.optionUpdated(a,!1);else{var l=c.extend({dependentModels:h,componentIndex:o},t.keyInfo);r=new s(a,this,this,l),c.extend(r,l),r.init(a,this,this,l),r.optionUpdated(null,!0)}}else r.mergeOption({},this),r.optionUpdated({},!1);n[e][o]=r,i[e][o]=r.option},this),"series"===e&&(this._seriesIndices=l(n.series))}var i=this.option,n=this._componentsMap,o=[];p(t,function(t,e){null!=t&&(_.hasClass(e)?o.push(e):i[e]=null==i[e]?c.clone(t):c.merge(i[e],t,!0))}),_.topologicalTravel(o,_.getAllClassMainTypes(),e,this),this._seriesIndices=this._seriesIndices||[]},getOption:function(){var t=c.clone(this.option);return p(t,function(e,i){if(_.hasClass(i)){for(var e=d.normalizeToArray(e),n=e.length-1;n>=0;n--)d.isIdInner(e[n])&&e.splice(n,1);t[i]=e}}),delete t[w],t},getTheme:function(){return this._theme},getComponent:function(t,e){var i=this._componentsMap[t];if(i)return i[e||0]},queryComponents:function(t){var e=t.mainType;if(!e)return[];var i=t.index,n=t.id,o=t.name,r=this._componentsMap[e];if(!r||!r.length)return[];var a;if(null!=i)v(i)||(i=[i]),a=g(m(i,function(t){return r[t]}),function(t){return!!t});else if(null!=n){var s=v(n);a=g(r,function(t){return s&&y(n,t.id)>=0||!s&&t.id===n})}else if(null!=o){var l=v(o);a=g(r,function(t){return l&&y(o,t.name)>=0||!l&&t.name===o})}else a=r;return u(a,t)},findComponents:function(t){function e(t){var e=o+"Index",i=o+"Id",n=o+"Name";return t&&(t.hasOwnProperty(e)||t.hasOwnProperty(i)||t.hasOwnProperty(n))?{mainType:o,index:t[e],id:t[i],name:t[n]}:null}function i(e){return t.filter?g(e,t.filter):e}var n=t.query,o=t.mainType,r=e(n),a=r?this.queryComponents(r):this._componentsMap[o];return i(u(a,t))},eachComponent:function(t,e,i){var n=this._componentsMap;if("function"==typeof t)i=e,e=t,p(n,function(t,n){p(t,function(t,o){e.call(i,n,t,o)})});else if(c.isString(t))p(n[t],e,i);else if(x(t)){var o=this.findComponents(t);p(o,e,i)}},getSeriesByName:function(t){var e=this._componentsMap.series;return g(e,function(e){return e.name===t})},getSeriesByIndex:function(t){return this._componentsMap.series[t]},getSeriesByType:function(t){var e=this._componentsMap.series;return g(e,function(e){return e.subType===t})},getSeries:function(){return this._componentsMap.series.slice()},eachSeries:function(t,e){h(this),p(this._seriesIndices,function(i){var n=this._componentsMap.series[i];t.call(e,n,i)},this)},eachRawSeries:function(t,e){p(this._componentsMap.series,t,e)},eachSeriesByType:function(t,e,i){h(this),p(this._seriesIndices,function(n){var o=this._componentsMap.series[n];o.subType===t&&e.call(i,o,n)},this)},eachRawSeriesByType:function(t,e,i){return p(this.getSeriesByType(t),e,i)},isSeriesFiltered:function(t){return h(this),c.indexOf(this._seriesIndices,t.componentIndex)<0},filterSeries:function(t,e){h(this);var i=g(this._componentsMap.series,t,e);this._seriesIndices=l(i)},restoreData:function(){var t=this._componentsMap;this._seriesIndices=l(t.series);var e=[];p(t,function(t,i){e.push(i)}),_.topologicalTravel(e,_.getAllClassMainTypes(),function(e,i){p(t[e],function(t){t.restoreData()})})}});c.mixin(S,i(56)),t.exports=S},function(t,e,i){function n(t){this._api=t,this._timelineOptions=[],this._mediaList=[],this._mediaDefault,this._currentMediaIndices=[],this._optionBackup,this._newBaseOption}function o(t,e,i){var n,o,r=[],a=[],s=t.timeline;if(t.baseOption&&(o=t.baseOption),(s||t.options)&&(o=o||{},r=(t.options||[]).slice()),t.media){o=o||{};var l=t.media;d(l,function(t){t&&t.option&&(t.query?a.push(t):n||(n=t))})}return o||(o=t),o.timeline||(o.timeline=s),d([o].concat(r).concat(u.map(a,function(t){return t.option})),function(t){d(e,function(e){e(t,i)})}),{baseOption:o,timelineOptions:r,mediaDefault:n,mediaList:a}}function r(t,e,i){var n={width:e,height:i,aspectratio:e/i},o=!0;return u.each(t,function(t,e){var i=e.match(m);if(i&&i[1]&&i[2]){var r=i[1],s=i[2].toLowerCase();a(n[s],t,r)||(o=!1)}}),o}function a(t,e,i){return"min"===i?t>=e:"max"===i?t<=e:t===e}function s(t,e){return t.join(",")===e.join(",")}function l(t,e){e=e||{},d(e,function(e,i){if(null!=e){var n=t[i];if(c.hasClass(i)){e=h.normalizeToArray(e),n=h.normalizeToArray(n);var o=h.mappingToExists(n,e);t[i]=p(o,function(t){return t.option&&t.exist?g(t.exist,t.option,!0):t.exist||t.option})}else t[i]=g(n,e,!0)}})}var u=i(1),h=i(7),c=i(12),d=u.each,f=u.clone,p=u.map,g=u.merge,m=/^(min|max)?(.+)$/;n.prototype={constructor:n,setOption:function(t,e){t=f(t,!0);var i=this._optionBackup,n=o.call(this,t,e,!i);this._newBaseOption=n.baseOption,i?(l(i.baseOption,n.baseOption),n.timelineOptions.length&&(i.timelineOptions=n.timelineOptions),n.mediaList.length&&(i.mediaList=n.mediaList),n.mediaDefault&&(i.mediaDefault=n.mediaDefault)):this._optionBackup=n},mountOption:function(t){var e=this._optionBackup;return this._timelineOptions=p(e.timelineOptions,f),this._mediaList=p(e.mediaList,f),this._mediaDefault=f(e.mediaDefault),this._currentMediaIndices=[],f(t?e.baseOption:this._newBaseOption)},getTimelineOption:function(t){var e,i=this._timelineOptions;if(i.length){var n=t.getComponent("timeline");n&&(e=f(i[n.getCurrentIndex()],!0))}return e},getMediaOption:function(t){var e=this._api.getWidth(),i=this._api.getHeight(),n=this._mediaList,o=this._mediaDefault,a=[],l=[];if(!n.length&&!o)return l;for(var u=0,h=n.length;u<h;u++)r(n[u].query,e,i)&&a.push(u);return!a.length&&o&&(a=[-1]),a.length&&!s(a,this._currentMediaIndices)&&(l=p(a,function(t){return f(t===-1?o.option:n[t].option)})),this._currentMediaIndices=a,l}},t.exports=n},function(t,e){var i="";"undefined"!=typeof navigator&&(i=navigator.platform||""),t.exports={color:["#c23531","#2f4554","#61a0a8","#d48265","#91c7ae","#749f83","#ca8622","#bda29a","#6e7074","#546570","#c4ccd3"],textStyle:{fontFamily:i.match(/^Win/)?"Microsoft YaHei":"sans-serif",fontSize:12,fontStyle:"normal",fontWeight:"normal"},blendMode:null,animation:!0,animationDuration:1e3,animationDurationUpdate:300,animationEasing:"exponentialOut",animationEasingUpdate:"cubicOut",animationThreshold:2e3,progressiveThreshold:3e3,progressive:400,hoverLayerThreshold:3e3}},function(t,e,i){t.exports={getAreaStyle:i(30)([["fill","color"],["shadowBlur"],["shadowOffsetX"],["shadowOffsetY"],["opacity"],["shadowColor"]])}},function(t,e){t.exports={getBoxLayoutParams:function(){return{left:this.get("left"),top:this.get("top"),right:this.get("right"),bottom:this.get("bottom"),width:this.get("width"),height:this.get("height")}}}},function(t,e,i){var n=i(30)([["fill","color"],["stroke","borderColor"],["lineWidth","borderWidth"],["opacity"],["shadowBlur"],["shadowOffsetX"],["shadowOffsetY"],["shadowColor"],["textPosition"],["textAlign"]]);t.exports={getItemStyle:function(t){var e=n.call(this,t),i=this.getBorderLineDash();return i&&(e.lineDash=i),e},getBorderLineDash:function(){var t=this.get("borderType");return"solid"===t||null==t?null:"dashed"===t?[5,5]:[1,1]}}},function(t,e,i){var n=i(30)([["lineWidth","width"],["stroke","color"],["opacity"],["shadowBlur"],["shadowOffsetX"],["shadowOffsetY"],["shadowColor"]]);t.exports={getLineStyle:function(t){var e=n.call(this,t),i=this.getLineDash(e.lineWidth);return i&&(e.lineDash=i),e},getLineDash:function(t){null==t&&(t=1);var e=this.get("type"),i=Math.max(t,2),n=4*t;return"solid"===e||null==e?null:"dashed"===e?[n,n]:[i,i]}}},function(t,e,i){function n(t,e){return t&&t.getShallow(e)}var o=i(16);t.exports={getTextColor:function(){var t=this.ecModel;return this.getShallow("color")||t&&t.get("textStyle.color")},getFont:function(){var t=this.ecModel,e=t&&t.getModel("textStyle");return[this.getShallow("fontStyle")||n(e,"fontStyle"),this.getShallow("fontWeight")||n(e,"fontWeight"),(this.getShallow("fontSize")||n(e,"fontSize")||12)+"px",this.getShallow("fontFamily")||n(e,"fontFamily")||"sans-serif"].join(" ")},getTextRect:function(t){var e=this.get("textStyle")||{};return o.getBoundingRect(t,this.getFont(),e.align,e.baseline)},truncateText:function(t,e,i,n){return o.truncateText(t,e,this.getFont(),i,n)}}},function(t,e,i){function n(t,e){e=e.split(",");for(var i=t,n=0;n<e.length&&(i=i&&i[e[n]],null!=i);n++);return i}function o(t,e,i,n){e=e.split(",");for(var o,r=t,a=0;a<e.length-1;a++)o=e[a],null==r[o]&&(r[o]={}),r=r[o];(n||null==r[e[a]])&&(r[e[a]]=i)}function r(t){c(l,function(e){e[0]in t&&!(e[1]in t)&&(t[e[1]]=t[e[0]])})}var a=i(1),s=i(133),l=[["x","left"],["y","top"],["x2","right"],["y2","bottom"]],u=["grid","geo","parallel","legend","toolbox","title","visualMap","dataZoom","timeline"],h=["bar","boxplot","candlestick","chord","effectScatter","funnel","gauge","lines","graph","heatmap","line","map","parallel","pie","radar","sankey","scatter","treemap"],c=a.each;t.exports=function(t){c(t.series,function(t){if(a.isObject(t)){var e=t.type;if(s(t),"pie"!==e&&"gauge"!==e||null!=t.clockWise&&(t.clockwise=t.clockWise),"gauge"===e){var i=n(t,"pointer.color");null!=i&&o(t,"itemStyle.normal.color",i)}for(var l=0;l<h.length;l++)if(h[l]===t.type){r(t);break}}}),t.dataRange&&(t.visualMap=t.dataRange),c(u,function(e){var i=t[e];i&&(a.isArray(i)||(i=[i]),c(i,function(t){r(t)}))})}},function(t,e,i){function n(t){var e=t&&t.itemStyle;e&&o.each(r,function(i){var n=e.normal,r=e.emphasis;n&&n[i]&&(t[i]=t[i]||{},t[i].normal?o.merge(t[i].normal,n[i]):t[i].normal=n[i],n[i]=null),r&&r[i]&&(t[i]=t[i]||{},t[i].emphasis?o.merge(t[i].emphasis,r[i]):t[i].emphasis=r[i],r[i]=null)})}var o=i(1),r=["areaStyle","lineStyle","nodeStyle","linkStyle","chordStyle","label","labelLine"];t.exports=function(t){if(t){n(t),n(t.markPoint),n(t.markLine);var e=t.data;if(e){for(var i=0;i<e.length;i++)n(e[i]);var r=t.markPoint;if(r&&r.data)for(var a=r.data,i=0;i<a.length;i++)n(a[i]);var s=t.markLine;if(s&&s.data)for(var l=s.data,i=0;i<l.length;i++)o.isArray(l[i])?(n(l[i][0]),n(l[i][1])):n(l[i])}}}},function(t,e){var i={average:function(t){for(var e=0,i=0,n=0;n<t.length;n++)isNaN(t[n])||(e+=t[n],i++);return 0===i?NaN:e/i},sum:function(t){for(var e=0,i=0;i<t.length;i++)e+=t[i]||0;return e},max:function(t){for(var e=-(1/0),i=0;i<t.length;i++)t[i]>e&&(e=t[i]);return e},min:function(t){for(var e=1/0,i=0;i<t.length;i++)t[i]<e&&(e=t[i]);return e},nearest:function(t){return t[0]}},n=function(t,e){return Math.round(t.length/2)};t.exports=function(t,e,o){e.eachSeriesByType(t,function(t){var e=t.getData(),o=t.get("sampling"),r=t.coordinateSystem;if("cartesian2d"===r.type&&o){var a=r.getBaseAxis(),s=r.getOtherAxis(a),l=a.getExtent(),u=l[1]-l[0],h=Math.round(e.count()/u);if(h>1){var c;"string"==typeof o?c=i[o]:"function"==typeof o&&(c=o),c&&(e=e.downSample(s.dim,1/h,c,n),t.setData(e))}}},this)}},function(t,e,i){function n(t,e){return c(t,h(e))}var o=i(1),r=i(31),a=i(4),s=i(38),l=r.prototype,u=s.prototype,h=a.getPrecisionSafe,c=a.round,d=Math.floor,f=Math.ceil,p=Math.pow,g=Math.log,m=r.extend({type:"log",base:10,$constructor:function(){r.apply(this,arguments),this._originalScale=new s},getTicks:function(){var t=this._originalScale,e=this._extent,i=t.getExtent();return o.map(u.getTicks.call(this),function(o){var r=a.round(p(this.base,o));return r=o===e[0]&&t.__fixMin?n(r,i[0]):r,r=o===e[1]&&t.__fixMax?n(r,i[1]):r},this)},getLabel:u.getLabel,scale:function(t){return t=l.scale.call(this,t),p(this.base,t)},setExtent:function(t,e){var i=this.base;t=g(t)/g(i),e=g(e)/g(i),u.setExtent.call(this,t,e)},getExtent:function(){var t=this.base,e=l.getExtent.call(this);e[0]=p(t,e[0]),e[1]=p(t,e[1]);var i=this._originalScale,o=i.getExtent();return i.__fixMin&&(e[0]=n(e[0],o[0])),i.__fixMax&&(e[1]=n(e[1],o[1])),e},unionExtent:function(t){this._originalScale.unionExtent(t);var e=this.base;t[0]=g(t[0])/g(e),t[1]=g(t[1])/g(e),l.unionExtent.call(this,t)},niceTicks:function(t){t=t||10;var e=this._extent,i=e[1]-e[0];if(!(i===1/0||i<=0)){var n=a.quantity(i),o=t/i*n;for(o<=.5&&(n*=10);!isNaN(n)&&Math.abs(n)<1&&Math.abs(n)>0;)n*=10;var r=[a.round(f(e[0]/n)*n),a.round(d(e[1]/n)*n)];this._interval=n,this._niceExtent=r}},niceExtent:function(t,e,i){u.niceExtent.call(this,t,e,i);var n=this._originalScale;n.__fixMin=e,n.__fixMax=i}});o.each(["contain","normalize"],function(t){m.prototype[t]=function(e){return e=g(e)/g(this.base),l[t].call(this,e)}}),m.create=function(){return new m},t.exports=m},function(t,e,i){var n=i(1),o=i(31),r=o.prototype,a=o.extend({type:"ordinal",init:function(t,e){this._data=t,this._extent=e||[0,t.length-1]},parse:function(t){return"string"==typeof t?n.indexOf(this._data,t):Math.round(t)},contain:function(t){return t=this.parse(t),r.contain.call(this,t)&&null!=this._data[t]},normalize:function(t){return r.normalize.call(this,this.parse(t))},scale:function(t){return Math.round(r.scale.call(this,t))},getTicks:function(){for(var t=[],e=this._extent,i=e[0];i<=e[1];)t.push(i),i++;return t},getLabel:function(t){return this._data[t]},count:function(){return this._extent[1]-this._extent[0]+1},niceTicks:n.noop,niceExtent:n.noop});a.create=function(){return new a},t.exports=a},function(t,e,i){var n=i(1),o=i(4),r=i(9),a=i(38),s=a.prototype,l=Math.ceil,u=Math.floor,h=1e3,c=60*h,d=60*c,f=24*d,p=function(t,e,i,n){for(;i<n;){var o=i+n>>>1;t[o][2]<e?i=o+1:n=o}return i},g=a.extend({type:"time",getLabel:function(t){var e=this._stepLvl,i=new Date(t);return r.formatTime(e[0],i)},niceExtent:function(t,e,i){var n=this._extent;if(n[0]===n[1]&&(n[0]-=f,n[1]+=f),n[1]===-(1/0)&&n[0]===1/0){var r=new Date;n[1]=new Date(r.getFullYear(),r.getMonth(),r.getDate()),n[0]=n[1]-f}this.niceTicks(t);var a=this._interval;e||(n[0]=o.round(u(n[0]/a)*a)),i||(n[1]=o.round(l(n[1]/a)*a))},niceTicks:function(t){t=t||10;var e=this._extent,i=e[1]-e[0],n=i/t,r=m.length,a=p(m,n,0,r),s=m[Math.min(a,r-1)],h=s[2];if("year"===s[0]){var c=i/h,d=o.nice(c/t,!0);h*=d}var f=[l(e[0]/h)*h,u(e[1]/h)*h];this._stepLvl=s,this._interval=h,this._niceExtent=f},parse:function(t){return+o.parseDate(t)}});n.each(["contain","normalize"],function(t){g.prototype[t]=function(e){return s[t].call(this,this.parse(e))}});var m=[["hh:mm:ss",1,h],["hh:mm:ss",5,5*h],["hh:mm:ss",10,10*h],["hh:mm:ss",15,15*h],["hh:mm:ss",30,30*h],["hh:mm\nMM-dd",1,c],["hh:mm\nMM-dd",5,5*c],["hh:mm\nMM-dd",10,10*c],["hh:mm\nMM-dd",15,15*c],["hh:mm\nMM-dd",30,30*c],["hh:mm\nMM-dd",1,d],["hh:mm\nMM-dd",2,2*d],["hh:mm\nMM-dd",6,6*d],["hh:mm\nMM-dd",12,12*d],["MM-dd\nyyyy",1,f],["week",7,7*f],["month",1,31*f],["quarter",3,380*f/4],["half-year",6,380*f/2],["year",1,380*f]];g.create=function(){return new g},t.exports=g},function(t,e,i){var n=i(37);t.exports=function(t){function e(e){var i=(e.visualColorAccessPath||"itemStyle.normal.color").split("."),o=e.getData(),r=e.get(i)||e.getColorFromPalette(e.get("name"));o.setVisual("color",r),t.isSeriesFiltered(e)||("function"!=typeof r||r instanceof n||o.each(function(t){o.setItemVisual(t,"color",r(e.getDataParams(t)))}),o.each(function(t){var e=o.getItemModel(t),n=e.get(i,!0);null!=n&&o.setItemVisual(t,"color",n)}))}t.eachRawSeries(e)}},function(t,e,i){"use strict";function n(t,e,i){return{type:t,event:i,target:e,cancelBubble:!1,offsetX:i.zrX,offsetY:i.zrY,gestureEvent:i.gestureEvent,pinchX:i.pinchX,pinchY:i.pinchY,pinchScale:i.pinchScale,wheelDelta:i.zrDelta}}function o(){}function r(t,e,i){if(t[t.rectHover?"rectContain":"contain"](e,i)){for(var n=t;n;){if(n.silent||n.clipPath&&!n.clipPath.contain(e,i))return!1;n=n.parent}return!0}return!1}var a=i(1),s=i(167),l=i(20);o.prototype.dispose=function(){};var u=["click","dblclick","mousewheel","mouseout","mouseup","mousedown","mousemove","contextmenu"],h=function(t,e,i,n){l.call(this),this.storage=t,this.painter=e,this.painterRoot=n,i=i||new o,this.proxy=i,i.handler=this,this._hovered,this._lastTouchMoment,this._lastX,this._lastY,s.call(this),a.each(u,function(t){i.on&&i.on(t,this[t],this)},this)};h.prototype={constructor:h,mousemove:function(t){var e=t.zrX,i=t.zrY,n=this.findHover(e,i,null),o=this._hovered,r=this.proxy;this._hovered=n,r.setCursor&&r.setCursor(n?n.cursor:"default"),o&&n!==o&&o.__zr&&this.dispatchToElement(o,"mouseout",t),this.dispatchToElement(n,"mousemove",t),n&&n!==o&&this.dispatchToElement(n,"mouseover",t)},mouseout:function(t){this.dispatchToElement(this._hovered,"mouseout",t);var e,i=t.toElement||t.relatedTarget;do i=i&&i.parentNode;while(i&&9!=i.nodeType&&!(e=i===this.painterRoot));!e&&this.trigger("globalout",{event:t})},resize:function(t){this._hovered=null},dispatch:function(t,e){var i=this[t];i&&i.call(this,e)},dispose:function(){this.proxy.dispose(),this.storage=this.proxy=this.painter=null},setCursorStyle:function(t){var e=this.proxy;e.setCursor&&e.setCursor(t)},dispatchToElement:function(t,e,i){for(var o="on"+e,r=n(e,t,i),a=t;a&&(a[o]&&(r.cancelBubble=a[o].call(a,r)),a.trigger(e,r),a=a.parent,!r.cancelBubble););r.cancelBubble||(this.trigger(e,r),this.painter&&this.painter.eachOtherLayer(function(t){"function"==typeof t[o]&&t[o].call(t,r),t.trigger&&t.trigger(e,r)}))},findHover:function(t,e,i){for(var n=this.storage.getDisplayList(),o=n.length-1;o>=0;o--)if(!n[o].silent&&n[o]!==i&&!n[o].ignore&&r(n[o],t,e))return n[o]}},a.each(["click","mousedown","mouseup","mousewheel","dblclick","contextmenu"],function(t){h.prototype[t]=function(e){var i=this.findHover(e.zrX,e.zrY,null);if("mousedown"===t)this._downel=i,this._upel=i;else if("mosueup"===t)this._upel=i;else if("click"===t&&this._downel!==this._upel)return;this.dispatchToElement(i,t,e)}}),a.mixin(h,l),a.mixin(h,s),t.exports=h},function(t,e,i){function n(){return!1}function o(t,e,i,n){var o=document.createElement(e),r=i.getWidth(),a=i.getHeight(),s=o.style;return s.position="absolute",s.left=0,s.top=0,s.width=r+"px",s.height=a+"px",o.width=r*n,o.height=a*n,o.setAttribute("data-zr-dom-id",t),o}var r=i(1),a=i(32),s=i(64),l=i(63),u=function(t,e,i){var s;i=i||a.devicePixelRatio,"string"==typeof t?s=o(t,"canvas",e,i):r.isObject(t)&&(s=t,t=s.id),this.id=t,this.dom=s;var l=s.style;l&&(s.onselectstart=n,l["-webkit-user-select"]="none",l["user-select"]="none",l["-webkit-touch-callout"]="none",l["-webkit-tap-highlight-color"]="rgba(0,0,0,0)",l.padding=0,l.margin=0,l["border-width"]=0),this.domBack=null,this.ctxBack=null,this.painter=e,this.config=null,this.clearColor=0,this.motionBlur=!1,this.lastFrameAlpha=.7,this.dpr=i};u.prototype={constructor:u,elCount:0,__dirty:!0,initContext:function(){this.ctx=this.dom.getContext("2d"),this.ctx.dpr=this.dpr},createBackBuffer:function(){var t=this.dpr;this.domBack=o("back-"+this.id,"canvas",this.painter,t),this.ctxBack=this.domBack.getContext("2d"),1!=t&&this.ctxBack.scale(t,t)},resize:function(t,e){var i=this.dpr,n=this.dom,o=n.style,r=this.domBack;o.width=t+"px",o.height=e+"px",n.width=t*i,n.height=e*i,r&&(r.width=t*i,r.height=e*i,1!=i&&this.ctxBack.scale(i,i))},clear:function(t){var e=this.dom,i=this.ctx,n=e.width,o=e.height,r=this.clearColor,a=this.motionBlur&&!t,u=this.lastFrameAlpha,h=this.dpr;if(a&&(this.domBack||this.createBackBuffer(),this.ctxBack.globalCompositeOperation="copy",this.ctxBack.drawImage(e,0,0,n/h,o/h)),i.clearRect(0,0,n,o),r){var c;r.colorStops?(c=r.__canvasGradient||s.getGradient(i,r,{x:0,y:0,width:n,height:o}),r.__canvasGradient=c):r.image&&(c=l.prototype.getCanvasPattern.call(r,i)),i.save(),i.fillStyle=c||r,i.fillRect(0,0,n,o),i.restore()}if(a){var d=this.domBack;i.save(),i.globalAlpha=u,i.drawImage(d,0,0,n,o),i.restore()}}},t.exports=u},function(t,e,i){"use strict";function n(t){return parseInt(t,10)}function o(t){return!!t&&(!!t.isBuildin||"function"==typeof t.resize&&"function"==typeof t.refresh)}function r(t){t.__unusedCount++}function a(t){1==t.__unusedCount&&t.clear()}function s(t,e,i){return x.copy(t.getBoundingRect()),t.transform&&x.applyTransform(t.transform),_.width=e,_.height=i,!x.intersect(_)}function l(t,e){if(t==e)return!1;if(!t||!e||t.length!==e.length)return!0;for(var i=0;i<t.length;i++)if(t[i]!==e[i])return!0}function u(t,e){for(var i=0;i<t.length;i++){var n=t[i],o=n.path;n.setTransform(e),o.beginPath(e),n.buildPath(o,n.shape),e.clip(),n.restoreTransform(e)}}function h(t,e){var i=document.createElement("div");return i.style.cssText=["position:relative","overflow:hidden","width:"+t+"px","height:"+e+"px","padding:0","margin:0","border-width:0"].join(";")+";",i}var c=i(32),d=i(1),f=i(47),p=i(8),g=i(44),m=i(140),v=i(60),y=5,x=new p(0,0,0,0),_=new p(0,0,0,0),b=function(t,e,i){var n=!t.nodeName||"CANVAS"===t.nodeName.toUpperCase();this._opts=i=d.extend({},i||{}),this.dpr=i.devicePixelRatio||c.devicePixelRatio,this._singleCanvas=n,this.root=t;var o=t.style;o&&(o["-webkit-tap-highlight-color"]="transparent",o["-webkit-user-select"]=o["user-select"]=o["-webkit-touch-callout"]="none",t.innerHTML=""),this.storage=e;var r=this._zlevelList=[],a=this._layers={};if(this._layerConfig={},n){var s=t.width,l=t.height;this._width=s,this._height=l;var u=new m(t,this,1);u.initContext(),a[0]=u,r.push(0)}else{this._width=this._getSize(0),this._height=this._getSize(1);var f=this._domRoot=h(this._width,this._height);t.appendChild(f)}this.pathToImage=this._createPathToImage(),this._progressiveLayers=[],this._hoverlayer,this._hoverElements=[]};b.prototype={constructor:b,isSingleCanvas:function(){return this._singleCanvas},getViewportRoot:function(){return this._singleCanvas?this._layers[0].dom:this._domRoot},refresh:function(t){var e=this.storage.getDisplayList(!0),i=this._zlevelList;this._paintList(e,t);for(var n=0;n<i.length;n++){var o=i[n],r=this._layers[o];!r.isBuildin&&r.refresh&&r.refresh()}return this.refreshHover(),this._progressiveLayers.length&&this._startProgessive(),this},addHover:function(t,e){if(!t.__hoverMir){var i=new t.constructor({style:t.style,shape:t.shape});i.__from=t,t.__hoverMir=i,i.setStyle(e),this._hoverElements.push(i)}},removeHover:function(t){var e=t.__hoverMir,i=this._hoverElements,n=d.indexOf(i,e);n>=0&&i.splice(n,1),t.__hoverMir=null},clearHover:function(t){for(var e=this._hoverElements,i=0;i<e.length;i++){var n=e[i].__from;n&&(n.__hoverMir=null)}e.length=0},refreshHover:function(){var t=this._hoverElements,e=t.length,i=this._hoverlayer;if(i&&i.clear(),e){g(t,this.storage.displayableSortFunc),i||(i=this._hoverlayer=this.getLayer(1e5));var n={};i.ctx.save();for(var o=0;o<e;){var r=t[o],a=r.__from;a&&a.__zr?(o++,a.invisible||(r.transform=a.transform,r.invTransform=a.invTransform,r.__clipPaths=a.__clipPaths,this._doPaintEl(r,i,!0,n))):(t.splice(o,1),a.__hoverMir=null,e--)}i.ctx.restore()}},_startProgessive:function(){function t(){i===e._progressiveToken&&e.storage&&(e._doPaintList(e.storage.getDisplayList()),e._furtherProgressive?(e._progress++,v(t)):e._progressiveToken=-1)}var e=this;if(e._furtherProgressive){var i=e._progressiveToken=+new Date;e._progress++,v(t)}},_clearProgressive:function(){this._progressiveToken=-1,this._progress=0,d.each(this._progressiveLayers,function(t){t.__dirty&&t.clear()})},_paintList:function(t,e){null==e&&(e=!1),this._updateLayerStatus(t),this._clearProgressive(),this.eachBuildinLayer(r),this._doPaintList(t,e),this.eachBuildinLayer(a)},_doPaintList:function(t,e){function i(t){var e=r.dpr||1;r.save(),r.globalAlpha=1,r.shadowBlur=0,n.__dirty=!0,r.setTransform(1,0,0,1,0,0),r.drawImage(t.dom,0,0,h*e,c*e),r.restore()}for(var n,o,r,a,s,l,u=0,h=this._width,c=this._height,p=this._progress,g=0,m=t.length;g<m;g++){var v=t[g],x=this._singleCanvas?0:v.zlevel,_=v.__frame;if(_<0&&s&&(i(s),s=null),o!==x&&(r&&r.restore(),a={},o=x,n=this.getLayer(o),n.isBuildin||f("ZLevel "+o+" has been used by unkown layer "+n.id),r=n.ctx,r.save(),n.__unusedCount=0,(n.__dirty||e)&&n.clear()),n.__dirty||e){if(_>=0){if(!s){if(s=this._progressiveLayers[Math.min(u++,y-1)],s.ctx.save(),s.renderScope={},s&&s.__progress>s.__maxProgress){g=s.__nextIdxNotProg-1;continue}l=s.__progress,s.__dirty||(p=l),s.__progress=p+1}_===p&&this._doPaintEl(v,s,!0,s.renderScope)}else this._doPaintEl(v,n,e,a);v.__dirty=!1}}s&&i(s),r&&r.restore(),this._furtherProgressive=!1,d.each(this._progressiveLayers,function(t){t.__maxProgress>=t.__progress&&(this._furtherProgressive=!0)},this)},_doPaintEl:function(t,e,i,n){var o=e.ctx,r=t.transform;if((e.__dirty||i)&&!t.invisible&&0!==t.style.opacity&&(!r||r[0]||r[3])&&(!t.culling||!s(t,this._width,this._height))){var a=t.__clipPaths;(n.prevClipLayer!==e||l(a,n.prevElClipPaths))&&(n.prevElClipPaths&&(n.prevClipLayer.ctx.restore(),n.prevClipLayer=n.prevElClipPaths=null,n.prevEl=null),a&&(o.save(),u(a,o),n.prevClipLayer=e,n.prevElClipPaths=a)),t.beforeBrush&&t.beforeBrush(o),t.brush(o,n.prevEl||null),n.prevEl=t,t.afterBrush&&t.afterBrush(o)}},getLayer:function(t){if(this._singleCanvas)return this._layers[0];var e=this._layers[t];return e||(e=new m("zr_"+t,this,this.dpr),e.isBuildin=!0,this._layerConfig[t]&&d.merge(e,this._layerConfig[t],!0),this.insertLayer(t,e),e.initContext()),e},insertLayer:function(t,e){var i=this._layers,n=this._zlevelList,r=n.length,a=null,s=-1,l=this._domRoot;if(i[t])return void f("ZLevel "+t+" has been used already");if(!o(e))return void f("Layer of zlevel "+t+" is not valid");if(r>0&&t>n[0]){for(s=0;s<r-1&&!(n[s]<t&&n[s+1]>t);s++);a=i[n[s]]}if(n.splice(s+1,0,t),a){var u=a.dom;u.nextSibling?l.insertBefore(e.dom,u.nextSibling):l.appendChild(e.dom)}else l.firstChild?l.insertBefore(e.dom,l.firstChild):l.appendChild(e.dom);i[t]=e},eachLayer:function(t,e){var i,n,o=this._zlevelList;for(n=0;n<o.length;n++)i=o[n],t.call(e,this._layers[i],i)},eachBuildinLayer:function(t,e){var i,n,o,r=this._zlevelList;for(o=0;o<r.length;o++)n=r[o],i=this._layers[n],i.isBuildin&&t.call(e,i,n)},eachOtherLayer:function(t,e){var i,n,o,r=this._zlevelList;for(o=0;o<r.length;o++)n=r[o],i=this._layers[n],i.isBuildin||t.call(e,i,n)},getLayers:function(){return this._layers},_updateLayerStatus:function(t){var e=this._layers,i=this._progressiveLayers,n={},o={};this.eachBuildinLayer(function(t,e){n[e]=t.elCount,t.elCount=0,t.__dirty=!1}),d.each(i,function(t,e){o[e]=t.elCount,t.elCount=0,t.__dirty=!1});for(var r,a,s=0,l=0,u=0,h=t.length;u<h;u++){var c=t[u],f=this._singleCanvas?0:c.zlevel,p=e[f],g=c.progressive;if(p&&(p.elCount++,p.__dirty=p.__dirty||c.__dirty),g>=0){a!==g&&(a=g,l++);var v=c.__frame=l-1;if(!r){var x=Math.min(s,y-1);r=i[x],r||(r=i[x]=new m("progressive",this,this.dpr),r.initContext()),r.__maxProgress=0}r.__dirty=r.__dirty||c.__dirty,r.elCount++,r.__maxProgress=Math.max(r.__maxProgress,v),r.__maxProgress>=r.__progress&&(p.__dirty=!0)}else c.__frame=-1,r&&(r.__nextIdxNotProg=u,s++,r=null)}r&&(s++,r.__nextIdxNotProg=u),this.eachBuildinLayer(function(t,e){n[e]!==t.elCount&&(t.__dirty=!0)}),i.length=Math.min(s,y),d.each(i,function(t,e){o[e]!==t.elCount&&(c.__dirty=!0),t.__dirty&&(t.__progress=0)})},clear:function(){return this.eachBuildinLayer(this._clearLayer),this},_clearLayer:function(t){t.clear()},configLayer:function(t,e){if(e){var i=this._layerConfig;i[t]?d.merge(i[t],e,!0):i[t]=e;var n=this._layers[t];n&&d.merge(n,i[t],!0)}},delLayer:function(t){var e=this._layers,i=this._zlevelList,n=e[t];n&&(n.dom.parentNode.removeChild(n.dom),delete e[t],i.splice(d.indexOf(i,t),1))},resize:function(t,e){var i=this._domRoot;i.style.display="none";var n=this._opts;if(null!=t&&(n.width=t),null!=e&&(n.height=e),t=this._getSize(0),e=this._getSize(1),i.style.display="",this._width!=t||e!=this._height){i.style.width=t+"px",i.style.height=e+"px";for(var o in this._layers)this._layers.hasOwnProperty(o)&&this._layers[o].resize(t,e);d.each(this._progressiveLayers,function(i){i.resize(t,e)}),this.refresh(!0)}return this._width=t,this._height=e,this},clearLayer:function(t){var e=this._layers[t];e&&e.clear()},dispose:function(){this.root.innerHTML="",this.root=this.storage=this._domRoot=this._layers=null},getRenderedCanvas:function(t){if(t=t||{},this._singleCanvas)return this._layers[0].dom;var e=new m("image",this,t.pixelRatio||this.dpr);e.initContext(),e.clearColor=t.backgroundColor,e.clear();for(var i=this.storage.getDisplayList(!0),n={},o=0;o<i.length;o++){var r=i[o];this._doPaintEl(r,e,!0,n)}return e.dom},getWidth:function(){return this._width},getHeight:function(){return this._height},_getSize:function(t){var e=this._opts,i=["width","height"][t],o=["clientWidth","clientHeight"][t],r=["paddingLeft","paddingTop"][t],a=["paddingRight","paddingBottom"][t];if(null!=e[i]&&"auto"!==e[i])return parseFloat(e[i]);var s=this.root,l=document.defaultView.getComputedStyle(s);return(s[o]||n(l[i])||n(s.style[i]))-(n(l[r])||0)-(n(l[a])||0)|0},_pathToImage:function(t,e,n,o,r){var a=document.createElement("canvas"),s=a.getContext("2d");a.width=n*r,a.height=o*r,s.clearRect(0,0,n*r,o*r);var l={position:e.position,rotation:e.rotation,scale:e.scale};e.position=[0,0,0],e.rotation=0,e.scale=[1,1],e&&e.brush(s);var u=i(48),h=new u({id:t,style:{x:0,y:0,image:a}});return null!=l.position&&(h.position=e.position=l.position),null!=l.rotation&&(h.rotation=e.rotation=l.rotation),null!=l.scale&&(h.scale=e.scale=l.scale),h},_createPathToImage:function(){var t=this;return function(e,i,n,o){return t._pathToImage(e,i,n,o,t.dpr)}}},t.exports=b},function(t,e,i){"use strict";function n(t,e){return t.zlevel===e.zlevel?t.z===e.z?t.z2-e.z2:t.z-e.z:t.zlevel-e.zlevel}var o=i(1),r=i(11),a=i(33),s=i(44),l=function(){this._elements={},this._roots=[],this._displayList=[],this._displayListLen=0};l.prototype={constructor:l,traverse:function(t,e){for(var i=0;i<this._roots.length;i++)this._roots[i].traverse(t,e)},getDisplayList:function(t,e){return e=e||!1,t&&this.updateDisplayList(e),this._displayList},updateDisplayList:function(t){this._displayListLen=0;for(var e=this._roots,i=this._displayList,o=0,a=e.length;o<a;o++)this._updateAndAddDisplayable(e[o],null,t);i.length=this._displayListLen,r.canvasSupported&&s(i,n)},_updateAndAddDisplayable:function(t,e,i){if(!t.ignore||i){t.beforeUpdate(),t.__dirty&&t.update(),t.afterUpdate();var n=t.clipPath;if(n&&(n.parent=t,n.updateTransform(),e?(e=e.slice(),e.push(n)):e=[n]),t.isGroup){for(var o=t._children,r=0;r<o.length;r++){var a=o[r];t.__dirty&&(a.__dirty=!0),this._updateAndAddDisplayable(a,e,i)}t.__dirty=!1}else t.__clipPaths=e,this._displayList[this._displayListLen++]=t}},addRoot:function(t){this._elements[t.id]||(t instanceof a&&t.addChildrenToStorage(this),this.addToMap(t),this._roots.push(t))},delRoot:function(t){if(null==t){for(var e=0;e<this._roots.length;e++){var i=this._roots[e];i instanceof a&&i.delChildrenFromStorage(this)}return this._elements={},this._roots=[],this._displayList=[],void(this._displayListLen=0)}if(t instanceof Array)for(var e=0,n=t.length;e<n;e++)this.delRoot(t[e]);else{var r;r="string"==typeof t?this._elements[t]:t;var s=o.indexOf(this._roots,r);s>=0&&(this.delFromMap(r.id),this._roots.splice(s,1),r instanceof a&&r.delChildrenFromStorage(this));
+}},addToMap:function(t){return t instanceof a&&(t.__storage=this),t.dirty(!1),this._elements[t.id]=t,this},get:function(t){return this._elements[t]},delFromMap:function(t){var e=this._elements,i=e[t];return i&&(delete e[t],i instanceof a&&(i.__storage=null)),this},dispose:function(){this._elements=this._renderList=this._roots=null},displayableSortFunc:n},t.exports=l},function(t,e,i){"use strict";var n=i(1),o=i(24).Dispatcher,r=i(60),a=i(59),s=function(t){t=t||{},this.stage=t.stage||{},this.onframe=t.onframe||function(){},this._clips=[],this._running=!1,this._time,this._pausedTime,this._pauseStart,this._paused=!1,o.call(this)};s.prototype={constructor:s,addClip:function(t){this._clips.push(t)},addAnimator:function(t){t.animation=this;for(var e=t.getClips(),i=0;i<e.length;i++)this.addClip(e[i])},removeClip:function(t){var e=n.indexOf(this._clips,t);e>=0&&this._clips.splice(e,1)},removeAnimator:function(t){for(var e=t.getClips(),i=0;i<e.length;i++)this.removeClip(e[i]);t.animation=null},_update:function(){for(var t=(new Date).getTime()-this._pausedTime,e=t-this._time,i=this._clips,n=i.length,o=[],r=[],a=0;a<n;a++){var s=i[a],l=s.step(t);l&&(o.push(l),r.push(s))}for(var a=0;a<n;)i[a]._needsRemove?(i[a]=i[n-1],i.pop(),n--):a++;n=o.length;for(var a=0;a<n;a++)r[a].fire(o[a]);this._time=t,this.onframe(e),this.trigger("frame",e),this.stage.update&&this.stage.update()},_startLoop:function(){function t(){e._running&&(r(t),!e._paused&&e._update())}var e=this;this._running=!0,r(t)},start:function(){this._time=(new Date).getTime(),this._pausedTime=0,this._startLoop()},stop:function(){this._running=!1},pause:function(){this._paused||(this._pauseStart=(new Date).getTime(),this._paused=!0)},resume:function(){this._paused&&(this._pausedTime+=(new Date).getTime()-this._pauseStart,this._paused=!1)},clear:function(){this._clips=[]},animate:function(t,e){e=e||{};var i=new a(t,e.loop,e.getter,e.setter);return i}},n.mixin(s,o),t.exports=s},function(t,e,i){function n(t){this._target=t.target,this._life=t.life||1e3,this._delay=t.delay||0,this._initialized=!1,this.loop=null!=t.loop&&t.loop,this.gap=t.gap||0,this.easing=t.easing||"Linear",this.onframe=t.onframe,this.ondestroy=t.ondestroy,this.onrestart=t.onrestart}var o=i(145);n.prototype={constructor:n,step:function(t){this._initialized||(this._startTime=t+this._delay,this._initialized=!0);var e=(t-this._startTime)/this._life;if(!(e<0)){e=Math.min(e,1);var i=this.easing,n="string"==typeof i?o[i]:i,r="function"==typeof n?n(e):e;return this.fire("frame",r),1==e?this.loop?(this.restart(t),"restart"):(this._needsRemove=!0,"destroy"):null}},restart:function(t){var e=(t-this._startTime)%this._life;this._startTime=t-e+this.gap,this._needsRemove=!1},fire:function(t,e){t="on"+t,this[t]&&this[t](this._target,e)}},t.exports=n},function(t,e){var i={linear:function(t){return t},quadraticIn:function(t){return t*t},quadraticOut:function(t){return t*(2-t)},quadraticInOut:function(t){return(t*=2)<1?.5*t*t:-.5*(--t*(t-2)-1)},cubicIn:function(t){return t*t*t},cubicOut:function(t){return--t*t*t+1},cubicInOut:function(t){return(t*=2)<1?.5*t*t*t:.5*((t-=2)*t*t+2)},quarticIn:function(t){return t*t*t*t},quarticOut:function(t){return 1- --t*t*t*t},quarticInOut:function(t){return(t*=2)<1?.5*t*t*t*t:-.5*((t-=2)*t*t*t-2)},quinticIn:function(t){return t*t*t*t*t},quinticOut:function(t){return--t*t*t*t*t+1},quinticInOut:function(t){return(t*=2)<1?.5*t*t*t*t*t:.5*((t-=2)*t*t*t*t+2)},sinusoidalIn:function(t){return 1-Math.cos(t*Math.PI/2)},sinusoidalOut:function(t){return Math.sin(t*Math.PI/2)},sinusoidalInOut:function(t){return.5*(1-Math.cos(Math.PI*t))},exponentialIn:function(t){return 0===t?0:Math.pow(1024,t-1)},exponentialOut:function(t){return 1===t?1:1-Math.pow(2,-10*t)},exponentialInOut:function(t){return 0===t?0:1===t?1:(t*=2)<1?.5*Math.pow(1024,t-1):.5*(-Math.pow(2,-10*(t-1))+2)},circularIn:function(t){return 1-Math.sqrt(1-t*t)},circularOut:function(t){return Math.sqrt(1- --t*t)},circularInOut:function(t){return(t*=2)<1?-.5*(Math.sqrt(1-t*t)-1):.5*(Math.sqrt(1-(t-=2)*t)+1)},elasticIn:function(t){var e,i=.1,n=.4;return 0===t?0:1===t?1:(!i||i<1?(i=1,e=n/4):e=n*Math.asin(1/i)/(2*Math.PI),-(i*Math.pow(2,10*(t-=1))*Math.sin((t-e)*(2*Math.PI)/n)))},elasticOut:function(t){var e,i=.1,n=.4;return 0===t?0:1===t?1:(!i||i<1?(i=1,e=n/4):e=n*Math.asin(1/i)/(2*Math.PI),i*Math.pow(2,-10*t)*Math.sin((t-e)*(2*Math.PI)/n)+1)},elasticInOut:function(t){var e,i=.1,n=.4;return 0===t?0:1===t?1:(!i||i<1?(i=1,e=n/4):e=n*Math.asin(1/i)/(2*Math.PI),(t*=2)<1?-.5*(i*Math.pow(2,10*(t-=1))*Math.sin((t-e)*(2*Math.PI)/n)):i*Math.pow(2,-10*(t-=1))*Math.sin((t-e)*(2*Math.PI)/n)*.5+1)},backIn:function(t){var e=1.70158;return t*t*((e+1)*t-e)},backOut:function(t){var e=1.70158;return--t*t*((e+1)*t+e)+1},backInOut:function(t){var e=2.5949095;return(t*=2)<1?.5*(t*t*((e+1)*t-e)):.5*((t-=2)*t*((e+1)*t+e)+2)},bounceIn:function(t){return 1-i.bounceOut(1-t)},bounceOut:function(t){return t<1/2.75?7.5625*t*t:t<2/2.75?7.5625*(t-=1.5/2.75)*t+.75:t<2.5/2.75?7.5625*(t-=2.25/2.75)*t+.9375:7.5625*(t-=2.625/2.75)*t+.984375},bounceInOut:function(t){return t<.5?.5*i.bounceIn(2*t):.5*i.bounceOut(2*t-1)+.5}};t.exports=i},function(t,e,i){var n=i(61).normalizeRadian,o=2*Math.PI;t.exports={containStroke:function(t,e,i,r,a,s,l,u,h){if(0===l)return!1;var c=l;u-=t,h-=e;var d=Math.sqrt(u*u+h*h);if(d-c>i||d+c<i)return!1;if(Math.abs(r-a)%o<1e-4)return!0;if(s){var f=r;r=n(a),a=n(f)}else r=n(r),a=n(a);r>a&&(a+=o);var p=Math.atan2(h,u);return p<0&&(p+=o),p>=r&&p<=a||p+o>=r&&p+o<=a}}},function(t,e,i){var n=i(17);t.exports={containStroke:function(t,e,i,o,r,a,s,l,u,h,c){if(0===u)return!1;var d=u;if(c>e+d&&c>o+d&&c>a+d&&c>l+d||c<e-d&&c<o-d&&c<a-d&&c<l-d||h>t+d&&h>i+d&&h>r+d&&h>s+d||h<t-d&&h<i-d&&h<r-d&&h<s-d)return!1;var f=n.cubicProjectPoint(t,e,i,o,r,a,s,l,h,c,null);return f<=d/2}}},function(t,e,i){"use strict";function n(t,e){return Math.abs(t-e)<x}function o(){var t=b[0];b[0]=b[1],b[1]=t}function r(t,e,i,n,r,a,s,l,u,h){if(h>e&&h>n&&h>a&&h>l||h<e&&h<n&&h<a&&h<l)return 0;var c=g.cubicRootAt(e,n,a,l,h,_);if(0===c)return 0;for(var d,f,p=0,m=-1,v=0;v<c;v++){var y=_[v],x=0===y||1===y?.5:1,w=g.cubicAt(t,i,r,s,y);w<u||(m<0&&(m=g.cubicExtrema(e,n,a,l,b),b[1]<b[0]&&m>1&&o(),d=g.cubicAt(e,n,a,l,b[0]),m>1&&(f=g.cubicAt(e,n,a,l,b[1]))),p+=2==m?y<b[0]?d<e?x:-x:y<b[1]?f<d?x:-x:l<f?x:-x:y<b[0]?d<e?x:-x:l<d?x:-x)}return p}function a(t,e,i,n,o,r,a,s){if(s>e&&s>n&&s>r||s<e&&s<n&&s<r)return 0;var l=g.quadraticRootAt(e,n,r,s,_);if(0===l)return 0;var u=g.quadraticExtremum(e,n,r);if(u>=0&&u<=1){for(var h=0,c=g.quadraticAt(e,n,r,u),d=0;d<l;d++){var f=0===_[d]||1===_[d]?.5:1,p=g.quadraticAt(t,i,o,_[d]);p<a||(h+=_[d]<u?c<e?f:-f:r<c?f:-f)}return h}var f=0===_[0]||1===_[0]?.5:1,p=g.quadraticAt(t,i,o,_[0]);return p<a?0:r<e?f:-f}function s(t,e,i,n,o,r,a,s){if(s-=e,s>i||s<-i)return 0;var l=Math.sqrt(i*i-s*s);_[0]=-l,_[1]=l;var u=Math.abs(n-o);if(u<1e-4)return 0;if(u%y<1e-4){n=0,o=y;var h=r?1:-1;return a>=_[0]+t&&a<=_[1]+t?h:0}if(r){var l=n;n=p(o),o=p(l)}else n=p(n),o=p(o);n>o&&(o+=y);for(var c=0,d=0;d<2;d++){var f=_[d];if(f+t>a){var g=Math.atan2(s,f),h=r?1:-1;g<0&&(g=y+g),(g>=n&&g<=o||g+y>=n&&g+y<=o)&&(g>Math.PI/2&&g<1.5*Math.PI&&(h=-h),c+=h)}}return c}function l(t,e,i,o,l){for(var h=0,p=0,g=0,y=0,x=0,_=0;_<t.length;){var b=t[_++];switch(b===u.M&&_>1&&(i||(h+=m(p,g,y,x,o,l))),1==_&&(p=t[_],g=t[_+1],y=p,x=g),b){case u.M:y=t[_++],x=t[_++],p=y,g=x;break;case u.L:if(i){if(v(p,g,t[_],t[_+1],e,o,l))return!0}else h+=m(p,g,t[_],t[_+1],o,l)||0;p=t[_++],g=t[_++];break;case u.C:if(i){if(c.containStroke(p,g,t[_++],t[_++],t[_++],t[_++],t[_],t[_+1],e,o,l))return!0}else h+=r(p,g,t[_++],t[_++],t[_++],t[_++],t[_],t[_+1],o,l)||0;p=t[_++],g=t[_++];break;case u.Q:if(i){if(d.containStroke(p,g,t[_++],t[_++],t[_],t[_+1],e,o,l))return!0}else h+=a(p,g,t[_++],t[_++],t[_],t[_+1],o,l)||0;p=t[_++],g=t[_++];break;case u.A:var w=t[_++],S=t[_++],M=t[_++],T=t[_++],I=t[_++],A=t[_++],L=(t[_++],1-t[_++]),C=Math.cos(I)*M+w,D=Math.sin(I)*T+S;_>1?h+=m(p,g,C,D,o,l):(y=C,x=D);var P=(o-w)*T/M+w;if(i){if(f.containStroke(w,S,T,I,I+A,L,e,P,l))return!0}else h+=s(w,S,T,I,I+A,L,P,l);p=Math.cos(I+A)*M+w,g=Math.sin(I+A)*T+S;break;case u.R:y=p=t[_++],x=g=t[_++];var k=t[_++],z=t[_++],C=y+k,D=x+z;if(i){if(v(y,x,C,x,e,o,l)||v(C,x,C,D,e,o,l)||v(C,D,y,D,e,o,l)||v(y,D,y,x,e,o,l))return!0}else h+=m(C,x,C,D,o,l),h+=m(y,D,y,x,o,l);break;case u.Z:if(i){if(v(p,g,y,x,e,o,l))return!0}else h+=m(p,g,y,x,o,l);p=y,g=x}}return i||n(g,x)||(h+=m(p,g,y,x,o,l)||0),0!==h}var u=i(28).CMD,h=i(84),c=i(147),d=i(85),f=i(146),p=i(61).normalizeRadian,g=i(17),m=i(86),v=h.containStroke,y=2*Math.PI,x=1e-4,_=[-1,-1,-1],b=[-1,-1];t.exports={contain:function(t,e,i){return l(t,0,!1,e,i)},containStroke:function(t,e,i,n){return l(t,e,!0,i,n)}}},function(t,e,i){"use strict";function n(t){var e=t[1][0]-t[0][0],i=t[1][1]-t[0][1];return Math.sqrt(e*e+i*i)}function o(t){return[(t[0][0]+t[1][0])/2,(t[0][1]+t[1][1])/2]}var r=i(24),a=function(){this._track=[]};a.prototype={constructor:a,recognize:function(t,e,i){return this._doTrack(t,e,i),this._recognize(t)},clear:function(){return this._track.length=0,this},_doTrack:function(t,e,i){var n=t.touches;if(n){for(var o={points:[],touches:[],target:e,event:t},a=0,s=n.length;a<s;a++){var l=n[a],u=r.clientToLocal(i,l,{});o.points.push([u.zrX,u.zrY]),o.touches.push(l)}this._track.push(o)}},_recognize:function(t){for(var e in s)if(s.hasOwnProperty(e)){var i=s[e](this._track,t);if(i)return i}}};var s={pinch:function(t,e){var i=t.length;if(i){var r=(t[i-1]||{}).points,a=(t[i-2]||{}).points||r;if(a&&a.length>1&&r&&r.length>1){var s=n(r)/n(a);!isFinite(s)&&(s=1),e.pinchScale=s;var l=o(r);return e.pinchX=l[0],e.pinchY=l[1],{type:"pinch",target:t[0].target,event:e}}}}};t.exports=a},function(t,e){var i=function(){this.head=null,this.tail=null,this._len=0},n=i.prototype;n.insert=function(t){var e=new o(t);return this.insertEntry(e),e},n.insertEntry=function(t){this.head?(this.tail.next=t,t.prev=this.tail,this.tail=t):this.head=this.tail=t,this._len++},n.remove=function(t){var e=t.prev,i=t.next;e?e.next=i:this.head=i,i?i.prev=e:this.tail=e,t.next=t.prev=null,this._len--},n.len=function(){return this._len};var o=function(t){this.value=t,this.next,this.prev},r=function(t){this._list=new i,this._map={},this._maxSize=t||10},a=r.prototype;a.put=function(t,e){var i=this._list,n=this._map;if(null==n[t]){var o=i.len();if(o>=this._maxSize&&o>0){var r=i.head;i.remove(r),delete n[r.key]}var a=i.insert(e);a.key=t,n[t]=a}},a.get=function(t){var e=this._map[t],i=this._list;if(null!=e)return e!==i.tail&&(i.remove(e),i.insertEntry(e)),e.value},a.clear=function(){this._list.clear(),this._map={}},t.exports=r},function(t,e,i){function n(t){return"mousewheel"===t&&d.browser.firefox?"DOMMouseScroll":t}function o(t,e,i){var n=t._gestureMgr;"start"===i&&n.clear();var o=n.recognize(e,t.handler.findHover(e.zrX,e.zrY,null),t.dom);if("end"===i&&n.clear(),o){var r=o.type;e.gestureEvent=r,t.handler.dispatchToElement(o.target,r,o.event)}}function r(t){t._touching=!0,clearTimeout(t._touchTimer),t._touchTimer=setTimeout(function(){t._touching=!1},700)}function a(){return d.touchEventsSupported}function s(t){function e(t,e){return function(){if(!e._touching)return t.apply(e,arguments)}}for(var i=0;i<x.length;i++){var n=x[i];t._handlers[n]=h.bind(_[n],t)}for(var i=0;i<y.length;i++){var n=y[i];t._handlers[n]=e(_[n],t)}}function l(t){function e(e,i){h.each(e,function(e){p(t,n(e),i._handlers[e])},i)}c.call(this),this.dom=t,this._touching=!1,this._touchTimer,this._gestureMgr=new f,this._handlers={},s(this),a()&&e(x,this),e(y,this)}var u=i(24),h=i(1),c=i(20),d=i(11),f=i(149),p=u.addEventListener,g=u.removeEventListener,m=u.normalizeEvent,v=300,y=["click","dblclick","mousewheel","mouseout","mouseup","mousedown","mousemove","contextmenu"],x=["touchstart","touchend","touchmove"],_={mousemove:function(t){t=m(this.dom,t),this.trigger("mousemove",t)},mouseout:function(t){t=m(this.dom,t);var e=t.toElement||t.relatedTarget;if(e!=this.dom)for(;e&&9!=e.nodeType;){if(e===this.dom)return;e=e.parentNode}this.trigger("mouseout",t)},touchstart:function(t){t=m(this.dom,t),this._lastTouchMoment=new Date,o(this,t,"start"),_.mousemove.call(this,t),_.mousedown.call(this,t),r(this)},touchmove:function(t){t=m(this.dom,t),o(this,t,"change"),_.mousemove.call(this,t),r(this)},touchend:function(t){t=m(this.dom,t),o(this,t,"end"),_.mouseup.call(this,t),+new Date-this._lastTouchMoment<v&&_.click.call(this,t),r(this)}};h.each(["click","mousedown","mouseup","mousewheel","dblclick","contextmenu"],function(t){_[t]=function(e){e=m(this.dom,e),this.trigger(t,e)}});var b=l.prototype;b.dispose=function(){for(var t=y.concat(x),e=0;e<t.length;e++){var i=t[e];g(this.dom,n(i),this._handlers[i])}},b.setCursor=function(t){this.dom.style.cursor=t||"default"},h.mixin(l,c),t.exports=l},function(t,e,i){var n=i(6);t.exports=n.extend({type:"compound",shape:{paths:null},_updatePathDirty:function(){for(var t=this.__dirtyPath,e=this.shape.paths,i=0;i<e.length;i++)t=t||e[i].__dirtyPath;this.__dirtyPath=t,this.__dirty=this.__dirty||t},beforeBrush:function(){this._updatePathDirty();for(var t=this.shape.paths||[],e=this.getGlobalScale(),i=0;i<t.length;i++)t[i].path.setScale(e[0],e[1])},buildPath:function(t,e){for(var i=e.paths||[],n=0;n<i.length;n++)i[n].buildPath(t,i[n].shape,!0)},afterBrush:function(){for(var t=this.shape.paths,e=0;e<t.length;e++)t[e].__dirtyPath=!1},getBoundingRect:function(){return this._updatePathDirty(),n.prototype.getBoundingRect.call(this)}})},function(t,e,i){"use strict";var n=i(1),o=i(37),r=function(t,e,i,n,r){this.x=null==t?.5:t,this.y=null==e?.5:e,this.r=null==i?.5:i,this.type="radial",this.global=r||!1,o.call(this,n)};r.prototype={constructor:r},n.inherits(r,o),t.exports=r},function(t,e){t.exports={buildPath:function(t,e){var i,n,o,r,a=e.x,s=e.y,l=e.width,u=e.height,h=e.r;l<0&&(a+=l,l=-l),u<0&&(s+=u,u=-u),"number"==typeof h?i=n=o=r=h:h instanceof Array?1===h.length?i=n=o=r=h[0]:2===h.length?(i=o=h[0],n=r=h[1]):3===h.length?(i=h[0],n=r=h[1],o=h[2]):(i=h[0],n=h[1],o=h[2],r=h[3]):i=n=o=r=0;var c;i+n>l&&(c=i+n,i*=l/c,n*=l/c),o+r>l&&(c=o+r,o*=l/c,r*=l/c),n+o>u&&(c=n+o,n*=u/c,o*=u/c),i+r>u&&(c=i+r,i*=u/c,r*=u/c),t.moveTo(a+i,s),t.lineTo(a+l-n,s),0!==n&&t.quadraticCurveTo(a+l,s,a+l,s+n),t.lineTo(a+l,s+u-o),0!==o&&t.quadraticCurveTo(a+l,s+u,a+l-o,s+u),t.lineTo(a+r,s+u),0!==r&&t.quadraticCurveTo(a,s+u,a,s+u-r),t.lineTo(a,s+i),0!==i&&t.quadraticCurveTo(a,s,a+i,s)}}},function(t,e,i){var n=i(5),o=n.min,r=n.max,a=n.scale,s=n.distance,l=n.add;t.exports=function(t,e,i,u){var h,c,d,f,p=[],g=[],m=[],v=[];if(u){d=[1/0,1/0],f=[-(1/0),-(1/0)];for(var y=0,x=t.length;y<x;y++)o(d,d,t[y]),r(f,f,t[y]);o(d,d,u[0]),r(f,f,u[1])}for(var y=0,x=t.length;y<x;y++){var _=t[y];if(i)h=t[y?y-1:x-1],c=t[(y+1)%x];else{if(0===y||y===x-1){p.push(n.clone(t[y]));continue}h=t[y-1],c=t[y+1]}n.sub(g,c,h),a(g,g,e);var b=s(_,h),w=s(_,c),S=b+w;0!==S&&(b/=S,w/=S),a(m,g,-b),a(v,g,w);var M=l([],_,m),T=l([],_,v);u&&(r(M,M,d),o(M,M,f),r(T,T,d),o(T,T,f)),p.push(M),p.push(T)}return i&&p.push(p.shift()),p}},function(t,e,i){function n(t,e,i,n,o,r,a){var s=.5*(i-t),l=.5*(n-e);return(2*(e-i)+s+l)*a+(-3*(e-i)-2*s-l)*r+s*o+e}var o=i(5);t.exports=function(t,e){for(var i=t.length,r=[],a=0,s=1;s<i;s++)a+=o.distance(t[s-1],t[s]);var l=a/2;l=l<i?i:l;for(var s=0;s<l;s++){var u,h,c,d=s/(l-1)*(e?i:i-1),f=Math.floor(d),p=d-f,g=t[f%i];e?(u=t[(f-1+i)%i],h=t[(f+1)%i],c=t[(f+2)%i]):(u=t[0===f?f:f-1],h=t[f>i-2?i-1:f+1],c=t[f>i-3?i-1:f+2]);var m=p*p,v=p*m;r.push([n(u[0],g[0],h[0],c[0],p,m,v),n(u[1],g[1],h[1],c[1],p,m,v)])}return r}},function(t,e,i){t.exports=i(6).extend({type:"arc",shape:{cx:0,cy:0,r:0,startAngle:0,endAngle:2*Math.PI,clockwise:!0},style:{stroke:"#000",fill:null},buildPath:function(t,e){var i=e.cx,n=e.cy,o=Math.max(e.r,0),r=e.startAngle,a=e.endAngle,s=e.clockwise,l=Math.cos(r),u=Math.sin(r);t.moveTo(l*o+i,u*o+n),t.arc(i,n,o,r,a,!s)}})},function(t,e,i){"use strict";function n(t,e,i){var n=t.cpx2,o=t.cpy2;return null===n||null===o?[(i?c:u)(t.x1,t.cpx1,t.cpx2,t.x2,e),(i?c:u)(t.y1,t.cpy1,t.cpy2,t.y2,e)]:[(i?h:l)(t.x1,t.cpx1,t.x2,e),(i?h:l)(t.y1,t.cpy1,t.y2,e)]}var o=i(17),r=i(5),a=o.quadraticSubdivide,s=o.cubicSubdivide,l=o.quadraticAt,u=o.cubicAt,h=o.quadraticDerivativeAt,c=o.cubicDerivativeAt,d=[];t.exports=i(6).extend({type:"bezier-curve",shape:{x1:0,y1:0,x2:0,y2:0,cpx1:0,cpy1:0,percent:1},style:{stroke:"#000",fill:null},buildPath:function(t,e){var i=e.x1,n=e.y1,o=e.x2,r=e.y2,l=e.cpx1,u=e.cpy1,h=e.cpx2,c=e.cpy2,f=e.percent;0!==f&&(t.moveTo(i,n),null==h||null==c?(f<1&&(a(i,l,o,f,d),l=d[1],o=d[2],a(n,u,r,f,d),u=d[1],r=d[2]),t.quadraticCurveTo(l,u,o,r)):(f<1&&(s(i,l,h,o,f,d),l=d[1],h=d[2],o=d[3],s(n,u,c,r,f,d),u=d[1],c=d[2],r=d[3]),t.bezierCurveTo(l,u,h,c,o,r)))},pointAt:function(t){return n(this.shape,t,!1)},tangentAt:function(t){var e=n(this.shape,t,!0);return r.normalize(e,e)}})},function(t,e,i){"use strict";t.exports=i(6).extend({type:"circle",shape:{cx:0,cy:0,r:0},buildPath:function(t,e,i){i&&t.moveTo(e.cx+e.r,e.cy),t.arc(e.cx,e.cy,e.r,0,2*Math.PI,!0)}})},function(t,e,i){t.exports=i(6).extend({type:"line",shape:{x1:0,y1:0,x2:0,y2:0,percent:1},style:{stroke:"#000",fill:null},buildPath:function(t,e){var i=e.x1,n=e.y1,o=e.x2,r=e.y2,a=e.percent;0!==a&&(t.moveTo(i,n),a<1&&(o=i*(1-a)+o*a,r=n*(1-a)+r*a),t.lineTo(o,r))},pointAt:function(t){var e=this.shape;return[e.x1*(1-t)+e.x2*t,e.y1*(1-t)+e.y2*t]}})},function(t,e,i){var n=i(65);t.exports=i(6).extend({type:"polygon",shape:{points:null,smooth:!1,smoothConstraint:null},buildPath:function(t,e){n.buildPath(t,e,!0)}})},function(t,e,i){var n=i(65);t.exports=i(6).extend({type:"polyline",shape:{points:null,smooth:!1,smoothConstraint:null},style:{stroke:"#000",fill:null},buildPath:function(t,e){n.buildPath(t,e,!1)}})},function(t,e,i){var n=i(154);t.exports=i(6).extend({type:"rect",shape:{r:0,x:0,y:0,width:0,height:0},buildPath:function(t,e){var i=e.x,o=e.y,r=e.width,a=e.height;e.r?n.buildPath(t,e):t.rect(i,o,r,a),t.closePath()}})},function(t,e,i){t.exports=i(6).extend({type:"ring",shape:{cx:0,cy:0,r:0,r0:0},buildPath:function(t,e){var i=e.cx,n=e.cy,o=2*Math.PI;t.moveTo(i+e.r,n),t.arc(i,n,e.r,0,o,!1),t.moveTo(i+e.r0,n),t.arc(i,n,e.r0,0,o,!0)}})},function(t,e,i){t.exports=i(6).extend({type:"sector",shape:{cx:0,cy:0,r0:0,r:0,startAngle:0,endAngle:2*Math.PI,clockwise:!0},buildPath:function(t,e){var i=e.cx,n=e.cy,o=Math.max(e.r0||0,0),r=Math.max(e.r,0),a=e.startAngle,s=e.endAngle,l=e.clockwise,u=Math.cos(a),h=Math.sin(a);t.moveTo(u*o+i,h*o+n),t.lineTo(u*r+i,h*r+n),t.arc(i,n,r,a,s,!l),t.lineTo(Math.cos(s)*o+i,Math.sin(s)*o+n),0!==o&&t.arc(i,n,o,s,a,l),t.closePath()}})},function(t,e,i){"use strict";var n=i(59),o=i(1),r=o.isString,a=o.isFunction,s=o.isObject,l=i(47),u=function(){this.animators=[]};u.prototype={constructor:u,animate:function(t,e){var i,r=!1,a=this,s=this.__zr;if(t){var u=t.split("."),h=a;r="shape"===u[0];for(var c=0,d=u.length;c<d;c++)h&&(h=h[u[c]]);h&&(i=h)}else i=a;if(!i)return void l('Property "'+t+'" is not existed in element '+a.id);var f=a.animators,p=new n(i,e);return p.during(function(t){a.dirty(r)}).done(function(){f.splice(o.indexOf(f,p),1)}),f.push(p),s&&s.animation.addAnimator(p),p},stopAnimation:function(t){for(var e=this.animators,i=e.length,n=0;n<i;n++)e[n].stop(t);return e.length=0,this},animateTo:function(t,e,i,n,o){function s(){u--,u||o&&o()}r(i)?(o=n,n=i,i=0):a(n)?(o=n,n="linear",i=0):a(i)?(o=i,i=0):a(e)?(o=e,e=500):e||(e=500),this.stopAnimation(),this._animateToShallow("",this,t,e,i,n,o);var l=this.animators.slice(),u=l.length;u||o&&o();for(var h=0;h<l.length;h++)l[h].done(s).start(n)},_animateToShallow:function(t,e,i,n,r){var a={},l=0;for(var u in i)if(i.hasOwnProperty(u))if(null!=e[u])s(i[u])&&!o.isArrayLike(i[u])?this._animateToShallow(t?t+"."+u:u,e[u],i[u],n,r):(a[u]=i[u],l++);else if(null!=i[u])if(t){var h={};h[t]={},h[t][u]=i[u],this.attr(h)}else this.attr(u,i[u]);return l>0&&this.animate(t,!1).when(null==n?500:n,a).delay(r||0),this}},t.exports=u},function(t,e){function i(){this.on("mousedown",this._dragStart,this),this.on("mousemove",this._drag,this),this.on("mouseup",this._dragEnd,this),this.on("globalout",this._dragEnd,this)}i.prototype={constructor:i,_dragStart:function(t){var e=t.target;e&&e.draggable&&(this._draggingTarget=e,e.dragging=!0,this._x=t.offsetX,this._y=t.offsetY,this.dispatchToElement(e,"dragstart",t.event))},_drag:function(t){var e=this._draggingTarget;if(e){var i=t.offsetX,n=t.offsetY,o=i-this._x,r=n-this._y;this._x=i,this._y=n,e.drift(o,r,t),this.dispatchToElement(e,"drag",t.event);var a=this.findHover(i,n,e),s=this._dropTarget;this._dropTarget=a,e!==a&&(s&&a!==s&&this.dispatchToElement(s,"dragleave",t.event),a&&a!==s&&this.dispatchToElement(a,"dragenter",t.event))}},_dragEnd:function(t){var e=this._draggingTarget;e&&(e.dragging=!1),this.dispatchToElement(e,"dragend",t.event),this._dropTarget&&this.dispatchToElement(this._dropTarget,"drop",t.event),this._draggingTarget=null,this._dropTarget=null}},t.exports=i},function(t,e,i){function n(t,e,i,n,o,r,a,s,l,u,h){var g=l*(p/180),y=f(g)*(t-i)/2+d(g)*(e-n)/2,x=-1*d(g)*(t-i)/2+f(g)*(e-n)/2,_=y*y/(a*a)+x*x/(s*s);_>1&&(a*=c(_),s*=c(_));var b=(o===r?-1:1)*c((a*a*(s*s)-a*a*(x*x)-s*s*(y*y))/(a*a*(x*x)+s*s*(y*y)))||0,w=b*a*x/s,S=b*-s*y/a,M=(t+i)/2+f(g)*w-d(g)*S,T=(e+n)/2+d(g)*w+f(g)*S,I=v([1,0],[(y-w)/a,(x-S)/s]),A=[(y-w)/a,(x-S)/s],L=[(-1*y-w)/a,(-1*x-S)/s],C=v(A,L);m(A,L)<=-1&&(C=p),m(A,L)>=1&&(C=0),0===r&&C>0&&(C-=2*p),1===r&&C<0&&(C+=2*p),h.addData(u,M,T,a,s,I,C,g,r)}function o(t){if(!t)return[];var e,i=t.replace(/-/g," -").replace(/  /g," ").replace(/ /g,",").replace(/,,/g,",");for(e=0;e<h.length;e++)i=i.replace(new RegExp(h[e],"g"),"|"+h[e]);var o,r=i.split("|"),a=0,l=0,u=new s,c=s.CMD;for(e=1;e<r.length;e++){var d,f=r[e],p=f.charAt(0),g=0,m=f.slice(1).replace(/e,-/g,"e-").split(",");m.length>0&&""===m[0]&&m.shift();for(var v=0;v<m.length;v++)m[v]=parseFloat(m[v]);for(;g<m.length&&!isNaN(m[g])&&!isNaN(m[0]);){var y,x,_,b,w,S,M,T=a,I=l;switch(p){case"l":a+=m[g++],l+=m[g++],d=c.L,u.addData(d,a,l);break;case"L":a=m[g++],l=m[g++],d=c.L,u.addData(d,a,l);break;case"m":a+=m[g++],l+=m[g++],d=c.M,u.addData(d,a,l),p="l";break;case"M":a=m[g++],l=m[g++],d=c.M,u.addData(d,a,l),p="L";break;case"h":a+=m[g++],d=c.L,u.addData(d,a,l);break;case"H":a=m[g++],d=c.L,u.addData(d,a,l);break;case"v":l+=m[g++],d=c.L,u.addData(d,a,l);break;case"V":l=m[g++],d=c.L,u.addData(d,a,l);break;case"C":d=c.C,u.addData(d,m[g++],m[g++],m[g++],m[g++],m[g++],m[g++]),a=m[g-2],l=m[g-1];break;case"c":d=c.C,u.addData(d,m[g++]+a,m[g++]+l,m[g++]+a,m[g++]+l,m[g++]+a,m[g++]+l),a+=m[g-2],l+=m[g-1];break;case"S":y=a,x=l;var A=u.len(),L=u.data;o===c.C&&(y+=a-L[A-4],x+=l-L[A-3]),d=c.C,T=m[g++],I=m[g++],a=m[g++],l=m[g++],u.addData(d,y,x,T,I,a,l);break;case"s":y=a,x=l;var A=u.len(),L=u.data;o===c.C&&(y+=a-L[A-4],x+=l-L[A-3]),d=c.C,T=a+m[g++],I=l+m[g++],a+=m[g++],l+=m[g++],u.addData(d,y,x,T,I,a,l);break;case"Q":T=m[g++],I=m[g++],a=m[g++],l=m[g++],d=c.Q,u.addData(d,T,I,a,l);break;case"q":T=m[g++]+a,I=m[g++]+l,a+=m[g++],l+=m[g++],d=c.Q,u.addData(d,T,I,a,l);break;case"T":y=a,x=l;var A=u.len(),L=u.data;o===c.Q&&(y+=a-L[A-4],x+=l-L[A-3]),a=m[g++],l=m[g++],d=c.Q,u.addData(d,y,x,a,l);break;case"t":y=a,x=l;var A=u.len(),L=u.data;o===c.Q&&(y+=a-L[A-4],x+=l-L[A-3]),a+=m[g++],l+=m[g++],d=c.Q,u.addData(d,y,x,a,l);break;case"A":_=m[g++],b=m[g++],w=m[g++],S=m[g++],M=m[g++],T=a,I=l,a=m[g++],l=m[g++],d=c.A,n(T,I,a,l,S,M,_,b,w,d,u);break;case"a":_=m[g++],b=m[g++],w=m[g++],S=m[g++],M=m[g++],T=a,I=l,a+=m[g++],l+=m[g++],d=c.A,n(T,I,a,l,S,M,_,b,w,d,u)}}"z"!==p&&"Z"!==p||(d=c.Z,u.addData(d)),o=d}return u.toStatic(),u}function r(t,e){var i,n=o(t);return e=e||{},e.buildPath=function(t){t.setData(n.data),i&&l(t,i);var e=t.getContext();e&&t.rebuildPath(e)},e.applyTransform=function(t){i||(i=u.create()),u.mul(i,t,i),this.dirty(!0)},e}var a=i(6),s=i(28),l=i(169),u=i(19),h=["m","M","l","L","v","V","h","H","z","Z","c","C","q","Q","t","T","s","S","a","A"],c=Math.sqrt,d=Math.sin,f=Math.cos,p=Math.PI,g=function(t){return Math.sqrt(t[0]*t[0]+t[1]*t[1])},m=function(t,e){return(t[0]*e[0]+t[1]*e[1])/(g(t)*g(e))},v=function(t,e){return(t[0]*e[1]<t[1]*e[0]?-1:1)*Math.acos(m(t,e))};t.exports={createFromString:function(t,e){return new a(r(t,e))},extendFromString:function(t,e){return a.extend(r(t,e))},mergePath:function(t,e){for(var i=[],n=t.length,o=0;o<n;o++){var r=t[o];r.__dirty&&r.buildPath(r.path,r.shape,!0),i.push(r.path)}var s=new a(e);return s.buildPath=function(t){t.appendPath(i);var e=t.getContext();e&&t.rebuildPath(e)},s}}},function(t,e,i){function n(t,e){var i,n,r,h,c,d,f=t.data,p=o.M,g=o.C,m=o.L,v=o.R,y=o.A,x=o.Q;for(r=0,h=0;r<f.length;){switch(i=f[r++],h=r,n=0,i){case p:n=1;break;case m:n=1;break;case g:n=3;break;case x:n=2;break;case y:var _=e[4],b=e[5],w=l(e[0]*e[0]+e[1]*e[1]),S=l(e[2]*e[2]+e[3]*e[3]),M=u(-e[1]/S,e[0]/w);f[r++]+=_,f[r++]+=b,f[r++]*=w,f[r++]*=S,f[r++]+=M,f[r++]+=M,r+=2,h=r;break;case v:d[0]=f[r++],d[1]=f[r++],a(d,d,e),f[h++]=d[0],f[h++]=d[1],d[0]+=f[r++],d[1]+=f[r++],a(d,d,e),f[h++]=d[0],f[h++]=d[1]}for(c=0;c<n;c++){var d=s[c];d[0]=f[r++],d[1]=f[r++],a(d,d,e),f[h++]=d[0],f[h++]=d[1]}}}var o=i(28).CMD,r=i(5),a=r.applyTransform,s=[[],[],[]],l=Math.sqrt,u=Math.atan2;t.exports=n},function(t,e,i){if(!i(11).canvasSupported){var n,o="urn:schemas-microsoft-com:vml",r=window,a=r.document,s=!1;try{!a.namespaces.zrvml&&a.namespaces.add("zrvml",o),n=function(t){return a.createElement("<zrvml:"+t+' class="zrvml">')}}catch(l){n=function(t){return a.createElement("<"+t+' xmlns="'+o+'" class="zrvml">')}}var u=function(){if(!s){s=!0;var t=a.styleSheets;t.length<31?a.createStyleSheet().addRule(".zrvml","behavior:url(#default#VML)"):t[0].addRule(".zrvml","behavior:url(#default#VML)")}};t.exports={doc:a,initVML:u,createNode:n}}},function(t,e,i){"use strict";function n(t){return null==t.value?t:t.value}var o=i(14),r=i(29),a=i(285),s=i(1),l={_baseAxisDim:null,getInitialData:function(t,e){var i,a,s=e.getComponent("xAxis",this.get("xAxisIndex")),l=e.getComponent("yAxis",this.get("yAxisIndex")),u=s.get("type"),h=l.get("type");"category"===u?(t.layout="horizontal",i=s.getCategories(),a=!0):"category"===h?(t.layout="vertical",i=l.getCategories(),a=!0):t.layout=t.layout||"horizontal",this._baseAxisDim="horizontal"===t.layout?"x":"y";var c=t.data,d=this.dimensions=["base"].concat(this.valueDimensions);r(d,c);var f=new o(d,this);return f.initData(c,i?i.slice():null,function(t,e,i,o){var r=n(t);return a?"base"===e?i:r[o-1]:r[o]}),f},coordDimToDataDim:function(t){var e=this.valueDimensions.slice(),i=["base"],n={horizontal:{x:i,y:e},vertical:{x:e,y:i}};return n[this.get("layout")][t]},dataDimToCoordDim:function(t){var e;return s.each(["x","y"],function(i,n){var o=this.coordDimToDataDim(i);s.indexOf(o,t)>=0&&(e=i)},this),e},getBaseAxis:function(){var t=this._baseAxisDim;return this.ecModel.getComponent(t+"Axis",this.get(t+"AxisIndex")).axis}},u={init:function(){var t=this._whiskerBoxDraw=new a(this.getStyleUpdater());this.group.add(t.group)},render:function(t,e,i){this._whiskerBoxDraw.updateData(t.getData())},remove:function(t){this._whiskerBoxDraw.remove()}};t.exports={seriesModelMixin:l,viewMixin:u}},function(t,e,i){function n(t,e){var i,n=this.getBoundingRect(),o=t.get("layoutCenter"),r=t.get("layoutSize"),s=e.getWidth(),u=e.getHeight(),h=t.get("aspectScale")||.75,c=n.width/n.height*h,d=!1;o&&r&&(o=[l.parsePercent(o[0],s),l.parsePercent(o[1],u)],r=l.parsePercent(r,Math.min(s,u)),isNaN(o[0])||isNaN(o[1])||isNaN(r)||(d=!0));var f;if(d){var f={};c>1?(f.width=r,f.height=r/c):(f.height=r,f.width=r*c),f.y=o[1]-f.height/2,f.x=o[0]-f.width/2}else i=t.getBoxLayoutParams(),i.aspect=c,f=a.getLayoutRect(i,{width:s,height:u});this.setViewRect(f.x,f.y,f.width,f.height),this.setCenter(t.get("center")),this.setZoom(t.get("zoom"))}function o(t,e){s.each(e.get("geoCoord"),function(e,i){t.addGeoCoord(i,e)})}var r=i(356),a=i(13),s=i(1),l=i(4),u={},h={dimensions:r.prototype.dimensions,create:function(t,e){var i=[];t.eachComponent("geo",function(t,a){var s=t.get("map"),l=u[s],h=new r(s+a,s,l&&l.geoJson,l&&l.specialAreas,t.get("nameMap"));h.zoomLimit=t.get("scaleLimit"),i.push(h),o(h,t),t.coordinateSystem=h,h.model=t,h.resize=n,h.resize(t,e)}),t.eachSeries(function(t){var e=t.get("coordinateSystem");if("geo"===e){var n=t.get("geoIndex")||0;t.coordinateSystem=i[n]}});var a={};return t.eachSeriesByType("map",function(t){var e=t.get("map");a[e]=a[e]||[],a[e].push(t)}),s.each(a,function(t,a){var l=u[a],h=s.map(t,function(t){return t.get("nameMap")}),c=new r(a,a,l&&l.geoJson,l&&l.specialAreas,s.mergeAll(h));c.zoomLimit=s.retrieve.apply(null,s.map(t,function(t){return t.get("scaleLimit")})),i.push(c),c.resize=n,c.resize(t[0],e),s.each(t,function(t){t.coordinateSystem=c,o(c,t)})}),i},registerMap:function(t,e,i){e.geoJson&&!e.features&&(i=e.specialAreas,e=e.geoJson),"string"==typeof e&&(e="undefined"!=typeof JSON&&JSON.parse?JSON.parse(e):new Function("return ("+e+");")()),u[t]={geoJson:e,specialAreas:i}},getMap:function(t){return u[t]},getFilledRegions:function(t,e){var i=(t||[]).slice(),n=h.getMap(e),o=n&&n.geoJson;if(!o)return t;for(var r={},a=o.features,s=0;s<i.length;s++)r[i[s].name]=i[s];for(var s=0;s<a.length;s++){var l=a[s].properties.name;r[l]||i.push({name:l})}return i}},c=i(2);c.registerMap=h.registerMap,c.getMap=h.getMap,c.loadMap=function(){},c.registerCoordinateSystem("geo",h),t.exports=h},function(t,e,i){function n(t){if(t)for(var e in t)if(t.hasOwnProperty(e))return!0}var o=i(1),r=i(71),a=o.each,s={createVisualMappings:function(t,e,i){function n(){var t=function(){};t.prototype.__hidden=t.prototype;var e=new t;return e}var s={};return a(e,function(e){var l=s[e]=n();a(t[e],function(t,n){if(r.isValidType(n)){var a={type:n,visual:t};i&&i(a,e),l[n]=new r(a),"opacity"===n&&(a=o.clone(a),a.type="colorAlpha",l.__hidden.__alphaForOpacity=new r(a))}})}),s},replaceVisualOption:function(t,e,i){var r;o.each(i,function(t){e.hasOwnProperty(t)&&n(e[t])&&(r=!0)}),r&&o.each(i,function(i){e.hasOwnProperty(i)&&n(e[i])?t[i]=o.clone(e[i]):delete t[i]})},applyVisual:function(t,e,i,n,a,s){function l(t){return i.getItemVisual(d,t)}function u(t,e){i.setItemVisual(d,t,e)}function h(t,i){d=null==s?t:i;for(var o=n.call(a,t),r=e[o],h=c[o],f=0,p=h.length;f<p;f++){var g=h[f];r[g]&&r[g].applyVisual(t,l,u)}}var c={};o.each(t,function(t){var i=r.prepareVisualTypes(e[t]);c[t]=i});var d;null==s?i.each(h,!0):i.each([s],h,!0)}};t.exports=s},function(t,e,i){function n(){this.group=new o.Group,this._symbolEl=new a({})}var o=i(3),r=i(26),a=o.extendShape({shape:{points:null,sizes:null},symbolProxy:null,buildPath:function(t,e){for(var i=e.points,n=e.sizes,o=this.symbolProxy,r=o.shape,a=0;a<i.length;a++){var s=i[a],l=n[a];l[0]<4?t.rect(s[0]-l[0]/2,s[1]-l[1]/2,l[0],l[1]):(r.x=s[0]-l[0]/2,r.y=s[1]-l[1]/2,r.width=l[0],r.height=l[1],o.buildPath(t,r,!0))}},findDataIndex:function(t,e){for(var i=this.shape,n=i.points,o=i.sizes,r=n.length-1;r>=0;r--){var a=n[r],s=o[r],l=a[0]-s[0]/2,u=a[1]-s[1]/2;if(t>=l&&e>=u&&t<=l+s[0]&&e<=u+s[1])return r}return-1}}),s=n.prototype;s.updateData=function(t){this.group.removeAll();var e=this._symbolEl,i=t.hostModel;e.setShape({points:t.mapArray(t.getItemLayout),sizes:t.mapArray(function(e){var i=t.getItemVisual(e,"symbolSize");return i instanceof Array||(i=[i,i]),i})}),e.symbolProxy=r.createSymbol(t.getVisual("symbol"),0,0,0,0),e.setColor=e.symbolProxy.setColor,e.useStyle(i.getModel("itemStyle.normal").getItemStyle(["color"]));var n=t.getVisual("color");n&&e.setColor(n),e.seriesIndex=i.seriesIndex,e.on("mousemove",function(t){e.dataIndex=null;var i=e.findDataIndex(t.offsetX,t.offsetY);i>0&&(e.dataIndex=i)}),this.group.add(e)},s.updateLayout=function(t){var e=t.getData();this._symbolEl.setShape({points:e.mapArray(e.getItemLayout)})},s.remove=function(){this.group.removeAll()},t.exports=n},function(t,e,i){function n(t){return isNaN(+t.cpx1)||isNaN(+t.cpy1)}var o=i(3),r=i(5),a=o.Line.prototype,s=o.BezierCurve.prototype;t.exports=o.extendShape({type:"ec-line",style:{stroke:"#000",fill:null},shape:{x1:0,y1:0,x2:0,y2:0,percent:1,cpx1:null,cpy1:null},buildPath:function(t,e){
+(n(e)?a:s).buildPath(t,e)},pointAt:function(t){return n(this.shape)?a.pointAt.call(this,t):s.pointAt.call(this,t)},tangentAt:function(t){var e=this.shape,i=n(e)?[e.x2-e.x1,e.y2-e.y1]:s.tangentAt.call(this,t);return r.normalize(i,i)}})},function(t,e,i){var n=i(1),o=i(2);i(177),i(178),o.registerVisual(n.curry(i(46),"scatter","circle",null)),o.registerLayout(n.curry(i(55),"scatter")),i(35)},function(t,e,i){"use strict";var n=i(34),o=i(15);t.exports=o.extend({type:"series.scatter",dependencies:["grid","polar"],getInitialData:function(t,e){var i=n(t.data,this,e);return i},brushSelector:"point",defaultOption:{coordinateSystem:"cartesian2d",zlevel:0,z:2,legendHoverLink:!0,hoverAnimation:!0,symbolSize:10,large:!1,largeThreshold:2e3,itemStyle:{normal:{opacity:.8}}}})},function(t,e,i){var n=i(39),o=i(174);i(2).extendChartView({type:"scatter",init:function(){this._normalSymbolDraw=new n,this._largeSymbolDraw=new o},render:function(t,e,i){var n=t.getData(),o=this._largeSymbolDraw,r=this._normalSymbolDraw,a=this.group,s=t.get("large")&&n.count()>t.get("largeThreshold")?o:r;this._symbolDraw=s,s.updateData(n),a.add(s.group),a.remove(s===o?r.group:o.group)},updateLayout:function(t){this._symbolDraw.updateLayout(t)},remove:function(t,e){this._symbolDraw&&this._symbolDraw.remove(e,!0)},dispose:function(){}})},function(t,e,i){i(112),i(40),i(41),i(185),i(186),i(181),i(182),i(109),i(108)},function(t,e,i){function n(t,e){var i=[1/0,-(1/0)];return u(e,function(e){var n=e.getData();n&&u(e.coordDimToDataDim(t),function(t){var e=n.getDataExtent(t);e[0]<i[0]&&(i[0]=e[0]),e[1]>i[1]&&(i[1]=e[1])})},this),i}function o(t,e,i){var n=i.getAxisModel(),o=n.axis.scale,a=[0,100],s=[t.start,t.end],c=[];return e=e.slice(),r(e,n,o),u(["startValue","endValue"],function(e){c.push(null!=t[e]?o.parse(t[e]):null)}),u([0,1],function(t){var i=c[t],n=s[t];null!=n||null==i?(null==n&&(n=a[t]),i=o.parse(l.linearMap(n,a,e,!0))):n=l.linearMap(i,e,a,!0),c[t]=i,s[t]=n}),{valueWindow:h(c),percentWindow:h(s)}}function r(t,e,i){return u(["min","max"],function(n,o){var r=e.get(n,!0);null!=r&&(r+"").toLowerCase()!=="data"+n&&(t[o]=i.parse(r))}),e.get("scale",!0)||(t[0]>0&&(t[0]=0),t[1]<0&&(t[1]=0)),t}function a(t,e){var i=t.getAxisModel(),n=t._percentWindow,o=t._valueWindow;if(n){var r=e||0===n[0]&&100===n[1],a=!e&&l.getPixelPrecision(o,[0,500]),s=!(e||a<20&&a>=0),u=e||r||s;i.setRange&&i.setRange(u?null:+o[0].toFixed(a),u?null:+o[1].toFixed(a))}}var s=i(1),l=i(4),u=s.each,h=l.asc,c=function(t,e,i,n){this._dimName=t,this._axisIndex=e,this._valueWindow,this._percentWindow,this._dataExtent,this.ecModel=n,this._dataZoomModel=i};c.prototype={constructor:c,hostedBy:function(t){return this._dataZoomModel===t},getDataExtent:function(){return this._dataExtent.slice()},getDataValueWindow:function(){return this._valueWindow.slice()},getDataPercentWindow:function(){return this._percentWindow.slice()},getTargetSeriesModels:function(){var t=[],e=this.ecModel;return e.eachSeries(function(i){var n=i.get("coordinateSystem");if("cartesian2d"===n||"polar"===n){var o=this._dimName,r=e.queryComponents({mainType:o+"Axis",index:i.get(o+"AxisIndex"),id:i.get(o+"AxisId")})[0];this._axisIndex===(r&&r.componentIndex)&&t.push(i)}},this),t},getAxisModel:function(){return this.ecModel.getComponent(this._dimName+"Axis",this._axisIndex)},getOtherAxisModel:function(){var t,e,i=this._dimName,n=this.ecModel,o=this.getAxisModel(),r="x"===i||"y"===i;r?(e="gridIndex",t="x"===i?"y":"x"):(e="polarIndex",t="angle"===i?"radius":"angle");var a;return n.eachComponent(t+"Axis",function(t){(t.get(e)||0)===(o.get(e)||0)&&(a=t)}),a},reset:function(t){if(t===this._dataZoomModel){var e=this._dataExtent=n(this._dimName,this.getTargetSeriesModels()),i=o(t.option,e,this);this._valueWindow=i.valueWindow,this._percentWindow=i.percentWindow,a(this)}},restore:function(t){t===this._dataZoomModel&&(this._valueWindow=this._percentWindow=null,a(this,!0))},filterData:function(t){function e(t){return t>=r[0]&&t<=r[1]}if(t===this._dataZoomModel){var i=this._dimName,n=this.getTargetSeriesModels(),o=t.get("filterMode"),r=this._valueWindow,a=this.getOtherAxisModel();t.get("$fromToolbox")&&a&&"category"===a.get("type")&&(o="empty"),u(n,function(t){var n=t.getData();n&&u(t.coordDimToDataDim(i),function(i){"empty"===o?t.setData(n.map(i,function(t){return e(t)?t:NaN})):n.filterSelf(i,e)})})}}},t.exports=c},function(t,e,i){t.exports=i(40).extend({type:"dataZoom.inside",defaultOption:{disabled:!1,zoomLock:!1}})},function(t,e,i){function n(t){var e=[0,100];return!(t[0]<=e[1])&&(t[0]=e[1]),!(t[1]<=e[1])&&(t[1]=e[1]),!(t[0]>=e[0])&&(t[0]=e[0]),!(t[1]>=e[0])&&(t[1]=e[0]),t}var o=i(41),r=i(1),a=i(80),s=i(187),l=r.bind,u=o.extend({type:"dataZoom.inside",init:function(t,e){this._range},render:function(t,e,i,n){u.superApply(this,"render",arguments),s.shouldRecordRange(n,t.id)&&(this._range=t.getPercentRange());var o=this.getTargetInfo();r.each(["cartesians","polars"],function(e){var n=o[e],a=r.map(n,function(t){return s.generateCoordId(t.model)});r.each(n,function(n){var o=n.model,r=o.coordinateSystem;s.register(i,{coordId:s.generateCoordId(o),allCoordIds:a,coordinateSystem:r,containsPoint:l(h[e].containsPoint,this,r),dataZoomId:t.id,throttleRate:t.get("throttle",!0),panGetRange:l(this._onPan,this,n,e),zoomGetRange:l(this._onZoom,this,n,e)})},this)},this)},dispose:function(){s.unregister(this.api,this.dataZoomModel.id),u.superApply(this,"dispose",arguments),this._range=null},_onPan:function(t,e,i,n,o,r,s,l,u){if(this.dataZoomModel.option.disabled)return this._range;var c=this._range.slice(),d=t.axisModels[0];if(d){var f=h[e].getDirectionInfo([r,s],[l,u],d,i,t),p=f.signal*(c[1]-c[0])*f.pixel/f.pixelLength;return a(p,c,[0,100],"rigid"),this._range=c}},_onZoom:function(t,e,i,o,r,a){var s=this.dataZoomModel.option;if(s.disabled||s.zoomLock)return this._range;var l=this._range.slice(),u=t.axisModels[0];if(u){var c=h[e].getDirectionInfo(null,[r,a],u,i,t),d=(c.pixel-c.pixelStart)/c.pixelLength*(l[1]-l[0])+l[0];return o=Math.max(1/o,0),l[0]=(l[0]-d)*o+d,l[1]=(l[1]-d)*o+d,this._range=n(l)}}}),h={cartesians:{getDirectionInfo:function(t,e,i,n,o){var r=i.axis,a={},s=o.model.coordinateSystem.getRect();return t=t||[0,0],"x"===r.dim?(a.pixel=e[0]-t[0],a.pixelLength=s.width,a.pixelStart=s.x,a.signal=r.inverse?1:-1):(a.pixel=e[1]-t[1],a.pixelLength=s.height,a.pixelStart=s.y,a.signal=r.inverse?-1:1),a},containsPoint:function(t,e,i){return t.getRect().contain(e,i)}},polars:{getDirectionInfo:function(t,e,i,n,o){var r=i.axis,a={},s=o.model.coordinateSystem,l=s.getRadiusAxis().getExtent(),u=s.getAngleAxis().getExtent();return t=t?s.pointToCoord(t):[0,0],e=s.pointToCoord(e),"radiusAxis"===i.mainType?(a.pixel=e[0]-t[0],a.pixelLength=l[1]-l[0],a.pixelStart=l[0],a.signal=r.inverse?1:-1):(a.pixel=e[1]-t[1],a.pixelLength=u[1]-u[0],a.pixelStart=u[0],a.signal=r.inverse?-1:1),a},containsPoint:function(t,e,i){var n=t.getRadiusAxis().getExtent()[1],o=t.cx,r=t.cy;return Math.pow(e-o,2)+Math.pow(i-r,2)<=Math.pow(n,2)}}};t.exports=u},function(t,e,i){var n=i(40);t.exports=n.extend({type:"dataZoom.select"})},function(t,e,i){t.exports=i(41).extend({type:"dataZoom.select"})},function(t,e,i){var n=i(40),o=n.extend({type:"dataZoom.slider",layoutMode:"box",defaultOption:{show:!0,right:"ph",top:"ph",width:"ph",height:"ph",left:null,bottom:null,backgroundColor:"rgba(47,69,84,0)",dataBackground:{lineStyle:{color:"#2f4554",width:.5,opacity:.3},areaStyle:{color:"rgba(47,69,84,0.3)",opacity:.3}},borderColor:"#ddd",fillerColor:"rgba(167,183,204,0.4)",handleIcon:"M8.2,13.6V3.9H6.3v9.7H3.1v14.9h3.3v9.7h1.8v-9.7h3.3V13.6H8.2z M9.7,24.4H4.8v-1.4h4.9V24.4z M9.7,19.1H4.8v-1.4h4.9V19.1z",handleSize:"100%",handleStyle:{color:"#a7b7cc"},labelPrecision:null,labelFormatter:null,showDetail:!0,showDataShadow:"auto",realtime:!0,zoomLock:!1,textStyle:{color:"#333"}}});t.exports=o},function(t,e,i){function n(t){return"x"===t?"y":"x"}var o=i(1),r=i(3),a=i(83),s=i(41),l=r.Rect,u=i(4),h=u.linearMap,c=i(13),d=i(80),f=u.asc,p=o.bind,g=o.each,m=7,v=1,y=30,x="horizontal",_="vertical",b=5,w=["line","bar","candlestick","scatter"],S=s.extend({type:"dataZoom.slider",init:function(t,e){this._displayables={},this._orient,this._range,this._handleEnds,this._size,this._handleWidth,this._handleHeight,this._location,this._dragging,this._dataShadowInfo,this.api=e},render:function(t,e,i,n){return S.superApply(this,"render",arguments),a.createOrUpdate(this,"_dispatchZoomAction",this.dataZoomModel.get("throttle"),"fixRate"),this._orient=t.get("orient"),this.dataZoomModel.get("show")===!1?void this.group.removeAll():(n&&"dataZoom"===n.type&&n.from===this.uid||this._buildView(),void this._updateView())},remove:function(){S.superApply(this,"remove",arguments),a.clear(this,"_dispatchZoomAction")},dispose:function(){S.superApply(this,"dispose",arguments),a.clear(this,"_dispatchZoomAction")},_buildView:function(){var t=this.group;t.removeAll(),this._resetLocation(),this._resetInterval();var e=this._displayables.barGroup=new r.Group;this._renderBackground(),this._renderHandle(),this._renderDataShadow(),t.add(e),this._positionGroup()},_resetLocation:function(){var t=this.dataZoomModel,e=this.api,i=this._findCoordRect(),n={width:e.getWidth(),height:e.getHeight()},r=this._orient===x?{right:n.width-i.x-i.width,top:n.height-y-m,width:i.width,height:y}:{right:m,top:i.y,width:y,height:i.height},a=c.getLayoutParams(t.option);o.each(["right","top","width","height"],function(t){"ph"===a[t]&&(a[t]=r[t])});var s=c.getLayoutRect(a,n,t.padding);this._location={x:s.x,y:s.y},this._size=[s.width,s.height],this._orient===_&&this._size.reverse()},_positionGroup:function(){var t=this.group,e=this._location,i=this._orient,n=this.dataZoomModel.getFirstTargetAxisModel(),o=n&&n.get("inverse"),r=this._displayables.barGroup,a=(this._dataShadowInfo||{}).otherAxisInverse;r.attr(i!==x||o?i===x&&o?{scale:a?[-1,1]:[-1,-1]}:i!==_||o?{scale:a?[-1,-1]:[-1,1],rotation:Math.PI/2}:{scale:a?[1,-1]:[1,1],rotation:Math.PI/2}:{scale:a?[1,1]:[1,-1]});var s=t.getBoundingRect([r]);t.attr("position",[e.x-s.x,e.y-s.y])},_getViewExtent:function(){return[0,this._size[0]]},_renderBackground:function(){var t=this.dataZoomModel,e=this._size;this._displayables.barGroup.add(new l({silent:!0,shape:{x:0,y:0,width:e[0],height:e[1]},style:{fill:t.get("backgroundColor")},z2:-40}))},_renderDataShadow:function(){var t=this._dataShadowInfo=this._prepareDataShadowInfo();if(t){var e=this._size,i=t.series,n=i.getRawData(),a=i.getShadowDim?i.getShadowDim():t.otherDim,s=n.getDataExtent(a),l=.3*(s[1]-s[0]);s=[s[0]-l,s[1]+l];var u,c=[0,e[1]],d=[0,e[0]],f=[[e[0],0],[0,0]],p=[],g=d[1]/(n.count()-1),m=0,v=Math.round(n.count()/e[0]);n.each([a],function(t,e){if(v>0&&e%v)return void(m+=g);var i=null==t||isNaN(t)||""===t,n=i?0:h(t,s,c,!0);i&&!u&&e?(f.push([f[f.length-1][0],0]),p.push([p[p.length-1][0],0])):!i&&u&&(f.push([m,0]),p.push([m,0])),f.push([m,n]),p.push([m,n]),m+=g,u=i});var y=this.dataZoomModel;this._displayables.barGroup.add(new r.Polygon({shape:{points:f},style:o.defaults({fill:y.get("dataBackgroundColor")},y.getModel("dataBackground.areaStyle").getAreaStyle()),silent:!0,z2:-20})),this._displayables.barGroup.add(new r.Polyline({shape:{points:p},style:y.getModel("dataBackground.lineStyle").getLineStyle(),silent:!0,z2:-19}))}},_prepareDataShadowInfo:function(){var t=this.dataZoomModel,e=t.get("showDataShadow");if(e!==!1){var i,r=this.ecModel;return t.eachTargetAxis(function(a,s){var l=t.getAxisProxy(a.name,s).getTargetSeriesModels();o.each(l,function(t){if(!(i||e!==!0&&o.indexOf(w,t.get("type"))<0)){var l=n(a.name),u=r.getComponent(a.axis,s).axis;i={thisAxis:u,series:t,thisDim:a.name,otherDim:l,otherAxisInverse:t.coordinateSystem.getOtherAxis(u).inverse}}},this)},this),i}},_renderHandle:function(){var t=this._displayables,e=t.handles=[],i=t.handleLabels=[],n=this._displayables.barGroup,o=this._size,a=this.dataZoomModel;n.add(t.filler=new l({draggable:!0,cursor:"move",drift:p(this._onDragMove,this,"all"),ondragstart:p(this._showDataInfo,this,!0),ondragend:p(this._onDragEnd,this),onmouseover:p(this._showDataInfo,this,!0),onmouseout:p(this._showDataInfo,this,!1),style:{fill:a.get("fillerColor"),textPosition:"inside"}})),n.add(new l(r.subPixelOptimizeRect({silent:!0,shape:{x:0,y:0,width:o[0],height:o[1]},style:{stroke:a.get("dataBackgroundColor")||a.get("borderColor"),lineWidth:v,fill:"rgba(0,0,0,0)"}})));var s=a.get("handleIcon");g([0,1],function(t){var o=r.makePath(s,{style:{strokeNoScale:!0},rectHover:!0,cursor:"vertical"===this._orient?"ns-resize":"ew-resize",draggable:!0,drift:p(this._onDragMove,this,t),ondragend:p(this._onDragEnd,this),onmouseover:p(this._showDataInfo,this,!0),onmouseout:p(this._showDataInfo,this,!1)},{x:-.5,y:0,width:1,height:1},"center"),l=o.getBoundingRect();this._handleHeight=u.parsePercent(a.get("handleSize"),this._size[1]),this._handleWidth=l.width/l.height*this._handleHeight,o.setStyle(a.getModel("handleStyle").getItemStyle());var h=a.get("handleColor");null!=h&&(o.style.fill=h),n.add(e[t]=o);var c=a.textStyleModel;this.group.add(i[t]=new r.Text({silent:!0,invisible:!0,style:{x:0,y:0,text:"",textVerticalAlign:"middle",textAlign:"center",fill:c.getTextColor(),textFont:c.getFont()},z2:10}))},this)},_resetInterval:function(){var t=this._range=this.dataZoomModel.getPercentRange(),e=this._getViewExtent();this._handleEnds=[h(t[0],[0,100],e,!0),h(t[1],[0,100],e,!0)]},_updateInterval:function(t,e){var i=this._handleEnds,n=this._getViewExtent();d(e,i,n,"all"===t||this.dataZoomModel.get("zoomLock")?"rigid":"cross",t),this._range=f([h(i[0],n,[0,100],!0),h(i[1],n,[0,100],!0)])},_updateView:function(){var t=this._displayables,e=this._handleEnds,i=f(e.slice()),n=this._size;g([0,1],function(i){var o=t.handles[i],r=this._handleHeight;o.attr({scale:[r,r],position:[e[i],n[1]/2-r/2]})},this),t.filler.setShape({x:i[0],y:0,width:i[1]-i[0],height:n[1]}),this._updateDataInfo()},_updateDataInfo:function(){function t(t){var e=r.getTransform(i.handles[t].parent,this.group),s=r.transformDirection(0===t?"right":"left",e),l=this._handleWidth/2+b,h=r.applyTransform([u[t]+(0===t?-l:l),this._size[1]/2],e);n[t].setStyle({x:h[0],y:h[1],textVerticalAlign:o===x?"middle":s,textAlign:o===x?s:"center",text:a[t]})}var e=this.dataZoomModel,i=this._displayables,n=i.handleLabels,o=this._orient,a=["",""];if(e.get("showDetail")){var s,l;e.eachTargetAxis(function(t,i){s||(s=e.getAxisProxy(t.name,i).getDataValueWindow(),l=this.ecModel.getComponent(t.axis,i).axis)},this),s&&(a=[this._formatLabel(s[0],l),this._formatLabel(s[1],l)])}var u=f(this._handleEnds.slice());t.call(this,0),t.call(this,1)},_formatLabel:function(t,e){var i=this.dataZoomModel,n=i.get("labelFormatter"),r=i.get("labelPrecision");null!=r&&"auto"!==r||(r=e.getPixelPrecision());var a=null==t&&isNaN(t)?"":"category"===e.type||"time"===e.type?e.scale.getLabel(Math.round(t)):t.toFixed(Math.min(r,20));return o.isFunction(n)?n(t,a):o.isString(n)?n.replace("{value}",a):a},_showDataInfo:function(t){t=this._dragging||t;var e=this._displayables.handleLabels;e[0].attr("invisible",!t),e[1].attr("invisible",!t)},_onDragMove:function(t,e,i){this._dragging=!0;var n=this._applyBarTransform([e,i],!0);this._updateInterval(t,n[0]),this._updateView(),this.dataZoomModel.get("realtime")&&this._dispatchZoomAction()},_onDragEnd:function(){this._dragging=!1,this._showDataInfo(!1),this._dispatchZoomAction()},_dispatchZoomAction:function(){var t=this._range;this.api.dispatchAction({type:"dataZoom",from:this.uid,dataZoomId:this.dataZoomModel.id,start:t[0],end:t[1]})},_applyBarTransform:function(t,e){var i=this._displayables.barGroup.getLocalTransform();return r.applyTransform(t,i,e)},_findCoordRect:function(){var t,e=this.getTargetInfo();if(e.cartesians.length)t=e.cartesians[0].model.coordinateSystem.getRect();else{var i=this.api.getWidth(),n=this.api.getHeight();t={x:.2*i,y:.2*n,width:.6*i,height:.6*n}}return t}});t.exports=S},function(t,e,i){function n(t){var e=t.getZr();return e[p]||(e[p]={})}function o(t,e,i){var n=new c(t.getZr());return n.enable(),n.on("pan",f(a,i)),n.on("zoom",f(s,i)),n}function r(t){h.each(t,function(e,i){e.count||(e.controller.dispose(),delete t[i])})}function a(t,e,i,n,o,r,a){l(t,function(s){return s.panGetRange(t.controller,e,i,n,o,r,a)})}function s(t,e,i,n){l(t,function(o){return o.zoomGetRange(t.controller,e,i,n)})}function l(t,e){var i=[];h.each(t.dataZoomInfos,function(t){var n=e(t);n&&i.push({dataZoomId:t.dataZoomId,start:n[0],end:n[1]})}),t.dispatchAction(i)}function u(t,e){t.dispatchAction({type:"dataZoom",batch:e})}var h=i(1),c=i(79),d=i(83),f=h.curry,p="\0_ec_dataZoom_roams",g={register:function(t,e){var i=n(t),a=e.dataZoomId,s=e.coordId;h.each(i,function(t,i){var n=t.dataZoomInfos;n[a]&&h.indexOf(e.allCoordIds,s)<0&&(delete n[a],t.count--)}),r(i);var l=i[s];l||(l=i[s]={coordId:s,dataZoomInfos:{},count:0},l.controller=o(t,e,l),l.dispatchAction=h.curry(u,t)),l.controller.setContainsPoint(e.containsPoint),d.createOrUpdate(l,"dispatchAction",e.throttleRate,"fixRate"),!l.dataZoomInfos[a]&&l.count++,l.dataZoomInfos[a]=e},unregister:function(t,e){var i=n(t);h.each(i,function(t){t.controller.dispose();var i=t.dataZoomInfos;i[e]&&(delete i[e],t.count--)}),r(i)},shouldRecordRange:function(t,e){if(t&&"dataZoom"===t.type&&t.batch)for(var i=0,n=t.batch.length;i<n;i++)if(t.batch[i].dataZoomId===e)return!1;return!0},generateCoordId:function(t){return t.type+"\0_"+t.id}};t.exports=g},function(t,e,i){i(112),i(40),i(41),i(183),i(184),i(109),i(108)},function(t,e,i){i(190),i(192),i(191);var n=i(2);n.registerProcessor(i(193))},function(t,e,i){"use strict";var n=i(1),o=i(10),r=i(2).extendComponentModel({type:"legend",dependencies:["series"],layoutMode:{type:"box",ignoreSize:!0},init:function(t,e,i){this.mergeDefaultAndTheme(t,i),t.selected=t.selected||{}},mergeOption:function(t){r.superCall(this,"mergeOption",t)},optionUpdated:function(){this._updateData(this.ecModel);var t=this._data;if(t[0]&&"single"===this.get("selectedMode")){for(var e=!1,i=0;i<t.length;i++){var n=t[i].get("name");if(this.isSelected(n)){this.select(n),e=!0;break}}!e&&this.select(t[0].get("name"))}},_updateData:function(t){var e=n.map(this.get("data")||[],function(t){return"string"!=typeof t&&"number"!=typeof t||(t={name:t}),new o(t,this,this.ecModel)},this);this._data=e;var i=n.map(t.getSeries(),function(t){return t.name});t.eachSeries(function(t){if(t.legendDataProvider){var e=t.legendDataProvider();i=i.concat(e.mapArray(e.getName))}}),this._availableNames=i},getData:function(){return this._data},select:function(t){var e=this.option.selected,i=this.get("selectedMode");if("single"===i){var o=this._data;n.each(o,function(t){e[t.get("name")]=!1})}e[t]=!0},unSelect:function(t){"single"!==this.get("selectedMode")&&(this.option.selected[t]=!1)},toggleSelected:function(t){var e=this.option.selected;e.hasOwnProperty(t)||(e[t]=!0),this[e[t]?"unSelect":"select"](t)},isSelected:function(t){var e=this.option.selected;return!(e.hasOwnProperty(t)&&!e[t])&&n.indexOf(this._availableNames,t)>=0},defaultOption:{zlevel:0,z:4,show:!0,orient:"horizontal",left:"center",top:"top",align:"auto",backgroundColor:"rgba(0,0,0,0)",borderColor:"#ccc",borderWidth:0,padding:5,itemGap:10,itemWidth:25,itemHeight:14,inactiveColor:"#ccc",textStyle:{color:"#333"},selectedMode:!0,tooltip:{show:!1}}});t.exports=r},function(t,e,i){function n(t,e){e.dispatchAction({type:"legendToggleSelect",name:t})}function o(t,e,i){var n=i.getZr().storage.getDisplayList()[0];n&&n.useHoverLayer||t.get("legendHoverLink")&&i.dispatchAction({type:"highlight",seriesName:t.name,name:e})}function r(t,e,i){var n=i.getZr().storage.getDisplayList()[0];n&&n.useHoverLayer||t.get("legendHoverLink")&&i.dispatchAction({type:"downplay",seriesName:t.name,name:e})}var a=i(1),s=i(26),l=i(3),u=i(116),h=a.curry;t.exports=i(2).extendComponentView({type:"legend",init:function(){this._symbolTypeStore={}},render:function(t,e,i){var s=this.group;if(s.removeAll(),t.get("show")){var c=t.get("selectedMode"),d=t.get("align");"auto"===d&&(d="right"===t.get("left")&&"vertical"===t.get("orient")?"right":"left");var f={};a.each(t.getData(),function(a){var u=a.get("name");if(""===u||"\n"===u)return void s.add(new l.Group({newline:!0}));var p=e.getSeriesByName(u)[0];if(!f[u])if(p){var g=p.getData(),m=g.getVisual("color");"function"==typeof m&&(m=m(p.getDataParams(0)));var v=g.getVisual("legendSymbol")||"roundRect",y=g.getVisual("symbol"),x=this._createItem(u,a,t,v,y,d,m,c);x.on("click",h(n,u,i)).on("mouseover",h(o,p,null,i)).on("mouseout",h(r,p,null,i)),f[u]=!0}else e.eachRawSeries(function(e){if(!f[u]&&e.legendDataProvider){var s=e.legendDataProvider(),l=s.indexOfName(u);if(l<0)return;var p=s.getItemVisual(l,"color"),g="roundRect",m=this._createItem(u,a,t,g,null,d,p,c);m.on("click",h(n,u,i)).on("mouseover",h(o,e,u,i)).on("mouseout",h(r,e,u,i)),f[u]=!0}},this)},this),u.layout(s,t,i),u.addBackground(s,t)}},_createItem:function(t,e,i,n,o,r,u,h){var c=i.get("itemWidth"),d=i.get("itemHeight"),f=i.get("inactiveColor"),p=i.isSelected(t),g=new l.Group,m=e.getModel("textStyle"),v=e.get("icon"),y=e.getModel("tooltip"),x=y.parentModel;if(n=v||n,g.add(s.createSymbol(n,0,0,c,d,p?u:f)),!v&&o&&(o!==n||"none"==o)){var _=.8*d;"none"===o&&(o="circle"),g.add(s.createSymbol(o,(c-_)/2,(d-_)/2,_,_,p?u:f))}var b="left"===r?c+5:-5,w=r,S=i.get("formatter"),M=t;"string"==typeof S&&S?M=S.replace("{name}",t):"function"==typeof S&&(M=S(t));var T=new l.Text({style:{text:M,x:b,y:d/2,fill:p?m.getTextColor():f,textFont:m.getFont(),textAlign:w,textVerticalAlign:"middle"}});g.add(T);var I=new l.Rect({shape:g.getBoundingRect(),invisible:!0,tooltip:y.get("show")?a.extend({content:t,formatter:x.get("formatter",!0)||function(){return t},formatterParams:{componentType:"legend",legendIndex:i.componentIndex,name:t,$vars:["name"]}},y.option):null});return g.add(I),g.eachChild(function(t){t.silent=!0}),I.silent=!h,this.group.add(g),l.setHoverStyle(g),g}})},function(t,e,i){function n(t,e,i){var n,o={},a="toggleSelected"===t;return i.eachComponent("legend",function(i){a&&null!=n?i[n?"select":"unSelect"](e.name):(i[t](e.name),n=i.isSelected(e.name));var s=i.getData();r.each(s,function(t){var e=t.get("name");if("\n"!==e&&""!==e){var n=i.isSelected(e);e in o?o[e]=o[e]&&n:o[e]=n}})}),{name:e.name,selected:o}}var o=i(2),r=i(1);o.registerAction("legendToggleSelect","legendselectchanged",r.curry(n,"toggleSelected")),o.registerAction("legendSelect","legendselected",r.curry(n,"select")),o.registerAction("legendUnSelect","legendunselected",r.curry(n,"unSelect"))},function(t,e){t.exports=function(t){var e=t.findComponents({mainType:"legend"});e&&e.length&&t.filterSeries(function(t){for(var i=0;i<e.length;i++)if(!e[i].isSelected(t.name))return!1;return!0})}},function(t,e,i){i(197),i(198),i(2).registerPreprocessor(function(t){t.markArea=t.markArea||{}})},function(t,e,i){i(199),i(200),i(2).registerPreprocessor(function(t){t.markLine=t.markLine||{}})},function(t,e,i){i(201),i(202),i(2).registerPreprocessor(function(t){t.markPoint=t.markPoint||{}})},function(t,e,i){t.exports=i(67).extend({type:"markArea",defaultOption:{zlevel:0,z:1,tooltip:{trigger:"item"},animation:!1,label:{normal:{show:!0,position:"top"},emphasis:{show:!0,position:"top"}},itemStyle:{normal:{borderWidth:0}}}})},function(t,e,i){function n(t){return!isNaN(t)&&!isFinite(t)}function o(t,e,i,o){var r=1-t;return n(e[r])&&n(i[r])}function r(t,e){var i=e.coord[0],n=e.coord[1];return!("cartesian2d"!==t.type||!i||!n||!o(1,i,n,t)&&!o(0,i,n,t))||(f.dataFilter(t,{coord:i,x:e.x0,y:e.y0})||f.dataFilter(t,{coord:n,x:e.x1,y:e.y1}))}function a(t,e,i,o,r){var a,s=o.coordinateSystem,l=t.getItemModel(e),u=h.parsePercent(l.get(i[0]),r.getWidth()),c=h.parsePercent(l.get(i[1]),r.getHeight());if(isNaN(u)||isNaN(c)){if(o.getMarkerPosition)a=o.getMarkerPosition(t.getValues(i,e));else{var d=t.get(i[0],e),f=t.get(i[1],e);a=s.dataToPoint([d,f],!0)}if("cartesian2d"===s.type){var p=s.getAxis("x"),g=s.getAxis("y"),d=t.get(i[0],e),f=t.get(i[1],e);n(d)?a[0]=p.toGlobalCoord(p.getExtent()["x0"===i[0]?0:1]):n(f)&&(a[1]=g.toGlobalCoord(g.getExtent()["y0"===i[1]?0:1]))}isNaN(u)||(a[0]=u),isNaN(c)||(a[1]=c)}else a=[u,c];return a}function s(t,e,i){var n,o,a=["x0","y0","x1","y1"];t?(n=l.map(t&&t.dimensions,function(t){var i=e.getData().getDimensionInfo(e.coordDimToDataDim(t)[0])||{};return i.name=t,i}),o=new u(l.map(a,function(t,e){return{name:t,type:n[e%2].type}}),i)):(n=[{name:"value",type:"float"}],o=new u(n,i));var s=l.map(i.get("data"),l.curry(p,e,t,i));t&&(s=l.filter(s,l.curry(r,t)));var h=t?function(t,e,i,n){return t.coord[Math.floor(n/2)][n%2]}:function(t){return t.value};return o.initData(s,null,h),o.hasItemOption=!0,o}var l=i(1),u=i(14),h=i(4),c=i(3),d=i(18),f=i(69),p=function(t,e,i,n){var o=f.dataTransform(t,n[0]),r=f.dataTransform(t,n[1]),a=l.retrieve,s=o.coord,u=r.coord;s[0]=a(s[0],-(1/0)),s[1]=a(s[1],-(1/0)),u[0]=a(u[0],1/0),u[1]=a(u[1],1/0);var h=l.mergeAll([{},o,r]);return h.coord=[o.coord,r.coord],h.x0=o.x,h.y0=o.y,h.x1=r.x,h.y1=r.y,h},g=[["x0","y0"],["x1","y0"],["x1","y1"],["x0","y1"]];i(68).extend({type:"markArea",updateLayout:function(t,e,i){e.eachSeries(function(t){var e=t.markAreaModel;if(e){var n=e.getData();n.each(function(e){var o=l.map(g,function(o){return a(n,e,o,t,i)});n.setItemLayout(e,o);var r=n.getItemGraphicEl(e);r.setShape("points",o)})}},this)},renderSeries:function(t,e,i,n){var o=t.coordinateSystem,r=t.name,u=t.getData(),h=this.markerGroupMap,f=h[r];f||(f=h[r]={group:new c.Group}),this.group.add(f.group),f.__keep=!0;var p=s(o,t,e);e.setData(p),p.each(function(e){p.setItemLayout(e,l.map(g,function(i){return a(p,e,i,t,n)})),p.setItemVisual(e,{color:u.getVisual("color")})}),p.diff(f.__data).add(function(t){var e=new c.Polygon({shape:{points:p.getItemLayout(t)}});p.setItemGraphicEl(t,e),f.group.add(e)}).update(function(t,i){var n=f.__data.getItemGraphicEl(i);c.updateProps(n,{shape:{points:p.getItemLayout(t)}},e,t),f.group.add(n),p.setItemGraphicEl(t,n)}).remove(function(t){var e=f.__data.getItemGraphicEl(t);f.group.remove(e)}).execute(),p.eachItemGraphicEl(function(t,i){var n=p.getItemModel(i),o=n.getModel("label.normal"),r=n.getModel("label.emphasis"),a=p.getItemVisual(i,"color");t.useStyle(l.defaults(n.getModel("itemStyle.normal").getItemStyle(),{fill:d.modifyAlpha(a,.4),stroke:a})),t.hoverStyle=n.getModel("itemStyle.normal").getItemStyle();var s=p.getName(i)||"",u=a||t.style.fill;c.setText(t.style,o,u),t.style.text=l.retrieve(e.getFormattedLabel(i,"normal"),s),c.setText(t.hoverStyle,r,u),t.hoverStyle.text=l.retrieve(e.getFormattedLabel(i,"emphasis"),s),c.setHoverStyle(t,{}),t.dataModel=e}),f.__data=p,f.group.silent=e.get("silent")||t.get("silent")}})},function(t,e,i){t.exports=i(67).extend({type:"markLine",defaultOption:{zlevel:0,z:5,symbol:["circle","arrow"],symbolSize:[8,16],precision:2,tooltip:{trigger:"item"},label:{normal:{show:!0,position:"end"},emphasis:{show:!0}},lineStyle:{normal:{type:"dashed"},emphasis:{width:3}},animationEasing:"linear"}})},function(t,e,i){function n(t){return!isNaN(t)&&!isFinite(t)}function o(t,e,i,o){var r=1-t,a=o.dimensions[t];return n(e[r])&&n(i[r])&&e[t]===i[t]&&o.getAxis(a).containData(e[t])}function r(t,e){if("cartesian2d"===t.type){var i=e[0].coord,n=e[1].coord;if(i&&n&&(o(1,i,n,t)||o(0,i,n,t)))return!0}return c.dataFilter(t,e[0])&&c.dataFilter(t,e[1])}function a(t,e,i,o,r){var a,s=o.coordinateSystem,l=t.getItemModel(e),u=h.parsePercent(l.get("x"),r.getWidth()),c=h.parsePercent(l.get("y"),r.getHeight());if(isNaN(u)||isNaN(c)){if(o.getMarkerPosition)a=o.getMarkerPosition(t.getValues(t.dimensions,e));else{var d=s.dimensions,f=t.get(d[0],e),p=t.get(d[1],e);a=s.dataToPoint([f,p])}if("cartesian2d"===s.type){var g=s.getAxis("x"),m=s.getAxis("y"),d=s.dimensions;n(t.get(d[0],e))?a[0]=g.toGlobalCoord(g.getExtent()[i?0:1]):n(t.get(d[1],e))&&(a[1]=m.toGlobalCoord(m.getExtent()[i?0:1]))}isNaN(u)||(a[0]=u),isNaN(c)||(a[1]=c)}else a=[u,c];t.setItemLayout(e,a)}function s(t,e,i){var n;n=t?l.map(t&&t.dimensions,function(t){var i=e.getData().getDimensionInfo(e.coordDimToDataDim(t)[0])||{};return i.name=t,i}):[{name:"value",type:"float"}];var o=new u(n,i),a=new u(n,i),s=new u([],i),h=l.map(i.get("data"),l.curry(f,e,t,i));t&&(h=l.filter(h,l.curry(r,t)));var d=t?c.dimValueGetter:function(t){return t.value};return o.initData(l.map(h,function(t){return t[0]}),null,d),a.initData(l.map(h,function(t){return t[1]}),null,d),s.initData(l.map(h,function(t){return t[2]})),s.hasItemOption=!0,{from:o,to:a,line:s}}var l=i(1),u=i(14),h=i(4),c=i(69),d=i(95),f=function(t,e,i,n){var o=t.getData(),r=n.type;if(!l.isArray(n)&&("min"===r||"max"===r||"average"===r||null!=n.xAxis||null!=n.yAxis)){var a,s,u;if(null!=n.yAxis||null!=n.xAxis)s=null!=n.yAxis?"y":"x",a=e.getAxis(s),u=l.retrieve(n.yAxis,n.xAxis);else{var h=c.getAxisInfo(n,o,e,t);s=h.valueDataDim,a=h.valueAxis,u=c.numCalculate(o,s,r)}var d="x"===s?0:1,f=1-d,p=l.clone(n),g={};p.type=null,p.coord=[],g.coord=[],p.coord[f]=-(1/0),g.coord[f]=1/0;var m=i.get("precision");m>=0&&"number"==typeof u&&(u=+u.toFixed(m)),p.coord[d]=g.coord[d]=u,n=[p,g,{type:r,valueIndex:n.valueIndex,value:u}]}return n=[c.dataTransform(t,n[0]),c.dataTransform(t,n[1]),l.extend({},n[2])],n[2].type=n[2].type||"",l.merge(n[2],n[0]),l.merge(n[2],n[1]),n};i(68).extend({type:"markLine",updateLayout:function(t,e,i){e.eachSeries(function(t){var e=t.markLineModel;if(e){var n=e.getData(),o=e.__from,r=e.__to;o.each(function(e){a(o,e,!0,t,i),a(r,e,!1,t,i)}),n.each(function(t){n.setItemLayout(t,[o.getItemLayout(t),r.getItemLayout(t)])}),this.markerGroupMap[t.name].updateLayout()}},this)},renderSeries:function(t,e,i,n){function o(e,i,o){var r=e.getItemModel(i);a(e,i,o,t,n),e.setItemVisual(i,{symbolSize:r.get("symbolSize")||x[o?0:1],symbol:r.get("symbol",!0)||y[o?0:1],color:r.get("itemStyle.normal.color")||h.getVisual("color")})}var r=t.coordinateSystem,u=t.name,h=t.getData(),c=this.markerGroupMap,f=c[u];f||(f=c[u]=new d),this.group.add(f.group);var p=s(r,t,e),g=p.from,m=p.to,v=p.line;e.__from=g,e.__to=m,e.setData(v);var y=e.get("symbol"),x=e.get("symbolSize");l.isArray(y)||(y=[y,y]),"number"==typeof x&&(x=[x,x]),p.from.each(function(t){o(g,t,!0),o(m,t,!1)}),v.each(function(t){var e=v.getItemModel(t).get("lineStyle.normal.color");v.setItemVisual(t,{color:e||g.getItemVisual(t,"color")}),v.setItemLayout(t,[g.getItemLayout(t),m.getItemLayout(t)]),v.setItemVisual(t,{fromSymbolSize:g.getItemVisual(t,"symbolSize"),fromSymbol:g.getItemVisual(t,"symbol"),toSymbolSize:m.getItemVisual(t,"symbolSize"),toSymbol:m.getItemVisual(t,"symbol")})}),f.updateData(v),p.line.eachItemGraphicEl(function(t,i){t.traverse(function(t){t.dataModel=e})}),f.__keep=!0,f.group.silent=e.get("silent")||t.get("silent")}})},function(t,e,i){t.exports=i(67).extend({type:"markPoint",defaultOption:{zlevel:0,z:5,symbol:"pin",symbolSize:50,tooltip:{trigger:"item"},label:{normal:{show:!0,position:"inside"},emphasis:{show:!0}},itemStyle:{normal:{borderWidth:2}}}})},function(t,e,i){function n(t,e,i){var n=e.coordinateSystem;t.each(function(o){var r,a=t.getItemModel(o),l=s.parsePercent(a.get("x"),i.getWidth()),u=s.parsePercent(a.get("y"),i.getHeight());if(isNaN(l)||isNaN(u)){if(e.getMarkerPosition)r=e.getMarkerPosition(t.getValues(t.dimensions,o));else if(n){var h=t.get(n.dimensions[0],o),c=t.get(n.dimensions[1],o);r=n.dataToPoint([h,c])}}else r=[l,u];isNaN(l)||(r[0]=l),isNaN(u)||(r[1]=u),t.setItemLayout(o,r)})}function o(t,e,i){var n;n=t?a.map(t&&t.dimensions,function(t){var i=e.getData().getDimensionInfo(e.coordDimToDataDim(t)[0])||{};return i.name=t,i}):[{name:"value",type:"float"}];var o=new l(n,i),r=a.map(i.get("data"),a.curry(u.dataTransform,e));return t&&(r=a.filter(r,a.curry(u.dataFilter,t))),o.initData(r,null,t?u.dimValueGetter:function(t){return t.value}),o}var r=i(39),a=i(1),s=i(4),l=i(14),u=i(69);i(68).extend({type:"markPoint",updateLayout:function(t,e,i){e.eachSeries(function(t){var e=t.markPointModel;e&&(n(e.getData(),t,i),this.markerGroupMap[t.name].updateLayout(e))},this)},renderSeries:function(t,e,i,a){var s=t.coordinateSystem,l=t.name,u=t.getData(),h=this.markerGroupMap,c=h[l];c||(c=h[l]=new r);
+var d=o(s,t,e);e.setData(d),n(e.getData(),t,a),d.each(function(t){var i=d.getItemModel(t),n=i.getShallow("symbolSize");"function"==typeof n&&(n=n(e.getRawValue(t),e.getDataParams(t))),d.setItemVisual(t,{symbolSize:n,color:i.get("itemStyle.normal.color")||u.getVisual("color"),symbol:i.getShallow("symbol")})}),c.updateData(d),this.group.add(c.group),d.eachItemGraphicEl(function(t){t.traverse(function(t){t.dataModel=e})}),c.__keep=!0,c.group.silent=e.get("silent")||t.get("silent")}})},function(t,e,i){"use strict";var n=i(2),o=i(3),r=i(13);n.extendComponentModel({type:"title",layoutMode:{type:"box",ignoreSize:!0},defaultOption:{zlevel:0,z:6,show:!0,text:"",target:"blank",subtext:"",subtarget:"blank",left:0,top:0,backgroundColor:"rgba(0,0,0,0)",borderColor:"#ccc",borderWidth:0,padding:5,itemGap:10,textStyle:{fontSize:18,fontWeight:"bolder",color:"#333"},subtextStyle:{color:"#aaa"}}}),n.extendComponentView({type:"title",render:function(t,e,i){if(this.group.removeAll(),t.get("show")){var n=this.group,a=t.getModel("textStyle"),s=t.getModel("subtextStyle"),l=t.get("textAlign"),u=t.get("textBaseline"),h=new o.Text({style:{text:t.get("text"),textFont:a.getFont(),fill:a.getTextColor()},z2:10}),c=h.getBoundingRect(),d=t.get("subtext"),f=new o.Text({style:{text:d,textFont:s.getFont(),fill:s.getTextColor(),y:c.height+t.get("itemGap"),textBaseline:"top"},z2:10}),p=t.get("link"),g=t.get("sublink");h.silent=!p,f.silent=!g,p&&h.on("click",function(){window.open(p,"_"+t.get("target"))}),g&&f.on("click",function(){window.open(g,"_"+t.get("subtarget"))}),n.add(h),d&&n.add(f);var m=n.getBoundingRect(),v=t.getBoxLayoutParams();v.width=m.width,v.height=m.height;var y=r.getLayoutRect(v,{width:i.getWidth(),height:i.getHeight()},t.get("padding"));l||(l=t.get("left")||t.get("right"),"middle"===l&&(l="center"),"right"===l?y.x+=y.width:"center"===l&&(y.x+=y.width/2)),u||(u=t.get("top")||t.get("bottom"),"center"===u&&(u="middle"),"bottom"===u?y.y+=y.height:"middle"===u&&(y.y+=y.height/2),u=u||"top"),n.attr("position",[y.x,y.y]);var x={textAlign:l,textVerticalAlign:u};h.setStyle(x),f.setStyle(x),m=n.getBoundingRect();var _=y.margin,b=t.getItemStyle(["color","opacity"]);b.fill=t.get("backgroundColor");var w=new o.Rect({shape:{x:m.x-_[3],y:m.y-_[0],width:m.width+_[1]+_[3],height:m.height+_[0]+_[2]},style:b,silent:!0});o.subPixelOptimizeRect(w),n.add(w)}}})},function(t,e,i){i(205),i(206),i(211),i(209),i(207),i(208),i(210)},function(t,e,i){var n=i(25),o=i(1),r=i(2).extendComponentModel({type:"toolbox",layoutMode:{type:"box",ignoreSize:!0},mergeDefaultAndTheme:function(t){r.superApply(this,"mergeDefaultAndTheme",arguments),o.each(this.option.feature,function(t,e){var i=n.get(e);i&&o.merge(t,i.defaultOption)})},defaultOption:{show:!0,z:6,zlevel:0,orient:"horizontal",left:"right",top:"top",backgroundColor:"transparent",borderColor:"#ccc",borderWidth:0,padding:5,itemSize:15,itemGap:8,showTitle:!0,iconStyle:{normal:{borderColor:"#666",color:"none"},emphasis:{borderColor:"#3E98C5"}}}});t.exports=r},function(t,e,i){(function(e){function n(t){return 0===t.indexOf("my")}var o=i(25),r=i(1),a=i(3),s=i(10),l=i(45),u=i(116),h=i(16);t.exports=i(2).extendComponentView({type:"toolbox",render:function(t,e,i,c){function d(r,a){var l,u=y[r],h=y[a],d=m[u],p=new s(d,t,t.ecModel);if(u&&!h){if(n(u))l={model:p,onclick:p.option.onclick,featureName:u};else{var g=o.get(u);if(!g)return;l=new g(p,e,i)}v[u]=l}else{if(l=v[h],!l)return;l.model=p,l.ecModel=e,l.api=i}return!u&&h?void(l.dispose&&l.dispose(e,i)):!p.get("show")||l.unusable?void(l.remove&&l.remove(e,i)):(f(p,l,u),p.setIconStatus=function(t,e){var i=this.option,n=this.iconPaths;i.iconStatus=i.iconStatus||{},i.iconStatus[t]=e,n[t]&&n[t].trigger(e)},void(l.render&&l.render(p,e,i,c)))}function f(n,o,s){var l=n.getModel("iconStyle"),u=o.getIcons?o.getIcons():n.get("icon"),h=n.get("title")||{};if("string"==typeof u){var c=u,d=h;u={},h={},u[s]=c,h[s]=d}var f=n.iconPaths={};r.each(u,function(s,u){var c=l.getModel("normal").getItemStyle(),d=l.getModel("emphasis").getItemStyle(),m={x:-g/2,y:-g/2,width:g,height:g},v=0===s.indexOf("image://")?(m.image=s.slice(8),new a.Image({style:m})):a.makePath(s.replace("path://",""),{style:c,hoverStyle:d,rectHover:!0},m,"center");a.setHoverStyle(v),t.get("showTitle")&&(v.__title=h[u],v.on("mouseover",function(){var t=l.getModel("emphasis").getItemStyle();v.setStyle({text:h[u],textPosition:t.textPosition||"bottom",textFill:t.fill||t.stroke||"#000",textAlign:t.textAlign||"center"})}).on("mouseout",function(){v.setStyle({textFill:null})})),v.trigger(n.get("iconStatus."+u)||"normal"),p.add(v),v.on("click",r.bind(o.onclick,o,e,i,u)),f[u]=v})}var p=this.group;if(p.removeAll(),t.get("show")){var g=+t.get("itemSize"),m=t.get("feature")||{},v=this._features||(this._features={}),y=[];r.each(m,function(t,e){y.push(e)}),new l(this._featureNames||[],y).add(d).update(d).remove(r.curry(d,null)).execute(),this._featureNames=y,u.layout(p,t,i),u.addBackground(p,t),p.eachChild(function(t){var e=t.__title,n=t.hoverStyle;if(n&&e){var o=h.getBoundingRect(e,n.font),r=t.position[0]+p.position[0],a=t.position[1]+p.position[1]+g,s=!1;a+o.height>i.getHeight()&&(n.textPosition="top",s=!0);var l=s?-5-o.height:g+8;r+o.width/2>i.getWidth()?(n.textPosition=["100%",l],n.textAlign="right"):r-o.width/2<0&&(n.textPosition=[0,l],n.textAlign="left")}})}},updateView:function(t,e,i,n){r.each(this._features,function(t){t.updateView&&t.updateView(t.model,e,i,n)})},updateLayout:function(t,e,i,n){r.each(this._features,function(t){t.updateLayout&&t.updateLayout(t.model,e,i,n)})},remove:function(t,e){r.each(this._features,function(i){i.remove&&i.remove(t,e)}),this.group.removeAll()},dispose:function(t,e){r.each(this._features,function(i){i.dispose&&i.dispose(t,e)})}})}).call(e,i(217))},function(t,e,i){function n(t){var e={},i=[],n=[];return t.eachRawSeries(function(t){var o=t.coordinateSystem;if(!o||"cartesian2d"!==o.type&&"polar"!==o.type)i.push(t);else{var r=o.getBaseAxis();if("category"===r.type){var a=r.dim+"_"+r.index;e[a]||(e[a]={categoryAxis:r,valueAxis:o.getOtherAxis(r),series:[]},n.push({axisDim:r.dim,axisIndex:r.index})),e[a].series.push(t)}else i.push(t)}}),{seriesGroupByCategoryAxis:e,other:i,meta:n}}function o(t){var e=[];return p.each(t,function(t,i){var n=t.categoryAxis,o=t.valueAxis,r=o.dim,a=[" "].concat(p.map(t.series,function(t){return t.name})),s=[n.model.getCategories()];p.each(t.series,function(t){s.push(t.getRawData().mapArray(r,function(t){return t}))});for(var l=[a.join(v)],u=0;u<s[0].length;u++){for(var h=[],c=0;c<s.length;c++)h.push(s[c][u]);l.push(h.join(v))}e.push(l.join("\n"))}),e.join("\n\n"+m+"\n\n")}function r(t){return p.map(t,function(t){var e=t.getRawData(),i=[t.name],n=[];return e.each(e.dimensions,function(){for(var t=arguments.length,o=arguments[t-1],r=e.getName(o),a=0;a<t-1;a++)n[a]=arguments[a];i.push((r?r+v:"")+n.join(v))}),i.join("\n")}).join("\n\n"+m+"\n\n")}function a(t){var e=n(t);return{value:p.filter([o(e.seriesGroupByCategoryAxis),r(e.other)],function(t){return t.replace(/[\n\t\s]/g,"")}).join("\n\n"+m+"\n\n"),meta:e.meta}}function s(t){return t.replace(/^\s\s*/,"").replace(/\s\s*$/,"")}function l(t){var e=t.slice(0,t.indexOf("\n"));if(e.indexOf(v)>=0)return!0}function u(t){for(var e=t.split(/\n+/g),i=s(e.shift()).split(y),n=[],o=p.map(i,function(t){return{name:t,data:[]}}),r=0;r<e.length;r++){var a=s(e[r]).split(y);n.push(a.shift());for(var l=0;l<a.length;l++)o[l]&&(o[l].data[r]=a[l])}return{series:o,categories:n}}function h(t){for(var e=t.split(/\n+/g),i=s(e.shift()),n=[],o=0;o<e.length;o++){var r,a=s(e[o]).split(y),l="",u=!1;isNaN(a[0])?(u=!0,l=a[0],a=a.slice(1),n[o]={name:l,value:[]},r=n[o].value):r=n[o]=[];for(var h=0;h<a.length;h++)r.push(+a[h]);1===r.length&&(u?n[o].value=r[0]:n[o]=r[0])}return{name:i,data:n}}function c(t,e){var i=t.split(new RegExp("\n*"+m+"\n*","g")),n={series:[]};return p.each(i,function(t,i){if(l(t)){var o=u(t),r=e[i],a=r.axisDim+"Axis";r&&(n[a]=n[a]||[],n[a][r.axisIndex]={data:o.categories},n.series=n.series.concat(o.series))}else{var o=h(t);n.series.push(o)}}),n}function d(t){this._dom=null,this.model=t}function f(t,e){return p.map(t,function(t,i){var n=e&&e[i];return p.isObject(n)&&!p.isArray(n)?(p.isObject(t)&&!p.isArray(t)&&(t=t.value),p.defaults({value:t},n)):t})}var p=i(1),g=i(24),m=new Array(60).join("-"),v="\t",y=new RegExp("["+v+"]+","g");d.defaultOption={show:!0,readOnly:!1,optionToContent:null,contentToOption:null,icon:"M17.5,17.3H33 M17.5,17.3H33 M45.4,29.5h-28 M11.5,2v56H51V14.8L38.4,2H11.5z M38.4,2.2v12.7H51 M45.4,41.7h-28",title:"数据视图",lang:["数据视图","关闭","刷新"],backgroundColor:"#fff",textColor:"#000",textareaColor:"#fff",textareaBorderColor:"#333",buttonColor:"#c23531",buttonTextColor:"#fff"},d.prototype.onclick=function(t,e){function i(){n.removeChild(r),M._dom=null}var n=e.getDom(),o=this.model;this._dom&&n.removeChild(this._dom);var r=document.createElement("div");r.style.cssText="position:absolute;left:5px;top:5px;bottom:5px;right:5px;",r.style.backgroundColor=o.get("backgroundColor")||"#fff";var s=document.createElement("h4"),l=o.get("lang")||[];s.innerHTML=l[0]||o.get("title"),s.style.cssText="margin: 10px 20px;",s.style.color=o.get("textColor");var u=document.createElement("div"),h=document.createElement("textarea");u.style.cssText="display:block;width:100%;overflow:hidden;";var d=o.get("optionToContent"),f=o.get("contentToOption"),m=a(t);if("function"==typeof d){var y=d(e.getOption());"string"==typeof y?u.innerHTML=y:p.isDom(y)&&u.appendChild(y)}else u.appendChild(h),h.readOnly=o.get("readOnly"),h.style.cssText="width:100%;height:100%;font-family:monospace;font-size:14px;line-height:1.6rem;",h.style.color=o.get("textColor"),h.style.borderColor=o.get("textareaBorderColor"),h.style.backgroundColor=o.get("textareaColor"),h.value=m.value;var x=m.meta,_=document.createElement("div");_.style.cssText="position:absolute;bottom:0;left:0;right:0;";var b="float:right;margin-right:20px;border:none;cursor:pointer;padding:2px 5px;font-size:12px;border-radius:3px",w=document.createElement("div"),S=document.createElement("div");b+=";background-color:"+o.get("buttonColor"),b+=";color:"+o.get("buttonTextColor");var M=this;g.addEventListener(w,"click",i),g.addEventListener(S,"click",function(){var t;try{t="function"==typeof f?f(u,e.getOption()):c(h.value,x)}catch(n){throw i(),new Error("Data view format error "+n)}t&&e.dispatchAction({type:"changeDataView",newOption:t}),i()}),w.innerHTML=l[1],S.innerHTML=l[2],S.style.cssText=b,w.style.cssText=b,!o.get("readOnly")&&_.appendChild(S),_.appendChild(w),g.addEventListener(h,"keydown",function(t){if(9===(t.keyCode||t.which)){var e=this.value,i=this.selectionStart,n=this.selectionEnd;this.value=e.substring(0,i)+v+e.substring(n),this.selectionStart=this.selectionEnd=i+1,g.stop(t)}}),r.appendChild(s),r.appendChild(u),r.appendChild(_),u.style.height=n.clientHeight-80+"px",n.appendChild(r),this._dom=r},d.prototype.remove=function(t,e){this._dom&&e.getDom().removeChild(this._dom)},d.prototype.dispose=function(t,e){this.remove(t,e)},i(25).register("dataView",d),i(2).registerAction({type:"changeDataView",event:"dataViewChanged",update:"prepareAndUpdate"},function(t,e){var i=[];p.each(t.newOption.series,function(t){var n=e.getSeriesByName(t.name)[0];if(n){var o=n.get("data");i.push({name:t.name,data:f(t.data,o)})}else i.push(p.extend({type:"scatter"},t))}),e.mergeOption(p.defaults({series:i},t.newOption))}),t.exports=d},function(t,e,i){"use strict";function n(t,e,i){(this._brushController=new l(i.getZr())).on("brush",s.bind(this._onBrush,this)).mount(),this._isZoomActive}function o(t){var e={};return s.each(["xAxisIndex","yAxisIndex"],function(i){e[i]=t[i],null==e[i]&&(e[i]="all"),(e[i]===!1||"none"===e[i])&&(e[i]=[])}),e}function r(t,e){t.setIconStatus("back",h.count(e)>1?"emphasis":"normal")}function a(t,e,i,n){var r=i._isZoomActive;n&&"takeGlobalCursor"===n.type&&(r="dataZoomSelect"===n.key&&n.dataZoomSelectActive),i._isZoomActive=r,t.setIconStatus("zoom",r?"emphasis":"normal");var a=u.makeCoordInfoList(o(t.option),e),s=a.xAxisHas&&!a.yAxisHas?"lineX":!a.xAxisHas&&a.yAxisHas?"lineY":"rect";i._brushController.setPanels(u.makePanelOpts(a)).enableBrush(!!r&&{brushType:s,brushStyle:{lineWidth:0,fill:"rgba(0,0,0,0.2)"}})}var s=i(1),l=i(113),u=i(114),h=i(111),c=s.each;i(188);var d="\0_ec_\0toolbox-dataZoom_";n.defaultOption={show:!0,icon:{zoom:"M0,13.5h26.9 M13.5,26.9V0 M32.1,13.5H58V58H13.5 V32.1",back:"M22,1.4L9.9,13.5l12.3,12.3 M10.3,13.5H54.9v44.6 H10.3v-26"},title:{zoom:"区域缩放",back:"区域缩放还原"}};var f=n.prototype;f.render=function(t,e,i,n){this.model=t,this.ecModel=e,this.api=i,a(t,e,this,n),r(t,e)},f.onclick=function(t,e,i){p[i].call(this)},f.remove=function(t,e){this._brushController.unmount()},f.dispose=function(t,e){this._brushController.dispose()};var p={zoom:function(){var t=!this._isZoomActive;this.api.dispatchAction({type:"takeGlobalCursor",key:"dataZoomSelect",dataZoomSelectActive:t})},back:function(){this._dispatchZoomAction(h.pop(this.ecModel))}};f._onBrush=function(t,e){function i(t,e,i){var o=n(t,i[t],a);o&&(r[o.id]={dataZoomId:o.id,startValue:e[0],endValue:e[1]})}function n(t,e,i){var n;return i.eachComponent({mainType:"dataZoom",subType:"select"},function(o,r){var a=o.get(t+"Index");null!=a&&i.getComponent(t,a)===e&&(n=o)}),n}if(e.isEnd&&t.length){var r={},a=this.ecModel;this._brushController.updateCovers([]);var s=u.makeCoordInfoList(o(this.model.option),a),l=[];u.parseOutputRanges(t,s,a,l);var c=t[0],d=l[0],f=c.coordRange,p=c.brushType;if(d&&f)if("rect"===p)i("xAxis",f[0],d),i("yAxis",f[1],d);else{var g={lineX:"xAxis",lineY:"yAxis"};i(g[p],f,d)}h.push(a,r),this._dispatchZoomAction(r)}},f._dispatchZoomAction=function(t){var e=[];c(t,function(t,i){e.push(s.clone(t))}),e.length&&this.api.dispatchAction({type:"dataZoom",from:this.uid,batch:e})},i(25).register("dataZoom",n),i(2).registerPreprocessor(function(t){function e(t,e){if(e){var o=t+"Index",r=e[o];null==r||"all"==r||s.isArray(r)||(r=r===!1||"none"===r?[]:[r]),i(t,function(e,i){if(null==r||"all"==r||s.indexOf(r,i)!==-1){var a={type:"select",$fromToolbox:!0,id:d+t+i};a[o]=i,n.push(a)}})}}function i(e,i){var n=t[e];s.isArray(n)||(n=n?[n]:[]),c(n,i)}if(t){var n=t.dataZoom||(t.dataZoom=[]);s.isArray(n)||(t.dataZoom=n=[n]);var o=t.toolbox;if(o&&(s.isArray(o)&&(o=o[0]),o&&o.feature)){var r=o.feature.dataZoom;e("xAxis",r),e("yAxis",r)}}}),t.exports=n},function(t,e,i){"use strict";function n(t){this.model=t}var o=i(1);n.defaultOption={show:!0,type:[],icon:{line:"M4.1,28.9h7.1l9.3-22l7.4,38l9.7-19.7l3,12.8h14.9M4.1,58h51.4",bar:"M6.7,22.9h10V48h-10V22.9zM24.9,13h10v35h-10V13zM43.2,2h10v46h-10V2zM3.1,58h53.7",stack:"M8.2,38.4l-8.4,4.1l30.6,15.3L60,42.5l-8.1-4.1l-21.5,11L8.2,38.4z M51.9,30l-8.1,4.2l-13.4,6.9l-13.9-6.9L8.2,30l-8.4,4.2l8.4,4.2l22.2,11l21.5-11l8.1-4.2L51.9,30z M51.9,21.7l-8.1,4.2L35.7,30l-5.3,2.8L24.9,30l-8.4-4.1l-8.3-4.2l-8.4,4.2L8.2,30l8.3,4.2l13.9,6.9l13.4-6.9l8.1-4.2l8.1-4.1L51.9,21.7zM30.4,2.2L-0.2,17.5l8.4,4.1l8.3,4.2l8.4,4.2l5.5,2.7l5.3-2.7l8.1-4.2l8.1-4.2l8.1-4.1L30.4,2.2z",tiled:"M2.3,2.2h22.8V25H2.3V2.2z M35,2.2h22.8V25H35V2.2zM2.3,35h22.8v22.8H2.3V35z M35,35h22.8v22.8H35V35z"},title:{line:"切换为折线图",bar:"切换为柱状图",stack:"切换为堆叠",tiled:"切换为平铺"},option:{},seriesIndex:{}};var r=n.prototype;r.getIcons=function(){var t=this.model,e=t.get("icon"),i={};return o.each(t.get("type"),function(t){e[t]&&(i[t]=e[t])}),i};var a={line:function(t,e,i,n){if("bar"===t)return o.merge({id:e,type:"line",data:i.get("data"),stack:i.get("stack"),markPoint:i.get("markPoint"),markLine:i.get("markLine")},n.get("option.line")||{},!0)},bar:function(t,e,i,n){if("line"===t)return o.merge({id:e,type:"bar",data:i.get("data"),stack:i.get("stack"),markPoint:i.get("markPoint"),markLine:i.get("markLine")},n.get("option.bar")||{},!0)},stack:function(t,e,i,n){if("line"===t||"bar"===t)return o.merge({id:e,stack:"__ec_magicType_stack__"},n.get("option.stack")||{},!0)},tiled:function(t,e,i,n){if("line"===t||"bar"===t)return o.merge({id:e,stack:""},n.get("option.tiled")||{},!0)}},s=[["line","bar"],["stack","tiled"]];r.onclick=function(t,e,i){var n=this.model,r=n.get("seriesIndex."+i);if(a[i]){var l={series:[]},u=function(e){var r=e.subType,s=e.id,u=a[i](r,s,e,n);u&&(o.defaults(u,e.option),l.series.push(u));var h=e.coordinateSystem;if(h&&"cartesian2d"===h.type&&("line"===i||"bar"===i)){var c=h.getAxesByScale("ordinal")[0];if(c){var d=c.dim,f=d+"Axis",p=t.queryComponents({mainType:f,index:e.get(name+"Index"),id:e.get(name+"Id")})[0],g=p.componentIndex;l[f]=l[f]||[];for(var m=0;m<=g;m++)l[f][g]=l[f][g]||{};l[f][g].boundaryGap="bar"===i}}};o.each(s,function(t){o.indexOf(t,i)>=0&&o.each(t,function(t){n.setIconStatus(t,"normal")})}),n.setIconStatus(i,"emphasis"),t.eachComponent({mainType:"series",query:null==r?null:{seriesIndex:r}},u),e.dispatchAction({type:"changeMagicType",currentType:i,newOption:l})}};var l=i(2);l.registerAction({type:"changeMagicType",event:"magicTypeChanged",update:"prepareAndUpdate"},function(t,e){e.mergeOption(t.newOption)}),i(25).register("magicType",n),t.exports=n},function(t,e,i){"use strict";function n(t){this.model=t}var o=i(111);n.defaultOption={show:!0,icon:"M3.8,33.4 M47,18.9h9.8V8.7 M56.3,20.1 C52.1,9,40.5,0.6,26.8,2.1C12.6,3.7,1.6,16.2,2.1,30.6 M13,41.1H3.1v10.2 M3.7,39.9c4.2,11.1,15.8,19.5,29.5,18 c14.2-1.6,25.2-14.1,24.7-28.5",title:"还原"};var r=n.prototype;r.onclick=function(t,e,i){o.clear(t),e.dispatchAction({type:"restore",from:this.uid})},i(25).register("restore",n),i(2).registerAction({type:"restore",event:"restore",update:"prepareAndUpdate"},function(t,e){e.resetOption("recreate")}),t.exports=n},function(t,e,i){function n(t){this.model=t}var o=i(11);n.defaultOption={show:!0,icon:"M4.7,22.9L29.3,45.5L54.7,23.4M4.6,43.6L4.6,58L53.8,58L53.8,43.6M29.2,45.1L29.2,0",title:"保存为图片",type:"png",name:"",excludeComponents:["toolbox"],pixelRatio:1,lang:["右键另存为图片"]},n.prototype.unusable=!o.canvasSupported;var r=n.prototype;r.onclick=function(t,e){var i=this.model,n=i.get("name")||t.get("title.0.text")||"echarts",o=document.createElement("a"),r=i.get("type",!0)||"png";o.download=n+"."+r,o.target="_blank";var a=e.getConnectedDataURL({type:r,backgroundColor:i.get("backgroundColor",!0)||t.get("backgroundColor")||"#fff",excludeComponents:i.get("excludeComponents"),pixelRatio:i.get("pixelRatio")});if(o.href=a,"function"==typeof MouseEvent){var s=new MouseEvent("click",{view:window,bubbles:!0,cancelable:!1});o.dispatchEvent(s)}else{var l=i.get("lang"),u='<body style="margin:0;"><img src="'+a+'" style="max-width:100%;" title="'+(l&&l[0]||"")+'" /></body>',h=window.open();h.document.write(u)}},i(25).register("saveAsImage",n),t.exports=n},function(t,e,i){i(214),i(215),i(2).registerAction({type:"showTip",event:"showTip",update:"none"},function(){}),i(2).registerAction({type:"hideTip",event:"hideTip",update:"none"},function(){})},function(t,e,i){function n(t){var e="cubic-bezier(0.23, 1, 0.32, 1)",i="left "+t+"s "+e+",top "+t+"s "+e;return s.map(p,function(t){return t+"transition:"+i}).join(";")}function o(t){var e=[],i=t.get("fontSize"),n=t.getTextColor();return n&&e.push("color:"+n),e.push("font:"+t.getFont()),i&&e.push("line-height:"+Math.round(3*i/2)+"px"),c(["decoration","align"],function(i){var n=t.get(i);n&&e.push("text-"+i+":"+n)}),e.join(";")}function r(t){t=t;var e=[],i=t.get("transitionDuration"),r=t.get("backgroundColor"),a=t.getModel("textStyle"),s=t.get("padding");return i&&e.push(n(i)),r&&(f.canvasSupported?e.push("background-Color:"+r):(e.push("background-Color:#"+l.toHex(r)),e.push("filter:alpha(opacity=70)"))),c(["width","color","radius"],function(i){var n="border-"+i,o=d(n),r=t.get(o);null!=r&&e.push(n+":"+r+("color"===i?"":"px"))}),e.push(o(a)),null!=s&&e.push("padding:"+h.normalizeCssArray(s).join("px ")+"px"),e.join(";")+";"}function a(t,e){var i=document.createElement("div"),n=e.getZr();this.el=i,this._x=e.getWidth()/2,this._y=e.getHeight()/2,t.appendChild(i),this._container=t,this._show=!1,this._hideTimeout;var o=this;i.onmouseenter=function(){o.enterable&&(clearTimeout(o._hideTimeout),o._show=!0),o._inContent=!0},i.onmousemove=function(e){if(e=e||window.event,!o.enterable){var i=n.handler;u.normalizeEvent(t,e,!0),i.dispatch("mousemove",e)}},i.onmouseleave=function(){o.enterable&&o._show&&o.hideLater(o._hideDelay),o._inContent=!1}}var s=i(1),l=i(18),u=i(24),h=i(9),c=s.each,d=h.toCamelCase,f=i(11),p=["","-webkit-","-moz-","-o-"],g="position:absolute;display:block;border-style:solid;white-space:nowrap;z-index:9999999;";a.prototype={constructor:a,enterable:!0,update:function(){var t=this._container,e=t.currentStyle||document.defaultView.getComputedStyle(t),i=t.style;"absolute"!==i.position&&"absolute"!==e.position&&(i.position="relative")},show:function(t){clearTimeout(this._hideTimeout);var e=this.el;e.style.cssText=g+r(t)+";left:"+this._x+"px;top:"+this._y+"px;"+(t.get("extraCssText")||""),e.style.display=e.innerHTML?"block":"none",this._show=!0},setContent:function(t){var e=this.el;e.innerHTML=t,e.style.display=t?"block":"none"},moveTo:function(t,e){var i=this.el.style;i.left=t+"px",i.top=e+"px",this._x=t,this._y=e},hide:function(){this.el.style.display="none",this._show=!1},hideLater:function(t){!this._show||this._inContent&&this.enterable||(t?(this._hideDelay=t,this._show=!1,this._hideTimeout=setTimeout(s.bind(this.hide,this),t)):this.hide())},isShow:function(){return this._show}},t.exports=a},function(t,e,i){i(2).extendComponentModel({type:"tooltip",defaultOption:{zlevel:0,z:8,show:!0,showContent:!0,trigger:"item",triggerOn:"mousemove",alwaysShowContent:!1,showDelay:0,hideDelay:100,transitionDuration:.4,enterable:!1,backgroundColor:"rgba(50,50,50,0.7)",borderColor:"#333",borderRadius:4,borderWidth:0,padding:5,extraCssText:"",axisPointer:{type:"line",axis:"auto",animation:!0,animationDurationUpdate:200,animationEasingUpdate:"exponentialOut",lineStyle:{color:"#555",width:1,type:"solid"},crossStyle:{color:"#555",width:1,type:"dashed",textStyle:{}},shadowStyle:{color:"rgba(150,150,150,0.3)"}},textStyle:{color:"#fff",fontSize:14}}})},function(t,e,i){function n(t,e){if(!t||!e)return!1;var i=g.round;return i(t[0])===i(e[0])&&i(t[1])===i(e[1])}function o(t,e,i,n){return{x1:t,y1:e,x2:i,y2:n}}function r(t,e,i,n){return{x:t,y:e,width:i,height:n}}function a(t,e,i,n,o,r){return{cx:t,cy:e,r0:i,r:n,startAngle:o,endAngle:r,clockwise:!0}}function s(t,e,i,n,o){var r=i.clientWidth,a=i.clientHeight,s=20;return t+r+s>n?t-=r+s:t+=s,e+a+s>o?e-=a+s:e+=s,[t,e]}function l(t,e,i){var n=i.clientWidth,o=i.clientHeight,r=5,a=0,s=0,l=e.width,u=e.height;switch(t){case"inside":a=e.x+l/2-n/2,s=e.y+u/2-o/2;break;case"top":a=e.x+l/2-n/2,s=e.y-o-r;break;case"bottom":a=e.x+l/2-n/2,s=e.y+u+r;break;case"left":a=e.x-n-r,s=e.y+u/2-o/2;break;case"right":a=e.x+l+r,s=e.y+u/2-o/2}return[a,s]}function u(t,e,i,n,o,r,a){var u=a.getWidth(),h=a.getHeight(),c=r&&r.getBoundingRect().clone();if(r&&c.applyTransform(r.transform),"function"==typeof t&&(t=t([e,i],o,n.el,c)),f.isArray(t))e=v(t[0],u),i=v(t[1],h);else if("string"==typeof t&&r){var d=l(t,c,n.el);e=d[0],i=d[1]}else{var d=s(e,i,n.el,u,h);e=d[0],i=d[1]}n.moveTo(e,i)}function h(t){var e=t.coordinateSystem,i=t.get("tooltip.trigger",!0);return!(!e||"cartesian2d"!==e.type&&"polar"!==e.type&&"singleAxis"!==e.type||"item"===i)}var c=i(213),d=i(3),f=i(1),p=i(9),g=i(4),m=i(7),v=g.parsePercent,y=i(11),x=i(10);i(2).extendComponentView({type:"tooltip",_axisPointers:{},init:function(t,e){if(!y.node){var i=new c(e.getDom(),e);this._tooltipContent=i,e.on("showTip",this._manuallyShowTip,this),e.on("hideTip",this._manuallyHideTip,this)}},render:function(t,e,i){if(!y.node){this.group.removeAll(),this._axisPointers={},this._tooltipModel=t,this._ecModel=e,this._api=i,this._lastHover={};var n=this._tooltipContent;n.update(),n.enterable=t.get("enterable"),this._alwaysShowContent=t.get("alwaysShowContent"),this._seriesGroupByAxis=this._prepareAxisTriggerData(t,e);var o=this._crossText;o&&this.group.add(o);var r=t.get("triggerOn");if(null!=this._lastX&&null!=this._lastY&&"none"!==r){var a=this;clearTimeout(this._refreshUpdateTimeout),this._refreshUpdateTimeout=setTimeout(function(){a._manuallyShowTip({x:a._lastX,y:a._lastY})})}var s=this._api.getZr();s.off("click",this._tryShow),s.off("mousemove",this._mousemove),s.off("mouseout",this._hide),s.off("globalout",this._hide),"click"===r?s.on("click",this._tryShow,this):"mousemove"===r&&(s.on("mousemove",this._mousemove,this),s.on("mouseout",this._hide,this),s.on("globalout",this._hide,this))}},_mousemove:function(t){var e=this._tooltipModel.get("showDelay"),i=this;clearTimeout(this._showTimeout),e>0?this._showTimeout=setTimeout(function(){i._tryShow(t)},e):this._tryShow(t)},_manuallyShowTip:function(t){if(t.from!==this.uid){var e=this._ecModel,i=t.seriesIndex,n=e.getSeriesByIndex(i),o=this._api;if(null==t.x||null==t.y){if(n||e.eachSeries(function(t){h(t)&&!n&&(n=t)}),n){var r=n.getData(),a=m.queryDataIndex(r,t);if(null==a||f.isArray(a))return;var s,l,u=r.getItemGraphicEl(a),c=n.coordinateSystem;if(n.getTooltipPosition){var d=n.getTooltipPosition(a)||[];s=d[0],l=d[1]}else if(c&&c.dataToPoint){var d=c.dataToPoint(r.getValues(f.map(c.dimensions,function(t){return n.coordDimToDataDim(t)[0]}),a,!0));s=d&&d[0],l=d&&d[1]}else if(u){var p=u.getBoundingRect().clone();p.applyTransform(u.transform),s=p.x+p.width/2,l=p.y+p.height/2}null!=s&&null!=l&&this._tryShow({offsetX:s,offsetY:l,position:t.position,target:u,event:{}})}}else{var u=o.getZr().handler.findHover(t.x,t.y);this._tryShow({offsetX:t.x,offsetY:t.y,position:t.position,target:u,event:{}})}}},_manuallyHideTip:function(t){t.from!==this.uid&&this._hide()},_prepareAxisTriggerData:function(t,e){var i={};return e.eachSeries(function(t){if(h(t)){var e,n,o=t.coordinateSystem;"cartesian2d"===o.type?(e=o.getBaseAxis(),n=e.dim+e.index):"singleAxis"===o.type?(e=o.getAxis(),n=e.dim+e.type):(e=o.getBaseAxis(),n=e.dim+o.name),i[n]=i[n]||{coordSys:[],series:[]},i[n].coordSys.push(o),i[n].series.push(t)}},this),i},_tryShow:function(t){var e=t.target,i=this._tooltipModel,n=i.get("trigger"),o=this._ecModel,r=this._api;if(i)if(this._lastX=t.offsetX,this._lastY=t.offsetY,e&&null!=e.dataIndex){var a=e.dataModel||o.getSeriesByIndex(e.seriesIndex),s=e.dataIndex,l=a.getData().getItemModel(s);"axis"===(l.get("tooltip.trigger")||n)?this._showAxisTooltip(i,o,t):(this._ticket="",this._hideAxisPointer(),this._resetLastHover(),this._showItemTooltipContent(a,s,e.dataType,t)),r.dispatchAction({type:"showTip",from:this.uid,dataIndexInside:e.dataIndex,seriesIndex:e.seriesIndex})}else if(e&&e.tooltip){var u=e.tooltip;if("string"==typeof u){var h=u;u={content:h,formatter:h}}var c=new x(u,i),d=c.get("content"),f=Math.random();this._showTooltipContent(c,d,c.get("formatterParams")||{},f,t.offsetX,t.offsetY,t.position,e,r)}else"item"===n?this._hide():this._showAxisTooltip(i,o,t),"cross"===i.get("axisPointer.type")&&r.dispatchAction({type:"showTip",from:this.uid,x:t.offsetX,y:t.offsetY})},_showAxisTooltip:function(t,e,i){var o=t.getModel("axisPointer"),r=o.get("type");if("cross"===r){var a=i.target;if(a&&null!=a.dataIndex){var s=e.getSeriesByIndex(a.seriesIndex),l=a.dataIndex;this._showItemTooltipContent(s,l,a.dataType,i)}}this._showAxisPointer();var u=!0;f.each(this._seriesGroupByAxis,function(t){var e=t.coordSys,a=e[0],s=[i.offsetX,i.offsetY];if(!a.containPoint(s))return void this._hideAxisPointer(a.name);u=!1;var l=a.dimensions,h=a.pointToData(s,!0);s=a.dataToPoint(h);var c=a.getBaseAxis(),d=o.get("axis");"auto"===d&&(d=c.dim);var p=!1,g=this._lastHover;if("cross"===r)n(g.data,h)&&(p=!0),g.data=h;else{var m=f.indexOf(l,d);g.data===h[m]&&(p=!0),g.data=h[m]}"cartesian2d"!==a.type||p?"polar"!==a.type||p?"singleAxis"!==a.type||p||this._showSinglePointer(o,a,d,s):this._showPolarPointer(o,a,d,s):this._showCartesianPointer(o,a,d,s),"cross"!==r&&this._dispatchAndShowSeriesTooltipContent(a,t.series,s,h,p,i.position)},this),this._tooltipModel.get("show")||this._hideAxisPointer(),u&&this._hide()},_showCartesianPointer:function(t,e,i,n){function a(i,n,r){var a="x"===i?o(n[0],r[0],n[0],r[1]):o(r[0],n[1],r[1],n[1]),s=l._getPointerElement(e,t,i,a);d.subPixelOptimizeLine({shape:a,style:s.style}),c?d.updateProps(s,{shape:a},t):s.attr({shape:a})}function s(i,n,o){var a=e.getAxis(i),s=a.getBandWidth(),u=o[1]-o[0],h="x"===i?r(n[0]-s/2,o[0],s,u):r(o[0],n[1]-s/2,u,s),f=l._getPointerElement(e,t,i,h);c?d.updateProps(f,{shape:h},t):f.attr({shape:h})}var l=this,u=t.get("type"),h=e.getBaseAxis(),c="cross"!==u&&"category"===h.type&&h.getBandWidth()>20;if("cross"===u)a("x",n,e.getAxis("y").getGlobalExtent()),a("y",n,e.getAxis("x").getGlobalExtent()),this._updateCrossText(e,n,t);else{var f=e.getAxis("x"===i?"y":"x"),p=f.getGlobalExtent();"cartesian2d"===e.type&&("line"===u?a:s)(i,n,p)}},_showSinglePointer:function(t,e,i,n){function r(i,n,r){var s=e.getAxis(),u=s.orient,h="horizontal"===u?o(n[0],r[0],n[0],r[1]):o(r[0],n[1],r[1],n[1]),c=a._getPointerElement(e,t,i,h);l?d.updateProps(c,{shape:h},t):c.attr({shape:h})}var a=this,s=t.get("type"),l="cross"!==s&&"category"===e.getBaseAxis().type,u=e.getRect(),h=[u.y,u.y+u.height];r(i,n,h)},_showPolarPointer:function(t,e,i,n){function r(i,n,r){var a,s=e.pointToCoord(n);if("angle"===i){var u=e.coordToPoint([r[0],s[1]]),h=e.coordToPoint([r[1],s[1]]);a=o(u[0],u[1],h[0],h[1])}else a={cx:e.cx,cy:e.cy,r:s[0]};var c=l._getPointerElement(e,t,i,a);f?d.updateProps(c,{shape:a},t):c.attr({shape:a})}function s(i,n,o){var r,s=e.getAxis(i),u=s.getBandWidth(),h=e.pointToCoord(n),c=Math.PI/180;r="angle"===i?a(e.cx,e.cy,o[0],o[1],(-h[1]-u/2)*c,(-h[1]+u/2)*c):a(e.cx,e.cy,h[0]-u/2,h[0]+u/2,0,2*Math.PI);var p=l._getPointerElement(e,t,i,r);f?d.updateProps(p,{shape:r},t):p.attr({shape:r})}var l=this,u=t.get("type"),h=e.getAngleAxis(),c=e.getRadiusAxis(),f="cross"!==u&&"category"===e.getBaseAxis().type;if("cross"===u)r("angle",n,c.getExtent()),r("radius",n,h.getExtent()),this._updateCrossText(e,n,t);else{var p=e.getAxis("radius"===i?"angle":"radius"),g=p.getExtent();("line"===u?r:s)(i,n,g)}},_updateCrossText:function(t,e,i){var n=i.getModel("crossStyle"),o=n.getModel("textStyle"),r=this._tooltipModel,a=this._crossText;a||(a=this._crossText=new d.Text({style:{textAlign:"left",textVerticalAlign:"bottom"}}),this.group.add(a));var s=t.pointToData(e),l=t.dimensions;s=f.map(s,function(e,i){var n=t.getAxis(l[i]);return e="category"===n.type||"time"===n.type?n.scale.getLabel(e):p.addCommas(e.toFixed(n.getPixelPrecision()))}),a.setStyle({fill:o.getTextColor()||n.get("color"),textFont:o.getFont(),text:s.join(", "),x:e[0]+5,y:e[1]-5}),a.z=r.get("z"),a.zlevel=r.get("zlevel")},_getPointerElement:function(t,e,i,n){var o=this._tooltipModel,r=o.get("z"),a=o.get("zlevel"),s=this._axisPointers,l=t.name;if(s[l]=s[l]||{},s[l][i])return s[l][i];var u=e.get("type"),h=e.getModel(u+"Style"),c="shadow"===u,f=h[c?"getAreaStyle":"getLineStyle"](),p="polar"===t.type?c?"Sector":"radius"===i?"Circle":"Line":c?"Rect":"Line";c?f.stroke=null:f.fill=null;var g=s[l][i]=new d[p]({style:f,z:r,zlevel:a,silent:!0,shape:n});return this.group.add(g),g},_dispatchAndShowSeriesTooltipContent:function(t,e,i,n,o,r){var a=this._tooltipModel,s=t.getBaseAxis(),l="x"===s.dim||"radius"===s.dim?0:1,h=f.map(e,function(t){return{seriesIndex:t.seriesIndex,dataIndexInside:t.getAxisTooltipDataIndex?t.getAxisTooltipDataIndex(t.coordDimToDataDim(s.dim),n,s):t.getData().indexOfNearest(t.coordDimToDataDim(s.dim)[0],n[l],!1,"category"===s.type?.5:null)}}),c=this._lastHover,d=this._api;if(c.payloadBatch&&!o&&d.dispatchAction({type:"downplay",batch:c.payloadBatch}),o||(d.dispatchAction({type:"highlight",batch:h}),c.payloadBatch=h),d.dispatchAction({type:"showTip",dataIndexInside:h[0].dataIndexInside,seriesIndex:h[0].seriesIndex,from:this.uid}),s&&a.get("showContent")&&a.get("show")){var p=f.map(e,function(t,e){return t.getDataParams(h[e].dataIndexInside)});if(o)u(r||a.get("position"),i[0],i[1],this._tooltipContent,p,null,d);else{var g=h[0].dataIndexInside,m="time"===s.type?s.scale.getLabel(n[l]):e[0].getData().getName(g),v=(m?m+"<br />":"")+f.map(e,function(t,e){
+return t.formatTooltip(h[e].dataIndexInside,!0)}).join("<br />"),y="axis_"+t.name+"_"+g;this._showTooltipContent(a,v,p,y,i[0],i[1],r,null,d)}}},_showItemTooltipContent:function(t,e,i,n){var o=this._api,r=t.getData(i),a=r.getItemModel(e),s=a.get("tooltip",!0);if("string"==typeof s){var l=s;s={formatter:l}}var u=this._tooltipModel,h=t.getModel("tooltip",u),c=new x(s,h,h.ecModel),d=t.getDataParams(e,i),f=t.formatTooltip(e,!1,i),p="item_"+t.name+"_"+e;this._showTooltipContent(c,f,d,p,n.offsetX,n.offsetY,n.position,n.target,o)},_showTooltipContent:function(t,e,i,n,o,r,a,s,l){if(this._ticket="",t.get("showContent")&&t.get("show")){var h=this._tooltipContent,c=t.get("formatter");a=a||t.get("position");var d=e;if(c)if("string"==typeof c)d=p.formatTpl(c,i);else if("function"==typeof c){var f=this,g=n,m=function(t,e){t===f._ticket&&(h.setContent(e),u(a,o,r,h,i,s,l))};f._ticket=g,d=c(i,g,m)}h.show(t),h.setContent(d),u(a,o,r,h,i,s,l)}},_showAxisPointer:function(t){if(t){var e=this._axisPointers[t];e&&f.each(e,function(t){t.show()})}else this.group.eachChild(function(t){t.show()}),this.group.show()},_resetLastHover:function(){var t=this._lastHover;t.payloadBatch&&this._api.dispatchAction({type:"downplay",batch:t.payloadBatch}),this._lastHover={}},_hideAxisPointer:function(t){if(t){var e=this._axisPointers[t];e&&f.each(e,function(t){t.hide()})}else this.group.children().length&&this.group.hide()},_hide:function(){clearTimeout(this._showTimeout),this._hideAxisPointer(),this._resetLastHover(),this._alwaysShowContent||this._tooltipContent.hideLater(this._tooltipModel.get("hideDelay")),this._api.dispatchAction({type:"hideTip",from:this.uid}),this._lastX=this._lastY=null},dispose:function(t,e){if(!y.node){var i=e.getZr();this._tooltipContent.hide(),i.off("click",this._tryShow),i.off("mousemove",this._mousemove),i.off("mouseout",this._hide),i.off("globalout",this._hide),e.off("showTip",this._manuallyShowTip),e.off("hideTip",this._manuallyHideTip)}}})},function(t,e,i){function n(t,e){var i=t.get("center"),n=t.get("radius"),o=e.getWidth(),r=e.getHeight(),a=s.parsePercent;this.cx=a(i[0],o),this.cy=a(i[1],r);var l=this.getRadiusAxis(),u=Math.min(o,r)/2;l.setExtent(0,a(n,u))}function o(t,e){var i=this,n=i.getAngleAxis(),o=i.getRadiusAxis();if(n.scale.setExtent(1/0,-(1/0)),o.scale.setExtent(1/0,-(1/0)),t.eachSeries(function(t){if(t.coordinateSystem===i){var e=t.getData();o.scale.unionExtent(e.getDataExtent("radius","category"!==o.type)),n.scale.unionExtent(e.getDataExtent("angle","category"!==n.type))}}),u(n,n.model),u(o,o.model),"category"===n.type&&!n.onBand){var r=n.getExtent(),a=360/n.scale.count();n.inverse?r[1]+=a:r[1]-=a,n.setExtent(r[0],r[1])}}function r(t,e){if(t.type=e.get("type"),t.scale=l.createScaleByModel(e),t.onBand=e.get("boundaryGap")&&"category"===t.type,"angleAxis"===e.mainType){var i=e.get("startAngle");t.inverse=e.get("inverse")^e.get("clockwise"),t.setExtent(i,i+(t.inverse?-360:360))}e.axis=t,t.model=e}var a=i(369),s=i(4),l=(i(1),i(22)),u=l.niceScaleExtent;i(370);var h={dimensions:a.prototype.dimensions,create:function(t,e){var i=[];return t.eachComponent("polar",function(t,s){var l=new a(s);l.resize=n,l.update=o;var u=l.getRadiusAxis(),h=l.getAngleAxis(),c=t.findAxisModel("radiusAxis"),d=t.findAxisModel("angleAxis");r(u,c),r(h,d),l.resize(t,e),i.push(l),t.coordinateSystem=l}),t.eachSeries(function(e){if("polar"===e.get("coordinateSystem")){var i=t.queryComponents({mainType:"polar",index:e.get("polarIndex"),id:e.get("polarId")})[0];e.coordinateSystem=i.coordinateSystem}}),i}};i(23).register("polar",h)},function(t,e){function i(){throw new Error("setTimeout has not been defined")}function n(){throw new Error("clearTimeout has not been defined")}function o(t){if(h===setTimeout)return setTimeout(t,0);if((h===i||!h)&&setTimeout)return h=setTimeout,setTimeout(t,0);try{return h(t,0)}catch(e){try{return h.call(null,t,0)}catch(e){return h.call(this,t,0)}}}function r(t){if(c===clearTimeout)return clearTimeout(t);if((c===n||!c)&&clearTimeout)return c=clearTimeout,clearTimeout(t);try{return c(t)}catch(e){try{return c.call(null,t)}catch(e){return c.call(this,t)}}}function a(){g&&f&&(g=!1,f.length?p=f.concat(p):m=-1,p.length&&s())}function s(){if(!g){var t=o(a);g=!0;for(var e=p.length;e;){for(f=p,p=[];++m<e;)f&&f[m].run();m=-1,e=p.length}f=null,g=!1,r(t)}}function l(t,e){this.fun=t,this.array=e}function u(){}var h,c,d=t.exports={};!function(){try{h="function"==typeof setTimeout?setTimeout:i}catch(t){h=i}try{c="function"==typeof clearTimeout?clearTimeout:n}catch(t){c=n}}();var f,p=[],g=!1,m=-1;d.nextTick=function(t){var e=new Array(arguments.length-1);if(arguments.length>1)for(var i=1;i<arguments.length;i++)e[i-1]=arguments[i];p.push(new l(t,e)),1!==p.length||g||o(s)},l.prototype.run=function(){this.fun.apply(null,this.array)},d.title="browser",d.browser=!0,d.env={},d.argv=[],d.version="",d.versions={},d.on=u,d.addListener=u,d.once=u,d.off=u,d.removeListener=u,d.removeAllListeners=u,d.emit=u,d.binding=function(t){throw new Error("process.binding is not supported")},d.cwd=function(){return"/"},d.chdir=function(t){throw new Error("process.chdir is not supported")},d.umask=function(){return 0}},function(t,e,i){function n(t){return parseInt(t,10)}function o(t,e){s.initVML(),this.root=t,this.storage=e;var i=document.createElement("div"),n=document.createElement("div");i.style.cssText="display:inline-block;overflow:hidden;position:relative;width:300px;height:150px;",n.style.cssText="position:absolute;left:0;top:0;",t.appendChild(i),this._vmlRoot=n,this._vmlViewport=i,this.resize();var o=e.delFromMap,r=e.addToMap;e.delFromMap=function(t){var i=e.get(t);o.call(e,t),i&&i.onRemove&&i.onRemove(n)},e.addToMap=function(t){t.onAdd&&t.onAdd(n),r.call(e,t)},this._firstPaint=!0}function r(t){return function(){a('In IE8.0 VML mode painter not support method "'+t+'"')}}var a=i(47),s=i(170);o.prototype={constructor:o,getViewportRoot:function(){return this._vmlViewport},refresh:function(){var t=this.storage.getDisplayList(!0,!0);this._paintList(t)},_paintList:function(t){for(var e=this._vmlRoot,i=0;i<t.length;i++){var n=t[i];n.invisible||n.ignore?(n.__alreadyNotVisible||n.onRemove(e),n.__alreadyNotVisible=!0):(n.__alreadyNotVisible&&n.onAdd(e),n.__alreadyNotVisible=!1,n.__dirty&&(n.beforeBrush&&n.beforeBrush(),(n.brushVML||n.brush).call(n,e),n.afterBrush&&n.afterBrush())),n.__dirty=!1}this._firstPaint&&(this._vmlViewport.appendChild(e),this._firstPaint=!1)},resize:function(t,e){var t=null==t?this._getWidth():t,e=null==e?this._getHeight():e;if(this._width!=t||this._height!=e){this._width=t,this._height=e;var i=this._vmlViewport.style;i.width=t+"px",i.height=e+"px"}},dispose:function(){this.root.innerHTML="",this._vmlRoot=this._vmlViewport=this.storage=null},getWidth:function(){return this._width},getHeight:function(){return this._height},clear:function(){this._vmlViewport&&this.root.removeChild(this._vmlViewport)},_getWidth:function(){var t=this.root,e=t.currentStyle;return(t.clientWidth||n(e.width))-n(e.paddingLeft)-n(e.paddingRight)|0},_getHeight:function(){var t=this.root,e=t.currentStyle;return(t.clientHeight||n(e.height))-n(e.paddingTop)-n(e.paddingBottom)|0}};for(var l=["getLayer","insertLayer","eachLayer","eachBuildinLayer","eachOtherLayer","getLayers","modLayer","delLayer","clearLayer","toDataURL","pathToImage"],u=0;u<l.length;u++){var h=l[u];o.prototype[h]=r(h)}t.exports=o},function(t,e,i){if(!i(11).canvasSupported){var n=i(5),o=i(8),r=i(28).CMD,a=i(18),s=i(16),l=i(75),u=i(36),h=i(48),c=i(74),d=i(6),f=i(37),p=i(170),g=Math.round,m=Math.sqrt,v=Math.abs,y=Math.cos,x=Math.sin,_=Math.max,b=n.applyTransform,w=",",S="progid:DXImageTransform.Microsoft",M=21600,T=M/2,I=1e5,A=1e3,L=function(t){t.style.cssText="position:absolute;left:0;top:0;width:1px;height:1px;",t.coordsize=M+","+M,t.coordorigin="0,0"},C=function(t){return String(t).replace(/&/g,"&amp;").replace(/"/g,"&quot;")},D=function(t,e,i){return"rgb("+[t,e,i].join(",")+")"},P=function(t,e){e&&t&&e.parentNode!==t&&t.appendChild(e)},k=function(t,e){e&&t&&e.parentNode===t&&t.removeChild(e)},z=function(t,e,i){return(parseFloat(t)||0)*I+(parseFloat(e)||0)*A+i},O=function(t,e){return"string"==typeof t?t.lastIndexOf("%")>=0?parseFloat(t)/100*e:parseFloat(t):t},E=function(t,e,i){var n=a.parse(e);i=+i,isNaN(i)&&(i=1),n&&(t.color=D(n[0],n[1],n[2]),t.opacity=i*n[3])},R=function(t){var e=a.parse(t);return[D(e[0],e[1],e[2]),e[3]]},V=function(t,e,i){var n=e.fill;if(null!=n)if(n instanceof f){var o,r=0,a=[0,0],s=0,l=1,u=i.getBoundingRect(),h=u.width,c=u.height;if("linear"===n.type){o="gradient";var d=i.transform,p=[n.x*h,n.y*c],g=[n.x2*h,n.y2*c];d&&(b(p,p,d),b(g,g,d));var m=g[0]-p[0],v=g[1]-p[1];r=180*Math.atan2(m,v)/Math.PI,r<0&&(r+=360),r<1e-6&&(r=0)}else{o="gradientradial";var p=[n.x*h,n.y*c],d=i.transform,y=i.scale,x=h,w=c;a=[(p[0]-u.x)/x,(p[1]-u.y)/w],d&&b(p,p,d),x/=y[0]*M,w/=y[1]*M;var S=_(x,w);s=0/S,l=2*n.r/S-s}var T=n.colorStops.slice();T.sort(function(t,e){return t.offset-e.offset});for(var I=T.length,A=[],L=[],C=0;C<I;C++){var D=T[C],P=R(D.color);L.push(D.offset*l+s+" "+P[0]),0!==C&&C!==I-1||A.push(P)}if(I>=2){var k=A[0][0],z=A[1][0],O=A[0][1]*e.opacity,V=A[1][1]*e.opacity;t.type=o,t.method="none",t.focus="100%",t.angle=r,t.color=k,t.color2=z,t.colors=L.join(","),t.opacity=V,t.opacity2=O}"radial"===o&&(t.focusposition=a.join(","))}else E(t,n,e.opacity)},N=function(t,e){null!=e.lineDash&&(t.dashstyle=e.lineDash.join(" ")),null==e.stroke||e.stroke instanceof f||E(t,e.stroke,e.opacity)},B=function(t,e,i,n){var o="fill"==e,r=t.getElementsByTagName(e)[0];null!=i[e]&&"none"!==i[e]&&(o||!o&&i.lineWidth)?(t[o?"filled":"stroked"]="true",i[e]instanceof f&&k(t,r),r||(r=p.createNode(e)),o?V(r,i,n):N(r,i),P(t,r)):(t[o?"filled":"stroked"]="false",k(t,r))},G=[[],[],[]],F=function(t,e){var i,n,o,a,s,l,u=r.M,h=r.C,c=r.L,d=r.A,f=r.Q,p=[];for(a=0;a<t.length;){switch(o=t[a++],n="",i=0,o){case u:n=" m ",i=1,s=t[a++],l=t[a++],G[0][0]=s,G[0][1]=l;break;case c:n=" l ",i=1,s=t[a++],l=t[a++],G[0][0]=s,G[0][1]=l;break;case f:case h:n=" c ",i=3;var v,_,S=t[a++],I=t[a++],A=t[a++],L=t[a++];o===f?(v=A,_=L,A=(A+2*S)/3,L=(L+2*I)/3,S=(s+2*S)/3,I=(l+2*I)/3):(v=t[a++],_=t[a++]),G[0][0]=S,G[0][1]=I,G[1][0]=A,G[1][1]=L,G[2][0]=v,G[2][1]=_,s=v,l=_;break;case d:var C=0,D=0,P=1,k=1,z=0;e&&(C=e[4],D=e[5],P=m(e[0]*e[0]+e[1]*e[1]),k=m(e[2]*e[2]+e[3]*e[3]),z=Math.atan2(-e[1]/k,e[0]/P));var O=t[a++],E=t[a++],R=t[a++],V=t[a++],N=t[a++]+z,B=t[a++]+N+z;a++;var F=t[a++],H=O+y(N)*R,W=E+x(N)*V,S=O+y(B)*R,I=E+x(B)*V,Z=F?" wa ":" at ";Math.abs(H-S)<1e-10&&(Math.abs(B-N)>.01?F&&(H+=270/M):Math.abs(W-E)<1e-10?F&&H<O||!F&&H>O?I-=270/M:I+=270/M:F&&W<E||!F&&W>E?S+=270/M:S-=270/M),p.push(Z,g(((O-R)*P+C)*M-T),w,g(((E-V)*k+D)*M-T),w,g(((O+R)*P+C)*M-T),w,g(((E+V)*k+D)*M-T),w,g((H*P+C)*M-T),w,g((W*k+D)*M-T),w,g((S*P+C)*M-T),w,g((I*k+D)*M-T)),s=S,l=I;break;case r.R:var q=G[0],j=G[1];q[0]=t[a++],q[1]=t[a++],j[0]=q[0]+t[a++],j[1]=q[1]+t[a++],e&&(b(q,q,e),b(j,j,e)),q[0]=g(q[0]*M-T),j[0]=g(j[0]*M-T),q[1]=g(q[1]*M-T),j[1]=g(j[1]*M-T),p.push(" m ",q[0],w,q[1]," l ",j[0],w,q[1]," l ",j[0],w,j[1]," l ",q[0],w,j[1]);break;case r.Z:p.push(" x ")}if(i>0){p.push(n);for(var U=0;U<i;U++){var X=G[U];e&&b(X,X,e),p.push(g(X[0]*M-T),w,g(X[1]*M-T),U<i-1?w:"")}}}return p.join("")};d.prototype.brushVML=function(t){var e=this.style,i=this._vmlEl;i||(i=p.createNode("shape"),L(i),this._vmlEl=i),B(i,"fill",e,this),B(i,"stroke",e,this);var n=this.transform,o=null!=n,r=i.getElementsByTagName("stroke")[0];if(r){var a=e.lineWidth;if(o&&!e.strokeNoScale){var s=n[0]*n[3]-n[1]*n[2];a*=m(v(s))}r.weight=a+"px"}var l=this.path;this.__dirtyPath&&(l.beginPath(),this.buildPath(l,this.shape),l.toStatic(),this.__dirtyPath=!1),i.path=F(l.data,this.transform),i.style.zIndex=z(this.zlevel,this.z,this.z2),P(t,i),null!=e.text?this.drawRectText(t,this.getBoundingRect()):this.removeRectText(t)},d.prototype.onRemove=function(t){k(t,this._vmlEl),this.removeRectText(t)},d.prototype.onAdd=function(t){P(t,this._vmlEl),this.appendRectText(t)};var H=function(t){return"object"==typeof t&&t.tagName&&"IMG"===t.tagName.toUpperCase()};h.prototype.brushVML=function(t){var e,i,n=this.style,o=n.image;if(H(o)){var r=o.src;if(r===this._imageSrc)e=this._imageWidth,i=this._imageHeight;else{var a=o.runtimeStyle,s=a.width,l=a.height;a.width="auto",a.height="auto",e=o.width,i=o.height,a.width=s,a.height=l,this._imageSrc=r,this._imageWidth=e,this._imageHeight=i}o=r}else o===this._imageSrc&&(e=this._imageWidth,i=this._imageHeight);if(o){var u=n.x||0,h=n.y||0,c=n.width,d=n.height,f=n.sWidth,v=n.sHeight,y=n.sx||0,x=n.sy||0,M=f&&v,T=this._vmlEl;T||(T=p.doc.createElement("div"),L(T),this._vmlEl=T);var I,A=T.style,C=!1,D=1,k=1;if(this.transform&&(I=this.transform,D=m(I[0]*I[0]+I[1]*I[1]),k=m(I[2]*I[2]+I[3]*I[3]),C=I[1]||I[2]),C){var O=[u,h],E=[u+c,h],R=[u,h+d],V=[u+c,h+d];b(O,O,I),b(E,E,I),b(R,R,I),b(V,V,I);var N=_(O[0],E[0],R[0],V[0]),B=_(O[1],E[1],R[1],V[1]),G=[];G.push("M11=",I[0]/D,w,"M12=",I[2]/k,w,"M21=",I[1]/D,w,"M22=",I[3]/k,w,"Dx=",g(u*D+I[4]),w,"Dy=",g(h*k+I[5])),A.padding="0 "+g(N)+"px "+g(B)+"px 0",A.filter=S+".Matrix("+G.join("")+", SizingMethod=clip)"}else I&&(u=u*D+I[4],h=h*k+I[5]),A.filter="",A.left=g(u)+"px",A.top=g(h)+"px";var F=this._imageEl,W=this._cropEl;F||(F=p.doc.createElement("div"),this._imageEl=F);var Z=F.style;if(M){if(e&&i)Z.width=g(D*e*c/f)+"px",Z.height=g(k*i*d/v)+"px";else{var q=new Image,j=this;q.onload=function(){q.onload=null,e=q.width,i=q.height,Z.width=g(D*e*c/f)+"px",Z.height=g(k*i*d/v)+"px",j._imageWidth=e,j._imageHeight=i,j._imageSrc=o},q.src=o}W||(W=p.doc.createElement("div"),W.style.overflow="hidden",this._cropEl=W);var U=W.style;U.width=g((c+y*c/f)*D),U.height=g((d+x*d/v)*k),U.filter=S+".Matrix(Dx="+-y*c/f*D+",Dy="+-x*d/v*k+")",W.parentNode||T.appendChild(W),F.parentNode!=W&&W.appendChild(F)}else Z.width=g(D*c)+"px",Z.height=g(k*d)+"px",T.appendChild(F),W&&W.parentNode&&(T.removeChild(W),this._cropEl=null);var X="",Y=n.opacity;Y<1&&(X+=".Alpha(opacity="+g(100*Y)+") "),X+=S+".AlphaImageLoader(src="+o+", SizingMethod=scale)",Z.filter=X,T.style.zIndex=z(this.zlevel,this.z,this.z2),P(t,T),null!=n.text&&this.drawRectText(t,this.getBoundingRect())}},h.prototype.onRemove=function(t){k(t,this._vmlEl),this._vmlEl=null,this._cropEl=null,this._imageEl=null,this.removeRectText(t)},h.prototype.onAdd=function(t){P(t,this._vmlEl),this.appendRectText(t)};var W,Z="normal",q={},j=0,U=100,X=document.createElement("div"),Y=function(t){var e=q[t];if(!e){j>U&&(j=0,q={});var i,n=X.style;try{n.font=t,i=n.fontFamily.split(",")[0]}catch(o){}e={style:n.fontStyle||Z,variant:n.fontVariant||Z,weight:n.fontWeight||Z,size:0|parseFloat(n.fontSize||12),family:i||"Microsoft YaHei"},q[t]=e,j++}return e};s.measureText=function(t,e){var i=p.doc;W||(W=i.createElement("div"),W.style.cssText="position:absolute;top:-20000px;left:0;padding:0;margin:0;border:none;white-space:pre;",p.doc.body.appendChild(W));try{W.style.font=e}catch(n){}return W.innerHTML="",W.appendChild(i.createTextNode(t)),{width:W.offsetWidth}};for(var $=new o,Q=function(t,e,i,n){var o=this.style,r=o.text;if(null!=r&&(r+=""),r){var a,l,u=o.textAlign,h=Y(o.textFont),c=h.style+" "+h.variant+" "+h.weight+" "+h.size+'px "'+h.family+'"',d=o.textBaseline,f=o.textVerticalAlign;i=i||s.getBoundingRect(r,c,u,d);var m=this.transform;if(m&&!n&&($.copy(e),$.applyTransform(m),e=$),n)a=e.x,l=e.y;else{var v=o.textPosition,y=o.textDistance;if(v instanceof Array)a=e.x+O(v[0],e.width),l=e.y+O(v[1],e.height),u=u||"left",d=d||"top";else{var x=s.adjustTextPositionOnRect(v,e,i,y);a=x.x,l=x.y,u=u||x.textAlign,d=d||x.textBaseline}}if(f){switch(f){case"middle":l-=i.height/2;break;case"bottom":l-=i.height}d="top"}var _=h.size;switch(d){case"hanging":case"top":l+=_/1.75;break;case"middle":break;default:l-=_/2.25}switch(u){case"left":break;case"center":a-=i.width/2;break;case"right":a-=i.width}var S,M,T,I=p.createNode,A=this._textVmlEl;A?(T=A.firstChild,S=T.nextSibling,M=S.nextSibling):(A=I("line"),S=I("path"),M=I("textpath"),T=I("skew"),M.style["v-text-align"]="left",L(A),S.textpathok=!0,M.on=!0,A.from="0 0",A.to="1000 0.05",P(A,T),P(A,S),P(A,M),this._textVmlEl=A);var D=[a,l],k=A.style;m&&n?(b(D,D,m),T.on=!0,T.matrix=m[0].toFixed(3)+w+m[2].toFixed(3)+w+m[1].toFixed(3)+w+m[3].toFixed(3)+",0,0",T.offset=(g(D[0])||0)+","+(g(D[1])||0),T.origin="0 0",k.left="0px",k.top="0px"):(T.on=!1,k.left=g(a)+"px",k.top=g(l)+"px"),M.string=C(r);try{M.style.font=c}catch(E){}B(A,"fill",{fill:n?o.fill:o.textFill,opacity:o.opacity},this),B(A,"stroke",{stroke:n?o.stroke:o.textStroke,opacity:o.opacity,lineDash:o.lineDash},this),A.style.zIndex=z(this.zlevel,this.z,this.z2),P(t,A)}},K=function(t){k(t,this._textVmlEl),this._textVmlEl=null},J=function(t){P(t,this._textVmlEl)},tt=[l,u,h,d,c],et=0;et<tt.length;et++){var it=tt[et].prototype;it.drawRectText=Q,it.removeRectText=K,it.appendRectText=J}c.prototype.brushVML=function(t){var e=this.style;null!=e.text?this.drawRectText(t,{x:e.x||0,y:e.y||0,width:0,height:0},this.getBoundingRect(),!0):this.removeRectText(t)},c.prototype.onRemove=function(t){this.removeRectText(t)},c.prototype.onAdd=function(t){this.appendRectText(t)}}},function(t,e,i){i(219),i(76).registerPainter("vml",i(218))},function(t,e,i){var n=i(1),o=i(222),r=i(2);r.registerAction({type:"geoRoam",event:"geoRoam",update:"updateLayout"},function(t,e){var i=t.componentType||"series";e.eachComponent({mainType:i,query:t},function(e){var r=e.coordinateSystem;if("geo"===r.type){var a=o.updateCenterAndZoom(r,t,e.get("scaleLimit"));e.setCenter&&e.setCenter(a.center),e.setZoom&&e.setZoom(a.zoom),"series"===i&&n.each(e.seriesGroup,function(t){t.setCenter(a.center),t.setZoom(a.zoom)})}})})},function(t,e){var i={};i.updateCenterAndZoom=function(t,e,i){var n=t.getZoom(),o=t.getCenter(),r=e.zoom,a=t.dataToPoint(o);if(null!=e.dx&&null!=e.dy){a[0]-=e.dx,a[1]-=e.dy;var o=t.pointToData(a);t.setCenter(o)}if(null!=r){if(i){var s=i.min||0,l=i.max||1/0;r=Math.max(Math.min(n*r,l),s)/n}t.scale[0]*=r,t.scale[1]*=r;var u=t.position,h=(e.originX-u[0])*(r-1),c=(e.originY-u[1])*(r-1);u[0]-=h,u[1]-=c,t.updateTransform();var o=t.pointToData(a);t.setCenter(o),t.setZoom(r*n)}return{center:t.getCenter(),zoom:t.getZoom()}},t.exports=i},function(t,e,i){var n=i(5);t.exports=function(t){var e=t.coordinateSystem;if(!e||"view"===e.type){var i=e.getBoundingRect(),o=t.getData(),r=o.graph,a=0,s=o.getSum("value"),l=2*Math.PI/(s||o.count()),u=i.width/2+i.x,h=i.height/2+i.y,c=Math.min(i.width,i.height)/2;r.eachNode(function(t){var e=t.getValue("value");a+=l*(s?e:1)/2,t.setLayout([c*Math.cos(a)+u,c*Math.sin(a)+h]),a+=l*(s?e:1)/2}),o.setLayout({cx:u,cy:h}),r.eachEdge(function(t){var e,i=t.getModel().get("lineStyle.normal.curveness")||0,o=n.clone(t.node1.getLayout()),r=n.clone(t.node2.getLayout()),a=(o[0]+r[0])/2,s=(o[1]+r[1])/2;+i&&(i*=3,e=[u*i+a*(1-i),h*i+s*(1-i)]),t.setLayout([o,r,e])})}}},function(t,e,i){var n=i(5);t.exports=function(t){t.eachEdge(function(t){var e=t.getModel().get("lineStyle.normal.curveness")||0,i=n.clone(t.node1.getLayout()),o=n.clone(t.node2.getLayout()),r=[i,o];+e&&r.push([(i[0]+o[0])/2-(i[1]-o[1])*e,(i[1]+o[1])/2-(o[0]-i[0])*e]),t.setLayout(r)})}},function(t,e,i){var n=i(224);t.exports=function(t){var e=t.coordinateSystem;if(!e||"view"===e.type){var i=t.getGraph();i.eachNode(function(t){var e=t.getModel();t.setLayout([+e.get("x"),+e.get("y")])}),n(i)}}},function(t,e,i){function n(t,e,i){o.Group.call(this),this.add(this.createLine(t,e,i)),this._updateEffectSymbol(t,e)}var o=i(3),r=i(94),a=i(1),s=i(26),l=i(5),u=i(17),h=n.prototype;h.createLine=function(t,e,i){return new r(t,e,i)},h._updateEffectSymbol=function(t,e){var i=t.getItemModel(e),n=i.getModel("effect"),o=n.get("symbolSize"),r=n.get("symbol");a.isArray(o)||(o=[o,o]);var l=n.get("color")||t.getItemVisual(e,"color"),u=this.childAt(1);this._symbolType!==r&&(this.remove(u),u=s.createSymbol(r,-.5,-.5,1,1,l),u.z2=100,u.culling=!0,this.add(u)),u&&(u.setStyle("shadowColor",l),u.setStyle(n.getItemStyle(["color"])),u.attr("scale",o),u.setColor(l),u.attr("scale",o),this._symbolType=r,this._updateEffectAnimation(t,n,e))},h._updateEffectAnimation=function(t,e,i){var n=this.childAt(1);if(n){var o=this,r=t.getItemLayout(i),s=1e3*e.get("period"),l=e.get("loop"),u=e.get("constantSpeed"),h=a.retrieve(e.get("delay"),function(e){return e/t.count()*s/3}),c="function"==typeof h;if(n.ignore=!0,this.updateAnimationPoints(n,r),u>0&&(s=this.getLineLength(n)/u*1e3),s!==this._period||l!==this._loop){n.stopAnimation();var d=h;c&&(d=h(i)),n.__t>0&&(d=-s*n.__t),n.__t=0;var f=n.animate("",l).when(s,{__t:1}).delay(d).during(function(){o.updateSymbolPosition(n)});l||f.done(function(){o.remove(n)}),f.start()}this._period=s,this._loop=l}},h.getLineLength=function(t){return l.dist(t.__p1,t.__cp1)+l.dist(t.__cp1,t.__p2)},h.updateAnimationPoints=function(t,e){t.__p1=e[0],t.__p2=e[1],t.__cp1=e[2]||[(e[0][0]+e[1][0])/2,(e[0][1]+e[1][1])/2]},h.updateData=function(t,e,i){this.childAt(0).updateData(t,e,i),this._updateEffectSymbol(t,e)},h.updateSymbolPosition=function(t){var e=t.__p1,i=t.__p2,n=t.__cp1,o=t.__t,r=t.position,a=u.quadraticAt,s=u.quadraticDerivativeAt;r[0]=a(e[0],n[0],i[0],o),r[1]=a(e[1],n[1],i[1],o);var l=s(e[0],n[0],i[0],o),h=s(e[1],n[1],i[1],o);t.rotation=-Math.atan2(h,l)-Math.PI/2,t.ignore=!1},h.updateLayout=function(t,e){this.childAt(0).updateLayout(t,e);var i=t.getItemModel(e).getModel("effect");this._updateEffectAnimation(t,i,e)},a.inherits(n,o.Group),t.exports=n},function(t,e,i){function n(t,e,i){o.Group.call(this),this._createPolyline(t,e,i)}var o=i(3),r=i(1),a=n.prototype;a._createPolyline=function(t,e,i){var n=t.getItemLayout(e),r=new o.Polyline({shape:{points:n}});this.add(r),this._updateCommonStl(t,e,i)},a.updateData=function(t,e,i){var n=t.hostModel,r=this.childAt(0),a={shape:{points:t.getItemLayout(e)}};o.updateProps(r,a,n,e),this._updateCommonStl(t,e,i)},a._updateCommonStl=function(t,e,i){var n=this.childAt(0),a=t.getItemModel(e),s=t.getItemVisual(e,"color"),l=i&&i.lineStyle,u=i&&i.hoverLineStyle;i&&!t.hasItemOption||(l=a.getModel("lineStyle.normal").getLineStyle(),u=a.getModel("lineStyle.emphasis").getLineStyle()),n.useStyle(r.defaults({strokeNoScale:!0,fill:"none",stroke:s},l)),n.hoverStyle=u,o.setHoverStyle(this)},a.updateLayout=function(t,e){var i=this.childAt(0);i.setShape("points",t.getItemLayout(e))},r.inherits(n,o.Group),t.exports=n},function(t,e,i){var n=i(14),o=i(379),r=i(241),a=i(29),s=i(23),l=i(1),u=i(34);t.exports=function(t,e,i,h,c){for(var d=new o(h),f=0;f<t.length;f++)d.addNode(l.retrieve(t[f].id,t[f].name,f),f);for(var p=[],g=[],m=0,f=0;f<e.length;f++){var v=e[f],y=v.source,x=v.target;d.addEdge(y,x,m)&&(g.push(v),p.push(l.retrieve(v.id,y+" > "+x)),m++)}var _,b=i.get("coordinateSystem");if("cartesian2d"===b||"polar"===b)_=u(t,i,i.ecModel);else{var w=s.get(b),S=a((w&&"view"!==w.type?w.dimensions||[]:[]).concat(["value"]),t);_=new n(S,i),_.initData(t)}var M=new n(["value"],i);return M.initData(g,p),c&&c(_,M),r({mainData:_,struct:d,structAttr:"graph",datas:{node:_,edge:M},datasAttr:{node:"data",edge:"edgeData"}}),d.update(),d}},function(t,e,i){function n(t,e){var i=t.getItemStyle(),n=t.get("areaColor");return n&&(i.fill=n),i}function o(t,e,i,n){e.off("click"),t.get("selectedMode")&&e.on("click",function(o){for(var a=o.target;!a.__region;)a=a.parent;if(a){var s=a.__region,l={type:("geo"===t.mainType?"geo":"map")+"ToggleSelect",name:s.name,from:n.uid};l[t.mainType+"Id"]=t.id,i.dispatchAction(l),r(t,e)}})}function r(t,e){e.eachChild(function(e){e.__region&&e.trigger(t.isSelected(e.__region.name)?"emphasis":"normal")})}function a(t,e){var i=new l.Group;this._controller=new s(t.getZr(),e?i:null,null),this.group=i,this._updateGroup=e}var s=i(79),l=i(3),u=i(1);a.prototype={constructor:a,draw:function(t,e,i,a,s){var h=t.getData&&t.getData(),c=t.coordinateSystem,d=this.group,f=c.scale,p={position:c.position,scale:f};!d.childAt(0)||s?d.attr(p):l.updateProps(d,p,t),d.removeAll();var g=["itemStyle","normal"],m=["itemStyle","emphasis"],v=["label","normal"],y=["label","emphasis"];u.each(c.regions,function(e){var i=new l.Group,o=new l.CompoundPath({shape:{paths:[]}});i.add(o);var r,a=t.getRegionModel(e.name)||t,s=a.getModel(g),c=a.getModel(m),p=n(s,f),x=n(c,f),_=a.getModel(v),b=a.getModel(y);if(h){r=h.indexOfName(e.name);var w=h.getItemVisual(r,"color",!0);w&&(p.fill=w)}var S=_.getModel("textStyle"),M=b.getModel("textStyle");u.each(e.contours,function(t){var e=new l.Polygon({shape:{points:t}});o.shape.paths.push(e)}),o.setStyle(p),o.style.strokeNoScale=!0,o.culling=!0;var T=_.get("show"),I=b.get("show"),A=h&&isNaN(h.get("value",r)),L=h&&h.getItemLayout(r);if(!h||A&&(T||I)||L&&L.showLabel){var C=h?r:e.name,D=t.getFormattedLabel(C,"normal"),P=t.getFormattedLabel(C,"emphasis"),k=new l.Text({style:{text:T?D||e.name:"",fill:S.getTextColor(),textFont:S.getFont(),textAlign:"center",textVerticalAlign:"middle"},hoverStyle:{text:I?P||e.name:"",fill:M.getTextColor(),textFont:M.getFont()},position:e.center.slice(),scale:[1/f[0],1/f[1]],z2:10,silent:!0});i.add(k)}if(h)h.setItemGraphicEl(r,i);else{var a=t.getRegionModel(e.name);o.eventData={componentType:"geo",geoIndex:t.componentIndex,name:e.name,region:a&&a.option||{}}}i.__region=e,l.setHoverStyle(i,x),d.add(i)}),this._updateController(t,e,i),o(t,d,i,a),r(t,d)},remove:function(){this.group.removeAll(),this._controller.dispose()},_updateController:function(t,e,i){function n(){var e={type:"geoRoam",componentType:a};return e[a+"Id"]=t.id,e}var o=t.coordinateSystem,r=this._controller;r.zoomLimit=t.get("scaleLimit"),r.zoom=o.getZoom(),r.enable(t.get("roam")||!1);var a=t.mainType;r.off("pan").on("pan",function(t,e){i.dispatchAction(u.extend(n(),{dx:t,dy:e}))}),r.off("zoom").on("zoom",function(t,e,o){if(i.dispatchAction(u.extend(n(),{zoom:t,originX:e,originY:o})),this._updateGroup){var r=this.group,a=r.scale;r.traverse(function(t){"text"===t.type&&t.attr("scale",[1/a[0],1/a[1]])})}},this),r.setContainsPoint(function(t,e){return o.getViewRectAfterRoam().contain(t,e)})}},t.exports=a},function(t,e,i){i(240),i(365),i(333);var n=i(2),o=i(1),r=5;n.extendComponentView({type:"parallel",render:function(t,e,i){var n=i.getZr();if(!this.__onMouseDown){var a;n.on("mousedown",this.__onMouseDown=function(t){a=[t.offsetX,t.offsetY]}),n.on("mouseup",this.__onMouseUp=function(e){var n=[e.offsetX,e.offsetY],s=Math.pow(a[0]-n[0],2)+Math.pow(a[1]-n[1],2);if(t.get("axisExpandable")&&!(s>r)){var l=t.coordinateSystem,u=l.findClosestAxisDim(n);if(u){var h=o.indexOf(l.dimensions,u);i.dispatchAction({type:"parallelAxisExpand",axisExpandCenter:h})}}})}},dispose:function(t,e){e.getZr().off(this.__onMouseDown),e.getZr().off(this.__onMouseUp)}}),n.registerPreprocessor(i(366))},function(t,e,i){var n=i(2),o=i(1),r=i(11),a=i(383),s=i(71),l=i(173),u=s.mapVisual,h=i(7),c=s.eachVisual,d=i(4),f=o.isArray,p=o.each,g=d.asc,m=d.linearMap,v=o.noop,y=["#f6efa6","#d88273","#bf444c"],x=n.extendComponentModel({type:"visualMap",dependencies:["series"],stateList:["inRange","outOfRange"],replacableOptionKeys:["inRange","outOfRange","target","controller","color"],dataBound:[-(1/0),1/0],layoutMode:{type:"box",ignoreSize:!0},defaultOption:{show:!0,zlevel:0,z:4,seriesIndex:null,min:0,max:200,dimension:null,inRange:null,outOfRange:null,left:0,right:null,top:null,bottom:0,itemWidth:null,itemHeight:null,inverse:!1,orient:"vertical",backgroundColor:"rgba(0,0,0,0)",borderColor:"#ccc",contentColor:"#5793f3",inactiveColor:"#aaa",borderWidth:0,padding:5,textGap:10,precision:0,color:null,formatter:null,text:null,textStyle:{color:"#333"}},init:function(t,e,i){this._dataExtent,this.targetVisuals={},this.controllerVisuals={},this.textStyleModel,this.itemSize,this.mergeDefaultAndTheme(t,i)},optionUpdated:function(t,e){var i=this.option;r.canvasSupported||(i.realtime=!1),!e&&l.replaceVisualOption(i,t,this.replacableOptionKeys),this.textStyleModel=this.getModel("textStyle"),this.resetItemSize(),this.completeVisualOption()},resetVisual:function(t){var e=this.stateList;t=o.bind(t,this),this.controllerVisuals=l.createVisualMappings(this.option.controller,e,t),this.targetVisuals=l.createVisualMappings(this.option.target,e,t)},resetTargetSeries:function(){var t=this.option,e=null==t.seriesIndex;t.seriesIndex=e?[]:h.normalizeToArray(t.seriesIndex),e&&this.ecModel.eachSeries(function(e,i){t.seriesIndex.push(i)})},eachTargetSeries:function(t,e){o.each(this.option.seriesIndex,function(i){t.call(e,this.ecModel.getSeriesByIndex(i))},this)},isTargetSeries:function(t){var e=!1;return this.eachTargetSeries(function(i){i===t&&(e=!0)}),e},formatValueText:function(t,e,i){function n(t){return t===u[0]?"min":t===u[1]?"max":(+t).toFixed(l)}var r,a,s=this.option,l=s.precision,u=this.dataBound,h=s.formatter;return i=i||["<",">"],o.isArray(t)&&(t=t.slice(),r=!0),a=e?t:r?[n(t[0]),n(t[1])]:n(t),o.isString(h)?h.replace("{value}",r?a[0]:a).replace("{value2}",r?a[1]:a):o.isFunction(h)?r?h(t[0],t[1]):h(t):r?t[0]===u[0]?i[0]+" "+a[1]:t[1]===u[1]?i[1]+" "+a[0]:a[0]+" - "+a[1]:a},resetExtent:function(){var t=this.option,e=g([t.min,t.max]);this._dataExtent=e},getDataDimension:function(t){var e=this.option.dimension;return null!=e?e:t.dimensions.length-1},getExtent:function(){return this._dataExtent.slice()},completeVisualOption:function(){function t(t){f(n.color)&&!t.inRange&&(t.inRange={color:n.color.slice().reverse()}),t.inRange=t.inRange||{color:y},p(this.stateList,function(e){var i=t[e];if(o.isString(i)){var n=a.get(i,"active",d);n?(t[e]={},t[e][i]=n):delete t[e]}},this)}function e(t,e,i){var n=t[e],o=t[i];n&&!o&&(o=t[i]={},p(n,function(t,e){if(s.isValidType(e)){var i=a.get(e,"inactive",d);null!=i&&(o[e]=i,"color"!==e||o.hasOwnProperty("opacity")||o.hasOwnProperty("colorAlpha")||(o.opacity=[0,0]))}}))}function i(t){var e=(t.inRange||{}).symbol||(t.outOfRange||{}).symbol,i=(t.inRange||{}).symbolSize||(t.outOfRange||{}).symbolSize,n=this.get("inactiveColor");p(this.stateList,function(r){var a=this.itemSize,s=t[r];s||(s=t[r]={color:d?n:[n]}),null==s.symbol&&(s.symbol=e&&o.clone(e)||(d?"roundRect":["roundRect"])),null==s.symbolSize&&(s.symbolSize=i&&o.clone(i)||(d?a[0]:[a[0],a[0]])),s.symbol=u(s.symbol,function(t){return"none"===t||"square"===t?"roundRect":t});var l=s.symbolSize;if(null!=l){var h=-(1/0);c(l,function(t){t>h&&(h=t)}),s.symbolSize=u(l,function(t){return m(t,[0,h],[0,a[0]],!0)})}},this)}var n=this.option,r={inRange:n.inRange,outOfRange:n.outOfRange},l=n.target||(n.target={}),h=n.controller||(n.controller={});o.merge(l,r),o.merge(h,r);var d=this.isCategory();t.call(this,l),t.call(this,h),e.call(this,l,"inRange","outOfRange"),i.call(this,h)},resetItemSize:function(){this.itemSize=[parseFloat(this.get("itemWidth")),parseFloat(this.get("itemHeight"))]},isCategory:function(){return!!this.option.categories},setSelected:v,getValueState:v});t.exports=x},function(t,e,i){var n=i(1),o=i(3),r=i(9),a=i(13),s=i(2),l=i(71);t.exports=s.extendComponentView({type:"visualMap",autoPositionValues:{left:1,right:1,top:1,bottom:1},init:function(t,e){this.ecModel=t,this.api=e,this.visualMapModel},render:function(t,e,i,n){return this.visualMapModel=t,t.get("show")===!1?void this.group.removeAll():void this.doRender.apply(this,arguments)},renderBackground:function(t){var e=this.visualMapModel,i=r.normalizeCssArray(e.get("padding")||0),n=t.getBoundingRect();t.add(new o.Rect({z2:-1,silent:!0,shape:{x:n.x-i[3],y:n.y-i[0],width:n.width+i[3]+i[1],height:n.height+i[0]+i[2]},style:{fill:e.get("backgroundColor"),stroke:e.get("borderColor"),lineWidth:e.get("borderWidth")}}))},getControllerVisual:function(t,e,i){function o(t){return u[t]}function r(t,e){u[t]=e}i=i||{};var a=i.forceState,s=this.visualMapModel,u={};if("symbol"===e&&(u.symbol=s.get("itemSymbol")),"color"===e){var h=s.get("contentColor");u.color=h}var c=s.controllerVisuals[a||s.getValueState(t)],d=l.prepareVisualTypes(c);return n.each(d,function(n){var a=c[n];i.convertOpacityToAlpha&&"opacity"===n&&(n="colorAlpha",a=c.__alphaForOpacity),l.dependsOn(n,e)&&a&&a.applyVisual(t,o,r)}),u[e]},positionGroup:function(t){var e=this.visualMapModel,i=this.api;a.positionGroup(t,e.getBoxLayoutParams(),{width:i.getWidth(),
+height:i.getHeight()})},doRender:n.noop})},function(t,e,i){var n=i(1),o=i(13),r={getItemAlign:function(t,e,i){var n=t.option,r=n.align;if(null!=r&&"auto"!==r)return r;for(var a={width:e.getWidth(),height:e.getHeight()},s="horizontal"===n.orient?1:0,l=[["left","right","width"],["top","bottom","height"]],u=l[s],h=[0,null,10],c={},d=0;d<3;d++)c[l[1-s][d]]=h[d],c[u[d]]=2===d?i[0]:n[u[d]];var f=[["x","width",3],["y","height",0]][s],p=o.getLayoutRect(c,a,n.padding);return u[(p.margin[f[2]]||0)+p[f[0]]+.5*p[f[1]]<.5*a[f[1]]?0:1]},convertDataIndex:function(t){return n.each(t||[],function(e){null!=t.dataIndex&&(t.dataIndexInside=t.dataIndex,t.dataIndex=null)}),t}};t.exports=r},function(t,e,i){function n(t,e){return t&&t.hasOwnProperty&&t.hasOwnProperty(e)}var o=i(1),r=o.each;t.exports=function(t){var e=t&&t.visualMap;o.isArray(e)||(e=e?[e]:[]),r(e,function(t){if(t){n(t,"splitList")&&!n(t,"pieces")&&(t.pieces=t.splitList,delete t.splitList);var e=t.pieces;e&&o.isArray(e)&&r(e,function(t){o.isObject(t)&&(n(t,"start")&&!n(t,"min")&&(t.min=t.start),n(t,"end")&&!n(t,"max")&&(t.max=t.end))})}})}},function(t,e,i){i(12).registerSubTypeDefaulter("visualMap",function(t){return t.categories||(t.pieces?t.pieces.length>0:t.splitNumber>0)&&!t.calculable?"piecewise":"continuous"})},function(t,e,i){function n(t,e){t.eachTargetSeries(function(e){var i=e.getData();s.applyVisual(t.stateList,t.targetVisuals,i,t.getValueState,t,t.getDataDimension(i))})}function o(t){t.eachSeries(function(e){var i=e.getData(),n=[];t.eachComponent("visualMap",function(t){if(t.isTargetSeries(e)){var o={};n.push(o),o.stops=t.getStops(e,r),o.dimension=t.getDataDimension(i)}}),e.getData().setVisual("visualMeta",n)})}function r(t,e,i){function n(t){return s[t]}function o(t,e){s[t]=e}for(var r=t.targetVisuals[i],a=l.prepareVisualTypes(r),s={},u=0,h=a.length;u<h;u++){var c=a[u],d=r["colorAlpha"===c?"__alphaForOpacity":c];d&&d.applyVisual(e,n,o)}return s.color}var a=i(2),s=i(173),l=i(71);a.registerVisual(a.PRIORITY.VISUAL.COMPONENT,function(t){t.eachComponent("visualMap",function(e){n(e,t)}),o(t)})},function(t,e,i){var n=i(2),o={type:"selectDataRange",event:"dataRangeSelected",update:"update"};n.registerAction(o,function(t,e){e.eachComponent({mainType:"visualMap",query:t},function(e){e.setSelected(t.selected)})})},function(t,e,i){function n(){l.call(this)}function o(t){this.name=t,this.zoomLimit,l.call(this),this._roamTransform=new n,this._viewTransform=new n,this._center,this._zoom}function r(t,e,i,n){var o=i.seriesModel,r=o?o.coordinateSystem:null;return r===this?r[t](n):null}var a=i(5),s=i(19),l=i(88),u=i(1),h=i(8),c=a.applyTransform;u.mixin(n,l),o.prototype={constructor:o,type:"view",dimensions:["x","y"],setBoundingRect:function(t,e,i,n){return this._rect=new h(t,e,i,n),this._rect},getBoundingRect:function(){return this._rect},setViewRect:function(t,e,i,n){this.transformTo(t,e,i,n),this._viewRect=new h(t,e,i,n)},transformTo:function(t,e,i,n){var o=this.getBoundingRect(),r=this._viewTransform;r.transform=o.calculateTransform(new h(t,e,i,n)),r.decomposeTransform(),this._updateTransform()},setCenter:function(t){t&&(this._center=t,this._updateCenterAndZoom())},setZoom:function(t){t=t||1;var e=this.zoomLimit;e&&(null!=e.max&&(t=Math.min(e.max,t)),null!=e.min&&(t=Math.max(e.min,t))),this._zoom=t,this._updateCenterAndZoom()},getDefaultCenter:function(){var t=this.getBoundingRect(),e=t.x+t.width/2,i=t.y+t.height/2;return[e,i]},getCenter:function(){return this._center||this.getDefaultCenter()},getZoom:function(){return this._zoom||1},getRoamTransform:function(){return this._roamTransform},_updateCenterAndZoom:function(){var t=this._viewTransform.getLocalTransform(),e=this._roamTransform,i=this.getDefaultCenter(),n=this.getCenter(),o=this.getZoom();n=a.applyTransform([],n,t),i=a.applyTransform([],i,t),e.origin=n,e.position=[i[0]-n[0],i[1]-n[1]],e.scale=[o,o],this._updateTransform()},_updateTransform:function(){var t=this._roamTransform,e=this._viewTransform;e.parent=t,t.updateTransform(),e.updateTransform(),e.transform&&s.copy(this.transform||(this.transform=[]),e.transform),this.transform?(this.invTransform=this.invTransform||[],s.invert(this.invTransform,this.transform)):this.invTransform=null,this.decomposeTransform()},getViewRect:function(){return this._viewRect},getViewRectAfterRoam:function(){var t=this.getBoundingRect().clone();return t.applyTransform(this.transform),t},dataToPoint:function(t){var e=this.transform;return e?c([],t,e):[t[0],t[1]]},pointToData:function(t){var e=this.invTransform;return e?c([],t,e):[t[0],t[1]]},convertToPixel:u.curry(r,"dataToPoint"),convertFromPixel:u.curry(r,"pointToData"),containPoint:function(t){return this.getViewRect().contain(t[0],t[1])}},u.mixin(o,l),t.exports=o},function(t,e,i){function n(t,e,i){if(this.name=t,this.contours=e,i)i=[i[0],i[1]];else{var n=this.getBoundingRect();i=[n.x+n.width/2,n.y+n.height/2]}this.center=i}var o=i(242),r=i(8),a=i(73),s=i(5);n.prototype={constructor:n,getBoundingRect:function(){var t=this._rect;if(t)return t;for(var e=Number.MAX_VALUE,i=[e,e],n=[-e,-e],o=[],l=[],u=this.contours,h=0;h<u.length;h++)a.fromPoints(u[h],o,l),s.min(i,i,o),s.max(n,n,l);return 0===h&&(i[0]=i[1]=n[0]=n[1]=0),this._rect=new r(i[0],i[1],n[0]-i[0],n[1]-i[1])},contain:function(t){var e=this.getBoundingRect(),i=this.contours;if(e.contain(t[0],t[1]))for(var n=0,r=i.length;n<r;n++)if(o.contain(i[n],t[0],t[1]))return!0;return!1},transformTo:function(t,e,i,n){var o=this.getBoundingRect(),a=o.width/o.height;i?n||(n=i/a):i=a*n;for(var l=new r(t,e,i,n),u=o.calculateTransform(l),h=this.contours,c=0;c<h.length;c++)for(var d=0;d<h[c].length;d++)s.applyTransform(h[c][d],h[c][d],u);o=this._rect,o.copy(l),this.center=[o.x+o.width/2,o.y+o.height/2]}},t.exports=n},function(t,e,i){function n(t,e){var i=[];return t.eachComponent("parallel",function(n,r){var a=new o(n,t,e);a.name="parallel_"+r,a.resize(n,e),n.coordinateSystem=a,a.model=n,i.push(a)}),t.eachSeries(function(e){if("parallel"===e.get("coordinateSystem")){var i=t.queryComponents({mainType:"parallel",index:e.get("parallelIndex"),id:e.get("parallelId")})[0];e.coordinateSystem=i.coordinateSystem}}),i}var o=i(363);i(23).register("parallel",{create:n})},function(t,e,i){function n(t){var e=t.mainData,i=t.datas;i||(i={main:e},t.datasAttr={main:"data"}),t.datas=t.mainData=null,u(e,i,t),d(i,function(i){d(e.TRANSFERABLE_METHODS,function(e){i.wrapMethod(e,c.curry(o,t))})}),e.wrapMethod("cloneShallow",c.curry(a,t)),d(e.CHANGABLE_METHODS,function(i){e.wrapMethod(i,c.curry(r,t))}),c.assert(i[e.dataType]===e)}function o(t,e){if(l(this)){var i=c.extend({},this[f]);i[this.dataType]=e,u(e,i,t)}else h(e,this.dataType,this[p],t);return e}function r(t,e){return t.struct&&t.struct.update(this),e}function a(t,e){return d(e[f],function(i,n){i!==e&&h(i.cloneShallow(),n,e,t)}),e}function s(t){var e=this[p];return null==t||null==e?e:e[f][t]}function l(t){return t[p]===t}function u(t,e,i){t[f]={},d(e,function(e,n){h(e,n,t,i)})}function h(t,e,i,n){i[f][e]=t,t[p]=i,t.dataType=e,n.struct&&(t[n.structAttr]=n.struct,n.struct[n.datasAttr[e]]=t),t.getLinkedData=s}var c=i(1),d=c.each,f="\0__link_datas",p="\0__link_mainData";t.exports=n},function(t,e,i){function n(t,e){return Math.abs(t-e)<a}function o(t,e,i){var o=0,a=t[0];if(!a)return!1;for(var s=1;s<t.length;s++){var l=t[s];o+=r(a[0],a[1],l[0],l[1],e,i),a=l}var u=t[0];return n(a[0],u[0])&&n(a[1],u[1])||(o+=r(a[0],a[1],u[0],u[1],e,i)),0!==o}var r=i(86),a=1e-8;t.exports={contain:o}},function(t,e,i){var n=i(2);i(244),i(245),n.registerVisual(i(247)),n.registerLayout(i(246))},function(t,e,i){"use strict";var n=i(1),o=i(15),r=i(171),a=o.extend({type:"series.boxplot",dependencies:["xAxis","yAxis","grid"],valueDimensions:["min","Q1","median","Q3","max"],dimensions:null,defaultOption:{zlevel:0,z:2,coordinateSystem:"cartesian2d",legendHoverLink:!0,hoverAnimation:!0,layout:null,boxWidth:[7,50],itemStyle:{normal:{color:"#fff",borderWidth:1},emphasis:{borderWidth:2,shadowBlur:5,shadowOffsetX:2,shadowOffsetY:2,shadowColor:"rgba(0,0,0,0.4)"}},animationEasing:"elasticOut",animationDuration:800}});n.mixin(a,r.seriesModelMixin,!0),t.exports=a},function(t,e,i){"use strict";function n(t,e,i){var n=e.getItemModel(i),o=n.getModel(u),r=e.getItemVisual(i,"color"),s=o.getItemStyle(["borderColor"]),l=t.childAt(t.whiskerIndex);l.style.set(s),l.style.stroke=r,l.dirty();var c=t.childAt(t.bodyIndex);c.style.set(s),c.style.stroke=r,c.dirty();var d=n.getModel(h).getItemStyle();a.setHoverStyle(t,d)}var o=i(1),r=i(27),a=i(3),s=i(171),l=r.extend({type:"boxplot",getStyleUpdater:function(){return n},dispose:o.noop});o.mixin(l,s.viewMixin,!0);var u=["itemStyle","normal"],h=["itemStyle","emphasis"];t.exports=l},function(t,e,i){function n(t){var e=[],i=[];return t.eachSeriesByType("boxplot",function(t){var n=t.getBaseAxis(),o=a.indexOf(i,n);o<0&&(o=i.length,i[o]=n,e[o]={axis:n,seriesModels:[]}),e[o].seriesModels.push(t)}),e}function o(t){var e,i,n=t.axis,o=t.seriesModels,r=o.length,s=t.boxWidthList=[],h=t.boxOffsetList=[],c=[];if("category"===n.type)i=n.getBandWidth();else{var d=0;u(o,function(t){d=Math.max(d,t.getData().count())}),e=n.getExtent(),Math.abs(e[1]-e[0])/d}u(o,function(t){var e=t.get("boxWidth");a.isArray(e)||(e=[e,e]),c.push([l(e[0],i)||0,l(e[1],i)||0])});var f=.8*i-2,p=f/r*.3,g=(f-p*(r-1))/r,m=g/2-f/2;u(o,function(t,e){h.push(m),m+=p+g,s.push(Math.min(Math.max(g,c[e][0]),c[e][1]))})}function r(t,e,i){var n=t.coordinateSystem,o=t.getData(),r=t.dimensions,a=t.get("layout"),s=i/2;o.each(r,function(){function t(t){var i=[];i[f]=c,i[p]=t;var o;return isNaN(c)||isNaN(t)?o=[NaN,NaN]:(o=n.dataToPoint(i),o[f]+=e),o}function i(t,e){var i=t.slice(),n=t.slice();i[f]+=s,n[f]-=s,e?x.push(i,n):x.push(n,i)}function l(t){var e=[t.slice(),t.slice()];e[0][f]-=s,e[1][f]+=s,y.push(e)}var u=arguments,h=r.length,c=u[0],d=u[h],f="horizontal"===a?0:1,p=1-f,g=t(u[3]),m=t(u[1]),v=t(u[5]),y=[[m,t(u[2])],[v,t(u[4])]];l(m),l(v),l(g);var x=[];i(y[0][1],0),i(y[1][1],1),o.setItemLayout(d,{chartLayout:a,initBaseline:g[p],median:g,bodyEnds:x,whiskerEnds:y})})}var a=i(1),s=i(4),l=s.parsePercent,u=a.each;t.exports=function(t){var e=n(t);u(e,function(t){var e=t.seriesModels;e.length&&(o(t),u(e,function(e,i){r(e,t.boxOffsetList[i],t.boxWidthList[i])}))})}},function(t,e){var i=["itemStyle","normal","borderColor"];t.exports=function(t,e){var n=t.get("color");t.eachRawSeriesByType("boxplot",function(e){var o=n[e.seriesIndex%n.length],r=e.getData();r.setVisual({legendSymbol:"roundRect",color:e.get(i)||o}),t.isSeriesFiltered(e)||r.each(function(t){var e=r.getItemModel(t);r.setItemVisual(t,{color:e.get(i,!0)})})})}},function(t,e,i){var n=i(2);i(249),i(250),n.registerPreprocessor(i(253)),n.registerVisual(i(252)),n.registerLayout(i(251))},function(t,e,i){"use strict";var n=i(1),o=i(15),r=i(171),a=i(9),s=a.encodeHTML,l=a.addCommas,u=o.extend({type:"series.candlestick",dependencies:["xAxis","yAxis","grid"],valueDimensions:["open","close","lowest","highest"],dimensions:null,defaultOption:{zlevel:0,z:2,coordinateSystem:"cartesian2d",legendHoverLink:!0,hoverAnimation:!0,layout:null,itemStyle:{normal:{color:"#c23531",color0:"#314656",borderWidth:1,borderColor:"#c23531",borderColor0:"#314656"},emphasis:{borderWidth:2}},animationUpdate:!1,animationEasing:"linear",animationDuration:300},getShadowDim:function(){return"open"},formatTooltip:function(t,e){var i=n.map(this.valueDimensions,function(e){return e+": "+l(this._data.get(e,t))},this);return s(this.name)+"<br />"+i.join("<br />")},brushSelector:function(t,e){return e.rect(t.brushRect)}});n.mixin(u,r.seriesModelMixin,!0),t.exports=u},function(t,e,i){"use strict";function n(t,e,i){var n=e.getItemModel(i),o=n.getModel(u),r=e.getItemVisual(i,"color"),s=e.getItemVisual(i,"borderColor")||r,l=o.getItemStyle(["color","color0","borderColor","borderColor0"]),c=t.childAt(t.whiskerIndex);c.useStyle(l),c.style.stroke=s;var d=t.childAt(t.bodyIndex);d.useStyle(l),d.style.fill=r,d.style.stroke=s;var f=n.getModel(h).getItemStyle();a.setHoverStyle(t,f)}var o=i(1),r=i(27),a=i(3),s=i(171),l=r.extend({type:"candlestick",getStyleUpdater:function(){return n},dispose:o.noop});o.mixin(l,s.viewMixin,!0);var u=["itemStyle","normal"],h=["itemStyle","emphasis"];t.exports=l},function(t,e){function i(t,e){var i,a=t.getBaseAxis(),s="category"===a.type?a.getBandWidth():(i=a.getExtent(),Math.abs(i[1]-i[0])/e.count());return s/2-2>o?s/2-2:s-o>r?o:Math.max(s-r,n)}var n=2,o=5,r=4;t.exports=function(t){t.eachSeriesByType("candlestick",function(t){var e=t.coordinateSystem,n=t.getData(),o=t.dimensions,r=t.get("layout"),a=i(t,n);n.each(o,function(){function t(t){var i=[];return i[d]=h,i[f]=t,isNaN(h)||isNaN(t)?[NaN,NaN]:e.dataToPoint(i)}function i(t,e){var i=t.slice(),n=t.slice();i[d]+=a/2,n[d]-=a/2,e?T.push(i,n):T.push(n,i)}function s(){var e=t(Math.min(p,g,m,v)),i=t(Math.max(p,g,m,v));return e[d]-=a/2,i[d]-=a/2,{x:e[0],y:e[1],width:f?a:i[0]-e[0],height:f?i[1]-e[1]:a}}var l=arguments,u=o.length,h=l[0],c=l[u],d="horizontal"===r?0:1,f=1-d,p=l[1],g=l[2],m=l[3],v=l[4],y=Math.min(p,g),x=Math.max(p,g),_=t(y),b=t(x),w=t(m),S=t(v),M=[[S,b],[w,_]],T=[];i(b,0),i(_,1),n.setItemLayout(c,{chartLayout:r,sign:p>g?-1:p<g?1:0,initBaseline:p>g?b[f]:_[f],bodyEnds:T,whiskerEnds:M,brushRect:s()})},!0)})}},function(t,e){var i=["itemStyle","normal","borderColor"],n=["itemStyle","normal","borderColor0"],o=["itemStyle","normal","color"],r=["itemStyle","normal","color0"];t.exports=function(t,e){t.eachRawSeriesByType("candlestick",function(e){var a=e.getData();a.setVisual({legendSymbol:"roundRect"}),t.isSeriesFiltered(e)||a.each(function(t){var e=a.getItemModel(t),s=a.getItemLayout(t).sign;a.setItemVisual(t,{color:e.get(s>0?o:r),borderColor:e.get(s>0?i:n)})})})}},function(t,e,i){var n=i(1);t.exports=function(t){t&&n.isArray(t.series)&&n.each(t.series,function(t){n.isObject(t)&&"k"===t.type&&(t.type="candlestick")})}},function(t,e,i){var n=i(1),o=i(2);i(255),i(256),o.registerVisual(n.curry(i(46),"effectScatter","circle",null)),o.registerLayout(n.curry(i(55),"effectScatter"))},function(t,e,i){"use strict";var n=i(34),o=i(15);t.exports=o.extend({type:"series.effectScatter",dependencies:["grid","polar"],getInitialData:function(t,e){var i=n(t.data,this,e);return i},brushSelector:"point",defaultOption:{coordinateSystem:"cartesian2d",zlevel:0,z:2,legendHoverLink:!0,effectType:"ripple",progressive:0,showEffectOn:"render",rippleEffect:{period:4,scale:2.5,brushType:"fill"},symbolSize:10}})},function(t,e,i){var n=i(39),o=i(283);i(2).extendChartView({type:"effectScatter",init:function(){this._symbolDraw=new n(o)},render:function(t,e,i){var n=t.getData(),o=this._symbolDraw;o.updateData(n),this.group.add(o.group)},updateLayout:function(){this._symbolDraw.updateLayout()},remove:function(t,e){this._symbolDraw&&this._symbolDraw.remove(e)},dispose:function(){}})},function(t,e,i){var n=i(1),o=i(2);i(258),i(259),o.registerVisual(n.curry(i(72),"funnel")),o.registerLayout(i(260)),o.registerProcessor(n.curry(i(70),"funnel"))},function(t,e,i){"use strict";var n=i(14),o=i(7),r=i(29),a=i(2).extendSeriesModel({type:"series.funnel",init:function(t){a.superApply(this,"init",arguments),this.legendDataProvider=function(){return this._dataBeforeProcessed},this._defaultLabelLine(t)},getInitialData:function(t,e){var i=r(["value"],t.data),o=new n(i,this);return o.initData(t.data),o},_defaultLabelLine:function(t){o.defaultEmphasis(t.labelLine,["show"]);var e=t.labelLine.normal,i=t.labelLine.emphasis;e.show=e.show&&t.label.normal.show,i.show=i.show&&t.label.emphasis.show},defaultOption:{zlevel:0,z:2,legendHoverLink:!0,left:80,top:60,right:80,bottom:60,minSize:"0%",maxSize:"100%",sort:"descending",gap:0,funnelAlign:"center",label:{normal:{show:!0,position:"outer"},emphasis:{show:!0}},labelLine:{normal:{show:!0,length:20,lineStyle:{width:1,type:"solid"}},emphasis:{}},itemStyle:{normal:{borderColor:"#fff",borderWidth:1},emphasis:{}}}});t.exports=a},function(t,e,i){function n(t,e){function i(){a.ignore=a.hoverIgnore,s.ignore=s.hoverIgnore}function n(){a.ignore=a.normalIgnore,s.ignore=s.normalIgnore}r.Group.call(this);var o=new r.Polygon,a=new r.Polyline,s=new r.Text;this.add(o),this.add(a),this.add(s),this.updateData(t,e,!0),this.on("emphasis",i).on("normal",n).on("mouseover",i).on("mouseout",n)}function o(t,e,i,n){var o=n.getModel("textStyle"),r=n.get("position"),s="inside"===r||"inner"===r||"center"===r;return{fill:o.getTextColor()||(s?"#fff":t.getItemVisual(e,"color")),textFont:o.getFont(),text:a.retrieve(t.hostModel.getFormattedLabel(e,i),t.getName(e))}}var r=i(3),a=i(1),s=n.prototype,l=["itemStyle","normal","opacity"];s.updateData=function(t,e,i){var n=this.childAt(0),o=t.hostModel,s=t.getItemModel(e),u=t.getItemLayout(e),h=t.getItemModel(e).get(l);h=null==h?1:h,n.useStyle({}),i?(n.setShape({points:u.points}),n.setStyle({opacity:0}),r.initProps(n,{style:{opacity:h}},o,e)):r.updateProps(n,{style:{opacity:h},shape:{points:u.points}},o,e);var c=s.getModel("itemStyle"),d=t.getItemVisual(e,"color");n.setStyle(a.defaults({lineJoin:"round",fill:d},c.getModel("normal").getItemStyle(["opacity"]))),n.hoverStyle=c.getModel("emphasis").getItemStyle(),this._updateLabel(t,e),r.setHoverStyle(this)},s._updateLabel=function(t,e){var i=this.childAt(1),n=this.childAt(2),a=t.hostModel,s=t.getItemModel(e),l=t.getItemLayout(e),u=l.label,h=t.getItemVisual(e,"color");r.updateProps(i,{shape:{points:u.linePoints||u.linePoints}},a,e),r.updateProps(n,{style:{x:u.x,y:u.y}},a,e),n.attr({style:{textAlign:u.textAlign,textVerticalAlign:u.verticalAlign,textFont:u.font},rotation:u.rotation,origin:[u.x,u.y],z2:10});var c=s.getModel("label.normal"),d=s.getModel("label.emphasis"),f=s.getModel("labelLine.normal"),p=s.getModel("labelLine.emphasis");n.setStyle(o(t,e,"normal",c)),n.ignore=n.normalIgnore=!c.get("show"),n.hoverIgnore=!d.get("show"),i.ignore=i.normalIgnore=!f.get("show"),i.hoverIgnore=!p.get("show"),i.setStyle({stroke:h}),i.setStyle(f.getModel("lineStyle").getLineStyle()),n.hoverStyle=o(t,e,"emphasis",d),i.hoverStyle=p.getModel("lineStyle").getLineStyle()},a.inherits(n,r.Group);var u=i(27).extend({type:"funnel",render:function(t,e,i){var o=t.getData(),r=this._data,a=this.group;o.diff(r).add(function(t){var e=new n(o,t);o.setItemGraphicEl(t,e),a.add(e)}).update(function(t,e){var i=r.getItemGraphicEl(e);i.updateData(o,t),a.add(i),o.setItemGraphicEl(t,i)}).remove(function(t){var e=r.getItemGraphicEl(t);a.remove(e)}).execute(),this._data=o},remove:function(){this.group.removeAll(),this._data=null},dispose:function(){}});t.exports=u},function(t,e,i){function n(t,e){return a.getLayoutRect(t.getBoxLayoutParams(),{width:e.getWidth(),height:e.getHeight()})}function o(t,e){for(var i=t.mapArray("value",function(t){return t}),n=[],o="ascending"===e,r=0,a=t.count();r<a;r++)n[r]=r;return n.sort(function(t,e){return o?i[t]-i[e]:i[e]-i[t]}),n}function r(t){t.each(function(e){var i,n,o,r,a=t.getItemModel(e),s=a.getModel("label.normal"),l=s.get("position"),u=a.getModel("labelLine.normal"),h=t.getItemLayout(e),c=h.points,d="inner"===l||"inside"===l||"center"===l;if(d)n=(c[0][0]+c[1][0]+c[2][0]+c[3][0])/4,o=(c[0][1]+c[1][1]+c[2][1]+c[3][1])/4,i="center",r=[[n,o],[n,o]];else{var f,p,g,m=u.get("length");"left"===l?(f=(c[3][0]+c[0][0])/2,p=(c[3][1]+c[0][1])/2,g=f-m,n=g-5,i="right"):(f=(c[1][0]+c[2][0])/2,p=(c[1][1]+c[2][1])/2,g=f+m,n=g+5,i="left");var v=p;r=[[f,p],[g,v]],o=v}h.label={linePoints:r,x:n,y:o,verticalAlign:"middle",textAlign:i,inside:d}})}var a=i(13),s=i(4),l=s.parsePercent;t.exports=function(t,e,i){t.eachSeriesByType("funnel",function(t){var i=t.getData(),a=t.get("sort"),u=n(t,e),h=o(i,a),c=[l(t.get("minSize"),u.width),l(t.get("maxSize"),u.width)],d=i.getDataExtent("value"),f=t.get("min"),p=t.get("max");null==f&&(f=Math.min(d[0],0)),null==p&&(p=d[1]);var g=t.get("funnelAlign"),m=t.get("gap"),v=(u.height-m*(i.count()-1))/i.count(),y=u.y,x=function(t,e){var n,o=i.get("value",t)||0,r=s.linearMap(o,[f,p],c,!0);switch(g){case"left":n=u.x;break;case"center":n=u.x+(u.width-r)/2;break;case"right":n=u.x+u.width-r}return[[n,e],[n+r,e]]};"ascending"===a&&(v=-v,m=-m,y+=u.height,h=h.reverse());for(var _=0;_<h.length;_++){var b=h[_],w=h[_+1],S=x(b,y),M=x(w,y+v);y+=v+m,i.setItemLayout(b,{points:S.concat(M.slice().reverse())})}r(i)})}},function(t,e,i){i(262),i(263)},function(t,e,i){var n=i(14),o=i(15),r=i(1),a=o.extend({type:"series.gauge",getInitialData:function(t,e){var i=new n(["value"],this),o=t.data||[];return r.isArray(o)||(o=[o]),i.initData(o),i},defaultOption:{zlevel:0,z:2,center:["50%","50%"],legendHoverLink:!0,radius:"75%",startAngle:225,endAngle:-45,clockwise:!0,min:0,max:100,splitNumber:10,axisLine:{show:!0,lineStyle:{color:[[.2,"#91c7ae"],[.8,"#63869e"],[1,"#c23531"]],width:30}},splitLine:{show:!0,length:30,lineStyle:{color:"#eee",width:2,type:"solid"}},axisTick:{show:!0,splitNumber:5,length:8,lineStyle:{color:"#eee",width:1,type:"solid"}},axisLabel:{show:!0,distance:5,textStyle:{color:"auto"}},pointer:{show:!0,length:"80%",width:8},itemStyle:{normal:{color:"auto"}},title:{show:!0,offsetCenter:[0,"-40%"],textStyle:{color:"#333",fontSize:15}},detail:{show:!0,backgroundColor:"rgba(0,0,0,0)",borderWidth:0,borderColor:"#ccc",width:100,height:40,offsetCenter:[0,"40%"],textStyle:{color:"auto",fontSize:30}}}});t.exports=a},function(t,e,i){function n(t,e){var i=t.get("center"),n=e.getWidth(),o=e.getHeight(),r=Math.min(n,o),a=l(i[0],e.getWidth()),s=l(i[1],e.getHeight()),u=l(t.get("radius"),r/2);return{cx:a,cy:s,r:u}}function o(t,e){return e&&("string"==typeof e?t=e.replace("{value}",t):"function"==typeof e&&(t=e(t))),t}var r=i(264),a=i(3),s=i(4),l=s.parsePercent,u=2*Math.PI,h=i(27).extend({type:"gauge",render:function(t,e,i){this.group.removeAll();var o=t.get("axisLine.lineStyle.color"),r=n(t,i);this._renderMain(t,e,i,o,r)},dispose:function(){},_renderMain:function(t,e,i,n,o){for(var r=this.group,s=t.getModel("axisLine"),l=s.getModel("lineStyle"),h=t.get("clockwise"),c=-t.get("startAngle")/180*Math.PI,d=-t.get("endAngle")/180*Math.PI,f=(d-c)%u,p=c,g=l.get("width"),m=0;m<n.length;m++){var v=Math.min(Math.max(n[m][0],0),1),d=c+f*v,y=new a.Sector({shape:{startAngle:p,endAngle:d,cx:o.cx,cy:o.cy,clockwise:h,r0:o.r-g,r:o.r},silent:!0});y.setStyle({fill:n[m][1]}),y.setStyle(l.getLineStyle(["color","borderWidth","borderColor"])),r.add(y),p=d}var x=function(t){if(t<=0)return n[0][1];for(var e=0;e<n.length;e++)if(n[e][0]>=t&&(0===e?0:n[e-1][0])<t)return n[e][1];return n[e-1][1]};if(!h){var _=c;c=d,d=_}this._renderTicks(t,e,i,x,o,c,d,h),this._renderPointer(t,e,i,x,o,c,d,h),this._renderTitle(t,e,i,x,o),this._renderDetail(t,e,i,x,o)},_renderTicks:function(t,e,i,n,r,u,h,c){for(var d=this.group,f=r.cx,p=r.cy,g=r.r,m=t.get("min"),v=t.get("max"),y=t.getModel("splitLine"),x=t.getModel("axisTick"),_=t.getModel("axisLabel"),b=t.get("splitNumber"),w=x.get("splitNumber"),S=l(y.get("length"),g),M=l(x.get("length"),g),T=u,I=(h-u)/b,A=I/w,L=y.getModel("lineStyle").getLineStyle(),C=x.getModel("lineStyle").getLineStyle(),D=_.getModel("textStyle"),P=0;P<=b;P++){var k=Math.cos(T),z=Math.sin(T);if(y.get("show")){var O=new a.Line({shape:{x1:k*g+f,y1:z*g+p,x2:k*(g-S)+f,y2:z*(g-S)+p},style:L,silent:!0});"auto"===L.stroke&&O.setStyle({stroke:n(P/b)}),d.add(O)}if(_.get("show")){var E=o(s.round(P/b*(v-m)+m),_.get("formatter")),R=_.get("distance"),V=new a.Text({style:{text:E,x:k*(g-S-R)+f,y:z*(g-S-R)+p,fill:D.getTextColor(),textFont:D.getFont(),textVerticalAlign:z<-.4?"top":z>.4?"bottom":"middle",textAlign:k<-.4?"left":k>.4?"right":"center"},silent:!0});"auto"===V.style.fill&&V.setStyle({fill:n(P/b)}),d.add(V)}if(x.get("show")&&P!==b){for(var N=0;N<=w;N++){var k=Math.cos(T),z=Math.sin(T),B=new a.Line({shape:{x1:k*g+f,y1:z*g+p,x2:k*(g-M)+f,y2:z*(g-M)+p},silent:!0,style:C});"auto"===C.stroke&&B.setStyle({stroke:n((P+N/w)/b)}),d.add(B),T+=A}T-=A}else T+=I}},_renderPointer:function(t,e,i,n,o,u,h,c){var d=[+t.get("min"),+t.get("max")],f=[u,h],p=t.getData(),g=this._data,m=this.group;p.diff(g).add(function(e){var i=new r({shape:{angle:u}});a.updateProps(i,{shape:{angle:s.linearMap(p.get("value",e),d,f,!0)}},t),m.add(i),p.setItemGraphicEl(e,i)}).update(function(e,i){var n=g.getItemGraphicEl(i);a.updateProps(n,{shape:{angle:s.linearMap(p.get("value",e),d,f,!0)}},t),m.add(n),p.setItemGraphicEl(e,n)}).remove(function(t){var e=g.getItemGraphicEl(t);m.remove(e)}).execute(),p.eachItemGraphicEl(function(t,e){var i=p.getItemModel(e),r=i.getModel("pointer");t.setShape({x:o.cx,y:o.cy,width:l(r.get("width"),o.r),r:l(r.get("length"),o.r)}),t.useStyle(i.getModel("itemStyle.normal").getItemStyle()),"auto"===t.style.fill&&t.setStyle("fill",n((p.get("value",e)-d[0])/(d[1]-d[0]))),a.setHoverStyle(t,i.getModel("itemStyle.emphasis").getItemStyle())}),this._data=p},_renderTitle:function(t,e,i,n,o){var r=t.getModel("title");if(r.get("show")){var s=r.getModel("textStyle"),u=r.get("offsetCenter"),h=o.cx+l(u[0],o.r),c=o.cy+l(u[1],o.r),d=new a.Text({style:{x:h,y:c,text:t.getData().getName(0),fill:s.getTextColor(),textFont:s.getFont(),textAlign:"center",textVerticalAlign:"middle"}});this.group.add(d)}},_renderDetail:function(t,e,i,n,r){var u=t.getModel("detail"),h=t.get("min"),c=t.get("max");if(u.get("show")){var d=u.getModel("textStyle"),f=u.get("offsetCenter"),p=r.cx+l(f[0],r.r),g=r.cy+l(f[1],r.r),m=l(u.get("width"),r.r),v=l(u.get("height"),r.r),y=t.getData().get("value",0),x=new a.Rect({shape:{x:p-m/2,y:g-v/2,width:m,height:v},style:{text:o(y,u.get("formatter")),fill:u.get("backgroundColor"),textFill:d.getTextColor(),textFont:d.getFont()}});"auto"===x.style.textFill&&x.setStyle("textFill",n(s.linearMap(y,[h,c],[0,1],!0))),x.setStyle(u.getItemStyle(["color"])),this.group.add(x)}}});t.exports=h},function(t,e,i){t.exports=i(6).extend({type:"echartsGaugePointer",shape:{angle:0,width:10,r:10,x:0,y:0},buildPath:function(t,e){var i=Math.cos,n=Math.sin,o=e.r,r=e.width,a=e.angle,s=e.x-i(a)*r*(r>=o/3?1:2),l=e.y-n(a)*r*(r>=o/3?1:2);a=e.angle-Math.PI/2,t.moveTo(s,l),t.lineTo(e.x+i(a)*r,e.y+n(a)*r),t.lineTo(e.x+i(e.angle)*o,e.y+n(e.angle)*o),t.lineTo(e.x-i(a)*r,e.y-n(a)*r),t.lineTo(s,l)}})},function(t,e,i){var n=i(2),o=i(1);i(266),i(267),i(276),n.registerProcessor(i(269)),n.registerVisual(o.curry(i(46),"graph","circle",null)),n.registerVisual(i(270)),n.registerVisual(i(273)),n.registerLayout(i(277)),n.registerLayout(i(271)),n.registerLayout(i(275)),n.registerCoordinateSystem("graphView",{create:i(272)})},function(t,e,i){"use strict";var n=i(14),o=i(1),r=i(7),a=i(10),s=i(228),l=i(2).extendSeriesModel({type:"series.graph",init:function(t){l.superApply(this,"init",arguments),this.legendDataProvider=function(){return this._categoriesData},this.fillDataTextStyle(t.edges||t.links),this._updateCategoriesData()},mergeOption:function(t){l.superApply(this,"mergeOption",arguments),this.fillDataTextStyle(t.edges||t.links),this._updateCategoriesData()},mergeDefaultAndTheme:function(t){l.superApply(this,"mergeDefaultAndTheme",arguments),r.defaultEmphasis(t.edgeLabel,r.LABEL_OPTIONS)},getInitialData:function(t,e){function i(t,e){t.wrapMethod("getItemModel",function(t){var e=r._categoriesModels,i=t.getShallow("category"),n=e[i];return n&&(n.parentModel=t.parentModel,t.parentModel=n),t});var i=r.getModel("edgeLabel"),n=function(t,e){var o=(t||"").split(".");"label"===o[0]&&(e=e||i.getModel(o.slice(1)));var r=a.prototype.getModel.call(this,o,e);return r.getModel=n,r};e.wrapMethod("getItemModel",function(t){return t.getModel=n,t})}var n=t.edges||t.links||[],o=t.data||t.nodes||[],r=this;if(o&&n)return s(o,n,this,!0,i).data},getGraph:function(){return this.getData().graph},getEdgeData:function(){return this.getGraph().edgeData},getCategoriesData:function(){return this._categoriesData},formatTooltip:function(t,e,i){if("edge"===i){var n=this.getData(),o=this.getDataParams(t,i),r=n.graph.getEdgeByIndex(t),a=n.getName(r.node1.dataIndex),s=n.getName(r.node2.dataIndex),u=a+" > "+s;return o.value&&(u+=" : "+o.value),u}return l.superApply(this,"formatTooltip",arguments)},_updateCategoriesData:function(){var t=o.map(this.option.categories||[],function(t){return null!=t.value?t:o.extend({value:0},t)}),e=new n(["value"],this);e.initData(t),this._categoriesData=e,this._categoriesModels=e.mapArray(function(t){return e.getItemModel(t,!0)})},setZoom:function(t){this.option.zoom=t},setCenter:function(t){this.option.center=t},ifEnableAnimation:function(){return l.superCall(this,"ifEnableAnimation")&&!("force"===this.get("layout")&&this.get("force.layoutAnimation"))},defaultOption:{zlevel:0,z:2,coordinateSystem:"view",legendHoverLink:!0,hoverAnimation:!0,layout:null,focusNodeAdjacency:!1,circular:{rotateLabel:!1},force:{initLayout:null,repulsion:[0,50],gravity:.1,edgeLength:30,layoutAnimation:!0},left:"center",top:"center",symbol:"circle",symbolSize:10,edgeSymbol:["none","none"],edgeSymbolSize:10,edgeLabel:{normal:{position:"middle"},emphasis:{}},draggable:!1,roam:!1,center:null,zoom:1,nodeScaleRatio:.6,label:{normal:{show:!1,formatter:"{b}"},emphasis:{show:!0}},itemStyle:{normal:{},emphasis:{}},lineStyle:{normal:{color:"#aaa",width:1,curveness:0,opacity:.5},emphasis:{}}}});t.exports=l},function(t,e,i){function n(t,e){return t.getVisual("opacity")||t.getModel().get(e)}var o=i(39),r=i(95),a=i(79),s=i(3),l=i(268),u=i(1),h=["itemStyle","normal","opacity"],c=["lineStyle","normal","opacity"];i(2).extendChartView({type:"graph",init:function(t,e){var i=new o,n=new r,s=this.group,l=new a(e.getZr(),s);s.add(i.group),s.add(n.group),this._symbolDraw=i,this._lineDraw=n,this._controller=l,this._firstRender=!0},render:function(t,e,i){var n=t.coordinateSystem;this._model=t,this._nodeScaleRatio=t.get("nodeScaleRatio");var o=this._symbolDraw,r=this._lineDraw,a=this.group;if("view"===n.type){var u={position:n.position,scale:n.scale};this._firstRender?a.attr(u):s.updateProps(a,u,t)}l(t.getGraph(),this._getNodeGlobalScale(t));var h=t.getData();o.updateData(h);var c=t.getEdgeData();r.updateData(c),this._updateNodeAndLinkScale(),this._updateController(t,i),clearTimeout(this._layoutTimeout);var d=t.forceLayout,f=t.get("force.layoutAnimation");d&&this._startForceLayoutIteration(d,f),h.eachItemGraphicEl(function(t,e){var i=h.getItemModel(e);t.off("drag").off("dragend");var n=h.getItemModel(e).get("draggable");n&&t.on("drag",function(){d&&(d.warmUp(),!this._layouting&&this._startForceLayoutIteration(d,f),d.setFixed(e),h.setItemLayout(e,t.position))},this).on("dragend",function(){d&&d.setUnfixed(e)},this),t.setDraggable(n&&d),t.off("mouseover",this._focusNodeAdjacency),t.off("mouseout",this._unfocusAll),i.get("focusNodeAdjacency")&&(t.on("mouseover",this._focusNodeAdjacency,this),t.on("mouseout",this._unfocusAll,this))},this);var p="circular"===t.get("layout")&&t.get("circular.rotateLabel"),g=h.getLayout("cx"),m=h.getLayout("cy");h.eachItemGraphicEl(function(t,e){var i=t.getSymbolPath();if(p){var n=h.getItemLayout(e),o=Math.atan2(n[1]-m,n[0]-g);o<0&&(o=2*Math.PI+o);var r=n[0]<g;r&&(o-=Math.PI);var a=r?"left":"right";i.setStyle({textRotation:o,textPosition:a}),i.hoverStyle&&(i.hoverStyle.textPosition=a)}else i.setStyle({textRotation:0})}),this._firstRender=!1},dispose:function(){this._controller&&this._controller.dispose()},_focusNodeAdjacency:function(t){function e(t,e){var i=n(t,e),o=t.getGraphicEl();null==i&&(i=1),o.traverse(function(t){t.trigger("normal"),"group"!==t.type&&t.setStyle("opacity",.1*i)})}function i(t,e){var i=n(t,e),o=t.getGraphicEl();o.traverse(function(t){t.trigger("emphasis"),"group"!==t.type&&t.setStyle("opacity",i)})}var o=this._model.getData(),r=o.graph,a=t.target,s=a.dataIndex,l=a.dataType;if(null!==s&&"edge"!==l){r.eachNode(function(t){e(t,h)}),r.eachEdge(function(t){e(t,c)});var d=r.getNodeByIndex(s);i(d,h),u.each(d.edges,function(t){t.dataIndex<0||(i(t,c),i(t.node1,h),i(t.node2,h))})}},_unfocusAll:function(){var t=this._model.getData(),e=t.graph;e.eachNode(function(t){var e=n(t,h);t.getGraphicEl().traverse(function(t){t.trigger("normal"),"group"!==t.type&&t.setStyle("opacity",e)})}),e.eachEdge(function(t){var e=n(t,c);t.getGraphicEl().traverse(function(t){t.trigger("normal"),"group"!==t.type&&t.setStyle("opacity",e)})})},_startForceLayoutIteration:function(t,e){
+var i=this;!function n(){t.step(function(t){i.updateLayout(i._model),(i._layouting=!t)&&(e?i._layoutTimeout=setTimeout(n,16):n())})}()},_updateController:function(t,e){var i=this._controller,n=this.group;return i.setContainsPoint(function(t,e){var i=n.getBoundingRect();return i.applyTransform(n.transform),i.contain(t,e)}),"view"!==t.coordinateSystem.type?void i.disable():(i.enable(t.get("roam")),i.zoomLimit=t.get("scaleLimit"),i.zoom=t.coordinateSystem.getZoom(),void i.off("pan").off("zoom").on("pan",function(i,n){e.dispatchAction({seriesId:t.id,type:"graphRoam",dx:i,dy:n})}).on("zoom",function(i,n,o){e.dispatchAction({seriesId:t.id,type:"graphRoam",zoom:i,originX:n,originY:o}),this._updateNodeAndLinkScale(),l(t.getGraph(),this._getNodeGlobalScale(t)),this._lineDraw.updateLayout()},this))},_updateNodeAndLinkScale:function(){var t=this._model,e=t.getData(),i=this._getNodeGlobalScale(t),n=[i,i];e.eachItemGraphicEl(function(t,e){t.attr("scale",n)})},_getNodeGlobalScale:function(t){var e=t.coordinateSystem;if("view"!==e.type)return 1;var i=this._nodeScaleRatio,n=e.scale,o=n&&n[0]||1,r=e.getZoom(),a=(r-1)*i+1;return a/o},updateLayout:function(t){l(t.getGraph(),this._getNodeGlobalScale(t)),this._symbolDraw.updateLayout(),this._lineDraw.updateLayout()},remove:function(t,e){this._symbolDraw&&this._symbolDraw.remove(),this._lineDraw&&this._lineDraw.remove()}})},function(t,e,i){function n(t,e,i){for(var n,o=t[0],r=t[1],d=t[2],f=1/0,p=i*i,g=.1,m=.1;m<=.9;m+=.1){a[0]=u(o[0],r[0],d[0],m),a[1]=u(o[1],r[1],d[1],m);var v=c(h(a,e)-p);v<f&&(f=v,n=m)}for(var y=0;y<32;y++){var x=n+g;s[0]=u(o[0],r[0],d[0],n),s[1]=u(o[1],r[1],d[1],n),l[0]=u(o[0],r[0],d[0],x),l[1]=u(o[1],r[1],d[1],x);var v=h(s,e)-p;if(c(v)<.01)break;var _=h(l,e)-p;g/=2,v<0?_>=0?n+=g:n-=g:_>=0?n-=g:n+=g}return n}var o=i(17),r=i(5),a=[],s=[],l=[],u=o.quadraticAt,h=r.distSquare,c=Math.abs;t.exports=function(t,e){function i(t){var e=t.getVisual("symbolSize");return e instanceof Array&&(e=(e[0]+e[1])/2),e}var a=[],s=o.quadraticSubdivide,l=[[],[],[]],u=[[],[]],h=[];e/=2,t.eachEdge(function(t,o){var c=t.getLayout(),d=t.getVisual("fromSymbol"),f=t.getVisual("toSymbol");c.__original||(c.__original=[r.clone(c[0]),r.clone(c[1])],c[2]&&c.__original.push(r.clone(c[2])));var p=c.__original;if(null!=c[2]){if(r.copy(l[0],p[0]),r.copy(l[1],p[2]),r.copy(l[2],p[1]),d&&"none"!=d){var g=i(t.node1),m=n(l,p[0],g*e);s(l[0][0],l[1][0],l[2][0],m,a),l[0][0]=a[3],l[1][0]=a[4],s(l[0][1],l[1][1],l[2][1],m,a),l[0][1]=a[3],l[1][1]=a[4]}if(f&&"none"!=f){var g=i(t.node2),m=n(l,p[1],g*e);s(l[0][0],l[1][0],l[2][0],m,a),l[1][0]=a[1],l[2][0]=a[2],s(l[0][1],l[1][1],l[2][1],m,a),l[1][1]=a[1],l[2][1]=a[2]}r.copy(c[0],l[0]),r.copy(c[1],l[2]),r.copy(c[2],l[1])}else{if(r.copy(u[0],p[0]),r.copy(u[1],p[1]),r.sub(h,u[1],u[0]),r.normalize(h,h),d&&"none"!=d){var g=i(t.node1);r.scaleAndAdd(u[0],u[0],h,g*e)}if(f&&"none"!=f){var g=i(t.node2);r.scaleAndAdd(u[1],u[1],h,-g*e)}r.copy(c[0],u[0]),r.copy(c[1],u[1])}})}},function(t,e){t.exports=function(t){var e=t.findComponents({mainType:"legend"});e&&e.length&&t.eachSeriesByType("graph",function(t){var i=t.getCategoriesData(),n=t.getGraph(),o=n.data,r=i.mapArray(i.getName);o.filterSelf(function(t){var i=o.getItemModel(t),n=i.getShallow("category");if(null!=n){"number"==typeof n&&(n=r[n]);for(var a=0;a<e.length;a++)if(!e[a].isSelected(n))return!1}return!0})},this)}},function(t,e){t.exports=function(t){var e={};t.eachSeriesByType("graph",function(t){var i=t.getCategoriesData(),n=t.getData(),o={};i.each(function(n){var r=i.getName(n);o[r]=n;var a=i.getItemModel(n),s=a.get("itemStyle.normal.color")||t.getColorFromPalette(r,e);i.setItemVisual(n,"color",s)}),i.count()&&n.each(function(t){var e=n.getItemModel(t),r=e.getShallow("category");null!=r&&("string"==typeof r&&(r=o[r]),n.getItemVisual(t,"color",!0)||n.setItemVisual(t,"color",i.getItemVisual(r,"color")))})})}},function(t,e,i){var n=i(223);t.exports=function(t){t.eachSeriesByType("graph",function(t){"circular"===t.get("layout")&&n(t)})}},function(t,e,i){function n(t,e,i){var n=t.getBoxLayoutParams();return n.aspect=i,r.getLayoutRect(n,{width:e.getWidth(),height:e.getHeight()})}var o=i(238),r=i(13),a=i(73);t.exports=function(t,e){var i=[];return t.eachSeriesByType("graph",function(t){var r=t.get("coordinateSystem");if(!r||"view"===r){var s=t.getData(),l=s.mapArray(function(t){var e=s.getItemModel(t);return[+e.get("x"),+e.get("y")]}),u=[],h=[];a.fromPoints(l,u,h),h[0]-u[0]===0&&(h[0]+=1,u[0]-=1),h[1]-u[1]===0&&(h[1]+=1,u[1]-=1);var c=(h[0]-u[0])/(h[1]-u[1]),d=n(t,e,c);isNaN(c)&&(u=[d.x,d.y],h=[d.x+d.width,d.y+d.height]);var f=h[0]-u[0],p=h[1]-u[1],g=d.width,m=d.height,v=t.coordinateSystem=new o;v.zoomLimit=t.get("scaleLimit"),v.setBoundingRect(u[0],u[1],f,p),v.setViewRect(d.x,d.y,g,m),v.setCenter(t.get("center")),v.setZoom(t.get("zoom")),i.push(v)}}),i}},function(t,e){function i(t){return t instanceof Array||(t=[t,t]),t}t.exports=function(t){t.eachSeriesByType("graph",function(t){var e=t.getGraph(),n=t.getEdgeData(),o=i(t.get("edgeSymbol")),r=i(t.get("edgeSymbolSize")),a="lineStyle.normal.color".split("."),s="lineStyle.normal.opacity".split(".");n.setVisual("fromSymbol",o&&o[0]),n.setVisual("toSymbol",o&&o[1]),n.setVisual("fromSymbolSize",r&&r[0]),n.setVisual("toSymbolSize",r&&r[1]),n.setVisual("color",t.get(a)),n.setVisual("opacity",t.get(s)),n.each(function(t){var o=n.getItemModel(t),r=e.getEdgeByIndex(t),l=i(o.getShallow("symbol",!0)),u=i(o.getShallow("symbolSize",!0)),h=o.get(a),c=o.get(s);switch(h){case"source":h=r.node1.getVisual("color");break;case"target":h=r.node2.getVisual("color")}l[0]&&r.setVisual("fromSymbol",l[0]),l[1]&&r.setVisual("toSymbol",l[1]),u[0]&&r.setVisual("fromSymbolSize",u[0]),u[1]&&r.setVisual("toSymbolSize",u[1]),r.setVisual("color",h),r.setVisual("opacity",c)})})}},function(t,e,i){var n=i(5),o=n.scaleAndAdd;t.exports=function(t,e,i){for(var r=i.rect,a=r.width,s=r.height,l=[r.x+a/2,r.y+s/2],u=null==i.gravity?.1:i.gravity,h=0;h<t.length;h++){var c=t[h];c.p||(c.p=n.create(a*(Math.random()-.5)+l[0],s*(Math.random()-.5)+l[1])),c.pp=n.clone(c.p),c.edges=null}var d=.6;return{warmUp:function(){d=.5},setFixed:function(e){t[e].fixed=!0},setUnfixed:function(e){t[e].fixed=!1},step:function(i){for(var r=[],a=t.length,s=0;s<e.length;s++){var h=e[s],c=h.n1,f=h.n2;n.sub(r,f.p,c.p);var p=n.len(r)-h.d,g=f.w/(c.w+f.w);n.normalize(r,r),!c.fixed&&o(c.p,c.p,r,g*p*d),!f.fixed&&o(f.p,f.p,r,-(1-g)*p*d)}for(var s=0;s<a;s++){var m=t[s];m.fixed||(n.sub(r,l,m.p),n.scaleAndAdd(m.p,m.p,r,u*d))}for(var s=0;s<a;s++)for(var c=t[s],v=s+1;v<a;v++){var f=t[v];n.sub(r,f.p,c.p);var p=n.len(r);0===p&&(n.set(r,Math.random()-.5,Math.random()-.5),p=1);var y=(c.rep+f.rep)/p/p;!c.fixed&&o(c.pp,c.pp,r,y),!f.fixed&&o(f.pp,f.pp,r,-y)}for(var x=[],s=0;s<a;s++){var m=t[s];m.fixed||(n.sub(x,m.p,m.pp),n.scaleAndAdd(m.p,m.p,x,d),n.copy(m.pp,m.p))}d=.992*d,i&&i(t,e,d<.01)}}}},function(t,e,i){var n=i(274),o=i(4),r=i(225),a=i(223),s=i(5),l=i(1);t.exports=function(t){t.eachSeriesByType("graph",function(t){var e=t.coordinateSystem;if(!e||"view"===e.type)if("force"===t.get("layout")){var i=t.preservedPoints||{},u=t.getGraph(),h=u.data,c=u.edgeData,d=t.getModel("force"),f=d.get("initLayout");t.preservedPoints?h.each(function(t){var e=h.getId(t);h.setItemLayout(t,i[e]||[NaN,NaN])}):f&&"none"!==f?"circular"===f&&a(t):r(t);var p=h.getDataExtent("value"),g=c.getDataExtent("value"),m=d.get("repulsion"),v=d.get("edgeLength");l.isArray(m)||(m=[m,m]),l.isArray(v)||(v=[v,v]),v=[v[1],v[0]];var y=h.mapArray("value",function(t,e){var i=h.getItemLayout(e),n=o.linearMap(t,p,m);return isNaN(n)&&(n=(m[0]+m[1])/2),{w:n,rep:n,p:!i||isNaN(i[0])||isNaN(i[1])?null:i}}),x=c.mapArray("value",function(t,e){var i=u.getEdgeByIndex(e),n=o.linearMap(t,g,v);return isNaN(n)&&(n=(v[0]+v[1])/2),{n1:y[i.node1.dataIndex],n2:y[i.node2.dataIndex],d:n,curveness:i.getModel().get("lineStyle.normal.curveness")||0}}),e=t.coordinateSystem,_=e.getBoundingRect(),b=n(y,x,{rect:_,gravity:d.get("gravity")}),w=b.step;b.step=function(t){for(var e=0,n=y.length;e<n;e++)y[e].fixed&&s.copy(y[e].p,u.getNodeByIndex(e).getLayout());w(function(e,n,o){for(var r=0,a=e.length;r<a;r++)e[r].fixed||u.getNodeByIndex(r).setLayout(e[r].p),i[h.getId(r)]=e[r].p;for(var r=0,a=n.length;r<a;r++){var l=n[r],c=u.getEdgeByIndex(r),d=l.n1.p,f=l.n2.p,p=c.getLayout();p=p?p.slice():[],p[0]=p[0]||[],p[1]=p[1]||[],s.copy(p[0],d),s.copy(p[1],f),+l.curveness&&(p[2]=[(d[0]+f[0])/2-(d[1]-f[1])*l.curveness,(d[1]+f[1])/2-(f[0]-d[0])*l.curveness]),c.setLayout(p)}t&&t(o)})},t.forceLayout=b,t.preservedPoints=i,b.step()}else t.forceLayout=null})}},function(t,e,i){var n=i(2),o=i(222),r={type:"graphRoam",event:"graphRoam",update:"none"};n.registerAction(r,function(t,e){e.eachComponent({mainType:"series",query:t},function(e){var i=e.coordinateSystem,n=o.updateCenterAndZoom(i,t);e.setCenter&&e.setCenter(n.center),e.setZoom&&e.setZoom(n.zoom)})})},function(t,e,i){var n=i(225),o=i(224);t.exports=function(t,e){t.eachSeriesByType("graph",function(t){var e=t.get("layout"),i=t.coordinateSystem;if(i&&"view"!==i.type){var r=t.getData();r.each(i.dimensions,function(t,e,n){isNaN(t)||isNaN(e)?r.setItemLayout(n,[NaN,NaN]):r.setItemLayout(n,i.dataToPoint([t,e]))}),o(r.graph)}else e&&"none"!==e||n(t)})}},function(t,e,i){i(280),i(281)},function(t,e,i){function n(){var t=r.createCanvas();this.canvas=t,this.blurSize=30,this.pointSize=20,this.maxOpacity=1,this.minOpacity=0,this._gradientPixels={}}var o=256,r=i(1);n.prototype={update:function(t,e,i,n,r,a){var s=this._getBrush(),l=this._getGradient(t,r,"inRange"),u=this._getGradient(t,r,"outOfRange"),h=this.pointSize+this.blurSize,c=this.canvas,d=c.getContext("2d"),f=t.length;c.width=e,c.height=i;for(var p=0;p<f;++p){var g=t[p],m=g[0],v=g[1],y=g[2],x=n(y);d.globalAlpha=x,d.drawImage(s,m-h,v-h)}for(var _=d.getImageData(0,0,c.width,c.height),b=_.data,w=0,S=b.length,M=this.minOpacity,T=this.maxOpacity,I=T-M;w<S;){var x=b[w+3]/256,A=4*Math.floor(x*(o-1));if(x>0){var L=a(x)?l:u;x>0&&(x=x*I+M),b[w++]=L[A],b[w++]=L[A+1],b[w++]=L[A+2],b[w++]=L[A+3]*x*256}else w+=4}return d.putImageData(_,0,0),c},_getBrush:function(){var t=this._brushCanvas||(this._brushCanvas=r.createCanvas()),e=this.pointSize+this.blurSize,i=2*e;t.width=i,t.height=i;var n=t.getContext("2d");return n.clearRect(0,0,i,i),n.shadowOffsetX=i,n.shadowBlur=this.blurSize,n.shadowColor="#000",n.beginPath(),n.arc(-e,e,this.pointSize,0,2*Math.PI,!0),n.closePath(),n.fill(),t},_getGradient:function(t,e,i){for(var n=this._gradientPixels,o=n[i]||(n[i]=new Uint8ClampedArray(1024)),r=[],a=0,s=0;s<256;s++)e[i](s/255,!0,r),o[a++]=r[0],o[a++]=r[1],o[a++]=r[2],o[a++]=r[3];return o}},t.exports=n},function(t,e,i){var n=i(15),o=i(34);t.exports=n.extend({type:"series.heatmap",getInitialData:function(t,e){return o(t.data,this,e)},defaultOption:{coordinateSystem:"cartesian2d",zlevel:0,z:2,geoIndex:0,blurSize:30,pointSize:20,maxOpacity:1,minOpacity:0}})},function(t,e,i){function n(t,e,i){var n=t[1]-t[0];e=l.map(e,function(e){return{interval:[(e.interval[0]-t[0])/n,(e.interval[1]-t[0])/n]}});var o=e.length,r=0;return function(t){for(var n=r;n<o;n++){var a=e[n].interval;if(a[0]<=t&&t<=a[1]){r=n;break}}if(n===o)for(var n=r-1;n>=0;n--){var a=e[n].interval;if(a[0]<=t&&t<=a[1]){r=n;break}}return n>=0&&n<o&&i[n]}}function o(t,e){var i=t[1]-t[0];return e=[(e[0]-t[0])/i,(e[1]-t[0])/i],function(t){return t>=e[0]&&t<=e[1]}}function r(t){var e=t.dimensions;return"lng"===e[0]&&"lat"===e[1]}var a=i(3),s=i(279),l=i(1);t.exports=i(2).extendChartView({type:"heatmap",render:function(t,e,i){var n;e.eachComponent("visualMap",function(e){e.eachTargetSeries(function(i){i===t&&(n=e)})}),this.group.removeAll();var o=t.coordinateSystem;"cartesian2d"===o.type?this._renderOnCartesian(o,t,i):r(o)&&this._renderOnGeo(o,t,n,i)},dispose:function(){},_renderOnCartesian:function(t,e,i){var n=t.getAxis("x"),o=t.getAxis("y"),r=this.group,s=n.getBandWidth(),u=o.getBandWidth(),h=e.getData(),c="itemStyle.normal",d="itemStyle.emphasis",f="label.normal",p="label.emphasis",g=e.getModel(c).getItemStyle(["color"]),m=e.getModel(d).getItemStyle(),v=e.getModel("label.normal"),y=e.getModel("label.emphasis");h.each(["x","y","z"],function(i,n,o,x){var _=h.getItemModel(x),b=t.dataToPoint([i,n]);if(!isNaN(o)){var w=new a.Rect({shape:{x:b[0]-s/2,y:b[1]-u/2,width:s,height:u},style:{fill:h.getItemVisual(x,"color"),opacity:h.getItemVisual(x,"opacity")}});h.hasItemOption&&(g=_.getModel(c).getItemStyle(["color"]),m=_.getModel(d).getItemStyle(),v=_.getModel(f),y=_.getModel(p));var S=e.getRawValue(x),M="-";S&&null!=S[2]&&(M=S[2]),v.getShallow("show")&&(a.setText(g,v),g.text=e.getFormattedLabel(x,"normal")||M),y.getShallow("show")&&(a.setText(m,y),m.text=e.getFormattedLabel(x,"emphasis")||M),w.setStyle(g),a.setHoverStyle(w,h.hasItemOption?m:l.extend({},m)),r.add(w),h.setItemGraphicEl(x,w)}})},_renderOnGeo:function(t,e,i,r){var l=i.targetVisuals.inRange,u=i.targetVisuals.outOfRange,h=e.getData(),c=this._hmLayer||this._hmLayer||new s;c.blurSize=e.get("blurSize"),c.pointSize=e.get("pointSize"),c.minOpacity=e.get("minOpacity"),c.maxOpacity=e.get("maxOpacity");var d=t.getViewRect().clone(),f=t.getRoamTransform().transform;d.applyTransform(f);var p=Math.max(d.x,0),g=Math.max(d.y,0),m=Math.min(d.width+d.x,r.getWidth()),v=Math.min(d.height+d.y,r.getHeight()),y=m-p,x=v-g,_=h.mapArray(["lng","lat","value"],function(e,i,n){var o=t.dataToPoint([e,i]);return o[0]-=p,o[1]-=g,o.push(n),o}),b=i.getExtent(),w="visualMap.continuous"===i.type?o(b,i.option.range):n(b,i.getPieceList(),i.option.selected);c.update(_,y,x,l.color.getNormalizer(),{inRange:l.color.getColorMapper(),outOfRange:u.color.getColorMapper()},w);var S=new a.Image({style:{width:y,height:x,x:p,y:g,image:c.canvas},silent:!0});this.group.add(S)}})},function(t,e,i){function n(t,e,i){a.call(this,t,e,i),this._lastFrame=0,this._lastFramePercent=0}var o=i(227),r=i(1),a=i(226),s=i(5),l=n.prototype;l.createLine=function(t,e,i){return new o(t,e,i)},l.updateAnimationPoints=function(t,e){this._points=e;for(var i=[0],n=0,o=1;o<e.length;o++){var r=e[o-1],a=e[o];n+=s.dist(r,a),i.push(n)}if(0!==n){for(var o=0;o<i.length;o++)i[o]/=n;this._offsets=i,this._length=n}},l.getLineLength=function(t){return this._length},l.updateSymbolPosition=function(t){var e=t.__t,i=this._points,n=this._offsets,o=i.length;if(n){var r,a=this._lastFrame;if(e<this._lastFramePercent){var l=Math.min(a+1,o-1);for(r=l;r>=0&&!(n[r]<=e);r--);r=Math.min(r,o-2)}else{for(var r=a;r<o&&!(n[r]>e);r++);r=Math.min(r-1,o-2)}s.lerp(t.position,i[r],i[r+1],(e-n[r])/(n[r+1]-n[r]));var u=i[r+1][0]-i[r][0],h=i[r+1][1]-i[r][1];t.rotation=-Math.atan2(h,u)-Math.PI/2,this._lastFrame=r,this._lastFramePercent=e,t.ignore=!1}},r.inherits(n,a),t.exports=n},function(t,e,i){function n(t){return a.isArray(t)||(t=[+t,+t]),t}function o(t,e){t.eachChild(function(t){t.attr({z:e.z,zlevel:e.zlevel,style:{stroke:"stroke"===e.brushType?e.color:null,fill:"fill"===e.brushType?e.color:null}})})}function r(t,e){c.call(this);var i=new h(t,e),n=new c;this.add(i),this.add(n),n.beforeUpdate=function(){this.attr(i.getScale())},this.updateData(t,e)}var a=i(1),s=i(26),l=i(3),u=i(4),h=i(49),c=l.Group,d=3,f=r.prototype;f.stopEffectAnimation=function(){this.childAt(1).removeAll()},f.startEffectAnimation=function(t){for(var e=t.symbolType,i=t.color,n=this.childAt(1),r=0;r<d;r++){var a=s.createSymbol(e,-1,-1,2,2,i);a.attr({style:{strokeNoScale:!0},z2:99,silent:!0,scale:[.5,.5]});var l=-r/d*t.period+t.effectOffset;a.animate("",!0).when(t.period,{scale:[t.rippleScale/2,t.rippleScale/2]}).delay(l).start(),a.animateStyle(!0).when(t.period,{opacity:0}).delay(l).start(),n.add(a)}o(n,t)},f.updateEffectAnimation=function(t){for(var e=this._effectCfg,i=this.childAt(1),n=["symbolType","period","rippleScale"],r=0;r<n;r++){var a=n[r];if(e[a]!==t[a])return this.stopEffectAnimation(),void this.startEffectAnimation(t)}o(i,t)},f.highlight=function(){this.trigger("emphasis")},f.downplay=function(){this.trigger("normal")},f.updateData=function(t,e){var i=t.hostModel;this.childAt(0).updateData(t,e);var o=this.childAt(1),r=t.getItemModel(e),a=t.getItemVisual(e,"symbol"),s=n(t.getItemVisual(e,"symbolSize")),l=t.getItemVisual(e,"color");o.attr("scale",s),o.traverse(function(t){t.attr({fill:l})});var h=r.getShallow("symbolOffset");if(h){var c=o.position;c[0]=u.parsePercent(h[0],s[0]),c[1]=u.parsePercent(h[1],s[1])}o.rotation=(r.getShallow("symbolRotate")||0)*Math.PI/180||0;var d={};if(d.showEffectOn=i.get("showEffectOn"),d.rippleScale=r.get("rippleEffect.scale"),d.brushType=r.get("rippleEffect.brushType"),d.period=1e3*r.get("rippleEffect.period"),d.effectOffset=e/t.count(),d.z=r.getShallow("z")||0,d.zlevel=r.getShallow("zlevel")||0,d.symbolType=a,d.color=l,this.off("mouseover").off("mouseout").off("emphasis").off("normal"),"render"===d.showEffectOn)this._effectCfg?this.updateEffectAnimation(d):this.startEffectAnimation(d),this._effectCfg=d;else{this._effectCfg=null,this.stopEffectAnimation();var f=this.childAt(0),p=function(){f.trigger("emphasis"),"render"!==d.showEffectOn&&this.startEffectAnimation(d)},g=function(){f.trigger("normal"),"render"!==d.showEffectOn&&this.stopEffectAnimation()};this.on("mouseover",p,this).on("mouseout",g,this).on("emphasis",p,this).on("normal",g,this)}this._effectCfg=d},f.fadeOut=function(t){this.off("mouseover").off("mouseout").off("emphasis").off("normal"),t&&t()},a.inherits(r,c),t.exports=r},function(t,e,i){function n(){this.group=new o.Group,this._lineEl=new s}var o=i(3),r=i(85),a=i(84),s=o.extendShape({shape:{polyline:!1,segs:[]},buildPath:function(t,e){for(var i=e.segs,n=e.polyline,o=0;o<i.length;o++){var r=i[o];if(n){t.moveTo(r[0][0],r[0][1]);for(var a=1;a<r.length;a++)t.lineTo(r[a][0],r[a][1])}else t.moveTo(r[0][0],r[0][1]),r.length>2?t.quadraticCurveTo(r[2][0],r[2][1],r[1][0],r[1][1]):t.lineTo(r[1][0],r[1][1])}},findDataIndex:function(t,e){for(var i=this.shape,n=i.segs,o=i.polyline,s=Math.max(this.style.lineWidth,1),l=0;l<n.length;l++){var u=n[l];if(o){for(var h=1;h<u.length;h++)if(a.containStroke(u[h-1][0],u[h-1][1],u[h][0],u[h][1],s,t,e))return l}else if(u.length>2){if(r.containStroke(u[0][0],u[0][1],u[2][0],u[2][1],u[1][0],u[1][1],s,t,e))return l}else if(a.containStroke(u[0][0],u[0][1],u[1][0],u[1][1],s,t,e))return l}return-1}}),l=n.prototype;l.updateData=function(t){this.group.removeAll();var e=this._lineEl,i=t.hostModel;e.setShape({segs:t.mapArray(t.getItemLayout),polyline:i.get("polyline")}),e.useStyle(i.getModel("lineStyle.normal").getLineStyle());var n=t.getVisual("color");n&&e.setStyle("stroke",n),e.setStyle("fill"),e.seriesIndex=i.seriesIndex,e.on("mousemove",function(t){e.dataIndex=null;var i=e.findDataIndex(t.offsetX,t.offsetY);i>0&&(e.dataIndex=i)}),this.group.add(e)},l.updateLayout=function(t){var e=t.getData();this._lineEl.setShape({segs:e.mapArray(e.getItemLayout)})},l.remove=function(){this.group.removeAll()},t.exports=n},function(t,e,i){function n(t,e,i,n){l.Group.call(this),this.bodyIndex,this.whiskerIndex,this.styleUpdater=i,this._createContent(t,e,n),this.updateData(t,e,n),this._seriesModel}function o(t,e,i){return s.map(t,function(t){return t=t.slice(),t[e]=i.initBaseline,t})}function r(t){var e={};return s.each(t,function(t,i){e["ends"+i]=t}),e}function a(t){this.group=new l.Group,this.styleUpdater=t}var s=i(1),l=i(3),u=i(6),h=u.extend({type:"whiskerInBox",shape:{},buildPath:function(t,e){for(var i in e)if(e.hasOwnProperty(i)&&0===i.indexOf("ends")){var n=e[i];t.moveTo(n[0][0],n[0][1]),t.lineTo(n[1][0],n[1][1])}}}),c=n.prototype;c._createContent=function(t,e,i){var n=t.getItemLayout(e),a="horizontal"===n.chartLayout?1:0,u=0;this.add(new l.Polygon({shape:{points:i?o(n.bodyEnds,a,n):n.bodyEnds},style:{strokeNoScale:!0},z2:100})),this.bodyIndex=u++;var c=s.map(n.whiskerEnds,function(t){return i?o(t,a,n):t});this.add(new h({shape:r(c),style:{strokeNoScale:!0},z2:100})),this.whiskerIndex=u++},c.updateData=function(t,e,i){var n=this._seriesModel=t.hostModel,o=t.getItemLayout(e),a=l[i?"initProps":"updateProps"];a(this.childAt(this.bodyIndex),{shape:{points:o.bodyEnds}},n,e),a(this.childAt(this.whiskerIndex),{shape:r(o.whiskerEnds)},n,e),this.styleUpdater.call(null,this,t,e)},s.inherits(n,l.Group);var d=a.prototype;d.updateData=function(t){var e=this.group,i=this._data,o=this.styleUpdater;t.diff(i).add(function(i){if(t.hasValue(i)){var r=new n(t,i,o,(!0));t.setItemGraphicEl(i,r),e.add(r)}}).update(function(r,a){var s=i.getItemGraphicEl(a);return t.hasValue(r)?(s?s.updateData(t,r):s=new n(t,r,o),e.add(s),void t.setItemGraphicEl(r,s)):void e.remove(s)}).remove(function(t){var n=i.getItemGraphicEl(t);n&&e.remove(n)}).execute(),this._data=t},d.remove=function(){var t=this.group,e=this._data;this._data=null,e&&e.eachItemGraphicEl(function(e){e&&t.remove(e)})},t.exports=a},function(t,e,i){i(287),i(288);var n=i(2);n.registerLayout(i(289))},function(t,e,i){"use strict";function n(t){var e=t.data;e&&e[0]&&e[0][0]&&e[0][0].coord&&(t.data=a.map(e,function(t){var e=[t[0].coord,t[1].coord],i={coords:e};return t[0].name&&(i.fromName=t[0].name),t[1].name&&(i.toName=t[1].name),a.mergeAll([i,t[0],t[1]])}))}var o=i(15),r=i(14),a=i(1),s=(i(23),o.extend({type:"series.lines",dependencies:["grid","polar"],visualColorAccessPath:"lineStyle.normal.color",init:function(t){n(t),s.superApply(this,"init",arguments)},mergeOption:function(t){n(t),s.superApply(this,"mergeOption",arguments)},getInitialData:function(t,e){var i=new r(["value"],this);return i.hasItemOption=!1,i.initData(t.data,[],function(t,e,n,o){if(t instanceof Array)return NaN;i.hasItemOption=!0;var r=t.value;return null!=r?r instanceof Array?r[o]:r:void 0}),i},formatTooltip:function(t){var e=this.getData(),i=e.getItemModel(t),n=i.get("name");if(n)return n;var o=i.get("fromName"),r=i.get("toName");return o+" > "+r},defaultOption:{coordinateSystem:"geo",zlevel:0,z:2,legendHoverLink:!0,hoverAnimation:!0,xAxisIndex:0,yAxisIndex:0,geoIndex:0,effect:{show:!1,period:4,constantSpeed:0,symbol:"circle",symbolSize:3,loop:!0,trailLength:.2},large:!1,largeThreshold:2e3,polyline:!1,label:{normal:{show:!1,position:"end"}},lineStyle:{normal:{opacity:.5}}}}))},function(t,e,i){var n=i(95),o=i(226),r=i(94),a=i(227),s=i(282),l=i(284);i(2).extendChartView({type:"lines",init:function(){},render:function(t,e,i){var u=t.getData(),h=this._lineDraw,c=t.get("effect.show"),d=t.get("polyline"),f=t.get("large")&&u.count()>=t.get("largeThreshold");c===this._hasEffet&&d===this._isPolyline&&f===this._isLarge||(h&&h.remove(),h=this._lineDraw=f?new l:new n(d?c?s:a:c?o:r),this._hasEffet=c,this._isPolyline=d,this._isLarge=f);var p=t.get("zlevel"),g=t.get("effect.trailLength"),m=i.getZr();if(m.painter.getLayer(p).clear(!0),null!=this._lastZlevel&&m.configLayer(this._lastZlevel,{motionBlur:!1}),c&&g){m.configLayer(p,{motionBlur:!0,lastFrameAlpha:Math.max(Math.min(g/10+.9,1),0)})}this.group.add(h.group),h.updateData(u),this._lastZlevel=p},updateLayout:function(t,e,i){this._lineDraw.updateLayout(t);var n=i.getZr();n.painter.getLayer(this._lastZlevel).clear(!0)},remove:function(t,e){this._lineDraw&&this._lineDraw.remove(e,!0)},dispose:function(){}})},function(t,e,i){t.exports=function(t){t.eachSeriesByType("lines",function(t){var e=t.coordinateSystem,i=t.getData();i.each(function(n){var o=i.getItemModel(n),r=o.option instanceof Array?o.option:o.get("coords"),a=[];if(t.get("polyline"))for(var s=0;s<r.length;s++)a.push(e.dataToPoint(r[s]));else{a[0]=e.dataToPoint(r[0]),a[1]=e.dataToPoint(r[1]);var l=o.get("lineStyle.normal.curveness");+l&&(a[2]=[(a[0][0]+a[1][0])/2-(a[0][1]-a[1][1])*l,(a[0][1]+a[1][1])/2-(a[1][0]-a[0][0])*l])}i.setItemLayout(n,a)})})}},function(t,e,i){var n=i(2),o=n.PRIORITY;i(291),i(292),i(221),i(172),n.registerLayout(i(295)),n.registerVisual(i(296)),n.registerProcessor(o.PROCESSOR.STATISTIC,i(294)),n.registerPreprocessor(i(293)),i(77)("map",[{type:"mapToggleSelect",event:"mapselectchanged",method:"toggleSelected"},{type:"mapSelect",event:"mapselected",method:"select"},{type:"mapUnSelect",event:"mapunselected",method:"unSelect"}])},function(t,e,i){var n=i(14),o=i(15),r=i(1),a=i(29),s=i(9),l=s.encodeHTML,u=s.addCommas,h=i(66),c=i(172),d=o.extend({type:"series.map",layoutMode:"box",needsDrawMap:!1,seriesGroup:[],init:function(t){t=this._fillOption(t,t.map),this.option=t,d.superApply(this,"init",arguments),this.updateSelectedMap(t.data)},getInitialData:function(t){var e=a(["value"],t.data||[]),i=new n(e,this);return i.initData(t.data),i},mergeOption:function(t){t.data&&(t=this._fillOption(t,this.option.map)),d.superCall(this,"mergeOption",t),this.updateSelectedMap(this.option.data)},_fillOption:function(t,e){return t=r.extend({},t),t.data=c.getFilledRegions(t.data,e),t},getRawValue:function(t){return this._data.get("value",t)},getRegionModel:function(t){var e=this.getData();return e.getItemModel(e.indexOfName(t))},formatTooltip:function(t){for(var e=this.getData(),i=u(this.getRawValue(t)),n=e.getName(t),o=this.seriesGroup,r=[],a=0;a<o.length;a++){var s=o[a].originalData.indexOfName(n);isNaN(o[a].originalData.get("value",s))||r.push(l(o[a].name))}return r.join(", ")+"<br />"+n+" : "+i},getTooltipPosition:function(t){if(null!=t){var e=this.getData().getName(t),i=this.coordinateSystem,n=i.getRegion(e);return n&&i.dataToPoint(n.center)}},setZoom:function(t){this.option.zoom=t},setCenter:function(t){this.option.center=t},defaultOption:{zlevel:0,z:2,coordinateSystem:"geo",map:"china",left:"center",top:"center",aspectScale:.75,showLegendSymbol:!0,dataRangeHoverLink:!0,center:null,zoom:1,scaleLimit:null,label:{normal:{show:!1,textStyle:{color:"#000"}},emphasis:{show:!0,textStyle:{color:"rgb(100,0,0)"}}},itemStyle:{normal:{borderWidth:.5,borderColor:"#444",areaColor:"#eee"},emphasis:{areaColor:"rgba(255,215,0,0.8)"}}}});r.mixin(d,h),t.exports=d},function(t,e,i){var n=i(3),o=i(229);i(2).extendChartView({type:"map",render:function(t,e,i,n){if(!n||"mapToggleSelect"!==n.type||n.from!==this.uid){var r=this.group;if(r.removeAll(),n&&"geoRoam"===n.type&&"series"===n.componentType&&n.seriesId===t.id){var a=this._mapDraw;a&&r.add(a.group)}else if(t.needsDrawMap){var a=this._mapDraw||new o(i,(!0));r.add(a.group),a.draw(t,e,i,this,n),this._mapDraw=a}else this._mapDraw&&this._mapDraw.remove(),this._mapDraw=null;t.get("showLegendSymbol")&&e.getComponent("legend")&&this._renderSymbols(t,e,i)}},remove:function(){this._mapDraw&&this._mapDraw.remove(),this._mapDraw=null,this.group.removeAll()},dispose:function(){this._mapDraw&&this._mapDraw.remove(),this._mapDraw=null},_renderSymbols:function(t,e,i){var o=t.originalData,r=this.group;o.each("value",function(e,i){if(!isNaN(e)){var a=o.getItemLayout(i);if(a&&a.point){var s=a.point,l=a.offset,u=new n.Circle({style:{fill:t.getData().getVisual("color")},shape:{cx:s[0]+9*l,cy:s[1],r:3},silent:!0,z2:10});if(!l){var h=t.mainSeries.getData(),c=o.getName(i),d=c,f=h.indexOfName(c),p=o.getItemModel(i),g=p.getModel("label.normal"),m=p.getModel("label.emphasis"),v=g.getModel("textStyle"),y=m.getModel("textStyle"),x=h.getItemGraphicEl(f);u.setStyle({textPosition:"bottom"});var _=function(){u.setStyle({text:m.get("show")?d:"",textFill:y.getTextColor(),textFont:y.getFont()})},b=function(){u.setStyle({text:g.get("show")?d:"",textFill:v.getTextColor(),textFont:v.getFont()})};x.on("mouseover",_).on("mouseout",b).on("emphasis",_).on("normal",b),b()}r.add(u)}}})}})},function(t,e,i){var n=i(1);t.exports=function(t){var e=[];n.each(t.series,function(t){"map"===t.type&&e.push(t)}),n.each(e,function(t){t.map=t.map||t.mapType,n.defaults(t,t.mapLocation)})}},function(t,e,i){function n(t,e){for(var i={},n=["value"],o=0;o<t.length;o++)t[o].each(n,function(e,n){var r=t[o].getName(n);i[r]=i[r]||[],isNaN(e)||i[r].push(e)});return t[0].map(n,function(n,o){for(var r=t[0].getName(o),a=0,s=1/0,l=-(1/0),u=i[r].length,h=0;h<u;h++)s=Math.min(s,i[r][h]),l=Math.max(l,i[r][h]),a+=i[r][h];var c;return c="min"===e?s:"max"===e?l:"average"===e?a/u:a,0===u?NaN:c})}var o=i(1);t.exports=function(t){var e={};t.eachSeriesByType("map",function(t){var i=t.get("map");e[i]=e[i]||[],e[i].push(t)}),o.each(e,function(t,e){for(var i=n(o.map(t,function(t){return t.getData()}),t[0].get("mapValueCalculation")),r=0;r<t.length;r++)t[r].originalData=t[r].getData();for(var r=0;r<t.length;r++)t[r].seriesGroup=t,t[r].needsDrawMap=0===r,t[r].setData(i.cloneShallow()),t[r].mainSeries=t[0]})}},function(t,e,i){var n=i(1);t.exports=function(t){var e={};t.eachSeriesByType("map",function(i){var o=i.get("map");if(!e[o]){var r={};n.each(i.seriesGroup,function(e){var i=e.coordinateSystem,n=e.originalData;e.get("showLegendSymbol")&&t.getComponent("legend")&&n.each("value",function(t,e){var o=n.getName(e),a=i.getRegion(o);if(a&&!isNaN(t)){var s=r[o]||0,l=i.dataToPoint(a.center);r[o]=s+1,n.setItemLayout(e,{point:l,offset:s})}})});var a=i.getData();a.each(function(t){var e=a.getName(t),i=a.getItemLayout(t)||{};i.showLabel=!r[e],a.setItemLayout(t,i)}),e[o]=!0}})}},function(t,e){t.exports=function(t){t.eachSeriesByType("map",function(t){var e=t.get("color"),i=t.getModel("itemStyle.normal"),n=i.get("areaColor"),o=i.get("color")||e[t.seriesIndex%e.length];t.getData().setVisual({areaColor:n,color:o})})}},function(t,e,i){var n=i(2);i(230),i(298),i(299),n.registerVisual(i(300))},function(t,e,i){function n(t,e,i){var n=t.get("data"),r=o(e);n&&n.length&&s.each(i,function(t){if(t){var e=s.indexOf(n,t[r]);t[r]=e>=0?e:NaN}})}function o(t){return+t.replace("dim","")}function r(t,e){var i=0;s.each(t,function(t){var e=o(t);e>i&&(i=e)});var n=e[0];n&&n.length-1>i&&(i=n.length-1);for(var r=[],a=0;a<=i;a++)r.push("dim"+a);return r}var a=i(14),s=i(1),l=i(15),u=i(29);t.exports=l.extend({type:"series.parallel",dependencies:["parallel"],getInitialData:function(t,e){var i=e.getComponent("parallel",this.get("parallelIndex")),o=i.parallelAxisIndex,l=t.data,h=i.dimensions,c=r(h,l),d=s.map(c,function(t,i){var r=s.indexOf(h,t),a=r>=0&&e.getComponent("parallelAxis",o[r]);return a&&"category"===a.get("type")?(n(a,t,l),{name:t,type:"ordinal"}):r<0&&u.guessOrdinal(l,i)?{name:t,type:"ordinal"}:t}),f=new a(d,this);return f.initData(l),this.option.progressive&&(this.option.animation=!1),f},getRawIndicesByActiveState:function(t){var e=this.coordinateSystem,i=this.getData(),n=[];return e.eachActiveState(i,function(e,o){t===e&&n.push(i.getRawIndex(o))}),n},defaultOption:{zlevel:0,z:2,coordinateSystem:"parallel",parallelIndex:0,label:{normal:{show:!1},emphasis:{show:!1}},inactiveOpacity:.05,activeOpacity:1,lineStyle:{normal:{width:1,opacity:.45,type:"solid"}},progressive:!1,smooth:!1,animationEasing:"linear"}})},function(t,e,i){function n(t,e,i){var n=t.model,o=t.getRect(),r=new l.Rect({shape:{x:o.x,y:o.y,width:o.width,height:o.height}}),a="horizontal"===n.get("layout")?"width":"height";return r.setShape(a,0),l.initProps(r,{shape:{width:o.width,height:o.height}},e,i),r}function o(t,e,i,n){for(var o=[],r=0;r<i.length;r++){var a=i[r],l=t.get(a,e);s(l,n.getAxis(a).type)||o.push(n.dataToPoint(l,a))}return o}function r(t,e,i,n,r){var a=o(t,i,n,r),s=new l.Polyline({shape:{points:a},silent:!0,z2:10});e.add(s),t.setItemGraphicEl(i,s)}function a(t,e){var i=t.hostModel.getModel("lineStyle.normal"),n=i.getLineStyle();t.eachItemGraphicEl(function(o,r){if(t.hasItemOption){var a=t.getItemModel(r),s=a.getModel("lineStyle.normal",i);n=s.getLineStyle()}o.useStyle(u.extend(n,{fill:null,stroke:t.getItemVisual(r,"color"),opacity:t.getItemVisual(r,"opacity")})),o.shape.smooth=e})}function s(t,e){return"category"===e?null==t:null==t||isNaN(t)}var l=i(3),u=i(1),h=.3,c=i(27).extend({type:"parallel",init:function(){this._dataGroup=new l.Group,this.group.add(this._dataGroup),this._data},render:function(t,e,i,n){this._renderForNormal(t)},dispose:function(){},_renderForNormal:function(t){function e(t){r(c,u,t,p,f,null,m)}function i(e,i){var n=d.getItemGraphicEl(i),r=o(c,e,p,f);c.setItemGraphicEl(e,n),l.updateProps(n,{shape:{points:r}},t,e)}function s(t){var e=d.getItemGraphicEl(t);u.remove(e)}var u=this._dataGroup,c=t.getData(),d=this._data,f=t.coordinateSystem,p=f.dimensions,g=t.option,m=g.smooth?h:null;if(c.diff(d).add(e).update(i).remove(s).execute(),
+a(c,m),!this._data){var v=n(f,t,function(){setTimeout(function(){u.removeClipPath()})});u.setClipPath(v)}this._data=c},remove:function(){this._dataGroup&&this._dataGroup.removeAll(),this._data=null}});t.exports=c},function(t,e){t.exports=function(t){t.eachSeriesByType("parallel",function(e){var i=e.getModel("itemStyle.normal"),n=e.getModel("lineStyle.normal"),o=t.get("color"),r=n.get("color")||i.get("color")||o[e.seriesIndex%o.length],a=e.get("inactiveOpacity"),s=e.get("activeOpacity"),l=e.getModel("lineStyle.normal").getLineStyle(),u=e.coordinateSystem,h=e.getData(),c={normal:l.opacity,active:s,inactive:a};u.eachActiveState(h,function(t,e){h.setItemVisual(e,"opacity",c[t])}),h.setVisual("color",r)})}},function(t,e,i){var n=i(1),o=i(2);i(335),i(302),i(303),o.registerVisual(n.curry(i(72),"radar")),o.registerVisual(n.curry(i(46),"radar","circle",null)),o.registerLayout(i(305)),o.registerProcessor(n.curry(i(70),"radar")),o.registerPreprocessor(i(304))},function(t,e,i){"use strict";var n=i(15),o=i(14),r=i(29),a=i(1),s=n.extend({type:"series.radar",dependencies:["radar"],init:function(t){s.superApply(this,"init",arguments),this.legendDataProvider=function(){return this._dataBeforeProcessed}},getInitialData:function(t,e){var i=t.data||[],n=r([],i,[],"indicator_"),a=new o(n,this);return a.initData(i),a},formatTooltip:function(t){var e=this.getRawValue(t),i=this.coordinateSystem,n=i.getIndicatorAxes();return(""==this._data.getName(t)?this.name:this._data.getName(t))+"<br/>"+a.map(n,function(t,i){return t.name+" : "+e[i]}).join("<br />")},defaultOption:{zlevel:0,z:2,coordinateSystem:"radar",legendHoverLink:!0,radarIndex:0,lineStyle:{normal:{width:2,type:"solid"}},label:{normal:{position:"top"}},symbol:"emptyCircle",symbolSize:4}});t.exports=s},function(t,e,i){function n(t){return r.isArray(t)||(t=[+t,+t]),t}var o=i(3),r=i(1),a=i(26);t.exports=i(2).extendChartView({type:"radar",render:function(t,e,i){function s(t,e){var i=t.getItemVisual(e,"symbol")||"circle",o=t.getItemVisual(e,"color");if("none"!==i){var r=a.createSymbol(i,-.5,-.5,1,1,o);return r.attr({style:{strokeNoScale:!0},z2:100,scale:n(t.getItemVisual(e,"symbolSize"))}),r}}function l(e,i,n,r,a,l){n.removeAll();for(var u=0;u<i.length-1;u++){var h=s(r,a);h&&(h.__dimIdx=u,e[u]?(h.attr("position",e[u]),o[l?"initProps":"updateProps"](h,{position:i[u]},t,a)):h.attr("position",i[u]),n.add(h))}}function u(t){return r.map(t,function(t){return[h.cx,h.cy]})}var h=t.coordinateSystem,c=this.group,d=t.getData(),f=this._data;d.diff(f).add(function(e){var i=d.getItemLayout(e);if(i){var n=new o.Polygon,r=new o.Polyline,a={shape:{points:i}};n.shape.points=u(i),r.shape.points=u(i),o.initProps(n,a,t,e),o.initProps(r,a,t,e);var s=new o.Group,h=new o.Group;s.add(r),s.add(n),s.add(h),l(r.shape.points,i,h,d,e,!0),d.setItemGraphicEl(e,s)}}).update(function(e,i){var n=f.getItemGraphicEl(i),r=n.childAt(0),a=n.childAt(1),s=n.childAt(2),u={shape:{points:d.getItemLayout(e)}};u.shape.points&&(l(r.shape.points,u.shape.points,s,d,e,!1),o.updateProps(r,u,t),o.updateProps(a,u,t),d.setItemGraphicEl(e,n))}).remove(function(t){c.remove(f.getItemGraphicEl(t))}).execute(),d.eachItemGraphicEl(function(e,i){function n(){u.attr("ignore",v)}function a(){u.attr("ignore",m)}var s=d.getItemModel(i),l=e.childAt(0),u=e.childAt(1),h=e.childAt(2),f=d.getItemVisual(i,"color");c.add(e),l.useStyle(r.defaults(s.getModel("lineStyle.normal").getLineStyle(),{fill:"none",stroke:f})),l.hoverStyle=s.getModel("lineStyle.emphasis").getLineStyle();var p=s.getModel("areaStyle.normal"),g=s.getModel("areaStyle.emphasis"),m=p.isEmpty()&&p.parentModel.isEmpty(),v=g.isEmpty()&&g.parentModel.isEmpty();v=v&&m,u.ignore=m,u.useStyle(r.defaults(p.getAreaStyle(),{fill:f,opacity:.7})),u.hoverStyle=g.getAreaStyle();var y=s.getModel("itemStyle.normal").getItemStyle(["color"]),x=s.getModel("itemStyle.emphasis").getItemStyle(),_=s.getModel("label.normal"),b=s.getModel("label.emphasis");h.eachChild(function(e){e.setStyle(y),e.hoverStyle=r.clone(x);var n=d.get(d.dimensions[e.__dimIdx],i);o.setText(e.style,_,f),e.setStyle({text:_.get("show")?r.retrieve(t.getFormattedLabel(i,"normal",null,e.__dimIdx),n):""}),o.setText(e.hoverStyle,b,f),e.hoverStyle.text=b.get("show")?r.retrieve(t.getFormattedLabel(i,"emphasis",null,e.__dimIdx),n):""}),e.off("mouseover").off("mouseout").off("normal").off("emphasis"),e.on("emphasis",n).on("mouseover",n).on("normal",a).on("mouseout",a),o.setHoverStyle(e)}),this._data=d},remove:function(){this.group.removeAll(),this._data=null},dispose:function(){}})},function(t,e,i){var n=i(1);t.exports=function(t){var e=t.polar;if(e){n.isArray(e)||(e=[e]);var i=[];n.each(e,function(e,o){e.indicator?(e.type&&!e.shape&&(e.shape=e.type),t.radar=t.radar||[],n.isArray(t.radar)||(t.radar=[t.radar]),t.radar.push(e)):i.push(e)}),t.polar=i}n.each(t.series,function(t){"radar"===t.type&&t.polarIndex&&(t.radarIndex=t.polarIndex)})}},function(t,e){t.exports=function(t){t.eachSeriesByType("radar",function(t){function e(t,e){n[e]=n[e]||[],n[e][r]=o.dataToPoint(t,r)}var i=t.getData(),n=[],o=t.coordinateSystem;if(o){for(var r=0;r<o.getIndicatorAxes().length;r++){var a=i.dimensions[r];i.each(a,e)}i.each(function(t){n[t][0]&&n[t].push(n[t][0].slice()),i.setItemLayout(t,n[t])})}})}},function(t,e,i){var n=i(2);i(307),i(308),n.registerLayout(i(309)),n.registerVisual(i(310))},function(t,e,i){var n=i(15),o=i(228),r=n.extend({type:"series.sankey",layoutInfo:null,getInitialData:function(t){var e=t.edges||t.links,i=t.data||t.nodes;if(i&&e){var n=o(i,e,this,!0);return n.data}},getGraph:function(){return this.getData().graph},getEdgeData:function(){return this.getGraph().edgeData},formatTooltip:function(t,e,i){if("edge"===i){var n=this.getDataParams(t,i),o=n.data,a=o.source+" -- "+o.target;return n.value&&(a+=" : "+n.value),a}return r.superCall(this,"formatTooltip",t,e)},defaultOption:{zlevel:0,z:2,coordinateSystem:"view",layout:null,left:"5%",top:"5%",right:"20%",bottom:"5%",nodeWidth:20,nodeGap:8,layoutIterations:32,label:{normal:{show:!0,position:"right",textStyle:{color:"#000",fontSize:12}},emphasis:{show:!0}},itemStyle:{normal:{borderWidth:1,borderColor:"#333"}},lineStyle:{normal:{color:"#314656",opacity:.2,curveness:.5},emphasis:{opacity:.6}},animationEasing:"linear",animationDuration:1e3}});t.exports=r},function(t,e,i){function n(t,e,i){var n=new o.Rect({shape:{x:t.x-10,y:t.y-10,width:0,height:t.height+20}});return o.initProps(n,{shape:{width:t.width+20,height:t.height+20}},e,i),n}var o=i(3),r=i(1),a=o.extendShape({shape:{x1:0,y1:0,x2:0,y2:0,cpx1:0,cpy1:0,cpx2:0,cpy2:0,extent:0},buildPath:function(t,e){var i=e.extent/2;t.moveTo(e.x1,e.y1-i),t.bezierCurveTo(e.cpx1,e.cpy1-i,e.cpx2,e.cpy2-i,e.x2,e.y2-i),t.lineTo(e.x2,e.y2+i),t.bezierCurveTo(e.cpx2,e.cpy2+i,e.cpx1,e.cpy1+i,e.x1,e.y1+i),t.closePath()}});t.exports=i(2).extendChartView({type:"sankey",_model:null,render:function(t,e,i){var s=t.getGraph(),l=this.group,u=t.layoutInfo,h=t.getData(),c=t.getData("edge");this._model=t,l.removeAll(),l.position=[u.x,u.y],s.eachEdge(function(e){var i=new a;i.dataIndex=e.dataIndex,i.seriesIndex=t.seriesIndex,i.dataType="edge";var n=e.getModel("lineStyle.normal"),r=n.get("curveness"),s=e.node1.getLayout(),u=e.node2.getLayout(),h=e.getLayout();i.shape.extent=Math.max(1,h.dy);var d=s.x+s.dx,f=s.y+h.sy+h.dy/2,p=u.x,g=u.y+h.ty+h.dy/2,m=d*(1-r)+p*r,v=f,y=d*r+p*(1-r),x=g;switch(i.setShape({x1:d,y1:f,x2:p,y2:g,cpx1:m,cpy1:v,cpx2:y,cpy2:x}),i.setStyle(n.getItemStyle()),i.style.fill){case"source":i.style.fill=e.node1.getVisual("color");break;case"target":i.style.fill=e.node2.getVisual("color")}o.setHoverStyle(i,e.getModel("lineStyle.emphasis").getItemStyle()),l.add(i),c.setItemGraphicEl(e.dataIndex,i)}),s.eachNode(function(e){var i=e.getLayout(),n=e.getModel(),a=n.getModel("label.normal"),s=a.getModel("textStyle"),u=n.getModel("label.emphasis"),c=u.getModel("textStyle"),d=new o.Rect({shape:{x:i.x,y:i.y,width:e.getLayout().dx,height:e.getLayout().dy},style:{text:a.get("show")?t.getFormattedLabel(e.dataIndex,"normal")||e.id:"",textFont:s.getFont(),textFill:s.getTextColor(),textPosition:a.get("position")}});d.setStyle(r.defaults({fill:e.getVisual("color")},n.getModel("itemStyle.normal").getItemStyle())),o.setHoverStyle(d,r.extend(e.getModel("itemStyle.emphasis"),{text:u.get("show")?t.getFormattedLabel(e.dataIndex,"emphasis")||e.id:"",textFont:c.getFont(),textFill:c.getTextColor(),textPosition:u.get("position")})),l.add(d),h.setItemGraphicEl(e.dataIndex,d),d.dataType="node"}),!this._data&&t.get("animation")&&l.setClipPath(n(l.getBoundingRect(),t,function(){l.removeClipPath()})),this._data=t.getData()},dispose:function(){}})},function(t,e,i){function n(t,e){return M.getLayoutRect(t.getBoxLayoutParams(),{width:e.getWidth(),height:e.getHeight()})}function o(t,e,i,n,o,r,s){a(t,i,o),u(t,e,r,n,s),m(t)}function r(t){I.each(t,function(t){var e=x(t.outEdges,S),i=x(t.inEdges,S),n=Math.max(e,i);t.setLayout({value:n},!0)})}function a(t,e,i){for(var n=t,o=null,r=0,a=0;n.length;){o=[];for(var u=0,h=n.length;u<h;u++){var c=n[u];c.setLayout({x:r},!0),c.setLayout({dx:e},!0);for(var d=0,f=c.outEdges.length;d<f;d++)o.push(c.outEdges[d].node2)}n=o,++r}s(t,r),a=(i-e)/(r-1),l(t,a)}function s(t,e){I.each(t,function(t){t.outEdges.length||t.setLayout({x:e-1},!0)})}function l(t,e){I.each(t,function(t){var i=t.getLayout().x*e;t.setLayout({x:i},!0)})}function u(t,e,i,n,o){var r=T().key(function(t){return t.getLayout().x}).sortKeys(w).entries(t).map(function(t){return t.values});h(t,r,e,i,n),c(r,n,i);for(var a=1;o>0;o--)a*=.99,d(r,a),c(r,n,i),p(r,a),c(r,n,i)}function h(t,e,i,n,o){var r=[];I.each(e,function(t){var e=t.length,i=0;I.each(t,function(t){i+=t.getLayout().value});var a=(n-(e-1)*o)/i;r.push(a)}),r.sort(function(t,e){return t-e});var a=r[0];I.each(e,function(t){I.each(t,function(t,e){t.setLayout({y:e},!0);var i=t.getLayout().value*a;t.setLayout({dy:i},!0)})}),I.each(i,function(t){var e=+t.getValue()*a;t.setLayout({dy:e},!0)})}function c(t,e,i){I.each(t,function(t){var n,o,r,a=0,s=t.length;for(t.sort(b),r=0;r<s;r++){if(n=t[r],o=a-n.getLayout().y,o>0){var l=n.getLayout().y+o;n.setLayout({y:l},!0)}a=n.getLayout().y+n.getLayout().dy+e}if(o=a-e-i,o>0){var l=n.getLayout().y-o;for(n.setLayout({y:l},!0),a=n.getLayout().y,r=s-2;r>=0;--r)n=t[r],o=n.getLayout().y+n.getLayout().dy+e-a,o>0&&(l=n.getLayout().y-o,n.setLayout({y:l},!0)),a=n.getLayout().y}})}function d(t,e){I.each(t.slice().reverse(),function(t){I.each(t,function(t){if(t.outEdges.length){var i=x(t.outEdges,f)/x(t.outEdges,S),n=t.getLayout().y+(i-_(t))*e;t.setLayout({y:n},!0)}})})}function f(t){return _(t.node2)*t.getValue()}function p(t,e){I.each(t,function(t){I.each(t,function(t){if(t.inEdges.length){var i=x(t.inEdges,g)/x(t.inEdges,S),n=t.getLayout().y+(i-_(t))*e;t.setLayout({y:n},!0)}})})}function g(t){return _(t.node1)*t.getValue()}function m(t){I.each(t,function(t){t.outEdges.sort(v),t.inEdges.sort(y)}),I.each(t,function(t){var e=0,i=0;I.each(t.outEdges,function(t){t.setLayout({sy:e},!0),e+=t.getLayout().dy}),I.each(t.inEdges,function(t){t.setLayout({ty:i},!0),i+=t.getLayout().dy})})}function v(t,e){return t.node2.getLayout().y-e.node2.getLayout().y}function y(t,e){return t.node1.getLayout().y-e.node1.getLayout().y}function x(t,e){for(var i=0,n=t.length,o=-1;++o<n;){var r=+e.call(t,t[o],o);isNaN(r)||(i+=r)}return i}function _(t){return t.getLayout().y+t.getLayout().dy/2}function b(t,e){return t.getLayout().y-e.getLayout().y}function w(t,e){return t<e?-1:t>e?1:t===e?0:NaN}function S(t){return t.getValue()}var M=i(13),T=i(382),I=i(1);t.exports=function(t,e,i){t.eachSeriesByType("sankey",function(t){var i=t.get("nodeWidth"),a=t.get("nodeGap"),s=n(t,e);t.layoutInfo=s;var l=s.width,u=s.height,h=t.getGraph(),c=h.nodes,d=h.edges;r(c);var f=c.filter(function(t){return 0===t.getLayout().value}),p=0!==f.length?0:t.get("layoutIterations");o(c,d,i,a,l,u,p)})}},function(t,e,i){var n=i(71);t.exports=function(t,e){t.eachSeriesByType("sankey",function(t){var e=t.getGraph(),i=e.nodes;i.sort(function(t,e){return t.getLayout().value-e.getLayout().value});var o=i[0].getLayout().value,r=i[i.length-1].getLayout().value;i.forEach(function(e){var i=new n({type:"color",mappingMethod:"linear",dataExtent:[o,r],visual:t.get("color")}),a=i.mapValueToVisual(e.getLayout().value);e.setVisual("color",a);var s=e.getModel(),l=s.get("itemStyle.normal.color");null!=l&&e.setVisual("color",l)})})}},function(t,e,i){var n=i(2);i(313),i(314),i(315),n.registerVisual(i(317)),n.registerLayout(i(316))},function(t,e,i){function n(t){this.group=new a.Group,t.add(this.group)}function o(t,e,i,n,o,r){var a=[[o?t:t-d,e],[t+i,e],[t+i,e+n],[o?t:t-d,e+n]];return!r&&a.splice(2,0,[t+i+d,e+n/2]),!o&&a.push([t,e+n/2]),a}function r(t,e,i){t.eventData={componentType:"series",componentSubType:"treemap",seriesIndex:e.componentIndex,seriesName:e.name,seriesType:"treemap",selfType:"breadcrumb",nodeData:{dataIndex:i&&i.dataIndex,name:i&&i.name},treePathInfo:i&&u.wrapTreePathInfo(i,e)}}var a=i(3),s=i(13),l=i(1),u=i(78),h=8,c=8,d=5;n.prototype={constructor:n,render:function(t,e,i,n){var o=t.getModel("breadcrumb"),r=this.group;if(r.removeAll(),o.get("show")&&i){var a=o.getModel("itemStyle.normal"),l=a.getModel("textStyle"),u={pos:{left:o.get("left"),right:o.get("right"),top:o.get("top"),bottom:o.get("bottom")},box:{width:e.getWidth(),height:e.getHeight()},emptyItemWidth:o.get("emptyItemWidth"),totalWidth:0,renderList:[]};this._prepare(i,u,l),this._renderContent(t,u,a,l,n),s.positionGroup(r,u.pos,u.box)}},_prepare:function(t,e,i){for(var n=t;n;n=n.parentNode){var o=n.getModel().get("name"),r=i.getTextRect(o),a=Math.max(r.width+2*h,e.emptyItemWidth);e.totalWidth+=a+c,e.renderList.push({node:n,text:o,width:a})}},_renderContent:function(t,e,i,n,u){for(var h=0,d=e.emptyItemWidth,f=t.get("breadcrumb.height"),p=s.getAvailableSize(e.pos,e.box),g=e.totalWidth,m=e.renderList,v=m.length-1;v>=0;v--){var y=m[v],x=y.node,_=y.width,b=y.text;g>p.width&&(g-=_-d,_=d,b="");var w=new a.Polygon({shape:{points:o(h,0,_,f,v===m.length-1,0===v)},style:l.defaults(i.getItemStyle(),{lineJoin:"bevel",text:b,textFill:n.getTextColor(),textFont:n.getFont()}),z:10,onclick:l.curry(u,x)});this.group.add(w),r(w,t,x),h+=_+c}},remove:function(){this.group.removeAll()}},t.exports=n},function(t,e,i){function n(t,e){var i=0;s.each(t.children,function(t){n(t,e);var o=t.value;s.isArray(o)&&(o=o[0]),i+=o});var o=t.value;e>=0&&(s.isArray(o)?o=o[0]:t.value=new Array(e)),(null==o||isNaN(o))&&(o=i),o<0&&(o=0),e>=0?t.value[0]=o:t.value=o}function o(t,e){var i=e.get("color");if(i){t=t||[];var n;if(s.each(t,function(t){var e=new l(t),i=e.get("color");(e.get("itemStyle.normal.color")||i&&"none"!==i)&&(n=!0)}),!n){var o=t[0]||(t[0]={});o.color=i.slice()}return t}}var r=i(15),a=i(380),s=i(1),l=i(10),u=i(9),h=i(78),c=u.encodeHTML,d=u.addCommas;t.exports=r.extend({type:"series.treemap",dependencies:["grid","polar"],_viewRoot:null,defaultOption:{progressive:0,hoverLayerThreshold:1/0,left:"center",top:"middle",right:null,bottom:null,width:"80%",height:"80%",sort:!0,clipWindow:"origin",squareRatio:.5*(1+Math.sqrt(5)),leafDepth:null,drillDownIcon:"▶",zoomToNodeRatio:.1024,roam:!0,nodeClick:"zoomToNode",animation:!0,animationDurationUpdate:900,animationEasing:"quinticInOut",breadcrumb:{show:!0,height:22,left:"center",top:"bottom",emptyItemWidth:25,itemStyle:{normal:{color:"rgba(0,0,0,0.7)",borderColor:"rgba(255,255,255,0.7)",borderWidth:1,shadowColor:"rgba(150,150,150,1)",shadowBlur:3,shadowOffsetX:0,shadowOffsetY:0,textStyle:{color:"#fff"}},emphasis:{textStyle:{}}}},label:{normal:{show:!0,position:"inside",textStyle:{color:"#fff",ellipsis:!0}}},itemStyle:{normal:{color:null,colorAlpha:null,colorSaturation:null,borderWidth:0,gapWidth:0,borderColor:"#fff",borderColorSaturation:null},emphasis:{}},visualDimension:0,visualMin:null,visualMax:null,color:[],colorAlpha:null,colorSaturation:null,colorMappingBy:"index",visibleMin:10,childrenVisibleMin:null,levels:[]},getInitialData:function(t,e){var i=t.data||[],r=t.name;null==r&&(r=t.name);var l={name:r,children:t.data},u=(i[0]||{}).value;n(l,s.isArray(u)?u.length:-1);var h=t.levels||[];return h=t.levels=o(h,e),a.createTree(l,this,h).data},optionUpdated:function(){this.resetViewRoot()},formatTooltip:function(t){var e=this.getData(),i=this.getRawValue(t),n=d(s.isArray(i)?i[0]:i),o=e.getName(t);return c(o)+": "+n},getDataParams:function(t){var e=r.prototype.getDataParams.apply(this,arguments),i=this.getData().tree.getNodeByDataIndex(t);return e.treePathInfo=h.wrapTreePathInfo(i,this),e},setLayoutInfo:function(t){this.layoutInfo=this.layoutInfo||{},s.extend(this.layoutInfo,t)},mapIdToIndex:function(t){var e=this._idIndexMap;e||(e=this._idIndexMap={},this._idIndexMapCount=0);var i=e[t];return null==i&&(e[t]=i=this._idIndexMapCount++),i},getViewRoot:function(){return this._viewRoot},resetViewRoot:function(t){t?this._viewRoot=t:t=this._viewRoot;var e=this.getData().tree.root;t&&(t===e||e.contains(t))||(this._viewRoot=e)}})},function(t,e,i){function n(){return{nodeGroup:[],background:[],content:[]}}function o(t,e,i,n,o,l,u,h,c,d){function f(e){E.dataIndex=u.dataIndex,E.seriesIndex=t.seriesIndex;var i=I.borderWidth,n=Math.max(A-2*i,0),o=Math.max(L-2*i,0);E.culling=!0,E.setShape({x:i,y:i,width:n,height:o});var r=u.getVisual("color",!0);p(E,function(){var t={fill:r},e=u.getModel("itemStyle.emphasis").getItemStyle();g(t,e,r,n,o),E.setStyle(t),s.setHoverStyle(E,e)}),e.add(E)}function p(t,e){C?!t.invisible&&l.push(t):(e(),t.__tmWillVisible||(t.invisible=!1))}function g(e,i,n,o,r){var a=u.getModel(),s=a.get("name");if(I.isLeafRoot){var l=t.get("drillDownIcon",!0);s=l?l+" "+s:s}y(s,e,a,_,n,o,r),y(s,i,a,b,n,o,r)}function y(t,e,i,n,o,r,a){var l=i.getModel(n),u=l.getModel("textStyle");s.setText(e,l,o),e.textAlign=u.get("align"),e.textVerticalAlign=u.get("baseline");var h=u.getTextRect(t);!l.getShallow("show")||h.height>a?e.text="":h.width>r?e.text=u.get("ellipsis")?u.truncateText(t,r,null,{minChar:2}):"":e.text=t}function x(t,n,a,s){var l=null!=P&&i[t][P],u=o[t];return l?(i[t][P]=null,w(u,l,t)):C||(l=new n({z:r(a,s)}),l.__tmDepth=a,l.__tmStorageName=t,T(u,l,t)),e[t][D]=l}function w(t,e,i){var n=t[D]={};n.old="nodeGroup"===i?e.position.slice():a.extend({},e.shape)}function T(t,e,i){var r=t[D]={},a=u.parentNode;if(a&&(!n||"drillDown"===n.direction)){var s=0,l=0,h=o.background[a.getRawIndex()];!n&&h&&h.old&&(s=h.old.width,l=h.old.height),r.old="nodeGroup"===i?[0,l]:{x:s,y:l,width:0,height:0}}r.fadein="nodeGroup"!==i}if(u){var I=u.getLayout();if(I&&I.isInView){var A=I.width,L=I.height,C=I.invisible,D=u.getRawIndex(),P=h&&h.getRawIndex(),k=x("nodeGroup",m);if(k){if(c.add(k),k.attr("position",[I.x||0,I.y||0]),k.__tmNodeWidth=A,k.__tmNodeHeight=L,I.isAboveViewRoot)return k;var z=x("background",v,d,S);z&&(z.setShape({x:0,y:0,width:A,height:L}),p(z,function(){z.setStyle("fill",u.getVisual("borderColor",!0))}),k.add(z));var O=u.viewChildren;if(!O||!O.length){var E=x("content",v,d,M);E&&f(k)}return k}}}}function r(t,e){var i=t*w+e;return(i-1)/i}var a=i(1),s=i(3),l=i(45),u=i(78),h=i(312),c=i(79),d=i(8),f=i(19),p=i(381),g=a.bind,m=s.Group,v=s.Rect,y=a.each,x=3,_=["label","normal"],b=["label","emphasis"],w=10,S=1,M=2;t.exports=i(2).extendChartView({type:"treemap",init:function(t,e){this._containerGroup,this._storage=n(),this._oldTree,this._breadcrumb,this._controller,this._state="ready",this._mayClick},render:function(t,e,i,n){var o=e.findComponents({mainType:"series",subType:"treemap",query:n});if(!(a.indexOf(o,t)<0)){this.seriesModel=t,this.api=i,this.ecModel=e;var r=u.retrieveTargetInfo(n,t),s=n&&n.type,l=t.layoutInfo,h=!this._oldTree,c=this._storage,d="treemapRootToNode"===s&&r&&c?{rootNodeGroup:c.nodeGroup[r.node.getRawIndex()],direction:n.direction}:null,f=this._giveContainerGroup(l),p=this._doRender(f,t,d);h||s&&"treemapZoomToNode"!==s&&"treemapRootToNode"!==s?p.renderFinally():this._doAnimation(f,p,t,d),this._resetController(i),this._renderBreadcrumb(t,i,r)}},_giveContainerGroup:function(t){var e=this._containerGroup;return e||(e=this._containerGroup=new m,this._initEvents(e),this.group.add(e)),e.attr("position",[t.x,t.y]),e},_doRender:function(t,e,i){function r(t,e,i,n,o){function s(t){return t.getId()}function u(a,s){var l=null!=a?t[a]:null,u=null!=s?e[s]:null,h=m(l,u,i,o);h&&r(l&&l.viewChildren||[],u&&u.viewChildren||[],h,n,o+1)}n?(e=t,y(t,function(t,e){!t.isRemoved()&&u(e,e)})):new l(e,t,s,s).add(u).update(u).remove(a.curry(u,null)).execute()}function s(t){var e=n();return t&&y(t,function(t,i){var n=e[i];y(t,function(t){t&&(n.push(t),t.__tmWillDelete=1)})}),e}function u(){y(v,function(t){y(t,function(t){t.parent&&t.parent.remove(t)})}),y(g,function(t){t.invisible=!0,t.dirty()})}var h=e.getData().tree,c=this._oldTree,d=n(),f=n(),p=this._storage,g=[],m=a.curry(o,e,f,p,i,d,g);r(h.root?[h.root]:[],c&&c.root?[c.root]:[],t,h===c||!c,0);var v=s(p);return this._oldTree=h,this._storage=f,{lastsForAnimation:d,willDeleteEls:v,renderFinally:u}},_doAnimation:function(t,e,i,n){if(i.get("animation")){var o=i.get("animationDurationUpdate"),r=i.get("animationEasing"),s=p.createWrap();y(e.willDeleteEls,function(t,e){y(t,function(t,i){if(!t.invisible){var a,l=t.parent;if(n&&"drillDown"===n.direction)a=l===n.rootNodeGroup?{shape:{x:0,y:0,width:l.__tmNodeWidth,height:l.__tmNodeHeight},style:{opacity:0}}:{style:{opacity:0}};else{var u=0,h=0;l.__tmWillDelete||(u=l.__tmNodeWidth/2,h=l.__tmNodeHeight/2),a="nodeGroup"===e?{position:[u,h],style:{opacity:0}}:{shape:{x:u,y:h,width:0,height:0},style:{opacity:0}}}a&&s.add(t,a,o,r)}})}),y(this._storage,function(t,i){y(t,function(t,n){var l=e.lastsForAnimation[i][n],u={};l&&("nodeGroup"===i?l.old&&(u.position=t.position.slice(),t.attr("position",l.old)):(l.old&&(u.shape=a.extend({},t.shape),t.setShape(l.old)),l.fadein?(t.setStyle("opacity",0),u.style={opacity:1}):1!==t.style.opacity&&(u.style={opacity:1})),s.add(t,u,o,r))})},this),this._state="animating",s.done(g(function(){this._state="ready",e.renderFinally()},this)).start()}},_resetController:function(t){var e=this._controller;e||(e=this._controller=new c(t.getZr()),e.enable(this.seriesModel.get("roam")),e.on("pan",g(this._onPan,this)),e.on("zoom",g(this._onZoom,this)));var i=new d(0,0,t.getWidth(),t.getHeight());e.setContainsPoint(function(t,e){return i.contain(t,e)})},_clearController:function(){var t=this._controller;t&&(t.dispose(),t=null)},_onPan:function(t,e){if(this._mayClick=!1,"animating"!==this._state&&(Math.abs(t)>x||Math.abs(e)>x)){var i=this.seriesModel.getData().tree.root;if(!i)return;var n=i.getLayout();if(!n)return;this.api.dispatchAction({type:"treemapMove",from:this.uid,seriesId:this.seriesModel.id,rootRect:{x:n.x+t,y:n.y+e,width:n.width,height:n.height}})}},_onZoom:function(t,e,i){if(this._mayClick=!1,"animating"!==this._state){var n=this.seriesModel.getData().tree.root;if(!n)return;var o=n.getLayout();if(!o)return;var r=new d(o.x,o.y,o.width,o.height),a=this.seriesModel.layoutInfo;e-=a.x,i-=a.y;var s=f.create();f.translate(s,s,[-e,-i]),f.scale(s,s,[t,t]),f.translate(s,s,[e,i]),r.applyTransform(s),this.api.dispatchAction({type:"treemapRender",from:this.uid,seriesId:this.seriesModel.id,rootRect:{x:r.x,y:r.y,width:r.width,height:r.height}})}},_initEvents:function(t){function e(t){var e=this.seriesModel.get("nodeClick",!0);if(e){var i=this.findTarget(t.offsetX,t.offsetY);if(i){var n=i.node;if(n.getLayout().isLeafRoot)this._rootToNode(i);else if("zoomToNode"===e)this._zoomToNode(i);else if("link"===e){var o=n.hostTree.data.getItemModel(n.dataIndex),r=o.get("link",!0),a=o.get("target",!0)||"blank";r&&window.open(r,a)}}}}t.on("mousedown",function(t){"ready"===this._state&&(this._mayClick=!0)},this),t.on("mouseup",function(t){this._mayClick&&(this._mayClick=!1,"ready"===this._state&&e.call(this,t))},this)},_renderBreadcrumb:function(t,e,i){function n(e){"animating"!==this._state&&(u.aboveViewRoot(t.getViewRoot(),e)?this._rootToNode({node:e}):this._zoomToNode({node:e}))}i||(i=null!=t.get("leafDepth",!0)?{node:t.getViewRoot()}:this.findTarget(e.getWidth()/2,e.getHeight()/2),i||(i={node:t.getData().tree.root})),(this._breadcrumb||(this._breadcrumb=new h(this.group))).render(t,e,i.node,g(n,this))},remove:function(){this._clearController(),this._containerGroup&&this._containerGroup.removeAll(),this._storage=n(),this._state="ready",this._breadcrumb&&this._breadcrumb.remove()},dispose:function(){this._clearController()},_zoomToNode:function(t){this.api.dispatchAction({type:"treemapZoomToNode",from:this.uid,seriesId:this.seriesModel.id,targetNode:t.node})},_rootToNode:function(t){this.api.dispatchAction({type:"treemapRootToNode",from:this.uid,seriesId:this.seriesModel.id,targetNode:t.node})},findTarget:function(t,e){var i,n=this.seriesModel.getViewRoot();return n.eachNode({attr:"viewChildren",order:"preorder"},function(n){var o=this._storage.background[n.getRawIndex()];if(o){var r=o.transformCoordToLocal(t,e),a=o.shape;if(!(a.x<=r[0]&&r[0]<=a.x+a.width&&a.y<=r[1]&&r[1]<=a.y+a.height))return!1;i={node:n,offsetX:r[0],offsetY:r[1]}}},this),i}})},function(t,e,i){for(var n=i(2),o=i(78),r=function(){},a=["treemapZoomToNode","treemapRender","treemapMove"],s=0;s<a.length;s++)n.registerAction({type:a[s],update:"updateView"},r);n.registerAction({type:"treemapRootToNode",update:"updateView"},function(t,e){function i(e,i){var n=o.retrieveTargetInfo(t,e);if(n){var r=e.getViewRoot();r&&(t.direction=o.aboveViewRoot(r,n.node)?"rollUp":"drillDown"),e.resetViewRoot(n.node)}}e.eachComponent({mainType:"series",subType:"treemap",query:t},i)})},function(t,e,i){function n(t,e,i){var n={mainType:"series",subType:"treemap",query:i};t.eachComponent(n,function(t){var n=e.getWidth(),r=e.getHeight(),a=t.option,s=a.size||[],l=b(w(a.width,s[0]),n),u=b(w(a.height,s[1]),r),h=m.getLayoutRect(t.getBoxLayoutParams(),{width:e.getWidth(),height:e.getHeight()}),g=i&&i.type,x=v.retrieveTargetInfo(i,t),_="treemapRender"===g||"treemapMove"===g?i.rootRect:null,M=t.getViewRoot(),T=v.getPathToRoot(M);if("treemapMove"!==g){var I="treemapZoomToNode"===g?c(t,x,M,l,u):_?[_.width,_.height]:[l,u],A=a.sort;A&&"asc"!==A&&"desc"!==A&&(A="desc");var L={squareRatio:a.squareRatio,sort:A,leafDepth:a.leafDepth};M.hostTree.clearLayouts();var C={x:0,y:0,width:I[0],height:I[1],area:I[0]*I[1]};M.setLayout(C),o(M,L,!1,0);var C=M.getLayout();S(T,function(t,e){var i=(T[e+1]||M).getValue();t.setLayout(p.extend({dataExtent:[i,i],borderWidth:0},C))})}var D=t.getData().tree.root;D.setLayout(d(h,_,x),!0),t.setLayoutInfo(h),f(D,new y((-h.x),(-h.y),n,r),T,M,0)})}function o(t,e,i,n){var a,s;if(!t.isRemoved()){var l=t.getLayout();a=l.width,s=l.height;var c=t.getModel("itemStyle.normal"),d=c.get("borderWidth"),f=c.get("gapWidth")/2,p=d-f,g=t.getModel();t.setLayout({borderWidth:d},!0),a=x(a-2*p,0),s=x(s-2*p,0);var m=a*s,v=r(t,g,m,e,i,n);if(v.length){var y={x:p,y:p,width:a,height:s},b=_(a,s),w=1/0,S=[];S.area=0;for(var M=0,T=v.length;M<T;){var I=v[M];S.push(I),S.area+=I.getLayout().area;var A=u(S,b,e.squareRatio);A<=w?(M++,w=A):(S.area-=S.pop().getLayout().area,h(S,b,y,f,!1),b=_(y.width,y.height),S.length=S.area=0,w=1/0)}if(S.length&&h(S,b,y,f,!0),!i){var L=g.get("childrenVisibleMin");null!=L&&m<L&&(i=!0)}for(var M=0,T=v.length;M<T;M++)o(v[M],e,i,n+1)}}}function r(t,e,i,n,o,r){var u=t.children||[],h=n.sort;"asc"!==h&&"desc"!==h&&(h=null);var c=null!=n.leafDepth&&n.leafDepth<=r;if(o&&!c)return t.viewChildren=[];u=p.filter(u,function(t){return!t.isRemoved()}),s(u,h);var d=l(e,u,h);if(0===d.sum)return t.viewChildren=[];if(d.sum=a(e,i,d.sum,h,u),0===d.sum)return t.viewChildren=[];for(var f=0,g=u.length;f<g;f++){var m=u[f].getValue()/d.sum*i;u[f].setLayout({area:m})}return c&&(u.length&&t.setLayout({isLeafRoot:!0},!0),u.length=0),t.viewChildren=u,t.setLayout({dataExtent:d.dataExtent},!0),u}function a(t,e,i,n,o){if(!n)return i;for(var r=t.get("visibleMin"),a=o.length,s=a,l=a-1;l>=0;l--){var u=o["asc"===n?a-l-1:l].getValue();u/i*e<r&&(s=l,i-=u)}return"asc"===n?o.splice(0,a-s):o.splice(s,a-s),i}function s(t,e){return e&&t.sort(function(t,i){return"asc"===e?t.getValue()-i.getValue():i.getValue()-t.getValue()}),t}function l(t,e,i){for(var n=0,o=0,r=e.length;o<r;o++)n+=e[o].getValue();var a,s=t.get("visualDimension");if(e&&e.length)if("value"===s&&i)a=[e[e.length-1].getValue(),e[0].getValue()],"asc"===i&&a.reverse();else{var a=[1/0,-(1/0)];S(e,function(t){var e=t.getValue(s);e<a[0]&&(a[0]=e),e>a[1]&&(a[1]=e)})}else a=[NaN,NaN];return{sum:n,dataExtent:a}}function u(t,e,i){for(var n,o=0,r=1/0,a=0,s=t.length;a<s;a++)n=t[a].getLayout().area,n&&(n<r&&(r=n),n>o&&(o=n));var l=t.area*t.area,u=e*e*i;return l?x(u*o/l,l/(u*r)):1/0}function h(t,e,i,n,o){var r=e===i.width?0:1,a=1-r,s=["x","y"],l=["width","height"],u=i[s[r]],h=e?t.area/e:0;(o||h>i[l[a]])&&(h=i[l[a]]);for(var c=0,d=t.length;c<d;c++){var f=t[c],p={},g=h?f.getLayout().area/h:0,m=p[l[a]]=x(h-2*n,0),v=i[s[r]]+i[l[r]]-u,y=c===d-1||v<g?v:g,b=p[l[r]]=x(y-2*n,0);p[s[a]]=i[s[a]]+_(n,m/2),p[s[r]]=u+_(n,b/2),u+=y,f.setLayout(p,!0)}i[s[a]]+=h,i[l[a]]-=h}function c(t,e,i,n,o){var r=(e||{}).node,a=[n,o];if(!r||r===i)return a;for(var s,l=n*o,u=l*t.option.zoomToNodeRatio;s=r.parentNode;){for(var h=0,c=s.children,d=0,f=c.length;d<f;d++)h+=c[d].getValue();var p=r.getValue();if(0===p)return a;u*=h/p;var m=s.getModel("itemStyle.normal").get("borderWidth");isFinite(m)&&(u+=4*m*m+4*m*Math.pow(u,.5)),u>g.MAX_SAFE_INTEGER&&(u=g.MAX_SAFE_INTEGER),r=s}u<l&&(u=l);var v=Math.pow(u/l,.5);return[n*v,o*v]}function d(t,e,i){if(e)return{x:e.x,y:e.y};var n={x:0,y:0};if(!i)return n;var o=i.node,r=o.getLayout();if(!r)return n;for(var a=[r.width/2,r.height/2],s=o;s;){var l=s.getLayout();a[0]+=l.x,a[1]+=l.y,s=s.parentNode}return{x:t.width/2-a[0],y:t.height/2-a[1]}}function f(t,e,i,n,o){var r=t.getLayout(),a=i[o],s=a&&a===t;if(!(a&&!s||o===i.length&&t!==n)){t.setLayout({isInView:!0,invisible:!s&&!e.intersect(r),isAboveViewRoot:s},!0);var l=new y(e.x-r.x,e.y-r.y,e.width,e.height);S(t.viewChildren||[],function(t){f(t,l,i,n,o+1)})}}var p=i(1),g=i(4),m=i(13),v=i(78),y=i(8),v=i(78),x=Math.max,_=Math.min,b=g.parsePercent,w=p.retrieve,S=p.each;t.exports=n},function(t,e,i){function n(t,e,i,s,u,c){var d=t.getModel(),p=t.getLayout();if(p&&!p.invisible&&p.isInView){var m,v=t.getModel(g),y=i[t.depth],x=o(v,e,y,s),_=v.get("borderColor"),b=v.get("borderColorSaturation");null!=b&&(m=r(x,t),_=a(b,m)),t.setVisual("borderColor",_);var w=t.viewChildren;if(w&&w.length){var S=l(t,d,p,v,x,w);f.each(w,function(t,e){if(t.depth>=u.length||t===u[t.depth]){var o=h(d,x,t,e,S,c);n(t,o,i,s,u,c)}})}else m=r(x,t),t.setVisual("color",m)}}function o(t,e,i,n){var o=f.extend({},e);return f.each(["color","colorAlpha","colorSaturation"],function(r){var a=t.get(r,!0);null==a&&i&&(a=i[r]),null==a&&(a=e[r]),null==a&&(a=n.get(r)),null!=a&&(o[r]=a)}),o}function r(t){var e=s(t,"color");if(e){var i=s(t,"colorAlpha"),n=s(t,"colorSaturation");return n&&(e=d.modifyHSL(e,null,null,n)),i&&(e=d.modifyAlpha(e,i)),e}}function a(t,e){return null!=e?d.modifyHSL(e,null,null,t):null}function s(t,e){var i=t[e];if(null!=i&&"none"!==i)return i}function l(t,e,i,n,o,r){if(r&&r.length){var a=u(e,"color")||null!=o.color&&"none"!==o.color&&(u(e,"colorAlpha")||u(e,"colorSaturation"));if(a){var s=e.get("visualMin"),l=e.get("visualMax"),h=i.dataExtent.slice();null!=s&&s<h[0]&&(h[0]=s),null!=l&&l>h[1]&&(h[1]=l);var d=e.get("colorMappingBy"),f={type:a.name,dataExtent:h,visual:a.range};"color"!==f.type||"index"!==d&&"id"!==d?f.mappingMethod="linear":(f.mappingMethod="category",f.loop=!0);var p=new c(f);return p.__drColorMappingBy=d,p}}}function u(t,e){var i=t.get(e);return p(i)&&i.length?{name:e,range:i}:null}function h(t,e,i,n,o,r){var a=f.extend({},e);if(o){var s=o.type,l="color"===s&&o.__drColorMappingBy,u="index"===l?n:"id"===l?r.mapIdToIndex(i.getId()):i.getValue(t.get("visualDimension"));a[s]=o.mapValueToVisual(u)}return a}var c=i(71),d=i(18),f=i(1),p=f.isArray,g="itemStyle.normal";t.exports=function(t,e,i){var o={mainType:"series",subType:"treemap",query:i};t.eachComponent(o,function(t){var e=t.getData().tree,i=e.root,o=t.getModel(g);if(!i.isRemoved()){var r=f.map(e.levelModels,function(t){
+return t?t.get(g):null});n(i,{},r,o,t.getViewRoot().getAncestors(),t)}})}},function(t,e,i){"use strict";i(216),i(319)},function(t,e,i){"use strict";function n(t,e,i,n){var o=t.coordToPoint([e,n]),r=t.coordToPoint([i,n]);return{x1:o[0],y1:o[1],x2:r[0],y2:r[1]}}var o=i(1),r=i(3),a=i(10),s=["axisLine","axisLabel","axisTick","splitLine","splitArea"];i(2).extendComponentView({type:"angleAxis",render:function(t,e){if(this.group.removeAll(),t.get("show")){var i=e.getComponent("polar",t.get("polarIndex")),n=t.axis,r=i.coordinateSystem,a=r.getRadiusAxis().getExtent(),l=n.getTicksCoords();"category"!==n.type&&l.pop(),o.each(s,function(e){t.get(e+".show")&&this["_"+e](t,r,l,a)},this)}},_axisLine:function(t,e,i,n){var o=t.getModel("axisLine.lineStyle"),a=new r.Circle({shape:{cx:e.cx,cy:e.cy,r:n[1]},style:o.getLineStyle(),z2:1,silent:!0});a.style.fill=null,this.group.add(a)},_axisTick:function(t,e,i,a){var s=t.getModel("axisTick"),l=(s.get("inside")?-1:1)*s.get("length"),u=o.map(i,function(t){return new r.Line({shape:n(e,a[1],a[1]+l,t)})});this.group.add(r.mergePath(u,{style:o.defaults(s.getModel("lineStyle").getLineStyle(),{stroke:t.get("axisLine.lineStyle.color")})}))},_axisLabel:function(t,e,i,n){for(var o=t.axis,s=t.get("data"),l=t.getModel("axisLabel"),u=l.getModel("textStyle"),h=t.getFormattedLabels(),c=l.get("margin"),d=o.getLabelsCoords(),f=0;f<i.length;f++){var p=n[1],g=e.coordToPoint([p+c,d[f]]),m=e.cx,v=e.cy,y=Math.abs(g[0]-m)/p<.3?"center":g[0]>m?"left":"right",x=Math.abs(g[1]-v)/p<.3?"middle":g[1]>v?"top":"bottom",_=u;s&&s[f]&&s[f].textStyle&&(_=new a(s[f].textStyle,u)),this.group.add(new r.Text({style:{x:g[0],y:g[1],fill:_.getTextColor()||t.get("axisLine.lineStyle.color"),text:h[f],textAlign:y,textVerticalAlign:x,textFont:_.getFont()},silent:!0}))}},_splitLine:function(t,e,i,a){var s=t.getModel("splitLine"),l=s.getModel("lineStyle"),u=l.get("color"),h=0;u=u instanceof Array?u:[u];for(var c=[],d=0;d<i.length;d++){var f=h++%u.length;c[f]=c[f]||[],c[f].push(new r.Line({shape:n(e,a[0],a[1],i[d])}))}for(var d=0;d<c.length;d++)this.group.add(r.mergePath(c[d],{style:o.defaults({stroke:u[d%u.length]},l.getLineStyle()),silent:!0,z:t.get("z")}))},_splitArea:function(t,e,i,n){var a=t.getModel("splitArea"),s=a.getModel("areaStyle"),l=s.get("color"),u=0;l=l instanceof Array?l:[l];for(var h=[],c=Math.PI/180,d=-i[0]*c,f=Math.min(n[0],n[1]),p=Math.max(n[0],n[1]),g=t.get("clockwise"),m=1;m<i.length;m++){var v=u++%l.length;h[v]=h[v]||[],h[v].push(new r.Sector({shape:{cx:e.cx,cy:e.cy,r0:f,r:p,startAngle:d,endAngle:-i[m]*c,clockwise:g},silent:!0})),d=-i[m]*c}for(var m=0;m<h.length;m++)this.group.add(r.mergePath(h[m],{style:o.defaults({fill:l[m%l.length]},s.getAreaStyle()),silent:!0}))}})},function(t,e,i){function n(t,e,i){return i&&"axisAreaSelect"===i.type&&e.findComponents({mainType:"parallelAxis",query:i})[0]===t}var o=i(1),r=i(50),a=i(113),s=i(3),l=["axisLine","axisLabel","axisTick","axisName"],u=i(2).extendComponentView({type:"parallelAxis",init:function(t,e){u.superApply(this,"init",arguments),(this._brushController=new a(e.getZr())).on("brush",o.bind(this._onBrush,this))},render:function(t,e,i,a){if(!n(t,e,a)){this.axisModel=t,this.api=i,this.group.removeAll();var u=this._axisGroup;if(this._axisGroup=new s.Group,this.group.add(this._axisGroup),t.get("show")){var h,c=e.getComponent("parallel",t.get("parallelIndex")).coordinateSystem,d=t.getAreaSelectStyle(),f=d.width,p=t.axis.dim,g=c.getAxisLayout(p),m=o.indexOf(c.dimensions,p),v=g.axisExpandWindow;v&&(m<=v[0]||m>=v[1])&&(h=!1);var y=o.extend({axisLabelShow:h,strokeContainThreshold:f},g),x=new r(t,y);o.each(l,x.add,x),this._axisGroup.add(x.getGroup()),this._refreshBrushController(y,d,t,f),s.groupTransition(u,this._axisGroup,t)}}},_refreshBrushController:function(t,e,i,n){var r=i.axis,a=o.map(i.activeIntervals,function(t){return{brushType:"lineX",panelId:"pl",range:[r.dataToCoord(t[0],!0),r.dataToCoord(t[1],!0)]}}),l=r.getExtent(),u=l[1]-l[0],h=Math.min(30,.1*Math.abs(u)),c=s.BoundingRect.create({x:l[0],y:-n/2,width:u,height:n});c.x-=h,c.width+=2*h,this._brushController.mount({enableGlobalPan:!0,rotation:t.rotation,position:t.position}).setPanels([{panelId:"pl",rect:c}]).enableBrush({brushType:"lineX",brushStyle:e,removeOnClick:!0}).updateCovers(a)},_onBrush:function(t,e){var i=this.axisModel,n=i.axis,r=o.map(t,function(t){return[n.coordToData(t.range[0],!0),n.coordToData(t.range[1],!0)]});(!i.option.realtime===e.isEnd||e.removeOnClick)&&this.api.dispatchAction({type:"axisAreaSelect",parallelAxisId:i.id,intervals:r})},dispose:function(){this._brushController.dispose()}});t.exports=u},function(t,e,i){"use strict";function n(t,e,i){return{position:[t.cx,t.cy],rotation:i/180*Math.PI,labelDirection:-1,tickDirection:-1,nameDirection:1,labelRotation:e.getModel("axisLabel").get("rotate"),z2:1}}var o=i(1),r=i(3),a=i(50),s=["axisLine","axisLabel","axisTick","axisName"],l=["splitLine","splitArea"];i(2).extendComponentView({type:"radiusAxis",render:function(t,e){if(this.group.removeAll(),t.get("show")){var i=e.getComponent("polar",t.get("polarIndex")),r=i.coordinateSystem.getAngleAxis(),u=t.axis,h=i.coordinateSystem,c=u.getTicksCoords(),d=r.getExtent()[0],f=u.getExtent(),p=n(h,t,d),g=new a(t,p);o.each(s,g.add,g),this.group.add(g.getGroup()),o.each(l,function(e){t.get(e+".show")&&this["_"+e](t,h,d,f,c)},this)}},_splitLine:function(t,e,i,n,a){var s=t.getModel("splitLine"),l=s.getModel("lineStyle"),u=l.get("color"),h=0;u=u instanceof Array?u:[u];for(var c=[],d=0;d<a.length;d++){var f=h++%u.length;c[f]=c[f]||[],c[f].push(new r.Circle({shape:{cx:e.cx,cy:e.cy,r:a[d]},silent:!0}))}for(var d=0;d<c.length;d++)this.group.add(r.mergePath(c[d],{style:o.defaults({stroke:u[d%u.length],fill:null},l.getLineStyle()),silent:!0}))},_splitArea:function(t,e,i,n,a){var s=t.getModel("splitArea"),l=s.getModel("areaStyle"),u=l.get("color"),h=0;u=u instanceof Array?u:[u];for(var c=[],d=a[0],f=1;f<a.length;f++){var p=h++%u.length;c[p]=c[p]||[],c[p].push(new r.Sector({shape:{cx:e.cx,cy:e.cy,r0:d,r:a[f],startAngle:0,endAngle:2*Math.PI},silent:!0})),d=a[f]}for(var f=0;f<c.length;f++)this.group.add(r.mergePath(c[f],{style:o.defaults({fill:u[f%u.length]},l.getAreaStyle()),silent:!0}))}})},function(t,e,i){function n(t){var e=t.coordinateSystem,i=t.axis,n={},o=i.position,r=i.orient,a=e.getRect(),s=[a.x,a.x+a.width,a.y,a.y+a.height],l={horizontal:{top:s[2],bottom:s[3]},vertical:{left:s[0],right:s[1]}};n.position=["vertical"===r?l.vertical[o]:s[0],"horizontal"===r?l.horizontal[o]:s[3]];var u={horizontal:0,vertical:1};n.rotation=Math.PI/2*u[r];var h={top:-1,bottom:1,right:1,left:-1};n.labelDirection=n.tickDirection=n.nameDirection=h[o],t.getModel("axisTick").get("inside")&&(n.tickDirection=-n.tickDirection),t.getModel("axisLabel").get("inside")&&(n.labelDirection=-n.labelDirection);var c=t.getModel("axisLabel").get("rotate");return n.labelRotation="top"===o?-c:c,n.labelInterval=i.getLabelInterval(),n.z2=1,n}var o=i(50),r=i(1),a=i(3),s=o.getInterval,l=o.ifIgnoreOnTick,u=["axisLine","axisLabel","axisTick","axisName"],h="splitLine",c=i(2).extendComponentView({type:"singleAxis",render:function(t,e){var i=this.group;i.removeAll();var a=n(t),s=new o(t,a);r.each(u,s.add,s),i.add(s.getGroup()),t.get(h+".show")&&this["_"+h](t,a.labelInterval)},_splitLine:function(t,e){var i=t.axis,n=t.getModel("splitLine"),o=n.getModel("lineStyle"),r=o.get("width"),u=o.get("color"),h=s(n,e);u=u instanceof Array?u:[u];for(var c=t.coordinateSystem.getRect(),d=i.isHorizontal(),f=[],p=0,g=i.getTicksCoords(),m=[],v=[],y=0;y<g.length;++y)if(!l(i,y,h)){var x=i.toGlobalCoord(g[y]);d?(m[0]=x,m[1]=c.y,v[0]=x,v[1]=c.y+c.height):(m[0]=c.x,m[1]=x,v[0]=c.x+c.width,v[1]=x);var _=p++%u.length;f[_]=f[_]||[],f[_].push(new a.Line(a.subPixelOptimizeLine({shape:{x1:m[0],y1:m[1],x2:v[0],y2:v[1]},style:{lineWidth:r},silent:!0})))}for(var y=0;y<f.length;++y)this.group.add(a.mergePath(f[y],{style:{stroke:u[y%u.length],lineDash:o.getLineDash(r),lineWidth:r},silent:!0}))}});t.exports=c},function(t,e,i){var n=i(2),o={type:"axisAreaSelect",event:"axisAreaSelected",update:"updateVisual"};n.registerAction(o,function(t,e){e.eachComponent({mainType:"parallelAxis",query:t},function(e){e.axis.model.setActiveIntervals(t.intervals)})}),n.registerAction("parallelAxisExpand",function(t,e){e.eachComponent({mainType:"parallel",query:t},function(e){e.setAxisExpand(t)})})},function(t,e,i){i(2).registerPreprocessor(i(328)),i(330),i(325),i(326),i(327),i(348)},function(t,e,i){var n=i(2),o=i(1),r=i(173),a=i(10),s=["#ddd"],l=n.extendComponentModel({type:"brush",dependencies:["geo","grid","xAxis","yAxis","parallel","series"],defaultOption:{toolbox:null,brushLink:null,seriesIndex:"all",geoIndex:null,xAxisIndex:null,yAxisIndex:null,brushType:"rect",brushMode:"single",transformable:!0,brushStyle:{borderWidth:1,color:"rgba(120,140,180,0.3)",borderColor:"rgba(120,140,180,0.8)",width:null},throttleType:"fixRate",throttleDelay:0,removeOnClick:!0},areas:[],brushType:null,brushOption:{},coordInfoList:[],optionUpdated:function(t,e){var i=this.option;!e&&r.replaceVisualOption(i,t,["inBrush","outOfBrush"]),i.inBrush=i.inBrush||{},i.outOfBrush=i.outOfBrush||{color:s}},setAreas:function(t){t&&(this.areas=o.map(t,function(t){return this._mergeBrushOption(t)},this))},setBrushOption:function(t){this.brushOption=this._mergeBrushOption(t),this.brushType=this.brushOption.brushType},_mergeBrushOption:function(t){var e=this.option;return o.merge({brushType:e.brushType,brushMode:e.brushMode,transformable:e.transformable,brushStyle:new a(e.brushStyle).getItemStyle(),removeOnClick:e.removeOnClick},t,!0)}});t.exports=l},function(t,e,i){function n(t,e,i,n){(!n||n.$from!==t.id)&&this._brushController.setPanels(s.makePanelOpts(t.coordInfoList)).enableBrush(t.brushOption).updateCovers(t.areas.slice())}var o=i(1),r=i(113),a=i(2),s=i(114);t.exports=a.extendComponentView({type:"brush",init:function(t,e){this.ecModel=t,this.api=e,this.model,(this._brushController=new r(e.getZr())).on("brush",o.bind(this._onBrush,this)).mount()},render:function(t){return this.model=t,n.apply(this,arguments)},updateView:n,updateLayout:n,updateVisual:n,dispose:function(){this._brushController.dispose()},_onBrush:function(t,e){var i=this.model.id;s.parseOutputRanges(t,this.model.coordInfoList,this.ecModel),(!e.isEnd||e.removeOnClick)&&this.api.dispatchAction({type:"brush",brushId:i,areas:o.clone(t),$from:i})}})},function(t,e,i){var n=i(2);n.registerAction({type:"brush",event:"brush",update:"updateView"},function(t,e){e.eachComponent({mainType:"brush",query:t},function(e){e.setAreas(t.areas)})}),n.registerAction({type:"brushSelect",event:"brushSelected",update:"none"},function(){})},function(t,e,i){function n(t){var e={};o.each(t,function(t){e[t]=1}),t.length=0,o.each(e,function(e,i){t.push(i)})}var o=i(1),r=["rect","polygon","keep","clear"];t.exports=function(t,e){var i=t&&t.brush;if(o.isArray(i)||(i=i?[i]:[]),i.length){var a=[];o.each(i,function(t){var e=t.hasOwnProperty("toolbox")?t.toolbox:[];e instanceof Array&&(a=a.concat(e))});var s=t&&t.toolbox;o.isArray(s)&&(s=s[0]),s||(s={feature:{}},t.toolbox=[s]);var l=s.feature||(s.feature={}),u=l.brush||(l.brush={}),h=u.type||(u.type=[]);h.push.apply(h,a),n(h),e&&!h.length&&h.push.apply(h,r)}}},function(t,e,i){function n(t){var e=["x","y"],i=["width","height"];return{point:function(e,i,n){var r=n.range,a=e[t];return o(a,r)},rect:function(n,r,a){var s=a.range;return o(n[e[t]],s)||o(n[e[t]]+n[i[t]],s)}}}function o(t,e){return e[0]<=t&&t<=e[1]}function r(t,e,i,n,o){for(var r=0,s=o[o.length-1];r<o.length;r++){var l=o[r];if(a(t,e,i,n,l[0],l[1],s[0],s[1]))return!0;s=l}}function a(t,e,i,n,o,r,a,u){var h=l(i-t,o-a,n-e,r-u);if(s(h))return!1;var c=l(o-t,o-a,r-e,r-u)/h;if(c<0||c>1)return!1;var d=l(i-t,o-t,n-e,r-e)/h;return!(d<0||d>1)}function s(t){return t<=1e-6&&t>=-1e-6}function l(t,e,i,n){return t*n-e*i}var u=i(242).contain,h=i(8),c={lineX:n(0),lineY:n(1),rect:{point:function(t,e,i){return i.boundingRect.contain(t[0],t[1])},rect:function(t,e,i){return i.boundingRect.intersect(t)}},polygon:{point:function(t,e,i){return i.boundingRect.contain(t[0],t[1])&&u(i.range,t[0],t[1])},rect:function(t,e,i){var n=i.range;if(n.length<=1)return!1;var o=t.x,a=t.y,s=t.width,l=t.height,c=n[0];return!!(u(n,o,a)||u(n,o+s,a)||u(n,o,a+l)||u(n,o+s,a+l)||h.create(t).contain(c[0],c[1])||r(o,a,o+s,a,n)||r(o,a,o,a+l,n)||r(o+s,a,o+s,a+l,n)||r(o,a+l,o+s,a+l,n))||void 0}}};t.exports=c},function(t,e,i){function n(t,e,i,n,r){if(r){var a=t.getZr();if(!a[x]){a[y]||(a[y]=o);var s=g.createOrUpdate(a,y,i,e);s(t,n)}}}function o(t,e){if(!t.isDisposed()){var i=t.getZr();i[x]=!0,t.dispatchAction({type:"brushSelect",batch:e}),i[x]=!1}}function r(t,e,i,n){for(var o=i.getItemLayout(n),r=0,a=e.length;r<a;r++){var s=e[r];if(t[s.brushType](o,s.selectors,s))return!0}}function a(t){var e=t.brushSelector;if(d.isString(e)){var i=[];return d.each(p,function(t,n){i[n]=t[e]}),i}if(d.isFunction(e)){var n={};return d.each(p,function(t,i){n[i]=e}),n}return e}function s(t,e){var i=t.option.seriesIndex;return null!=i&&"all"!==i&&(d.isArray(i)?d.indexOf(i,e)<0:e!==i)}function l(t){var e=t.selectors={};return d.each(p[t.brushType],function(i,n){e[n]=function(n){return i(n,e,t)}}),t}function u(t){return new f(t[0][0],t[1][0],t[0][1]-t[0][0],t[1][1]-t[1][0])}var h=i(2),c=i(173),d=i(1),f=i(8),p=i(329),g=i(83),m=i(114),v=["inBrush","outOfBrush"],y="__ecBrushSelect",x="__ecInBrushSelectEvent",_=h.PRIORITY.VISUAL.BRUSH;h.registerLayout(_,function(t,e,i){t.eachComponent({mainType:"brush"},function(e){i&&"takeGlobalCursor"===i.type&&e.setBrushOption("brush"===i.key?i.brushOption:{brushType:!1}),e.coordInfoList=m.makeCoordInfoList(e.option,t),m.parseInputRanges(e,t)})}),h.registerVisual(_,function(t,e,i){var o,u,h=[];t.eachComponent({mainType:"brush"},function(e,i){function n(t){return"all"===_||w[t]}function f(t){return!!t.length}function p(t,e){var i=t.coordinateSystem;T|=i.hasAxisbrushed(),n(e)&&i.eachActiveState(t.getData(),function(t,e){"active"===t&&(S[e]=1)})}function g(t,i,o){var l=a(t);if(l&&!s(e,i)&&(d.each(I,function(i){l[i.brushType]&&m.controlSeries(i,e,t)&&o.push(i),T|=f(o)}),n(i)&&f(o))){var u=t.getData();u.each(function(t){r(l,o,u,t)&&(S[t]=1)})}}var y={brushId:e.id,brushIndex:i,brushName:e.name,areas:d.clone(e.areas),selected:[]};h.push(y);var x=e.option,_=x.brushLink,w=[],S=[],M=[],T=0;i||(o=x.throttleType,u=x.throttleDelay);var I=d.map(e.areas,function(t){return l(d.defaults({boundingRect:b[t.brushType](t)},t))}),A=c.createVisualMappings(e.option,v,function(t){t.mappingMethod="fixed"});d.isArray(_)&&d.each(_,function(t){w[t]=1}),t.eachSeries(function(t,e){var i=M[e]=[];"parallel"===t.subType?p(t,e,i):g(t,e,i)}),t.eachSeries(function(t,e){var i={seriesId:t.id,seriesIndex:e,seriesName:t.name,dataIndex:[]};y.selected.push(i);var o=a(t),s=M[e],l=t.getData(),u=n(e)?function(t){return S[t]?(i.dataIndex.push(l.getRawIndex(t)),"inBrush"):"outOfBrush"}:function(t){return r(o,s,l,t)?(i.dataIndex.push(l.getRawIndex(t)),"inBrush"):"outOfBrush"};(n(e)?T:f(s))&&c.applyVisual(v,A,l,u)})}),n(e,o,u,h,i)});var b={lineX:d.noop,lineY:d.noop,rect:function(t){return u(t.range)},polygon:function(t){for(var e,i=t.range,n=0,o=i.length;n<o;n++){e=e||[[1/0,-(1/0)],[1/0,-(1/0)]];var r=i[n];r[0]<e[0][0]&&(e[0][0]=r[0]),r[0]>e[0][1]&&(e[0][1]=r[0]),r[1]<e[1][0]&&(e[1][0]=r[1]),r[1]>e[1][1]&&(e[1][1]=r[1])}return e&&u(e)}}},function(t,e,i){function n(t,e){e.update="updateView",o.registerAction(e,function(e,i){var n={};return i.eachComponent({mainType:"geo",query:e},function(i){i[t](e.name);var o=i.coordinateSystem;r.each(o.regions,function(t){n[t.name]=i.isSelected(t.name)||!1})}),{selected:n,name:e.name}})}i(357),i(172),i(332),i(221);var o=i(2),r=i(1);n("toggleSelected",{type:"geoToggleSelect",event:"geoselectchanged"}),n("select",{type:"geoSelect",event:"geoselected"}),n("unSelect",{type:"geoUnSelect",event:"geounselected"})},function(t,e,i){"use strict";var n=i(229);t.exports=i(2).extendComponentView({type:"geo",init:function(t,e){var i=new n(e,(!0));this._mapDraw=i,this.group.add(i.group)},render:function(t,e,i,n){if(!n||"geoToggleSelect"!==n.type||n.from!==this.uid){var o=this._mapDraw;t.get("show")?o.draw(t,e,i,this,n):this._mapDraw.group.removeAll(),this.group.silent=t.get("silent")}},dispose:function(){this._mapDraw&&this._mapDraw.remove()}})},function(t,e,i){i(240),i(323),i(320)},function(t,e,i){"use strict";i(216),i(318),i(337),i(2).extendComponentView({type:"polar"})},function(t,e,i){i(373),i(374),i(336)},function(t,e,i){var n=i(50),o=i(1),r=i(3),a=["axisLine","axisLabel","axisTick","axisName"];t.exports=i(2).extendComponentView({type:"radar",render:function(t,e,i){var n=this.group;n.removeAll(),this._buildAxes(t),this._buildSplitLineAndArea(t)},_buildAxes:function(t){var e=t.coordinateSystem,i=e.getIndicatorAxes(),r=o.map(i,function(t){var i=new n(t.model,{position:[e.cx,e.cy],rotation:t.angle,labelDirection:-1,tickDirection:-1,nameDirection:1});return i});o.each(r,function(t){o.each(a,t.add,t),this.group.add(t.getGroup())},this)},_buildSplitLineAndArea:function(t){function e(t,e,i){var n=i%e.length;return t[n]=t[n]||[],n}var i=t.coordinateSystem,n=t.get("splitNumber"),a=i.getIndicatorAxes();if(a.length){var s=t.get("shape"),l=t.getModel("splitLine"),u=t.getModel("splitArea"),h=l.getModel("lineStyle"),c=u.getModel("areaStyle"),d=l.get("show"),f=u.get("show"),p=h.get("color"),g=c.get("color");p=o.isArray(p)?p:[p],g=o.isArray(g)?g:[g];var m=[],v=[];if("circle"===s)for(var y=a[0].getTicksCoords(),x=i.cx,_=i.cy,b=0;b<y.length;b++){if(d){var w=e(m,p,b);m[w].push(new r.Circle({shape:{cx:x,cy:_,r:y[b]}}))}if(f&&b<y.length-1){var w=e(v,g,b);v[w].push(new r.Ring({shape:{cx:x,cy:_,r0:y[b],r:y[b+1]}}))}}else for(var S=o.map(a,function(t,e){var n=t.getTicksCoords();return o.map(n,function(t){return i.coordToPoint(t,e)})}),M=[],b=0;b<=n;b++){for(var T=[],I=0;I<a.length;I++)T.push(S[I][b]);if(T[0]&&T.push(T[0].slice()),d){var w=e(m,p,b);m[w].push(new r.Polyline({shape:{points:T}}))}if(f&&M){var w=e(v,g,b-1);v[w].push(new r.Polygon({shape:{points:T.concat(M)}}))}M=T.slice().reverse()}var A=h.getLineStyle(),L=c.getAreaStyle();o.each(v,function(t,e){this.group.add(r.mergePath(t,{style:o.defaults({stroke:"none",fill:g[e%g.length]},L),silent:!0}))},this),o.each(m,function(t,e){this.group.add(r.mergePath(t,{style:o.defaults({fill:"none",stroke:p[e%p.length]},A),silent:!0}))},this)}}})},function(t,e,i){i(216),i(321)},function(t,e,i){i(378),i(322),i(375);var n=i(2);n.extendComponentView({type:"single"})},function(t,e,i){var n=i(2);n.registerPreprocessor(i(345)),i(347),i(346),i(340),i(341)},function(t,e,i){var n=i(343),o=i(1),r=i(7),a=n.extend({type:"timeline.slider",defaultOption:{backgroundColor:"rgba(0,0,0,0)",borderColor:"#ccc",borderWidth:0,orient:"horizontal",inverse:!1,tooltip:{trigger:"item"},symbol:"emptyCircle",symbolSize:10,lineStyle:{show:!0,width:2,color:"#304654"},label:{position:"auto",normal:{show:!0,interval:"auto",rotate:0,textStyle:{color:"#304654"}},emphasis:{show:!0,textStyle:{color:"#c23531"}}},itemStyle:{normal:{color:"#304654",borderWidth:1},emphasis:{color:"#c23531"}},checkpointStyle:{symbol:"circle",symbolSize:13,color:"#c23531",borderWidth:5,borderColor:"rgba(194,53,49, 0.5)",animation:!0,animationDuration:300,animationEasing:"quinticInOut"},controlStyle:{show:!0,showPlayBtn:!0,showPrevBtn:!0,showNextBtn:!0,itemSize:22,itemGap:12,position:"left",playIcon:"path://M31.6,53C17.5,53,6,41.5,6,27.4S17.5,1.8,31.6,1.8C45.7,1.8,57.2,13.3,57.2,27.4S45.7,53,31.6,53z M31.6,3.3 C18.4,3.3,7.5,14.1,7.5,27.4c0,13.3,10.8,24.1,24.1,24.1C44.9,51.5,55.7,40.7,55.7,27.4C55.7,14.1,44.9,3.3,31.6,3.3z M24.9,21.3 c0-2.2,1.6-3.1,3.5-2l10.5,6.1c1.899,1.1,1.899,2.9,0,4l-10.5,6.1c-1.9,1.1-3.5,0.2-3.5-2V21.3z",stopIcon:"path://M30.9,53.2C16.8,53.2,5.3,41.7,5.3,27.6S16.8,2,30.9,2C45,2,56.4,13.5,56.4,27.6S45,53.2,30.9,53.2z M30.9,3.5C17.6,3.5,6.8,14.4,6.8,27.6c0,13.3,10.8,24.1,24.101,24.1C44.2,51.7,55,40.9,55,27.6C54.9,14.4,44.1,3.5,30.9,3.5z M36.9,35.8c0,0.601-0.4,1-0.9,1h-1.3c-0.5,0-0.9-0.399-0.9-1V19.5c0-0.6,0.4-1,0.9-1H36c0.5,0,0.9,0.4,0.9,1V35.8z M27.8,35.8 c0,0.601-0.4,1-0.9,1h-1.3c-0.5,0-0.9-0.399-0.9-1V19.5c0-0.6,0.4-1,0.9-1H27c0.5,0,0.9,0.4,0.9,1L27.8,35.8L27.8,35.8z",nextIcon:"path://M18.6,50.8l22.5-22.5c0.2-0.2,0.3-0.4,0.3-0.7c0-0.3-0.1-0.5-0.3-0.7L18.7,4.4c-0.1-0.1-0.2-0.3-0.2-0.5 c0-0.4,0.3-0.8,0.8-0.8c0.2,0,0.5,0.1,0.6,0.3l23.5,23.5l0,0c0.2,0.2,0.3,0.4,0.3,0.7c0,0.3-0.1,0.5-0.3,0.7l-0.1,0.1L19.7,52 c-0.1,0.1-0.3,0.2-0.5,0.2c-0.4,0-0.8-0.3-0.8-0.8C18.4,51.2,18.5,51,18.6,50.8z",prevIcon:"path://M43,52.8L20.4,30.3c-0.2-0.2-0.3-0.4-0.3-0.7c0-0.3,0.1-0.5,0.3-0.7L42.9,6.4c0.1-0.1,0.2-0.3,0.2-0.5 c0-0.4-0.3-0.8-0.8-0.8c-0.2,0-0.5,0.1-0.6,0.3L18.3,28.8l0,0c-0.2,0.2-0.3,0.4-0.3,0.7c0,0.3,0.1,0.5,0.3,0.7l0.1,0.1L41.9,54 c0.1,0.1,0.3,0.2,0.5,0.2c0.4,0,0.8-0.3,0.8-0.8C43.2,53.2,43.1,53,43,52.8z",normal:{color:"#304654",borderColor:"#304654",borderWidth:1},emphasis:{color:"#c23531",borderColor:"#c23531",borderWidth:2}},data:[]}});o.mixin(a,r.dataFormatMixin),t.exports=a},function(t,e,i){function n(t,e){return u.getLayoutRect(t.getBoxLayoutParams(),{width:e.getWidth(),height:e.getHeight()},t.get("padding"))}function o(t,e,i,n){var o=l.makePath(t.get(e).replace(/^path:\/\//,""),s.clone(n||{}),new p(i[0],i[1],i[2],i[3]),"center");return o}function r(t,e,i,n,o,r){var a=e.get("color");if(o)o.setColor(a),i.add(o),r&&r.onUpdate(o);else{var l=t.get("symbol");o=d.createSymbol(l,-1,-1,2,2,a),o.setStyle("strokeNoScale",!0),i.add(o),r&&r.onCreate(o)}var u=e.getItemStyle(["color","symbol","symbolSize"]);o.setStyle(u),n=s.merge({rectHover:!0,z2:100},n,!0);var h=t.get("symbolSize");h=h instanceof Array?h.slice():[+h,+h],h[0]/=2,h[1]/=2,n.scale=h;var c=t.get("symbolOffset");if(c){var f=n.position=n.position||[0,0];f[0]+=m.parsePercent(c[0],h[0]),f[1]+=m.parsePercent(c[1],h[1])}var p=t.get("symbolRotate");return n.rotation=(p||0)*Math.PI/180||0,o.attr(n),o.updateTransform(),o}function a(t,e,i,n,o){if(!t.dragging){var r=n.getModel("checkpointStyle"),a=i.dataToCoord(n.getData().get(["value"],e));o||!r.get("animation",!0)?t.attr({position:[a,0]}):(t.stopAnimation(!0),t.animateTo({position:[a,0]},r.get("animationDuration",!0),r.get("animationEasing",!0)))}}var s=i(1),l=i(3),u=i(13),h=i(344),c=i(342),d=i(26),f=i(22),p=i(8),g=i(19),m=i(4),v=i(9),y=v.encodeHTML,x=s.bind,_=s.each,b=Math.PI;t.exports=h.extend({type:"timeline.slider",init:function(t,e){this.api=e,this._axis,this._viewRect,this._timer,this._currentPointer,this._mainGroup,this._labelGroup},render:function(t,e,i,n){if(this.model=t,this.api=i,this.ecModel=e,this.group.removeAll(),t.get("show",!0)){var o=this._layout(t,i),r=this._createGroup("mainGroup"),a=this._createGroup("labelGroup"),s=this._axis=this._createAxis(o,t);t.formatTooltip=function(t){return y(s.scale.getLabel(t))},_(["AxisLine","AxisTick","Control","CurrentPointer"],function(e){this["_render"+e](o,r,s,t)},this),this._renderAxisLabel(o,a,s,t),this._position(o,t)}this._doPlayStop()},remove:function(){this._clearTimer(),this.group.removeAll()},dispose:function(){this._clearTimer()},_layout:function(t,e){var i=t.get("label.normal.position"),o=t.get("orient"),r=n(t,e);null==i||"auto"===i?i="horizontal"===o?r.y+r.height/2<e.getHeight()/2?"-":"+":r.x+r.width/2<e.getWidth()/2?"+":"-":isNaN(i)&&(i={horizontal:{top:"-",bottom:"+"},vertical:{left:"-",right:"+"}}[o][i]);var a={horizontal:"center",vertical:i>=0||"+"===i?"left":"right"},s={horizontal:i>=0||"+"===i?"top":"bottom",vertical:"middle"},l={horizontal:0,vertical:b/2},u="vertical"===o?r.height:r.width,h=t.getModel("controlStyle"),c=h.get("show"),d=c?h.get("itemSize"):0,f=c?h.get("itemGap"):0,p=d+f,g=t.get("label.normal.rotate")||0;g=g*b/180;var m,v,y,x,_=h.get("position",!0),c=h.get("show",!0),w=c&&h.get("showPlayBtn",!0),S=c&&h.get("showPrevBtn",!0),M=c&&h.get("showNextBtn",!0),T=0,I=u;return"left"===_||"bottom"===_?(w&&(m=[0,0],T+=p),S&&(v=[T,0],T+=p),M&&(y=[I-d,0],I-=p)):(w&&(m=[I-d,0],I-=p),S&&(v=[0,0],T+=p),M&&(y=[I-d,0],I-=p)),x=[T,I],t.get("inverse")&&x.reverse(),{viewRect:r,mainLength:u,orient:o,rotation:l[o],labelRotation:g,labelPosOpt:i,labelAlign:a[o],labelBaseline:s[o],playPosition:m,prevBtnPosition:v,nextBtnPosition:y,axisExtent:x,controlSize:d,controlGap:f}},_position:function(t,e){function i(t){var e=t.position;t.origin=[c[0][0]-e[0],c[1][0]-e[1]]}function n(t){return[[t.x,t.x+t.width],[t.y,t.y+t.height]]}function o(t,e,i,n,o){t[n]+=i[n][o]-e[n][o]}var r=this._mainGroup,a=this._labelGroup,s=t.viewRect;if("vertical"===t.orient){var l=g.create(),u=s.x,h=s.y+s.height;g.translate(l,l,[-u,-h]),g.rotate(l,l,-b/2),g.translate(l,l,[u,h]),s=s.clone(),s.applyTransform(l)}var c=n(s),d=n(r.getBoundingRect()),f=n(a.getBoundingRect()),p=r.position,m=a.position;m[0]=p[0]=c[0][0];var v=t.labelPosOpt;if(isNaN(v)){var y="+"===v?0:1;o(p,d,c,1,y),o(m,f,c,1,1-y)}else{var y=v>=0?0:1;o(p,d,c,1,y),m[1]=p[1]+v}r.attr("position",p),a.attr("position",m),r.rotation=a.rotation=t.rotation,i(r),i(a)},_createAxis:function(t,e){var i=e.getData(),n=e.get("axisType"),o=f.createScaleByModel(e,n),r=i.getDataExtent("value");o.setExtent(r[0],r[1]),this._customizeScale(o,i),o.niceTicks();var a=new c("value",o,t.axisExtent,n);return a.model=e,a},_customizeScale:function(t,e){t.getTicks=function(){return e.mapArray(["value"],function(t){return t})},t.getTicksLabels=function(){return s.map(this.getTicks(),t.getLabel,t)}},_createGroup:function(t){var e=this["_"+t]=new l.Group;return this.group.add(e),e},_renderAxisLine:function(t,e,i,n){var o=i.getExtent();n.get("lineStyle.show")&&e.add(new l.Line({shape:{x1:o[0],y1:0,x2:o[1],y2:0},style:s.extend({lineCap:"round"},n.getModel("lineStyle").getLineStyle()),silent:!0,z2:1}))},_renderAxisTick:function(t,e,i,n){var o=n.getData(),a=i.scale.getTicks();_(a,function(t,a){var s=i.dataToCoord(t),u=o.getItemModel(a),h=u.getModel("itemStyle.normal"),c=u.getModel("itemStyle.emphasis"),d={position:[s,0],onclick:x(this._changeTimeline,this,a)},f=r(u,h,e,d);l.setHoverStyle(f,c.getItemStyle()),u.get("tooltip")?(f.dataIndex=a,f.dataModel=n):f.dataIndex=f.dataModel=null},this)},_renderAxisLabel:function(t,e,i,n){var o=n.getModel("label.normal");if(o.get("show")){var r=n.getData(),a=i.scale.getTicks(),s=f.getFormattedLabels(i,o.get("formatter")),u=i.getLabelInterval();_(a,function(n,o){if(!i.isLabelIgnored(o,u)){var a=r.getItemModel(o),h=a.getModel("label.normal.textStyle"),c=a.getModel("label.emphasis.textStyle"),d=i.dataToCoord(n),f=new l.Text({style:{text:s[o],textAlign:t.labelAlign,textVerticalAlign:t.labelBaseline,textFont:h.getFont(),fill:h.getTextColor()},position:[d,0],rotation:t.labelRotation-t.rotation,onclick:x(this._changeTimeline,this,o),silent:!1});e.add(f),l.setHoverStyle(f,c.getItemStyle())}},this)}},_renderControl:function(t,e,i,n){function r(t,i,r,d){if(t){var f={position:t,origin:[a/2,0],rotation:d?-s:0,rectHover:!0,style:u,onclick:r},p=o(n,i,c,f);e.add(p),l.setHoverStyle(p,h)}}var a=t.controlSize,s=t.rotation,u=n.getModel("controlStyle.normal").getItemStyle(),h=n.getModel("controlStyle.emphasis").getItemStyle(),c=[0,-a/2,a,a],d=n.getPlayState(),f=n.get("inverse",!0);r(t.nextBtnPosition,"controlStyle.nextIcon",x(this._changeTimeline,this,f?"-":"+")),r(t.prevBtnPosition,"controlStyle.prevIcon",x(this._changeTimeline,this,f?"+":"-")),r(t.playPosition,"controlStyle."+(d?"stopIcon":"playIcon"),x(this._handlePlayClick,this,!d),!0)},_renderCurrentPointer:function(t,e,i,n){var o=n.getData(),s=n.getCurrentIndex(),l=o.getItemModel(s).getModel("checkpointStyle"),u=this,h={onCreate:function(t){t.draggable=!0,t.drift=x(u._handlePointerDrag,u),t.ondragend=x(u._handlePointerDragend,u),a(t,s,i,n,!0)},onUpdate:function(t){a(t,s,i,n)}};this._currentPointer=r(l,l,this._mainGroup,{},this._currentPointer,h)},_handlePlayClick:function(t){this._clearTimer(),this.api.dispatchAction({type:"timelinePlayChange",playState:t,from:this.uid})},_handlePointerDrag:function(t,e,i){this._clearTimer(),this._pointerChangeTimeline([i.offsetX,i.offsetY])},_handlePointerDragend:function(t){this._pointerChangeTimeline([t.offsetX,t.offsetY],!0)},_pointerChangeTimeline:function(t,e){var i=this._toAxisCoord(t)[0],n=this._axis,o=m.asc(n.getExtent().slice());i>o[1]&&(i=o[1]),i<o[0]&&(i=o[0]),this._currentPointer.position[0]=i,this._currentPointer.dirty();var r=this._findNearestTick(i),a=this.model;(e||r!==a.getCurrentIndex()&&a.get("realtime"))&&this._changeTimeline(r)},_doPlayStop:function(){function t(){var t=this.model;this._changeTimeline(t.getCurrentIndex()+(t.get("rewind",!0)?-1:1))}this._clearTimer(),this.model.getPlayState()&&(this._timer=setTimeout(x(t,this),this.model.get("playInterval")))},_toAxisCoord:function(t){var e=this._mainGroup.getLocalTransform();return l.applyTransform(t,e,!0)},_findNearestTick:function(t){var e,i=this.model.getData(),n=1/0,o=this._axis;return i.each(["value"],function(i,r){var a=o.dataToCoord(i),s=Math.abs(a-t);s<n&&(n=s,e=r)}),e},_clearTimer:function(){this._timer&&(clearTimeout(this._timer),this._timer=null)},_changeTimeline:function(t){var e=this.model.getCurrentIndex();"+"===t?t=e+1:"-"===t&&(t=e-1),this.api.dispatchAction({type:"timelineChange",currentIndex:t,from:this.uid})}})},function(t,e,i){var n=i(1),o=i(42),r=i(22),a=function(t,e,i,n){o.call(this,t,e,i),this.type=n||"value",this._autoLabelInterval,this.model=null};a.prototype={constructor:a,getLabelInterval:function(){var t=this.model,e=t.getModel("label.normal"),i=e.get("interval");if(null!=i&&"auto"!=i)return i;var i=this._autoLabelInterval;return i||(i=this._autoLabelInterval=r.getAxisLabelInterval(n.map(this.scale.getTicks(),this.dataToCoord,this),r.getFormattedLabels(this,e.get("formatter")),e.getModel("textStyle").getFont(),"horizontal"===t.get("orient"))),i},isLabelIgnored:function(t){if("category"===this.type){var e=this.getLabelInterval();return"function"==typeof e&&!e(t,this.scale.getLabel(t))||t%(e+1)}}},n.inherits(a,o),t.exports=a},function(t,e,i){var n=i(12),o=i(14),r=i(1),a=i(7),s=n.extend({type:"timeline",layoutMode:"box",defaultOption:{zlevel:0,z:4,show:!0,axisType:"time",realtime:!0,left:"20%",top:null,right:"20%",bottom:0,width:null,height:40,padding:5,controlPosition:"left",autoPlay:!1,rewind:!1,loop:!0,playInterval:2e3,currentIndex:0,itemStyle:{normal:{},emphasis:{}},label:{normal:{textStyle:{color:"#000"}},emphasis:{}},data:[]},init:function(t,e,i){this._data,this._names,this.mergeDefaultAndTheme(t,i),this._initData()},mergeOption:function(t){s.superApply(this,"mergeOption",arguments),this._initData()},setCurrentIndex:function(t){null==t&&(t=this.option.currentIndex);var e=this._data.count();this.option.loop?t=(t%e+e)%e:(t>=e&&(t=e-1),t<0&&(t=0)),this.option.currentIndex=t},getCurrentIndex:function(){return this.option.currentIndex},isIndexMax:function(){return this.getCurrentIndex()>=this._data.count()-1},setPlayState:function(t){this.option.autoPlay=!!t},getPlayState:function(){return!!this.option.autoPlay},_initData:function(){var t=this.option,e=t.data||[],i=t.axisType,n=this._names=[];if("category"===i){var s=[];r.each(e,function(t,e){var i,o=a.getDataItemValue(t);r.isObject(t)?(i=r.clone(t),i.value=e):i=e,s.push(i),r.isString(o)||null!=o&&!isNaN(o)||(o=""),n.push(o+"")}),e=s}var l={category:"ordinal",time:"time"}[i]||"number",u=this._data=new o([{name:"value",type:l}],this);u.initData(e,n)},getData:function(){return this._data},getCategories:function(){if("category"===this.get("axisType"))return this._names.slice()}});t.exports=s},function(t,e,i){var n=i(57);t.exports=n.extend({type:"timeline"})},function(t,e,i){function n(t){var e=t.type,i={number:"value",time:"time"};if(i[e]&&(t.axisType=i[e],delete t.type),o(t),r(t,"controlPosition")){var n=t.controlStyle||(t.controlStyle={});r(n,"position")||(n.position=t.controlPosition),"none"!==n.position||r(n,"show")||(n.show=!1,delete n.position),delete t.controlPosition}a.each(t.data||[],function(t){a.isObject(t)&&!a.isArray(t)&&(!r(t,"value")&&r(t,"name")&&(t.value=t.name),o(t))})}function o(t){var e=t.itemStyle||(t.itemStyle={}),i=e.emphasis||(e.emphasis={}),n=t.label||t.label||{},o=n.normal||(n.normal={}),s={
+normal:1,emphasis:1};a.each(n,function(t,e){s[e]||r(o,e)||(o[e]=t)}),i.label&&!r(n,"emphasis")&&(n.emphasis=i.label,delete i.label)}function r(t,e){return t.hasOwnProperty(e)}var a=i(1);t.exports=function(t){var e=t&&t.timeline;a.isArray(e)||(e=e?[e]:[]),a.each(e,function(t){t&&n(t)})}},function(t,e,i){var n=i(2),o=i(1);n.registerAction({type:"timelineChange",event:"timelineChanged",update:"prepareAndUpdate"},function(t,e){var i=e.getComponent("timeline");return i&&null!=t.currentIndex&&(i.setCurrentIndex(t.currentIndex),!i.get("loop",!0)&&i.isIndexMax()&&i.setPlayState(!1)),e.resetOption("timeline"),o.defaults({currentIndex:i.option.currentIndex},t)}),n.registerAction({type:"timelinePlayChange",event:"timelinePlayChanged",update:"update"},function(t,e){var i=e.getComponent("timeline");i&&null!=t.playState&&i.setPlayState(t.playState)})},function(t,e,i){i(12).registerSubTypeDefaulter("timeline",function(){return"slider"})},function(t,e,i){"use strict";function n(t,e,i){this.model=t,this.ecModel=e,this.api=i,this._brushType,this._brushMode}var o=i(25),r=i(1);n.defaultOption={show:!0,type:["rect","polygon","lineX","lineY","keep","clear"],icon:{rect:"M7.3,34.7 M0.4,10V-0.2h9.8 M89.6,10V-0.2h-9.8 M0.4,60v10.2h9.8 M89.6,60v10.2h-9.8 M12.3,22.4V10.5h13.1 M33.6,10.5h7.8 M49.1,10.5h7.8 M77.5,22.4V10.5h-13 M12.3,31.1v8.2 M77.7,31.1v8.2 M12.3,47.6v11.9h13.1 M33.6,59.5h7.6 M49.1,59.5 h7.7 M77.5,47.6v11.9h-13",polygon:"M55.2,34.9c1.7,0,3.1,1.4,3.1,3.1s-1.4,3.1-3.1,3.1 s-3.1-1.4-3.1-3.1S53.5,34.9,55.2,34.9z M50.4,51c1.7,0,3.1,1.4,3.1,3.1c0,1.7-1.4,3.1-3.1,3.1c-1.7,0-3.1-1.4-3.1-3.1 C47.3,52.4,48.7,51,50.4,51z M55.6,37.1l1.5-7.8 M60.1,13.5l1.6-8.7l-7.8,4 M59,19l-1,5.3 M24,16.1l6.4,4.9l6.4-3.3 M48.5,11.6 l-5.9,3.1 M19.1,12.8L9.7,5.1l1.1,7.7 M13.4,29.8l1,7.3l6.6,1.6 M11.6,18.4l1,6.1 M32.8,41.9 M26.6,40.4 M27.3,40.2l6.1,1.6 M49.9,52.1l-5.6-7.6l-4.9-1.2",lineX:"M15.2,30 M19.7,15.6V1.9H29 M34.8,1.9H40.4 M55.3,15.6V1.9H45.9 M19.7,44.4V58.1H29 M34.8,58.1H40.4 M55.3,44.4 V58.1H45.9 M12.5,20.3l-9.4,9.6l9.6,9.8 M3.1,29.9h16.5 M62.5,20.3l9.4,9.6L62.3,39.7 M71.9,29.9H55.4",lineY:"M38.8,7.7 M52.7,12h13.2v9 M65.9,26.6V32 M52.7,46.3h13.2v-9 M24.9,12H11.8v9 M11.8,26.6V32 M24.9,46.3H11.8v-9 M48.2,5.1l-9.3-9l-9.4,9.2 M38.9-3.9V12 M48.2,53.3l-9.3,9l-9.4-9.2 M38.9,62.3V46.4",keep:"M4,10.5V1h10.3 M20.7,1h6.1 M33,1h6.1 M55.4,10.5V1H45.2 M4,17.3v6.6 M55.6,17.3v6.6 M4,30.5V40h10.3 M20.7,40 h6.1 M33,40h6.1 M55.4,30.5V40H45.2 M21,18.9h62.9v48.6H21V18.9z",clear:"M22,14.7l30.9,31 M52.9,14.7L22,45.7 M4.7,16.8V4.2h13.1 M26,4.2h7.8 M41.6,4.2h7.8 M70.3,16.8V4.2H57.2 M4.7,25.9v8.6 M70.3,25.9v8.6 M4.7,43.2v12.6h13.1 M26,55.8h7.8 M41.6,55.8h7.8 M70.3,43.2v12.6H57.2"},title:{rect:"矩形选择",polygon:"圈选",lineX:"横向选择",lineY:"纵向选择",keep:"保持选择",clear:"清除选择"}};var a=n.prototype;a.render=a.updateView=a.updateLayout=function(t,e,i){var n,o,a;e.eachComponent({mainType:"brush"},function(t){n=t.brushType,o=t.brushOption.brushMode||"single",a|=t.areas.length}),this._brushType=n,this._brushMode=o,r.each(t.get("type",!0),function(e){t.setIconStatus(e,("keep"===e?"multiple"===o:"clear"===e?a:e===n)?"emphasis":"normal")})},a.getIcons=function(){var t=this.model,e=t.get("icon",!0),i={};return r.each(t.get("type",!0),function(t){e[t]&&(i[t]=e[t])}),i},a.onclick=function(t,e,i){var e=this.api,n=this._brushType,o=this._brushMode;"clear"===i?e.dispatchAction({type:"brush",areas:[]}):e.dispatchAction({type:"takeGlobalCursor",key:"brush",brushOption:{brushType:"keep"===i?n:n!==i&&i,brushMode:"keep"===i?"multiple"===o?"single":"multiple":o}})},o.register("brush",n),t.exports=n},function(t,e,i){i(354),i(355)},function(t,e,i){function n(t,e,i){var n=t.targetVisuals[e].color;if(!n)return i.slice();var o=n.option.visual.length;if(o<=1||i[0]===i[1])return i.slice();for(var r=(i[1]-i[0])/(o-1),a=i[0],s=[],l=0;l<o&&a<i[1];l++)s.push(a),a+=r;return s.push(i[1]),s}function o(t,e,i,o){var r=n(t,e,i);a.each(r,function(t){for(var i={value:t,valueState:e},n=0,r=0;r<o.length;r++){if(n|="inRange"===o[r].valueState,t<o[r].value)return void o.splice(r,0,i);n&&(o[r].valueState="inRange")}o.push(i)})}var r=i(231),a=i(1),s=i(4),l=[20,140],u=r.extend({type:"visualMap.continuous",defaultOption:{align:"auto",calculable:!1,range:null,realtime:!0,itemHeight:null,itemWidth:null,hoverLink:!0,hoverLinkDataSize:null,hoverLinkOnHandle:!0},optionUpdated:function(t,e){u.superApply(this,"optionUpdated",arguments),this.resetTargetSeries(),this.resetExtent(),this.resetVisual(function(t){t.mappingMethod="linear",t.dataExtent=this.getExtent()}),this._resetRange()},resetItemSize:function(){u.superApply(this,"resetItemSize",arguments);var t=this.itemSize;"horizontal"===this._orient&&t.reverse(),(null==t[0]||isNaN(t[0]))&&(t[0]=l[0]),(null==t[1]||isNaN(t[1]))&&(t[1]=l[1])},_resetRange:function(){var t=this.getExtent(),e=this.option.range;!e||e.auto?(t.auto=1,this.option.range=t):a.isArray(e)&&(e[0]>e[1]&&e.reverse(),e[0]=Math.max(e[0],t[0]),e[1]=Math.min(e[1],t[1]))},completeVisualOption:function(){r.prototype.completeVisualOption.apply(this,arguments),a.each(this.stateList,function(t){var e=this.option.controller[t].symbolSize;e&&e[0]!==e[1]&&(e[0]=0)},this)},setSelected:function(t){this.option.range=t.slice(),this._resetRange()},getSelected:function(){var t=this.getExtent(),e=s.asc((this.get("range")||[]).slice());return e[0]>t[1]&&(e[0]=t[1]),e[1]>t[1]&&(e[1]=t[1]),e[0]<t[0]&&(e[0]=t[0]),e[1]<t[0]&&(e[1]=t[0]),e},getValueState:function(t){var e=this.option.range,i=this.getExtent();return(e[0]<=i[0]||e[0]<=t)&&(e[1]>=i[1]||t<=e[1])?"inRange":"outOfRange"},findTargetDataIndices:function(t){var e=[];return this.eachTargetSeries(function(i){var n=[],o=i.getData();o.each(this.getDataDimension(o),function(e,i){t[0]<=e&&e<=t[1]&&n.push(i)},!0,this),e.push({seriesId:i.id,dataIndex:n})},this),e},getStops:function(t,e){var i=[];return o(this,"outOfRange",this.getExtent(),i),o(this,"inRange",this.option.range.slice(),i),a.each(i,function(t){t.color=e(this,t.value,t.valueState)},this),i}});t.exports=u},function(t,e,i){function n(t,e,i,n){return new u.Polygon({shape:{points:t},draggable:!!i,cursor:e,drift:i,ondragend:n})}function o(t,e){return 0===t?[[0,0],[e,0],[e,-e]]:[[0,0],[e,0],[e,e]]}function r(t,e,i,n){return t?[[0,-y(e,x(i,0))],[b,0],[0,y(e,x(n-i,0))]]:[[0,0],[5,-5],[5,5]]}function a(t,e,i){var n=_/2,o=t.get("hoverLinkDataSize");return o&&(n=m(o,e,i,!0)/2),n}function s(t){return!t.get("realtime")&&t.get("hoverLinkOnHandle")}var l=i(232),u=i(3),h=i(1),c=i(4),d=i(80),f=i(87),p=i(233),g=i(7),m=c.linearMap,v=h.each,y=Math.min,x=Math.max,_=12,b=6,w=l.extend({type:"visualMap.continuous",init:function(){w.superApply(this,"init",arguments),this._shapes={},this._dataInterval=[],this._handleEnds=[],this._orient,this._useHandle,this._hoverLinkDataIndices=[],this._dragging,this._hovering},doRender:function(t,e,i,n){n&&"selectDataRange"===n.type&&n.from===this.uid||this._buildView()},_buildView:function(){this.group.removeAll();var t=this.visualMapModel,e=this.group;this._orient=t.get("orient"),this._useHandle=t.get("calculable"),this._resetInterval(),this._renderBar(e);var i=t.get("text");this._renderEndsText(e,i,0),this._renderEndsText(e,i,1),this._updateView(!0),this.renderBackground(e),this._updateView(),this._enableHoverLinkToSeries(),this._enableHoverLinkFromSeries(),this.positionGroup(e)},_renderEndsText:function(t,e,i){if(e){var n=e[1-i];n=null!=n?n+"":"";var o=this.visualMapModel,r=o.get("textGap"),a=o.itemSize,s=this._shapes.barGroup,l=this._applyTransform([a[0]/2,0===i?-r:a[1]+r],s),h=this._applyTransform(0===i?"bottom":"top",s),c=this._orient,d=this.visualMapModel.textStyleModel;this.group.add(new u.Text({style:{x:l[0],y:l[1],textVerticalAlign:"horizontal"===c?"middle":h,textAlign:"horizontal"===c?h:"center",text:n,textFont:d.getFont(),fill:d.getTextColor()}}))}},_renderBar:function(t){var e=this.visualMapModel,i=this._shapes,o=e.itemSize,r=this._orient,a=this._useHandle,s=p.getItemAlign(e,this.api,o),l=i.barGroup=this._createBarGroup(s);l.add(i.outOfRange=n()),l.add(i.inRange=n(null,a?"move":null,h.bind(this._dragHandle,this,"all",!1),h.bind(this._dragHandle,this,"all",!0)));var u=e.textStyleModel.getTextRect("国"),c=x(u.width,u.height);a&&(i.handleThumbs=[],i.handleLabels=[],i.handleLabelPoints=[],this._createHandle(l,0,o,c,r,s),this._createHandle(l,1,o,c,r,s)),this._createIndicator(l,o,c,r),t.add(l)},_createHandle:function(t,e,i,r,a){var s=h.bind(this._dragHandle,this,e,!1),l=h.bind(this._dragHandle,this,e,!0),c=n(o(e,r),"move",s,l);c.position[0]=i[0],t.add(c);var d=this.visualMapModel.textStyleModel,f=new u.Text({draggable:!0,drift:s,ondragend:l,style:{x:0,y:0,text:"",textFont:d.getFont(),fill:d.getTextColor()}});this.group.add(f);var p=["horizontal"===a?r/2:1.5*r,"horizontal"===a?0===e?-(1.5*r):1.5*r:0===e?-r/2:r/2],g=this._shapes;g.handleThumbs[e]=c,g.handleLabelPoints[e]=p,g.handleLabels[e]=f},_createIndicator:function(t,e,i,o){var r=n([[0,0]],"move");r.position[0]=e[0],r.attr({invisible:!0,silent:!0}),t.add(r);var a=this.visualMapModel.textStyleModel,s=new u.Text({silent:!0,invisible:!0,style:{x:0,y:0,text:"",textFont:a.getFont(),fill:a.getTextColor()}});this.group.add(s);var l=["horizontal"===o?i/2:b+3,0],h=this._shapes;h.indicator=r,h.indicatorLabel=s,h.indicatorLabelPoint=l},_dragHandle:function(t,e,i,n){if(this._useHandle){if(this._dragging=!e,!e){var o=this._applyTransform([i,n],this._shapes.barGroup,!0);this._updateInterval(t,o[1]),this._updateView()}e===!this.visualMapModel.get("realtime")&&this.api.dispatchAction({type:"selectDataRange",from:this.uid,visualMapId:this.visualMapModel.id,selected:this._dataInterval.slice()}),e?!this._hovering&&this._clearHoverLinkToSeries():s(this.visualMapModel)&&this._doHoverLinkToSeries(this._handleEnds[t],!1)}},_resetInterval:function(){var t=this.visualMapModel,e=this._dataInterval=t.getSelected(),i=t.getExtent(),n=[0,t.itemSize[1]];this._handleEnds=[m(e[0],i,n,!0),m(e[1],i,n,!0)]},_updateInterval:function(t,e){e=e||0;var i=this.visualMapModel,n=this._handleEnds;d(e,n,[0,i.itemSize[1]],"all"===t?"rigid":"push",t);var o=i.getExtent(),r=[0,i.itemSize[1]];this._dataInterval=[m(n[0],r,o,!0),m(n[1],r,o,!0)]},_updateView:function(t){var e=this.visualMapModel,i=e.getExtent(),n=this._shapes,o=[0,e.itemSize[1]],r=t?o:this._handleEnds,a=this._createBarVisual(this._dataInterval,i,r,"inRange"),s=this._createBarVisual(i,i,o,"outOfRange");n.inRange.setStyle({fill:a.barColor,opacity:a.opacity}).setShape("points",a.barPoints),n.outOfRange.setStyle({fill:s.barColor,opacity:s.opacity}).setShape("points",s.barPoints),this._updateHandle(r,a)},_createBarVisual:function(t,e,i,n){var o={forceState:n,convertOpacityToAlpha:!0},r=this._makeColorGradient(t,o),a=[this.getControllerVisual(t[0],"symbolSize",o),this.getControllerVisual(t[1],"symbolSize",o)],s=this._createBarPoints(i,a);return{barColor:new f(0,0,0,1,r),barPoints:s,handlesColor:[r[0].color,r[r.length-1].color]}},_makeColorGradient:function(t,e){var i=100,n=[],o=(t[1]-t[0])/i;n.push({color:this.getControllerVisual(t[0],"color",e),offset:0});for(var r=1;r<i;r++){var a=t[0]+o*r;if(a>t[1])break;n.push({color:this.getControllerVisual(a,"color",e),offset:r/i})}return n.push({color:this.getControllerVisual(t[1],"color",e),offset:1}),n},_createBarPoints:function(t,e){var i=this.visualMapModel.itemSize;return[[i[0]-e[0],t[0]],[i[0],t[0]],[i[0],t[1]],[i[0]-e[1],t[1]]]},_createBarGroup:function(t){var e=this._orient,i=this.visualMapModel.get("inverse");return new u.Group("horizontal"!==e||i?"horizontal"===e&&i?{scale:"bottom"===t?[-1,1]:[1,1],rotation:-Math.PI/2}:"vertical"!==e||i?{scale:"left"===t?[1,1]:[-1,1]}:{scale:"left"===t?[1,-1]:[-1,-1]}:{scale:"bottom"===t?[1,1]:[-1,1],rotation:Math.PI/2})},_updateHandle:function(t,e){if(this._useHandle){var i=this._shapes,n=this.visualMapModel,o=i.handleThumbs,r=i.handleLabels;v([0,1],function(a){var s=o[a];s.setStyle("fill",e.handlesColor[a]),s.position[1]=t[a];var l=u.applyTransform(i.handleLabelPoints[a],u.getTransform(s,this.group));r[a].setStyle({x:l[0],y:l[1],text:n.formatValueText(this._dataInterval[a]),textVerticalAlign:"middle",textAlign:this._applyTransform("horizontal"===this._orient?0===a?"bottom":"top":"left",i.barGroup)})},this)}},_showIndicator:function(t,e,i,n){var o=this.visualMapModel,a=o.getExtent(),s=o.itemSize,l=[0,s[1]],h=m(t,a,l,!0),c=this._shapes,d=c.indicator;if(d){d.position[1]=h,d.attr("invisible",!1),d.setShape("points",r(!!i,n,h,s[1]));var f={convertOpacityToAlpha:!0},p=this.getControllerVisual(t,"color",f);d.setStyle("fill",p);var g=u.applyTransform(c.indicatorLabelPoint,u.getTransform(d,this.group)),v=c.indicatorLabel;v.attr("invisible",!1);var y=this._applyTransform("left",c.barGroup),x=this._orient;v.setStyle({text:(i?i:"")+o.formatValueText(e),textVerticalAlign:"horizontal"===x?y:"middle",textAlign:"horizontal"===x?"center":y,x:g[0],y:g[1]})}},_enableHoverLinkToSeries:function(){var t=this;this._shapes.barGroup.on("mousemove",function(e){if(t._hovering=!0,!t._dragging){var i=t.visualMapModel.itemSize,n=t._applyTransform([e.offsetX,e.offsetY],t._shapes.barGroup,!0,!0);n[1]=y(x(0,n[1]),i[1]),t._doHoverLinkToSeries(n[1],0<=n[0]&&n[0]<=i[0])}}).on("mouseout",function(){t._hovering=!1,!t._dragging&&t._clearHoverLinkToSeries()})},_enableHoverLinkFromSeries:function(){var t=this.api.getZr();this.visualMapModel.option.hoverLink?(t.on("mouseover",this._hoverLinkFromSeriesMouseOver,this),t.on("mouseout",this._hideIndicator,this)):this._clearHoverLinkFromSeries()},_doHoverLinkToSeries:function(t,e){var i=this.visualMapModel,n=i.itemSize;if(i.option.hoverLink){var o=[0,n[1]],r=i.getExtent();t=y(x(o[0],t),o[1]);var l=a(i,r,o),u=[t-l,t+l],h=m(t,o,r,!0),c=[m(u[0],o,r,!0),m(u[1],o,r,!0)];u[0]<o[0]&&(c[0]=-(1/0)),u[1]>o[1]&&(c[1]=1/0),e&&(c[0]===-(1/0)?this._showIndicator(h,c[1],"< ",l):c[1]===1/0?this._showIndicator(h,c[0],"> ",l):this._showIndicator(h,h,"≈ ",l));var d=this._hoverLinkDataIndices,f=[];(e||s(i))&&(f=this._hoverLinkDataIndices=i.findTargetDataIndices(c));var v=g.compressBatches(d,f);this._dispatchHighDown("downplay",p.convertDataIndex(v[0])),this._dispatchHighDown("highlight",p.convertDataIndex(v[1]))}},_hoverLinkFromSeriesMouseOver:function(t){var e=t.target;if(e&&null!=e.dataIndex){var i=e.dataModel||this.ecModel.getSeriesByIndex(e.seriesIndex),n=i.getData(e.dataType),o=n.getDimension(this.visualMapModel.getDataDimension(n)),r=n.get(o,e.dataIndex,!0);isNaN(r)||this._showIndicator(r,r)}},_hideIndicator:function(){var t=this._shapes;t.indicator&&t.indicator.attr("invisible",!0),t.indicatorLabel&&t.indicatorLabel.attr("invisible",!0)},_clearHoverLinkToSeries:function(){this._hideIndicator();var t=this._hoverLinkDataIndices;this._dispatchHighDown("downplay",p.convertDataIndex(t)),t.length=0},_clearHoverLinkFromSeries:function(){this._hideIndicator();var t=this.api.getZr();t.off("mouseover",this._hoverLinkFromSeriesMouseOver),t.off("mouseout",this._hideIndicator)},_applyTransform:function(t,e,i,n){var o=u.getTransform(e,n?null:this.group);return u[h.isArray(t)?"applyTransform":"transformDirection"](t,o,i)},_dispatchHighDown:function(t,e){e&&e.length&&this.api.dispatchAction({type:t,batch:e})},dispose:function(){this._clearHoverLinkFromSeries(),this._clearHoverLinkToSeries()},remove:function(){this._clearHoverLinkFromSeries(),this._clearHoverLinkToSeries()}});t.exports=w},function(t,e,i){function n(t,e){var i=t.inverse;("vertical"===t.orient?!i:i)&&e.reverse()}function o(t){function e(t,i,n){return n=n||0,t.interval[n]<i.interval[n]||t.interval[n]===i.interval[n]&&(+t.close[n]>i.close[n]||e(t,i,1))}t.sort(function(t,i){return e(t,i)?-1:1});for(var i=-(1/0),n=0;n<t.length;n++)for(var o=t[n].interval,r=t[n].close,a=0;a<2;a++)o[a]<i&&(o[a]=i,r[a]=1-a),i=o[a]}var r=i(231),a=i(1),s=i(71),l=r.extend({type:"visualMap.piecewise",defaultOption:{selected:null,minOpen:!1,maxOpen:!1,align:"auto",itemWidth:20,itemHeight:14,itemSymbol:"roundRect",pieceList:null,categories:null,splitNumber:5,selectedMode:"multiple",itemGap:10,hoverLink:!0},optionUpdated:function(t,e){l.superApply(this,"optionUpdated",arguments),this._pieceList=[],this.resetTargetSeries(),this.resetExtent();var i=this._mode=this._determineMode();u[this._mode].call(this),this._resetSelected(t,e);var n=this.option.categories;this.resetVisual(function(t,e){"categories"===i?(t.mappingMethod="category",t.categories=a.clone(n)):(t.dataExtent=this.getExtent(),t.mappingMethod="piecewise",t.pieceList=a.map(this._pieceList,function(t){var t=a.clone(t);return"inRange"!==e&&(t.visual=null),t}))})},_resetSelected:function(t,e){var i=this.option,n=this._pieceList,o=(e?i:t).selected||{};if(i.selected=o,a.each(n,function(t,e){var i=this.getSelectedMapKey(t);o.hasOwnProperty(i)||(o[i]=!0)},this),"single"===i.selectedMode){var r=!1;a.each(n,function(t,e){var i=this.getSelectedMapKey(t);o[i]&&(r?o[i]=!1:r=!0)},this)}},getSelectedMapKey:function(t){return"categories"===this._mode?t.value+"":t.index+""},getPieceList:function(){return this._pieceList},_determineMode:function(){var t=this.option;return t.pieces&&t.pieces.length>0?"pieces":this.option.categories?"categories":"splitNumber"},setSelected:function(t){this.option.selected=a.clone(t)},getValueState:function(t){var e=s.findPieceIndex(t,this._pieceList);return null!=e&&this.option.selected[this.getSelectedMapKey(this._pieceList[e])]?"inRange":"outOfRange"},findTargetDataIndices:function(t){var e=[];return this.eachTargetSeries(function(i){var n=[],o=i.getData();o.each(this.getDataDimension(o),function(e,i){var o=s.findPieceIndex(e,this._pieceList);o===t&&n.push(i)},!0,this),e.push({seriesId:i.id,dataIndex:n})},this),e},getRepresentValue:function(t){var e;if(this.isCategory())e=t.value;else if(null!=t.value)e=t.value;else{var i=t.interval||[];e=(i[0]+i[1])/2}return e},getStops:function(t,e){function i(t){n.push(t),t.color=e(o,o.getRepresentValue(t),t.valueState)}var n=[],o=this,r=-(1/0);return a.each(this._pieceList,function(t){var e=t.interval;e&&(e[0]>r&&i({interval:[r,e[0]],valueState:"outOfRange"}),i({interval:e.slice(),valueState:this.getValueState((e[0]+e[1])/2)}),r=e[1])},this),n}}),u={splitNumber:function(){var t=this.option,e=this._pieceList,i=t.precision,n=this.getExtent(),r=t.splitNumber;r=Math.max(parseInt(r,10),1),t.splitNumber=r;for(var s=(n[1]-n[0])/r;+s.toFixed(i)!==s&&i<5;)i++;t.precision=i,s=+s.toFixed(i);var l=0;t.minOpen&&e.push({index:l++,interval:[-(1/0),n[0]],close:[0,0]});for(var u=n[0],h=l+r;l<h;u+=s){var c=l===r-1?n[1]:u+s;e.push({index:l++,interval:[u,c],close:[1,1]})}t.maxOpen&&e.push({index:l++,interval:[n[1],1/0],close:[0,0]}),o(e),a.each(e,function(t){t.text=this.formatValueText(t.interval)},this)},categories:function(){var t=this.option;a.each(t.categories,function(t){this._pieceList.push({text:this.formatValueText(t,!0),value:t})},this),n(t,this._pieceList)},pieces:function(){var t=this.option,e=this._pieceList;a.each(t.pieces,function(t,i){a.isObject(t)||(t={value:t});var n={text:"",index:i};if(null!=t.label&&(n.text=t.label),t.hasOwnProperty("value")){var o=n.value=t.value;n.interval=[o,o],n.close=[1,1]}else{for(var r=n.interval=[],l=n.close=[0,0],u=[1,0,1],h=[-(1/0),1/0],c=[],d=0;d<2;d++){for(var f=[["gte","gt","min"],["lte","lt","max"]][d],p=0;p<3&&null==r[d];p++)r[d]=t[f[p]],l[d]=u[p],c[d]=2===p;null==r[d]&&(r[d]=h[d])}c[0]&&r[1]===1/0&&(l[0]=0),c[1]&&r[0]===-(1/0)&&(l[1]=0),r[0]===r[1]&&l[0]&&l[1]&&(n.value=r[0])}n.visual=s.retrieveVisuals(t),e.push(n)},this),n(t,e),o(e),a.each(e,function(t){var e=t.close,i=[["<","≤"][e[1]],[">","≥"][e[0]]];t.text=t.text||this.formatValueText(null!=t.value?t.value:t.interval,!1,i)},this)}};t.exports=l},function(t,e,i){var n=i(232),o=i(1),r=i(3),a=i(26),s=i(13),l=i(233),u=n.extend({type:"visualMap.piecewise",doRender:function(){function t(t){var a=t.piece,s=new r.Group;s.onclick=o.bind(this._onItemClick,this,a),this._enableHoverLink(s,t.indexInModelPieceList);var d=i.getRepresentValue(a);if(this._createItemSymbol(s,d,[0,0,c[0],c[1]]),f){var p=this.visualMapModel.getValueState(d);s.add(new r.Text({style:{x:"right"===h?-n:c[0]+n,y:c[1]/2,text:a.text,textVerticalAlign:"middle",textAlign:h,textFont:l,fill:u,opacity:"outOfRange"===p?.5:1}}))}e.add(s)}var e=this.group;e.removeAll();var i=this.visualMapModel,n=i.get("textGap"),a=i.textStyleModel,l=a.getFont(),u=a.getTextColor(),h=this._getItemAlign(),c=i.itemSize,d=this._getViewData(),f=!d.endsText,p=!f;p&&this._renderEndsText(e,d.endsText[0],c),o.each(d.viewPieceList,t,this),p&&this._renderEndsText(e,d.endsText[1],c),s.box(i.get("orient"),e,i.get("itemGap")),this.renderBackground(e),this.positionGroup(e)},_enableHoverLink:function(t,e){function i(t){var i=this.visualMapModel;i.option.hoverLink&&this.api.dispatchAction({type:t,batch:l.convertDataIndex(i.findTargetDataIndices(e))})}t.on("mouseover",o.bind(i,this,"highlight")).on("mouseout",o.bind(i,this,"downplay"))},_getItemAlign:function(){var t=this.visualMapModel,e=t.option;if("vertical"===e.orient)return l.getItemAlign(t,this.api,t.itemSize);var i=e.align;return i&&"auto"!==i||(i="left"),i},_renderEndsText:function(t,e,i){if(e){var n=new r.Group,o=this.visualMapModel.textStyleModel;n.add(new r.Text({style:{x:i[0]/2,y:i[1]/2,textVerticalAlign:"middle",textAlign:"center",text:e,textFont:o.getFont(),fill:o.getTextColor()}})),t.add(n)}},_getViewData:function(){var t=this.visualMapModel,e=o.map(t.getPieceList(),function(t,e){return{piece:t,indexInModelPieceList:e}}),i=t.get("text"),n=t.get("orient"),r=t.get("inverse");return("horizontal"===n?r:!r)?e.reverse():i&&(i=i.slice().reverse()),{viewPieceList:e,endsText:i}},_createItemSymbol:function(t,e,i){t.add(a.createSymbol(this.getControllerVisual(e,"symbol"),i[0],i[1],i[2],i[3],this.getControllerVisual(e,"color")))},_onItemClick:function(t){var e=this.visualMapModel,i=e.option,n=o.clone(i.selected),r=e.getSelectedMapKey(t);"single"===i.selectedMode?(n[r]=!0,o.each(n,function(t,e){n[e]=e===r})):n[r]=!n[r],this.api.dispatchAction({type:"selectDataRange",from:this.uid,visualMapId:this.visualMapModel.id,selected:n})}});t.exports=u},function(t,e,i){i(2).registerPreprocessor(i(234)),i(235),i(236),i(350),i(351),i(237)},function(t,e,i){i(2).registerPreprocessor(i(234)),i(235),i(236),i(352),i(353),i(237)},function(t,e,i){function n(t,e,i,n,o){l.call(this,t),this.map=e,this._nameCoordMap={},this.loadGeoJson(i,n,o)}function o(t,e,i,n){var o=i.geoModel,r=i.seriesModel,a=o?o.coordinateSystem:r?r.coordinateSystem||(r.getReferringComponents("geo")[0]||{}).coordinateSystem:null;return a===this?a[t](n):null}var r=i(361),a=i(1),s=i(8),l=i(238),u=[i(359),i(360),i(358)];n.prototype={constructor:n,type:"geo",dimensions:["lng","lat"],containCoord:function(t){for(var e=this.regions,i=0;i<e.length;i++)if(e[i].contain(t))return!0;return!1},loadGeoJson:function(t,e,i){try{this.regions=t?r(t):[]}catch(n){throw"Invalid geoJson format\n"+n}e=e||{},i=i||{};for(var o=this.regions,s={},l=0;l<o.length;l++){var h=o[l].name;h=i[h]||h,o[l].name=h,s[h]=o[l],this.addGeoCoord(h,o[l].center);var c=e[h];c&&o[l].transformTo(c.left,c.top,c.width,c.height)}this._regionsMap=s,this._rect=null,a.each(u,function(t){t(this)},this)},transformTo:function(t,e,i,n){var o=this.getBoundingRect();o=o.clone(),o.y=-o.y-o.height;var r=this._viewTransform;r.transform=o.calculateTransform(new s(t,e,i,n)),r.decomposeTransform();var a=r.scale;a[1]=-a[1],r.updateTransform(),this._updateTransform()},getRegion:function(t){return this._regionsMap[t]},getRegionByCoord:function(t){for(var e=this.regions,i=0;i<e.length;i++)if(e[i].contain(t))return e[i]},addGeoCoord:function(t,e){this._nameCoordMap[t]=e},getGeoCoord:function(t){return this._nameCoordMap[t]},getBoundingRect:function(){if(this._rect)return this._rect;for(var t,e=this.regions,i=0;i<e.length;i++){var n=e[i].getBoundingRect();t=t||n.clone(),t.union(n)}return this._rect=t||new s(0,0,0,0)},dataToPoints:function(t){var e=[];return t.mapArray(["lng","lat"],function(t,i){return e[0]=t,e[1]=i,this.dataToPoint(e)},this)},dataToPoint:function(t){if("string"==typeof t&&(t=this.getGeoCoord(t)),t)return l.prototype.dataToPoint.call(this,t)},convertToPixel:a.curry(o,"dataToPoint"),convertFromPixel:a.curry(o,"pointToData")},a.mixin(n,l),t.exports=n},function(t,e,i){"use strict";var n=i(7),o=i(12),r=i(10),a=i(1),s=i(66),l=i(172),u=o.extend({type:"geo",coordinateSystem:null,layoutMode:"box",init:function(t){o.prototype.init.apply(this,arguments),n.defaultEmphasis(t.label,["position","show","textStyle","distance","formatter"])},optionUpdated:function(){var t=this.option,e=this;t.regions=l.getFilledRegions(t.regions,t.map),this._optionModelMap=a.reduce(t.regions||[],function(t,i){return i.name&&(t[i.name]=new r(i,e)),t},{}),this.updateSelectedMap(t.regions)},defaultOption:{zlevel:0,z:0,show:!0,left:"center",top:"center",aspectScale:.75,silent:!1,map:"",center:null,zoom:1,scaleLimit:null,label:{normal:{show:!1,textStyle:{color:"#000"}},emphasis:{show:!0,textStyle:{color:"rgb(100,0,0)"}}},itemStyle:{normal:{borderWidth:.5,borderColor:"#444",color:"#eee"},emphasis:{color:"rgba(255,215,0,0.8)"}},regions:[]},getRegionModel:function(t){return this._optionModelMap[t]},getFormattedLabel:function(t,e){var i=this.get("label."+e+".formatter"),n={name:t};return"function"==typeof i?(n.status=e,i(n)):"string"==typeof i?i.replace("{a}",n.seriesName):void 0},setZoom:function(t){this.option.zoom=t},setCenter:function(t){this.option.center=t}});a.mixin(u,s),t.exports=u},function(t,e,i){var n=i(1),o={Russia:[100,60],"United States of America":[-99,38]};t.exports=function(t){n.each(t.regions,function(t){var e=o[t.name];if(e){var i=t.center;i[0]=e[0],i[1]=e[1]}})}},function(t,e,i){for(var n=i(239),o=[126,25],r=[[[0,3.5],[7,11.2],[15,11.9],[30,7],[42,.7],[52,.7],[56,7.7],[59,.7],[64,.7],[64,0],[5,0],[0,3.5]],[[13,16.1],[19,14.7],[16,21.7],[11,23.1],[13,16.1]],[[12,32.2],[14,38.5],[15,38.5],[13,32.2],[12,32.2]],[[16,47.6],[12,53.2],[13,53.2],[18,47.6],[16,47.6]],[[6,64.4],[8,70],[9,70],[8,64.4],[6,64.4]],[[23,82.6],[29,79.8],[30,79.8],[25,82.6],[23,82.6]],[[37,70.7],[43,62.3],[44,62.3],[39,70.7],[37,70.7]],[[48,51.1],[51,45.5],[53,45.5],[50,51.1],[48,51.1]],[[51,35],[51,28.7],[53,28.7],[53,35],[51,35]],[[52,22.4],[55,17.5],[56,17.5],[53,22.4],[52,22.4]],[[58,12.6],[62,7],[63,7],[60,12.6],[58,12.6]],[[0,3.5],[0,93.1],[64,93.1],[64,0],[63,0],[63,92.4],[1,92.4],[1,3.5],[0,3.5]]],a=0;a<r.length;a++)for(var s=0;s<r[a].length;s++)r[a][s][0]/=10.5,r[a][s][1]/=-14,r[a][s][0]+=o[0],r[a][s][1]+=o[1];t.exports=function(t){"china"===t.map&&t.regions.push(new n("南海诸岛",r,o))}},function(t,e,i){var n=i(1),o={"南海诸岛":[32,80],"广东":[0,-10],"香港":[10,5],"澳门":[-10,10],"天津":[5,5]};t.exports=function(t){n.each(t.regions,function(t){var e=o[t.name];if(e){var i=t.center;i[0]+=e[0]/10.5,i[1]+=-e[1]/14}})}},function(t,e,i){function n(t){if(!t.UTF8Encoding)return t;for(var e=t.features,i=0;i<e.length;i++)for(var n=e[i],r=n.geometry,a=r.coordinates,s=r.encodeOffsets,l=0;l<a.length;l++){var u=a[l];if("Polygon"===r.type)a[l]=o(u,s[l]);else if("MultiPolygon"===r.type)for(var h=0;h<u.length;h++){var c=u[h];u[h]=o(c,s[l][h])}}return t.UTF8Encoding=!1,t}function o(t,e){for(var i=[],n=e[0],o=e[1],r=0;r<t.length;r+=2){var a=t.charCodeAt(r)-64,s=t.charCodeAt(r+1)-64;a=a>>1^-(1&a),s=s>>1^-(1&s),a+=n,s+=o,n=a,o=s,i.push([a/1024,s/1024])}return i}function r(t){for(var e=[],i=0;i<t.length;i++)for(var n=0;n<t[i].length;n++)e.push(t[i][n]);return e}var a=i(1),s=i(239);t.exports=function(t){return n(t),a.map(a.filter(t.features,function(t){return t.geometry&&t.properties}),function(t){var e=t.properties,i=t.geometry,n=i.coordinates;return"MultiPolygon"===i.type&&(n=r(n)),new s(e.name,n,e.cp)})}},function(t,e,i){function n(t,e){return e.type||(e.data?"category":"value")}var o=i(12),r=i(1),a=i(30),s=i(52),l=i(4),u=o.extend({type:"baseParallelAxis",axis:null,activeIntervals:[],getAreaSelectStyle:function(){return a([["fill","color"],["lineWidth","borderWidth"],["stroke","borderColor"],["width","width"],["opacity","opacity"]]).call(this.getModel("areaSelectStyle"))},setActiveIntervals:function(t){var e=this.activeIntervals=r.clone(t);if(e)for(var i=e.length-1;i>=0;i--)l.asc(e[i])},getActiveState:function(t){var e=this.activeIntervals;if(!e.length)return"normal";if(null==t)return"inactive";for(var i=0,n=e.length;i<n;i++)if(e[i][0]<=t&&t<=e[i][1])return"active";return"inactive"}}),h={type:"value",dim:null,areaSelectStyle:{width:20,borderWidth:1,borderColor:"rgba(160,197,232)",color:"rgba(160,197,232)",opacity:.3},realtime:!0,z:10};r.merge(u.prototype,i(51)),s("parallel",u,n,h),t.exports=u},function(t,e,i){function n(t,e,i){this._axesMap={},this._axesLayout={},this.dimensions=t.dimensions,this._rect,this._model=t,this._init(t,e,i)}var o=i(13),r=i(22),a=i(1),s=i(364),l=i(3),u=i(19),h=a.each,c=Math.PI;n.prototype={type:"parallel",constructor:n,_init:function(t,e,i){var n=t.dimensions,o=t.parallelAxisIndex;h(n,function(t,i){var n=o[i],a=e.getComponent("parallelAxis",n),l=this._axesMap[t]=new s(t,r.createScaleByModel(a),[0,0],a.get("type"),n),u="category"===l.type;l.onBand=u&&a.get("boundaryGap"),l.inverse=a.get("inverse"),a.axis=l,l.model=a},this)},update:function(t,e){this._updateAxesFromSeries(this._model,t)},_updateAxesFromSeries:function(t,e){e.eachSeries(function(i){if(t.contains(i,e)){var n=i.getData();h(this.dimensions,function(t){var e=this._axesMap[t];e.scale.unionExtent(n.getDataExtent(t)),r.niceScaleExtent(e,e.model)},this)}},this)},resize:function(t,e){this._rect=o.getLayoutRect(t.getBoxLayoutParams(),{width:e.getWidth(),height:e.getHeight()}),this._layoutAxes(t)},getRect:function(){return this._rect},_layoutAxes:function(t){var e=this._rect,i=t.get("layout"),n=this._axesMap,o=this.dimensions,r=[e.width,e.height],a="horizontal"===i?0:1,s=r[a],l=r[1-a],d=[0,l];h(n,function(t){var e=t.inverse?1:0;t.setExtent(d[e],d[1-e])});var f,p=t.get("axisExpandable"),g=t.get("axisExpandWidth"),m=t.get("axisExpandCenter"),v=t.get("axisExpandCount")||0;if(null!=m){var y=Math.max(0,Math.floor(m-(v-1)/2)),x=y+v-1;x>=o.length&&(x=o.length-1,y=Math.max(0,Math.floor(x-v+1))),f=[y,x]}var _=p&&f&&g?function(t,e,i){var n,o=f[1]-f[0],r=(e-g*o)/(i-1-o);return n=t<f[0]?(t-1)*r:t<=f[1]?f[0]*r+(t-f[0])*g:t===i-1?e:f[0]*r+o*g+(t-f[1])*r,{position:n,axisNameAvailableWidth:f[0]<t&&t<f[1]?g:r}}:function(t,e,i){var n=e/(i-1);return{position:n*t,axisNameAvailableWidth:n}};h(o,function(t,n){var r=_(n,s,o.length),a={horizontal:{x:r.position,y:l},vertical:{x:0,y:r.position}},h={horizontal:c/2,vertical:0},d=[a[i].x+e.x,a[i].y+e.y],p=h[i],g=u.create();u.rotate(g,g,p),u.translate(g,g,d),this._axesLayout[t]={position:d,rotation:p,transform:g,axisNameAvailableWidth:r.axisNameAvailableWidth,tickDirection:1,labelDirection:1,axisExpandWindow:f}},this)},getAxis:function(t){return this._axesMap[t]},dataToPoint:function(t,e){return this.axisCoordToPoint(this._axesMap[e].dataToCoord(t),e)},eachActiveState:function(t,e,i){for(var n=this.dimensions,o=this._axesMap,r=this.hasAxisbrushed(),a=0,s=t.count();a<s;a++){var l,u=t.getValues(n,a);if(r){l="active";for(var h=0,c=n.length;h<c;h++){var d=n[h],f=o[d].model.getActiveState(u[h],h);if("inactive"===f){l="inactive";break}}}else l="normal";e.call(i,l,a)}},hasAxisbrushed:function(){for(var t=this.dimensions,e=this._axesMap,i=!1,n=0,o=t.length;n<o;n++)"normal"!==e[t[n]].model.getActiveState()&&(i=!0);return i},axisCoordToPoint:function(t,e){var i=this._axesLayout[e];return l.applyTransform([t,0],i.transform)},getAxisLayout:function(t){return a.clone(this._axesLayout[t])},findClosestAxisDim:function(t){var e,i=1/0;return a.each(this._axesLayout,function(n,o){var r=l.applyTransform(t,n.transform,!0),a=this._axesMap[o].getExtent();if(!(r[0]<a[0]||r[0]>a[1])){var s=Math.abs(r[1]);s<i&&(i=s,e=o)}},this),e}},t.exports=n},function(t,e,i){var n=i(1),o=i(42),r=function(t,e,i,n,r){o.call(this,t,e,i),this.type=n||"value",this.axisIndex=r};r.prototype={constructor:r,model:null},n.inherits(r,o),t.exports=r},function(t,e,i){var n=i(1),o=i(12);i(362),o.extend({type:"parallel",dependencies:["parallelAxis"],coordinateSystem:null,dimensions:null,parallelAxisIndex:null,layoutMode:"box",
+defaultOption:{zlevel:0,z:0,left:80,top:60,right:80,bottom:60,layout:"horizontal",axisExpandable:!1,axisExpandCenter:null,axisExpandCount:0,axisExpandWidth:50,parallelAxisDefault:null},init:function(){o.prototype.init.apply(this,arguments),this.mergeOption({})},mergeOption:function(t){var e=this.option;t&&n.merge(e,t,!0),this._initDimensions()},contains:function(t,e){var i=t.get("parallelIndex");return null!=i&&e.getComponent("parallel",i)===this},setAxisExpand:function(t){n.each(["axisExpandable","axisExpandCenter","axisExpandCount","axisExpandWidth"],function(e){t.hasOwnProperty(e)&&(this.option[e]=t[e])},this)},_initDimensions:function(){var t=this.dimensions=[],e=this.parallelAxisIndex=[],i=n.filter(this.dependentModels.parallelAxis,function(t){return t.get("parallelIndex")===this.componentIndex});n.each(i,function(i){t.push("dim"+i.get("dim")),e.push(i.componentIndex)})}})},function(t,e,i){function n(t){if(!t.parallel){var e=!1;r.each(t.series,function(t){t&&"parallel"===t.type&&(e=!0)}),e&&(t.parallel=[{}])}}function o(t){var e=a.normalizeToArray(t.parallelAxis);r.each(e,function(e){if(r.isObject(e)){var i=e.parallelIndex||0,n=a.normalizeToArray(t.parallel)[i];n&&n.parallelAxisDefault&&r.merge(e,n.parallelAxisDefault,!1)}})}var r=i(1),a=i(7);t.exports=function(t){n(t),o(t)}},function(t,e,i){"use strict";function n(t,e){e=e||[0,360],r.call(this,"angle",t,e),this.type="category"}var o=i(1),r=i(42);n.prototype={constructor:n,dataToAngle:r.prototype.dataToCoord,angleToData:r.prototype.coordToData},o.inherits(n,r),t.exports=n},function(t,e,i){"use strict";function n(t,e){return e.type||(e.data?"category":"value")}var o=i(1),r=i(12),a=i(52),s=r.extend({type:"polarAxis",axis:null});o.merge(s.prototype,i(51)),o.merge(s.prototype,i(82));var l={angle:{startAngle:90,clockwise:!0,splitNumber:12,axisLabel:{rotate:!1}},radius:{splitNumber:5}};a("angle",s,n,l.angle),a("radius",s,n,l.radius)},function(t,e,i){"use strict";var n=i(371),o=i(367),r=function(t){this.name=t||"",this.cx=0,this.cy=0,this._radiusAxis=new n,this._angleAxis=new o};r.prototype={constructor:r,type:"polar",dimensions:["radius","angle"],containPoint:function(t){var e=this.pointToCoord(t);return this._radiusAxis.contain(e[0])&&this._angleAxis.contain(e[1])},containData:function(t){return this._radiusAxis.containData(t[0])&&this._angleAxis.containData(t[1])},getAxis:function(t){return this["_"+t+"Axis"]},getAxesByScale:function(t){var e=[],i=this._angleAxis,n=this._radiusAxis;return i.scale.type===t&&e.push(i),n.scale.type===t&&e.push(n),e},getAngleAxis:function(){return this._angleAxis},getRadiusAxis:function(){return this._radiusAxis},getOtherAxis:function(t){var e=this._angleAxis;return t===e?this._radiusAxis:e},getBaseAxis:function(){return this.getAxesByScale("ordinal")[0]||this.getAxesByScale("time")[0]||this.getAngleAxis()},dataToPoints:function(t){return t.mapArray(this.dimensions,function(t,e){return this.dataToPoint([t,e])},this)},dataToPoint:function(t,e){return this.coordToPoint([this._radiusAxis.dataToRadius(t[0],e),this._angleAxis.dataToAngle(t[1],e)])},pointToData:function(t,e){var i=this.pointToCoord(t);return[this._radiusAxis.radiusToData(i[0],e),this._angleAxis.angleToData(i[1],e)]},pointToCoord:function(t){var e=t[0]-this.cx,i=t[1]-this.cy,n=this.getAngleAxis(),o=n.getExtent(),r=Math.min(o[0],o[1]),a=Math.max(o[0],o[1]);n.inverse?r=a-360:a=r+360;var s=Math.sqrt(e*e+i*i);e/=s,i/=s;for(var l=Math.atan2(-i,e)/Math.PI*180,u=l<r?1:-1;l<r||l>a;)l+=360*u;return[s,l]},coordToPoint:function(t){var e=t[0],i=t[1]/180*Math.PI,n=Math.cos(i)*e+this.cx,o=-Math.sin(i)*e+this.cy;return[n,o]}},t.exports=r},function(t,e,i){"use strict";i(368),i(2).extendComponentModel({type:"polar",dependencies:["polarAxis","angleAxis"],coordinateSystem:null,findAxisModel:function(t){var e,i=this.ecModel;return i.eachComponent(t,function(t){var n=i.queryComponents({mainType:"polar",index:t.getShallow("polarIndex"),id:t.getShallow("polarId")})[0];n===this&&(e=t)},this),e},defaultOption:{zlevel:0,z:0,center:["50%","50%"],radius:"80%"}})},function(t,e,i){"use strict";function n(t,e){r.call(this,"radius",t,e),this.type="category"}var o=i(1),r=i(42);n.prototype={constructor:n,dataToRadius:r.prototype.dataToCoord,radiusToData:r.prototype.coordToData},o.inherits(n,r),t.exports=n},function(t,e,i){function n(t,e,i){r.call(this,t,e,i),this.type="value",this.angle=0,this.name="",this.model}var o=i(1),r=i(42);o.inherits(n,r),t.exports=n},function(t,e,i){function n(t,e,i){this._model=t,this.dimensions=[],this._indicatorAxes=o.map(t.getIndicatorModels(),function(t,e){var i="indicator_"+e,n=new r(i,new a);return n.name=t.get("name"),n.model=t,t.axis=n,this.dimensions.push(i),n},this),this.resize(t,i),this.cx,this.cy,this.r,this.startAngle}var o=i(1),r=i(372),a=i(38),s=i(4),l=i(22);n.prototype.getIndicatorAxes=function(){return this._indicatorAxes},n.prototype.dataToPoint=function(t,e){var i=this._indicatorAxes[e];return this.coordToPoint(i.dataToCoord(t),e)},n.prototype.coordToPoint=function(t,e){var i=this._indicatorAxes[e],n=i.angle,o=this.cx+t*Math.cos(n),r=this.cy-t*Math.sin(n);return[o,r]},n.prototype.pointToData=function(t){var e=t[0]-this.cx,i=t[1]-this.cy,n=Math.sqrt(e*e+i*i);e/=n,i/=n;for(var o,r=Math.atan2(-i,e),a=1/0,s=-1,l=0;l<this._indicatorAxes.length;l++){var u=this._indicatorAxes[l],h=Math.abs(r-u.angle);h<a&&(o=u,s=l,a=h)}return[s,+(o&&o.coodToData(n))]},n.prototype.resize=function(t,e){var i=t.get("center"),n=e.getWidth(),r=e.getHeight(),a=Math.min(n,r)/2;this.cx=s.parsePercent(i[0],n),this.cy=s.parsePercent(i[1],r),this.startAngle=t.get("startAngle")*Math.PI/180,this.r=s.parsePercent(t.get("radius"),a),o.each(this._indicatorAxes,function(t,e){t.setExtent(0,this.r);var i=this.startAngle+e*Math.PI*2/this._indicatorAxes.length;i=Math.atan2(Math.sin(i),Math.cos(i)),t.angle=i},this)},n.prototype.update=function(t,e){function i(t){var e=Math.pow(10,Math.floor(Math.log(t)/Math.LN10)),i=t/e;return 2===i?i=5:i*=2,i*e}var n=this._indicatorAxes,r=this._model;o.each(n,function(t){t.scale.setExtent(1/0,-(1/0))}),t.eachSeriesByType("radar",function(e,i){if("radar"===e.get("coordinateSystem")&&t.getComponent("radar",e.get("radarIndex"))===r){var a=e.getData();o.each(n,function(t){t.scale.unionExtent(a.getDataExtent(t.dim))})}},this);var a=r.get("splitNumber");o.each(n,function(t,e){var n=l.getScaleExtent(t,t.model);l.niceScaleExtent(t,t.model);var o=t.model,r=t.scale,u=o.get("min"),h=o.get("max"),c=r.getInterval();if(null!=u&&null!=h)r.setInterval((h-u)/a);else if(null!=u){var d;do d=u+c*a,r.setExtent(+u,d),r.setInterval(c),c=i(c);while(d<n[1]&&isFinite(d)&&isFinite(n[1]))}else if(null!=h){var f;do f=h-c*a,r.setExtent(f,+h),r.setInterval(c),c=i(c);while(f>n[0]&&isFinite(f)&&isFinite(n[0]))}else{var p=r.getTicks().length-1;p>a&&(c=i(c));var g=Math.round((n[0]+n[1])/2/c)*c,m=Math.round(a/2);r.setExtent(s.round(g-m*c),s.round(g+(a-m)*c)),r.setInterval(c)}})},n.dimensions=[],n.create=function(t,e){var i=[];return t.eachComponent("radar",function(o){var r=new n(o,t,e);i.push(r),o.coordinateSystem=r}),t.eachSeriesByType("radar",function(t){"radar"===t.get("coordinateSystem")&&(t.coordinateSystem=i[t.get("radarIndex")||0])}),i},i(23).register("radar",n),t.exports=n},function(t,e,i){function n(t,e){return s.defaults({show:e},t)}var o=i(81),r=o.valueAxis,a=i(10),s=i(1),l=i(51),u=i(2).extendComponentModel({type:"radar",optionUpdated:function(){var t=this.get("boundaryGap"),e=this.get("splitNumber"),i=this.get("scale"),n=this.get("axisLine"),o=this.get("axisTick"),r=this.get("axisLabel"),u=this.get("name.textStyle"),h=this.get("name.show"),c=this.get("name.formatter"),d=this.get("nameGap"),f=this.get("triggerEvent"),p=s.map(this.get("indicator")||[],function(p){null!=p.max&&p.max>0&&!p.min?p.min=0:null!=p.min&&p.min<0&&!p.max&&(p.max=0),p=s.merge(s.clone(p),{boundaryGap:t,splitNumber:e,scale:i,axisLine:n,axisTick:o,axisLabel:r,name:p.text,nameLocation:"end",nameGap:d,nameTextStyle:u,triggerEvent:f},!1),h||(p.name=""),"string"==typeof c?p.name=c.replace("{value}",p.name):"function"==typeof c&&(p.name=c(p.name,p));var g=s.extend(new a(p,null,this.ecModel),l);return g.mainType="radar",g.componentIndex=this.componentIndex,g},this);this.getIndicatorModels=function(){return p}},defaultOption:{zlevel:0,z:0,center:["50%","50%"],radius:"75%",startAngle:90,name:{show:!0},boundaryGap:[0,0],splitNumber:5,nameGap:15,scale:!1,shape:"polygon",axisLine:s.merge({lineStyle:{color:"#bbb"}},r.axisLine),axisLabel:n(r.axisLabel,!1),axisTick:n(r.axisTick,!1),splitLine:n(r.splitLine,!0),splitArea:n(r.splitArea,!0),indicator:[]}});t.exports=u},function(t,e,i){function n(t,e){return e.type||(e.data?"category":"value")}var o=i(12),r=i(52),a=i(1),s=o.extend({type:"singleAxis",layoutMode:"box",axis:null,coordinateSystem:null}),l={left:"5%",top:"5%",right:"5%",bottom:"5%",type:"value",position:"bottom",orient:"horizontal",axisLine:{show:!0,lineStyle:{width:2,type:"solid"}},axisTick:{show:!0,length:6,lineStyle:{width:2}},axisLabel:{show:!0,interval:"auto"},splitLine:{show:!0,lineStyle:{type:"dashed",opacity:.2}}};a.merge(s.prototype,i(51)),r("single",s,n,l),t.exports=s},function(t,e,i){function n(t,e,i){this.dimension="x",this.dimensions=["x"],this._axis=null,this._rect,this._init(t,e,i),this._model=t}var o=i(377),r=i(22),a=i(13);n.prototype={type:"singleAxis",constructor:n,_init:function(t,e,i){var n=this.dimension,a=new o(n,r.createScaleByModel(t),[0,0],t.get("type"),t.get("position")),s="category"===a.type;a.onBand=s&&t.get("boundaryGap"),a.inverse=t.get("inverse"),a.orient=t.get("orient"),t.axis=a,a.model=t,this._axis=a},update:function(t,e){this._updateAxisFromSeries(t)},_updateAxisFromSeries:function(t){t.eachSeries(function(t){var e=t.getData(),i=this.dimension;this._axis.scale.unionExtent(e.getDataExtent(t.coordDimToDataDim(i))),r.niceScaleExtent(this._axis,this._axis.model)},this)},resize:function(t,e){this._rect=a.getLayoutRect({left:t.get("left"),top:t.get("top"),right:t.get("right"),bottom:t.get("bottom"),width:t.get("width"),height:t.get("height")},{width:e.getWidth(),height:e.getHeight()}),this._adjustAxis()},getRect:function(){return this._rect},_adjustAxis:function(){var t=this._rect,e=this._axis,i=e.isHorizontal(),n=i?[0,t.width]:[0,t.height],o=e.reverse?1:0;e.setExtent(n[o],n[1-o]),this._updateAxisTransform(e,i?t.x:t.y)},_updateAxisTransform:function(t,e){var i=t.getExtent(),n=i[0]+i[1],o=t.isHorizontal();t.toGlobalCoord=o?function(t){return t+e}:function(t){return n-t+e},t.toLocalCoord=o?function(t){return t-e}:function(t){return n-t+e}},getAxis:function(){return this._axis},getBaseAxis:function(){return this._axis},containPoint:function(t){var e=this.getRect(),i=this.getAxis(),n=i.orient;return"horizontal"===n?i.contain(i.toLocalCoord(t[0]))&&t[1]>=e.y&&t[1]<=e.y+e.height:i.contain(i.toLocalCoord(t[1]))&&t[0]>=e.y&&t[0]<=e.y+e.height},pointToData:function(t){var e=this.getAxis();return[e.coordToData(e.toLocalCoord(t["horizontal"===e.orient?0:1]))]},dataToPoint:function(t){var e=this.getAxis(),i=this.getRect(),n=[],o="horizontal"===e.orient?0:1;return n[o]=e.toGlobalCoord(e.dataToCoord(+t)),n[1-o]=0===o?i.y+i.height/2:i.x+i.width/2,n}},t.exports=n},function(t,e,i){var n=i(1),o=i(42),r=i(22),a=function(t,e,i,n,r){o.call(this,t,e,i),this.type=n||"value",this.position=r||"bottom",this.orient=null,this._labelInterval=null};a.prototype={constructor:a,model:null,isHorizontal:function(){var t=this.position;return"top"===t||"bottom"===t},getLabelInterval:function(){var t=this._labelInterval;if(!t){var e=this.model,i=e.getModel("axisLabel"),o=i.get("interval");if("category"!==this.type||"auto"!==o)return t=this._labelInterval="auto"===o?0:o;t=this._labelInterval=r.getAxisLabelInterval(n.map(this.scale.getTicks(),this.dataToCoord,this),e.getFormattedLabels(),i.getModel("textStyle").getFont(),this.isHorizontal())}return t},toGlobalCoord:null,toLocalCoord:null},n.inherits(a,o),t.exports=a},function(t,e,i){function n(t,e){var i=[];return t.eachComponent("singleAxis",function(n,r){var a=new o(n,t,e);a.name="single_"+r,a.resize(n,e),n.coordinateSystem=a,i.push(a)}),t.eachSeries(function(e){if("singleAxis"===e.get("coordinateSystem")){var i=t.queryComponents({mainType:"singleAxis",index:e.get("singleAxisIndex"),id:e.get("singleAxisId")})[0];e.coordinateSystem=i.coordinateSystem}}),i}var o=i(376);i(23).register("single",{create:n,dimensions:o.prototype.dimensions})},function(t,e,i){"use strict";function n(t,e){this.id=null==t?"":t,this.inEdges=[],this.outEdges=[],this.edges=[],this.hostGraph,this.dataIndex=null==e?-1:e}function o(t,e,i){this.node1=t,this.node2=e,this.dataIndex=null==i?-1:i}var r=i(1),a=function(t){this._directed=t||!1,this.nodes=[],this.edges=[],this._nodesMap={},this._edgesMap={},this.data,this.edgeData},s=a.prototype;s.type="graph",s.isDirected=function(){return this._directed},s.addNode=function(t,e){t=t||""+e;var i=this._nodesMap;if(!i[t]){var o=new n(t,e);return o.hostGraph=this,this.nodes.push(o),i[t]=o,o}},s.getNodeByIndex=function(t){var e=this.data.getRawIndex(t);return this.nodes[e]},s.getNodeById=function(t){return this._nodesMap[t]},s.addEdge=function(t,e,i){var r=this._nodesMap,a=this._edgesMap;if("number"==typeof t&&(t=this.nodes[t]),"number"==typeof e&&(e=this.nodes[e]),t instanceof n||(t=r[t]),e instanceof n||(e=r[e]),t&&e){var s=t.id+"-"+e.id;if(!a[s]){var l=new o(t,e,i);return l.hostGraph=this,this._directed&&(t.outEdges.push(l),e.inEdges.push(l)),t.edges.push(l),t!==e&&e.edges.push(l),this.edges.push(l),a[s]=l,l}}},s.getEdgeByIndex=function(t){var e=this.edgeData.getRawIndex(t);return this.edges[e]},s.getEdge=function(t,e){t instanceof n&&(t=t.id),e instanceof n&&(e=e.id);var i=this._edgesMap;return this._directed?i[t+"-"+e]:i[t+"-"+e]||i[e+"-"+t]},s.eachNode=function(t,e){for(var i=this.nodes,n=i.length,o=0;o<n;o++)i[o].dataIndex>=0&&t.call(e,i[o],o)},s.eachEdge=function(t,e){for(var i=this.edges,n=i.length,o=0;o<n;o++)i[o].dataIndex>=0&&i[o].node1.dataIndex>=0&&i[o].node2.dataIndex>=0&&t.call(e,i[o],o)},s.breadthFirstTraverse=function(t,e,i,o){if(e instanceof n||(e=this._nodesMap[e]),e){for(var r="out"===i?"outEdges":"in"===i?"inEdges":"edges",a=0;a<this.nodes.length;a++)this.nodes[a].__visited=!1;if(!t.call(o,e,null))for(var s=[e];s.length;)for(var l=s.shift(),u=l[r],a=0;a<u.length;a++){var h=u[a],c=h.node1===l?h.node2:h.node1;if(!c.__visited){if(t.call(c,c,l))return;s.push(c),c.__visited=!0}}}},s.update=function(){for(var t=this.data,e=this.edgeData,i=this.nodes,n=this.edges,o=0,r=i.length;o<r;o++)i[o].dataIndex=-1;for(var o=0,r=t.count();o<r;o++)i[t.getRawIndex(o)].dataIndex=o;e.filterSelf(function(t){var i=n[e.getRawIndex(t)];return i.node1.dataIndex>=0&&i.node2.dataIndex>=0});for(var o=0,r=n.length;o<r;o++)n[o].dataIndex=-1;for(var o=0,r=e.count();o<r;o++)n[e.getRawIndex(o)].dataIndex=o},s.clone=function(){for(var t=new a(this._directed),e=this.nodes,i=this.edges,n=0;n<e.length;n++)t.addNode(e[n].id,e[n].dataIndex);for(var n=0;n<i.length;n++){var o=i[n];t.addEdge(o.node1.id,o.node2.id,o.dataIndex)}return t},n.prototype={constructor:n,degree:function(){return this.edges.length},inDegree:function(){return this.inEdges.length},outDegree:function(){return this.outEdges.length},getModel:function(t){if(!(this.dataIndex<0)){var e=this.hostGraph,i=e.data.getItemModel(this.dataIndex);return i.getModel(t)}}},o.prototype.getModel=function(t){if(!(this.dataIndex<0)){var e=this.hostGraph,i=e.edgeData.getItemModel(this.dataIndex);return i.getModel(t)}};var l=function(t,e){return{getValue:function(i){var n=this[t][e];return n.get(n.getDimension(i||"value"),this.dataIndex)},setVisual:function(i,n){this.dataIndex>=0&&this[t][e].setItemVisual(this.dataIndex,i,n)},getVisual:function(i,n){return this[t][e].getItemVisual(this.dataIndex,i,n)},setLayout:function(i,n){this.dataIndex>=0&&this[t][e].setItemLayout(this.dataIndex,i,n)},getLayout:function(){return this[t][e].getItemLayout(this.dataIndex)},getGraphicEl:function(){return this[t][e].getItemGraphicEl(this.dataIndex)},getRawIndex:function(){return this[t][e].getRawIndex(this.dataIndex)}}};r.mixin(n,l("hostGraph","data")),r.mixin(o,l("hostGraph","edgeData")),a.Node=n,a.Edge=o,t.exports=a},function(t,e,i){function n(t,e){this.root,this.data,this._nodes=[],this.hostModel=t,this.levelModels=r.map(e||[],function(e){return new a(e,t,t.ecModel)})}function o(t,e){var i=e.children;t.parentNode!==e&&(i.push(t),t.parentNode=e)}var r=i(1),a=i(10),s=i(14),l=i(241),u=i(29),h=function(t,e){this.name=t||"",this.depth=0,this.height=0,this.parentNode=null,this.dataIndex=-1,this.children=[],this.viewChildren=[],this.hostTree=e};h.prototype={constructor:h,isRemoved:function(){return this.dataIndex<0},eachNode:function(t,e,i){"function"==typeof t&&(i=e,e=t,t=null),t=t||{},r.isString(t)&&(t={order:t});var n,o=t.order||"preorder",a=this[t.attr||"children"];"preorder"===o&&(n=e.call(i,this));for(var s=0;!n&&s<a.length;s++)a[s].eachNode(t,e,i);"postorder"===o&&e.call(i,this)},updateDepthAndHeight:function(t){var e=0;this.depth=t;for(var i=0;i<this.children.length;i++){var n=this.children[i];n.updateDepthAndHeight(t+1),n.height>e&&(e=n.height)}this.height=e+1},getNodeById:function(t){if(this.getId()===t)return this;for(var e=0,i=this.children,n=i.length;e<n;e++){var o=i[e].getNodeById(t);if(o)return o}},contains:function(t){if(t===this)return!0;for(var e=0,i=this.children,n=i.length;e<n;e++){var o=i[e].contains(t);if(o)return o}},getAncestors:function(t){for(var e=[],i=t?this:this.parentNode;i;)e.push(i),i=i.parentNode;return e.reverse(),e},getValue:function(t){var e=this.hostTree.data;return e.get(e.getDimension(t||"value"),this.dataIndex)},setLayout:function(t,e){this.dataIndex>=0&&this.hostTree.data.setItemLayout(this.dataIndex,t,e)},getLayout:function(){return this.hostTree.data.getItemLayout(this.dataIndex)},getModel:function(t){if(!(this.dataIndex<0)){var e=this.hostTree,i=e.data.getItemModel(this.dataIndex),n=this.getLevelModel();return i.getModel(t,(n||e.hostModel).getModel(t))}},getLevelModel:function(){return(this.hostTree.levelModels||[])[this.depth]},setVisual:function(t,e){this.dataIndex>=0&&this.hostTree.data.setItemVisual(this.dataIndex,t,e)},getVisual:function(t,e){return this.hostTree.data.getItemVisual(this.dataIndex,t,e)},getRawIndex:function(){return this.hostTree.data.getRawIndex(this.dataIndex)},getId:function(){return this.hostTree.data.getId(this.dataIndex)}},n.prototype={constructor:n,type:"tree",eachNode:function(t,e,i){this.root.eachNode(t,e,i)},getNodeByDataIndex:function(t){var e=this.data.getRawIndex(t);return this._nodes[e]},getNodeByName:function(t){return this.root.getNodeByName(t)},update:function(){for(var t=this.data,e=this._nodes,i=0,n=e.length;i<n;i++)e[i].dataIndex=-1;for(var i=0,n=t.count();i<n;i++)e[t.getRawIndex(i)].dataIndex=i},clearLayouts:function(){this.data.clearItemLayouts()}},n.createTree=function(t,e,i){function r(t,e){c.push(t);var i=new h(t.name,a);e?o(i,e):a.root=i,a._nodes.push(i);var n=t.children;if(n)for(var s=0;s<n.length;s++)r(n[s],i)}var a=new n(e,i),c=[];r(t),a.root.updateDepthAndHeight(0);var d=u([{name:"value"}],c),f=new s(d,e);return f.initData(c),l({mainData:f,struct:a,structAttr:"tree"}),a.update(),a},t.exports=n},function(t,e,i){function n(){var t,e=[],i={};return{add:function(t,n,r,a,s){return o.isString(a)&&(s=a,a=0),!i[t.id]&&(i[t.id]=1,e.push({el:t,target:n,time:r,delay:a,easing:s}),!0)},done:function(e){return t=e,this},start:function(){function n(){o--,o||(e.length=0,i={},t&&t())}for(var o=e.length,r=0,a=e.length;r<a;r++){var s=e[r];s.el.animateTo(s.target,s.time,s.delay,s.easing,n)}return this}}}var o=i(1);t.exports={createWrap:n}},function(t,e,i){function n(){function t(e,n){if(n>=i.length)return e;for(var r=-1,a=e.length,s=i[n++],l={},u={};++r<a;){var h=s(e[r]),c=u[h];c?c.push(e[r]):u[h]=[e[r]]}return o.each(u,function(e,i){l[i]=t(e,n)}),l}function e(t,r){if(r>=i.length)return t;var a=[],s=n[r++];return o.each(t,function(t,i){a.push({key:i,values:e(t,r)})}),s?a.sort(function(t,e){return s(t.key,e.key)}):a}var i=[],n=[];return{key:function(t){return i.push(t),this},sortKeys:function(t){return n[i.length-1]=t,this},entries:function(i){return e(t(i,0),0)}}}var o=i(1);t.exports=n},function(t,e,i){var n=i(1),o={get:function(t,e,i){var o=n.clone((r[t]||{})[e]);return i&&n.isArray(o)?o[o.length-1]:o}},r={color:{active:["#006edd","#e0ffff"],inactive:["rgba(0,0,0,0)"]},colorHue:{active:[0,360],inactive:[0,0]},colorSaturation:{active:[.3,1],inactive:[0,0]},colorLightness:{active:[.9,.5],inactive:[0,0]},colorAlpha:{active:[.3,1],inactive:[0,0]},opacity:{active:[.3,1],inactive:[0,0]},symbol:{active:["circle","roundRect","diamond"],inactive:["none"]},symbolSize:{active:[10,50],inactive:[0,0]}};t.exports=o}])});
\ No newline at end of file
diff --git a/src/main/websrc/js/common/esl.js b/src/main/websrc/js/common/esl.js
new file mode 100644
index 0000000..1f3ec77
--- /dev/null
+++ b/src/main/websrc/js/common/esl.js
@@ -0,0 +1 @@
+var define,require,esl;!function(n){function e(n,e){function r(n){0===n.indexOf(".")&&i.push(n)}var i=[];if("string"==typeof n?r(n):$(n,function(n){r(n)}),i.length>0)throw new Error("[REQUIRE_FATAL]Relative ID is not allowed in global require: "+i.join(", "));var o=C.waitSeconds;return o&&n instanceof Array&&(D&&clearTimeout(D),D=setTimeout(t,1e3*o)),_(n,e)}function t(){function n(a,u){if(!o[a]&&!l(a,N)){o[a]=1,l(a,L)||r[a]||(r[a]=1,e.push(a));var f=T[a];f?u&&(r[a]||(r[a]=1,e.push(a)),$(f.depMs,function(e){n(e.absId,e.hard)})):i[a]||(i[a]=1,t.push(a))}}var e=[],t=[],r={},i={},o={};for(var a in F)n(a,1);if(e.length||t.length)throw new Error("[MODULE_TIMEOUT]Hang( "+(e.join(", ")||"none")+" ) Miss( "+(t.join(", ")||"none")+" )")}function r(n){$(H,function(e){a(n,e.deps,e.factory)}),H.length=0,u(n)}function i(n,e,t){if(null==t&&(null==e?(t=n,n=null):(t=e,e=null,n instanceof Array&&(e=n,n=null))),null!=t){var r=window.opera;if(!n&&document.attachEvent&&(!r||"[object Opera]"!==r.toString())){var i=S();n=i&&i.getAttribute("data-require-id")}n?a(n,e,t):H[0]={deps:e,factory:t}}}function o(){var n=C.config[this.id];return n&&"object"==typeof n?n:{}}function a(n,e,t){T[n]||(T[n]={id:n,depsDec:e,deps:e||["require","exports","module"],factoryDeps:[],factory:t,exports:{},config:o,state:z,require:w(n),depMs:[],depMkv:{},depRs:[],depPMs:[]})}function u(n){var e=T[n];if(e&&!l(n,B)){var t=e.deps,r=e.factory,i=0;"function"==typeof r&&(i=Math.min(r.length,t.length),!e.depsDec&&r.toString().replace(/(\/\*([\s\S]*?)\*\/|([^:]|^)\/\/(.*)$)/gm,"").replace(/require\(\s*(['"'])([^'"]+)\1\s*\)/g,function(n,e,r){t.push(r)}));var o=[];$(t,function(t,r){var a,u,f=I(t),c=q(f.mod,n);c&&!P[c]?(f.res&&(u={id:t,mod:c,res:f.res},F[c]=1,e.depPMs.push(c),e.depRs.push(u)),a=e.depMkv[c],a||(a={id:f.mod,absId:c,hard:i>r},e.depMs.push(a),e.depMkv[c]=a,o.push(c))):a={absId:c},i>r&&e.factoryDeps.push(u||a)}),e.state=B,s(n),m(o)}}function f(){for(var n in F)c(n),d(n)}function c(n){function e(n){if(!l(n,B))return!1;if(l(n,L)||t[n])return!0;t[n]=1;var r=T[n],i=!0;return $(r.depMs,function(n){return i=e(n.absId)}),i&&$(r.depRs,function(n){return i=!(!n.absId||!l(n.absId,N))}),i&&(r.state=L),i}var t={};e(n)}function s(e){function t(){if(!r&&i.state===L){r=1;var t=1,o=[];if($(i.factoryDeps,function(n){var e=n.absId;return P[e]||(d(e),l(e,N))?void o.push(e):(t=0,!1)}),t){try{var a=p(o,{require:i.require,exports:i.exports,module:i}),u=i.factory,f="function"==typeof u?u.apply(n,a):u;null!=f&&(i.exports=f),i.invokeFactory=null,delete F[e]}catch(c){if(r=0,/^\[MODULE_MISS\]"([^"]+)/.test(c.message)){var s=i.depMkv[RegExp.$1];return void(s&&(s.hard=1))}throw c}g(e)}}}var r,i=T[e];i.invokeFactory=t,$(i.depPMs,function(n){v(n,function(){$(i.depRs,function(t){t.absId||t.mod!==n||(t.absId=q(t.id,e),m([t.absId],f))})})})}function l(n,e){return T[n]&&T[n].state>=e}function d(n){var e=T[n];e&&e.invokeFactory&&e.invokeFactory()}function p(n,e){var t=[];return $(n,function(n,r){t[r]=e[n]||h(n)}),t}function v(n,e){if(l(n,N))return void e();var t=Q[n];t||(t=Q[n]=[]),t.push(e)}function g(n){var e=Q[n]||[],t=T[n];t.state=N;for(var r=e.length;r--;)e[r]();e.length=0,delete Q[n]}function h(n){return l(n,N)?T[n].exports:null}function m(e,t,r,i){function o(){if(!a){var r=1;$(e,function(n){return P[n]?void 0:r=!!l(n,N)}),r&&(a=1,"function"==typeof t&&t.apply(n,p(e,P)))}}if("string"==typeof e){if(d(e),!l(e,N))throw new Error('[MODULE_MISS]"'+e+'" is not exists!');return h(e)}i=i||{};var a=0;e instanceof Array&&(o(),a||($(e,function(n){P[n]||l(n,N)||(v(n,o),i[n]||(n.indexOf("!")>0?b:y)(n,r),u(n))}),f()))}function y(n){function e(){var e=t.readyState;if("undefined"==typeof e||/^(loaded|complete)$/.test(e)){t.onload=t.onreadystatechange=null,t=null,r(n);for(var i in F)u(i);f()}}if(!G[n]&&!T[n]){G[n]=1;var t=document.createElement("script");t.setAttribute("data-require-id",n),t.src=E(n+".js"),t.async=!0,t.readyState?t.onreadystatechange=e:t.onload=e,U(t)}}function b(n,e){function t(e){u.exports=e||!0,g(n)}function i(r){var i=e?T[e].require:_;r.load(a.res,i,t,o.call({id:n}))}if(!T[n]){var a=I(n),u={id:n,state:B};T[n]=u,t.fromText=function(n,e){F[n]=1,new Function(e)(),r(n)},i(h(a.mod))}}function M(n,e){var t=R(n,1,e);return t.sort(j),t}function k(){C.baseUrl=C.baseUrl.replace(/\/$/,"")+"/",J=M(C.paths),V=M(C.map,1),$(V,function(n){n.v=M(n.v)}),K=[],$(C.packages,function(n){var e=n;"string"==typeof n&&(e={name:n.split("/")[0],location:n,main:"main"}),e.location=e.location||e.name,e.main=(e.main||"main").replace(/\.js$/i,""),e.reg=O(e.name),K.push(e)}),K.sort(j),W=M(C.urlArgs,1),X=M(C.noRequests),$(X,function(n){var e=n.v,t={};n.v=t,e instanceof Array||(e=[e]),$(e,function(n){t[n]=1})})}function x(n,e,t){$(e,function(e){return e.reg.test(n)?(t(e.v,e.k,e),!1):void 0})}function E(n){var e=/(\.[a-z0-9]+)$/i,t=/(\?[^#]*)$/,r="",i=n,o="";t.test(n)&&(o=RegExp.$1,n=n.replace(t,"")),e.test(n)&&(r=RegExp.$1,i=n.replace(e,""));var a,u=i;return x(i,J,function(n,e){u=u.replace(e,n),a=1}),a||x(i,K,function(n,e,t){u=u.replace(t.name,t.location)}),/^([a-z]{2,10}:\/)?\//i.test(u)||(u=C.baseUrl+u),u+=r+o,x(i,W,function(n){u+=(u.indexOf("?")>0?"&":"?")+n}),u}function w(n){function e(e,r){if("string"==typeof e)return t[e]||(t[e]=m(q(e,n))),t[e];if(e instanceof Array){var i=[],o=[],a=[];$(e,function(e,t){var r=I(e),u=q(r.mod,n);o.push(u),F[u]=1,r.res?(i.push(u),a[t]=null):a[t]=u});var u={};$(o,function(n){var e;x(n,X,function(n){e=n}),e&&(e["*"]?u[n]=1:$(o,function(t){return e[t]?(u[n]=1,!1):void 0}))}),m(o,function(){$(a,function(t,r){null==t&&(a[r]=q(e[r],n))}),m(a,r,n)},n,u)}}var t={};return e.toUrl=function(e){return E(q(e,n))},e}function q(n,e){if(!n)return"";e=e||"";var t=I(n);if(!t)return n;var r=t.res,i=A(t.mod,e);if($(K,function(n){var e=n.name;return e===i?(i=e+"/"+n.main,!1):void 0}),x(e,V,function(n){x(i,n,function(n,e){i=i.replace(e,n)})}),r){var o=h(i);r=o.normalize?o.normalize(r,function(n){return q(n,e)}):q(r,e),i+="!"+r}return i}function A(n,e){if(0===n.indexOf(".")){var t=e.split("/"),r=n.split("/"),i=t.length-1,o=r.length,a=0,u=0;n:for(var f=0;o>f;f++)switch(r[f]){case"..":if(!(i>a))break n;a++,u++;break;case".":u++;break;default:break n}return t.length=i-a,r=r.slice(u),t.concat(r).join("/")}return n}function I(n){var e=n.split("!");return e[0]?{mod:e[0],res:e[1]}:null}function R(n,e,t){var r=[];for(var i in n)if(n.hasOwnProperty(i)){var o={k:i,v:n[i]};r.push(o),e&&(o.reg="*"===i&&t?/^/:O(i))}return r}function S(){if(Y)return Y;if(Z&&"interactive"===Z.readyState)return Z;for(var n=document.getElementsByTagName("script"),e=n.length;e--;){var t=n[e];if("interactive"===t.readyState)return Z=t,t}}function U(n){Y=n,ee?ne.insertBefore(n,ee):ne.appendChild(n),Y=null}function O(n){return new RegExp("^"+n+"(/|$)")}function $(n,e){if(n instanceof Array)for(var t=0,r=n.length;r>t&&e(n[t],t)!==!1;t++);}function j(n,e){var t=n.k||n.name,r=e.k||e.name;return"*"===r?-1:"*"===t?1:r.length-t.length}var D,T={},F={},z=1,B=2,L=3,N=4,P={require:e,exports:1,module:1},_=w(),C={baseUrl:"./",paths:{},config:{},map:{},packages:[],waitSeconds:0,noRequests:{},urlArgs:{}};e.version="1.8.8",e.loader="esl",e.toUrl=_.toUrl;var H=[];i.amd={};var Q={},G={};e.config=function(n){if(n){for(var e in C){var t=n[e],r=C[e];if(t)if("urlArgs"===e&&"string"==typeof t)C.urlArgs["*"]=t;else if(r instanceof Array)r.push.apply(r,t);else if("object"==typeof r)for(var i in t)r[i]=t[i];else C[e]=t}k()}},k();var J,K,V,W,X,Y,Z,ne=document.getElementsByTagName("head")[0],ee=document.getElementsByTagName("base")[0];ee&&(ne=ee.parentNode),define||(define=i,require||(require=e),esl=e)}(this);
\ No newline at end of file
diff --git a/src/main/websrc/js/home/demolist.js b/src/main/websrc/js/home/demolist.js
new file mode 100644
index 0000000..498a6ac
--- /dev/null
+++ b/src/main/websrc/js/home/demolist.js
@@ -0,0 +1,21 @@
+(function(){
+     angular.module("app.home")
+        .controller("demolistCtrl",["$scope","OptionService","UtilService","$interval","HttpService",demolistCtrl]);
+
+    function demolistCtrl($scope,OptionService,UtilService,$interval,HttpService){
+        //loading加载
+        $scope.showLoading = function(){
+            document.getElementById("sysLoad").style.display = "block";
+        }
+        $scope.hideLoading = function(){
+            document.getElementById("sysLoad").style.display = "none";
+        }
+
+        $scope.goDemo = function(id){
+            UtilService.setCookie("ryioDemoapk",id,7);
+            window.location.href = "demo.html";
+        }
+
+        
+    }
+})();
\ No newline at end of file
diff --git a/src/main/websrc/js/login/acvitation.js b/src/main/websrc/js/login/acvitation.js
new file mode 100644
index 0000000..ff8e533
--- /dev/null
+++ b/src/main/websrc/js/login/acvitation.js
@@ -0,0 +1,162 @@
+(function(){
+     angular.module("app.login")
+        .controller("acvitationCtrl",["$scope","UtilService","$http","$interval","$location",acvitationCtrl]);
+
+    function acvitationCtrl($scope,UtilService,$http,$interval,$location){
+        //loading加载
+
+        $scope.showLoading = function(){
+            document.getElementById("sysLoad").style.display = "block";
+        }
+        $scope.hideLoading = function(){
+            document.getElementById("sysLoad").style.display = "none";
+        }
+        $scope.registerId = $.cookie("regId");
+        $scope.registerEmail= $.cookie("regEmail");
+        $scope.flag = $.cookie("regFlag");
+        $scope.activeStatus = $.cookie("ryioActiveStatus");
+        $scope.acvitation = $.cookie("ryioAcvitation"); //0 success 1 failure
+
+        //判断状态
+        $scope.findStatus = function(){
+            $scope.showLoading();
+            $http.get("/api/reged/findbyemail?email="+$scope.registerEmail).success(function(data){
+                $scope.hideLoading();
+                $scope.activeStatus = data.content.activeStatus;
+                UtilService.setCookie("ryioActiveStatus",data.content.activeStatus,7);
+                if(data.content.status > -3 && $scope.flag != 1){
+                    window.location.href = "success.html";
+                }
+                if($scope.activeStatus == true && $scope.flag == 1){
+                    window.location.href = "success.html";
+                }
+            })
+        }
+        $scope.findStatus();
+
+        $scope.hasReged = true;
+        $scope.loginEmail = function(){
+            var mail = $scope.registerEmail.split("@");
+            window.open("http://mail."+mail[1]);
+        }
+
+        $scope.sendtype = 1;
+        $scope.sendAgain = function(){
+            $scope.showLoading();
+            $http.get("/api/reged/sendeactivemail/"+$scope.registerId+"/"+$scope.flag).success(function(data){
+                $scope.hideLoading();
+                if(data.content == "success"){
+                    $scope.sendtype = 2;
+                    $scope.acvitation = 0;
+                    $scope.time= 99000;
+                    $one_minute = $interval(function(){
+                        $scope.time -= 1000;
+                        if($scope.time == 0){
+                            $scope.sendtype = 1;
+                        }
+                    },1000);
+                }else if(data.content == "actived"){
+                    window.location.href = "success.html";
+                }else{
+                    $scope.acvitation = 1;
+                }
+            });   
+        }
+        
+        $scope.changeEmail = function(){
+            $scope.winFlag = 1;
+            $scope.oldemail = $scope.registerEmail;
+        }
+        $scope.closeWin = function(){
+            $scope.winFlag = 0;
+        }
+        $scope.saveNewEmail = function(){
+            var par = {
+                oldemail: $scope.oldemail,
+                newemail: $scope.newemail
+            };
+            var verPar = {
+                oldemail: {
+                    key: 'email',
+                    max:48,
+                    val: $scope.oldemail,
+                    txt:"邮箱最长48位"
+                },
+                newemail: {
+                    key: 'email',
+                    max:48,
+                    val: $scope.newemail,
+                    txt:"邮箱最长48位"
+                }
+            }
+            var reg = /^([a-zA-Z0-9]+[_|\_|\.|\-]?)*[a-zA-Z0-9]+@([a-zA-Z0-9]+[_|\_|\.|\-]?)*[a-zA-Z0-9]+\.[a-zA-Z]{1,63}$/;
+            $scope.tip = formJudge(verPar);
+            if($scope.newemail == undefined){
+                if ($scope.tip.succ == true) {
+                    $scope.tip.succ = false;
+                }
+                $scope.tip.newemail = {
+                    status:true,
+                    txt:"必填"
+                }
+            }
+            if($scope.newemail == ""){
+                if ($scope.tip.succ == true) {
+                    $scope.tip.succ = false;
+                }
+                $scope.tip.newemail = {
+                    status:true,
+                    txt:"必填"
+                }
+            }
+            if($scope.newemail != undefined && $scope.newemail != "" && !reg.test($scope.newemail)){
+                if ($scope.tip.succ == true) {
+                    $scope.tip.succ = false;
+                }
+                $scope.tip.newemail = {
+                    status:true,
+                    txt:"请输入正确的邮箱格式"
+                }
+            }
+            if ($scope.tip.succ != true) { 
+                return false;
+            }
+            $scope.errorMessage = "";
+            $scope.showLoading();
+            $http.get("/api/reged/modifyemail/"+$scope.registerId+"?oldemail="+$scope.oldemail+"&newemail="+$scope.newemail).success(function(data){
+                $scope.hideLoading();
+                if(data.code== -1){
+                    $scope.tip.newemail = {
+                        status:true,
+                        txt:"该新邮箱已存在,请更换新邮箱"
+                    }
+                }else if(data.code== 250){
+                    $scope.tip.newemail = {
+                        status:true,
+                        txt:"发送邮件失败"
+                    }
+                }else if(data.code == 251){
+                    $scope.tip.newemail = {
+                        status:true,
+                        txt:"注册邮箱已激活,不可再修改"
+                    }
+                }else if(data.content.id==null){
+                    $scope.tip.newemail = {
+                        status:true,
+                        txt:"注册邮箱错误,请修改"
+                    }
+                }else{
+                    UtilService.setCookie("regFlag",$scope.flag,7);
+                    UtilService.setCookie("regEmail",$scope.newemail,7);
+                    $scope.registerEmail = $scope.newemail;
+                    window.location.href = "activation.html";
+                }
+            });
+        }
+        $scope.keyEvt= function(e){
+            if(e.keyCode == 13){
+                $scope.save();
+            }
+        }
+    }
+})();
\ No newline at end of file
diff --git a/src/main/websrc/js/login/echarts-all.js b/src/main/websrc/js/login/echarts-all.js
new file mode 100644
index 0000000..b28a580
--- /dev/null
+++ b/src/main/websrc/js/login/echarts-all.js
@@ -0,0 +1,35 @@
+!function(e){var t,i;!function(){function e(e,t){if(!t)return e;if(0===e.indexOf(".")){var i=t.split("/"),n=e.split("/"),a=i.length-1,o=n.length,r=0,s=0;e:for(var l=0;o>l;l++)switch(n[l]){case"..":if(!(a>r))break e;r++,s++;break;case".":s++;break;default:break e}return i.length=a-r,n=n.slice(s),i.concat(n).join("/")}return e}function n(t){function i(i,r){if("string"==typeof i){var s=n[i];return s||(s=o(e(i,t)),n[i]=s),s}i instanceof Array&&(r=r||function(){},r.apply(this,a(i,r,t)))}var n={};return i}function a(i,n,a){for(var s=[],l=r[a],h=0,m=Math.min(i.length,n.length);m>h;h++){var V,U=e(i[h],a);switch(U){case"require":V=l&&l.require||t;break;case"exports":V=l.exports;break;case"module":V=l;break;default:V=o(U)}s.push(V)}return s}function o(e){var t=r[e];if(!t)throw new Error("No "+e);if(!t.defined){var i=t.factory,n=i.apply(this,a(t.deps||[],i,e));"undefined"!=typeof n&&(t.exports=n),t.defined=1}return t.exports}var r={};i=function(e,t,i){r[e]={id:e,deps:t,factory:i,defined:0,exports:{},require:n(e)}},t=n("")}(),i("echarts",["echarts/echarts"],function(e){return e}),i("echarts/echarts",["require","./config","zrender/tool/util","zrender/tool/event","zrender/tool/env","zrender","zrender/config","./chart/island","./component/toolbox","./component","./component/title","./component/tooltip","./component/legend","./util/ecData","./chart","zrender/tool/color","./component/timeline","zrender/shape/Image","zrender/loadingEffect/Bar","zrender/loadingEffect/Bubble","zrender/loadingEffect/DynamicLine","zrender/loadingEffect/Ring","zrender/loadingEffect/Spin","zrender/loadingEffect/Whirling","./theme/macarons","./theme/infographic"],function(e){function t(){r.Dispatcher.call(this)}function i(e){e.innerHTML="",this._themeConfig={},this.dom=e,this._connected=!1,this._status={dragIn:!1,dragOut:!1,needRefresh:!1},this._curEventType=!1,this._chartList=[],this._messageCenter=new t,this._messageCenterOutSide=new t,this.resize=this.resize(),this._init()}function n(e,t,i,n,a){for(var o=e._chartList,r=o.length;r--;){var s=o[r];"function"==typeof s[t]&&s[t](i,n,a)}}var a=e("./config"),o=e("zrender/tool/util"),r=e("zrender/tool/event"),s={},l=e("zrender/tool/env").canvasSupported,h=new Date-0,m={},V="_echarts_instance_";s.version="2.2.7",s.dependencies={zrender:"2.1.1"},s.init=function(t,n){var a=e("zrender");a.version.replace(".","")-0<s.dependencies.zrender.replace(".","")-0&&console.error("ZRender "+a.version+" is too old for ECharts "+s.version+". Current version need ZRender "+s.dependencies.zrender+"+"),t=t instanceof Array?t[0]:t;var o=t.getAttribute(V);return o||(o=h++,t.setAttribute(V,o)),m[o]&&m[o].dispose(),m[o]=new i(t),m[o].id=o,m[o].canvasSupported=l,m[o].setTheme(n),m[o]},s.getInstanceById=function(e){return m[e]},o.merge(t.prototype,r.Dispatcher.prototype,!0);var U=e("zrender/config").EVENT,d=["CLICK","DBLCLICK","MOUSEOVER","MOUSEOUT","DRAGSTART","DRAGEND","DRAGENTER","DRAGOVER","DRAGLEAVE","DROP"];return i.prototype={_init:function(){var t=this,i=e("zrender").init(this.dom);this._zr=i,this._messageCenter.dispatch=function(e,i,n,a){n=n||{},n.type=e,n.event=i,t._messageCenter.dispatchWithContext(e,n,a),t._messageCenterOutSide.dispatchWithContext(e,n,a)},this._onevent=function(e){return t.__onevent(e)};for(var n in a.EVENT)"CLICK"!=n&&"DBLCLICK"!=n&&"HOVER"!=n&&"MOUSEOUT"!=n&&"MAP_ROAM"!=n&&this._messageCenter.bind(a.EVENT[n],this._onevent,this);var o={};this._onzrevent=function(e){return t[o[e.type]](e)};for(var r=0,s=d.length;s>r;r++){var l=d[r],h=U[l];o[h]="_on"+l.toLowerCase(),i.on(h,this._onzrevent)}this.chart={},this.component={};var m=e("./chart/island");this._island=new m(this._themeConfig,this._messageCenter,i,{},this),this.chart.island=this._island;var V=e("./component/toolbox");this._toolbox=new V(this._themeConfig,this._messageCenter,i,{},this),this.component.toolbox=this._toolbox;var p=e("./component");p.define("title",e("./component/title")),p.define("tooltip",e("./component/tooltip")),p.define("legend",e("./component/legend")),(0===i.getWidth()||0===i.getHeight())&&console.error("Dom’s width & height should be ready before init.")},__onevent:function(e){e.__echartsId=e.__echartsId||this.id;var t=e.__echartsId===this.id;switch(this._curEventType||(this._curEventType=e.type),e.type){case a.EVENT.LEGEND_SELECTED:this._onlegendSelected(e);break;case a.EVENT.DATA_ZOOM:if(!t){var i=this.component.dataZoom;i&&(i.silence(!0),i.absoluteZoom(e.zoom),i.silence(!1))}this._ondataZoom(e);break;case a.EVENT.DATA_RANGE:t&&this._ondataRange(e);break;case a.EVENT.MAGIC_TYPE_CHANGED:if(!t){var n=this.component.toolbox;n&&(n.silence(!0),n.setMagicType(e.magicType),n.silence(!1))}this._onmagicTypeChanged(e);break;case a.EVENT.DATA_VIEW_CHANGED:t&&this._ondataViewChanged(e);break;case a.EVENT.TOOLTIP_HOVER:t&&this._tooltipHover(e);break;case a.EVENT.RESTORE:this._onrestore();break;case a.EVENT.REFRESH:t&&this._onrefresh(e);break;case a.EVENT.TOOLTIP_IN_GRID:case a.EVENT.TOOLTIP_OUT_GRID:if(t){if(this._connected){var o=this.component.grid;o&&(e.x=(e.event.zrenderX-o.getX())/o.getWidth(),e.y=(e.event.zrenderY-o.getY())/o.getHeight())}}else{var o=this.component.grid;o&&this._zr.trigger("mousemove",{connectTrigger:!0,zrenderX:o.getX()+e.x*o.getWidth(),zrenderY:o.getY()+e.y*o.getHeight()})}}if(this._connected&&t&&this._curEventType===e.type){for(var r in this._connected)this._connected[r].connectedEventHandler(e);this._curEventType=null}(!t||!this._connected&&t)&&(this._curEventType=null)},_onclick:function(e){if(n(this,"onclick",e),e.target){var t=this._eventPackage(e.target);t&&null!=t.seriesIndex&&this._messageCenter.dispatch(a.EVENT.CLICK,e.event,t,this)}},_ondblclick:function(e){if(n(this,"ondblclick",e),e.target){var t=this._eventPackage(e.target);t&&null!=t.seriesIndex&&this._messageCenter.dispatch(a.EVENT.DBLCLICK,e.event,t,this)}},_onmouseover:function(e){if(e.target){var t=this._eventPackage(e.target);t&&null!=t.seriesIndex&&this._messageCenter.dispatch(a.EVENT.HOVER,e.event,t,this)}},_onmouseout:function(e){if(e.target){var t=this._eventPackage(e.target);t&&null!=t.seriesIndex&&this._messageCenter.dispatch(a.EVENT.MOUSEOUT,e.event,t,this)}},_ondragstart:function(e){this._status={dragIn:!1,dragOut:!1,needRefresh:!1},n(this,"ondragstart",e)},_ondragenter:function(e){n(this,"ondragenter",e)},_ondragover:function(e){n(this,"ondragover",e)},_ondragleave:function(e){n(this,"ondragleave",e)},_ondrop:function(e){n(this,"ondrop",e,this._status),this._island.ondrop(e,this._status)},_ondragend:function(e){if(n(this,"ondragend",e,this._status),this._timeline&&this._timeline.ondragend(e,this._status),this._island.ondragend(e,this._status),this._status.needRefresh){this._syncBackupData(this._option);var t=this._messageCenter;t.dispatch(a.EVENT.DATA_CHANGED,e.event,this._eventPackage(e.target),this),t.dispatch(a.EVENT.REFRESH,null,null,this)}},_onlegendSelected:function(e){this._status.needRefresh=!1,n(this,"onlegendSelected",e,this._status),this._status.needRefresh&&this._messageCenter.dispatch(a.EVENT.REFRESH,null,null,this)},_ondataZoom:function(e){this._status.needRefresh=!1,n(this,"ondataZoom",e,this._status),this._status.needRefresh&&this._messageCenter.dispatch(a.EVENT.REFRESH,null,null,this)},_ondataRange:function(e){this._clearEffect(),this._status.needRefresh=!1,n(this,"ondataRange",e,this._status),this._status.needRefresh&&this._zr.refreshNextFrame()},_onmagicTypeChanged:function(){this._clearEffect(),this._render(this._toolbox.getMagicOption())},_ondataViewChanged:function(e){this._syncBackupData(e.option),this._messageCenter.dispatch(a.EVENT.DATA_CHANGED,null,e,this),this._messageCenter.dispatch(a.EVENT.REFRESH,null,null,this)},_tooltipHover:function(e){var t=[];n(this,"ontooltipHover",e,t)},_onrestore:function(){this.restore()},_onrefresh:function(e){this._refreshInside=!0,this.refresh(e),this._refreshInside=!1},_syncBackupData:function(e){this.component.dataZoom&&this.component.dataZoom.syncBackupData(e)},_eventPackage:function(t){if(t){var i=e("./util/ecData"),n=i.get(t,"seriesIndex"),a=i.get(t,"dataIndex");return a=-1!=n&&this.component.dataZoom?this.component.dataZoom.getRealDataIndex(n,a):a,{seriesIndex:n,seriesName:(i.get(t,"series")||{}).name,dataIndex:a,data:i.get(t,"data"),name:i.get(t,"name"),value:i.get(t,"value"),special:i.get(t,"special")}}},_noDataCheck:function(e){for(var t=e.series,i=0,n=t.length;n>i;i++)if(t[i].type==a.CHART_TYPE_MAP||t[i].data&&t[i].data.length>0||t[i].markPoint&&t[i].markPoint.data&&t[i].markPoint.data.length>0||t[i].markLine&&t[i].markLine.data&&t[i].markLine.data.length>0||t[i].nodes&&t[i].nodes.length>0||t[i].links&&t[i].links.length>0||t[i].matrix&&t[i].matrix.length>0||t[i].eventList&&t[i].eventList.length>0)return!1;var o=this._option&&this._option.noDataLoadingOption||this._themeConfig.noDataLoadingOption||a.noDataLoadingOption||{text:this._option&&this._option.noDataText||this._themeConfig.noDataText||a.noDataText,effect:this._option&&this._option.noDataEffect||this._themeConfig.noDataEffect||a.noDataEffect};return this.clear(),this.showLoading(o),!0},_render:function(t){if(this._mergeGlobalConifg(t),!this._noDataCheck(t)){var i=t.backgroundColor;if(i)if(l||-1==i.indexOf("rgba"))this.dom.style.backgroundColor=i;else{var n=i.split(",");this.dom.style.filter="alpha(opacity="+100*n[3].substring(0,n[3].lastIndexOf(")"))+")",n.length=3,n[0]=n[0].replace("a",""),this.dom.style.backgroundColor=n.join(",")+")"}this._zr.clearAnimation(),this._chartList=[];var o=e("./chart"),r=e("./component");(t.xAxis||t.yAxis)&&(t.grid=t.grid||{},t.dataZoom=t.dataZoom||{});for(var s,h,m,V=["title","legend","tooltip","dataRange","roamController","grid","dataZoom","xAxis","yAxis","polar"],U=0,d=V.length;d>U;U++)h=V[U],m=this.component[h],t[h]?(m?m.refresh&&m.refresh(t):(s=r.get(/^[xy]Axis$/.test(h)?"axis":h),m=new s(this._themeConfig,this._messageCenter,this._zr,t,this,h),this.component[h]=m),this._chartList.push(m)):m&&(m.dispose(),this.component[h]=null,delete this.component[h]);for(var p,c,u,y={},U=0,d=t.series.length;d>U;U++)c=t.series[U].type,c?y[c]||(y[c]=!0,p=o.get(c),p?(this.chart[c]?(u=this.chart[c],u.refresh(t)):u=new p(this._themeConfig,this._messageCenter,this._zr,t,this),this._chartList.push(u),this.chart[c]=u):console.error(c+" has not been required.")):console.error("series["+U+"] chart type has not been defined.");for(c in this.chart)c==a.CHART_TYPE_ISLAND||y[c]||(this.chart[c].dispose(),this.chart[c]=null,delete this.chart[c]);this.component.grid&&this.component.grid.refixAxisShape(this.component),this._island.refresh(t),this._toolbox.refresh(t),t.animation&&!t.renderAsImage?this._zr.refresh():this._zr.render();var g="IMG"+this.id,b=document.getElementById(g);t.renderAsImage&&l?(b?b.src=this.getDataURL(t.renderAsImage):(b=this.getImage(t.renderAsImage),b.id=g,b.style.position="absolute",b.style.left=0,b.style.top=0,this.dom.firstChild.appendChild(b)),this.un(),this._zr.un(),this._disposeChartList(),this._zr.clear()):b&&b.parentNode.removeChild(b),b=null,this._option=t}},restore:function(){this._clearEffect(),this._option=o.clone(this._optionRestore),this._disposeChartList(),this._island.clear(),this._toolbox.reset(this._option,!0),this._render(this._option)},refresh:function(e){this._clearEffect(),e=e||{};var t=e.option;!this._refreshInside&&t&&(t=this.getOption(),o.merge(t,e.option,!0),o.merge(this._optionRestore,e.option,!0),this._toolbox.reset(t)),this._island.refresh(t),this._toolbox.refresh(t),this._zr.clearAnimation();for(var i=0,n=this._chartList.length;n>i;i++)this._chartList[i].refresh&&this._chartList[i].refresh(t);this.component.grid&&this.component.grid.refixAxisShape(this.component),this._zr.refresh()},_disposeChartList:function(){this._clearEffect(),this._zr.clearAnimation();for(var e=this._chartList.length;e--;){var t=this._chartList[e];if(t){var i=t.type;this.chart[i]&&delete this.chart[i],this.component[i]&&delete this.component[i],t.dispose&&t.dispose()}}this._chartList=[]},_mergeGlobalConifg:function(t){for(var i=["backgroundColor","calculable","calculableColor","calculableHolderColor","nameConnector","valueConnector","animation","animationThreshold","animationDuration","animationDurationUpdate","animationEasing","addDataAnimation","symbolList","DRAG_ENABLE_TIME"],n=i.length;n--;){var o=i[n];null==t[o]&&(t[o]=null!=this._themeConfig[o]?this._themeConfig[o]:a[o])}var r=t.color;r&&r.length||(r=this._themeConfig.color||a.color),this._zr.getColor=function(t){var i=e("zrender/tool/color");return i.getColor(t,r)},l||(t.animation=!1,t.addDataAnimation=!1)},setOption:function(e,t){return e.timeline?this._setTimelineOption(e):this._setOption(e,t)},_setOption:function(e,t,i){return!t&&this._option?this._option=o.merge(this.getOption(),o.clone(e),!0):(this._option=o.clone(e),!i&&this._timeline&&this._timeline.dispose()),this._optionRestore=o.clone(this._option),this._option.series&&0!==this._option.series.length?(this.component.dataZoom&&(this._option.dataZoom||this._option.toolbox&&this._option.toolbox.feature&&this._option.toolbox.feature.dataZoom&&this._option.toolbox.feature.dataZoom.show)&&this.component.dataZoom.syncOption(this._option),this._toolbox.reset(this._option),this._render(this._option),this):void this._zr.clear()},getOption:function(){function e(e){var n=i._optionRestore[e];if(n)if(n instanceof Array)for(var a=n.length;a--;)t[e][a].data=o.clone(n[a].data);else t[e].data=o.clone(n.data)}var t=o.clone(this._option),i=this;return e("xAxis"),e("yAxis"),e("series"),t},setSeries:function(e,t){return t?(this._option.series=e,this.setOption(this._option,t)):this.setOption({series:e}),this},getSeries:function(){return this.getOption().series},_setTimelineOption:function(t){this._timeline&&this._timeline.dispose();var i=e("./component/timeline"),n=new i(this._themeConfig,this._messageCenter,this._zr,t,this);return this._timeline=n,this.component.timeline=this._timeline,this},addData:function(e,t,i,n,r){function s(){if(V._zr){V._zr.clearAnimation();for(var e=0,t=X.length;t>e;e++)X[e].motionlessOnce=h.addDataAnimation&&X[e].addDataAnimation;V._messageCenter.dispatch(a.EVENT.REFRESH,null,{option:h},V)}}for(var l=e instanceof Array?e:[[e,t,i,n,r]],h=this.getOption(),m=this._optionRestore,V=this,U=0,d=l.length;d>U;U++){e=l[U][0],t=l[U][1],i=l[U][2],n=l[U][3],r=l[U][4];var p=m.series[e],c=i?"unshift":"push",u=i?"pop":"shift";if(p){var y=p.data,g=h.series[e].data;if(y[c](t),g[c](t),n||(y[u](),t=g[u]()),null!=r){var b,f;if(p.type===a.CHART_TYPE_PIE&&(b=m.legend)&&(f=b.data)){var k=h.legend.data;if(f[c](r),k[c](r),!n){var x=o.indexOf(f,t.name);-1!=x&&f.splice(x,1),x=o.indexOf(k,t.name),-1!=x&&k.splice(x,1)}}else if(null!=m.xAxis&&null!=m.yAxis){var _,L,W=p.xAxisIndex||0;(null==m.xAxis[W].type||"category"===m.xAxis[W].type)&&(_=m.xAxis[W].data,L=h.xAxis[W].data,_[c](r),L[c](r),n||(_[u](),L[u]())),W=p.yAxisIndex||0,"category"===m.yAxis[W].type&&(_=m.yAxis[W].data,L=h.yAxis[W].data,_[c](r),L[c](r),n||(_[u](),L[u]()))}}this._option.series[e].data=h.series[e].data}}this._zr.clearAnimation();for(var X=this._chartList,v=0,w=function(){v--,0===v&&s()},U=0,d=X.length;d>U;U++)h.addDataAnimation&&X[U].addDataAnimation&&(v++,X[U].addDataAnimation(l,w));return this.component.dataZoom&&this.component.dataZoom.syncOption(h),this._option=h,h.addDataAnimation||setTimeout(s,0),this},addMarkPoint:function(e,t){return this._addMark(e,t,"markPoint")},addMarkLine:function(e,t){return this._addMark(e,t,"markLine")},_addMark:function(e,t,i){var n,a=this._option.series;if(a&&(n=a[e])){var r=this._optionRestore.series,s=r[e],l=n[i],h=s[i];l=n[i]=l||{data:[]},h=s[i]=h||{data:[]};for(var m in t)"data"===m?(l.data=l.data.concat(t.data),h.data=h.data.concat(t.data)):"object"!=typeof t[m]||null==l[m]?l[m]=h[m]=t[m]:(o.merge(l[m],t[m],!0),o.merge(h[m],t[m],!0));var V=this.chart[n.type];V&&V.addMark(e,t,i)}return this},delMarkPoint:function(e,t){return this._delMark(e,t,"markPoint")},delMarkLine:function(e,t){return this._delMark(e,t,"markLine")},_delMark:function(e,t,i){var n,a,o,r=this._option.series;if(!(r&&(n=r[e])&&(a=n[i])&&(o=a.data)))return this;t=t.split(" > ");for(var s=-1,l=0,h=o.length;h>l;l++){var m=o[l];if(m instanceof Array){if(m[0].name===t[0]&&m[1].name===t[1]){s=l;break}}else if(m.name===t[0]){s=l;break}}if(s>-1){o.splice(s,1),this._optionRestore.series[e][i].data.splice(s,1);var V=this.chart[n.type];V&&V.delMark(e,t.join(" > "),i)}return this},getDom:function(){return this.dom},getZrender:function(){return this._zr},getDataURL:function(e){if(!l)return"";if(0===this._chartList.length){var t="IMG"+this.id,i=document.getElementById(t);if(i)return i.src}var n=this.component.tooltip;switch(n&&n.hideTip(),e){case"jpeg":break;default:e="png"}var a=this._option.backgroundColor;return a&&"rgba(0,0,0,0)"===a.replace(" ","")&&(a="#fff"),this._zr.toDataURL("image/"+e,a)},getImage:function(e){var t=this._optionRestore.title,i=document.createElement("img");return i.src=this.getDataURL(e),i.title=t&&t.text||"ECharts",i},getConnectedDataURL:function(t){if(!this.isConnected())return this.getDataURL(t);var i=this.dom,n={self:{img:this.getDataURL(t),left:i.offsetLeft,top:i.offsetTop,right:i.offsetLeft+i.offsetWidth,bottom:i.offsetTop+i.offsetHeight}},a=n.self.left,o=n.self.top,r=n.self.right,s=n.self.bottom;for(var l in this._connected)i=this._connected[l].getDom(),n[l]={img:this._connected[l].getDataURL(t),left:i.offsetLeft,top:i.offsetTop,right:i.offsetLeft+i.offsetWidth,bottom:i.offsetTop+i.offsetHeight},a=Math.min(a,n[l].left),o=Math.min(o,n[l].top),r=Math.max(r,n[l].right),s=Math.max(s,n[l].bottom);var h=document.createElement("div");h.style.position="absolute",h.style.left="-4000px",h.style.width=r-a+"px",h.style.height=s-o+"px",document.body.appendChild(h);var m=e("zrender").init(h),V=e("zrender/shape/Image");for(var l in n)m.addShape(new V({style:{x:n[l].left-a,y:n[l].top-o,image:n[l].img}}));m.render();var U=this._option.backgroundColor;U&&"rgba(0,0,0,0)"===U.replace(/ /g,"")&&(U="#fff");var d=m.toDataURL("image/png",U);return setTimeout(function(){m.dispose(),h.parentNode.removeChild(h),h=null},100),d},getConnectedImage:function(e){var t=this._optionRestore.title,i=document.createElement("img");return i.src=this.getConnectedDataURL(e),i.title=t&&t.text||"ECharts",i},on:function(e,t){return this._messageCenterOutSide.bind(e,t,this),this},un:function(e,t){return this._messageCenterOutSide.unbind(e,t),this},connect:function(e){if(!e)return this;if(this._connected||(this._connected={}),e instanceof Array)for(var t=0,i=e.length;i>t;t++)this._connected[e[t].id]=e[t];else this._connected[e.id]=e;return this},disConnect:function(e){if(!e||!this._connected)return this;if(e instanceof Array)for(var t=0,i=e.length;i>t;t++)delete this._connected[e[t].id];else delete this._connected[e.id];for(var n in this._connected)return this;return this._connected=!1,this},connectedEventHandler:function(e){e.__echartsId!=this.id&&this._onevent(e)},isConnected:function(){return!!this._connected},showLoading:function(t){var i={bar:e("zrender/loadingEffect/Bar"),bubble:e("zrender/loadingEffect/Bubble"),dynamicLine:e("zrender/loadingEffect/DynamicLine"),ring:e("zrender/loadingEffect/Ring"),spin:e("zrender/loadingEffect/Spin"),whirling:e("zrender/loadingEffect/Whirling")};this._toolbox.hideDataView(),t=t||{};var n=t.textStyle||{};t.textStyle=n;var r=o.merge(o.merge(o.clone(n),this._themeConfig.textStyle),a.textStyle);n.textFont=r.fontStyle+" "+r.fontWeight+" "+r.fontSize+"px "+r.fontFamily,n.text=t.text||this._option&&this._option.loadingText||this._themeConfig.loadingText||a.loadingText,null!=t.x&&(n.x=t.x),null!=t.y&&(n.y=t.y),t.effectOption=t.effectOption||{},t.effectOption.textStyle=n;var s=t.effect;return("string"==typeof s||null==s)&&(s=i[t.effect||this._option&&this._option.loadingEffect||this._themeConfig.loadingEffect||a.loadingEffect]||i.spin),this._zr.showLoading(new s(t.effectOption)),this},hideLoading:function(){return this._zr.hideLoading(),this},setTheme:function(t){if(t){if("string"==typeof t)switch(t){case"macarons":t=e("./theme/macarons");break;case"infographic":t=e("./theme/infographic");break;default:t={}}else t=t||{};this._themeConfig=t}if(!l){var i=this._themeConfig.textStyle;i&&i.fontFamily&&i.fontFamily2&&(i.fontFamily=i.fontFamily2),i=a.textStyle,i.fontFamily=i.fontFamily2}this._timeline&&this._timeline.setTheme(!0),this._optionRestore&&this.restore()},resize:function(){var e=this;return function(){if(e._clearEffect(),e._zr.resize(),e._option&&e._option.renderAsImage&&l)return e._render(e._option),e;e._zr.clearAnimation(),e._island.resize(),e._toolbox.resize(),e._timeline&&e._timeline.resize();for(var t=0,i=e._chartList.length;i>t;t++)e._chartList[t].resize&&e._chartList[t].resize();return e.component.grid&&e.component.grid.refixAxisShape(e.component),e._zr.refresh(),e._messageCenter.dispatch(a.EVENT.RESIZE,null,null,e),e}},_clearEffect:function(){this._zr.modLayer(a.EFFECT_ZLEVEL,{motionBlur:!1}),this._zr.painter.clearLayer(a.EFFECT_ZLEVEL)},clear:function(){return this._disposeChartList(),this._zr.clear(),this._option={},this._optionRestore={},this.dom.style.backgroundColor=null,this},dispose:function(){var e=this.dom.getAttribute(V);e&&delete m[e],this._island.dispose(),this._toolbox.dispose(),this._timeline&&this._timeline.dispose(),this._messageCenter.unbind(),this.clear(),this._zr.dispose(),this._zr=null}},s}),i("echarts/config",[],function(){var e={CHART_TYPE_LINE:"line",CHART_TYPE_BAR:"bar",CHART_TYPE_SCATTER:"scatter",CHART_TYPE_PIE:"pie",CHART_TYPE_RADAR:"radar",CHART_TYPE_VENN:"venn",CHART_TYPE_TREEMAP:"treemap",CHART_TYPE_TREE:"tree",CHART_TYPE_MAP:"map",CHART_TYPE_K:"k",CHART_TYPE_ISLAND:"island",CHART_TYPE_FORCE:"force",CHART_TYPE_CHORD:"chord",CHART_TYPE_GAUGE:"gauge",CHART_TYPE_FUNNEL:"funnel",CHART_TYPE_EVENTRIVER:"eventRiver",CHART_TYPE_WORDCLOUD:"wordCloud",CHART_TYPE_HEATMAP:"heatmap",COMPONENT_TYPE_TITLE:"title",COMPONENT_TYPE_LEGEND:"legend",COMPONENT_TYPE_DATARANGE:"dataRange",COMPONENT_TYPE_DATAVIEW:"dataView",COMPONENT_TYPE_DATAZOOM:"dataZoom",COMPONENT_TYPE_TOOLBOX:"toolbox",COMPONENT_TYPE_TOOLTIP:"tooltip",COMPONENT_TYPE_GRID:"grid",COMPONENT_TYPE_AXIS:"axis",COMPONENT_TYPE_POLAR:"polar",COMPONENT_TYPE_X_AXIS:"xAxis",COMPONENT_TYPE_Y_AXIS:"yAxis",COMPONENT_TYPE_AXIS_CATEGORY:"categoryAxis",COMPONENT_TYPE_AXIS_VALUE:"valueAxis",COMPONENT_TYPE_TIMELINE:"timeline",COMPONENT_TYPE_ROAMCONTROLLER:"roamController",backgroundColor:"rgba(0,0,0,0)",color:["#ff7f50","#87cefa","#da70d6","#32cd32","#6495ed","#ff69b4","#ba55d3","#cd5c5c","#ffa500","#40e0d0","#1e90ff","#ff6347","#7b68ee","#00fa9a","#ffd700","#6699FF","#ff6666","#3cb371","#b8860b","#30e0e0"],markPoint:{clickable:!0,symbol:"pin",symbolSize:10,large:!1,effect:{show:!1,loop:!0,period:15,type:"scale",scaleSize:2,bounceDistance:10},itemStyle:{normal:{borderWidth:2,label:{show:!0,position:"inside"}},emphasis:{label:{show:!0}}}},markLine:{clickable:!0,symbol:["circle","arrow"],symbolSize:[2,4],smoothness:.2,precision:2,effect:{show:!1,loop:!0,period:15,scaleSize:2},bundling:{enable:!1,maxTurningAngle:45},itemStyle:{normal:{borderWidth:1.5,label:{show:!0,position:"end"},lineStyle:{type:"dashed"}},emphasis:{label:{show:!1},lineStyle:{}}}},textStyle:{decoration:"none",fontFamily:"Arial, Verdana, sans-serif",fontFamily2:"微软雅黑",fontSize:12,fontStyle:"normal",fontWeight:"normal"},EVENT:{REFRESH:"refresh",RESTORE:"restore",RESIZE:"resize",CLICK:"click",DBLCLICK:"dblclick",HOVER:"hover",MOUSEOUT:"mouseout",DATA_CHANGED:"dataChanged",DATA_ZOOM:"dataZoom",DATA_RANGE:"dataRange",DATA_RANGE_SELECTED:"dataRangeSelected",DATA_RANGE_HOVERLINK:"dataRangeHoverLink",LEGEND_SELECTED:"legendSelected",LEGEND_HOVERLINK:"legendHoverLink",MAP_SELECTED:"mapSelected",PIE_SELECTED:"pieSelected",MAGIC_TYPE_CHANGED:"magicTypeChanged",DATA_VIEW_CHANGED:"dataViewChanged",TIMELINE_CHANGED:"timelineChanged",MAP_ROAM:"mapRoam",FORCE_LAYOUT_END:"forceLayoutEnd",TOOLTIP_HOVER:"tooltipHover",TOOLTIP_IN_GRID:"tooltipInGrid",TOOLTIP_OUT_GRID:"tooltipOutGrid",ROAMCONTROLLER:"roamController"},DRAG_ENABLE_TIME:120,EFFECT_ZLEVEL:10,effectBlendAlpha:.95,symbolList:["circle","rectangle","triangle","diamond","emptyCircle","emptyRectangle","emptyTriangle","emptyDiamond"],loadingEffect:"spin",loadingText:"数据读取中...",noDataEffect:"bubble",noDataText:"暂无数据",calculable:!1,calculableColor:"rgba(255,165,0,0.6)",calculableHolderColor:"#ccc",nameConnector:" & ",valueConnector:": ",animation:!0,addDataAnimation:!0,animationThreshold:2e3,animationDuration:2e3,animationDurationUpdate:500,animationEasing:"ExponentialOut"};return e}),i("zrender/tool/util",["require","../dep/excanvas"],function(e){function t(e){return e&&1===e.nodeType&&"string"==typeof e.nodeName}function i(e){if("object"==typeof e&&null!==e){var n=e;if(e instanceof Array){n=[];for(var a=0,o=e.length;o>a;a++)n[a]=i(e[a])}else if(!y[g.call(e)]&&!t(e)){n={};for(var r in e)e.hasOwnProperty(r)&&(n[r]=i(e[r]))}return n}return e}function n(e,i,n,o){if(i.hasOwnProperty(n)){var r=e[n];"object"!=typeof r||y[g.call(r)]||t(r)?!o&&n in e||(e[n]=i[n]):a(e[n],i[n],o)}}function a(e,t,i){for(var a in t)n(e,t,a,i);return e}function o(){if(!U)if(e("../dep/excanvas"),window.G_vmlCanvasManager){var t=document.createElement("div");t.style.position="absolute",t.style.top="-1000px",document.body.appendChild(t),U=G_vmlCanvasManager.initElement(t).getContext("2d")}else U=document.createElement("canvas").getContext("2d");return U}function r(e,t){if(e.indexOf)return e.indexOf(t);for(var i=0,n=e.length;n>i;i++)if(e[i]===t)return i;return-1}function s(e,t){function i(){}var n=e.prototype;i.prototype=t.prototype,e.prototype=new i;for(var a in n)e.prototype[a]=n[a];e.constructor=e}function l(e,t,i){if(e&&t)if(e.forEach&&e.forEach===p)e.forEach(t,i);else if(e.length===+e.length)for(var n=0,a=e.length;a>n;n++)t.call(i,e[n],n,e);else for(var o in e)e.hasOwnProperty(o)&&t.call(i,e[o],o,e)}function h(e,t,i){if(e&&t){if(e.map&&e.map===c)return e.map(t,i);for(var n=[],a=0,o=e.length;o>a;a++)n.push(t.call(i,e[a],a,e));return n}}function m(e,t,i){if(e&&t){if(e.filter&&e.filter===u)return e.filter(t,i);for(var n=[],a=0,o=e.length;o>a;a++)t.call(i,e[a],a,e)&&n.push(e[a]);return n}}function V(e,t){return function(){e.apply(t,arguments)}}var U,d=Array.prototype,p=d.forEach,c=d.map,u=d.filter,y={"[object Function]":1,"[object RegExp]":1,"[object Date]":1,"[object Error]":1,"[object CanvasGradient]":1},g=Object.prototype.toString;return{inherits:s,clone:i,merge:a,getContext:o,indexOf:r,each:l,map:h,filter:m,bind:V}}),i("zrender/tool/event",["require","../mixin/Eventful"],function(e){"use strict";function t(e){return"undefined"!=typeof e.zrenderX&&e.zrenderX||"undefined"!=typeof e.offsetX&&e.offsetX||"undefined"!=typeof e.layerX&&e.layerX||"undefined"!=typeof e.clientX&&e.clientX}function i(e){return"undefined"!=typeof e.zrenderY&&e.zrenderY||"undefined"!=typeof e.offsetY&&e.offsetY||"undefined"!=typeof e.layerY&&e.layerY||"undefined"!=typeof e.clientY&&e.clientY}function n(e){return"undefined"!=typeof e.zrenderDelta&&e.zrenderDelta||"undefined"!=typeof e.wheelDelta&&e.wheelDelta||"undefined"!=typeof e.detail&&-e.detail}var a=e("../mixin/Eventful"),o="function"==typeof window.addEventListener?function(e){e.preventDefault(),e.stopPropagation(),e.cancelBubble=!0}:function(e){e.returnValue=!1,e.cancelBubble=!0};return{getX:t,getY:i,getDelta:n,stop:o,Dispatcher:a}}),i("zrender/tool/env",[],function(){function e(e){var t=this.os={},i=this.browser={},n=e.match(/Web[kK]it[\/]{0,1}([\d.]+)/),a=e.match(/(Android);?[\s\/]+([\d.]+)?/),o=e.match(/(iPad).*OS\s([\d_]+)/),r=e.match(/(iPod)(.*OS\s([\d_]+))?/),s=!o&&e.match(/(iPhone\sOS)\s([\d_]+)/),l=e.match(/(webOS|hpwOS)[\s\/]([\d.]+)/),h=l&&e.match(/TouchPad/),m=e.match(/Kindle\/([\d.]+)/),V=e.match(/Silk\/([\d._]+)/),U=e.match(/(BlackBerry).*Version\/([\d.]+)/),d=e.match(/(BB10).*Version\/([\d.]+)/),p=e.match(/(RIM\sTablet\sOS)\s([\d.]+)/),c=e.match(/PlayBook/),u=e.match(/Chrome\/([\d.]+)/)||e.match(/CriOS\/([\d.]+)/),y=e.match(/Firefox\/([\d.]+)/),g=e.match(/MSIE ([\d.]+)/),b=n&&e.match(/Mobile\//)&&!u,f=e.match(/(iPhone|iPod|iPad).*AppleWebKit(?!.*Safari)/)&&!u,g=e.match(/MSIE\s([\d.]+)/);return(i.webkit=!!n)&&(i.version=n[1]),a&&(t.android=!0,t.version=a[2]),s&&!r&&(t.ios=t.iphone=!0,t.version=s[2].replace(/_/g,".")),o&&(t.ios=t.ipad=!0,t.version=o[2].replace(/_/g,".")),r&&(t.ios=t.ipod=!0,t.version=r[3]?r[3].replace(/_/g,"."):null),l&&(t.webos=!0,t.version=l[2]),h&&(t.touchpad=!0),U&&(t.blackberry=!0,t.version=U[2]),d&&(t.bb10=!0,t.version=d[2]),p&&(t.rimtabletos=!0,t.version=p[2]),c&&(i.playbook=!0),m&&(t.kindle=!0,t.version=m[1]),V&&(i.silk=!0,i.version=V[1]),!V&&t.android&&e.match(/Kindle Fire/)&&(i.silk=!0),u&&(i.chrome=!0,i.version=u[1]),y&&(i.firefox=!0,i.version=y[1]),g&&(i.ie=!0,i.version=g[1]),b&&(e.match(/Safari/)||t.ios)&&(i.safari=!0),f&&(i.webview=!0),g&&(i.ie=!0,i.version=g[1]),t.tablet=!!(o||c||a&&!e.match(/Mobile/)||y&&e.match(/Tablet/)||g&&!e.match(/Phone/)&&e.match(/Touch/)),t.phone=!(t.tablet||t.ipod||!(a||s||l||U||d||u&&e.match(/Android/)||u&&e.match(/CriOS\/([\d.]+)/)||y&&e.match(/Mobile/)||g&&e.match(/Touch/))),{browser:i,os:t,canvasSupported:document.createElement("canvas").getContext?!0:!1}}return e(navigator.userAgent)}),i("zrender",["zrender/zrender"],function(e){return e}),i("zrender/zrender",["require","./dep/excanvas","./tool/util","./tool/log","./tool/guid","./Handler","./Painter","./Storage","./animation/Animation","./tool/env"],function(e){function t(e){return function(){e._needsRefreshNextFrame&&e.refresh()}}e("./dep/excanvas");var i=e("./tool/util"),n=e("./tool/log"),a=e("./tool/guid"),o=e("./Handler"),r=e("./Painter"),s=e("./Storage"),l=e("./animation/Animation"),h={},m={};m.version="2.1.1",m.init=function(e){var t=new V(a(),e);return h[t.id]=t,t},m.dispose=function(e){if(e)e.dispose();else{for(var t in h)h[t].dispose();h={}}return m},m.getInstance=function(e){return h[e]},m.delInstance=function(e){return delete h[e],m};var V=function(i,n){this.id=i,this.env=e("./tool/env"),this.storage=new s,this.painter=new r(n,this.storage),this.handler=new o(n,this.storage,this.painter),this.animation=new l({stage:{update:t(this)}}),this.animation.start();var a=this;this.painter.refreshNextFrame=function(){a.refreshNextFrame()},this._needsRefreshNextFrame=!1;var a=this,h=this.storage,m=h.delFromMap;h.delFromMap=function(e){var t=h.get(e);a.stopAnimation(t),m.call(h,e)}};return V.prototype.getId=function(){return this.id},V.prototype.addShape=function(e){return this.addElement(e),this},V.prototype.addGroup=function(e){return this.addElement(e),this},V.prototype.delShape=function(e){return this.delElement(e),this},V.prototype.delGroup=function(e){return this.delElement(e),this},V.prototype.modShape=function(e,t){return this.modElement(e,t),this},V.prototype.modGroup=function(e,t){return this.modElement(e,t),this},V.prototype.addElement=function(e){return this.storage.addRoot(e),this._needsRefreshNextFrame=!0,this},V.prototype.delElement=function(e){return this.storage.delRoot(e),this._needsRefreshNextFrame=!0,this},V.prototype.modElement=function(e,t){return this.storage.mod(e,t),this._needsRefreshNextFrame=!0,this},V.prototype.modLayer=function(e,t){return this.painter.modLayer(e,t),this._needsRefreshNextFrame=!0,this},V.prototype.addHoverShape=function(e){return this.storage.addHover(e),this},V.prototype.render=function(e){return this.painter.render(e),this._needsRefreshNextFrame=!1,this},V.prototype.refresh=function(e){return this.painter.refresh(e),this._needsRefreshNextFrame=!1,this},V.prototype.refreshNextFrame=function(){return this._needsRefreshNextFrame=!0,this},V.prototype.refreshHover=function(e){return this.painter.refreshHover(e),this},V.prototype.refreshShapes=function(e,t){return this.painter.refreshShapes(e,t),this},V.prototype.resize=function(){return this.painter.resize(),this},V.prototype.animate=function(e,t,a){var o=this;if("string"==typeof e&&(e=this.storage.get(e)),e){var r;if(t){for(var s=t.split("."),l=e,h=0,m=s.length;m>h;h++)l&&(l=l[s[h]]);l&&(r=l)}else r=e;if(!r)return void n('Property "'+t+'" is not existed in element '+e.id);
+
+null==e.__animators&&(e.__animators=[]);var V=e.__animators,U=this.animation.animate(r,{loop:a}).during(function(){o.modShape(e)}).done(function(){var t=i.indexOf(e.__animators,U);t>=0&&V.splice(t,1)});return V.push(U),U}n("Element not existed")},V.prototype.stopAnimation=function(e){if(e.__animators){for(var t=e.__animators,i=t.length,n=0;i>n;n++)t[n].stop();t.length=0}return this},V.prototype.clearAnimation=function(){return this.animation.clear(),this},V.prototype.showLoading=function(e){return this.painter.showLoading(e),this},V.prototype.hideLoading=function(){return this.painter.hideLoading(),this},V.prototype.getWidth=function(){return this.painter.getWidth()},V.prototype.getHeight=function(){return this.painter.getHeight()},V.prototype.toDataURL=function(e,t,i){return this.painter.toDataURL(e,t,i)},V.prototype.shapeToImage=function(e,t,i){var n=a();return this.painter.shapeToImage(n,e,t,i)},V.prototype.on=function(e,t,i){return this.handler.on(e,t,i),this},V.prototype.un=function(e,t){return this.handler.un(e,t),this},V.prototype.trigger=function(e,t){return this.handler.trigger(e,t),this},V.prototype.clear=function(){return this.storage.delRoot(),this.painter.clear(),this},V.prototype.dispose=function(){this.animation.stop(),this.clear(),this.storage.dispose(),this.painter.dispose(),this.handler.dispose(),this.animation=this.storage=this.painter=this.handler=null,m.delInstance(this.id)},m}),i("zrender/config",[],function(){var e={EVENT:{RESIZE:"resize",CLICK:"click",DBLCLICK:"dblclick",MOUSEWHEEL:"mousewheel",MOUSEMOVE:"mousemove",MOUSEOVER:"mouseover",MOUSEOUT:"mouseout",MOUSEDOWN:"mousedown",MOUSEUP:"mouseup",GLOBALOUT:"globalout",DRAGSTART:"dragstart",DRAGEND:"dragend",DRAGENTER:"dragenter",DRAGOVER:"dragover",DRAGLEAVE:"dragleave",DROP:"drop",touchClickDelay:300},elementClassName:"zr-element",catchBrushException:!1,debugMode:0,devicePixelRatio:Math.max(window.devicePixelRatio||1,1)};return e}),i("echarts/chart/island",["require","./base","zrender/shape/Circle","../config","../util/ecData","zrender/tool/util","zrender/tool/event","zrender/tool/color","../util/accMath","../chart"],function(e){function t(e,t,n,a,r){i.call(this,e,t,n,a,r),this._nameConnector,this._valueConnector,this._zrHeight=this.zr.getHeight(),this._zrWidth=this.zr.getWidth();var l=this;l.shapeHandler.onmousewheel=function(e){var t=e.target,i=e.event,n=s.getDelta(i);n=n>0?-1:1,t.style.r-=n,t.style.r=t.style.r<5?5:t.style.r;var a=o.get(t,"value"),r=a*l.option.island.calculateStep;a=r>1?Math.round(a-r*n):+(a-r*n).toFixed(2);var h=o.get(t,"name");t.style.text=h+":"+a,o.set(t,"value",a),o.set(t,"name",h),l.zr.modShape(t.id),l.zr.refreshNextFrame(),s.stop(i)}}var i=e("./base"),n=e("zrender/shape/Circle"),a=e("../config");a.island={zlevel:0,z:5,r:15,calculateStep:.1};var o=e("../util/ecData"),r=e("zrender/tool/util"),s=e("zrender/tool/event");return t.prototype={type:a.CHART_TYPE_ISLAND,_combine:function(t,i){var n=e("zrender/tool/color"),a=e("../util/accMath"),r=a.accAdd(o.get(t,"value"),o.get(i,"value")),s=o.get(t,"name")+this._nameConnector+o.get(i,"name");t.style.text=s+this._valueConnector+r,o.set(t,"value",r),o.set(t,"name",s),t.style.r=this.option.island.r,t.style.color=n.mix(t.style.color,i.style.color)},refresh:function(e){e&&(e.island=this.reformOption(e.island),this.option=e,this._nameConnector=this.option.nameConnector,this._valueConnector=this.option.valueConnector)},getOption:function(){return this.option},resize:function(){var e=this.zr.getWidth(),t=this.zr.getHeight(),i=e/(this._zrWidth||e),n=t/(this._zrHeight||t);if(1!==i||1!==n){this._zrWidth=e,this._zrHeight=t;for(var a=0,o=this.shapeList.length;o>a;a++)this.zr.modShape(this.shapeList[a].id,{style:{x:Math.round(this.shapeList[a].style.x*i),y:Math.round(this.shapeList[a].style.y*n)}})}},add:function(e){var t=o.get(e,"name"),i=o.get(e,"value"),a=null!=o.get(e,"series")?o.get(e,"series").name:"",r=this.getFont(this.option.island.textStyle),s=this.option.island,l={zlevel:s.zlevel,z:s.z,style:{x:e.style.x,y:e.style.y,r:this.option.island.r,color:e.style.color||e.style.strokeColor,text:t+this._valueConnector+i,textFont:r},draggable:!0,hoverable:!0,onmousewheel:this.shapeHandler.onmousewheel,_type:"island"};"#fff"===l.style.color&&(l.style.color=e.style.strokeColor),this.setCalculable(l),l.dragEnableTime=0,o.pack(l,{name:a},-1,i,-1,t),l=new n(l),this.shapeList.push(l),this.zr.addShape(l)},del:function(e){this.zr.delShape(e.id);for(var t=[],i=0,n=this.shapeList.length;n>i;i++)this.shapeList[i].id!=e.id&&t.push(this.shapeList[i]);this.shapeList=t},ondrop:function(e,t){if(this.isDrop&&e.target){var i=e.target,n=e.dragged;this._combine(i,n),this.zr.modShape(i.id),t.dragIn=!0,this.isDrop=!1}},ondragend:function(e,t){var i=e.target;this.isDragend?t.dragIn&&(this.del(i),t.needRefresh=!0):t.dragIn||(i.style.x=s.getX(e.event),i.style.y=s.getY(e.event),this.add(i),t.needRefresh=!0),this.isDragend=!1}},r.inherits(t,i),e("../chart").define("island",t),t}),i("echarts/component/toolbox",["require","./base","zrender/shape/Line","zrender/shape/Image","zrender/shape/Rectangle","../util/shape/Icon","../config","zrender/tool/util","zrender/config","zrender/tool/event","./dataView","../component"],function(e){function t(e,t,n,a,o){i.call(this,e,t,n,a,o),this.dom=o.dom,this._magicType={},this._magicMap={},this._isSilence=!1,this._iconList,this._iconShapeMap={},this._featureTitle={},this._featureIcon={},this._featureColor={},this._featureOption={},this._enableColor="red",this._disableColor="#ccc",this._markShapeList=[];var r=this;r._onMark=function(e){r.__onMark(e)},r._onMarkUndo=function(e){r.__onMarkUndo(e)},r._onMarkClear=function(e){r.__onMarkClear(e)},r._onDataZoom=function(e){r.__onDataZoom(e)},r._onDataZoomReset=function(e){r.__onDataZoomReset(e)},r._onDataView=function(e){r.__onDataView(e)},r._onRestore=function(e){r.__onRestore(e)},r._onSaveAsImage=function(e){r.__onSaveAsImage(e)},r._onMagicType=function(e){r.__onMagicType(e)},r._onCustomHandler=function(e){r.__onCustomHandler(e)},r._onmousemove=function(e){return r.__onmousemove(e)},r._onmousedown=function(e){return r.__onmousedown(e)},r._onmouseup=function(e){return r.__onmouseup(e)},r._onclick=function(e){return r.__onclick(e)}}var i=e("./base"),n=e("zrender/shape/Line"),a=e("zrender/shape/Image"),o=e("zrender/shape/Rectangle"),r=e("../util/shape/Icon"),s=e("../config");s.toolbox={zlevel:0,z:6,show:!1,orient:"horizontal",x:"right",y:"top",color:["#1e90ff","#22bb22","#4b0082","#d2691e"],disableColor:"#ddd",effectiveColor:"red",backgroundColor:"rgba(0,0,0,0)",borderColor:"#ccc",borderWidth:0,padding:5,itemGap:10,itemSize:16,showTitle:!0,feature:{mark:{show:!1,title:{mark:"辅助线开关",markUndo:"删除辅助线",markClear:"清空辅助线"},lineStyle:{width:1,color:"#1e90ff",type:"dashed"}},dataZoom:{show:!1,title:{dataZoom:"区域缩放",dataZoomReset:"区域缩放后退"}},dataView:{show:!1,title:"数据视图",readOnly:!1,lang:["数据视图","关闭","刷新"]},magicType:{show:!1,title:{line:"折线图切换",bar:"柱形图切换",stack:"堆积",tiled:"平铺",force:"力导向布局图切换",chord:"和弦图切换",pie:"饼图切换",funnel:"漏斗图切换"},type:[]},restore:{show:!1,title:"还原"},saveAsImage:{show:!1,title:"保存为图片",type:"png",lang:["点击保存"]}}};var l=e("zrender/tool/util"),h=e("zrender/config"),m=e("zrender/tool/event"),V="stack",U="tiled";return t.prototype={type:s.COMPONENT_TYPE_TOOLBOX,_buildShape:function(){this._iconList=[];var e=this.option.toolbox;this._enableColor=e.effectiveColor,this._disableColor=e.disableColor;var t=e.feature,i=[];for(var n in t)if(t[n].show)switch(n){case"mark":i.push({key:n,name:"mark"}),i.push({key:n,name:"markUndo"}),i.push({key:n,name:"markClear"});break;case"magicType":for(var a=0,o=t[n].type.length;o>a;a++)t[n].title[t[n].type[a]+"Chart"]=t[n].title[t[n].type[a]],t[n].option&&(t[n].option[t[n].type[a]+"Chart"]=t[n].option[t[n].type[a]]),i.push({key:n,name:t[n].type[a]+"Chart"});break;case"dataZoom":i.push({key:n,name:"dataZoom"}),i.push({key:n,name:"dataZoomReset"});break;case"saveAsImage":this.canvasSupported&&i.push({key:n,name:"saveAsImage"});break;default:i.push({key:n,name:n})}if(i.length>0){for(var r,n,a=0,o=i.length;o>a;a++)r=i[a].name,n=i[a].key,this._iconList.push(r),this._featureTitle[r]=t[n].title[r]||t[n].title,t[n].icon&&(this._featureIcon[r]=t[n].icon[r]||t[n].icon),t[n].color&&(this._featureColor[r]=t[n].color[r]||t[n].color),t[n].option&&(this._featureOption[r]=t[n].option[r]||t[n].option);this._itemGroupLocation=this._getItemGroupLocation(),this._buildBackground(),this._buildItem();for(var a=0,o=this.shapeList.length;o>a;a++)this.zr.addShape(this.shapeList[a]);this._iconShapeMap.mark&&(this._iconDisable(this._iconShapeMap.markUndo),this._iconDisable(this._iconShapeMap.markClear)),this._iconShapeMap.dataZoomReset&&0===this._zoomQueue.length&&this._iconDisable(this._iconShapeMap.dataZoomReset)}},_buildItem:function(){var t,i,n,o,s=this.option.toolbox,l=this._iconList.length,h=this._itemGroupLocation.x,m=this._itemGroupLocation.y,V=s.itemSize,U=s.itemGap,d=s.color instanceof Array?s.color:[s.color],p=this.getFont(s.textStyle);"horizontal"===s.orient?(i=this._itemGroupLocation.y/this.zr.getHeight()<.5?"bottom":"top",n=this._itemGroupLocation.x/this.zr.getWidth()<.5?"left":"right",o=this._itemGroupLocation.y/this.zr.getHeight()<.5?"top":"bottom"):i=this._itemGroupLocation.x/this.zr.getWidth()<.5?"right":"left",this._iconShapeMap={};for(var c=this,u=0;l>u;u++){switch(t={type:"icon",zlevel:this.getZlevelBase(),z:this.getZBase(),style:{x:h,y:m,width:V,height:V,iconType:this._iconList[u],lineWidth:1,strokeColor:this._featureColor[this._iconList[u]]||d[u%d.length],brushType:"stroke"},highlightStyle:{lineWidth:1,text:s.showTitle?this._featureTitle[this._iconList[u]]:void 0,textFont:p,textPosition:i,strokeColor:this._featureColor[this._iconList[u]]||d[u%d.length]},hoverable:!0,clickable:!0},this._featureIcon[this._iconList[u]]&&(t.style.image=this._featureIcon[this._iconList[u]].replace(new RegExp("^image:\\/\\/"),""),t.style.opacity=.8,t.highlightStyle.opacity=1,t.type="image"),"horizontal"===s.orient&&(0===u&&"left"===n&&(t.highlightStyle.textPosition="specific",t.highlightStyle.textAlign=n,t.highlightStyle.textBaseline=o,t.highlightStyle.textX=h,t.highlightStyle.textY="top"===o?m+V+10:m-10),u===l-1&&"right"===n&&(t.highlightStyle.textPosition="specific",t.highlightStyle.textAlign=n,t.highlightStyle.textBaseline=o,t.highlightStyle.textX=h+V,t.highlightStyle.textY="top"===o?m+V+10:m-10)),this._iconList[u]){case"mark":t.onclick=c._onMark;break;case"markUndo":t.onclick=c._onMarkUndo;break;case"markClear":t.onclick=c._onMarkClear;break;case"dataZoom":t.onclick=c._onDataZoom;break;case"dataZoomReset":t.onclick=c._onDataZoomReset;break;case"dataView":if(!this._dataView){var y=e("./dataView");this._dataView=new y(this.ecTheme,this.messageCenter,this.zr,this.option,this.myChart)}t.onclick=c._onDataView;break;case"restore":t.onclick=c._onRestore;break;case"saveAsImage":t.onclick=c._onSaveAsImage;break;default:this._iconList[u].match("Chart")?(t._name=this._iconList[u].replace("Chart",""),t.onclick=c._onMagicType):t.onclick=c._onCustomHandler}"icon"===t.type?t=new r(t):"image"===t.type&&(t=new a(t)),this.shapeList.push(t),this._iconShapeMap[this._iconList[u]]=t,"horizontal"===s.orient?h+=V+U:m+=V+U}},_buildBackground:function(){var e=this.option.toolbox,t=this.reformCssArray(this.option.toolbox.padding);this.shapeList.push(new o({zlevel:this.getZlevelBase(),z:this.getZBase(),hoverable:!1,style:{x:this._itemGroupLocation.x-t[3],y:this._itemGroupLocation.y-t[0],width:this._itemGroupLocation.width+t[3]+t[1],height:this._itemGroupLocation.height+t[0]+t[2],brushType:0===e.borderWidth?"fill":"both",color:e.backgroundColor,strokeColor:e.borderColor,lineWidth:e.borderWidth}}))},_getItemGroupLocation:function(){var e=this.option.toolbox,t=this.reformCssArray(this.option.toolbox.padding),i=this._iconList.length,n=e.itemGap,a=e.itemSize,o=0,r=0;"horizontal"===e.orient?(o=(a+n)*i-n,r=a):(r=(a+n)*i-n,o=a);var s,l=this.zr.getWidth();switch(e.x){case"center":s=Math.floor((l-o)/2);break;case"left":s=t[3]+e.borderWidth;break;case"right":s=l-o-t[1]-e.borderWidth;break;default:s=e.x-0,s=isNaN(s)?0:s}var h,m=this.zr.getHeight();switch(e.y){case"top":h=t[0]+e.borderWidth;break;case"bottom":h=m-r-t[2]-e.borderWidth;break;case"center":h=Math.floor((m-r)/2);break;default:h=e.y-0,h=isNaN(h)?0:h}return{x:s,y:h,width:o,height:r}},__onmousemove:function(e){this._marking&&(this._markShape.style.xEnd=m.getX(e.event),this._markShape.style.yEnd=m.getY(e.event),this.zr.addHoverShape(this._markShape)),this._zooming&&(this._zoomShape.style.width=m.getX(e.event)-this._zoomShape.style.x,this._zoomShape.style.height=m.getY(e.event)-this._zoomShape.style.y,this.zr.addHoverShape(this._zoomShape),this.dom.style.cursor="crosshair",m.stop(e.event)),this._zoomStart&&"pointer"!=this.dom.style.cursor&&"move"!=this.dom.style.cursor&&(this.dom.style.cursor="crosshair")},__onmousedown:function(e){if(!e.target){this._zooming=!0;var t=m.getX(e.event),i=m.getY(e.event),n=this.option.dataZoom||{};return this._zoomShape=new o({zlevel:this.getZlevelBase(),z:this.getZBase(),style:{x:t,y:i,width:1,height:1,brushType:"both"},highlightStyle:{lineWidth:2,color:n.fillerColor||s.dataZoom.fillerColor,strokeColor:n.handleColor||s.dataZoom.handleColor,brushType:"both"}}),this.zr.addHoverShape(this._zoomShape),!0}},__onmouseup:function(){if(!this._zoomShape||Math.abs(this._zoomShape.style.width)<10||Math.abs(this._zoomShape.style.height)<10)return this._zooming=!1,!0;if(this._zooming&&this.component.dataZoom){this._zooming=!1;var e=this.component.dataZoom.rectZoom(this._zoomShape.style);e&&(this._zoomQueue.push({start:e.start,end:e.end,start2:e.start2,end2:e.end2}),this._iconEnable(this._iconShapeMap.dataZoomReset),this.zr.refreshNextFrame())}return!0},__onclick:function(e){if(!e.target)if(this._marking)this._marking=!1,this._markShapeList.push(this._markShape),this._iconEnable(this._iconShapeMap.markUndo),this._iconEnable(this._iconShapeMap.markClear),this.zr.addShape(this._markShape),this.zr.refreshNextFrame();else if(this._markStart){this._marking=!0;var t=m.getX(e.event),i=m.getY(e.event);this._markShape=new n({zlevel:this.getZlevelBase(),z:this.getZBase(),style:{xStart:t,yStart:i,xEnd:t,yEnd:i,lineWidth:this.query(this.option,"toolbox.feature.mark.lineStyle.width"),strokeColor:this.query(this.option,"toolbox.feature.mark.lineStyle.color"),lineType:this.query(this.option,"toolbox.feature.mark.lineStyle.type")}}),this.zr.addHoverShape(this._markShape)}},__onMark:function(e){var t=e.target;if(this._marking||this._markStart)this._resetMark(),this.zr.refreshNextFrame();else{this._resetZoom(),this.zr.modShape(t.id,{style:{strokeColor:this._enableColor}}),this.zr.refreshNextFrame(),this._markStart=!0;var i=this;setTimeout(function(){i.zr&&i.zr.on(h.EVENT.CLICK,i._onclick)&&i.zr.on(h.EVENT.MOUSEMOVE,i._onmousemove)},10)}return!0},__onMarkUndo:function(){if(this._marking)this._marking=!1;else{var e=this._markShapeList.length;if(e>=1){var t=this._markShapeList[e-1];this.zr.delShape(t.id),this.zr.refreshNextFrame(),this._markShapeList.pop(),1===e&&(this._iconDisable(this._iconShapeMap.markUndo),this._iconDisable(this._iconShapeMap.markClear))}}return!0},__onMarkClear:function(){this._marking&&(this._marking=!1);var e=this._markShapeList.length;if(e>0){for(;e--;)this.zr.delShape(this._markShapeList.pop().id);this._iconDisable(this._iconShapeMap.markUndo),this._iconDisable(this._iconShapeMap.markClear),this.zr.refreshNextFrame()}return!0},__onDataZoom:function(e){var t=e.target;if(this._zooming||this._zoomStart)this._resetZoom(),this.zr.refreshNextFrame(),this.dom.style.cursor="default";else{this._resetMark(),this.zr.modShape(t.id,{style:{strokeColor:this._enableColor}}),this.zr.refreshNextFrame(),this._zoomStart=!0;var i=this;setTimeout(function(){i.zr&&i.zr.on(h.EVENT.MOUSEDOWN,i._onmousedown)&&i.zr.on(h.EVENT.MOUSEUP,i._onmouseup)&&i.zr.on(h.EVENT.MOUSEMOVE,i._onmousemove)},10),this.dom.style.cursor="crosshair"}return!0},__onDataZoomReset:function(){return this._zooming&&(this._zooming=!1),this._zoomQueue.pop(),this._zoomQueue.length>0?this.component.dataZoom.absoluteZoom(this._zoomQueue[this._zoomQueue.length-1]):(this.component.dataZoom.rectZoom(),this._iconDisable(this._iconShapeMap.dataZoomReset),this.zr.refreshNextFrame()),!0},_resetMark:function(){this._marking=!1,this._markStart&&(this._markStart=!1,this._iconShapeMap.mark&&this.zr.modShape(this._iconShapeMap.mark.id,{style:{strokeColor:this._iconShapeMap.mark.highlightStyle.strokeColor}}),this.zr.un(h.EVENT.CLICK,this._onclick),this.zr.un(h.EVENT.MOUSEMOVE,this._onmousemove))},_resetZoom:function(){this._zooming=!1,this._zoomStart&&(this._zoomStart=!1,this._iconShapeMap.dataZoom&&this.zr.modShape(this._iconShapeMap.dataZoom.id,{style:{strokeColor:this._iconShapeMap.dataZoom.highlightStyle.strokeColor}}),this.zr.un(h.EVENT.MOUSEDOWN,this._onmousedown),this.zr.un(h.EVENT.MOUSEUP,this._onmouseup),this.zr.un(h.EVENT.MOUSEMOVE,this._onmousemove))},_iconDisable:function(e){"image"!=e.type?this.zr.modShape(e.id,{hoverable:!1,clickable:!1,style:{strokeColor:this._disableColor}}):this.zr.modShape(e.id,{hoverable:!1,clickable:!1,style:{opacity:.3}})},_iconEnable:function(e){"image"!=e.type?this.zr.modShape(e.id,{hoverable:!0,clickable:!0,style:{strokeColor:e.highlightStyle.strokeColor}}):this.zr.modShape(e.id,{hoverable:!0,clickable:!0,style:{opacity:.8}})},__onDataView:function(){return this._dataView.show(this.option),!0},__onRestore:function(){return this._resetMark(),this._resetZoom(),this.messageCenter.dispatch(s.EVENT.RESTORE,null,null,this.myChart),!0},__onSaveAsImage:function(){var e=this.option.toolbox.feature.saveAsImage,t=e.type||"png";"png"!=t&&"jpeg"!=t&&(t="png");var i;i=this.myChart.isConnected()?this.myChart.getConnectedDataURL(t):this.zr.toDataURL("image/"+t,this.option.backgroundColor&&"rgba(0,0,0,0)"===this.option.backgroundColor.replace(" ","")?"#fff":this.option.backgroundColor);var n=document.createElement("div");n.id="__echarts_download_wrap__",n.style.cssText="position:fixed;z-index:99999;display:block;top:0;left:0;background-color:rgba(33,33,33,0.5);text-align:center;width:100%;height:100%;line-height:"+document.documentElement.clientHeight+"px;";var a=document.createElement("a");a.href=i,a.setAttribute("download",(e.name?e.name:this.option.title&&(this.option.title.text||this.option.title.subtext)?this.option.title.text||this.option.title.subtext:"ECharts")+"."+t),a.innerHTML='<img style="vertical-align:middle" src="'+i+'" title="'+(window.ActiveXObject||"ActiveXObject"in window?"右键->图片另存为":e.lang?e.lang[0]:"点击保存")+'"/>',n.appendChild(a),document.body.appendChild(n),a=null,n=null,setTimeout(function(){var e=document.getElementById("__echarts_download_wrap__");e&&(e.onclick=function(){var e=document.getElementById("__echarts_download_wrap__");e.onclick=null,e.innerHTML="",document.body.removeChild(e),e=null},e=null)},500)},__onMagicType:function(e){this._resetMark();var t=e.target._name;return this._magicType[t]||(this._magicType[t]=!0,t===s.CHART_TYPE_LINE?this._magicType[s.CHART_TYPE_BAR]=!1:t===s.CHART_TYPE_BAR&&(this._magicType[s.CHART_TYPE_LINE]=!1),t===s.CHART_TYPE_PIE?this._magicType[s.CHART_TYPE_FUNNEL]=!1:t===s.CHART_TYPE_FUNNEL&&(this._magicType[s.CHART_TYPE_PIE]=!1),t===s.CHART_TYPE_FORCE?this._magicType[s.CHART_TYPE_CHORD]=!1:t===s.CHART_TYPE_CHORD&&(this._magicType[s.CHART_TYPE_FORCE]=!1),t===V?this._magicType[U]=!1:t===U&&(this._magicType[V]=!1),this.messageCenter.dispatch(s.EVENT.MAGIC_TYPE_CHANGED,e.event,{magicType:this._magicType},this.myChart)),!0},setMagicType:function(e){this._resetMark(),this._magicType=e,!this._isSilence&&this.messageCenter.dispatch(s.EVENT.MAGIC_TYPE_CHANGED,null,{magicType:this._magicType},this.myChart)},__onCustomHandler:function(e){var t=e.target.style.iconType,i=this.option.toolbox.feature[t].onclick;"function"==typeof i&&i.call(this,this.option)},reset:function(e,t){if(t&&this.clear(),this.query(e,"toolbox.show")&&this.query(e,"toolbox.feature.magicType.show")){var i=e.toolbox.feature.magicType.type,n=i.length;for(this._magicMap={};n--;)this._magicMap[i[n]]=!0;n=e.series.length;for(var a,o;n--;)a=e.series[n].type,this._magicMap[a]&&(o=e.xAxis instanceof Array?e.xAxis[e.series[n].xAxisIndex||0]:e.xAxis,o&&"category"===(o.type||"category")&&(o.__boundaryGap=null!=o.boundaryGap?o.boundaryGap:!0),o=e.yAxis instanceof Array?e.yAxis[e.series[n].yAxisIndex||0]:e.yAxis,o&&"category"===o.type&&(o.__boundaryGap=null!=o.boundaryGap?o.boundaryGap:!0),e.series[n].__type=a,e.series[n].__itemStyle=l.clone(e.series[n].itemStyle||{})),(this._magicMap[V]||this._magicMap[U])&&(e.series[n].__stack=e.series[n].stack)}this._magicType=t?{}:this._magicType||{};for(var r in this._magicType)if(this._magicType[r]){this.option=e,this.getMagicOption();break}var s=e.dataZoom;if(s&&s.show){var h=null!=s.start&&s.start>=0&&s.start<=100?s.start:0,m=null!=s.end&&s.end>=0&&s.end<=100?s.end:100;h>m&&(h+=m,m=h-m,h-=m),this._zoomQueue=[{start:h,end:m,start2:0,end2:100}]}else this._zoomQueue=[]},getMagicOption:function(){var e,t;if(this._magicType[s.CHART_TYPE_LINE]||this._magicType[s.CHART_TYPE_BAR]){for(var i=this._magicType[s.CHART_TYPE_LINE]?!1:!0,n=0,a=this.option.series.length;a>n;n++)t=this.option.series[n].type,(t==s.CHART_TYPE_LINE||t==s.CHART_TYPE_BAR)&&(e=this.option.xAxis instanceof Array?this.option.xAxis[this.option.series[n].xAxisIndex||0]:this.option.xAxis,e&&"category"===(e.type||"category")&&(e.boundaryGap=i?!0:e.__boundaryGap),e=this.option.yAxis instanceof Array?this.option.yAxis[this.option.series[n].yAxisIndex||0]:this.option.yAxis,e&&"category"===e.type&&(e.boundaryGap=i?!0:e.__boundaryGap));this._defaultMagic(s.CHART_TYPE_LINE,s.CHART_TYPE_BAR)}if(this._defaultMagic(s.CHART_TYPE_CHORD,s.CHART_TYPE_FORCE),this._defaultMagic(s.CHART_TYPE_PIE,s.CHART_TYPE_FUNNEL),this._magicType[V]||this._magicType[U])for(var n=0,a=this.option.series.length;a>n;n++)this._magicType[V]?(this.option.series[n].stack="_ECHARTS_STACK_KENER_2014_",t=V):this._magicType[U]&&(this.option.series[n].stack=null,t=U),this._featureOption[t+"Chart"]&&l.merge(this.option.series[n],this._featureOption[t+"Chart"]||{},!0);return this.option},_defaultMagic:function(e,t){if(this._magicType[e]||this._magicType[t])for(var i=0,n=this.option.series.length;n>i;i++){var a=this.option.series[i].type;(a==e||a==t)&&(this.option.series[i].type=this._magicType[e]?e:t,this.option.series[i].itemStyle=l.clone(this.option.series[i].__itemStyle),a=this.option.series[i].type,this._featureOption[a+"Chart"]&&l.merge(this.option.series[i],this._featureOption[a+"Chart"]||{},!0))}},silence:function(e){this._isSilence=e},resize:function(){this._resetMark(),this.clear(),this.option&&this.option.toolbox&&this.option.toolbox.show&&this._buildShape(),this._dataView&&this._dataView.resize()},hideDataView:function(){this._dataView&&this._dataView.hide()},clear:function(e){this.zr&&(this.zr.delShape(this.shapeList),this.shapeList=[],e||(this.zr.delShape(this._markShapeList),this._markShapeList=[]))},onbeforDispose:function(){this._dataView&&(this._dataView.dispose(),this._dataView=null),this._markShapeList=null},refresh:function(e){e&&(this._resetMark(),this._resetZoom(),e.toolbox=this.reformOption(e.toolbox),this.option=e,this.clear(!0),e.toolbox.show&&this._buildShape(),this.hideDataView())}},l.inherits(t,i),e("../component").define("toolbox",t),t}),i("echarts/component",[],function(){var e={},t={};return e.define=function(i,n){return t[i]=n,e},e.get=function(e){return t[e]},e}),i("echarts/component/title",["require","./base","zrender/shape/Text","zrender/shape/Rectangle","../config","zrender/tool/util","zrender/tool/area","zrender/tool/color","../component"],function(e){function t(e,t,n,a,o){i.call(this,e,t,n,a,o),this.refresh(a)}var i=e("./base"),n=e("zrender/shape/Text"),a=e("zrender/shape/Rectangle"),o=e("../config");o.title={zlevel:0,z:6,show:!0,text:"",subtext:"",x:"left",y:"top",backgroundColor:"rgba(0,0,0,0)",borderColor:"#ccc",borderWidth:0,padding:5,itemGap:5,textStyle:{fontSize:18,fontWeight:"bolder",color:"#333"},subtextStyle:{color:"#aaa"}};var r=e("zrender/tool/util"),s=e("zrender/tool/area"),l=e("zrender/tool/color");return t.prototype={type:o.COMPONENT_TYPE_TITLE,_buildShape:function(){if(this.titleOption.show){this._itemGroupLocation=this._getItemGroupLocation(),this._buildBackground(),this._buildItem();for(var e=0,t=this.shapeList.length;t>e;e++)this.zr.addShape(this.shapeList[e])}},_buildItem:function(){var e=this.titleOption.text,t=this.titleOption.link,i=this.titleOption.target,a=this.titleOption.subtext,o=this.titleOption.sublink,r=this.titleOption.subtarget,s=this.getFont(this.titleOption.textStyle),h=this.getFont(this.titleOption.subtextStyle),m=this._itemGroupLocation.x,V=this._itemGroupLocation.y,U=this._itemGroupLocation.width,d=this._itemGroupLocation.height,p={zlevel:this.getZlevelBase(),z:this.getZBase(),style:{y:V,color:this.titleOption.textStyle.color,text:e,textFont:s,textBaseline:"top"},highlightStyle:{color:l.lift(this.titleOption.textStyle.color,1),brushType:"fill"},hoverable:!1};t&&(p.hoverable=!0,p.clickable=!0,p.onclick=function(){i&&"self"==i?window.location=t:window.open(t)});var c={zlevel:this.getZlevelBase(),z:this.getZBase(),style:{y:V+d,color:this.titleOption.subtextStyle.color,text:a,textFont:h,textBaseline:"bottom"},highlightStyle:{color:l.lift(this.titleOption.subtextStyle.color,1),brushType:"fill"},hoverable:!1};switch(o&&(c.hoverable=!0,c.clickable=!0,c.onclick=function(){r&&"self"==r?window.location=o:window.open(o)}),this.titleOption.x){case"center":p.style.x=c.style.x=m+U/2,p.style.textAlign=c.style.textAlign="center";break;case"left":p.style.x=c.style.x=m,p.style.textAlign=c.style.textAlign="left";break;case"right":p.style.x=c.style.x=m+U,p.style.textAlign=c.style.textAlign="right";break;default:m=this.titleOption.x-0,m=isNaN(m)?0:m,p.style.x=c.style.x=m}this.titleOption.textAlign&&(p.style.textAlign=c.style.textAlign=this.titleOption.textAlign),this.shapeList.push(new n(p)),""!==a&&this.shapeList.push(new n(c))},_buildBackground:function(){var e=this.reformCssArray(this.titleOption.padding);this.shapeList.push(new a({zlevel:this.getZlevelBase(),z:this.getZBase(),hoverable:!1,style:{x:this._itemGroupLocation.x-e[3],y:this._itemGroupLocation.y-e[0],width:this._itemGroupLocation.width+e[3]+e[1],height:this._itemGroupLocation.height+e[0]+e[2],brushType:0===this.titleOption.borderWidth?"fill":"both",color:this.titleOption.backgroundColor,strokeColor:this.titleOption.borderColor,lineWidth:this.titleOption.borderWidth}}))},_getItemGroupLocation:function(){var e,t=this.reformCssArray(this.titleOption.padding),i=this.titleOption.text,n=this.titleOption.subtext,a=this.getFont(this.titleOption.textStyle),o=this.getFont(this.titleOption.subtextStyle),r=Math.max(s.getTextWidth(i,a),s.getTextWidth(n,o)),l=s.getTextHeight(i,a)+(""===n?0:this.titleOption.itemGap+s.getTextHeight(n,o)),h=this.zr.getWidth();switch(this.titleOption.x){case"center":e=Math.floor((h-r)/2);break;case"left":e=t[3]+this.titleOption.borderWidth;break;case"right":e=h-r-t[1]-this.titleOption.borderWidth;break;default:e=this.titleOption.x-0,e=isNaN(e)?0:e}var m,V=this.zr.getHeight();switch(this.titleOption.y){case"top":m=t[0]+this.titleOption.borderWidth;break;case"bottom":m=V-l-t[2]-this.titleOption.borderWidth;break;case"center":m=Math.floor((V-l)/2);break;default:m=this.titleOption.y-0,m=isNaN(m)?0:m}return{x:e,y:m,width:r,height:l}},refresh:function(e){e&&(this.option=e,this.option.title=this.reformOption(this.option.title),this.titleOption=this.option.title,this.titleOption.textStyle=this.getTextStyle(this.titleOption.textStyle),this.titleOption.subtextStyle=this.getTextStyle(this.titleOption.subtextStyle)),this.clear(),this._buildShape()}},r.inherits(t,i),e("../component").define("title",t),t}),i("echarts/component/tooltip",["require","./base","../util/shape/Cross","zrender/shape/Line","zrender/shape/Rectangle","../config","../util/ecData","zrender/config","zrender/tool/event","zrender/tool/area","zrender/tool/color","zrender/tool/util","zrender/shape/Base","../component"],function(e){function t(e,t,o,r,s){i.call(this,e,t,o,r,s),this.dom=s.dom;var l=this;l._onmousemove=function(e){return l.__onmousemove(e)},l._onglobalout=function(e){return l.__onglobalout(e)},this.zr.on(h.EVENT.MOUSEMOVE,l._onmousemove),this.zr.on(h.EVENT.GLOBALOUT,l._onglobalout),l._hide=function(e){return l.__hide(e)},l._tryShow=function(e){return l.__tryShow(e)},l._refixed=function(e){return l.__refixed(e)},l._setContent=function(e,t){return l.__setContent(e,t)},this._tDom=this._tDom||document.createElement("div"),this._tDom.onselectstart=function(){return!1},this._tDom.onmouseover=function(){l._mousein=!0},this._tDom.onmouseout=function(){l._mousein=!1},this._tDom.className="echarts-tooltip",this._tDom.style.position="absolute",this.hasAppend=!1,this._axisLineShape&&this.zr.delShape(this._axisLineShape.id),this._axisLineShape=new a({zlevel:this.getZlevelBase(),z:this.getZBase(),invisible:!0,hoverable:!1}),this.shapeList.push(this._axisLineShape),this.zr.addShape(this._axisLineShape),this._axisShadowShape&&this.zr.delShape(this._axisShadowShape.id),this._axisShadowShape=new a({zlevel:this.getZlevelBase(),z:1,invisible:!0,hoverable:!1}),this.shapeList.push(this._axisShadowShape),this.zr.addShape(this._axisShadowShape),this._axisCrossShape&&this.zr.delShape(this._axisCrossShape.id),this._axisCrossShape=new n({zlevel:this.getZlevelBase(),z:this.getZBase(),invisible:!0,hoverable:!1}),this.shapeList.push(this._axisCrossShape),this.zr.addShape(this._axisCrossShape),this.showing=!1,this.refresh(r)}var i=e("./base"),n=e("../util/shape/Cross"),a=e("zrender/shape/Line"),o=e("zrender/shape/Rectangle"),r=new o({}),s=e("../config");s.tooltip={zlevel:1,z:8,show:!0,showContent:!0,trigger:"item",islandFormatter:"{a} <br/>{b} : {c}",showDelay:20,hideDelay:100,transitionDuration:.4,enterable:!1,backgroundColor:"rgba(0,0,0,0.7)",borderColor:"#333",borderRadius:4,borderWidth:0,padding:5,axisPointer:{type:"line",lineStyle:{color:"#48b",width:2,type:"solid"},crossStyle:{color:"#1e90ff",width:1,type:"dashed"},shadowStyle:{color:"rgba(150,150,150,0.3)",width:"auto",type:"default"}},textStyle:{color:"#fff"}};var l=e("../util/ecData"),h=e("zrender/config"),m=e("zrender/tool/event"),V=e("zrender/tool/area"),U=e("zrender/tool/color"),d=e("zrender/tool/util"),p=e("zrender/shape/Base");return t.prototype={type:s.COMPONENT_TYPE_TOOLTIP,_gCssText:"position:absolute;display:block;border-style:solid;white-space:nowrap;",_style:function(e){if(!e)return"";var t=[];if(e.transitionDuration){var i="left "+e.transitionDuration+"s,top "+e.transitionDuration+"s";t.push("transition:"+i),t.push("-moz-transition:"+i),t.push("-webkit-transition:"+i),t.push("-o-transition:"+i)}e.backgroundColor&&(t.push("background-Color:"+U.toHex(e.backgroundColor)),t.push("filter:alpha(opacity=70)"),t.push("background-Color:"+e.backgroundColor)),null!=e.borderWidth&&t.push("border-width:"+e.borderWidth+"px"),null!=e.borderColor&&t.push("border-color:"+e.borderColor),null!=e.borderRadius&&(t.push("border-radius:"+e.borderRadius+"px"),t.push("-moz-border-radius:"+e.borderRadius+"px"),t.push("-webkit-border-radius:"+e.borderRadius+"px"),t.push("-o-border-radius:"+e.borderRadius+"px"));var n=e.textStyle;n&&(n.color&&t.push("color:"+n.color),n.decoration&&t.push("text-decoration:"+n.decoration),n.align&&t.push("text-align:"+n.align),n.fontFamily&&t.push("font-family:"+n.fontFamily),n.fontSize&&t.push("font-size:"+n.fontSize+"px"),n.fontSize&&t.push("line-height:"+Math.round(3*n.fontSize/2)+"px"),n.fontStyle&&t.push("font-style:"+n.fontStyle),n.fontWeight&&t.push("font-weight:"+n.fontWeight));var a=e.padding;return null!=a&&(a=this.reformCssArray(a),t.push("padding:"+a[0]+"px "+a[1]+"px "+a[2]+"px "+a[3]+"px")),t=t.join(";")+";"},__hide:function(){this._lastDataIndex=-1,this._lastSeriesIndex=-1,this._lastItemTriggerId=-1,this._tDom&&(this._tDom.style.display="none");var e=!1;this._axisLineShape.invisible||(this._axisLineShape.invisible=!0,
+this.zr.modShape(this._axisLineShape.id),e=!0),this._axisShadowShape.invisible||(this._axisShadowShape.invisible=!0,this.zr.modShape(this._axisShadowShape.id),e=!0),this._axisCrossShape.invisible||(this._axisCrossShape.invisible=!0,this.zr.modShape(this._axisCrossShape.id),e=!0),this._lastTipShape&&this._lastTipShape.tipShape.length>0&&(this.zr.delShape(this._lastTipShape.tipShape),this._lastTipShape=!1,this.shapeList.length=2),e&&this.zr.refreshNextFrame(),this.showing=!1},_show:function(e,t,i,n){var a=this._tDom.offsetHeight,o=this._tDom.offsetWidth;e&&("function"==typeof e&&(e=e([t,i])),e instanceof Array&&(t=e[0],i=e[1])),t+o>this._zrWidth&&(t-=o+40),i+a>this._zrHeight&&(i-=a-20),20>i&&(i=0),this._tDom.style.cssText=this._gCssText+this._defaultCssText+(n?n:"")+"left:"+t+"px;top:"+i+"px;",(10>a||10>o)&&setTimeout(this._refixed,20),this.showing=!0},__refixed:function(){if(this._tDom){var e="",t=this._tDom.offsetHeight,i=this._tDom.offsetWidth;this._tDom.offsetLeft+i>this._zrWidth&&(e+="left:"+(this._zrWidth-i-20)+"px;"),this._tDom.offsetTop+t>this._zrHeight&&(e+="top:"+(this._zrHeight-t-10)+"px;"),""!==e&&(this._tDom.style.cssText+=e)}},__tryShow:function(){var e,t;if(this._curTarget){if("island"===this._curTarget._type&&this.option.tooltip.show)return void this._showItemTrigger();var i=l.get(this._curTarget,"series"),n=l.get(this._curTarget,"data");e=this.deepQuery([n,i,this.option],"tooltip.show"),null!=i&&null!=n&&e?(t=this.deepQuery([n,i,this.option],"tooltip.trigger"),"axis"===t?this._showAxisTrigger(i.xAxisIndex,i.yAxisIndex,l.get(this._curTarget,"dataIndex")):this._showItemTrigger()):(clearTimeout(this._hidingTicket),clearTimeout(this._showingTicket),this._hidingTicket=setTimeout(this._hide,this._hideDelay))}else this._findPolarTrigger()||this._findAxisTrigger()},_findAxisTrigger:function(){if(!this.component.xAxis||!this.component.yAxis)return void(this._hidingTicket=setTimeout(this._hide,this._hideDelay));for(var e,t,i=this.option.series,n=0,a=i.length;a>n;n++)if("axis"===this.deepQuery([i[n],this.option],"tooltip.trigger"))return e=i[n].xAxisIndex||0,t=i[n].yAxisIndex||0,this.component.xAxis.getAxis(e)&&this.component.xAxis.getAxis(e).type===s.COMPONENT_TYPE_AXIS_CATEGORY?void this._showAxisTrigger(e,t,this._getNearestDataIndex("x",this.component.xAxis.getAxis(e))):this.component.yAxis.getAxis(t)&&this.component.yAxis.getAxis(t).type===s.COMPONENT_TYPE_AXIS_CATEGORY?void this._showAxisTrigger(e,t,this._getNearestDataIndex("y",this.component.yAxis.getAxis(t))):void this._showAxisTrigger(e,t,-1);"cross"===this.option.tooltip.axisPointer.type&&this._showAxisTrigger(-1,-1,-1)},_findPolarTrigger:function(){if(!this.component.polar)return!1;var e,t=m.getX(this._event),i=m.getY(this._event),n=this.component.polar.getNearestIndex([t,i]);return n?(e=n.valueIndex,n=n.polarIndex):n=-1,-1!=n?this._showPolarTrigger(n,e):!1},_getNearestDataIndex:function(e,t){var i=-1,n=m.getX(this._event),a=m.getY(this._event);if("x"===e){for(var o,r,s=this.component.grid.getXend(),l=t.getCoordByIndex(i);s>l&&(r=l,n>=l);)o=l,l=t.getCoordByIndex(++i);return 0>=i?i=0:r-n>=n-o?i-=1:null==t.getNameByIndex(i)&&(i-=1),i}for(var h,V,U=this.component.grid.getY(),l=t.getCoordByIndex(i);l>U&&(h=l,l>=a);)V=l,l=t.getCoordByIndex(++i);return 0>=i?i=0:a-h>=V-a?i-=1:null==t.getNameByIndex(i)&&(i-=1),i},_showAxisTrigger:function(e,t,i){if(!this._event.connectTrigger&&this.messageCenter.dispatch(s.EVENT.TOOLTIP_IN_GRID,this._event,null,this.myChart),null==this.component.xAxis||null==this.component.yAxis||null==e||null==t)return clearTimeout(this._hidingTicket),clearTimeout(this._showingTicket),void(this._hidingTicket=setTimeout(this._hide,this._hideDelay));var n,a,o,r,l=this.option.series,h=[],V=[],U="";if("axis"===this.option.tooltip.trigger){if(!this.option.tooltip.show)return;a=this.option.tooltip.formatter,o=this.option.tooltip.position}var d,p,c=-1!=e&&this.component.xAxis.getAxis(e).type===s.COMPONENT_TYPE_AXIS_CATEGORY?"xAxis":-1!=t&&this.component.yAxis.getAxis(t).type===s.COMPONENT_TYPE_AXIS_CATEGORY?"yAxis":!1;if(c){var u="xAxis"==c?e:t;n=this.component[c].getAxis(u);for(var y=0,g=l.length;g>y;y++)this._isSelected(l[y].name)&&l[y][c+"Index"]===u&&"axis"===this.deepQuery([l[y],this.option],"tooltip.trigger")&&(r=this.query(l[y],"tooltip.showContent")||r,a=this.query(l[y],"tooltip.formatter")||a,o=this.query(l[y],"tooltip.position")||o,U+=this._style(this.query(l[y],"tooltip")),null!=l[y].stack&&"xAxis"==c?(h.unshift(l[y]),V.unshift(y)):(h.push(l[y]),V.push(y)));this.messageCenter.dispatch(s.EVENT.TOOLTIP_HOVER,this._event,{seriesIndex:V,dataIndex:i},this.myChart);var b;"xAxis"==c?(d=this.subPixelOptimize(n.getCoordByIndex(i),this._axisLineWidth),p=m.getY(this._event),b=[d,this.component.grid.getY(),d,this.component.grid.getYend()]):(d=m.getX(this._event),p=this.subPixelOptimize(n.getCoordByIndex(i),this._axisLineWidth),b=[this.component.grid.getX(),p,this.component.grid.getXend(),p]),this._styleAxisPointer(h,b[0],b[1],b[2],b[3],n.getGap(),d,p)}else d=m.getX(this._event),p=m.getY(this._event),this._styleAxisPointer(l,this.component.grid.getX(),p,this.component.grid.getXend(),p,0,d,p),i>=0?this._showItemTrigger(!0):(clearTimeout(this._hidingTicket),clearTimeout(this._showingTicket),this._tDom.style.display="none");if(h.length>0){if(this._lastItemTriggerId=-1,this._lastDataIndex!=i||this._lastSeriesIndex!=V[0]){this._lastDataIndex=i,this._lastSeriesIndex=V[0];var f,k;if("function"==typeof a){for(var x=[],y=0,g=h.length;g>y;y++)f=h[y].data[i],k=this.getDataFromOption(f,"-"),x.push({seriesIndex:V[y],seriesName:h[y].name||"",series:h[y],dataIndex:i,data:f,name:n.getNameByIndex(i),value:k,0:h[y].name||"",1:n.getNameByIndex(i),2:k,3:f});this._curTicket="axis:"+i,this._tDom.innerHTML=a.call(this.myChart,x,this._curTicket,this._setContent)}else if("string"==typeof a){this._curTicket=0/0,a=a.replace("{a}","{a0}").replace("{b}","{b0}").replace("{c}","{c0}");for(var y=0,g=h.length;g>y;y++)a=a.replace("{a"+y+"}",this._encodeHTML(h[y].name||"")),a=a.replace("{b"+y+"}",this._encodeHTML(n.getNameByIndex(i))),f=h[y].data[i],f=this.getDataFromOption(f,"-"),a=a.replace("{c"+y+"}",f instanceof Array?f:this.numAddCommas(f));this._tDom.innerHTML=a}else{this._curTicket=0/0,a=this._encodeHTML(n.getNameByIndex(i));for(var y=0,g=h.length;g>y;y++)a+="<br/>"+this._encodeHTML(h[y].name||"")+" : ",f=h[y].data[i],f=this.getDataFromOption(f,"-"),a+=f instanceof Array?f:this.numAddCommas(f);this._tDom.innerHTML=a}}if(r===!1||!this.option.tooltip.showContent)return;this.hasAppend||(this._tDom.style.left=this._zrWidth/2+"px",this._tDom.style.top=this._zrHeight/2+"px",this.dom.firstChild.appendChild(this._tDom),this.hasAppend=!0),this._show(o,d+10,p+10,U)}},_showPolarTrigger:function(e,t){if(null==this.component.polar||null==e||null==t||0>t)return!1;var i,n,a,o=this.option.series,r=[],s=[],l="";if("axis"===this.option.tooltip.trigger){if(!this.option.tooltip.show)return!1;i=this.option.tooltip.formatter,n=this.option.tooltip.position}for(var h=this.option.polar[e].indicator[t].text,V=0,U=o.length;U>V;V++)this._isSelected(o[V].name)&&o[V].polarIndex===e&&"axis"===this.deepQuery([o[V],this.option],"tooltip.trigger")&&(a=this.query(o[V],"tooltip.showContent")||a,i=this.query(o[V],"tooltip.formatter")||i,n=this.query(o[V],"tooltip.position")||n,l+=this._style(this.query(o[V],"tooltip")),r.push(o[V]),s.push(V));if(r.length>0){for(var d,p,c,u=[],V=0,U=r.length;U>V;V++){d=r[V].data;for(var y=0,g=d.length;g>y;y++)p=d[y],this._isSelected(p.name)&&(p=null!=p?p:{name:"",value:{dataIndex:"-"}},c=this.getDataFromOption(p.value[t]),u.push({seriesIndex:s[V],seriesName:r[V].name||"",series:r[V],dataIndex:t,data:p,name:p.name,indicator:h,value:c,0:r[V].name||"",1:p.name,2:c,3:h}))}if(u.length<=0)return;if(this._lastItemTriggerId=-1,this._lastDataIndex!=t||this._lastSeriesIndex!=s[0])if(this._lastDataIndex=t,this._lastSeriesIndex=s[0],"function"==typeof i)this._curTicket="axis:"+t,this._tDom.innerHTML=i.call(this.myChart,u,this._curTicket,this._setContent);else if("string"==typeof i){i=i.replace("{a}","{a0}").replace("{b}","{b0}").replace("{c}","{c0}").replace("{d}","{d0}");for(var V=0,U=u.length;U>V;V++)i=i.replace("{a"+V+"}",this._encodeHTML(u[V].seriesName)),i=i.replace("{b"+V+"}",this._encodeHTML(u[V].name)),i=i.replace("{c"+V+"}",this.numAddCommas(u[V].value)),i=i.replace("{d"+V+"}",this._encodeHTML(u[V].indicator));this._tDom.innerHTML=i}else{i=this._encodeHTML(u[0].name)+"<br/>"+this._encodeHTML(u[0].indicator)+" : "+this.numAddCommas(u[0].value);for(var V=1,U=u.length;U>V;V++)i+="<br/>"+this._encodeHTML(u[V].name)+"<br/>",i+=this._encodeHTML(u[V].indicator)+" : "+this.numAddCommas(u[V].value);this._tDom.innerHTML=i}if(a===!1||!this.option.tooltip.showContent)return;return this.hasAppend||(this._tDom.style.left=this._zrWidth/2+"px",this._tDom.style.top=this._zrHeight/2+"px",this.dom.firstChild.appendChild(this._tDom),this.hasAppend=!0),this._show(n,m.getX(this._event),m.getY(this._event),l),!0}},_showItemTrigger:function(e){if(this._curTarget){var t,i,n,a=l.get(this._curTarget,"series"),o=l.get(this._curTarget,"seriesIndex"),r=l.get(this._curTarget,"data"),h=l.get(this._curTarget,"dataIndex"),V=l.get(this._curTarget,"name"),U=l.get(this._curTarget,"value"),d=l.get(this._curTarget,"special"),p=l.get(this._curTarget,"special2"),c=[r,a,this.option],u="";if("island"!=this._curTarget._type){var y=e?"axis":"item";this.option.tooltip.trigger===y&&(t=this.option.tooltip.formatter,i=this.option.tooltip.position),this.query(a,"tooltip.trigger")===y&&(n=this.query(a,"tooltip.showContent")||n,t=this.query(a,"tooltip.formatter")||t,i=this.query(a,"tooltip.position")||i,u+=this._style(this.query(a,"tooltip"))),n=this.query(r,"tooltip.showContent")||n,t=this.query(r,"tooltip.formatter")||t,i=this.query(r,"tooltip.position")||i,u+=this._style(this.query(r,"tooltip"))}else this._lastItemTriggerId=0/0,n=this.deepQuery(c,"tooltip.showContent"),t=this.deepQuery(c,"tooltip.islandFormatter"),i=this.deepQuery(c,"tooltip.islandPosition");this._lastDataIndex=-1,this._lastSeriesIndex=-1,this._lastItemTriggerId!==this._curTarget.id&&(this._lastItemTriggerId=this._curTarget.id,"function"==typeof t?(this._curTicket=(a.name||"")+":"+h,this._tDom.innerHTML=t.call(this.myChart,{seriesIndex:o,seriesName:a.name||"",series:a,dataIndex:h,data:r,name:V,value:U,percent:d,indicator:d,value2:p,indicator2:p,0:a.name||"",1:V,2:U,3:d,4:p,5:r,6:o,7:h},this._curTicket,this._setContent)):"string"==typeof t?(this._curTicket=0/0,t=t.replace("{a}","{a0}").replace("{b}","{b0}").replace("{c}","{c0}"),t=t.replace("{a0}",this._encodeHTML(a.name||"")).replace("{b0}",this._encodeHTML(V)).replace("{c0}",U instanceof Array?U:this.numAddCommas(U)),t=t.replace("{d}","{d0}").replace("{d0}",d||""),t=t.replace("{e}","{e0}").replace("{e0}",l.get(this._curTarget,"special2")||""),this._tDom.innerHTML=t):(this._curTicket=0/0,this._tDom.innerHTML=a.type===s.CHART_TYPE_RADAR&&d?this._itemFormatter.radar.call(this,a,V,U,d):a.type===s.CHART_TYPE_EVENTRIVER?this._itemFormatter.eventRiver.call(this,a,V,U,r):""+(null!=a.name?this._encodeHTML(a.name)+"<br/>":"")+(""===V?"":this._encodeHTML(V)+" : ")+(U instanceof Array?U:this.numAddCommas(U))));var g=m.getX(this._event),b=m.getY(this._event);this.deepQuery(c,"tooltip.axisPointer.show")&&this.component.grid?this._styleAxisPointer([a],this.component.grid.getX(),b,this.component.grid.getXend(),b,0,g,b):this._hide(),n!==!1&&this.option.tooltip.showContent&&(this.hasAppend||(this._tDom.style.left=this._zrWidth/2+"px",this._tDom.style.top=this._zrHeight/2+"px",this.dom.firstChild.appendChild(this._tDom),this.hasAppend=!0),this._show(i,g+20,b-20,u))}},_itemFormatter:{radar:function(e,t,i,n){var a="";a+=this._encodeHTML(""===t?e.name||"":t),a+=""===a?"":"<br />";for(var o=0;o<n.length;o++)a+=this._encodeHTML(n[o].text)+" : "+this.numAddCommas(i[o])+"<br />";return a},chord:function(e,t,i,n,a){if(null==a)return this._encodeHTML(t)+" ("+this.numAddCommas(i)+")";var o=this._encodeHTML(t),r=this._encodeHTML(n);return""+(null!=e.name?this._encodeHTML(e.name)+"<br/>":"")+o+" -> "+r+" ("+this.numAddCommas(i)+")<br />"+r+" -> "+o+" ("+this.numAddCommas(a)+")"},eventRiver:function(e,t,i,n){var a="";a+=this._encodeHTML(""===e.name?"":e.name+" : "),a+=this._encodeHTML(t),a+=""===a?"":"<br />",n=n.evolution;for(var o=0,r=n.length;r>o;o++)a+='<div style="padding-top:5px;">',n[o].detail&&(n[o].detail.img&&(a+='<img src="'+n[o].detail.img+'" style="float:left;width:40px;height:40px;">'),a+='<div style="margin-left:45px;">'+n[o].time+"<br/>",a+='<a href="'+n[o].detail.link+'" target="_blank">',a+=n[o].detail.text+"</a></div>",a+="</div>");return a}},_styleAxisPointer:function(e,t,i,n,a,o,r,s){if(e.length>0){var l,h,m=this.option.tooltip.axisPointer,V=m.type,U={line:{},cross:{},shadow:{}};for(var d in U)U[d].color=m[d+"Style"].color,U[d].width=m[d+"Style"].width,U[d].type=m[d+"Style"].type;for(var p=0,c=e.length;c>p;p++)l=e[p],h=this.query(l,"tooltip.axisPointer.type"),V=h||V,h&&(U[h].color=this.query(l,"tooltip.axisPointer."+h+"Style.color")||U[h].color,U[h].width=this.query(l,"tooltip.axisPointer."+h+"Style.width")||U[h].width,U[h].type=this.query(l,"tooltip.axisPointer."+h+"Style.type")||U[h].type);if("line"===V){var u=U.line.width,y=t==n;this._axisLineShape.style={xStart:y?this.subPixelOptimize(t,u):t,yStart:y?i:this.subPixelOptimize(i,u),xEnd:y?this.subPixelOptimize(n,u):n,yEnd:y?a:this.subPixelOptimize(a,u),strokeColor:U.line.color,lineWidth:u,lineType:U.line.type},this._axisLineShape.invisible=!1,this.zr.modShape(this._axisLineShape.id)}else if("cross"===V){var g=U.cross.width;this._axisCrossShape.style={brushType:"stroke",rect:this.component.grid.getArea(),x:this.subPixelOptimize(r,g),y:this.subPixelOptimize(s,g),text:("( "+this.component.xAxis.getAxis(0).getValueFromCoord(r)+" , "+this.component.yAxis.getAxis(0).getValueFromCoord(s)+" )").replace("  , "," ").replace(" ,  "," "),textPosition:"specific",strokeColor:U.cross.color,lineWidth:g,lineType:U.cross.type},this.component.grid.getXend()-r>100?(this._axisCrossShape.style.textAlign="left",this._axisCrossShape.style.textX=r+10):(this._axisCrossShape.style.textAlign="right",this._axisCrossShape.style.textX=r-10),s-this.component.grid.getY()>50?(this._axisCrossShape.style.textBaseline="bottom",this._axisCrossShape.style.textY=s-10):(this._axisCrossShape.style.textBaseline="top",this._axisCrossShape.style.textY=s+10),this._axisCrossShape.invisible=!1,this.zr.modShape(this._axisCrossShape.id)}else"shadow"===V&&((null==U.shadow.width||"auto"===U.shadow.width||isNaN(U.shadow.width))&&(U.shadow.width=o),t===n?Math.abs(this.component.grid.getX()-t)<2?(U.shadow.width/=2,t=n+=U.shadow.width/2):Math.abs(this.component.grid.getXend()-t)<2&&(U.shadow.width/=2,t=n-=U.shadow.width/2):i===a&&(Math.abs(this.component.grid.getY()-i)<2?(U.shadow.width/=2,i=a+=U.shadow.width/2):Math.abs(this.component.grid.getYend()-i)<2&&(U.shadow.width/=2,i=a-=U.shadow.width/2)),this._axisShadowShape.style={xStart:t,yStart:i,xEnd:n,yEnd:a,strokeColor:U.shadow.color,lineWidth:U.shadow.width},this._axisShadowShape.invisible=!1,this.zr.modShape(this._axisShadowShape.id));this.zr.refreshNextFrame()}},__onmousemove:function(e){if(clearTimeout(this._hidingTicket),clearTimeout(this._showingTicket),!this._mousein||!this._enterable){var t=e.target,i=m.getX(e.event),n=m.getY(e.event);if(t){this._curTarget=t,this._event=e.event,this._event.zrenderX=i,this._event.zrenderY=n;var a;if(this._needAxisTrigger&&this.component.polar&&-1!=(a=this.component.polar.isInside([i,n])))for(var o=this.option.series,l=0,h=o.length;h>l;l++)if(o[l].polarIndex===a&&"axis"===this.deepQuery([o[l],this.option],"tooltip.trigger")){this._curTarget=null;break}this._showingTicket=setTimeout(this._tryShow,this._showDelay)}else this._curTarget=!1,this._event=e.event,this._event.zrenderX=i,this._event.zrenderY=n,this._needAxisTrigger&&this.component.grid&&V.isInside(r,this.component.grid.getArea(),i,n)?this._showingTicket=setTimeout(this._tryShow,this._showDelay):this._needAxisTrigger&&this.component.polar&&-1!=this.component.polar.isInside([i,n])?this._showingTicket=setTimeout(this._tryShow,this._showDelay):(!this._event.connectTrigger&&this.messageCenter.dispatch(s.EVENT.TOOLTIP_OUT_GRID,this._event,null,this.myChart),this._hidingTicket=setTimeout(this._hide,this._hideDelay))}},__onglobalout:function(){clearTimeout(this._hidingTicket),clearTimeout(this._showingTicket),this._hidingTicket=setTimeout(this._hide,this._hideDelay)},__setContent:function(e,t){this._tDom&&(e===this._curTicket&&(this._tDom.innerHTML=t),setTimeout(this._refixed,20))},ontooltipHover:function(e,t){if(!this._lastTipShape||this._lastTipShape&&this._lastTipShape.dataIndex!=e.dataIndex){this._lastTipShape&&this._lastTipShape.tipShape.length>0&&(this.zr.delShape(this._lastTipShape.tipShape),this.shapeList.length=2);for(var i=0,n=t.length;n>i;i++)t[i].zlevel=this.getZlevelBase(),t[i].z=this.getZBase(),t[i].style=p.prototype.getHighlightStyle(t[i].style,t[i].highlightStyle),t[i].draggable=!1,t[i].hoverable=!1,t[i].clickable=!1,t[i].ondragend=null,t[i].ondragover=null,t[i].ondrop=null,this.shapeList.push(t[i]),this.zr.addShape(t[i]);this._lastTipShape={dataIndex:e.dataIndex,tipShape:t}}},ondragend:function(){this._hide()},onlegendSelected:function(e){this._selectedMap=e.selected},_setSelectedMap:function(){this._selectedMap=this.component.legend?d.clone(this.component.legend.getSelectedMap()):{}},_isSelected:function(e){return null!=this._selectedMap[e]?this._selectedMap[e]:!0},showTip:function(e){if(e){var t,i=this.option.series;if(null!=e.seriesIndex)t=e.seriesIndex;else for(var n=e.seriesName,a=0,o=i.length;o>a;a++)if(i[a].name===n){t=a;break}var r=i[t];if(null!=r){var m=this.myChart.chart[r.type],V="axis"===this.deepQuery([r,this.option],"tooltip.trigger");if(m)if(V){var U=e.dataIndex;switch(m.type){case s.CHART_TYPE_LINE:case s.CHART_TYPE_BAR:case s.CHART_TYPE_K:case s.CHART_TYPE_RADAR:if(null==this.component.polar||r.data[0].value.length<=U)return;var d=r.polarIndex||0,p=this.component.polar.getVector(d,U,"max");this._event={zrenderX:p[0],zrenderY:p[1]},this._showPolarTrigger(d,U)}}else{var c,u,y=m.shapeList;switch(m.type){case s.CHART_TYPE_LINE:case s.CHART_TYPE_BAR:case s.CHART_TYPE_K:case s.CHART_TYPE_TREEMAP:case s.CHART_TYPE_SCATTER:for(var U=e.dataIndex,a=0,o=y.length;o>a;a++)if(null==y[a]._mark&&l.get(y[a],"seriesIndex")==t&&l.get(y[a],"dataIndex")==U){this._curTarget=y[a],c=y[a].style.x,u=m.type!=s.CHART_TYPE_K?y[a].style.y:y[a].style.y[0];break}break;case s.CHART_TYPE_RADAR:for(var U=e.dataIndex,a=0,o=y.length;o>a;a++)if("polygon"===y[a].type&&l.get(y[a],"seriesIndex")==t&&l.get(y[a],"dataIndex")==U){this._curTarget=y[a];var p=this.component.polar.getCenter(r.polarIndex||0);c=p[0],u=p[1];break}break;case s.CHART_TYPE_PIE:for(var g=e.name,a=0,o=y.length;o>a;a++)if("sector"===y[a].type&&l.get(y[a],"seriesIndex")==t&&l.get(y[a],"name")==g){this._curTarget=y[a];var b=this._curTarget.style,f=(b.startAngle+b.endAngle)/2*Math.PI/180;c=this._curTarget.style.x+Math.cos(f)*b.r/1.5,u=this._curTarget.style.y-Math.sin(f)*b.r/1.5;break}break;case s.CHART_TYPE_MAP:for(var g=e.name,k=r.mapType,a=0,o=y.length;o>a;a++)if("text"===y[a].type&&y[a]._mapType===k&&y[a].style._name===g){this._curTarget=y[a],c=this._curTarget.style.x+this._curTarget.position[0],u=this._curTarget.style.y+this._curTarget.position[1];break}break;case s.CHART_TYPE_CHORD:for(var g=e.name,a=0,o=y.length;o>a;a++)if("sector"===y[a].type&&l.get(y[a],"name")==g){this._curTarget=y[a];var b=this._curTarget.style,f=(b.startAngle+b.endAngle)/2*Math.PI/180;return c=this._curTarget.style.x+Math.cos(f)*(b.r-2),u=this._curTarget.style.y-Math.sin(f)*(b.r-2),void this.zr.trigger(h.EVENT.MOUSEMOVE,{zrenderX:c,zrenderY:u})}break;case s.CHART_TYPE_FORCE:for(var g=e.name,a=0,o=y.length;o>a;a++)if("circle"===y[a].type&&l.get(y[a],"name")==g){this._curTarget=y[a],c=this._curTarget.position[0],u=this._curTarget.position[1];break}}null!=c&&null!=u&&(this._event={zrenderX:c,zrenderY:u},this.zr.addHoverShape(this._curTarget),this.zr.refreshHover(),this._showItemTrigger())}}}},hideTip:function(){this._hide()},refresh:function(e){if(this._zrHeight=this.zr.getHeight(),this._zrWidth=this.zr.getWidth(),this._lastTipShape&&this._lastTipShape.tipShape.length>0&&this.zr.delShape(this._lastTipShape.tipShape),this._lastTipShape=!1,this.shapeList.length=2,this._lastDataIndex=-1,this._lastSeriesIndex=-1,this._lastItemTriggerId=-1,e){this.option=e,this.option.tooltip=this.reformOption(this.option.tooltip),this.option.tooltip.textStyle=d.merge(this.option.tooltip.textStyle,this.ecTheme.textStyle),this._needAxisTrigger=!1,"axis"===this.option.tooltip.trigger&&(this._needAxisTrigger=!0);for(var t=this.option.series,i=0,n=t.length;n>i;i++)if("axis"===this.query(t[i],"tooltip.trigger")){this._needAxisTrigger=!0;break}this._showDelay=this.option.tooltip.showDelay,this._hideDelay=this.option.tooltip.hideDelay,this._defaultCssText=this._style(this.option.tooltip),this._setSelectedMap(),this._axisLineWidth=this.option.tooltip.axisPointer.lineStyle.width,this._enterable=this.option.tooltip.enterable,!this._enterable&&this._tDom.className.indexOf(h.elementClassName)<0&&(this._tDom.className+=" "+h.elementClassName)}if(this.showing){var a=this;setTimeout(function(){a.zr.trigger(h.EVENT.MOUSEMOVE,a.zr.handler._event)},50)}},onbeforDispose:function(){this._lastTipShape&&this._lastTipShape.tipShape.length>0&&this.zr.delShape(this._lastTipShape.tipShape),clearTimeout(this._hidingTicket),clearTimeout(this._showingTicket),this.zr.un(h.EVENT.MOUSEMOVE,this._onmousemove),this.zr.un(h.EVENT.GLOBALOUT,this._onglobalout),this.hasAppend&&this.dom.firstChild&&this.dom.firstChild.removeChild(this._tDom),this._tDom=null},_encodeHTML:function(e){return String(e).replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;").replace(/"/g,"&quot;").replace(/'/g,"&#39;")}},d.inherits(t,i),e("../component").define("tooltip",t),t}),i("echarts/component/legend",["require","./base","zrender/shape/Text","zrender/shape/Rectangle","zrender/shape/Sector","../util/shape/Icon","../util/shape/Candle","../config","zrender/tool/util","zrender/tool/area","../component"],function(e){function t(e,t,n,a,o){if(!this.query(a,"legend.data"))return void console.error("option.legend.data has not been defined.");i.call(this,e,t,n,a,o);var r=this;r._legendSelected=function(e){r.__legendSelected(e)},r._dispatchHoverLink=function(e){return r.__dispatchHoverLink(e)},this._colorIndex=0,this._colorMap={},this._selectedMap={},this._hasDataMap={},this.refresh(a)}var i=e("./base"),n=e("zrender/shape/Text"),a=e("zrender/shape/Rectangle"),o=e("zrender/shape/Sector"),r=e("../util/shape/Icon"),s=e("../util/shape/Candle"),l=e("../config");l.legend={zlevel:0,z:4,show:!0,orient:"horizontal",x:"center",y:"top",backgroundColor:"rgba(0,0,0,0)",borderColor:"#ccc",borderWidth:0,padding:5,itemGap:10,itemWidth:20,itemHeight:14,textStyle:{color:"#333"},selectedMode:!0};var h=e("zrender/tool/util"),m=e("zrender/tool/area");t.prototype={type:l.COMPONENT_TYPE_LEGEND,_buildShape:function(){if(this.legendOption.show){this._itemGroupLocation=this._getItemGroupLocation(),this._buildBackground(),this._buildItem();for(var e=0,t=this.shapeList.length;t>e;e++)this.zr.addShape(this.shapeList[e])}},_buildItem:function(){var e,t,i,a,o,s,l,V,U=this.legendOption.data,d=U.length,p=this.legendOption.textStyle,c=this.zr.getWidth(),u=this.zr.getHeight(),y=this._itemGroupLocation.x,g=this._itemGroupLocation.y,b=this.legendOption.itemWidth,f=this.legendOption.itemHeight,k=this.legendOption.itemGap;"vertical"===this.legendOption.orient&&"right"===this.legendOption.x&&(y=this._itemGroupLocation.x+this._itemGroupLocation.width-b);for(var x=0;d>x;x++)o=h.merge(U[x].textStyle||{},p),s=this.getFont(o),e=this._getName(U[x]),l=this._getFormatterName(e),""!==e?(t=U[x].icon||this._getSomethingByName(e).type,V=this.getColor(e),"horizontal"===this.legendOption.orient?200>c-y&&b+5+m.getTextWidth(l,s)+(x===d-1||""===U[x+1]?0:k)>=c-y&&(y=this._itemGroupLocation.x,g+=f+k):200>u-g&&f+(x===d-1||""===U[x+1]?0:k)>=u-g&&("right"===this.legendOption.x?y-=this._itemGroupLocation.maxWidth+k:y+=this._itemGroupLocation.maxWidth+k,g=this._itemGroupLocation.y),i=this._getItemShapeByType(y,g,b,f,this._selectedMap[e]&&this._hasDataMap[e]?V:"#ccc",t,V),i._name=e,i=new r(i),a={zlevel:this.getZlevelBase(),z:this.getZBase(),style:{x:y+b+5,y:g+f/2,color:this._selectedMap[e]?"auto"===o.color?V:o.color:"#ccc",text:l,textFont:s,textBaseline:"middle"},highlightStyle:{color:V,brushType:"fill"},hoverable:!!this.legendOption.selectedMode,clickable:!!this.legendOption.selectedMode},"vertical"===this.legendOption.orient&&"right"===this.legendOption.x&&(a.style.x-=b+10,a.style.textAlign="right"),a._name=e,a=new n(a),this.legendOption.selectedMode&&(i.onclick=a.onclick=this._legendSelected,i.onmouseover=a.onmouseover=this._dispatchHoverLink,i.hoverConnect=a.id,a.hoverConnect=i.id),this.shapeList.push(i),this.shapeList.push(a),"horizontal"===this.legendOption.orient?y+=b+5+m.getTextWidth(l,s)+k:g+=f+k):"horizontal"===this.legendOption.orient?(y=this._itemGroupLocation.x,g+=f+k):("right"===this.legendOption.x?y-=this._itemGroupLocation.maxWidth+k:y+=this._itemGroupLocation.maxWidth+k,g=this._itemGroupLocation.y);"horizontal"===this.legendOption.orient&&"center"===this.legendOption.x&&g!=this._itemGroupLocation.y&&this._mLineOptimize()},_getName:function(e){return"undefined"!=typeof e.name?e.name:e},_getFormatterName:function(e){var t,i=this.legendOption.formatter;return t="function"==typeof i?i.call(this.myChart,e):"string"==typeof i?i.replace("{name}",e):e},_getFormatterNameFromData:function(e){var t=this._getName(e);return this._getFormatterName(t)},_mLineOptimize:function(){for(var e=[],t=this._itemGroupLocation.x,i=2,n=this.shapeList.length;n>i;i++)this.shapeList[i].style.x===t?e.push((this._itemGroupLocation.width-(this.shapeList[i-1].style.x+m.getTextWidth(this.shapeList[i-1].style.text,this.shapeList[i-1].style.textFont)-t))/2):i===n-1&&e.push((this._itemGroupLocation.width-(this.shapeList[i].style.x+m.getTextWidth(this.shapeList[i].style.text,this.shapeList[i].style.textFont)-t))/2);for(var a=-1,i=1,n=this.shapeList.length;n>i;i++)this.shapeList[i].style.x===t&&a++,0!==e[a]&&(this.shapeList[i].style.x+=e[a])},_buildBackground:function(){var e=this.reformCssArray(this.legendOption.padding);this.shapeList.push(new a({zlevel:this.getZlevelBase(),z:this.getZBase(),hoverable:!1,style:{x:this._itemGroupLocation.x-e[3],y:this._itemGroupLocation.y-e[0],width:this._itemGroupLocation.width+e[3]+e[1],height:this._itemGroupLocation.height+e[0]+e[2],brushType:0===this.legendOption.borderWidth?"fill":"both",color:this.legendOption.backgroundColor,strokeColor:this.legendOption.borderColor,lineWidth:this.legendOption.borderWidth}}))},_getItemGroupLocation:function(){var e=this.legendOption.data,t=e.length,i=this.legendOption.itemGap,n=this.legendOption.itemWidth+5,a=this.legendOption.itemHeight,o=this.legendOption.textStyle,r=this.getFont(o),s=0,l=0,V=this.reformCssArray(this.legendOption.padding),U=this.zr.getWidth()-V[1]-V[3],d=this.zr.getHeight()-V[0]-V[2],p=0,c=0;if("horizontal"===this.legendOption.orient){l=a;for(var u=0;t>u;u++)if(""!==this._getName(e[u])){var y=m.getTextWidth(this._getFormatterNameFromData(e[u]),e[u].textStyle?this.getFont(h.merge(e[u].textStyle||{},o)):r);p+n+y+i>U?(p-=i,s=Math.max(s,p),l+=a+i,p=0):(p+=n+y+i,s=Math.max(s,p-i))}else p-=i,s=Math.max(s,p),l+=a+i,p=0}else{for(var u=0;t>u;u++)c=Math.max(c,m.getTextWidth(this._getFormatterNameFromData(e[u]),e[u].textStyle?this.getFont(h.merge(e[u].textStyle||{},o)):r));c+=n,s=c;for(var u=0;t>u;u++)""!==this._getName(e[u])?p+a+i>d?(s+=c+i,p-=i,l=Math.max(l,p),p=0):(p+=a+i,l=Math.max(l,p-i)):(s+=c+i,p-=i,l=Math.max(l,p),p=0)}U=this.zr.getWidth(),d=this.zr.getHeight();var g;switch(this.legendOption.x){case"center":g=Math.floor((U-s)/2);break;case"left":g=V[3]+this.legendOption.borderWidth;break;case"right":g=U-s-V[1]-V[3]-2*this.legendOption.borderWidth;break;default:g=this.parsePercent(this.legendOption.x,U)}var b;switch(this.legendOption.y){case"top":b=V[0]+this.legendOption.borderWidth;break;case"bottom":b=d-l-V[0]-V[2]-2*this.legendOption.borderWidth;break;case"center":b=Math.floor((d-l)/2);break;default:b=this.parsePercent(this.legendOption.y,d)}return{x:g,y:b,width:s,height:l,maxWidth:c}},_getSomethingByName:function(e){for(var t,i=this.option.series,n=0,a=i.length;a>n;n++){if(i[n].name===e)return{type:i[n].type,series:i[n],seriesIndex:n,data:null,dataIndex:-1};if(i[n].type===l.CHART_TYPE_PIE||i[n].type===l.CHART_TYPE_RADAR||i[n].type===l.CHART_TYPE_CHORD||i[n].type===l.CHART_TYPE_FORCE||i[n].type===l.CHART_TYPE_FUNNEL||i[n].type===l.CHART_TYPE_TREEMAP){t=i[n].categories||i[n].data||i[n].nodes;for(var o=0,r=t.length;r>o;o++)if(t[o].name===e)return{type:i[n].type,series:i[n],seriesIndex:n,data:t[o],dataIndex:o}}}return{type:"bar",series:null,seriesIndex:-1,data:null,dataIndex:-1}},_getItemShapeByType:function(e,t,i,n,a,o,r){var s,h="#ccc"===a?r:a,m={zlevel:this.getZlevelBase(),z:this.getZBase(),style:{iconType:"legendicon"+o,x:e,y:t,width:i,height:n,color:a,strokeColor:a,lineWidth:2},highlightStyle:{color:h,strokeColor:h,lineWidth:1},hoverable:this.legendOption.selectedMode,clickable:this.legendOption.selectedMode};if(o.match("image")){var s=o.replace(new RegExp("^image:\\/\\/"),"");o="image"}switch(o){case"line":m.style.brushType="stroke",m.highlightStyle.lineWidth=3;break;case"radar":case"venn":case"tree":case"treemap":case"scatter":m.highlightStyle.lineWidth=3;break;case"k":m.style.brushType="both",m.highlightStyle.lineWidth=3,m.highlightStyle.color=m.style.color=this.deepQuery([this.ecTheme,l],"k.itemStyle.normal.color")||"#fff",m.style.strokeColor="#ccc"!=a?this.deepQuery([this.ecTheme,l],"k.itemStyle.normal.lineStyle.color")||"#ff3200":a;break;case"image":m.style.iconType="image",m.style.image=s,"#ccc"===a&&(m.style.opacity=.5)}return m},__legendSelected:function(e){var t=e.target._name;if("single"===this.legendOption.selectedMode)for(var i in this._selectedMap)this._selectedMap[i]=!1;this._selectedMap[t]=!this._selectedMap[t],this.messageCenter.dispatch(l.EVENT.LEGEND_SELECTED,e.event,{selected:this._selectedMap,target:t},this.myChart)},__dispatchHoverLink:function(e){this.messageCenter.dispatch(l.EVENT.LEGEND_HOVERLINK,e.event,{target:e.target._name},this.myChart)},refresh:function(e){if(e){this.option=e||this.option,this.option.legend=this.reformOption(this.option.legend),this.legendOption=this.option.legend;var t,i,n,a,o=this.legendOption.data||[];if(this.legendOption.selected)for(var r in this.legendOption.selected)this._selectedMap[r]="undefined"!=typeof this._selectedMap[r]?this._selectedMap[r]:this.legendOption.selected[r];for(var s=0,h=o.length;h>s;s++)t=this._getName(o[s]),""!==t&&(i=this._getSomethingByName(t),i.series?(this._hasDataMap[t]=!0,a=!i.data||i.type!==l.CHART_TYPE_PIE&&i.type!==l.CHART_TYPE_FORCE&&i.type!==l.CHART_TYPE_FUNNEL?[i.series]:[i.data,i.series],n=this.getItemStyleColor(this.deepQuery(a,"itemStyle.normal.color"),i.seriesIndex,i.dataIndex,i.data),n&&i.type!=l.CHART_TYPE_K&&this.setColor(t,n),this._selectedMap[t]=null!=this._selectedMap[t]?this._selectedMap[t]:!0):this._hasDataMap[t]=!1)}this.clear(),this._buildShape()},getRelatedAmount:function(e){for(var t,i=0,n=this.option.series,a=0,o=n.length;o>a;a++)if(n[a].name===e&&i++,n[a].type===l.CHART_TYPE_PIE||n[a].type===l.CHART_TYPE_RADAR||n[a].type===l.CHART_TYPE_CHORD||n[a].type===l.CHART_TYPE_FORCE||n[a].type===l.CHART_TYPE_FUNNEL){t=n[a].type!=l.CHART_TYPE_FORCE?n[a].data:n[a].categories;for(var r=0,s=t.length;s>r;r++)t[r].name===e&&"-"!=t[r].value&&i++}return i},setColor:function(e,t){this._colorMap[e]=t},getColor:function(e){return this._colorMap[e]||(this._colorMap[e]=this.zr.getColor(this._colorIndex++)),this._colorMap[e]},hasColor:function(e){return this._colorMap[e]?this._colorMap[e]:!1},add:function(e,t){
+for(var i=this.legendOption.data,n=0,a=i.length;a>n;n++)if(this._getName(i[n])===e)return;this.legendOption.data.push(e),this.setColor(e,t),this._selectedMap[e]=!0,this._hasDataMap[e]=!0},del:function(e){for(var t=this.legendOption.data,i=0,n=t.length;n>i;i++)if(this._getName(t[i])===e)return this.legendOption.data.splice(i,1)},getItemShape:function(e){if(null!=e)for(var t,i=0,n=this.shapeList.length;n>i;i++)if(t=this.shapeList[i],t._name===e&&"text"!=t.type)return t},setItemShape:function(e,t){for(var i,n=0,a=this.shapeList.length;a>n;n++)i=this.shapeList[n],i._name===e&&"text"!=i.type&&(this._selectedMap[e]||(t.style.color="#ccc",t.style.strokeColor="#ccc"),this.zr.modShape(i.id,t))},isSelected:function(e){return"undefined"!=typeof this._selectedMap[e]?this._selectedMap[e]:!0},getSelectedMap:function(){return this._selectedMap},setSelected:function(e,t){if("single"===this.legendOption.selectedMode)for(var i in this._selectedMap)this._selectedMap[i]=!1;this._selectedMap[e]=t,this.messageCenter.dispatch(l.EVENT.LEGEND_SELECTED,null,{selected:this._selectedMap,target:e},this.myChart)},onlegendSelected:function(e,t){var i=e.selected;for(var n in i)this._selectedMap[n]!=i[n]&&(t.needRefresh=!0),this._selectedMap[n]=i[n]}};var V={line:function(e,t){var i=t.height/2;e.moveTo(t.x,t.y+i),e.lineTo(t.x+t.width,t.y+i)},pie:function(e,t){var i=t.x,n=t.y,a=t.width,r=t.height;o.prototype.buildPath(e,{x:i+a/2,y:n+r+2,r:r,r0:6,startAngle:45,endAngle:135})},eventRiver:function(e,t){var i=t.x,n=t.y,a=t.width,o=t.height;e.moveTo(i,n+o),e.bezierCurveTo(i+a,n+o,i,n+4,i+a,n+4),e.lineTo(i+a,n),e.bezierCurveTo(i,n,i+a,n+o-4,i,n+o-4),e.lineTo(i,n+o)},k:function(e,t){var i=t.x,n=t.y,a=t.width,o=t.height;s.prototype.buildPath(e,{x:i+a/2,y:[n+1,n+1,n+o-6,n+o],width:a-6})},bar:function(e,t){var i=t.x,n=t.y+1,a=t.width,o=t.height-2,r=3;e.moveTo(i+r,n),e.lineTo(i+a-r,n),e.quadraticCurveTo(i+a,n,i+a,n+r),e.lineTo(i+a,n+o-r),e.quadraticCurveTo(i+a,n+o,i+a-r,n+o),e.lineTo(i+r,n+o),e.quadraticCurveTo(i,n+o,i,n+o-r),e.lineTo(i,n+r),e.quadraticCurveTo(i,n,i+r,n)},force:function(e,t){r.prototype.iconLibrary.circle(e,t)},radar:function(e,t){var i=6,n=t.x+t.width/2,a=t.y+t.height/2,o=t.height/2,r=2*Math.PI/i,s=-Math.PI/2,l=n+o*Math.cos(s),h=a+o*Math.sin(s);e.moveTo(l,h),s+=r;for(var m=0,V=i-1;V>m;m++)e.lineTo(n+o*Math.cos(s),a+o*Math.sin(s)),s+=r;e.lineTo(l,h)}};V.chord=V.pie,V.map=V.bar;for(var U in V)r.prototype.iconLibrary["legendicon"+U]=V[U];return h.inherits(t,i),e("../component").define("legend",t),t}),i("echarts/util/ecData",[],function(){function e(e,t,i,n,a,o,r,s){var l;return"undefined"!=typeof n&&(l=null==n.value?n:n.value),e._echartsData={_series:t,_seriesIndex:i,_data:n,_dataIndex:a,_name:o,_value:l,_special:r,_special2:s},e._echartsData}function t(e,t){var i=e._echartsData;if(!t)return i;switch(t){case"series":case"seriesIndex":case"data":case"dataIndex":case"name":case"value":case"special":case"special2":return i&&i["_"+t]}return null}function i(e,t,i){switch(e._echartsData=e._echartsData||{},t){case"series":case"seriesIndex":case"data":case"dataIndex":case"name":case"value":case"special":case"special2":e._echartsData["_"+t]=i}}function n(e,t){t._echartsData={_series:e._echartsData._series,_seriesIndex:e._echartsData._seriesIndex,_data:e._echartsData._data,_dataIndex:e._echartsData._dataIndex,_name:e._echartsData._name,_value:e._echartsData._value,_special:e._echartsData._special,_special2:e._echartsData._special2}}return{pack:e,set:i,get:t,clone:n}}),i("echarts/chart",[],function(){var e={},t={};return e.define=function(i,n){return t[i]=n,e},e.get=function(e){return t[e]},e}),i("zrender/tool/color",["require","../tool/util"],function(e){function t(e){D=e}function i(){D=N}function n(e,t){return e=0|e,t=t||D,t[e%t.length]}function a(e){B=e}function o(){H=B}function r(){return B}function s(e,t,i,n,a,o,r){O||(O=P.getContext());for(var s=O.createRadialGradient(e,t,i,n,a,o),l=0,h=r.length;h>l;l++)s.addColorStop(r[l][0],r[l][1]);return s.__nonRecursion=!0,s}function l(e,t,i,n,a){O||(O=P.getContext());for(var o=O.createLinearGradient(e,t,i,n),r=0,s=a.length;s>r;r++)o.addColorStop(a[r][0],a[r][1]);return o.__nonRecursion=!0,o}function h(e,t,i){e=p(e),t=p(t),e=I(e),t=I(t);for(var n=[],a=(t[0]-e[0])/i,o=(t[1]-e[1])/i,r=(t[2]-e[2])/i,s=(t[3]-e[3])/i,l=0,h=e[0],m=e[1],U=e[2],d=e[3];i>l;l++)n[l]=V([S(Math.floor(h),[0,255]),S(Math.floor(m),[0,255]),S(Math.floor(U),[0,255]),d.toFixed(4)-0],"rgba"),h+=a,m+=o,U+=r,d+=s;return h=t[0],m=t[1],U=t[2],d=t[3],n[l]=V([h,m,U,d],"rgba"),n}function m(e,t){var i=[],n=e.length;if(void 0===t&&(t=20),1===n)i=h(e[0],e[0],t);else if(n>1)for(var a=0,o=n-1;o>a;a++){var r=h(e[a],e[a+1],t);o-1>a&&r.pop(),i=i.concat(r)}return i}function V(e,t){if(t=t||"rgb",e&&(3===e.length||4===e.length)){if(e=C(e,function(e){return e>1?Math.ceil(e):e}),t.indexOf("hex")>-1)return"#"+((1<<24)+(e[0]<<16)+(e[1]<<8)+ +e[2]).toString(16).slice(1);if(t.indexOf("hs")>-1){var i=C(e.slice(1,3),function(e){return e+"%"});e[1]=i[0],e[2]=i[1]}return t.indexOf("a")>-1?(3===e.length&&e.push(1),e[3]=S(e[3],[0,1]),t+"("+e.slice(0,4).join(",")+")"):t+"("+e.slice(0,3).join(",")+")"}}function U(e){e=L(e),e.indexOf("rgba")<0&&(e=p(e));var t=[],i=0;return e.replace(/[\d.]+/g,function(e){e=3>i?0|e:+e,t[i++]=e}),t}function d(e,t){if(!E(e))return e;var i=I(e),n=i[3];return"undefined"==typeof n&&(n=1),e.indexOf("hsb")>-1?i=F(i):e.indexOf("hsl")>-1&&(i=T(i)),t.indexOf("hsb")>-1||t.indexOf("hsv")>-1?i=A(i):t.indexOf("hsl")>-1&&(i=M(i)),i[3]=n,V(i,t)}function p(e){return d(e,"rgba")}function c(e){return d(e,"rgb")}function u(e){return d(e,"hex")}function y(e){return d(e,"hsva")}function g(e){return d(e,"hsv")}function b(e){return d(e,"hsba")}function f(e){return d(e,"hsb")}function k(e){return d(e,"hsla")}function x(e){return d(e,"hsl")}function _(e){for(var t in G)if(u(G[t])===u(e))return t;return null}function L(e){return String(e).replace(/\s+/g,"")}function W(e){if(G[e]&&(e=G[e]),e=L(e),e=e.replace(/hsv/i,"hsb"),/^#[\da-f]{3}$/i.test(e)){e=parseInt(e.slice(1),16);var t=(3840&e)<<8,i=(240&e)<<4,n=15&e;e="#"+((1<<24)+(t<<4)+t+(i<<4)+i+(n<<4)+n).toString(16).slice(1)}return e}function X(e,t){if(!E(e))return e;var i=t>0?1:-1;"undefined"==typeof t&&(t=0),t=Math.abs(t)>1?1:Math.abs(t),e=c(e);for(var n=I(e),a=0;3>a;a++)n[a]=1===i?n[a]*(1-t)|0:(255-n[a])*t+n[a]|0;return"rgb("+n.join(",")+")"}function v(e){if(!E(e))return e;var t=I(p(e));return t=C(t,function(e){return 255-e}),V(t,"rgb")}function w(e,t,i){if(!E(e)||!E(t))return e;"undefined"==typeof i&&(i=.5),i=1-S(i,[0,1]);for(var n=2*i-1,a=I(p(e)),o=I(p(t)),r=a[3]-o[3],s=((n*r===-1?n:(n+r)/(1+n*r))+1)/2,l=1-s,h=[],m=0;3>m;m++)h[m]=a[m]*s+o[m]*l;var U=a[3]*i+o[3]*(1-i);return U=Math.max(0,Math.min(1,U)),1===a[3]&&1===o[3]?V(h,"rgb"):(h[3]=U,V(h,"rgba"))}function K(){return"#"+(Math.random().toString(16)+"0000").slice(2,8)}function I(e){e=W(e);var t=e.match(R);if(null===t)throw new Error("The color format error");var i,n,a,o=[];if(t[2])i=t[2].replace("#","").split(""),a=[i[0]+i[1],i[2]+i[3],i[4]+i[5]],o=C(a,function(e){return S(parseInt(e,16),[0,255])});else if(t[4]){var r=t[4].split(",");n=r[3],a=r.slice(0,3),o=C(a,function(e){return e=Math.floor(e.indexOf("%")>0?2.55*parseInt(e,0):e),S(e,[0,255])}),"undefined"!=typeof n&&o.push(S(parseFloat(n),[0,1]))}else if(t[5]||t[6]){var s=(t[5]||t[6]).split(","),l=parseInt(s[0],0)/360,h=s[1],m=s[2];n=s[3],o=C([h,m],function(e){return S(parseFloat(e)/100,[0,1])}),o.unshift(l),"undefined"!=typeof n&&o.push(S(parseFloat(n),[0,1]))}return o}function J(e,t){if(!E(e))return e;null===t&&(t=1);var i=I(p(e));return i[3]=S(Number(t).toFixed(4),[0,1]),V(i,"rgba")}function C(e,t){if("function"!=typeof t)throw new TypeError;for(var i=e?e.length:0,n=0;i>n;n++)e[n]=t(e[n]);return e}function S(e,t){return e<=t[0]?e=t[0]:e>=t[1]&&(e=t[1]),e}function E(e){return e instanceof Array||"string"==typeof e}function F(e){var t,i,n,a=e[0],o=e[1],r=e[2];if(0===o)t=255*r,i=255*r,n=255*r;else{var s=6*a;6===s&&(s=0);var l=0|s,h=r*(1-o),m=r*(1-o*(s-l)),V=r*(1-o*(1-(s-l))),U=0,d=0,p=0;0===l?(U=r,d=V,p=h):1===l?(U=m,d=r,p=h):2===l?(U=h,d=r,p=V):3===l?(U=h,d=m,p=r):4===l?(U=V,d=h,p=r):(U=r,d=h,p=m),t=255*U,i=255*d,n=255*p}return[t,i,n]}function T(e){var t,i,n,a=e[0],o=e[1],r=e[2];if(0===o)t=255*r,i=255*r,n=255*r;else{var s;s=.5>r?r*(1+o):r+o-o*r;var l=2*r-s;t=255*z(l,s,a+1/3),i=255*z(l,s,a),n=255*z(l,s,a-1/3)}return[t,i,n]}function z(e,t,i){return 0>i&&(i+=1),i>1&&(i-=1),1>6*i?e+6*(t-e)*i:1>2*i?t:2>3*i?e+(t-e)*(2/3-i)*6:e}function A(e){var t,i,n=e[0]/255,a=e[1]/255,o=e[2]/255,r=Math.min(n,a,o),s=Math.max(n,a,o),l=s-r,h=s;if(0===l)t=0,i=0;else{i=l/s;var m=((s-n)/6+l/2)/l,V=((s-a)/6+l/2)/l,U=((s-o)/6+l/2)/l;n===s?t=U-V:a===s?t=1/3+m-U:o===s&&(t=2/3+V-m),0>t&&(t+=1),t>1&&(t-=1)}return t=360*t,i=100*i,h=100*h,[t,i,h]}function M(e){var t,i,n=e[0]/255,a=e[1]/255,o=e[2]/255,r=Math.min(n,a,o),s=Math.max(n,a,o),l=s-r,h=(s+r)/2;if(0===l)t=0,i=0;else{i=.5>h?l/(s+r):l/(2-s-r);var m=((s-n)/6+l/2)/l,V=((s-a)/6+l/2)/l,U=((s-o)/6+l/2)/l;n===s?t=U-V:a===s?t=1/3+m-U:o===s&&(t=2/3+V-m),0>t&&(t+=1),t>1&&(t-=1)}return t=360*t,i=100*i,h=100*h,[t,i,h]}var O,P=e("../tool/util"),D=["#ff9277"," #dddd00"," #ffc877"," #bbe3ff"," #d5ffbb","#bbbbff"," #ddb000"," #b0dd00"," #e2bbff"," #ffbbe3","#ff7777"," #ff9900"," #83dd00"," #77e3ff"," #778fff","#c877ff"," #ff77ab"," #ff6600"," #aa8800"," #77c7ff","#ad77ff"," #ff77ff"," #dd0083"," #777700"," #00aa00","#0088aa"," #8400dd"," #aa0088"," #dd0000"," #772e00"],N=D,B="rgba(255,255,0,0.5)",H=B,R=/^\s*((#[a-f\d]{6})|(#[a-f\d]{3})|rgba?\(\s*([\d\.]+%?\s*,\s*[\d\.]+%?\s*,\s*[\d\.]+%?(?:\s*,\s*[\d\.]+%?)?)\s*\)|hsba?\(\s*([\d\.]+(?:deg|\xb0|%)?\s*,\s*[\d\.]+%?\s*,\s*[\d\.]+%?(?:\s*,\s*[\d\.]+)?)%?\s*\)|hsla?\(\s*([\d\.]+(?:deg|\xb0|%)?\s*,\s*[\d\.]+%?\s*,\s*[\d\.]+%?(?:\s*,\s*[\d\.]+)?)%?\s*\))\s*$/i,G={aliceblue:"#f0f8ff",antiquewhite:"#faebd7",aqua:"#0ff",aquamarine:"#7fffd4",azure:"#f0ffff",beige:"#f5f5dc",bisque:"#ffe4c4",black:"#000",blanchedalmond:"#ffebcd",blue:"#00f",blueviolet:"#8a2be2",brown:"#a52a2a",burlywood:"#deb887",cadetblue:"#5f9ea0",chartreuse:"#7fff00",chocolate:"#d2691e",coral:"#ff7f50",cornflowerblue:"#6495ed",cornsilk:"#fff8dc",crimson:"#dc143c",cyan:"#0ff",darkblue:"#00008b",darkcyan:"#008b8b",darkgoldenrod:"#b8860b",darkgray:"#a9a9a9",darkgrey:"#a9a9a9",darkgreen:"#006400",darkkhaki:"#bdb76b",darkmagenta:"#8b008b",darkolivegreen:"#556b2f",darkorange:"#ff8c00",darkorchid:"#9932cc",darkred:"#8b0000",darksalmon:"#e9967a",darkseagreen:"#8fbc8f",darkslateblue:"#483d8b",darkslategray:"#2f4f4f",darkslategrey:"#2f4f4f",darkturquoise:"#00ced1",darkviolet:"#9400d3",deeppink:"#ff1493",deepskyblue:"#00bfff",dimgray:"#696969",dimgrey:"#696969",dodgerblue:"#1e90ff",firebrick:"#b22222",floralwhite:"#fffaf0",forestgreen:"#228b22",fuchsia:"#f0f",gainsboro:"#dcdcdc",ghostwhite:"#f8f8ff",gold:"#ffd700",goldenrod:"#daa520",gray:"#808080",grey:"#808080",green:"#008000",greenyellow:"#adff2f",honeydew:"#f0fff0",hotpink:"#ff69b4",indianred:"#cd5c5c",indigo:"#4b0082",ivory:"#fffff0",khaki:"#f0e68c",lavender:"#e6e6fa",lavenderblush:"#fff0f5",lawngreen:"#7cfc00",lemonchiffon:"#fffacd",lightblue:"#add8e6",lightcoral:"#f08080",lightcyan:"#e0ffff",lightgoldenrodyellow:"#fafad2",lightgray:"#d3d3d3",lightgrey:"#d3d3d3",lightgreen:"#90ee90",lightpink:"#ffb6c1",lightsalmon:"#ffa07a",lightseagreen:"#20b2aa",lightskyblue:"#87cefa",lightslategray:"#789",lightslategrey:"#789",lightsteelblue:"#b0c4de",lightyellow:"#ffffe0",lime:"#0f0",limegreen:"#32cd32",linen:"#faf0e6",magenta:"#f0f",maroon:"#800000",mediumaquamarine:"#66cdaa",mediumblue:"#0000cd",mediumorchid:"#ba55d3",mediumpurple:"#9370d8",mediumseagreen:"#3cb371",mediumslateblue:"#7b68ee",mediumspringgreen:"#00fa9a",mediumturquoise:"#48d1cc",mediumvioletred:"#c71585",midnightblue:"#191970",mintcream:"#f5fffa",mistyrose:"#ffe4e1",moccasin:"#ffe4b5",navajowhite:"#ffdead",navy:"#000080",oldlace:"#fdf5e6",olive:"#808000",olivedrab:"#6b8e23",orange:"#ffa500",orangered:"#ff4500",orchid:"#da70d6",palegoldenrod:"#eee8aa",palegreen:"#98fb98",paleturquoise:"#afeeee",palevioletred:"#d87093",papayawhip:"#ffefd5",peachpuff:"#ffdab9",peru:"#cd853f",pink:"#ffc0cb",plum:"#dda0dd",powderblue:"#b0e0e6",purple:"#800080",red:"#f00",rosybrown:"#bc8f8f",royalblue:"#4169e1",saddlebrown:"#8b4513",salmon:"#fa8072",sandybrown:"#f4a460",seagreen:"#2e8b57",seashell:"#fff5ee",sienna:"#a0522d",silver:"#c0c0c0",skyblue:"#87ceeb",slateblue:"#6a5acd",slategray:"#708090",slategrey:"#708090",snow:"#fffafa",springgreen:"#00ff7f",steelblue:"#4682b4",tan:"#d2b48c",teal:"#008080",thistle:"#d8bfd8",tomato:"#ff6347",turquoise:"#40e0d0",violet:"#ee82ee",wheat:"#f5deb3",white:"#fff",whitesmoke:"#f5f5f5",yellow:"#ff0",yellowgreen:"#9acd32"};return{customPalette:t,resetPalette:i,getColor:n,getHighlightColor:r,customHighlight:a,resetHighlight:o,getRadialGradient:s,getLinearGradient:l,getGradientColors:m,getStepColors:h,reverse:v,mix:w,lift:X,trim:L,random:K,toRGB:c,toRGBA:p,toHex:u,toHSL:x,toHSLA:k,toHSB:f,toHSBA:b,toHSV:g,toHSVA:y,toName:_,toColor:V,toArray:U,alpha:J,getData:I}}),i("echarts/component/timeline",["require","./base","zrender/shape/Rectangle","../util/shape/Icon","../util/shape/Chain","../config","zrender/tool/util","zrender/tool/area","zrender/tool/event","../component"],function(e){function t(e,t,i,a,o){n.call(this,e,t,i,a,o);var r=this;if(r._onclick=function(e){return r.__onclick(e)},r._ondrift=function(e,t){return r.__ondrift(this,e,t)},r._ondragend=function(){return r.__ondragend()},r._setCurrentOption=function(){var e=r.timelineOption;r.currentIndex%=e.data.length;var t=r.options[r.currentIndex]||{};r.myChart._setOption(t,e.notMerge,!0),r.messageCenter.dispatch(s.EVENT.TIMELINE_CHANGED,null,{currentIndex:r.currentIndex,data:null!=e.data[r.currentIndex].name?e.data[r.currentIndex].name:e.data[r.currentIndex]},r.myChart)},r._onFrame=function(){r._setCurrentOption(),r._syncHandleShape(),r.timelineOption.autoPlay&&(r.playTicket=setTimeout(function(){return r.currentIndex+=1,!r.timelineOption.loop&&r.currentIndex>=r.timelineOption.data.length?(r.currentIndex=r.timelineOption.data.length-1,void r.stop()):void r._onFrame()},r.timelineOption.playInterval))},this.setTheme(!1),this.options=this.option.options,this.currentIndex=this.timelineOption.currentIndex%this.timelineOption.data.length,this.timelineOption.notMerge||0===this.currentIndex||(this.options[this.currentIndex]=l.merge(this.options[this.currentIndex],this.options[0])),this.timelineOption.show&&(this._buildShape(),this._syncHandleShape()),this._setCurrentOption(),this.timelineOption.autoPlay){var r=this;this.playTicket=setTimeout(function(){r.play()},null!=this.ecTheme.animationDuration?this.ecTheme.animationDuration:s.animationDuration)}}function i(e,t){var i=2,n=t.x+i,a=t.y+i+2,r=t.width-i,s=t.height-i,l=t.symbol;if("last"===l)e.moveTo(n+r-2,a+s/3),e.lineTo(n+r-2,a),e.lineTo(n+2,a+s/2),e.lineTo(n+r-2,a+s),e.lineTo(n+r-2,a+s/3*2),e.moveTo(n,a),e.lineTo(n,a);else if("next"===l)e.moveTo(n+2,a+s/3),e.lineTo(n+2,a),e.lineTo(n+r-2,a+s/2),e.lineTo(n+2,a+s),e.lineTo(n+2,a+s/3*2),e.moveTo(n,a),e.lineTo(n,a);else if("play"===l)if("stop"===t.status)e.moveTo(n+2,a),e.lineTo(n+r-2,a+s/2),e.lineTo(n+2,a+s),e.lineTo(n+2,a);else{var h="both"===t.brushType?2:3;e.rect(n+2,a,h,s),e.rect(n+r-h-2,a,h,s)}else if(l.match("image")){var m="";m=l.replace(new RegExp("^image:\\/\\/"),""),l=o.prototype.iconLibrary.image,l(e,{x:n,y:a,width:r,height:s,image:m})}}var n=e("./base"),a=e("zrender/shape/Rectangle"),o=e("../util/shape/Icon"),r=e("../util/shape/Chain"),s=e("../config");s.timeline={zlevel:0,z:4,show:!0,type:"time",notMerge:!1,realtime:!0,x:80,x2:80,y2:0,height:50,backgroundColor:"rgba(0,0,0,0)",borderColor:"#ccc",borderWidth:0,padding:5,controlPosition:"left",autoPlay:!1,loop:!0,playInterval:2e3,lineStyle:{width:1,color:"#666",type:"dashed"},label:{show:!0,interval:"auto",rotate:0,textStyle:{color:"#333"}},checkpointStyle:{symbol:"auto",symbolSize:"auto",color:"auto",borderColor:"auto",borderWidth:"auto",label:{show:!1,textStyle:{color:"auto"}}},controlStyle:{itemSize:15,itemGap:5,normal:{color:"#333"},emphasis:{color:"#1e90ff"}},symbol:"emptyDiamond",symbolSize:4,currentIndex:0};var l=e("zrender/tool/util"),h=e("zrender/tool/area"),m=e("zrender/tool/event");return t.prototype={type:s.COMPONENT_TYPE_TIMELINE,_buildShape:function(){if(this._location=this._getLocation(),this._buildBackground(),this._buildControl(),this._chainPoint=this._getChainPoint(),this.timelineOption.label.show)for(var e=this._getInterval(),t=0,i=this._chainPoint.length;i>t;t+=e)this._chainPoint[t].showLabel=!0;this._buildChain(),this._buildHandle();for(var t=0,n=this.shapeList.length;n>t;t++)this.zr.addShape(this.shapeList[t])},_getLocation:function(){var e,t=this.timelineOption,i=this.reformCssArray(this.timelineOption.padding),n=this.zr.getWidth(),a=this.parsePercent(t.x,n),o=this.parsePercent(t.x2,n);null==t.width?(e=n-a-o,o=n-o):(e=this.parsePercent(t.width,n),o=a+e);var r,s,l=this.zr.getHeight(),h=this.parsePercent(t.height,l);return null!=t.y?(r=this.parsePercent(t.y,l),s=r+h):(s=l-this.parsePercent(t.y2,l),r=s-h),{x:a+i[3],y:r+i[0],x2:o-i[1],y2:s-i[2],width:e-i[1]-i[3],height:h-i[0]-i[2]}},_getReformedLabel:function(e){var t=this.timelineOption,i=null!=t.data[e].name?t.data[e].name:t.data[e],n=t.data[e].formatter||t.label.formatter;return n&&("function"==typeof n?i=n.call(this.myChart,i):"string"==typeof n&&(i=n.replace("{value}",i))),i},_getInterval:function(){var e=this._chainPoint,t=this.timelineOption,i=t.label.interval;if("auto"===i){var n=t.label.textStyle.fontSize,a=t.data,o=t.data.length;if(o>3){var r,s,l=!1;for(i=0;!l&&o>i;){i++,l=!0;for(var m=i;o>m;m+=i){if(r=e[m].x-e[m-i].x,0!==t.label.rotate)s=n;else if(a[m].textStyle)s=h.getTextWidth(e[m].name,e[m].textFont);else{var V=e[m].name+"",U=(V.match(/\w/g)||"").length,d=V.length-U;s=U*n*2/3+d*n}if(s>r){l=!1;break}}}}else i=1}else i=i-0+1;return i},_getChainPoint:function(){function e(e){return null!=h[e].name?h[e].name:h[e]+""}var t,i=this.timelineOption,n=i.symbol.toLowerCase(),a=i.symbolSize,o=i.label.rotate,r=i.label.textStyle,s=this.getFont(r),h=i.data,m=this._location.x,V=this._location.y+this._location.height/4*3,U=this._location.x2-this._location.x,d=h.length,p=[];if(d>1){var c=U/d;if(c=c>50?50:20>c?5:c,U-=2*c,"number"===i.type)for(var u=0;d>u;u++)p.push(m+c+U/(d-1)*u);else{p[0]=new Date(e(0).replace(/-/g,"/")),p[d-1]=new Date(e(d-1).replace(/-/g,"/"))-p[0];for(var u=1;d>u;u++)p[u]=m+c+U*(new Date(e(u).replace(/-/g,"/"))-p[0])/p[d-1];p[0]=m+c}}else p.push(m+U/2);for(var y,g,b,f,k,x=[],u=0;d>u;u++)m=p[u],y=h[u].symbol&&h[u].symbol.toLowerCase()||n,y.match("empty")?(y=y.replace("empty",""),b=!0):b=!1,y.match("star")&&(g=y.replace("star","")-0||5,y="star"),t=h[u].textStyle?l.merge(h[u].textStyle||{},r):r,f=t.align||"center",o?(f=o>0?"right":"left",k=[o*Math.PI/180,m,V-5]):k=!1,x.push({x:m,n:g,isEmpty:b,symbol:y,symbolSize:h[u].symbolSize||a,color:h[u].color,borderColor:h[u].borderColor,borderWidth:h[u].borderWidth,name:this._getReformedLabel(u),textColor:t.color,textAlign:f,textBaseline:t.baseline||"middle",textX:m,textY:V-(o?5:0),textFont:h[u].textStyle?this.getFont(t):s,rotation:k,showLabel:!1});return x},_buildBackground:function(){var e=this.timelineOption,t=this.reformCssArray(this.timelineOption.padding),i=this._location.width,n=this._location.height;(0!==e.borderWidth||"rgba(0,0,0,0)"!=e.backgroundColor.replace(/\s/g,""))&&this.shapeList.push(new a({zlevel:this.getZlevelBase(),z:this.getZBase(),hoverable:!1,style:{x:this._location.x-t[3],y:this._location.y-t[0],width:i+t[1]+t[3],height:n+t[0]+t[2],brushType:0===e.borderWidth?"fill":"both",color:e.backgroundColor,strokeColor:e.borderColor,lineWidth:e.borderWidth}}))},_buildControl:function(){var e=this,t=this.timelineOption,i=t.lineStyle,n=t.controlStyle;if("none"!==t.controlPosition){var a,r=n.itemSize,s=n.itemGap;"left"===t.controlPosition?(a=this._location.x,this._location.x+=3*(r+s)):(a=this._location.x2-(3*(r+s)-s),this._location.x2-=3*(r+s));var h=this._location.y,m={zlevel:this.getZlevelBase(),z:this.getZBase()+1,style:{iconType:"timelineControl",symbol:"last",x:a,y:h,width:r,height:r,brushType:"stroke",color:n.normal.color,strokeColor:n.normal.color,lineWidth:i.width},highlightStyle:{color:n.emphasis.color,strokeColor:n.emphasis.color,lineWidth:i.width+1},clickable:!0};this._ctrLastShape=new o(m),this._ctrLastShape.onclick=function(){e.last()},this.shapeList.push(this._ctrLastShape),a+=r+s,this._ctrPlayShape=new o(l.clone(m)),this._ctrPlayShape.style.brushType="fill",this._ctrPlayShape.style.symbol="play",this._ctrPlayShape.style.status=this.timelineOption.autoPlay?"playing":"stop",this._ctrPlayShape.style.x=a,this._ctrPlayShape.onclick=function(){"stop"===e._ctrPlayShape.style.status?e.play():e.stop()},this.shapeList.push(this._ctrPlayShape),a+=r+s,this._ctrNextShape=new o(l.clone(m)),this._ctrNextShape.style.symbol="next",this._ctrNextShape.style.x=a,this._ctrNextShape.onclick=function(){e.next()},this.shapeList.push(this._ctrNextShape)}},_buildChain:function(){var e=this.timelineOption,t=e.lineStyle;this._timelineShae={zlevel:this.getZlevelBase(),z:this.getZBase(),style:{x:this._location.x,y:this.subPixelOptimize(this._location.y,t.width),width:this._location.x2-this._location.x,height:this._location.height,chainPoint:this._chainPoint,brushType:"both",strokeColor:t.color,lineWidth:t.width,lineType:t.type},hoverable:!1,clickable:!0,onclick:this._onclick},this._timelineShae=new r(this._timelineShae),this.shapeList.push(this._timelineShae)},_buildHandle:function(){var e=this._chainPoint[this.currentIndex],t=e.symbolSize+1;t=5>t?5:t,this._handleShape={zlevel:this.getZlevelBase(),z:this.getZBase()+1,hoverable:!1,draggable:!0,style:{iconType:"diamond",n:e.n,x:e.x-t,y:this._location.y+this._location.height/4-t,width:2*t,height:2*t,brushType:"both",textPosition:"specific",textX:e.x,textY:this._location.y-this._location.height/4,textAlign:"center",textBaseline:"middle"},highlightStyle:{},ondrift:this._ondrift,ondragend:this._ondragend},this._handleShape=new o(this._handleShape),this.shapeList.push(this._handleShape)},_syncHandleShape:function(){if(this.timelineOption.show){var e=this.timelineOption,t=e.checkpointStyle,i=this._chainPoint[this.currentIndex];this._handleShape.style.text=t.label.show?i.name:"",this._handleShape.style.textFont=i.textFont,this._handleShape.style.n=i.n,"auto"===t.symbol?this._handleShape.style.iconType="none"!=i.symbol?i.symbol:"diamond":(this._handleShape.style.iconType=t.symbol,t.symbol.match("star")&&(this._handleShape.style.n=t.symbol.replace("star","")-0||5,this._handleShape.style.iconType="star"));var n;"auto"===t.symbolSize?(n=i.symbolSize+2,n=5>n?5:n):n=t.symbolSize-0,this._handleShape.style.color="auto"===t.color?i.color?i.color:e.controlStyle.emphasis.color:t.color,this._handleShape.style.textColor="auto"===t.label.textStyle.color?this._handleShape.style.color:t.label.textStyle.color,this._handleShape.highlightStyle.strokeColor=this._handleShape.style.strokeColor="auto"===t.borderColor?i.borderColor?i.borderColor:"#fff":t.borderColor,this._handleShape.style.lineWidth="auto"===t.borderWidth?i.borderWidth?i.borderWidth:0:t.borderWidth-0,this._handleShape.highlightStyle.lineWidth=this._handleShape.style.lineWidth+1,this.zr.animate(this._handleShape.id,"style").when(500,{x:i.x-n,textX:i.x,y:this._location.y+this._location.height/4-n,width:2*n,height:2*n}).start("ExponentialOut")}},_findChainIndex:function(e){var t=this._chainPoint,i=t.length;if(e<=t[0].x)return 0;if(e>=t[i-1].x)return i-1;for(var n=0;i-1>n;n++)if(e>=t[n].x&&e<=t[n+1].x)return Math.abs(e-t[n].x)<Math.abs(e-t[n+1].x)?n:n+1},__onclick:function(e){var t=m.getX(e.event),i=this._findChainIndex(t);return i===this.currentIndex?!0:(this.currentIndex=i,this.timelineOption.autoPlay&&this.stop(),clearTimeout(this.playTicket),void this._onFrame())},__ondrift:function(e,t){this.timelineOption.autoPlay&&this.stop();var i,n=this._chainPoint,a=n.length;e.style.x+t<=n[0].x-n[0].symbolSize?(e.style.x=n[0].x-n[0].symbolSize,i=0):e.style.x+t>=n[a-1].x-n[a-1].symbolSize?(e.style.x=n[a-1].x-n[a-1].symbolSize,i=a-1):(e.style.x+=t,i=this._findChainIndex(e.style.x));var o=n[i],r=o.symbolSize+2;if(e.style.iconType=o.symbol,e.style.n=o.n,e.style.textX=e.style.x+r/2,e.style.y=this._location.y+this._location.height/4-r,e.style.width=2*r,e.style.height=2*r,e.style.text=o.name,i===this.currentIndex)return!0;if(this.currentIndex=i,this.timelineOption.realtime){clearTimeout(this.playTicket);var s=this;this.playTicket=setTimeout(function(){s._setCurrentOption()},200)}return!0},__ondragend:function(){this.isDragend=!0},ondragend:function(e,t){this.isDragend&&e.target&&(!this.timelineOption.realtime&&this._setCurrentOption(),t.dragOut=!0,t.dragIn=!0,t.needRefresh=!1,this.isDragend=!1,this._syncHandleShape())},last:function(){return this.timelineOption.autoPlay&&this.stop(),this.currentIndex-=1,this.currentIndex<0&&(this.currentIndex=this.timelineOption.data.length-1),this._onFrame(),this.currentIndex},next:function(){return this.timelineOption.autoPlay&&this.stop(),this.currentIndex+=1,this.currentIndex>=this.timelineOption.data.length&&(this.currentIndex=0),this._onFrame(),this.currentIndex},play:function(e,t){return this._ctrPlayShape&&"playing"!=this._ctrPlayShape.style.status&&(this._ctrPlayShape.style.status="playing",this.zr.modShape(this._ctrPlayShape.id),this.zr.refreshNextFrame()),this.timelineOption.autoPlay=null!=t?t:!0,this.timelineOption.autoPlay||clearTimeout(this.playTicket),this.currentIndex=null!=e?e:this.currentIndex+1,this.currentIndex>=this.timelineOption.data.length&&(this.currentIndex=0),this._onFrame(),this.currentIndex},stop:function(){return this._ctrPlayShape&&"stop"!=this._ctrPlayShape.style.status&&(this._ctrPlayShape.style.status="stop",this.zr.modShape(this._ctrPlayShape.id),this.zr.refreshNextFrame()),this.timelineOption.autoPlay=!1,clearTimeout(this.playTicket),this.currentIndex},resize:function(){this.timelineOption.show&&(this.clear(),this._buildShape(),this._syncHandleShape())},setTheme:function(e){this.timelineOption=this.reformOption(l.clone(this.option.timeline)),this.timelineOption.label.textStyle=this.getTextStyle(this.timelineOption.label.textStyle),this.timelineOption.checkpointStyle.label.textStyle=this.getTextStyle(this.timelineOption.checkpointStyle.label.textStyle),this.myChart.canvasSupported||(this.timelineOption.realtime=!1),this.timelineOption.show&&e&&(this.clear(),this._buildShape(),this._syncHandleShape())},onbeforDispose:function(){clearTimeout(this.playTicket)}},o.prototype.iconLibrary.timelineControl=i,l.inherits(t,n),e("../component").define("timeline",t),t}),i("zrender/shape/Image",["require","./Base","../tool/util"],function(e){var t=e("./Base"),i=function(e){t.call(this,e)};return i.prototype={type:"image",brush:function(e,t,i){var n=this.style||{};t&&(n=this.getHighlightStyle(n,this.highlightStyle||{}));var a=n.image,o=this;if(this._imageCache||(this._imageCache={}),"string"==typeof a){var r=a;this._imageCache[r]?a=this._imageCache[r]:(a=new Image,a.onload=function(){a.onload=null,o.modSelf(),i()},a.src=r,this._imageCache[r]=a)}if(a){if("IMG"==a.nodeName.toUpperCase())if(window.ActiveXObject){if("complete"!=a.readyState)return}else if(!a.complete)return;var s=n.width||a.width,l=n.height||a.height,h=n.x,m=n.y;if(!a.width||!a.height)return;if(e.save(),this.doClip(e),this.setContext(e,n),this.setTransform(e),n.sWidth&&n.sHeight){var V=n.sx||0,U=n.sy||0;e.drawImage(a,V,U,n.sWidth,n.sHeight,h,m,s,l)}else if(n.sx&&n.sy){var V=n.sx,U=n.sy,d=s-V,p=l-U;e.drawImage(a,V,U,d,p,h,m,s,l)}else e.drawImage(a,h,m,s,l);n.width||(n.width=s),n.height||(n.height=l),this.style.width||(this.style.width=s),this.style.height||(this.style.height=l),this.drawText(e,n,this.style),e.restore()}},getRect:function(e){return{x:e.x,y:e.y,width:e.width,height:e.height}},clearCache:function(){this._imageCache={}}},e("../tool/util").inherits(i,t),i}),i("zrender/loadingEffect/Bar",["require","./Base","../tool/util","../tool/color","../shape/Rectangle"],function(e){function t(e){i.call(this,e)}var i=e("./Base"),n=e("../tool/util"),a=e("../tool/color"),o=e("../shape/Rectangle");return n.inherits(t,i),t.prototype._start=function(e,t){var i=n.merge(this.options,{textStyle:{color:"#888"},backgroundColor:"rgba(250, 250, 250, 0.8)",effectOption:{x:0,y:this.canvasHeight/2-30,width:this.canvasWidth,height:5,brushType:"fill",timeInterval:100}}),r=this.createTextShape(i.textStyle),s=this.createBackgroundShape(i.backgroundColor),l=i.effectOption,h=new o({highlightStyle:n.clone(l)});return h.highlightStyle.color=l.color||a.getLinearGradient(l.x,l.y,l.x+l.width,l.y+l.height,[[0,"#ff6400"],[.5,"#ffe100"],[1,"#b1ff00"]]),null!=i.progress?(e(s),h.highlightStyle.width=this.adjust(i.progress,[0,1])*i.effectOption.width,e(h),e(r),void t()):(h.highlightStyle.width=0,setInterval(function(){e(s),h.highlightStyle.width<l.width?h.highlightStyle.width+=8:h.highlightStyle.width=0,e(h),e(r),t()},l.timeInterval))},t}),i("zrender/loadingEffect/Bubble",["require","./Base","../tool/util","../tool/color","../shape/Circle"],function(e){function t(e){i.call(this,e)}var i=e("./Base"),n=e("../tool/util"),a=e("../tool/color"),o=e("../shape/Circle");return n.inherits(t,i),t.prototype._start=function(e,t){for(var i=n.merge(this.options,{textStyle:{color:"#888"},backgroundColor:"rgba(250, 250, 250, 0.8)",effect:{n:50,lineWidth:2,brushType:"stroke",color:"random",timeInterval:100}}),r=this.createTextShape(i.textStyle),s=this.createBackgroundShape(i.backgroundColor),l=i.effect,h=l.n,m=l.brushType,V=l.lineWidth,U=[],d=this.canvasWidth,p=this.canvasHeight,c=0;h>c;c++){var u="random"==l.color?a.alpha(a.random(),.3):l.color;U[c]=new o({highlightStyle:{x:Math.ceil(Math.random()*d),y:Math.ceil(Math.random()*p),r:Math.ceil(40*Math.random()),brushType:m,color:u,strokeColor:u,lineWidth:V},animationY:Math.ceil(20*Math.random())})}return setInterval(function(){e(s);for(var i=0;h>i;i++){var n=U[i].highlightStyle;n.y-U[i].animationY+n.r<=0&&(U[i].highlightStyle.y=p+n.r,U[i].highlightStyle.x=Math.ceil(Math.random()*d)),U[i].highlightStyle.y-=U[i].animationY,e(U[i])}e(r),t()},l.timeInterval)},t}),i("zrender/loadingEffect/DynamicLine",["require","./Base","../tool/util","../tool/color","../shape/Line"],function(e){function t(e){i.call(this,e)}var i=e("./Base"),n=e("../tool/util"),a=e("../tool/color"),o=e("../shape/Line");return n.inherits(t,i),t.prototype._start=function(e,t){for(var i=n.merge(this.options,{textStyle:{color:"#fff"},backgroundColor:"rgba(0, 0, 0, 0.8)",effectOption:{n:30,lineWidth:1,color:"random",timeInterval:100}}),r=this.createTextShape(i.textStyle),s=this.createBackgroundShape(i.backgroundColor),l=i.effectOption,h=l.n,m=l.lineWidth,V=[],U=this.canvasWidth,d=this.canvasHeight,p=0;h>p;p++){var c=-Math.ceil(1e3*Math.random()),u=Math.ceil(400*Math.random()),y=Math.ceil(Math.random()*d),g="random"==l.color?a.random():l.color;V[p]=new o({highlightStyle:{xStart:c,yStart:y,xEnd:c+u,yEnd:y,strokeColor:g,lineWidth:m},animationX:Math.ceil(100*Math.random()),len:u})}return setInterval(function(){e(s);for(var i=0;h>i;i++){var n=V[i].highlightStyle;n.xStart>=U&&(V[i].len=Math.ceil(400*Math.random()),n.xStart=-400,n.xEnd=-400+V[i].len,n.yStart=Math.ceil(Math.random()*d),n.yEnd=n.yStart),n.xStart+=V[i].animationX,n.xEnd+=V[i].animationX,e(V[i])}e(r),t()},l.timeInterval)},t}),i("zrender/loadingEffect/Ring",["require","./Base","../tool/util","../tool/color","../shape/Ring","../shape/Sector"],function(e){function t(e){i.call(this,e)}var i=e("./Base"),n=e("../tool/util"),a=e("../tool/color"),o=e("../shape/Ring"),r=e("../shape/Sector");return n.inherits(t,i),t.prototype._start=function(e,t){var i=n.merge(this.options,{textStyle:{color:"#07a"},backgroundColor:"rgba(250, 250, 250, 0.8)",effect:{x:this.canvasWidth/2,y:this.canvasHeight/2,r0:60,r:100,color:"#bbdcff",brushType:"fill",textPosition:"inside",textFont:"normal 30px verdana",textColor:"rgba(30, 144, 255, 0.6)",timeInterval:100}}),s=i.effect,l=i.textStyle;
+
+null==l.x&&(l.x=s.x),null==l.y&&(l.y=s.y+(s.r0+s.r)/2-5);for(var h=this.createTextShape(i.textStyle),m=this.createBackgroundShape(i.backgroundColor),V=s.x,U=s.y,d=s.r0+6,p=s.r-6,c=s.color,u=a.lift(c,.1),y=new o({highlightStyle:n.clone(s)}),g=[],b=a.getGradientColors(["#ff6400","#ffe100","#97ff00"],25),f=15,k=240,x=0;16>x;x++)g.push(new r({highlightStyle:{x:V,y:U,r0:d,r:p,startAngle:k-f,endAngle:k,brushType:"fill",color:u},_color:a.getLinearGradient(V+d*Math.cos(k,!0),U-d*Math.sin(k,!0),V+d*Math.cos(k-f,!0),U-d*Math.sin(k-f,!0),[[0,b[2*x]],[1,b[2*x+1]]])})),k-=f;k=360;for(var x=0;4>x;x++)g.push(new r({highlightStyle:{x:V,y:U,r0:d,r:p,startAngle:k-f,endAngle:k,brushType:"fill",color:u},_color:a.getLinearGradient(V+d*Math.cos(k,!0),U-d*Math.sin(k,!0),V+d*Math.cos(k-f,!0),U-d*Math.sin(k-f,!0),[[0,b[2*x+32]],[1,b[2*x+33]]])})),k-=f;var _=0;if(null!=i.progress){e(m),_=100*this.adjust(i.progress,[0,1]).toFixed(2)/5,y.highlightStyle.text=5*_+"%",e(y);for(var x=0;20>x;x++)g[x].highlightStyle.color=_>x?g[x]._color:u,e(g[x]);return e(h),void t()}return setInterval(function(){e(m),_+=_>=20?-20:1,e(y);for(var i=0;20>i;i++)g[i].highlightStyle.color=_>i?g[i]._color:u,e(g[i]);e(h),t()},s.timeInterval)},t}),i("zrender/loadingEffect/Spin",["require","./Base","../tool/util","../tool/color","../tool/area","../shape/Sector"],function(e){function t(e){i.call(this,e)}var i=e("./Base"),n=e("../tool/util"),a=e("../tool/color"),o=e("../tool/area"),r=e("../shape/Sector");return n.inherits(t,i),t.prototype._start=function(e,t){var i=n.merge(this.options,{textStyle:{color:"#fff",textAlign:"start"},backgroundColor:"rgba(0, 0, 0, 0.8)"}),s=this.createTextShape(i.textStyle),l=10,h=o.getTextWidth(s.highlightStyle.text,s.highlightStyle.textFont),m=o.getTextHeight(s.highlightStyle.text,s.highlightStyle.textFont),V=n.merge(this.options.effect||{},{r0:9,r:15,n:18,color:"#fff",timeInterval:100}),U=this.getLocation(this.options.textStyle,h+l+2*V.r,Math.max(2*V.r,m));V.x=U.x+V.r,V.y=s.highlightStyle.y=U.y+U.height/2,s.highlightStyle.x=V.x+V.r+l;for(var d=this.createBackgroundShape(i.backgroundColor),p=V.n,c=V.x,u=V.y,y=V.r0,g=V.r,b=V.color,f=[],k=Math.round(180/p),x=0;p>x;x++)f[x]=new r({highlightStyle:{x:c,y:u,r0:y,r:g,startAngle:k*x*2,endAngle:k*x*2+k,color:a.alpha(b,(x+1)/p),brushType:"fill"}});var _=[0,c,u];return setInterval(function(){e(d),_[0]-=.3;for(var i=0;p>i;i++)f[i].rotation=_,e(f[i]);e(s),t()},V.timeInterval)},t}),i("zrender/loadingEffect/Whirling",["require","./Base","../tool/util","../tool/area","../shape/Ring","../shape/Droplet","../shape/Circle"],function(e){function t(e){i.call(this,e)}var i=e("./Base"),n=e("../tool/util"),a=e("../tool/area"),o=e("../shape/Ring"),r=e("../shape/Droplet"),s=e("../shape/Circle");return n.inherits(t,i),t.prototype._start=function(e,t){var i=n.merge(this.options,{textStyle:{color:"#888",textAlign:"start"},backgroundColor:"rgba(250, 250, 250, 0.8)"}),l=this.createTextShape(i.textStyle),h=10,m=a.getTextWidth(l.highlightStyle.text,l.highlightStyle.textFont),V=a.getTextHeight(l.highlightStyle.text,l.highlightStyle.textFont),U=n.merge(this.options.effect||{},{r:18,colorIn:"#fff",colorOut:"#555",colorWhirl:"#6cf",timeInterval:50}),d=this.getLocation(this.options.textStyle,m+h+2*U.r,Math.max(2*U.r,V));U.x=d.x+U.r,U.y=l.highlightStyle.y=d.y+d.height/2,l.highlightStyle.x=U.x+U.r+h;var p=this.createBackgroundShape(i.backgroundColor),c=new r({highlightStyle:{a:Math.round(U.r/2),b:Math.round(U.r-U.r/6),brushType:"fill",color:U.colorWhirl}}),u=new s({highlightStyle:{r:Math.round(U.r/6),brushType:"fill",color:U.colorIn}}),y=new o({highlightStyle:{r0:Math.round(U.r-U.r/3),r:U.r,brushType:"fill",color:U.colorOut}}),g=[0,U.x,U.y];return c.highlightStyle.x=u.highlightStyle.x=y.highlightStyle.x=g[1],c.highlightStyle.y=u.highlightStyle.y=y.highlightStyle.y=g[2],setInterval(function(){e(p),e(y),g[0]-=.3,c.rotation=g,e(c),e(u),e(l),t()},U.timeInterval)},t}),i("echarts/theme/macarons",[],function(){var e={color:["#2ec7c9","#b6a2de","#5ab1ef","#ffb980","#d87a80","#8d98b3","#e5cf0d","#97b552","#95706d","#dc69aa","#07a2a4","#9a7fd1","#588dd5","#f5994e","#c05050","#59678c","#c9ab00","#7eb00a","#6f5553","#c14089"],title:{textStyle:{fontWeight:"normal",color:"#008acd"}},dataRange:{itemWidth:15,color:["#5ab1ef","#e0ffff"]},toolbox:{color:["#1e90ff","#1e90ff","#1e90ff","#1e90ff"],effectiveColor:"#ff4500"},tooltip:{backgroundColor:"rgba(50,50,50,0.5)",axisPointer:{type:"line",lineStyle:{color:"#008acd"},crossStyle:{color:"#008acd"},shadowStyle:{color:"rgba(200,200,200,0.2)"}}},dataZoom:{dataBackgroundColor:"#efefff",fillerColor:"rgba(182,162,222,0.2)",handleColor:"#008acd"},grid:{borderColor:"#eee"},categoryAxis:{axisLine:{lineStyle:{color:"#008acd"}},splitLine:{lineStyle:{color:["#eee"]}}},valueAxis:{axisLine:{lineStyle:{color:"#008acd"}},splitArea:{show:!0,areaStyle:{color:["rgba(250,250,250,0.1)","rgba(200,200,200,0.1)"]}},splitLine:{lineStyle:{color:["#eee"]}}},polar:{axisLine:{lineStyle:{color:"#ddd"}},splitArea:{show:!0,areaStyle:{color:["rgba(250,250,250,0.2)","rgba(200,200,200,0.2)"]}},splitLine:{lineStyle:{color:"#ddd"}}},timeline:{lineStyle:{color:"#008acd"},controlStyle:{normal:{color:"#008acd"},emphasis:{color:"#008acd"}},symbol:"emptyCircle",symbolSize:3},bar:{itemStyle:{normal:{barBorderRadius:5},emphasis:{barBorderRadius:5}}},line:{smooth:!0,symbol:"emptyCircle",symbolSize:3},k:{itemStyle:{normal:{color:"#d87a80",color0:"#2ec7c9",lineStyle:{color:"#d87a80",color0:"#2ec7c9"}}}},scatter:{symbol:"circle",symbolSize:4},radar:{symbol:"emptyCircle",symbolSize:3},map:{itemStyle:{normal:{areaStyle:{color:"#ddd"},label:{textStyle:{color:"#d87a80"}}},emphasis:{areaStyle:{color:"#fe994e"}}}},force:{itemStyle:{normal:{linkStyle:{color:"#1e90ff"}}}},chord:{itemStyle:{normal:{borderWidth:1,borderColor:"rgba(128, 128, 128, 0.5)",chordStyle:{lineStyle:{color:"rgba(128, 128, 128, 0.5)"}}},emphasis:{borderWidth:1,borderColor:"rgba(128, 128, 128, 0.5)",chordStyle:{lineStyle:{color:"rgba(128, 128, 128, 0.5)"}}}}},gauge:{axisLine:{lineStyle:{color:[[.2,"#2ec7c9"],[.8,"#5ab1ef"],[1,"#d87a80"]],width:10}},axisTick:{splitNumber:10,length:15,lineStyle:{color:"auto"}},splitLine:{length:22,lineStyle:{color:"auto"}},pointer:{width:5}},textStyle:{fontFamily:"微软雅黑, Arial, Verdana, sans-serif"}};return e}),i("echarts/theme/infographic",[],function(){var e={color:["#C1232B","#B5C334","#FCCE10","#E87C25","#27727B","#FE8463","#9BCA63","#FAD860","#F3A43B","#60C0DD","#D7504B","#C6E579","#F4E001","#F0805A","#26C0C0"],title:{textStyle:{fontWeight:"normal",color:"#27727B"}},dataRange:{x:"right",y:"center",itemWidth:5,itemHeight:25,color:["#C1232B","#FCCE10"]},toolbox:{color:["#C1232B","#B5C334","#FCCE10","#E87C25","#27727B","#FE8463","#9BCA63","#FAD860","#F3A43B","#60C0DD"],effectiveColor:"#ff4500"},tooltip:{backgroundColor:"rgba(50,50,50,0.5)",axisPointer:{type:"line",lineStyle:{color:"#27727B",type:"dashed"},crossStyle:{color:"#27727B"},shadowStyle:{color:"rgba(200,200,200,0.3)"}}},dataZoom:{dataBackgroundColor:"rgba(181,195,52,0.3)",fillerColor:"rgba(181,195,52,0.2)",handleColor:"#27727B"},grid:{borderWidth:0},categoryAxis:{axisLine:{lineStyle:{color:"#27727B"}},splitLine:{show:!1}},valueAxis:{axisLine:{show:!1},splitArea:{show:!1},splitLine:{lineStyle:{color:["#ccc"],type:"dashed"}}},polar:{axisLine:{lineStyle:{color:"#ddd"}},splitArea:{show:!0,areaStyle:{color:["rgba(250,250,250,0.2)","rgba(200,200,200,0.2)"]}},splitLine:{lineStyle:{color:"#ddd"}}},timeline:{lineStyle:{color:"#27727B"},controlStyle:{normal:{color:"#27727B"},emphasis:{color:"#27727B"}},symbol:"emptyCircle",symbolSize:3},line:{itemStyle:{normal:{borderWidth:2,borderColor:"#fff",lineStyle:{width:3}},emphasis:{borderWidth:0}},symbol:"circle",symbolSize:3.5},k:{itemStyle:{normal:{color:"#C1232B",color0:"#B5C334",lineStyle:{width:1,color:"#C1232B",color0:"#B5C334"}}}},scatter:{itemStyle:{normal:{borderWidth:1,borderColor:"rgba(200,200,200,0.5)"},emphasis:{borderWidth:0}},symbol:"star4",symbolSize:4},radar:{symbol:"emptyCircle",symbolSize:3},map:{itemStyle:{normal:{areaStyle:{color:"#ddd"},label:{textStyle:{color:"#C1232B"}}},emphasis:{areaStyle:{color:"#fe994e"},label:{textStyle:{color:"rgb(100,0,0)"}}}}},force:{itemStyle:{normal:{linkStyle:{color:"#27727B"}}}},chord:{itemStyle:{normal:{borderWidth:1,borderColor:"rgba(128, 128, 128, 0.5)",chordStyle:{lineStyle:{color:"rgba(128, 128, 128, 0.5)"}}},emphasis:{borderWidth:1,borderColor:"rgba(128, 128, 128, 0.5)",chordStyle:{lineStyle:{color:"rgba(128, 128, 128, 0.5)"}}}}},gauge:{center:["50%","80%"],radius:"100%",startAngle:180,endAngle:0,axisLine:{show:!0,lineStyle:{color:[[.2,"#B5C334"],[.8,"#27727B"],[1,"#C1232B"]],width:"40%"}},axisTick:{splitNumber:2,length:5,lineStyle:{color:"#fff"}},axisLabel:{textStyle:{color:"#fff",fontWeight:"bolder"}},splitLine:{length:"5%",lineStyle:{color:"#fff"}},pointer:{width:"40%",length:"80%",color:"#fff"},title:{offsetCenter:[0,-20],textStyle:{color:"auto",fontSize:20}},detail:{offsetCenter:[0,0],textStyle:{color:"auto",fontSize:40}}},textStyle:{fontFamily:"微软雅黑, Arial, Verdana, sans-serif"}};return e}),i("zrender/dep/excanvas",["require"],function(){return document.createElement("canvas").getContext?G_vmlCanvasManager=!1:!function(){function e(){return this.context_||(this.context_=new f(this))}function t(e,t){var i=O.call(arguments,2);return function(){return e.apply(t,i.concat(O.call(arguments)))}}function i(e){return String(e).replace(/&/g,"&amp;").replace(/"/g,"&quot;")}function n(e,t,i){e.namespaces[t]||e.namespaces.add(t,i,"#default#VML")}function a(e){if(n(e,"g_vml_","urn:schemas-microsoft-com:vml"),n(e,"g_o_","urn:schemas-microsoft-com:office:office"),!e.styleSheets.ex_canvas_){var t=e.createStyleSheet();t.owningElement.id="ex_canvas_",t.cssText="canvas{display:inline-block;overflow:hidden;text-align:left;width:300px;height:150px}"}}function o(e){var t=e.srcElement;switch(e.propertyName){case"width":t.getContext().clearRect(),t.style.width=t.attributes.width.nodeValue+"px",t.firstChild.style.width=t.clientWidth+"px";break;case"height":t.getContext().clearRect(),t.style.height=t.attributes.height.nodeValue+"px",t.firstChild.style.height=t.clientHeight+"px"}}function r(e){var t=e.srcElement;t.firstChild&&(t.firstChild.style.width=t.clientWidth+"px",t.firstChild.style.height=t.clientHeight+"px")}function s(){return[[1,0,0],[0,1,0],[0,0,1]]}function l(e,t){for(var i=s(),n=0;3>n;n++)for(var a=0;3>a;a++){for(var o=0,r=0;3>r;r++)o+=e[n][r]*t[r][a];i[n][a]=o}return i}function h(e,t){t.fillStyle=e.fillStyle,t.lineCap=e.lineCap,t.lineJoin=e.lineJoin,t.lineWidth=e.lineWidth,t.miterLimit=e.miterLimit,t.shadowBlur=e.shadowBlur,t.shadowColor=e.shadowColor,t.shadowOffsetX=e.shadowOffsetX,t.shadowOffsetY=e.shadowOffsetY,t.strokeStyle=e.strokeStyle,t.globalAlpha=e.globalAlpha,t.font=e.font,t.textAlign=e.textAlign,t.textBaseline=e.textBaseline,t.scaleX_=e.scaleX_,t.scaleY_=e.scaleY_,t.lineScale_=e.lineScale_}function m(e){var t=e.indexOf("(",3),i=e.indexOf(")",t+1),n=e.substring(t+1,i).split(",");return(4!=n.length||"a"!=e.charAt(3))&&(n[3]=1),n}function V(e){return parseFloat(e)/100}function U(e,t,i){return Math.min(i,Math.max(t,e))}function d(e){var t,i,n,a,o,r;if(a=parseFloat(e[0])/360%360,0>a&&a++,o=U(V(e[1]),0,1),r=U(V(e[2]),0,1),0==o)t=i=n=r;else{var s=.5>r?r*(1+o):r+o-r*o,l=2*r-s;t=p(l,s,a+1/3),i=p(l,s,a),n=p(l,s,a-1/3)}return"#"+D[Math.floor(255*t)]+D[Math.floor(255*i)]+D[Math.floor(255*n)]}function p(e,t,i){return 0>i&&i++,i>1&&i--,1>6*i?e+6*(t-e)*i:1>2*i?t:2>3*i?e+(t-e)*(2/3-i)*6:e}function c(e){if(e in R)return R[e];var t,i=1;if(e=String(e),"#"==e.charAt(0))t=e;else if(/^rgb/.test(e)){for(var n,a=m(e),t="#",o=0;3>o;o++)n=-1!=a[o].indexOf("%")?Math.floor(255*V(a[o])):+a[o],t+=D[U(n,0,255)];i=+a[3]}else if(/^hsl/.test(e)){var a=m(e);t=d(a),i=a[3]}else t=H[e]||e;return R[e]={color:t,alpha:i}}function u(e){if(Y[e])return Y[e];var t,i=document.createElement("div"),n=i.style;try{n.font=e,t=n.fontFamily.split(",")[0]}catch(a){}return Y[e]={style:n.fontStyle||G.style,variant:n.fontVariant||G.variant,weight:n.fontWeight||G.weight,size:n.fontSize||G.size,family:t||G.family}}function y(e,t){var i={};for(var n in e)i[n]=e[n];var a=parseFloat(t.currentStyle.fontSize),o=parseFloat(e.size);return i.size="number"==typeof e.size?e.size:-1!=e.size.indexOf("px")?o:-1!=e.size.indexOf("em")?a*o:-1!=e.size.indexOf("%")?a/100*o:-1!=e.size.indexOf("pt")?o/.75:a,i}function g(e){return e.style+" "+e.variant+" "+e.weight+" "+e.size+"px '"+e.family+"'"}function b(e){return Q[e]||"square"}function f(e){this.m_=s(),this.mStack_=[],this.aStack_=[],this.currentPath_=[],this.strokeStyle="#000",this.fillStyle="#000",this.lineWidth=1,this.lineJoin="miter",this.lineCap="butt",this.miterLimit=1*A,this.globalAlpha=1,this.font="12px 微软雅黑",this.textAlign="left",this.textBaseline="alphabetic",this.canvas=e;var t="width:"+e.clientWidth+"px;height:"+e.clientHeight+"px;overflow:hidden;position:absolute",i=e.ownerDocument.createElement("div");i.style.cssText=t,e.appendChild(i);var n=i.cloneNode(!1);n.style.backgroundColor="#fff",n.style.filter="alpha(opacity=0)",e.appendChild(n),this.element_=i,this.scaleX_=1,this.scaleY_=1,this.lineScale_=1}function k(e,t,i,n){e.currentPath_.push({type:"bezierCurveTo",cp1x:t.x,cp1y:t.y,cp2x:i.x,cp2y:i.y,x:n.x,y:n.y}),e.currentX_=n.x,e.currentY_=n.y}function x(e,t){var i=c(e.strokeStyle),n=i.color,a=i.alpha*e.globalAlpha,o=e.lineScale_*e.lineWidth;1>o&&(a*=o),t.push("<g_vml_:stroke",' opacity="',a,'"',' joinstyle="',e.lineJoin,'"',' miterlimit="',e.miterLimit,'"',' endcap="',b(e.lineCap),'"',' weight="',o,'px"',' color="',n,'" />')}function _(e,t,i,n){var a=e.fillStyle,o=e.scaleX_,r=e.scaleY_,s=n.x-i.x,l=n.y-i.y;if(a instanceof v){var h=0,m={x:0,y:0},V=0,U=1;if("gradient"==a.type_){var d=a.x0_/o,p=a.y0_/r,u=a.x1_/o,y=a.y1_/r,g=L(e,d,p),b=L(e,u,y),f=b.x-g.x,k=b.y-g.y;h=180*Math.atan2(f,k)/Math.PI,0>h&&(h+=360),1e-6>h&&(h=0)}else{var g=L(e,a.x0_,a.y0_);m={x:(g.x-i.x)/s,y:(g.y-i.y)/l},s/=o*A,l/=r*A;var x=C.max(s,l);V=2*a.r0_/x,U=2*a.r1_/x-V}var _=a.colors_;_.sort(function(e,t){return e.offset-t.offset});for(var W=_.length,X=_[0].color,K=_[W-1].color,I=_[0].alpha*e.globalAlpha,J=_[W-1].alpha*e.globalAlpha,S=[],E=0;W>E;E++){var F=_[E];S.push(F.offset*U+V+" "+F.color)}t.push('<g_vml_:fill type="',a.type_,'"',' method="none" focus="100%"',' color="',X,'"',' color2="',K,'"',' colors="',S.join(","),'"',' opacity="',J,'"',' g_o_:opacity2="',I,'"',' angle="',h,'"',' focusposition="',m.x,",",m.y,'" />')}else if(a instanceof w){if(s&&l){var T=-i.x,z=-i.y;t.push("<g_vml_:fill",' position="',T/s*o*o,",",z/l*r*r,'"',' type="tile"',' src="',a.src_,'" />')}}else{var M=c(e.fillStyle),O=M.color,P=M.alpha*e.globalAlpha;t.push('<g_vml_:fill color="',O,'" opacity="',P,'" />')}}function L(e,t,i){var n=e.m_;return{x:A*(t*n[0][0]+i*n[1][0]+n[2][0])-M,y:A*(t*n[0][1]+i*n[1][1]+n[2][1])-M}}function W(e){return isFinite(e[0][0])&&isFinite(e[0][1])&&isFinite(e[1][0])&&isFinite(e[1][1])&&isFinite(e[2][0])&&isFinite(e[2][1])}function X(e,t,i){if(W(t)&&(e.m_=t,e.scaleX_=Math.sqrt(t[0][0]*t[0][0]+t[0][1]*t[0][1]),e.scaleY_=Math.sqrt(t[1][0]*t[1][0]+t[1][1]*t[1][1]),i)){var n=t[0][0]*t[1][1]-t[0][1]*t[1][0];e.lineScale_=z(T(n))}}function v(e){this.type_=e,this.x0_=0,this.y0_=0,this.r0_=0,this.x1_=0,this.y1_=0,this.r1_=0,this.colors_=[]}function w(e,t){switch(I(e),t){case"repeat":case null:case"":this.repetition_="repeat";break;case"repeat-x":case"repeat-y":case"no-repeat":this.repetition_=t;break;default:K("SYNTAX_ERR")}this.src_=e.src,this.width_=e.width,this.height_=e.height}function K(e){throw new J(e)}function I(e){e&&1==e.nodeType&&"IMG"==e.tagName||K("TYPE_MISMATCH_ERR"),"complete"!=e.readyState&&K("INVALID_STATE_ERR")}function J(e){this.code=this[e],this.message=e+": DOM Exception "+this.code}var C=Math,S=C.round,E=C.sin,F=C.cos,T=C.abs,z=C.sqrt,A=10,M=A/2,O=(+navigator.userAgent.match(/MSIE ([\d.]+)?/)[1],Array.prototype.slice);a(document);var P={init:function(e){var i=e||document;i.createElement("canvas"),i.attachEvent("onreadystatechange",t(this.init_,this,i))},init_:function(e){for(var t=e.getElementsByTagName("canvas"),i=0;i<t.length;i++)this.initElement(t[i])},initElement:function(t){if(!t.getContext){t.getContext=e,a(t.ownerDocument),t.innerHTML="",t.attachEvent("onpropertychange",o),t.attachEvent("onresize",r);var i=t.attributes;i.width&&i.width.specified?t.style.width=i.width.nodeValue+"px":t.width=t.clientWidth,i.height&&i.height.specified?t.style.height=i.height.nodeValue+"px":t.height=t.clientHeight}return t}};P.init();for(var D=[],N=0;16>N;N++)for(var B=0;16>B;B++)D[16*N+B]=N.toString(16)+B.toString(16);var H={aliceblue:"#F0F8FF",antiquewhite:"#FAEBD7",aquamarine:"#7FFFD4",azure:"#F0FFFF",beige:"#F5F5DC",bisque:"#FFE4C4",black:"#000000",blanchedalmond:"#FFEBCD",blueviolet:"#8A2BE2",brown:"#A52A2A",burlywood:"#DEB887",cadetblue:"#5F9EA0",chartreuse:"#7FFF00",chocolate:"#D2691E",coral:"#FF7F50",cornflowerblue:"#6495ED",cornsilk:"#FFF8DC",crimson:"#DC143C",cyan:"#00FFFF",darkblue:"#00008B",darkcyan:"#008B8B",darkgoldenrod:"#B8860B",darkgray:"#A9A9A9",darkgreen:"#006400",darkgrey:"#A9A9A9",darkkhaki:"#BDB76B",darkmagenta:"#8B008B",darkolivegreen:"#556B2F",darkorange:"#FF8C00",darkorchid:"#9932CC",darkred:"#8B0000",darksalmon:"#E9967A",darkseagreen:"#8FBC8F",darkslateblue:"#483D8B",darkslategray:"#2F4F4F",darkslategrey:"#2F4F4F",darkturquoise:"#00CED1",darkviolet:"#9400D3",deeppink:"#FF1493",deepskyblue:"#00BFFF",dimgray:"#696969",dimgrey:"#696969",dodgerblue:"#1E90FF",firebrick:"#B22222",floralwhite:"#FFFAF0",forestgreen:"#228B22",gainsboro:"#DCDCDC",ghostwhite:"#F8F8FF",gold:"#FFD700",goldenrod:"#DAA520",grey:"#808080",greenyellow:"#ADFF2F",honeydew:"#F0FFF0",hotpink:"#FF69B4",indianred:"#CD5C5C",indigo:"#4B0082",ivory:"#FFFFF0",khaki:"#F0E68C",lavender:"#E6E6FA",lavenderblush:"#FFF0F5",lawngreen:"#7CFC00",lemonchiffon:"#FFFACD",lightblue:"#ADD8E6",lightcoral:"#F08080",lightcyan:"#E0FFFF",lightgoldenrodyellow:"#FAFAD2",lightgreen:"#90EE90",lightgrey:"#D3D3D3",lightpink:"#FFB6C1",lightsalmon:"#FFA07A",lightseagreen:"#20B2AA",lightskyblue:"#87CEFA",lightslategray:"#778899",lightslategrey:"#778899",lightsteelblue:"#B0C4DE",lightyellow:"#FFFFE0",limegreen:"#32CD32",linen:"#FAF0E6",magenta:"#FF00FF",mediumaquamarine:"#66CDAA",mediumblue:"#0000CD",mediumorchid:"#BA55D3",mediumpurple:"#9370DB",mediumseagreen:"#3CB371",mediumslateblue:"#7B68EE",mediumspringgreen:"#00FA9A",mediumturquoise:"#48D1CC",mediumvioletred:"#C71585",midnightblue:"#191970",mintcream:"#F5FFFA",mistyrose:"#FFE4E1",moccasin:"#FFE4B5",navajowhite:"#FFDEAD",oldlace:"#FDF5E6",olivedrab:"#6B8E23",orange:"#FFA500",orangered:"#FF4500",orchid:"#DA70D6",palegoldenrod:"#EEE8AA",palegreen:"#98FB98",paleturquoise:"#AFEEEE",palevioletred:"#DB7093",papayawhip:"#FFEFD5",peachpuff:"#FFDAB9",peru:"#CD853F",pink:"#FFC0CB",plum:"#DDA0DD",powderblue:"#B0E0E6",rosybrown:"#BC8F8F",royalblue:"#4169E1",saddlebrown:"#8B4513",salmon:"#FA8072",sandybrown:"#F4A460",seagreen:"#2E8B57",seashell:"#FFF5EE",sienna:"#A0522D",skyblue:"#87CEEB",slateblue:"#6A5ACD",slategray:"#708090",slategrey:"#708090",snow:"#FFFAFA",springgreen:"#00FF7F",steelblue:"#4682B4",tan:"#D2B48C",thistle:"#D8BFD8",tomato:"#FF6347",turquoise:"#40E0D0",violet:"#EE82EE",wheat:"#F5DEB3",whitesmoke:"#F5F5F5",yellowgreen:"#9ACD32"},R={},G={style:"normal",variant:"normal",weight:"normal",size:12,family:"微软雅黑"},Y={},Q={butt:"flat",round:"round"},Z=f.prototype;Z.clearRect=function(){this.textMeasureEl_&&(this.textMeasureEl_.removeNode(!0),this.textMeasureEl_=null),this.element_.innerHTML=""},Z.beginPath=function(){this.currentPath_=[]},Z.moveTo=function(e,t){var i=L(this,e,t);this.currentPath_.push({type:"moveTo",x:i.x,y:i.y}),this.currentX_=i.x,this.currentY_=i.y},Z.lineTo=function(e,t){var i=L(this,e,t);this.currentPath_.push({type:"lineTo",x:i.x,y:i.y}),this.currentX_=i.x,this.currentY_=i.y},Z.bezierCurveTo=function(e,t,i,n,a,o){var r=L(this,a,o),s=L(this,e,t),l=L(this,i,n);k(this,s,l,r)},Z.quadraticCurveTo=function(e,t,i,n){var a=L(this,e,t),o=L(this,i,n),r={x:this.currentX_+2/3*(a.x-this.currentX_),y:this.currentY_+2/3*(a.y-this.currentY_)},s={x:r.x+(o.x-this.currentX_)/3,y:r.y+(o.y-this.currentY_)/3};k(this,r,s,o)},Z.arc=function(e,t,i,n,a,o){i*=A;var r=o?"at":"wa",s=e+F(n)*i-M,l=t+E(n)*i-M,h=e+F(a)*i-M,m=t+E(a)*i-M;s!=h||o||(s+=.125);var V=L(this,e,t),U=L(this,s,l),d=L(this,h,m);this.currentPath_.push({type:r,x:V.x,y:V.y,radius:i,xStart:U.x,yStart:U.y,xEnd:d.x,yEnd:d.y})},Z.rect=function(e,t,i,n){this.moveTo(e,t),this.lineTo(e+i,t),this.lineTo(e+i,t+n),this.lineTo(e,t+n),this.closePath()},Z.strokeRect=function(e,t,i,n){var a=this.currentPath_;this.beginPath(),this.moveTo(e,t),this.lineTo(e+i,t),this.lineTo(e+i,t+n),this.lineTo(e,t+n),this.closePath(),this.stroke(),this.currentPath_=a},Z.fillRect=function(e,t,i,n){var a=this.currentPath_;this.beginPath(),this.moveTo(e,t),this.lineTo(e+i,t),this.lineTo(e+i,t+n),this.lineTo(e,t+n),this.closePath(),this.fill(),this.currentPath_=a},Z.createLinearGradient=function(e,t,i,n){var a=new v("gradient");return a.x0_=e,a.y0_=t,a.x1_=i,a.y1_=n,a},Z.createRadialGradient=function(e,t,i,n,a,o){var r=new v("gradientradial");return r.x0_=e,r.y0_=t,r.r0_=i,r.x1_=n,r.y1_=a,r.r1_=o,r},Z.drawImage=function(e){var t,i,n,a,o,r,s,l,h=e.runtimeStyle.width,m=e.runtimeStyle.height;e.runtimeStyle.width="auto",e.runtimeStyle.height="auto";var V=e.width,U=e.height;if(e.runtimeStyle.width=h,e.runtimeStyle.height=m,3==arguments.length)t=arguments[1],i=arguments[2],o=r=0,s=n=V,l=a=U;else if(5==arguments.length)t=arguments[1],i=arguments[2],n=arguments[3],a=arguments[4],o=r=0,s=V,l=U;else{if(9!=arguments.length)throw Error("Invalid number of arguments");o=arguments[1],r=arguments[2],s=arguments[3],l=arguments[4],t=arguments[5],i=arguments[6],n=arguments[7],a=arguments[8]}var d=L(this,t,i),p=[],c=10,u=10,y=b=1;if(p.push(" <g_vml_:group",' coordsize="',A*c,",",A*u,'"',' coordorigin="0,0"',' style="width:',c,"px;height:",u,"px;position:absolute;"),1!=this.m_[0][0]||this.m_[0][1]||1!=this.m_[1][1]||this.m_[1][0]){var g=[],y=this.scaleX_,b=this.scaleY_;g.push("M11=",this.m_[0][0]/y,",","M12=",this.m_[1][0]/b,",","M21=",this.m_[0][1]/y,",","M22=",this.m_[1][1]/b,",","Dx=",S(d.x/A),",","Dy=",S(d.y/A),"");var f=d,k=L(this,t+n,i),x=L(this,t,i+a),_=L(this,t+n,i+a);f.x=C.max(f.x,k.x,x.x,_.x),f.y=C.max(f.y,k.y,x.y,_.y),p.push("padding:0 ",S(f.x/A),"px ",S(f.y/A),"px 0;filter:progid:DXImageTransform.Microsoft.Matrix(",g.join(""),", SizingMethod='clip');")}else p.push("top:",S(d.y/A),"px;left:",S(d.x/A),"px;");p.push(' ">'),(o||r)&&p.push('<div style="overflow: hidden; width:',Math.ceil((n+o*n/s)*y),"px;"," height:",Math.ceil((a+r*a/l)*b),"px;"," filter:progid:DxImageTransform.Microsoft.Matrix(Dx=",-o*n/s*y,",Dy=",-r*a/l*b,');">'),p.push('<div style="width:',Math.round(y*V*n/s),"px;"," height:",Math.round(b*U*a/l),"px;"," filter:"),this.globalAlpha<1&&p.push(" progid:DXImageTransform.Microsoft.Alpha(opacity="+100*this.globalAlpha+")"),p.push(" progid:DXImageTransform.Microsoft.AlphaImageLoader(src=",e.src,',sizingMethod=scale)">'),(o||r)&&p.push("</div>"),p.push("</div></div>"),this.element_.insertAdjacentHTML("BeforeEnd",p.join(""))},Z.stroke=function(e){var t=[],i=10,n=10;t.push("<g_vml_:shape",' filled="',!!e,'"',' style="position:absolute;width:',i,"px;height:",n,'px;"',' coordorigin="0,0"',' coordsize="',A*i,",",A*n,'"',' stroked="',!e,'"',' path="');for(var a={x:null,y:null},o={x:null,y:null},r=0;r<this.currentPath_.length;r++){var s,l=this.currentPath_[r];switch(l.type){case"moveTo":s=l,t.push(" m ",S(l.x),",",S(l.y));break;case"lineTo":t.push(" l ",S(l.x),",",S(l.y));break;case"close":t.push(" x "),l=null;break;case"bezierCurveTo":t.push(" c ",S(l.cp1x),",",S(l.cp1y),",",S(l.cp2x),",",S(l.cp2y),",",S(l.x),",",S(l.y));break;case"at":case"wa":t.push(" ",l.type," ",S(l.x-this.scaleX_*l.radius),",",S(l.y-this.scaleY_*l.radius)," ",S(l.x+this.scaleX_*l.radius),",",S(l.y+this.scaleY_*l.radius)," ",S(l.xStart),",",S(l.yStart)," ",S(l.xEnd),",",S(l.yEnd))}l&&((null==a.x||l.x<a.x)&&(a.x=l.x),(null==o.x||l.x>o.x)&&(o.x=l.x),(null==a.y||l.y<a.y)&&(a.y=l.y),(null==o.y||l.y>o.y)&&(o.y=l.y))}t.push(' ">'),e?_(this,t,a,o):x(this,t),t.push("</g_vml_:shape>"),this.element_.insertAdjacentHTML("beforeEnd",t.join(""))},Z.fill=function(){this.stroke(!0)},Z.closePath=function(){this.currentPath_.push({type:"close"})},Z.save=function(){var e={};h(this,e),this.aStack_.push(e),this.mStack_.push(this.m_),this.m_=l(s(),this.m_)},Z.restore=function(){this.aStack_.length&&(h(this.aStack_.pop(),this),this.m_=this.mStack_.pop())},Z.translate=function(e,t){var i=[[1,0,0],[0,1,0],[e,t,1]];X(this,l(i,this.m_),!1)},Z.rotate=function(e){var t=F(e),i=E(e),n=[[t,i,0],[-i,t,0],[0,0,1]];X(this,l(n,this.m_),!1)},Z.scale=function(e,t){var i=[[e,0,0],[0,t,0],[0,0,1]];X(this,l(i,this.m_),!0)},Z.transform=function(e,t,i,n,a,o){var r=[[e,t,0],[i,n,0],[a,o,1]];X(this,l(r,this.m_),!0)},Z.setTransform=function(e,t,i,n,a,o){var r=[[e,t,0],[i,n,0],[a,o,1]];X(this,r,!0)},Z.drawText_=function(e,t,n,a,o){var r=this.m_,s=1e3,l=0,h=s,m={x:0,y:0},V=[],U=y(u(this.font),this.element_),d=g(U),p=this.element_.currentStyle,c=this.textAlign.toLowerCase();switch(c){case"left":case"center":case"right":break;case"end":c="ltr"==p.direction?"right":"left";break;case"start":c="rtl"==p.direction?"right":"left";break;default:c="left"}switch(this.textBaseline){case"hanging":case"top":m.y=U.size/1.75;break;case"middle":break;default:case null:case"alphabetic":case"ideographic":case"bottom":m.y=-U.size/2.25}switch(c){case"right":l=s,h=.05;break;case"center":l=h=s/2}var b=L(this,t+m.x,n+m.y);V.push('<g_vml_:line from="',-l,' 0" to="',h,' 0.05" ',' coordsize="100 100" coordorigin="0 0"',' filled="',!o,'" stroked="',!!o,'" style="position:absolute;width:1px;height:1px;">'),o?x(this,V):_(this,V,{x:-l,y:0},{x:h,y:U.size});var f=r[0][0].toFixed(3)+","+r[1][0].toFixed(3)+","+r[0][1].toFixed(3)+","+r[1][1].toFixed(3)+",0,0",k=S(b.x/A)+","+S(b.y/A);V.push('<g_vml_:skew on="t" matrix="',f,'" ',' offset="',k,'" origin="',l,' 0" />','<g_vml_:path textpathok="true" />','<g_vml_:textpath on="true" string="',i(e),'" style="v-text-align:',c,";font:",i(d),'" /></g_vml_:line>'),this.element_.insertAdjacentHTML("beforeEnd",V.join(""))},Z.fillText=function(e,t,i,n){this.drawText_(e,t,i,n,!1)},Z.strokeText=function(e,t,i,n){this.drawText_(e,t,i,n,!0)},Z.measureText=function(e){if(!this.textMeasureEl_){var t='<span style="position:absolute;top:-20000px;left:0;padding:0;margin:0;border:none;white-space:pre;"></span>';this.element_.insertAdjacentHTML("beforeEnd",t),this.textMeasureEl_=this.element_.lastChild}var i=this.element_.ownerDocument;this.textMeasureEl_.innerHTML="";try{this.textMeasureEl_.style.font=this.font}catch(n){}return this.textMeasureEl_.appendChild(i.createTextNode(e)),{width:this.textMeasureEl_.offsetWidth}},Z.clip=function(){},Z.arcTo=function(){},Z.createPattern=function(e,t){return new w(e,t)},v.prototype.addColorStop=function(e,t){t=c(t),this.colors_.push({offset:e,color:t.color,alpha:t.alpha})};var q=J.prototype=new Error;q.INDEX_SIZE_ERR=1,q.DOMSTRING_SIZE_ERR=2,q.HIERARCHY_REQUEST_ERR=3,q.WRONG_DOCUMENT_ERR=4,q.INVALID_CHARACTER_ERR=5,q.NO_DATA_ALLOWED_ERR=6,q.NO_MODIFICATION_ALLOWED_ERR=7,q.NOT_FOUND_ERR=8,q.NOT_SUPPORTED_ERR=9,q.INUSE_ATTRIBUTE_ERR=10,q.INVALID_STATE_ERR=11,q.SYNTAX_ERR=12,q.INVALID_MODIFICATION_ERR=13,q.NAMESPACE_ERR=14,q.INVALID_ACCESS_ERR=15,q.VALIDATION_ERR=16,q.TYPE_MISMATCH_ERR=17,G_vmlCanvasManager=P,CanvasRenderingContext2D=f,CanvasGradient=v,CanvasPattern=w,DOMException=J}(),G_vmlCanvasManager}),i("zrender/mixin/Eventful",["require"],function(){var e=function(){this._handlers={}};return e.prototype.one=function(e,t,i){var n=this._handlers;return t&&e?(n[e]||(n[e]=[]),n[e].push({h:t,one:!0,ctx:i||this}),this):this},e.prototype.bind=function(e,t,i){var n=this._handlers;return t&&e?(n[e]||(n[e]=[]),n[e].push({h:t,one:!1,ctx:i||this}),this):this},e.prototype.unbind=function(e,t){var i=this._handlers;if(!e)return this._handlers={},this;if(t){if(i[e]){for(var n=[],a=0,o=i[e].length;o>a;a++)i[e][a].h!=t&&n.push(i[e][a]);i[e]=n}i[e]&&0===i[e].length&&delete i[e]}else delete i[e];return this},e.prototype.dispatch=function(e){if(this._handlers[e]){var t=arguments,i=t.length;i>3&&(t=Array.prototype.slice.call(t,1));for(var n=this._handlers[e],a=n.length,o=0;a>o;){switch(i){case 1:n[o].h.call(n[o].ctx);break;case 2:n[o].h.call(n[o].ctx,t[1]);break;case 3:n[o].h.call(n[o].ctx,t[1],t[2]);break;default:n[o].h.apply(n[o].ctx,t)}n[o].one?(n.splice(o,1),a--):o++}}return this},e.prototype.dispatchWithContext=function(e){if(this._handlers[e]){var t=arguments,i=t.length;i>4&&(t=Array.prototype.slice.call(t,1,t.length-1));for(var n=t[t.length-1],a=this._handlers[e],o=a.length,r=0;o>r;){switch(i){case 1:a[r].h.call(n);break;case 2:a[r].h.call(n,t[1]);break;case 3:a[r].h.call(n,t[1],t[2]);break;default:a[r].h.apply(n,t)}a[r].one?(a.splice(r,1),o--):r++}}return this},e}),i("zrender/tool/log",["require","../config"],function(e){var t=e("../config");return function(){if(0!==t.debugMode)if(1==t.debugMode)for(var e in arguments)throw new Error(arguments[e]);else if(t.debugMode>1)for(var e in arguments)console.log(arguments[e])}}),i("zrender/tool/guid",[],function(){var e=2311;return function(){return"zrender__"+e++}}),i("zrender/Handler",["require","./config","./tool/env","./tool/event","./tool/util","./tool/vector","./tool/matrix","./mixin/Eventful"],function(e){"use strict";function t(e,t){return function(i,n){return e.call(t,i,n)}}function i(e,t){return function(i,n,a){return e.call(t,i,n,a)}}function n(e){for(var i=d.length;i--;){var n=d[i];e["_"+n+"Handler"]=t(c[n],e)}}function a(e,t,i){if(this._draggingTarget&&this._draggingTarget.id==e.id||e.isSilent())return!1;var n=this._event;if(e.isCover(t,i)){e.hoverable&&this.storage.addHover(e);for(var a=e.parent;a;){if(a.clipShape&&!a.clipShape.isCover(this._mouseX,this._mouseY))return!1;a=a.parent}return this._lastHover!=e&&(this._processOutShape(n),this._processDragLeave(n),this._lastHover=e,this._processDragEnter(n)),this._processOverShape(n),this._processDragOver(n),this._hasfound=1,!0}return!1}var o=e("./config"),r=e("./tool/env"),s=e("./tool/event"),l=e("./tool/util"),h=e("./tool/vector"),m=e("./tool/matrix"),V=o.EVENT,U=e("./mixin/Eventful"),d=["resize","click","dblclick","mousewheel","mousemove","mouseout","mouseup","mousedown","touchstart","touchend","touchmove"],p=function(e){if(window.G_vmlCanvasManager)return!0;e=e||window.event;var t=e.toElement||e.relatedTarget||e.srcElement||e.target;return t&&t.className.match(o.elementClassName)},c={resize:function(e){e=e||window.event,this._lastHover=null,this._isMouseDown=0,this.dispatch(V.RESIZE,e)},click:function(e,t){if(p(e)||t){e=this._zrenderEventFixed(e);var i=this._lastHover;(i&&i.clickable||!i)&&this._clickThreshold<5&&this._dispatchAgency(i,V.CLICK,e),this._mousemoveHandler(e)}},dblclick:function(e,t){if(p(e)||t){e=e||window.event,e=this._zrenderEventFixed(e);var i=this._lastHover;(i&&i.clickable||!i)&&this._clickThreshold<5&&this._dispatchAgency(i,V.DBLCLICK,e),this._mousemoveHandler(e)}},mousewheel:function(e,t){if(p(e)||t){e=this._zrenderEventFixed(e);var i=e.wheelDelta||-e.detail,n=i>0?1.1:1/1.1,a=!1,o=this._mouseX,r=this._mouseY;this.painter.eachBuildinLayer(function(t){var i=t.position;if(t.zoomable){t.__zoom=t.__zoom||1;var l=t.__zoom;l*=n,l=Math.max(Math.min(t.maxZoom,l),t.minZoom),n=l/t.__zoom,t.__zoom=l,i[0]-=(o-i[0])*(n-1),i[1]-=(r-i[1])*(n-1),t.scale[0]*=n,t.scale[1]*=n,t.dirty=!0,a=!0,s.stop(e)}}),a&&this.painter.refresh(),this._dispatchAgency(this._lastHover,V.MOUSEWHEEL,e),this._mousemoveHandler(e)}},mousemove:function(e,t){if((p(e)||t)&&!this.painter.isLoading()){e=this._zrenderEventFixed(e),this._lastX=this._mouseX,this._lastY=this._mouseY,this._mouseX=s.getX(e),this._mouseY=s.getY(e);var i=this._mouseX-this._lastX,n=this._mouseY-this._lastY;this._processDragStart(e),this._hasfound=0,this._event=e,this._iterateAndFindHover(),this._hasfound||((!this._draggingTarget||this._lastHover&&this._lastHover!=this._draggingTarget)&&(this._processOutShape(e),
+this._processDragLeave(e)),this._lastHover=null,this.storage.delHover(),this.painter.clearHover());var a="default";if(this._draggingTarget)this.storage.drift(this._draggingTarget.id,i,n),this._draggingTarget.modSelf(),this.storage.addHover(this._draggingTarget),this._clickThreshold++;else if(this._isMouseDown){var o=!1;this.painter.eachBuildinLayer(function(e){e.panable&&(a="move",e.position[0]+=i,e.position[1]+=n,o=!0,e.dirty=!0)}),o&&this.painter.refresh()}this._draggingTarget||this._hasfound&&this._lastHover.draggable?a="move":this._hasfound&&this._lastHover.clickable&&(a="pointer"),this.root.style.cursor=a,this._dispatchAgency(this._lastHover,V.MOUSEMOVE,e),(this._draggingTarget||this._hasfound||this.storage.hasHoverShape())&&this.painter.refreshHover()}},mouseout:function(e,t){if(p(e)||t){e=this._zrenderEventFixed(e);var i=e.toElement||e.relatedTarget;if(i!=this.root)for(;i&&9!=i.nodeType;){if(i==this.root)return void this._mousemoveHandler(e);i=i.parentNode}e.zrenderX=this._lastX,e.zrenderY=this._lastY,this.root.style.cursor="default",this._isMouseDown=0,this._processOutShape(e),this._processDrop(e),this._processDragEnd(e),this.painter.isLoading()||this.painter.refreshHover(),this.dispatch(V.GLOBALOUT,e)}},mousedown:function(e,t){if(p(e)||t){if(this._clickThreshold=0,2==this._lastDownButton)return this._lastDownButton=e.button,void(this._mouseDownTarget=null);this._lastMouseDownMoment=new Date,e=this._zrenderEventFixed(e),this._isMouseDown=1,this._mouseDownTarget=this._lastHover,this._dispatchAgency(this._lastHover,V.MOUSEDOWN,e),this._lastDownButton=e.button}},mouseup:function(e,t){(p(e)||t)&&(e=this._zrenderEventFixed(e),this.root.style.cursor="default",this._isMouseDown=0,this._mouseDownTarget=null,this._dispatchAgency(this._lastHover,V.MOUSEUP,e),this._processDrop(e),this._processDragEnd(e))},touchstart:function(e,t){(p(e)||t)&&(e=this._zrenderEventFixed(e,!0),this._lastTouchMoment=new Date,this._mobileFindFixed(e),this._mousedownHandler(e))},touchmove:function(e,t){(p(e)||t)&&(e=this._zrenderEventFixed(e,!0),this._mousemoveHandler(e),this._isDragging&&s.stop(e))},touchend:function(e,t){if(p(e)||t){e=this._zrenderEventFixed(e,!0),this._mouseupHandler(e);var i=new Date;i-this._lastTouchMoment<V.touchClickDelay&&(this._mobileFindFixed(e),this._clickHandler(e),i-this._lastClickMoment<V.touchClickDelay/2&&(this._dblclickHandler(e),this._lastHover&&this._lastHover.clickable&&s.stop(e)),this._lastClickMoment=i),this.painter.clearHover()}}},u=function(e,t,o){U.call(this),this.root=e,this.storage=t,this.painter=o,this._lastX=this._lastY=this._mouseX=this._mouseY=0,this._findHover=i(a,this),this._domHover=o.getDomHover(),n(this),window.addEventListener?(window.addEventListener("resize",this._resizeHandler),r.os.tablet||r.os.phone?(e.addEventListener("touchstart",this._touchstartHandler),e.addEventListener("touchmove",this._touchmoveHandler),e.addEventListener("touchend",this._touchendHandler)):(e.addEventListener("click",this._clickHandler),e.addEventListener("dblclick",this._dblclickHandler),e.addEventListener("mousewheel",this._mousewheelHandler),e.addEventListener("mousemove",this._mousemoveHandler),e.addEventListener("mousedown",this._mousedownHandler),e.addEventListener("mouseup",this._mouseupHandler)),e.addEventListener("DOMMouseScroll",this._mousewheelHandler),e.addEventListener("mouseout",this._mouseoutHandler)):(window.attachEvent("onresize",this._resizeHandler),e.attachEvent("onclick",this._clickHandler),e.ondblclick=this._dblclickHandler,e.attachEvent("onmousewheel",this._mousewheelHandler),e.attachEvent("onmousemove",this._mousemoveHandler),e.attachEvent("onmouseout",this._mouseoutHandler),e.attachEvent("onmousedown",this._mousedownHandler),e.attachEvent("onmouseup",this._mouseupHandler))};u.prototype.on=function(e,t,i){return this.bind(e,t,i),this},u.prototype.un=function(e,t){return this.unbind(e,t),this},u.prototype.trigger=function(e,t){switch(e){case V.RESIZE:case V.CLICK:case V.DBLCLICK:case V.MOUSEWHEEL:case V.MOUSEMOVE:case V.MOUSEDOWN:case V.MOUSEUP:case V.MOUSEOUT:this["_"+e+"Handler"](t,!0)}},u.prototype.dispose=function(){var e=this.root;window.removeEventListener?(window.removeEventListener("resize",this._resizeHandler),r.os.tablet||r.os.phone?(e.removeEventListener("touchstart",this._touchstartHandler),e.removeEventListener("touchmove",this._touchmoveHandler),e.removeEventListener("touchend",this._touchendHandler)):(e.removeEventListener("click",this._clickHandler),e.removeEventListener("dblclick",this._dblclickHandler),e.removeEventListener("mousewheel",this._mousewheelHandler),e.removeEventListener("mousemove",this._mousemoveHandler),e.removeEventListener("mousedown",this._mousedownHandler),e.removeEventListener("mouseup",this._mouseupHandler)),e.removeEventListener("DOMMouseScroll",this._mousewheelHandler),e.removeEventListener("mouseout",this._mouseoutHandler)):(window.detachEvent("onresize",this._resizeHandler),e.detachEvent("onclick",this._clickHandler),e.detachEvent("dblclick",this._dblclickHandler),e.detachEvent("onmousewheel",this._mousewheelHandler),e.detachEvent("onmousemove",this._mousemoveHandler),e.detachEvent("onmouseout",this._mouseoutHandler),e.detachEvent("onmousedown",this._mousedownHandler),e.detachEvent("onmouseup",this._mouseupHandler)),this.root=this._domHover=this.storage=this.painter=null,this.un()},u.prototype._processDragStart=function(e){var t=this._lastHover;if(this._isMouseDown&&t&&t.draggable&&!this._draggingTarget&&this._mouseDownTarget==t){if(t.dragEnableTime&&new Date-this._lastMouseDownMoment<t.dragEnableTime)return;var i=t;this._draggingTarget=i,this._isDragging=1,i.invisible=!0,this.storage.mod(i.id),this._dispatchAgency(i,V.DRAGSTART,e),this.painter.refresh()}},u.prototype._processDragEnter=function(e){this._draggingTarget&&this._dispatchAgency(this._lastHover,V.DRAGENTER,e,this._draggingTarget)},u.prototype._processDragOver=function(e){this._draggingTarget&&this._dispatchAgency(this._lastHover,V.DRAGOVER,e,this._draggingTarget)},u.prototype._processDragLeave=function(e){this._draggingTarget&&this._dispatchAgency(this._lastHover,V.DRAGLEAVE,e,this._draggingTarget)},u.prototype._processDrop=function(e){this._draggingTarget&&(this._draggingTarget.invisible=!1,this.storage.mod(this._draggingTarget.id),this.painter.refresh(),this._dispatchAgency(this._lastHover,V.DROP,e,this._draggingTarget))},u.prototype._processDragEnd=function(e){this._draggingTarget&&(this._dispatchAgency(this._draggingTarget,V.DRAGEND,e),this._lastHover=null),this._isDragging=0,this._draggingTarget=null},u.prototype._processOverShape=function(e){this._dispatchAgency(this._lastHover,V.MOUSEOVER,e)},u.prototype._processOutShape=function(e){this._dispatchAgency(this._lastHover,V.MOUSEOUT,e)},u.prototype._dispatchAgency=function(e,t,i,n){var a="on"+t,o={type:t,event:i,target:e,cancelBubble:!1},r=e;for(n&&(o.dragged=n);r&&(r[a]&&(o.cancelBubble=r[a](o)),r.dispatch(t,o),r=r.parent,!o.cancelBubble););if(e)o.cancelBubble||this.dispatch(t,o);else if(!n){var s={type:t,event:i};this.dispatch(t,s),this.painter.eachOtherLayer(function(e){"function"==typeof e[a]&&e[a](s),e.dispatch&&e.dispatch(t,s)})}},u.prototype._iterateAndFindHover=function(){var e=m.create();return function(){for(var t,i,n=this.storage.getShapeList(),a=[0,0],o=n.length-1;o>=0;o--){var r=n[o];if(t!==r.zlevel&&(i=this.painter.getLayer(r.zlevel,i),a[0]=this._mouseX,a[1]=this._mouseY,i.needTransform&&(m.invert(e,i.transform),h.applyTransform(a,a,e))),this._findHover(r,a[0],a[1]))break}}}();var y=[{x:10},{x:-20},{x:10,y:10},{y:-20}];return u.prototype._mobileFindFixed=function(e){this._lastHover=null,this._mouseX=e.zrenderX,this._mouseY=e.zrenderY,this._event=e,this._iterateAndFindHover();for(var t=0;!this._lastHover&&t<y.length;t++){var i=y[t];i.x&&(this._mouseX+=i.x),i.y&&(this._mouseY+=i.y),this._iterateAndFindHover()}this._lastHover&&(e.zrenderX=this._mouseX,e.zrenderY=this._mouseY)},u.prototype._zrenderEventFixed=function(e,t){if(e.zrenderFixed)return e;if(t){var i="touchend"!=e.type?e.targetTouches[0]:e.changedTouches[0];if(i){var n=this.painter._domRoot.getBoundingClientRect();e.zrenderX=i.clientX-n.left,e.zrenderY=i.clientY-n.top}}else{e=e||window.event;var a=e.toElement||e.relatedTarget||e.srcElement||e.target;a&&a!=this._domHover&&(e.zrenderX=("undefined"!=typeof e.offsetX?e.offsetX:e.layerX)+a.offsetLeft,e.zrenderY=("undefined"!=typeof e.offsetY?e.offsetY:e.layerY)+a.offsetTop)}return e.zrenderFixed=1,e},l.merge(u.prototype,U.prototype,!0),u}),i("zrender/Painter",["require","./config","./tool/util","./tool/log","./loadingEffect/Base","./Layer","./shape/Image"],function(e){"use strict";function t(){return!1}function i(){}function n(e){return e?e.isBuildin?!0:"function"!=typeof e.resize||"function"!=typeof e.refresh?!1:!0:!1}var a=e("./config"),o=e("./tool/util"),r=e("./tool/log"),s=e("./loadingEffect/Base"),l=e("./Layer"),h=function(e,i){this.root=e,e.style["-webkit-tap-highlight-color"]="transparent",e.style["-webkit-user-select"]="none",e.style["user-select"]="none",e.style["-webkit-touch-callout"]="none",this.storage=i,e.innerHTML="",this._width=this._getWidth(),this._height=this._getHeight();var n=document.createElement("div");this._domRoot=n,n.style.position="relative",n.style.overflow="hidden",n.style.width=this._width+"px",n.style.height=this._height+"px",e.appendChild(n),this._layers={},this._zlevelList=[],this._layerConfig={},this._loadingEffect=new s({}),this.shapeToImage=this._createShapeToImageProcessor(),this._bgDom=document.createElement("div"),this._bgDom.style.cssText=["position:absolute;left:0px;top:0px;width:",this._width,"px;height:",this._height+"px;","-webkit-user-select:none;user-select;none;","-webkit-touch-callout:none;"].join(""),this._bgDom.setAttribute("data-zr-dom-id","bg"),this._bgDom.className=a.elementClassName,n.appendChild(this._bgDom),this._bgDom.onselectstart=t;var o=new l("_zrender_hover_",this);this._layers.hover=o,n.appendChild(o.dom),o.initContext(),o.dom.onselectstart=t,o.dom.style["-webkit-user-select"]="none",o.dom.style["user-select"]="none",o.dom.style["-webkit-touch-callout"]="none",this.refreshNextFrame=null};return h.prototype.render=function(e){return this.isLoading()&&this.hideLoading(),this.refresh(e,!0),this},h.prototype.refresh=function(e,t){var i=this.storage.getShapeList(!0);this._paintList(i,t);for(var n=0;n<this._zlevelList.length;n++){var a=this._zlevelList[n],o=this._layers[a];!o.isBuildin&&o.refresh&&o.refresh()}return"function"==typeof e&&e(),this},h.prototype._preProcessLayer=function(e){e.unusedCount++,e.updateTransform()},h.prototype._postProcessLayer=function(e){e.dirty=!1,1==e.unusedCount&&e.clear()},h.prototype._paintList=function(e,t){"undefined"==typeof t&&(t=!1),this._updateLayerStatus(e);var i,n,o;this.eachBuildinLayer(this._preProcessLayer);for(var s=0,l=e.length;l>s;s++){var h=e[s];if(n!==h.zlevel&&(i&&(i.needTransform&&o.restore(),o.flush&&o.flush()),n=h.zlevel,i=this.getLayer(n),i.isBuildin||r("ZLevel "+n+" has been used by unkown layer "+i.id),o=i.ctx,i.unusedCount=0,(i.dirty||t)&&i.clear(),i.needTransform&&(o.save(),i.setTransform(o))),(i.dirty||t)&&!h.invisible&&(!h.onbrush||h.onbrush&&!h.onbrush(o,!1)))if(a.catchBrushException)try{h.brush(o,!1,this.refreshNextFrame)}catch(m){r(m,"brush error of "+h.type,h)}else h.brush(o,!1,this.refreshNextFrame);h.__dirty=!1}i&&(i.needTransform&&o.restore(),o.flush&&o.flush()),this.eachBuildinLayer(this._postProcessLayer)},h.prototype.getLayer=function(e){var t=this._layers[e];return t||(t=new l(e,this),t.isBuildin=!0,this._layerConfig[e]&&o.merge(t,this._layerConfig[e],!0),t.updateTransform(),this.insertLayer(e,t),t.initContext()),t},h.prototype.insertLayer=function(e,t){if(this._layers[e])return void r("ZLevel "+e+" has been used already");if(!n(t))return void r("Layer of zlevel "+e+" is not valid");var i=this._zlevelList.length,a=null,o=-1;if(i>0&&e>this._zlevelList[0]){for(o=0;i-1>o&&!(this._zlevelList[o]<e&&this._zlevelList[o+1]>e);o++);a=this._layers[this._zlevelList[o]]}this._zlevelList.splice(o+1,0,e);var s=a?a.dom:this._bgDom;s.nextSibling?s.parentNode.insertBefore(t.dom,s.nextSibling):s.parentNode.appendChild(t.dom),this._layers[e]=t},h.prototype.eachLayer=function(e,t){for(var i=0;i<this._zlevelList.length;i++){var n=this._zlevelList[i];e.call(t,this._layers[n],n)}},h.prototype.eachBuildinLayer=function(e,t){for(var i=0;i<this._zlevelList.length;i++){var n=this._zlevelList[i],a=this._layers[n];a.isBuildin&&e.call(t,a,n)}},h.prototype.eachOtherLayer=function(e,t){for(var i=0;i<this._zlevelList.length;i++){var n=this._zlevelList[i],a=this._layers[n];a.isBuildin||e.call(t,a,n)}},h.prototype.getLayers=function(){return this._layers},h.prototype._updateLayerStatus=function(e){var t=this._layers,i={};this.eachBuildinLayer(function(e,t){i[t]=e.elCount,e.elCount=0});for(var n=0,a=e.length;a>n;n++){var o=e[n],r=o.zlevel,s=t[r];if(s){if(s.elCount++,s.dirty)continue;s.dirty=o.__dirty}}this.eachBuildinLayer(function(e,t){i[t]!==e.elCount&&(e.dirty=!0)})},h.prototype.refreshShapes=function(e,t){for(var i=0,n=e.length;n>i;i++){var a=e[i];a.modSelf()}return this.refresh(t),this},h.prototype.setLoadingEffect=function(e){return this._loadingEffect=e,this},h.prototype.clear=function(){return this.eachBuildinLayer(this._clearLayer),this},h.prototype._clearLayer=function(e){e.clear()},h.prototype.modLayer=function(e,t){if(t){this._layerConfig[e]?o.merge(this._layerConfig[e],t,!0):this._layerConfig[e]=t;var i=this._layers[e];i&&o.merge(i,this._layerConfig[e],!0)}},h.prototype.delLayer=function(e){var t=this._layers[e];t&&(this.modLayer(e,{position:t.position,rotation:t.rotation,scale:t.scale}),t.dom.parentNode.removeChild(t.dom),delete this._layers[e],this._zlevelList.splice(o.indexOf(this._zlevelList,e),1))},h.prototype.refreshHover=function(){this.clearHover();for(var e=this.storage.getHoverShapes(!0),t=0,i=e.length;i>t;t++)this._brushHover(e[t]);var n=this._layers.hover.ctx;return n.flush&&n.flush(),this.storage.delHover(),this},h.prototype.clearHover=function(){var e=this._layers.hover;return e&&e.clear(),this},h.prototype.showLoading=function(e){return this._loadingEffect&&this._loadingEffect.stop(),e&&this.setLoadingEffect(e),this._loadingEffect.start(this),this.loading=!0,this},h.prototype.hideLoading=function(){return this._loadingEffect.stop(),this.clearHover(),this.loading=!1,this},h.prototype.isLoading=function(){return this.loading},h.prototype.resize=function(){var e=this._domRoot;e.style.display="none";var t=this._getWidth(),i=this._getHeight();if(e.style.display="",this._width!=t||i!=this._height){this._width=t,this._height=i,e.style.width=t+"px",e.style.height=i+"px";for(var n in this._layers)this._layers[n].resize(t,i);this.refresh(null,!0)}return this},h.prototype.clearLayer=function(e){var t=this._layers[e];t&&t.clear()},h.prototype.dispose=function(){this.isLoading()&&this.hideLoading(),this.root.innerHTML="",this.root=this.storage=this._domRoot=this._layers=null},h.prototype.getDomHover=function(){return this._layers.hover.dom},h.prototype.toDataURL=function(e,t,i){if(window.G_vmlCanvasManager)return null;var n=new l("image",this);this._bgDom.appendChild(n.dom),n.initContext();var o=n.ctx;n.clearColor=t||"#fff",n.clear();var s=this;this.storage.iterShape(function(e){if(!e.invisible&&(!e.onbrush||e.onbrush&&!e.onbrush(o,!1)))if(a.catchBrushException)try{e.brush(o,!1,s.refreshNextFrame)}catch(t){r(t,"brush error of "+e.type,e)}else e.brush(o,!1,s.refreshNextFrame)},{normal:"up",update:!0});var h=n.dom.toDataURL(e,i);return o=null,this._bgDom.removeChild(n.dom),h},h.prototype.getWidth=function(){return this._width},h.prototype.getHeight=function(){return this._height},h.prototype._getWidth=function(){var e=this.root,t=e.currentStyle||document.defaultView.getComputedStyle(e);return((e.clientWidth||parseInt(t.width,10))-parseInt(t.paddingLeft,10)-parseInt(t.paddingRight,10)).toFixed(0)-0},h.prototype._getHeight=function(){var e=this.root,t=e.currentStyle||document.defaultView.getComputedStyle(e);return((e.clientHeight||parseInt(t.height,10))-parseInt(t.paddingTop,10)-parseInt(t.paddingBottom,10)).toFixed(0)-0},h.prototype._brushHover=function(e){var t=this._layers.hover.ctx;if(!e.onbrush||e.onbrush&&!e.onbrush(t,!0)){var i=this.getLayer(e.zlevel);if(i.needTransform&&(t.save(),i.setTransform(t)),a.catchBrushException)try{e.brush(t,!0,this.refreshNextFrame)}catch(n){r(n,"hoverBrush error of "+e.type,e)}else e.brush(t,!0,this.refreshNextFrame);i.needTransform&&t.restore()}},h.prototype._shapeToImage=function(t,i,n,a,o){var r=document.createElement("canvas"),s=r.getContext("2d");r.style.width=n+"px",r.style.height=a+"px",r.setAttribute("width",n*o),r.setAttribute("height",a*o),s.clearRect(0,0,n*o,a*o);var l={position:i.position,rotation:i.rotation,scale:i.scale};i.position=[0,0,0],i.rotation=0,i.scale=[1,1],i&&i.brush(s,!1);var h=e("./shape/Image"),m=new h({id:t,style:{x:0,y:0,image:r}});return null!=l.position&&(m.position=i.position=l.position),null!=l.rotation&&(m.rotation=i.rotation=l.rotation),null!=l.scale&&(m.scale=i.scale=l.scale),m},h.prototype._createShapeToImageProcessor=function(){if(window.G_vmlCanvasManager)return i;var e=this;return function(t,i,n,o){return e._shapeToImage(t,i,n,o,a.devicePixelRatio)}},h}),i("zrender/Storage",["require","./tool/util","./Group"],function(e){"use strict";function t(e,t){return e.zlevel==t.zlevel?e.z==t.z?e.__renderidx-t.__renderidx:e.z-t.z:e.zlevel-t.zlevel}var i=e("./tool/util"),n=e("./Group"),a={hover:!1,normal:"down",update:!1},o=function(){this._elements={},this._hoverElements=[],this._roots=[],this._shapeList=[],this._shapeListOffset=0};return o.prototype.iterShape=function(e,t){if(t||(t=a),t.hover)for(var i=0,n=this._hoverElements.length;n>i;i++){var o=this._hoverElements[i];if(o.updateTransform(),e(o))return this}switch(t.update&&this.updateShapeList(),t.normal){case"down":for(var n=this._shapeList.length;n--;)if(e(this._shapeList[n]))return this;break;default:for(var i=0,n=this._shapeList.length;n>i;i++)if(e(this._shapeList[i]))return this}return this},o.prototype.getHoverShapes=function(e){for(var i=[],n=0,a=this._hoverElements.length;a>n;n++){i.push(this._hoverElements[n]);var o=this._hoverElements[n].hoverConnect;if(o){var r;o=o instanceof Array?o:[o];for(var s=0,l=o.length;l>s;s++)r=o[s].id?o[s]:this.get(o[s]),r&&i.push(r)}}if(i.sort(t),e)for(var n=0,a=i.length;a>n;n++)i[n].updateTransform();return i},o.prototype.getShapeList=function(e){return e&&this.updateShapeList(),this._shapeList},o.prototype.updateShapeList=function(){this._shapeListOffset=0;for(var e=0,i=this._roots.length;i>e;e++){var n=this._roots[e];this._updateAndAddShape(n)}this._shapeList.length=this._shapeListOffset;for(var e=0,i=this._shapeList.length;i>e;e++)this._shapeList[e].__renderidx=e;this._shapeList.sort(t)},o.prototype._updateAndAddShape=function(e,t){if(!e.ignore)if(e.updateTransform(),e.clipShape&&(e.clipShape.parent=e,e.clipShape.updateTransform(),t?(t=t.slice(),t.push(e.clipShape)):t=[e.clipShape]),"group"==e.type){for(var i=0;i<e._children.length;i++){var n=e._children[i];n.__dirty=e.__dirty||n.__dirty,this._updateAndAddShape(n,t)}e.__dirty=!1}else e.__clipShapes=t,this._shapeList[this._shapeListOffset++]=e},o.prototype.mod=function(e,t){if("string"==typeof e&&(e=this._elements[e]),e&&(e.modSelf(),t))if(t.parent||t._storage||t.__clipShapes){var n={};for(var a in t)"parent"!==a&&"_storage"!==a&&"__clipShapes"!==a&&t.hasOwnProperty(a)&&(n[a]=t[a]);i.merge(e,n,!0)}else i.merge(e,t,!0);return this},o.prototype.drift=function(e,t,i){var n=this._elements[e];return n&&(n.needTransform=!0,"horizontal"===n.draggable?i=0:"vertical"===n.draggable&&(t=0),(!n.ondrift||n.ondrift&&!n.ondrift(t,i))&&n.drift(t,i)),this},o.prototype.addHover=function(e){return e.updateNeedTransform(),this._hoverElements.push(e),this},o.prototype.delHover=function(){return this._hoverElements=[],this},o.prototype.hasHoverShape=function(){return this._hoverElements.length>0},o.prototype.addRoot=function(e){this._elements[e.id]||(e instanceof n&&e.addChildrenToStorage(this),this.addToMap(e),this._roots.push(e))},o.prototype.delRoot=function(e){if("undefined"==typeof e){for(var t=0;t<this._roots.length;t++){var a=this._roots[t];a instanceof n&&a.delChildrenFromStorage(this)}return this._elements={},this._hoverElements=[],this._roots=[],this._shapeList=[],void(this._shapeListOffset=0)}if(e instanceof Array)for(var t=0,o=e.length;o>t;t++)this.delRoot(e[t]);else{var r;r="string"==typeof e?this._elements[e]:e;var s=i.indexOf(this._roots,r);s>=0&&(this.delFromMap(r.id),this._roots.splice(s,1),r instanceof n&&r.delChildrenFromStorage(this))}},o.prototype.addToMap=function(e){return e instanceof n&&(e._storage=this),e.modSelf(),this._elements[e.id]=e,this},o.prototype.get=function(e){return this._elements[e]},o.prototype.delFromMap=function(e){var t=this._elements[e];return t&&(delete this._elements[e],t instanceof n&&(t._storage=null)),this},o.prototype.dispose=function(){this._elements=this._renderList=this._roots=this._hoverElements=null},o}),i("zrender/animation/Animation",["require","./Clip","../tool/color","../tool/util","../tool/event"],function(e){"use strict";function t(e,t){return e[t]}function i(e,t,i){e[t]=i}function n(e,t,i){return(t-e)*i+e}function a(e,t,i,a,o){var r=e.length;if(1==o)for(var s=0;r>s;s++)a[s]=n(e[s],t[s],i);else for(var l=e[0].length,s=0;r>s;s++)for(var h=0;l>h;h++)a[s][h]=n(e[s][h],t[s][h],i)}function o(e){switch(typeof e){case"undefined":case"string":return!1}return"undefined"!=typeof e.length}function r(e,t,i,n,a,o,r,l,h){var m=e.length;if(1==h)for(var V=0;m>V;V++)l[V]=s(e[V],t[V],i[V],n[V],a,o,r);else for(var U=e[0].length,V=0;m>V;V++)for(var d=0;U>d;d++)l[V][d]=s(e[V][d],t[V][d],i[V][d],n[V][d],a,o,r)}function s(e,t,i,n,a,o,r){var s=.5*(i-e),l=.5*(n-t);return(2*(t-i)+s+l)*r+(-3*(t-i)-2*s-l)*o+s*a+t}function l(e){if(o(e)){var t=e.length;if(o(e[0])){for(var i=[],n=0;t>n;n++)i.push(c.call(e[n]));return i}return c.call(e)}return e}function h(e){return e[0]=Math.floor(e[0]),e[1]=Math.floor(e[1]),e[2]=Math.floor(e[2]),"rgba("+e.join(",")+")"}var m=e("./Clip"),V=e("../tool/color"),U=e("../tool/util"),d=e("../tool/event").Dispatcher,p=window.requestAnimationFrame||window.msRequestAnimationFrame||window.mozRequestAnimationFrame||window.webkitRequestAnimationFrame||function(e){setTimeout(e,16)},c=Array.prototype.slice,u=function(e){e=e||{},this.stage=e.stage||{},this.onframe=e.onframe||function(){},this._clips=[],this._running=!1,this._time=0,d.call(this)};u.prototype={add:function(e){this._clips.push(e)},remove:function(e){if(e.__inStep)e.__needsRemove=!0;else{var t=U.indexOf(this._clips,e);t>=0&&this._clips.splice(t,1)}},_update:function(){for(var e=(new Date).getTime(),t=e-this._time,i=this._clips,n=i.length,a=[],o=[],r=0;n>r;r++){var s=i[r];s.__inStep=!0;var l=s.step(e);s.__inStep=!1,l&&(a.push(l),o.push(s))}for(var r=0;n>r;)i[r].__needsRemove?(i[r]=i[n-1],i.pop(),n--):r++;n=a.length;for(var r=0;n>r;r++)o[r].fire(a[r]);this._time=e,this.onframe(t),this.dispatch("frame",t),this.stage.update&&this.stage.update()},start:function(){function e(){t._running&&(p(e),t._update())}var t=this;this._running=!0,this._time=(new Date).getTime(),p(e)},stop:function(){this._running=!1},clear:function(){this._clips=[]},animate:function(e,t){t=t||{};var i=new y(e,t.loop,t.getter,t.setter);return i.animation=this,i},constructor:u},U.merge(u.prototype,d.prototype,!0);var y=function(e,n,a,o){this._tracks={},this._target=e,this._loop=n||!1,this._getter=a||t,this._setter=o||i,this._clipCount=0,this._delay=0,this._doneList=[],this._onframeList=[],this._clipList=[]};return y.prototype={when:function(e,t){for(var i in t)this._tracks[i]||(this._tracks[i]=[],0!==e&&this._tracks[i].push({time:0,value:l(this._getter(this._target,i))})),this._tracks[i].push({time:parseInt(e,10),value:t[i]});return this},during:function(e){return this._onframeList.push(e),this},start:function(e){var t=this,i=this._setter,l=this._getter,U="spline"===e,d=function(){if(t._clipCount--,0===t._clipCount){t._tracks={};for(var e=t._doneList.length,i=0;e>i;i++)t._doneList[i].call(t)}},p=function(p,c){var u=p.length;if(u){var y=p[0].value,g=o(y),b=!1,f=g&&o(y[0])?2:1;p.sort(function(e,t){return e.time-t.time});var k;if(u){k=p[u-1].time;for(var x=[],_=[],L=0;u>L;L++){x.push(p[L].time/k);var W=p[L].value;"string"==typeof W&&(W=V.toArray(W),0===W.length&&(W[0]=W[1]=W[2]=0,W[3]=1),b=!0),_.push(W)}var X,L,v,w,K,I,J,C=0,S=0;if(b)var E=[0,0,0,0];var F=function(e,o){if(S>o){for(X=Math.min(C+1,u-1),L=X;L>=0&&!(x[L]<=o);L--);L=Math.min(L,u-2)}else{for(L=C;u>L&&!(x[L]>o);L++);L=Math.min(L-1,u-2)}C=L,S=o;var m=x[L+1]-x[L];if(0!==m){if(v=(o-x[L])/m,U)if(K=_[L],w=_[0===L?L:L-1],I=_[L>u-2?u-1:L+1],J=_[L>u-3?u-1:L+2],g)r(w,K,I,J,v,v*v,v*v*v,l(e,c),f);else{var V;b?(V=r(w,K,I,J,v,v*v,v*v*v,E,1),V=h(E)):V=s(w,K,I,J,v,v*v,v*v*v),i(e,c,V)}else if(g)a(_[L],_[L+1],v,l(e,c),f);else{var V;b?(a(_[L],_[L+1],v,E,1),V=h(E)):V=n(_[L],_[L+1],v),i(e,c,V)}for(L=0;L<t._onframeList.length;L++)t._onframeList[L](e,o)}},T=new m({target:t._target,life:k,loop:t._loop,delay:t._delay,onframe:F,ondestroy:d});e&&"spline"!==e&&(T.easing=e),t._clipList.push(T),t._clipCount++,t.animation.add(T)}}};for(var c in this._tracks)p(this._tracks[c],c);return this},stop:function(){for(var e=0;e<this._clipList.length;e++){var t=this._clipList[e];this.animation.remove(t)}this._clipList=[]},delay:function(e){return this._delay=e,this},done:function(e){return e&&this._doneList.push(e),this}},u}),i("zrender/tool/vector",[],function(){var e="undefined"==typeof Float32Array?Array:Float32Array,t={create:function(t,i){var n=new e(2);return n[0]=t||0,n[1]=i||0,n},copy:function(e,t){return e[0]=t[0],e[1]=t[1],e},clone:function(t){var i=new e(2);return i[0]=t[0],i[1]=t[1],i},set:function(e,t,i){return e[0]=t,e[1]=i,e},add:function(e,t,i){return e[0]=t[0]+i[0],e[1]=t[1]+i[1],e},scaleAndAdd:function(e,t,i,n){return e[0]=t[0]+i[0]*n,e[1]=t[1]+i[1]*n,e},sub:function(e,t,i){return e[0]=t[0]-i[0],e[1]=t[1]-i[1],e},len:function(e){return Math.sqrt(this.lenSquare(e))},lenSquare:function(e){return e[0]*e[0]+e[1]*e[1]},mul:function(e,t,i){return e[0]=t[0]*i[0],e[1]=t[1]*i[1],e},div:function(e,t,i){return e[0]=t[0]/i[0],e[1]=t[1]/i[1],e},dot:function(e,t){return e[0]*t[0]+e[1]*t[1]},scale:function(e,t,i){return e[0]=t[0]*i,e[1]=t[1]*i,e},normalize:function(e,i){var n=t.len(i);return 0===n?(e[0]=0,e[1]=0):(e[0]=i[0]/n,e[1]=i[1]/n),e},distance:function(e,t){return Math.sqrt((e[0]-t[0])*(e[0]-t[0])+(e[1]-t[1])*(e[1]-t[1]))},distanceSquare:function(e,t){return(e[0]-t[0])*(e[0]-t[0])+(e[1]-t[1])*(e[1]-t[1])},negate:function(e,t){return e[0]=-t[0],e[1]=-t[1],e},lerp:function(e,t,i,n){return e[0]=t[0]+n*(i[0]-t[0]),e[1]=t[1]+n*(i[1]-t[1]),e},applyTransform:function(e,t,i){var n=t[0],a=t[1];return e[0]=i[0]*n+i[2]*a+i[4],e[1]=i[1]*n+i[3]*a+i[5],e},min:function(e,t,i){return e[0]=Math.min(t[0],i[0]),e[1]=Math.min(t[1],i[1]),e},max:function(e,t,i){return e[0]=Math.max(t[0],i[0]),e[1]=Math.max(t[1],i[1]),e}};return t.length=t.len,t.lengthSquare=t.lenSquare,t.dist=t.distance,t.distSquare=t.distanceSquare,t}),i("zrender/tool/matrix",[],function(){var e="undefined"==typeof Float32Array?Array:Float32Array,t={create:function(){var i=new e(6);return t.identity(i),i},identity:function(e){return e[0]=1,e[1]=0,e[2]=0,e[3]=1,e[4]=0,e[5]=0,e},copy:function(e,t){return e[0]=t[0],e[1]=t[1],e[2]=t[2],e[3]=t[3],e[4]=t[4],e[5]=t[5],e},mul:function(e,t,i){return e[0]=t[0]*i[0]+t[2]*i[1],e[1]=t[1]*i[0]+t[3]*i[1],e[2]=t[0]*i[2]+t[2]*i[3],e[3]=t[1]*i[2]+t[3]*i[3],e[4]=t[0]*i[4]+t[2]*i[5]+t[4],e[5]=t[1]*i[4]+t[3]*i[5]+t[5],e},translate:function(e,t,i){return e[0]=t[0],e[1]=t[1],e[2]=t[2],e[3]=t[3],e[4]=t[4]+i[0],e[5]=t[5]+i[1],e},rotate:function(e,t,i){var n=t[0],a=t[2],o=t[4],r=t[1],s=t[3],l=t[5],h=Math.sin(i),m=Math.cos(i);return e[0]=n*m+r*h,e[1]=-n*h+r*m,e[2]=a*m+s*h,e[3]=-a*h+m*s,e[4]=m*o+h*l,e[5]=m*l-h*o,e},scale:function(e,t,i){var n=i[0],a=i[1];return e[0]=t[0]*n,e[1]=t[1]*a,e[2]=t[2]*n,e[3]=t[3]*a,e[4]=t[4]*n,e[5]=t[5]*a,e},invert:function(e,t){var i=t[0],n=t[2],a=t[4],o=t[1],r=t[3],s=t[5],l=i*r-o*n;return l?(l=1/l,e[0]=r*l,e[1]=-o*l,e[2]=-n*l,e[3]=i*l,e[4]=(n*s-r*a)*l,e[5]=(o*a-i*s)*l,e):null}};return t}),i("zrender/loadingEffect/Base",["require","../tool/util","../shape/Text","../shape/Rectangle"],function(e){function t(e){this.setOptions(e)}var i=e("../tool/util"),n=e("../shape/Text"),a=e("../shape/Rectangle"),o="Loading...",r="normal 16px Arial";return t.prototype.createTextShape=function(e){return new n({highlightStyle:i.merge({x:this.canvasWidth/2,y:this.canvasHeight/2,text:o,textAlign:"center",textBaseline:"middle",textFont:r,color:"#333",brushType:"fill"},e,!0)})},t.prototype.createBackgroundShape=function(e){return new a({highlightStyle:{x:0,y:0,width:this.canvasWidth,height:this.canvasHeight,brushType:"fill",color:e}})},t.prototype.start=function(e){function t(t){e.storage.addHover(t)}function i(){e.refreshHover()}this.canvasWidth=e._width,this.canvasHeight=e._height,this.loadingTimer=this._start(t,i)},t.prototype._start=function(){return setInterval(function(){},1e4)},t.prototype.stop=function(){clearInterval(this.loadingTimer)},t.prototype.setOptions=function(e){this.options=e||{}},t.prototype.adjust=function(e,t){return e<=t[0]?e=t[0]:e>=t[1]&&(e=t[1]),e},t.prototype.getLocation=function(e,t,i){var n=null!=e.x?e.x:"center";switch(n){case"center":n=Math.floor((this.canvasWidth-t)/2);break;case"left":n=0;break;case"right":n=this.canvasWidth-t}var a=null!=e.y?e.y:"center";switch(a){case"center":a=Math.floor((this.canvasHeight-i)/2);break;case"top":a=0;break;case"bottom":a=this.canvasHeight-i}return{x:n,y:a,width:t,height:i}},t}),i("zrender/Layer",["require","./mixin/Transformable","./tool/util","./config"],function(e){function t(){return!1}function i(e,t,i){var n=document.createElement(t),a=i.getWidth(),o=i.getHeight();return n.style.position="absolute",n.style.left=0,n.style.top=0,n.style.width=a+"px",n.style.height=o+"px",n.width=a*r.devicePixelRatio,n.height=o*r.devicePixelRatio,n.setAttribute("data-zr-dom-id",e),n}var n=e("./mixin/Transformable"),a=e("./tool/util"),o=window.G_vmlCanvasManager,r=e("./config"),s=function(e,a){this.id=e,this.dom=i(e,"canvas",a),this.dom.onselectstart=t,this.dom.style["-webkit-user-select"]="none",this.dom.style["user-select"]="none",this.dom.style["-webkit-touch-callout"]="none",this.dom.style["-webkit-tap-highlight-color"]="rgba(0,0,0,0)",this.dom.className=r.elementClassName,o&&o.initElement(this.dom),this.domBack=null,this.ctxBack=null,this.painter=a,this.unusedCount=0,this.config=null,this.dirty=!0,this.elCount=0,this.clearColor=0,this.motionBlur=!1,this.lastFrameAlpha=.7,this.zoomable=!1,this.panable=!1,this.maxZoom=1/0,this.minZoom=0,n.call(this)};return s.prototype.initContext=function(){this.ctx=this.dom.getContext("2d");var e=r.devicePixelRatio;1!=e&&this.ctx.scale(e,e)},s.prototype.createBackBuffer=function(){if(!o){this.domBack=i("back-"+this.id,"canvas",this.painter),this.ctxBack=this.domBack.getContext("2d");var e=r.devicePixelRatio;1!=e&&this.ctxBack.scale(e,e)}},s.prototype.resize=function(e,t){var i=r.devicePixelRatio;this.dom.style.width=e+"px",this.dom.style.height=t+"px",this.dom.setAttribute("width",e*i),this.dom.setAttribute("height",t*i),1!=i&&this.ctx.scale(i,i),this.domBack&&(this.domBack.setAttribute("width",e*i),this.domBack.setAttribute("height",t*i),1!=i&&this.ctxBack.scale(i,i))},s.prototype.clear=function(){var e=this.dom,t=this.ctx,i=e.width,n=e.height,a=this.clearColor&&!o,s=this.motionBlur&&!o,l=this.lastFrameAlpha,h=r.devicePixelRatio;if(s&&(this.domBack||this.createBackBuffer(),this.ctxBack.globalCompositeOperation="copy",this.ctxBack.drawImage(e,0,0,i/h,n/h)),t.clearRect(0,0,i/h,n/h),a&&(t.save(),t.fillStyle=this.clearColor,t.fillRect(0,0,i/h,n/h),t.restore()),s){var m=this.domBack;t.save(),t.globalAlpha=l,t.drawImage(m,0,0,i/h,n/h),t.restore()}},a.merge(s.prototype,n.prototype),s}),i("zrender/shape/Text",["require","../tool/area","./Base","../tool/util"],function(e){
+var t=e("../tool/area"),i=e("./Base"),n=function(e){i.call(this,e)};return n.prototype={type:"text",brush:function(e,i){var n=this.style;if(i&&(n=this.getHighlightStyle(n,this.highlightStyle||{})),"undefined"!=typeof n.text&&n.text!==!1){e.save(),this.doClip(e),this.setContext(e,n),this.setTransform(e),n.textFont&&(e.font=n.textFont),e.textAlign=n.textAlign||"start",e.textBaseline=n.textBaseline||"middle";var a,o=(n.text+"").split("\n"),r=t.getTextHeight("国",n.textFont),s=this.getRect(n),l=n.x;a="top"==n.textBaseline?s.y:"bottom"==n.textBaseline?s.y+r:s.y+r/2;for(var h=0,m=o.length;m>h;h++){if(n.maxWidth)switch(n.brushType){case"fill":e.fillText(o[h],l,a,n.maxWidth);break;case"stroke":e.strokeText(o[h],l,a,n.maxWidth);break;case"both":e.fillText(o[h],l,a,n.maxWidth),e.strokeText(o[h],l,a,n.maxWidth);break;default:e.fillText(o[h],l,a,n.maxWidth)}else switch(n.brushType){case"fill":e.fillText(o[h],l,a);break;case"stroke":e.strokeText(o[h],l,a);break;case"both":e.fillText(o[h],l,a),e.strokeText(o[h],l,a);break;default:e.fillText(o[h],l,a)}a+=r}e.restore()}},getRect:function(e){if(e.__rect)return e.__rect;var i=t.getTextWidth(e.text,e.textFont),n=t.getTextHeight(e.text,e.textFont),a=e.x;"end"==e.textAlign||"right"==e.textAlign?a-=i:"center"==e.textAlign&&(a-=i/2);var o;return o="top"==e.textBaseline?e.y:"bottom"==e.textBaseline?e.y-n:e.y-n/2,e.__rect={x:a,y:o,width:i,height:n},e.__rect}},e("../tool/util").inherits(n,i),n}),i("zrender/shape/Rectangle",["require","./Base","../tool/util"],function(e){var t=e("./Base"),i=function(e){t.call(this,e)};return i.prototype={type:"rectangle",_buildRadiusPath:function(e,t){var i,n,a,o,r=t.x,s=t.y,l=t.width,h=t.height,m=t.radius;"number"==typeof m?i=n=a=o=m:m instanceof Array?1===m.length?i=n=a=o=m[0]:2===m.length?(i=a=m[0],n=o=m[1]):3===m.length?(i=m[0],n=o=m[1],a=m[2]):(i=m[0],n=m[1],a=m[2],o=m[3]):i=n=a=o=0;var V;i+n>l&&(V=i+n,i*=l/V,n*=l/V),a+o>l&&(V=a+o,a*=l/V,o*=l/V),n+a>h&&(V=n+a,n*=h/V,a*=h/V),i+o>h&&(V=i+o,i*=h/V,o*=h/V),e.moveTo(r+i,s),e.lineTo(r+l-n,s),0!==n&&e.quadraticCurveTo(r+l,s,r+l,s+n),e.lineTo(r+l,s+h-a),0!==a&&e.quadraticCurveTo(r+l,s+h,r+l-a,s+h),e.lineTo(r+o,s+h),0!==o&&e.quadraticCurveTo(r,s+h,r,s+h-o),e.lineTo(r,s+i),0!==i&&e.quadraticCurveTo(r,s,r+i,s)},buildPath:function(e,t){t.radius?this._buildRadiusPath(e,t):(e.moveTo(t.x,t.y),e.lineTo(t.x+t.width,t.y),e.lineTo(t.x+t.width,t.y+t.height),e.lineTo(t.x,t.y+t.height),e.lineTo(t.x,t.y)),e.closePath()},getRect:function(e){if(e.__rect)return e.__rect;var t;return t="stroke"==e.brushType||"fill"==e.brushType?e.lineWidth||1:0,e.__rect={x:Math.round(e.x-t/2),y:Math.round(e.y-t/2),width:e.width+t,height:e.height+t},e.__rect}},e("../tool/util").inherits(i,t),i}),i("zrender/tool/area",["require","./util","./curve"],function(e){"use strict";function t(e){return e%=C,0>e&&(e+=C),e}function i(e,t,i,o){if(!t||!e)return!1;var r=e.type;L=L||W.getContext();var s=n(e,t,i,o);if("undefined"!=typeof s)return s;if(e.buildPath&&L.isPointInPath)return a(e,L,t,i,o);switch(r){case"ellipse":return!0;case"trochoid":var l="out"==t.location?t.r1+t.r2+t.d:t.r1-t.r2+t.d;return d(t,i,o,l);case"rose":return d(t,i,o,t.maxr);default:return!1}}function n(e,t,i,n){var a=e.type;switch(a){case"bezier-curve":return"undefined"==typeof t.cpX2?l(t.xStart,t.yStart,t.cpX1,t.cpY1,t.xEnd,t.yEnd,t.lineWidth,i,n):s(t.xStart,t.yStart,t.cpX1,t.cpY1,t.cpX2,t.cpY2,t.xEnd,t.yEnd,t.lineWidth,i,n);case"line":return r(t.xStart,t.yStart,t.xEnd,t.yEnd,t.lineWidth,i,n);case"polyline":return m(t.pointList,t.lineWidth,i,n);case"ring":return V(t.x,t.y,t.r0,t.r,i,n);case"circle":return d(t.x,t.y,t.r,i,n);case"sector":var o=t.startAngle*Math.PI/180,h=t.endAngle*Math.PI/180;return t.clockWise||(o=-o,h=-h),p(t.x,t.y,t.r0,t.r,o,h,!t.clockWise,i,n);case"path":return t.pathArray&&k(t.pathArray,Math.max(t.lineWidth,5),t.brushType,i,n);case"polygon":case"star":case"isogon":return c(t.pointList,i,n);case"text":var u=t.__rect||e.getRect(t);return U(u.x,u.y,u.width,u.height,i,n);case"rectangle":case"image":return U(t.x,t.y,t.width,t.height,i,n)}}function a(e,t,i,n,a){return t.beginPath(),e.buildPath(t,i),t.closePath(),t.isPointInPath(n,a)}function o(e,t,n,a){return!i(e,t,n,a)}function r(e,t,i,n,a,o,r){if(0===a)return!1;var s=Math.max(a,5),l=0,h=e;if(r>t+s&&r>n+s||t-s>r&&n-s>r||o>e+s&&o>i+s||e-s>o&&i-s>o)return!1;if(e===i)return Math.abs(o-e)<=s/2;l=(t-n)/(e-i),h=(e*n-i*t)/(e-i);var m=l*o-r+h,V=m*m/(l*l+1);return s/2*s/2>=V}function s(e,t,i,n,a,o,r,s,l,h,m){if(0===l)return!1;var V=Math.max(l,5);if(m>t+V&&m>n+V&&m>o+V&&m>s+V||t-V>m&&n-V>m&&o-V>m&&s-V>m||h>e+V&&h>i+V&&h>a+V&&h>r+V||e-V>h&&i-V>h&&a-V>h&&r-V>h)return!1;var U=X.cubicProjectPoint(e,t,i,n,a,o,r,s,h,m,null);return V/2>=U}function l(e,t,i,n,a,o,r,s,l){if(0===r)return!1;var h=Math.max(r,5);if(l>t+h&&l>n+h&&l>o+h||t-h>l&&n-h>l&&o-h>l||s>e+h&&s>i+h&&s>a+h||e-h>s&&i-h>s&&a-h>s)return!1;var m=X.quadraticProjectPoint(e,t,i,n,a,o,s,l,null);return h/2>=m}function h(e,i,n,a,o,r,s,l,h){if(0===s)return!1;var m=Math.max(s,5);l-=e,h-=i;var V=Math.sqrt(l*l+h*h);if(V-m>n||n>V+m)return!1;if(Math.abs(a-o)>=C)return!0;if(r){var U=a;a=t(o),o=t(U)}else a=t(a),o=t(o);a>o&&(o+=C);var d=Math.atan2(h,l);return 0>d&&(d+=C),d>=a&&o>=d||d+C>=a&&o>=d+C}function m(e,t,i,n){for(var t=Math.max(t,10),a=0,o=e.length-1;o>a;a++){var s=e[a][0],l=e[a][1],h=e[a+1][0],m=e[a+1][1];if(r(s,l,h,m,t,i,n))return!0}return!1}function V(e,t,i,n,a,o){var r=(a-e)*(a-e)+(o-t)*(o-t);return n*n>r&&r>i*i}function U(e,t,i,n,a,o){return a>=e&&e+i>=a&&o>=t&&t+n>=o}function d(e,t,i,n,a){return i*i>(n-e)*(n-e)+(a-t)*(a-t)}function p(e,t,i,n,a,o,r,s,l){return h(e,t,(i+n)/2,a,o,r,n-i,s,l)}function c(e,t,i){for(var n=e.length,a=0,o=0,r=n-1;n>o;o++){var s=e[r][0],l=e[r][1],h=e[o][0],m=e[o][1];a+=u(s,l,h,m,t,i),r=o}return 0!==a}function u(e,t,i,n,a,o){if(o>t&&o>n||t>o&&n>o)return 0;if(n==t)return 0;var r=t>n?1:-1,s=(o-t)/(n-t),l=s*(i-e)+e;return l>a?r:0}function y(){var e=E[0];E[0]=E[1],E[1]=e}function g(e,t,i,n,a,o,r,s,l,h){if(h>t&&h>n&&h>o&&h>s||t>h&&n>h&&o>h&&s>h)return 0;var m=X.cubicRootAt(t,n,o,s,h,S);if(0===m)return 0;for(var V,U,d=0,p=-1,c=0;m>c;c++){var u=S[c],g=X.cubicAt(e,i,a,r,u);l>g||(0>p&&(p=X.cubicExtrema(t,n,o,s,E),E[1]<E[0]&&p>1&&y(),V=X.cubicAt(t,n,o,s,E[0]),p>1&&(U=X.cubicAt(t,n,o,s,E[1]))),d+=2==p?u<E[0]?t>V?1:-1:u<E[1]?V>U?1:-1:U>s?1:-1:u<E[0]?t>V?1:-1:V>s?1:-1)}return d}function b(e,t,i,n,a,o,r,s){if(s>t&&s>n&&s>o||t>s&&n>s&&o>s)return 0;var l=X.quadraticRootAt(t,n,o,s,S);if(0===l)return 0;var h=X.quadraticExtremum(t,n,o);if(h>=0&&1>=h){for(var m=0,V=X.quadraticAt(t,n,o,h),U=0;l>U;U++){var d=X.quadraticAt(e,i,a,S[U]);r>d||(m+=S[U]<h?t>V?1:-1:V>o?1:-1)}return m}var d=X.quadraticAt(e,i,a,S[0]);return r>d?0:t>o?1:-1}function f(e,i,n,a,o,r,s,l){if(l-=i,l>n||-n>l)return 0;var h=Math.sqrt(n*n-l*l);if(S[0]=-h,S[1]=h,Math.abs(a-o)>=C){a=0,o=C;var m=r?1:-1;return s>=S[0]+e&&s<=S[1]+e?m:0}if(r){var h=a;a=t(o),o=t(h)}else a=t(a),o=t(o);a>o&&(o+=C);for(var V=0,U=0;2>U;U++){var d=S[U];if(d+e>s){var p=Math.atan2(l,d),m=r?1:-1;0>p&&(p=C+p),(p>=a&&o>=p||p+C>=a&&o>=p+C)&&(p>Math.PI/2&&p<1.5*Math.PI&&(m=-m),V+=m)}}return V}function k(e,t,i,n,a){var o=0,m=0,V=0,U=0,d=0,p=!0,c=!0;i=i||"fill";for(var y="stroke"===i||"both"===i,k="fill"===i||"both"===i,x=0;x<e.length;x++){var _=e[x],L=_.points;if(p||"M"===_.command){if(x>0&&(k&&(o+=u(m,V,U,d,n,a)),0!==o))return!0;U=L[L.length-2],d=L[L.length-1],p=!1,c&&"A"!==_.command&&(c=!1,m=U,V=d)}switch(_.command){case"M":m=L[0],V=L[1];break;case"L":if(y&&r(m,V,L[0],L[1],t,n,a))return!0;k&&(o+=u(m,V,L[0],L[1],n,a)),m=L[0],V=L[1];break;case"C":if(y&&s(m,V,L[0],L[1],L[2],L[3],L[4],L[5],t,n,a))return!0;k&&(o+=g(m,V,L[0],L[1],L[2],L[3],L[4],L[5],n,a)),m=L[4],V=L[5];break;case"Q":if(y&&l(m,V,L[0],L[1],L[2],L[3],t,n,a))return!0;k&&(o+=b(m,V,L[0],L[1],L[2],L[3],n,a)),m=L[2],V=L[3];break;case"A":var W=L[0],X=L[1],v=L[2],w=L[3],K=L[4],I=L[5],J=Math.cos(K)*v+W,C=Math.sin(K)*w+X;c?(c=!1,U=J,d=C):o+=u(m,V,J,C);var S=(n-W)*w/v+W;if(y&&h(W,X,w,K,K+I,1-L[7],t,S,a))return!0;k&&(o+=f(W,X,w,K,K+I,1-L[7],S,a)),m=Math.cos(K+I)*v+W,V=Math.sin(K+I)*w+X;break;case"z":if(y&&r(m,V,U,d,t,n,a))return!0;p=!0}}return k&&(o+=u(m,V,U,d,n,a)),0!==o}function x(e,t){var i=e+":"+t;if(v[i])return v[i];L=L||W.getContext(),L.save(),t&&(L.font=t),e=(e+"").split("\n");for(var n=0,a=0,o=e.length;o>a;a++)n=Math.max(L.measureText(e[a]).width,n);return L.restore(),v[i]=n,++K>J&&(K=0,v={}),n}function _(e,t){var i=e+":"+t;if(w[i])return w[i];L=L||W.getContext(),L.save(),t&&(L.font=t),e=(e+"").split("\n");var n=(L.measureText("国").width+2)*e.length;return L.restore(),w[i]=n,++I>J&&(I=0,w={}),n}var L,W=e("./util"),X=e("./curve"),v={},w={},K=0,I=0,J=5e3,C=2*Math.PI,S=[-1,-1,-1],E=[-1,-1];return{isInside:i,isOutside:o,getTextWidth:x,getTextHeight:_,isInsidePath:k,isInsidePolygon:c,isInsideSector:p,isInsideCircle:d,isInsideLine:r,isInsideRect:U,isInsidePolyline:m,isInsideCubicStroke:s,isInsideQuadraticStroke:l}}),i("zrender/shape/Base",["require","../tool/matrix","../tool/guid","../tool/util","../tool/log","../mixin/Transformable","../mixin/Eventful","../tool/area","../tool/color"],function(e){function t(t,n,a,o,r,s,l){r&&(t.font=r),t.textAlign=s,t.textBaseline=l;var h=i(n,a,o,r,s,l);n=(n+"").split("\n");var m=e("../tool/area").getTextHeight("国",r);switch(l){case"top":o=h.y;break;case"bottom":o=h.y+m;break;default:o=h.y+m/2}for(var V=0,U=n.length;U>V;V++)t.fillText(n[V],a,o),o+=m}function i(t,i,n,a,o,r){var s=e("../tool/area"),l=s.getTextWidth(t,a),h=s.getTextHeight("国",a);switch(t=(t+"").split("\n"),o){case"end":case"right":i-=l;break;case"center":i-=l/2}switch(r){case"top":break;case"bottom":n-=h*t.length;break;default:n-=h*t.length/2}return{x:i,y:n,width:l,height:h*t.length}}var n=window.G_vmlCanvasManager,a=e("../tool/matrix"),o=e("../tool/guid"),r=e("../tool/util"),s=e("../tool/log"),l=e("../mixin/Transformable"),h=e("../mixin/Eventful"),m=function(e){e=e||{},this.id=e.id||o();for(var t in e)this[t]=e[t];this.style=this.style||{},this.highlightStyle=this.highlightStyle||null,this.parent=null,this.__dirty=!0,this.__clipShapes=[],l.call(this),h.call(this)};m.prototype.invisible=!1,m.prototype.ignore=!1,m.prototype.zlevel=0,m.prototype.draggable=!1,m.prototype.clickable=!1,m.prototype.hoverable=!0,m.prototype.z=0,m.prototype.brush=function(e,t){var i=this.beforeBrush(e,t);switch(e.beginPath(),this.buildPath(e,i),i.brushType){case"both":e.fill();case"stroke":i.lineWidth>0&&e.stroke();break;default:e.fill()}this.drawText(e,i,this.style),this.afterBrush(e)},m.prototype.beforeBrush=function(e,t){var i=this.style;return this.brushTypeOnly&&(i.brushType=this.brushTypeOnly),t&&(i=this.getHighlightStyle(i,this.highlightStyle||{},this.brushTypeOnly)),"stroke"==this.brushTypeOnly&&(i.strokeColor=i.strokeColor||i.color),e.save(),this.doClip(e),this.setContext(e,i),this.setTransform(e),i},m.prototype.afterBrush=function(e){e.restore()};var V=[["color","fillStyle"],["strokeColor","strokeStyle"],["opacity","globalAlpha"],["lineCap","lineCap"],["lineJoin","lineJoin"],["miterLimit","miterLimit"],["lineWidth","lineWidth"],["shadowBlur","shadowBlur"],["shadowColor","shadowColor"],["shadowOffsetX","shadowOffsetX"],["shadowOffsetY","shadowOffsetY"]];m.prototype.setContext=function(e,t){for(var i=0,n=V.length;n>i;i++){var a=V[i][0],o=t[a],r=V[i][1];"undefined"!=typeof o&&(e[r]=o)}};var U=a.create();return m.prototype.doClip=function(e){if(this.__clipShapes&&!n)for(var t=0;t<this.__clipShapes.length;t++){var i=this.__clipShapes[t];if(i.needTransform){var o=i.transform;a.invert(U,o),e.transform(o[0],o[1],o[2],o[3],o[4],o[5])}if(e.beginPath(),i.buildPath(e,i.style),e.clip(),i.needTransform){var o=U;e.transform(o[0],o[1],o[2],o[3],o[4],o[5])}}},m.prototype.getHighlightStyle=function(t,i,n){var a={};for(var o in t)a[o]=t[o];var r=e("../tool/color"),s=r.getHighlightColor();"stroke"!=t.brushType?(a.strokeColor=s,a.lineWidth=(t.lineWidth||1)+this.getHighlightZoom(),a.brushType="both"):"stroke"!=n?(a.strokeColor=s,a.lineWidth=(t.lineWidth||1)+this.getHighlightZoom()):a.strokeColor=i.strokeColor||r.mix(t.strokeColor,r.toRGB(s));for(var o in i)"undefined"!=typeof i[o]&&(a[o]=i[o]);return a},m.prototype.getHighlightZoom=function(){return"text"!=this.type?6:2},m.prototype.drift=function(e,t){this.position[0]+=e,this.position[1]+=t},m.prototype.buildPath=function(){s("buildPath not implemented in "+this.type)},m.prototype.getRect=function(){s("getRect not implemented in "+this.type)},m.prototype.isCover=function(t,i){var n=this.transformCoordToLocal(t,i);return t=n[0],i=n[1],this.isCoverRect(t,i)?e("../tool/area").isInside(this,this.style,t,i):!1},m.prototype.isCoverRect=function(e,t){var i=this.style.__rect;return i||(i=this.style.__rect=this.getRect(this.style)),e>=i.x&&e<=i.x+i.width&&t>=i.y&&t<=i.y+i.height},m.prototype.drawText=function(e,i,n){if("undefined"!=typeof i.text&&i.text!==!1){var a=i.textColor||i.color||i.strokeColor;e.fillStyle=a;var o,r,s,l,h=10,m=i.textPosition||this.textPosition||"top";switch(m){case"inside":case"top":case"bottom":case"left":case"right":if(this.getRect){var V=(n||i).__rect||this.getRect(n||i);switch(m){case"inside":s=V.x+V.width/2,l=V.y+V.height/2,o="center",r="middle","stroke"!=i.brushType&&a==i.color&&(e.fillStyle="#fff");break;case"left":s=V.x-h,l=V.y+V.height/2,o="end",r="middle";break;case"right":s=V.x+V.width+h,l=V.y+V.height/2,o="start",r="middle";break;case"top":s=V.x+V.width/2,l=V.y-h,o="center",r="bottom";break;case"bottom":s=V.x+V.width/2,l=V.y+V.height+h,o="center",r="top"}}break;case"start":case"end":var U=i.pointList||[[i.xStart||0,i.yStart||0],[i.xEnd||0,i.yEnd||0]],d=U.length;if(2>d)return;var p,c,u,y;switch(m){case"start":p=U[1][0],c=U[0][0],u=U[1][1],y=U[0][1];break;case"end":p=U[d-2][0],c=U[d-1][0],u=U[d-2][1],y=U[d-1][1]}s=c,l=y;var g=Math.atan((u-y)/(c-p))/Math.PI*180;0>c-p?g+=180:0>u-y&&(g+=360),h=5,g>=30&&150>=g?(o="center",r="bottom",l-=h):g>150&&210>g?(o="right",r="middle",s-=h):g>=210&&330>=g?(o="center",r="top",l+=h):(o="left",r="middle",s+=h);break;case"specific":s=i.textX||0,l=i.textY||0,o="start",r="middle"}null!=s&&null!=l&&t(e,i.text,s,l,i.textFont,i.textAlign||o,i.textBaseline||r)}},m.prototype.modSelf=function(){this.__dirty=!0,this.style&&(this.style.__rect=null),this.highlightStyle&&(this.highlightStyle.__rect=null)},m.prototype.isSilent=function(){return!(this.hoverable||this.draggable||this.clickable||this.onmousemove||this.onmouseover||this.onmouseout||this.onmousedown||this.onmouseup||this.onclick||this.ondragenter||this.ondragover||this.ondragleave||this.ondrop)},r.merge(m.prototype,l.prototype,!0),r.merge(m.prototype,h.prototype,!0),m}),i("zrender/tool/curve",["require","./vector"],function(e){function t(e){return e>-u&&u>e}function i(e){return e>u||-u>e}function n(e,t,i,n,a){var o=1-a;return o*o*(o*e+3*a*t)+a*a*(a*n+3*o*i)}function a(e,t,i,n,a){var o=1-a;return 3*(((t-e)*o+2*(i-t)*a)*o+(n-i)*a*a)}function o(e,i,n,a,o,r){var s=a+3*(i-n)-e,l=3*(n-2*i+e),h=3*(i-e),m=e-o,V=l*l-3*s*h,U=l*h-9*s*m,d=h*h-3*l*m,p=0;if(t(V)&&t(U))if(t(l))r[0]=0;else{var c=-h/l;c>=0&&1>=c&&(r[p++]=c)}else{var u=U*U-4*V*d;if(t(u)){var b=U/V,c=-l/s+b,f=-b/2;c>=0&&1>=c&&(r[p++]=c),f>=0&&1>=f&&(r[p++]=f)}else if(u>0){var k=Math.sqrt(u),x=V*l+1.5*s*(-U+k),_=V*l+1.5*s*(-U-k);x=0>x?-Math.pow(-x,g):Math.pow(x,g),_=0>_?-Math.pow(-_,g):Math.pow(_,g);var c=(-l-(x+_))/(3*s);c>=0&&1>=c&&(r[p++]=c)}else{var L=(2*V*l-3*s*U)/(2*Math.sqrt(V*V*V)),W=Math.acos(L)/3,X=Math.sqrt(V),v=Math.cos(W),c=(-l-2*X*v)/(3*s),f=(-l+X*(v+y*Math.sin(W)))/(3*s),w=(-l+X*(v-y*Math.sin(W)))/(3*s);c>=0&&1>=c&&(r[p++]=c),f>=0&&1>=f&&(r[p++]=f),w>=0&&1>=w&&(r[p++]=w)}}return p}function r(e,n,a,o,r){var s=6*a-12*n+6*e,l=9*n+3*o-3*e-9*a,h=3*n-3*e,m=0;if(t(l)){if(i(s)){var V=-h/s;V>=0&&1>=V&&(r[m++]=V)}}else{var U=s*s-4*l*h;if(t(U))r[0]=-s/(2*l);else if(U>0){var d=Math.sqrt(U),V=(-s+d)/(2*l),p=(-s-d)/(2*l);V>=0&&1>=V&&(r[m++]=V),p>=0&&1>=p&&(r[m++]=p)}}return m}function s(e,t,i,n,a,o){var r=(t-e)*a+e,s=(i-t)*a+t,l=(n-i)*a+i,h=(s-r)*a+r,m=(l-s)*a+s,V=(m-h)*a+h;o[0]=e,o[1]=r,o[2]=h,o[3]=V,o[4]=V,o[5]=m,o[6]=l,o[7]=n}function l(e,t,i,a,o,r,s,l,h,m,V){var U,d=.005,p=1/0;b[0]=h,b[1]=m;for(var y=0;1>y;y+=.05){f[0]=n(e,i,o,s,y),f[1]=n(t,a,r,l,y);var g=c.distSquare(b,f);p>g&&(U=y,p=g)}p=1/0;for(var x=0;32>x&&!(u>d);x++){var _=U-d,L=U+d;f[0]=n(e,i,o,s,_),f[1]=n(t,a,r,l,_);var g=c.distSquare(f,b);if(_>=0&&p>g)U=_,p=g;else{k[0]=n(e,i,o,s,L),k[1]=n(t,a,r,l,L);var W=c.distSquare(k,b);1>=L&&p>W?(U=L,p=W):d*=.5}}return V&&(V[0]=n(e,i,o,s,U),V[1]=n(t,a,r,l,U)),Math.sqrt(p)}function h(e,t,i,n){var a=1-n;return a*(a*e+2*n*t)+n*n*i}function m(e,t,i,n){return 2*((1-n)*(t-e)+n*(i-t))}function V(e,n,a,o,r){var s=e-2*n+a,l=2*(n-e),h=e-o,m=0;if(t(s)){if(i(l)){var V=-h/l;V>=0&&1>=V&&(r[m++]=V)}}else{var U=l*l-4*s*h;if(t(U)){var V=-l/(2*s);V>=0&&1>=V&&(r[m++]=V)}else if(U>0){var d=Math.sqrt(U),V=(-l+d)/(2*s),p=(-l-d)/(2*s);V>=0&&1>=V&&(r[m++]=V),p>=0&&1>=p&&(r[m++]=p)}}return m}function U(e,t,i){var n=e+i-2*t;return 0===n?.5:(e-t)/n}function d(e,t,i,n,a){var o=(t-e)*n+e,r=(i-t)*n+t,s=(r-o)*n+o;a[0]=e,a[1]=o,a[2]=s,a[3]=s,a[4]=r,a[5]=i}function p(e,t,i,n,a,o,r,s,l){var m,V=.005,U=1/0;b[0]=r,b[1]=s;for(var d=0;1>d;d+=.05){f[0]=h(e,i,a,d),f[1]=h(t,n,o,d);var p=c.distSquare(b,f);U>p&&(m=d,U=p)}U=1/0;for(var y=0;32>y&&!(u>V);y++){var g=m-V,x=m+V;f[0]=h(e,i,a,g),f[1]=h(t,n,o,g);var p=c.distSquare(f,b);if(g>=0&&U>p)m=g,U=p;else{k[0]=h(e,i,a,x),k[1]=h(t,n,o,x);var _=c.distSquare(k,b);1>=x&&U>_?(m=x,U=_):V*=.5}}return l&&(l[0]=h(e,i,a,m),l[1]=h(t,n,o,m)),Math.sqrt(U)}var c=e("./vector"),u=1e-4,y=Math.sqrt(3),g=1/3,b=c.create(),f=c.create(),k=c.create();return{cubicAt:n,cubicDerivativeAt:a,cubicRootAt:o,cubicExtrema:r,cubicSubdivide:s,cubicProjectPoint:l,quadraticAt:h,quadraticDerivativeAt:m,quadraticRootAt:V,quadraticExtremum:U,quadraticSubdivide:d,quadraticProjectPoint:p}}),i("zrender/mixin/Transformable",["require","../tool/matrix","../tool/vector"],function(e){"use strict";function t(e){return e>-s&&s>e}function i(e){return e>s||-s>e}var n=e("../tool/matrix"),a=e("../tool/vector"),o=[0,0],r=n.translate,s=5e-5,l=function(){this.position||(this.position=[0,0]),"undefined"==typeof this.rotation&&(this.rotation=[0,0,0]),this.scale||(this.scale=[1,1,0,0]),this.needLocalTransform=!1,this.needTransform=!1};return l.prototype={constructor:l,updateNeedTransform:function(){this.needLocalTransform=i(this.rotation[0])||i(this.position[0])||i(this.position[1])||i(this.scale[0]-1)||i(this.scale[1]-1)},updateTransform:function(){this.updateNeedTransform();var e=this.parent&&this.parent.needTransform;if(this.needTransform=this.needLocalTransform||e,this.needTransform){var t=this.transform||n.create();if(n.identity(t),this.needLocalTransform){var a=this.scale;if(i(a[0])||i(a[1])){o[0]=-a[2]||0,o[1]=-a[3]||0;var s=i(o[0])||i(o[1]);s&&r(t,t,o),n.scale(t,t,a),s&&(o[0]=-o[0],o[1]=-o[1],r(t,t,o))}if(this.rotation instanceof Array){if(0!==this.rotation[0]){o[0]=-this.rotation[1]||0,o[1]=-this.rotation[2]||0;var s=i(o[0])||i(o[1]);s&&r(t,t,o),n.rotate(t,t,this.rotation[0]),s&&(o[0]=-o[0],o[1]=-o[1],r(t,t,o))}}else 0!==this.rotation&&n.rotate(t,t,this.rotation);(i(this.position[0])||i(this.position[1]))&&r(t,t,this.position)}e&&(this.needLocalTransform?n.mul(t,this.parent.transform,t):n.copy(t,this.parent.transform)),this.transform=t,this.invTransform=this.invTransform||n.create(),n.invert(this.invTransform,t)}},setTransform:function(e){if(this.needTransform){var t=this.transform;e.transform(t[0],t[1],t[2],t[3],t[4],t[5])}},lookAt:function(){var e=a.create();return function(i){this.transform||(this.transform=n.create());var o=this.transform;if(a.sub(e,i,this.position),!t(e[0])||!t(e[1])){a.normalize(e,e);var r=this.scale;o[2]=e[0]*r[1],o[3]=e[1]*r[1],o[0]=e[1]*r[0],o[1]=-e[0]*r[0],o[4]=this.position[0],o[5]=this.position[1],this.decomposeTransform()}}}(),decomposeTransform:function(){if(this.transform){var e=this.transform,t=e[0]*e[0]+e[1]*e[1],n=this.position,a=this.scale,o=this.rotation;i(t-1)&&(t=Math.sqrt(t));var r=e[2]*e[2]+e[3]*e[3];i(r-1)&&(r=Math.sqrt(r)),n[0]=e[4],n[1]=e[5],a[0]=t,a[1]=r,a[2]=a[3]=0,o[0]=Math.atan2(-e[1]/r,e[0]/t),o[1]=o[2]=0}},transformCoordToLocal:function(e,t){var i=[e,t];return this.needTransform&&this.invTransform&&a.applyTransform(i,i,this.invTransform),i}},l}),i("zrender/Group",["require","./tool/guid","./tool/util","./mixin/Transformable","./mixin/Eventful"],function(e){var t=e("./tool/guid"),i=e("./tool/util"),n=e("./mixin/Transformable"),a=e("./mixin/Eventful"),o=function(e){e=e||{},this.id=e.id||t();for(var i in e)this[i]=e[i];this.type="group",this.clipShape=null,this._children=[],this._storage=null,this.__dirty=!0,n.call(this),a.call(this)};return o.prototype.ignore=!1,o.prototype.children=function(){return this._children.slice()},o.prototype.childAt=function(e){return this._children[e]},o.prototype.addChild=function(e){e!=this&&e.parent!=this&&(e.parent&&e.parent.removeChild(e),this._children.push(e),e.parent=this,this._storage&&this._storage!==e._storage&&(this._storage.addToMap(e),e instanceof o&&e.addChildrenToStorage(this._storage)))},o.prototype.removeChild=function(e){var t=i.indexOf(this._children,e);t>=0&&this._children.splice(t,1),e.parent=null,this._storage&&(this._storage.delFromMap(e.id),e instanceof o&&e.delChildrenFromStorage(this._storage))},o.prototype.clearChildren=function(){for(var e=0;e<this._children.length;e++){var t=this._children[e];this._storage&&(this._storage.delFromMap(t.id),t instanceof o&&t.delChildrenFromStorage(this._storage))}this._children.length=0},o.prototype.eachChild=function(e,t){for(var i=!!t,n=0;n<this._children.length;n++){var a=this._children[n];i?e.call(t,a):e(a)}},o.prototype.traverse=function(e,t){for(var i=!!t,n=0;n<this._children.length;n++){var a=this._children[n];i?e.call(t,a):e(a),"group"===a.type&&a.traverse(e,t)}},o.prototype.addChildrenToStorage=function(e){for(var t=0;t<this._children.length;t++){var i=this._children[t];e.addToMap(i),i instanceof o&&i.addChildrenToStorage(e)}},o.prototype.delChildrenFromStorage=function(e){for(var t=0;t<this._children.length;t++){var i=this._children[t];e.delFromMap(i.id),i instanceof o&&i.delChildrenFromStorage(e)}},o.prototype.modSelf=function(){this.__dirty=!0},i.merge(o.prototype,n.prototype,!0),i.merge(o.prototype,a.prototype,!0),o}),i("zrender/animation/Clip",["require","./easing"],function(e){function t(e){this._targetPool=e.target||{},this._targetPool instanceof Array||(this._targetPool=[this._targetPool]),this._life=e.life||1e3,this._delay=e.delay||0,this._startTime=(new Date).getTime()+this._delay,this._endTime=this._startTime+1e3*this._life,this.loop="undefined"==typeof e.loop?!1:e.loop,this.gap=e.gap||0,this.easing=e.easing||"Linear",this.onframe=e.onframe,this.ondestroy=e.ondestroy,this.onrestart=e.onrestart}var i=e("./easing");return t.prototype={step:function(e){var t=(e-this._startTime)/this._life;if(!(0>t)){t=Math.min(t,1);var n="string"==typeof this.easing?i[this.easing]:this.easing,a="function"==typeof n?n(t):t;return this.fire("frame",a),1==t?this.loop?(this.restart(),"restart"):(this.__needsRemove=!0,"destroy"):null}},restart:function(){var e=(new Date).getTime(),t=(e-this._startTime)%this._life;this._startTime=(new Date).getTime()-t+this.gap,this.__needsRemove=!1},fire:function(e,t){for(var i=0,n=this._targetPool.length;n>i;i++)this["on"+e]&&this["on"+e](this._targetPool[i],t)},constructor:t},t}),i("zrender/animation/easing",[],function(){var e={Linear:function(e){return e},QuadraticIn:function(e){return e*e},QuadraticOut:function(e){return e*(2-e)},QuadraticInOut:function(e){return(e*=2)<1?.5*e*e:-.5*(--e*(e-2)-1)},CubicIn:function(e){return e*e*e},CubicOut:function(e){return--e*e*e+1},CubicInOut:function(e){return(e*=2)<1?.5*e*e*e:.5*((e-=2)*e*e+2)},QuarticIn:function(e){return e*e*e*e},QuarticOut:function(e){return 1- --e*e*e*e},QuarticInOut:function(e){return(e*=2)<1?.5*e*e*e*e:-.5*((e-=2)*e*e*e-2)},QuinticIn:function(e){return e*e*e*e*e},QuinticOut:function(e){return--e*e*e*e*e+1},QuinticInOut:function(e){return(e*=2)<1?.5*e*e*e*e*e:.5*((e-=2)*e*e*e*e+2)},SinusoidalIn:function(e){return 1-Math.cos(e*Math.PI/2)},SinusoidalOut:function(e){return Math.sin(e*Math.PI/2)},SinusoidalInOut:function(e){return.5*(1-Math.cos(Math.PI*e))},ExponentialIn:function(e){return 0===e?0:Math.pow(1024,e-1)},ExponentialOut:function(e){return 1===e?1:1-Math.pow(2,-10*e)},ExponentialInOut:function(e){return 0===e?0:1===e?1:(e*=2)<1?.5*Math.pow(1024,e-1):.5*(-Math.pow(2,-10*(e-1))+2)},CircularIn:function(e){return 1-Math.sqrt(1-e*e)},CircularOut:function(e){return Math.sqrt(1- --e*e)},CircularInOut:function(e){return(e*=2)<1?-.5*(Math.sqrt(1-e*e)-1):.5*(Math.sqrt(1-(e-=2)*e)+1)},ElasticIn:function(e){var t,i=.1,n=.4;return 0===e?0:1===e?1:(!i||1>i?(i=1,t=n/4):t=n*Math.asin(1/i)/(2*Math.PI),-(i*Math.pow(2,10*(e-=1))*Math.sin(2*(e-t)*Math.PI/n)))},ElasticOut:function(e){var t,i=.1,n=.4;return 0===e?0:1===e?1:(!i||1>i?(i=1,t=n/4):t=n*Math.asin(1/i)/(2*Math.PI),i*Math.pow(2,-10*e)*Math.sin(2*(e-t)*Math.PI/n)+1)},ElasticInOut:function(e){var t,i=.1,n=.4;return 0===e?0:1===e?1:(!i||1>i?(i=1,t=n/4):t=n*Math.asin(1/i)/(2*Math.PI),(e*=2)<1?-.5*i*Math.pow(2,10*(e-=1))*Math.sin(2*(e-t)*Math.PI/n):i*Math.pow(2,-10*(e-=1))*Math.sin(2*(e-t)*Math.PI/n)*.5+1)},BackIn:function(e){var t=1.70158;return e*e*((t+1)*e-t)},BackOut:function(e){var t=1.70158;return--e*e*((t+1)*e+t)+1},BackInOut:function(e){var t=2.5949095;return(e*=2)<1?.5*e*e*((t+1)*e-t):.5*((e-=2)*e*((t+1)*e+t)+2)},BounceIn:function(t){return 1-e.BounceOut(1-t)},BounceOut:function(e){return 1/2.75>e?7.5625*e*e:2/2.75>e?7.5625*(e-=1.5/2.75)*e+.75:2.5/2.75>e?7.5625*(e-=2.25/2.75)*e+.9375:7.5625*(e-=2.625/2.75)*e+.984375},BounceInOut:function(t){return.5>t?.5*e.BounceIn(2*t):.5*e.BounceOut(2*t-1)+.5}};return e}),i("echarts/chart/base",["require","zrender/shape/Image","../util/shape/Icon","../util/shape/MarkLine","../util/shape/Symbol","zrender/shape/Polyline","zrender/shape/ShapeBundle","../config","../util/ecData","../util/ecAnimation","../util/ecEffect","../util/accMath","../component/base","../layout/EdgeBundling","zrender/tool/util","zrender/tool/area"],function(e){function t(e){return null!=e.x&&null!=e.y}function i(e,t,i,n,a){p.call(this,e,t,i,n,a);var o=this;this.selectedMap={},this.lastShapeList=[],this.shapeHandler={onclick:function(){o.isClick=!0},ondragover:function(e){var t=e.target;t.highlightStyle=t.highlightStyle||{};var i=t.highlightStyle,n=i.brushTyep,a=i.strokeColor,r=i.lineWidth;i.brushType="stroke",i.strokeColor=o.ecTheme.calculableColor||h.calculableColor,i.lineWidth="icon"===t.type?30:10,o.zr.addHoverShape(t),setTimeout(function(){i&&(i.brushType=n,i.strokeColor=a,i.lineWidth=r)},20)},ondrop:function(e){null!=m.get(e.dragged,"data")&&(o.isDrop=!0)},ondragend:function(){o.isDragend=!0}}}var n=e("zrender/shape/Image"),a=e("../util/shape/Icon"),o=e("../util/shape/MarkLine"),r=e("../util/shape/Symbol"),s=e("zrender/shape/Polyline"),l=e("zrender/shape/ShapeBundle"),h=e("../config"),m=e("../util/ecData"),V=e("../util/ecAnimation"),U=e("../util/ecEffect"),d=e("../util/accMath"),p=e("../component/base"),c=e("../layout/EdgeBundling"),u=e("zrender/tool/util"),y=e("zrender/tool/area");return i.prototype={setCalculable:function(e){return e.dragEnableTime=this.ecTheme.DRAG_ENABLE_TIME||h.DRAG_ENABLE_TIME,e.ondragover=this.shapeHandler.ondragover,e.ondragend=this.shapeHandler.ondragend,e.ondrop=this.shapeHandler.ondrop,e},ondrop:function(e,t){if(this.isDrop&&e.target&&!t.dragIn){var i,n=e.target,a=e.dragged,o=m.get(n,"seriesIndex"),r=m.get(n,"dataIndex"),s=this.series,l=this.component.legend;if(-1===r){if(m.get(a,"seriesIndex")==o)return t.dragOut=t.dragIn=t.needRefresh=!0,void(this.isDrop=!1);i={value:m.get(a,"value"),name:m.get(a,"name")},this.type===h.CHART_TYPE_PIE&&i.value<0&&(i.value=0);for(var V=!1,U=s[o].data,p=0,c=U.length;c>p;p++)U[p].name===i.name&&"-"===U[p].value&&(s[o].data[p].value=i.value,V=!0);!V&&s[o].data.push(i),l&&l.add(i.name,a.style.color||a.style.strokeColor)}else i=s[o].data[r]||"-",null!=i.value?(s[o].data[r].value="-"!=i.value?d.accAdd(s[o].data[r].value,m.get(a,"value")):m.get(a,"value"),(this.type===h.CHART_TYPE_FUNNEL||this.type===h.CHART_TYPE_PIE)&&(l&&1===l.getRelatedAmount(i.name)&&this.component.legend.del(i.name),i.name+=this.option.nameConnector+m.get(a,"name"),l&&l.add(i.name,a.style.color||a.style.strokeColor))):s[o].data[r]="-"!=i?d.accAdd(s[o].data[r],m.get(a,"value")):m.get(a,"value");t.dragIn=t.dragIn||!0,this.isDrop=!1;var u=this;setTimeout(function(){u.zr.trigger("mousemove",e.event)},300)}},ondragend:function(e,t){if(this.isDragend&&e.target&&!t.dragOut){var i=e.target,n=m.get(i,"seriesIndex"),a=m.get(i,"dataIndex"),o=this.series;if(null!=o[n].data[a].value){o[n].data[a].value="-";var r=o[n].data[a].name,s=this.component.legend;s&&0===s.getRelatedAmount(r)&&s.del(r)}else o[n].data[a]="-";t.dragOut=!0,t.needRefresh=!0,this.isDragend=!1}},onlegendSelected:function(e,t){var i=e.selected;for(var n in this.selectedMap)this.selectedMap[n]!=i[n]&&(t.needRefresh=!0),this.selectedMap[n]=i[n]},_buildPosition:function(){this._symbol=this.option.symbolList,this._sIndex2ShapeMap={},this._sIndex2ColorMap={},this.selectedMap={},this.xMarkMap={};for(var e,t,i,n,a=this.series,o={top:[],bottom:[],left:[],right:[],other:[]},r=0,s=a.length;s>r;r++)a[r].type===this.type&&(a[r]=this.reformOption(a[r]),this.legendHoverLink=a[r].legendHoverLink||this.legendHoverLink,e=a[r].xAxisIndex,t=a[r].yAxisIndex,i=this.component.xAxis.getAxis(e),n=this.component.yAxis.getAxis(t),i.type===h.COMPONENT_TYPE_AXIS_CATEGORY?o[i.getPosition()].push(r):n.type===h.COMPONENT_TYPE_AXIS_CATEGORY?o[n.getPosition()].push(r):o.other.push(r));for(var l in o)o[l].length>0&&this._buildSinglePosition(l,o[l]);this.addShapeList()},_buildSinglePosition:function(e,t){var i=this._mapData(t),n=i.locationMap,a=i.maxDataLength;if(0!==a&&0!==n.length){switch(e){case"bottom":case"top":this._buildHorizontal(t,a,n,this.xMarkMap);break;case"left":case"right":this._buildVertical(t,a,n,this.xMarkMap);break;case"other":this._buildOther(t,a,n,this.xMarkMap)}for(var o=0,r=t.length;r>o;o++)this.buildMark(t[o])}},_mapData:function(e){for(var t,i,n,a,o=this.series,r=0,s={},l="__kener__stack__",m=this.component.legend,V=[],U=0,d=0,p=e.length;p>d;d++){if(t=o[e[d]],n=t.name,this._sIndex2ShapeMap[e[d]]=this._sIndex2ShapeMap[e[d]]||this.query(t,"symbol")||this._symbol[d%this._symbol.length],m){if(this.selectedMap[n]=m.isSelected(n),this._sIndex2ColorMap[e[d]]=m.getColor(n),a=m.getItemShape(n)){var c=a.style;if(this.type==h.CHART_TYPE_LINE)c.iconType="legendLineIcon",c.symbol=this._sIndex2ShapeMap[e[d]];else if(t.itemStyle.normal.barBorderWidth>0){var u=a.highlightStyle;c.brushType="both",c.x+=1,c.y+=1,c.width-=2,c.height-=2,c.strokeColor=u.strokeColor=t.itemStyle.normal.barBorderColor,u.lineWidth=3}m.setItemShape(n,a)}}else this.selectedMap[n]=!0,this._sIndex2ColorMap[e[d]]=this.zr.getColor(e[d]);this.selectedMap[n]&&(i=t.stack||l+e[d],null==s[i]?(s[i]=r,V[r]=[e[d]],r++):V[s[i]].push(e[d])),U=Math.max(U,t.data.length)}return{locationMap:V,maxDataLength:U}},_calculMarkMapXY:function(e,t,i){for(var n=this.series,a=0,o=t.length;o>a;a++)for(var r=0,s=t[a].length;s>r;r++){var l=t[a][r],h="xy"==i?0:"",m=this.component.grid,V=e[l];if("-1"!=i.indexOf("x")){V["counter"+h]>0&&(V["average"+h]=V["sum"+h]/V["counter"+h]);var U=this.component.xAxis.getAxis(n[l].xAxisIndex||0).getCoord(V["average"+h]);V["averageLine"+h]=[[U,m.getYend()],[U,m.getY()]],V["minLine"+h]=[[V["minX"+h],m.getYend()],[V["minX"+h],m.getY()]],V["maxLine"+h]=[[V["maxX"+h],m.getYend()],[V["maxX"+h],m.getY()]],V.isHorizontal=!1}if(h="xy"==i?1:"","-1"!=i.indexOf("y")){V["counter"+h]>0&&(V["average"+h]=V["sum"+h]/V["counter"+h]);var d=this.component.yAxis.getAxis(n[l].yAxisIndex||0).getCoord(V["average"+h]);V["averageLine"+h]=[[m.getX(),d],[m.getXend(),d]],V["minLine"+h]=[[m.getX(),V["minY"+h]],[m.getXend(),V["minY"+h]]],V["maxLine"+h]=[[m.getX(),V["maxY"+h]],[m.getXend(),V["maxY"+h]]],V.isHorizontal=!0}}},addLabel:function(e,t,i,n,a){var o=[i,t],r=this.deepMerge(o,"itemStyle.normal.label"),s=this.deepMerge(o,"itemStyle.emphasis.label"),l=r.textStyle||{},h=s.textStyle||{};
+
+if(r.show){var m=e.style;m.text=this._getLabelText(t,i,n,"normal"),m.textPosition=null==r.position?"horizontal"===a?"right":"top":r.position,m.textColor=l.color,m.textFont=this.getFont(l),m.textAlign=l.align,m.textBaseline=l.baseline}if(s.show){var V=e.highlightStyle;V.text=this._getLabelText(t,i,n,"emphasis"),V.textPosition=r.show?e.style.textPosition:null==s.position?"horizontal"===a?"right":"top":s.position,V.textColor=h.color,V.textFont=this.getFont(h),V.textAlign=h.align,V.textBaseline=h.baseline}return e},_getLabelText:function(e,t,i,n){var a=this.deepQuery([t,e],"itemStyle."+n+".label.formatter");a||"emphasis"!==n||(a=this.deepQuery([t,e],"itemStyle.normal.label.formatter"));var o=this.getDataFromOption(t,"-");return a?"function"==typeof a?a.call(this.myChart,{seriesName:e.name,series:e,name:i,value:o,data:t,status:n}):"string"==typeof a?a=a.replace("{a}","{a0}").replace("{b}","{b0}").replace("{c}","{c0}").replace("{a0}",e.name).replace("{b0}",i).replace("{c0}",this.numAddCommas(o)):void 0:o instanceof Array?null!=o[2]?this.numAddCommas(o[2]):o[0]+" , "+o[1]:this.numAddCommas(o)},buildMark:function(e){var t=this.series[e];this.selectedMap[t.name]&&(t.markLine&&this._buildMarkLine(e),t.markPoint&&this._buildMarkPoint(e))},_buildMarkPoint:function(e){for(var t,i,n=(this.markAttachStyle||{})[e],a=this.series[e],o=u.clone(a.markPoint),r=0,s=o.data.length;s>r;r++)t=o.data[r],i=this.getMarkCoord(e,t),t.x=null!=t.x?t.x:i[0],t.y=null!=t.y?t.y:i[1],!t.type||"max"!==t.type&&"min"!==t.type||(t.value=i[3],t.name=t.name||t.type,t.symbolSize=t.symbolSize||y.getTextWidth(i[3],this.getFont())/2+5);for(var l=this._markPoint(e,o),r=0,s=l.length;s>r;r++){var m=l[r];m.zlevel=a.zlevel,m.z=a.z+1;for(var V in n)m[V]=u.clone(n[V]);this.shapeList.push(m)}if(this.type===h.CHART_TYPE_FORCE||this.type===h.CHART_TYPE_CHORD)for(var r=0,s=l.length;s>r;r++)this.zr.addShape(l[r])},_buildMarkLine:function(e){for(var t,i=(this.markAttachStyle||{})[e],n=this.series[e],a=u.clone(n.markLine),o=0,r=a.data.length;r>o;o++){var s=a.data[o];!s.type||"max"!==s.type&&"min"!==s.type&&"average"!==s.type?t=[this.getMarkCoord(e,s[0]),this.getMarkCoord(e,s[1])]:(t=this.getMarkCoord(e,s),a.data[o]=[u.clone(s),{}],a.data[o][0].name=s.name||s.type,a.data[o][0].value="average"!==s.type?t[3]:+t[3].toFixed(null!=a.precision?a.precision:this.deepQuery([this.ecTheme,h],"markLine.precision")),t=t[2],s=[{},{}]),null!=t&&null!=t[0]&&null!=t[1]&&(a.data[o][0].x=null!=s[0].x?s[0].x:t[0][0],a.data[o][0].y=null!=s[0].y?s[0].y:t[0][1],a.data[o][1].x=null!=s[1].x?s[1].x:t[1][0],a.data[o][1].y=null!=s[1].y?s[1].y:t[1][1])}var m=this._markLine(e,a),V=a.large;if(V){var U=new l({style:{shapeList:m}}),d=m[0];if(d){u.merge(U.style,d.style),u.merge(U.highlightStyle={},d.highlightStyle),U.style.brushType="stroke",U.zlevel=n.zlevel,U.z=n.z+1,U.hoverable=!1;for(var p in i)U[p]=u.clone(i[p])}this.shapeList.push(U),this.zr.addShape(U),U._mark="largeLine";var c=a.effect;c.show&&(U.effect=c)}else{for(var o=0,r=m.length;r>o;o++){var y=m[o];y.zlevel=n.zlevel,y.z=n.z+1;for(var p in i)y[p]=u.clone(i[p]);this.shapeList.push(y)}if(this.type===h.CHART_TYPE_FORCE||this.type===h.CHART_TYPE_CHORD)for(var o=0,r=m.length;r>o;o++)this.zr.addShape(m[o])}},_markPoint:function(e,t){var i=this.series[e],n=this.component;u.merge(u.merge(t,u.clone(this.ecTheme.markPoint||{})),u.clone(h.markPoint)),t.name=i.name;var a,o,r,s,l,V,U,d=[],p=t.data,c=n.dataRange,y=n.legend,g=this.zr.getWidth(),b=this.zr.getHeight();if(t.large)a=this.getLargeMarkPointShape(e,t),a._mark="largePoint",a&&d.push(a);else for(var f=0,k=p.length;k>f;f++)null!=p[f].x&&null!=p[f].y&&(r=null!=p[f].value?p[f].value:"",y&&(o=y.getColor(i.name)),c&&(o=isNaN(r)?o:c.getColor(r),s=[p[f],t],l=this.deepQuery(s,"itemStyle.normal.color")||o,V=this.deepQuery(s,"itemStyle.emphasis.color")||l,null==l&&null==V)||(o=null==o?this.zr.getColor(e):o,p[f].tooltip=p[f].tooltip||t.tooltip||{trigger:"item"},p[f].name=null!=p[f].name?p[f].name:"",p[f].value=r,a=this.getSymbolShape(t,e,p[f],f,p[f].name,this.parsePercent(p[f].x,g),this.parsePercent(p[f].y,b),"pin",o,"rgba(0,0,0,0)","horizontal"),a._mark="point",U=this.deepMerge([p[f],t],"effect"),U.show&&(a.effect=U),i.type===h.CHART_TYPE_MAP&&(a._geo=this.getMarkGeo(p[f])),m.pack(a,i,e,p[f],f,p[f].name,r),d.push(a)));return d},_markLine:function(){function e(e,t){e[t]=e[t]instanceof Array?e[t].length>1?e[t]:[e[t][0],e[t][0]]:[e[t],e[t]]}return function(i,n){var a=this.series[i],o=this.component,r=o.dataRange,s=o.legend;u.merge(u.merge(n,u.clone(this.ecTheme.markLine||{})),u.clone(h.markLine));var l=s?s.getColor(a.name):this.zr.getColor(i);e(n,"symbol"),e(n,"symbolSize"),e(n,"symbolRotate");for(var V=n.data,U=[],d=this.zr.getWidth(),p=this.zr.getHeight(),y=0;y<V.length;y++){var g=V[y];if(t(g[0])&&t(g[1])){var b=this.deepMerge(g),f=[b,n],k=l,x=null!=b.value?b.value:"";if(r){k=isNaN(x)?k:r.getColor(x);var _=this.deepQuery(f,"itemStyle.normal.color")||k,L=this.deepQuery(f,"itemStyle.emphasis.color")||_;if(null==_&&null==L)continue}g[0].tooltip=b.tooltip||n.tooltip||{trigger:"item"},g[0].name=g[0].name||"",g[1].name=g[1].name||"",g[0].value=x,U.push({points:[[this.parsePercent(g[0].x,d),this.parsePercent(g[0].y,p)],[this.parsePercent(g[1].x,d),this.parsePercent(g[1].y,p)]],rawData:g,color:k})}}var W=this.query(n,"bundling.enable");if(W){var X=new c;X.maxTurningAngle=this.query(n,"bundling.maxTurningAngle")/180*Math.PI,U=X.run(U)}n.name=a.name;for(var v=[],y=0,w=U.length;w>y;y++){var K=U[y],I=K.rawEdge||K,g=I.rawData,x=null!=g.value?g.value:"",J=this.getMarkLineShape(n,i,g,y,K.points,W,I.color);J._mark="line";var C=this.deepMerge([g[0],g[1],n],"effect");C.show&&(J.effect=C,J.effect.large=n.large),a.type===h.CHART_TYPE_MAP&&(J._geo=[this.getMarkGeo(g[0]),this.getMarkGeo(g[1])]),m.pack(J,a,i,g[0],y,g[0].name+(""!==g[1].name?" > "+g[1].name:""),x),v.push(J)}return v}}(),getMarkCoord:function(){return[0,0]},getSymbolShape:function(e,t,i,o,r,s,l,h,V,U,d){var p=[i,e],c=this.getDataFromOption(i,"-");h=this.deepQuery(p,"symbol")||h;var u=this.deepQuery(p,"symbolSize");u="function"==typeof u?u(c):u,"number"==typeof u&&(u=[u,u]);var y=this.deepQuery(p,"symbolRotate"),g=this.deepMerge(p,"itemStyle.normal"),b=this.deepMerge(p,"itemStyle.emphasis"),f=null!=g.borderWidth?g.borderWidth:g.lineStyle&&g.lineStyle.width;null==f&&(f=h.match("empty")?2:0);var k=null!=b.borderWidth?b.borderWidth:b.lineStyle&&b.lineStyle.width;null==k&&(k=f+2);var x=this.getItemStyleColor(g.color,t,o,i),_=this.getItemStyleColor(b.color,t,o,i),L=u[0],W=u[1],X=new a({style:{iconType:h.replace("empty","").toLowerCase(),x:s-L,y:l-W,width:2*L,height:2*W,brushType:"both",color:h.match("empty")?U:x||V,strokeColor:g.borderColor||x||V,lineWidth:f},highlightStyle:{color:h.match("empty")?U:_||x||V,strokeColor:b.borderColor||g.borderColor||_||x||V,lineWidth:k},clickable:this.deepQuery(p,"clickable")});return h.match("image")&&(X.style.image=h.replace(new RegExp("^image:\\/\\/"),""),X=new n({style:X.style,highlightStyle:X.highlightStyle,clickable:this.deepQuery(p,"clickable")})),null!=y&&(X.rotation=[y*Math.PI/180,s,l]),h.match("star")&&(X.style.iconType="star",X.style.n=h.replace("empty","").replace("star","")-0||5),"none"===h&&(X.invisible=!0,X.hoverable=!1),X=this.addLabel(X,e,i,r,d),h.match("empty")&&(null==X.style.textColor&&(X.style.textColor=X.style.strokeColor),null==X.highlightStyle.textColor&&(X.highlightStyle.textColor=X.highlightStyle.strokeColor)),m.pack(X,e,t,i,o,r),X._x=s,X._y=l,X._dataIndex=o,X._seriesIndex=t,X},getMarkLineShape:function(e,t,i,n,a,r,l){var h=null!=i[0].value?i[0].value:"-",m=null!=i[1].value?i[1].value:"-",V=[i[0].symbol||e.symbol[0],i[1].symbol||e.symbol[1]],U=[i[0].symbolSize||e.symbolSize[0],i[1].symbolSize||e.symbolSize[1]];U[0]="function"==typeof U[0]?U[0](h):U[0],U[1]="function"==typeof U[1]?U[1](m):U[1];var d=[this.query(i[0],"symbolRotate")||e.symbolRotate[0],this.query(i[1],"symbolRotate")||e.symbolRotate[1]],p=[i[0],i[1],e],c=this.deepMerge(p,"itemStyle.normal");c.color=this.getItemStyleColor(c.color,t,n,i);var u=this.deepMerge(p,"itemStyle.emphasis");u.color=this.getItemStyleColor(u.color,t,n,i);var y=c.lineStyle,g=u.lineStyle,b=y.width;null==b&&(b=c.borderWidth);var f=g.width;null==f&&(f=null!=u.borderWidth?u.borderWidth:b+2);var k=this.deepQuery(p,"smoothness");this.deepQuery(p,"smooth")||(k=0);var x=r?s:o,_=new x({style:{symbol:V,symbolSize:U,symbolRotate:d,brushType:"both",lineType:y.type,shadowColor:y.shadowColor||y.color||c.borderColor||c.color||l,shadowBlur:y.shadowBlur,shadowOffsetX:y.shadowOffsetX,shadowOffsetY:y.shadowOffsetY,color:c.color||l,strokeColor:y.color||c.borderColor||c.color||l,lineWidth:b,symbolBorderColor:c.borderColor||c.color||l,symbolBorder:c.borderWidth},highlightStyle:{shadowColor:g.shadowColor,shadowBlur:g.shadowBlur,shadowOffsetX:g.shadowOffsetX,shadowOffsetY:g.shadowOffsetY,color:u.color||c.color||l,strokeColor:g.color||y.color||u.borderColor||c.borderColor||u.color||c.color||l,lineWidth:f,symbolBorderColor:u.borderColor||c.borderColor||u.color||c.color||l,symbolBorder:null==u.borderWidth?c.borderWidth+2:u.borderWidth},clickable:this.deepQuery(p,"clickable")}),L=_.style;return r?(L.pointList=a,L.smooth=k):(L.xStart=a[0][0],L.yStart=a[0][1],L.xEnd=a[1][0],L.yEnd=a[1][1],L.curveness=k,_.updatePoints(_.style)),_=this.addLabel(_,e,i[0],i[0].name+" : "+i[1].name)},getLargeMarkPointShape:function(e,t){var i,n,a,o,s,l,h=this.series[e],m=this.component,V=t.data,U=m.dataRange,d=m.legend,p=[V[0],t];if(d&&(n=d.getColor(h.name)),!U||(a=null!=V[0].value?V[0].value:"",n=isNaN(a)?n:U.getColor(a),o=this.deepQuery(p,"itemStyle.normal.color")||n,s=this.deepQuery(p,"itemStyle.emphasis.color")||o,null!=o||null!=s)){n=this.deepMerge(p,"itemStyle.normal").color||n;var c=this.deepQuery(p,"symbol")||"circle";c=c.replace("empty","").replace(/\d/g,""),l=this.deepMerge([V[0],t],"effect");var u=window.devicePixelRatio||1;return i=new r({style:{pointList:V,color:n,strokeColor:n,shadowColor:l.shadowColor||n,shadowBlur:(null!=l.shadowBlur?l.shadowBlur:8)*u,size:this.deepQuery(p,"symbolSize"),iconType:c,brushType:"fill",lineWidth:1},draggable:!1,hoverable:!1}),l.show&&(i.effect=l),i}},backupShapeList:function(){this.shapeList&&this.shapeList.length>0?(this.lastShapeList=this.shapeList,this.shapeList=[]):this.lastShapeList=[]},addShapeList:function(){var e,t,i=this.option.animationThreshold/(this.canvasSupported?2:4),n=this.lastShapeList,a=this.shapeList,o=n.length>0,r=o?this.query(this.option,"animationDurationUpdate"):this.query(this.option,"animationDuration"),s=this.query(this.option,"animationEasing"),l={},m={};if(this.option.animation&&!this.option.renderAsImage&&a.length<i&&!this.motionlessOnce){for(var V=0,U=n.length;U>V;V++)t=this._getAnimationKey(n[V]),t.match("undefined")?this.zr.delShape(n[V].id):(t+=n[V].type,l[t]?this.zr.delShape(n[V].id):l[t]=n[V]);for(var V=0,U=a.length;U>V;V++)t=this._getAnimationKey(a[V]),t.match("undefined")?this.zr.addShape(a[V]):(t+=a[V].type,m[t]=a[V]);for(t in l)m[t]||this.zr.delShape(l[t].id);for(t in m)l[t]?(this.zr.delShape(l[t].id),this._animateMod(l[t],m[t],r,s,0,o)):(e=this.type!=h.CHART_TYPE_LINE&&this.type!=h.CHART_TYPE_RADAR||0===t.indexOf("icon")?0:r/2,this._animateMod(!1,m[t],r,s,e,o));this.zr.refresh(),this.animationEffect()}else{this.motionlessOnce=!1,this.zr.delShape(n);for(var V=0,U=a.length;U>V;V++)this.zr.addShape(a[V])}},_getAnimationKey:function(e){return this.type!=h.CHART_TYPE_MAP&&this.type!=h.CHART_TYPE_TREEMAP&&this.type!=h.CHART_TYPE_VENN&&this.type!=h.CHART_TYPE_TREE?m.get(e,"seriesIndex")+"_"+m.get(e,"dataIndex")+(e._mark?e._mark:"")+(this.type===h.CHART_TYPE_RADAR?m.get(e,"special"):""):m.get(e,"seriesIndex")+"_"+m.get(e,"dataIndex")+(e._mark?e._mark:"undefined")},_animateMod:function(e,t,i,n,a,o){switch(t.type){case"polyline":case"half-smooth-polygon":V.pointList(this.zr,e,t,i,n);break;case"rectangle":V.rectangle(this.zr,e,t,i,n);break;case"image":case"icon":V.icon(this.zr,e,t,i,n,a);break;case"candle":o?this.zr.addShape(t):V.candle(this.zr,e,t,i,n);break;case"ring":case"sector":case"circle":o?"sector"===t.type?V.sector(this.zr,e,t,i,n):this.zr.addShape(t):V.ring(this.zr,e,t,i+(m.get(t,"dataIndex")||0)%20*100,n);break;case"text":V.text(this.zr,e,t,i,n);break;case"polygon":o?V.pointList(this.zr,e,t,i,n):V.polygon(this.zr,e,t,i,n);break;case"ribbon":V.ribbon(this.zr,e,t,i,n);break;case"gauge-pointer":V.gaugePointer(this.zr,e,t,i,n);break;case"mark-line":V.markline(this.zr,e,t,i,n);break;case"bezier-curve":case"line":V.line(this.zr,e,t,i,n);break;default:this.zr.addShape(t)}},animationMark:function(e,t,i){for(var i=i||this.shapeList,n=0,a=i.length;a>n;n++)i[n]._mark&&this._animateMod(!1,i[n],e,t,0,!0);this.animationEffect(i)},animationEffect:function(e){if(!e&&this.clearEffectShape(),e=e||this.shapeList,null!=e){var t=h.EFFECT_ZLEVEL;this.canvasSupported&&this.zr.modLayer(t,{motionBlur:!0,lastFrameAlpha:this.option.effectBlendAlpha||h.effectBlendAlpha});for(var i,n=0,a=e.length;a>n;n++)i=e[n],i._mark&&i.effect&&i.effect.show&&U[i._mark]&&(U[i._mark](this.zr,this.effectList,i,t),this.effectList[this.effectList.length-1]._mark=i._mark)}},clearEffectShape:function(e){var t=this.effectList;if(this.zr&&t&&t.length>0){e&&this.zr.modLayer(h.EFFECT_ZLEVEL,{motionBlur:!1}),this.zr.delShape(t);for(var i=0;i<t.length;i++)t[i].effectAnimator&&t[i].effectAnimator.stop()}this.effectList=[]},addMark:function(e,t,i){var n=this.series[e];if(this.selectedMap[n.name]){var a=this.query(this.option,"animationDurationUpdate"),o=this.query(this.option,"animationEasing"),r=n[i].data,s=this.shapeList.length;if(n[i].data=t.data,this["_build"+i.replace("m","M")](e),this.option.animation&&!this.option.renderAsImage)this.animationMark(a,o,this.shapeList.slice(s));else{for(var l=s,h=this.shapeList.length;h>l;l++)this.zr.addShape(this.shapeList[l]);this.zr.refreshNextFrame()}n[i].data=r}},delMark:function(e,t,i){i=i.replace("mark","").replace("large","").toLowerCase();var n=this.series[e];if(this.selectedMap[n.name]){for(var a=!1,o=[this.shapeList,this.effectList],r=2;r--;)for(var s=0,l=o[r].length;l>s;s++)if(o[r][s]._mark==i&&m.get(o[r][s],"seriesIndex")==e&&m.get(o[r][s],"name")==t){this.zr.delShape(o[r][s].id),o[r].splice(s,1),a=!0;break}a&&this.zr.refreshNextFrame()}}},u.inherits(i,p),i}),i("zrender/shape/Circle",["require","./Base","../tool/util"],function(e){"use strict";var t=e("./Base"),i=function(e){t.call(this,e)};return i.prototype={type:"circle",buildPath:function(e,t){e.moveTo(t.x+t.r,t.y),e.arc(t.x,t.y,t.r,0,2*Math.PI,!0)},getRect:function(e){if(e.__rect)return e.__rect;var t;return t="stroke"==e.brushType||"fill"==e.brushType?e.lineWidth||1:0,e.__rect={x:Math.round(e.x-e.r-t/2),y:Math.round(e.y-e.r-t/2),width:2*e.r+t,height:2*e.r+t},e.__rect}},e("../tool/util").inherits(i,t),i}),i("echarts/util/accMath",[],function(){function e(e,t){var i=e.toString(),n=t.toString(),a=0;try{a=n.split(".")[1].length}catch(o){}try{a-=i.split(".")[1].length}catch(o){}return(i.replace(".","")-0)/(n.replace(".","")-0)*Math.pow(10,a)}function t(e,t){var i=e.toString(),n=t.toString(),a=0;try{a+=i.split(".")[1].length}catch(o){}try{a+=n.split(".")[1].length}catch(o){}return(i.replace(".","")-0)*(n.replace(".","")-0)/Math.pow(10,a)}function i(e,t){var i=0,n=0;try{i=e.toString().split(".")[1].length}catch(a){}try{n=t.toString().split(".")[1].length}catch(a){}var o=Math.pow(10,Math.max(i,n));return(Math.round(e*o)+Math.round(t*o))/o}function n(e,t){return i(e,-t)}return{accDiv:e,accMul:t,accAdd:i,accSub:n}}),i("echarts/util/shape/Icon",["require","zrender/tool/util","zrender/shape/Star","zrender/shape/Heart","zrender/shape/Droplet","zrender/shape/Image","zrender/shape/Base"],function(e){function t(e,t){var i=t.x,n=t.y,a=t.width/16,o=t.height/16;e.moveTo(i,n+t.height),e.lineTo(i+5*a,n+14*o),e.lineTo(i+t.width,n+3*o),e.lineTo(i+13*a,n),e.lineTo(i+2*a,n+11*o),e.lineTo(i,n+t.height),e.moveTo(i+6*a,n+10*o),e.lineTo(i+14*a,n+2*o),e.moveTo(i+10*a,n+13*o),e.lineTo(i+t.width,n+13*o),e.moveTo(i+13*a,n+10*o),e.lineTo(i+13*a,n+t.height)}function i(e,t){var i=t.x,n=t.y,a=t.width/16,o=t.height/16;e.moveTo(i,n+t.height),e.lineTo(i+5*a,n+14*o),e.lineTo(i+t.width,n+3*o),e.lineTo(i+13*a,n),e.lineTo(i+2*a,n+11*o),e.lineTo(i,n+t.height),e.moveTo(i+6*a,n+10*o),e.lineTo(i+14*a,n+2*o),e.moveTo(i+10*a,n+13*o),e.lineTo(i+t.width,n+13*o)}function n(e,t){var i=t.x,n=t.y,a=t.width/16,o=t.height/16;e.moveTo(i+4*a,n+15*o),e.lineTo(i+9*a,n+13*o),e.lineTo(i+14*a,n+8*o),e.lineTo(i+11*a,n+5*o),e.lineTo(i+6*a,n+10*o),e.lineTo(i+4*a,n+15*o),e.moveTo(i+5*a,n),e.lineTo(i+11*a,n),e.moveTo(i+5*a,n+o),e.lineTo(i+11*a,n+o),e.moveTo(i,n+2*o),e.lineTo(i+t.width,n+2*o),e.moveTo(i,n+5*o),e.lineTo(i+3*a,n+t.height),e.lineTo(i+13*a,n+t.height),e.lineTo(i+t.width,n+5*o)}function a(e,t){var i=t.x,n=t.y,a=t.width/16,o=t.height/16;e.moveTo(i,n+3*o),e.lineTo(i+6*a,n+3*o),e.moveTo(i+3*a,n),e.lineTo(i+3*a,n+6*o),e.moveTo(i+3*a,n+8*o),e.lineTo(i+3*a,n+t.height),e.lineTo(i+t.width,n+t.height),e.lineTo(i+t.width,n+3*o),e.lineTo(i+8*a,n+3*o)}function o(e,t){var i=t.x,n=t.y,a=t.width/16,o=t.height/16;e.moveTo(i+6*a,n),e.lineTo(i+2*a,n+3*o),e.lineTo(i+6*a,n+6*o),e.moveTo(i+2*a,n+3*o),e.lineTo(i+14*a,n+3*o),e.lineTo(i+14*a,n+11*o),e.moveTo(i+2*a,n+5*o),e.lineTo(i+2*a,n+13*o),e.lineTo(i+14*a,n+13*o),e.moveTo(i+10*a,n+10*o),e.lineTo(i+14*a,n+13*o),e.lineTo(i+10*a,n+t.height)}function r(e,t){var i=t.x,n=t.y,a=t.width/16,o=t.height/16,r=t.width/2;e.lineWidth=1.5,e.arc(i+r,n+r,r-a,0,2*Math.PI/3),e.moveTo(i+3*a,n+t.height),e.lineTo(i+0*a,n+12*o),e.lineTo(i+5*a,n+11*o),e.moveTo(i,n+8*o),e.arc(i+r,n+r,r-a,Math.PI,5*Math.PI/3),e.moveTo(i+13*a,n),e.lineTo(i+t.width,n+4*o),e.lineTo(i+11*a,n+5*o)}function s(e,t){var i=t.x,n=t.y,a=t.width/16,o=t.height/16;e.moveTo(i,n),e.lineTo(i,n+t.height),e.lineTo(i+t.width,n+t.height),e.moveTo(i+2*a,n+14*o),e.lineTo(i+7*a,n+6*o),e.lineTo(i+11*a,n+11*o),e.lineTo(i+15*a,n+2*o)}function l(e,t){var i=t.x,n=t.y,a=t.width/16,o=t.height/16;e.moveTo(i,n),e.lineTo(i,n+t.height),e.lineTo(i+t.width,n+t.height),e.moveTo(i+3*a,n+14*o),e.lineTo(i+3*a,n+6*o),e.lineTo(i+4*a,n+6*o),e.lineTo(i+4*a,n+14*o),e.moveTo(i+7*a,n+14*o),e.lineTo(i+7*a,n+2*o),e.lineTo(i+8*a,n+2*o),e.lineTo(i+8*a,n+14*o),e.moveTo(i+11*a,n+14*o),e.lineTo(i+11*a,n+9*o),e.lineTo(i+12*a,n+9*o),e.lineTo(i+12*a,n+14*o)}function h(e,t){var i=t.x,n=t.y,a=t.width-2,o=t.height-2,r=Math.min(a,o)/2;n+=2,e.moveTo(i+r+3,n+r-3),e.arc(i+r+3,n+r-3,r-1,0,-Math.PI/2,!0),e.lineTo(i+r+3,n+r-3),e.moveTo(i+r,n),e.lineTo(i+r,n+r),e.arc(i+r,n+r,r,-Math.PI/2,2*Math.PI,!0),e.lineTo(i+r,n+r),e.lineWidth=1.5}function m(e,t){var i=t.x,n=t.y,a=t.width/16,o=t.height/16;n-=o,e.moveTo(i+1*a,n+2*o),e.lineTo(i+15*a,n+2*o),e.lineTo(i+14*a,n+3*o),e.lineTo(i+2*a,n+3*o),e.moveTo(i+3*a,n+6*o),e.lineTo(i+13*a,n+6*o),e.lineTo(i+12*a,n+7*o),e.lineTo(i+4*a,n+7*o),e.moveTo(i+5*a,n+10*o),e.lineTo(i+11*a,n+10*o),e.lineTo(i+10*a,n+11*o),e.lineTo(i+6*a,n+11*o),e.moveTo(i+7*a,n+14*o),e.lineTo(i+9*a,n+14*o),e.lineTo(i+8*a,n+15*o),e.lineTo(i+7*a,n+15*o)}function V(e,t){var i=t.x,n=t.y,a=t.width,o=t.height,r=a/16,s=o/16,l=2*Math.min(r,s);e.moveTo(i+r+l,n+s+l),e.arc(i+r,n+s,l,Math.PI/4,3*Math.PI),e.lineTo(i+7*r-l,n+6*s-l),e.arc(i+7*r,n+6*s,l,Math.PI/4*5,4*Math.PI),e.arc(i+7*r,n+6*s,l/2,Math.PI/4*5,4*Math.PI),e.moveTo(i+7*r-l/2,n+6*s+l),e.lineTo(i+r+l,n+14*s-l),e.arc(i+r,n+14*s,l,-Math.PI/4,2*Math.PI),e.moveTo(i+7*r+l/2,n+6*s),e.lineTo(i+14*r-l,n+10*s-l/2),e.moveTo(i+16*r,n+10*s),e.arc(i+14*r,n+10*s,l,0,3*Math.PI),e.lineWidth=1.5}function U(e,t){var i=t.x,n=t.y,a=t.width,o=t.height,r=Math.min(a,o)/2;e.moveTo(i+a,n+o/2),e.arc(i+r,n+r,r,0,2*Math.PI),e.arc(i+r,n,r,Math.PI/4,Math.PI/5*4),e.arc(i,n+r,r,-Math.PI/3,Math.PI/3),e.arc(i+a,n+o,r,Math.PI,Math.PI/2*3),e.lineWidth=1.5}function d(e,t){for(var i=t.x,n=t.y,a=t.width,o=t.height,r=Math.round(o/3),s=Math.round((r-2)/2),l=3;l--;)e.rect(i,n+r*l+s,a,2)}function p(e,t){for(var i=t.x,n=t.y,a=t.width,o=t.height,r=Math.round(a/3),s=Math.round((r-2)/2),l=3;l--;)e.rect(i+r*l+s,n,2,o)}function c(e,t){var i=t.x,n=t.y,a=t.width/16;e.moveTo(i+a,n),e.lineTo(i+a,n+t.height),e.lineTo(i+15*a,n+t.height),e.lineTo(i+15*a,n),e.lineTo(i+a,n),e.moveTo(i+3*a,n+3*a),e.lineTo(i+13*a,n+3*a),e.moveTo(i+3*a,n+6*a),e.lineTo(i+13*a,n+6*a),e.moveTo(i+3*a,n+9*a),e.lineTo(i+13*a,n+9*a),e.moveTo(i+3*a,n+12*a),e.lineTo(i+9*a,n+12*a)}function u(e,t){var i=t.x,n=t.y,a=t.width/16,o=t.height/16;e.moveTo(i,n),e.lineTo(i,n+t.height),e.lineTo(i+t.width,n+t.height),e.lineTo(i+t.width,n),e.lineTo(i,n),e.moveTo(i+4*a,n),e.lineTo(i+4*a,n+8*o),e.lineTo(i+12*a,n+8*o),e.lineTo(i+12*a,n),e.moveTo(i+6*a,n+11*o),e.lineTo(i+6*a,n+13*o),e.lineTo(i+10*a,n+13*o),e.lineTo(i+10*a,n+11*o),e.lineTo(i+6*a,n+11*o)}function y(e,t){var i=t.x,n=t.y,a=t.width,o=t.height;e.moveTo(i,n+o/2),e.lineTo(i+a,n+o/2),e.moveTo(i+a/2,n),e.lineTo(i+a/2,n+o)}function g(e,t){var i=t.width/2,n=t.height/2,a=Math.min(i,n);e.moveTo(t.x+i+a,t.y+n),e.arc(t.x+i,t.y+n,a,0,2*Math.PI),e.closePath()}function b(e,t){e.rect(t.x,t.y,t.width,t.height),e.closePath()}function f(e,t){var i=t.width/2,n=t.height/2,a=t.x+i,o=t.y+n,r=Math.min(i,n);e.moveTo(a,o-r),e.lineTo(a+r,o+r),e.lineTo(a-r,o+r),e.lineTo(a,o-r),e.closePath()}function k(e,t){var i=t.width/2,n=t.height/2,a=t.x+i,o=t.y+n,r=Math.min(i,n);e.moveTo(a,o-r),e.lineTo(a+r,o),e.lineTo(a,o+r),e.lineTo(a-r,o),e.lineTo(a,o-r),e.closePath()}function x(e,t){var i=t.x,n=t.y,a=t.width/16;e.moveTo(i+8*a,n),e.lineTo(i+a,n+t.height),e.lineTo(i+8*a,n+t.height/4*3),e.lineTo(i+15*a,n+t.height),e.lineTo(i+8*a,n),e.closePath()}function _(t,i){var n=e("zrender/shape/Star"),a=i.width/2,o=i.height/2;n.prototype.buildPath(t,{x:i.x+a,y:i.y+o,r:Math.min(a,o),n:i.n||5})}function L(t,i){var n=e("zrender/shape/Heart");n.prototype.buildPath(t,{x:i.x+i.width/2,y:i.y+.2*i.height,a:i.width/2,b:.8*i.height})}function W(t,i){var n=e("zrender/shape/Droplet");n.prototype.buildPath(t,{x:i.x+.5*i.width,y:i.y+.5*i.height,a:.5*i.width,b:.8*i.height})}function X(e,t){var i=t.x,n=t.y-t.height/2*1.5,a=t.width/2,o=t.height/2,r=Math.min(a,o);e.arc(i+a,n+o,r,Math.PI/5*4,Math.PI/5),e.lineTo(i+a,n+o+1.5*r),e.closePath()}function v(t,i,n){var a=e("zrender/shape/Image");this._imageShape=this._imageShape||new a({style:{}});for(var o in i)this._imageShape.style[o]=i[o];this._imageShape.brush(t,!1,n)}function w(e){I.call(this,e)}var K=e("zrender/tool/util"),I=e("zrender/shape/Base");return w.prototype={type:"icon",iconLibrary:{mark:t,markUndo:i,markClear:n,dataZoom:a,dataZoomReset:o,restore:r,lineChart:s,barChart:l,pieChart:h,funnelChart:m,forceChart:V,chordChart:U,stackChart:d,tiledChart:p,dataView:c,saveAsImage:u,cross:y,circle:g,rectangle:b,triangle:f,diamond:k,arrow:x,star:_,heart:L,droplet:W,pin:X,image:v},brush:function(t,i,n){var a=i?this.highlightStyle:this.style;a=a||{};var o=a.iconType||this.style.iconType;if("image"===o){var r=e("zrender/shape/Image");r.prototype.brush.call(this,t,i,n)}else{var a=this.beforeBrush(t,i);switch(t.beginPath(),this.buildPath(t,a,n),a.brushType){case"both":t.fill();case"stroke":a.lineWidth>0&&t.stroke();break;default:t.fill()}this.drawText(t,a,this.style),this.afterBrush(t)}},buildPath:function(e,t,i){this.iconLibrary[t.iconType]?this.iconLibrary[t.iconType].call(this,e,t,i):(e.moveTo(t.x,t.y),e.lineTo(t.x+t.width,t.y),e.lineTo(t.x+t.width,t.y+t.height),e.lineTo(t.x,t.y+t.height),e.lineTo(t.x,t.y),e.closePath())},getRect:function(e){return e.__rect?e.__rect:(e.__rect={x:Math.round(e.x),y:Math.round(e.y-("pin"==e.iconType?e.height/2*1.5:0)),width:e.width,height:e.height*("pin"===e.iconType?1.25:1)},e.__rect)},isCover:function(e,t){var i=this.transformCoordToLocal(e,t);e=i[0],t=i[1];var n=this.style.__rect;n||(n=this.style.__rect=this.getRect(this.style));var a=n.height<8||n.width<8?4:0;return e>=n.x-a&&e<=n.x+n.width+a&&t>=n.y-a&&t<=n.y+n.height+a}},K.inherits(w,I),w}),i("echarts/util/shape/MarkLine",["require","zrender/shape/Base","./Icon","zrender/shape/Line","zrender/shape/BezierCurve","zrender/tool/area","zrender/shape/util/dashedLineTo","zrender/tool/util","zrender/tool/curve"],function(e){function t(e){i.call(this,e),this.style.curveness>0&&this.updatePoints(this.style),this.highlightStyle.curveness>0&&this.updatePoints(this.highlightStyle)}var i=e("zrender/shape/Base"),n=e("./Icon"),a=e("zrender/shape/Line"),o=new a({}),r=e("zrender/shape/BezierCurve"),s=new r({}),l=e("zrender/tool/area"),h=e("zrender/shape/util/dashedLineTo"),m=e("zrender/tool/util"),V=e("zrender/tool/curve");return t.prototype={type:"mark-line",brush:function(e,t){var i=this.style;t&&(i=this.getHighlightStyle(i,this.highlightStyle||{})),e.save(),this.setContext(e,i),this.setTransform(e),e.save(),e.beginPath(),this.buildPath(e,i),e.stroke(),e.restore(),this.brushSymbol(e,i,0),this.brushSymbol(e,i,1),this.drawText(e,i,this.style),e.restore()},buildPath:function(e,t){var i=t.lineType||"solid";if(e.moveTo(t.xStart,t.yStart),t.curveness>0){var n=null;switch(i){case"dashed":n=[5,5];break;case"dotted":n=[1,1]}n&&e.setLineDash&&e.setLineDash(n),e.quadraticCurveTo(t.cpX1,t.cpY1,t.xEnd,t.yEnd)}else if("solid"==i)e.lineTo(t.xEnd,t.yEnd);else{var a=(t.lineWidth||1)*("dashed"==t.lineType?5:1);h(e,t.xStart,t.yStart,t.xEnd,t.yEnd,a)}},updatePoints:function(e){var t=e.curveness||0,i=1,n=e.xStart,a=e.yStart,o=e.xEnd,r=e.yEnd,s=(n+o)/2-i*(a-r)*t,l=(a+r)/2-i*(o-n)*t;e.cpX1=s,e.cpY1=l},brushSymbol:function(e,t,i){if("none"!=t.symbol[i]){e.save(),e.beginPath(),e.lineWidth=t.symbolBorder,e.strokeStyle=t.symbolBorderColor;var a=t.symbol[i].replace("empty","").toLowerCase();t.symbol[i].match("empty")&&(e.fillStyle="#fff");var o=t.xStart,r=t.yStart,s=t.xEnd,l=t.yEnd,h=0===i?o:s,m=0===i?r:l,U=t.curveness||0,d=null!=t.symbolRotate[i]?t.symbolRotate[i]-0:0;if(d=d/180*Math.PI,"arrow"==a&&0===d)if(0===U){var p=0===i?-1:1;d=Math.PI/2+Math.atan2(p*(l-r),p*(s-o))}else{var c=t.cpX1,u=t.cpY1,y=V.quadraticDerivativeAt,g=y(o,c,s,i),b=y(r,u,l,i);d=Math.PI/2+Math.atan2(b,g)}e.translate(h,m),0!==d&&e.rotate(d);var f=t.symbolSize[i];n.prototype.buildPath(e,{x:-f,y:-f,width:2*f,height:2*f,iconType:a}),e.closePath(),e.fill(),e.stroke(),e.restore()}},getRect:function(e){return e.curveness>0?s.getRect(e):o.getRect(e),e.__rect},isCover:function(e,t){var i=this.transformCoordToLocal(e,t);return e=i[0],t=i[1],this.isCoverRect(e,t)?this.style.curveness>0?l.isInside(s,this.style,e,t):l.isInside(o,this.style,e,t):!1}},m.inherits(t,i),t}),i("echarts/util/shape/Symbol",["require","zrender/shape/Base","zrender/shape/Polygon","zrender/tool/util","./normalIsCover"],function(e){function t(e){i.call(this,e)}var i=e("zrender/shape/Base"),n=e("zrender/shape/Polygon"),a=new n({}),o=e("zrender/tool/util");return t.prototype={type:"symbol",buildPath:function(e,t){var i=t.pointList,n=i.length;if(0!==n)for(var a,o,r,s,l,h=1e4,m=Math.ceil(n/h),V=i[0]instanceof Array,U=t.size?t.size:2,d=U,p=U/2,c=2*Math.PI,u=0;m>u;u++){e.beginPath(),a=u*h,o=a+h,o=o>n?n:o;for(var y=a;o>y;y++)if(t.random&&(r=t["randomMap"+y%20]/100,d=U*r*r,p=d/2),V?(s=i[y][0],l=i[y][1]):(s=i[y].x,l=i[y].y),3>d)e.rect(s-p,l-p,d,d);else switch(t.iconType){case"circle":e.moveTo(s,l),e.arc(s,l,p,0,c,!0);break;case"diamond":e.moveTo(s,l-p),e.lineTo(s+p/3,l-p/3),e.lineTo(s+p,l),e.lineTo(s+p/3,l+p/3),e.lineTo(s,l+p),e.lineTo(s-p/3,l+p/3),e.lineTo(s-p,l),e.lineTo(s-p/3,l-p/3),e.lineTo(s,l-p);break;default:e.rect(s-p,l-p,d,d)}if(e.closePath(),m-1>u)switch(t.brushType){case"both":e.fill(),t.lineWidth>0&&e.stroke();break;case"stroke":t.lineWidth>0&&e.stroke();break;default:e.fill()}}},getRect:function(e){return e.__rect||a.getRect(e)},isCover:e("./normalIsCover")},o.inherits(t,i),t}),i("zrender/shape/Polyline",["require","./Base","./util/smoothSpline","./util/smoothBezier","./util/dashedLineTo","./Polygon","../tool/util"],function(e){var t=e("./Base"),i=e("./util/smoothSpline"),n=e("./util/smoothBezier"),a=e("./util/dashedLineTo"),o=function(e){this.brushTypeOnly="stroke",this.textPosition="end",t.call(this,e)};return o.prototype={type:"polyline",buildPath:function(e,t){var n=t.pointList;if(!(n.length<2)){var o=Math.min(t.pointList.length,Math.round(t.pointListLength||t.pointList.length));if(t.smooth&&"spline"!==t.smooth){t.controlPointList||this.updateControlPoints(t);var r=t.controlPointList;e.moveTo(n[0][0],n[0][1]);for(var s,l,h,m=0;o-1>m;m++)s=r[2*m],l=r[2*m+1],h=n[m+1],e.bezierCurveTo(s[0],s[1],l[0],l[1],h[0],h[1])}else if("spline"===t.smooth&&(n=i(n),o=n.length),t.lineType&&"solid"!=t.lineType){if("dashed"==t.lineType||"dotted"==t.lineType){var V=(t.lineWidth||1)*("dashed"==t.lineType?5:1);e.moveTo(n[0][0],n[0][1]);for(var m=1;o>m;m++)a(e,n[m-1][0],n[m-1][1],n[m][0],n[m][1],V)}}else{e.moveTo(n[0][0],n[0][1]);for(var m=1;o>m;m++)e.lineTo(n[m][0],n[m][1])}}},updateControlPoints:function(e){e.controlPointList=n(e.pointList,e.smooth,!1,e.smoothConstraint)},getRect:function(t){return e("./Polygon").prototype.getRect(t)}},e("../tool/util").inherits(o,t),o}),i("zrender/shape/ShapeBundle",["require","./Base","../tool/util"],function(e){var t=e("./Base"),i=function(e){t.call(this,e)};return i.prototype={constructor:i,type:"shape-bundle",brush:function(e,t){var i=this.beforeBrush(e,t);e.beginPath();for(var n=0;n<i.shapeList.length;n++){var a=i.shapeList[n],o=a.style;t&&(o=a.getHighlightStyle(o,a.highlightStyle||{},a.brushTypeOnly)),a.buildPath(e,o)}switch(i.brushType){case"both":e.fill();case"stroke":i.lineWidth>0&&e.stroke();break;default:e.fill()}this.drawText(e,i,this.style),this.afterBrush(e)},getRect:function(e){if(e.__rect)return e.__rect;for(var t=1/0,i=-(1/0),n=1/0,a=-(1/0),o=0;o<e.shapeList.length;o++)var r=e.shapeList[o],s=r.getRect(r.style),t=Math.min(s.x,t),n=Math.min(s.y,n),i=Math.max(s.x+s.width,i),a=Math.max(s.y+s.height,a);return e.__rect={x:t,y:n,width:i-t,height:a-n},e.__rect},isCover:function(e,t){var i=this.transformCoordToLocal(e,t);if(e=i[0],t=i[1],this.isCoverRect(e,t))for(var n=0;n<this.style.shapeList.length;n++){var a=this.style.shapeList[n];if(a.isCover(e,t))return!0}return!1}},e("../tool/util").inherits(i,t),i}),i("echarts/util/ecAnimation",["require","zrender/tool/util","zrender/tool/curve","zrender/shape/Polygon"],function(e){function t(e,t,i,n,a){var o,r=i.style.pointList,s=r.length;if(!t){if(o=[],"vertical"!=i._orient)for(var l=r[0][1],h=0;s>h;h++)o[h]=[r[h][0],l];else for(var m=r[0][0],h=0;s>h;h++)o[h]=[m,r[h][1]];"half-smooth-polygon"==i.type&&(o[s-1]=p.clone(r[s-1]),o[s-2]=p.clone(r[s-2])),t={style:{pointList:o}}}o=t.style.pointList;var V=o.length;i.style.pointList=V==s?o:s>V?o.concat(r.slice(V)):o.slice(0,s),e.addShape(i),i.__animating=!0,e.animate(i.id,"style").when(n,{pointList:r}).during(function(){i.updateControlPoints&&i.updateControlPoints(i.style)}).done(function(){i.__animating=!1}).start(a)}function i(e,t){for(var i=arguments.length,n=2;i>n;n++){var a=arguments[n];e.style[a]=t.style[a]}}function n(e,t,n,a,o){var r=n.style;t||(t={position:n.position,style:{x:r.x,y:"vertical"==n._orient?r.y+r.height:r.y,width:"vertical"==n._orient?r.width:0,height:"vertical"!=n._orient?r.height:0}});var s=r.x,l=r.y,h=r.width,m=r.height,V=[n.position[0],n.position[1]];i(n,t,"x","y","width","height"),n.position=t.position,e.addShape(n),(V[0]!=t.position[0]||V[1]!=t.position[1])&&e.animate(n.id,"").when(a,{position:V}).start(o),n.__animating=!0,e.animate(n.id,"style").when(a,{x:s,y:l,width:h,height:m}).done(function(){n.__animating=!1}).start(o)}function a(e,t,i,n,a){if(!t){var o=i.style.y;t={style:{y:[o[0],o[0],o[0],o[0]]}}}var r=i.style.y;i.style.y=t.style.y,e.addShape(i),i.__animating=!0,e.animate(i.id,"style").when(n,{y:r}).done(function(){i.__animating=!1}).start(a)}function o(e,t,i,n,a){var o=i.style.x,r=i.style.y,s=i.style.r0,l=i.style.r;i.__animating=!0,"r"!=i._animationAdd?(i.style.r0=0,i.style.r=0,i.rotation=[2*Math.PI,o,r],e.addShape(i),e.animate(i.id,"style").when(n,{r0:s,r:l}).done(function(){i.__animating=!1}).start(a),e.animate(i.id,"").when(n,{rotation:[0,o,r]}).start(a)):(i.style.r0=i.style.r,e.addShape(i),e.animate(i.id,"style").when(n,{r0:s}).done(function(){i.__animating=!1}).start(a))}function r(e,t,n,a,o){t||(t="r"!=n._animationAdd?{
+style:{startAngle:n.style.startAngle,endAngle:n.style.startAngle}}:{style:{r0:n.style.r}});var r=n.style.startAngle,s=n.style.endAngle;i(n,t,"startAngle","endAngle"),e.addShape(n),n.__animating=!0,e.animate(n.id,"style").when(a,{startAngle:r,endAngle:s}).done(function(){n.__animating=!1}).start(o)}function s(e,t,n,a,o){t||(t={style:{x:"left"==n.style.textAlign?n.style.x+100:n.style.x-100,y:n.style.y}});var r=n.style.x,s=n.style.y;i(n,t,"x","y"),e.addShape(n),n.__animating=!0,e.animate(n.id,"style").when(a,{x:r,y:s}).done(function(){n.__animating=!1}).start(o)}function l(t,i,n,a,o){var r=e("zrender/shape/Polygon").prototype.getRect(n.style),s=r.x+r.width/2,l=r.y+r.height/2;n.scale=[.1,.1,s,l],t.addShape(n),n.__animating=!0,t.animate(n.id,"").when(a,{scale:[1,1,s,l]}).done(function(){n.__animating=!1}).start(o)}function h(e,t,n,a,o){t||(t={style:{source0:0,source1:n.style.source1>0?360:-360,target0:0,target1:n.style.target1>0?360:-360}});var r=n.style.source0,s=n.style.source1,l=n.style.target0,h=n.style.target1;t.style&&i(n,t,"source0","source1","target0","target1"),e.addShape(n),n.__animating=!0,e.animate(n.id,"style").when(a,{source0:r,source1:s,target0:l,target1:h}).done(function(){n.__animating=!1}).start(o)}function m(e,t,i,n,a){t||(t={style:{angle:i.style.startAngle}});var o=i.style.angle;i.style.angle=t.style.angle,e.addShape(i),i.__animating=!0,e.animate(i.id,"style").when(n,{angle:o}).done(function(){i.__animating=!1}).start(a)}function V(e,t,i,a,o,r){if(i.style._x=i.style.x,i.style._y=i.style.y,i.style._width=i.style.width,i.style._height=i.style.height,t)n(e,t,i,a,o);else{var s=i._x||0,l=i._y||0;i.scale=[.01,.01,s,l],e.addShape(i),i.__animating=!0,e.animate(i.id,"").delay(r).when(a,{scale:[1,1,s,l]}).done(function(){i.__animating=!1}).start(o||"QuinticOut")}}function U(e,t,n,a,o){t||(t={style:{xStart:n.style.xStart,yStart:n.style.yStart,xEnd:n.style.xStart,yEnd:n.style.yStart}});var r=n.style.xStart,s=n.style.xEnd,l=n.style.yStart,h=n.style.yEnd;i(n,t,"xStart","xEnd","yStart","yEnd"),e.addShape(n),n.__animating=!0,e.animate(n.id,"style").when(a,{xStart:r,xEnd:s,yStart:l,yEnd:h}).done(function(){n.__animating=!1}).start(o)}function d(e,t,i,n,a){a=a||"QuinticOut",i.__animating=!0,e.addShape(i);var o=i.style,r=function(){i.__animating=!1},s=o.xStart,l=o.yStart,h=o.xEnd,m=o.yEnd;if(o.curveness>0){i.updatePoints(o);var V={p:0},U=o.cpX1,d=o.cpY1,p=[],u=[],y=c.quadraticSubdivide;e.animation.animate(V).when(n,{p:1}).during(function(){y(s,U,h,V.p,p),y(l,d,m,V.p,u),o.cpX1=p[1],o.cpY1=u[1],o.xEnd=p[2],o.yEnd=u[2],e.modShape(i)}).done(r).start(a)}else e.animate(i.id,"style").when(0,{xEnd:s,yEnd:l}).when(n,{xEnd:h,yEnd:m}).done(r).start(a)}var p=e("zrender/tool/util"),c=e("zrender/tool/curve");return{pointList:t,rectangle:n,candle:a,ring:o,sector:r,text:s,polygon:l,ribbon:h,gaugePointer:m,icon:V,line:U,markline:d}}),i("echarts/util/ecEffect",["require","../util/ecData","zrender/shape/Circle","zrender/shape/Image","zrender/tool/curve","../util/shape/Icon","../util/shape/Symbol","zrender/shape/ShapeBundle","zrender/shape/Polyline","zrender/tool/vector","zrender/tool/env"],function(e){function t(e,t,i,n){var a,r=i.effect,l=r.color||i.style.strokeColor||i.style.color,m=r.shadowColor||l,V=r.scaleSize,U=r.bounceDistance,d="undefined"!=typeof r.shadowBlur?r.shadowBlur:V;"image"!==i.type?(a=new h({zlevel:n,style:{brushType:"stroke",iconType:"droplet"!=i.style.iconType?i.style.iconType:"circle",x:d+1,y:d+1,n:i.style.n,width:i.style._width*V,height:i.style._height*V,lineWidth:1,strokeColor:l,shadowColor:m,shadowBlur:d},draggable:!1,hoverable:!1}),"pin"==i.style.iconType&&(a.style.y+=a.style.height/2*1.5),p&&(a.style.image=e.shapeToImage(a,a.style.width+2*d+2,a.style.height+2*d+2).style.image,a=new s({zlevel:a.zlevel,style:a.style,draggable:!1,hoverable:!1}))):a=new s({zlevel:n,style:i.style,draggable:!1,hoverable:!1}),o.clone(i,a),a.position=i.position,t.push(a),e.addShape(a);var c="image"!==i.type?window.devicePixelRatio||1:1,u=(a.style.width/c-i.style._width)/2;a.style.x=i.style._x-u,a.style.y=i.style._y-u,"pin"==i.style.iconType&&(a.style.y-=i.style.height/2*1.5);var y=100*(r.period+10*Math.random());e.modShape(i.id,{invisible:!0});var g=a.style.x+a.style.width/2/c,b=a.style.y+a.style.height/2/c;"scale"===r.type?(e.modShape(a.id,{scale:[.1,.1,g,b]}),e.animate(a.id,"",r.loop).when(y,{scale:[1,1,g,b]}).done(function(){i.effect.show=!1,e.delShape(a.id)}).start()):e.animate(a.id,"style",r.loop).when(y,{y:a.style.y-U}).when(2*y,{y:a.style.y}).done(function(){i.effect.show=!1,e.delShape(a.id)}).start()}function i(e,t,i,n){var a=i.effect,o=a.color||i.style.strokeColor||i.style.color,r=a.scaleSize,s=a.shadowColor||o,l="undefined"!=typeof a.shadowBlur?a.shadowBlur:2*r,h=window.devicePixelRatio||1,V=new m({zlevel:n,position:i.position,scale:i.scale,style:{pointList:i.style.pointList,iconType:i.style.iconType,color:o,strokeColor:o,shadowColor:s,shadowBlur:l*h,random:!0,brushType:"fill",lineWidth:1,size:i.style.size},draggable:!1,hoverable:!1});t.push(V),e.addShape(V),e.modShape(i.id,{invisible:!0});for(var U=Math.round(100*a.period),d={},p={},c=0;20>c;c++)V.style["randomMap"+c]=0,d={},d["randomMap"+c]=100,p={},p["randomMap"+c]=0,V.style["randomMap"+c]=100*Math.random(),e.animate(V.id,"style",!0).when(U,d).when(2*U,p).when(3*U,d).when(4*U,d).delay(Math.random()*U*c).start()}function n(e,t,i,n,a){var s=i.effect,h=i.style,m=s.color||h.strokeColor||h.color,V=s.shadowColor||h.strokeColor||m,c=h.lineWidth*s.scaleSize,u="undefined"!=typeof s.shadowBlur?s.shadowBlur:c,y=new r({zlevel:n,style:{x:u,y:u,r:c,color:m,shadowColor:V,shadowBlur:u},hoverable:!1}),g=0;if(p&&!a){var n=y.zlevel;y=e.shapeToImage(y,2*(c+u),2*(c+u)),y.zlevel=n,y.hoverable=!1,g=u}a||(o.clone(i,y),y.position=i.position,t.push(y),e.addShape(y));var b=function(){a||(i.effect.show=!1,e.delShape(y.id)),y.effectAnimator=null};if(i instanceof U){for(var f=[0],k=0,x=h.pointList,_=h.controlPointList,L=1;L<x.length;L++){if(_){var W=_[2*(L-1)],X=_[2*(L-1)+1];k+=d.dist(x[L-1],W)+d.dist(W,X)+d.dist(X,x[L])}else k+=d.dist(x[L-1],x[L]);f.push(k)}for(var v={p:0},w=e.animation.animate(v,{loop:s.loop}),L=0;L<f.length;L++)w.when(f[L]*s.period,{p:L});w.during(function(){var t,i,n=Math.floor(v.p);if(n==x.length-1)t=x[n][0],i=x[n][1];else{var o=v.p-n,r=x[n],s=x[n+1];if(_){var h=_[2*n],m=_[2*n+1];t=l.cubicAt(r[0],h[0],m[0],s[0],o),i=l.cubicAt(r[1],h[1],m[1],s[1],o)}else t=(s[0]-r[0])*o+r[0],i=(s[1]-r[1])*o+r[1]}y.style.x=t,y.style.y=i,a||e.modShape(y)}).done(b).start(),w.duration=k*s.period,y.effectAnimator=w}else{var K=h.xStart-g,I=h.yStart-g,J=h.xEnd-g,C=h.yEnd-g;y.style.x=K,y.style.y=I;var S=(J-K)*(J-K)+(C-I)*(C-I),E=Math.round(Math.sqrt(Math.round(S*s.period*s.period)));if(i.style.curveness>0){var F=h.cpX1-g,T=h.cpY1-g;y.effectAnimator=e.animation.animate(y,{loop:s.loop}).when(E,{p:1}).during(function(t,i){y.style.x=l.quadraticAt(K,F,J,i),y.style.y=l.quadraticAt(I,T,C,i),a||e.modShape(y)}).done(b).start()}else y.effectAnimator=e.animation.animate(y.style,{loop:s.loop}).when(E,{x:J,y:C}).during(function(){a||e.modShape(y)}).done(b).start();y.effectAnimator.duration=E}return y}function a(e,t,i,a){var o=new V({style:{shapeList:[]},zlevel:a,hoverable:!1}),r=i.style.shapeList,s=i.effect;o.position=i.position;for(var l=0,h=[],m=0;m<r.length;m++){r[m].effect=s;var U=n(e,null,r[m],a,!0),d=U.effectAnimator;o.style.shapeList.push(U),d.duration>l&&(l=d.duration),0===m&&(o.style.color=U.style.color,o.style.shadowBlur=U.style.shadowBlur,o.style.shadowColor=U.style.shadowColor),h.push(d)}t.push(o),e.addShape(o);var p=function(){for(var e=0;e<h.length;e++)h[e].stop()};if(l){o.__dummy=0;var c=e.animate(o.id,"",s.loop).when(l,{__dummy:1}).during(function(){e.modShape(o)}).done(function(){i.effect.show=!1,e.delShape(o.id)}).start(),u=c.stop;c.stop=function(){p(),u.call(this)}}}var o=e("../util/ecData"),r=e("zrender/shape/Circle"),s=e("zrender/shape/Image"),l=e("zrender/tool/curve"),h=e("../util/shape/Icon"),m=e("../util/shape/Symbol"),V=e("zrender/shape/ShapeBundle"),U=e("zrender/shape/Polyline"),d=e("zrender/tool/vector"),p=e("zrender/tool/env").canvasSupported;return{point:t,largePoint:i,line:n,largeLine:a}}),i("echarts/component/base",["require","../config","../util/ecData","../util/ecQuery","../util/number","zrender/tool/util","zrender/tool/env"],function(e){function t(e,t,a,o,r){this.ecTheme=e,this.messageCenter=t,this.zr=a,this.option=o,this.series=o.series,this.myChart=r,this.component=r.component,this.shapeList=[],this.effectList=[];var s=this;s._onlegendhoverlink=function(e){if(s.legendHoverLink)for(var t,a=e.target,o=s.shapeList.length-1;o>=0;o--)t=s.type==i.CHART_TYPE_PIE||s.type==i.CHART_TYPE_FUNNEL?n.get(s.shapeList[o],"name"):(n.get(s.shapeList[o],"series")||{}).name,t!=a||s.shapeList[o].invisible||s.shapeList[o].__animating||s.zr.addHoverShape(s.shapeList[o])},t&&t.bind(i.EVENT.LEGEND_HOVERLINK,this._onlegendhoverlink)}var i=e("../config"),n=e("../util/ecData"),a=e("../util/ecQuery"),o=e("../util/number"),r=e("zrender/tool/util");return t.prototype={canvasSupported:e("zrender/tool/env").canvasSupported,_getZ:function(e){if(null!=this[e])return this[e];var t=this.ecTheme[this.type];return t&&null!=t[e]?t[e]:(t=i[this.type],t&&null!=t[e]?t[e]:0)},getZlevelBase:function(){return this._getZ("zlevel")},getZBase:function(){return this._getZ("z")},reformOption:function(e){return e=r.merge(r.merge(e||{},r.clone(this.ecTheme[this.type]||{})),r.clone(i[this.type]||{})),this.z=e.z,this.zlevel=e.zlevel,e},reformCssArray:function(e){if(!(e instanceof Array))return[e,e,e,e];switch(e.length+""){case"4":return e;case"3":return[e[0],e[1],e[2],e[1]];case"2":return[e[0],e[1],e[0],e[1]];case"1":return[e[0],e[0],e[0],e[0]];case"0":return[0,0,0,0]}},getShapeById:function(e){for(var t=0,i=this.shapeList.length;i>t;t++)if(this.shapeList[t].id===e)return this.shapeList[t];return null},getFont:function(e){var t=this.getTextStyle(r.clone(e));return t.fontStyle+" "+t.fontWeight+" "+t.fontSize+"px "+t.fontFamily},getTextStyle:function(e){return r.merge(r.merge(e||{},this.ecTheme.textStyle),i.textStyle)},getItemStyleColor:function(e,t,i,n){return"function"==typeof e?e.call(this.myChart,{seriesIndex:t,series:this.series[t],dataIndex:i,data:n}):e},getDataFromOption:function(e,t){return null!=e?null!=e.value?e.value:e:t},subPixelOptimize:function(e,t){return e=t%2===1?Math.floor(e)+.5:Math.round(e)},resize:function(){this.refresh&&this.refresh(),this.clearEffectShape&&this.clearEffectShape(!0);var e=this;setTimeout(function(){e.animationEffect&&e.animationEffect()},200)},clear:function(){this.clearEffectShape&&this.clearEffectShape(),this.zr&&this.zr.delShape(this.shapeList),this.shapeList=[]},dispose:function(){this.onbeforDispose&&this.onbeforDispose(),this.clear(),this.shapeList=null,this.effectList=null,this.messageCenter&&this.messageCenter.unbind(i.EVENT.LEGEND_HOVERLINK,this._onlegendhoverlink),this.onafterDispose&&this.onafterDispose()},query:a.query,deepQuery:a.deepQuery,deepMerge:a.deepMerge,parsePercent:o.parsePercent,parseCenter:o.parseCenter,parseRadius:o.parseRadius,numAddCommas:o.addCommas,getPrecision:o.getPrecision},t}),i("echarts/layout/EdgeBundling",["require","../data/KDTree","zrender/tool/vector"],function(e){function t(e,t){e=e.array,t=t.array;var i=t[0]-e[0],n=t[1]-e[1],a=t[2]-e[2],o=t[3]-e[3];return i*i+n*n+a*a+o*o}function i(e){this.points=[e.mp0,e.mp1],this.group=e}function n(e){var t=e.points;t[0][1]<t[1][1]||e instanceof i?(this.array=[t[0][0],t[0][1],t[1][0],t[1][1]],this._startPoint=t[0],this._endPoint=t[1]):(this.array=[t[1][0],t[1][1],t[0][0],t[0][1]],this._startPoint=t[1],this._endPoint=t[0]),this.ink=m(t[0],t[1]),this.edge=e,this.group=null}function a(){this.edgeList=[],this.mp0=l(),this.mp1=l(),this.ink=0}function o(){this.maxNearestEdge=6,this.maxTurningAngle=Math.PI/4,this.maxIteration=20}var r=e("../data/KDTree"),s=e("zrender/tool/vector"),l=s.create,h=s.distSquare,m=s.dist,V=s.copy,U=s.clone;return n.prototype.getStartPoint=function(){return this._startPoint},n.prototype.getEndPoint=function(){return this._endPoint},a.prototype.addEdge=function(e){e.group=this,this.edgeList.push(e)},a.prototype.removeEdge=function(e){e.group=null,this.edgeList.splice(this.edgeList.indexOf(e),1)},o.prototype={constructor:o,run:function(e){function t(e,t){return h(e,t)<1e-10}function n(e,i){for(var n=[],a=0,o=0;o<e.length;o++)a>0&&t(e[o],n[a-1])||(n[a++]=U(e[o]));return i[0]&&!t(n[0],i[0])&&(n=n.reverse()),n}for(var a=this._iterate(e),o=0;o++<this.maxIteration;){for(var r=[],s=0;s<a.groups.length;s++)r.push(new i(a.groups[s]));var l=this._iterate(r);if(l.savedInk<=0)break;a=l}var m=[],V=function(e,t){for(var a,o=0;o<e.length;o++){var r=e[o];if(r.edgeList[0]&&r.edgeList[0].edge instanceof i){for(var s=[],l=0;l<r.edgeList.length;l++)s.push(r.edgeList[l].edge.group);a=t?t.slice():[],a.unshift(r.mp0),a.push(r.mp1),V(s,a)}else for(var l=0;l<r.edgeList.length;l++){var h=r.edgeList[l];a=t?t.slice():[],a.unshift(r.mp0),a.push(r.mp1),a.unshift(h.getStartPoint()),a.push(h.getEndPoint()),m.push({points:n(a,h.edge.points),rawEdge:h.edge})}}};return V(a.groups),m},_iterate:function(e){for(var i=[],o=[],s=0,h=0;h<e.length;h++){var m=new n(e[h]);i.push(m)}for(var U=new r(i,4),d=[],p=l(),c=l(),u=0,y=l(),g=l(),b=0,h=0;h<i.length;h++){var m=i[h];if(!m.group){U.nearestN(m,this.maxNearestEdge,t,d);for(var f=0,k=null,x=null,_=0;_<d.length;_++){var L=d[_],W=0;L.group?L.group!==x&&(x=L.group,u=this._calculateGroupEdgeInk(L.group,m,p,c),W=L.group.ink+m.ink-u):(u=this._calculateEdgeEdgeInk(m,L,p,c),W=L.ink+m.ink-u),W>f&&(f=W,k=L,V(g,c),V(y,p),b=u)}if(k){s+=f;var X;k.group||(X=new a,o.push(X),X.addEdge(k)),X=k.group,V(X.mp0,y),V(X.mp1,g),X.ink=b,k.group.addEdge(m)}else{var X=new a;o.push(X),V(X.mp0,m.getStartPoint()),V(X.mp1,m.getEndPoint()),X.ink=m.ink,X.addEdge(m)}}}return{groups:o,edges:i,savedInk:s}},_calculateEdgeEdgeInk:function(){var e=[],t=[];return function(i,n,a,o){e[0]=i.getStartPoint(),e[1]=n.getStartPoint(),t[0]=i.getEndPoint(),t[1]=n.getEndPoint(),this._calculateMeetPoints(e,t,a,o);var r=m(e[0],a)+m(a,o)+m(o,t[0])+m(e[1],a)+m(o,t[1]);return r}}(),_calculateGroupEdgeInk:function(e,t,i,n){for(var a=[],o=[],r=0;r<e.edgeList.length;r++){var s=e.edgeList[r];a.push(s.getStartPoint()),o.push(s.getEndPoint())}a.push(t.getStartPoint()),o.push(t.getEndPoint()),this._calculateMeetPoints(a,o,i,n);for(var l=m(i,n),r=0;r<a.length;r++)l+=m(a[r],i)+m(o[r],n);return l},_calculateMeetPoints:function(){var e=l(),t=l();return function(i,n,a,o){s.set(e,0,0),s.set(t,0,0);for(var r=i.length,l=0;r>l;l++)s.add(e,e,i[l]);s.scale(e,e,1/r),r=n.length;for(var l=0;r>l;l++)s.add(t,t,n[l]);s.scale(t,t,1/r),this._limitTurningAngle(i,e,t,a),this._limitTurningAngle(n,t,e,o)}}(),_limitTurningAngle:function(){var e=l(),t=l(),i=l(),n=l();return function(a,o,r,l){var V=Math.cos(this.maxTurningAngle),U=Math.tan(this.maxTurningAngle);s.sub(e,o,r),s.normalize(e,e),s.copy(l,o);for(var d=0,p=0;p<a.length;p++){var c=a[p];s.sub(t,c,o);var u=s.len(t);s.scale(t,t,1/u);var y=s.dot(t,e);if(V>y){s.scaleAndAdd(i,o,e,u*y);var g=m(i,c),b=g/U;s.scaleAndAdd(n,i,e,-b);var f=h(n,o);f>d&&(d=f,s.copy(l,n))}}}}()},o}),i("zrender/shape/Star",["require","../tool/math","./Base","../tool/util"],function(e){var t=e("../tool/math"),i=t.sin,n=t.cos,a=Math.PI,o=e("./Base"),r=function(e){o.call(this,e)};return r.prototype={type:"star",buildPath:function(e,t){var o=t.n;if(o&&!(2>o)){var r=t.x,s=t.y,l=t.r,h=t.r0;null==h&&(h=o>4?l*n(2*a/o)/n(a/o):l/3);var m=a/o,V=-a/2,U=r+l*n(V),d=s+l*i(V);V+=m;var p=t.pointList=[];p.push([U,d]);for(var c,u=0,y=2*o-1;y>u;u++)c=u%2===0?h:l,p.push([r+c*n(V),s+c*i(V)]),V+=m;p.push([U,d]),e.moveTo(p[0][0],p[0][1]);for(var u=0;u<p.length;u++)e.lineTo(p[u][0],p[u][1]);e.closePath()}},getRect:function(e){if(e.__rect)return e.__rect;var t;return t="stroke"==e.brushType||"fill"==e.brushType?e.lineWidth||1:0,e.__rect={x:Math.round(e.x-e.r-t/2),y:Math.round(e.y-e.r-t/2),width:2*e.r+t,height:2*e.r+t},e.__rect}},e("../tool/util").inherits(r,o),r}),i("zrender/shape/Heart",["require","./Base","./util/PathProxy","../tool/area","../tool/util"],function(e){"use strict";var t=e("./Base"),i=e("./util/PathProxy"),n=e("../tool/area"),a=function(e){t.call(this,e),this._pathProxy=new i};return a.prototype={type:"heart",buildPath:function(e,t){var n=this._pathProxy||new i;n.begin(e),n.moveTo(t.x,t.y),n.bezierCurveTo(t.x+t.a/2,t.y-2*t.b/3,t.x+2*t.a,t.y+t.b/3,t.x,t.y+t.b),n.bezierCurveTo(t.x-2*t.a,t.y+t.b/3,t.x-t.a/2,t.y-2*t.b/3,t.x,t.y),n.closePath()},getRect:function(e){return e.__rect?e.__rect:(this._pathProxy.isEmpty()||this.buildPath(null,e),this._pathProxy.fastBoundingRect())},isCover:function(e,t){var i=this.transformCoordToLocal(e,t);return e=i[0],t=i[1],this.isCoverRect(e,t)?n.isInsidePath(this._pathProxy.pathCommands,this.style.lineWidth,this.style.brushType,e,t):void 0}},e("../tool/util").inherits(a,t),a}),i("zrender/shape/Droplet",["require","./Base","./util/PathProxy","../tool/area","../tool/util"],function(e){"use strict";var t=e("./Base"),i=e("./util/PathProxy"),n=e("../tool/area"),a=function(e){t.call(this,e),this._pathProxy=new i};return a.prototype={type:"droplet",buildPath:function(e,t){var n=this._pathProxy||new i;n.begin(e),n.moveTo(t.x,t.y+t.a),n.bezierCurveTo(t.x+t.a,t.y+t.a,t.x+3*t.a/2,t.y-t.a/3,t.x,t.y-t.b),n.bezierCurveTo(t.x-3*t.a/2,t.y-t.a/3,t.x-t.a,t.y+t.a,t.x,t.y+t.a),n.closePath()},getRect:function(e){return e.__rect?e.__rect:(this._pathProxy.isEmpty()||this.buildPath(null,e),this._pathProxy.fastBoundingRect())},isCover:function(e,t){var i=this.transformCoordToLocal(e,t);return e=i[0],t=i[1],this.isCoverRect(e,t)?n.isInsidePath(this._pathProxy.pathCommands,this.style.lineWidth,this.style.brushType,e,t):void 0}},e("../tool/util").inherits(a,t),a}),i("zrender/tool/math",[],function(){function e(e,t){return Math.sin(t?e*a:e)}function t(e,t){return Math.cos(t?e*a:e)}function i(e){return e*a}function n(e){return e/a}var a=Math.PI/180;return{sin:e,cos:t,degreeToRadian:i,radianToDegree:n}}),i("zrender/shape/util/PathProxy",["require","../../tool/vector"],function(e){var t=e("../../tool/vector"),i=function(e,t){this.command=e,this.points=t||null},n=function(){this.pathCommands=[],this._ctx=null,this._min=[],this._max=[]};return n.prototype.fastBoundingRect=function(){var e=this._min,i=this._max;e[0]=e[1]=1/0,i[0]=i[1]=-(1/0);for(var n=0;n<this.pathCommands.length;n++){var a=this.pathCommands[n],o=a.points;switch(a.command){case"M":t.min(e,e,o),t.max(i,i,o);break;case"L":t.min(e,e,o),t.max(i,i,o);break;case"C":for(var r=0;6>r;r+=2)e[0]=Math.min(e[0],e[0],o[r]),e[1]=Math.min(e[1],e[1],o[r+1]),i[0]=Math.max(i[0],i[0],o[r]),i[1]=Math.max(i[1],i[1],o[r+1]);break;case"Q":for(var r=0;4>r;r+=2)e[0]=Math.min(e[0],e[0],o[r]),e[1]=Math.min(e[1],e[1],o[r+1]),i[0]=Math.max(i[0],i[0],o[r]),i[1]=Math.max(i[1],i[1],o[r+1]);break;case"A":var s=o[0],l=o[1],h=o[2],m=o[3];e[0]=Math.min(e[0],e[0],s-h),e[1]=Math.min(e[1],e[1],l-m),i[0]=Math.max(i[0],i[0],s+h),i[1]=Math.max(i[1],i[1],l+m)}}return{x:e[0],y:e[1],width:i[0]-e[0],height:i[1]-e[1]}},n.prototype.begin=function(e){return this._ctx=e||null,this.pathCommands.length=0,this},n.prototype.moveTo=function(e,t){return this.pathCommands.push(new i("M",[e,t])),this._ctx&&this._ctx.moveTo(e,t),this},n.prototype.lineTo=function(e,t){return this.pathCommands.push(new i("L",[e,t])),this._ctx&&this._ctx.lineTo(e,t),this},n.prototype.bezierCurveTo=function(e,t,n,a,o,r){return this.pathCommands.push(new i("C",[e,t,n,a,o,r])),this._ctx&&this._ctx.bezierCurveTo(e,t,n,a,o,r),this},n.prototype.quadraticCurveTo=function(e,t,n,a){return this.pathCommands.push(new i("Q",[e,t,n,a])),this._ctx&&this._ctx.quadraticCurveTo(e,t,n,a),this},n.prototype.arc=function(e,t,n,a,o,r){return this.pathCommands.push(new i("A",[e,t,n,n,a,o-a,0,r?0:1])),this._ctx&&this._ctx.arc(e,t,n,a,o,r),this},n.prototype.arcTo=function(e,t,i,n,a){return this._ctx&&this._ctx.arcTo(e,t,i,n,a),this},n.prototype.rect=function(e,t,i,n){return this._ctx&&this._ctx.rect(e,t,i,n),this},n.prototype.closePath=function(){return this.pathCommands.push(new i("z")),this._ctx&&this._ctx.closePath(),this},n.prototype.isEmpty=function(){return 0===this.pathCommands.length},n.PathSegment=i,n}),i("zrender/shape/Line",["require","./Base","./util/dashedLineTo","../tool/util"],function(e){var t=e("./Base"),i=e("./util/dashedLineTo"),n=function(e){this.brushTypeOnly="stroke",this.textPosition="end",t.call(this,e)};return n.prototype={type:"line",buildPath:function(e,t){if(t.lineType&&"solid"!=t.lineType){if("dashed"==t.lineType||"dotted"==t.lineType){var n=(t.lineWidth||1)*("dashed"==t.lineType?5:1);i(e,t.xStart,t.yStart,t.xEnd,t.yEnd,n)}}else e.moveTo(t.xStart,t.yStart),e.lineTo(t.xEnd,t.yEnd)},getRect:function(e){if(e.__rect)return e.__rect;var t=e.lineWidth||1;return e.__rect={x:Math.min(e.xStart,e.xEnd)-t,y:Math.min(e.yStart,e.yEnd)-t,width:Math.abs(e.xStart-e.xEnd)+t,height:Math.abs(e.yStart-e.yEnd)+t},e.__rect}},e("../tool/util").inherits(n,t),n}),i("zrender/shape/BezierCurve",["require","./Base","../tool/util"],function(e){"use strict";var t=e("./Base"),i=function(e){this.brushTypeOnly="stroke",this.textPosition="end",t.call(this,e)};return i.prototype={type:"bezier-curve",buildPath:function(e,t){e.moveTo(t.xStart,t.yStart),"undefined"!=typeof t.cpX2&&"undefined"!=typeof t.cpY2?e.bezierCurveTo(t.cpX1,t.cpY1,t.cpX2,t.cpY2,t.xEnd,t.yEnd):e.quadraticCurveTo(t.cpX1,t.cpY1,t.xEnd,t.yEnd)},getRect:function(e){if(e.__rect)return e.__rect;var t=Math.min(e.xStart,e.xEnd,e.cpX1),i=Math.min(e.yStart,e.yEnd,e.cpY1),n=Math.max(e.xStart,e.xEnd,e.cpX1),a=Math.max(e.yStart,e.yEnd,e.cpY1),o=e.cpX2,r=e.cpY2;"undefined"!=typeof o&&"undefined"!=typeof r&&(t=Math.min(t,o),i=Math.min(i,r),n=Math.max(n,o),a=Math.max(a,r));var s=e.lineWidth||1;return e.__rect={x:t-s,y:i-s,width:n-t+s,height:a-i+s},e.__rect}},e("../tool/util").inherits(i,t),i}),i("zrender/shape/util/dashedLineTo",[],function(){var e=[5,5];return function(t,i,n,a,o,r){if(t.setLineDash)return e[0]=e[1]=r,t.setLineDash(e),t.moveTo(i,n),void t.lineTo(a,o);r="number"!=typeof r?5:r;var s=a-i,l=o-n,h=Math.floor(Math.sqrt(s*s+l*l)/r);s/=h,l/=h;for(var m=!0,V=0;h>V;++V)m?t.moveTo(i,n):t.lineTo(i,n),m=!m,i+=s,n+=l;t.lineTo(a,o)}}),i("zrender/shape/Polygon",["require","./Base","./util/smoothSpline","./util/smoothBezier","./util/dashedLineTo","../tool/util"],function(e){var t=e("./Base"),i=e("./util/smoothSpline"),n=e("./util/smoothBezier"),a=e("./util/dashedLineTo"),o=function(e){t.call(this,e)};return o.prototype={type:"polygon",buildPath:function(e,t){var o=t.pointList;if(!(o.length<2)){if(t.smooth&&"spline"!==t.smooth){var r=n(o,t.smooth,!0,t.smoothConstraint);e.moveTo(o[0][0],o[0][1]);for(var s,l,h,m=o.length,V=0;m>V;V++)s=r[2*V],l=r[2*V+1],h=o[(V+1)%m],e.bezierCurveTo(s[0],s[1],l[0],l[1],h[0],h[1])}else if("spline"===t.smooth&&(o=i(o,!0)),t.lineType&&"solid"!=t.lineType){if("dashed"==t.lineType||"dotted"==t.lineType){var U=t._dashLength||(t.lineWidth||1)*("dashed"==t.lineType?5:1);t._dashLength=U,e.moveTo(o[0][0],o[0][1]);for(var V=1,d=o.length;d>V;V++)a(e,o[V-1][0],o[V-1][1],o[V][0],o[V][1],U);a(e,o[o.length-1][0],o[o.length-1][1],o[0][0],o[0][1],U)}}else{e.moveTo(o[0][0],o[0][1]);for(var V=1,d=o.length;d>V;V++)e.lineTo(o[V][0],o[V][1]);e.lineTo(o[0][0],o[0][1])}e.closePath()}},getRect:function(e){if(e.__rect)return e.__rect;for(var t=Number.MAX_VALUE,i=Number.MIN_VALUE,n=Number.MAX_VALUE,a=Number.MIN_VALUE,o=e.pointList,r=0,s=o.length;s>r;r++)o[r][0]<t&&(t=o[r][0]),o[r][0]>i&&(i=o[r][0]),o[r][1]<n&&(n=o[r][1]),o[r][1]>a&&(a=o[r][1]);var l;return l="stroke"==e.brushType||"fill"==e.brushType?e.lineWidth||1:0,e.__rect={x:Math.round(t-l/2),y:Math.round(n-l/2),width:i-t+l,height:a-n+l},e.__rect}},e("../tool/util").inherits(o,t),o}),i("echarts/util/shape/normalIsCover",[],function(){return function(e,t){var i=this.transformCoordToLocal(e,t);return e=i[0],t=i[1],this.isCoverRect(e,t)}}),i("zrender/shape/util/smoothSpline",["require","../../tool/vector"],function(e){function t(e,t,i,n,a,o,r){var s=.5*(i-e),l=.5*(n-t);return(2*(t-i)+s+l)*r+(-3*(t-i)-2*s-l)*o+s*a+t}var i=e("../../tool/vector");return function(e,n){for(var a=e.length,o=[],r=0,s=1;a>s;s++)r+=i.distance(e[s-1],e[s]);var l=r/5;l=a>l?a:l;for(var s=0;l>s;s++){var h,m,V,U=s/(l-1)*(n?a:a-1),d=Math.floor(U),p=U-d,c=e[d%a];n?(h=e[(d-1+a)%a],m=e[(d+1)%a],V=e[(d+2)%a]):(h=e[0===d?d:d-1],m=e[d>a-2?a-1:d+1],V=e[d>a-3?a-1:d+2]);var u=p*p,y=p*u;o.push([t(h[0],c[0],m[0],V[0],p,u,y),t(h[1],c[1],m[1],V[1],p,u,y)])}return o}}),i("zrender/shape/util/smoothBezier",["require","../../tool/vector"],function(e){var t=e("../../tool/vector");return function(e,i,n,a){var o,r,s,l,h=[],m=[],V=[],U=[],d=!!a;if(d){s=[1/0,1/0],l=[-(1/0),-(1/0)];for(var p=0,c=e.length;c>p;p++)t.min(s,s,e[p]),t.max(l,l,e[p]);t.min(s,s,a[0]),t.max(l,l,a[1])}for(var p=0,c=e.length;c>p;p++){var o,r,u=e[p];if(n)o=e[p?p-1:c-1],r=e[(p+1)%c];else{if(0===p||p===c-1){h.push(t.clone(e[p]));continue}o=e[p-1],r=e[p+1]}t.sub(m,r,o),t.scale(m,m,i);var y=t.distance(u,o),g=t.distance(u,r),b=y+g;0!==b&&(y/=b,g/=b),t.scale(V,m,-y),t.scale(U,m,g);var f=t.add([],u,V),k=t.add([],u,U);d&&(t.max(f,f,s),t.min(f,f,l),t.max(k,k,s),t.min(k,k,l)),h.push(f),h.push(k)}return n&&h.push(t.clone(h.shift())),h}}),i("echarts/util/ecQuery",["require","zrender/tool/util"],function(e){function t(e,t){if("undefined"!=typeof e){if(!t)return e;t=t.split(".");for(var i=t.length,n=0;i>n;){if(e=e[t[n]],"undefined"==typeof e)return;n++}return e}}function i(e,i){for(var n,a=0,o=e.length;o>a;a++)if(n=t(e[a],i),"undefined"!=typeof n)return n}function n(e,i){for(var n,o=e.length;o--;){var r=t(e[o],i);"undefined"!=typeof r&&("undefined"==typeof n?n=a.clone(r):a.merge(n,r,!0))}return n}var a=e("zrender/tool/util");return{query:t,deepQuery:i,deepMerge:n}}),i("echarts/util/number",[],function(){function e(e){return e.replace(/^\s+/,"").replace(/\s+$/,"")}function t(t,i){return"string"==typeof t?e(t).match(/%$/)?parseFloat(t)/100*i:parseFloat(t):t}function i(e,i){return[t(i[0],e.getWidth()),t(i[1],e.getHeight())]}function n(e,i){i instanceof Array||(i=[0,i]);var n=Math.min(e.getWidth(),e.getHeight())/2;return[t(i[0],n),t(i[1],n)]}function a(e){return isNaN(e)?"-":(e=(e+"").split("."),e[0].replace(/(\d{1,3})(?=(?:\d{3})+(?!\d))/g,"$1,")+(e.length>1?"."+e[1]:""))}function o(e){for(var t=1,i=0;Math.round(e*t)/t!==e;)t*=10,i++;return i}return{parsePercent:t,parseCenter:i,parseRadius:n,addCommas:a,getPrecision:o}}),i("echarts/data/KDTree",["require","./quickSelect"],function(e){function t(e,t){this.left=null,this.right=null,this.axis=e,this.data=t}var i=e("./quickSelect"),n=function(e,t){e.length&&(t||(t=e[0].array.length),this.dimension=t,this.root=this._buildTree(e,0,e.length-1,0),this._stack=[],this._nearstNList=[])};return n.prototype._buildTree=function(e,n,a,o){if(n>a)return null;var r=Math.floor((n+a)/2);r=i(e,n,a,r,function(e,t){return e.array[o]-t.array[o]});var s=e[r],l=new t(o,s);return o=(o+1)%this.dimension,a>n&&(l.left=this._buildTree(e,n,r-1,o),l.right=this._buildTree(e,r+1,a,o)),l},n.prototype.nearest=function(e,t){var i=this.root,n=this._stack,a=0,o=1/0,r=null;for(i.data!==e&&(o=t(i.data,e),r=i),e.array[i.axis]<i.data.array[i.axis]?(i.right&&(n[a++]=i.right),i.left&&(n[a++]=i.left)):(i.left&&(n[a++]=i.left),i.right&&(n[a++]=i.right));a--;){i=n[a];var s=e.array[i.axis]-i.data.array[i.axis],l=0>s,h=!1;s*=s,o>s&&(s=t(i.data,e),o>s&&i.data!==e&&(o=s,r=i),h=!0),l?(h&&i.right&&(n[a++]=i.right),i.left&&(n[a++]=i.left)):(h&&i.left&&(n[a++]=i.left),i.right&&(n[a++]=i.right))}return r.data},n.prototype._addNearest=function(e,t,i){for(var n=this._nearstNList,a=e-1;a>0&&!(t>=n[a-1].dist);a--)n[a].dist=n[a-1].dist,n[a].node=n[a-1].node;n[a].dist=t,n[a].node=i},n.prototype.nearestN=function(e,t,i,n){if(0>=t)return n.length=0,n;for(var a=this.root,o=this._stack,r=0,s=this._nearstNList,l=0;t>l;l++)s[l]||(s[l]={}),s[l].dist=0,s[l].node=null;var h=i(a.data,e),m=0;for(a.data!==e&&(m++,this._addNearest(m,h,a)),e.array[a.axis]<a.data.array[a.axis]?(a.right&&(o[r++]=a.right),a.left&&(o[r++]=a.left)):(a.left&&(o[r++]=a.left),a.right&&(o[r++]=a.right));r--;){a=o[r];var h=e.array[a.axis]-a.data.array[a.axis],V=0>h,U=!1;h*=h,(t>m||h<s[m-1].dist)&&(h=i(a.data,e),(t>m||h<s[m-1].dist)&&a.data!==e&&(t>m&&m++,this._addNearest(m,h,a)),U=!0),V?(U&&a.right&&(o[r++]=a.right),a.left&&(o[r++]=a.left)):(U&&a.left&&(o[r++]=a.left),a.right&&(o[r++]=a.right))}for(var l=0;m>l;l++)n[l]=s[l].node.data;return n.length=m,n},n}),i("echarts/data/quickSelect",["require"],function(){function e(e,t){return e-t}function t(e,t,i){var n=e[t];e[t]=e[i],e[i]=n}function i(e,i,n,a,o){for(var r=i;n>i;){var r=Math.round((n+i)/2),s=e[r];t(e,r,n),r=i;for(var l=i;n-1>=l;l++)o(s,e[l])>=0&&(t(e,l,r),r++);if(t(e,n,r),r===a)return r;a>r?i=r+1:n=r-1}return i}function n(t,n,a,o,r){return arguments.length<=3&&(o=n,r=2==arguments.length?e:a,n=0,a=t.length-1),i(t,n,a,o,r)}return n}),i("echarts/component/dataView",["require","./base","../config","zrender/tool/util","../component"],function(e){function t(e,t,n,a,o){i.call(this,e,t,n,a,o),this.dom=o.dom,this._tDom=document.createElement("div"),this._textArea=document.createElement("textArea"),this._buttonRefresh=document.createElement("button"),this._buttonRefresh.setAttribute("type","button"),this._buttonClose=document.createElement("button"),this._buttonClose.setAttribute("type","button"),this._hasShow=!1,this._zrHeight=n.getHeight(),this._zrWidth=n.getWidth(),this._tDom.className="echarts-dataview",this.hide(),this.dom.firstChild.appendChild(this._tDom),window.addEventListener?(this._tDom.addEventListener("click",this._stop),this._tDom.addEventListener("mousewheel",this._stop),this._tDom.addEventListener("mousemove",this._stop),this._tDom.addEventListener("mousedown",this._stop),this._tDom.addEventListener("mouseup",this._stop),this._tDom.addEventListener("touchstart",this._stop),this._tDom.addEventListener("touchmove",this._stop),this._tDom.addEventListener("touchend",this._stop)):(this._tDom.attachEvent("onclick",this._stop),this._tDom.attachEvent("onmousewheel",this._stop),this._tDom.attachEvent("onmousemove",this._stop),this._tDom.attachEvent("onmousedown",this._stop),this._tDom.attachEvent("onmouseup",this._stop))}var i=e("./base"),n=e("../config"),a=e("zrender/tool/util");return t.prototype={type:n.COMPONENT_TYPE_DATAVIEW,_lang:["Data View","close","refresh"],_gCssText:"position:absolute;display:block;overflow:hidden;transition:height 0.8s,background-color 1s;-moz-transition:height 0.8s,background-color 1s;-webkit-transition:height 0.8s,background-color 1s;-o-transition:height 0.8s,background-color 1s;z-index:1;left:0;top:0;",hide:function(){this._sizeCssText="width:"+this._zrWidth+"px;height:0px;background-color:#f0ffff;",this._tDom.style.cssText=this._gCssText+this._sizeCssText},show:function(e){this._hasShow=!0;var t=this.query(this.option,"toolbox.feature.dataView.lang")||this._lang;this.option=e,this._tDom.innerHTML='<p style="padding:8px 0;margin:0 0 10px 0;border-bottom:1px solid #eee">'+(t[0]||this._lang[0])+"</p>";var i=this.query(this.option,"toolbox.feature.dataView.optionToContent");"function"!=typeof i?this._textArea.value=this._optionToContent():(this._textArea=document.createElement("div"),this._textArea.innerHTML=i(this.option)),this._textArea.style.cssText="display:block;margin:0 0 8px 0;padding:4px 6px;overflow:auto;width:100%;height:"+(this._zrHeight-100)+"px;",this._tDom.appendChild(this._textArea),this._buttonClose.style.cssText="float:right;padding:1px 6px;",this._buttonClose.innerHTML=t[1]||this._lang[1];var n=this;this._buttonClose.onclick=function(){n.hide()},this._tDom.appendChild(this._buttonClose),this.query(this.option,"toolbox.feature.dataView.readOnly")===!1?(this._buttonRefresh.style.cssText="float:right;margin-right:10px;padding:1px 6px;",this._buttonRefresh.innerHTML=t[2]||this._lang[2],this._buttonRefresh.onclick=function(){n._save()},this._textArea.readOnly=!1,this._textArea.style.cursor="default"):(this._buttonRefresh.style.cssText="display:none",
+this._textArea.readOnly=!0,this._textArea.style.cursor="text"),this._tDom.appendChild(this._buttonRefresh),this._sizeCssText="width:"+this._zrWidth+"px;height:"+this._zrHeight+"px;background-color:#fff;",this._tDom.style.cssText=this._gCssText+this._sizeCssText},_optionToContent:function(){var e,t,i,a,o,r,s=[],l="";if(this.option.xAxis)for(s=this.option.xAxis instanceof Array?this.option.xAxis:[this.option.xAxis],e=0,a=s.length;a>e;e++)if("category"==(s[e].type||"category")){for(r=[],t=0,i=s[e].data.length;i>t;t++)r.push(this.getDataFromOption(s[e].data[t]));l+=r.join(", ")+"\n\n"}if(this.option.yAxis)for(s=this.option.yAxis instanceof Array?this.option.yAxis:[this.option.yAxis],e=0,a=s.length;a>e;e++)if("category"==s[e].type){for(r=[],t=0,i=s[e].data.length;i>t;t++)r.push(this.getDataFromOption(s[e].data[t]));l+=r.join(", ")+"\n\n"}var h,m=this.option.series;for(e=0,a=m.length;a>e;e++){for(r=[],t=0,i=m[e].data.length;i>t;t++)o=m[e].data[t],h=m[e].type==n.CHART_TYPE_PIE||m[e].type==n.CHART_TYPE_MAP?(o.name||"-")+":":"",m[e].type==n.CHART_TYPE_SCATTER&&(o=this.getDataFromOption(o).join(", ")),r.push(h+this.getDataFromOption(o));l+=(m[e].name||"-")+" : \n",l+=r.join(m[e].type==n.CHART_TYPE_SCATTER?"\n":", "),l+="\n\n"}return l},_save:function(){var e=this.query(this.option,"toolbox.feature.dataView.contentToOption");if("function"!=typeof e){for(var t=this._textArea.value.split("\n"),i=[],a=0,o=t.length;o>a;a++)t[a]=this._trim(t[a]),""!==t[a]&&i.push(t[a]);this._contentToOption(i)}else e(this._textArea,this.option);this.hide();var r=this;setTimeout(function(){r.messageCenter&&r.messageCenter.dispatch(n.EVENT.DATA_VIEW_CHANGED,null,{option:r.option},r.myChart)},r.canvasSupported?800:100)},_contentToOption:function(e){var t,i,a,o,r,s,l,h=[],m=0;if(this.option.xAxis)for(h=this.option.xAxis instanceof Array?this.option.xAxis:[this.option.xAxis],t=0,o=h.length;o>t;t++)if("category"==(h[t].type||"category")){for(s=e[m].split(","),i=0,a=h[t].data.length;a>i;i++)l=this._trim(s[i]||""),r=h[t].data[i],"undefined"!=typeof h[t].data[i].value?h[t].data[i].value=l:h[t].data[i]=l;m++}if(this.option.yAxis)for(h=this.option.yAxis instanceof Array?this.option.yAxis:[this.option.yAxis],t=0,o=h.length;o>t;t++)if("category"==h[t].type){for(s=e[m].split(","),i=0,a=h[t].data.length;a>i;i++)l=this._trim(s[i]||""),r=h[t].data[i],"undefined"!=typeof h[t].data[i].value?h[t].data[i].value=l:h[t].data[i]=l;m++}var V=this.option.series;for(t=0,o=V.length;o>t;t++)if(m++,V[t].type==n.CHART_TYPE_SCATTER)for(var i=0,a=V[t].data.length;a>i;i++)s=e[m],l=s.replace(" ","").split(","),"undefined"!=typeof V[t].data[i].value?V[t].data[i].value=l:V[t].data[i]=l,m++;else{s=e[m].split(",");for(var i=0,a=V[t].data.length;a>i;i++)l=(s[i]||"").replace(/.*:/,""),l=this._trim(l),l="-"!=l&&""!==l?l-0:"-","undefined"!=typeof V[t].data[i].value?V[t].data[i].value=l:V[t].data[i]=l;m++}},_trim:function(e){var t=new RegExp("(^[\\s\\t\\xa0\\u3000]+)|([\\u3000\\xa0\\s\\t]+$)","g");return e.replace(t,"")},_stop:function(e){e=e||window.event,e.stopPropagation?e.stopPropagation():e.cancelBubble=!0},resize:function(){this._zrHeight=this.zr.getHeight(),this._zrWidth=this.zr.getWidth(),this._tDom.offsetHeight>10&&(this._sizeCssText="width:"+this._zrWidth+"px;height:"+this._zrHeight+"px;background-color:#fff;",this._tDom.style.cssText=this._gCssText+this._sizeCssText,this._textArea.style.cssText="display:block;margin:0 0 8px 0;padding:4px 6px;overflow:auto;width:100%;height:"+(this._zrHeight-100)+"px;")},dispose:function(){window.removeEventListener?(this._tDom.removeEventListener("click",this._stop),this._tDom.removeEventListener("mousewheel",this._stop),this._tDom.removeEventListener("mousemove",this._stop),this._tDom.removeEventListener("mousedown",this._stop),this._tDom.removeEventListener("mouseup",this._stop),this._tDom.removeEventListener("touchstart",this._stop),this._tDom.removeEventListener("touchmove",this._stop),this._tDom.removeEventListener("touchend",this._stop)):(this._tDom.detachEvent("onclick",this._stop),this._tDom.detachEvent("onmousewheel",this._stop),this._tDom.detachEvent("onmousemove",this._stop),this._tDom.detachEvent("onmousedown",this._stop),this._tDom.detachEvent("onmouseup",this._stop)),this._buttonRefresh.onclick=null,this._buttonClose.onclick=null,this._hasShow&&(this._tDom.removeChild(this._textArea),this._tDom.removeChild(this._buttonRefresh),this._tDom.removeChild(this._buttonClose)),this._textArea=null,this._buttonRefresh=null,this._buttonClose=null,this.dom.firstChild.removeChild(this._tDom),this._tDom=null}},a.inherits(t,i),e("../component").define("dataView",t),t}),i("echarts/util/shape/Cross",["require","zrender/shape/Base","zrender/shape/Line","zrender/tool/util","./normalIsCover"],function(e){function t(e){i.call(this,e)}var i=e("zrender/shape/Base"),n=e("zrender/shape/Line"),a=e("zrender/tool/util");return t.prototype={type:"cross",buildPath:function(e,t){var i=t.rect;t.xStart=i.x,t.xEnd=i.x+i.width,t.yStart=t.yEnd=t.y,n.prototype.buildPath(e,t),t.xStart=t.xEnd=t.x,t.yStart=i.y,t.yEnd=i.y+i.height,n.prototype.buildPath(e,t)},getRect:function(e){return e.rect},isCover:e("./normalIsCover")},a.inherits(t,i),t}),i("zrender/shape/Sector",["require","../tool/math","../tool/computeBoundingBox","../tool/vector","./Base","../tool/util"],function(e){var t=e("../tool/math"),i=e("../tool/computeBoundingBox"),n=e("../tool/vector"),a=e("./Base"),o=n.create(),r=n.create(),s=n.create(),l=n.create(),h=function(e){a.call(this,e)};return h.prototype={type:"sector",buildPath:function(e,i){var n=i.x,a=i.y,o=i.r0||0,r=i.r,s=i.startAngle,l=i.endAngle,h=i.clockWise||!1;s=t.degreeToRadian(s),l=t.degreeToRadian(l),h||(s=-s,l=-l);var m=t.cos(s),V=t.sin(s);e.moveTo(m*o+n,V*o+a),e.lineTo(m*r+n,V*r+a),e.arc(n,a,r,s,l,!h),e.lineTo(t.cos(l)*o+n,t.sin(l)*o+a),0!==o&&e.arc(n,a,o,l,s,h),e.closePath()},getRect:function(e){if(e.__rect)return e.__rect;var a=e.x,h=e.y,m=e.r0||0,V=e.r,U=t.degreeToRadian(e.startAngle),d=t.degreeToRadian(e.endAngle),p=e.clockWise;return p||(U=-U,d=-d),m>1?i.arc(a,h,m,U,d,!p,o,s):(o[0]=s[0]=a,o[1]=s[1]=h),i.arc(a,h,V,U,d,!p,r,l),n.min(o,o,r),n.max(s,s,l),e.__rect={x:o[0],y:o[1],width:s[0]-o[0],height:s[1]-o[1]},e.__rect}},e("../tool/util").inherits(h,a),h}),i("echarts/util/shape/Candle",["require","zrender/shape/Base","zrender/tool/util","./normalIsCover"],function(e){function t(e){i.call(this,e)}var i=e("zrender/shape/Base"),n=e("zrender/tool/util");return t.prototype={type:"candle",_numberOrder:function(e,t){return t-e},buildPath:function(e,t){var i=n.clone(t.y).sort(this._numberOrder);e.moveTo(t.x,i[3]),e.lineTo(t.x,i[2]),e.moveTo(t.x-t.width/2,i[2]),e.rect(t.x-t.width/2,i[2],t.width,i[1]-i[2]),e.moveTo(t.x,i[1]),e.lineTo(t.x,i[0])},getRect:function(e){if(!e.__rect){var t=0;("stroke"==e.brushType||"fill"==e.brushType)&&(t=e.lineWidth||1);var i=n.clone(e.y).sort(this._numberOrder);e.__rect={x:Math.round(e.x-e.width/2-t/2),y:Math.round(i[3]-t/2),width:e.width+t,height:i[0]-i[3]+t}}return e.__rect},isCover:e("./normalIsCover")},n.inherits(t,i),t}),i("zrender/tool/computeBoundingBox",["require","./vector","./curve"],function(e){function t(e,t,i){if(0!==e.length){for(var n=e[0][0],a=e[0][0],o=e[0][1],r=e[0][1],s=1;s<e.length;s++){var l=e[s];l[0]<n&&(n=l[0]),l[0]>a&&(a=l[0]),l[1]<o&&(o=l[1]),l[1]>r&&(r=l[1])}t[0]=n,t[1]=o,i[0]=a,i[1]=r}}function i(e,t,i,n,a,r){var s=[];o.cubicExtrema(e[0],t[0],i[0],n[0],s);for(var l=0;l<s.length;l++)s[l]=o.cubicAt(e[0],t[0],i[0],n[0],s[l]);var h=[];o.cubicExtrema(e[1],t[1],i[1],n[1],h);for(var l=0;l<h.length;l++)h[l]=o.cubicAt(e[1],t[1],i[1],n[1],h[l]);s.push(e[0],n[0]),h.push(e[1],n[1]);var m=Math.min.apply(null,s),V=Math.max.apply(null,s),U=Math.min.apply(null,h),d=Math.max.apply(null,h);a[0]=m,a[1]=U,r[0]=V,r[1]=d}function n(e,t,i,n,a){var r=o.quadraticExtremum(e[0],t[0],i[0]),s=o.quadraticExtremum(e[1],t[1],i[1]);r=Math.max(Math.min(r,1),0),s=Math.max(Math.min(s,1),0);var l=1-r,h=1-s,m=l*l*e[0]+2*l*r*t[0]+r*r*i[0],V=l*l*e[1]+2*l*r*t[1]+r*r*i[1],U=h*h*e[0]+2*h*s*t[0]+s*s*i[0],d=h*h*e[1]+2*h*s*t[1]+s*s*i[1];n[0]=Math.min(e[0],i[0],m,U),n[1]=Math.min(e[1],i[1],V,d),a[0]=Math.max(e[0],i[0],m,U),a[1]=Math.max(e[1],i[1],V,d)}var a=e("./vector"),o=e("./curve"),r=a.create(),s=a.create(),l=a.create(),h=function(e,t,i,n,o,h,m,V){if(Math.abs(n-o)>=2*Math.PI)return m[0]=e-i,m[1]=t-i,V[0]=e+i,void(V[1]=t+i);if(r[0]=Math.cos(n)*i+e,r[1]=Math.sin(n)*i+t,s[0]=Math.cos(o)*i+e,s[1]=Math.sin(o)*i+t,a.min(m,r,s),a.max(V,r,s),n%=2*Math.PI,0>n&&(n+=2*Math.PI),o%=2*Math.PI,0>o&&(o+=2*Math.PI),n>o&&!h?o+=2*Math.PI:o>n&&h&&(n+=2*Math.PI),h){var U=o;o=n,n=U}for(var d=0;o>d;d+=Math.PI/2)d>n&&(l[0]=Math.cos(d)*i+e,l[1]=Math.sin(d)*i+t,a.min(m,l,m),a.max(V,l,V))};return t.cubeBezier=i,t.quadraticBezier=n,t.arc=h,t}),i("echarts/util/shape/Chain",["require","zrender/shape/Base","./Icon","zrender/shape/util/dashedLineTo","zrender/tool/util","zrender/tool/matrix"],function(e){function t(e){i.call(this,e)}var i=e("zrender/shape/Base"),n=e("./Icon"),a=e("zrender/shape/util/dashedLineTo"),o=e("zrender/tool/util"),r=e("zrender/tool/matrix");return t.prototype={type:"chain",brush:function(e,t){var i=this.style;t&&(i=this.getHighlightStyle(i,this.highlightStyle||{})),e.save(),this.setContext(e,i),this.setTransform(e),e.save(),e.beginPath(),this.buildLinePath(e,i),e.stroke(),e.restore(),this.brushSymbol(e,i),e.restore()},buildLinePath:function(e,t){var i=t.x,n=t.y+5,o=t.width,r=t.height/2-10;if(e.moveTo(i,n),e.lineTo(i,n+r),e.moveTo(i+o,n),e.lineTo(i+o,n+r),e.moveTo(i,n+r/2),t.lineType&&"solid"!=t.lineType){if("dashed"==t.lineType||"dotted"==t.lineType){var s=(t.lineWidth||1)*("dashed"==t.lineType?5:1);a(e,i,n+r/2,i+o,n+r/2,s)}}else e.lineTo(i+o,n+r/2)},brushSymbol:function(e,t){var i=t.y+t.height/4;e.save();for(var a,o=t.chainPoint,r=0,s=o.length;s>r;r++){if(a=o[r],"none"!=a.symbol){e.beginPath();var l=a.symbolSize;n.prototype.buildPath(e,{iconType:a.symbol,x:a.x-l,y:i-l,width:2*l,height:2*l,n:a.n}),e.fillStyle=a.isEmpty?"#fff":t.strokeColor,e.closePath(),e.fill(),e.stroke()}a.showLabel&&(e.font=a.textFont,e.fillStyle=a.textColor,e.textAlign=a.textAlign,e.textBaseline=a.textBaseline,a.rotation?(e.save(),this._updateTextTransform(e,a.rotation),e.fillText(a.name,a.textX,a.textY),e.restore()):e.fillText(a.name,a.textX,a.textY))}e.restore()},_updateTextTransform:function(e,t){var i=r.create();if(r.identity(i),0!==t[0]){var n=t[1]||0,a=t[2]||0;(n||a)&&r.translate(i,i,[-n,-a]),r.rotate(i,i,t[0]),(n||a)&&r.translate(i,i,[n,a])}e.transform.apply(e,i)},isCover:function(e,t){var i=this.style;return e>=i.x&&e<=i.x+i.width&&t>=i.y&&t<=i.y+i.height?!0:!1}},o.inherits(t,i),t}),i("zrender/shape/Ring",["require","./Base","../tool/util"],function(e){var t=e("./Base"),i=function(e){t.call(this,e)};return i.prototype={type:"ring",buildPath:function(e,t){e.arc(t.x,t.y,t.r,0,2*Math.PI,!1),e.moveTo(t.x+t.r0,t.y),e.arc(t.x,t.y,t.r0,0,2*Math.PI,!0)},getRect:function(e){if(e.__rect)return e.__rect;var t;return t="stroke"==e.brushType||"fill"==e.brushType?e.lineWidth||1:0,e.__rect={x:Math.round(e.x-e.r-t/2),y:Math.round(e.y-e.r-t/2),width:2*e.r+t,height:2*e.r+t},e.__rect}},e("../tool/util").inherits(i,t),i}),i("echarts/component/axis",["require","./base","zrender/shape/Line","../config","../util/ecData","zrender/tool/util","zrender/tool/color","./categoryAxis","./valueAxis","../component"],function(e){function t(e,t,n,a,o,r){i.call(this,e,t,n,a,o),this.axisType=r,this._axisList=[],this.refresh(a)}var i=e("./base"),n=e("zrender/shape/Line"),a=e("../config"),o=e("../util/ecData"),r=e("zrender/tool/util"),s=e("zrender/tool/color");return t.prototype={type:a.COMPONENT_TYPE_AXIS,axisBase:{_buildAxisLine:function(){var e=this.option.axisLine.lineStyle.width,t=e/2,i={_axisShape:"axisLine",zlevel:this.getZlevelBase(),z:this.getZBase()+3,hoverable:!1},a=this.grid;switch(this.option.position){case"left":i.style={xStart:a.getX()-t,yStart:a.getYend(),xEnd:a.getX()-t,yEnd:a.getY(),lineCap:"round"};break;case"right":i.style={xStart:a.getXend()+t,yStart:a.getYend(),xEnd:a.getXend()+t,yEnd:a.getY(),lineCap:"round"};break;case"bottom":i.style={xStart:a.getX(),yStart:a.getYend()+t,xEnd:a.getXend(),yEnd:a.getYend()+t,lineCap:"round"};break;case"top":i.style={xStart:a.getX(),yStart:a.getY()-t,xEnd:a.getXend(),yEnd:a.getY()-t,lineCap:"round"}}var o=i.style;""!==this.option.name&&(o.text=this.option.name,o.textPosition=this.option.nameLocation,o.textFont=this.getFont(this.option.nameTextStyle),this.option.nameTextStyle.align&&(o.textAlign=this.option.nameTextStyle.align),this.option.nameTextStyle.baseline&&(o.textBaseline=this.option.nameTextStyle.baseline),this.option.nameTextStyle.color&&(o.textColor=this.option.nameTextStyle.color)),o.strokeColor=this.option.axisLine.lineStyle.color,o.lineWidth=e,this.isHorizontal()?o.yStart=o.yEnd=this.subPixelOptimize(o.yEnd,e):o.xStart=o.xEnd=this.subPixelOptimize(o.xEnd,e),o.lineType=this.option.axisLine.lineStyle.type,i=new n(i),this.shapeList.push(i)},_axisLabelClickable:function(e,t){return e?(o.pack(t,void 0,-1,void 0,-1,t.style.text),t.hoverable=!0,t.clickable=!0,t.highlightStyle={color:s.lift(t.style.color,1),brushType:"fill"},t):t},refixAxisShape:function(e,t){if(this.option.axisLine.onZero){var i;if(this.isHorizontal()&&null!=t)for(var n=0,a=this.shapeList.length;a>n;n++)"axisLine"===this.shapeList[n]._axisShape?(this.shapeList[n].style.yStart=this.shapeList[n].style.yEnd=this.subPixelOptimize(t,this.shapeList[n].stylelineWidth),this.zr.modShape(this.shapeList[n].id)):"axisTick"===this.shapeList[n]._axisShape&&(i=this.shapeList[n].style.yEnd-this.shapeList[n].style.yStart,this.shapeList[n].style.yStart=t-i,this.shapeList[n].style.yEnd=t,this.zr.modShape(this.shapeList[n].id));if(!this.isHorizontal()&&null!=e)for(var n=0,a=this.shapeList.length;a>n;n++)"axisLine"===this.shapeList[n]._axisShape?(this.shapeList[n].style.xStart=this.shapeList[n].style.xEnd=this.subPixelOptimize(e,this.shapeList[n].stylelineWidth),this.zr.modShape(this.shapeList[n].id)):"axisTick"===this.shapeList[n]._axisShape&&(i=this.shapeList[n].style.xEnd-this.shapeList[n].style.xStart,this.shapeList[n].style.xStart=e,this.shapeList[n].style.xEnd=e+i,this.zr.modShape(this.shapeList[n].id))}},getPosition:function(){return this.option.position},isHorizontal:function(){return"bottom"===this.option.position||"top"===this.option.position}},reformOption:function(e){if(!e||e instanceof Array&&0===e.length?e=[{type:a.COMPONENT_TYPE_AXIS_VALUE}]:e instanceof Array||(e=[e]),e.length>2&&(e=[e[0],e[1]]),"xAxis"===this.axisType){(!e[0].position||"bottom"!=e[0].position&&"top"!=e[0].position)&&(e[0].position="bottom"),e.length>1&&(e[1].position="bottom"===e[0].position?"top":"bottom");for(var t=0,i=e.length;i>t;t++)e[t].type=e[t].type||"category",e[t].xAxisIndex=t,e[t].yAxisIndex=-1}else{(!e[0].position||"left"!=e[0].position&&"right"!=e[0].position)&&(e[0].position="left"),e.length>1&&(e[1].position="left"===e[0].position?"right":"left");for(var t=0,i=e.length;i>t;t++)e[t].type=e[t].type||"value",e[t].xAxisIndex=-1,e[t].yAxisIndex=t}return e},refresh:function(t){var i;t&&(this.option=t,"xAxis"===this.axisType?(this.option.xAxis=this.reformOption(t.xAxis),i=this.option.xAxis):(this.option.yAxis=this.reformOption(t.yAxis),i=this.option.yAxis),this.series=t.series);for(var n=e("./categoryAxis"),a=e("./valueAxis"),o=Math.max(i&&i.length||0,this._axisList.length),r=0;o>r;r++)!this._axisList[r]||!t||i[r]&&this._axisList[r].type==i[r].type||(this._axisList[r].dispose&&this._axisList[r].dispose(),this._axisList[r]=!1),this._axisList[r]?this._axisList[r].refresh&&this._axisList[r].refresh(i?i[r]:!1,this.series):i&&i[r]&&(this._axisList[r]="category"===i[r].type?new n(this.ecTheme,this.messageCenter,this.zr,i[r],this.myChart,this.axisBase):new a(this.ecTheme,this.messageCenter,this.zr,i[r],this.myChart,this.axisBase,this.series))},getAxis:function(e){return this._axisList[e]},getAxisCount:function(){return this._axisList.length},clear:function(){for(var e=0,t=this._axisList.length;t>e;e++)this._axisList[e].dispose&&this._axisList[e].dispose();this._axisList=[]}},r.inherits(t,i),e("../component").define("axis",t),t}),i("echarts/component/grid",["require","./base","zrender/shape/Rectangle","../config","zrender/tool/util","../component"],function(e){function t(e,t,n,a,o){i.call(this,e,t,n,a,o),this.refresh(a)}var i=e("./base"),n=e("zrender/shape/Rectangle"),a=e("../config");a.grid={zlevel:0,z:0,x:80,y:60,x2:80,y2:60,backgroundColor:"rgba(0,0,0,0)",borderWidth:1,borderColor:"#ccc"};var o=e("zrender/tool/util");return t.prototype={type:a.COMPONENT_TYPE_GRID,getX:function(){return this._x},getY:function(){return this._y},getWidth:function(){return this._width},getHeight:function(){return this._height},getXend:function(){return this._x+this._width},getYend:function(){return this._y+this._height},getArea:function(){return{x:this._x,y:this._y,width:this._width,height:this._height}},getBbox:function(){return[[this._x,this._y],[this.getXend(),this.getYend()]]},refixAxisShape:function(e){for(var t,i,n,o=e.xAxis._axisList.concat(e.yAxis?e.yAxis._axisList:[]),r=o.length;r--;)n=o[r],n.type==a.COMPONENT_TYPE_AXIS_VALUE&&n._min<0&&n._max>=0&&(n.isHorizontal()?t=n.getCoord(0):i=n.getCoord(0));if("undefined"!=typeof t||"undefined"!=typeof i)for(r=o.length;r--;)o[r].refixAxisShape(t,i)},refresh:function(e){if(e||this._zrWidth!=this.zr.getWidth()||this._zrHeight!=this.zr.getHeight()){this.clear(),this.option=e||this.option,this.option.grid=this.reformOption(this.option.grid);var t=this.option.grid;this._zrWidth=this.zr.getWidth(),this._zrHeight=this.zr.getHeight(),this._x=this.parsePercent(t.x,this._zrWidth),this._y=this.parsePercent(t.y,this._zrHeight);var i=this.parsePercent(t.x2,this._zrWidth),a=this.parsePercent(t.y2,this._zrHeight);this._width="undefined"==typeof t.width?this._zrWidth-this._x-i:this.parsePercent(t.width,this._zrWidth),this._width=this._width<=0?10:this._width,this._height="undefined"==typeof t.height?this._zrHeight-this._y-a:this.parsePercent(t.height,this._zrHeight),this._height=this._height<=0?10:this._height,this._x=this.subPixelOptimize(this._x,t.borderWidth),this._y=this.subPixelOptimize(this._y,t.borderWidth),this.shapeList.push(new n({zlevel:this.getZlevelBase(),z:this.getZBase(),hoverable:!1,style:{x:this._x,y:this._y,width:this._width,height:this._height,brushType:t.borderWidth>0?"both":"fill",color:t.backgroundColor,strokeColor:t.borderColor,lineWidth:t.borderWidth}})),this.zr.addShape(this.shapeList[0])}}},o.inherits(t,i),e("../component").define("grid",t),t}),i("echarts/component/dataZoom",["require","./base","zrender/shape/Rectangle","zrender/shape/Polygon","../util/shape/Icon","../config","../util/date","zrender/tool/util","../component"],function(e){function t(e,t,n,a,o){i.call(this,e,t,n,a,o);var r=this;r._ondrift=function(e,t){return r.__ondrift(this,e,t)},r._ondragend=function(){return r.__ondragend()},this._fillerSize=30,this._isSilence=!1,this._zoom={},this.option.dataZoom=this.reformOption(this.option.dataZoom),this.zoomOption=this.option.dataZoom,this._handleSize=this.zoomOption.handleSize,this.myChart.canvasSupported||(this.zoomOption.realtime=!1),this._location=this._getLocation(),this._zoom=this._getZoom(),this._backupData(),this.option.dataZoom.show&&this._buildShape(),this._syncData()}var i=e("./base"),n=e("zrender/shape/Rectangle"),a=e("zrender/shape/Polygon"),o=e("../util/shape/Icon"),r=e("../config");r.dataZoom={zlevel:0,z:4,show:!1,orient:"horizontal",backgroundColor:"rgba(0,0,0,0)",dataBackgroundColor:"#eee",fillerColor:"rgba(144,197,237,0.2)",handleColor:"rgba(70,130,180,0.8)",handleSize:8,showDetail:!0,realtime:!0};var s=e("../util/date"),l=e("zrender/tool/util");return t.prototype={type:r.COMPONENT_TYPE_DATAZOOM,_buildShape:function(){this._buildBackground(),this._buildFiller(),this._buildHandle(),this._buildFrame();for(var e=0,t=this.shapeList.length;t>e;e++)this.zr.addShape(this.shapeList[e]);this._syncFrameShape()},_getLocation:function(){var e,t,i,n,a=this.component.grid;return"horizontal"==this.zoomOption.orient?(i=this.zoomOption.width||a.getWidth(),n=this.zoomOption.height||this._fillerSize,e=null!=this.zoomOption.x?this.zoomOption.x:a.getX(),t=null!=this.zoomOption.y?this.zoomOption.y:this.zr.getHeight()-n-2):(i=this.zoomOption.width||this._fillerSize,n=this.zoomOption.height||a.getHeight(),e=null!=this.zoomOption.x?this.zoomOption.x:2,t=null!=this.zoomOption.y?this.zoomOption.y:a.getY()),{x:e,y:t,width:i,height:n}},_getZoom:function(){var e=this.option.series,t=this.option.xAxis;!t||t instanceof Array||(t=[t],this.option.xAxis=t);var i=this.option.yAxis;!i||i instanceof Array||(i=[i],this.option.yAxis=i);var n,a,o=[],s=this.zoomOption.xAxisIndex;if(t&&null==s){n=[];for(var l=0,h=t.length;h>l;l++)("category"==t[l].type||null==t[l].type)&&n.push(l)}else n=s instanceof Array?s:null!=s?[s]:[];if(s=this.zoomOption.yAxisIndex,i&&null==s){a=[];for(var l=0,h=i.length;h>l;l++)"category"==i[l].type&&a.push(l)}else a=s instanceof Array?s:null!=s?[s]:[];for(var m,l=0,h=e.length;h>l;l++)if(m=e[l],m.type==r.CHART_TYPE_LINE||m.type==r.CHART_TYPE_BAR||m.type==r.CHART_TYPE_SCATTER||m.type==r.CHART_TYPE_K){for(var V=0,U=n.length;U>V;V++)if(n[V]==(m.xAxisIndex||0)){o.push(l);break}for(var V=0,U=a.length;U>V;V++)if(a[V]==(m.yAxisIndex||0)){o.push(l);break}null==this.zoomOption.xAxisIndex&&null==this.zoomOption.yAxisIndex&&m.data&&this.getDataFromOption(m.data[0])instanceof Array&&(m.type==r.CHART_TYPE_SCATTER||m.type==r.CHART_TYPE_LINE||m.type==r.CHART_TYPE_BAR)&&o.push(l)}var d=null!=this._zoom.start?this._zoom.start:null!=this.zoomOption.start?this.zoomOption.start:0,p=null!=this._zoom.end?this._zoom.end:null!=this.zoomOption.end?this.zoomOption.end:100;d>p&&(d+=p,p=d-p,d-=p);var c=Math.round((p-d)/100*("horizontal"==this.zoomOption.orient?this._location.width:this._location.height));return{start:d,end:p,start2:0,end2:100,size:c,xAxisIndex:n,yAxisIndex:a,seriesIndex:o,scatterMap:this._zoom.scatterMap||{}}},_backupData:function(){this._originalData={xAxis:{},yAxis:{},series:{}};for(var e=this.option.xAxis,t=this._zoom.xAxisIndex,i=0,n=t.length;n>i;i++)this._originalData.xAxis[t[i]]=e[t[i]].data;for(var a=this.option.yAxis,o=this._zoom.yAxisIndex,i=0,n=o.length;n>i;i++)this._originalData.yAxis[o[i]]=a[o[i]].data;for(var s,l=this.option.series,h=this._zoom.seriesIndex,i=0,n=h.length;n>i;i++)s=l[h[i]],this._originalData.series[h[i]]=s.data,s.data&&this.getDataFromOption(s.data[0])instanceof Array&&(s.type==r.CHART_TYPE_SCATTER||s.type==r.CHART_TYPE_LINE||s.type==r.CHART_TYPE_BAR)&&(this._backupScale(),this._calculScatterMap(h[i]))},_calculScatterMap:function(t){this._zoom.scatterMap=this._zoom.scatterMap||{},this._zoom.scatterMap[t]=this._zoom.scatterMap[t]||{};var i=e("../component"),n=i.get("axis"),a=l.clone(this.option.xAxis);"category"==a[0].type&&(a[0].type="value"),a[1]&&"category"==a[1].type&&(a[1].type="value");var o=new n(this.ecTheme,null,!1,{xAxis:a,series:this.option.series},this,"xAxis"),r=this.option.series[t].xAxisIndex||0;this._zoom.scatterMap[t].x=o.getAxis(r).getExtremum(),o.dispose(),a=l.clone(this.option.yAxis),"category"==a[0].type&&(a[0].type="value"),a[1]&&"category"==a[1].type&&(a[1].type="value"),o=new n(this.ecTheme,null,!1,{yAxis:a,series:this.option.series},this,"yAxis"),r=this.option.series[t].yAxisIndex||0,this._zoom.scatterMap[t].y=o.getAxis(r).getExtremum(),o.dispose()},_buildBackground:function(){var e=this._location.width,t=this._location.height;this.shapeList.push(new n({zlevel:this.getZlevelBase(),z:this.getZBase(),hoverable:!1,style:{x:this._location.x,y:this._location.y,width:e,height:t,color:this.zoomOption.backgroundColor}}));for(var i=0,o=this._originalData.xAxis,s=this._zoom.xAxisIndex,l=0,h=s.length;h>l;l++)i=Math.max(i,o[s[l]].length);for(var m=this._originalData.yAxis,V=this._zoom.yAxisIndex,l=0,h=V.length;h>l;l++)i=Math.max(i,m[V[l]].length);for(var U,d=this._zoom.seriesIndex[0],p=this._originalData.series[d],c=Number.MIN_VALUE,u=Number.MAX_VALUE,l=0,h=p.length;h>l;l++)U=this.getDataFromOption(p[l],0),this.option.series[d].type==r.CHART_TYPE_K&&(U=U[1]),isNaN(U)&&(U=0),c=Math.max(c,U),u=Math.min(u,U);var y=c-u,g=[],b=e/(i-(i>1?1:0)),f=t/(i-(i>1?1:0)),k=1;"horizontal"==this.zoomOption.orient&&1>b?k=Math.floor(3*i/e):"vertical"==this.zoomOption.orient&&1>f&&(k=Math.floor(3*i/t));for(var l=0,h=i;h>l;l+=k)U=this.getDataFromOption(p[l],0),this.option.series[d].type==r.CHART_TYPE_K&&(U=U[1]),isNaN(U)&&(U=0),g.push("horizontal"==this.zoomOption.orient?[this._location.x+b*l,this._location.y+t-1-Math.round((U-u)/y*(t-10))]:[this._location.x+1+Math.round((U-u)/y*(e-10)),this._location.y+f*(h-l-1)]);"horizontal"==this.zoomOption.orient?(g.push([this._location.x+e,this._location.y+t]),g.push([this._location.x,this._location.y+t])):(g.push([this._location.x,this._location.y]),g.push([this._location.x,this._location.y+t])),this.shapeList.push(new a({zlevel:this.getZlevelBase(),z:this.getZBase(),style:{pointList:g,color:this.zoomOption.dataBackgroundColor},hoverable:!1}))},_buildFiller:function(){this._fillerShae={zlevel:this.getZlevelBase(),z:this.getZBase(),draggable:!0,ondrift:this._ondrift,ondragend:this._ondragend,_type:"filler"},this._fillerShae.style="horizontal"==this.zoomOption.orient?{x:this._location.x+Math.round(this._zoom.start/100*this._location.width)+this._handleSize,y:this._location.y,width:this._zoom.size-2*this._handleSize,height:this._location.height,color:this.zoomOption.fillerColor,text:":::",textPosition:"inside"}:{x:this._location.x,y:this._location.y+Math.round(this._zoom.start/100*this._location.height)+this._handleSize,width:this._location.width,height:this._zoom.size-2*this._handleSize,color:this.zoomOption.fillerColor,text:"::",textPosition:"inside"},this._fillerShae.highlightStyle={brushType:"fill",color:"rgba(0,0,0,0)"},this._fillerShae=new n(this._fillerShae),this.shapeList.push(this._fillerShae)},_buildHandle:function(){var e=this.zoomOption.showDetail?this._getDetail():{start:"",end:""};this._startShape={zlevel:this.getZlevelBase(),z:this.getZBase(),draggable:!0,style:{iconType:"rectangle",x:this._location.x,y:this._location.y,width:this._handleSize,height:this._handleSize,color:this.zoomOption.handleColor,text:"=",textPosition:"inside"},highlightStyle:{text:e.start,brushType:"fill",textPosition:"left"},ondrift:this._ondrift,ondragend:this._ondragend},"horizontal"==this.zoomOption.orient?(this._startShape.style.height=this._location.height,this._endShape=l.clone(this._startShape),this._startShape.style.x=this._fillerShae.style.x-this._handleSize,this._endShape.style.x=this._fillerShae.style.x+this._fillerShae.style.width,this._endShape.highlightStyle.text=e.end,this._endShape.highlightStyle.textPosition="right"):(this._startShape.style.width=this._location.width,this._endShape=l.clone(this._startShape),this._startShape.style.y=this._fillerShae.style.y+this._fillerShae.style.height,this._startShape.highlightStyle.textPosition="bottom",this._endShape.style.y=this._fillerShae.style.y-this._handleSize,this._endShape.highlightStyle.text=e.end,this._endShape.highlightStyle.textPosition="top"),this._startShape=new o(this._startShape),this._endShape=new o(this._endShape),this.shapeList.push(this._startShape),this.shapeList.push(this._endShape)},_buildFrame:function(){var e=this.subPixelOptimize(this._location.x,1),t=this.subPixelOptimize(this._location.y,1);this._startFrameShape={zlevel:this.getZlevelBase(),z:this.getZBase(),hoverable:!1,style:{x:e,y:t,width:this._location.width-(e>this._location.x?1:0),height:this._location.height-(t>this._location.y?1:0),lineWidth:1,brushType:"stroke",strokeColor:this.zoomOption.handleColor}},this._endFrameShape=l.clone(this._startFrameShape),this._startFrameShape=new n(this._startFrameShape),this._endFrameShape=new n(this._endFrameShape),this.shapeList.push(this._startFrameShape),this.shapeList.push(this._endFrameShape)},_syncHandleShape:function(){"horizontal"==this.zoomOption.orient?(this._startShape.style.x=this._fillerShae.style.x-this._handleSize,this._endShape.style.x=this._fillerShae.style.x+this._fillerShae.style.width,this._zoom.start=(this._startShape.style.x-this._location.x)/this._location.width*100,this._zoom.end=(this._endShape.style.x+this._handleSize-this._location.x)/this._location.width*100):(this._startShape.style.y=this._fillerShae.style.y+this._fillerShae.style.height,this._endShape.style.y=this._fillerShae.style.y-this._handleSize,this._zoom.start=(this._location.y+this._location.height-this._startShape.style.y)/this._location.height*100,this._zoom.end=(this._location.y+this._location.height-this._endShape.style.y-this._handleSize)/this._location.height*100),this.zr.modShape(this._startShape.id),this.zr.modShape(this._endShape.id),this._syncFrameShape(),this.zr.refreshNextFrame()},_syncFillerShape:function(){var e,t;"horizontal"==this.zoomOption.orient?(e=this._startShape.style.x,t=this._endShape.style.x,this._fillerShae.style.x=Math.min(e,t)+this._handleSize,this._fillerShae.style.width=Math.abs(e-t)-this._handleSize,this._zoom.start=(Math.min(e,t)-this._location.x)/this._location.width*100,this._zoom.end=(Math.max(e,t)+this._handleSize-this._location.x)/this._location.width*100):(e=this._startShape.style.y,t=this._endShape.style.y,this._fillerShae.style.y=Math.min(e,t)+this._handleSize,this._fillerShae.style.height=Math.abs(e-t)-this._handleSize,this._zoom.start=(this._location.y+this._location.height-Math.max(e,t))/this._location.height*100,this._zoom.end=(this._location.y+this._location.height-Math.min(e,t)-this._handleSize)/this._location.height*100),this.zr.modShape(this._fillerShae.id),this._syncFrameShape(),this.zr.refreshNextFrame()},_syncFrameShape:function(){"horizontal"==this.zoomOption.orient?(this._startFrameShape.style.width=this._fillerShae.style.x-this._location.x,this._endFrameShape.style.x=this._fillerShae.style.x+this._fillerShae.style.width,this._endFrameShape.style.width=this._location.x+this._location.width-this._endFrameShape.style.x):(this._startFrameShape.style.y=this._fillerShae.style.y+this._fillerShae.style.height,this._startFrameShape.style.height=this._location.y+this._location.height-this._startFrameShape.style.y,this._endFrameShape.style.height=this._fillerShae.style.y-this._location.y),this.zr.modShape(this._startFrameShape.id),this.zr.modShape(this._endFrameShape.id)},_syncShape:function(){this.zoomOption.show&&("horizontal"==this.zoomOption.orient?(this._startShape.style.x=this._location.x+this._zoom.start/100*this._location.width,this._endShape.style.x=this._location.x+this._zoom.end/100*this._location.width-this._handleSize,this._fillerShae.style.x=this._startShape.style.x+this._handleSize,this._fillerShae.style.width=this._endShape.style.x-this._startShape.style.x-this._handleSize):(this._startShape.style.y=this._location.y+this._location.height-this._zoom.start/100*this._location.height,this._endShape.style.y=this._location.y+this._location.height-this._zoom.end/100*this._location.height-this._handleSize,this._fillerShae.style.y=this._endShape.style.y+this._handleSize,this._fillerShae.style.height=this._startShape.style.y-this._endShape.style.y-this._handleSize),this.zr.modShape(this._startShape.id),this.zr.modShape(this._endShape.id),this.zr.modShape(this._fillerShae.id),this._syncFrameShape(),this.zr.refresh())},_syncData:function(e){var t,i,n,a,o;for(var s in this._originalData){t=this._originalData[s];for(var l in t)o=t[l],null!=o&&(a=o.length,i=Math.floor(this._zoom.start/100*a),n=Math.ceil(this._zoom.end/100*a),this.getDataFromOption(o[0])instanceof Array&&this.option[s][l].type!=r.CHART_TYPE_K?(this._setScale(),this.option[s][l].data=this._synScatterData(l,o)):this.option[s][l].data=o.slice(i,n))}this._isSilence||!this.zoomOption.realtime&&!e||this.messageCenter.dispatch(r.EVENT.DATA_ZOOM,null,{zoom:this._zoom},this.myChart)},_synScatterData:function(e,t){if(0===this._zoom.start&&100==this._zoom.end&&0===this._zoom.start2&&100==this._zoom.end2)return t;var i,n,a,o,r,s=[],l=this._zoom.scatterMap[e];
+
+"horizontal"==this.zoomOption.orient?(i=l.x.max-l.x.min,n=this._zoom.start/100*i+l.x.min,a=this._zoom.end/100*i+l.x.min,i=l.y.max-l.y.min,o=this._zoom.start2/100*i+l.y.min,r=this._zoom.end2/100*i+l.y.min):(i=l.x.max-l.x.min,n=this._zoom.start2/100*i+l.x.min,a=this._zoom.end2/100*i+l.x.min,i=l.y.max-l.y.min,o=this._zoom.start/100*i+l.y.min,r=this._zoom.end/100*i+l.y.min);var h;(h=l.x.dataMappingMethods)&&(n=h.coord2Value(n),a=h.coord2Value(a)),(h=l.y.dataMappingMethods)&&(o=h.coord2Value(o),r=h.coord2Value(r));for(var m,V=0,U=t.length;U>V;V++)m=t[V].value||t[V],m[0]>=n&&m[0]<=a&&m[1]>=o&&m[1]<=r&&s.push(t[V]);return s},_setScale:function(){var e=0!==this._zoom.start||100!==this._zoom.end||0!==this._zoom.start2||100!==this._zoom.end2,t={xAxis:this.option.xAxis,yAxis:this.option.yAxis};for(var i in t)for(var n=0,a=t[i].length;a>n;n++)t[i][n].scale=e||t[i][n]._scale},_backupScale:function(){var e={xAxis:this.option.xAxis,yAxis:this.option.yAxis};for(var t in e)for(var i=0,n=e[t].length;n>i;i++)e[t][i]._scale=e[t][i].scale},_getDetail:function(){for(var e=["xAxis","yAxis"],t=0,i=e.length;i>t;t++){var n=this._originalData[e[t]];for(var a in n){var o=n[a];if(null!=o){var r=o.length,l=Math.floor(this._zoom.start/100*r),h=Math.ceil(this._zoom.end/100*r);return h-=h>0?1:0,{start:this.getDataFromOption(o[l]),end:this.getDataFromOption(o[h])}}}}e="horizontal"==this.zoomOption.orient?"xAxis":"yAxis";var m=this._zoom.seriesIndex[0],V=this.option.series[m][e+"Index"]||0,U=this.option[e][V].type,d=this._zoom.scatterMap[m][e.charAt(0)].min,p=this._zoom.scatterMap[m][e.charAt(0)].max,c=p-d;if("value"==U)return{start:d+c*this._zoom.start/100,end:d+c*this._zoom.end/100};if("time"==U){p=d+c*this._zoom.end/100,d+=c*this._zoom.start/100;var u=s.getAutoFormatter(d,p).formatter;return{start:s.format(u,d),end:s.format(u,p)}}return{start:"",end:""}},__ondrift:function(e,t,i){this.zoomOption.zoomLock&&(e=this._fillerShae);var n="filler"==e._type?this._handleSize:0;if("horizontal"==this.zoomOption.orient?e.style.x+t-n<=this._location.x?e.style.x=this._location.x+n:e.style.x+t+e.style.width+n>=this._location.x+this._location.width?e.style.x=this._location.x+this._location.width-e.style.width-n:e.style.x+=t:e.style.y+i-n<=this._location.y?e.style.y=this._location.y+n:e.style.y+i+e.style.height+n>=this._location.y+this._location.height?e.style.y=this._location.y+this._location.height-e.style.height-n:e.style.y+=i,"filler"==e._type?this._syncHandleShape():this._syncFillerShape(),this.zoomOption.realtime&&this._syncData(),this.zoomOption.showDetail){var a=this._getDetail();this._startShape.style.text=this._startShape.highlightStyle.text=a.start,this._endShape.style.text=this._endShape.highlightStyle.text=a.end,this._startShape.style.textPosition=this._startShape.highlightStyle.textPosition,this._endShape.style.textPosition=this._endShape.highlightStyle.textPosition}return!0},__ondragend:function(){this.zoomOption.showDetail&&(this._startShape.style.text=this._endShape.style.text="=",this._startShape.style.textPosition=this._endShape.style.textPosition="inside",this.zr.modShape(this._startShape.id),this.zr.modShape(this._endShape.id),this.zr.refreshNextFrame()),this.isDragend=!0},ondragend:function(e,t){this.isDragend&&e.target&&(!this.zoomOption.realtime&&this._syncData(),t.dragOut=!0,t.dragIn=!0,this._isSilence||this.zoomOption.realtime||this.messageCenter.dispatch(r.EVENT.DATA_ZOOM,null,{zoom:this._zoom},this.myChart),t.needRefresh=!1,this.isDragend=!1)},ondataZoom:function(e,t){t.needRefresh=!0},absoluteZoom:function(e){this._zoom.start=e.start,this._zoom.end=e.end,this._zoom.start2=e.start2,this._zoom.end2=e.end2,this._syncShape(),this._syncData(!0)},rectZoom:function(e){if(!e)return this._zoom.start=this._zoom.start2=0,this._zoom.end=this._zoom.end2=100,this._syncShape(),this._syncData(!0),this._zoom;var t=this.component.grid.getArea(),i={x:e.x,y:e.y,width:e.width,height:e.height};if(i.width<0&&(i.x+=i.width,i.width=-i.width),i.height<0&&(i.y+=i.height,i.height=-i.height),i.x>t.x+t.width||i.y>t.y+t.height)return!1;i.x<t.x&&(i.x=t.x),i.x+i.width>t.x+t.width&&(i.width=t.x+t.width-i.x),i.y+i.height>t.y+t.height&&(i.height=t.y+t.height-i.y);var n,a=(i.x-t.x)/t.width,o=1-(i.x+i.width-t.x)/t.width,r=1-(i.y+i.height-t.y)/t.height,s=(i.y-t.y)/t.height;return"horizontal"==this.zoomOption.orient?(n=this._zoom.end-this._zoom.start,this._zoom.start+=n*a,this._zoom.end-=n*o,n=this._zoom.end2-this._zoom.start2,this._zoom.start2+=n*r,this._zoom.end2-=n*s):(n=this._zoom.end-this._zoom.start,this._zoom.start+=n*r,this._zoom.end-=n*s,n=this._zoom.end2-this._zoom.start2,this._zoom.start2+=n*a,this._zoom.end2-=n*o),this._syncShape(),this._syncData(!0),this._zoom},syncBackupData:function(e){for(var t,i,n=this._originalData.series,a=e.series,o=0,r=a.length;r>o;o++){i=a[o].data||a[o].eventList,t=n[o]?Math.floor(this._zoom.start/100*n[o].length):0;for(var s=0,l=i.length;l>s;s++)n[o]&&(n[o][s+t]=i[s])}},syncOption:function(e){this.silence(!0),this.option=e,this.option.dataZoom=this.reformOption(this.option.dataZoom),this.zoomOption=this.option.dataZoom,this.myChart.canvasSupported||(this.zoomOption.realtime=!1),this.clear(),this._location=this._getLocation(),this._zoom=this._getZoom(),this._backupData(),this.option.dataZoom&&this.option.dataZoom.show&&this._buildShape(),this._syncData(),this.silence(!1)},silence:function(e){this._isSilence=e},getRealDataIndex:function(e,t){if(!this._originalData||0===this._zoom.start&&100==this._zoom.end)return t;var i=this._originalData.series;return i[e]?Math.floor(this._zoom.start/100*i[e].length)+t:-1},resize:function(){this.clear(),this._location=this._getLocation(),this._zoom=this._getZoom(),this.option.dataZoom.show&&this._buildShape()}},l.inherits(t,i),e("../component").define("dataZoom",t),t}),i("echarts/component/categoryAxis",["require","./base","zrender/shape/Text","zrender/shape/Line","zrender/shape/Rectangle","../config","zrender/tool/util","zrender/tool/area","../component"],function(e){function t(e,t,n,a,o,r){if(a.data.length<1)return void console.error("option.data.length < 1.");i.call(this,e,t,n,a,o),this.grid=this.component.grid;for(var s in r)this[s]=r[s];this.refresh(a)}var i=e("./base"),n=e("zrender/shape/Text"),a=e("zrender/shape/Line"),o=e("zrender/shape/Rectangle"),r=e("../config");r.categoryAxis={zlevel:0,z:0,show:!0,position:"bottom",name:"",nameLocation:"end",nameTextStyle:{},boundaryGap:!0,axisLine:{show:!0,onZero:!0,lineStyle:{color:"#48b",width:2,type:"solid"}},axisTick:{show:!0,interval:"auto",inside:!1,length:5,lineStyle:{color:"#333",width:1}},axisLabel:{show:!0,interval:"auto",rotate:0,margin:8,textStyle:{color:"#333"}},splitLine:{show:!0,lineStyle:{color:["#ccc"],width:1,type:"solid"}},splitArea:{show:!1,areaStyle:{color:["rgba(250,250,250,0.3)","rgba(200,200,200,0.3)"]}}};var s=e("zrender/tool/util"),l=e("zrender/tool/area");return t.prototype={type:r.COMPONENT_TYPE_AXIS_CATEGORY,_getReformedLabel:function(e){var t=this.getDataFromOption(this.option.data[e]),i=this.option.data[e].formatter||this.option.axisLabel.formatter;return i&&("function"==typeof i?t=i.call(this.myChart,t):"string"==typeof i&&(t=i.replace("{value}",t))),t},_getInterval:function(){var e=this.option.axisLabel.interval;if("auto"==e){var t=this.option.axisLabel.textStyle.fontSize,i=this.option.data,n=this.option.data.length;if(this.isHorizontal())if(n>3){var a,o,r=this.getGap(),h=!1,m=Math.floor(.5/r);for(m=1>m?1:m,e=Math.floor(15/r);!h&&n>e;){e+=m,h=!0,a=Math.floor(r*e);for(var V=Math.floor((n-1)/e)*e;V>=0;V-=e){if(0!==this.option.axisLabel.rotate)o=t;else if(i[V].textStyle)o=l.getTextWidth(this._getReformedLabel(V),this.getFont(s.merge(i[V].textStyle,this.option.axisLabel.textStyle)));else{var U=this._getReformedLabel(V)+"",d=(U.match(/\w/g)||"").length,p=U.length-d;o=d*t*2/3+p*t}if(o>a){h=!1;break}}}}else e=1;else if(n>3){var r=this.getGap();for(e=Math.floor(11/r);t>r*e-6&&n>e;)e++}else e=1}else e="function"==typeof e?1:e-0+1;return e},_buildShape:function(){if(this._interval=this._getInterval(),this.option.show){this.option.splitArea.show&&this._buildSplitArea(),this.option.splitLine.show&&this._buildSplitLine(),this.option.axisLine.show&&this._buildAxisLine(),this.option.axisTick.show&&this._buildAxisTick(),this.option.axisLabel.show&&this._buildAxisLabel();for(var e=0,t=this.shapeList.length;t>e;e++)this.zr.addShape(this.shapeList[e])}},_buildAxisTick:function(){var e,t=this.option.data,i=this.option.data.length,n=this.option.axisTick,o=n.length,r=n.lineStyle.color,s=n.lineStyle.width,l="function"==typeof n.interval?n.interval:"auto"==n.interval&&"function"==typeof this.option.axisLabel.interval?this.option.axisLabel.interval:!1,h=l?1:"auto"==n.interval?this._interval:n.interval-0+1,m=n.onGap,V=m?this.getGap()/2:"undefined"==typeof m&&this.option.boundaryGap?this.getGap()/2:0,U=V>0?-h:0;if(this.isHorizontal())for(var d,p="bottom"==this.option.position?n.inside?this.grid.getYend()-o-1:this.grid.getYend()+1:n.inside?this.grid.getY()+1:this.grid.getY()-o-1,c=U;i>c;c+=h)(!l||l(c,t[c]))&&(d=this.subPixelOptimize(this.getCoordByIndex(c)+(c>=0?V:0),s),e={_axisShape:"axisTick",zlevel:this.getZlevelBase(),z:this.getZBase(),hoverable:!1,style:{xStart:d,yStart:p,xEnd:d,yEnd:p+o,strokeColor:r,lineWidth:s}},this.shapeList.push(new a(e)));else for(var u,y="left"==this.option.position?n.inside?this.grid.getX()+1:this.grid.getX()-o-1:n.inside?this.grid.getXend()-o-1:this.grid.getXend()+1,c=U;i>c;c+=h)(!l||l(c,t[c]))&&(u=this.subPixelOptimize(this.getCoordByIndex(c)-(c>=0?V:0),s),e={_axisShape:"axisTick",zlevel:this.getZlevelBase(),z:this.getZBase(),hoverable:!1,style:{xStart:y,yStart:u,xEnd:y+o,yEnd:u,strokeColor:r,lineWidth:s}},this.shapeList.push(new a(e)))},_buildAxisLabel:function(){var e,t,i=this.option.data,a=this.option.data.length,o=this.option.axisLabel,r=o.rotate,l=o.margin,h=o.clickable,m=o.textStyle,V="function"==typeof o.interval?o.interval:!1;if(this.isHorizontal()){var U,d;"bottom"==this.option.position?(U=this.grid.getYend()+l,d="top"):(U=this.grid.getY()-l,d="bottom");for(var p=0;a>p;p+=this._interval)V&&!V(p,i[p])||""===this._getReformedLabel(p)||(t=s.merge(i[p].textStyle||{},m),e={zlevel:this.getZlevelBase(),z:this.getZBase()+3,hoverable:!1,style:{x:this.getCoordByIndex(p),y:U,color:t.color,text:this._getReformedLabel(p),textFont:this.getFont(t),textAlign:t.align||"center",textBaseline:t.baseline||d}},r&&(e.style.textAlign=r>0?"bottom"==this.option.position?"right":"left":"bottom"==this.option.position?"left":"right",e.rotation=[r*Math.PI/180,e.style.x,e.style.y]),this.shapeList.push(new n(this._axisLabelClickable(h,e))))}else{var c,u;"left"==this.option.position?(c=this.grid.getX()-l,u="right"):(c=this.grid.getXend()+l,u="left");for(var p=0;a>p;p+=this._interval)V&&!V(p,i[p])||""===this._getReformedLabel(p)||(t=s.merge(i[p].textStyle||{},m),e={zlevel:this.getZlevelBase(),z:this.getZBase()+3,hoverable:!1,style:{x:c,y:this.getCoordByIndex(p),color:t.color,text:this._getReformedLabel(p),textFont:this.getFont(t),textAlign:t.align||u,textBaseline:t.baseline||0===p&&""!==this.option.name?"bottom":p==a-1&&""!==this.option.name?"top":"middle"}},r&&(e.rotation=[r*Math.PI/180,e.style.x,e.style.y]),this.shapeList.push(new n(this._axisLabelClickable(h,e))))}},_buildSplitLine:function(){var e,t=this.option.data,i=this.option.data.length,n=this.option.splitLine,o=n.lineStyle.type,r=n.lineStyle.width,s=n.lineStyle.color;s=s instanceof Array?s:[s];var l=s.length,h="function"==typeof this.option.axisLabel.interval?this.option.axisLabel.interval:!1,m=n.onGap,V=m?this.getGap()/2:"undefined"==typeof m&&this.option.boundaryGap?this.getGap()/2:0;if(i-=m||"undefined"==typeof m&&this.option.boundaryGap?1:0,this.isHorizontal())for(var U,d=this.grid.getY(),p=this.grid.getYend(),c=0;i>c;c+=this._interval)(!h||h(c,t[c]))&&(U=this.subPixelOptimize(this.getCoordByIndex(c)+V,r),e={zlevel:this.getZlevelBase(),z:this.getZBase(),hoverable:!1,style:{xStart:U,yStart:d,xEnd:U,yEnd:p,strokeColor:s[c/this._interval%l],lineType:o,lineWidth:r}},this.shapeList.push(new a(e)));else for(var u,y=this.grid.getX(),g=this.grid.getXend(),c=0;i>c;c+=this._interval)(!h||h(c,t[c]))&&(u=this.subPixelOptimize(this.getCoordByIndex(c)-V,r),e={zlevel:this.getZlevelBase(),z:this.getZBase(),hoverable:!1,style:{xStart:y,yStart:u,xEnd:g,yEnd:u,strokeColor:s[c/this._interval%l],lineType:o,lineWidth:r}},this.shapeList.push(new a(e)))},_buildSplitArea:function(){var e,t=this.option.data,i=this.option.splitArea,n=i.areaStyle.color;if(n instanceof Array){var a=n.length,r=this.option.data.length,s="function"==typeof this.option.axisLabel.interval?this.option.axisLabel.interval:!1,l=i.onGap,h=l?this.getGap()/2:"undefined"==typeof l&&this.option.boundaryGap?this.getGap()/2:0;if(this.isHorizontal())for(var m,V=this.grid.getY(),U=this.grid.getHeight(),d=this.grid.getX(),p=0;r>=p;p+=this._interval)s&&!s(p,t[p])&&r>p||(m=r>p?this.getCoordByIndex(p)+h:this.grid.getXend(),e={zlevel:this.getZlevelBase(),z:this.getZBase(),hoverable:!1,style:{x:d,y:V,width:m-d,height:U,color:n[p/this._interval%a]}},this.shapeList.push(new o(e)),d=m);else for(var c,u=this.grid.getX(),y=this.grid.getWidth(),g=this.grid.getYend(),p=0;r>=p;p+=this._interval)s&&!s(p,t[p])&&r>p||(c=r>p?this.getCoordByIndex(p)-h:this.grid.getY(),e={zlevel:this.getZlevelBase(),z:this.getZBase(),hoverable:!1,style:{x:u,y:c,width:y,height:g-c,color:n[p/this._interval%a]}},this.shapeList.push(new o(e)),g=c)}else e={zlevel:this.getZlevelBase(),z:this.getZBase(),hoverable:!1,style:{x:this.grid.getX(),y:this.grid.getY(),width:this.grid.getWidth(),height:this.grid.getHeight(),color:n}},this.shapeList.push(new o(e))},refresh:function(e){e&&(this.option=this.reformOption(e),this.option.axisLabel.textStyle=this.getTextStyle(this.option.axisLabel.textStyle)),this.clear(),this._buildShape()},getGap:function(){var e=this.option.data.length,t=this.isHorizontal()?this.grid.getWidth():this.grid.getHeight();return this.option.boundaryGap?t/e:t/(e>1?e-1:1)},getCoord:function(e){for(var t=this.option.data,i=t.length,n=this.getGap(),a=this.option.boundaryGap?n/2:0,o=0;i>o;o++){if(this.getDataFromOption(t[o])==e)return a=this.isHorizontal()?this.grid.getX()+a:this.grid.getYend()-a;a+=n}},getCoordByIndex:function(e){if(0>e)return this.isHorizontal()?this.grid.getX():this.grid.getYend();if(e>this.option.data.length-1)return this.isHorizontal()?this.grid.getXend():this.grid.getY();var t=this.getGap(),i=this.option.boundaryGap?t/2:0;return i+=e*t,i=this.isHorizontal()?this.grid.getX()+i:this.grid.getYend()-i},getNameByIndex:function(e){return this.getDataFromOption(this.option.data[e])},getIndexByName:function(e){for(var t=this.option.data,i=t.length,n=0;i>n;n++)if(this.getDataFromOption(t[n])==e)return n;return-1},getValueFromCoord:function(){return""},isMainAxis:function(e){return e%this._interval===0}},s.inherits(t,i),e("../component").define("categoryAxis",t),t}),i("echarts/component/valueAxis",["require","./base","zrender/shape/Text","zrender/shape/Line","zrender/shape/Rectangle","../config","../util/date","zrender/tool/util","../util/smartSteps","../util/accMath","../util/smartLogSteps","../component"],function(e){function t(e,t,n,a,o,r,s){if(!s||0===s.length)return void console.err("option.series.length == 0.");i.call(this,e,t,n,a,o),this.series=s,this.grid=this.component.grid;for(var l in r)this[l]=r[l];this.refresh(a,s)}var i=e("./base"),n=e("zrender/shape/Text"),a=e("zrender/shape/Line"),o=e("zrender/shape/Rectangle"),r=e("../config");r.valueAxis={zlevel:0,z:0,show:!0,position:"left",name:"",nameLocation:"end",nameTextStyle:{},boundaryGap:[0,0],axisLine:{show:!0,onZero:!0,lineStyle:{color:"#48b",width:2,type:"solid"}},axisTick:{show:!1,inside:!1,length:5,lineStyle:{color:"#333",width:1}},axisLabel:{show:!0,rotate:0,margin:8,textStyle:{color:"#333"}},splitLine:{show:!0,lineStyle:{color:["#ccc"],width:1,type:"solid"}},splitArea:{show:!1,areaStyle:{color:["rgba(250,250,250,0.3)","rgba(200,200,200,0.3)"]}}};var s=e("../util/date"),l=e("zrender/tool/util");return t.prototype={type:r.COMPONENT_TYPE_AXIS_VALUE,_buildShape:function(){if(this._hasData=!1,this._calculateValue(),this._hasData&&this.option.show){this.option.splitArea.show&&this._buildSplitArea(),this.option.splitLine.show&&this._buildSplitLine(),this.option.axisLine.show&&this._buildAxisLine(),this.option.axisTick.show&&this._buildAxisTick(),this.option.axisLabel.show&&this._buildAxisLabel();for(var e=0,t=this.shapeList.length;t>e;e++)this.zr.addShape(this.shapeList[e])}},_buildAxisTick:function(){var e,t=this._valueList,i=this._valueList.length,n=this.option.axisTick,o=n.length,r=n.lineStyle.color,s=n.lineStyle.width;if(this.isHorizontal())for(var l,h="bottom"===this.option.position?n.inside?this.grid.getYend()-o-1:this.grid.getYend()+1:n.inside?this.grid.getY()+1:this.grid.getY()-o-1,m=0;i>m;m++)l=this.subPixelOptimize(this.getCoord(t[m]),s),e={_axisShape:"axisTick",zlevel:this.getZlevelBase(),z:this.getZBase(),hoverable:!1,style:{xStart:l,yStart:h,xEnd:l,yEnd:h+o,strokeColor:r,lineWidth:s}},this.shapeList.push(new a(e));else for(var V,U="left"===this.option.position?n.inside?this.grid.getX()+1:this.grid.getX()-o-1:n.inside?this.grid.getXend()-o-1:this.grid.getXend()+1,m=0;i>m;m++)V=this.subPixelOptimize(this.getCoord(t[m]),s),e={_axisShape:"axisTick",zlevel:this.getZlevelBase(),z:this.getZBase(),hoverable:!1,style:{xStart:U,yStart:V,xEnd:U+o,yEnd:V,strokeColor:r,lineWidth:s}},this.shapeList.push(new a(e))},_buildAxisLabel:function(){var e,t=this._valueList,i=this._valueList.length,a=this.option.axisLabel.rotate,o=this.option.axisLabel.margin,r=this.option.axisLabel.clickable,s=this.option.axisLabel.textStyle;if(this.isHorizontal()){var l,h;"bottom"===this.option.position?(l=this.grid.getYend()+o,h="top"):(l=this.grid.getY()-o,h="bottom");for(var m=0;i>m;m++)e={zlevel:this.getZlevelBase(),z:this.getZBase()+3,hoverable:!1,style:{x:this.getCoord(t[m]),y:l,color:"function"==typeof s.color?s.color(t[m]):s.color,text:this._valueLabel[m],textFont:this.getFont(s),textAlign:s.align||"center",textBaseline:s.baseline||h}},a&&(e.style.textAlign=a>0?"bottom"===this.option.position?"right":"left":"bottom"===this.option.position?"left":"right",e.rotation=[a*Math.PI/180,e.style.x,e.style.y]),this.shapeList.push(new n(this._axisLabelClickable(r,e)))}else{var V,U;"left"===this.option.position?(V=this.grid.getX()-o,U="right"):(V=this.grid.getXend()+o,U="left");for(var m=0;i>m;m++)e={zlevel:this.getZlevelBase(),z:this.getZBase()+3,hoverable:!1,style:{x:V,y:this.getCoord(t[m]),color:"function"==typeof s.color?s.color(t[m]):s.color,text:this._valueLabel[m],textFont:this.getFont(s),textAlign:s.align||U,textBaseline:s.baseline||(0===m&&""!==this.option.name?"bottom":m===i-1&&""!==this.option.name?"top":"middle")}},a&&(e.rotation=[a*Math.PI/180,e.style.x,e.style.y]),this.shapeList.push(new n(this._axisLabelClickable(r,e)))}},_buildSplitLine:function(){var e,t=this._valueList,i=this._valueList.length,n=this.option.splitLine,o=n.lineStyle.type,r=n.lineStyle.width,s=n.lineStyle.color;s=s instanceof Array?s:[s];var l=s.length;if(this.isHorizontal())for(var h,m=this.grid.getY(),V=this.grid.getYend(),U=0;i>U;U++)h=this.subPixelOptimize(this.getCoord(t[U]),r),e={zlevel:this.getZlevelBase(),z:this.getZBase(),hoverable:!1,style:{xStart:h,yStart:m,xEnd:h,yEnd:V,strokeColor:s[U%l],lineType:o,lineWidth:r}},this.shapeList.push(new a(e));else for(var d,p=this.grid.getX(),c=this.grid.getXend(),U=0;i>U;U++)d=this.subPixelOptimize(this.getCoord(t[U]),r),e={zlevel:this.getZlevelBase(),z:this.getZBase(),hoverable:!1,style:{xStart:p,yStart:d,xEnd:c,yEnd:d,strokeColor:s[U%l],lineType:o,lineWidth:r}},this.shapeList.push(new a(e))},_buildSplitArea:function(){var e,t=this.option.splitArea.areaStyle.color;if(t instanceof Array){var i=t.length,n=this._valueList,a=this._valueList.length;if(this.isHorizontal())for(var r,s=this.grid.getY(),l=this.grid.getHeight(),h=this.grid.getX(),m=0;a>=m;m++)r=a>m?this.getCoord(n[m]):this.grid.getXend(),e={zlevel:this.getZlevelBase(),z:this.getZBase(),hoverable:!1,style:{x:h,y:s,width:r-h,height:l,color:t[m%i]}},this.shapeList.push(new o(e)),h=r;else for(var V,U=this.grid.getX(),d=this.grid.getWidth(),p=this.grid.getYend(),m=0;a>=m;m++)V=a>m?this.getCoord(n[m]):this.grid.getY(),e={zlevel:this.getZlevelBase(),z:this.getZBase(),hoverable:!1,style:{x:U,y:V,width:d,height:p-V,color:t[m%i]}},this.shapeList.push(new o(e)),p=V}else e={zlevel:this.getZlevelBase(),z:this.getZBase(),hoverable:!1,style:{x:this.grid.getX(),y:this.grid.getY(),width:this.grid.getWidth(),height:this.grid.getHeight(),color:t}},this.shapeList.push(new o(e))},_calculateValue:function(){if(isNaN(this.option.min-0)||isNaN(this.option.max-0)){for(var e,t,i={},n=this.component.legend,a=0,o=this.series.length;o>a;a++)!(this.series[a].type!=r.CHART_TYPE_LINE&&this.series[a].type!=r.CHART_TYPE_BAR&&this.series[a].type!=r.CHART_TYPE_SCATTER&&this.series[a].type!=r.CHART_TYPE_K&&this.series[a].type!=r.CHART_TYPE_EVENTRIVER||n&&!n.isSelected(this.series[a].name)||(e=this.series[a].xAxisIndex||0,t=this.series[a].yAxisIndex||0,this.option.xAxisIndex!=e&&this.option.yAxisIndex!=t||!this._calculSum(i,a)));var s;for(var a in i){s=i[a];for(var l=0,h=s.length;h>l;l++)if(!isNaN(s[l])){this._hasData=!0,this._min=s[l],this._max=s[l];break}if(this._hasData)break}for(var a in i){s=i[a];for(var l=0,h=s.length;h>l;l++)isNaN(s[l])||(this._min=Math.min(this._min,s[l]),this._max=Math.max(this._max,s[l]))}var m="log"!==this.option.type?this.option.boundaryGap:[0,0],V=Math.abs(this._max-this._min);this._min=isNaN(this.option.min-0)?this._min-Math.abs(V*m[0]):this.option.min-0,this._max=isNaN(this.option.max-0)?this._max+Math.abs(V*m[1]):this.option.max-0,this._min===this._max&&(0===this._max?this._max=1:this._max>0?this._min=this._max/this.option.splitNumber!=null?this.option.splitNumber:5:this._max=this._max/this.option.splitNumber!=null?this.option.splitNumber:5),"time"===this.option.type?this._reformTimeValue():"log"===this.option.type?this._reformLogValue():this._reformValue(this.option.scale)}else this._hasData=!0,this._min=this.option.min-0,this._max=this.option.max-0,"time"===this.option.type?this._reformTimeValue():"log"===this.option.type?this._reformLogValue():this._customerValue()},_calculSum:function(e,t){var i,n,a=this.series[t].name||"kener";if(this.series[t].stack){var o="__Magic_Key_Positive__"+this.series[t].stack,l="__Magic_Key_Negative__"+this.series[t].stack;e[o]=e[o]||[],e[l]=e[l]||[],e[a]=e[a]||[],n=this.series[t].data;for(var h=0,m=n.length;m>h;h++)i=this.getDataFromOption(n[h]),"-"!==i&&(i-=0,i>=0?null!=e[o][h]?e[o][h]+=i:e[o][h]=i:null!=e[l][h]?e[l][h]+=i:e[l][h]=i,this.option.scale&&e[a].push(i))}else if(e[a]=e[a]||[],this.series[t].type!=r.CHART_TYPE_EVENTRIVER){n=this.series[t].data;for(var h=0,m=n.length;m>h;h++)i=this.getDataFromOption(n[h]),this.series[t].type===r.CHART_TYPE_K?(e[a].push(i[0]),e[a].push(i[1]),e[a].push(i[2]),e[a].push(i[3])):i instanceof Array?(-1!=this.option.xAxisIndex&&e[a].push("time"!=this.option.type?i[0]:s.getNewDate(i[0])),-1!=this.option.yAxisIndex&&e[a].push("time"!=this.option.type?i[1]:s.getNewDate(i[1]))):e[a].push(i)}else{n=this.series[t].data;for(var h=0,m=n.length;m>h;h++)for(var V=n[h].evolution,U=0,d=V.length;d>U;U++)e[a].push(s.getNewDate(V[U].time))}},_reformValue:function(t){var i=e("../util/smartSteps"),n=this.option.splitNumber;!t&&this._min>=0&&this._max>=0&&(this._min=0),!t&&this._min<=0&&this._max<=0&&(this._max=0);var a=i(this._min,this._max,n);n=null!=n?n:a.secs,this._min=a.min,this._max=a.max,this._valueList=a.pnts,this._reformLabelData()},_reformTimeValue:function(){var e=null!=this.option.splitNumber?this.option.splitNumber:5,t=s.getAutoFormatter(this._min,this._max,e),i=t.formatter,n=t.gapValue;this._valueList=[s.getNewDate(this._min)];var a;switch(i){case"week":a=s.nextMonday(this._min);break;case"month":a=s.nextNthOnMonth(this._min,1);break;case"quarter":a=s.nextNthOnQuarterYear(this._min,1);break;case"half-year":a=s.nextNthOnHalfYear(this._min,1);break;case"year":a=s.nextNthOnYear(this._min,1);break;default:72e5>=n?a=(Math.floor(this._min/n)+1)*n:(a=s.getNewDate(this._min- -n),a.setHours(6*Math.round(a.getHours()/6)),a.setMinutes(0),a.setSeconds(0))}for(a-this._min<n/2&&(a-=-n),t=s.getNewDate(a),e*=1.5;e-->=0&&(("month"==i||"quarter"==i||"half-year"==i||"year"==i)&&t.setDate(1),!(this._max-t<n/2));)this._valueList.push(t),t=s.getNewDate(t- -n);this._valueList.push(s.getNewDate(this._max)),this._reformLabelData(function(e){return function(t){return s.format(e,t)}}(i))},_customerValue:function(){var t=e("../util/accMath"),i=null!=this.option.splitNumber?this.option.splitNumber:5,n=(this._max-this._min)/i;this._valueList=[];for(var a=0;i>=a;a++)this._valueList.push(t.accAdd(this._min,t.accMul(n,a)));this._reformLabelData()},_reformLogValue:function(){var t=this.option,i=e("../util/smartLogSteps")({dataMin:this._min,dataMax:this._max,logPositive:t.logPositive,logLabelBase:t.logLabelBase,splitNumber:t.splitNumber});this._min=i.dataMin,this._max=i.dataMax,this._valueList=i.tickList,this._dataMappingMethods=i.dataMappingMethods,this._reformLabelData(i.labelFormatter)},_reformLabelData:function(e){this._valueLabel=[];var t=this.option.axisLabel.formatter;if(t)for(var i=0,n=this._valueList.length;n>i;i++)"function"==typeof t?this._valueLabel.push(e?t.call(this.myChart,this._valueList[i],e):t.call(this.myChart,this._valueList[i])):"string"==typeof t&&this._valueLabel.push(e?s.format(t,this._valueList[i]):t.replace("{value}",this._valueList[i]));else for(var i=0,n=this._valueList.length;n>i;i++)this._valueLabel.push(e?e(this._valueList[i]):this.numAddCommas(this._valueList[i]))},getExtremum:function(){this._calculateValue();var e=this._dataMappingMethods;return{min:this._min,max:this._max,dataMappingMethods:e?l.merge({},e):null}},refresh:function(e,t){e&&(this.option=this.reformOption(e),this.option.axisLabel.textStyle=l.merge(this.option.axisLabel.textStyle||{},this.ecTheme.textStyle),this.series=t),this.zr&&(this.clear(),this._buildShape())},getCoord:function(e){this._dataMappingMethods&&(e=this._dataMappingMethods.value2Coord(e)),e=e<this._min?this._min:e,e=e>this._max?this._max:e;var t;return t=this.isHorizontal()?this.grid.getX()+(e-this._min)/(this._max-this._min)*this.grid.getWidth():this.grid.getYend()-(e-this._min)/(this._max-this._min)*this.grid.getHeight()},getCoordSize:function(e){return Math.abs(this.isHorizontal()?e/(this._max-this._min)*this.grid.getWidth():e/(this._max-this._min)*this.grid.getHeight())},getValueFromCoord:function(e){var t;return this.isHorizontal()?(e=e<this.grid.getX()?this.grid.getX():e,e=e>this.grid.getXend()?this.grid.getXend():e,t=this._min+(e-this.grid.getX())/this.grid.getWidth()*(this._max-this._min)):(e=e<this.grid.getY()?this.grid.getY():e,e=e>this.grid.getYend()?this.grid.getYend():e,t=this._max-(e-this.grid.getY())/this.grid.getHeight()*(this._max-this._min)),this._dataMappingMethods&&(t=this._dataMappingMethods.coord2Value(t)),t.toFixed(2)-0},isMaindAxis:function(e){for(var t=0,i=this._valueList.length;i>t;t++)if(this._valueList[t]===e)return!0;return!1}},l.inherits(t,i),e("../component").define("valueAxis",t),t}),i("echarts/util/date",[],function(){function e(e,t,i){i=i>1?i:2;for(var n,a,o,r,s=0,l=m.length;l>s;s++)if(n=m[s].value,a=Math.ceil(t/n)*n-Math.floor(e/n)*n,Math.round(a/n)<=1.2*i){o=m[s].formatter,r=m[s].value;break}return null==o&&(o="year",n=317088e5,a=Math.ceil(t/n)*n-Math.floor(e/n)*n,r=Math.round(a/(i-1)/n)*n),{formatter:o,gapValue:r}}function t(e){return 10>e?"0"+e:e}function i(e,i){("week"==e||"month"==e||"quarter"==e||"half-year"==e||"year"==e)&&(e="MM - dd\nyyyy");var n=h(i),a=n.getFullYear(),o=n.getMonth()+1,r=n.getDate(),s=n.getHours(),l=n.getMinutes(),m=n.getSeconds();return e=e.replace("MM",t(o)),e=e.toLowerCase(),e=e.replace("yyyy",a),e=e.replace("yy",a%100),e=e.replace("dd",t(r)),e=e.replace("d",r),e=e.replace("hh",t(s)),e=e.replace("h",s),e=e.replace("mm",t(l)),e=e.replace("m",l),e=e.replace("ss",t(m)),e=e.replace("s",m)}function n(e){return e=h(e),e.setDate(e.getDate()+8-e.getDay()),e}function a(e,t,i){return e=h(e),e.setMonth(Math.ceil((e.getMonth()+1)/i)*i),e.setDate(t),e}function o(e,t){return a(e,t,1)}function r(e,t){return a(e,t,3)}function s(e,t){return a(e,t,6)}function l(e,t){return a(e,t,12)}function h(e){return e instanceof Date?e:new Date("string"==typeof e?e.replace(/-/g,"/"):e)}var m=[{formatter:"hh : mm : ss",value:1e3},{formatter:"hh : mm : ss",value:5e3},{formatter:"hh : mm : ss",value:1e4},{formatter:"hh : mm : ss",value:15e3},{formatter:"hh : mm : ss",value:3e4},{formatter:"hh : mm\nMM - dd",value:6e4},{formatter:"hh : mm\nMM - dd",value:3e5},{formatter:"hh : mm\nMM - dd",value:6e5},{formatter:"hh : mm\nMM - dd",value:9e5},{formatter:"hh : mm\nMM - dd",value:18e5},{formatter:"hh : mm\nMM - dd",value:36e5},{formatter:"hh : mm\nMM - dd",value:72e5},{formatter:"hh : mm\nMM - dd",value:216e5},{formatter:"hh : mm\nMM - dd",value:432e5},{formatter:"MM - dd\nyyyy",value:864e5},{formatter:"week",value:6048e5},{formatter:"month",value:26784e5},{formatter:"quarter",value:8208e6},{formatter:"half-year",value:16416e6},{formatter:"year",value:32832e6}];return{getAutoFormatter:e,getNewDate:h,format:i,nextMonday:n,nextNthPerNmonth:a,nextNthOnMonth:o,nextNthOnQuarterYear:r,nextNthOnHalfYear:s,nextNthOnYear:l}}),i("echarts/util/smartSteps",[],function(){function e(e){return X.log(I(e))/X.LN10}function t(e){return X.pow(10,e)}function i(e){return e===w(e)}function n(e,t,n,a){b=a||{},f=b.steps||L,k=b.secs||W,n=v(+n||0)%99,e=+e||0,t=+t||0,x=_=0,"min"in b&&(e=+b.min||0,x=1),"max"in b&&(t=+b.max||0,_=1),e>t&&(t=[e,e=t][0]);var o=t-e;if(x&&_)return g(e,t,n);if((n||5)>o){if(i(e)&&i(t))return d(e,t,n);if(0===o)return p(e,t,n)}return h(e,t,n)}function a(e,i,n,a){a=a||0;var s=o((i-e)/n,-1),l=o(e,-1,1),h=o(i,-1),m=X.min(s.e,l.e,h.e);0===l.c?m=X.min(s.e,h.e):0===h.c&&(m=X.min(s.e,l.e)),r(s,{c:0,e:m}),r(l,s,1),r(h,s),a+=m,e=l.c,i=h.c;for(var V=(i-e)/n,U=t(a),d=0,p=[],c=n+1;c--;)p[c]=(e+V*c)*U;if(0>a){d=u(U),V=+(V*U).toFixed(d),e=+(e*U).toFixed(d),i=+(i*U).toFixed(d);for(var c=p.length;c--;)p[c]=p[c].toFixed(d),0===+p[c]&&(p[c]="0")}else e*=U,i*=U,V*=U;return k=0,f=0,b=0,{min:e,max:i,secs:n,step:V,fix:d,exp:a,pnts:p}}function o(n,a,o){a=v(a%10)||2,0>a&&(i(n)?a=(""+I(n)).replace(/0+$/,"").length||1:(n=n.toFixed(15).replace(/0+$/,""),a=n.replace(".","").replace(/^[-0]+/,"").length,n=+n));var r=w(e(n))-a+1,s=+(n*t(-r)).toFixed(15)||0;return s=o?w(s):K(s),!s&&(r=0),(""+I(s)).length>a&&(r+=1,s/=10),{c:s,e:r}}function r(e,i,n){var a=i.e-e.e;a&&(e.e+=a,e.c*=t(-a),e.c=n?w(e.c):K(e.c))}function s(e,t,i){e.e<t.e?r(t,e,i):r(e,t,i)}function l(e,t){t=t||L,e=o(e);for(var i=e.c,n=0;i>t[n];)n++;if(!t[n])for(i/=10,e.e+=1,n=0;i>t[n];)n++;return e.c=t[n],e}function h(e,t,n){var s,h=n||+k.slice(-1),p=l((t-e)/h,f),u=o(t-e),g=o(e,-1,1),b=o(t,-1);if(r(u,p),r(g,p,1),r(b,p),n?s=V(g,b,h):h=m(g,b),i(e)&&i(t)&&e*t>=0){if(h>t-e)return d(e,t,h);h=U(e,t,n,g,b,h)}var L=c(e,t,g.c,b.c);return g.c=L[0],b.c=L[1],(x||_)&&y(e,t,g,b),a(g.c,b.c,h,b.e)}function m(e,i){for(var n,a,o,r,s=[],h=k.length;h--;)n=k[h],a=l((i.c-e.c)/n,f),a=a.c*t(a.e),o=w(e.c/a)*a,r=K(i.c/a)*a,s[h]={min:o,max:r,step:a,span:r-o};return s.sort(function(e,t){var i=e.span-t.span;return 0===i&&(i=e.step-t.step),i}),s=s[0],n=s.span/s.step,e.c=s.min,i.c=s.max,3>n?2*n:n}function V(e,i,n){for(var a,o,r=i.c,s=(i.c-e.c)/n-1;r>e.c;)s=l(s+1,f),s=s.c*t(s.e),a=s*n,o=K(i.c/s)*s,r=o-a;var h=e.c-r,m=o-i.c,V=h-m;return V>1.1*s&&(V=v(V/s/2)*s,r+=V,o+=V),e.c=r,i.c=o,s}function U(e,n,a,o,r,s){var l=r.c-o.c,h=l/s*t(r.e);if(!i(h)&&(h=w(h),l=h*s,n-e>l&&(h+=1,l=h*s,!a&&h*(s-1)>=n-e&&(s-=1,l=h*s)),l>=n-e)){var m=l-(n-e);o.c=v(e-m/2),r.c=v(n+m/2),o.e=0,r.e=0}return s}function d(e,t,i){if(i=i||5,x)t=e+i;else if(_)e=t-i;else{var n=i-(t-e),o=v(e-n/2),r=v(t+n/2),s=c(e,t,o,r);e=s[0],t=s[1]}return a(e,t,i)}function p(e,t,i){i=i||5;var n=X.min(I(t/i),i)/2.1;return x?t=e+n:_?e=t-n:(e-=n,t+=n),h(e,t,i)}function c(e,t,i,n){
+return e>=0&&0>i?(n-=i,i=0):0>=t&&n>0&&(i-=n,n=0),[i,n]}function u(e){return e=(+e).toFixed(15).split("."),e.pop().replace(/0+$/,"").length}function y(e,t,i,n){if(x){var a=o(e,4,1);i.e-a.e>6&&(a={c:0,e:i.e}),s(i,a),s(n,a),n.c+=a.c-i.c,i.c=a.c}else if(_){var r=o(t,4);n.e-r.e>6&&(r={c:0,e:n.e}),s(i,r),s(n,r),i.c+=r.c-n.c,n.c=r.c}}function g(e,t,i){var n=i?[i]:k,s=t-e;if(0===s)return t=o(t,3),i=n[0],t.c=v(t.c+i/2),a(t.c-i,t.c,i,t.e);I(t/s)<1e-6&&(t=0),I(e/s)<1e-6&&(e=0);var l,h,m,V=[[5,10],[10,2],[50,10],[100,2]],U=[],d=[],p=o(t-e,3),c=o(e,-1,1),u=o(t,-1);r(c,p,1),r(u,p),s=u.c-c.c,p.c=s;for(var y=n.length;y--;){i=n[y],l=K(s/i),h=l*i-s,m=3*(h+3),m+=2*(i-n[0]+2),i%5===0&&(m-=10);for(var g=V.length;g--;)l%V[g][0]===0&&(m/=V[g][1]);d[y]=[i,l,h,m].join(),U[y]={secs:i,step:l,delta:h,score:m}}return U.sort(function(e,t){return e.score-t.score}),U=U[0],c.c=v(c.c-U.delta/2),u.c=v(u.c+U.delta/2),a(c.c,u.c,U.secs,p.e)}var b,f,k,x,_,L=[10,20,25,50],W=[4,5,6],X=Math,v=X.round,w=X.floor,K=X.ceil,I=X.abs;return n}),i("echarts/util/smartLogSteps",["require","./number"],function(e){function t(e){return i(),u=e||{},n(),a(),[o(),i()][0]}function i(){U=u=g=c=b=f=y=k=d=p=null}function n(){d=u.logLabelBase,null==d?(p="plain",d=10,c=I):(d=+d,1>d&&(d=10),p="exponent",c=L(d)),y=u.splitNumber,null==y&&(y=E);var e=parseFloat(u.dataMin),t=parseFloat(u.dataMax);isFinite(e)||isFinite(t)?isFinite(e)?isFinite(t)?e>t&&(t=[e,e=t][0]):t=e:e=t:e=t=1,U=u.logPositive,null==U&&(U=t>0||0===e),b=U?e:-t,f=U?t:-e,S>b&&(b=S),S>f&&(f=S)}function a(){function e(){y>m&&(y=m);var e=w(l(m/y)),t=v(l(m/e)),i=e*t,n=(i-U)/2,a=w(l(r-n));V(a-r)&&(a-=1),g=-a*c;for(var s=a;o>=s-e;s+=e)k.push(W(d,s))}function t(){for(var e=i(h,0),t=e+2;t>e&&a(e+1)+n(e+1)*C<r;)e++;for(var l=i(s,0),t=l-2;l>t&&a(l-1)+n(l-1)*C>o;)l--;g=-(a(e)*I+n(e)*J);for(var m=e;l>=m;m++){var V=a(m),U=n(m);k.push(W(10,V)*W(2,U))}}function i(e,t){return 3*e+t}function n(e){return e-3*a(e)}function a(e){return w(l(e/3))}k=[];var o=l(L(f)/c),r=l(L(b)/c),s=v(o),h=w(r),m=s-h,U=o-r;"exponent"===p?e():F>=m&&y>F?t():e()}function o(){for(var e=[],t=0,i=k.length;i>t;t++)e[t]=(U?1:-1)*k[t];!U&&e.reverse();var n=s(),a=n.value2Coord,o=a(e[0]),l=a(e[e.length-1]);return o===l&&(o-=1,l+=1),{dataMin:o,dataMax:l,tickList:e,logPositive:U,labelFormatter:r(),dataMappingMethods:n}}function r(){if("exponent"===p){var e=d,t=c;return function(i){if(!isFinite(parseFloat(i)))return"";var n="";return 0>i&&(i=-i,n="-"),n+e+m(L(i)/t)}}return function(e){return isFinite(parseFloat(e))?x.addCommas(h(e)):""}}function s(){var e=U,t=g;return{value2Coord:function(i){return null==i||isNaN(i)||!isFinite(i)?i:(i=parseFloat(i),isFinite(i)?e&&S>i?i=S:!e&&i>-S&&(i=-S):i=S,i=X(i),(e?1:-1)*(L(i)+t))},coord2Value:function(i){return null==i||isNaN(i)||!isFinite(i)?i:(i=parseFloat(i),isFinite(i)||(i=S),e?W(K,i-t):-W(K,-i+t))}}}function l(e){return+Number(+e).toFixed(14)}function h(e){return Number(e).toFixed(15).replace(/\.?0*$/,"")}function m(e){e=h(Math.round(e));for(var t=[],i=0,n=e.length;n>i;i++){var a=e.charAt(i);t.push(T[a]||"")}return t.join("")}function V(e){return e>-S&&S>e}var U,d,p,c,u,y,g,b,f,k,x=e("./number"),_=Math,L=_.log,W=_.pow,X=_.abs,v=_.ceil,w=_.floor,K=_.E,I=_.LN10,J=_.LN2,C=J/I,S=1e-9,E=5,F=2,T={0:"⁰",1:"¹",2:"²",3:"³",4:"⁴",5:"⁵",6:"⁶",7:"⁷",8:"⁸",9:"⁹","-":"⁻"};return t}),i("echarts/chart/line",["require","./base","zrender/shape/Polyline","../util/shape/Icon","../util/shape/HalfSmoothPolygon","../component/axis","../component/grid","../component/dataZoom","../config","../util/ecData","zrender/tool/util","zrender/tool/color","../chart"],function(e){function t(e,t,i,a,o){n.call(this,e,t,i,a,o),this.refresh(a)}function i(e,t,i){var n=t.x,a=t.y,r=t.width,s=t.height,l=s/2;t.symbol.match("empty")&&(e.fillStyle="#fff"),t.brushType="both";var h=t.symbol.replace("empty","").toLowerCase();h.match("star")?(l=h.replace("star","")-0||5,a-=1,h="star"):("rectangle"===h||"arrow"===h)&&(n+=(r-s)/2,r=s);var m="";if(h.match("image")&&(m=h.replace(new RegExp("^image:\\/\\/"),""),h="image",n+=Math.round((r-s)/2)-1,r=s+=2),h=o.prototype.iconLibrary[h]){var V=t.x,U=t.y;e.moveTo(V,U+l),e.lineTo(V+5,U+l),e.moveTo(V+t.width-5,U+l),e.lineTo(V+t.width,U+l);var d=this;h(e,{x:n+4,y:a+4,width:r-8,height:s-8,n:l,image:m},function(){d.modSelf(),i()})}else e.moveTo(n,a+l),e.lineTo(n+r,a+l)}var n=e("./base"),a=e("zrender/shape/Polyline"),o=e("../util/shape/Icon"),r=e("../util/shape/HalfSmoothPolygon");e("../component/axis"),e("../component/grid"),e("../component/dataZoom");var s=e("../config");s.line={zlevel:0,z:2,clickable:!0,legendHoverLink:!0,xAxisIndex:0,yAxisIndex:0,dataFilter:"nearest",itemStyle:{normal:{label:{show:!1},lineStyle:{width:2,type:"solid",shadowColor:"rgba(0,0,0,0)",shadowBlur:0,shadowOffsetX:0,shadowOffsetY:0}},emphasis:{label:{show:!1}}},symbolSize:2,showAllSymbol:!1};var l=e("../util/ecData"),h=e("zrender/tool/util"),m=e("zrender/tool/color");return t.prototype={type:s.CHART_TYPE_LINE,_buildShape:function(){this.finalPLMap={},this._buildPosition()},_buildHorizontal:function(e,t,i,n){for(var a,o,r,s,l,h,m,V,U,d=this.series,p=i[0][0],c=d[p],u=this.component.xAxis.getAxis(c.xAxisIndex||0),y={},g=0,b=t;b>g&&null!=u.getNameByIndex(g);g++){o=u.getCoordByIndex(g);for(var f=0,k=i.length;k>f;f++){a=this.component.yAxis.getAxis(d[i[f][0]].yAxisIndex||0),l=s=m=h=a.getCoord(0);for(var x=0,_=i[f].length;_>x;x++)p=i[f][x],c=d[p],V=c.data[g],U=this.getDataFromOption(V,"-"),y[p]=y[p]||[],n[p]=n[p]||{min:Number.POSITIVE_INFINITY,max:Number.NEGATIVE_INFINITY,sum:0,counter:0,average:0},"-"!==U?(U>=0?(s-=x>0?a.getCoordSize(U):l-a.getCoord(U),r=s):0>U&&(h+=x>0?a.getCoordSize(U):a.getCoord(U)-m,r=h),y[p].push([o,r,g,u.getNameByIndex(g),o,l]),n[p].min>U&&(n[p].min=U,n[p].minY=r,n[p].minX=o),n[p].max<U&&(n[p].max=U,n[p].maxY=r,n[p].maxX=o),n[p].sum+=U,n[p].counter++):y[p].length>0&&(this.finalPLMap[p]=this.finalPLMap[p]||[],this.finalPLMap[p].push(y[p]),y[p]=[])}s=this.component.grid.getY();for(var L,f=0,k=i.length;k>f;f++)for(var x=0,_=i[f].length;_>x;x++)p=i[f][x],c=d[p],V=c.data[g],U=this.getDataFromOption(V,"-"),"-"==U&&this.deepQuery([V,c,this.option],"calculable")&&(L=this.deepQuery([V,c],"symbolSize"),s+=2*L+5,r=s,this.shapeList.push(this._getCalculableItem(p,g,u.getNameByIndex(g),o,r,"horizontal")))}for(var W in y)y[W].length>0&&(this.finalPLMap[W]=this.finalPLMap[W]||[],this.finalPLMap[W].push(y[W]),y[W]=[]);this._calculMarkMapXY(n,i,"y"),this._buildBorkenLine(e,this.finalPLMap,u,"horizontal")},_buildVertical:function(e,t,i,n){for(var a,o,r,s,l,h,m,V,U,d=this.series,p=i[0][0],c=d[p],u=this.component.yAxis.getAxis(c.yAxisIndex||0),y={},g=0,b=t;b>g&&null!=u.getNameByIndex(g);g++){r=u.getCoordByIndex(g);for(var f=0,k=i.length;k>f;f++){a=this.component.xAxis.getAxis(d[i[f][0]].xAxisIndex||0),l=s=m=h=a.getCoord(0);for(var x=0,_=i[f].length;_>x;x++)p=i[f][x],c=d[p],V=c.data[g],U=this.getDataFromOption(V,"-"),y[p]=y[p]||[],n[p]=n[p]||{min:Number.POSITIVE_INFINITY,max:Number.NEGATIVE_INFINITY,sum:0,counter:0,average:0},"-"!==U?(U>=0?(s+=x>0?a.getCoordSize(U):a.getCoord(U)-l,o=s):0>U&&(h-=x>0?a.getCoordSize(U):m-a.getCoord(U),o=h),y[p].push([o,r,g,u.getNameByIndex(g),l,r]),n[p].min>U&&(n[p].min=U,n[p].minX=o,n[p].minY=r),n[p].max<U&&(n[p].max=U,n[p].maxX=o,n[p].maxY=r),n[p].sum+=U,n[p].counter++):y[p].length>0&&(this.finalPLMap[p]=this.finalPLMap[p]||[],this.finalPLMap[p].push(y[p]),y[p]=[])}s=this.component.grid.getXend();for(var L,f=0,k=i.length;k>f;f++)for(var x=0,_=i[f].length;_>x;x++)p=i[f][x],c=d[p],V=c.data[g],U=this.getDataFromOption(V,"-"),"-"==U&&this.deepQuery([V,c,this.option],"calculable")&&(L=this.deepQuery([V,c],"symbolSize"),s-=2*L+5,o=s,this.shapeList.push(this._getCalculableItem(p,g,u.getNameByIndex(g),o,r,"vertical")))}for(var W in y)y[W].length>0&&(this.finalPLMap[W]=this.finalPLMap[W]||[],this.finalPLMap[W].push(y[W]),y[W]=[]);this._calculMarkMapXY(n,i,"x"),this._buildBorkenLine(e,this.finalPLMap,u,"vertical")},_buildOther:function(e,t,i,n){for(var a,o=this.series,r={},s=0,l=i.length;l>s;s++)for(var h=0,m=i[s].length;m>h;h++){var V=i[s][h],U=o[V];a=this.component.xAxis.getAxis(U.xAxisIndex||0);var d=this.component.yAxis.getAxis(U.yAxisIndex||0),p=d.getCoord(0);r[V]=r[V]||[],n[V]=n[V]||{min0:Number.POSITIVE_INFINITY,min1:Number.POSITIVE_INFINITY,max0:Number.NEGATIVE_INFINITY,max1:Number.NEGATIVE_INFINITY,sum0:0,sum1:0,counter0:0,counter1:0,average0:0,average1:0};for(var c=0,u=U.data.length;u>c;c++){var y=U.data[c],g=this.getDataFromOption(y,"-");if(g instanceof Array){var b=a.getCoord(g[0]),f=d.getCoord(g[1]);r[V].push([b,f,c,g[0],b,p]),n[V].min0>g[0]&&(n[V].min0=g[0],n[V].minY0=f,n[V].minX0=b),n[V].max0<g[0]&&(n[V].max0=g[0],n[V].maxY0=f,n[V].maxX0=b),n[V].sum0+=g[0],n[V].counter0++,n[V].min1>g[1]&&(n[V].min1=g[1],n[V].minY1=f,n[V].minX1=b),n[V].max1<g[1]&&(n[V].max1=g[1],n[V].maxY1=f,n[V].maxX1=b),n[V].sum1+=g[1],n[V].counter1++}}}for(var k in r)r[k].length>0&&(this.finalPLMap[k]=this.finalPLMap[k]||[],this.finalPLMap[k].push(r[k]),r[k]=[]);this._calculMarkMapXY(n,i,"xy"),this._buildBorkenLine(e,this.finalPLMap,a,"other")},_buildBorkenLine:function(e,t,i,n){for(var o,s="other"==n?"horizontal":n,V=this.series,U=e.length-1;U>=0;U--){var d=e[U],p=V[d],c=t[d];if(p.type===this.type&&null!=c)for(var u=this._getBbox(d,s),y=this._sIndex2ColorMap[d],g=this.query(p,"itemStyle.normal.lineStyle.width"),b=this.query(p,"itemStyle.normal.lineStyle.type"),f=this.query(p,"itemStyle.normal.lineStyle.color"),k=this.getItemStyleColor(this.query(p,"itemStyle.normal.color"),d,-1),x=null!=this.query(p,"itemStyle.normal.areaStyle"),_=this.query(p,"itemStyle.normal.areaStyle.color"),L=0,W=c.length;W>L;L++){var X=c[L],v="other"!=n&&this._isLarge(s,X);if(v)X=this._getLargePointList(s,X,p.dataFilter);else for(var w=0,K=X.length;K>w;w++)o=p.data[X[w][2]],(this.deepQuery([o,p,this.option],"calculable")||this.deepQuery([o,p],"showAllSymbol")||"categoryAxis"===i.type&&i.isMainAxis(X[w][2])&&"none"!=this.deepQuery([o,p],"symbol"))&&this.shapeList.push(this._getSymbol(d,X[w][2],X[w][3],X[w][0],X[w][1],s));var I=new a({zlevel:p.zlevel,z:p.z,style:{miterLimit:g,pointList:X,strokeColor:f||k||y,lineWidth:g,lineType:b,smooth:this._getSmooth(p.smooth),smoothConstraint:u,shadowColor:this.query(p,"itemStyle.normal.lineStyle.shadowColor"),shadowBlur:this.query(p,"itemStyle.normal.lineStyle.shadowBlur"),shadowOffsetX:this.query(p,"itemStyle.normal.lineStyle.shadowOffsetX"),shadowOffsetY:this.query(p,"itemStyle.normal.lineStyle.shadowOffsetY")},hoverable:!1,_main:!0,_seriesIndex:d,_orient:s});if(l.pack(I,V[d],d,0,L,V[d].name),this.shapeList.push(I),x){var J=new r({zlevel:p.zlevel,z:p.z,style:{miterLimit:g,pointList:h.clone(X).concat([[X[X.length-1][4],X[X.length-1][5]],[X[0][4],X[0][5]]]),brushType:"fill",smooth:this._getSmooth(p.smooth),smoothConstraint:u,color:_?_:m.alpha(y,.5)},highlightStyle:{brushType:"fill"},hoverable:!1,_main:!0,_seriesIndex:d,_orient:s});l.pack(J,V[d],d,0,L,V[d].name),this.shapeList.push(J)}}}},_getBbox:function(e,t){var i=this.component.grid.getBbox(),n=this.xMarkMap[e];return null!=n.minX0?[[Math.min(n.minX0,n.maxX0,n.minX1,n.maxX1),Math.min(n.minY0,n.maxY0,n.minY1,n.maxY1)],[Math.max(n.minX0,n.maxX0,n.minX1,n.maxX1),Math.max(n.minY0,n.maxY0,n.minY1,n.maxY1)]]:("horizontal"===t?(i[0][1]=Math.min(n.minY,n.maxY),i[1][1]=Math.max(n.minY,n.maxY)):(i[0][0]=Math.min(n.minX,n.maxX),i[1][0]=Math.max(n.minX,n.maxX)),i)},_isLarge:function(e,t){return t.length<2?!1:"horizontal"===e?Math.abs(t[0][0]-t[1][0])<.5:Math.abs(t[0][1]-t[1][1])<.5},_getLargePointList:function(e,t,i){var n;n="horizontal"===e?this.component.grid.getWidth():this.component.grid.getHeight();var a=t.length,o=[];if("function"!=typeof i)switch(i){case"min":i=function(e){return Math.max.apply(null,e)};break;case"max":i=function(e){return Math.min.apply(null,e)};break;case"average":i=function(e){for(var t=0,i=0;i<e.length;i++)t+=e[i];return t/e.length};break;default:i=function(e){return e[0]}}for(var r=[],s=0;n>s;s++){var l=Math.floor(a/n*s),h=Math.min(Math.floor(a/n*(s+1)),a);if(!(l>=h)){for(var m=l;h>m;m++)r[m-l]="horizontal"===e?t[m][1]:t[m][0];r.length=h-l;for(var V=i(r),U=-1,d=1/0,m=l;h>m;m++){var p="horizontal"===e?t[m][1]:t[m][0],c=Math.abs(p-V);d>c&&(U=m,d=c)}var u=t[U].slice();"horizontal"===e?u[1]=V:u[0]=V,o.push(u)}}return o},_getSmooth:function(e){return e?.3:0},_getCalculableItem:function(e,t,i,n,a,o){var r=this.series,l=r[e].calculableHolderColor||this.ecTheme.calculableHolderColor||s.calculableHolderColor,h=this._getSymbol(e,t,i,n,a,o);return h.style.color=l,h.style.strokeColor=l,h.rotation=[0,0],h.hoverable=!1,h.draggable=!1,h.style.text=void 0,h},_getSymbol:function(e,t,i,n,a,o){var r=this.series,s=r[e],l=s.data[t],h=this.getSymbolShape(s,e,l,t,i,n,a,this._sIndex2ShapeMap[e],this._sIndex2ColorMap[e],"#fff","vertical"===o?"horizontal":"vertical");return h.zlevel=s.zlevel,h.z=s.z+1,this.deepQuery([l,s,this.option],"calculable")&&(this.setCalculable(h),h.draggable=!0),h},getMarkCoord:function(e,t){var i=this.series[e],n=this.xMarkMap[e],a=this.component.xAxis.getAxis(i.xAxisIndex),o=this.component.yAxis.getAxis(i.yAxisIndex);if(t.type&&("max"===t.type||"min"===t.type||"average"===t.type)){var r=null!=t.valueIndex?t.valueIndex:null!=n.maxX0?"1":"";return[n[t.type+"X"+r],n[t.type+"Y"+r],n[t.type+"Line"+r],n[t.type+r]]}return["string"!=typeof t.xAxis&&a.getCoordByIndex?a.getCoordByIndex(t.xAxis||0):a.getCoord(t.xAxis||0),"string"!=typeof t.yAxis&&o.getCoordByIndex?o.getCoordByIndex(t.yAxis||0):o.getCoord(t.yAxis||0)]},refresh:function(e){e&&(this.option=e,this.series=e.series),this.backupShapeList(),this._buildShape()},ontooltipHover:function(e,t){for(var i,n,a=e.seriesIndex,o=e.dataIndex,r=a.length;r--;)if(i=this.finalPLMap[a[r]])for(var s=0,l=i.length;l>s;s++){n=i[s];for(var h=0,m=n.length;m>h;h++)o===n[h][2]&&t.push(this._getSymbol(a[r],n[h][2],n[h][3],n[h][0],n[h][1],"horizontal"))}},addDataAnimation:function(e,t){function i(){c--,0===c&&t&&t()}function n(e){e.style.controlPointList=null}for(var a=this.series,o={},r=0,s=e.length;s>r;r++)o[e[r][0]]=e[r];for(var l,h,m,V,U,d,p,c=0,r=this.shapeList.length-1;r>=0;r--)if(U=this.shapeList[r]._seriesIndex,o[U]&&!o[U][3]){if(this.shapeList[r]._main&&this.shapeList[r].style.pointList.length>1){if(d=this.shapeList[r].style.pointList,h=Math.abs(d[0][0]-d[1][0]),V=Math.abs(d[0][1]-d[1][1]),p="horizontal"===this.shapeList[r]._orient,o[U][2]){if("half-smooth-polygon"===this.shapeList[r].type){var u=d.length;this.shapeList[r].style.pointList[u-3]=d[u-2],this.shapeList[r].style.pointList[u-3][p?0:1]=d[u-4][p?0:1],this.shapeList[r].style.pointList[u-2]=d[u-1]}this.shapeList[r].style.pointList.pop(),p?(l=h,m=0):(l=0,m=-V)}else{if(this.shapeList[r].style.pointList.shift(),"half-smooth-polygon"===this.shapeList[r].type){var y=this.shapeList[r].style.pointList.pop();p?y[0]=d[0][0]:y[1]=d[0][1],this.shapeList[r].style.pointList.push(y)}p?(l=-h,m=0):(l=0,m=V)}this.shapeList[r].style.controlPointList=null,this.zr.modShape(this.shapeList[r])}else{if(o[U][2]&&this.shapeList[r]._dataIndex===a[U].data.length-1){this.zr.delShape(this.shapeList[r].id);continue}if(!o[U][2]&&0===this.shapeList[r]._dataIndex){this.zr.delShape(this.shapeList[r].id);continue}}this.shapeList[r].position=[0,0],c++,this.zr.animate(this.shapeList[r].id,"").when(this.query(this.option,"animationDurationUpdate"),{position:[l,m]}).during(n).done(i).start()}c||t&&t()}},o.prototype.iconLibrary.legendLineIcon=i,h.inherits(t,n),e("../chart").define("line",t),t}),i("echarts/util/shape/HalfSmoothPolygon",["require","zrender/shape/Base","zrender/shape/util/smoothBezier","zrender/tool/util","zrender/shape/Polygon"],function(e){function t(e){i.call(this,e)}var i=e("zrender/shape/Base"),n=e("zrender/shape/util/smoothBezier"),a=e("zrender/tool/util");return t.prototype={type:"half-smooth-polygon",buildPath:function(t,i){var a=i.pointList;if(!(a.length<2))if(i.smooth){var o=n(a.slice(0,-2),i.smooth,!1,i.smoothConstraint);t.moveTo(a[0][0],a[0][1]);for(var r,s,l,h=a.length,m=0;h-3>m;m++)r=o[2*m],s=o[2*m+1],l=a[m+1],t.bezierCurveTo(r[0],r[1],s[0],s[1],l[0],l[1]);t.lineTo(a[h-2][0],a[h-2][1]),t.lineTo(a[h-1][0],a[h-1][1]),t.lineTo(a[0][0],a[0][1])}else e("zrender/shape/Polygon").prototype.buildPath(t,i)}},a.inherits(t,i),t}),i("echarts/chart/bar",["require","./base","zrender/shape/Rectangle","../component/axis","../component/grid","../component/dataZoom","../config","../util/ecData","zrender/tool/util","zrender/tool/color","../chart"],function(e){function t(e,t,n,a,o){i.call(this,e,t,n,a,o),this.refresh(a)}var i=e("./base"),n=e("zrender/shape/Rectangle");e("../component/axis"),e("../component/grid"),e("../component/dataZoom");var a=e("../config");a.bar={zlevel:0,z:2,clickable:!0,legendHoverLink:!0,xAxisIndex:0,yAxisIndex:0,barMinHeight:0,barGap:"30%",barCategoryGap:"20%",itemStyle:{normal:{barBorderColor:"#fff",barBorderRadius:0,barBorderWidth:0,label:{show:!1}},emphasis:{barBorderColor:"#fff",barBorderRadius:0,barBorderWidth:0,label:{show:!1}}}};var o=e("../util/ecData"),r=e("zrender/tool/util"),s=e("zrender/tool/color");return t.prototype={type:a.CHART_TYPE_BAR,_buildShape:function(){this._buildPosition()},_buildNormal:function(e,t,i,o,r){for(var s,l,h,m,V,U,d,p,c,u,y,g,b=this.series,f=i[0][0],k=b[f],x="horizontal"==r,_=this.component.xAxis,L=this.component.yAxis,W=x?_.getAxis(k.xAxisIndex):L.getAxis(k.yAxisIndex),X=this._mapSize(W,i),v=X.gap,w=X.barGap,K=X.barWidthMap,I=X.barMaxWidthMap,J=X.barWidth,C=X.barMinHeightMap,S=X.interval,E=this.deepQuery([this.ecTheme,a],"island.r"),F=0,T=t;T>F&&null!=W.getNameByIndex(F);F++){x?m=W.getCoordByIndex(F)-v/2:V=W.getCoordByIndex(F)+v/2;for(var z=0,A=i.length;A>z;z++){var M=b[i[z][0]].yAxisIndex||0,O=b[i[z][0]].xAxisIndex||0;s=x?L.getAxis(M):_.getAxis(O),d=U=c=p=s.getCoord(0);for(var P=0,D=i[z].length;D>P;P++)f=i[z][P],k=b[f],y=k.data[F],g=this.getDataFromOption(y,"-"),o[f]=o[f]||{min:Number.POSITIVE_INFINITY,max:Number.NEGATIVE_INFINITY,sum:0,counter:0,average:0},h=Math.min(I[f]||Number.MAX_VALUE,K[f]||J),"-"!==g&&(g>0?(l=P>0?s.getCoordSize(g):x?d-s.getCoord(g):s.getCoord(g)-d,1===D&&C[f]>l&&(l=C[f]),x?(U-=l,V=U):(m=U,U+=l)):0>g?(l=P>0?s.getCoordSize(g):x?s.getCoord(g)-c:c-s.getCoord(g),1===D&&C[f]>l&&(l=C[f]),x?(V=p,p+=l):(p-=l,m=p)):(l=0,x?(U-=l,V=U):(m=U,U+=l)),o[f][F]=x?m+h/2:V-h/2,o[f].min>g&&(o[f].min=g,x?(o[f].minY=V,o[f].minX=o[f][F]):(o[f].minX=m+l,o[f].minY=o[f][F])),o[f].max<g&&(o[f].max=g,x?(o[f].maxY=V,o[f].maxX=o[f][F]):(o[f].maxX=m+l,o[f].maxY=o[f][F])),o[f].sum+=g,o[f].counter++,F%S===0&&(u=this._getBarItem(f,F,W.getNameByIndex(F),m,V-(x?0:h),x?h:l,x?l:h,x?"vertical":"horizontal"),this.shapeList.push(new n(u))));for(var P=0,D=i[z].length;D>P;P++)f=i[z][P],k=b[f],y=k.data[F],g=this.getDataFromOption(y,"-"),h=Math.min(I[f]||Number.MAX_VALUE,K[f]||J),"-"==g&&this.deepQuery([y,k,this.option],"calculable")&&(x?(U-=E,V=U):(m=U,U+=E),u=this._getBarItem(f,F,W.getNameByIndex(F),m,V-(x?0:h),x?h:E,x?E:h,x?"vertical":"horizontal"),u.hoverable=!1,u.draggable=!1,u.style.lineWidth=1,u.style.brushType="stroke",u.style.strokeColor=k.calculableHolderColor||this.ecTheme.calculableHolderColor||a.calculableHolderColor,this.shapeList.push(new n(u)));x?m+=h+w:V-=h+w}}this._calculMarkMapXY(o,i,x?"y":"x")},_buildHorizontal:function(e,t,i,n){return this._buildNormal(e,t,i,n,"horizontal")},_buildVertical:function(e,t,i,n){return this._buildNormal(e,t,i,n,"vertical")},_buildOther:function(e,t,i,a){for(var o=this.series,r=0,s=i.length;s>r;r++)for(var l=0,h=i[r].length;h>l;l++){var m=i[r][l],V=o[m],U=V.xAxisIndex||0,d=this.component.xAxis.getAxis(U),p=d.getCoord(0),c=V.yAxisIndex||0,u=this.component.yAxis.getAxis(c),y=u.getCoord(0);a[m]=a[m]||{min0:Number.POSITIVE_INFINITY,min1:Number.POSITIVE_INFINITY,max0:Number.NEGATIVE_INFINITY,max1:Number.NEGATIVE_INFINITY,sum0:0,sum1:0,counter0:0,counter1:0,average0:0,average1:0};for(var g=0,b=V.data.length;b>g;g++){var f=V.data[g],k=this.getDataFromOption(f,"-");if(k instanceof Array){var x,_,L=d.getCoord(k[0]),W=u.getCoord(k[1]),X=[f,V],v=this.deepQuery(X,"barWidth")||10,w=this.deepQuery(X,"barHeight");null!=w?(x="horizontal",k[0]>0?(v=L-p,L-=v):v=k[0]<0?p-L:0,_=this._getBarItem(m,g,k[0],L,W-w/2,v,w,x)):(x="vertical",k[1]>0?w=y-W:k[1]<0?(w=W-y,W-=w):w=0,_=this._getBarItem(m,g,k[0],L-v/2,W,v,w,x)),this.shapeList.push(new n(_)),L=d.getCoord(k[0]),W=u.getCoord(k[1]),a[m].min0>k[0]&&(a[m].min0=k[0],a[m].minY0=W,a[m].minX0=L),a[m].max0<k[0]&&(a[m].max0=k[0],a[m].maxY0=W,a[m].maxX0=L),a[m].sum0+=k[0],a[m].counter0++,a[m].min1>k[1]&&(a[m].min1=k[1],a[m].minY1=W,a[m].minX1=L),a[m].max1<k[1]&&(a[m].max1=k[1],a[m].maxY1=W,a[m].maxX1=L),a[m].sum1+=k[1],a[m].counter1++}}}this._calculMarkMapXY(a,i,"xy")},_mapSize:function(e,t,i){var n,a,o=this._findSpecialBarSzie(t,i),r=o.barWidthMap,s=o.barMaxWidthMap,l=o.barMinHeightMap,h=o.sBarWidthCounter,m=o.sBarWidthTotal,V=o.barGap,U=o.barCategoryGap,d=1;if(t.length!=h){if(i)n=e.getGap(),V=0,a=+(n/t.length).toFixed(2),0>=a&&(d=Math.floor(t.length/n),a=1);else if(n="string"==typeof U&&U.match(/%$/)?(e.getGap()*(100-parseFloat(U))/100).toFixed(2)-0:e.getGap()-U,"string"==typeof V&&V.match(/%$/)?(V=parseFloat(V)/100,a=+((n-m)/((t.length-1)*V+t.length-h)).toFixed(2),V=a*V):(V=parseFloat(V),a=+((n-m-V*(t.length-1))/(t.length-h)).toFixed(2)),0>=a)return this._mapSize(e,t,!0)}else if(n=h>1?"string"==typeof U&&U.match(/%$/)?+(e.getGap()*(100-parseFloat(U))/100).toFixed(2):e.getGap()-U:m,a=0,V=h>1?+((n-m)/(h-1)).toFixed(2):0,0>V)return this._mapSize(e,t,!0);return this._recheckBarMaxWidth(t,r,s,l,n,a,V,d)},_findSpecialBarSzie:function(e,t){for(var i,n,a,o,r=this.series,s={},l={},h={},m=0,V=0,U=0,d=e.length;d>U;U++)for(var p={barWidth:!1,barMaxWidth:!1},c=0,u=e[U].length;u>c;c++){var y=e[U][c],g=r[y];if(!t){if(p.barWidth)s[y]=i;else if(i=this.query(g,"barWidth"),null!=i){s[y]=i,V+=i,m++,p.barWidth=!0;for(var b=0,f=c;f>b;b++){var k=e[U][b];s[k]=i}}if(p.barMaxWidth)l[y]=n;else if(n=this.query(g,"barMaxWidth"),null!=n){l[y]=n,p.barMaxWidth=!0;for(var b=0,f=c;f>b;b++){var k=e[U][b];l[k]=n}}}h[y]=this.query(g,"barMinHeight"),a=null!=a?a:this.query(g,"barGap"),o=null!=o?o:this.query(g,"barCategoryGap")}return{barWidthMap:s,barMaxWidthMap:l,barMinHeightMap:h,sBarWidth:i,sBarMaxWidth:n,sBarWidthCounter:m,sBarWidthTotal:V,barGap:a,barCategoryGap:o}},_recheckBarMaxWidth:function(e,t,i,n,a,o,r,s){for(var l=0,h=e.length;h>l;l++){var m=e[l][0];i[m]&&i[m]<o&&(a-=o-i[m])}return{barWidthMap:t,barMaxWidthMap:i,barMinHeightMap:n,gap:a,barWidth:o,barGap:r,interval:s}},_getBarItem:function(e,t,i,n,a,r,l,h){var m,V=this.series,U=V[e],d=U.data[t],p=this._sIndex2ColorMap[e],c=[d,U],u=this.deepMerge(c,"itemStyle.normal"),y=this.deepMerge(c,"itemStyle.emphasis"),g=u.barBorderWidth;m={zlevel:U.zlevel,z:U.z,clickable:this.deepQuery(c,"clickable"),style:{x:n,y:a,width:r,height:l,brushType:"both",color:this.getItemStyleColor(this.deepQuery(c,"itemStyle.normal.color")||p,e,t,d),radius:u.barBorderRadius,lineWidth:g,strokeColor:u.barBorderColor},highlightStyle:{color:this.getItemStyleColor(this.deepQuery(c,"itemStyle.emphasis.color"),e,t,d),radius:y.barBorderRadius,lineWidth:y.barBorderWidth,strokeColor:y.barBorderColor},_orient:h};var b=m.style;m.highlightStyle.color=m.highlightStyle.color||("string"==typeof b.color?s.lift(b.color,-.3):b.color),b.x=Math.floor(b.x),b.y=Math.floor(b.y),b.height=Math.ceil(b.height),b.width=Math.ceil(b.width),g>0&&b.height>g&&b.width>g?(b.y+=g/2,b.height-=g,b.x+=g/2,b.width-=g):b.brushType="fill",m.highlightStyle.textColor=m.highlightStyle.color,m=this.addLabel(m,U,d,i,h);for(var f=[b,m.highlightStyle],k=0,x=f.length;x>k;k++){var _=f[k].textPosition;if("insideLeft"===_||"insideRight"===_||"insideTop"===_||"insideBottom"===_){var L=5;switch(_){case"insideLeft":f[k].textX=b.x+L,f[k].textY=b.y+b.height/2,f[k].textAlign="left",f[k].textBaseline="middle";break;case"insideRight":f[k].textX=b.x+b.width-L,f[k].textY=b.y+b.height/2,f[k].textAlign="right",f[k].textBaseline="middle";break;case"insideTop":f[k].textX=b.x+b.width/2,f[k].textY=b.y+L/2,f[k].textAlign="center",f[k].textBaseline="top";break;case"insideBottom":f[k].textX=b.x+b.width/2,f[k].textY=b.y+b.height-L/2,f[k].textAlign="center",f[k].textBaseline="bottom"}f[k].textPosition="specific",f[k].textColor=f[k].textColor||"#fff"}}return this.deepQuery([d,U,this.option],"calculable")&&(this.setCalculable(m),m.draggable=!0),o.pack(m,V[e],e,V[e].data[t],t,i),m},getMarkCoord:function(e,t){var i,n,a=this.series[e],o=this.xMarkMap[e],r=this.component.xAxis.getAxis(a.xAxisIndex),s=this.component.yAxis.getAxis(a.yAxisIndex);if(!t.type||"max"!==t.type&&"min"!==t.type&&"average"!==t.type)if(o.isHorizontal){i="string"==typeof t.xAxis&&r.getIndexByName?r.getIndexByName(t.xAxis):t.xAxis||0;var l=o[i];l=null!=l?l:"string"!=typeof t.xAxis&&r.getCoordByIndex?r.getCoordByIndex(t.xAxis||0):r.getCoord(t.xAxis||0),n=[l,s.getCoord(t.yAxis||0)]}else{i="string"==typeof t.yAxis&&s.getIndexByName?s.getIndexByName(t.yAxis):t.yAxis||0;var h=o[i];h=null!=h?h:"string"!=typeof t.yAxis&&s.getCoordByIndex?s.getCoordByIndex(t.yAxis||0):s.getCoord(t.yAxis||0),n=[r.getCoord(t.xAxis||0),h]}else{var m=null!=t.valueIndex?t.valueIndex:null!=o.maxX0?"1":"";n=[o[t.type+"X"+m],o[t.type+"Y"+m],o[t.type+"Line"+m],o[t.type+m]]}return n},refresh:function(e){e&&(this.option=e,this.series=e.series),this.backupShapeList(),this._buildShape()},addDataAnimation:function(e,t){function i(){c--,0===c&&t&&t()}for(var n=this.series,a={},r=0,s=e.length;s>r;r++)a[e[r][0]]=e[r];for(var l,h,m,V,U,d,p,c=0,r=this.shapeList.length-1;r>=0;r--)if(d=o.get(this.shapeList[r],"seriesIndex"),a[d]&&!a[d][3]&&"rectangle"===this.shapeList[r].type){if(p=o.get(this.shapeList[r],"dataIndex"),U=n[d],a[d][2]&&p===U.data.length-1){this.zr.delShape(this.shapeList[r].id);continue}if(!a[d][2]&&0===p){this.zr.delShape(this.shapeList[r].id);continue}"horizontal"===this.shapeList[r]._orient?(V=this.component.yAxis.getAxis(U.yAxisIndex||0).getGap(),m=a[d][2]?-V:V,l=0):(h=this.component.xAxis.getAxis(U.xAxisIndex||0).getGap(),l=a[d][2]?h:-h,m=0),this.shapeList[r].position=[0,0],c++,this.zr.animate(this.shapeList[r].id,"").when(this.query(this.option,"animationDurationUpdate"),{position:[l,m]}).done(i).start()}c||t&&t()}},r.inherits(t,i),e("../chart").define("bar",t),t}),i("echarts/chart/scatter",["require","./base","../util/shape/Symbol","../component/axis","../component/grid","../component/dataZoom","../component/dataRange","../config","zrender/tool/util","zrender/tool/color","../chart"],function(e){function t(e,t,n,a,o){i.call(this,e,t,n,a,o),this.refresh(a)}var i=e("./base"),n=e("../util/shape/Symbol");e("../component/axis"),e("../component/grid"),e("../component/dataZoom"),e("../component/dataRange");var a=e("../config");a.scatter={zlevel:0,z:2,clickable:!0,legendHoverLink:!0,xAxisIndex:0,yAxisIndex:0,symbolSize:4,large:!1,largeThreshold:2e3,itemStyle:{normal:{label:{show:!1}},emphasis:{label:{show:!1}}}};var o=e("zrender/tool/util"),r=e("zrender/tool/color");return t.prototype={type:a.CHART_TYPE_SCATTER,_buildShape:function(){var e=this.series;this._sIndex2ColorMap={},this._symbol=this.option.symbolList,this._sIndex2ShapeMap={},this.selectedMap={},this.xMarkMap={};for(var t,i,n,o,s=this.component.legend,l=[],h=0,m=e.length;m>h;h++)if(t=e[h],i=t.name,t.type===a.CHART_TYPE_SCATTER){if(e[h]=this.reformOption(e[h]),this.legendHoverLink=e[h].legendHoverLink||this.legendHoverLink,this._sIndex2ShapeMap[h]=this.query(t,"symbol")||this._symbol[h%this._symbol.length],s){if(this.selectedMap[i]=s.isSelected(i),this._sIndex2ColorMap[h]=r.alpha(s.getColor(i),.5),n=s.getItemShape(i)){var o=this._sIndex2ShapeMap[h];n.style.brushType=o.match("empty")?"stroke":"both",o=o.replace("empty","").toLowerCase(),o.match("rectangle")&&(n.style.x+=Math.round((n.style.width-n.style.height)/2),n.style.width=n.style.height),o.match("star")&&(n.style.n=o.replace("star","")-0||5,o="star"),o.match("image")&&(n.style.image=o.replace(new RegExp("^image:\\/\\/"),""),n.style.x+=Math.round((n.style.width-n.style.height)/2),n.style.width=n.style.height,o="image"),n.style.iconType=o,s.setItemShape(i,n)}}else this.selectedMap[i]=!0,this._sIndex2ColorMap[h]=r.alpha(this.zr.getColor(h),.5);this.selectedMap[i]&&l.push(h)}this._buildSeries(l),this.addShapeList()},_buildSeries:function(e){if(0!==e.length){for(var t,i,n,a,o,r,s,l,h=this.series,m={},V=0,U=e.length;U>V;V++)if(t=e[V],i=h[t],0!==i.data.length){o=this.component.xAxis.getAxis(i.xAxisIndex||0),r=this.component.yAxis.getAxis(i.yAxisIndex||0),m[t]=[];for(var d=0,p=i.data.length;p>d;d++)n=i.data[d],a=this.getDataFromOption(n,"-"),"-"===a||a.length<2||(s=o.getCoord(a[0]),l=r.getCoord(a[1]),m[t].push([s,l,d,n.name||""]));this.xMarkMap[t]=this._markMap(o,r,i.data,m[t]),this.buildMark(t)}this._buildPointList(m)}},_markMap:function(e,t,i,n){for(var a,o={min0:Number.POSITIVE_INFINITY,max0:Number.NEGATIVE_INFINITY,sum0:0,counter0:0,average0:0,min1:Number.POSITIVE_INFINITY,max1:Number.NEGATIVE_INFINITY,sum1:0,counter1:0,average1:0},r=0,s=n.length;s>r;r++)a=i[n[r][2]].value||i[n[r][2]],o.min0>a[0]&&(o.min0=a[0],o.minY0=n[r][1],o.minX0=n[r][0]),o.max0<a[0]&&(o.max0=a[0],o.maxY0=n[r][1],o.maxX0=n[r][0]),o.sum0+=a[0],o.counter0++,o.min1>a[1]&&(o.min1=a[1],o.minY1=n[r][1],o.minX1=n[r][0]),o.max1<a[1]&&(o.max1=a[1],o.maxY1=n[r][1],o.maxX1=n[r][0]),o.sum1+=a[1],o.counter1++;var l=this.component.grid.getX(),h=this.component.grid.getXend(),m=this.component.grid.getY(),V=this.component.grid.getYend();o.average0=o.sum0/o.counter0;var U=e.getCoord(o.average0);o.averageLine0=[[U,V],[U,m]],o.minLine0=[[o.minX0,V],[o.minX0,m]],o.maxLine0=[[o.maxX0,V],[o.maxX0,m]],o.average1=o.sum1/o.counter1;var d=t.getCoord(o.average1);return o.averageLine1=[[l,d],[h,d]],o.minLine1=[[l,o.minY1],[h,o.minY1]],o.maxLine1=[[l,o.maxY1],[h,o.maxY1]],o},_buildPointList:function(e){var t,i,n,a,o=this.series;for(var r in e)if(t=o[r],i=e[r],t.large&&t.data.length>t.largeThreshold)this.shapeList.push(this._getLargeSymbol(t,i,this.getItemStyleColor(this.query(t,"itemStyle.normal.color"),r,-1)||this._sIndex2ColorMap[r]));else for(var s=0,l=i.length;l>s;s++)n=i[s],a=this._getSymbol(r,n[2],n[3],n[0],n[1]),a&&this.shapeList.push(a)},_getSymbol:function(e,t,i,n,a){var o,r=this.series,s=r[e],l=s.data[t],h=this.component.dataRange;if(h){if(o=isNaN(l[2])?this._sIndex2ColorMap[e]:h.getColor(l[2]),!o)return null}else o=this._sIndex2ColorMap[e];var m=this.getSymbolShape(s,e,l,t,i,n,a,this._sIndex2ShapeMap[e],o,"rgba(0,0,0,0)","vertical");return m.zlevel=s.zlevel,m.z=s.z,m._main=!0,m},_getLargeSymbol:function(e,t,i){return new n({zlevel:e.zlevel,z:e.z,_main:!0,hoverable:!1,style:{pointList:t,color:i,strokeColor:i},highlightStyle:{pointList:[]}})},getMarkCoord:function(e,t){var i,n=this.series[e],a=this.xMarkMap[e],o=this.component.xAxis.getAxis(n.xAxisIndex),r=this.component.yAxis.getAxis(n.yAxisIndex);if(!t.type||"max"!==t.type&&"min"!==t.type&&"average"!==t.type)i=["string"!=typeof t.xAxis&&o.getCoordByIndex?o.getCoordByIndex(t.xAxis||0):o.getCoord(t.xAxis||0),"string"!=typeof t.yAxis&&r.getCoordByIndex?r.getCoordByIndex(t.yAxis||0):r.getCoord(t.yAxis||0)];else{var s=null!=t.valueIndex?t.valueIndex:1;i=[a[t.type+"X"+s],a[t.type+"Y"+s],a[t.type+"Line"+s],a[t.type+s]]}return i},refresh:function(e){e&&(this.option=e,this.series=e.series),this.backupShapeList(),this._buildShape()},ondataRange:function(e,t){this.component.dataRange&&(this.refresh(),t.needRefresh=!0)}},o.inherits(t,i),e("../chart").define("scatter",t),t}),i("echarts/component/dataRange",["require","./base","zrender/shape/Text","zrender/shape/Rectangle","../util/shape/HandlePolygon","../config","zrender/tool/util","zrender/tool/event","zrender/tool/area","zrender/tool/color","../component"],function(e){function t(e,t,n,a,o){i.call(this,e,t,n,a,o);var s=this;s._ondrift=function(e,t){return s.__ondrift(this,e,t)},s._ondragend=function(){return s.__ondragend()},s._dataRangeSelected=function(e){return s.__dataRangeSelected(e)},s._dispatchHoverLink=function(e){return s.__dispatchHoverLink(e)},s._onhoverlink=function(e){return s.__onhoverlink(e);
+
+},this._selectedMap={},this._range={},this.refresh(a),t.bind(r.EVENT.HOVER,this._onhoverlink)}var i=e("./base"),n=e("zrender/shape/Text"),a=e("zrender/shape/Rectangle"),o=e("../util/shape/HandlePolygon"),r=e("../config");r.dataRange={zlevel:0,z:4,show:!0,orient:"vertical",x:"left",y:"bottom",backgroundColor:"rgba(0,0,0,0)",borderColor:"#ccc",borderWidth:0,padding:5,itemGap:10,itemWidth:20,itemHeight:14,precision:0,splitNumber:5,splitList:null,calculable:!1,selectedMode:!0,hoverLink:!0,realtime:!0,color:["#006edd","#e0ffff"],textStyle:{color:"#333"}};var s=e("zrender/tool/util"),l=e("zrender/tool/event"),h=e("zrender/tool/area"),m=e("zrender/tool/color");return t.prototype={type:r.COMPONENT_TYPE_DATARANGE,_textGap:10,_buildShape:function(){if(this._itemGroupLocation=this._getItemGroupLocation(),this._buildBackground(),this._isContinuity()?this._buildGradient():this._buildItem(),this.dataRangeOption.show)for(var e=0,t=this.shapeList.length;t>e;e++)this.zr.addShape(this.shapeList[e]);this._syncShapeFromRange()},_buildItem:function(){var e,t,i,o,r=this._valueTextList,s=r.length,l=this.getFont(this.dataRangeOption.textStyle),m=this._itemGroupLocation.x,V=this._itemGroupLocation.y,U=this.dataRangeOption.itemWidth,d=this.dataRangeOption.itemHeight,p=this.dataRangeOption.itemGap,c=h.getTextHeight("国",l);"vertical"==this.dataRangeOption.orient&&"right"==this.dataRangeOption.x&&(m=this._itemGroupLocation.x+this._itemGroupLocation.width-U);var u=!0;this.dataRangeOption.text&&(u=!1,this.dataRangeOption.text[0]&&(i=this._getTextShape(m,V,this.dataRangeOption.text[0]),"horizontal"==this.dataRangeOption.orient?m+=h.getTextWidth(this.dataRangeOption.text[0],l)+this._textGap:(V+=c+this._textGap,i.style.y+=c/2+this._textGap,i.style.textBaseline="bottom"),this.shapeList.push(new n(i))));for(var y=0;s>y;y++)e=r[y],o=this.getColorByIndex(y),t=this._getItemShape(m,V,U,d,this._selectedMap[y]?o:"#ccc"),t._idx=y,t.onmousemove=this._dispatchHoverLink,this.dataRangeOption.selectedMode&&(t.clickable=!0,t.onclick=this._dataRangeSelected),this.shapeList.push(new a(t)),u&&(i={zlevel:this.getZlevelBase(),z:this.getZBase(),style:{x:m+U+5,y:V,color:this._selectedMap[y]?this.dataRangeOption.textStyle.color:"#ccc",text:r[y],textFont:l,textBaseline:"top"},highlightStyle:{brushType:"fill"}},"vertical"==this.dataRangeOption.orient&&"right"==this.dataRangeOption.x&&(i.style.x-=U+10,i.style.textAlign="right"),i._idx=y,i.onmousemove=this._dispatchHoverLink,this.dataRangeOption.selectedMode&&(i.clickable=!0,i.onclick=this._dataRangeSelected),this.shapeList.push(new n(i))),"horizontal"==this.dataRangeOption.orient?m+=U+(u?5:0)+(u?h.getTextWidth(e,l):0)+p:V+=d+p;!u&&this.dataRangeOption.text[1]&&("horizontal"==this.dataRangeOption.orient?m=m-p+this._textGap:V=V-p+this._textGap,i=this._getTextShape(m,V,this.dataRangeOption.text[1]),"horizontal"!=this.dataRangeOption.orient&&(i.style.y-=5,i.style.textBaseline="top"),this.shapeList.push(new n(i)))},_buildGradient:function(){var t,i,o=this.getFont(this.dataRangeOption.textStyle),r=this._itemGroupLocation.x,s=this._itemGroupLocation.y,l=this.dataRangeOption.itemWidth,m=this.dataRangeOption.itemHeight,V=h.getTextHeight("国",o),U=10,d=!0;this.dataRangeOption.text&&(d=!1,this.dataRangeOption.text[0]&&(i=this._getTextShape(r,s,this.dataRangeOption.text[0]),"horizontal"==this.dataRangeOption.orient?r+=h.getTextWidth(this.dataRangeOption.text[0],o)+this._textGap:(s+=V+this._textGap,i.style.y+=V/2+this._textGap,i.style.textBaseline="bottom"),this.shapeList.push(new n(i))));for(var p=e("zrender/tool/color"),c=1/(this.dataRangeOption.color.length-1),u=[],y=0,g=this.dataRangeOption.color.length;g>y;y++)u.push([y*c,this.dataRangeOption.color[y]]);"horizontal"==this.dataRangeOption.orient?(t={zlevel:this.getZlevelBase(),z:this.getZBase(),style:{x:r,y:s,width:l*U,height:m,color:p.getLinearGradient(r,s,r+l*U,s,u)},hoverable:!1},r+=l*U+this._textGap):(t={zlevel:this.getZlevelBase(),z:this.getZBase(),style:{x:r,y:s,width:l,height:m*U,color:p.getLinearGradient(r,s,r,s+m*U,u)},hoverable:!1},s+=m*U+this._textGap),this.shapeList.push(new a(t)),this._calculableLocation=t.style,this.dataRangeOption.calculable&&(this._buildFiller(),this._bulidMask(),this._bulidHandle()),this._buildIndicator(),!d&&this.dataRangeOption.text[1]&&(i=this._getTextShape(r,s,this.dataRangeOption.text[1]),this.shapeList.push(new n(i)))},_buildIndicator:function(){var e,t,i=this._calculableLocation.x,n=this._calculableLocation.y,a=this._calculableLocation.width,r=this._calculableLocation.height,s=5;"horizontal"==this.dataRangeOption.orient?"bottom"!=this.dataRangeOption.y?(e=[[i,n+r],[i-s,n+r+s],[i+s,n+r+s]],t="bottom"):(e=[[i,n],[i-s,n-s],[i+s,n-s]],t="top"):"right"!=this.dataRangeOption.x?(e=[[i+a,n],[i+a+s,n-s],[i+a+s,n+s]],t="right"):(e=[[i,n],[i-s,n-s],[i-s,n+s]],t="left"),this._indicatorShape={style:{pointList:e,color:"#fff",__rect:{x:Math.min(e[0][0],e[1][0]),y:Math.min(e[0][1],e[1][1]),width:s*("horizontal"==this.dataRangeOption.orient?2:1),height:s*("horizontal"==this.dataRangeOption.orient?1:2)}},highlightStyle:{brushType:"fill",textPosition:t,textColor:this.dataRangeOption.textStyle.color},hoverable:!1},this._indicatorShape=new o(this._indicatorShape)},_buildFiller:function(){this._fillerShape={zlevel:this.getZlevelBase(),z:this.getZBase()+1,style:{x:this._calculableLocation.x,y:this._calculableLocation.y,width:this._calculableLocation.width,height:this._calculableLocation.height,color:"rgba(255,255,255,0)"},highlightStyle:{strokeColor:"rgba(255,255,255,0.5)",lineWidth:1},draggable:!0,ondrift:this._ondrift,ondragend:this._ondragend,onmousemove:this._dispatchHoverLink,_type:"filler"},this._fillerShape=new a(this._fillerShape),this.shapeList.push(this._fillerShape)},_bulidHandle:function(){var e,t,i,n,a,r,s,l,m=this._calculableLocation.x,V=this._calculableLocation.y,U=this._calculableLocation.width,d=this._calculableLocation.height,p=this.getFont(this.dataRangeOption.textStyle),c=h.getTextHeight("国",p),u=Math.max(h.getTextWidth(this._textFormat(this.dataRangeOption.max),p),h.getTextWidth(this._textFormat(this.dataRangeOption.min),p))+2;"horizontal"==this.dataRangeOption.orient?"bottom"!=this.dataRangeOption.y?(e=[[m,V],[m,V+d+c],[m-c,V+d+c],[m-1,V+d],[m-1,V]],t=m-u/2-c,i=V+d+c/2+2,n={x:m-u-c,y:V+d,width:u+c,height:c},a=[[m+U,V],[m+U,V+d+c],[m+U+c,V+d+c],[m+U+1,V+d],[m+U+1,V]],r=m+U+u/2+c,s=i,l={x:m+U,y:V+d,width:u+c,height:c}):(e=[[m,V+d],[m,V-c],[m-c,V-c],[m-1,V],[m-1,V+d]],t=m-u/2-c,i=V-c/2-2,n={x:m-u-c,y:V-c,width:u+c,height:c},a=[[m+U,V+d],[m+U,V-c],[m+U+c,V-c],[m+U+1,V],[m+U+1,V+d]],r=m+U+u/2+c,s=i,l={x:m+U,y:V-c,width:u+c,height:c}):(u+=c,"right"!=this.dataRangeOption.x?(e=[[m,V],[m+U+c,V],[m+U+c,V-c],[m+U,V-1],[m,V-1]],t=m+U+u/2+c/2,i=V-c/2,n={x:m+U,y:V-c,width:u+c,height:c},a=[[m,V+d],[m+U+c,V+d],[m+U+c,V+c+d],[m+U,V+1+d],[m,V+d+1]],r=t,s=V+d+c/2,l={x:m+U,y:V+d,width:u+c,height:c}):(e=[[m+U,V],[m-c,V],[m-c,V-c],[m,V-1],[m+U,V-1]],t=m-u/2-c/2,i=V-c/2,n={x:m-u-c,y:V-c,width:u+c,height:c},a=[[m+U,V+d],[m-c,V+d],[m-c,V+c+d],[m,V+1+d],[m+U,V+d+1]],r=t,s=V+d+c/2,l={x:m-u-c,y:V+d,width:u+c,height:c})),this._startShape={style:{pointList:e,text:this._textFormat(this.dataRangeOption.max),textX:t,textY:i,textFont:p,color:this.getColor(this.dataRangeOption.max),rect:n,x:e[0][0],y:e[0][1],_x:e[0][0],_y:e[0][1]}},this._startShape.highlightStyle={strokeColor:this._startShape.style.color,lineWidth:1},this._endShape={style:{pointList:a,text:this._textFormat(this.dataRangeOption.min),textX:r,textY:s,textFont:p,color:this.getColor(this.dataRangeOption.min),rect:l,x:a[0][0],y:a[0][1],_x:a[0][0],_y:a[0][1]}},this._endShape.highlightStyle={strokeColor:this._endShape.style.color,lineWidth:1},this._startShape.zlevel=this._endShape.zlevel=this.getZlevelBase(),this._startShape.z=this._endShape.z=this.getZBase()+1,this._startShape.draggable=this._endShape.draggable=!0,this._startShape.ondrift=this._endShape.ondrift=this._ondrift,this._startShape.ondragend=this._endShape.ondragend=this._ondragend,this._startShape.style.textColor=this._endShape.style.textColor=this.dataRangeOption.textStyle.color,this._startShape.style.textAlign=this._endShape.style.textAlign="center",this._startShape.style.textPosition=this._endShape.style.textPosition="specific",this._startShape.style.textBaseline=this._endShape.style.textBaseline="middle",this._startShape.style.width=this._endShape.style.width=0,this._startShape.style.height=this._endShape.style.height=0,this._startShape.style.textPosition=this._endShape.style.textPosition="specific",this._startShape=new o(this._startShape),this._endShape=new o(this._endShape),this.shapeList.push(this._startShape),this.shapeList.push(this._endShape)},_bulidMask:function(){var e=this._calculableLocation.x,t=this._calculableLocation.y,i=this._calculableLocation.width,n=this._calculableLocation.height;this._startMask={zlevel:this.getZlevelBase(),z:this.getZBase()+1,style:{x:e,y:t,width:"horizontal"==this.dataRangeOption.orient?0:i,height:"horizontal"==this.dataRangeOption.orient?n:0,color:"#ccc"},hoverable:!1},this._endMask={zlevel:this.getZlevelBase(),z:this.getZBase()+1,style:{x:"horizontal"==this.dataRangeOption.orient?e+i:e,y:"horizontal"==this.dataRangeOption.orient?t:t+n,width:"horizontal"==this.dataRangeOption.orient?0:i,height:"horizontal"==this.dataRangeOption.orient?n:0,color:"#ccc"},hoverable:!1},this._startMask=new a(this._startMask),this._endMask=new a(this._endMask),this.shapeList.push(this._startMask),this.shapeList.push(this._endMask)},_buildBackground:function(){var e=this.reformCssArray(this.dataRangeOption.padding);this.shapeList.push(new a({zlevel:this.getZlevelBase(),z:this.getZBase(),hoverable:!1,style:{x:this._itemGroupLocation.x-e[3],y:this._itemGroupLocation.y-e[0],width:this._itemGroupLocation.width+e[3]+e[1],height:this._itemGroupLocation.height+e[0]+e[2],brushType:0===this.dataRangeOption.borderWidth?"fill":"both",color:this.dataRangeOption.backgroundColor,strokeColor:this.dataRangeOption.borderColor,lineWidth:this.dataRangeOption.borderWidth}}))},_getItemGroupLocation:function(){var e=this._valueTextList,t=e.length,i=this.dataRangeOption.itemGap,n=this.dataRangeOption.itemWidth,a=this.dataRangeOption.itemHeight,o=0,r=0,s=this.getFont(this.dataRangeOption.textStyle),l=h.getTextHeight("国",s),m=10;if("horizontal"==this.dataRangeOption.orient){if(this.dataRangeOption.text||this._isContinuity())o=(this._isContinuity()?n*m+i:t*(n+i))+(this.dataRangeOption.text&&"undefined"!=typeof this.dataRangeOption.text[0]?h.getTextWidth(this.dataRangeOption.text[0],s)+this._textGap:0)+(this.dataRangeOption.text&&"undefined"!=typeof this.dataRangeOption.text[1]?h.getTextWidth(this.dataRangeOption.text[1],s)+this._textGap:0);else{n+=5;for(var V=0;t>V;V++)o+=n+h.getTextWidth(e[V],s)+i}o-=i,r=Math.max(l,a)}else{var U;if(this.dataRangeOption.text||this._isContinuity())r=(this._isContinuity()?a*m+i:t*(a+i))+(this.dataRangeOption.text&&"undefined"!=typeof this.dataRangeOption.text[0]?this._textGap+l:0)+(this.dataRangeOption.text&&"undefined"!=typeof this.dataRangeOption.text[1]?this._textGap+l:0),U=Math.max(h.getTextWidth(this.dataRangeOption.text&&this.dataRangeOption.text[0]||"",s),h.getTextWidth(this.dataRangeOption.text&&this.dataRangeOption.text[1]||"",s)),o=Math.max(n,U);else{r=(a+i)*t,n+=5,U=0;for(var V=0;t>V;V++)U=Math.max(U,h.getTextWidth(e[V],s));o=n+U}r-=i}var d,p=this.reformCssArray(this.dataRangeOption.padding),c=this.zr.getWidth();switch(this.dataRangeOption.x){case"center":d=Math.floor((c-o)/2);break;case"left":d=p[3]+this.dataRangeOption.borderWidth;break;case"right":d=c-o-p[1]-this.dataRangeOption.borderWidth;break;default:d=this.parsePercent(this.dataRangeOption.x,c),d=isNaN(d)?0:d}var u,y=this.zr.getHeight();switch(this.dataRangeOption.y){case"top":u=p[0]+this.dataRangeOption.borderWidth;break;case"bottom":u=y-r-p[2]-this.dataRangeOption.borderWidth;break;case"center":u=Math.floor((y-r)/2);break;default:u=this.parsePercent(this.dataRangeOption.y,y),u=isNaN(u)?0:u}if(this.dataRangeOption.calculable){var g=Math.max(h.getTextWidth(this.dataRangeOption.max,s),h.getTextWidth(this.dataRangeOption.min,s))+l;"horizontal"==this.dataRangeOption.orient?(g>d&&(d=g),d+o+g>c&&(d-=g)):(l>u&&(u=l),u+r+l>y&&(u-=l))}return{x:d,y:u,width:o,height:r}},_getTextShape:function(e,t,i){return{zlevel:this.getZlevelBase(),z:this.getZBase(),style:{x:"horizontal"==this.dataRangeOption.orient?e:this._itemGroupLocation.x+this._itemGroupLocation.width/2,y:"horizontal"==this.dataRangeOption.orient?this._itemGroupLocation.y+this._itemGroupLocation.height/2:t,color:this.dataRangeOption.textStyle.color,text:i,textFont:this.getFont(this.dataRangeOption.textStyle),textBaseline:"horizontal"==this.dataRangeOption.orient?"middle":"top",textAlign:"horizontal"==this.dataRangeOption.orient?"left":"center"},hoverable:!1}},_getItemShape:function(e,t,i,n,a){return{zlevel:this.getZlevelBase(),z:this.getZBase(),style:{x:e,y:t+1,width:i,height:n-2,color:a},highlightStyle:{strokeColor:a,lineWidth:1}}},__ondrift:function(e,t,i){var n=this._calculableLocation.x,a=this._calculableLocation.y,o=this._calculableLocation.width,r=this._calculableLocation.height;return"horizontal"==this.dataRangeOption.orient?e.style.x+t<=n?e.style.x=n:e.style.x+t+e.style.width>=n+o?e.style.x=n+o-e.style.width:e.style.x+=t:e.style.y+i<=a?e.style.y=a:e.style.y+i+e.style.height>=a+r?e.style.y=a+r-e.style.height:e.style.y+=i,"filler"==e._type?this._syncHandleShape():this._syncFillerShape(e),this.dataRangeOption.realtime&&this._dispatchDataRange(),!0},__ondragend:function(){this.isDragend=!0},ondragend:function(e,t){this.isDragend&&e.target&&(t.dragOut=!0,t.dragIn=!0,this.dataRangeOption.realtime||this._dispatchDataRange(),t.needRefresh=!1,this.isDragend=!1)},_syncShapeFromRange:function(){var e=this.dataRangeOption.range||{},t=e.start,i=e.end;if(t>i&&(t=[i,i=t][0]),this._range.end=null!=t?t:null!=this._range.end?this._range.end:0,this._range.start=null!=i?i:null!=this._range.start?this._range.start:100,100!=this._range.start||0!==this._range.end){if("horizontal"==this.dataRangeOption.orient){var n=this._fillerShape.style.width;this._fillerShape.style.x+=n*(100-this._range.start)/100,this._fillerShape.style.width=n*(this._range.start-this._range.end)/100}else{var a=this._fillerShape.style.height;this._fillerShape.style.y+=a*(100-this._range.start)/100,this._fillerShape.style.height=a*(this._range.start-this._range.end)/100}this.zr.modShape(this._fillerShape.id),this._syncHandleShape()}},_syncHandleShape:function(){var e=this._calculableLocation.x,t=this._calculableLocation.y,i=this._calculableLocation.width,n=this._calculableLocation.height;"horizontal"==this.dataRangeOption.orient?(this._startShape.style.x=this._fillerShape.style.x,this._startMask.style.width=this._startShape.style.x-e,this._endShape.style.x=this._fillerShape.style.x+this._fillerShape.style.width,this._endMask.style.x=this._endShape.style.x,this._endMask.style.width=e+i-this._endShape.style.x,this._range.start=Math.ceil(100-(this._startShape.style.x-e)/i*100),this._range.end=Math.floor(100-(this._endShape.style.x-e)/i*100)):(this._startShape.style.y=this._fillerShape.style.y,this._startMask.style.height=this._startShape.style.y-t,this._endShape.style.y=this._fillerShape.style.y+this._fillerShape.style.height,this._endMask.style.y=this._endShape.style.y,this._endMask.style.height=t+n-this._endShape.style.y,this._range.start=Math.ceil(100-(this._startShape.style.y-t)/n*100),this._range.end=Math.floor(100-(this._endShape.style.y-t)/n*100)),this._syncShape()},_syncFillerShape:function(e){var t,i,n=this._calculableLocation.x,a=this._calculableLocation.y,o=this._calculableLocation.width,r=this._calculableLocation.height;"horizontal"==this.dataRangeOption.orient?(t=this._startShape.style.x,i=this._endShape.style.x,e.id==this._startShape.id&&t>=i?(i=t,this._endShape.style.x=t):e.id==this._endShape.id&&t>=i&&(t=i,this._startShape.style.x=t),this._fillerShape.style.x=t,this._fillerShape.style.width=i-t,this._startMask.style.width=t-n,this._endMask.style.x=i,this._endMask.style.width=n+o-i,this._range.start=Math.ceil(100-(t-n)/o*100),this._range.end=Math.floor(100-(i-n)/o*100)):(t=this._startShape.style.y,i=this._endShape.style.y,e.id==this._startShape.id&&t>=i?(i=t,this._endShape.style.y=t):e.id==this._endShape.id&&t>=i&&(t=i,this._startShape.style.y=t),this._fillerShape.style.y=t,this._fillerShape.style.height=i-t,this._startMask.style.height=t-a,this._endMask.style.y=i,this._endMask.style.height=a+r-i,this._range.start=Math.ceil(100-(t-a)/r*100),this._range.end=Math.floor(100-(i-a)/r*100)),this._syncShape()},_syncShape:function(){this._startShape.position=[this._startShape.style.x-this._startShape.style._x,this._startShape.style.y-this._startShape.style._y],this._startShape.style.text=this._textFormat(this._gap*this._range.start+this.dataRangeOption.min),this._startShape.style.color=this._startShape.highlightStyle.strokeColor=this.getColor(this._gap*this._range.start+this.dataRangeOption.min),this._endShape.position=[this._endShape.style.x-this._endShape.style._x,this._endShape.style.y-this._endShape.style._y],this._endShape.style.text=this._textFormat(this._gap*this._range.end+this.dataRangeOption.min),this._endShape.style.color=this._endShape.highlightStyle.strokeColor=this.getColor(this._gap*this._range.end+this.dataRangeOption.min),this.zr.modShape(this._startShape.id),this.zr.modShape(this._endShape.id),this.zr.modShape(this._startMask.id),this.zr.modShape(this._endMask.id),this.zr.modShape(this._fillerShape.id),this.zr.refreshNextFrame()},_dispatchDataRange:function(){this.messageCenter.dispatch(r.EVENT.DATA_RANGE,null,{range:{start:this._range.end,end:this._range.start}},this.myChart)},__dataRangeSelected:function(e){if("single"===this.dataRangeOption.selectedMode)for(var t in this._selectedMap)this._selectedMap[t]=!1;var i=e.target._idx;this._selectedMap[i]=!this._selectedMap[i];var n,a;this._useCustomizedSplit()?(n=this._splitList[i].max,a=this._splitList[i].min):(n=(this._colorList.length-i)*this._gap+this.dataRangeOption.min,a=n-this._gap),this.messageCenter.dispatch(r.EVENT.DATA_RANGE_SELECTED,e.event,{selected:this._selectedMap,target:i,valueMax:n,valueMin:a},this.myChart),this.messageCenter.dispatch(r.EVENT.REFRESH,null,null,this.myChart)},__dispatchHoverLink:function(e){var t,i;if(this.dataRangeOption.calculable){var n,a=this.dataRangeOption.max-this.dataRangeOption.min;n="horizontal"==this.dataRangeOption.orient?(1-(l.getX(e.event)-this._calculableLocation.x)/this._calculableLocation.width)*a:(1-(l.getY(e.event)-this._calculableLocation.y)/this._calculableLocation.height)*a,t=n-.05*a,i=n+.05*a}else if(this._useCustomizedSplit()){var o=e.target._idx;i=this._splitList[o].max,t=this._splitList[o].min}else{var o=e.target._idx;i=(this._colorList.length-o)*this._gap+this.dataRangeOption.min,t=i-this._gap}this.messageCenter.dispatch(r.EVENT.DATA_RANGE_HOVERLINK,e.event,{valueMin:t,valueMax:i},this.myChart)},__onhoverlink:function(e){if(this.dataRangeOption.show&&this.dataRangeOption.hoverLink&&this._indicatorShape&&e&&null!=e.seriesIndex&&null!=e.dataIndex){var t=e.value;if(""===t||isNaN(t))return;t<this.dataRangeOption.min?t=this.dataRangeOption.min:t>this.dataRangeOption.max&&(t=this.dataRangeOption.max),this._indicatorShape.position="horizontal"==this.dataRangeOption.orient?[(this.dataRangeOption.max-t)/(this.dataRangeOption.max-this.dataRangeOption.min)*this._calculableLocation.width,0]:[0,(this.dataRangeOption.max-t)/(this.dataRangeOption.max-this.dataRangeOption.min)*this._calculableLocation.height],this._indicatorShape.style.text=this._textFormat(e.value),this._indicatorShape.style.color=this.getColor(t),this.zr.addHoverShape(this._indicatorShape)}},_textFormat:function(e,t){var i=this.dataRangeOption;if(e!==-Number.MAX_VALUE&&(e=(+e).toFixed(i.precision)),null!=t&&t!==Number.MAX_VALUE&&(t=(+t).toFixed(i.precision)),i.formatter){if("string"==typeof i.formatter)return i.formatter.replace("{value}",e===-Number.MAX_VALUE?"min":e).replace("{value2}",t===Number.MAX_VALUE?"max":t);if("function"==typeof i.formatter)return i.formatter.call(this.myChart,e,t)}return null==t?e:e===-Number.MAX_VALUE?"< "+t:t===Number.MAX_VALUE?"> "+e:e+" - "+t},_isContinuity:function(){var e=this.dataRangeOption;return!(e.splitList?e.splitList.length>0:e.splitNumber>0)||e.calculable},_useCustomizedSplit:function(){var e=this.dataRangeOption;return e.splitList&&e.splitList.length>0},_buildColorList:function(e){if(this._colorList=m.getGradientColors(this.dataRangeOption.color,Math.max((e-this.dataRangeOption.color.length)/(this.dataRangeOption.color.length-1),0)+1),this._colorList.length>e){for(var t=this._colorList.length,i=[this._colorList[0]],n=t/(e-1),a=1;e-1>a;a++)i.push(this._colorList[Math.floor(a*n)]);i.push(this._colorList[t-1]),this._colorList=i}if(this._useCustomizedSplit())for(var o=this._splitList,a=0,t=o.length;t>a;a++)o[a].color&&(this._colorList[a]=o[a].color)},_buildGap:function(e){if(!this._useCustomizedSplit()){var t=this.dataRangeOption.precision;for(this._gap=(this.dataRangeOption.max-this.dataRangeOption.min)/e;this._gap.toFixed(t)-0!=this._gap&&5>t;)t++;this.dataRangeOption.precision=t,this._gap=((this.dataRangeOption.max-this.dataRangeOption.min)/e).toFixed(t)-0}},_buildDataList:function(e){for(var t=this._valueTextList=[],i=this.dataRangeOption,n=this._useCustomizedSplit(),a=0;e>a;a++){this._selectedMap[a]=!0;var o="";if(n){var r=this._splitList[e-1-a];o=null!=r.label?r.label:null!=r.single?this._textFormat(r.single):this._textFormat(r.min,r.max)}else o=this._textFormat(a*this._gap+i.min,(a+1)*this._gap+i.min);t.unshift(o)}},_buildSplitList:function(){if(this._useCustomizedSplit())for(var e=this.dataRangeOption.splitList,t=this._splitList=[],i=0,n=e.length;n>i;i++){var a=e[i];if(!a||null==a.start&&null==a.end)throw new Error("Empty item exists in splitList!");var o={label:a.label,color:a.color};o.min=a.start,o.max=a.end,o.min>o.max&&(o.min=[o.max,o.max=o.min][0]),o.min===o.max&&(o.single=o.max),null==o.min&&(o.min=-Number.MAX_VALUE),null==o.max&&(o.max=Number.MAX_VALUE),t.push(o)}},refresh:function(e){if(e){this.option=e,this.option.dataRange=this.reformOption(this.option.dataRange);var t=this.dataRangeOption=this.option.dataRange;if(!this._useCustomizedSplit()&&(null==t.min||null==t.max))throw new Error("option.dataRange.min or option.dataRange.max has not been defined.");this.myChart.canvasSupported||(t.realtime=!1);var i=this._isContinuity()?100:this._useCustomizedSplit()?t.splitList.length:t.splitNumber;this._buildSplitList(),this._buildColorList(i),this._buildGap(i),this._buildDataList(i)}this.clear(),this._buildShape()},getColor:function(e){if(isNaN(e))return null;var t;if(this._useCustomizedSplit()){for(var i=this._splitList,n=0,a=i.length;a>n;n++)if(i[n].min<=e&&i[n].max>=e){t=n;break}}else{if(this.dataRangeOption.min==this.dataRangeOption.max)return this._colorList[0];if(e<this.dataRangeOption.min?e=this.dataRangeOption.min:e>this.dataRangeOption.max&&(e=this.dataRangeOption.max),this.dataRangeOption.calculable&&(e-(this._gap*this._range.start+this.dataRangeOption.min)>5e-5||e-(this._gap*this._range.end+this.dataRangeOption.min)<-5e-5))return null;t=this._colorList.length-Math.ceil((e-this.dataRangeOption.min)/(this.dataRangeOption.max-this.dataRangeOption.min)*this._colorList.length),t==this._colorList.length&&t--}return this._selectedMap[t]?this._colorList[t]:null},getColorByIndex:function(e){return e>=this._colorList.length?e=this._colorList.length-1:0>e&&(e=0),this._colorList[e]},onbeforDispose:function(){this.messageCenter.unbind(r.EVENT.HOVER,this._onhoverlink)}},s.inherits(t,i),e("../component").define("dataRange",t),t}),i("echarts/util/shape/HandlePolygon",["require","zrender/shape/Base","zrender/shape/Polygon","zrender/tool/util"],function(e){function t(e){i.call(this,e)}var i=e("zrender/shape/Base"),n=e("zrender/shape/Polygon"),a=e("zrender/tool/util");return t.prototype={type:"handle-polygon",buildPath:function(e,t){n.prototype.buildPath(e,t)},isCover:function(e,t){var i=this.transformCoordToLocal(e,t);e=i[0],t=i[1];var n=this.style.rect;return e>=n.x&&e<=n.x+n.width&&t>=n.y&&t<=n.y+n.height?!0:!1}},a.inherits(t,i),t}),i("echarts/chart/k",["require","./base","../util/shape/Candle","../component/axis","../component/grid","../component/dataZoom","../config","../util/ecData","zrender/tool/util","../chart"],function(e){function t(e,t,n,a,o){i.call(this,e,t,n,a,o),this.refresh(a)}var i=e("./base"),n=e("../util/shape/Candle");e("../component/axis"),e("../component/grid"),e("../component/dataZoom");var a=e("../config");a.k={zlevel:0,z:2,clickable:!0,hoverable:!0,legendHoverLink:!1,xAxisIndex:0,yAxisIndex:0,itemStyle:{normal:{color:"#fff",color0:"#00aa11",lineStyle:{width:1,color:"#ff3200",color0:"#00aa11"},label:{show:!1}},emphasis:{label:{show:!1}}}};var o=e("../util/ecData"),r=e("zrender/tool/util");return t.prototype={type:a.CHART_TYPE_K,_buildShape:function(){var e=this.series;this.selectedMap={};for(var t,i={top:[],bottom:[]},n=0,o=e.length;o>n;n++)e[n].type===a.CHART_TYPE_K&&(e[n]=this.reformOption(e[n]),this.legendHoverLink=e[n].legendHoverLink||this.legendHoverLink,t=this.component.xAxis.getAxis(e[n].xAxisIndex),t.type===a.COMPONENT_TYPE_AXIS_CATEGORY&&i[t.getPosition()].push(n));for(var r in i)i[r].length>0&&this._buildSinglePosition(r,i[r]);this.addShapeList()},_buildSinglePosition:function(e,t){var i=this._mapData(t),n=i.locationMap,a=i.maxDataLength;if(0!==a&&0!==n.length){this._buildHorizontal(t,a,n);for(var o=0,r=t.length;r>o;o++)this.buildMark(t[o])}},_mapData:function(e){for(var t,i,n=this.series,a=this.component.legend,o=[],r=0,s=0,l=e.length;l>s;s++)t=n[e[s]],i=t.name,this.selectedMap[i]=a?a.isSelected(i):!0,this.selectedMap[i]&&o.push(e[s]),r=Math.max(r,t.data.length);return{locationMap:o,maxDataLength:r}},_buildHorizontal:function(e,t,i){for(var n,a,o,r,s,l,h,m,V,U,d=this.series,p={},c=0,u=i.length;u>c;c++){n=i[c],a=d[n],o=a.xAxisIndex||0,r=this.component.xAxis.getAxis(o),h=a.barWidth||Math.floor(r.getGap()/2),U=a.barMaxWidth,U&&h>U&&(h=U),s=a.yAxisIndex||0,l=this.component.yAxis.getAxis(s),p[n]=[];for(var y=0,g=t;g>y&&null!=r.getNameByIndex(y);y++)m=a.data[y],V=this.getDataFromOption(m,"-"),"-"!==V&&4==V.length&&p[n].push([r.getCoordByIndex(y),h,l.getCoord(V[0]),l.getCoord(V[1]),l.getCoord(V[2]),l.getCoord(V[3]),y,r.getNameByIndex(y)])}this._buildKLine(e,p)},_buildKLine:function(e,t){for(var i,n,o,r,s,l,h,m,V,U,d,p,c,u,y,g,b,f=this.series,k=0,x=e.length;x>k;k++)if(b=e[k],d=f[b],u=t[b],this._isLarge(u)&&(u=this._getLargePointList(u)),d.type===a.CHART_TYPE_K&&null!=u){p=d,i=this.query(p,"itemStyle.normal.lineStyle.width"),n=this.query(p,"itemStyle.normal.lineStyle.color"),o=this.query(p,"itemStyle.normal.lineStyle.color0"),r=this.query(p,"itemStyle.normal.color"),s=this.query(p,"itemStyle.normal.color0"),l=this.query(p,"itemStyle.emphasis.lineStyle.width"),h=this.query(p,"itemStyle.emphasis.lineStyle.color"),m=this.query(p,"itemStyle.emphasis.lineStyle.color0"),V=this.query(p,"itemStyle.emphasis.color"),U=this.query(p,"itemStyle.emphasis.color0");for(var _=0,L=u.length;L>_;_++)y=u[_],c=d.data[y[6]],p=c,g=y[3]<y[2],this.shapeList.push(this._getCandle(b,y[6],y[7],y[0],y[1],y[2],y[3],y[4],y[5],g?this.query(p,"itemStyle.normal.color")||r:this.query(p,"itemStyle.normal.color0")||s,this.query(p,"itemStyle.normal.lineStyle.width")||i,g?this.query(p,"itemStyle.normal.lineStyle.color")||n:this.query(p,"itemStyle.normal.lineStyle.color0")||o,g?this.query(p,"itemStyle.emphasis.color")||V||r:this.query(p,"itemStyle.emphasis.color0")||U||s,this.query(p,"itemStyle.emphasis.lineStyle.width")||l||i,g?this.query(p,"itemStyle.emphasis.lineStyle.color")||h||n:this.query(p,"itemStyle.emphasis.lineStyle.color0")||m||o))}},_isLarge:function(e){return e[0][1]<.5},_getLargePointList:function(e){for(var t=this.component.grid.getWidth(),i=e.length,n=[],a=0;t>a;a++)n[a]=e[Math.floor(i/t*a)];return n},_getCandle:function(e,t,i,a,r,s,l,h,m,V,U,d,p,c,u){var y=this.series,g=y[e],b=g.data[t],f=[b,g],k={zlevel:g.zlevel,z:g.z,clickable:this.deepQuery(f,"clickable"),hoverable:this.deepQuery(f,"hoverable"),style:{x:a,y:[s,l,h,m],width:r,color:V,strokeColor:d,lineWidth:U,brushType:"both"},highlightStyle:{color:p,strokeColor:u,lineWidth:c},_seriesIndex:e};return k=this.addLabel(k,g,b,i),o.pack(k,g,e,b,t,i),k=new n(k)},getMarkCoord:function(e,t){var i=this.series[e],n=this.component.xAxis.getAxis(i.xAxisIndex),a=this.component.yAxis.getAxis(i.yAxisIndex);return["string"!=typeof t.xAxis&&n.getCoordByIndex?n.getCoordByIndex(t.xAxis||0):n.getCoord(t.xAxis||0),"string"!=typeof t.yAxis&&a.getCoordByIndex?a.getCoordByIndex(t.yAxis||0):a.getCoord(t.yAxis||0)]},refresh:function(e){e&&(this.option=e,this.series=e.series),this.backupShapeList(),this._buildShape()},addDataAnimation:function(e,t){function i(){p--,0===p&&t&&t()}for(var n=this.series,a={},r=0,s=e.length;s>r;r++)a[e[r][0]]=e[r];for(var l,h,m,V,U,d,p=0,r=0,s=this.shapeList.length;s>r;r++)if(U=this.shapeList[r]._seriesIndex,a[U]&&!a[U][3]&&"candle"===this.shapeList[r].type){if(d=o.get(this.shapeList[r],"dataIndex"),V=n[U],a[U][2]&&d===V.data.length-1){this.zr.delShape(this.shapeList[r].id);continue}if(!a[U][2]&&0===d){this.zr.delShape(this.shapeList[r].id);continue}h=this.component.xAxis.getAxis(V.xAxisIndex||0).getGap(),l=a[U][2]?h:-h,m=0,p++,this.zr.animate(this.shapeList[r].id,"").when(this.query(this.option,"animationDurationUpdate"),{position:[l,m]}).done(i).start()}p||t&&t()}},r.inherits(t,i),e("../chart").define("k",t),t}),i("echarts/chart/pie",["require","./base","zrender/shape/Text","zrender/shape/Ring","zrender/shape/Circle","zrender/shape/Sector","zrender/shape/Polyline","../config","../util/ecData","zrender/tool/util","zrender/tool/math","zrender/tool/color","../chart"],function(e){function t(e,t,n,a,o){i.call(this,e,t,n,a,o);var r=this;r.shapeHandler.onmouseover=function(e){var t=e.target,i=h.get(t,"seriesIndex"),n=h.get(t,"dataIndex"),a=h.get(t,"special"),o=[t.style.x,t.style.y],s=t.style.startAngle,l=t.style.endAngle,m=((l+s)/2+360)%360,V=t.highlightStyle.color,U=r.getLabel(i,n,a,o,m,V,!0);U&&r.zr.addHoverShape(U);var d=r.getLabelLine(i,n,o,t.style.r0,t.style.r,m,V,!0);d&&r.zr.addHoverShape(d)},this.refresh(a)}var i=e("./base"),n=e("zrender/shape/Text"),a=e("zrender/shape/Ring"),o=e("zrender/shape/Circle"),r=e("zrender/shape/Sector"),s=e("zrender/shape/Polyline"),l=e("../config");l.pie={zlevel:0,z:2,clickable:!0,legendHoverLink:!0,center:["50%","50%"],radius:[0,"75%"],clockWise:!0,startAngle:90,minAngle:0,selectedOffset:10,itemStyle:{normal:{borderColor:"rgba(0,0,0,0)",borderWidth:1,label:{show:!0,position:"outer"},labelLine:{show:!0,length:20,lineStyle:{width:1,type:"solid"}}},emphasis:{borderColor:"rgba(0,0,0,0)",borderWidth:1,label:{show:!1},labelLine:{show:!1,length:20,lineStyle:{width:1,type:"solid"}}}}};var h=e("../util/ecData"),m=e("zrender/tool/util"),V=e("zrender/tool/math"),U=e("zrender/tool/color");return t.prototype={type:l.CHART_TYPE_PIE,_buildShape:function(){var e=this.series,t=this.component.legend;this.selectedMap={},this._selected={};var i,n,r;this._selectedMode=!1;for(var s,m=0,V=e.length;V>m;m++)if(e[m].type===l.CHART_TYPE_PIE){if(e[m]=this.reformOption(e[m]),this.legendHoverLink=e[m].legendHoverLink||this.legendHoverLink,s=e[m].name||"",this.selectedMap[s]=t?t.isSelected(s):!0,!this.selectedMap[s])continue;i=this.parseCenter(this.zr,e[m].center),n=this.parseRadius(this.zr,e[m].radius),this._selectedMode=this._selectedMode||e[m].selectedMode,this._selected[m]=[],this.deepQuery([e[m],this.option],"calculable")&&(r={zlevel:e[m].zlevel,z:e[m].z,hoverable:!1,style:{x:i[0],y:i[1],r0:n[0]<=10?0:n[0]-10,r:n[1]+10,brushType:"stroke",lineWidth:1,strokeColor:e[m].calculableHolderColor||this.ecTheme.calculableHolderColor||l.calculableHolderColor}},h.pack(r,e[m],m,void 0,-1),this.setCalculable(r),r=n[0]<=10?new o(r):new a(r),this.shapeList.push(r)),this._buildSinglePie(m),this.buildMark(m)}this.addShapeList()},_buildSinglePie:function(e){for(var t,i=this.series,n=i[e],a=n.data,o=this.component.legend,r=0,s=0,l=0,h=Number.NEGATIVE_INFINITY,m=[],V=0,U=a.length;U>V;V++)t=a[V].name,
+this.selectedMap[t]=o?o.isSelected(t):!0,this.selectedMap[t]&&!isNaN(a[V].value)&&(0!==+a[V].value?r++:s++,l+=+a[V].value,h=Math.max(h,+a[V].value));if(0!==l){for(var d,p,c,u,y,g,b=100,f=n.clockWise,k=(n.startAngle.toFixed(2)-0+360)%360,x=n.minAngle||.01,_=360-x*r-.01*s,L=n.roseType,V=0,U=a.length;U>V;V++)if(t=a[V].name,this.selectedMap[t]&&!isNaN(a[V].value)){if(p=o?o.getColor(t):this.zr.getColor(V),b=a[V].value/l,d="area"!=L?f?k-b*_-(0!==b?x:.01):b*_+k+(0!==b?x:.01):f?k-360/U:360/U+k,d=d.toFixed(2)-0,b=(100*b).toFixed(2),c=this.parseCenter(this.zr,n.center),u=this.parseRadius(this.zr,n.radius),y=+u[0],g=+u[1],"radius"===L?g=a[V].value/h*(g-y)*.8+.2*(g-y)+y:"area"===L&&(g=Math.sqrt(a[V].value/h)*(g-y)+y),f){var W;W=k,k=d,d=W}this._buildItem(m,e,V,b,a[V].selected,c,y,g,k,d,p),f||(k=d)}this._autoLabelLayout(m,c,g);for(var V=0,U=m.length;U>V;V++)this.shapeList.push(m[V]);m=null}},_buildItem:function(e,t,i,n,a,o,r,s,l,m,V){var U=this.series,d=((m+l)/2+360)%360,p=this.getSector(t,i,n,a,o,r,s,l,m,V);h.pack(p,U[t],t,U[t].data[i],i,U[t].data[i].name,n),e.push(p);var c=this.getLabel(t,i,n,o,d,V,!1),u=this.getLabelLine(t,i,o,r,s,d,V,!1);u&&(h.pack(u,U[t],t,U[t].data[i],i,U[t].data[i].name,n),e.push(u)),c&&(h.pack(c,U[t],t,U[t].data[i],i,U[t].data[i].name,n),c._labelLine=u,e.push(c))},getSector:function(e,t,i,n,a,o,s,l,h,m){var d=this.series,p=d[e],c=p.data[t],u=[c,p],y=this.deepMerge(u,"itemStyle.normal")||{},g=this.deepMerge(u,"itemStyle.emphasis")||{},b=this.getItemStyleColor(y.color,e,t,c)||m,f=this.getItemStyleColor(g.color,e,t,c)||("string"==typeof b?U.lift(b,-.2):b),k={zlevel:p.zlevel,z:p.z,clickable:this.deepQuery(u,"clickable"),style:{x:a[0],y:a[1],r0:o,r:s,startAngle:l,endAngle:h,brushType:"both",color:b,lineWidth:y.borderWidth,strokeColor:y.borderColor,lineJoin:"round"},highlightStyle:{color:f,lineWidth:g.borderWidth,strokeColor:g.borderColor,lineJoin:"round"},_seriesIndex:e,_dataIndex:t};if(n){var x=((k.style.startAngle+k.style.endAngle)/2).toFixed(2)-0;k.style._hasSelected=!0,k.style._x=k.style.x,k.style._y=k.style.y;var _=this.query(p,"selectedOffset");k.style.x+=V.cos(x,!0)*_,k.style.y-=V.sin(x,!0)*_,this._selected[e][t]=!0}else this._selected[e][t]=!1;return this._selectedMode&&(k.onclick=this.shapeHandler.onclick),this.deepQuery([c,p,this.option],"calculable")&&(this.setCalculable(k),k.draggable=!0),(this._needLabel(p,c,!0)||this._needLabelLine(p,c,!0))&&(k.onmouseover=this.shapeHandler.onmouseover),k=new r(k)},getLabel:function(e,t,i,a,o,r,s){var l=this.series,h=l[e],U=h.data[t];if(this._needLabel(h,U,s)){var d,p,c,u=s?"emphasis":"normal",y=m.merge(m.clone(U.itemStyle)||{},h.itemStyle),g=y[u].label,b=g.textStyle||{},f=a[0],k=a[1],x=this.parseRadius(this.zr,h.radius),_="middle";g.position=g.position||y.normal.label.position,"center"===g.position?(d=f,p=k,c="center"):"inner"===g.position||"inside"===g.position?(x=(x[0]+x[1])*(g.distance||.5),d=Math.round(f+x*V.cos(o,!0)),p=Math.round(k-x*V.sin(o,!0)),r="#fff",c="center"):(x=x[1]- -y[u].labelLine.length,d=Math.round(f+x*V.cos(o,!0)),p=Math.round(k-x*V.sin(o,!0)),c=o>=90&&270>=o?"right":"left"),"center"!=g.position&&"inner"!=g.position&&"inside"!=g.position&&(d+="left"===c?20:-20),U.__labelX=d-("left"===c?5:-5),U.__labelY=p;var L=new n({zlevel:h.zlevel,z:h.z+1,hoverable:!1,style:{x:d,y:p,color:b.color||r,text:this.getLabelText(e,t,i,u),textAlign:b.align||c,textBaseline:b.baseline||_,textFont:this.getFont(b)},highlightStyle:{brushType:"fill"}});return L._radius=x,L._labelPosition=g.position||"outer",L._rect=L.getRect(L.style),L._seriesIndex=e,L._dataIndex=t,L}},getLabelText:function(e,t,i,n){var a=this.series,o=a[e],r=o.data[t],s=this.deepQuery([r,o],"itemStyle."+n+".label.formatter");return s?"function"==typeof s?s.call(this.myChart,{seriesIndex:e,seriesName:o.name||"",series:o,dataIndex:t,data:r,name:r.name,value:r.value,percent:i}):"string"==typeof s?(s=s.replace("{a}","{a0}").replace("{b}","{b0}").replace("{c}","{c0}").replace("{d}","{d0}"),s=s.replace("{a0}",o.name).replace("{b0}",r.name).replace("{c0}",r.value).replace("{d0}",i)):void 0:r.name},getLabelLine:function(e,t,i,n,a,o,r,l){var h=this.series,U=h[e],d=U.data[t];if(this._needLabelLine(U,d,l)){var p=l?"emphasis":"normal",c=m.merge(m.clone(d.itemStyle)||{},U.itemStyle),u=c[p].labelLine,y=u.lineStyle||{},g=i[0],b=i[1],f=a,k=this.parseRadius(this.zr,U.radius)[1]- -u.length,x=V.cos(o,!0),_=V.sin(o,!0);return new s({zlevel:U.zlevel,z:U.z+1,hoverable:!1,style:{pointList:[[g+f*x,b-f*_],[g+k*x,b-k*_],[d.__labelX,d.__labelY]],strokeColor:y.color||r,lineType:y.type,lineWidth:y.width},_seriesIndex:e,_dataIndex:t})}},_needLabel:function(e,t,i){return this.deepQuery([t,e],"itemStyle."+(i?"emphasis":"normal")+".label.show")},_needLabelLine:function(e,t,i){return this.deepQuery([t,e],"itemStyle."+(i?"emphasis":"normal")+".labelLine.show")},_autoLabelLayout:function(e,t,i){for(var n=[],a=[],o=0,r=e.length;r>o;o++)("outer"===e[o]._labelPosition||"outside"===e[o]._labelPosition)&&(e[o]._rect._y=e[o]._rect.y,e[o]._rect.x<t[0]?n.push(e[o]):a.push(e[o]));this._layoutCalculate(n,t,i,-1),this._layoutCalculate(a,t,i,1)},_layoutCalculate:function(e,t,i,n){function a(t,i,n){for(var a=t;i>a;a++)if(e[a]._rect.y+=n,e[a].style.y+=n,e[a]._labelLine&&(e[a]._labelLine.style.pointList[1][1]+=n,e[a]._labelLine.style.pointList[2][1]+=n),a>t&&i>a+1&&e[a+1]._rect.y>e[a]._rect.y+e[a]._rect.height)return void o(a,n/2);o(i-1,n/2)}function o(t,i){for(var n=t;n>=0&&(e[n]._rect.y-=i,e[n].style.y-=i,e[n]._labelLine&&(e[n]._labelLine.style.pointList[1][1]-=i,e[n]._labelLine.style.pointList[2][1]-=i),!(n>0&&e[n]._rect.y>e[n-1]._rect.y+e[n-1]._rect.height));n--);}function r(e,t,i,n,a){for(var o,r,s,l=i[0],h=i[1],m=a>0?t?Number.MAX_VALUE:0:t?Number.MAX_VALUE:0,V=0,U=e.length;U>V;V++)r=Math.abs(e[V]._rect.y-h),s=e[V]._radius-n,o=n+s>r?Math.sqrt((n+s+20)*(n+s+20)-Math.pow(e[V]._rect.y-h,2)):Math.abs(e[V]._rect.x+(a>0?0:e[V]._rect.width)-l),t&&o>=m&&(o=m-10),!t&&m>=o&&(o=m+10),e[V]._rect.x=e[V].style.x=l+o*a,e[V]._labelLine&&(e[V]._labelLine.style.pointList[2][0]=l+(o-5)*a,e[V]._labelLine.style.pointList[1][0]=l+(o-20)*a),m=o}e.sort(function(e,t){return e._rect.y-t._rect.y});for(var s,l=0,h=e.length,m=[],V=[],U=0;h>U;U++)s=e[U]._rect.y-l,0>s&&a(U,h,-s,n),l=e[U]._rect.y+e[U]._rect.height;this.zr.getHeight()-l<0&&o(h-1,l-this.zr.getHeight());for(var U=0;h>U;U++)e[U]._rect.y>=t[1]?V.push(e[U]):m.push(e[U]);r(V,!0,t,i,n),r(m,!1,t,i,n)},reformOption:function(e){var t=m.merge;return e=t(t(e||{},m.clone(this.ecTheme.pie||{})),m.clone(l.pie)),e.itemStyle.normal.label.textStyle=this.getTextStyle(e.itemStyle.normal.label.textStyle),e.itemStyle.emphasis.label.textStyle=this.getTextStyle(e.itemStyle.emphasis.label.textStyle),this.z=e.z,this.zlevel=e.zlevel,e},refresh:function(e){e&&(this.option=e,this.series=e.series),this.backupShapeList(),this._buildShape()},addDataAnimation:function(e,t){function i(){s--,0===s&&t&&t()}for(var n=this.series,a={},o=0,r=e.length;r>o;o++)a[e[o][0]]=e[o];var s=0,h={},m={},V={},U=this.shapeList;this.shapeList=[];for(var d,p,c,u={},o=0,r=e.length;r>o;o++)d=e[o][0],p=e[o][2],c=e[o][3],n[d]&&n[d].type===l.CHART_TYPE_PIE&&(p?(c||(h[d+"_"+n[d].data.length]="delete"),u[d]=1):c?u[d]=0:(h[d+"_-1"]="delete",u[d]=-1),this._buildSinglePie(d));for(var y,g,o=0,r=this.shapeList.length;r>o;o++)switch(d=this.shapeList[o]._seriesIndex,y=this.shapeList[o]._dataIndex,g=d+"_"+y,this.shapeList[o].type){case"sector":h[g]=this.shapeList[o];break;case"text":m[g]=this.shapeList[o];break;case"polyline":V[g]=this.shapeList[o]}this.shapeList=[];for(var b,o=0,r=U.length;r>o;o++)if(d=U[o]._seriesIndex,a[d]){if(y=U[o]._dataIndex+u[d],g=d+"_"+y,b=h[g],!b)continue;if("sector"===U[o].type)"delete"!=b?(s++,this.zr.animate(U[o].id,"style").when(400,{startAngle:b.style.startAngle,endAngle:b.style.endAngle}).done(i).start()):(s++,this.zr.animate(U[o].id,"style").when(400,u[d]<0?{startAngle:U[o].style.startAngle}:{endAngle:U[o].style.endAngle}).done(i).start());else if("text"===U[o].type||"polyline"===U[o].type)if("delete"===b)this.zr.delShape(U[o].id);else switch(U[o].type){case"text":s++,b=m[g],this.zr.animate(U[o].id,"style").when(400,{x:b.style.x,y:b.style.y}).done(i).start();break;case"polyline":s++,b=V[g],this.zr.animate(U[o].id,"style").when(400,{pointList:b.style.pointList}).done(i).start()}}this.shapeList=U,s||t&&t()},onclick:function(e){var t=this.series;if(this.isClick&&e.target){this.isClick=!1;for(var i,n=e.target,a=n.style,o=h.get(n,"seriesIndex"),r=h.get(n,"dataIndex"),s=0,m=this.shapeList.length;m>s;s++)if(this.shapeList[s].id===n.id){if(o=h.get(n,"seriesIndex"),r=h.get(n,"dataIndex"),a._hasSelected)n.style.x=n.style._x,n.style.y=n.style._y,n.style._hasSelected=!1,this._selected[o][r]=!1;else{var U=((a.startAngle+a.endAngle)/2).toFixed(2)-0;n.style._hasSelected=!0,this._selected[o][r]=!0,n.style._x=n.style.x,n.style._y=n.style.y,i=this.query(t[o],"selectedOffset"),n.style.x+=V.cos(U,!0)*i,n.style.y-=V.sin(U,!0)*i}this.zr.modShape(n.id)}else this.shapeList[s].style._hasSelected&&"single"===this._selectedMode&&(o=h.get(this.shapeList[s],"seriesIndex"),r=h.get(this.shapeList[s],"dataIndex"),this.shapeList[s].style.x=this.shapeList[s].style._x,this.shapeList[s].style.y=this.shapeList[s].style._y,this.shapeList[s].style._hasSelected=!1,this._selected[o][r]=!1,this.zr.modShape(this.shapeList[s].id));this.messageCenter.dispatch(l.EVENT.PIE_SELECTED,e.event,{selected:this._selected,target:h.get(n,"name")},this.myChart),this.zr.refreshNextFrame()}}},m.inherits(t,i),e("../chart").define("pie",t),t}),i("echarts/chart/radar",["require","./base","zrender/shape/Polygon","../component/polar","../config","../util/ecData","zrender/tool/util","zrender/tool/color","../util/accMath","../chart"],function(e){function t(e,t,n,a,o){i.call(this,e,t,n,a,o),this.refresh(a)}var i=e("./base"),n=e("zrender/shape/Polygon");e("../component/polar");var a=e("../config");a.radar={zlevel:0,z:2,clickable:!0,legendHoverLink:!0,polarIndex:0,itemStyle:{normal:{label:{show:!1},lineStyle:{width:2,type:"solid"}},emphasis:{label:{show:!1}}},symbolSize:2};var o=e("../util/ecData"),r=e("zrender/tool/util"),s=e("zrender/tool/color");return t.prototype={type:a.CHART_TYPE_RADAR,_buildShape:function(){this.selectedMap={},this._symbol=this.option.symbolList,this._queryTarget,this._dropBoxList=[],this._radarDataCounter=0;for(var e,t=this.series,i=this.component.legend,n=0,o=t.length;o>n;n++)t[n].type===a.CHART_TYPE_RADAR&&(this.serie=this.reformOption(t[n]),this.legendHoverLink=t[n].legendHoverLink||this.legendHoverLink,e=this.serie.name||"",this.selectedMap[e]=i?i.isSelected(e):!0,this.selectedMap[e]&&(this._queryTarget=[this.serie,this.option],this.deepQuery(this._queryTarget,"calculable")&&this._addDropBox(n),this._buildSingleRadar(n),this.buildMark(n)));this.addShapeList()},_buildSingleRadar:function(e){for(var t,i,n,a,o=this.component.legend,r=this.serie.data,s=this.deepQuery(this._queryTarget,"calculable"),l=0;l<r.length;l++)n=r[l].name||"",this.selectedMap[n]=o?o.isSelected(n):!0,this.selectedMap[n]&&(o?(i=o.getColor(n),t=o.getItemShape(n),t&&(t.style.brushType=this.deepQuery([r[l],this.serie],"itemStyle.normal.areaStyle")?"both":"stroke",o.setItemShape(n,t))):i=this.zr.getColor(l),a=this._getPointList(this.serie.polarIndex,r[l]),this._addSymbol(a,i,l,e,this.serie.polarIndex),this._addDataShape(a,i,r[l],e,l,s),this._radarDataCounter++)},_getPointList:function(e,t){for(var i,n,a=[],o=this.component.polar,r=0,s=t.value.length;s>r;r++)n=this.getDataFromOption(t.value[r]),i="-"!=n?o.getVector(e,r,n):!1,i&&a.push(i);return a},_addSymbol:function(e,t,i,n,a){for(var r,s=this.series,l=this.component.polar,h=0,m=e.length;m>h;h++)r=this.getSymbolShape(this.deepMerge([s[n].data[i],s[n]]),n,s[n].data[i].value[h],h,l.getIndicatorText(a,h),e[h][0],e[h][1],this._symbol[this._radarDataCounter%this._symbol.length],t,"#fff","vertical"),r.zlevel=this.getZlevelBase(),r.z=this.getZBase()+1,o.set(r,"data",s[n].data[i]),o.set(r,"value",s[n].data[i].value),o.set(r,"dataIndex",i),o.set(r,"special",h),this.shapeList.push(r)},_addDataShape:function(e,t,i,a,r,l){var h=this.series,m=[i,this.serie],V=this.getItemStyleColor(this.deepQuery(m,"itemStyle.normal.color"),a,r,i),U=this.deepQuery(m,"itemStyle.normal.lineStyle.width"),d=this.deepQuery(m,"itemStyle.normal.lineStyle.type"),p=this.deepQuery(m,"itemStyle.normal.areaStyle.color"),c=this.deepQuery(m,"itemStyle.normal.areaStyle"),u={zlevel:this.getZlevelBase(),z:this.getZBase(),style:{pointList:e,brushType:c?"both":"stroke",color:p||V||("string"==typeof t?s.alpha(t,.5):t),strokeColor:V||t,lineWidth:U,lineType:d},highlightStyle:{brushType:this.deepQuery(m,"itemStyle.emphasis.areaStyle")||c?"both":"stroke",color:this.deepQuery(m,"itemStyle.emphasis.areaStyle.color")||p||V||("string"==typeof t?s.alpha(t,.5):t),strokeColor:this.getItemStyleColor(this.deepQuery(m,"itemStyle.emphasis.color"),a,r,i)||V||t,lineWidth:this.deepQuery(m,"itemStyle.emphasis.lineStyle.width")||U,lineType:this.deepQuery(m,"itemStyle.emphasis.lineStyle.type")||d}};o.pack(u,h[a],a,i,r,i.name,this.component.polar.getIndicator(h[a].polarIndex)),l&&(u.draggable=!0,this.setCalculable(u)),u=new n(u),this.shapeList.push(u)},_addDropBox:function(e){var t=this.series,i=this.deepQuery(this._queryTarget,"polarIndex");if(!this._dropBoxList[i]){var n=this.component.polar.getDropBox(i);n.zlevel=this.getZlevelBase(),n.z=this.getZBase(),this.setCalculable(n),o.pack(n,t,e,void 0,-1),this.shapeList.push(n),this._dropBoxList[i]=!0}},ondragend:function(e,t){var i=this.series;if(this.isDragend&&e.target){var n=e.target,a=o.get(n,"seriesIndex"),r=o.get(n,"dataIndex");this.component.legend&&this.component.legend.del(i[a].data[r].name),i[a].data.splice(r,1),t.dragOut=!0,t.needRefresh=!0,this.isDragend=!1}},ondrop:function(t,i){var n=this.series;if(this.isDrop&&t.target){var a,r,s=t.target,l=t.dragged,h=o.get(s,"seriesIndex"),m=o.get(s,"dataIndex"),V=this.component.legend;if(-1===m)a={value:o.get(l,"value"),name:o.get(l,"name")},n[h].data.push(a),V&&V.add(a.name,l.style.color||l.style.strokeColor);else{var U=e("../util/accMath");a=n[h].data[m],V&&V.del(a.name),a.name+=this.option.nameConnector+o.get(l,"name"),r=o.get(l,"value");for(var d=0;d<r.length;d++)a.value[d]=U.accAdd(a.value[d],r[d]);V&&V.add(a.name,l.style.color||l.style.strokeColor)}i.dragIn=i.dragIn||!0,this.isDrop=!1}},refresh:function(e){e&&(this.option=e,this.series=e.series),this.backupShapeList(),this._buildShape()}},r.inherits(t,i),e("../chart").define("radar",t),t}),i("echarts/component/polar",["require","./base","zrender/shape/Text","zrender/shape/Line","zrender/shape/Polygon","zrender/shape/Circle","zrender/shape/Ring","../config","zrender/tool/util","../util/coordinates","../util/accMath","../util/smartSteps","../component"],function(e){function t(e,t,n,a,o){i.call(this,e,t,n,a,o),this.refresh(a)}var i=e("./base"),n=e("zrender/shape/Text"),a=e("zrender/shape/Line"),o=e("zrender/shape/Polygon"),r=e("zrender/shape/Circle"),s=e("zrender/shape/Ring"),l=e("../config");l.polar={zlevel:0,z:0,center:["50%","50%"],radius:"75%",startAngle:90,boundaryGap:[0,0],splitNumber:5,name:{show:!0,textStyle:{color:"#333"}},axisLine:{show:!0,lineStyle:{color:"#ccc",width:1,type:"solid"}},axisLabel:{show:!1,textStyle:{color:"#333"}},splitArea:{show:!0,areaStyle:{color:["rgba(250,250,250,0.3)","rgba(200,200,200,0.3)"]}},splitLine:{show:!0,lineStyle:{width:1,color:"#ccc"}},type:"polygon"};var h=e("zrender/tool/util"),m=e("../util/coordinates");return t.prototype={type:l.COMPONENT_TYPE_POLAR,_buildShape:function(){for(var e=0;e<this.polar.length;e++)this._index=e,this.reformOption(this.polar[e]),this._queryTarget=[this.polar[e],this.option],this._createVector(e),this._buildSpiderWeb(e),this._buildText(e),this._adjustIndicatorValue(e),this._addAxisLabel(e);for(var e=0;e<this.shapeList.length;e++)this.zr.addShape(this.shapeList[e])},_createVector:function(e){for(var t,i=this.polar[e],n=this.deepQuery(this._queryTarget,"indicator"),a=n.length,o=i.startAngle,r=2*Math.PI/a,s=this._getRadius(),l=i.__ecIndicator=[],h=0;a>h;h++)t=m.polar2cartesian(s,o*Math.PI/180+r*h),l.push({vector:[t[1],-t[0]]})},_getRadius:function(){var e=this.polar[this._index];return this.parsePercent(e.radius,Math.min(this.zr.getWidth(),this.zr.getHeight())/2)},_buildSpiderWeb:function(e){var t=this.polar[e],i=t.__ecIndicator,n=t.splitArea,a=t.splitLine,o=this.getCenter(e),r=t.splitNumber,s=a.lineStyle.color,l=a.lineStyle.width,h=a.show,m=this.deepQuery(this._queryTarget,"axisLine");this._addArea(i,r,o,n,s,l,h),m.show&&this._addLine(i,o,m)},_addAxisLabel:function(t){for(var i,a,o,r,a,s,l,m,V,U,d=e("../util/accMath"),p=this.polar[t],c=this.deepQuery(this._queryTarget,"indicator"),u=p.__ecIndicator,y=this.deepQuery(this._queryTarget,"splitNumber"),g=this.getCenter(t),b=0;b<c.length;b++)if(i=this.deepQuery([c[b],p,this.option],"axisLabel"),i.show){var f=this.deepQuery([i,p,this.option],"textStyle"),k=this.deepQuery([i,p],"formatter");if(o={},o.textFont=this.getFont(f),o.color=f.color,o=h.merge(o,i),o.lineWidth=o.width,a=u[b].vector,s=u[b].value,m=b/c.length*2*Math.PI,V=i.offset||10,U=i.interval||0,!s)return;for(var x=1;y>=x;x+=U+1)r=h.merge({},o),l=d.accAdd(s.min,d.accMul(s.step,x)),l="function"==typeof k?k(l):"string"==typeof k?k.replace("{a}","{a0}").replace("{a0}",l):this.numAddCommas(l),r.text=l,r.x=x*a[0]/y+Math.cos(m)*V+g[0],r.y=x*a[1]/y+Math.sin(m)*V+g[1],this.shapeList.push(new n({zlevel:this.getZlevelBase(),z:this.getZBase(),style:r,draggable:!1,hoverable:!1}))}},_buildText:function(e){for(var t,i,a,o,r,s,l,h=this.polar[e],m=h.__ecIndicator,V=this.deepQuery(this._queryTarget,"indicator"),U=this.getCenter(e),d=0,p=0,c=0;c<V.length;c++)o=this.deepQuery([V[c],h,this.option],"name"),o.show&&(l=this.deepQuery([o,h,this.option],"textStyle"),i={},i.textFont=this.getFont(l),i.color=l.color,i.text="function"==typeof o.formatter?o.formatter.call(this.myChart,V[c].text,c):"string"==typeof o.formatter?o.formatter.replace("{value}",V[c].text):V[c].text,m[c].text=i.text,t=m[c].vector,a=Math.round(t[0])>0?"left":Math.round(t[0])<0?"right":"center",null==o.margin?t=this._mapVector(t,U,1.1):(s=o.margin,d=t[0]>0?s:-s,p=t[1]>0?s:-s,d=0===t[0]?0:d,p=0===t[1]?0:p,t=this._mapVector(t,U,1)),i.textAlign=a,i.x=t[0]+d,i.y=t[1]+p,r=o.rotate?[o.rotate/180*Math.PI,t[0],t[1]]:[0,0,0],this.shapeList.push(new n({zlevel:this.getZlevelBase(),z:this.getZBase(),style:i,draggable:!1,hoverable:!1,rotation:r})))},getIndicatorText:function(e,t){return this.polar[e]&&this.polar[e].__ecIndicator[t]&&this.polar[e].__ecIndicator[t].text},getDropBox:function(e){var t,i,e=e||0,n=this.polar[e],a=this.getCenter(e),o=n.__ecIndicator,r=o.length,s=[],l=n.type;if("polygon"==l){for(var h=0;r>h;h++)t=o[h].vector,s.push(this._mapVector(t,a,1.2));i=this._getShape(s,"fill","rgba(0,0,0,0)","",1)}else"circle"==l&&(i=this._getCircle("",1,1.2,a,"fill","rgba(0,0,0,0)"));return i},_addArea:function(e,t,i,n,a,o,r){for(var s,l,h,m,V=this.deepQuery(this._queryTarget,"type"),U=0;t>U;U++)l=(t-U)/t,r&&("polygon"==V?(m=this._getPointList(e,l,i),s=this._getShape(m,"stroke","",a,o)):"circle"==V&&(s=this._getCircle(a,o,l,i,"stroke")),this.shapeList.push(s)),n.show&&(h=(t-U-1)/t,this._addSplitArea(e,n,l,h,i,U))},_getCircle:function(e,t,i,n,a,o){var s=this._getRadius();return new r({zlevel:this.getZlevelBase(),z:this.getZBase(),style:{x:n[0],y:n[1],r:s*i,brushType:a,strokeColor:e,lineWidth:t,color:o},hoverable:!1,draggable:!1})},_getRing:function(e,t,i,n){var a=this._getRadius();return new s({zlevel:this.getZlevelBase(),z:this.getZBase(),style:{x:n[0],y:n[1],r:t*a,r0:i*a,color:e,brushType:"fill"},hoverable:!1,draggable:!1})},_getPointList:function(e,t,i){for(var n,a=[],o=e.length,r=0;o>r;r++)n=e[r].vector,a.push(this._mapVector(n,i,t));return a},_getShape:function(e,t,i,n,a){return new o({zlevel:this.getZlevelBase(),z:this.getZBase(),style:{pointList:e,brushType:t,color:i,strokeColor:n,lineWidth:a},hoverable:!1,draggable:!1})},_addSplitArea:function(e,t,i,n,a,o){var r,s,l,h,m,V=e.length,U=t.areaStyle.color,d=[],V=e.length,p=this.deepQuery(this._queryTarget,"type");if("string"==typeof U&&(U=[U]),s=U.length,r=U[o%s],"polygon"==p)for(var c=0;V>c;c++)d=[],l=e[c].vector,h=e[(c+1)%V].vector,d.push(this._mapVector(l,a,i)),d.push(this._mapVector(l,a,n)),d.push(this._mapVector(h,a,n)),d.push(this._mapVector(h,a,i)),m=this._getShape(d,"fill",r,"",1),this.shapeList.push(m);else"circle"==p&&(m=this._getRing(r,i,n,a),this.shapeList.push(m))},_mapVector:function(e,t,i){return[e[0]*i+t[0],e[1]*i+t[1]]},getCenter:function(e){var e=e||0;return this.parseCenter(this.zr,this.polar[e].center)},_addLine:function(e,t,i){for(var n,a,o=e.length,r=i.lineStyle,s=r.color,l=r.width,h=r.type,m=0;o>m;m++)a=e[m].vector,n=this._getLine(t[0],t[1],a[0]+t[0],a[1]+t[1],s,l,h),this.shapeList.push(n)},_getLine:function(e,t,i,n,o,r,s){return new a({zlevel:this.getZlevelBase(),z:this.getZBase(),style:{xStart:e,yStart:t,xEnd:i,yEnd:n,strokeColor:o,lineWidth:r,lineType:s},hoverable:!1})},_adjustIndicatorValue:function(t){for(var i,n,a,o=this.polar[t],r=this.deepQuery(this._queryTarget,"indicator"),s=r.length,l=o.__ecIndicator,h=this._getSeriesData(t),m=o.boundaryGap,V=o.splitNumber,U=o.scale,d=e("../util/smartSteps"),p=0;s>p;p++){if("number"==typeof r[p].max)i=r[p].max,n=r[p].min||0,a={max:i,min:n};else{var c=this._findValue(h,p,V,m);n=c.min,i=c.max}!U&&n>=0&&i>=0&&(n=0),!U&&0>=n&&0>=i&&(i=0);var u=d(n,i,V,a);l[p].value={min:u.min,max:u.max,step:u.step}}},_getSeriesData:function(e){for(var t,i,n,a=[],o=this.component.legend,r=0;r<this.series.length;r++)if(t=this.series[r],t.type==l.CHART_TYPE_RADAR){i=t.data||[];for(var s=0;s<i.length;s++)n=this.deepQuery([i[s],t,this.option],"polarIndex")||0,n!=e||o&&!o.isSelected(i[s].name)||a.push(i[s])}return a},_findValue:function(e,t,i,n){function a(e){(e>o||void 0===o)&&(o=e),(r>e||void 0===r)&&(r=e)}var o,r,s;if(e&&0!==e.length){if(1==e.length&&(r=0),1!=e.length)for(var l=0;l<e.length;l++)a(this.getDataFromOption(e[l].value[t]));else{s=e[0];for(var l=0;l<s.value.length;l++)a(this.getDataFromOption(s.value[l]))}var h=Math.abs(o-r);return r-=Math.abs(h*n[0]),o+=Math.abs(h*n[1]),r===o&&(0===o?o=1:o>0?r=o/i:o/=i),{max:o,min:r}}},getVector:function(e,t,i){e=e||0,t=t||0;var n=this.polar[e].__ecIndicator;if(!(t>=n.length)){var a,o=this.polar[e].__ecIndicator[t],r=this.getCenter(e),s=o.vector,l=o.value.max,h=o.value.min;if("undefined"==typeof i)return r;switch(i){case"min":i=h;break;case"max":i=l;break;case"center":i=(l+h)/2}return a=l!=h?(i-h)/(l-h):.5,this._mapVector(s,r,a)}},isInside:function(e){var t=this.getNearestIndex(e);return t?t.polarIndex:-1},getNearestIndex:function(e){for(var t,i,n,a,o,r,s,l,h,V=0;V<this.polar.length;V++){if(t=this.polar[V],i=this.getCenter(V),e[0]==i[0]&&e[1]==i[1])return{polarIndex:V,valueIndex:0};if(n=this._getRadius(),o=t.startAngle,r=t.indicator,s=r.length,l=2*Math.PI/s,a=m.cartesian2polar(e[0]-i[0],i[1]-e[1]),e[0]-i[0]<0&&(a[1]+=Math.PI),a[1]<0&&(a[1]+=2*Math.PI),h=a[1]-o/180*Math.PI+2*Math.PI,Math.abs(Math.cos(h%(l/2)))*n>a[0])return{polarIndex:V,valueIndex:Math.floor((h+l/2)/l)%s}}},getIndicator:function(e){var e=e||0;return this.polar[e].indicator},refresh:function(e){e&&(this.option=e,this.polar=this.option.polar,this.series=this.option.series),this.clear(),this._buildShape()}},h.inherits(t,i),e("../component").define("polar",t),t}),i("echarts/util/coordinates",["require","zrender/tool/math"],function(e){function t(e,t){return[e*n.sin(t),e*n.cos(t)]}function i(e,t){return[Math.sqrt(e*e+t*t),Math.atan(t/e)]}var n=e("zrender/tool/math");return{polar2cartesian:t,cartesian2polar:i}}),i("echarts/chart/chord",["require","./base","zrender/shape/Text","zrender/shape/Line","zrender/shape/Sector","../util/shape/Ribbon","../util/shape/Icon","zrender/shape/BezierCurve","../config","../util/ecData","zrender/tool/util","zrender/tool/vector","../data/Graph","../layout/Chord","../chart"],function(e){"use strict";function t(e,t,n,a,o){i.call(this,e,t,n,a,o),this.scaleLineLength=4,this.scaleUnitAngle=4,this.refresh(a)}var i=e("./base"),n=e("zrender/shape/Text"),a=e("zrender/shape/Line"),o=e("zrender/shape/Sector"),r=e("../util/shape/Ribbon"),s=e("../util/shape/Icon"),l=e("zrender/shape/BezierCurve"),h=e("../config");h.chord={zlevel:0,z:2,clickable:!0,radius:["65%","75%"],center:["50%","50%"],padding:2,sort:"none",sortSub:"none",startAngle:90,clockWise:!0,ribbonType:!0,minRadius:10,maxRadius:20,symbol:"circle",showScale:!1,showScaleText:!1,itemStyle:{normal:{borderWidth:0,borderColor:"#000",label:{show:!0,rotate:!1,distance:5},chordStyle:{width:1,color:"black",borderWidth:1,borderColor:"#999",opacity:.5}},emphasis:{borderWidth:0,borderColor:"#000",chordStyle:{width:1,color:"black",borderWidth:1,borderColor:"#999"}}}};var m=e("../util/ecData"),V=e("zrender/tool/util"),U=e("zrender/tool/vector"),d=e("../data/Graph"),p=e("../layout/Chord");return t.prototype={type:h.CHART_TYPE_CHORD,_init:function(){var e=this.series;this.selectedMap={};for(var t={},i={},n=0,a=e.length;a>n;n++)if(e[n].type===this.type){var o=this.isSelected(e[n].name);this.selectedMap[e[n].name]=o,o&&this.buildMark(n),this.reformOption(e[n]),t[e[n].name]=e[n]}for(var n=0,a=e.length;a>n;n++)if(e[n].type===this.type)if(e[n].insertToSerie){var r=t[e[n].insertToSerie];e[n]._referenceSerie=r}else i[e[n].name]=[e[n]];for(var n=0,a=e.length;a>n;n++)if(e[n].type===this.type&&e[n].insertToSerie){for(var s=e[n]._referenceSerie;s&&s._referenceSerie;)s=s._referenceSerie;i[s.name]&&this.selectedMap[e[n].name]&&i[s.name].push(e[n])}for(var l in i)this._buildChords(i[l]);this.addShapeList()},_getNodeCategory:function(e,t){return e.categories&&e.categories[t.category||0]},_getNodeQueryTarget:function(e,t){var i=this._getNodeCategory(e,t);return[t,i,e]},_getEdgeQueryTarget:function(e,t,i){return i=i||"normal",[t.itemStyle&&t.itemStyle[i],e.itemStyle[i].chordStyle]},_buildChords:function(e){for(var t=[],i=e[0],n=function(e){return e.layout.size>0},a=function(e){return function(t){return e.getEdge(t.node2,t.node1)}},o=0;o<e.length;o++){var r=e[o];if(this.selectedMap[r.name]){var s;r.matrix?s=this._getSerieGraphFromDataMatrix(r,i):r.links&&(s=this._getSerieGraphFromNodeLinks(r,i)),s.filterNode(n,this),r.ribbonType&&s.filterEdge(a(s)),t.push(s),s.__serie=r}}if(t.length){var l=t[0];if(!i.ribbonType){var h=i.minRadius,m=i.maxRadius,V=1/0,U=-(1/0);l.eachNode(function(e){U=Math.max(e.layout.size,U),V=Math.min(e.layout.size,V)});var d=(m-h)/(U-V);l.eachNode(function(e){var t=this._getNodeQueryTarget(i,e),n=this.query(t,"symbolSize");e.layout.size=U===V?n||V:n||(e.layout.size-V)*d+h},this)}var c=new p;c.clockWise=i.clockWise,c.startAngle=i.startAngle*Math.PI/180,c.clockWise||(c.startAngle=-c.startAngle),c.padding=i.padding*Math.PI/180,c.sort=i.sort,c.sortSub=i.sortSub,c.directed=i.ribbonType,c.run(t);var u=this.query(i,"itemStyle.normal.label.show");if(i.ribbonType){this._buildSectors(i,0,l,i,t),u&&this._buildLabels(i,0,l,i,t);for(var o=0,y=0;o<e.length;o++)this.selectedMap[e[o].name]&&this._buildRibbons(e,o,t[y++],i);i.showScale&&this._buildScales(i,0,l)}else{this._buildNodeIcons(i,0,l,i,t),u&&this._buildLabels(i,0,l,i,t);for(var o=0,y=0;o<e.length;o++)this.selectedMap[e[o].name]&&this._buildEdgeCurves(e,o,t[y++],i,l)}this._initHoverHandler(e,t)}},_getSerieGraphFromDataMatrix:function(e,t){for(var i=[],n=0,a=[],o=0;o<e.matrix.length;o++)a[o]=e.matrix[o].slice();for(var r=e.data||e.nodes,o=0;o<r.length;o++){var s={},l=r[o];l.rawIndex=o;for(var h in l)"name"===h?s.id=l.name:s[h]=l[h];var m=this._getNodeCategory(t,l),V=m?m.name:l.name;if(this.selectedMap[V]=this.isSelected(V),this.selectedMap[V])i.push(s),n++;else{a.splice(n,1);for(var U=0;U<a.length;U++)a[U].splice(n,1)}}var p=d.fromMatrix(i,a,!0);return p.eachNode(function(e){e.layout={size:e.data.outValue},e.rawIndex=e.data.rawIndex}),p.eachEdge(function(e){e.layout={weight:e.data.weight}}),p},_getSerieGraphFromNodeLinks:function(e,t){for(var i=new d(!0),n=e.data||e.nodes,a=0,o=n.length;o>a;a++){var r=n[a];if(r&&!r.ignore){var s=this._getNodeCategory(t,r),l=s?s.name:r.name;if(this.selectedMap[l]=this.isSelected(l),this.selectedMap[l]){var h=i.addNode(r.name,r);h.rawIndex=a}}}for(var a=0,o=e.links.length;o>a;a++){var m=e.links[a],V=m.source,U=m.target;"number"==typeof V&&(V=n[V],V&&(V=V.name)),"number"==typeof U&&(U=n[U],U&&(U=U.name));var p=i.addEdge(V,U,m);p&&(p.rawIndex=a)}return i.eachNode(function(e){var i=e.data.value;if(null==i)if(i=0,t.ribbonType)for(var n=0;n<e.outEdges.length;n++)i+=e.outEdges[n].data.weight||0;else for(var n=0;n<e.edges.length;n++)i+=e.edges[n].data.weight||0;e.layout={size:i}}),i.eachEdge(function(e){e.layout={weight:null==e.data.weight?1:e.data.weight}}),i},_initHoverHandler:function(e,t){var i=e[0],n=t[0],a=this;n.eachNode(function(e){e.shape.onmouseover=function(){n.eachNode(function(e){e.shape.style.opacity=.1,e.labelShape&&(e.labelShape.style.opacity=.1,e.labelShape.modSelf()),e.shape.modSelf()});for(var i=0;i<t.length;i++)for(var o=0;o<t[i].edges.length;o++){var r=t[i].edges[o],s=a._getEdgeQueryTarget(t[i].__serie,r.data);r.shape.style.opacity=.1*a.deepQuery(s,"opacity"),r.shape.modSelf()}e.shape.style.opacity=1,e.labelShape&&(e.labelShape.style.opacity=1);for(var i=0;i<t.length;i++){var l=t[i].getNodeById(e.id);if(l)for(var o=0;o<l.outEdges.length;o++){var r=l.outEdges[o],s=a._getEdgeQueryTarget(t[i].__serie,r.data);r.shape.style.opacity=a.deepQuery(s,"opacity");var h=t[0].getNodeById(r.node2.id);h&&(h.shape&&(h.shape.style.opacity=1),h.labelShape&&(h.labelShape.style.opacity=1))}}a.zr.refreshNextFrame()},e.shape.onmouseout=function(){n.eachNode(function(e){e.shape.style.opacity=1,e.labelShape&&(e.labelShape.style.opacity=1,e.labelShape.modSelf()),e.shape.modSelf()});for(var e=0;e<t.length;e++)for(var o=0;o<t[e].edges.length;o++){var r=t[e].edges[o],s=[r.data,i];r.shape.style.opacity=a.deepQuery(s,"itemStyle.normal.chordStyle.opacity"),r.shape.modSelf()}a.zr.refreshNextFrame()}})},_buildSectors:function(e,t,i,n){var a=this.parseCenter(this.zr,n.center),r=this.parseRadius(this.zr,n.radius),s=n.clockWise,l=s?1:-1;i.eachNode(function(i){var h=this._getNodeCategory(n,i.data),V=this.getColor(h?h.name:i.id),U=i.layout.startAngle/Math.PI*180*l,d=i.layout.endAngle/Math.PI*180*l,p=new o({zlevel:e.zlevel,z:e.z,style:{x:a[0],y:a[1],r0:r[0],r:r[1],startAngle:U,endAngle:d,brushType:"fill",opacity:1,color:V,clockWise:s},clickable:n.clickable,highlightStyle:{brushType:"fill"}});p.style.lineWidth=this.deepQuery([i.data,n],"itemStyle.normal.borderWidth"),p.highlightStyle.lineWidth=this.deepQuery([i.data,n],"itemStyle.emphasis.borderWidth"),p.style.strokeColor=this.deepQuery([i.data,n],"itemStyle.normal.borderColor"),p.highlightStyle.strokeColor=this.deepQuery([i.data,n],"itemStyle.emphasis.borderColor"),p.style.lineWidth>0&&(p.style.brushType="both"),p.highlightStyle.lineWidth>0&&(p.highlightStyle.brushType="both"),m.pack(p,e,t,i.data,i.rawIndex,i.id,i.category),this.shapeList.push(p),i.shape=p},this)},_buildNodeIcons:function(e,t,i,n){var a=this.parseCenter(this.zr,n.center),o=this.parseRadius(this.zr,n.radius),r=o[1];i.eachNode(function(i){var o=i.layout.startAngle,l=i.layout.endAngle,h=(o+l)/2,V=r*Math.cos(h),U=r*Math.sin(h),d=this._getNodeQueryTarget(n,i.data),p=this._getNodeCategory(n,i.data),c=this.deepQuery(d,"itemStyle.normal.color");c||(c=this.getColor(p?p.name:i.id));var u=new s({zlevel:e.zlevel,z:e.z+1,style:{x:-i.layout.size,y:-i.layout.size,width:2*i.layout.size,height:2*i.layout.size,iconType:this.deepQuery(d,"symbol"),color:c,brushType:"both",lineWidth:this.deepQuery(d,"itemStyle.normal.borderWidth"),strokeColor:this.deepQuery(d,"itemStyle.normal.borderColor")},highlightStyle:{color:this.deepQuery(d,"itemStyle.emphasis.color"),lineWidth:this.deepQuery(d,"itemStyle.emphasis.borderWidth"),strokeColor:this.deepQuery(d,"itemStyle.emphasis.borderColor")},clickable:n.clickable,position:[V+a[0],U+a[1]]});m.pack(u,e,t,i.data,i.rawIndex,i.id,i.category),this.shapeList.push(u),i.shape=u},this)},_buildLabels:function(e,t,i,a){var o=this.query(a,"itemStyle.normal.label.rotate"),r=this.query(a,"itemStyle.normal.label.distance"),s=this.parseCenter(this.zr,a.center),l=this.parseRadius(this.zr,a.radius),h=a.clockWise,m=h?1:-1;
+
+i.eachNode(function(t){var i=t.layout.startAngle/Math.PI*180*m,h=t.layout.endAngle/Math.PI*180*m,V=(i*-m+h*-m)/2;V%=360,0>V&&(V+=360);var d=90>=V||V>=270;V=V*Math.PI/180;var p=[Math.cos(V),-Math.sin(V)],c=0;c=a.ribbonType?a.showScaleText?35+r:r:r+t.layout.size;var u=U.scale([],p,l[1]+c);U.add(u,u,s);var y={zlevel:e.zlevel,z:e.z+1,hoverable:!1,style:{text:null==t.data.label?t.id:t.data.label,textAlign:d?"left":"right"}};o?(y.rotation=d?V:Math.PI+V,y.style.x=d?l[1]+c:-l[1]-c,y.style.y=0,y.position=s.slice()):(y.style.x=u[0],y.style.y=u[1]),y.style.color=this.deepQuery([t.data,a],"itemStyle.normal.label.textStyle.color")||"#000000",y.style.textFont=this.getFont(this.deepQuery([t.data,a],"itemStyle.normal.label.textStyle")),y=new n(y),this.shapeList.push(y),t.labelShape=y},this)},_buildRibbons:function(e,t,i,n){var a=e[t],o=this.parseCenter(this.zr,n.center),s=this.parseRadius(this.zr,n.radius);i.eachEdge(function(l,h){var V,U=i.getEdge(l.node2,l.node1);if(U&&!l.shape){if(U.shape)return void(l.shape=U.shape);var d=l.layout.startAngle/Math.PI*180,p=l.layout.endAngle/Math.PI*180,c=U.layout.startAngle/Math.PI*180,u=U.layout.endAngle/Math.PI*180;V=this.getColor(1===e.length?l.layout.weight<=U.layout.weight?l.node1.id:l.node2.id:a.name);var y,g,b=this._getEdgeQueryTarget(a,l.data),f=this._getEdgeQueryTarget(a,l.data,"emphasis"),k=new r({zlevel:a.zlevel,z:a.z,style:{x:o[0],y:o[1],r:s[0],source0:d,source1:p,target0:c,target1:u,brushType:"both",opacity:this.deepQuery(b,"opacity"),color:V,lineWidth:this.deepQuery(b,"borderWidth"),strokeColor:this.deepQuery(b,"borderColor"),clockWise:n.clockWise},clickable:n.clickable,highlightStyle:{brushType:"both",opacity:this.deepQuery(f,"opacity"),lineWidth:this.deepQuery(f,"borderWidth"),strokeColor:this.deepQuery(f,"borderColor")}});l.layout.weight<=U.layout.weight?(y=U.node1,g=U.node2):(y=l.node1,g=l.node2),m.pack(k,a,t,l.data,null==l.rawIndex?h:l.rawIndex,l.data.name||y.id+"-"+g.id,y.id,g.id),this.shapeList.push(k),l.shape=k}},this)},_buildEdgeCurves:function(e,t,i,n,a){var o=e[t],r=this.parseCenter(this.zr,n.center);i.eachEdge(function(e,i){var n=a.getNodeById(e.node1.id),s=a.getNodeById(e.node2.id),h=n.shape,V=s.shape,U=this._getEdgeQueryTarget(o,e.data),d=this._getEdgeQueryTarget(o,e.data,"emphasis"),p=new l({zlevel:o.zlevel,z:o.z,style:{xStart:h.position[0],yStart:h.position[1],xEnd:V.position[0],yEnd:V.position[1],cpX1:r[0],cpY1:r[1],lineWidth:this.deepQuery(U,"width"),strokeColor:this.deepQuery(U,"color"),opacity:this.deepQuery(U,"opacity")},highlightStyle:{lineWidth:this.deepQuery(d,"width"),strokeColor:this.deepQuery(d,"color"),opacity:this.deepQuery(d,"opacity")}});m.pack(p,o,t,e.data,null==e.rawIndex?i:e.rawIndex,e.data.name||e.node1.id+"-"+e.node2.id,e.node1.id,e.node2.id),this.shapeList.push(p),e.shape=p},this)},_buildScales:function(e,t,i){var o,r,s=e.clockWise,l=this.parseCenter(this.zr,e.center),h=this.parseRadius(this.zr,e.radius),m=s?1:-1,V=0,d=-(1/0);e.showScaleText&&(i.eachNode(function(e){var t=e.data.value;t>d&&(d=t),V+=t}),d>1e10?(o="b",r=1e-9):d>1e7?(o="m",r=1e-6):d>1e4?(o="k",r=.001):(o="",r=1));var p=V/(360-e.padding);i.eachNode(function(t){for(var i=t.layout.startAngle/Math.PI*180,V=t.layout.endAngle/Math.PI*180,d=i;;){if(s&&d>V||!s&&V>d)break;var c=d/180*Math.PI,u=[Math.cos(c),Math.sin(c)],y=U.scale([],u,h[1]+1);U.add(y,y,l);var g=U.scale([],u,h[1]+this.scaleLineLength);U.add(g,g,l);var b=new a({zlevel:e.zlevel,z:e.z-1,hoverable:!1,style:{xStart:y[0],yStart:y[1],xEnd:g[0],yEnd:g[1],lineCap:"round",brushType:"stroke",strokeColor:"#666",lineWidth:1}});this.shapeList.push(b),d+=m*this.scaleUnitAngle}if(e.showScaleText)for(var f=i,k=5*p*this.scaleUnitAngle,x=0;;){if(s&&f>V||!s&&V>f)break;var c=f;c%=360,0>c&&(c+=360);var _=90>=c||c>=270,L=new n({zlevel:e.zlevel,z:e.z-1,hoverable:!1,style:{x:_?h[1]+this.scaleLineLength+4:-h[1]-this.scaleLineLength-4,y:0,text:Math.round(10*x)/10+o,textAlign:_?"left":"right"},position:l.slice(),rotation:_?[-c/180*Math.PI,0,0]:[-(c+180)/180*Math.PI,0,0]});this.shapeList.push(L),x+=k*r,f+=m*this.scaleUnitAngle*5}},this)},refresh:function(e){if(e&&(this.option=e,this.series=e.series),this.legend=this.component.legend,this.legend)this.getColor=function(e){return this.legend.getColor(e)},this.isSelected=function(e){return this.legend.isSelected(e)};else{var t={},i=0;this.getColor=function(e){return t[e]?t[e]:(t[e]||(t[e]=this.zr.getColor(i++)),t[e])},this.isSelected=function(){return!0}}this.backupShapeList(),this._init()},reformOption:function(e){var t=V.merge;e=t(t(e||{},this.ecTheme.chord),h.chord),e.itemStyle.normal.label.textStyle=this.getTextStyle(e.itemStyle.normal.label.textStyle),this.z=e.z,this.zlevel=e.zlevel}},V.inherits(t,i),e("../chart").define("chord",t),t}),i("echarts/util/shape/Ribbon",["require","zrender/shape/Base","zrender/shape/util/PathProxy","zrender/tool/util","zrender/tool/area"],function(e){function t(e){i.call(this,e),this._pathProxy=new n}var i=e("zrender/shape/Base"),n=e("zrender/shape/util/PathProxy"),a=e("zrender/tool/util"),o=e("zrender/tool/area");return t.prototype={type:"ribbon",buildPath:function(e,t){var i=t.clockWise||!1,n=this._pathProxy;n.begin(e);var a=t.x,o=t.y,r=t.r,s=t.source0/180*Math.PI,l=t.source1/180*Math.PI,h=t.target0/180*Math.PI,m=t.target1/180*Math.PI,V=a+Math.cos(s)*r,U=o+Math.sin(s)*r,d=a+Math.cos(l)*r,p=o+Math.sin(l)*r,c=a+Math.cos(h)*r,u=o+Math.sin(h)*r,y=a+Math.cos(m)*r,g=o+Math.sin(m)*r;n.moveTo(V,U),n.arc(a,o,t.r,s,l,!i),n.bezierCurveTo(.7*(a-d)+d,.7*(o-p)+p,.7*(a-c)+c,.7*(o-u)+u,c,u),(t.source0!==t.target0||t.source1!==t.target1)&&(n.arc(a,o,t.r,h,m,!i),n.bezierCurveTo(.7*(a-y)+y,.7*(o-g)+g,.7*(a-V)+V,.7*(o-U)+U,V,U))},getRect:function(e){return e.__rect?e.__rect:(this._pathProxy.isEmpty()||this.buildPath(null,e),this._pathProxy.fastBoundingRect())},isCover:function(e,t){var i=this.getRect(this.style);return e>=i.x&&e<=i.x+i.width&&t>=i.y&&t<=i.y+i.height?o.isInsidePath(this._pathProxy.pathCommands,0,"fill",e,t):void 0}},a.inherits(t,i),t}),i("echarts/data/Graph",["require","zrender/tool/util"],function(e){var t=e("zrender/tool/util"),i=function(e){this._directed=e||!1,this.nodes=[],this.edges=[],this._nodesMap={},this._edgesMap={}};i.prototype.isDirected=function(){return this._directed},i.prototype.addNode=function(e,t){if(this._nodesMap[e])return this._nodesMap[e];var n=new i.Node(e,t);return this.nodes.push(n),this._nodesMap[e]=n,n},i.prototype.getNodeById=function(e){return this._nodesMap[e]},i.prototype.addEdge=function(e,t,n){if("string"==typeof e&&(e=this._nodesMap[e]),"string"==typeof t&&(t=this._nodesMap[t]),e&&t){var a=e.id+"-"+t.id;if(this._edgesMap[a])return this._edgesMap[a];var o=new i.Edge(e,t,n);return this._directed&&(e.outEdges.push(o),t.inEdges.push(o)),e.edges.push(o),e!==t&&t.edges.push(o),this.edges.push(o),this._edgesMap[a]=o,o}},i.prototype.removeEdge=function(e){var i=e.node1,n=e.node2,a=i.id+"-"+n.id;this._directed&&(i.outEdges.splice(t.indexOf(i.outEdges,e),1),n.inEdges.splice(t.indexOf(n.inEdges,e),1)),i.edges.splice(t.indexOf(i.edges,e),1),i!==n&&n.edges.splice(t.indexOf(n.edges,e),1),delete this._edgesMap[a],this.edges.splice(t.indexOf(this.edges,e),1)},i.prototype.getEdge=function(e,t){return"string"!=typeof e&&(e=e.id),"string"!=typeof t&&(t=t.id),this._directed?this._edgesMap[e+"-"+t]:this._edgesMap[e+"-"+t]||this._edgesMap[t+"-"+e]},i.prototype.removeNode=function(e){if("string"!=typeof e||(e=this._nodesMap[e])){delete this._nodesMap[e.id],this.nodes.splice(t.indexOf(this.nodes,e),1);for(var i=0;i<this.edges.length;){var n=this.edges[i];n.node1===e||n.node2===e?this.removeEdge(n):i++}}},i.prototype.filterNode=function(e,t){for(var i=this.nodes.length,n=0;i>n;)e.call(t,this.nodes[n],n)?n++:(this.removeNode(this.nodes[n]),i--)},i.prototype.filterEdge=function(e,t){for(var i=this.edges.length,n=0;i>n;)e.call(t,this.edges[n],n)?n++:(this.removeEdge(this.edges[n]),i--)},i.prototype.eachNode=function(e,t){for(var i=this.nodes.length,n=0;i>n;n++)this.nodes[n]&&e.call(t,this.nodes[n],n)},i.prototype.eachEdge=function(e,t){for(var i=this.edges.length,n=0;i>n;n++)this.edges[n]&&e.call(t,this.edges[n],n)},i.prototype.clear=function(){this.nodes.length=0,this.edges.length=0,this._nodesMap={},this._edgesMap={}},i.prototype.breadthFirstTraverse=function(e,t,i,n){if("string"==typeof t&&(t=this._nodesMap[t]),t){var a="edges";"out"===i?a="outEdges":"in"===i&&(a="inEdges");for(var o=0;o<this.nodes.length;o++)this.nodes[o].__visited=!1;if(!e.call(n,t,null))for(var r=[t];r.length;)for(var s=r.shift(),l=s[a],o=0;o<l.length;o++){var h=l[o],m=h.node1===s?h.node2:h.node1;if(!m.__visited){if(e.call(m,m,s))return;r.push(m),m.__visited=!0}}}},i.prototype.clone=function(){for(var e=new i(this._directed),t=0;t<this.nodes.length;t++)e.addNode(this.nodes[t].id,this.nodes[t].data);for(var t=0;t<this.edges.length;t++){var n=this.edges[t];e.addEdge(n.node1.id,n.node2.id,n.data)}return e};var n=function(e,t){this.id=e,this.data=t||null,this.inEdges=[],this.outEdges=[],this.edges=[]};n.prototype.degree=function(){return this.edges.length},n.prototype.inDegree=function(){return this.inEdges.length},n.prototype.outDegree=function(){return this.outEdges.length};var a=function(e,t,i){this.node1=e,this.node2=t,this.data=i||null};return i.Node=n,i.Edge=a,i.fromMatrix=function(e,t,n){if(t&&t.length&&t[0].length===t.length&&e.length===t.length){for(var a=t.length,o=new i(n),r=0;a>r;r++){var s=o.addNode(e[r].id,e[r]);s.data.value=0,n&&(s.data.outValue=s.data.inValue=0)}for(var r=0;a>r;r++)for(var l=0;a>l;l++){var h=t[r][l];n&&(o.nodes[r].data.outValue+=h,o.nodes[l].data.inValue+=h),o.nodes[r].data.value+=h,o.nodes[l].data.value+=h}for(var r=0;a>r;r++)for(var l=r;a>l;l++){var h=t[r][l];if(0!==h){var m=o.nodes[r],V=o.nodes[l],U=o.addEdge(m,V,{});if(U.data.weight=h,r!==l&&n&&t[l][r]){var d=o.addEdge(V,m,{});d.data.weight=t[l][r]}}}return o}},i}),i("echarts/layout/Chord",["require"],function(){var e=function(e){e=e||{},this.sort=e.sort||null,this.sortSub=e.sortSub||null,this.padding=.05,this.startAngle=e.startAngle||0,this.clockWise=null==e.clockWise?!1:e.clockWise,this.center=e.center||[0,0],this.directed=!0};e.prototype.run=function(e){e instanceof Array||(e=[e]);var n=e.length;if(n){for(var a=e[0],o=a.nodes.length,r=[],s=0,l=0;o>l;l++){var h=a.nodes[l],m={size:0,subGroups:[],node:h};r.push(m);for(var V=0,U=0;U<e.length;U++){var d=e[U],p=d.getNodeById(h.id);if(p){m.size+=p.layout.size;for(var c=this.directed?p.outEdges:p.edges,u=0;u<c.length;u++){var y=c[u],g=y.layout.weight;m.subGroups.push({weight:g,edge:y,graph:d}),V+=g}}}s+=m.size;for(var b=m.size/V,u=0;u<m.subGroups.length;u++)m.subGroups[u].weight*=b;"ascending"===this.sortSub?m.subGroups.sort(t):"descending"===this.sort&&(m.subGroups.sort(t),m.subGroups.reverse())}"ascending"===this.sort?r.sort(i):"descending"===this.sort&&(r.sort(i),r.reverse());for(var b=(2*Math.PI-this.padding*o)/s,f=this.startAngle,k=this.clockWise?1:-1,l=0;o>l;l++){var m=r[l];m.node.layout.startAngle=f,m.node.layout.endAngle=f+k*m.size*b,m.node.layout.subGroups=[];for(var u=0;u<m.subGroups.length;u++){var x=m.subGroups[u];x.edge.layout.startAngle=f,f+=k*x.weight*b,x.edge.layout.endAngle=f}f=m.node.layout.endAngle+k*this.padding}}};var t=function(e,t){return e.weight-t.weight},i=function(e,t){return e.size-t.size};return e}),i("echarts/chart/force",["require","./base","../data/Graph","../layout/Force","zrender/shape/Line","zrender/shape/BezierCurve","zrender/shape/Image","../util/shape/Icon","../config","../util/ecData","zrender/tool/util","zrender/config","zrender/tool/vector","../chart"],function(e){"use strict";function t(e,t,o,h,m){var V=this;r.call(this,e,t,o,h,m),this.__nodePositionMap={},this._graph=new s(!0),this._layout=new l,this._layout.onupdate=function(){V._step()},this._steps=1,this.ondragstart=function(){i.apply(V,arguments)},this.ondragend=function(){a.apply(V,arguments)},this.ondrop=function(){},this.shapeHandler.ondragstart=function(){V.isDragstart=!0},this.onmousemove=function(){n.apply(V,arguments)},this.refresh(h)}function i(e){if(this.isDragstart&&e.target){var t=e.target;t.fixed=!0,this.isDragstart=!1,this.zr.on(u.EVENT.MOUSEMOVE,this.onmousemove)}}function n(){this._layout.temperature=.8,this._step()}function a(e,t){if(this.isDragend&&e.target){var i=e.target;i.fixed=!1,t.dragIn=!0,t.needRefresh=!1,this.isDragend=!1,this.zr.un(u.EVENT.MOUSEMOVE,this.onmousemove)}}function o(e,t,i){var n=y.create();return n[0]=(Math.random()-.5)*i+e,n[1]=(Math.random()-.5)*i+t,n}var r=e("./base"),s=e("../data/Graph"),l=e("../layout/Force"),h=e("zrender/shape/Line"),m=e("zrender/shape/BezierCurve"),V=e("zrender/shape/Image"),U=e("../util/shape/Icon"),d=e("../config");d.force={zlevel:1,z:2,center:["50%","50%"],size:"100%",preventOverlap:!1,coolDown:.99,minRadius:10,maxRadius:20,ratioScaling:!1,large:!1,useWorker:!1,steps:1,scaling:1,gravity:1,symbol:"circle",symbolSize:0,linkSymbol:null,linkSymbolSize:[10,15],draggable:!0,clickable:!0,roam:!1,itemStyle:{normal:{label:{show:!1,position:"inside"},nodeStyle:{brushType:"both",borderColor:"#5182ab",borderWidth:1},linkStyle:{color:"#5182ab",width:1,type:"line"}},emphasis:{label:{show:!1},nodeStyle:{},linkStyle:{opacity:0}}}};var p=e("../util/ecData"),c=e("zrender/tool/util"),u=e("zrender/config"),y=e("zrender/tool/vector");return t.prototype={constructor:t,type:d.CHART_TYPE_FORCE,_init:function(){this.selectedMap={};var e,t=this.component.legend,i=this.series;this.clear();for(var n=0,a=i.length;a>n;n++){var o=i[n];if(o.type===d.CHART_TYPE_FORCE){if(i[n]=this.reformOption(i[n]),e=i[n].name||"",this.selectedMap[e]=t?t.isSelected(e):!0,!this.selectedMap[e])continue;this.buildMark(n),this._initSerie(o,n);break}}this.animationEffect()},_getNodeCategory:function(e,t){return e.categories&&e.categories[t.category||0]},_getNodeQueryTarget:function(e,t,i){i=i||"normal";var n=this._getNodeCategory(e,t)||{};return[t.itemStyle&&t.itemStyle[i],n&&n.itemStyle&&n.itemStyle[i],e.itemStyle[i].nodeStyle]},_getEdgeQueryTarget:function(e,t,i){return i=i||"normal",[t.itemStyle&&t.itemStyle[i],e.itemStyle[i].linkStyle]},_initSerie:function(e,t){this._temperature=1,e.matrix?this._graph=this._getSerieGraphFromDataMatrix(e):e.links&&(this._graph=this._getSerieGraphFromNodeLinks(e)),this._buildLinkShapes(e,t),this._buildNodeShapes(e,t);var i=e.roam===!0||"move"===e.roam,n=e.roam===!0||"scale"===e.roam;this.zr.modLayer(this.getZlevelBase(),{panable:i,zoomable:n}),(this.query("markPoint.effect.show")||this.query("markLine.effect.show"))&&this.zr.modLayer(d.EFFECT_ZLEVEL,{panable:i,zoomable:n}),this._initLayout(e),this._step()},_getSerieGraphFromDataMatrix:function(e){for(var t=[],i=0,n=[],a=0;a<e.matrix.length;a++)n[a]=e.matrix[a].slice();for(var o=e.data||e.nodes,a=0;a<o.length;a++){var r={},l=o[a];for(var h in l)"name"===h?r.id=l.name:r[h]=l[h];var m=this._getNodeCategory(e,l),V=m?m.name:l.name;if(this.selectedMap[V]=this.isSelected(V),this.selectedMap[V])t.push(r),i++;else{n.splice(i,1);for(var U=0;U<n.length;U++)n[U].splice(i,1)}}var d=s.fromMatrix(t,n,!0);return d.eachNode(function(e,t){e.layout={size:e.data.value,mass:0},e.rawIndex=t}),d.eachEdge(function(e){e.layout={weight:e.data.weight}}),d},_getSerieGraphFromNodeLinks:function(e){for(var t=new s(!0),i=e.data||e.nodes,n=0,a=i.length;a>n;n++){var o=i[n];if(o&&!o.ignore){var r=this._getNodeCategory(e,o),l=r?r.name:o.name;if(this.selectedMap[l]=this.isSelected(l),this.selectedMap[l]){var h=t.addNode(o.name,o);h.rawIndex=n}}}for(var n=0,a=e.links.length;a>n;n++){var m=e.links[n],V=m.source,U=m.target;"number"==typeof V&&(V=i[V],V&&(V=V.name)),"number"==typeof U&&(U=i[U],U&&(U=U.name));var d=t.addEdge(V,U,m);d&&(d.rawIndex=n)}return t.eachNode(function(e){var t=e.data.value;if(null==t){t=0;for(var i=0;i<e.edges.length;i++)t+=e.edges[i].data.weight||0}e.layout={size:t,mass:0}}),t.eachEdge(function(e){e.layout={weight:null==e.data.weight?1:e.data.weight}}),t},_initLayout:function(e){var t=this._graph,i=t.nodes.length,n=this.query(e,"minRadius"),a=this.query(e,"maxRadius");this._steps=e.steps||1;var r=this._layout;r.center=this.parseCenter(this.zr,e.center),r.width=this.parsePercent(e.size,this.zr.getWidth()),r.height=this.parsePercent(e.size,this.zr.getHeight()),r.large=e.large,r.scaling=e.scaling,r.ratioScaling=e.ratioScaling,r.gravity=e.gravity,r.temperature=1,r.coolDown=e.coolDown,r.preventNodeEdgeOverlap=e.preventOverlap,r.preventNodeOverlap=e.preventOverlap;for(var s=1/0,l=-(1/0),h=0;i>h;h++){var m=t.nodes[h];l=Math.max(m.layout.size,l),s=Math.min(m.layout.size,s)}for(var V=l-s,h=0;i>h;h++){var m=t.nodes[h];V>0?(m.layout.size=(m.layout.size-s)*(a-n)/V+n,m.layout.mass=m.layout.size/a):(m.layout.size=(a-n)/2,m.layout.mass=.5)}for(var h=0;i>h;h++){var m=t.nodes[h];if("undefined"!=typeof this.__nodePositionMap[m.id])m.layout.position=y.create(),y.copy(m.layout.position,this.__nodePositionMap[m.id]);else if("undefined"!=typeof m.data.initial)m.layout.position=y.create(),y.copy(m.layout.position,m.data.initial);else{var U=this._layout.center,d=Math.min(this._layout.width,this._layout.height);m.layout.position=o(U[0],U[1],.8*d)}var p=m.shape.style,c=m.layout.size;p.width=p.width||2*c,p.height=p.height||2*c,p.x=-p.width/2,p.y=-p.height/2,y.copy(m.shape.position,m.layout.position)}i=t.edges.length,l=-(1/0);for(var h=0;i>h;h++){var u=t.edges[h];u.layout.weight>l&&(l=u.layout.weight)}for(var h=0;i>h;h++){var u=t.edges[h];u.layout.weight/=l}this._layout.init(t,e.useWorker)},_buildNodeShapes:function(e,t){var i=this._graph,n=this.query(e,"categories");i.eachNode(function(i){var a=this._getNodeCategory(e,i.data),o=[i.data,a,e],r=this._getNodeQueryTarget(e,i.data),s=this._getNodeQueryTarget(e,i.data,"emphasis"),l=new U({style:{x:0,y:0,color:this.deepQuery(r,"color"),brushType:"both",strokeColor:this.deepQuery(r,"strokeColor")||this.deepQuery(r,"borderColor"),lineWidth:this.deepQuery(r,"lineWidth")||this.deepQuery(r,"borderWidth")},highlightStyle:{color:this.deepQuery(s,"color"),strokeColor:this.deepQuery(s,"strokeColor")||this.deepQuery(s,"borderColor"),lineWidth:this.deepQuery(s,"lineWidth")||this.deepQuery(s,"borderWidth")},clickable:e.clickable,zlevel:this.getZlevelBase(),z:this.getZBase()});l.style.color||(l.style.color=this.getColor(a?a.name:i.id)),l.style.iconType=this.deepQuery(o,"symbol");var h=this.deepQuery(o,"symbolSize")||0;"number"==typeof h&&(h=[h,h]),l.style.width=2*h[0],l.style.height=2*h[1],l.style.iconType.match("image")&&(l.style.image=l.style.iconType.replace(new RegExp("^image:\\/\\/"),""),l=new V({style:l.style,highlightStyle:l.highlightStyle,clickable:l.clickable,zlevel:this.getZlevelBase(),z:this.getZBase()})),this.deepQuery(o,"itemStyle.normal.label.show")&&(l.style.text=null==i.data.label?i.id:i.data.label,l.style.textPosition=this.deepQuery(o,"itemStyle.normal.label.position"),l.style.textColor=this.deepQuery(o,"itemStyle.normal.label.textStyle.color"),l.style.textFont=this.getFont(this.deepQuery(o,"itemStyle.normal.label.textStyle")||{})),this.deepQuery(o,"itemStyle.emphasis.label.show")&&(l.highlightStyle.textPosition=this.deepQuery(o,"itemStyle.emphasis.label.position"),l.highlightStyle.textColor=this.deepQuery(o,"itemStyle.emphasis.label.textStyle.color"),l.highlightStyle.textFont=this.getFont(this.deepQuery(o,"itemStyle.emphasis.label.textStyle")||{})),this.deepQuery(o,"draggable")&&(this.setCalculable(l),l.dragEnableTime=0,l.draggable=!0,l.ondragstart=this.shapeHandler.ondragstart,l.ondragover=null);var m="";if("undefined"!=typeof i.category){var a=n[i.category];m=a&&a.name||""}p.pack(l,e,t,i.data,i.rawIndex,i.data.name||"",i.category),this.shapeList.push(l),this.zr.addShape(l),i.shape=l},this)},_buildLinkShapes:function(e,t){for(var i=this._graph,n=i.edges.length,a=0;n>a;a++){var o=i.edges[a],r=o.data,s=o.node1,l=o.node2,V=i.getEdge(l,s),d=this._getEdgeQueryTarget(e,r),u=this.deepQuery(d,"type");e.linkSymbol&&"none"!==e.linkSymbol&&(u="line");var y="line"===u?h:m,g=new y({style:{xStart:0,yStart:0,xEnd:0,yEnd:0},clickable:this.query(e,"clickable"),highlightStyle:{},zlevel:this.getZlevelBase(),z:this.getZBase()});if(V&&V.shape&&(g.style.offset=4,V.shape.style.offset=4),c.merge(g.style,this.query(e,"itemStyle.normal.linkStyle"),!0),c.merge(g.highlightStyle,this.query(e,"itemStyle.emphasis.linkStyle"),!0),"undefined"!=typeof r.itemStyle&&(r.itemStyle.normal&&c.merge(g.style,r.itemStyle.normal,!0),r.itemStyle.emphasis&&c.merge(g.highlightStyle,r.itemStyle.emphasis,!0)),g.style.lineWidth=g.style.lineWidth||g.style.width,g.style.strokeColor=g.style.strokeColor||g.style.color,g.highlightStyle.lineWidth=g.highlightStyle.lineWidth||g.highlightStyle.width,g.highlightStyle.strokeColor=g.highlightStyle.strokeColor||g.highlightStyle.color,p.pack(g,e,t,o.data,null==o.rawIndex?a:o.rawIndex,o.data.name||s.id+" - "+l.id,s.id,l.id),this.shapeList.push(g),this.zr.addShape(g),o.shape=g,e.linkSymbol&&"none"!==e.linkSymbol){var b=new U({style:{x:-5,y:0,width:e.linkSymbolSize[0],height:e.linkSymbolSize[1],iconType:e.linkSymbol,brushType:"fill",color:g.style.strokeColor},highlightStyle:{brushType:"fill"},position:[0,0],rotation:0,zlevel:this.getZlevelBase(),z:this.getZBase()});g._symbolShape=b,this.shapeList.push(b),this.zr.addShape(b)}}},_updateLinkShapes:function(){for(var e=y.create(),t=y.create(),i=y.create(),n=y.create(),a=this._graph.edges,o=0,r=a.length;r>o;o++){var s=a[o],l=s.node1.shape,h=s.node2.shape;y.copy(i,l.position),y.copy(n,h.position);var m=s.shape.style;if(y.sub(e,i,n),y.normalize(e,e),m.offset?(t[0]=e[1],t[1]=-e[0],y.scaleAndAdd(i,i,t,m.offset),y.scaleAndAdd(n,n,t,m.offset)):"bezier-curve"===s.shape.type&&(m.cpX1=(i[0]+n[0])/2-(n[1]-i[1])/4,m.cpY1=(i[1]+n[1])/2-(i[0]-n[0])/4),m.xStart=i[0],m.yStart=i[1],m.xEnd=n[0],m.yEnd=n[1],s.shape.modSelf(),s.shape._symbolShape){var V=s.shape._symbolShape;y.copy(V.position,n),y.scaleAndAdd(V.position,V.position,e,h.style.width/2+2);var U=Math.atan2(e[1],e[0]);V.rotation=Math.PI/2-U,V.modSelf()}}},_syncNodePositions:function(){for(var e=this._graph,t=0;t<e.nodes.length;t++){var i=e.nodes[t],n=i.layout.position,a=i.data,o=i.shape,r=o.fixed||a.fixX,s=o.fixed||a.fixY;r===!0?r=1:isNaN(r)&&(r=0),s===!0?s=1:isNaN(s)&&(s=0),o.position[0]+=(n[0]-o.position[0])*(1-r),o.position[1]+=(n[1]-o.position[1])*(1-s),y.copy(n,o.position);var l=a.name;if(l){var h=this.__nodePositionMap[l];h||(h=this.__nodePositionMap[l]=y.create()),y.copy(h,n)}o.modSelf()}},_step:function(){this._syncNodePositions(),this._updateLinkShapes(),this.zr.refreshNextFrame(),this._layout.temperature>.01?this._layout.step(this._steps):this.messageCenter.dispatch(d.EVENT.FORCE_LAYOUT_END,{},{},this.myChart)},refresh:function(e){if(e&&(this.option=e,this.series=this.option.series),this.legend=this.component.legend,this.legend)this.getColor=function(e){return this.legend.getColor(e)},this.isSelected=function(e){return this.legend.isSelected(e)};else{var t={},i=0;this.getColor=function(e){return t[e]?t[e]:(t[e]||(t[e]=this.zr.getColor(i++)),t[e])},this.isSelected=function(){return!0}}this._init()},dispose:function(){this.clear(),this.shapeList=null,this.effectList=null,this._layout.dispose(),this._layout=null,this.__nodePositionMap={}},getPosition:function(){var e=[];return this._graph.eachNode(function(t){t.layout&&e.push({name:t.data.name,position:Array.prototype.slice.call(t.layout.position)})}),e}},c.inherits(t,r),e("../chart").define("force",t),t}),i("echarts/layout/Force",["require","./forceLayoutWorker","zrender/tool/vector"],function(e){function t(){if("undefined"!=typeof Worker&&"undefined"!=typeof Blob)try{var e=new Blob([n.getWorkerCode()]);i=window.URL.createObjectURL(e)}catch(t){i=""}return i}var i,n=e("./forceLayoutWorker"),a=e("zrender/tool/vector"),o=window.requestAnimationFrame||window.msRequestAnimationFrame||window.mozRequestAnimationFrame||window.webkitRequestAnimationFrame||function(e){setTimeout(e,16)},r="undefined"==typeof Float32Array?Array:Float32Array,s=function(e){"undefined"==typeof i&&t(),e=e||{},this.width=e.width||500,this.height=e.height||500,this.center=e.center||[this.width/2,this.height/2],this.ratioScaling=e.ratioScaling||!1,this.scaling=e.scaling||1,this.gravity="undefined"!=typeof e.gravity?e.gravity:1,this.large=e.large||!1,this.preventNodeOverlap=e.preventNodeOverlap||!1,this.preventNodeEdgeOverlap=e.preventNodeEdgeOverlap||!1,this.maxSpeedIncrease=e.maxSpeedIncrease||1,this.onupdate=e.onupdate||function(){},this.temperature=e.temperature||1,this.coolDown=e.coolDown||.99,this._layout=null,this._layoutWorker=null;var n=this,a=this._$onupdate;this._$onupdate=function(e){a.call(n,e)}};return s.prototype.updateConfig=function(){var e=this.width,t=this.height,i=Math.min(e,t),n={center:this.center,width:this.ratioScaling?e:i,height:this.ratioScaling?t:i,scaling:this.scaling||1,gravity:this.gravity||1,barnesHutOptimize:this.large,preventNodeOverlap:this.preventNodeOverlap,preventNodeEdgeOverlap:this.preventNodeEdgeOverlap,maxSpeedIncrease:this.maxSpeedIncrease};if(this._layoutWorker)this._layoutWorker.postMessage({cmd:"updateConfig",config:n});else for(var a in n)this._layout[a]=n[a]},s.prototype.init=function(e,t){if(this._layoutWorker&&(this._layoutWorker.terminate(),this._layoutWorker=null),i&&t)try{this._layoutWorker||(this._layoutWorker=new Worker(i),this._layoutWorker.onmessage=this._$onupdate),this._layout=null}catch(a){this._layoutWorker=null,this._layout||(this._layout=new n)}else this._layout||(this._layout=new n);this.temperature=1,this.graph=e;for(var o=e.nodes.length,s=new r(2*o),l=new r(o),h=new r(o),m=0;o>m;m++){var V=e.nodes[m];s[2*m]=V.layout.position[0],s[2*m+1]=V.layout.position[1],l[m]="undefined"==typeof V.layout.mass?1:V.layout.mass,h[m]="undefined"==typeof V.layout.size?1:V.layout.size,V.layout.__index=m}o=e.edges.length;for(var U=new r(2*o),d=new r(o),m=0;o>m;m++){var p=e.edges[m];U[2*m]=p.node1.layout.__index,U[2*m+1]=p.node2.layout.__index,d[m]=p.layout.weight||1}this._layoutWorker?this._layoutWorker.postMessage({cmd:"init",nodesPosition:s,nodesMass:l,nodesSize:h,edges:U,edgesWeight:d}):(this._layout.initNodes(s,l,h),this._layout.initEdges(U,d)),this.updateConfig()},s.prototype.step=function(e){var t=this.graph.nodes;if(this._layoutWorker){for(var i=new r(2*t.length),n=0;n<t.length;n++){var s=t[n];i[2*n]=s.layout.position[0],i[2*n+1]=s.layout.position[1]}this._layoutWorker.postMessage(i.buffer,[i.buffer]),this._layoutWorker.postMessage({cmd:"update",steps:e,temperature:this.temperature,coolDown:this.coolDown});for(var n=0;e>n;n++)this.temperature*=this.coolDown}else{o(this._$onupdate);for(var n=0;n<t.length;n++){var s=t[n];a.copy(this._layout.nodes[n].position,s.layout.position)}for(var n=0;e>n;n++)this._layout.temperature=this.temperature,this._layout.update(),this.temperature*=this.coolDown}},s.prototype._$onupdate=function(e){if(this._layoutWorker){for(var t=new Float32Array(e.data),i=0;i<this.graph.nodes.length;i++){var n=this.graph.nodes[i];n.layout.position[0]=t[2*i],n.layout.position[1]=t[2*i+1]}this.onupdate&&this.onupdate()}else if(this._layout){for(var i=0;i<this.graph.nodes.length;i++){var n=this.graph.nodes[i];a.copy(n.layout.position,this._layout.nodes[i].position)}this.onupdate&&this.onupdate()}},s.prototype.dispose=function(){this._layoutWorker&&this._layoutWorker.terminate(),this._layoutWorker=null,this._layout=null},s}),i("echarts/layout/forceLayoutWorker",["require","zrender/tool/vector"],function o(e){"use strict";function t(){this.subRegions=[],this.nSubRegions=0,this.node=null,this.mass=0,this.centerOfMass=null,this.bbox=new l(4),this.size=0}function i(){this.position=r.create(),this.force=r.create(),this.forcePrev=r.create(),this.speed=r.create(),this.speedPrev=r.create(),this.mass=1,this.inDegree=0,this.outDegree=0}function n(e,t){this.node1=e,this.node2=t,this.weight=1}function a(){this.barnesHutOptimize=!1,this.barnesHutTheta=1.5,this.repulsionByDegree=!1,this.preventNodeOverlap=!1,this.preventNodeEdgeOverlap=!1,this.strongGravity=!0,this.gravity=1,this.scaling=1,this.edgeWeightInfluence=1,this.center=[0,0],this.width=500,this.height=500,this.maxSpeedIncrease=1,this.nodes=[],this.edges=[],this.bbox=new l(4),this._rootRegion=new t,this._rootRegion.centerOfMass=r.create(),this._massArr=null,this._k=0}var r,s="undefined"==typeof window&&"undefined"==typeof e;r=s?{create:function(e,t){var i=new Float32Array(2);return i[0]=e||0,i[1]=t||0,i},dist:function(e,t){var i=t[0]-e[0],n=t[1]-e[1];return Math.sqrt(i*i+n*n)},len:function(e){var t=e[0],i=e[1];return Math.sqrt(t*t+i*i)},scaleAndAdd:function(e,t,i,n){return e[0]=t[0]+i[0]*n,e[1]=t[1]+i[1]*n,e},scale:function(e,t,i){return e[0]=t[0]*i,e[1]=t[1]*i,e},add:function(e,t,i){return e[0]=t[0]+i[0],e[1]=t[1]+i[1],e},sub:function(e,t,i){return e[0]=t[0]-i[0],e[1]=t[1]-i[1],e},dot:function(e,t){return e[0]*t[0]+e[1]*t[1]},normalize:function(e,t){var i=t[0],n=t[1],a=i*i+n*n;return a>0&&(a=1/Math.sqrt(a),e[0]=t[0]*a,e[1]=t[1]*a),e},negate:function(e,t){return e[0]=-t[0],e[1]=-t[1],e},copy:function(e,t){return e[0]=t[0],e[1]=t[1],e},set:function(e,t,i){return e[0]=t,e[1]=i,e}}:e("zrender/tool/vector");var l="undefined"==typeof Float32Array?Array:Float32Array;if(t.prototype.beforeUpdate=function(){for(var e=0;e<this.nSubRegions;e++)this.subRegions[e].beforeUpdate();this.mass=0,this.centerOfMass&&(this.centerOfMass[0]=0,this.centerOfMass[1]=0),this.nSubRegions=0,this.node=null},t.prototype.afterUpdate=function(){this.subRegions.length=this.nSubRegions;for(var e=0;e<this.nSubRegions;e++)this.subRegions[e].afterUpdate()},t.prototype.addNode=function(e){if(0===this.nSubRegions){if(null==this.node)return void(this.node=e);this._addNodeToSubRegion(this.node),this.node=null}this._addNodeToSubRegion(e),this._updateCenterOfMass(e)},t.prototype.findSubRegion=function(e,t){for(var i=0;i<this.nSubRegions;i++){var n=this.subRegions[i];if(n.contain(e,t))return n}},t.prototype.contain=function(e,t){return this.bbox[0]<=e&&this.bbox[2]>=e&&this.bbox[1]<=t&&this.bbox[3]>=t},t.prototype.setBBox=function(e,t,i,n){this.bbox[0]=e,this.bbox[1]=t,this.bbox[2]=i,this.bbox[3]=n,this.size=(i-e+n-t)/2},t.prototype._newSubRegion=function(){var e=this.subRegions[this.nSubRegions];return e||(e=new t,this.subRegions[this.nSubRegions]=e),this.nSubRegions++,e},t.prototype._addNodeToSubRegion=function(e){var t=this.findSubRegion(e.position[0],e.position[1]),i=this.bbox;if(!t){var n=(i[0]+i[2])/2,a=(i[1]+i[3])/2,o=(i[2]-i[0])/2,r=(i[3]-i[1])/2,s=e.position[0]>=n?1:0,l=e.position[1]>=a?1:0,t=this._newSubRegion();t.setBBox(s*o+i[0],l*r+i[1],(s+1)*o+i[0],(l+1)*r+i[1])}t.addNode(e)},t.prototype._updateCenterOfMass=function(e){null==this.centerOfMass&&(this.centerOfMass=r.create());var t=this.centerOfMass[0]*this.mass,i=this.centerOfMass[1]*this.mass;t+=e.position[0]*e.mass,i+=e.position[1]*e.mass,this.mass+=e.mass,this.centerOfMass[0]=t/this.mass,this.centerOfMass[1]=i/this.mass},a.prototype.nodeToNodeRepulsionFactor=function(e,t,i){return i*i*e/t},a.prototype.edgeToNodeRepulsionFactor=function(e,t,i){return i*e/t},a.prototype.attractionFactor=function(e,t,i){return e*t/i},a.prototype.initNodes=function(e,t,n){this.temperature=1;var a=e.length/2;this.nodes.length=0;for(var o="undefined"!=typeof n,r=0;a>r;r++){var s=new i;s.position[0]=e[2*r],s.position[1]=e[2*r+1],s.mass=t[r],o&&(s.size=n[r]),this.nodes.push(s)}this._massArr=t,o&&(this._sizeArr=n)},a.prototype.initEdges=function(e,t){var i=e.length/2;this.edges.length=0;for(var a="undefined"!=typeof t,o=0;i>o;o++){var r=e[2*o],s=e[2*o+1],l=this.nodes[r],h=this.nodes[s];if(l&&h){l.outDegree++,h.inDegree++;var m=new n(l,h);a&&(m.weight=t[o]),this.edges.push(m)}}},a.prototype.update=function(){var e=this.nodes.length;if(this.updateBBox(),this._k=.4*this.scaling*Math.sqrt(this.width*this.height/e),this.barnesHutOptimize){this._rootRegion.setBBox(this.bbox[0],this.bbox[1],this.bbox[2],this.bbox[3]),this._rootRegion.beforeUpdate();for(var t=0;e>t;t++)this._rootRegion.addNode(this.nodes[t]);this._rootRegion.afterUpdate()}else{var i=0,n=this._rootRegion.centerOfMass;r.set(n,0,0);for(var t=0;e>t;t++){var a=this.nodes[t];i+=a.mass,r.scaleAndAdd(n,n,a.position,a.mass);
+
+}i>0&&r.scale(n,n,1/i)}this.updateForce(),this.updatePosition()},a.prototype.updateForce=function(){for(var e=this.nodes.length,t=0;e>t;t++){var i=this.nodes[t];r.copy(i.forcePrev,i.force),r.copy(i.speedPrev,i.speed),r.set(i.force,0,0)}this.updateNodeNodeForce(),this.gravity>0&&this.updateGravityForce(),this.updateEdgeForce(),this.preventNodeEdgeOverlap&&this.updateNodeEdgeForce()},a.prototype.updatePosition=function(){for(var e=this.nodes.length,t=r.create(),i=0;e>i;i++){var n=this.nodes[i],a=n.speed;r.scale(n.force,n.force,1/30);var o=r.len(n.force)+.1,s=Math.min(o,500)/o;r.scale(n.force,n.force,s),r.add(a,a,n.force),r.scale(a,a,this.temperature),r.sub(t,a,n.speedPrev);var l=r.len(t);if(l>0){r.scale(t,t,1/l);var h=r.len(n.speedPrev);h>0&&(l=Math.min(l/h,this.maxSpeedIncrease)*h,r.scaleAndAdd(a,n.speedPrev,t,l))}var m=r.len(a),s=Math.min(m,100)/(m+.1);r.scale(a,a,s),r.add(n.position,n.position,a)}},a.prototype.updateNodeNodeForce=function(){for(var e=this.nodes.length,t=0;e>t;t++){var i=this.nodes[t];if(this.barnesHutOptimize)this.applyRegionToNodeRepulsion(this._rootRegion,i);else for(var n=t+1;e>n;n++){var a=this.nodes[n];this.applyNodeToNodeRepulsion(i,a,!1)}}},a.prototype.updateGravityForce=function(){for(var e=0;e<this.nodes.length;e++)this.applyNodeGravity(this.nodes[e])},a.prototype.updateEdgeForce=function(){for(var e=0;e<this.edges.length;e++)this.applyEdgeAttraction(this.edges[e])},a.prototype.updateNodeEdgeForce=function(){for(var e=0;e<this.nodes.length;e++)for(var t=0;t<this.edges.length;t++)this.applyEdgeToNodeRepulsion(this.edges[t],this.nodes[e])},a.prototype.applyRegionToNodeRepulsion=function(){var e=r.create();return function(t,i){if(t.node)this.applyNodeToNodeRepulsion(t.node,i,!0);else{if(0===t.mass&&0===i.mass)return;r.sub(e,i.position,t.centerOfMass);var n=e[0]*e[0]+e[1]*e[1];if(n>this.barnesHutTheta*t.size*t.size){var a=this._k*this._k*(i.mass+t.mass)/(n+1);r.scaleAndAdd(i.force,i.force,e,2*a)}else for(var o=0;o<t.nSubRegions;o++)this.applyRegionToNodeRepulsion(t.subRegions[o],i)}}}(),a.prototype.applyNodeToNodeRepulsion=function(){var e=r.create();return function(t,i,n){if(t!==i&&(0!==t.mass||0!==i.mass)){r.sub(e,t.position,i.position);var a=e[0]*e[0]+e[1]*e[1];if(0!==a){var o,s=t.mass+i.mass,l=Math.sqrt(a);r.scale(e,e,1/l),this.preventNodeOverlap?(l=l-t.size-i.size,l>0?o=this.nodeToNodeRepulsionFactor(s,l,this._k):0>=l&&(o=this._k*this._k*10*s)):o=this.nodeToNodeRepulsionFactor(s,l,this._k),n||r.scaleAndAdd(t.force,t.force,e,2*o),r.scaleAndAdd(i.force,i.force,e,2*-o)}}}}(),a.prototype.applyEdgeAttraction=function(){var e=r.create();return function(t){var i=t.node1,n=t.node2;r.sub(e,i.position,n.position);var a,o=r.len(e);a=0===this.edgeWeightInfluence?1:1==this.edgeWeightInfluence?t.weight:Math.pow(t.weight,this.edgeWeightInfluence);var s;if(!(this.preventOverlap&&(o=o-i.size-n.size,0>=o))){var s=this.attractionFactor(a,o,this._k);r.scaleAndAdd(i.force,i.force,e,-s),r.scaleAndAdd(n.force,n.force,e,s)}}}(),a.prototype.applyNodeGravity=function(){var e=r.create();return function(t){r.sub(e,this.center,t.position),this.width>this.height?e[1]*=this.width/this.height:e[0]*=this.height/this.width;var i=r.len(e)/100;this.strongGravity?r.scaleAndAdd(t.force,t.force,e,i*this.gravity*t.mass):r.scaleAndAdd(t.force,t.force,e,this.gravity*t.mass/(i+1))}}(),a.prototype.applyEdgeToNodeRepulsion=function(){var e=r.create(),t=r.create(),i=r.create();return function(n,a){var o=n.node1,s=n.node2;if(o!==a&&s!==a){r.sub(e,s.position,o.position),r.sub(t,a.position,o.position);var l=r.len(e);r.scale(e,e,1/l);var h=r.dot(e,t);if(!(0>h||h>l)){r.scaleAndAdd(i,o.position,e,h);var m=r.dist(i,a.position)-a.size,V=this.edgeToNodeRepulsionFactor(a.mass,Math.max(m,.1),100);r.sub(e,a.position,i),r.normalize(e,e),r.scaleAndAdd(a.force,a.force,e,V),r.scaleAndAdd(o.force,o.force,e,-V),r.scaleAndAdd(s.force,s.force,e,-V)}}}}(),a.prototype.updateBBox=function(){for(var e=1/0,t=1/0,i=-(1/0),n=-(1/0),a=0;a<this.nodes.length;a++){var o=this.nodes[a].position;e=Math.min(e,o[0]),t=Math.min(t,o[1]),i=Math.max(i,o[0]),n=Math.max(n,o[1])}this.bbox[0]=e,this.bbox[1]=t,this.bbox[2]=i,this.bbox[3]=n},a.getWorkerCode=function(){var e=o.toString();return e.slice(e.indexOf("{")+1,e.lastIndexOf("return"))},s){var h=null;self.onmessage=function(e){if(e.data instanceof ArrayBuffer){if(!h)return;for(var t=new Float32Array(e.data),i=t.length/2,n=0;i>n;n++){var o=h.nodes[n];o.position[0]=t[2*n],o.position[1]=t[2*n+1]}}else switch(e.data.cmd){case"init":h||(h=new a),h.initNodes(e.data.nodesPosition,e.data.nodesMass,e.data.nodesSize),h.initEdges(e.data.edges,e.data.edgesWeight);break;case"updateConfig":if(h)for(var r in e.data.config)h[r]=e.data.config[r];break;case"update":var s=e.data.steps;if(h){var i=h.nodes.length,t=new Float32Array(2*i);h.temperature=e.data.temperature;for(var n=0;s>n;n++)h.update(),h.temperature*=e.data.coolDown;for(var n=0;i>n;n++){var o=h.nodes[n];t[2*n]=o.position[0],t[2*n+1]=o.position[1]}self.postMessage(t.buffer,[t.buffer])}else{var l=new Float32Array;self.postMessage(l.buffer,[l.buffer])}}}}return a}),i("echarts/chart/map",["require","./base","zrender/shape/Text","zrender/shape/Path","zrender/shape/Circle","zrender/shape/Rectangle","zrender/shape/Line","zrender/shape/Polygon","zrender/shape/Ellipse","zrender/shape/Image","../component/dataRange","../component/roamController","../layer/heatmap","../config","../util/ecData","zrender/tool/util","zrender/config","zrender/tool/event","../util/mapData/params","../util/mapData/textFixed","../util/mapData/geoCoord","../util/projection/svg","../util/projection/normal","../chart"],function(e){function t(e,t,n,a,o){i.call(this,e,t,n,a,o);var r=this;r._onmousewheel=function(e){return r.__onmousewheel(e)},r._onmousedown=function(e){return r.__onmousedown(e)},r._onmousemove=function(e){return r.__onmousemove(e)},r._onmouseup=function(e){return r.__onmouseup(e)},r._onroamcontroller=function(e){return r.__onroamcontroller(e)},r._ondrhoverlink=function(e){return r.__ondrhoverlink(e)},this._isAlive=!0,this._selectedMode={},this._activeMapType={},this._clickable={},this._hoverable={},this._showLegendSymbol={},this._selected={},this._mapTypeMap={},this._mapDataMap={},this._nameMap={},this._specialArea={},this._refreshDelayTicket,this._mapDataRequireCounter,this._markAnimation=!1,this._hoverLinkMap={},this._roamMap={},this._scaleLimitMap={},this._mx,this._my,this._mousedown,this._justMove,this._curMapType,this.refresh(a),this.zr.on(c.EVENT.MOUSEWHEEL,this._onmousewheel),this.zr.on(c.EVENT.MOUSEDOWN,this._onmousedown),t.bind(U.EVENT.ROAMCONTROLLER,this._onroamcontroller),t.bind(U.EVENT.DATA_RANGE_HOVERLINK,this._ondrhoverlink)}var i=e("./base"),n=e("zrender/shape/Text"),a=e("zrender/shape/Path"),o=e("zrender/shape/Circle"),r=e("zrender/shape/Rectangle"),s=e("zrender/shape/Line"),l=e("zrender/shape/Polygon"),h=e("zrender/shape/Ellipse"),m=e("zrender/shape/Image");e("../component/dataRange"),e("../component/roamController");var V=e("../layer/heatmap"),U=e("../config");U.map={zlevel:0,z:2,mapType:"china",showLegendSymbol:!0,dataRangeHoverLink:!0,hoverable:!0,clickable:!0,itemStyle:{normal:{borderColor:"rgba(0,0,0,0)",borderWidth:1,areaStyle:{color:"#ccc"},label:{show:!1,textStyle:{color:"rgb(139,69,19)"}}},emphasis:{borderColor:"rgba(0,0,0,0)",borderWidth:1,areaStyle:{color:"rgba(255,215,0,0.8)"},label:{show:!1,textStyle:{color:"rgb(100,0,0)"}}}}};var d=e("../util/ecData"),p=e("zrender/tool/util"),c=e("zrender/config"),u=e("zrender/tool/event"),y=e("../util/mapData/params").params,g=e("../util/mapData/textFixed"),b=e("../util/mapData/geoCoord");return t.prototype={type:U.CHART_TYPE_MAP,_buildShape:function(){var e=this.series;this.selectedMap={},this._activeMapType={};for(var t,i,n,a,o=this.component.legend,r={},s={},l={},h={},m=0,V=e.length;V>m;m++)if(e[m].type==U.CHART_TYPE_MAP&&(e[m]=this.reformOption(e[m]),i=e[m].mapType,s[i]=s[i]||{},s[i][m]=!0,l[i]=l[i]||e[m].mapValuePrecision,this._scaleLimitMap[i]=this._scaleLimitMap[i]||{},e[m].scaleLimit&&p.merge(this._scaleLimitMap[i],e[m].scaleLimit,!0),this._roamMap[i]=e[m].roam||this._roamMap[i],(null==this._hoverLinkMap[i]||this._hoverLinkMap[i])&&(this._hoverLinkMap[i]=e[m].dataRangeHoverLink),this._nameMap[i]=this._nameMap[i]||{},e[m].nameMap&&p.merge(this._nameMap[i],e[m].nameMap,!0),this._activeMapType[i]=!0,e[m].textFixed&&p.merge(g,e[m].textFixed,!0),e[m].geoCoord&&p.merge(b,e[m].geoCoord,!0),this._selectedMode[i]=this._selectedMode[i]||e[m].selectedMode,(null==this._hoverable[i]||this._hoverable[i])&&(this._hoverable[i]=e[m].hoverable),(null==this._clickable[i]||this._clickable[i])&&(this._clickable[i]=e[m].clickable),(null==this._showLegendSymbol[i]||this._showLegendSymbol[i])&&(this._showLegendSymbol[i]=e[m].showLegendSymbol),h[i]=h[i]||e[m].mapValueCalculation,t=e[m].name,this.selectedMap[t]=o?o.isSelected(t):!0,this.selectedMap[t])){r[i]=r[i]||{},n=e[m].data;for(var d=0,c=n.length;c>d;d++){a=this._nameChange(i,n[d].name),r[i][a]=r[i][a]||{seriesIndex:[],valueMap:{},precision:0};for(var u in n[d])"value"!=u?r[i][a][u]=n[d][u]:isNaN(n[d].value)||(null==r[i][a].value&&(r[i][a].value=0),r[i][a].precision=Math.max(this.getPrecision(+n[d].value),r[i][a].precision),r[i][a].value+=+n[d].value,r[i][a].valueMap[m]=+n[d].value);r[i][a].seriesIndex.push(m)}}this._mapDataRequireCounter=0;for(var f in r)this._mapDataRequireCounter++;this._clearSelected(),0===this._mapDataRequireCounter&&(this.clear(),this.zr&&this.zr.delShape(this.lastShapeList),this.lastShapeList=[]);for(var f in r){for(var c in r[f]){"average"==h[f]&&(r[f][c].value/=r[f][c].seriesIndex.length);var k=r[f][c].value;null!=k&&(r[f][c].value=k.toFixed(null==l[f]?r[f][c].precision:l[f])-0)}this._mapDataMap[f]=this._mapDataMap[f]||{},this._mapDataMap[f].mapData?this._mapDataCallback(f,r[f],s[f])(this._mapDataMap[f].mapData):y[f.replace(/\|.*/,"")].getGeoJson&&(this._specialArea[f]=y[f.replace(/\|.*/,"")].specialArea||this._specialArea[f],y[f.replace(/\|.*/,"")].getGeoJson(this._mapDataCallback(f,r[f],s[f])))}},_mapDataCallback:function(t,i,n){var a=this;return function(o){a._isAlive&&null!=a._activeMapType[t]&&(-1!=t.indexOf("|")&&(o=a._getSubMapData(t,o)),a._mapDataMap[t].mapData=o,o.firstChild?(a._mapDataMap[t].rate=1,a._mapDataMap[t].projection=e("../util/projection/svg")):(a._mapDataMap[t].rate=.75,a._mapDataMap[t].projection=e("../util/projection/normal")),a._buildMap(t,a._getProjectionData(t,o,n),i,n),a._buildMark(t,n),--a._mapDataRequireCounter<=0&&(a.addShapeList(),a.zr.refreshNextFrame()),a._buildHeatmap(t))}},_clearSelected:function(){for(var e in this._selected)this._activeMapType[this._mapTypeMap[e]]||(delete this._selected[e],delete this._mapTypeMap[e])},_getSubMapData:function(e,t){for(var i=e.replace(/^.*\|/,""),n=t.features,a=0,o=n.length;o>a;a++)if(n[a].properties&&n[a].properties.name==i){n=n[a],"United States of America"==i&&n.geometry.coordinates.length>1&&(n={geometry:{coordinates:n.geometry.coordinates.slice(5,6),type:n.geometry.type},id:n.id,properties:n.properties,type:n.type});break}return{type:"FeatureCollection",features:[n]}},_getProjectionData:function(e,t,i){var n,a=this._mapDataMap[e].projection,o=[],r=this._mapDataMap[e].bbox||a.getBbox(t,this._specialArea[e]);n=this._mapDataMap[e].hasRoam?this._mapDataMap[e].transform:this._getTransform(r,i,this._mapDataMap[e].rate);var s,l=this._mapDataMap[e].lastTransform||{scale:{}};n.left!=l.left||n.top!=l.top||n.scale.x!=l.scale.x||n.scale.y!=l.scale.y?(s=a.geoJson2Path(t,n,this._specialArea[e]),l=p.clone(n)):(n=this._mapDataMap[e].transform,s=this._mapDataMap[e].pathArray),this._mapDataMap[e].bbox=r,this._mapDataMap[e].transform=n,this._mapDataMap[e].lastTransform=l,this._mapDataMap[e].pathArray=s;for(var h=[n.left,n.top],m=0,V=s.length;V>m;m++)o.push(this._getSingleProvince(e,s[m],h));if(this._specialArea[e])for(var U in this._specialArea[e])o.push(this._getSpecialProjectionData(e,t,U,this._specialArea[e][U],h));if("china"==e){var d=this.geo2pos(e,b["南海诸岛"]||y["南海诸岛"].textCoord),c=n.scale.x/10.5,u=[32*c+d[0],83*c+d[1]];g["南海诸岛"]&&(u[0]+=g["南海诸岛"][0],u[1]+=g["南海诸岛"][1]),o.push({name:this._nameChange(e,"南海诸岛"),path:y["南海诸岛"].getPath(d,c),position:h,textX:u[0],textY:u[1]})}return o},_getSpecialProjectionData:function(t,i,n,a,o){i=this._getSubMapData("x|"+n,i);var r=e("../util/projection/normal"),s=r.getBbox(i),l=this.geo2pos(t,[a.left,a.top]),h=this.geo2pos(t,[a.left+a.width,a.top+a.height]),m=Math.abs(h[0]-l[0]),V=Math.abs(h[1]-l[1]),U=s.width,d=s.height,p=m/.75/U,c=V/d;p>c?(p=.75*c,m=U*p):(c=p,p=.75*c,V=d*c);var u={OffsetLeft:l[0],OffsetTop:l[1],scale:{x:p,y:c}},y=r.geoJson2Path(i,u);return this._getSingleProvince(t,y[0],o)},_getSingleProvince:function(e,t,i){var n,a=t.properties.name,o=g[a]||[0,0];if(b[a])n=this.geo2pos(e,b[a]);else if(t.cp)n=[t.cp[0]+o[0],t.cp[1]+o[1]];else{var r=this._mapDataMap[e].bbox;n=this.geo2pos(e,[r.left+r.width/2,r.top+r.height/2]),n[0]+=o[0],n[1]+=o[1]}return t.name=this._nameChange(e,a),t.position=i,t.textX=n[0],t.textY=n[1],t},_getTransform:function(e,t,i){var n,a,o,r,s,l,h,m=this.series,V=this.zr.getWidth(),U=this.zr.getHeight(),d=Math.round(.02*Math.min(V,U));for(var p in t)n=m[p].mapLocation||{},o=n.x||o,s=n.y||s,l=n.width||l,h=n.height||h;a=this.parsePercent(o,V),a=isNaN(a)?d:a,r=this.parsePercent(s,U),r=isNaN(r)?d:r,l=null==l?V-a-2*d:this.parsePercent(l,V),h=null==h?U-r-2*d:this.parsePercent(h,U);var c=e.width,u=e.height,y=l/i/c,g=h/u;if(y>g?(y=g*i,l=c*y):(g=y,y=g*i,h=u*g),isNaN(o))switch(o=o||"center",o+""){case"center":a=Math.floor((V-l)/2);break;case"right":a=V-l}if(isNaN(s))switch(s=s||"center",s+""){case"center":r=Math.floor((U-h)/2);break;case"bottom":r=U-h}return{left:a,top:r,width:l,height:h,baseScale:1,scale:{x:y,y:g}}},_buildMap:function(e,t,i,m){for(var V,c,u,y,g,b,f,k,x,_,L,W=this.series,X=this.component.legend,v=this.component.dataRange,w=0,K=t.length;K>w;w++){if(k=p.clone(t[w]),x={name:k.name,path:k.path,position:p.clone(k.position)},c=k.name,u=i[c]){g=[u],V="";for(var I=0,J=u.seriesIndex.length;J>I;I++){var C=W[u.seriesIndex[I]];g.push(C),V+=C.name+" ",X&&this._showLegendSymbol[e]&&X.hasColor(C.name)&&this.shapeList.push(new o({zlevel:C.zlevel,z:C.z+1,position:p.clone(k.position),_mapType:e,style:{x:k.textX+3+7*I,y:k.textY-10,r:3,color:X.getColor(C.name)},hoverable:!1}))}y=u.value}else{u={name:c,value:"-"},V="",g=[];for(var S in m)g.push(W[S]);y="-"}switch(this.ecTheme.map&&g.push(this.ecTheme.map),g.push(U.map),b=v&&!isNaN(y)?v.getColor(y):null,k.color=k.color||b||this.getItemStyleColor(this.deepQuery(g,"itemStyle.normal.color"),u.seriesIndex,-1,u)||this.deepQuery(g,"itemStyle.normal.areaStyle.color"),k.strokeColor=k.strokeColor||this.deepQuery(g,"itemStyle.normal.borderColor"),k.lineWidth=k.lineWidth||this.deepQuery(g,"itemStyle.normal.borderWidth"),x.color=this.getItemStyleColor(this.deepQuery(g,"itemStyle.emphasis.color"),u.seriesIndex,-1,u)||this.deepQuery(g,"itemStyle.emphasis.areaStyle.color")||k.color,x.strokeColor=this.deepQuery(g,"itemStyle.emphasis.borderColor")||k.strokeColor,x.lineWidth=this.deepQuery(g,"itemStyle.emphasis.borderWidth")||k.lineWidth,k.brushType=x.brushType=k.brushType||"both",k.lineJoin=x.lineJoin="round",k._name=x._name=c,f=this.deepQuery(g,"itemStyle.normal.label.textStyle"),L={zlevel:this.getZlevelBase(),z:this.getZBase()+1,position:p.clone(k.position),_mapType:e,_geo:this.pos2geo(e,[k.textX,k.textY]),style:{brushType:"fill",x:k.textX,y:k.textY,text:this.getLabelText(c,y,g,"normal"),_name:c,textAlign:"center",color:this.deepQuery(g,"itemStyle.normal.label.show")?this.deepQuery(g,"itemStyle.normal.label.textStyle.color"):"rgba(0,0,0,0)",textFont:this.getFont(f)}},L._style=p.clone(L.style),L.highlightStyle=p.clone(L.style),this.deepQuery(g,"itemStyle.emphasis.label.show")?(L.highlightStyle.text=this.getLabelText(c,y,g,"emphasis"),L.highlightStyle.color=this.deepQuery(g,"itemStyle.emphasis.label.textStyle.color")||L.style.color,f=this.deepQuery(g,"itemStyle.emphasis.label.textStyle")||f,L.highlightStyle.textFont=this.getFont(f)):L.highlightStyle.color="rgba(0,0,0,0)",_={zlevel:this.getZlevelBase(),z:this.getZBase(),position:p.clone(k.position),style:k,highlightStyle:x,_style:p.clone(k),_mapType:e},null!=k.scale&&(_.scale=p.clone(k.scale)),L=new n(L),_.style.shapeType){case"rectangle":_=new r(_);break;case"line":_=new s(_);break;case"circle":_=new o(_);break;case"polygon":_=new l(_);break;case"ellipse":_=new h(_);break;default:_=new a(_),_.buildPathArray&&(_.style.pathArray=_.buildPathArray(_.style.path))}(this._selectedMode[e]&&this._selected[c]&&u.selected!==!1||u.selected===!0)&&(L.style=L.highlightStyle,_.style=_.highlightStyle),L.clickable=_.clickable=this._clickable[e]&&(null==u.clickable||u.clickable),this._selectedMode[e]&&(this._selected[c]=null!=this._selected[c]?this._selected[c]:u.selected,this._mapTypeMap[c]=e,(null==u.selectable||u.selectable)&&(_.clickable=L.clickable=!0,_.onclick=L.onclick=this.shapeHandler.onclick)),this._hoverable[e]&&(null==u.hoverable||u.hoverable)?(L.hoverable=_.hoverable=!0,_.hoverConnect=L.id,L.hoverConnect=_.id):L.hoverable=_.hoverable=!1,d.pack(L,{name:V,tooltip:this.deepQuery(g,"tooltip")},0,u,0,c),this.shapeList.push(L),d.pack(_,{name:V,tooltip:this.deepQuery(g,"tooltip")},0,u,0,c),this.shapeList.push(_)}},_buildMark:function(e,t){this._seriesIndexToMapType=this._seriesIndexToMapType||{},this.markAttachStyle=this.markAttachStyle||{};var i=[this._mapDataMap[e].transform.left,this._mapDataMap[e].transform.top];"none"==e&&(i=[0,0]);for(var n in t)this._seriesIndexToMapType[n]=e,this.markAttachStyle[n]={position:i,_mapType:e},this.buildMark(n)},_buildHeatmap:function(e){for(var t=this.series,i=0,n=t.length;n>i;i++)if(t[i].heatmap){var a=t[i].heatmap.data;if(t[i].heatmap.needsTransform===!1){for(var o=[],r=0,s=a.length;s>r;++r)o.push([a[r][3],a[r][4],a[r][2]]);var l=[0,0]}else{var h=t[i].heatmap._geoData;if(void 0===h){t[i].heatmap._geoData=[];for(var r=0,s=a.length;s>r;++r)t[i].heatmap._geoData[r]=a[r];h=t[i].heatmap._geoData}for(var s=a.length,U=0;s>U;++U)a[U]=this.geo2pos(e,[h[U][0],h[U][1]]);var l=[this._mapDataMap[e].transform.left,this._mapDataMap[e].transform.top]}var d=new V(t[i].heatmap),p=d.getCanvas(a[0][3]?o:a,this.zr.getWidth(),this.zr.getHeight()),c=new m({zlevel:this.getZlevelBase(),z:this.getZBase()+1,position:l,scale:[1,1],hoverable:!1,style:{x:0,y:0,image:p,width:p.width,height:p.height}});c.type="heatmap",c._mapType=e,this.shapeList.push(c),this.zr.addShape(c)}},getMarkCoord:function(e,t){return t.geoCoord||b[t.name]?this.geo2pos(this._seriesIndexToMapType[e],t.geoCoord||b[t.name]):[0,0]},getMarkGeo:function(e){return e.geoCoord||b[e.name]},_nameChange:function(e,t){return this._nameMap[e][t]||t},getLabelText:function(e,t,i,n){var a=this.deepQuery(i,"itemStyle."+n+".label.formatter");return a?"function"==typeof a?a.call(this.myChart,e,t):"string"==typeof a?(a=a.replace("{a}","{a0}").replace("{b}","{b0}"),a=a.replace("{a0}",e).replace("{b0}",t)):void 0:e},_findMapTypeByPos:function(e,t){var i,n,a,o,r;for(var s in this._mapDataMap)if(i=this._mapDataMap[s].transform,i&&this._roamMap[s]&&this._activeMapType[s]&&(n=i.left,a=i.top,o=i.width,r=i.height,e>=n&&n+o>=e&&t>=a&&a+r>=t))return s},__onmousewheel:function(e){function t(e,t){for(var i=0;i<e.pointList.length;i++){var n=e.pointList[i];n[0]*=t,n[1]*=t}var a=e.controlPointList;if(a)for(var i=0;i<a.length;i++){var n=a[i];n[0]*=t,n[1]*=t}}function i(e,t){e.xStart*=t,e.yStart*=t,e.xEnd*=t,e.yEnd*=t,null!=e.cpX1&&(e.cpX1*=t,e.cpY1*=t)}if(!(this.shapeList.length<=0)){for(var n=0,a=this.shapeList.length;a>n;n++){var o=this.shapeList[n];if(o.__animating)return}var r,s,l=e.event,h=u.getX(l),m=u.getY(l),V=u.getDelta(l),d=e.mapTypeControl;d||(d={},s=this._findMapTypeByPos(h,m),s&&this._roamMap[s]&&"move"!=this._roamMap[s]&&(d[s]=!0));var p=!1;for(s in d)if(d[s]){p=!0;var c=this._mapDataMap[s].transform,y=c.left,g=c.top,b=c.width,f=c.height,k=this.pos2geo(s,[h-y,m-g]);if(V>0){if(r=1.2,null!=this._scaleLimitMap[s].max&&c.baseScale>=this._scaleLimitMap[s].max)continue}else if(r=1/1.2,null!=this._scaleLimitMap[s].min&&c.baseScale<=this._scaleLimitMap[s].min)continue;c.baseScale*=r,c.scale.x*=r,c.scale.y*=r,c.width=b*r,c.height=f*r,this._mapDataMap[s].hasRoam=!0,this._mapDataMap[s].transform=c,k=this.geo2pos(s,k),c.left-=k[0]-(h-y),c.top-=k[1]-(m-g),this._mapDataMap[s].transform=c,this.clearEffectShape(!0);for(var n=0,a=this.shapeList.length;a>n;n++){var o=this.shapeList[n];if(o._mapType==s){var x=o.type,_=o.style;switch(o.position[0]=c.left,o.position[1]=c.top,x){case"path":case"symbol":case"circle":case"rectangle":case"polygon":case"line":case"ellipse":case"heatmap":o.scale[0]*=r,o.scale[1]*=r;break;case"mark-line":i(_,r);break;case"polyline":t(_,r);break;case"shape-bundle":for(var L=0;L<_.shapeList.length;L++){var W=_.shapeList[L];"mark-line"==W.type?i(W.style,r):"polyline"==W.type&&t(W.style,r)}break;case"icon":case"image":k=this.geo2pos(s,o._geo),_.x=_._x=k[0]-_.width/2,_.y=_._y=k[1]-_.height/2;break;default:k=this.geo2pos(s,o._geo),_.x=k[0],_.y=k[1],"text"==x&&(o._style.x=o.highlightStyle.x=k[0],o._style.y=o.highlightStyle.y=k[1])}this.zr.modShape(o.id)}}}if(p){u.stop(l),this.zr.refreshNextFrame();var X=this;clearTimeout(this._refreshDelayTicket),this._refreshDelayTicket=setTimeout(function(){X&&X.shapeList&&X.animationEffect()},100),this.messageCenter.dispatch(U.EVENT.MAP_ROAM,e.event,{type:"scale"},this.myChart)}}},__onmousedown:function(e){if(!(this.shapeList.length<=0)){var t=e.target;if(!t||!t.draggable){var i=e.event,n=u.getX(i),a=u.getY(i),o=this._findMapTypeByPos(n,a);if(o&&this._roamMap[o]&&"scale"!=this._roamMap[o]){this._mousedown=!0,this._mx=n,this._my=a,this._curMapType=o,this.zr.on(c.EVENT.MOUSEUP,this._onmouseup);var r=this;setTimeout(function(){r.zr.on(c.EVENT.MOUSEMOVE,r._onmousemove)},100)}}}},__onmousemove:function(e){if(this._mousedown&&this._isAlive){var t=e.event,i=u.getX(t),n=u.getY(t),a=this._mapDataMap[this._curMapType].transform;a.hasRoam=!0,a.left-=this._mx-i,a.top-=this._my-n,this._mx=i,this._my=n,this._mapDataMap[this._curMapType].transform=a;for(var o=0,r=this.shapeList.length;r>o;o++)this.shapeList[o]._mapType==this._curMapType&&(this.shapeList[o].position[0]=a.left,this.shapeList[o].position[1]=a.top,this.zr.modShape(this.shapeList[o].id));this.messageCenter.dispatch(U.EVENT.MAP_ROAM,e.event,{type:"move"},this.myChart),this.clearEffectShape(!0),this.zr.refreshNextFrame(),this._justMove=!0,u.stop(t)}},__onmouseup:function(e){var t=e.event;this._mx=u.getX(t),this._my=u.getY(t),this._mousedown=!1;var i=this;setTimeout(function(){i._justMove&&i.animationEffect(),i._justMove=!1,i.zr.un(c.EVENT.MOUSEMOVE,i._onmousemove),i.zr.un(c.EVENT.MOUSEUP,i._onmouseup)},120)},__onroamcontroller:function(e){var t=e.event;t.zrenderX=this.zr.getWidth()/2,t.zrenderY=this.zr.getHeight()/2;var i=e.mapTypeControl,n=0,a=0,o=e.step;switch(e.roamType){case"scaleUp":return t.zrenderDelta=1,void this.__onmousewheel({event:t,mapTypeControl:i});case"scaleDown":return t.zrenderDelta=-1,void this.__onmousewheel({event:t,mapTypeControl:i});case"up":n=-o;break;case"down":n=o;break;case"left":a=-o;break;case"right":a=o}var r,s;for(s in i)this._mapDataMap[s]&&this._activeMapType[s]&&(r=this._mapDataMap[s].transform,r.hasRoam=!0,r.left-=a,r.top-=n,this._mapDataMap[s].transform=r);for(var l=0,h=this.shapeList.length;h>l;l++)s=this.shapeList[l]._mapType,i[s]&&this._activeMapType[s]&&(r=this._mapDataMap[s].transform,this.shapeList[l].position[0]=r.left,this.shapeList[l].position[1]=r.top,this.zr.modShape(this.shapeList[l].id));this.messageCenter.dispatch(U.EVENT.MAP_ROAM,e.event,{type:"move"},this.myChart),this.clearEffectShape(!0),this.zr.refreshNextFrame(),clearTimeout(this.dircetionTimer);var m=this;this.dircetionTimer=setTimeout(function(){m.animationEffect()},150)},__ondrhoverlink:function(e){for(var t,i,n=0,a=this.shapeList.length;a>n;n++)t=this.shapeList[n]._mapType,this._hoverLinkMap[t]&&this._activeMapType[t]&&(i=d.get(this.shapeList[n],"value"),null!=i&&i>=e.valueMin&&i<=e.valueMax&&this.zr.addHoverShape(this.shapeList[n]))},onclick:function(e){if(this.isClick&&e.target&&!this._justMove&&"icon"!=e.target.type){this.isClick=!1;var t=e.target,i=t.style._name,n=this.shapeList.length,a=t._mapType||"";if("single"==this._selectedMode[a])for(var o in this._selected)if(this._selected[o]&&this._mapTypeMap[o]==a){for(var r=0;n>r;r++)this.shapeList[r].style._name==o&&this.shapeList[r]._mapType==a&&(this.shapeList[r].style=this.shapeList[r]._style,this.zr.modShape(this.shapeList[r].id));o!=i&&(this._selected[o]=!1)}this._selected[i]=!this._selected[i];for(var r=0;n>r;r++)this.shapeList[r].style._name==i&&this.shapeList[r]._mapType==a&&(this.shapeList[r].style=this._selected[i]?this.shapeList[r].highlightStyle:this.shapeList[r]._style,this.zr.modShape(this.shapeList[r].id));this.messageCenter.dispatch(U.EVENT.MAP_SELECTED,e.event,{selected:this._selected,target:i},this.myChart),this.zr.refreshNextFrame();var s=this;setTimeout(function(){s.zr.trigger(c.EVENT.MOUSEMOVE,e.event)},100)}},refresh:function(e){e&&(this.option=e,this.series=e.series),this._mapDataRequireCounter>0?this.clear():this.backupShapeList(),this._buildShape(),this.zr.refreshHover()},ondataRange:function(e,t){this.component.dataRange&&(this.refresh(),t.needRefresh=!0)},pos2geo:function(e,t){return this._mapDataMap[e].transform?this._mapDataMap[e].projection.pos2geo(this._mapDataMap[e].transform,t):null},getGeoByPos:function(e,t){if(!this._mapDataMap[e].transform)return null;var i=[this._mapDataMap[e].transform.left,this._mapDataMap[e].transform.top];return t instanceof Array?(t[0]-=i[0],t[1]-=i[1]):(t.x-=i[0],t.y-=i[1]),this.pos2geo(e,t)},geo2pos:function(e,t){return this._mapDataMap[e].transform?this._mapDataMap[e].projection.geo2pos(this._mapDataMap[e].transform,t):null},getPosByGeo:function(e,t){if(!this._mapDataMap[e].transform)return null;var i=this.geo2pos(e,t);return i[0]+=this._mapDataMap[e].transform.left,i[1]+=this._mapDataMap[e].transform.top,i},getMapPosition:function(e){return this._mapDataMap[e].transform?[this._mapDataMap[e].transform.left,this._mapDataMap[e].transform.top]:null},onbeforDispose:function(){this._isAlive=!1,this.zr.un(c.EVENT.MOUSEWHEEL,this._onmousewheel),this.zr.un(c.EVENT.MOUSEDOWN,this._onmousedown),this.messageCenter.unbind(U.EVENT.ROAMCONTROLLER,this._onroamcontroller),this.messageCenter.unbind(U.EVENT.DATA_RANGE_HOVERLINK,this._ondrhoverlink)}},p.inherits(t,i),e("../chart").define("map",t),t}),i("zrender/shape/Path",["require","./Base","./util/PathProxy","../tool/util"],function(e){var t=e("./Base"),i=e("./util/PathProxy"),n=i.PathSegment,a=function(e){return Math.sqrt(e[0]*e[0]+e[1]*e[1])},o=function(e,t){return(e[0]*t[0]+e[1]*t[1])/(a(e)*a(t))},r=function(e,t){return(e[0]*t[1]<e[1]*t[0]?-1:1)*Math.acos(o(e,t))},s=function(e){t.call(this,e)};return s.prototype={type:"path",buildPathArray:function(e,t,i){if(!e)return[];t=t||0,i=i||0;var a=e,o=["m","M","l","L","v","V","h","H","z","Z","c","C","q","Q","t","T","s","S","a","A"];a=a.replace(/-/g," -"),a=a.replace(/  /g," "),a=a.replace(/ /g,","),a=a.replace(/,,/g,",");var r;for(r=0;r<o.length;r++)a=a.replace(new RegExp(o[r],"g"),"|"+o[r]);var s=a.split("|"),l=[],h=0,m=0;for(r=1;r<s.length;r++){var V=s[r],U=V.charAt(0);V=V.slice(1),V=V.replace(new RegExp("e,-","g"),"e-");var d=V.split(",");d.length>0&&""===d[0]&&d.shift();for(var p=0;p<d.length;p++)d[p]=parseFloat(d[p]);for(;d.length>0&&!isNaN(d[0]);){var c,u,y,g,b,f,k,x,_=null,L=[],W=h,X=m;switch(U){case"l":h+=d.shift(),m+=d.shift(),_="L",L.push(h,m);break;case"L":h=d.shift(),m=d.shift(),L.push(h,m);break;case"m":h+=d.shift(),m+=d.shift(),_="M",L.push(h,m),U="l";break;case"M":h=d.shift(),m=d.shift(),_="M",L.push(h,m),U="L";break;case"h":h+=d.shift(),_="L",L.push(h,m);break;case"H":h=d.shift(),_="L",L.push(h,m);break;case"v":m+=d.shift(),_="L",L.push(h,m);break;case"V":m=d.shift(),_="L",L.push(h,m);break;case"C":L.push(d.shift(),d.shift(),d.shift(),d.shift()),h=d.shift(),m=d.shift(),L.push(h,m);break;case"c":L.push(h+d.shift(),m+d.shift(),h+d.shift(),m+d.shift()),h+=d.shift(),m+=d.shift(),_="C",L.push(h,m);break;case"S":c=h,u=m,y=l[l.length-1],"C"===y.command&&(c=h+(h-y.points[2]),u=m+(m-y.points[3])),L.push(c,u,d.shift(),d.shift()),h=d.shift(),m=d.shift(),_="C",L.push(h,m);break;case"s":c=h,u=m,y=l[l.length-1],"C"===y.command&&(c=h+(h-y.points[2]),u=m+(m-y.points[3])),L.push(c,u,h+d.shift(),m+d.shift()),h+=d.shift(),m+=d.shift(),_="C",L.push(h,m);break;case"Q":L.push(d.shift(),d.shift()),h=d.shift(),m=d.shift(),L.push(h,m);break;case"q":L.push(h+d.shift(),m+d.shift()),h+=d.shift(),m+=d.shift(),_="Q",L.push(h,m);break;case"T":c=h,u=m,y=l[l.length-1],"Q"===y.command&&(c=h+(h-y.points[0]),u=m+(m-y.points[1])),h=d.shift(),m=d.shift(),_="Q",L.push(c,u,h,m);break;case"t":c=h,u=m,y=l[l.length-1],"Q"===y.command&&(c=h+(h-y.points[0]),u=m+(m-y.points[1])),h+=d.shift(),m+=d.shift(),_="Q",L.push(c,u,h,m);break;case"A":g=d.shift(),b=d.shift(),f=d.shift(),k=d.shift(),x=d.shift(),W=h,X=m,h=d.shift(),m=d.shift(),_="A",L=this._convertPoint(W,X,h,m,k,x,g,b,f);break;case"a":g=d.shift(),b=d.shift(),f=d.shift(),k=d.shift(),x=d.shift(),W=h,X=m,h+=d.shift(),m+=d.shift(),_="A",L=this._convertPoint(W,X,h,m,k,x,g,b,f)}for(var v=0,w=L.length;w>v;v+=2)L[v]+=t,L[v+1]+=i;l.push(new n(_||U,L))}("z"===U||"Z"===U)&&l.push(new n("z",[]))}return l},_convertPoint:function(e,t,i,n,a,s,l,h,m){var V=m*(Math.PI/180),U=Math.cos(V)*(e-i)/2+Math.sin(V)*(t-n)/2,d=-1*Math.sin(V)*(e-i)/2+Math.cos(V)*(t-n)/2,p=U*U/(l*l)+d*d/(h*h);p>1&&(l*=Math.sqrt(p),h*=Math.sqrt(p));var c=Math.sqrt((l*l*h*h-l*l*d*d-h*h*U*U)/(l*l*d*d+h*h*U*U));a===s&&(c*=-1),isNaN(c)&&(c=0);var u=c*l*d/h,y=c*-h*U/l,g=(e+i)/2+Math.cos(V)*u-Math.sin(V)*y,b=(t+n)/2+Math.sin(V)*u+Math.cos(V)*y,f=r([1,0],[(U-u)/l,(d-y)/h]),k=[(U-u)/l,(d-y)/h],x=[(-1*U-u)/l,(-1*d-y)/h],_=r(k,x);return o(k,x)<=-1&&(_=Math.PI),o(k,x)>=1&&(_=0),0===s&&_>0&&(_-=2*Math.PI),1===s&&0>_&&(_+=2*Math.PI),[g,b,l,h,f,_,V,s]},buildPath:function(e,t){var i=t.path,n=t.x||0,a=t.y||0;t.pathArray=t.pathArray||this.buildPathArray(i,n,a);for(var o=t.pathArray,r=t.pointList=[],s=[],l=0,h=o.length;h>l;l++){"M"==o[l].command.toUpperCase()&&(s.length>0&&r.push(s),s=[]);for(var m=o[l].points,V=0,U=m.length;U>V;V+=2)s.push([m[V],m[V+1]])}s.length>0&&r.push(s);for(var l=0,h=o.length;h>l;l++){var d=o[l].command,m=o[l].points;switch(d){case"L":e.lineTo(m[0],m[1]);break;case"M":e.moveTo(m[0],m[1]);break;case"C":e.bezierCurveTo(m[0],m[1],m[2],m[3],m[4],m[5]);break;case"Q":e.quadraticCurveTo(m[0],m[1],m[2],m[3]);break;case"A":var p=m[0],c=m[1],u=m[2],y=m[3],g=m[4],b=m[5],f=m[6],k=m[7],x=u>y?u:y,_=u>y?1:u/y,L=u>y?y/u:1;e.translate(p,c),e.rotate(f),e.scale(_,L),e.arc(0,0,x,g,g+b,1-k),e.scale(1/_,1/L),e.rotate(-f),e.translate(-p,-c);break;case"z":e.closePath()}}},getRect:function(e){if(e.__rect)return e.__rect;var t;t="stroke"==e.brushType||"fill"==e.brushType?e.lineWidth||1:0;for(var i=Number.MAX_VALUE,n=Number.MIN_VALUE,a=Number.MAX_VALUE,o=Number.MIN_VALUE,r=e.x||0,s=e.y||0,l=e.pathArray||this.buildPathArray(e.path),h=0;h<l.length;h++)for(var m=l[h].points,V=0;V<m.length;V++)V%2===0?(m[V]+r<i&&(i=m[V]),m[V]+r>n&&(n=m[V])):(m[V]+s<a&&(a=m[V]),m[V]+s>o&&(o=m[V]));var U;return U=i===Number.MAX_VALUE||n===Number.MIN_VALUE||a===Number.MAX_VALUE||o===Number.MIN_VALUE?{x:0,y:0,width:0,height:0}:{x:Math.round(i-t/2),y:Math.round(a-t/2),width:n-i+t,height:o-a+t},e.__rect=U,U}},e("../tool/util").inherits(s,t),s}),i("zrender/shape/Ellipse",["require","./Base","../tool/util"],function(e){var t=e("./Base"),i=function(e){t.call(this,e)};return i.prototype={type:"ellipse",buildPath:function(e,t){var i=.5522848,n=t.x,a=t.y,o=t.a,r=t.b,s=o*i,l=r*i;e.moveTo(n-o,a),e.bezierCurveTo(n-o,a-l,n-s,a-r,n,a-r),e.bezierCurveTo(n+s,a-r,n+o,a-l,n+o,a),e.bezierCurveTo(n+o,a+l,n+s,a+r,n,a+r),e.bezierCurveTo(n-s,a+r,n-o,a+l,n-o,a),e.closePath()},getRect:function(e){if(e.__rect)return e.__rect;var t;return t="stroke"==e.brushType||"fill"==e.brushType?e.lineWidth||1:0,e.__rect={x:Math.round(e.x-e.a-t/2),
+y:Math.round(e.y-e.b-t/2),width:2*e.a+t,height:2*e.b+t},e.__rect}},e("../tool/util").inherits(i,t),i}),i("echarts/component/roamController",["require","./base","zrender/shape/Rectangle","zrender/shape/Sector","zrender/shape/Circle","../config","zrender/tool/util","zrender/tool/color","zrender/tool/event","../component"],function(e){function t(e,t,n,a,o){if(this.rcOption={},a.roamController&&a.roamController.show){if(!a.roamController.mapTypeControl)return void console.error("option.roamController.mapTypeControl has not been defined.");i.call(this,e,t,n,a,o),this.rcOption=a.roamController;var r=this;this._drictionMouseDown=function(e){return r.__drictionMouseDown(e)},this._drictionMouseUp=function(e){return r.__drictionMouseUp(e)},this._drictionMouseMove=function(e){return r.__drictionMouseMove(e)},this._drictionMouseOut=function(e){return r.__drictionMouseOut(e)},this._scaleHandler=function(e){return r.__scaleHandler(e)},this.refresh(a)}}var i=e("./base"),n=e("zrender/shape/Rectangle"),a=e("zrender/shape/Sector"),o=e("zrender/shape/Circle"),r=e("../config");r.roamController={zlevel:0,z:4,show:!0,x:"left",y:"top",width:80,height:120,backgroundColor:"rgba(0,0,0,0)",borderColor:"#ccc",borderWidth:0,padding:5,handleColor:"#6495ed",fillerColor:"#fff",step:15,mapTypeControl:null};var s=e("zrender/tool/util"),l=e("zrender/tool/color"),h=e("zrender/tool/event");return t.prototype={type:r.COMPONENT_TYPE_ROAMCONTROLLER,_buildShape:function(){if(this.rcOption.show){this._itemGroupLocation=this._getItemGroupLocation(),this._buildBackground(),this._buildItem();for(var e=0,t=this.shapeList.length;t>e;e++)this.zr.addShape(this.shapeList[e])}},_buildItem:function(){this.shapeList.push(this._getDirectionShape("up")),this.shapeList.push(this._getDirectionShape("down")),this.shapeList.push(this._getDirectionShape("left")),this.shapeList.push(this._getDirectionShape("right")),this.shapeList.push(this._getScaleShape("scaleUp")),this.shapeList.push(this._getScaleShape("scaleDown"))},_getDirectionShape:function(e){var t=this._itemGroupLocation.r,i=this._itemGroupLocation.x+t,n=this._itemGroupLocation.y+t,o={zlevel:this.getZlevelBase(),z:this.getZBase(),style:{x:i,y:n,r:t,startAngle:-45,endAngle:45,color:this.rcOption.handleColor,text:">",textX:i+t/2+4,textY:n-.5,textAlign:"center",textBaseline:"middle",textPosition:"specific",textColor:this.rcOption.fillerColor,textFont:Math.floor(t/2)+"px arial"},highlightStyle:{color:l.lift(this.rcOption.handleColor,-.2),brushType:"fill"},clickable:!0};switch(e){case"up":o.rotation=[Math.PI/2,i,n];break;case"left":o.rotation=[Math.PI,i,n];break;case"down":o.rotation=[-Math.PI/2,i,n]}return o=new a(o),o._roamType=e,o.onmousedown=this._drictionMouseDown,o.onmouseup=this._drictionMouseUp,o.onmousemove=this._drictionMouseMove,o.onmouseout=this._drictionMouseOut,o},_getScaleShape:function(e){var t=this._itemGroupLocation.width,i=this._itemGroupLocation.height-t;i=0>i?20:i;var n=Math.min(t/2-5,i)/2,a=this._itemGroupLocation.x+("scaleDown"===e?t-n:n),r=this._itemGroupLocation.y+this._itemGroupLocation.height-n,s={zlevel:this.getZlevelBase(),z:this.getZBase(),style:{x:a,y:r,r:n,color:this.rcOption.handleColor,text:"scaleDown"===e?"-":"+",textX:a,textY:r-2,textAlign:"center",textBaseline:"middle",textPosition:"specific",textColor:this.rcOption.fillerColor,textFont:Math.floor(n)+"px verdana"},highlightStyle:{color:l.lift(this.rcOption.handleColor,-.2),brushType:"fill"},clickable:!0};return s=new o(s),s._roamType=e,s.onmousedown=this._scaleHandler,s},_buildBackground:function(){var e=this.reformCssArray(this.rcOption.padding);this.shapeList.push(new n({zlevel:this.getZlevelBase(),z:this.getZBase(),hoverable:!1,style:{x:this._itemGroupLocation.x-e[3],y:this._itemGroupLocation.y-e[0],width:this._itemGroupLocation.width+e[3]+e[1],height:this._itemGroupLocation.height+e[0]+e[2],brushType:0===this.rcOption.borderWidth?"fill":"both",color:this.rcOption.backgroundColor,strokeColor:this.rcOption.borderColor,lineWidth:this.rcOption.borderWidth}}))},_getItemGroupLocation:function(){var e,t=this.reformCssArray(this.rcOption.padding),i=this.rcOption.width,n=this.rcOption.height,a=this.zr.getWidth(),o=this.zr.getHeight();switch(this.rcOption.x){case"center":e=Math.floor((a-i)/2);break;case"left":e=t[3]+this.rcOption.borderWidth;break;case"right":e=a-i-t[1]-t[3]-2*this.rcOption.borderWidth;break;default:e=this.parsePercent(this.rcOption.x,a)}var r;switch(this.rcOption.y){case"top":r=t[0]+this.rcOption.borderWidth;break;case"bottom":r=o-n-t[0]-t[2]-2*this.rcOption.borderWidth;break;case"center":r=Math.floor((o-n)/2);break;default:r=this.parsePercent(this.rcOption.y,o)}return{x:e,y:r,r:i/2,width:i,height:n}},__drictionMouseDown:function(e){this.mousedown=!0,this._drictionHandlerOn(e)},__drictionMouseUp:function(e){this.mousedown=!1,this._drictionHandlerOff(e)},__drictionMouseMove:function(e){this.mousedown&&this._drictionHandlerOn(e)},__drictionMouseOut:function(e){this._drictionHandlerOff(e)},_drictionHandlerOn:function(e){this._dispatchEvent(e.event,e.target._roamType),clearInterval(this.dircetionTimer);var t=this;this.dircetionTimer=setInterval(function(){t._dispatchEvent(e.event,e.target._roamType)},100),h.stop(e.event)},_drictionHandlerOff:function(){clearInterval(this.dircetionTimer)},__scaleHandler:function(e){this._dispatchEvent(e.event,e.target._roamType),h.stop(e.event)},_dispatchEvent:function(e,t){this.messageCenter.dispatch(r.EVENT.ROAMCONTROLLER,e,{roamType:t,mapTypeControl:this.rcOption.mapTypeControl,step:this.rcOption.step},this.myChart)},refresh:function(e){e&&(this.option=e||this.option,this.option.roamController=this.reformOption(this.option.roamController),this.rcOption=this.option.roamController),this.clear(),this._buildShape()}},s.inherits(t,i),e("../component").define("roamController",t),t}),i("echarts/layer/heatmap",["require"],function(){function e(e){if(this.option=e,e)for(var i in t)this.option[i]=void 0!==e[i]?e[i]:t[i];else this.option=t}var t={blurSize:30,gradientColors:["blue","cyan","lime","yellow","red"],minAlpha:.05,valueScale:1,opacity:1},i=20,n=256;return e.prototype={getCanvas:function(e,t,a){var o=this._getBrush(),r=this._getGradient(),s=i+this.option.blurSize,l=document.createElement("canvas");l.width=t,l.height=a;for(var h=l.getContext("2d"),m=e.length,V=0;m>V;++V){var U=e[V],d=U[0],p=U[1],c=U[2],u=Math.min(1,Math.max(c*this.option.valueScale||this.option.minAlpha,this.option.minAlpha));h.globalAlpha=u,h.drawImage(o,d-s,p-s)}for(var y=h.getImageData(0,0,l.width,l.height),g=y.data,m=g.length/4;m--;){var b=4*m+3,u=g[b]/256,f=Math.floor(u*(n-1));g[b-3]=r[4*f],g[b-2]=r[4*f+1],g[b-1]=r[4*f+2],g[b]*=this.option.opacity}return h.putImageData(y,0,0),l},_getBrush:function(){if(!this._brushCanvas){this._brushCanvas=document.createElement("canvas");var e=i+this.option.blurSize,t=2*e;this._brushCanvas.width=t,this._brushCanvas.height=t;var n=this._brushCanvas.getContext("2d");n.shadowOffsetX=t,n.shadowBlur=this.option.blurSize,n.shadowColor="black",n.beginPath(),n.arc(-e,e,i,0,2*Math.PI,!0),n.closePath(),n.fill()}return this._brushCanvas},_getGradient:function(){if(!this._gradientPixels){var e=n,t=document.createElement("canvas");t.width=1,t.height=e;for(var i=t.getContext("2d"),a=i.createLinearGradient(0,0,0,e),o=this.option.gradientColors.length,r=0;o>r;++r)"string"==typeof this.option.gradientColors[r]?a.addColorStop((r+1)/o,this.option.gradientColors[r]):a.addColorStop(this.option.gradientColors[r].offset,this.option.gradientColors[r].color);i.fillStyle=a,i.fillRect(0,0,1,e),this._gradientPixels=i.getImageData(0,0,1,e).data}return this._gradientPixels}},e}),i("echarts/util/mapData/params",["require"],function(e){function t(e){if(!e.UTF8Encoding)return e;for(var t=e.features,n=0;n<t.length;n++)for(var a=t[n],o=a.geometry.coordinates,r=a.geometry.encodeOffsets,s=0;s<o.length;s++){var l=o[s];if("Polygon"===a.geometry.type)o[s]=i(l,r[s]);else if("MultiPolygon"===a.geometry.type)for(var h=0;h<l.length;h++){var m=l[h];l[h]=i(m,r[s][h])}}return e.UTF8Encoding=!1,e}function i(e,t){for(var i=[],n=t[0],a=t[1],o=0;o<e.length;o+=2){var r=e.charCodeAt(o)-64,s=e.charCodeAt(o+1)-64;r=r>>1^-(1&r),s=s>>1^-(1&s),r+=n,s+=a,n=r,a=s,i.push([r/1024,s/1024])}return i}var n={none:{getGeoJson:function(e){e({type:"FeatureCollection",features:[{type:"Feature",geometry:{coordinates:[],encodeOffsets:[],type:"Polygon"},properties:{}}]})}},world:{getGeoJson:function(i){e(["./geoJson/world_geo"],function(e){i(t(e))})}},china:{getGeoJson:function(i){e(["./geoJson/china_geo"],function(e){i(t(e))})}},"南海诸岛":{textCoord:[126,25],getPath:function(e,t){for(var i=[[[0,3.5],[7,11.2],[15,11.9],[30,7],[42,.7],[52,.7],[56,7.7],[59,.7],[64,.7],[64,0],[5,0],[0,3.5]],[[13,16.1],[19,14.7],[16,21.7],[11,23.1],[13,16.1]],[[12,32.2],[14,38.5],[15,38.5],[13,32.2],[12,32.2]],[[16,47.6],[12,53.2],[13,53.2],[18,47.6],[16,47.6]],[[6,64.4],[8,70],[9,70],[8,64.4],[6,64.4]],[[23,82.6],[29,79.8],[30,79.8],[25,82.6],[23,82.6]],[[37,70.7],[43,62.3],[44,62.3],[39,70.7],[37,70.7]],[[48,51.1],[51,45.5],[53,45.5],[50,51.1],[48,51.1]],[[51,35],[51,28.7],[53,28.7],[53,35],[51,35]],[[52,22.4],[55,17.5],[56,17.5],[53,22.4],[52,22.4]],[[58,12.6],[62,7],[63,7],[60,12.6],[58,12.6]],[[0,3.5],[0,93.1],[64,93.1],[64,0],[63,0],[63,92.4],[1,92.4],[1,3.5],[0,3.5]]],n="",a=e[0],o=e[1],r=0,s=i.length;s>r;r++){n+="M "+((i[r][0][0]*t+a).toFixed(2)-0)+" "+((i[r][0][1]*t+o).toFixed(2)-0)+" ";for(var l=1,h=i[r].length;h>l;l++)n+="L "+((i[r][l][0]*t+a).toFixed(2)-0)+" "+((i[r][l][1]*t+o).toFixed(2)-0)+" "}return n+" Z"}},"新疆维吾尔自治区":{getGeoJson:function(i){e(["./geoJson/xin_jiang_geo"],function(e){i(t(e))})}},"西藏自治区":{getGeoJson:function(i){e(["./geoJson/xi_zang_geo"],function(e){i(t(e))})}},"内蒙古自治区":{getGeoJson:function(i){e(["./geoJson/nei_meng_gu_geo"],function(e){i(t(e))})}},"青海省":{getGeoJson:function(i){e(["./geoJson/qing_hai_geo"],function(e){i(t(e))})}},"四川省":{getGeoJson:function(i){e(["./geoJson/si_chuan_geo"],function(e){i(t(e))})}},"黑龙江省":{getGeoJson:function(i){e(["./geoJson/hei_long_jiang_geo"],function(e){i(t(e))})}},"甘肃省":{getGeoJson:function(i){e(["./geoJson/gan_su_geo"],function(e){i(t(e))})}},"云南省":{getGeoJson:function(i){e(["./geoJson/yun_nan_geo"],function(e){i(t(e))})}},"广西壮族自治区":{getGeoJson:function(i){e(["./geoJson/guang_xi_geo"],function(e){i(t(e))})}},"湖南省":{getGeoJson:function(i){e(["./geoJson/hu_nan_geo"],function(e){i(t(e))})}},"陕西省":{getGeoJson:function(i){e(["./geoJson/shan_xi_1_geo"],function(e){i(t(e))})}},"广东":{getGeoJson:function(i){e(["./geoJson/guang_dong_geo"],function(e){i(t(e))})}},"吉林省":{getGeoJson:function(i){e(["./geoJson/ji_lin_geo"],function(e){i(t(e))})}},"河北省":{getGeoJson:function(i){e(["./geoJson/he_bei_geo"],function(e){i(t(e))})}},"湖北省":{getGeoJson:function(i){e(["./geoJson/hu_bei_geo"],function(e){i(t(e))})}},"贵州省":{getGeoJson:function(i){e(["./geoJson/gui_zhou_geo"],function(e){i(t(e))})}},"山东省":{getGeoJson:function(i){e(["./geoJson/shan_dong_geo"],function(e){i(t(e))})}},"江西省":{getGeoJson:function(i){e(["./geoJson/jiang_xi_geo"],function(e){i(t(e))})}},"河南省":{getGeoJson:function(i){e(["./geoJson/he_nan_geo"],function(e){i(t(e))})}},"辽宁省":{getGeoJson:function(i){e(["./geoJson/liao_ning_geo"],function(e){i(t(e))})}},"山西省":{getGeoJson:function(i){e(["./geoJson/shan_xi_2_geo"],function(e){i(t(e))})}},"安徽省":{getGeoJson:function(i){e(["./geoJson/an_hui_geo"],function(e){i(t(e))})}},"福建省":{getGeoJson:function(i){e(["./geoJson/fu_jian_geo"],function(e){i(t(e))})}},"浙江省":{getGeoJson:function(i){e(["./geoJson/zhe_jiang_geo"],function(e){i(t(e))})}},"江苏省":{getGeoJson:function(i){e(["./geoJson/jiang_su_geo"],function(e){i(t(e))})}},"重庆":{getGeoJson:function(i){e(["./geoJson/chong_qing_geo"],function(e){i(t(e))})}},"宁夏回族自治区":{getGeoJson:function(i){e(["./geoJson/ning_xia_geo"],function(e){i(t(e))})}},"海南省":{getGeoJson:function(i){e(["./geoJson/hai_nan_geo"],function(e){i(t(e))})}},"台湾":{getGeoJson:function(i){e(["./geoJson/tai_wan_geo"],function(e){i(t(e))})}},"北京":{getGeoJson:function(i){e(["./geoJson/bei_jing_geo"],function(e){i(t(e))})}},"天津":{getGeoJson:function(i){e(["./geoJson/tian_jin_geo"],function(e){i(t(e))})}},"上海":{getGeoJson:function(i){e(["./geoJson/shang_hai_geo"],function(e){i(t(e))})}},"香港":{getGeoJson:function(i){e(["./geoJson/xiang_gang_geo"],function(e){i(t(e))})}},"澳门特别行政区":{getGeoJson:function(i){e(["./geoJson/ao_men_geo"],function(e){i(t(e))})}}};return{decode:t,params:n}}),i("echarts/util/mapData/textFixed",[],function(){return{"广东省":[0,-10],"香港":[10,10],"澳门":[-10,18],"黑龙江省":[0,20],"天津":[5,5],"深圳市":[-35,0],"红河哈尼族彝族自治州":[0,20],"楚雄彝族自治州":[-5,15],"石河子市":[-5,5],"五家渠市":[0,-10],"昌吉回族自治州":[10,10],"昌江黎族自治县":[0,20],"陵水黎族自治县":[0,20],"东方市":[0,20],"渭南市":[0,20]}}),i("echarts/util/mapData/geoCoord",[],function(){return{Russia:[100,60],"United States of America":[-99,38]}}),i("echarts/util/projection/svg",["require","zrender/shape/Path"],function(e){function t(e){return parseFloat(e||0)}function i(e){for(var i=e.firstChild;"svg"!=i.nodeName.toLowerCase()||1!=i.nodeType;)i=i.nextSibling;var n=t(i.getAttribute("x")),a=t(i.getAttribute("y")),o=t(i.getAttribute("width")),r=t(i.getAttribute("height"));return{left:n,top:a,width:o,height:r}}function n(e,t){function i(e){var t=e.tagName;if(m[t]){var o=m[t](e,n);o&&(o.scale=n,o.properties={name:e.getAttribute("name")||""},o.id=e.id,s(o,e),a.push(o))}for(var r=e.childNodes,l=0,h=r.length;h>l;l++)i(r[l])}var n=[t.scale.x,t.scale.y],a=[];return i(e),a}function a(e,t){var i=t instanceof Array?[1*t[0],1*t[1]]:[1*t.x,1*t.y];return[i[0]/e.scale.x,i[1]/e.scale.y]}function o(e,t){var i=t instanceof Array?[1*t[0],1*t[1]]:[1*t.x,1*t.y];return[i[0]*e.scale.x,i[1]*e.scale.y]}function r(e){return e.replace(/^\s\s*/,"").replace(/\s\s*$/,"")}function s(e,t){var i=t.getAttribute("fill"),n=t.getAttribute("stroke"),a=t.getAttribute("stroke-width"),o=t.getAttribute("opacity");i&&"none"!=i?(e.color=i,n?(e.brushType="both",e.strokeColor=n):e.brushType="fill"):n&&"none"!=n&&(e.strokeColor=n,e.brushType="stroke"),a&&"none"!=a&&(e.lineWidth=parseFloat(a)),o&&"none"!=o&&(e.opacity=parseFloat(o))}function l(e){for(var t=r(e).replace(/,/g," ").split(/\s+/),i=[],n=0;n<t.length;){var a=parseFloat(t[n++]),o=parseFloat(t[n++]);i.push([a,o])}return i}var h=e("zrender/shape/Path"),m={path:function(e,t){var i=e.getAttribute("d"),n=h.prototype.getRect({path:i});return{shapeType:"path",path:i,cp:[(n.x+n.width/2)*t[0],(n.y+n.height/2)*t[1]]}},rect:function(e,i){var n=t(e.getAttribute("x")),a=t(e.getAttribute("y")),o=t(e.getAttribute("width")),r=t(e.getAttribute("height"));return{shapeType:"rectangle",x:n,y:a,width:o,height:r,cp:[(n+o/2)*i[0],(a+r/2)*i[1]]}},line:function(e,i){var n=t(e.getAttribute("x1")),a=t(e.getAttribute("y1")),o=t(e.getAttribute("x2")),r=t(e.getAttribute("y2"));return{shapeType:"line",xStart:n,yStart:a,xEnd:o,yEnd:r,cp:[.5*(n+o)*i[0],.5*(a+r)*i[1]]}},circle:function(e,i){var n=t(e.getAttribute("cx")),a=t(e.getAttribute("cy")),o=t(e.getAttribute("r"));return{shapeType:"circle",x:n,y:a,r:o,cp:[n*i[0],a*i[1]]}},ellipse:function(e,t){var i=parseFloat(e.getAttribute("cx")||0),n=parseFloat(e.getAttribute("cy")||0),a=parseFloat(e.getAttribute("rx")||0),o=parseFloat(e.getAttribute("ry")||0);return{shapeType:"ellipse",x:i,y:n,a:a,b:o,cp:[i*t[0],n*t[1]]}},polygon:function(e,t){var i=e.getAttribute("points"),n=[1/0,1/0],a=[-(1/0),-(1/0)];if(i){i=l(i);for(var o=0;o<i.length;o++){var r=i[o];n[0]=Math.min(r[0],n[0]),n[1]=Math.min(r[1],n[1]),a[0]=Math.max(r[0],a[0]),a[1]=Math.max(r[1],a[1])}return{shapeType:"polygon",pointList:i,cp:[(n[0]+a[0])/2*t[0],(n[1]+a[1])/2*t[0]]}}},polyline:function(e,t){var i=m.polygon(e,t);return i}};return{getBbox:i,geoJson2Path:n,pos2geo:a,geo2pos:o}}),i("echarts/util/projection/normal",[],function(){function e(e,i){return i=i||{},e.srcSize||t(e,i),e.srcSize}function t(e,t){t=t||{},r.xmin=360,r.xmax=-360,r.ymin=180,r.ymax=-180;for(var i,n,a=e.features,o=0,s=a.length;s>o;o++)if(n=a[o],!n.properties.name||!t[n.properties.name])switch(n.type){case"Feature":r[n.geometry.type](n.geometry.coordinates);break;case"GeometryCollection":i=n.geometries;for(var l=0,h=i.length;h>l;l++)r[i[l].type](i[l].coordinates)}return e.srcSize={left:1*r.xmin.toFixed(4),top:1*r.ymin.toFixed(4),width:1*(r.xmax-r.xmin).toFixed(4),height:1*(r.ymax-r.ymin).toFixed(4)},e}function i(e,i,n){function a(e,t){c=e.type,u=e.coordinates,o._bbox={xmin:360,xmax:-360,ymin:180,ymax:-180},y=o[c](u),m.push({path:y,cp:o.makePoint(t.properties.cp?t.properties.cp:[(o._bbox.xmin+o._bbox.xmax)/2,(o._bbox.ymin+o._bbox.ymax)/2]),properties:t.properties,id:t.id})}n=n||{},o.scale=null,o.offset=null,e.srcSize||t(e,n),i.offset={x:e.srcSize.left,y:e.srcSize.top,left:i.OffsetLeft||0,top:i.OffsetTop||0},o.scale=i.scale,o.offset=i.offset;for(var r,s,l,h=e.features,m=[],V=0,U=h.length;U>V;V++)if(l=h[V],!l.properties.name||!n[l.properties.name])if("Feature"==l.type)a(l.geometry,l);else if("GeometryCollection"==l.type){r=l.geometries;for(var d=0,p=r.length;p>d;d++)s=r[d],a(s,s)}var c,u,y;return m}function n(e,t){var i,n;return t instanceof Array?(i=1*t[0],n=1*t[1]):(i=1*t.x,n=1*t.y),i=i/e.scale.x+e.offset.x-168.5,i=i>180?i-360:i,n=90-(n/e.scale.y+e.offset.y),[i,n]}function a(e,t){return o.offset=e.offset,o.scale=e.scale,o.makePoint(t instanceof Array?[1*t[0],1*t[1]]:[1*t.x,1*t.y])}var o={formatPoint:function(e){return[(e[0]<-168.5&&e[1]>63.8?e[0]+360:e[0])+168.5,90-e[1]]},makePoint:function(e){var t=this,i=t.formatPoint(e);t._bbox.xmin>e[0]&&(t._bbox.xmin=e[0]),t._bbox.xmax<e[0]&&(t._bbox.xmax=e[0]),t._bbox.ymin>e[1]&&(t._bbox.ymin=e[1]),t._bbox.ymax<e[1]&&(t._bbox.ymax=e[1]);var n=(i[0]-o.offset.x)*o.scale.x+o.offset.left,a=(i[1]-o.offset.y)*o.scale.y+o.offset.top;return[n,a]},Point:function(e){return e=this.makePoint(e),e.join(",")},LineString:function(e){for(var t,i="",n=0,a=e.length;a>n;n++)t=o.makePoint(e[n]),i=0===n?"M"+t.join(","):i+"L"+t.join(",");return i},Polygon:function(e){for(var t="",i=0,n=e.length;n>i;i++)t=t+o.LineString(e[i])+"z";return t},MultiPoint:function(e){for(var t=[],i=0,n=e.length;n>i;i++)t.push(o.Point(e[i]));return t},MultiLineString:function(e){for(var t="",i=0,n=e.length;n>i;i++)t+=o.LineString(e[i]);return t},MultiPolygon:function(e){for(var t="",i=0,n=e.length;n>i;i++)t+=o.Polygon(e[i]);return t}},r={formatPoint:o.formatPoint,makePoint:function(e){var t=this,i=t.formatPoint(e),n=i[0],a=i[1];t.xmin>n&&(t.xmin=n),t.xmax<n&&(t.xmax=n),t.ymin>a&&(t.ymin=a),t.ymax<a&&(t.ymax=a)},Point:function(e){this.makePoint(e)},LineString:function(e){for(var t=0,i=e.length;i>t;t++)this.makePoint(e[t])},Polygon:function(e){for(var t=0,i=e.length;i>t;t++)this.LineString(e[t])},MultiPoint:function(e){for(var t=0,i=e.length;i>t;t++)this.Point(e[t])},MultiLineString:function(e){for(var t=0,i=e.length;i>t;t++)this.LineString(e[t])},MultiPolygon:function(e){for(var t=0,i=e.length;i>t;t++)this.Polygon(e[t])}};return{getBbox:e,geoJson2Path:i,pos2geo:n,geo2pos:a}}),i("echarts/util/mapData/geoJson/an_hui_geo",[],function(){return{type:"FeatureCollection",features:[{type:"Feature",id:"3415",properties:{name:"六安市",cp:[116.3123,31.8329],childNum:6},geometry:{type:"Polygon",coordinates:["@@„„nJ‚UXUVƒ°U„ÑnU@mlLVaVln@@bn@VU@xlb@lšLnKlšƒVI„JšUVxnI@lVL@b„Ž°VX@˜b„x„nVVUnVVnU‚›@kX@VwV@„al¥UUnUWa@ƒ@wĸU„LU¥lKUa@aUI@alLVaUƒ¯anƒWkUKm@XV@VaXlW@aU_UWVUƒI¯@ma¯W¯™™I@UU@WWU@U@@UU@VkV@@WUUm@UaU@„lK@IUK„L@KWmXUWaXI@ƒ@a@a@U@U@KV¥lw„k°b²JVIVKlV@UX„la„Ul`œUVLVVVUšJ„U@Lnm@_VK@KUIW@™J@Xk@WW@U—ƒmm™XmWk@kK@aUUƒVmmkUwUmWL™@WmU@™UJmUULkKWakLWVkIƒlƒwULƒW@X°lUJ@°ULƒWV—wmJ@bmb¯Vkm@@WkWm¯wƒL@lkXƒWmXym¯UImJUbkV™@Vn¯„@V@lUbƒ@mk@maUxmlUbULWn@J—LmKUkWKkwUKƒbm„X„WxkVUKmLkVV@JUUWL@xkJUUƒV@X@VVlUbVX@xk¤šx‚¼œxWxn„‚nn@Þ¼„JVb°aVn„@šmlnXU„JlbVlkz@‚lUŽlXJmxVxXnWxXÈWlUŽ@šUxU@VX@xUL@šUÆmLnV@lWXk@@JlbXblnlJ"],encodeOffsets:[[118710,33351]]}},{type:"Feature",id:"3408",properties:{name:"安庆市",cp:[116.7517,30.5255],childNum:9},geometry:{type:"Polygon",coordinates:["@@n°‚znW„XlW@k„K°xXn‚l@Xn@l‚°Una@anI˜xXU„ŽVK@¯VIkW¯X@‚„VK„x„klJXUlKXblLVKnVVIšŽV@Xn‚@šŽXKVnVxlŽnn„UlmV@²óUkV™lW„b„lƒšƒn@VVVIn@lw@WVIXblV„@Èx‚aUaVIVVnKVLšK„ƒln@b²K@»U£ƒÑķƒġÝÅb™K™a@Im@ۍ„@kWÓkkmKÅnóJƒUÅ£›W@w„ĕ@wĉţ¯¯ƒUkK±l¯Uƒ¥UÑkÝUķ»Ý¥¯™JƒIUŽVbUl¯ÈV¼VJU¼Vb@bkLUl@„VJ@bUXǚ@lkVmXmKkLVxš‚Ž„VƒL@VkVVVlzW˜kbmLUUUbVbUV™šlÒnJlUnLllUL@bU„Vx„l‚LXVƦÈVU¦WJ"],encodeOffsets:[[118834,31759]]}},{type:"Feature",id:"3411",properties:{name:"滁州市",cp:[118.1909,32.536],childNum:7},geometry:{type:"Polygon",coordinates:["@@š„@`nnl@„xšK@X°KXV˜IXVlbXVWnX‚lL@šÈ»‚LVan@VJ„êVVn@‚X@laÞbVaƒyn@„_‚xnWVXnWl@VnUVkI@l‚nXKVLVV@V@kW@LlVô„@J@bVnnKnkVa@»lç@ƒnwšKma™UUUVњ@n™mWXalI@alVn@VwUaVU„@„nlaôJnU„VVXlJšaXXVK@UšV@VWx@nXVWšXVšUlLUbV‚ULVVnUVbUbVbš@@a„KÆnnKVK@U@UU@@a„@Vƒ°¯ÈJVIlķ@aa˜UaVKU_@mkxUI@aƒUlyU@@™wkKWmUbUnUVWbkJW_J@bƒn@Vm@@KULk@V@@bVbÅm@LW@UVVbkK@UkKWL@VULUKWIUJUbkK@_WVXU›Jka@XƒVa@kšy@aVIUUW@@m„UlLœKWÑUKVan@UkVmmIXKƒaVaUwVU@UmykU¯@±UUL@WUIVUU@KkIWaƒaU@kUUaǃUó»mKƒk¯@y@kWK@bkI¯`mn™l¯XWlkVUzUJlbUbVJl@nnm„@VULV`XnWƗbmUUn™JmUknƒJ¯km@ƒyk@kU›xL@VUbmnn¤lX@`™z@JmaULUVl@Xn@xllkXWa—aW@UVmUbƒ@mVXšWxXbWbUŽƒÒnVVnVVUL"],encodeOffsets:[[120004,33520]]}},{type:"Feature",id:"3418",properties:{name:"宣城市",cp:[118.8062,30.6244],childNum:7},geometry:{type:"Polygon",coordinates:["@@Vb@„XL˜JXxlIXxlVlV@I²¤šnlUnVšU@VULWVUJ@Lnb@lV@UnV@@VVVlLnbnJ‚UVkUUVWn@@anUVnVJVIV‚@@nUJVbUb‚„@VUbVK@bn@VbnIlxkllXVlXKWUXUlL°¤UVVb@bš„UlkXW‚ƒxXz@‚„Ila„UlƒnUlJVInVÆJ„U„LVUnV„K°@VnlVnxV@XLlK@wVL@KnUlJXU˜bnKVLX„lUw@VWlLXKm@@a„@VLnmlIVVnKn@škVašVlwk@@a@k@ƒVIUa™@maUa@wna@kmWƒ™UUmVUIVǗ@aƒKm™aƒ™kU™J@InmUUaVa„k‚lX@Vk@m@VU@wnK@alKVUkUkKƒbmUkmƒ@U£WVk@@UÝbbƒaÇx@b@WVUa¯ƒ@wVwUUV@VwnK@KWaŁ@KšIUyUI@WmXó™UbWaKm™@km@IUyƒIUaWKƒx@zUKUL@llVUnkLVVkJWX@VUKUVƒIkVWakb@VWb@n@JkXUlmL@xkL@`VxšLUÈUJ@Vm@@bmIUlUL@VUVVbknm@mKUw™KVÈ@J@LV±kkJUIƒl"],encodeOffsets:[[120803,31247]]}},{type:"Feature",id:"3412",properties:{name:"阜阳市",cp:[115.7629,32.9919],childNum:6},geometry:{type:"Polygon",coordinates:["@@V™nƒš@ša„k°aš±@‚¥@UUI@aUmlwUUx›b@¥XU@mmI@a@Kn@@_W@@W„I@mšUVVXUl@XaV@‚K@I@a„LX@aVI°K@KVL„UUw‚yXkšK@kšKÆbXnlK@k@a„JlU@w@U@»@aXKWƒn_‚JXkVKnƒ@°LlKXƒW@¯Uƒ@aUK@kmJUw™VƒIUJ™„kŽmL™K@kka@wUVm@@am@UkUbkK@nmVƒÒ¯VU„WVVmIƒƒULk@ƒƒma@kkKƒƒ@nUbUamU™`UUVUkKVkkƒW@@bkmƒnƒmUXVKXVƒL@VƒbU„m‚™bVXJ@nmKÅI@KWKUXVJUL@VUKUX@KUKWL@LUJmaXXm@kVVV@L@VUL@VlK@L@V@LUK@VUb@UUU@°@nVxU`‚Lkn@`@XVJ@X™Vm„k@UKmV¯LVVn±Wm@Ub@JlLUl„@VLk„@lmVVn@bnV@V°IV™šaVJXI°K°V@XXVlVVU„nšKVlUš„bWXnV@bV`U„„@@m@@‚ƒ@nxmn@bXVlL@¤nb„Ul¦šVVUnJVU„Vl@@bÞL"],encodeOffsets:[[118418,34392]]}},{type:"Feature",id:"3413",properties:{name:"宿州市",cp:[117.5208,33.6841],childNum:5},geometry:{type:"Polygon",coordinates:["@@@UWU@bkW@aWU@aUIkWV™lLXb„lVIUVV@‚mn@V_n@VaUK@I‚@UašanJVU„@lV„UVnnKVVlaUa„I@wnK‚Lnll@nVlk@wVKXkl@@b„bUJ@V‚U@U„UUyVk@aVUXwlWXX‚WU¹@aU™@WUI@mlUšn„J@Il@šaXbV@VKl@XxVL@W„IšJlb„@„al@„IUUm@@aVK@¥¯—@mUķ¯bWƒk£Vm@akm@VaÅ@UVWaƒ@UJWkƒJ—UƒbWbU@UlƒXk@ƒamV@K¯nk@ƒlU@Uxmz@bU`ÇbUbÅVm£U@Ww™x@akLUK@UlakwUJWVkLmaUal@n_ƒmVUnKVUUmÅXWa™@kJmx@XUJ@bVLXxl@VVUVV„UbkLWbU@@lUVV„VVX„›K@XkJ@nU@@bV@VxUVlb„U@xXLWŽn@UxVbVĊ„V@b@XV`mnkJ@kUKmbƒaU@VbnbÆx@XU@@`k@@bl„™@@bkL@WƒakXWaU@Vmkx@XWW@@wUUUbƒJ™U¯V™@¯ÞU@WxXŽlL@bkb@ŽlVlnb™JW@kkU@mbkaWJ—IVlmz¯`UnU@mb™@@„ƒ`@bkVlœnV@b@šV@„aVxn@Vx‚KXnl@nbVK„bVK@a„_V@Vƒ„w@W„LlwnK@UmIU@VWš@šUÈ@lKnal„wš@@V°@šaUmlUUw@„ƒV@@UXK"],encodeOffsets:[[119836,35061]]}},{type:"Feature",id:"3410",properties:{name:"黄山市",cp:[118.0481,29.9542],childNum:5},geometry:{type:"Polygon",coordinates:["@@lXnlWX@VUJVnUJVzXJVx„kVJlI²l‚U@K@IUǚLVxnLn@lmUaVU@UVKVknJ@an@@UVIVǙKUw@_lK@wnKVklW@I@mXa@UlaXblU„JVUVL@UXWlIUUlKVmkU@kVKVL@y„wXLVb„JVz@Jlnš@nŽ‚LXbVaôšnW@la@UVWUa@@a@mk@WIk@VwUa¯¥m@UUVK@ImK@aX£ƒkK›ÅV™a™™ƒ_@±ƒakXWW—LƒƒƒnU@@a@¯mK@L™JUWwUV™VmbXX@lWLn`mzUJUb™Lƒ„k@makVWmkX™ambkKknƒaƒ@ƒaƒb@‚U@Unm@—ƒWVƒ@VbUbUJWIk@@lmL@°UVUVm„nš™@@kmWkb@xƒ_m@@aU@b@JlŽUz™lWxXn„@‚b²@l`„IVl„UlL@VšK„nVbUl@VlIn@@b„bVWUk‚@@bX@Valb@bnb°Vn@„xVKlbVnV@V‚x„L@ln@UXVV‚L˜"],encodeOffsets:[[120747,31095]]}},{type:"Feature",id:"3414",properties:{name:"巢湖市",cp:[117.7734,31.4978],childNum:5},geometry:{type:"Polygon",coordinates:["@@VV@blL@ŽXlWnnšnŽ˜„@VXXl@@WšIX@VJ@LšxŎxlnšŽ@bXJVblX@VVbUVn@VbUVlb@LnJVbVLV‚XLšÒVL„ÒšV„bVIVylUXk°Wšknm°_lJ@aXL@l‚z°@„lnLô¼V‚È„VUUaVKU@WW@@UUa@knmVLlaV@„a@kšak±@UmwkKmk™lj™ÝUUkL@mlIVmnÝWkkUÝ@KƑĉ™a@»ƒmma@mX™¤¯Uƒw@ƒ@UU@bU±±L@akmƒ„™LUKmLUUUJVbbÇwƒ@kUWaUJ@Xkxm@UJUUm@™„k„ƒ‚ƒakXUšVl±ôU@kn"],encodeOffsets:[[119847,32007]]}},{type:"Feature",id:"3416",properties:{name:"亳州市",cp:[116.1914,33.4698],childNum:4},geometry:{type:"Polygon",coordinates:["@@lU@Un@@anUlw@KVmUwlaX_lKna@KU@@kWKUU@ankW™XK˜@@V²VVIÈU@al@VaÈamK@wU™@klaUƒV@XƒVUU»WUUbkmUkVmk@aÈw@mWU@VkIkVWKUÑķXȭºU¯lƒ@kkLWmÅa™L@l™LWlzVxƒVUK@L¯LUJ@bWƒK@b@JLU@Wbk@WVUU™V@nƒJ@XX@@`m@@L@bnJ@nWV@¦œa‚wVVkxVn@bVJ@V¦@Ž™²¯bƒl™b™@m„UšUŽƒŽ@¼ƒ¦Xb‚UV`@nnxUxWLkUkVWKkV@XV@@VVL@VX„@lVV@L@blL@`šL@xXKVL‚@„VnUš@lwnU@ml@XnV@@UVW°LnalƒUI@aUK@a‚a@U„kXW@I@mWL@UXK@UVW@U‚@@k„Wn‚@@V„@XblaVxšL@bVKXb„IlJ"],encodeOffsets:[[119183,34594]]}},{type:"Feature",id:"3417",properties:{name:"池州市",cp:[117.3889,30.2014],childNum:4},geometry:{type:"Polygon",coordinates:["@@„V°°ĊŤ@xƒĖ@xœXƤ„VôIÆmnLllXÔ@lƒÜŽn@@JšbšLÆaĢÞĸ„°VVUUKVanK@UV@VL„VVn„ln@‚xnklxXamk@WV@Xa˜@naVk„Klk™@mkUWwkJWw—IWK@ƒUaUwWIUyVIUmVI@UXWmkkW‚—KUUVWm@@kƒKw@U‚UUmkaULƒwm@¯Uma@akaUbW@@a@VlUXƒa@am@kJ@UVkUaƒm™L@UkKƒVUkƒJk_±@aƒ@WmXwÇkkaVaUa±ƒœwV@VkƒwnyUaW@UU¯amLk@m™@kmmU™™¯K@L@lUX¯ƒWlkXƒŽVb„bƒVUL@J@LVKnlJXnlb@`nXlalV@bnL@Vnb˜¼@lXbWlkL™K@zUJmIUxUVUVmX","@@llUL@VlxšL@a@UƒwXa¯@"],encodeOffsets:[[119543,30781],[120061,31152]]}},{type:"Feature",id:"3401",properties:{name:"合肥市",cp:[117.29,32.0581],childNum:4},geometry:{type:"Polygon",coordinates:["@@„L„xV‚ĊLÞkšVlVVXaWaXwW™nU„@‚anVVUX@˜bXblWkk@wWmk@VUVKnb@Išy@_kWm£nmVa@U‚KœwlVl@„zn@°l„IlmnVšIVmnV˜aXÅWmU_VK@Unƒmmk@UIVakaƒa™UƒÑUK™ÑWKUUKUamI@KkaVUUam@VUUa@UkWUaWI@a™kmōw™wUL@`mn@KƒV™IUVUUUK›Vk_ƒVkbWƒ@VkUULUJ±I¯aƒlkxU¦@L@V@V@b@b@„WJXbWVXn@LƒKVL@JkLƒŽV@Vbn@VV@XU@UlV@@VV@V@XXV@@VšJ°š°Xnb°@„JUVVXV`@bkXWŽUbU@WŽn@VLXlm„°bV„UbkK@bVJ@bVbkLV¦ƒKķV@x@„XbmVVVk¦"],encodeOffsets:[[119678,33323]]}},{type:"Feature",id:"3403",properties:{name:"蚌埠市",cp:[117.4109,33.1073],childNum:4},geometry:{type:"Polygon",coordinates:["@@VÒXLlUlJ@UXV@nÇx@bnlUVllnVaXVV¼UVW„U@V„²wVV@Vl@„VnwlIš@XbÆWVnUVmLUV„nm`k@VbnblKXUVIlxkb@VVLlK@bšwXxV@n¤ÆUVaÈaV_@anyVwV@„kl@°m@LnU„bl@„WVkV@Xa„a˜V„IXl‚IV‚„@XbVUÆ@XKWwUkmW@_UmnIlJXkWKXmV@‚w@_XV@Kl@kU@KlX@@UUUUKWLm@klJVUUmk@mXUWmXwƒ`m@„zUbÝakbW@m@UUƒéUIm@UbKǼ@™kKWXmWUkaWU—JWU¯L@W™Lƒwk@mm@_™ƒÅl™UVkmWUnV@VWLUb™bƑĬ¯l"],encodeOffsets:[[119543,33722]]}},{type:"Feature",id:"3402",properties:{name:"芜湖市",cp:[118.3557,31.0858],childNum:4},geometry:{type:"Polygon",coordinates:["@@„bVaV@XllLXU°ŽlL@V@VUnVl¯Ikš›VUVU@@b@lUXUWmb„n@¼šbƒĊ‚LÞ@lVXlmÞUnkJ@nlKVVšÞXklWVaVI@aUKn»lL@Kn@‚XXwlm@mn°@„V@Wy„wXlWVk™ƒ@aUaVU¯£kKWVXVWLUkkWlkkwmJUam@@aULVa@UƒVaUaVI@m‚@UUJUIUmmV@bm@UXVVUlVmImakKUU@UU@VmU@@kma@KVIXUVK@U™VmUkV™m±£@JkU@nlšk‚ƒLUlmb—@WbU@@XnlWb"],encodeOffsets:[[120814,31585]]}},{type:"Feature",id:"3406",properties:{name:"淮北市",cp:[116.6968,33.6896],childNum:3},geometry:{type:"MultiPolygon",coordinates:[["@@lnnK@¦n@@V‚V„@@VV@nIV„V@VW²a@b@bVnUVVV@V™z@lš@°UšV„IVaVV@x@ŽXX@WlwUnV@XblW„b@XlK@aš@kƒ@al@@_V@@WÅwmaUaV@„bnaVL@llInmU_@W@aƒUUĉUaVwm@XWK@wƒVkaVUUwU@@aV@@mlI@WœLWƒUUUƒVU@kV@XalKVaUƒVUUUk@WwUK@aVI@WƒUk@@UUU±xkb@lVš@xnLÇbUbk@@bÇVUJ±U@U—@WLXšml@bVVXL@lV@@LmbkLW`kbVxUn@LkxmV@bm@@VkV"],["@@VVVkV@¥@UV@U@VUUJƒkWakKUšlXVJ@bXV@blX@aXV@V"]],encodeOffsets:[[[119183,34594]],[[119836,35061]]]}},{type:"Feature",id:"3404",properties:{name:"淮南市",cp:[116.7847,32.7722],childNum:2},geometry:{type:"Polygon",coordinates:["@@°kƒīšaVaXK@U‚UVmnXUlšVÆkVKUUUmmU„ÑkU™UÝlĉKUƒwƒKƒbU@UxW@@lœmVUUVmUUƒmƒw—aW„kL¯K@Žm„ULWlIm`X„WL@b@¼@V@xkVƒI@b@l@lk„V°Ȯ¹ĸW"],encodeOffsets:[[119543,33722]]}},{type:"Feature",id:"3405",properties:{name:"马鞍山市",cp:[118.6304,31.5363],childNum:2},geometry:{type:"Polygon",coordinates:["@@šNJnllLnxV@laXLVKma„aXbVI„bVKVVVIVyn@n_ƒƒW@@ƒ„UnJlUVVXlLnaUWlV@VV„IXW@_W@XK@K@UVUUwVamÑXmmwƒw™KUnUK™çU@ƒJƒU¯@mŽ@nknWxWm@@LkKm¼VL@bUJUbkXWl"],encodeOffsets:[[121219,32288]]}},{type:"Feature",id:"3407",properties:{name:"铜陵市",cp:[117.9382,30.9375],childNum:3},geometry:{type:"MultiPolygon",coordinates:[["@@„ÒV¤@¼V²@aVV@Ž@„„x°Vš£nW‚@nbnaVXVW@k@aV@VUœUl™°JUkVm@U@UkK¯WVkKWkU@Ubƒakwmlwm@ƒkUmƒUUKU@@VmLUbVLUV¯U"],["@@LllUL@VlxšL@a@UƒwXamK"]],encodeOffsets:[[[120522,31529]],[[120094,31146]]]}}],UTF8Encoding:!0}}),i("echarts/util/mapData/geoJson/ao_men_geo",[],function(){return{type:"FeatureCollection",features:[{type:"Feature",id:"8200",properties:{name:"澳门",cp:[113.5715,22.1583],childNum:1},geometry:{type:"Polygon",coordinates:["@@HQFMDIDGBI@E@EEKEGCEIGGEKEMGSEU@CBEDAJAP@F@LBT@JCHMPOdADCFADAB@LFLDFFP@DAB@@AF@D@B@@FBD@FADHBBHAD@FAJ@JEDCJI`gFIJW"],encodeOffsets:[[116325,22699]]}}],UTF8Encoding:!0}}),i("echarts/util/mapData/geoJson/bei_jing_geo",[],function(){return{type:"FeatureCollection",features:[{type:"Feature",id:"110228",properties:{name:"密云县",cp:[117.0923,40.5121],childNum:1},geometry:{type:"Polygon",coordinates:["@@vIHZDZQtDLNMXIbHRCXXITbJ@H`LGPRDDJNCLHTOCWFGvGBUJMKGFO^IHWXITQCI’Y^AXGfRˆDXF`DJOLB~G\\DZIHHpErUVMhHb]\\M†BVF@FTP`@zTbD\\@~M\\K`H^EVODWICAakAQXoIcCOCIgGYNWFWNGGKKGaJEGMEIKYJUT_J_Go@_SyQaSFMEGTcYOQLIIi@EKAUPCV[EEXQCW|aMUMAaYCYNIDGGACIMGGSKDQGaF_C[GaB@GOIiOKAYL“mI@CN]F[SWWAcKKI@HMUimEKbeYQYISNUOcBKPIFBNgvDPGZYFSf]CMSIWGEUFgDIQ[MeDMJS@RR@LphFPCHaBAJKF@J]IBJO@HlO@@RKAMPJHCNDJTHFP@ZGNANBRFH@J_fM^ONJNF\\VTDJHDON@XRND\\XRCPVETCLBVKDFJINHRGPRV@\\CLJN@VbXbLVT"],encodeOffsets:[[119561,41684]]}},{type:"Feature",id:"110116",properties:{name:"怀柔区",cp:[116.6377,40.6219],childNum:1},geometry:{type:"Polygon",coordinates:["@@JHTVHXCHPfnDJGHNDJSB[JSBGVSAOH@PMPuDEHHXZN@PHF@ZLJ@LHVYJA\\OFWP]BMtMBSRGV[JeVAPQVIFENMD¡–@^NV\\JH@NNL@NM\\kTQ\\I^FNIpBHGTBFFAZQfKDIXQTLXFXNNVMVHRGpCFLlRLEVBBH`IVO\\G`RDPAXLXBXORHZEHTDLLN@VGTMrQNFPeASKG@GMOAKBYMK@GTUHUXSHMVDNMOUEOZMJML@^KRACMZEZMRQLUHE@OFENPR@DI\\ChMHIDG\\GJMDWHCKGMDCIQCHO_K@GaIJSWWQDaGWJMNCKRsCYGYuJUSaKaW@UIMDK@[QUHOGQJMEILCAUDKFSOUQD[WMC‚Q@WPMGCCIUSE[IMPMN]`e@IEGAQBMHM@YEOSGCIDMIGNOLB@QP@GkP@AI^J@ILEBIbADGEOog@KQQWSekWQQUOFKZLF@PUNmIaHIUeBCTSHENcJa@_IWSaGu`GLSBKJQFOXGDXVQVOBIHcDSJWBEFGTMH[^mLaXcHiKElTRKtFXZ`MHMPCNRDxZˆB\\ICIHK@KŽHbIVFZ@BPnGTGbDXRDJaZKRiGEFSFEJhjFNZFjn"],encodeOffsets:[[119314,41552]]}},{type:"Feature",id:"110111",properties:{name:"房山区",cp:[115.8453,39.7163],childNum:1},geometry:{type:"Polygon",coordinates:["@@h@bl@HRJDZ``TA\\VVD^H`\\pF\\JŒ`JGv@ZO\\GPSTEjPTR`FnEbDTDHEhLFMTK@ETSPULKEI@OVISKSJACEQNQbV˜IXGDIN@dMB[IIBcN]ZHNLP@XOWCFWŠCNRHTpATD@^NVNLED@Rh@jCEF}E[OOHUEW]W@QGGDIQSH_MmFmCUT_K]i@MHCMW—FCF‹E{BMHMPOHKS]CFNGBELDH_@BcAKOACESAOBELaXAROB@FODMEDWJAG[aE@UM@DImEWJMC@OeCA{aE[@{L@MINUCQXKfUJORCHqJBF@TCXWNQX]M[EAJO@@KMBQJIC]EWMCCUBEBFHKDOTMBGNGF]MWDBRDdMDQVyE@LPVHDCP@JVVMTG~HNSH[CmRUvHPHBbA\\PTNRC\\YNJ€PRARPJDDR"],encodeOffsets:[[118343,40770]]}},{type:"Feature",id:"110229",properties:{name:"延庆县",cp:[116.1543,40.5286],childNum:1},geometry:{type:"Polygon",coordinates:["@@^AXOPEB[ZIGU@KKI@YGE@OYMGWFGvCNO@OPGTBHUTA\\ITACIGMIHmCOeDGGWSUIGimYEEMgiFITEFEjHLQbYCIWQaCSHmHAOY@UEaJG@LGLDJ[J‡AwYQCDMNONGY_EWLsSQFkMO[NWAIGaIYL@HMBOKiOQDWEUDMQSF_QIUBWdg@[NaAKQ@M]OQ@WhgLUMMFYQDIRCEUZOOCIOJ[KIUMKL@HIDKVEBM`HJAJSJUdBLGNEdMBMO[BYEWJSNKNaD]PE\\SjOT_RQVEZPpƒNQXfŠNA~lNG`@PNLp¼RFLfbdKbATUh@FSNWjGFZVLFHVA~X¨PPROfFJbNJPLFbENJPrEFNPFRHDDJdENJLVEPBJTVTHGHFRFH@PXP\\ORQHW\\BjWFDERLPPBbB\\E`B\\D\\L`@F]FCnJ^AZL"],encodeOffsets:[[119262,41751]]}},{type:"Feature",id:"110109",properties:{name:"门头沟区",cp:[115.8,39.9957],childNum:1},geometry:{type:"Polygon",coordinates:["@@V@XMnGPY²‰JQNEhH\\AZMPDVTTDZCPiJkHSHCjIdFtEHITCNITQEKUAMCEIKCECABYESKFWAKBEIIHABGDCKCAIHMHALKEI\\CFIBILIJQZS]BBEECS@E@@C]COKI@CABAAEEDMGƒCH]A[M@CJWH—JaUMRFRBDTITLUJ@PFJKLOVST@FSLENgKGFSCaCmF_ESQiOSFOT[HYPu@IH‹_[IoE_[]GUC[USB__CYQI@Gakg@qZeHQNMNV\\FVLPgJAFJPRLCH[XcPELUT[JiV_EELFTADBXRTRLJC@fHXHHbPd`fR@NfT`@TLplHMpCEJHJBVLFŽ@JT‚VnG^KXDXHNVGRLRXFJVdDHSNWLGfEzA"],encodeOffsets:[[118635,41113]]}},{type:"Feature",id:"110114",properties:{name:"昌平区",cp:[116.1777,40.2134],childNum:1},geometry:{type:"Polygon",coordinates:["@@VNLJI\\JPPDYPFVQDCJZRNEVNhKXgR@^P@NLRbB\\Mh@XcVARJE`RTCNFV€XRCjPPLNA@GZKbJJHXB\\MNPjLdGbWnK\\]NGHSFEXATIdCJGPARUWUHCPWRELITAHKv_E@iYCaW_BQ\\Y@QIO@QDCIGZCEMWGFMFAFgHEDOCSqKCCFGAMKEAC@ODGCGs@WH@KQA@EE@CE@GEA@EH@GGUEEJEAYD@JM@@DAA@FHD@FTJEHUC@JUBKCKG@G[CIIQReAYhO@OXGDO@@FF@IHJFCPEBACBIAAKDOABXARHPNEHGbQAAKQFGIAM[C@WHKaGiCEGOA‹HUKCIokSCUSOCYN[BgGMFIR±ŠOZmHWNU@ShbbXDHVXXGJ^lZ@PZ\\Nb@\\FHJAD"],
+encodeOffsets:[[118750,41232]]}},{type:"Feature",id:"110115",properties:{name:"大兴区",cp:[116.4716,39.6352],childNum:1},geometry:{type:"Polygon",coordinates:["@@F\\E~DFN@BDFEpHFCHBBEGCDCJBHUDSBB@ELCPbF@B\\J@BJVAFJ\\ADKTCBGECFMT@BMN@@FH@DaNBEnvB@FPBATK@FHEFIAKFBFL@@PKBFJHC@FXBRAFCDMPDTOL@JIVFDHH@DDH@BGRFCDLD@N^@@CNA@KNOAEBCECFEGCFGMGFIPMOEJOLBADBBHGG@GCHIECY@INC@DMGS\\AIOZAAEYA@GT@KKMBEETCGMVINFxA@MJADB@FlA@HJA@NND@DFA@DVAZBBOFKH_JA@K^GBC@EFE„G@gAENMXKJigC@IbSJMqGOP£RGSMGE@kbQFDPEFiBSGGSBK]I{CDWCIDOic[C_G@SuSO@EWKCO@MNY@\\uZOPENQD[LKESSKGBKEG@EJGAGHoH¥CqhifeJkX_XFFGHFNEDFPENKHM^IFIVL^S`DVEnNnG`RTCJHH@R^XFXGVPP"],encodeOffsets:[[119042,40704]]}},{type:"Feature",id:"110113",properties:{name:"顺义区",cp:[116.7242,40.1619],childNum:1},geometry:{type:"Polygon",coordinates:["@@EhEBENXHFNYDJHCD@RJP@R[ZARX`DbjZF@bHXT`Jb@dIFMTGDSfAJVbGnJVM@OKELYPERVXRflXTT@NIfC\\NJRhCVEHFJXNT^DTeZEHYCOhuAMJELOdAVPTMOWBWNMNEJgl]@WGUFIC[T{EEDEHGCIGMI@SECUQI[D{A{GQESPUH]CsiMCmHUeoHENcAaDGCMDGMQCACCBaCGLMAHB@DIEQLOAAEEJ@CW@CDINGAAGKQOCgV@LG@BEGDKNeREFBNCFIDOPKD[@YRW@GFWDAFE@EHDDrLDTCPGF","@@KrJEH[\\B@FF@CHFBHUN‹AJKADGECBCMAG^E@EbI@BEGP"],encodeOffsets:[[119283,41084],[119377,41046]]}},{type:"Feature",id:"110117",properties:{name:"平谷区",cp:[117.1706,40.2052],childNum:1},geometry:{type:"Polygon",coordinates:["@@ZJZRafFLjn€VGNJ@LLBdXX\\T^EDMJ@”nZKLBjPPJ@HbA\\H`DbERHLCFK^BZaFWXQLAGMHa\\OLO@SBIpBdCLƒVQfElO@GSAKEDQTC@GEBKG@ORIJBDAPDFA@CaOq@GGQAAEJK@KMUGAAGEAa@MGMBGCGSIIW@WSUCMDOJeWOM@IUF{WMWaDIMgIoRoCOKeEOEAG_I[cg@wLIFENQFDVTFJ@HNDJGHCFFFS|D\\EJHV@Xk^IhMFMNAXPX"],encodeOffsets:[[119748,41190]]}},{type:"Feature",id:"110112",properties:{name:"通州区",cp:[116.7297,39.8131],childNum:1},geometry:{type:"Polygon",coordinates:["@@FDAJTGDNDCTDDEDBBE@DT@@EHCDGJ@EIZ@@FDBR@ATFBBVFFE@@HNA\\VE@CLIFNJFNJBCP]A@LJFA@HJEDD\\C@DBCHLAEPF@@DH@APHAERDF\\GIxDTM@CFLBBFJ@CNUPMHECGDBF]BMFPDLRBHHBJMDCX@@DFIBFPBRKJF@CGANBHKbDDABDRDHNNCHDbCdBFMpGHiOYMefKJMC}HWAUNW\\NNBNA„kNU|]HMTMN@MZBLFFF@RIRUT‘BMFIEGaAGGAOIIUGTSFcYKS@MSLYPKRUBU]EWDOI]CKGASgW@MTWKIMCS@uMAKKADMECGAKVUTSDy@IjWLMNBF@hƒHEF@FAD]H@LIBG`ELAPYAUB@CEB@CMC@MIB@GkB@ECAIB@NwBMEUJHNSDFFNALLS@@HZBBFYBJP[BHTCND@JMZ@FDGJHDH@GHAABCKAIPPFONEJNHEHHDEFFDADBFMP@L"],encodeOffsets:[[119329,40782]]}},{type:"Feature",id:"110105",properties:{name:"朝阳区",cp:[116.4977,39.949],childNum:2},geometry:{type:"MultiPolygon",coordinates:[["@@bFGHBHFBFIVFHHG@@FFB@HDFF@@FRB@LXGt@DHCH@PBDLFBNF@BEXCHEX@ZQ\\@LCPOJCDEAMFEfQLMHCAFH@@KhUNE^AAEHCFDNGVODMI@AEKADEN@CSJw[HCEFQGBBOG@@CE@FOKBDGCAD@C[FCGIB@IE@K^BDOIAEMMIJEDKF@[UMB@GF@EEAUEABSQ@CA@EY@FJI@CHGD@FS@@CAFCACFSCCDCMSHBIECMB@D]@@MKCDCQEAHG@CCG@CGUEIJK@SPOCCNEDQBDNDB@DJCDLFCBBALJB@BVGPBKVO@KHCCCD@FE@BNA@FNCTDDJA@FGB@NBDW@CL@hT@@ZHHQDDDAFSAANBC@HG@EFS@@DE@@PCB@Ue@CADNJB@FCBWA@LI^ix@FIHrH"],["@@HUN‹AJKADGECBCMAG^E@EbI@BEGPKrJEH[\\B@FF@CHFB"]],encodeOffsets:[[[119169,40992]],[[119398,41063]]]}},{type:"Feature",id:"110108",properties:{name:"海淀区",cp:[116.2202,40.0239],childNum:1},geometry:{type:"Polygon",coordinates:["@@plDJVLŒGPBFHjDbHGL@X\\DBNHJREBLRBHaFGŽMGOBQAWPBLCBBAJBDFADOIEJGE@@EP@HCPWP@ZgfBRQJJ\\D@HLHLDVA@IVDFGSI@EGC@EBB@CN@@IZCAGHGaEqGJG@EjwJ]@K@GSA@e_I@NE@CA@Kg@KC@ENCFƒAKQAW@WIMK@V‹@I@@F@^EDFB@HcIaDYCBRRDCHD@EFLN@FE@CJUPEJOJMTBPEDIFCMIAKNOGMRFJNDVBFLSRMJSDGJsFcEiJGDGTIlOjYD"],encodeOffsets:[[118834,41050]]}},{type:"Feature",id:"110106",properties:{name:"丰台区",cp:[116.2683,39.8309],childNum:1},geometry:{type:"Polygon",coordinates:["@@hMN@NFTQCFRCBJFA@HJ@@HJ@HJ\\FTACDŒ@@UNLXJX@@MA@@IECAQlDFEHBDI~D@GXCFMVDFCH@@NF@ANJC@FnAB@AMF@@EDCDDLGP@LUOAUH@AIABKAAEDCKID@CCACMWA@EGDEILA@OK@AELEJBFEEGL@BSOA@EuAFmMACbG@@EM@ANS@ENFDAHSDCL[BEIUBAII@A[E@OaKD@FAACTGVIACDHDAFGAEDoGEFACM@i€g@@QFCMKMU@]SCoBGSMQ‰DEXXDWPO@MKYGM^AdJJA\\cNB\\G^„DNHFCBFABDBJ@PL^D@DF@T@FDAF^A"],encodeOffsets:[[118958,40846]]}},{type:"Feature",id:"110107",properties:{name:"石景山区",cp:[116.1887,39.9346],childNum:1},geometry:{type:"Polygon",coordinates:["@@NQPHLMJBDNJEFCAONSPIFIVODIF@@EKMFEC@DGQCAQZDbCdJ@GEAFC@]@EJ@DCSB[EGII@@GI@@GEBAIQDDESRMEM@gNYTIRKJAJEJ[DFJKLGBGNBJLDCDAHGBJJAFBLEXTLZFBAFDLD"],encodeOffsets:[[118940,40953]]}},{type:"Feature",id:"110102",properties:{name:"西城区",cp:[116.3631,39.9353],childNum:1},geometry:{type:"Polygon",coordinates:["@@XBDA@EIACM@IJAD]BC@SFABISAD]H@@OAEDQEW@BLE„MD@FLDh@@LDBF@@M`J@fTB@H"],encodeOffsets:[[119175,40932]]}},{type:"Feature",id:"110101",properties:{name:"东城区",cp:[116.418,39.9367],childNum:1},geometry:{type:"Polygon",coordinates:["@@DBf@@VDA@OF@@CT@FEH@@GADBMTBBECCRCGG@YS@@gDK@A‘C@PG@C^TBAJEB@TADC^IB@J"],encodeOffsets:[[119182,40921]]}},{type:"Feature",id:"110104",properties:{name:"宣武区",cp:[116.3603,39.8852],childNum:1},geometry:{type:"Polygon",coordinates:["@@RBX@RFFCŽBFU@aK@WA}CCJGAEFkCBRFD@JB@@N"],encodeOffsets:[[119118,40855]]}},{type:"Feature",id:"110103",properties:{name:"崇文区",cp:[116.4166,39.8811],childNum:1},geometry:{type:"Polygon",coordinates:["@@XBL@@bEV’D@BX@AC@MHA@EIBCCDSEMmB@EIDBME@@MG@EDUCENWD@H"],encodeOffsets:[[119175,40829]]}}],UTF8Encoding:!0}}),i("echarts/util/mapData/geoJson/china_geo",[],function(){return{type:"FeatureCollection",features:[{type:"Feature",id:"xin_jiang",properties:{name:"新疆维吾尔自治区",cp:[84.9023,41.748],childNum:18},geometry:{type:"Polygon",coordinates:["@@@›ρȁôƧƦóəʵסʵóƪԫʵѵͩƧͩړ›υࡓɛʵ@ȃ@óᇑѵƨɝɚôóНѺͩɜ̏ԭʵôƧɞñ@υƩ—݇ȂóƩƧ@ѵȂυœƥŌਗ—॥ɛóʵѵƧѹ˜݇̍ࢯ˜əɞυ˜ρͩ̏óਙƨƧŋôōóš̍ͩóʵן›óŋړͪƧѶ@ɜԭ—ԫƦɛȄ̍›ɝȄöςƩȂ̏œñȀ̏œƩóóŎə˜@Ő̎@ɞȀɝŎôƨóנѵȄƧ@óŏɝœóɜôŎ̍ͨςŎ@ƨóôƨɞ݈ʶóƨφó̎Ȁƨ̍ԮòѸԮמ@ѺȀ@ƪၬֆòȂñ̐òȂɜ˜óƨ̒Ŏ̑߼@φρȀ@Ő๐ς̎Ƨφ@ɝφڔ೦Ԯǿࢰ@ƦŏԮƨƨȄƧ۬ɜʶڔŐɚɚóŐôƨ߼˜ôƧƧó̐ƥóŏѺǿƦȁφƧς˜ƨƧ̒@ɜƥƦυ̐ɛƪͩƩəƪʷ̑ə@ȃƨʵנŋྸōਚԭԪ—@ɝƨŋ̒օςʵôƧ"],encodeOffsets:[[98730,43786]]}},{type:"Feature",id:"xi_zang",properties:{name:"西藏自治区",cp:[88.7695,31.6846],childNum:7},geometry:{type:"Polygon",coordinates:["@@ôŌנœôʶ̎ͪô™óŎƨŌਚƧ̐ôςͪφ—ɚɝࢰ—݈̎Ѻ—Ѷƨôʶ०ɜਘ˜Ʀŋφ›Ѷȁ̍—ôŏɚŋ@̑ə—@ŏò̍ɜ›óƥôʷƧ̍φѹԪ̍ע@Ѹʷɜ@ôñנ@Ѷɛɞô̐ŏѶƨѸƧƥōƦœôŏô—@ƧôƩ̒ŋƨŌƦǿô̎ɜȁ̒—óʶѶôôО̒›ςƥɜНφσɛȁ̎υƨఱƧŏ@ʵƥœ@ŌóóóͩƨƧóŋ̑õóɞóɝԩͪɝρôƧ̍ƧѹͨڑŎ̑ōóƧࢭͩ̏ѵɝóఱóóԪυô@̒ƥŌ̏Ƨ̑Ȅ݇ŎƧ›ѵӏ@ɛõŏɛȄôӒƧŌѵǿɝ˜Ƨŋԫ@̏ʴƥ@óǿ̑Ȁóǿ̍ςóóυô@ʶɛñρƦƩŐó̎óœѵó̑ͪࢯОóɜן˜Ƨ̏ƥȄ߻̎̏̐ןŎɝɜöɞƩȀôöɛȀóͪ̐ƨƪ̍̎ȂƥԪυО@φɞ˜ôƪ"],encodeOffsets:[[80911,35146]]}},{type:"Feature",id:"nei_meng_gu",properties:{name:"内蒙古自治区",cp:[117.5977,44.3408],childNum:12},geometry:{type:"Polygon",coordinates:["@@ኊȁ૊ö߼ƩɜɛנñԮɛѶóԮô@ȁѸóמ̎ගѺၬ@߼ʶԮӒ߼̎@ŐѹӒ̒Ԫƨöග̑ѶȄ̒ς।œѶɚöɞɜʴڔôôȂ̎—ѺȀς—ƨ˜ƪóԪ—ɜôɛОਕڔԭ˜ѵ̍ѹȂԫ›ɛƥ̍Ȃóɜ̎ô@ʶ݊ੲࢮʵږͪנƨôȂƧ˜̐ͪ@ŐƦƨφԬѶɜôƦ@ŐƧôôƦəŐ̏›@ŐڒѶԬô̐ʳԩНςōôŏɞ@ƨȂѶəóƧ̒ػ̎ó̐Őנóƨô̒@ƨɚɚ@עԫɛɛ@ȁυͩƥʳòևρ—̑ࡗƧͪ༃ॣԮփ̎Ʀ@ôô@ôō@š@ȁѵóƨ̍υȃóʵɛƨƥóυȂóəƪ›̐ρƧͩɜԭڔȄ̎عƧȁ̐ŏó̍ɛ›ƥƧ̑óρŐ@Ƨ̏˜ɝəɛ˜߻ͩ̍ͩɝО̍ƪƧóóӓƨóƧʳ݇@ɝςƪœ@ʴƩ—ƧƦôƨɛȄə›Ƨŋυ›óͩѵ@ɝǿóŌן̍ɛ˜óО̍œ̑̏ôȁ̍ŏòȁñóƦͩ@ǿə@ɛƧ̑˜ρȁυô̍օѹœóȃə™@ȂσʵѷƪòƩ̍—ôó߻ۯôʳƧ™óšõʵѵóѹɜ̍ȂѹôɛŌφֈƩͨρóυӑóޟఱ̑݇ͪóƪƨŌóȄڔԬƩςםñ̑ȃѵŐԭŏƨȁɛǿρôõɚɛóƧОə@ѹ̐ѵöԪͨôͪɛ̒ןŏƧƥóôƥƧɛŌôóɝó@̒݇Ӓ̒Ō@Ŏԭࢰ"],encodeOffsets:[[99540,43830]]}},{type:"Feature",id:"qing_hai",properties:{name:"青海省",cp:[96.2402,35.4199],childNum:8},geometry:{type:"Polygon",coordinates:["@@ƨ@ôƪ݈ȁƪ˜@φɝòóƨԮʶɛ̐ѹͪôОəóƧɞᇒѶ@ôږô@ǿѶ›ƪȁςœɜͩφ˜ςŋɞôѶɛƨŌɞ—@ɚςŐñԪॢͩƨȂɞóƨŐ̎ŏעӏ̎óƧƦôœ̒ȁɜ›ςͩ̒œɚɛƨôƨɝφɛóȁƨŋóóɚͩƨóóƩ@ƧəŋƦƩ̍@ƧƧôǿυ̑@ȁɞǿõŏρƥסɚƧóτԫɞœôƧƦ@ñȃòñƥóυôôѹѵ—@ŏ̏Ȅɝó@ȂəŌóəѹƦ@Ő̍Ōυ݈ԩŐƧóôƧ̑›ôʵɞƧ̑ѵôƩɞƧ̑œóНѵóôʵ̑˜ɛȂó̍ƥȀƧŋ̑Ōóƪ@ƨó˜óŐƥ›ƦŎѷƨѵƧ̏Őɝóѵɜן@óòɛ@ѷʸס@ԩ̎υѺƨ̎óʸôƦɛœñ̎@Őɚ˜@̒əŌóŐ̎˜"],encodeOffsets:[[91890,36945]]}},{type:"Feature",id:"si_chuan",properties:{name:"四川省",cp:[102.9199,30.1904],childNum:21},geometry:{type:"Polygon",coordinates:["@@ô˜ôŋó̑Ԯ̒ɛОמͪƨōöͫ߼ƥôȃƨóóñôƧóƧôōڔŏƨŐ@Ŏô˜òƥѺŎ@ōɜóנ˜ôǿô›ƦôԮ̍ɜôɚ›Ƨ—ñɛɚȁ̍Ƨɛևυ@óóôŋρԭɝ@Ƨʸ̍ŏυɜƧƧóƧƨȁρ̍ƨȃɚ—ôʵφóô̑̏Ȃ̑ʵɜʵɞ@ƨʳסƩóŎə—óɜƧôƩƧρ˜óôôô@ŎƧƨƨƪѹ˜ó̍̍Ʃ@̏ѹНôޟ̍Ʃóƪυɝɛ—əƨôŎɛȀ@Ȃ@ñɝʶ@Ōρנ̏—õóɛͨƨȂѵОɛʵ@̏ƩŐó߼Ƨల̍φɜȂυτɛОρƦɝƨóƪ̒Ѷɝƨóʶ̒œóƨƨôԪŏφ݇̎ŋ@ŏѺƥôɚɚŋ@ȁɞô̐ȃ@ŐѶ˜óѺφóƦôñòòȄ"],encodeOffsets:[[104220,34336]]}},{type:"Feature",id:"hei_long_jiang",properties:{name:"黑龙江省",cp:[128.1445,48.5156],childNum:13},geometry:{type:"Polygon",coordinates:["@@ᇔȂਚНƨŐѶŏöƥςŏñƧƦóƨȁ@óƨ—óȁφӑóóƨ˜óǿ̎̑ôНɞ—ó̑ɜə߼›̎ǿ̒ôڒӑφ@Ƨȁ̎̏ƥƩ̎ρశ˜ôȂςƨφ@נɞ݈˜̑ƥƧɛƨʵƧȃƥ@Ƨƥ@ŏ̑ԩôɝρρóɛƧ›ƩͩƧó߻ʸ̍ʷѹƥɞڕõ̍öɝυ—̍ȂƧ̐̑ŏóƨñŋѹóóȁ̍›̏Ԭõʸ̏ŏ@ǿ̍@ƧОυ@ñƨòȀƥŎ̑ŐѵóɛŌóȂԫōƧŎѹñ̍ʶóОן@Ƨ̎Ѷô@Ȃ@™óŎó@@ó̍ƥԭք༄।ƨͩ̒ࡘς˜ñֈƦʴφͪ@ȂɜɜסԬə@Ƨə̑@Ƨóןô̏ŏ̍ô̑ؼôƨѵɚƧȁɝ@óŐρŎԪО̏ʴ"],encodeOffsets:[[124380,54630]]}},{type:"Feature",id:"gan_su",properties:{name:"甘肃省",cp:[95.7129,40.166],childNum:14},geometry:{type:"Polygon",coordinates:["@@ڔôԮࢯ@ō̑ŋ݈ӑ@̑ɞôóôɜŋƦƨôóƨƦנŐɜ̑óͩԩͧѶõѺ̏ɚ@ƨНɜôöəςóɜȀƧȂԮŐѶŏ̒ȄמòƪρړԫôȃƧŋôƩ݈ͩɚ@@ǿɜ@φͩóŏɜӑƧōôǿ̎›ôƥƪóõ›ö@ô—ƨ˜ôƧƦôó̒ɜ@ɞŌõʶ̏Ő@ȀóôƨȂ@ʶע@@ƥ୾ӑó̑óŋôʵóɛړ@@ƩöóƩóρ—ɛƨ̑@óʷƥƥ̎ɛƧ›ôōƧǿôͩѵôɝȃɞȁõƧρóó—@ōƧŏړŐóŎôƨóƨôòƧôóȄ߻ƦõͬƧŎםͩɜНԭ̑ô̒óŌó—ƥ@óƨɝ›σԬƨôעəςƦöŐɝȀ@Ȃφ̒óȀƨƨ̎@ƥƪɚŌ@ƨôƪƧôəͪôôƧŌôȂυɜƧɞƧóəɜ̑›ρͪɛœ̑Ȃó›ƨƥ̍ôסӐ̍ŐƧŏɝôƧȁॡͪòԩρŏ@əɝ˜ƧŋѵɜɝóρŌυ—ɛͪρ›ƩȂѵœ@Ȁڕó@ȄɜʶφࡔڔœƨͪѶͪԬʶôƩעʶɚʶƥôóƨςȂ"],encodeOffsets:[[98730,43740]]}},{type:"Feature",id:"yun_nan",properties:{name:"云南省",cp:[101.8652,25.1807],childNum:16},geometry:{type:"Polygon",coordinates:["@@ôɞôɝ̒öôŌƧƨôͪôô@ŋƦ›@ʶƨŐô߻ƪŏ@̐ɜʶѶНƧȁɜͧöô̐˜ςן@ŋɞʵ@ò@ȁɜǿóōɚƧɜ˜φɞôƩ̎ƪóޠѺО@̐̎ƪô̎Ѻ—ƧƩƨƧ@ōóóôóς—ƪƨƨóôɛó̑ԭ—ƥŌɛǿɝƨɛͩô›@ǿƨȁѺŌɚɛ̍ןѶНɛƧôóƥȁƦͩôŎɞ—ƨ̑ɜ—òôφ@ƨʵ@ɛѹōóȃəƨυǿóʵρƧƧŌƩɛ̏ȄñƧƧȀɝ̍ԩʶƧ̑υ—óŌƥʳɚӑóНƥô̑›óӒѵʵѹœƧӐןôƪφõŌƪ̒ԫŌƧؼƨƨס›ρȁƧœƨȂóʶó@@ʴƨôôφ̎Ŏ@Ȁƨ—ƪɚƨœóƨôôôςóޤƧŌƩŋƧԪ"],encodeOffsets:[[100530,28800]]}},{type:"Feature",id:"guang_xi",properties:{name:"广西壮族自治区",cp:[108.2813,23.6426],childNum:14},geometry:{type:"Polygon",coordinates:["@@ƦŋѺ̎ڔʵƨŐ@ƦמȄƪôóȂɜŌɚͩɜ@öóɜôôȂƦôɜȁ@ɞφ›óȄ̎›ƨʶɞŋƨʴɚǿ̐̎Ԭ@ôñ@̏ƨ›ρ۫ô›ɚƨƨНƪŐ̎›ƥóƦʵƥŋ@ȃóƥƧ@@ŏɝǿôυƧȁѵɛ@əóŏ̑@@ə̍›óƧó—@ȁƩ˜ρóòНƥô@Ӓ̑@óŎ̍ƥσŎυ@̍ƨ@Ō̑ôóͪƨ̒óŌړœ̏Ŏ@ŌôȄѺŎ@ɜƧʶυ@ñóɛ˜Ƨ̒ɝ˜óōƥͪ"],encodeOffsets:[[107011,25335]]}},{type:"Feature",id:"hu_nan",properties:{name:"湖南省",cp:[111.5332,27.3779],childNum:14},geometry:{type:"Polygon",coordinates:["@@@քɜОƨ@öŐמóƪôƩɚ̒Ő߼ȁςͩɜòƪ—ɜȀò—ñɝò—Ѻͪ@ŏƨŋóɝôǿƨ™ɚȃóəƨȃѵͩó̍@ȃƨóóƥƨƧ@ʵƦ›óͩɜ—ɛóñԭɛōυȂ̍ƧƦō@ɛƥ—ɛȀ̑œóʷóō̍œƩŏƧОəƧóœς۬Ƨœ@̐óòԫ@̏̍əȀƧʳɝŌóɞƧ˜ƨɜóŐƨò@ȄƧŌρŋóôԪОóʶ@̎óȄ"],encodeOffsets:[[111870,29161]]}},{type:"Feature",id:"shan_xi_1",properties:{name:"陕西省",cp:[109.5996,35.6396],childNum:10},geometry:{type:"Polygon",coordinates:["@@ςôöƨɝȂɞȄѶóóͪƨȀóŎƨœ̍ɜƦƦôʸ̒@ɜƧς˜ƪôõô@ƪڔ@ôɜóʶôŌô̒୽Ӓ@Ʀ@Ѻ̎ɜѺɛѶôöʶô™ƨšóʴ߼۰óô̎˜ñƪѸƩτʶ@ȁòŋəѹóǿ̑ʵ@ȁ̒ʷυփô݉ôН̏ط@ȁƨóô̏ƪõ@ʳ̐ʵ@ɝɛŋƩŌɛóןôƧŋ̒ó@ŏ̐ƥ@ŏυ@ƧƧôן̏@ƥȂѹɜəœɛóԭ̎ƥóóœóȀן—ɛô@ŎѹōñƦ"],encodeOffsets:[[108001,33705]]}},{type:"Feature",id:"guang_dong",properties:{name:"广东省",cp:[113.4668,22.8076],childNum:21},geometry:{type:"Polygon",coordinates:["@@@Ȃô˜ôƨ̎œ@ɚ̒@ôŐ@ɚѶɜƨȂóφɞȀ@Őƨ@ôƦ@ȄƦŌƥʶƦôôŎôʸ̒›ɜǿƦ˜@ɜƥŎ̎ƨφȁɜŎòƥԮŎƨōóŏɛƧɝəɞƧ߼ɜςȃñȄƦŎ̒ōôòƨəƨ˜ɚН@əƨ̏ƪʵυŌəɛóəԭŏəœóŏѹœρʵɝƦ̏™ƥʳѶ›öō̑óóŋρȀυƧƥɛѹōƧôן—ɛŏѵ@óŋôʵɝ›ƪԩõ@Ƨō̍@Ƨ@@ƦɝԮƪО@@","@@X¯aWĀ„@l"],encodeOffsets:[[112411,21916],[116325,22697]]}},{type:"Feature",id:"ji_lin",properties:{name:"吉林省",cp:[126.4746,43.5938],childNum:9},geometry:{type:"Polygon",coordinates:["@@נ@ôН̎ʵѺòƨōԬŎôȁɜŋѶô̒ŏƦōñǿòƧφ@ƨН̎@@Ȁ̐Őöʷ̐ԫ̎œôȂѺôòŌôƧ̒Őƨ̏̎ȁφ˜@ŋƩͩםȃƨ—@ȁ̑ʶ@Ōóôɛœƥѹ̑—συ݇@ɜρƧȃࢯƨôœəȂɛōƩɛ̏υρóõœƪʴυφ@ʶôŌóœρք@ɜƧ@ɝǿƧͪρȀƩó̏ŐƨȂ̍غړȃɛԮƨͪ̏ςƩœôɚφȁƦôɜƧôʶφȄ"],encodeOffsets:[[126181,47341]]}},{type:"Feature",id:"he_bei",properties:{name:"河北省",cp:[115.4004,37.9688],childNum:11},geometry:{type:"MultiPolygon",coordinates:[["@@Ʃ̒̏ŌѺ̒Ʃ˜óȄƧŌƥͪòôñȂ̎ŐóȂ̒̐̎›ôНɜ—נ̎ôŋɞȀѶ@ôͪφœƨŌɚœɜȃóƧƨƥƪ˜@ʳƩ›ɞρ݈@υНφʵɜ˜ƦρƨƧ̍ɝóɛѹ̍ρŏ̑ôóƨ@œƧƦôƨɛ@ƥƨ@ȂƦ@@ôəŐƧʶƨŌυœ̍̎ɛŋôōɝ@óƧ̍›ƦʵѵʳôʵɜŏςôƪŋƨŌɚ@ôНƥƧ@ōѸɛ̐ô̎ʵѵНԭ@̍̍Ƨò@ȁɝ@əρυͩƪ̏ƩõƧŎƧōóšॡȄɛʶɜȀ@ɞςѶƧœƥςɛŐ@ɚɜɜ@Ŏôôςœƪς"],["@@õə@Ƨɛ˜@ŐóƦφô"]],encodeOffsets:[[[117271,40455]],[[120061,41040]]]}},{type:"Feature",id:"hu_bei",properties:{name:"湖北省",cp:[112.2363,31.1572],childNum:17},geometry:{type:"Polygon",coordinates:["@@ñȄυƦöŐƩ˜óנƨƨφ@@Ő̏Ʀ@Ő̑ôƨŌנóɜôƪŋɜŌѶօڔə݈òɞōɜŎôӏƦóƨô̒óôȃƨó̎ŐôƧƪ@ƨȁςƧə̑̎Н@̍Ƨŏρôԭͩԫ—̍ʵƧšóȀôɞƧŌ@Őѹͩñ˜òɞñ˜ɛǿƩ˜ɛñρͪ߻Ȃ̑ŏƪəƩóםôõŏƧ@ɛНƥȄó›̑ѺƧ›ôφóƨƨƦƪóɜŐôóòôƨóφ̐ƨóƦ̎"],encodeOffsets:[[112860,31905]]}},{type:"Feature",id:"gui_zhou",properties:{name:"贵州省",cp:[106.6113,26.9385],childNum:9},geometry:{type:"Polygon",coordinates:["@@ɜȀƦŋԮ˜ô̒ɚ˜ôōעƪƧʴɝ@ɛʶ̒ʶ̐ȁƦœóȂô@ôŏ@ōô—ƨʶѸô@ʶƨ˜ɞó@ōτöòυƨ@@əƨô@ɛ̒@Ʀɜôȃ@̍ôʵԩНôóςŌƨŋ@ȃƧñôŏƧɛƨ—ôɝƧʵ̍œôȃυœ@ɝɛȂƥóóȁɛóõôɛ@əͪɛŋôȁƩóםȃ@ƥƧŏړʶѹ̍ƥŌƦȂóôɜƨѵО̎נəɜѹŋƧȂ@ȀóœɜͪɞƧ"],encodeOffsets:[[106651,27901]]}},{type:"Feature",id:"shan_dong",properties:{name:"山东省",cp:[118.7402,36.4307],childNum:17},geometry:{type:"Polygon",coordinates:["@@Ʃ̐φͪɚςɞ@@Ȃƨñ̎̎Ԯ@ѶОƨƧڔ@φН̑ŋ@Ʃ̒ǿ̎@ƨɜԬςôʶ̐ʶöԫƨƧנƥɜŎôō̎@ôŏóρƧŏԫôóƧԩó@ƥɜƧԭóƨʵɛƨ߻ӑɜНԩ˜óô̑óƧʳə™óɛƧ@õȀƧœ̍ȃɛŐóŏυО̍—óɝƩ—ԩ@ƧɚԫȄɚʶƨ˜ɞʶԪ̐ړɛƪ̒"],encodeOffsets:[[118261,37036]]}},{type:"Feature",id:"jiang_xi",properties:{name:"江西省",cp:[116.0156,27.29],childNum:11},geometry:{type:"Polygon",coordinates:["@@ƧȄôɚəȄ̎ʶԬ˜ԮͪςóƨŐƪ›τɞƦōƥƧ@ŏςôóŐôô̒ʷѶ—ƪƩƩǿ@ō̒ɛôυ@—Ƨȁѹɛəƨѹ̑ƨ̏óƥѵʷô̍ɛȁôŏɝǿƧԫƧ›ôʳƥōòȃρȄ߻ɛɝƨɞɚɜƨôŐƧŎԭōñƦòԮɜôɛ˜ôͪƥœ@ʶƧƨôƦƧô@Ȅô̎Ѷͪ"],encodeOffsets:[[117e3,29025]]}},{type:"Feature",id:"he_nan",properties:{name:"河南省",cp:[113.4668,33.8818],childNum:17},geometry:{type:"Polygon",coordinates:["@@φ˜̎ƪ̐˜ɞȄɚ@@Ȃעó̎ŌѺ̒ôֆॢȃô™ƨŎƨōƪöƩ̑ڔɜԩ̏ɝʵƧ—əʵԬȃƨəԪ@@Ƨ̒ŏô̍υȁƧɚ̍ôóŋ@ɝƧŋõ̑σ—@ŏɜŋôɝ̒ƧɚôôطρóóɛƩ@óƨ̍ŏƧôóȄ̑ôƧóƥôóӐɛōɝŎ݇ñړɚѵֆ@ɞ̏ʶ@ʴƩöó̐"],encodeOffsets:[[113040,35416]]}},{type:"Feature",id:"liao_ning",properties:{name:"辽宁省",cp:[122.3438,41.0889],childNum:14},geometry:{type:"Polygon",coordinates:["@@ƨʴƧôôӔƨô̎ƩɞН̎ͪ߼ͪɜ—ɞɚ̐—@ƨςŏ̒ôƦƨɜœô̎ƪôςǿƨͩɞȀƨ@@ɛςփô›óŋ@ʵφυƩʳö›॥փρѹס@əɛ@ͩࢯ@ѹʵρ—ƩʶφȀƧ݈̒۬óʸɝŎѵ@ԭԫןɛƧƨƥςɛ—υʶφО"],encodeOffsets:[[122131,42301]]}},{type:"Feature",id:"shan_xi_2",properties:{name:"山西省",cp:[112.4121,37.6611],childNum:11},geometry:{type:"Polygon",coordinates:["@@ɚѺñŌɚšôȄѺ›̎ֆφóςȂ̒—ɜƨɚ@@Ȁƨŋôȃƪ—ѹ̑̐ŋƪ̑Ʃρρ›óó@ōɛɛ@əɜŏƦρƨ›ρѵ@ɝɛǿɜʵóօѹ̑̍ŋסô@ȁə@ɝȃ̏—̍Ʃυ—Ƨô@Ȃ̐ظóОó݊φք̑ʸ@Ȃ̒ʶôȀ"],encodeOffsets:[[113581,39645]]}},{type:"Feature",id:"an_hui",properties:{name:"安徽省",cp:[117.2461,32.0361],childNum:17},geometry:{type:"Polygon",coordinates:["@@ó̎̑Ő@ƨƪ˜Ѷǿɜ̑φ—Ʀʵ̐˜Ƨѵôóƪôôυς—ƨȂɞŏ@̍ԫôò̑ƥ—óȃѶͩƧƥôŏѺœôŏƦ—@›ƥͩƧ—ôȁυó@̑ƧɛѵʵƩƪѵ˜̑ʸóóôŏρó@ŐƦƨƥŎσɝƩœ@̎̍Оɚ̒ρƨƧȂôɜςôóظəó̑ƨóɞɛŌ@Őτ˜ö̒ƨŌ@ɞôŌ̎óƨəφȂ"],encodeOffsets:[[119431,34741]]}},{type:"Feature",id:"fu_jian",properties:{name:"福建省",cp:[118.3008,25.9277],childNum:9},geometry:{type:"Polygon",coordinates:["@@̎›óȁƨӑ̒—̎ɚƨͩφŐƨɝ̎ŋóŏρ—@ōƨ›òʳəóƨō̏˜õɛƧ@ƨѵƧōəŏóŋƧô̑ɝɛʳƥ@@óɛõ@Ƨ̑ƧóȁəƧ̑—Ƨ̐@ɚəОƧ—Ƨɚóñ̑ŎóʴƨœƨԬɞȀóŐɜȂó̎ѶʸôƦƧ̐Ѻ̒ɚƧѺɜƨȂ"],encodeOffsets:[[121321,28981]]}},{type:"Feature",id:"zhe_jiang",properties:{name:"浙江省",cp:[120.498,29.0918],childNum:11},geometry:{type:"Polygon",coordinates:["@@Ѷʶƨɜ@̒φôóȂƨ˜Ʀͪ@œ̐˜Ѹ̍τȂ̒̑נŐמôƪƧôӑ̑›@ƥρͩƨօ̏@@υɝó@ŋɛ@ôƩəóƧѵυó@ƩɜŋƧ@̍ŌƧɞυŏƧͪ̍ə̑˜ƧӒôȂ̍œ@˜óφ̑ɜ@ŎƪȀ"],encodeOffsets:[[121051,30105]]}},{type:"Feature",id:"jiang_su",properties:{name:"江苏省",cp:[120.0586,32.915],childNum:13},geometry:{type:"Polygon",coordinates:["@@ôɞ̎˜φНôŐɜŏ̎Ȅƨ›öǿƨ@ôɜɚšƨʴ̒ôôó@Ƨ̎əԮȃԪૉöͩ̐ƧòʵφƧôʵ@óړɜóŏɜǿƧ›ɝρσȁѷ̎̏—ƥ˜óŐѹ›óŐƨƦѵͪôȄƦ˜ñ̒Ԭó@̎ɝŐƧȁρ˜óφƩóóôƨѶ̏—ƥʶυ˜ɛ̒ѵȀ"],encodeOffsets:[[119161,35460]]}},{type:"Feature",id:"chong_qing",properties:{name:"重庆",cp:[107.7539,30.1904],childNum:40},geometry:{type:"Polygon",coordinates:["@@əȂòɜƨ˜ѺɛƦȁ̐@ƪ—õŏφƥòȃƥ̍Ƨôυ̏ƧôñóóôɛŏƩôƧƥôƧóυƨœ̒ѹôœƦȃ@փƥɛ̑@@ɜƧó@ɚƧ@ñφσõ@ŎɝôƧ—@ʵѷóƧʵó˜@ŎóŐó@ôȁƥ›ó̒υôóʶə˜ƧȄς̎ƧȂôƨƨƨφɛ̎Őƨʷɞ@ςԮóŌôôφ@ɜֈ̎ƨ"],encodeOffsets:[[111150,32446]]}},{type:"Feature",id:"ning_xia",properties:{name:"宁夏回族自治区",cp:[105.9961,37.3096],childNum:5},geometry:{type:"Polygon",coordinates:["@@ల̒ôޠφӒςôƪͧυևɜŋѺó̎ȁ̍ɛ@ѹס@@ʵƧȁôó@ǿ̐ŏöʵɝŋɛ@ô̑ƥóóƨƧ—ó˜ôœó@ƩôóƦ̍œóȀƨŎɛӒôŐυͪɛ@@Ȁə@"],encodeOffsets:[[106831,38340]]}},{type:"Feature",id:"hai_nan",properties:{name:"海南省",cp:[109.9512,19.2041],childNum:18},geometry:{type:"Polygon",coordinates:["@@φɜƦʶ̐ôφô̎@ƨŎö@τʵƦ˜ԩ۫õН̏óƥȃƧ@Ʃəםƨ̑Ʀ@ޤ"],encodeOffsets:[[111240,19846]]}},{type:"Feature",id:"tai_wan",properties:{name:"台湾",cp:[121.0254,23.5986],childNum:1},geometry:{type:"Polygon",coordinates:["@@ô—ƩɝöƧɝѵəޣ̏ρƩԭóōóͪρɞƧОôԪ݈ଦѶɜ̒ɛ"],encodeOffsets:[[124831,25650]]}},{type:"Feature",id:"bei_jing",properties:{name:"北京",cp:[116.4551,40.2539],childNum:19},geometry:{type:"Polygon",coordinates:["@@óóó›υóôƥ@ŏóóə@ƧŋƩŌρóɛŐóʶѶʴƥʶ̎œôƨɞ@óŎɜŌ̎̍φ›Ƨŋƨʵ"],encodeOffsets:[[120241,41176]]}},{type:"Feature",id:"tian_jin",properties:{name:"天津",cp:[117.4219,39.4189],childNum:18},geometry:{type:"Polygon",coordinates:["@@ôôɜ—@ƨöɚôœôôɚŏ@óƥ@@ȁƦƧɜ@óƧƨƥ@›ƧóəН̏óѷɜ@ŎƦƨóО"],encodeOffsets:[[119610,40545]]}},{type:"Feature",id:"shang_hai",properties:{name:"上海",cp:[121.4648,31.2891],childNum:19},geometry:{type:"Polygon",coordinates:["@@ɞςƨœɛȀôŐڔɛóυô̍ןŏ̑̒"],encodeOffsets:[[123840,31771]]}},{type:"Feature",id:"xiang_gang",properties:{name:"香港特别行政区",cp:[114.2578,22.3242],childNum:1},geometry:{type:"Polygon",coordinates:["@@óɛƩ@ρ@óœôȀɚŎƨ@ö@@ōƨ@"],encodeOffsets:[[117361,22950]]}},{type:"Feature",id:"ao_men",properties:{name:"澳门特别行政区",cp:[113.5547,22.1484],childNum:1},geometry:{type:"Polygon",coordinates:["@@X¯aWĀ„@l"],encodeOffsets:[[116325,22697]]}}],UTF8Encoding:!0}}),i("echarts/util/mapData/geoJson/chong_qing_geo",[],function(){return{type:"FeatureCollection",features:[{type:"Feature",id:"500242",properties:{name:"酉阳土家族苗族自治县",cp:[108.8196,28.8666],childNum:1},geometry:{type:"Polygon",coordinates:["@@XJ°œlJX@lbl@XbV@VLnJlxnbšƒUU@IVK@lVIVwnJlU@n@J@L@Jn@l_nWVLVln@@blLšmV@@xœÔ‚`nœ™xV‚ÈLlx„LVxVVšƒV_U»VWn_m¥XwVmnX°ƒlmUUVwÞaVƒk@a@mmIUa@™mwk@™ƒm@@U¯a@UV@@K™@ykkmwkV@kU@ƒÑƒVkKWLÅamaUm@kyU@WkU@Ua™IUašVaUUmUUa@aVLXKWa¯UUbmJXnWnX`l@@xkzWÆ@V„LU¦‚x@b@JkIkJ@LmbUamJwm@óxƒnk@V„@x„ŽVnUVmVUVŽUbVlUbkXWŽ"],encodeOffsets:[[110914,29695]]}},{type:"Feature",id:"500236",properties:{name:"奉节县",cp:[109.3909,30.9265],childNum:1},geometry:{type:"Polygon",coordinates:["@@WVXb‚UnK@x@b‚²kxmKkl¯_ƒVV°™VU@bnKVVV@@nkŽ@n›bn‚@š°@VLČUš@°WV@V™nU@InKVl@nU„b˜KnX„WlknLlKUwnalLša„VlUXmWk@UU@UWWIUyķ¹XaWW@X™ƒKUIVm„U@W@UVU@KV@n»VkUkÇmUmVIUmULUbm@ƒwUaƒKkkm¯ÑUL@bWVnx@VmxUI@„klmkkK@aƒK@IlJ@I¯ƒk@mak@mnkJVL@bV@Ub„„W`UUUV™I@VƒU@VVbUJVLUVVbUX„VVxk¦VJUnVxnVVUšJV@Ubl@@bXV@L"],encodeOffsets:[[111781,31658]]}},{type:"Feature",id:"500238",properties:{name:"巫溪县",cp:[109.3359,31.4813],childNum:1},geometry:{type:"Polygon",coordinates:["@@nLWbX‚VLVU„V@KšIVl@b„@lbšU„VnU@JÆU@V@n°KĢUl@VbÞKšVš@„_„V‚KXU‚U@KXƒ@wlkkU@mWKUU@UôJ@XV@œaVmÞIVaVLƒƒ@»kmƒ@ƒUkL™U@aU@WWƒLUUU™™KkbƒwWa@KU@kaƒXmW—LƒamVk@UmL@JmVUšU@¯X™@ċVUK¯@ÅnWK™LkKULWK@UXK@wW@™LkV@bVLƒlXn›`¯xU„°LnŽlV@n°Lnl"],encodeOffsets:[[111488,32361]]}},{type:"Feature",id:"500234",properties:{name:"开县",cp:[108.4131,31.2561],childNum:1},geometry:{type:"Polygon",coordinates:["@@n@na‚I„wš@@VVK„LVbVxnVÆUnanKWXamKmk¯K@mkUm¯KVƒ°w@Wm@UIUUlKUU@a¯KWanwmUXamKkUWUnU@KƒkUwWKXaWLUWkImaUUUƒƒKka±k@lƒ¯w™wmbUƒ™ƒkXm@UJkIW‚XXƒbƒmƒ„UJ™XUV@°šKlšlVXV@xmbnV@blV@VšœU`UL@V™a@bULlb°VXbܚ@V@bƒL@J„xnLVb@lVb@V@@z˜bXWšX„KVLV‚š@@bUVVL@b„„lVna@ll@„zl@@J"],encodeOffsets:[[111150,32434]]}},{type:"Feature",id:"500243",properties:{name:"彭水苗族土家族自治县",cp:[108.2043,29.3994],childNum:1},geometry:{type:"Polygon",coordinates:["@@„Jlb@nVV@bXb@ÆlL„Ul`nVKU¼VxkbW„nlUxlXX‚@°°WnnJ@VUn@J„k°L@VlV@nUJ„x@bVVVz@VnLla„KnalVlIUŽ„¼@nV@@anKUwVal@UlJœƒlI@akU@UWXKVI‚¯Uak@@KmkXWÜkXWykIWwXw@laXamkVUUym_XmlkkmmakwmIUKU@Wak@kaW@kI¯›WIk¦VŽƒUUƒmaUV@XkVUV±aUb¯b¯¥m@@ImJ—@mƒmL@kUKUkkJƒbV¦"],encodeOffsets:[[110408,29729]]}},{type:"Feature",id:"500235",properties:{name:"云阳县",cp:[108.8306,31.0089],childNum:1},geometry:{type:"Polygon",coordinates:["@@lb„LV„VVnblJVXXKWbXLVx„l@LmVXVVl‚nLWbnVmxXb°L@bVVkLVVVJn@@X‚‚œ_Wm„kUK@alUšKX@@xWL@VXLVKlLšKXLÆm@™mœa@ml@mU@UUmL@aVšUU¯„U°`lknLlw±@a@wmLVWaXU@KWU@ak@VaU@™IUVmUUwVmUIl¥UwƒUVWUaVUUKVIUa@UUUUJƒUUm™kƒ„nl@„@VWV@L¯aUb™Ulxƒ@@b@VULUx@VUxVV™U@bU@mxU„U@mUVŽklkkƒ@WxknlxK@amLƒKU„K"],encodeOffsets:[[111016,31742]]}},{type:"Feature",id:"500101",properties:{name:"万州区",cp:[108.3911,30.6958],childNum:1},geometry:{type:"Polygon",coordinates:["@@ĸĊVI„ƒ„n„aWWXlJVIn@lWš„V„našx°xk„l@²Ž‚LVƒ„LnK@b‚LkwlmXw„@lllkUnVV@VƒnwV@@ašVUUVw@UVwVK@U@a„@kwšVVa°b@KXU@U@ƒmk„ƒÇсaml™kUVmn@VULU˜m@kUVkUaƒwUWm@Uw¯„mKUUmVUUULUKU„W@XbWVkaWwkUU™ƒ™k@maUbmbVlk¦ƒxUVUIWVU„kJVVkL@UmJ™UUVU@lLUVU„lx„@@VbƒJ™U™L¯¤@Vƒ„"],encodeOffsets:[[110464,31551]]}},{type:"Feature",id:"500229",properties:{name:"城口县",cp:[108.7756,31.9098],childNum:1},geometry:{type:"Polygon",coordinates:["@@VK@w¯L@m@UÅV@ImVƒU™Vkaƒ@@aUk™J@LƒUUVUKmLmbÅVmUUwUaƒKUL@U™@ƒxJmbm@nVJ@X@VkV‚n™lƒLXx™@ƒb@bUVƒLU`UnƒbU@@ŽmVVX@JX@VLVVšklV—„‚`@bUL@V„LVKn@‚U@„UJkn@lmLmK@X@Jn@mb„nÞWVXnJ‚k„KČÑÆ@VK@knaÜmXlUČW°kôÇƁ@a@yÞ_VmƒUnU@K"],encodeOffsets:[[111893,32513]]}},{type:"Feature",id:"500116",properties:{name:"江津区",cp:[106.2158,28.9874],childNum:1},geometry:{type:"Polygon",coordinates:["@@„InWUUlU@LVašlX@°²lÒXxlK@Ul@@Un@UaVJ@I@W@UƒUUVUwVIUKUa‚UUVwn@Üx@XUlnn‚bœJ@¥VklKUUlk@ynU@kVƒUUVWnI@¥V£VWVIUKU@UVƒa@n@Vm@@nlUaVkUwƒJ@blLkLW@XWmXkmmLn™@m@U@UVm@™„UVUUlakUVa„ƒVkV@@wnaWUk@VwkƒlmVIkUUxmJ@U„™@KƒIkx±V@IUm@K@IUKkbWKUbn„m„@bmVnbmb@xkxUJ@ULW`@bX@WVXL@Vƒš¯„mk¯@UJ@VmLUaWnX@WJ@nkKkxW@UIV@@KkImmkK@UW@XaWIU@U‚ƒIkbWb„xXŽlLVbnV@bWlX@VxVLnl@nÆÞVÜ"],encodeOffsets:[[108585,30032]]}},{type:"Feature",id:"500240",properties:{name:"石柱土家族自治县",cp:[108.2813,30.1025],childNum:1},geometry:{type:"Polygon",coordinates:["@@„š@kl@š¼UbmVXJ@bV@nxVIVJULVVk@@LWbnJVU@bVbUJ@blLXnWV—@mbnV‚@V„„bn@VJVLnaVanbl@„šVšlVXxlbXUWaX@VƒUUVwUUVm@I@WmI@a„mlLœ™lK@alwnUV@kóVaƒÝk@UlbVK@™VU»VUUVWUƒ@U`ULkwm@@KmU@knKƒ»VkJkUmbƒLkbmK@UUyUU@aƒwm@@XXJ@VVLVVUbVnUJVX@K„„k`WXXJWXUbmW@bkL™Um`Xnƒb@JVL@LU@™°VVXKVnUxVLUbmJ"],encodeOffsets:[[110588,30769]]}},{type:"Feature",id:"500237",properties:{name:"巫山县",cp:[109.8853,31.1188],childNum:1},geometry:{type:"Polygon",coordinates:["@@kVƒU™bkKmbVxkLmKkllbV@@LXb„xlašLVšVV„KXXV@@bšVlK„V„@ln@¼°KXa„U@Ulw°JXalIUa„ÝWXW@kVU@ƒVUVWUUUamUw@aVamwn@VUUƒlLXWm£@wÇĉkKklmLUÒ¯ƒWn™@ğ±kwmaWm¼U@@LUV@V@XƒVUnVJ„LWš@‚XXWbĸºVzXJVXV@@VXlWn"],encodeOffsets:[[112399,31917]]}},{type:"Feature",id:"500102",properties:{name:"涪陵区",cp:[107.3364,29.6796],childNum:1},geometry:{type:"Polygon",coordinates:["@@nèVblĖVVnLšŽ„@šx‚V„n@nšJ@L„UVVX@lbUJV@@nn@VVVK@z„˜V@nzVJVUlmX@@_VVVbnaVal@@knW@wnaƒVK@aVI„J@£kUVW@‚wXUVJ„amƒ@Ikƒƒƒƒ_X¥ƒ@WwkKkwmŽ™šƒkUxƒnÅmm¥™WV@Um@UlVL@JU@@Xƒ@UVkKVk™KVk™Kkb@bmJVXU„VVUbU@@`W_UV¯b"],encodeOffsets:[[109508,30207]]}},{type:"Feature",id:"500230",properties:{name:"丰都县",cp:[107.8418,29.9048],childNum:1},geometry:{type:"Polygon",coordinates:["@@Þè@XUK@LlV@blbUJ@„„V@bnV‚@VVVXU@ƒlbXal@VXnKV@maXUރ@amk@aVKXV‚anbš£°mnIVaUKVwUmWLUUš¯V@@KUK@I„aWmn_šVlK@anXVaXWWIXWl_ƒƒ@LUWVIUmVaUUUK@UWI@Wn@VI@mkU@U¯Kƒl@ImVÅLƒwU¤óbUU@wWXkmm@LU@@VUIWVUL@JUnƒaƒx@Jn„ƒbUIWVx@ŽUXlV@¤ƒIUJ@bUL„Žmb@xmX@lk@UbmbUaUU@`W@kn"],encodeOffsets:[[110048,30713]]}},{type:"Feature",id:"500232",properties:{name:"武隆县",cp:[107.655,29.35],childNum:1},geometry:{type:"Polygon",coordinates:["@@l„„w„bVm@IVKXUVJ@UV@@KnnWlX@xVVôaV£„xÆKnUVm@UmIXm¯¯@WkWVwmkXƒlaUwV»ULmk_ƒVkK@ÅWa@aUU@mkaƒIƒb@‚n¼ƒnm‚_@mmK@UƒLUVVmI@aUJ@XWJ@U`UIkm±kk@@lULmUmKUnVšnlUVmI@VkVlx™bkIƒVmLUxkKUŽ‚Xš‚n¦Æn„mVw„lš™nlxlLXx„@W¦„`„„"],encodeOffsets:[[110262,30291]]}},{type:"Feature",id:"500119",properties:{name:"南川区",cp:[107.1716,29.1302],childNum:1},geometry:{type:"Polygon",coordinates:["@@VšUbVJVUn@VLX@WVXVVI@VUVWxU@mš@ĊX@@¼V°aVUX`@_V@VaUUVƒUWnI@alašLUlšLUllLVU„@@WV@@IUKVkn@@VlLVwnK„UlJšakwlU@UnJVUmkU™VmXa@wVK@UUw™@VƒVI@akƒ@alInwlKXUmaUW@wWLk™™KVak_ÇaUƒƒV@šXbƒLVxUlWIk@UK@V™@ƒkU@VbUVUlVnƒLUV@lVXmxkV@L@V@Vk@WbUwmL@JUI@xVxkx"],encodeOffsets:[[109463,29830]]}},{type:"Feature",id:"500241",properties:{name:"秀山土家族苗族自治县",cp:[109.0173,28.5205],childNum:1},geometry:{type:"Polygon",coordinates:["@@XlV@lzn@VŽnbÆbXKlL„U„ÒV@@llUnxll@zšŽ@LU@@V°b@Vn@š„l@VÑUƒnK@UšU@aUaƒkVm@K¯wƒklmnn„Ul`nI@almkIUwmWVkUaƒkkJmUUa@K@aU@@_m@@wUyVUUa@Umƒ@awl@Wka±„UkUykIWV™b@bUVk@›aU@UXU‚UIWakUWmUxUV@nUVWbšŽ@XXVVŽmXXŽ@VƒbVLkVWx"],encodeOffsets:[[111330,29183]]}},{type:"Feature",id:"500114",properties:{name:"黔江区",cp:[108.7207,29.4708],childNum:1},geometry:{type:"Polygon",coordinates:["@@VX@V@LV@VJUL@lVnnxlb@VXV‚XV@@W„@UIVK@kUKna@£VWUaVUUalIVJVIUW„_lm@bXKV@mn@J„UUw@KnIVll@VanLVmUkVKXLVKUIVamw@UaU_lw„KlwUWV_Ua@aUa@KUšwm›_›Ó@wU@™nkK@am@UkUKmXk`m@@I@K@I@mkVmIUxUJ@kUL@JVV™„lnklWnn`VzUVnlWbkb@WxXxlJXzWŽÛlWXnl@Ll@Vb°UJWLX@VlV@bkJ"],encodeOffsets:[[111106,30420]]}},{type:"Feature",id:"500117",properties:{name:"合川区",cp:[106.3257,30.108],childNum:1},geometry:{type:"Polygon",coordinates:["@@XKVXlK„ƒVL@UnV@aValXXK„U@WVwUaVU@IV@@aVW„L@U@anVV@@bVK@UVL@bnJWL@VnUnb˜@@JnIlVl‚@@bXIWbn@UKVLVKXLlaV@VVnK@bVL„m„IVƒ@KmknUUWVI@aVJ@_„WU_VmUwƒU@K™ƒVak@am¯mJU_UJUkU@WkIV`UI@JV@LmmU@@mƒbUzś™@„VK@nUKƒ„ƒb™akb@UWK@bkVVbV„Û@@`ƒXk@WŽ@n@lXL@bmb@VVJUn@JnUlnUlmX@`XLlbkJW@kzlb@`@b@b"],encodeOffsets:[[108529,31101]]}},{type:"Feature",id:"500222",properties:{name:"綦江县",cp:[106.6553,28.8171],childNum:1},geometry:{type:"Polygon",coordinates:["@@@¦‚@X„lVX@@UVKl„VUX@lanVlUVbXWVXVƒ„VVUnKVUlwUwU@UJ@nmVkUV™lwXam@VaUUUw@W@kk»mV@UmKkwVKVUU@@LUKVI@mV@XVWxnXVKUUUK@wWU@UUWnUlLXa‚mUI„am@wI@K@amIm‚UUkI@m‚akUkKWUUanƒ@wƒamLVxk@UVmUUL@Vm@kV@I@ak@@bWVXJlLVbVL@š@bn@@`Un„@WbUKULWVXbƒ@UVmbX„WVƒb@bVmxUKUƒV@šUn@V@V@nmšnKlnnWWXX@lKkK@a„IVxUlVb‚k@mn@@U@m„bVUV@VLUJUXU¤"],encodeOffsets:[[109137,29779]]}},{type:"Feature",id:"500233",properties:{name:"忠县",cp:[107.8967,30.3223],childNum:1},geometry:{type:"Polygon",coordinates:["@@VLÞĊ„U@Wš@¼V‚„@lk@w²mlšVUœ„llšVnI@VlKUUlIVƒXUVJVU„wl¥UkUKUIm@ƒaUƒ@mUna˜@XUWmkK@aVIUa@aUVmIXa@Kl@UUVKUIUJmwU@@aWInUVa™»k@@lƒ™¯n™¤mabWUUL@bnl@b݄WVnbU@mLUWk@Wbka@„WVUU@UmUmVkUULV„lVUx„l@L@VƒbÈÒlb"],encodeOffsets:[[110239,31146]]}},{type:"Feature",id:"500228",properties:{name:"梁平县",cp:[107.7429,30.6519],childNum:1},geometry:{type:"Polygon",coordinates:["@@XLV@VV@b°°nšƒnkb@bƒšnJWVXblIUVšxWnUJnVVLVU„JlUnLVK@UnUVJš²nKVbVKla@aXlJ„k„Klb„ƒ@U°£šKšV„IUa@ƒ@kwVƒVUkKV@VUkk›ƒUVk™±n@xklƒ@U@»™‚@XƒVÝĉUJnxWb@UX›KkVUbUKWUkVmkkLU`›b"],encodeOffsets:[[109980,31247]]}},{type:"Feature",id:"500113",properties:{name:"巴南区",cp:[106.7322,29.4214],childNum:1},geometry:{type:"Polygon",coordinates:["@@nxnVlJlUXLƒ¦@x@Vl@nKVVX@V_V@@KlVXU„@lKlxXIl@ÈĊ@Vl@n_VJlŽnVlnb„²VVVJVVmUUkĕUamçU@»W@@ĉn™V@XwVU@UUJWUXUW@UKm@UVUIVaU™UVmLUVƒUU„UWWXUakVmUkbW@UVkƒUL@VW@kUWƒ@mJUXVVU„@lmV@zklVVkLUl@¦›I"],encodeOffsets:[[108990,30061]]}},{type:"Feature",id:"500223",properties:{name:"潼南县",cp:[105.7764,30.1135],childNum:1},geometry:{type:"Polygon",coordinates:["@@@a@a@_kalyX@lIkaWK@_nWVkkmmV@IVmUI@Una@aWK@k@mkbWaknmJUk@mk@@kUal@Uaš@Wa@aXLlwUKlkkƒ@KmI@VUJ@Lk@@VUUmL@amJU£kKUaWakLmU@bVVUbnbWV@xkL@bUb‚xUxVbXJVbUVWIUVU@kLWxkKWV@n¯VUbU@@VVX@VmaUL@VUK@VVbn@lVnI‚@@lnLULm@Ub@Žl@na„@lK@XVVkJ@b@zl@@VnV@bVb@J@bnXV`lXXmVI@W@InbV@@aVKUblKVLUanLlmnLlK"],encodeOffsets:[[108529,31101]]}},{type:"Feature",id:"500118",properties:{name:"永川区",cp:[105.8643,29.2566],childNum:1},geometry:{type:"Polygon",coordinates:["@@@b܄nWVLX„lxV„VxXxlVn@@bVblK@a@UnLVJV@@UnLVU@VXaVKVXš@n`WUÿ@IUKlaUUUkWyUÛÅÝ@mmkUKUwW@Xk@amUUakKWƒwXaƒK@VVLklƒXVlkxV„UL@bm@Vxn`ƒIVxUVkLVšUšl@@lkXmmƒVUn@VV@Xb"],encodeOffsets:[[108192,30038]]}},{type:"Feature",id:"500231",properties:{name:"垫江县",cp:[107.4573,30.2454],childNum:1},geometry:{type:"Polygon",coordinates:["@@šĊ°¤nҘ¼œaV_lKnllUXVVLValUœLVW‚@XamwVIUKkaÇфa@U@KƒkVwkUUƒVKlVnU@aƒU@ƒVIka@akU@KVL@WÝçUV@Vmbů@L™KƒnnJW„ƒVkxlL@VX@VxmnXVWxUb@bkn"],encodeOffsets:[[109812,30961]]}},{type:"Feature",id:"500112",properties:{name:"渝北区",cp:[106.7212,29.8499],childNum:1},geometry:{type:"Polygon",coordinates:["@@@bVVXL‚a@lnbWn@L„@XVlK@VVLUVlbkLUKVVVL@VšnX‚VL@VV@UbVb@x@¦UxVb@bUJƒL@L„VVxlK@™nk@U@W„UVLlKXV„@VblU@UUKVU@wn@VJVanLlkX@VaVK™¯@a@U@U@ƒVaUK„kUUƒ±maUkm@UUkbm@@Vk@@JƒwU@Ub@I@JmwUL@aƒ@@KkVÇLkƒWkƒ@kUU@@xUVmKUnllUb"],encodeOffsets:[[109013,30381]]}},{type:"Feature",id:"500115",properties:{name:"长寿区",cp:[107.1606,29.9762],childNum:1},geometry:{type:"Polygon",coordinates:["@@VVšU„bX‚lX„¥l@XnVmlxUx„@@blVnnôĀlm@aVaXwWUnmUwW@@UkKlw„UXƒmI„mšL@KÆ°na@UUImyU@ƒ—@yULUUm@@mU@VIkaW@UUƒV@K™I@mƒmU™wƒ@™mKUnU‚UIƒlVLUb@„@V@V@bš°ULUbW@klmKUbUIm@@xUVVL"],encodeOffsets:[[109429,30747]]}},{type:"Feature",id:"500225",properties:{name:"大足县",cp:[105.7544,29.6136],childNum:1},geometry:{type:"Polygon",coordinates:["@@XUmaVaUU@anVlKXbValU@aV@@IXKš@@bV@VxVK@UXLlUšJXa@_‚@@aVK—ÅWVkwWaƒƒwUa@am@kUWLU@kWmX@ykI@W@UV@na@LlLV@UƒkwWƒUKmXX`mIVl@bXLWVkbkkƒx@`VXm@@J@U@UUKUxk@WbUIVl@VXLW„ƒJUkUlUImxXlmb@X@VUJUnVbšW@UV@@VVX@bnW@LVxUnlJUV@n„@VxVIn@l`„UVVVL"],encodeOffsets:[[108270,30578]]}},{type:"Feature",id:"500224",properties:{name:"铜梁县",cp:[106.0291,29.8059],childNum:1},geometry:{type:"Polygon",coordinates:["@@VblLV¤nI@bnKVV@Ul@@KVI@UnJ@Ll„klVLkxWK@bXb™@Vbk@Vb@ll@@nVlnIlmXblaXl@„W@_Ü@UƒUalU@aXL@Vlašb„a„ƒVL@mUL@ƒUUƒƒÇXUW›X_WaƒƒUƒ»m_™@UWULWb@UUVmK@VU@UImK@V@bkL„x‚„XblxXU˜ÆUL@b@@`Wb™IkVWK@VULUwU@@a™@WL@JU@@bkVUb"],encodeOffsets:[[108316,30527]]}},{type:"Feature",id:"500226",properties:{name:"荣昌县",cp:[105.5127,29.4708],childNum:1},geometry:{type:"Polygon",coordinates:["@@VI@U@WnaWknwVJVkVl„IXƒWK@UUkVJXal@VwVL@V@V@In@UW@_„wlllaXUWK@aUknJW_ۃ@aWaU@@UVm„UUaUImJVnÅUmVUm`kUUVWLnVU@VVmXƒK@„nxmŽULkx™ImJ@nU`@X@Vkn@`@nlV@nVJVaX„VLnK@bVV@nV@lbXWš@"],encodeOffsets:[[108012,30392]]}},{type:"Feature",id:"500227",properties:{name:"璧山县",cp:[106.2048,29.5807],childNum:1},geometry:{type:"Polygon",coordinates:["@@XzVlVVkbVL@JVĀXŽ‚¼V„„„XbW`XœWVȎ„„VVšŽVkV@@UXa@alK@IƒƒU@UKWUyUI@wVUUWVak@VUkƒW¹@WXI@yVIUK@kWwkѯ±W@™kUb@KkVVVmXƒJ"],encodeOffsets:[[108585,30032]]}},{type:"Feature",id:"500109",properties:{name:"北碚区",cp:[106.5674,29.8883],childNum:1},geometry:{type:"Polygon",coordinates:["@@X‚VLV@„„@JkL@bWb@VU@UlƜVy„a@nV@nn@KU@IVJU_lJXV@VlVIV`nIn°@b‚lUbš„„KVI@aUaVw@¥@wUaVaU@@UUKW™m@UUKUUVLlKkaVUUK@UkLWUƒ@@KXmma@kbWKUU@aUamLnÞ@VWLk@@Wm@ULU@@U™KUVWI"],encodeOffsets:[[108855,30449]]}},{type:"Feature",id:"500110",properties:{name:"万盛区",cp:[106.908,28.9325],childNum:1},geometry:{type:"Polygon",coordinates:["@@VIV@@wVJ@InKVxXal@@U@U@KlUnwUW@kVU„KUmVkUa@I@KW@@bk@@mƒU@m@k@a@aƒIUxmJk@ƒwULƒwkKmVVX@VXV@xVLVVULmWXwWUU@@nUJVL@KV@UVULlxnL@VnUl¼@l@XVxVVUbn@WbkxUšlVnU@m"],encodeOffsets:[[109452,29779]]}},{type:"Feature",id:"500107",properties:{name:"九龙坡区",cp:[106.3586,29.4049],childNum:1},geometry:{type:"Polygon",coordinates:["@@XK‚L@Vš@XbV@lW@UV@@VXIV@U™VKlL@KnnJ@VV@VU@I„@@mVUVWUUmL@V¯LUK@UV@UU@a@U@yU@WLUK@X@KUVmL@ƒ@aXI@w@ammVk@WÛwm@UxVVVbVLUJVxVU„V@V@X@JUIVbm@@Vk@@VkL@lVLUJ@zWJ@X"],encodeOffsets:[[108799,30241]]}},{type:"Feature",id:"500106",properties:{name:"沙坪坝区",cp:[106.3696,29.6191],childNum:1},geometry:{type:"Polygon",coordinates:["@@Xºl„UVl@UbVXUV@xVJVzXJVUšL@VV@VKn@@Xl@XK@UmÝnKVbVakkVm@k„ƒUK@UmIm@LkKULVšU@WJ@UU@@VkXU@Wa™@@UKWL"],encodeOffsets:[[108799,30241]]}},{type:"Feature",id:"500108",properties:{name:"南岸区",cp:[106.6663,29.5367],childNum:1},geometry:{type:"Polygon",coordinates:["@@VV„JVL@bUVVnl`XIlwXJlw°nnl‚IXW@UÇĉk@WJkwkLƒ@WVkU@LU@U`W@UXUV@n"],encodeOffsets:[[109092,30241]]}},{type:"Feature",id:"500105",properties:{name:"江北区",cp:[106.8311,29.6191],childNum:1},geometry:{type:"Polygon",coordinates:["@@nLVU@wV@lV„@Xll„ÈKlU@L„@@bVKnx@I@JVaV@„x@Il@@Un@laVVn@mkUIm`k@WXJmk¯mkxWIkxWJk_UmVUUKƒ@UU™@ƒ„@l"],encodeOffsets:[[109013,30319]]}},{type:"Feature",id:"500104",properties:{name:"大渡口区",cp:[106.4905,29.4214],childNum:1},geometry:{type:"Polygon",coordinates:["@@k@@U@w„¥WKkVkImUmwa@b@xWJ@b@„nKVU@L@WVLXKV@@z@V@bVVU@@VVL°K@U"],encodeOffsets:[[109080,30190]]}},{type:"Feature",id:"500111",properties:{name:"双桥区",cp:[105.7874,29.4928],childNum:1},geometry:{type:"Polygon",coordinates:["@@WwUwU@kK@KmbU@@V@XlJ@znWlXV@XK"],encodeOffsets:[[108372,30235]]}},{type:"Feature",id:"500103",properties:{name:"渝中区",cp:[106.5344,29.5477],childNum:1},geometry:{type:"Polygon",coordinates:["@@VLš@VV„@VL@aUKƒIUUƒ@@JUVU@"],encodeOffsets:[[109036,30257]]}}],UTF8Encoding:!0}}),i("echarts/util/mapData/geoJson/fu_jian_geo",[],function(){return{type:"FeatureCollection",features:[{type:"Feature",id:"3507",properties:{name:"南平市",cp:[118.136,27.2845],childNum:10},geometry:{type:"Polygon",coordinates:["@@@knyƒk@ƒKU¥šwV@nkƒWƒzUmk@@lKUa@aVI@UƒKUamKUUVaUI‚@Xƒ@UV@K±IUVVlUbUbUL@KWUXmWk@KkXmmkŃKUƒ™a@amUƒbkUkKWUnwUƒÇwV™UUƒÝUKV£U™@ƒnKWwXLVKm¥@wUXkmWk@ƒ@wX@lU„@šyVImaXwVƒƒ@kŽƒnU@mbk@mlUXƒmU@mV@n@bnW@bUIWJ—ImVUKWbUK@nkKƒaU@W_VUUmWmL@UU@™bUWUL@V@bmVUz@`mUUVVbXL@V™L@lmLUxmVamXkW@xWbU„VbUxkU±@ÅUmmkLUbW@@`kLknVlV@lbXxlVUXVV™ŽU„U@UbWŽkIWVUUUJkI@llbUxVL@V™VƒUU°ULUmWXUV@VULWb@™xm@UaVLVKUa@ƒw@V›bkmVambUUm@@VkK@„@b„xlxX@‚„n¤@Xƒ@@lkLWV@Žn„V„kb@bWJXLWx@nkxmm™bXn@VWVUn@VnJ@bVXl@„™VJXnWbX`lL„UlJVI@Žœ@VXV@Vl@bn@@Æmn@VšxXU@mVIlxšVššnI„l@nVJ‚aXI@mlU@aXkVm°klmnVV_naš°@V@xܦXK„V‚nnUlVXbVK‚LXKV@naV@@VVl@@lXblXšWnLlbVK²nš@@‚VLUnlV@lƒXxô°‚V@UnaUUlKXLVUVVUbVVlUnJVX„@VW@an@lb„@nl@VU@anƒšUVW@kƒaUm@InVVKVU@kUW@Uam@km@kVa@a@™nwšU@WlI@mVI@WXaW_nƒ@™nƒlkkW@U‚¥@kV@Uw@wUƒ@@IXK‚¥VIn@nU@`@Xl@VV„LnašW‚bVaUwnU„@VIšKlV"],encodeOffsets:[[122119,28086]]}},{type:"Feature",id:"3504",properties:{name:"三明市",cp:[117.5317,26.3013],childNum:11},geometry:{type:"Polygon",coordinates:["@@lL@Un@VVna‚bnUlœa@U‚x@„VbULUKVbn@šw‚@XaVK@UVUXWVnVKV¯„VšU@UUKVwka@klJVIVVXUlJXVaV@VƒšUUVWkUWwkaU@UklmlK@_X@ValKnnÆV²@lVVwUaVƒXa@wlXnW‚bnUVwnK@kšK@UWKUaVUnV@_VynU@a@UVKVXšaV@@VnKnXVV‚UX`V@„blL@mVLXaVLnU˜JXIVJ@amX@a@mnUV@„nVWnkl@naV@„ml„@@KmKUam@UU@ƒ@UlKU™Vk™U™K@aVaUwV™U¥UIkJ@wmI@‚mbkwkVW@UXƒKULU`™IVKUa@LƒkkVmUU@WlULUWÅU@I@ƒWW™nU@@w@a@ƒUam_XyVIVWkkƒ@mwVKXUV@nw˜VXkWƒÅ™U@ƒaƒU¯KUnƒK@ƒ¯šmUƒLXŽVLnWVbVbUVm@Ub¯¼W@amƒ`kb™amLUUUƒ™aUXV`@x@XmJ@n@L@xkJUU@kU@mWm@kUUwUUVWl@VUkIƒy@kkaVUUm™IWVXbWxU@k„mVkK@nWVX¦WxU@@bkx@VU@WŽk@™kUbmJUUmkUW@_kKWKƒ@knV¤kIUKWLUbV‚@Wbk@@VWL@VkI@lUXVxUVU@@mWIƒV@a¯nUaƒaUV@„ƒJ™b@bÞ°VbUš@X™aUVmL@‚VXblŽnV„°˜n@Vnx„@VUUUlK@InJVb@„Vlnn@V™L@VWJU„x@XlJUVVVl@LUUUJ@Lƒ„@lUL°¦k˜V„VnV@„xV„„l@blLnlšLVaXll@šnVUn@‚xn@nml°‚X@lb"],
+encodeOffsets:[[119858,27754]]}},{type:"Feature",id:"3508",properties:{name:"龙岩市",cp:[116.8066,25.2026],childNum:7},geometry:{type:"Polygon",coordinates:["@@ša„I@ƒVU„bVb°m@b„UXJ@nV@VUUwVW@klJ@UXK@Ul@Xa‚@UVaXKVLlJU£lm„@XLlL@`VXnlVVnIVašll@XV@@Ulw@aV@XwW¥XU@mlLnUlƒV@XwWaXUšJVnUVlb@l„zlJUVk@UXVVVxlVn@nXV@@lVVlI@w@K@mnI@W@wU_VWšbV„VVnKšbla„_n‚bX@°»Van@VUUaUamXUKW„K@a@Ukƒ@wWkXƒWW@wUU™Kw@_lyƒwUkU@@Uƒ@kamVmƒXašUVUka@Wk@»UUUVƒKkbWU™VUbk@mkƒxkƒƒKnIVUmW@kUKmXUmVaU@kU@m@KUWVkIWJ@ŽU@UI@wUUUa@KW»nU@mVkUmm@XwWU@ƒUUmL@ƒw@mnƒVUU@aWak@@amxU@UxULWVXbVLU`mbUImVU„ƒbn‚V@@bVn@bnVWxLmyUbƒIUKƒ@aƒVm™akbV‚UXW„UlKWbkV@„WLUlk@@nšbƒb@lkKmU@ƒUIWJkw¯UUVVxm@@XkbWx—›XKƒlUzWJkUUL@bmKkVƒ@@VUIUlWV@X„K@VkbWx°xUb@LUbk@@VWb@LXJ@VWXU@@bUVV„VVn@VVlLn„@l„@‚xk¦Vx@bVJXbƒn@JlnXxV@@„nJ@X@V@lmx„bUn@xVL@VVKlL@l„„nLVaVL@xkl@LƒxVl°š„X„WVX„Vl„œJWnxlJ"],encodeOffsets:[[119194,26657]]}},{type:"Feature",id:"3509",properties:{name:"宁德市",cp:[119.6521,26.9824],childNum:9},geometry:{type:"Polygon",coordinates:["@@@LVKVaVaUkVU²J@LVU„@@W‚VJUbVVnLVb„L@VUJ@bVbkL@Žl@Vn„y„XmlU@™xV¦„L@Ž„lmz@lnL@bVVšbVb@l„nšKVk„Vl¤@zXV@šl@XJVLVKnXVK‚VnU@wUm@šKUƒ@UlVlw@U@U@ƒUaUKlU@kXKlmXIWKXaVIVUVK@KU@@k„JVUnLVJUL@V‚IVa@VnLšKUnl`Vb„V„V@š‚Vbn@Vzn@lKnVlI„VVKUalkXJl@XXVWVLVUUmVU@Unm„£lK@Uk@WUXK@U@WVwVkšƒĠkĢÇ°aUÅUwmaţƒɱUÇa™w„±V¹XalKôx„@„UVaÜʓͿVóbÅLƒJm„¯Vk¦ƒŽk@mamXkKUƒUL›akbk@mV@LkJWb@Vk„mXk@UVmaUV@amLUKUamI@KUaU@WbU@UUUƒUIWJUkm@šƒw™Kk„VJm@kxǁVƒUK@mUVUkmlkkVm@amwƒLVWU@UbVLkšUbƒ@VƒmK@XaVWU_VJnwV@@kUmWakxƒ@kwWakIWxnbUJ™zƒ@kVW@@x@„XllnVW@xn¦ULWKXxmL@„VšU¤VL„ÞVVUšÈxV„mxXVlLlV„anV@bšbV„„LlÆnnlW@LXlWnXV"],encodeOffsets:[[121816,27816]]}},{type:"Feature",id:"3501",properties:{name:"福州市",cp:[119.4543,25.9222],childNum:9},geometry:{type:"Polygon",coordinates:["@@lxna@nJ@xlIVJV¦UšVxUb@bšLšVUlVškL@V@„VVn@Vb‚Ln‚@LU„lJXblx„@lwXbVn@lU@mxUIV`UXWb@‚nLU„„@Val™UKVaV@UX„Knx‚bn@lUkllnUVnV‚@VLU„È‚lwn@UIlƒšL„x‚™n@VlXIVJV„VVV@XaV@Vb@LnJVbVLnK@bVUnbVUl@nWlƒ@UXalI@KnUl@laœbVKV„lLnWnbl@„l¥°Unƒ„IÆKôa΀U„a@UUwÇWǓIUWUÅVkƨm@ƒ@£@KmLU¤ULˣJ™kUƒVǟUUķ@ĉVƒKUk@Ñ°wôǚç@īšé@Åţ¥mīÛkm¼Å@ƒVķVó°ō¦U°ƒn@bVJXVVL@bUŽƒakLmx@xmxXzW`XbWnXV@bWLÛ@™aƒ@ƒaXbWVkaÝwU@mlWKkLWWkLUKULW@kVmVUU݁UamV—¤›n@xUVUzkJV¦lJU„"],encodeOffsets:[[121253,26511]]}},{type:"Feature",id:"3506",properties:{name:"漳州市",cp:[117.5757,24.3732],childNum:10},geometry:{type:"Polygon",coordinates:["@@@bl@Xb@bVVUŽm„@n„x‚@nKVV@„XVWxn@VnUl@nmVX¼@LVbVV@xVJV@@XIlJXU‚V@Ln‚@lVV@UbVnnWVL@lnXUVmJ„Ll„„wnll@VašUXVla„LVUVV@¼Xl@lbUV™VWbn„nUlb„@@VV@„aVUšmlUašUny@kU@Wkk@WaUVk@@ammk@@U@UlU@aUa@wl@šmXLllnL‚U@anVnU@L@VVV@KlXnWVnVanUšw@w@wm›nÅ@wƒaUam@Uk„mUl@@a„a@U@¥škôK‚wȯ°w@ŻkwǕaK›ÑÛk@ĕōřċ£ĵƒUKW»kÅŻLU@Ulġw@¤Vz™VUbkKUbmLmlULU¼UxmbXl@bWVƒb@bUnV‚UšVbULU@@VkbVL@`U@WX@ŽXV@b°„@b¯š@¤@Xm@@b@`U„VVUL"],encodeOffsets:[[119712,24953]]}},{type:"Feature",id:"3505",properties:{name:"泉州市",cp:[118.3228,25.1147],childNum:9},geometry:{type:"Polygon",coordinates:["@@Vl„xkz@`‚xšLVV@xXXW„Xl@xl„@V@bnV°™@„„LVm°L„V„bV@ƚX„Wl—UmxU@WVULnx„@llUXUJWzn`Vb@„@b@xV@šmXX@„@JÆVVXVKXkV@nVlU„l@KVbULšJV_VK„LVWX@lUVƒkIU¥lIVyVU@wœm˜£nUVWU@aƒm@UmWw@UX@@am™VUn@@aUUlUVanaWUXWmUnkšK@VšUlVVUUwš@XLWWX™ma@knm‚bVb„VXbVL‚@XJlInlšL„w˜mXóšw@çV»ÇçŋaķƧóƅóKġ°nÅUķƑUÇW@—¯xÇ°öÆlV„n@llšaš@„Lšbƒ`™@™„VšXVƒVx@V@bULVJUk‚Ç@ƒ¼ƒXUKk@mmULkaWbk@ƒx@UkL@a@K@U@UmKmbU@kV@UmVUbUmmXkW@LUU@U@KmVmU@bVmKkkWK™nk@@xVb@bkV@V@Vl@nn@bl@VUXbl@XlV@@lmz™VVbkŽ™nUVƒb"],encodeOffsets:[[120398,25797]]}},{type:"Feature",id:"3503",properties:{name:"莆田市",cp:[119.0918,25.3455],childNum:2},geometry:{type:"Polygon",coordinates:["@@VbނVVnUlUX@VKVLlKXXlKXL‚‚nkV@ÞxlbXUWa„b„@šbÜ@XK@aWUXmWaX_Wynw@wnwlK„bV@aUKWUUI@a„mV¯Ŏ¥ô¯ĸU„UÆ@n»¯aƿé@ţ¯nĉĬÝK™óó@™ÑU¼@è™xWô—nƒx™KmkkJWI@UKWaƒUUaamn@lnbWšXXWK™@VxUVkU™V@U™LmlnVWXXVmbUbkVVV@bm@UVnš@bW@@VXx‚n@V„n@bV‚UX"],encodeOffsets:[[121388,26264]]}},{type:"Feature",id:"3502",properties:{name:"厦门市",cp:[118.1689,24.6478],childNum:1},geometry:{type:"Polygon",coordinates:["@@@VlUV@nanL@V@V@L@blK@V„wl@XalbVKnnl@VL„W„»È@lVUIVK@a@UUw„WUU™šƒš@„_™aƒK™@™bkkm@UƒkõŁxóL™l@¦@Vƒb@bk@VŽƒnVln@Vb„b@xmÆnœ@x@x™x"],encodeOffsets:[[120747,25465]]}}],UTF8Encoding:!0}}),i("echarts/util/mapData/geoJson/gan_su_geo",[],function(){return{type:"FeatureCollection",features:[{type:"Feature",id:"6209",properties:{name:"酒泉市",cp:[96.2622,40.4517],childNum:8},geometry:{type:"Polygon",coordinates:["@@ÇnÅaĉ@ƒU¯¥›UŹ‚ƒ£™WUýUU±JkkUw‚yÞIČxĊĕĊ¯š¥ÆUkţ™UÅÓ±¼™IUx¯UƒÒƑ‚ݐŰƒKÝnğ°ÅU@Žƒ@Vn@þš¼¯šWnŎ°XLWlnVnbWnƒVXxmbƒa—bóUƒlǕUUa™IUmlU™ƒš¥™kƒ¥ĉwkkƒÝɛa@¯™™U¯°mVƒkVnKlƒōÑÇÑU@kl™UġŽkUŻnUW™@š¯ƒk»šmWV£UKnUƒmUw‚w@ƒUIVaX™šwm»Èmmwn¯ċ™¯LĉŽUƒJUalka±Va@U‚k@ƒÛф¯WmnUaɝ¤Ûmƒn¯m±x@wóxÛLġÒUx¯VƒÈ™JUbóz݃ÇKĉ¯ōlÝUŎWl¯nťbÝ@¯ǩLġmV@ƯĢkÆm™ĊkVťLɃmÝXó°@„ĢbVŽóVݦɱ@Ƨaġ„UV„ĠÇÈV¼UVţwmbJÇwˋa™XmǯKkkmŽƒbXšm¼V¼ǬŚ²¤ôŰÆƴô̐ŤǪnɆӨ¼ɆLÆłUĊšxŎƞȘǔˎǬǪnƨŮǬö°»šġ„„ÞÜÆĸÒĊ„ǀbƾèôÈ@¼¯þŤĸƧ°VĀ¯b@lÈĊ‚šʠń̐„ȘKǀŽֲॗţÿǕý@ʊǓƨóÆÑǖŃôw@΋ʈƆÅÈVVĊV„óĊÅ@ÞƒĬV@Þīš@°Ž„V@ĸĢƒ°XτƜĠ@ÈaÜ¥Őƅ‚™nğóĕVġUůƿŋ—ĕƒa±V—UťÇğÑ"],encodeOffsets:[[101892,40821]]}},{type:"Feature",id:"6207",properties:{name:"张掖市",cp:[99.7998,38.7433],childNum:9},geometry:{type:"Polygon",coordinates:["@@ÈÒŎÒk„mLUŽlŽU„¯nV°šš@°ɜb„ÞĠaÈ»ĸl‚š„LVUÈ@Ċ@ýUm„@@ÆVĠ¯Þm„LƯޏƒ„Ñ°VVwšJ²»ÆԚVlŤÅV™¦ĉ°ĉĖċwÝJzVxll²IVVVþšX„¤źœV°¦„VĊ@ÆbÈmǔLĸĠ¯Ģaô¯ĸmÆÛUƒlÇĸk°XyĊUǔV„ǩnmV»ƒa@ýnK°n@l¥@»ż„Ċ¤m皃@£ČU@mƒmVkÞUƐ±²¹°‚ĠwÅƑŃU¯™›V¯aÈŁšƒÇ»™ġn_°xŎKlxœklx„@Þw‚„„@Æm²b‚DzLlkšWXať¯ĊaœÑšK±w@wƒUÅçV±Uk™@@„¯š¯xƒU™±±UU°ōxVxÅÔō°ó¯UÝ¦óbÝþƒ@ĉÈóUV‚Ux„„@VŽUVÝwÅÈǎóVkk¯JǐkmmL@„™KÇx@bkš™@U°ķ²ó`ƒš™šmn¯°ƒUwlÅkUƒ`™¦ɛô™Žķz@ŽÅnÇ°U¼¯KmVk²ƒJƒ¼ƏÞķôš¤ULƒ@mnğ`™šÇnUxÇ@Ûÿ™U@ƒƒkŻŽ@x@móJkŃ¥VŹĉóÒĉlċ°ķ„Uƽ܃@›x"],encodeOffsets:[[99720,40090]]}},{type:"Feature",id:"6230",properties:{name:"甘南藏族自治州",cp:[102.9199,34.6893],childNum:9},geometry:{type:"Polygon",coordinates:["@@ލš™nKlnšwX¥WÝXk˜xÞUnƒ°aĊVnUUKlÞĶWXnĠ¥ô»„™@nmVL@¤°™Vz„JšanU@aÆwna@k›ƒU¯šyX_›aĉb™ƒ„wƒéXkWwÅaš¯V¥mƒ¯UƒƒI@ƒš@„mšb°aÈçšUš¥@»‚knwɜƇ°I°ÑÈmVU™¯Xa@w‚W@wšV¯Č¥l¯Uwnm@k˜aUaóKkk@™Ça™b@ŽÒWa¯IÇxÛam¼™VUƒxÒl‚@zÝÒ¯bÝaĉVĉwDŽW›zJ™mJn²mܯUƒ¯ĉ@ġ¤Åb@²nšmlƒ@@Ž„„U„ƒLVxšV™„U¼Ålma™b@ƒ°™l@WIUƒ¯@mƒ™@™™ó„™„@U›zţyƒXÇU™ÇVUUVLkbWakVWmUbkkƒKUÆ»nƒ°Knk@aƒUVmšnk»l¯Ģ›lw@_kKVU@ƒnaƒ@lUk@¯¥mV@kmbW™b¯Åõa@mkU@kƒÇŽkU@›`@™óó—bl¼Uxƒn„¼šlVȄx@blVkVVnƒ`XÈġÈ@ǃK£ÝJmUUnUĖmlU„mKUn™VÅaUw›Uĉ`¯n¯wW¼nxVŽ™š@bĉnƒ‚kIċŘkXUŽ±Ò™xšÈ@ŽX°`l„œV˜IȯĊV„ƒšVVan@VašUVażVmšblkÈW„ƒWIXa„alL@wVb„„V„¦lL@lĠ™n҄U‚nk‚šL@ÆÞkšÞšK‚bñþW¦Û„ċVƒ„ULUºkÈlŎUxÆxÞUUxšÒ‚x„@XbšL@lÆ@„ÒlXVln@„bm¼ƒJ@„Ån„šƒx@bnšĠm„xVXmbÈè@ŽĊ£ČW˜w"],encodeOffsets:[[105210,36349]]}},{type:"Feature",id:"6206",properties:{name:"武威市",cp:[103.0188,38.1061],childNum:4},geometry:{type:"Polygon",coordinates:["@@±¯¥@klwU»ƒƒÞÝmwKm¯™™ç@™kVÇUL¯lVUKġ„ġm@a@U„@X£°l°LŎÇ@aōVÝw™ÔƒKUŽÅš„WJ¯lm@ÛVWa™@klĉUmaƒLUanaƒ™ƒk¯J„™™±KkXóÜÅxƒ²Ç‚@„„nUÒĊb°@™ÆkL™Ž™XÇÆ@xÝn—xWxţ„¯¤ƒI@Æn„ƒVV„VlU²Æè„V@x²x™L›ÒĉbŦ°Wb™Xklބš@l¤šXĊ`„wl@ĢÈŎm@bšnV‚Ubƒ„@șÆÛLƒèǚUÒŦlĸ™`°ĮʟÆǓbĉôϚĊƚĢnŤé΀ÑĸĀĊ¦„@@l°lœ¦Ȯ¦ɆÞĊKŤ™ĵĸů„»mŁyġ™ķŭ@Çɱȭ¯mƧUĊķnŁŻ»UaU™˜ƛɞÝƨů"],encodeOffsets:[[106336,38543]]}},{type:"Feature",id:"6212",properties:{name:"陇南市",cp:[105.304,33.5632],childNum:9},geometry:{type:"Polygon",coordinates:["@@šÈÞ@l`UmVƒ¼œŽ‚@nnÆwVlnVVa„LVƒÈ_‚ÿރ@n„a„xÆ@„lš_š@VxnK@llLnxmÈŎJnbUxšI°Žl@n¦‚lÈIlmX¥„k°@šk‚J„k²é˜@klaUaVaU@@ÝnIWnmnx‚k„ºÞ„„aV™°„V@nw‚KšxôbÞ£šVšU„bšþšLn»mƒVw„IšJ°Ž@„nb@°°I„ġUkÇKVƒ™™@ů»lƒ„Lnmƒ£@anK@Ñ܍n@»mL@£™yk„UUmbUÞÝ@kyÇbó»™XUxƒWVzb±mÝbXaƒwUamL¯»@wUKVwm¯ĵJ°ÅUWVk„KVk°wÈVšVуlUšƒ¥škmVamknƒUw¯¯ƒbċ¥ÅKƒk™Kk„™VċVk£kKVw‚Ñ„a@kóyÛ¯ÇVk™ów›š—Xō¥Ç¼ów™Ž¯U±‚k„ƒ@x›IĉÒÅVmÈnšÜ@n°„bUbÝV‚ŽUnnJ¯Į@‚m¦nV܃@„„L°JXb‚Ñ@šaÈb@šllôLVb—b@lmnVxk°ċ¦U°™Ž@xX@xWbš°UVÇn¯Ò¯Jɛƈmxl@¼"],encodeOffsets:[[106527,34943]]}},{type:"Feature",id:"6210",properties:{name:"庆阳市",cp:[107.5342,36.2],childNum:8},geometry:{type:"Polygon",coordinates:["@@kw‚ĉ—»VamƒƒV¯wƒIóVkl¯™Km™Vō¯ÝWkL@bÝKō¦@Ž™„@š™Lx›@b@l™a@km@@l¯nm@UaÅ@ƒ„óWUXm¥™nƒw`@UUxķôÇ°ğ¦@„VJš_n‚‚IVŽnalxkX„JWn¯šnVƒLšxl¤nnVbklVX@xnxmV@bUK@nm@@xƒV—°±aÅnƒŽkUWnUaƒx@m™n@ƒ¯LƒššmUĀlU@lV@blLUblxklkIÇx¯°‚UXbšaVŽUnšV@°‚LUlnbšX@`°nVmbnÆmV‚kLmK™¦UŽ@X„y@kl@U„°K@¼XbW„ƒš@b„WnLVa„VšƒVz@xlVČ¥lbUxލlV„U@nÆWôn²™VJlU„Ƨ„LnmÜLXa˜n@mœw@wlUlV²mšblwšVȃlLލ„±@lVnUlxnkma@mškšJ@kXV‚U@mn@š¼VXUƒVƒlLnmVbôaVnWV»ÈUl°È¯ÆIn›ÆU@kk»mKkÆġk¯@»mƒk—¯@óÇlÇ@—Vykkl™Uml¯Þ™@w"],encodeOffsets:[[111229,36383]]}},{type:"Feature",id:"6204",properties:{name:"白银市",cp:[104.8645,36.5076],childNum:6},geometry:{type:"Polygon",coordinates:["@@VKUȚl@šè°šnŽ‚LnxÝބ„V¼kx@l‚¦²°ĊóĠ„™Ċ»š@ÈxšaĊxlwÈVŤa@¯²aÇ£ƒJk£lƒnUÞ@°šô™@y„wl»lIX¥Ǫnw@ÑÞWla„ÅlL@ƒUwĉakƒl@ƒš¯mwna°J„V¯nUVÓÞÑm£²óWaUƒÇ@óÝUçV»ÈkkW@¯‚xV@XlK@wX@Vmm_@wÈݙKU¯ÇwVwÅK¯VƒkƒJ™™™XkWVaƒImŽ¯Uk„ÇlVšœĀV°mxóšk„@¼ó„WxĉÜU@Ub‚zÛJÇk@‚ÆnVlԙ@kŽ„x™ô@ĬWL¯ƒƒK@aÛImm™@ƒIUaƒ@™™UŽÇêU¤VÒÇx¯ÒV„šš™lk@Wbĉ¦UbkWV_‚y¯Lƒaó„kŽ@b@nmbkx„°"],encodeOffsets:[[106077,37885]]}},{type:"Feature",id:"6211",properties:{name:"定西市",cp:[104.5569,35.0848],childNum:7},geometry:{type:"Polygon",coordinates:["@@„a‚V²wVJV_@„LlanÅllŦçÜӚ_šlnƒWaôk„xUš„bmV@È°lèšnk°l¦„`@nnL‚@ÈlÜIyVaV@ĊÛXwôƒ@»lƒô™nwU¯›ÿU™Èklƒ°Vn„JUblXšWšš„I„l°U„ƒVƒš—@aVVVmnL@„lƒ„UUw‚mkƒš£„bV¥VUVwۂƒlaÇÝރmk£ƒLUy¯L@WlkKW_XaWƒ—mƒ„ġU@a™k™‚ƒakXkmVwmŹVƒU™b™WƒónmwnWW£„KÈnV¥ƒ¥„ƒÆ_k™lW„bU¯„V°aôbnaVwmaōInÇmwkK@kmLUw™@™`ƒkÅ@ƒwƒb@m݄ĀÇ`U„ƒKUbmUUkÅxmm@›„»nUVk_Ý@™Ç™¦™VÇè¯b™aƒn™@@„„JV„°Žn„U¦™°ÆbXxWl„êƒxš„ĊaœbW`™zV°œ„@lmbÅx@bmV™bƒI™`™¦@ÒUVUI@ƃL@bš¼@ššŽ@„šlmxnL„°ULƒŽƒÞğޛ°kLUŽƒL™°™xVŽ„n„KVƒl@šzX@"],encodeOffsets:[[106122,36794]]}},{type:"Feature",id:"6205",properties:{name:"天水市",cp:[105.6445,34.6289],childNum:6},geometry:{type:"Polygon",coordinates:["@@UyȍVƒVUnn@ƒVU„`UblzšJnk‚@Vb„KU„°l„wš„„W°„nkVŽ‚UÈlš£°V@n¥šV„kl™kU˜±U„ƒn™ƒlw¯UkwmKUlmkUmnkym@ō@U„mWÈU°l°anlJškUKlU„¯Èm@kmWV»kkÝLUWUx±b™@¯ma@ƒ¯™IƒJUxn„m¼™K™ýƒa™V™Uݤóa™wLmxU@¯ƒUšƒb݃ƒ¹lmwmnXŽmJ@ÞV@UbVbkblŽ—@±êƒlI™l¯@ƒlW¦knÇJkm¥k@¯™Jmbóa¯bƒUV°ƒakXlšÅ`ƒ„„¦U¦ÇmƒLX¤mXnxm‚„ôšXša„VźUnŽUxlnlW„bššl@bĢV„ƒ˜nX„WbX`lLXk@Ž°KVz„Kl¤„nÞ݂Èkb„‚܁"],encodeOffsets:[[108180,35984]]}},{type:"Feature",id:"6201",properties:{name:"兰州市",cp:[103.5901,36.3043],childNum:5},geometry:{type:"MultiPolygon",coordinates:[["@@lW²LššƒŽ°I„l„šmbVb„KnbĊVlkš@XbÜU@Žkn°‚XIƒÆ™V„LšÓÞxŎUlôƒ„b°KzU`lXVaĊ¥Xal@šk™™Uƒ°ÑÈwUтV£ÈéVšš„@Vb„Jš@nnÜJ@b„L°„XK@īšóƒwlš@kÓmUÅmK@mƒ_k¥l¯™mkçǯ@nUƒaV™ƒwólXbm„™k™`ÛÔťèkkmÆkbƒK@U`UI±xUƒbWlX„mbVbÅÒólkƒƒIWJkšƒ@ƒz—KŻ¼™@™xUx󎃄¯LWb@ŽÅ҄„±¦U`nbťĀUšVb„LšŽ„U"],["@@ƒ¯lwna@mōȯK¯kW¤ƒ@@V@bĢnĢƒVLU‚°k"]],encodeOffsets:[[[105188,37649]],[[106077,37885]]]}},{type:"Feature",id:"6208",properties:{name:"平凉市",cp:[107.0728,35.321],childNum:7},geometry:{type:"Polygon",coordinates:["@@ÆLUxÈxV°šLÇÞ@xn`Ü@X@nĊŽÆwnJmwUx‚aUkšw@V@w„aVmlLXÝl@X‚VĢmV°@nl@UUUWK@w„ÿVI²Òlmš@nÝĊýVV@nšJ°„„šUłm@kV¼nK›ĢȤôK„blnKllVk²aĠ¥È¯ĸóVw@V‚_„xšmn¦VWôX„ƒÆ@Vbn@°m@kn@@lšb@k‚aœ@‚wšK@™šƒ@UlKVaƒWX™W²¹lӄw@_°›n@@_lKōķW™@ŽmLUWƒn™»Û@›l_Ç`ƒÛmm°ÅbWb@š—VWbƒUUKDŽÅaġlmkUġlƒ»—Lƒl™Um¦@Ž¯U™¤ÇkVUml¯ƒƒX™ƒƒx¯kVƒƒLUa@ml™IkyVaƒ_UV@„mmUVU„ÇŽVzUxUVU¦ƒa™¤l„nVxƒVk„@ƒmKUnUU@b™˜U„ƒ„","@@@Žż@™mlkƒġk"],encodeOffsets:[[107877,36338],[108439,36265]]}},{type:"Feature",id:"6229",properties:{name:"临夏回族自治州",cp:[103.2715,35.5737],childNum:8},geometry:{type:"Polygon",coordinates:["@@š@ż»˜L„y„@l™XI„Jl„ôkÆÑUanaWƒXkW@™yk@U„ƒLƒmUšwš¯„KVlKœ¯Ġ݄݄VKƒ¯mKnw™k@ƒ™@™™»@a„K@ÅVJVU@њ¥š_Uy¯š@£UKmn@‚ƒšó¼ğ¦WmĵXݎkŽVLmVĉU¯bm„ÝV—wWlXÞW¦™xkmmL™šÝŽœ„±U@Vގ™š@„ÅÈW°X„ܼƨyUĮnŽWŽnXÝxUx°lVXJlôV"],encodeOffsets:[[105548,37075]]}},{type:"Feature",id:"6203",properties:{name:"金昌市",cp:[102.074,38.5126],childNum:2},geometry:{type:"Polygon",coordinates:["@@šĢȼ™„Çł°bœU°šV‚ƒń‚ÆǖŰnšÆ„ōĬǔaʠůĭš_kķÆ¥VÑș„çÜKšÅ@DŽƒVaU™m@aōnġÇk@ƒxĉ_™Wk£™@݃±KÈ±aÅnƒ@ƒÝxƒ@kw›lkwōL¯wm`"],encodeOffsets:[[103849,38970]]}},{type:"Feature",id:"6202",properties:{name:"嘉峪关市",cp:[98.1738,39.8035],childNum:1},geometry:{type:"Polygon",coordinates:["@@llĊx„¦šl™¦š„kVVnšJVbǖV„kôV˜a„bnaWw„UXmmamUXkWKō¯Xm°™™»ĉÇ@UVƒK™ķkǼğb"],encodeOffsets:[[100182,40664]]}}],UTF8Encoding:!0}}),i("echarts/util/mapData/geoJson/guang_dong_geo",[],function(){return{type:"FeatureCollection",features:[{type:"Feature",id:"4418",properties:{name:"清远市",cp:[112.9175,24.3292],childNum:8},geometry:{type:"Polygon",coordinates:["@@lǯkÿƒaV¯™VaÈU„¥ÆDŽIlxšmnb‚Uœxl™„Uôl°kš„„Wl„š@ô™VwUanUl@„xVkšaX¥‚kU»„aš¯±@kka@ƒUwmUkwƒJk™˜„±k@ƒ™™L@ÝWUwV݃—xÇU¯ŽÇX@m™Åƒ@@yĉ£VmUwȗ»ÇšUn„lUnWU¯`Ukƒ@@„™x„Ž@bÇxX¼ƒVVš¯LšĀk‚ÝLƒ„¯@VŽƒĀ¯lnĊW¦kVÇôkUDŽUK@ţ™U@a™™ó܃UU»ƒ@™¦k@Vx„KVb„n‚š@„Æ™„l„@xšƒbWšnlU„lxÈlV„È°Æ„@¼™„@x„šWxœŎ‚V„šK°„š¥ššnƒÆkŎ@ÈÑm™„K@¥šk@™ô@„nôV"],encodeOffsets:[[115707,25527]]}},{type:"Feature",id:"4402",properties:{name:"韶关市",cp:[113.7964,24.7028],childNum:8},geometry:{type:"Polygon",coordinates:["@@W™Xk±Ñ@ƒUw™mUwĉwlmn@Æwn£mkIš¥ÇÅ@¥šaƒón£nWWwš£V`Þ@šnVml@xô¼„IV¥ƒkUmkamUkVWwÛ»móƒ£UVÅKmn@x™@kbmm¯a™Xka›VĉaUb݃ƒ²—‚lš„IlxnVVx@„lb@l²™°ƒbV¼lW¦™bUlƒwk@mVVbUxóš™@kƒƒX™ƒ¯lókƒVkš›wVma™nkwƒJÅȃ¦ÇVUbšŽU°„blĀ°ŽkÈ@x™¦Æܙ°@„°„¦óa™VUôlUlbXl@nÜV„„nKlŽnIVÞ°Wš„°U@bnm@¥šIVƒ²Ulƒ°VnalzXyl_Vyƒ¦lƒœLlxš„@ŽÞbšKm„knVWanwƒÑVwČº˜@n_ÞV„aVŽÜIœl@„˜KȚ„VJ@aš£È@˜™@km™„aV¯W@_ƒa¯KmbkÇkLmwƒ@Å¥"],encodeOffsets:[[117147,25549]]}},{type:"Feature",id:"4408",properties:{name:"湛江市",cp:[110.3577,20.9894],childNum:6},geometry:{type:"Polygon",coordinates:["@@@ƒkXƒ™@a„UUċlk„Jƒk„™@wVJXUWk°W@nKnwlUlš²ƒ„blU@‚lI„l@„XbW„šxnm@lW@w„wU‚JX¯VU°`ŎóˋkÝÝkÅ@ÇmğÈřmw™aĵV›xUہ»°™ĠǷnýmóX¥ɅĵҏÇ@°²ĊUĖ±ĮU¤Ç°™Ā¯ɐnżUĊĊĬV@脎@ԃÒU¼l¤nƒĠb„êVĠ°Èy„zVaV‚nUÆL„ašbVl„wÆ@"],encodeOffsets:[[113040,22416]]}},{type:"Feature",id:"4414",properties:{name:"梅州市",cp:[116.1255,24.1534],childNum:8},geometry:{type:"Polygon",coordinates:["@@„‚nԚlW¼x‚¦@lœVl™lLkè„a@zš¤ƒĖ„¼UxlnUKUbÝlU¼lb@„Vx„V„klJÈwV¯š@ĠlÛĖšnƒbkšÆźÞƒUÈôklmšL„¥‚LœW˜„„™nKUkVa°V„x@IVV@x°bUk„a™a@mV@„@y„w‚L„ÑUwVUšV„‚„U‚bÞVVann‚@XwÇÿš¯²aVamkXaÆ»@»nw@¥›UXaƒkbWa¯KUw@¥m@kwmLU»UU™J@kmU@UUWUƒ@ƒyƒanwmçÛl¯ƒŽ¯UƒmKUmƒwVkmÝXbW@XWÝbƒk¯@±‚w@»U@W¯Å@ƒÇ¥UƒU@ƒƒ™IU™ƒakJƒĀ„ꃰšþƒXkamŽ@Žƒ_J°m‚@X"],encodeOffsets:[[118125,24419]]}},{type:"Feature",id:"4416",properties:{name:"河源市",cp:[114.917,23.9722],childNum:6},geometry:{type:"Polygon",coordinates:["@@°VlmX¹laĢÒlm„@„„šVš£‚‚@¦Ģklynn¼lW°z„W„„°VbÈV@lÆbnn‚JškX„šVÆašÅ„W@™ƒUUw@ƒkaV»ÞkVaVLkmVwƒ»„ĕ™£@yƒblçkKkš›U@k¥‚wX»™kmӃ@Wn¯‚I„`@nlb„W™ý„¯ƒé„ÿlI@™XUmWUwƒ@@UJU„Ç„mKUV@x™„ţk¯¯LWƒƒnUxK@ű»Vwa¯š@¤WX@ŽÛ¦@¤ÇIȼWxXŽƒ@Wx—w›ŽUnVbÅèmVa±²UWl@Žk„lȄ¤nôܼXxlUnVlbVn„lU¦ƒJó»@wnkmU™‚Ý@U_™¤XxmXm¤„ô™b@¦Èƙ¦lJn"],encodeOffsets:[[117057,25167]]}},{type:"Feature",id:"4412",properties:{name:"肇庆市",cp:[112.1265,23.5822],childNum:7},geometry:{type:"Polygon",coordinates:["@@l@š¥„@V¼„Vôۚš@bšV@ŤVLȃlVÈólUX¥mĉ°k„ÿU°@„ƒÞKl™ÿ°KU™„UW»Èw@aƒšw@ƒ„@nm@w›£kÓVUVn„Kš™k¥™£Vamƒ@nkKkbÆǫma—kmLU¥™UmƒÛwmVU™mUƒJ—ÇaUxÇIn`mb@Þ¯b@„nJ@nl„U‚V„lVU„L›W¯—Û`Ç_¯`mš¯I™bĉWċzx±J™xš¯ÆUƒƒ_k@™šƒJ@Umb„šXôlLš˜n¦@¼ĊxlUXŽ˜xUbL‚Ġ„UnVĊwlšUš„b@lW„X„‚m²˜@ÞWxXš‚Unb"],encodeOffsets:[[114627,24818]]}},{type:"Feature",id:"4413",properties:{name:"惠州市",cp:[114.6204,23.1647],childNum:4},geometry:{type:"Polygon",coordinates:["@@lbšW°bnnlaš@@wnmÆLVUkÇlƒ@Xk‚V²±‚bnUÆçUaVmœ˜xXw„@WXwÇ»ÈJ@£Ü¥@XW@£°™‚bUx²¼@ƂLVw„mX„°K°Ťlšƒ@wVUnLȃVƒVIky±wkƒKU¯ƒÅkƒ™XġÑۃlwUwlm@m„nKWašÅm›¯óÇmğb¯alĉUwķbmb@lÞÒVn—šmĀŹ@VŽƒbVŽUnmakLm`@xĉkklVÔVJVn—lV„UnmJmaLUbl‚™zmŽkL™a™‚ō@@zš‚V¦UŽV²kJ„nÜU@˜VXUŽL@„lJƒL@bݤUnVŽ—b@xVnlK²„Vx°V„xlI„lkVl²k¤@n"],encodeOffsets:[[116776,24492]]}},{type:"Feature",id:"4409",properties:{name:"茂名市",cp:[111.0059,22.0221],childNum:5},geometry:{type:"Polygon",coordinates:["@@‚LnÇlk„KnkÆL„ƒUm™ÈxlUœJló°n@ššanŽš„„a@ƒ˜@X_@mÝóóU@a™aU¯mL¯ƒƒkV¯™ÇVwkw@V±Ŏ£@™™@šalw±Vk@m„Åm¯™ÿŃƧIÇ`ōô¯_UVW°IV‚ƒx@xkX@Žmn™wXƒWa@ƒƒkkJ@kVƒa±„k™kVmxmL@‚¯XXlWVUI@xƒš„lƒIklVȃV@b„šlW@„@nUxVblVxkôlx™n„‚y„šnIƻư„aXwlK„bVnƒŽXb‚L„¤„k‚L—èƒVV¼ƒŽ²IlĠVX„ynz°KVx°@VlœLlblKœš"],encodeOffsets:[[113761,23237]]}},{type:"Feature",id:"4407",properties:{name:"江门市",cp:[112.6318,22.1484],childNum:5},geometry:{type:"Polygon",coordinates:["@@lUXx°JWnnƚXVš„W„X@„šºVLV¯nU‚Vnb™ô„x‚aXmW™XIšŽUb°xlK„l¯œK˜xXÞ°ŽšXÈ¥Ü@„ĉޏU™‚çš»nóƒVma—x‚¯UÅU¥Ý¯@ƒƒç@ș@çĉÅUmU籃ĉKÝxÝ_ÅJƒk¯»ó¯nmèkǀšŽWxœ¼mnUÜġ°@¦@ƒxƒLkŽÇaVnUxV„™šVlnIlbnÆÆKX¦"],encodeOffsets:[[114852,22928]]}},{type:"Feature",id:"4417",properties:{name:"阳江市",cp:[111.8298,22.0715],childNum:4},geometry:{type:"Polygon",coordinates:["@@°„nKV°šb@bôVÞô@n„VlÒôÆUnlnn@lmkmVkƒaÈkÆƄ™k¥‚ÅÞ»ÆKXkW¥ÅLmÅkamJUkš™UƒVwUmÈbl„K„w‚@@¥Ģ¯VÛnm›»Xw™lƿ™@kbW™—aʵ@óL›l¯ƽ@™ƒƒLn°ƒÆ@nUl‚²kx™b@‚š@šō¤U²@ŽlxUxšÈU°lŽ„"],encodeOffsets:[[114053,22782]]}},{type:"Feature",id:"4453",properties:{name:"云浮市",cp:[111.7859,22.8516],childNum:5},geometry:{type:"Polygon",coordinates:["@@@V„Iš™l@„`V„°Å™šw²I‚wČyĊXša°Jn™°_È`Ü_°˜œX‚KVƒkUUƒVkƒ@mmI@ƒ°a@Ýnam_ÈJVwlĉX@„šlUšómaUmVU°UK™¹@ƒƒWƒXU™™WmÅXm¯IWwkVWlÅLݼÆl¦ƒšÅÅÇl„bUllnknm@kmVmóÅkуUW`—@@„ƒb™ƒm™b@™¯mkô›IkVÇwnš„VƒÅKmlƒLklmȁKƒšVĊK°²„`n˜¤n„U„bWl„xVx™LUx@°nXm`VklVxmnnx"],encodeOffsets:[[114053,23873]]}},{type:"Feature",id:"4401",properties:{name:"广州市",cp:[113.5107,23.2196],childNum:13},geometry:{type:"Polygon",coordinates:["@@Ș¼VxUnĊ¤@z„@šÆ@nÈW°ÈV˜w„ŽUÞVxÞX@ŽšK„šl@ބVaĊbœU@ml£k±lUƒkkJƒw¯UUw±ƒkLUm@w˜aUVmÞ£@a„KkI@ƒ‚KVUW@—ÛVƒmlIU±VU¥™@yğzƧǃƒšƽĠřšÅnī±m@ƒ²¯lƒ°@nÝÆóUll@XnÝVU¦mVV°—„V¼™Jƒn„b@°mbn„ƒ‚@²¯‚¯wVwƒ@@nmxX¤¯L@ŽVLU„m@@l"],encodeOffsets:[[115673,24019]]}},{type:"Feature",id:"4415",properties:{name:"汕尾市",cp:[115.5762,23.0438],childNum:4},geometry:{type:"Polygon",coordinates:["@@@‚„@VxnXWV@š„bVššJ„„V@ÞÅU¥Ċxš£UWU‚wÅUU¥WVUkĊÇnkV`°LV™„wƒƒnU@™„ƒlbĊ¯„Vnalšš@@çkUÝ¥ġaó¯ÅaÅLŻÆUýmy¯ó@ĉÆó„ȯw™ÆXbmLƒ‚@nknVxkx܄ĢҚW„Æl„V°„Ll‚²xlz"],encodeOffsets:[[118193,23806]]}},{type:"Feature",id:"4452",properties:{name:"揭阳市",cp:[116.1255,23.313],childNum:5},geometry:{type:"Polygon",coordinates:["@@V„Ȧ„Æ@X°V@@¼‚x²°@„lÞaWXX@‚aÞWlnUŽ„xVnnL„‚°V„@k‚mĢl@„ak™@mlk°aXƒ±„nwm±™²¯JV²@ƒwW˜—_mƒa„V»ƒU@m¯ĉUф™šJl™„ašbVn„lĸLlƅÛDZwÝ@ĉxó@è™@k™mbƒUĉ°kaƒ„@šmV„„ƒxUš¯KU_mlĉÈVlXUV¦ÆVxVŽVX™¤ĉwV¦ÝÆ"],encodeOffsets:[[118384,24036]]}},{type:"Feature",id:"4404",properties:{name:"珠海市",cp:[113.7305,22.1155],childNum:1},geometry:{type:"Polygon",coordinates:["@@„è@„Þ°V¦VƁ°˜wnb„UÆ»nçƏ@nxܤ²llU°VnÈJސ°UôéšķUklƒô£VVˌKÞV°£n¥ƒ£ȗ™Ýy¯¯mÅkw¯bÇĔğ@Ýn¯ĊƒVğōŁŻƒķJ@Ț","@@X¯kmèVbnJ‚™"],encodeOffsets:[[115774,22602],[116325,22697]]}},{type:"Feature",id:"4406",properties:{name:"佛山市",cp:[112.8955,23.1097],childNum:1},geometry:{type:"Polygon",coordinates:["@@Èb˜Ž„InVVšnUÜxn„šVV¦nK˜lnbÅǬlalL@mn„Ubš¤l¦™šƒLUmUVlԜ¤@xmnVl°_XVVmƒkVmș@kn@VƒUK@°KW£nw@m„@Ux°x°@±„mƒna@¯ƒa„mšIU»˜ƒU¯nUV¥ÞUWmk@Vk¯™Ukn›ÑWݐƒĊÛ@Ǧ™W¯Wݗw›Lk°ƒkL¯wVa™WJXšWnbƒwkVƒ™W@kĊ"],encodeOffsets:[[115088,23316]]}},{type:"Feature",id:"4451",properties:{name:"潮州市",cp:[116.7847,23.8293],childNum:3},geometry:{type:"Polygon",coordinates:["@@°ŽÜknèmx„b„z„@V‚VX@VnV@lšIVVV¼nKlxn@@¦Vx°LXbla„ŽWbœV°£¯™W@nW@™‚aUñVœwWš»@¥ŤÅUÝǓÝóV@ńǎkUVmƒIUwÅVWÇX¹›—@W„¯bkl@nlšƒb@‚kġŽn@l"],encodeOffsets:[[119161,24306]]}},{type:"Feature",id:"4405",properties:{name:"汕头市",cp:[117.1692,23.3405],childNum:2},geometry:{type:"Polygon",coordinates:["@@‚@U±°Iš±n²mx²ƒ˜@œWºXÈÆUVx„JUnlVȍ@ŃôUǔÞVçn»VyĢÛVm@»kaÝUǼóšÛÈķKċ¥X„¥Wwğk™ƒ¯@ƒwķKƒkUm™aƒbkš™IƒšVÒ°Ċ@n„VU¼ƒ‚„bn˜`X—„x"],encodeOffsets:[[119251,24059]]}},{type:"Feature",id:"4403",properties:{name:"深圳市",cp:[114.5435,22.5439],childNum:1},geometry:{type:"Polygon",coordinates:["@@ÞLš„@xšbV„šVšK°™X°Kô¥Vw@anU„胐š‚lkĊl@wn_lKnbVmU„aUź@nÿ˜™UmÝѯUƒbk„@ÆkxŻ@™aÇX—wƒJƒƒ¯LķÝUĕ™ó™ĸóêWº@b²nmĬ™Æ"],encodeOffsets:[[116404,23265]]}},{type:"Feature",id:"4419",properties:{name:"东莞市",cp:[113.8953,22.901],childNum:1},geometry:{type:"Polygon",coordinates:["@@Ŏ@ššblKnšykVa‚KnbnIVmUƒ˜kUmUIUә„ƒçmV@bUxó¦¯LW‚¯š™L™UUƒ™a@w™ƒÝKğŚ™ƾ„„ƨÈĠy"],encodeOffsets:[[116573,23670]]}},{type:"Feature",id:"4420",properties:{name:"中山市",cp:[113.4229,22.478],childNum:1},geometry:{type:"Polygon",coordinates:["@@‚XœÒlmšV°ôÞÅ@m„¯°k„±‚@@aX¹¯VݏÇIUmV¯kk‚±Û£mw@‚Őmèżmô™¼èVš"],encodeOffsets:[[115887,23209]]}}],UTF8Encoding:!0}}),i("echarts/util/mapData/geoJson/guang_xi_geo",[],function(){return{type:"FeatureCollection",features:[{type:"Feature",id:"4510",properties:{name:"百色市",cp:[106.6003,23.9227],childNum:12},geometry:{type:"Polygon",coordinates:["@@lklWXL@VšI‚l@XnJn@VUUalk@mK@kny@UlU@a°™„ƒUU@VmaU@Ua@UWw@ƒn@KmLm@alkšmnI‚m@an@VIUamWÅImwU@@a@K„X@JVL„UVmUaVkUa@m„@@Ulmkk°ƒUaVUlKXbVwVIkaVmUk@KVk@a„aW¯m@w„¥laœX@KmaškVmnUl@nxVKšInU@yVaVIV@na°KlxX@@_lmXšUV`VIV™V@„n@lšbn@@WUkValK@²yl@„„VUV@@K°L@KU@@UVaXIVVV@naVkVa@K@UUK@UUa™LWa—w@m@K@UVVƒ@mVUUVKnL„mVL„K‚bVK@UUIk›mI@mUIVK@IUK@VkLƒ@WU@mU@WmUk@ƒI@VƒJk@WwX_@amK@UUWkIƒ„ƒK@LVb@mVmakL@J@bU@Ux@xƒbmI@`ƒIwm@UbmKUaUWa¯UkJWV@XƒJUU¯LUmV@ma@kkamKwƒLUUmWVkkm@aVUUkVKnVVUmXK@UW@km@Ukkm@@W@U™kUy@I@aUUmbƒ¤U@kUmL@bmJU@Ua@wkLWWkL@Uƒ@VaU@ƒLUakKWbkUWVkKkLVLUV@JVbƒz@Vƒ„@ƒVmUU@kVmK¯@VƒU_™VWakVmIUKUaU@@bml@XU@@V@LmKUV„mVUKƒƒKƒbkaUXƒKUL@x@V@l@„mxU¦„V@ŽlL@V@Ln@@VV@„nlKUaV@nLUbmJnL@VWLkbmV„@@L„W‚„XLlx„VVIVV@x@V²blUVm„LVUœK@kWWXUlV@Xl`„LX„l@@VšŽƒn@VnbVš@lVUVUÈVbš@@`UXU`l@@XUVm@kš@xmVknUJVXUbmKULmbx@VlJ@LVbkKUbVLÇUUVƒUVmU@VaUkUKƒVUwmLkUUVVlƒbka™XmwƒKUšVVU@@V±Uk@VWUUm»XamU™bƒKk™`ƒ„™U@UnWW_kKmbUVUVmnUV@„nJVUlšUbU@UV@n@JmI@VmbnVUXlx¯ŽkKmnVV@L@V™bkV™Umm™@Ub¯LmlUƒL@VWLkmkLmmn£WmnKU_mW™š™bnbmxƒ@U¦UJU„@Xmlk¦@‚mnUUm@@Jn@lV„ÔVJnIVW„I@a„ƒÆK@I@aVK„IlŽÞnnl@nl`nbÆX²l@xV„@llbVn²ŽVVl@nn„V@IlW@Un@@kVa°KšnÈmVaVXUlaVƒÈU„VlwôUlynIVašan@lVXb‚Iš@n¥la@Kš_n‚@bÆx@XnJV„nKVz@`VXVšU`@bƒ¦UV@VšIlx„UnV‚K„XÈbšVllšbVbnVn@"],encodeOffsets:[[109126,25684]]}},{type:"Feature",id:"4512",properties:{name:"河池市",cp:[107.8638,24.5819],childNum:11},geometry:{type:"Polygon",coordinates:["@@lLVl„bVV@nXVlI@JVX„mšn„W°b„IVV@‚ln„@nalVUb„nW‚@kVkÒlbVKn²°bUŽlV²@˜X@`nb„aUI@ƒ°wlU@aXJVI@aVK@wUamIXm‚@XUV@@bV@Vm„ImnUUwVaVKXU‚nVK@akƒVwV@nL@UV`n@@X‚lnIUJl@X¦˜V@aUIVm@anƒV@UwnL@VlbVL@KVVXUWƒ„wUUVUka@UVJnUlbnalbVVn@°„„LV`Þ@šXVxV@@bVlUVVbXnWlXnmlš@XXWVXJmbUI@V„llUVkn@@VWV@Vnb„@VXUJVnn`lLVk„a„»lVšLnw@WV@lInw@WnU@U@m‚knUVó„K‚wUmUXUƒU@@wVJVIl@XKVVVbVI„J@Un@lŽVLnm„b@U@Ul@nUš°VUVJnnVJV@„@mVU@ƒ@wkUVwkKWk™yUUkU@alkÈ@lJ@x„Ilƒ@UUWVkUw@Kn@@kmaƒVUl™UUL™ÇƒUUKl@UUmL@aXU@mlUUwmKkUUVKVUƒaƒKUnK@U@Vl@XUWU„KlwX@šb@K‚@XkV@UwWJka@aUwmV@U™@@U@wUm@»kLWVkIWŽXnmV@VkbmKƒLUbk™Va@aƒa@@aVU@aVak£@ƒ±UkVU¯V™UUƒJVƒUIƒ@kxmUmWUbL›w@K@aU@@aVU@Kma@aka@_VWkk@UWVUKULWKULUš@KUnƒwVaUKƒxU@UmaƒL—m@kVmVa@UkƒmI@ƒ@KmIkxU@@K™U@mmakI@VƒLkmWkkJ™_U‚@V@L@n˜xXbšKVb@VVL@V@LUbUlmbU@UUWJUb@VV@@L¯K@LU@UVƒƒk@±z@‚kLUbVl@Xm@™akm@ƒU@UšUJU_™VWŽkn@`W@kw¯LmbU@UJUb@zmV™JULmwk@mVUn™lnb@L›Wkbƒ¦@x°nXŽƒb@bUl@LVlUnlbUJUxWakLUVVb¯„llkn@Vƒ@@nVbUlVbUnƒVUK@IƒW@L@bV@nxÆJnXVbUJm@@bnmJ™nkl@b‚nnK@L„m‚@Xx@VVbV@nb@UVVƒ„¯š@bkV@Vmz@lnLl@kŽVbUVm@mI@Wk™J@UWKkXkl"],encodeOffsets:[[109126,25684]]}},{type:"Feature",id:"4503",properties:{name:"桂林市",cp:[110.5554,25.318],childNum:13},geometry:{type:"Polygon",coordinates:["@@nU@J‚X@`XLm¦Vb`lšVXXWš@VblČnVšŽlanLnmVLšK@_Vaƒ¥@kUa„@VmVb„aV@XVVzlVVK@knKVmX£VKšLlbnš@b@llL@xĊôXaV@°È@¤„bn„V@@Wl_„V„U@W„nVamw„wVbn@„K‚VšLX@VmVUxlV@šnVV_nK@m‚I@Wn@@IšUĊ@@wVWX@@I°VVm@wmU@m@IUƒV™kƒlkUmmkÅV@@aV@@Wn_UKla@kšaV„šlVanb@k„@@KlVn@@aV@nIWW™UUaVU@™kKmwU@UImKk@UU@w@W@‚™k@™UkWƒ@mk_W@Ua@a™ƒƒ@—¯ƒmV£@mƒUUam@—kWakƒVama@UUm@nw@alaUmnUlVlIœV‚™šLVyk£Vm@k@UUJkƒK@kmKUw™KkWK@UXImyVwnI@m‚ƒkUlkUKkUVmƒw@kkJWUÈm@_k@@aƒaW@U„UJUwU@@IWKkƒmUUV@nVl@bVb@bU‚UXƒakw@ƒWUkbkKƒbm@™xUlkLm@@wmKUX@‚™UaVW™XVmU@@UUUƒxkmWXkKkUWaUaUb™L@`UL@LV`UXmK@VmakLVbkL‚xUJUIVbUVVb¯KƒV@Xnl@lVXbmÒnV@L@VWKkVUIWJkIƒŽUamUUbm@U„kU@JUbW@X„WxUam@kbVVUnUJmUUV@bƒU@UUV™@ƒVk@ƒbƒmULV¦U@V„U`VLUL@xVbn@UJ@nWJXXVŽVV@bkxVbUx‚Lšš@x„¦@šU‚lXUVVlULV@@šnŽU„ƒb@xl„nJVnlVknUlVUbmŽU@ƒbVš„x"],encodeOffsets:[[112399,26500]]}},{type:"Feature",id:"4501",properties:{name:"南宁市",cp:[108.479,23.1152],childNum:7},geometry:{type:"Polygon",coordinates:["@@lKnbnU‚@Ua@K„L„ƒlJVX@VnL@bW`Xxl@„I@U„Jl@nV@X‚V@nXV„@lK@UVL@JULVJ@nnJlœVJ@VULaƒLUKƒnmKULVVUŽ@nU„š`lIXlln„K@UlJnb@nšV@LV@lwnJ@L@„nJl„@VUbUn@l˜n„KnbVŽV@„wVLUb„xVm@LV™VKXLVKVLXU@VllUX@`lb@bnb‚L@ŽUV@bV@@b@Lœx‚KVanXVƒUUmVUUUaVUky‚UUa„ImK@mUUVUkKU_@W@UVVVIUW„UVaVU@UUKnƒ@k@al@ll@bnL@b„VUV˜X@Vœ@@b‚Knblmn@V_@aUalL@a@akK@kVKUKlwUUnV¥VmU_VWVIVaX@Va„alńK@LVJnalL@LnK„wlVUw‚mX@VXšƒlLUVnblaUmVUVwXU@Wm¯Va@ÞKnw@w™mšk„»‚UVW²a@_mW@U@I„y„LVUUKW@@™„LX@VUV@@yVU@UV@nwUUmJka@IU@ƒmƒVkaW@UwUX@`ƒ@kLWUk@mƒkUUm@k‚UUWkUƒkWxk@@VƒK@nV@UVaƒUUJmIkVƒ@UamLUbkVmamLka™@ƒ‚kmL¯WI@wJmwƒx@akU@aUKmbkaW_nW@_U@Wm@a@wkwUKmƒk@ƒbkb›w@mKUkkU@J@bW@kVWz@bVUa›VUx@„ULkJWbXVVXƒ`@œmJUVU@@Lk@WbU@UJlnXlm„Vx@Ln@‚b@K„LX„WJUUW@kƒaUVUbmV@nnV@n@lVLƒVmLX‚mXkV±@kxÅL›šUbJWIÅJ@I‚mXalkUamKkškL±aVwKƒUU@mÞnbWJX„m„@lbmKULWUUVkaƒbnn@Vl@VVV@VƒbVbnLWLXJWxXLV@@VV"],encodeOffsets:[[109958,23806]]}},{type:"Feature",id:"4502",properties:{name:"柳州市",cp:[109.3799,24.9774],childNum:7},geometry:{type:"Polygon",coordinates:["@@ƒwU™„aV@nVaUVklmkUUmmIkƒ@w„aVƒm@™U@VKUkVUkWV@™ƒ¥@w™™KVwUalw@aUUUWWXI@mVIm@Ua@wVKUKV_UƒV@U¥VK„n„al@„Uš@VU@V„V@aVUnVVIVmUUlan@VbXwWƒX@Va@IlVVƒn@VanVVb„lJXIVJlUXL@U@KmUnÑWakU@mkƒJUI@mk™@wUmmUV@JXaWIXWmaUIƒJƒkk@W„nJ@„ƒaUak@›kkJ@kUKU_ƒ@myUóWUkm¥kUmL@KUKm@k_UmVa@ƒk@@UmU@mm_—JWIUVUŽWLUlbVUJÇVUIVwƒKUVk@mU@n@lUL@Km@@l@L™VƒzJmUU¤m@UbV²U`U@@¼Vn@x@Vš@@VnUVx@blbXIVxU@Wl@@L™aW@kxƒLXVWVk@@U@VmLVŽ„L„bUVULVV‚lnLVxkV@nWV@bnKVVk@VL„VšÈVKšVVk„Unb@lm@@LVxUlVX@Vk„ƒJ@wkIÇ@kl@blVVVšzXllLUxlV@x@„UV@nƒ‚U@UImmUIUV™¯mVk@@V@VƒamnUKkm@@VƒIUJUaUUWLk@UJUI@xV@V„VWVnxƒLUômVV„@VkVVVUnV@UVkL@VVV@bVxla@bkXVJVn„`nU@bƒb@bVL@VnJ@„l@šV„aU@@_lW@UUU@Unƒlll@XLl@@UX@°bVWVanLlknVV@VVX@VVƒnUŽVLmbXJ@nllXX@`VXƒlmaXVWk@Wkƒw—J@„VL@J‚bnU@bn@@bVKUnVJVIVVVL²a@bV@@Vl@nUVakalmš„UL@VUL@V‚a@mXl@nK@UlK„L@Vl@@nkllb@š„Vnn@‚šnV„™V°l„šVInwlKXxlU°Žn@@ƒ‚I@UnVlakUJWkUK@anUWK@_ÞJ@U"],encodeOffsets:[[112399,26500]]}},{type:"Feature",id:"4514",properties:{name:"崇左市",cp:[107.3364,22.4725],childNum:7},geometry:{type:"Polygon",coordinates:["@@@JVzšl@V@Xn@ll@VlnX@@VWLnŽUVmUULVlUV@blnUlnXVV„K‚xnLlb@lnbU@Vn°KVV„I@WXUlI°VXb‚VVbnLVan@‚x„J@_nJ„a@wVwV@@a@IU@UU@WKXwWIXKmKUa„a@U‚UUUk@@Umm„albVUXVVKnL‚a@knƒWƒXImanÝV@„V‚LUx²blKl™nLVbklWbn@JÆIXJ‚IVaœ™ÆKlw²@lUnWWnK„UUK@k@mmU@mnUVaVU„b@lVXVXIWƒƒK@Lam@@KUwnƒWkkmVIV@Xal@@KV@VUnI@›„_UWWUkam@kkm@ka@mƒk@wkJWIUU@WXkW™XkWWLUUƒ@UakLƒW™XV±VIVWUU@anUWaUK@IU@Vak@@UUKWaƒ@m@ak@@wUkla@mUaUklakwVƒ¯¯@WWUkLkKmaƒ™kLUnV`UxWX@Jkn@bmlƒakkk@ƒb@l¯bm„ƒbJ›b@VXn„bVV@„ƒbƒJUkkKWVU@mœÛVUUW@UVUJWXkVkKmUL@WW@U„Vl@XXKW„XJ@XVlmbUxnnm@UlVnV@XVm¦VJb@šmLkKÇbXblVkn@l@bWnX`V@@IVV@ŽV„V°n@@_naÆVVbUVVbUJnzlVUl‚XkV@Vlx@X„VnxƒbƒKUK@b¯VVUV™L"],encodeOffsets:[[109227,23440]]}},{type:"Feature",id:"4513",properties:{name:"来宾市",cp:[109.7095,23.8403],childNum:6},geometry:{type:"Polygon",coordinates:["@@nVlw„@VJU„„IVVUšV°lU²V@„l¤Ub@bUV@b‚@„b@bUblšVa„KnLla@UnUWmXlJXUlKV@V_U±Van@V£nV‚I„yšU@K@kn@@LVK@k@mnVl@VU„LUxVJÈUVIU‚aVkXKVVUXJ˜In`@nnV@Vl@@„UbVnl`n@VL@LnKlVn¦VlôXV‚nz„@V`VL@llIœll@Vb„b@ƒmIXƒl@„l„IVJnbWXXJWb@IU‚nVVn@xlš@nVJ„I@W„U°LUaVUUaVJVIwlKUalKnb@UnLVWU_@KVK@_šKVa„@VKU¯VLVKn@la„aUkU@maVU„J@k™@Um@XmbkyVaUIUU@KV@laVn@KXKWUkUk@ƒaW™UUVw@aXKmƒVaUUkšmIƒlUU@wUa™xUmmU™¯™U@WƒLUmVIUym@UVmUa@wmw@çm@aWLU„™JUIUamKmL@™aƒx¯¥ƒkU¥U@±„k„UVmKU_mJUbkKm„ƒLÅǙ_@WWUXUmaVUkK™„UWW@nVxkUƒxmL@KkKmbUI@KƒLkƃbUbW@UbUJUXV`UnU¦mŽVVkxVLUL@llL@b@bkKVb@bU`m@knmaL@a›@@U—WVUƒU@amK@akkk@@b@lm„VL@VUVUbƒVVXUJUU@V@XV`lLUVVV@nnLƒJVbVlzUVVbVVnUVVU„"],encodeOffsets:[[111083,24599]]}},{type:"Feature",id:"4509",properties:{name:"玉林市",cp:[110.2148,22.3792],childNum:6},geometry:{type:"Polygon",coordinates:["@@VJUXVVXlWX@V™xVnX@@`ššULWŽUXÅbWK@mULUUmJ@n¯b@l@VULVx„x‚XU`VXXJVI„V@nm`@nUŽVXn@lWVn@b@Jn@nU@Lm`@Xn@WJƒ¦U@@VnL„lV@@Xl`nIlJnkVL„w@KVK@UšaVL@bVKX™lUUKVK@I„VšL„a@U@WšLUlVL@bU@@blb@VlbUxVbXUVJ@xVL„U„lV@VU„bVLnKl„XJ@L‚b@an@VanL@`VLšKV_UWl@U_„a@WVInlVUUUVm@I@W@wVakIWm@U@ƒXwlaVbnI@ƒm»Va@aXaVLšU„»@aVa@k™KkL@KmU@WƒzUK@wU@VWUUVUUKUa@mKmbUK@_nWVaUkVaUaVUVLXKVƒVUVmVI@UkKkLm`UkW@UwWW_„UaU@WakXmK@xUXƒJkƒUUWUk@Wl—mJ@km@@aUKzmyVk„a@kkWVUU¯lmU@@w‚kkmV@Vk@mÅIƒ‚Ukƒaƒ@Ub@m@UUU`mUbWaWmb™X™XKWIXUWm@љ@y@UkIUJUUWLUWƒL@UkVUxW@kaWbKWnXxW¦n„m`XLVlUbVbUx™I@JmLUKUb@VW@@bkL@b@VlU@xkš@L@lƒxXxWXX°V@VVVbUVV@UVVbULVnVJUb²b‚aUb@VVVVInlV@VnXaVUšlI„VUb"],encodeOffsets:[[112478,22872]]}},{type:"Feature",id:"4504",properties:{name:"梧州市",cp:[110.9949,23.5052],childNum:6},geometry:{type:"Polygon",coordinates:["@@VbXblVlLXWln„wVV@VV@UnšWUXVbš‚@VWXa@kVK„UaVaVkšUlyX@Vaƒ—VmUwUaVU@UÈymI@aU°@š™nWV@VaVaw@IV@VmnLVK@kmmna@™„™VbVI@aV@XbW`U„„LUVVx„@VbUV@bl@VLXblJn¦lL„°°@n™@K@UlLnK„a°LWbnJ„¦UÒV„UllLlVnKnbWnn„V`„w‚@@Xa±™n™l@XKV_„WVkVa@kVyUa@wU£UW@UIVW‚@@a—wWaX_WKkVmUULmak@UJUI@±m»™—k@m»VyUIm™nmmwnkUmVaVIUn_mW@»Vk„@VwkmmUXa@IƒaVm—mƒ@Wm_U@mIUWóLmUk@laXmmkUK@UmKULUUmWULƒ@VakU™@Ub@bƒ¼™VUKWb@bUbn¼@„mJUakbWx@„@VXnlJUb@x@X@JUnVVUVmkUJ@XƒbV`k@VXU`™LUK@_mKUbm@@b@„U`@nlV@b„UnbVbn@@`VbUbVV¯bm@@mJXb@bVnUllVXUlbUl@LU¦VVmŽkLVb@b™l@V@XlK@V@nUJUz„°mŽwmLmlXbWVU@UUUlƒIU@VVmV@@¦‚bXbWxX„WlXVWL@LUmkbU@@LVVVJUblzna@WVnš@@lƒIUVnbV@Vlƒbkbm@ULUKV°ULƒ@"],encodeOffsets:[[112973,24863]]}},{type:"Feature",id:"4511",properties:{name:"贺州市",cp:[111.3135,24.4006],childNum:4},geometry:{type:"Polygon",coordinates:["@@nL@xn@lKVkšwn@„alLlaXV@„lx„bVWV@aUa@aUk@mVUnVl„XL@JV@VxVIVƒX@„b@bl@@`ÇnXVlI@l„xUnlVVLkllV„@nmJUxnzWJ@VXLlŽšLVxnL@l„LlŽVI@V@lUnl¤Uz™Kš@„Vl@š„L‚l„Lnš‚b@VnVVU@k„a‚Knxn@VkVJ@ńUlakmWIUaVanm@_UK@UVWUa@klXam™U@Vmƒ™VIXW„@lUVknVlKVLXŽVXšW@b@VlšnnVL@KXL‚Kn@lb@UnW°@Va„X„WVb°aVa@I¯aUkUaVKVwƒaXk@a„a‚™@wkm@alanUVw@alK@Umkw@UƒaUmU@WXUaUK@UW@UaVWI@¥Xa@w@WWšVƒXwƒU@mKUXUWVU@a¯kl@akU@UULmK¯VUVW@U_m`U@@xVbUz@lUbUlƒXU`WLk@mš²šWb@Ž@ƒxU_mƒXmmamLkUkKVkUƒVу¥mIXa¯KƒbmLkK@V@Lmš¯@ƒ¯kKm¥kIWaUKk@@aVUUaƒ@UwVUƒKVƒX_WaU@@bUJUaƒš@šmbnn@lULmKUnU@@J‚xUbUbU@mX™š¯@VŽ@bnJÇz@VUVVbVxUn„˜UbW@kz™VUlUbVbƒŽUL@lWb"],encodeOffsets:[[113220,24947]]}},{type:"Feature",id:"4507",properties:{name:"钦州市",cp:[109.0283,22.0935],childNum:3},geometry:{type:"Polygon",coordinates:["@@@IlVVlnL‚@œxla„al@n„VLlx@x@bXnV@@`mXX`lbnaVL@blV@b„wnx‚I@xXJ°nK‚l„š@lbnKnblUVanKVb„@lUnJVI„VUb@V‚U@m„L@Ul@Xw„llVVXV@lVnlVn„l@XVlK„@@_VWVxX@lb„U„nV@@JlbnIlmnVV@UwVK@U@k°a@mnIVVVK@nXLÆaVWXVK™™@_W@Umšw@UXWWkUUVWUIVaƒUkJ™UVWbUmU@mkUJUU@UVab±aVaUIUmVKUaVUU@VUUaUUU@W¯XWWw„w@k@Kl™@wkV@U@alK@aX@@UmIUWUIƒ@mmkXU`U_WJUnUJmUk@@amLU@UVW@UkU@@VƒbUWVUk@@wmKkUWLUWX@JmIƒlUkkKWKkLWU@UKWa@bU@@a@_UKWƒUUUmJmw@nV_@ġğKóLmbU¼VÆ@xUXƒ@Um@wklVnUn›lkaUV@„lV²WVklWXXbWlkVkIm`UUƒLƒUU@UWƒx@XU@@lWLU@kbUbV`UXllUV@bmb@LnKVbULm‚šnVVIV`X@"],encodeOffsets:[[110881,22742]]}},{type:"Feature",id:"4508",properties:{name:"贵港市",cp:[109.9402,23.3459],childNum:3},geometry:{type:"Polygon",coordinates:["@@n@VzUJ‚nVŽ„K@XšVš°nVVnšwVb@xVV„knJl™VVUbn„WL@bUxVVXš„bl@lVXkWƒXwWaa@¥‚@nUUUV@„JVkVVV@XUWanknK‚xnƒ¯VyVI@m@UkL@W@Ušk@aUalKnUUV¥@KVkkaWVkUVkUm@aWanI@n@°aUUVaUa@_m@UamaƒV@akU@mV_@ƒa@KWIkƒmLUKƒaUVU@ƒkƒVUK@wUIWVUaVwka@Uka@aV@@aUKVk™K@X@Vƒb™KƒU@JULVLkVWšUL@aUK™b@VUL@LƒxUKmlkImJk_@WU@ƒkmK@UV@„¥XIm@@Wn_@KmVm@@I@aUmkXm@UWV@mn_@mƒUUJWIUWV_WƒwU@mUknVVmxU@@VUV@zU@UVW@ƒK@šX@VLUVƒKƒz@J@VnX@`±bUXVƒ¼™lšn@xmxÝL@‚Ubn°@XWVUxUVVnkbWVXV@Xš`ÆȄKnƒlLVanIV`nLVUlƒ²ƒV@V¦„l°¦„w‚b@šnKnLVbVJšIVƒXK@b‚n@ènx@xVbUnV‚"],encodeOffsets:[[112568,24255]]}},{type:"Feature",id:"4506",properties:{name:"防城港市",cp:[108.0505,21.9287],childNum:3},geometry:{type:"Polygon",coordinates:["@@XV@X°°U„lxkbVlVb@nkbVl@xl@@b@n„‚XbVL@Vl@UbV@@JVLXbmV@bVVUXUJU²šW„XlKVb„@VVXKlXšWlXXWV@VXJlI@x„l@nlbn@lln@lbXalIVK@ƒVwœUVb‚U@aXylUX@@aW@U_UJmU™nVKUamL@Kna@aVUkkVWU_ValaV@XK@kV@@W„wVXV@„V„KVVn_lJlUXkWaXWlkXU‚±kU@ƒVUlbœkVmUmlk™¯Ý™™W@mb@¦VxULm™kJUU@ma¯wƒmkX@VóJ±bUVUXÝWk™lWXXlƒxUaƒbƒIğ™Ç@U@mVUKkkm@UJm@XnWV@x"],encodeOffsets:[[110070,22174]]}},{type:"Feature",id:"4505",properties:{name:"北海市",cp:[109.314,21.6211],childNum:2},geometry:{type:"Polygon",coordinates:["@@VaVLnK@IšJVwUaVaUkWKn_mƒX¥WwXm‚LXalbU£UyV„Å@ݙwm@™°l›LÅUƒmk™mwÛaƑLÝUUm@ȣƃV_„Ó@£UƒƒUVƒ„™¼U°W̄™ÞVbXbôx@b@bmV@ǃ™UÝ@@ĢU`m@ŽnxnIVV‚VX„VL@`@bV@@aXbVL‚@XVlKXLlLVl„knJ@I‚WVXXKlVnL@xl@UVVX„a@UV@VlX@VUV@nK@bl@nVVIVmXIV`V_lWnn„@VJVXnJ"],encodeOffsets:[[112242,22444]]}}],UTF8Encoding:!0}}),i("echarts/util/mapData/geoJson/gui_zhou_geo",[],function(){return{type:"FeatureCollection",features:[{type:"Feature",id:"5203",properties:{name:"遵义市",cp:[106.908,28.1744],childNum:14},geometry:{type:"MultiPolygon",coordinates:[["@@@UnUlJn„w‚JU°VL@bnVšU„wlJ@XƒŽXVlU@klVUJknl„UllL@bUJ@xULUlƒ„UblVkblbnw‚UXmla@„wV@VK@L@UXaVKVLXWƒUVa@U@Im@@W@£UKUakKWIXU@al@@llUnL@W@Un@@VlUV@VIUanKl@Xb@lmxVb@b°bb@nlJVVnnJ@b@L‚V@ln„@LmV@Vx@blnVK„nlJXIlw„J@҄b@nlK@Un@UL@VVVVUUUVK„l„@VUVL„J@UVUUw„@Wm@™„UV„ÈVlbUb@JšLlŽX@@x„„ƒLmŽk@@nlx@bUJUzVJ„@@LVxUV@bWxnLnVVK@_‚K²xVbV@n¥@aVI@b„@l@Va„Knb@n‚`n„mmý„W@ƒU_šwV@VlVV@Vn@n„˜@nI@Jn@°¦VaUU@™„mVVWVaUńU@aVKnƒVbVUmmU@a@kUw™m@aUUmUUJ¯lakU‚aXaWUUaVƒkk„amkmUnVlULƒVlJ@XU@UJWUUw„k@aU@WbkWƒL@U@WU@@XUKmV@aUVwUĕUJUamUUVUÑm™nIVJ@kl@XalJVn@KVLœ¥@UWIXWmU@mVUKnUWLUKUaWUUKVU@U@anUny@UlUkK@w@a@aVUƒ»UkVw@Wmk—JƒÅmUUVmwXalLXWWUnam@XkƒJ@UVU@U@W„@@U@I@Wl@Ènlw@KXLWb„lVUkalKUU„VVaV@@wnIlaUmkUƒKWU@KkUkLWaƒKUUWUn@VƒK@LnnWJUIƒVkUWVnV@V™@@XƒK@VUIUJ@IWJkX@VVJ™IƒVkK@I@UVaUWk@m„@wnUWKk@mxk@@„lV@b„xmb@x@VUmLkUƒJ@nVV@b@VkLVbU`¯I›l@™U_UW@UU@™™ƒK¯wm@™xƒL¯¥kIƒ™ƒ‚@bkbƒ@Ua@ƒm@kkW@XVbmV@ŽkV@bWbUbV@„¦ƒxXlmVk@ƒ¦™bkaWL@KUImK@wUK@VUI™b@bmK@LÅy@akXW@kbWlXblL@ŽULUbƒ`@U™kUymX¯@mšUJUUJƒL@Lm@@WX@lU„VlšXll„@l@Èk°V°Ž„X@VU@UVll@XUJVXUVm@@VXLWlnV@Xƒšk@mVULnxV@@bm‚kL@VWLUbU@UVm@ƒb@ķ¥UnmJ@UUVƒkkJUšlÔU`UIW@ƒ°kLUlUI@WVI™U@mWKkXk@ƒ‚WU@bXšW„@J@xX@l@LVl@xšLVxXX@x‚KnxVknb‚KVV@U„L„WlXU`@nUlšX@llVXšVU„KlkUKlI@anKVLXKVaUIVWV_VK@VnLlU„»VKVL„m"],["@@@KlKkUUVVX"]],
+encodeOffsets:[[[108799,29239]],[[110532,27822]]]}},{type:"Feature",id:"5226",properties:{name:"黔东南苗族侗族自治州",cp:[108.4241,26.4166],childNum:17},geometry:{type:"MultiPolygon",coordinates:[["@@VV@XkV@bUbWJU¼Vb@Vnb@bš„@J@bƒL@LV@UVƒlUI@a™KULVb@bkJmx„šlLVxknVJk„‚xnKmnnL@bn`WIXlWLU@UxVbUVmKV„XI@JVIVJ@U„L@Wš@@UmUXUlV„UVJXImm@K„L@UVmVXV‚„LXblKlV@LXV„LlVVnkbmJ@xnXl@šbXa‚@Vana„ÒšL„m‚VnIl‚Þ¦°k@b„@@lV„nJlUnš‚VX_„@lVlK„šV„UUxVLVWVIXJšUlnnWlI@KUaUUVKn@VaVXV@na@ƒmw¯@mUkJUamI@lk@@am@@I„ƒUmVImUUw˜™@anUVaUU@LU@WaWUXWW„wV@VwnU@L@ynbl@@X@a„J@nW@@Vn@„lVLlxnI„lš@@UWKUƒnIlJXIVllIVVš¼XK@aVI„V‚@@bn@VKXLVKVVVInw„J@UWI@mX@WKnI@KmU„UVJUL@V„KW@@k„@aU@@W@InJWUXwWI@Wƒ@¯wkaVaUIl@nŽValIXWWI@UUm@anwWkXWWIUbk@UJmIUamKVUUUVVama¯VkIVVUlKnXVwX@@WVaUUVa@IlƒaVmƒkna›wk™UU@ƒU@mUVƒšUVwœl°LVbnJVU™¯la@mX@@UWKXU@aV_V@@JlkUƒ¯@V™nK@km¯k„U@ƒWUW@mmƒU@™kmlU@wkL@WƒUkL@VmLƒJ@b@V@bknUUVK@UVKUK@Uk@Wa@LUVVnUbmVk@@UU@@aƒV¯K@U@UU@WmUL@aU@WV—w@ƒ˜I„xXll@UX‚K@KXXVJna@wWaƒ£naUKV„m@UU@mUmalm@@XkVm@U@VƒLmWU@kkWxU@@bVV@VkXVlƒVƒ@UUk@@ƒmI@KUw„m@UmVƒUUwU@lwkV@IUa@mUaVIVKVa@w@U@™UJkb@n@bmJ@XmlVUxWXkJmUkUUVW™xUlU@ƒaULUšmbU@@‚WXkmƒL@xUV@nUxÇm@„XLWbnlƒnV‚nnUV˜U‚nVVz„@lbUVVlULVb@V@nUJkwm@Ux@bWbUK@UULka›JbƒU™U@U@lUK@XUJmn™J@bU@UwWa™x@zkJWnUJUUVšVV@bXn@xVb@J™L™m@X™w@`@bkb@VmXUV¯L@mW@@n@V@‚ƒL@K—IW@@aƒaUx¯@U„m@XbW@@L„V@bnVWVkKUzlV@bÆa@lnI@VV@@LnVVKUaV_VJVbnU@bn@‚‚nX@yVIVxXKVLlUVaXU°J","@@@KlKkUUVVX"],["@@UUVUkUmV@ln@VXVK@K"]],encodeOffsets:[[[110318,27214],[110532,27822]],[[112219,27394]]]}},{type:"Feature",id:"5224",properties:{name:"毕节地区",cp:[105.1611,27.0648],childNum:8},geometry:{type:"Polygon",coordinates:["@@UkVƒ@k‚W@Xn@@K„KVIVVIn™°@nWVzšl@V„_VaVK@kKWaXklaX@lW@bÆz@KnL@ašaVJ@UVL@xnLVJ@LXKlbša„¥l@nUWk„wƒ¥U@VaXa@amLkUƒKmƒ¯kƒmkIUaƒKUIWƒkKm@anw@mlwXIƒmƒUk¯@a@amUƒ`kkKWVkxmUUak_mJmw@w„mXUW¯X›_@WnI@aVwkWWýŃU@WLkU™aUbVV@lUVVnm@kUmV¯™kK™LƒwmVUUaWV™aaWw¯wƒÈ@VULUVUUƒK@nWJkI™l@Umxnbm@kbUJƒa¯bUbVxmLUV™aU@VUUWxkVVV@bUV@XWbnlUbƒbUJlbUV¯b@z„`WbXnmbƒaƒwUwVWUƒbUxmbU@Uam™@Vƒk™VaƒwVaUƒWI@mUKóz@lUlÅ@WIƒb@xXxml@XklULWKUmwUa¯KUXWJkaULmKkLWbkKUVƒImƒƒWa@kUaULƒW¯LƒK¯@kbƒL@b™x@J@bmnnlUšlzU`U@@Uƒb@„m‚n¦°bU„Vx@bkVm¼mx@mk™mVV@bkxVn„aVV@bU@mL@b²`lIVV@lXLlš„bVxn@@bl@XllIVšnbVšn°°wlbXw@mVa°lVnU@mš™VLVbn@@b„@@WVnUV@Xlxn`VznJVb@L@bV`V@šUnwšU„@WUXKV@UUlmUUlaXalLšm„bšIVbnJVIlVVaUUnWVXn‚VL‚k@ƒnWnblnlb²x„xVKVXlVXLVW„LlUVJna@wVL„¼@JVX@`@nnx@nWJU@Vx@XXKšŽUblxUš°„LVKVVlL@KnbVUnJ„IlUšƒnKl£VW„x„IlJ@nšVÞUVVnb‚VX@V_°lnK","@@@UmWUwkU@Um@@VkL@V@„„‚V„VkV@nbVa@ƒ"],encodeOffsets:[[108552,28412],[107213,27445]]}},{type:"Feature",id:"5227",properties:{name:"黔南布依族苗族自治州",cp:[107.2485,25.8398],childNum:12},geometry:{type:"Polygon",coordinates:["@@‚V@IöalK@UV@@KUaVIVVœLlaVbVWnX@‚@LnUlxl@naVLXVVaVU„J@lUUanWWI„@VlV@Xbƒb@V„n@VmVVbk@kU@V›V@X„J@zn`ULW@kK@_WVUK@LUb@Jlxn@nnWlU@@b„x@XVVU@UbVb‚@n`VI@VVLUlUIUV@KmL@VV@XIV@@lVLVmXV„@WLXLW@U`šnkb@Vl@UL@VVV„L„llX@`lIXb„J˜IXW„L‚aVL@ŽXXW‚Ģ™b@bmK@L@°@Vnxmxšn„K@xVn@VkL@V™Lƒakbl`VnnxVnUlššV@@VVXV`@šœk°JV_UalK@U@aUU@m„IlVnK‚V@U@wnaƒw@akU@ƒl@nwl@XLmV@xnƒl@VXUb@V@JlL„UšJUI@UlWUƒnLVUUaVwV@XKWkXJm_@amKnmmLwlƒUIlmUwkKƒ™nwlI@aUaVKšL@bVJ„kVUU@@K„K@a@I™ƒ@ama@UUaV»XIVa@alU@WUU¯IWVUbkVUKWLUwUJ@zmWm@@amVUaUIU`VbULmU@KU@@UmJ@kÅb@akUVylLXUmU@aƒU@KX@Wan@Vƒ°@Vw„b@bX@˜J@L„K@@U@mX@@n°KVUnW@Ula@a@_šx@WšnšK@IUa@wWm@aUUU™VVVIXmlI@yšwXbVxV@@ašInmVI@WVL@k@VšV„V‚aœIlbVK@VVLXa@aVwn@lxVI@m@UUaVKUkVUkaƒ@UymUV—VUmmU„mmkXaWK@ƒÈnVw@mVU@w„KlnXW@V@naV™VKUk@KVIUWƒ@mk@KXU@Um@@lVƒk@UVJna@UWaƒL@a@ƒXa@kmmVUUk@mkkƒamJ—ImJUUmIm±aUUkambkamVUU@VlbUbVVƒxX„WVUU@VUakU@UmUV‚U@mnUVVnUbVJ@b—UW¥kLVamVkUaWJU_UVWKk@@nl„UVVJUXm@Vm@UnVlmbnmJUbULU@@UUKWVIWxnJVb@xUL@bUJWIkxƒbkb@xVJƒbmU@kW±LkKUkVa@a¯am¥ULkalÑlKXUWƒXƒaVakImVƒ@ka@UUƒJ¯aƒX™mmb—KWU@wUUƒaUa™KmU@UXlWb—¼WLUKUb°„UlVbkbVL@VƒšƒJ@nVlUbUXmJ@VX@lbUbU@@bWb@VnLVJ@bVVUz„ŽVL@lnL@b™VVVULmKUk™Jkbm@ƒxVb@V—kƒKVnnV@b@ŽWXU‚„nV„l‚VVXVJUXlVXbWV@VU@Ubk@@KWbUUmL@JnXV°XJ@_‚`UbkXVVlÆkbƒ@VLXVV@‚V@k„KXX@`V@@n"],encodeOffsets:[[108912,26905]]}},{type:"Feature",id:"5222",properties:{name:"铜仁地区",cp:[108.6218,28.0096],childNum:10},geometry:{type:"Polygon",coordinates:["@@°a@aÈbVUlU@aVKnVV„VUlyX¹lWVa@U™VƒnUVU@m™@mUl@„mÞw„@‚xnIVbna@KVI‚J@kwV¥ƒUXÇVkVW@kkKWU@aXUWmnIVa°VXbmL@VVbnVVVUb™VbšJVbVKXkVKVanU@aWnWUWa@U™nk@mVIVK@wXxlLXbVJVlKœbl@VI@mšaXalVV„VbX@@ašalnkx@b@V‚b@Vnx@bVVUXn¤WXn@Vl@Vlzn@š`@I@KUU@ƒV£namVkXa@aVK‚nnU@anVlKƒa@UUU@amk@»kƒU¯@aš„VWnkWmkImU@akaVm@»VUV@UKnkW¯XWlkUKnIWaš@nmlIXmWUnwUwWm@wULmaUJkIUaƒaWa—klwkwmJmU@bkJ@XUJ¯W@XbWbUKUkWJUUVKnn@UmmXUWa@mU@@UI@WmXVykwm@kaULWwU@¯ƒlKUUVU@mU@UkmaUbmV@b—š‚xVnVUJVnƒ„@Jn@@bl@@knJVblInV°@nx@„mbU@UWUbm@ULVVVb@LkJmXkm™VWIUJUXUKVwƒV™UƒŽkLkUƒ@W`Um™kVmIUƒ@kƒ@@a¯lÝ¥kmJUƒn™KƒÑmbUb@Wb™ak@mWU@UbƒUVVkLlbUVƒkXaWK@LkxÇmk@@X@J@Vƒ@@X@VUV@V„IWln@mbXVWXkKWbnxVUnV„ƘInl@XUxVl„¼UV@b@b@xlLkV@VmzmV@b@VUVVLXVVbVLXKmVVLU‚@nnVWXXJ@V›¦UK@LUmkIWbk@@lUImJnšVÒVUnVVbVIVĖUxV‚@bnUVL@WV@@X@V„KlXXaV@@bƒlVxXVVIV@@WkI„UVKUkVmlnnŽƒbllU„VbXVWbblVkb°ŽVInVVV@bšnVx@l@bnVVnUŽUam„UL@bƒVVÆUbUXU‚ƒn@šVVUb"],encodeOffsets:[[110667,29785]]}},{type:"Feature",id:"5223",properties:{name:"黔西南布依族苗族自治州",cp:[105.5347,25.3949],childNum:8},geometry:{type:"Polygon",coordinates:["@@VL@Vl@@IXW@kVUVbnW@XlKVVnU„VlL@b„aVbƒb@xX‚°ÔUxV@kbm@VxkxWJœ„V¦ƒŽ@ÈnšVKšxWXJmV@n„Ò@xVbn@@blLk`VX@bššla²JVUlnn@U±lw@wnw@mlwVIX@@m@klKnk‚a„KnwmmXkƍVm„Uš¥l@nb°n@„aVwVmVIVnI@a„¯@mšU°ƒl@@VnI@JV@UV@b@IUbVJmXöºƒzllUbVa@aXUl@„U@llLnKVaUa@UmK@UšwV„bnKV@VwVK@UXƒV@Vbn@‚w@U„WnX‚@„a@m„I„™@UUKlaUaVk¯ƒVaVLXK˜»XaWk¯mƒkğwmW@mIƒVkwƒJUIšÇVwU™UkVKkƒm@UkmU@WÅwm£Vƒ„m¤¯IkJWa™_™lUbmJzÝJk„ƒUÇVU„ƒ‚@bU„Ýn™m¯LUb@`mL@VkL@VƒUmmk@UU±Umka@kUƒ@ķymUkk@mmkÝmUaUakImV@V@VÅLƒ¦ƒJUXmJXšWb@n°Æœx‚¼nV@LlbUŽUbmL¯@ÞbV¤nbVx@bUVlblIœ™@KVVUnVJUn@VlLUlmLUUUxmK@I@@VW@@bU@UJmUkLVVUl@b@V"],encodeOffsets:[[107157,25965]]}},{type:"Feature",id:"5202",properties:{name:"六盘水市",cp:[104.7546,26.0925],childNum:5},geometry:{type:"MultiPolygon",coordinates:[["@@ôyVL@nXJV„Ub„x‚bUŽlšU„@ŽšnŽVbV@naVw„a‚VUXVx„x„bnaWmXaƒ_@y°aVUkaVI„aVamkXa@WVU@aUUlUXwVV@UVšbVUnKUwVa°a„bVIlan@manw@VšklJXI@m„LVVVUVK@U„ǃk@KUa@UkaVU@UVWV_XWVXVWlLXKlLXaÆKšwVL@akKm@Uwƒ@@XUVk@VUI@wWK@aUV™I@UkK@ƒmL™Wƒ@kImJƒUÅVmkXUW@UJkx@nmx@xkxV²m@kmUV±Ikb™™@aUWl_kK@am@Ua@wƒÑ@mnUWIX™wULm™@DŽU¥›ƒXIlwUwn@laU@Vw¯ÓW@w„aUaƒb@akKƒUmVUUkL@WmXUaUV@lWX@Jk@@UUKULmLUJmzkKmVX°VšUnWKUL™ƒƒL@mU@UnVJ@b@„UV@Xƒ`m_@l@@bmbXJmnnš@°˜wnn@ŽVLX@V‚@nVl@nk@@b‚l@nn°WlXzW`XXVKnUlxVbUb@‚V„Xb@Ž‚VxÈbVlnbmn@ŽkVUL@„ƒŽmLUVVL"],["@@@ƒ@UmWUwkU@Um@@VkL@V@„„‚@„V@VkV@nbVa"]],encodeOffsets:[[[107089,27181]],[[107213,27479]]]}},{type:"Feature",id:"5204",properties:{name:"安顺市",cp:[105.9082,25.9882],childNum:6},geometry:{type:"Polygon",coordinates:["@@lL@bUK™xÅLWbkKWLkKUXUWWXU`UX@VUVlb@VVb@L„l°xXx‚bšbXUVb‚VnU„xšKlL°šnUlVn@UmVU@kUUVašblVXKV@ƄXþlXUxnU@mVK@_@ml@UU„@šblU@KnLVyUw„@@UmkšWVw@UVK@VXzVK@n„VVUUW@kVJnlaš@nKW™kaWL@U—™õb@JU@mU@@_WWƒL@lUU@WUUK„@lakÅUUlWVa_@`WIU¯mW@InKVVXa@Ll@VaV@@UXUWakUVWUIUW‚UkUƒƒmVXW@@amUUm„L˜l@UUa„wn@lašIVlnLVKUUšU@amK@kUKƒVyUU@aUImK@UXa@aV@VakaW@@UnIVWVaUkƒb@mWƒX@Vxm@UaU@W„@VULUxU@mLƒaUŽ™x@VnL@VVbUbmLkK@kƒVk@WV@bUbVakk„yõ¹nWUIVa@J@aVUU@@ImJ@Uk@¯„™V@nƒ°@bmJUUJUnUxƒbm@¯Žmak@™¦ƒVUnŎWlnnmxƒLbmlkL@l@nWVnlÆU„VnIlJ„@šXnK@„lL@VšJVU@bXL@xVJUl@VU@W„@Vxn@"],encodeOffsets:[[108237,26792]]}},{type:"Feature",id:"5201",properties:{name:"贵阳市",cp:[106.6992,26.7682],childNum:5},geometry:{type:"Polygon",coordinates:["@@nŽlLX„VJ„LVblJ„n°ln„„LlVnKlU@nUUa@WlX@l„n@‚Vb„@la@a„„šlJ°¦„Kšwn@°x„LVkUmmwUmk_la„bšK@UlK@UUm@wƒL™mnwmw@U@¯@KnL@aša‚ġXWW@UKbƒKWX—JƒIWakJ@_kWƒkƒKUU@UVKk@@Ula™mV_X@WKXKƒ@WUUnUK@kU@WJU@@UnK@LVUVJVkUK@UUJm_@UaVaV@UU@Wƒw@aV@Xkmmm@kw@IVa@KVLXU@`lLX@VKm_@yƒI@WœU@UlVl@UanU@Uƒm@U„aWaU@Ukƒ@XJmXVbkV@ŽƒIUVUbWUUKmbk@kwmV@K@mWUXUakb›KUUUJVb@LU@@VkL˜š@VXKlbXšmL™@kbm‚UI@lVXUVƒU@mULWy@UUL@VUx™Xnl@Vƒ@VxUzmK@LkV™aƒ@VVk@@n@`UL@nmV@bmJ@Xœ`WX°WVƒn@xnxnIl`VbnVlwXUlLl‚„_nV@b@bl°„V„nWJkx@nmx@b"],encodeOffsets:[[108945,27760]]}}],UTF8Encoding:!0}}),i("echarts/util/mapData/geoJson/hai_nan_geo",[],function(){return{type:"FeatureCollection",features:[{type:"Feature",id:"469003",properties:{name:"儋州市",cp:[109.3291,19.5653],childNum:1},geometry:{type:"Polygon",coordinates:["@@஼jpnr’``ŽpRVHʘ̤žZt^JÖA˜[†CâlTébQhRPOhMBcRSQiROE[FYdGNOEIH]MgEAMLLIAG_WMCSL@ED]PCLYC[ZIHgjSxJTMbHNEFCMEE_HSDFHSLECRNSFDRICHNADGPI\\RZGIJTIAHLDQOHG`GTNCOIC@eIGDWHIS[kiE[FMbECZS@KKS[FDWsCeRuU_DUQNOE[LKGUBM¨EDQP@HWHGDImXƒCog_~‹I_fGDG|QDUWKBC\\ore|}[KLsISBHVXHCN`lNdQLOnFJSXcUEJMCKSHOUMDIm_‹DI`kNDIGEYFM\\YPEEIPMSGLIKOVAU_EBGQ@CIk`WGGDUM_XcIOLCJphHT_NCISG_R@V]\\OjSGAQSAKF]@q^mGFKSW^cQUC[]T}SGD@^_ˆaRUTO@OHATŸ”"],encodeOffsets:[[111506,20018]]}},{type:"Feature",id:"469005",properties:{name:"文昌市",cp:[110.8905,19.7823],childNum:1},geometry:{type:"Polygon",coordinates:["@@€hIJ¤Ī¯LQDaFßL[VQìw€G‚F~Z^Ab[€¹ZYöpFº lN®D´INQQk]U‘[GSU©S_­c‹}aoSiA£cŁ¡©EiQeU­qWoESKSSOmwŸćõWkàmJMAAMMCWHGoM]gA[FGZLZCTURFNBncVOXCdGB@TSbk\\gDOKMNKWQHIvXDJ\\VDTXPERHJMFNj@OwX@LOTGzL^GHN^@RPHPE^KTDhhtBjZL[Pg@MNGLEdHV[HbRb@JHEV_NKLBRTPZhERHJcH^HDRlZJOPGdDJPOpXTETaV[GOZXTARQTRLBLWDa^QAF`ENUPBP…\\Eji`yºEvåà"],encodeOffsets:[[113115,20665]]}},{type:"Feature",id:"469033",properties:{name:"乐东黎族自治县",cp:[109.0283,18.6301],childNum:1},geometry:{type:"Polygon",coordinates:["@@ªVLP`@PEdNRAHOPEAKHEVL`GZBJfvdTAXNNTZJFPrHHNpKTD\\ILHbEVd^J‚OHLh@NNBnHP`\\xH@NBRLJTlŽNv_^CTLd@bNDVFbxdFV€UPBTKOGEOUO@OEBXQP[H_EI\\EbeYa@UO_J‹MEJ_IEDKJUGMDcNUd_FMTEJSGoZ]EIYGO[YW‘gEQ]a@WHEDQKUSDUGAbYBUpSCYNiWqOSQEoF[UcQISWWNMSDe_cLQ_UBiKQOOASQAWgS­ā]ZaŽSPÝZ]XMXSŒ[^oVËNgNKlE RôEø"],encodeOffsets:[[111263,19164]]}},{type:"Feature",id:"4602",properties:{name:"三亚市",cp:[109.3716,18.3698],childNum:1},geometry:{type:"Polygon",coordinates:["@@®ĂhTBXTRPBRPjLVAR`dKf`TC‚NXMTXRJVdE\\FpTRrPjXZMTDVoZABaVHTCLVCRGF@X^bFR’hZXP\\ZHHMA[^wBWXJlW¤EJ[bCTOF‹WWMm@ILMGWQ@DQ^QNWFSHEbF`OXNbO„VNKTEPDTLTCCVTREfvfEHNbRAENH^RJXCFHNFRpVGHWISDOTMVCZeGamaLoLÛD¹¹ėgsia{OųE—Tt‰lɂwr}jŸR±E{L}j]HąKÃT[P"],encodeOffsets:[[111547,18737]]}},{type:"Feature",id:"469036",properties:{name:"琼中黎族苗族自治县",cp:[109.8413,19.0736],childNum:1},geometry:{type:"Polygon",coordinates:["@@bRFnHNbHŒgN@NPEnbXP@bND`NT\\@\\QZb@`@J]V@XhžDpW„nCJGHGXO@CR§FANHVKLF\\MPVR`CvVfQtDPKpGHG@S`WJP~^dSTHWX\\RHTFACQTIAUPOU@MG__IaYSFQK‘NSbORHXCZeTFJg„B`YBMNMFi~IVDV[tGJWXGDQRGF]ˆJrALgESLSAYDGIaFeXQLS\\MKSLSQYJY}eKO[EHiGSaK[Yw[bmdURgEK^_kcSGEOHKIAS]aFSU@Y]IWFUTYlkP_CUOUEkmYbSQK@EMWUuAU\\M@EpK^_ZMDQ^OXwC_ZODBrERURGVVZ\\DTXcFWNIAWJWAYUUFYEWLQQaCIZeDM`cLKRGpanJZQd"],encodeOffsets:[[112153,19488]]}},{type:"Feature",id:"469007",properties:{name:"东方市",cp:[108.8498,19.0414],childNum:1},geometry:{type:"Polygon",coordinates:["@@ºŸx‹JYZQ”IŠYXLl@dR\\WZEn]bA\\S~F`KXaDeTiNO^EEKWEDQXITBXaWaDQMUJOIaTWf@NJV@dSxGZ‰Fu_@WMKAUˆ}AQ@MwG_[GOAmMMg@GKP]IUcaFKG[JSCoLGMqGEOYIMSWMSBucIeYA_HUKGFBLOFGPQBcMOF_@KO©UAtERadwZQ\\@ÊJÒgòUĪRlR°KĮVŽLJ"],encodeOffsets:[[111208,19833]]}},{type:"Feature",id:"4601",properties:{name:"海口市",cp:[110.3893,19.8516],childNum:1},geometry:{type:"Polygon",coordinates:["@@ńZƂtĢ¬æßFuz¹j_Fi†[AOVOFME_RBb]XCAKQKRSBQWSPY\\HbUFSWSPoIOcCOHIPkYCQ]GdGGIFQYgSOAQLK`MFUIGa@aQ\\GGUFcHKNMh@\\OYKAigsCgLSF]GOQO]@GM]HyKSHKPW@Pxi@EMINYREXWRQ@MQcFGWIAwXGRH\\yDI`KJIdOCGRNPNtd\\UTMbQYi@]JeYOWaL[EcICMUJqWGDNZEXGJWFEXNbZRELFV]XQbAZFrYVUBCLNFCHmJaMIDDHXHEhQNXZ_TARFHVB@DTQIRR@YHAJVnAbKFUEMLd\\c^ÍÞ"],encodeOffsets:[[112711,20572]]}},{type:"Feature",id:"469006",properties:{name:"万宁市",cp:[110.3137,18.8388],childNum:1},geometry:{type:"Polygon",coordinates:["@@^J@ZTVbET^JBGLFPTHld]`FLQhcVanx\\\\ZbLHTGj\\FLP~fIZRZPVTQFSVAFJE^NDLEE[~LjsxVTG\\NZZNGlLRRGLJTV@hPZANN^@T\\NEPPbDZXO`d^HSvcJDIV\\XZAJUFCLNP@PQ¤@[ïKLÑIÏ]ÇE±I{uƒ­YśUćFcYUmsVeBSVgB[RO@aYYPO^]@UVaNeDShMLG\\EfFVE\\F`"],encodeOffsets:[[112657,19182]]}},{type:"Feature",id:"469027",properties:{name:"澄迈县",cp:[109.9937,19.7314],childNum:1},geometry:{type:"Polygon",coordinates:["@@T\\GJCXJH@fJDDPNCNJENN^NLHBNSx@DDYbBLLDRbjZTj@`XXTlG^Xr@PJLW\\WLTlWR@HDJTD@X_PO@STMDNTMVV@NLDM`M\\XM\\JNBH[PYZ‡úYzŸ`Ċ\\ÎÝd]c[NKVFLEBaUmBIZGQ@JQSR@CUAEGBQ`SWYRMFgWGCGJCbNnIDGMEDKVAZUEqBYRa^WEUFKYQMaFWXEHIFWMYHCrXVIIiaK@aMCUYNSIISTwXALKH@XWXIEIJQCG[IEQDE_XSBaa[AIPW@]RS[FWS[CD]PEBYNGFSaSyJG]@ugEUDQlGHiBKHUIoNSKqHFaPMICK]UUHIPDJMuCA[SCPIDIOILGAEmU[POPBVSJDREBGS[QXWSGcT}]IO_X@TGHoHOLCX\\ELT@LYTD‚aFENF\\lj"],encodeOffsets:[[112385,19987]]}},{type:"Feature",id:"469030",properties:{name:"白沙黎族自治县",cp:[109.3703,19.211],childNum:1},geometry:{type:"Polygon",coordinates:["@@D\\RV]dTXELnHr]^@LETBBRTHPi^[@U`QTHDJ`MGSogDIPKdJ`WVNHCXHl_DJR@AH`FBVPUJLHKNTJOFFZON[ZEHFCJlMJ_ŒCn`CJVNGPLTNDFIdVTWEIPmRKMc_kDMWGGUTAtJLK~\\f{pqD[LAVXRCH{HC`eŒJ`}@W^U@I@_Ya[R[@MSC_aMO@aWFmMOM@‹haGGMEmaQ[@MESHaIQJQ……MckBIw[AOSKKAMPSDSLOAV_@@`KJRbKRDfMdHZERgAWVsDMTUHqOUr@VQXTT@Tƒfg‚L^NH\\@heTCZaESNObHPƒHeZF\\X^ElM^F^"],encodeOffsets:[[111665,19890]]}},{type:"Feature",id:"469002",properties:{name:"琼海市",cp:[110.4208,19.224],childNum:1},geometry:{type:"Polygon",coordinates:["@@TP\\pATHTGlZDJGAQjE\\Rb@jVBDCN`JZ[NCNHNXbULPrP\\KNbMTLjJJRFP`“pNLZz^FLRHjVPZ@hxVKbHBHMNNJFRlLzGPnNHhIrHHADcPWdUAmEMVQDSKYHY\\EhBN^HpXGNDBNNBnIß‹Å_g{³So]ã@ORO@KMEDIVYB[WJUICudGTc]P_YWaCOOMFS[]@MMYBgOU@ISHKQQkKMHYY[MSHwUit}KF\\KFMCF]EIUBETSROUKTLT[NKTWREfJbCHBZKTFTKh"],encodeOffsets:[[112763,19595]]}},{type:"Feature",id:"469031",properties:{name:"昌江黎族自治县",cp:[109.0407,19.2137],childNum:1},geometry:{type:"Polygon",coordinates:["@@`ZĤd–`òüˆ˜ “BSPGP@VSbQ`‡@]HC~T^SE]N]FkW]E[fY„GGOPaTMbFDYfS@g[MGK]h„e@SSSRW@UVqrPVGNStCXUhBFQGYNcCeLQQaLI@_`@EUwcEaCUaMc@SK]Du`MSkKI‡~BVNL@X`‚EvYŠwHcTU@MIe@SXJbIPNVCRXbWbSAWJCRXFFL]FMPSjCfWb_L}E[TaBm^YF[XcQk@WK‰Z“JYRIZwŒ¹ "],encodeOffsets:[[111208,19833]]}},{type:"Feature",id:"469028",properties:{name:"临高县",cp:[109.6957,19.8063],childNum:1},geometry:{type:"Polygon",coordinates:["@@jD`hNd\\^dZädĒH´Op@ˆùZY\\OAGIMN[[W_NCNMKU@NUMSNCTSP@`O@WSCCI@GXQSkXKX[IK@OWqH]SkWW@_SiiYQaKCAKZaCCw@MTGAMKM]FMMIMDSM_HGHRPKCBGSJJIYH[QOJCHMBDGQJECMTDQKFGTCEGTF`NFEDMFaGSNwIiTGhYJD\\KZODC^@FTKND`XBHKJNKFBNhG^FJMPcHEZF\\QPRjQTAdgNOPgQaRSê"],encodeOffsets:[[112122,20431]]}},{type:"Feature",id:"469034",properties:{name:"陵水黎族自治县",cp:[109.9924,18.5415],childNum:1},geometry:{type:"Polygon",coordinates:["@@R]NC`YL]FoN@V[vBXVFNL@TRZalnVFVP`DlOZkVSXEE_F[EUFeH[NKTgfCbMVU^@P]ZObZP@\\QhATUfAtUasñiāEoI]eYǯ@aKmaeƒWuCºKÜKpnbHbYfUDSNCPJTRAHJTDJSfDNLHXC``VBNGTYCQDIXMDSP@xLNEFRNXBIpVNLXah@RgF@`qOML@LJNSPLbaHAh@Jdj"],encodeOffsets:[[112409,19261]]}},{type:"Feature",id:"469026",properties:{name:"屯昌县",cp:[110.0377,19.362],childNum:1},geometry:{type:"Polygon",coordinates:["@@\\OnVBFKHPJCJOJTDB\\vDINOCGJVVL^JDONEbrGTLpMVJLGjAHGRkVChF@vH^zIbTETMHAZOFC^\\DXT\\EffAP\\PdAV@UIYfS|S@YPICMeM@sC[_A]VQEwyHSMuNcAUlQJMVGMS@mVBZPFO\\CSFQK[LqDMACiUa@[QiFBRIHYCHkGSBS[oSOqB‡IE^QHCRWHIXsHU\\UC}JEjMNAN_ZƒAIhSEYfWDQGaPMTL’ERZTJb``NHV@"],encodeOffsets:[[112513,19852]]}},{type:"Feature",id:"469025",properties:{name:"定安县",cp:[110.3384,19.4698],childNum:1},geometry:{type:"Polygon",coordinates:["@@JjDNdJ\\FbKPXfZ^Ij@RZNaVSc[MsMOHQPDJcLIJ_zCG[HQxWJBHXdENRR@XQFWZQQGOFSWUCI[WCJuRGLXNMPLhCl[Ta@SqGgJMGOmyHkKEQMINMAGaGULgwY@UOGiKQ]EYyMK”oO_QEIIKiNSMa[LqOKOaVMWMGMDY\\_IKrL\\ERT[DEPYOUA@nNTUHINkRBVMdNvGTxzRF^U`BD\\@tfNDNOJ@Z{TeTJZ@VU€cB[OBOeeQT@^OXBJb\\AbWTF`RCJFH\\RDJIJFXW@WLGBKxWTSJJMTVZND@bbL"],encodeOffsets:[[112903,20139]]}},{type:"Feature",id:"469035",properties:{name:"保亭黎族苗族自治县",cp:[109.6284,18.6108],childNum:1},geometry:{type:"Polygon",coordinates:["@@FJp@fxpQ\\ApN\\GNPNBM`HLMrXLXj\\PEHnI@WUCEM\\GTc\\GZYHTPBHRCPTd€H\\K\\@HXi–BJILJJAVNTOZJNtFPC`YxDPWci@IBgbGKaTOIM@KNKrP@_hE@QbgKWUMJoWAQMFEKM@wTONCJWRCZDHSAM_UD_GWMKeCITSCGIQBGXUHQoMEEGWDQIG]FMQBMaFGueFeSQDUSDSKOCSFMLƒUaPWM_PaEGFETMX]RCRR@HXKN@JNnXXEŒSPaDI\\£FkXWIAX]xB\\GN"],encodeOffsets:[[112031,19071]]}},{type:"Feature",id:"469001",properties:{name:"五指山市",cp:[109.5282,18.8299],childNum:1},geometry:{type:"Polygon",coordinates:["@@TCNOLBTLBPx\\AJdl†NR†RIbJTGNF\\@RcIYbmHoLQdKN_fCJYbDRRXKZFVEZVXBXIJBXMdESW[CUYHUVQFQAqsEIMPYMSBUIIJKAIj•GW[@[LGScDOGQOAGSYZ[HSd[HFNVD@XmJFG[OWiWKNqGKN_MAMO[HoM[BoRewo@Y^HpITSFENc`MVCdHNIVCLJFI`NFIŒP`@VZbaf[FFJG`O\\WRFA@PVPFPPH"],encodeOffsets:[[111973,19401]]}}],UTF8Encoding:!0}}),i("echarts/util/mapData/geoJson/hei_long_jiang_geo",[],function(){return{type:"FeatureCollection",features:[{type:"Feature",id:"2311",properties:{name:"黑河市",cp:[127.1448,49.2957],childNum:6},geometry:{type:"Polygon",coordinates:["@@VÈÞ@Žkx˜nXŽ°VÈa°V@kôw„b‚š„JVškXlVUx„„@ŽlL@xkVV°ƒ„VbxlVUnVxk@ƒ„ƒKkŽVb„Il„@°kVl„@„™lÆnkll@@V„VXƒŽš@V„²bUlƒVlV„U„VÇn@nkJšŽlkVbœ@›x²V@n°VUnlKU„n`@n°bWLnVUblVUVVbknV`°kkŽl@@V°@nz„J@XšxlWXb°n@bƒĠlbXb™bVbƒJ@Všb„a@„„@lbUbšVmnœ@lšVmnIW‚œ@WbÞ@„n@x°@š„ĢaƐéϚnœ„‚lČ¯ĠŻÈwm@ôçU™mm£Xy°UV™›@wÈ£Ǫ¯kõÝçUњ™Uķ‚ƒĢkVфÆšÞU°nŎ¥ČUĊx°m°¦żVƐœx°ƒÇ£@y„UônރÆ@Èĉ°Kô¦šW„kWU—bÇ»@™ÈĕWÇÈ£ŤU@›n£ÆUUKVamanwŃmÝJ¯k@JƒIkaVaUUÇbkaÆÑkWmÝUۙ™Ý@™ƒwnU±ƒ@kkV¯KUkƒJƒ¼U¦ƒšÅ@ówķaķůV¥Uaó@Åwmƒƒ_kVƒwĉ‚ĉmmn_V»™a@U™ƒVwķóƒ‚U¦LǫéóXÇmōLǓÇķxÝkƒƒĉ™kmakbUĶ°@W¼„@bƒšÈÆ@Ė™L„l@„°J¯„mkl¯L݃±L—amJ@¼ƒ„™VƧUó„™UX˜ċb¯ńVbkÆÝI@llx„k°V²šV@Uxގ˜L@b„@b™`ƒšÇzkókݤ@ğ¯Wƒ™LĉǙLmmnċVkbUaƒL@Ž¯„‚bU°ğL݂Ý@"],encodeOffsets:[[127744,50102]]}},{type:"Feature",id:"2327",properties:{name:"大兴安岭地区",cp:[124.1016,52.2345],childNum:3},geometry:{type:"Polygon",coordinates:["@@k›ƒϙmƏêġb™ƒ¯@@wƒmÝ@XV@IlŽl@bUxl¯VlV™bV@ULVlUV™_kx™VVV™ÈÝJ@„¯šU„™lm¯x@xóÒĉ¼m„¯Wƒxţ@Uz¯ƒWwnUwťƒ@knƒWƒ£óVƒUUwğyó¦WI—Vmm™I@±kwÇ@@bƒ@ĉ¼ó@¯wó@¯aó¼›KՃaUwmWUwÅI@aƒKó@Ua™LƒaƒVÅwō¼UUÝl±I—¤VxÇx@zkJmnn‚mbnz™xlŽƒl¯ČkJl™°@„kb„Žmx@x™@kêmVnŽWxôXšxU°„bWLóJnÇWĵ„V¦™ŽƒUUb™b™ÆġK™šk¯™VU±aXmċÑUwĉKġ„k„™ŽVxk„ÇKkbƒIƒ‚ÛXWl¯bƒŽ™X¯K™bĊš„„ÞVƚnŽĸ²lxUŽ°n°òÈb‚¦—xVbƒŽƒ@¯„Vx@¯VķÞČlĊ°KĸŽȘI°¤ČIôŽò»ƨnȰKǬ¦ôWŎÈƨwlƒnKVXmbX`lbšwkVW‚XXŽ„L°a„ƾaĊ£nƒ°@°¥ŎzÞ¥‚»œalwôkƒJ„a@ĶK„£„bU°ĊxźVÈUĠ¥ƨ™VI@XU°x°Ln¥šw°UmwXm݁V¥ĢŽ°@nU@mÆ£š¯lKœšÜw@aÅU‚¥UaÝIkmV²‚nn@Ķ»@Uk¥VKÞ@ÞÛ@ƒkVmĢa@_ƒJómƒǖ¯Æw—óÇa@alƒUwšwĢřšk@wÆWXUWXƒWa™m@_ƒ»ÇéXaĸwVa@ÝKkUWkX‚kšKXxƒn@lĊV@¯m¯nřÆwš¥"],encodeOffsets:[[130084,52206]]}},{type:"Feature",id:"2301",properties:{name:"哈尔滨市",cp:[127.9688,45.368],childNum:11},geometry:{type:"Polygon",coordinates:["@@°`„_šJlUšŽ@„„@V¦°JUšŽnLôlnŤ@@šÈaUÒVbkbl¤ƒzk°ÇVÛô°IlVUVôU„xÆU„Ž@bźĀ„º@¦šb@l²‚UVlœ@°ÒĠxšnXxÆVô¼Þ@Üx²KލlƒVÑ°UȰôlwô@²ƒĸ°„lanV@„šVŎUll@bÈnÜm„wĢ@la@ÝÞb°UXb˜lŎ²ÆškšV‚I@ŽnJnĠŽ°knƒÜbĢwna@a˜kÞKƒĀ„a‚™œ‚‚IVbU¥wĠwkô˜xnLƒċVçkaUƒ±IUmnġW„°WôĉšalƒÞÅĵ¯@W¹XÝaƒb¯a±X¯ºLƒaVƒmkLóƒƒbkaƒVUKVkkKV_@aÝykk±L@ƒÅU@yV_™aU¥ówÇx™@UkVƒn@lƒkÅlwšWVwUkĉmkklW@šašbVwnWWƒ—wWL™™@Ušƒ™UƒÇLšÇmƒ„@wƒJĉƒL¥@ƒÝ_@a¯y„UWw¯ƒ¯Uġx¯aÝXVmaU£ó±›¯nwƒa¯óÅVƒXman™„Uƒ›lUXkWa@mkI„›ğaƒm™IklÇU™„kĊƒƒzkKƒš„lU„ōĬlš™„@ŽnX°@llUxŹ²mKĉVWwk@UbUK@bmVmI—ƒVmwaWxXlWȁšmºšÞÆbUxV@ĵńWÆĉLkWUbƒaWzkbĉ`U„±LklōwUVÝ£™UW`Uwk@mk¯VkaõVX@WbL™K@XƧºWzxƒK@lmX@bkVVÆk¼Vbk@Vn"],encodeOffsets:[[128712,46604]]}},{type:"Feature",id:"2302",properties:{name:"齐齐哈尔市",cp:[124.541,47.5818],childNum:11},geometry:{type:"Polygon",coordinates:["@@Þ@ށĠKV¯a°ƒ@„KVblaČU‚mnnšKĊȚKX„°ŽĠ@Þ£ôllÈy„™š_@a‚ƒ@a—KݍVwU@±™¯Uƒlkw@kÞJlÅUa°ŃČaW—šVôƒƨVšU„ƒ@»nI˜b²Kބ°Klkn°ƒ¯I@ƒƒkšK@ĕÇń™@aƒX»¯@VĵlaÿVamI@aÅÝउýƒĊȗJƒôȁÅkmƑۃ@kxġ@@l™aVk¯»ƒīŹaƒkƒ¥Å¯™JUaWU@@w™aƒ»„KUkÆkUm„UmwÛ±±UUbUŽUXƒwWwÆÝk™lkUanaWwnKl™kal¯ka™ƽa›kÅx™a¯@™amb¯V™lÇwÛĀ™V@x™šmêVƜVV‚aôV„wÈx@šˌx„¦VÞ¯VšlmX@‚ƒL@¯Ua¯LmV@„„°X„ċK™V™ƒ@UƒÈ@‚¥@w—ƒġIU™km¥Źwƒ¦¯lmn@°kxVV@¦óam„n¦l@nx™lĉVóšmx™n™ÒĉĀĊ¼„þ„šǔêÞ°ˌĠÞÒ°ĀɲĀƨźˤȤƨĊ°w@£nymwnkUUV¥ôÑVmkÆmUUVa™mVIkmô„lxkXÞþƒbl„ƒl@kV„ƆƒV„xV@š¼VÒ@šŽUŽšnnނJ"],encodeOffsets:[[127744,50102]]}},{type:"Feature",id:"2310",properties:{name:"牡丹江市",cp:[129.7815,44.7089],childNum:7},geometry:{type:"Polygon",coordinates:["@@U`lLUlVL„Ulb„aô„lKnŽU„„b‚K°¹²W°b„aÞb˜knyUlUkamř²L@m°@lšmš²n`ôÅlK„x„ÜKnxV@„l@œƒ›ÅXyW_k@™wm™ŹĕmƒX™»‚ƒÛ™l°ƒôšÈ„»š—ô˜ô_WW@Uœal»šwU@@wšUVƒš@VƒXI@w‚Ģ͑ÞȻ›aU_@mUkly@¯óV»XmWUXUWmnm¥nUUaWLk»Æ²IÇa™wÅaÝ°¯nUa±a™ƒ™@¦õÆğ„@„™@Åb›xU܁nÇłlb¯¦„ôó»mƒ—@±ƒUk@Wwƒa¯xU„V°ƒxXbǎŁUV™™ƒK@¹ƒKUaȯ@ōݙXƒal™ƒlÛkalÇUǫÇńÇakbÝƆ¯nlš¯Ž@¼™VUx@x¯W¼™Æ¯šmĖ„Ĭ¯ČƒVk‚ķÅmxœ°ô²V¤‚bUnÞW°bĢw°V°„XxƒV°z@bÞ`@„‚¦„KĊŽ„I@xƒŽn„™ÈÈK‚„šV™„@VššXK˜xX„mXUx™a™b@‚kXllĊnVlUx™XkxlÆk„m@U„Vlš@ÈwôxV¦šbU`@zÆV@„²KllÞz@b"],encodeOffsets:[[132672,46936]]}},{type:"Feature",id:"2312",properties:{name:"绥化市",cp:[126.7163,46.8018],childNum:10},geometry:{type:"Polygon",coordinates:["@@ऊþÆÞ@bnJUb‚ĀnblŽĊš„„ÞlĸwǔÈŎKÈnôWǬê‚KV¥„ĸôUxš„@VšbU¼m`nnĊŽĊ„xlUšmkaVÿšLšwš@°»UmbKmݙUšwUmVknKUUl¯ƒKU™ƒUȃ‚™nK@ĠkX±lX„°„L@¯¥@wV_m›ĵ¯Ww™L¯ƒUkōƒÇVU™l›w—V󁱃¯aƒVka°wVk°mÞ¯Ŧřƙl™²™Ŏk™U@ƒmUkb¯ƒķŽ±„ó@kxȯó¯VUÒk„ÝŽ±LÛwÝ@ó»ÅUWw™mğw¯Ñ›@UkV±@k™a@¥ƒ¹Źÿ@aƒÅVƒwóVVUkU¯JÜóÈUl¯„yk£laUaVÑÇb@™ţ@kmómK™V¯IU¥ƒ@@ƒ™kV™Iƒ`@ô™¼„blU„lƒ™bÈb@xÇKkĢɳaÅɆō@ƒŽVƒK@z™@@¥ÆKnÜ@@aۏUw›wnU‚ķ@ƒ_ƒV°Ž@„klVššnULVVÞbVl@°™@nx™n°LŚÆlV„ȃmU²@VmĠLƒx„n¯xkWƒzšJ‚wnLmbXbW°šÆ‚™²™@™Žšx@JVx„L‚Ā²Æ°I¯º‚È@ÒnÈ"],encodeOffsets:[[128352,48421]]}},{type:"Feature",id:"2307",properties:{name:"伊春市",cp:[129.1992,47.9608],childNum:3},geometry:{type:"Polygon",coordinates:["@@ƒKƒ¯kWW²ğl@ŽmLšÇ„„VVš„Lk°VVmLUlVn™xšVnނLnaVŽ¯¼™@™x™KUĀlb™n„`n„Æxô@VbU¦ĸŰĸbôxÆ@„™V¥„»„IVl°LUŽll@²„mV„x@ššÞܚÞVnŽlXÅÒlbÈaVVUblb„J@I°lÞIn‚Æ„mxnbUbVLÅVm¤@œţVǤXÈÇĖ@šÈ¼˜aXVÜaXbWŽnzŎašř„KôbšUlw@¯naÆKnUU¯Üa@mkkVUĊm„™żÝ‚ǖŽ‚K„™°L²lÆI@ƒ¯¥ĉƛVaÞk@ÝVaĠlnUVwƒœómaƒ@™wĉ@™a™VƒxamX@aƒ@UaÅLƒaVWƒ_nWm£nWm_ÅV¯ƒm@m„󤁚ݦƒ¯ÅalmX£ƒ™VWUŚw™mÇ@@IV™„WUw@ašI@„k@wŎ»Wƒ„ƒ™ÅVaœK›Ika@¥lUkUlwÅwVyÈwWU@a¯U°m—Ç@UçƒaVa¯mV»ÅwÝUlƒUk™V@k„mUk‚X£šw°@@ǃaÝIƒƒam™Ûam„¯lğmmI@J™U™l±ÅōŽ—kWa¯VÝa@Þkbġ@ƒxÛnÇm@akkōVōl±škšÅšťŚÝ°¯nUl¯xlb„U°b²„ô‚˜Uœxšk‚VÈUŎ„Vl°„šKXxĶ°nœU`@x°¦@"],encodeOffsets:[[131637,48556]]}},{type:"Feature",id:"2308",properties:{name:"佳木斯市",cp:[133.0005,47.5763],childNum:7},geometry:{type:"Polygon",coordinates:["@@nš„b‚„ÞJ„b@ȯ@™xW¤Vlƒn@lšUVlk„ÞVÆxU¼°nUb„bVèÈ@˜ŽnIn‚@šĢmlUw°™żƒ‚VUn@lnL@VôbšwĊ‚lœ„JķĸĢl„wôwƨxVVUƒŦšxšLź™Èš°`nnĠwŎJސĶwôJ„@¤Xn܄ĸlšn°¼È°lŽ„„Uš‚b„xš@„l@ÞÞÈm°„lôwšL°¼ĸ‚°Þ²nĠ@ôwÞ`ŤI„V„ÒĠU„„@„VJĸbƄ²@°ŽĊKšœ„JĶaĢȰ@ô¥°nš¤‚bČUš@Vx„mUw@a݁ţƒÇ™ķƒ@ĕķīU¯²@ÆmVÑô¯X¥ċç@™ĉ»U¥ÝţKWVÅkUVÝŎUmǍÝx¯aķxÛUóL¯a±óōb¯™ƒÑŃVÿƒ_Åķ„a@UƒK@wm@Van@UmmLVa—@VImmXUWƒÝUřƒKUwÝUUƒkVƒk@l¯X›‚Å_ƒJ¯k™Jm„ÅLƒa@¥U@¯Vƒz¯@ƒ`@¼šmxƥšŏKÛk@±laÛ@@Xm@™ƒ@xƽ@WŎnšˣĕÅ@@aÅ@@nÝbǏ¯@ƒ_U›kUWƒkb™wÝU@ç„Wlw@anIƒ¯lyœX°m°VšašÛšm@„mVwÞK°ƒšXlaXmm_ƒ@UƒkwÝK@ƒVI™ƒXmV»ƒI@aƒ¯ğW™bġaU_¯JU¯ġŽƒ„ĉ„k„ō`±nÝÆk„™bóĊ¯Xƒ‚ĢX‚mVn²JV„lbUè„ČmK—wlóğx‚xV¦UaJ›šƒbƑÿÝL—l@bmbġx"],encodeOffsets:[[132615,47740]]}},{type:"Feature",id:"2303",properties:{name:"鸡西市",cp:[132.7917,45.7361],childNum:4},geometry:{type:"Polygon",coordinates:["@@‚LšKVVnkšbVšÈb‚²U°VnklVlaÈL@anU°ÜmXV`œnôLƒèšxlŽšLX„˜L²ašVVmÈX@ķ˜lnU„Èl`ȹš@ŤŽ°U@x„KnnV„mlnnUl‚lVnnaŎwlVÞ҄@n¦šLVŽ°lšwVk„Lšaގl„n҄š@xmLÞ¤Wnœ¼‚WÈLVVUxlÈô„„WVaU_VKšKXUÆbn™‚nôK„bÞw°bÆWXamVwœK˜™Uw¯WUk„UlJUwVUa™@@kmyzm›ĉw@kVwškƒW¯ÅKU_Vmƒƒ™xU@aW@@kK@w„a@Kƒ@@kVUƒaky°_Vm™kna¯K@™ƒL™wġk@@IÇóX™ƒwVakmV@mwXUWanƒlĉ@ǙUw™KƒƒóšܛNJۄm°@›w—Å@ƒ±b¯Wƒ¹„WVwŹĕ¯kVmōb¯w@aƒwmV™UUb™V™IkaVwķ™xk¼›b@VXXó`󗙘ƒ¼Çó™¯„kŽÜš„š¼WŽn„źĖnššxl@X`WzœÆ"],encodeOffsets:[[133921,46716]]}},{type:"Feature",id:"2305",properties:{name:"双鸭山市",cp:[133.5938,46.7523],childNum:5},geometry:{type:"Polygon",coordinates:["@@™UƒƒUwó™mÑÞÑUÝÝUkmmŃyV¯ī„¥ƒUÿĉ¯mÇkaWbÅX¯aÝxƒaóLmmšÅaWV™LULV`UbƒXóƒkÇVwUUÇKX›»XmÝ£nK@wƒ™mÑkƒÝ™bƒKUl™x¯kU™Km¥ƒ@ÝÑkUōxmbUmkVkmmnkUƒmmƒL@w¯Vţ™@Ǻk_ƒÇmV—k@ĸVx‚VÈ°lLkllšUbōwƒnVW¼nlUx¯XmWUnÝ@™xÝUó¼¯J@LVbkJWnkb™W¯„ÝLUxƒn@‚™n™Ü™b¯U¯n›Wkz„°mJ@bkxƒX@èÞVšxlaX„lVVœ„`°@ȐÞa@mÆ@@bÆ@ˤĖm™Xōƾ@@wš„n@@WÜ@kb@²ÜlŐLƦ™nw™@»„_°@„y°UV@@¦„bÆKnƒšI°l„IÆ`œ°W@k„llUV„ÞVVx„LƚÞVX„WVnnUJ˜@UbnKVnm@Ubn@@x„L@VƒbÆĸ„`UĀƄ„Ò°šŎa²ô°bôKÜVĸw°bÞwȎVnÞōVUÆlXU"],encodeOffsets:[[137577,48578]]}},{type:"Feature",id:"2306",properties:{name:"大庆市",cp:[124.7717,46.4282],childNum:5},geometry:{type:"Polygon",coordinates:["@@mÇ@сǰ¹¯J±ÅÿƒKUw‚I@™wšš@š±Å‚™X¯WanamKx™I„ylX°wƒm„wğKUn±@nVDŽUƒÅkƙ¯Kšmmwš@@¯UkÝaUUVK™mU™lk@ƒ¯„U„`ĸ@V‚mœxVxܐ@bÛ@m‚ÅL@¦š@@y„L‚U„Ŏ@ÆɅɴblġÈL@wÇaša„ƒkkVƒaš»@ó¯_ÝJ™wÇaÅXny›U¯¥Å„@w™bÝa™Lmm@@ƒVUŽlbğVmš™¯Xƒm_ƒ`¯_Ux™m™L™a¯b@mƒaó¦Çk™¤V„@bóJknVx™VXx±aƒLUbVxkLVlLWlƒ@nX@VÅbWlÈnƒx„bWšÅbmŽ@xœbml°b™„XbW„XVmnn`ƒLmšnbmb@šk@mwU@@š¯Jlbk°lbkšmLXxmbVbkllšÅނxX„xVWVVa²VܲnxƒVVnÅlVlƒL„¼šb@xV@XŽVbšIÆ°„¦„lźb„Ĭ°¼Ulšb@kĢ@lw„@ƒÜlnȂƄóȘI„ĉ"],encodeOffsets:[[128352,48421]]}},{type:"Feature",id:"2304",properties:{name:"鹤岗市",cp:[130.4407,47.7081],childNum:3},geometry:{type:"Polygon",coordinates:["@@Þ¥‚™ô£nƒn@°„ÆUn`mXn¤mX„`UX„bÆKVb„@@bnW‚b„wšUšbĊ@šx„@nbšWVmƒ_mm@ó»Um„ŘWXkĠ»²¯‚¯nķšwŎ@ĊšŎK°bĸUnјKȦĠÈbÆknJššÆUĢV°IšŽšVƾƒwaV™ƒƒkÇ¯¯»™mķkۃWm@£ƒóIĵxݏōIğxmm¯_ǙŹš™K™wťŽ„UVUŽƧwóxƒxġkĸķƒIk›ĉ™xóa@UmK@kVmUŻ„¯šVxkŽġn™‚@mmJ¯n°V@bXVÇxUzÆxkxlVkV@¦lbœJ›LUbšÆƒ„X„ō¼@xƒl@™J@bVxƒXUš@JÈ@šn™xVÆUXš‚„W¤knÆb„°"],encodeOffsets:[[132998,49478]]}},{type:"Feature",id:"2309",properties:{name:"七台河市",cp:[131.2756,45.9558],childNum:2},geometry:{type:"Polygon",coordinates:["@@²mŎ_lƒĊƒ„ƒĢV°°IV`ĢbšaĠX„°@b„JU¼Wnš„UJ@„ÞLlxV„„@n`lIUa@K°Iô»ÞVšwÞ@VmnX°WVwmkX»‚U„mŎxVak™lkkKǯUUwÇWUn™U±b—KWƒ™Kk™w„çóK›mU_nW¯ÛmV@bÇKkbkUml¯U±VÇaU™™amlUU™LK›„k@ƒU@mwÛLƒŽƒwkLóÆm_™±™nkŽ¯@@n±KnŚlbkVV‚mz—lWXº@Ķ°"],encodeOffsets:[[133369,47228]]}}],UTF8Encoding:!0}}),i("echarts/util/mapData/geoJson/he_bei_geo",[],function(){return{type:"FeatureCollection",features:[{type:"Feature",id:"1308",properties:{name:"承德市",cp:[117.5757,41.4075],childNum:11},geometry:{type:"Polygon",coordinates:["@@lLnlmxn„„IVVlUnb@VVxXJWL@LގVnnV„J˜_@wkmšK„b‚x„wXk˜WXXšKlb²K@nVVVb„L@WlU²„lKVnUJVz@VVb@lżmVUVnbôaVX@°Ub@lWbXš@b@bVb°x„@VxÈLVlšaÆ@Þb²k°@lVUŽ@Xn@VW‚LXb@¤VXšKVVVLnm°_ƨ¤@aUIVa„alkX›°k„™V@„alwUVy„U@k󙰃na°UVUUmUÆw@mkLVUƒWVI„WšLnn@xlVnK„myU@ƒU°UXaV@U¥ƒU@Uƙ@aVUkWU¯ƒaU@WLUV@bkbmKULmKkUVUkmVIUwlWV²™Uml°U@W„LUwVm@UUK@_ƒKUUÜaXw@ƒVKUU@mVIUUlmnIVVVbÈVlKnbVKš@nI˜@nVnwVLVK„K„„˜Vnb@aUIVW@In™°@lVnIš@lWĢ@°UVL@b„@VyUUƒa@w@WUnU@Wǯ™K@UkkJWaÛbmk@mVaÞU@amkWƒ@mXUKkÿƒ£@a„kl@Um°UXwla„al@nmlXnW°znW@aƒwV™@ƒakbĉ¥VmU@ƒIƒVƒUƒJkUmWU™KbmkUaƒKkUVU@KV@@klw—™WaU@kmƒXVènbmlUUƒKƒX¯JkbƒI@JmIUWU@ƒLml@XkJ@U™kƒK@aVKwWa—IWwƒmUƒ@mU@J@UaċU™aUUƒVkI±ƒk@UUƒ@UbVVm@UVKƒLƒlkIWaULUWƒXUJU„ƒ@WbUb@lkXUxm@@JVn@J@b„nƒb@Vkx@bšLU‚Æn„JšaVXnKVVmzX‚°V@_lJXxWXƒK¯bÅamUƒ@lUI›bñJ@LÇKkIÇ`kxWL@„ƒ@@bUVUb¯xWKk„Å„VlULW@ƒŽn¦Ul@I™lmUUUVm@kWƒnkKma¯XUKWmnwVwÝL„mŽ™VUbUVWb@Lnxm„xVŽmbXx›¦@„nb@`™„ƒVƒ@kbƒLU„mVUlkbVXkºmnm@@xk¦šbĢÜlš"],encodeOffsets:[[118868,42784]]}},{type:"Feature",id:"1307",properties:{name:"张家口市",cp:[115.1477,40.8527],childNum:15},geometry:{type:"Polygon",coordinates:["@@k™ġۙal¥@wn@nml¹UWlaVknUVƒ„Kla„@„Ušƒ@_ma@ƒœ¥WwnaU‚wnƒmw@KXaVUVašUnmWUk°™lƒnUVUXWVw™IWVóKUI@WXƒxUU@mma@kUKWLkw@yk@ƒaVkUUċaUU@Wk@Unm@UVmLm±IUƒkJ™kWƒ@a„I@m@U„ƒVƒ„Ula„@VXVƒXmVwnkWKƒKU_k@m¥ƒmX_™JmnU@km@U@KmU™VƒU@U™@Umk@@LƒmW@Û£Wƒka@wk™@aƒI@mmk@mUa@UmUƒIƒwW@aWUƒbU@kbÇ@kwƒ@makVUk™U@aƒm@aU@mxkUƒbƒKUXUƒ±KXVWLUK@wkU@V™@WXUa@WbUxƒJIƒŽ@¦VèVVX@±ê¯KUIƒ`¯UULVx@Vƒ@UKƒIƒVkLmVkKmš@nUJÝbkIUJVXšVVxVbU„VJ„Un™°bV„mlU°„XnK@Ul@lVÈVUXšx@W„@VXšV‚KÞb„n@VnbV„m`ƒUx™kW@UVkL™Km¼@lUnUJVnV„XV@Vm@@LV„klƒIkl@VƒWlŽULWKUL@mJ„@blbUVUlmzUJUxm@UUbċÜk@Ub@VšLVV„¦ôbVŽmšUKUkU@m„„@VlVn¼WbUJ¯@@„°šnIllÈl˜@nXšWlLœk‚J@bkxlxkxlXUlklJƒšXL@bW„n`@nƎXxlL@xl@Xb‚LœKlVlIXblVUbUJW@lX@VL@VVŽšXšJšw„n@WnL°K„bVbl@VI@K„@U@nmVmV@XUWI@aXm@™VUUkWmn@lmUUk@mUmK@UnwVĉ@ƒƒmU_V@XJôVVUšLVUn@šllUnJl_n@šml@XŽlLlw²LVJUL@VmbVblVXmVnlš@Ť¦„nn@܎@bšl„@@XV`„Unb@VlLVb²J‚Xn¥ÆÑ@¥Þ@"],encodeOffsets:[[118868,42784]]}},{type:"Feature",id:"1306",properties:{name:"保定市",cp:[115.0488,39.0948],childNum:23},geometry:{type:"Polygon",coordinates:["@@VbXWš@@UlV@xVLXKWU²LV„VW„L„alVnwV@@b„n@bšVVllUnb„@lxÈ@laV@„aXV@b‚X„x„J‚nV@VVb@nnl@n„J@blšl@„ašƒU_VWUwVUškUm™Ukb±mVwœU@VIUW@UWk„@VU@ynL„m@IV@‚bnK„LVaVmnIlaXwV@@WVL°@@xnX„@V`V@VbUVVLVKnwnL@ll@@_V@VVnaÆ@œKVXÆ@nƒ@wƒKmU—™Wm@km@kÜKXU@ÑW±nIUwVƒ„Kla@I°wU±kškmm¯mƒ_ƒJnƒaƒwW@IVaUama@wƒUƒmU@mVw@aXk@mWa@£km@aƒ_kVmUnWW@¯bƒkUmk@ƒVÇm@@kUU™KUU™@UVUamVUaWIkb@xU@@amUkKƒVkam@@kVUkUWmKmUkLUb@xmJƒ™U@UImVÛVmnUwƒJƒU@VƒX@UWm@Ub°¦UšmxklmX@`ULU@@UW@@xkn¯@makV™UmxUb™°ƒlUšƒbUbƒnUJƒUUVƒa™LkbUU›JUU@mUUUƒJkaƒ@™xUIWJƒUnƒJ@V™zƒ@kb@`@bln@l™bƒŽ@X@š@š„@Xl‚bnbVb„@„„VJlInlšbVw@U„K„l@lbnan@Vb‚JôLn‚UzlV@lÈLVbVK@LVx—VWXX`WxXz‚bV`UXV¤nx@„bVlVnVlUL"],encodeOffsets:[[117304,40512]]}},{type:"Feature",id:"1302",properties:{name:"唐山市",cp:[118.4766,39.6826],childNum:11},geometry:{type:"Polygon",coordinates:["@@„@VVl@²„lJ„UVVšbČVVb‚@@InV„@‚V„nXx˜JXb‚xUL@b„Lšl@VlI@Wnk„KV@VXnJ@I„Jla°I„W„LVVnkmaUç„WVkôaܯ„@nV°wnJlaV@VUnUUaW¯wXWWwna@£UaWKU¯ƒ¯@aVUkKUamUUƒn»‚an™„IVwUWlkš@„LlWVakU@K„_lƒšbÞU°@šy°n„@„KÈkWW™ţ¥ĉōƒkġWUw¯£¯ƒÇwţwƒ@kK@kƒ¥ÝwÅbǤېťV™lW°@ĸ™x@VVVULVLkl@V@Xƒ`Ub@Xm@UWbƒk@ÆVbnLWV@lnXUbl‚@X¯lmU™VkKWLkK@_UK@U@UmmUxmVXLWVULkU@`W@ULUK@XlJXzV@@xml@VU@UX@Kk@WbUK@Xn`ƒXmJnšmškxUVbUVlVVxUbV@nKlL„kVKÞbVKXI°KVšmVUIUKULVxVJVLkV@Vƒ@UbU@WUU@UbUK@b@nƒV@VkLmb@b"],encodeOffsets:[[120398,41159]]}},{type:"Feature",id:"1309",properties:{name:"沧州市",cp:[116.8286,38.2104],childNum:15},geometry:{type:"Polygon",coordinates:["@@@ln@UȄŽl@Vn„l°aX@mXnVlU„`@bln@¤Xb@nWl@bUx@nnV‚„„V@xnbVbUb@J‚X„x„b‚mXa@k„UVwlW„k„KôVm@w™kkK@kl»Èƒm™VKXkla°@XVV@VI@ml@@Vn@VX@V@J„@VxUzVVšš²blVk¦@šĠ@@»š@VK@VÈLlK@XnJ@alIUl„a„VVbš@„n@a„U@WUIV@mUn@mKXml@lL@LnWšb@XV@@a„VVb„V„@VV„IVWÈb˜IÈ»ƒǟlWšaVUÅUƒƒ™Um@kVU™WVkaUwmaóUƒJUU¯ÑU¥mk™¯UaƒKÅnÇyóXmWÛX¯aċbÛa›J—W™ÝU¯»ƒaóóUm@IƒšVVl@bƒLUJWLX@@xšXUxl¤V@V„nVUV„XVbVš@Ž„@@VVn„°VŽ@ţU¯VƒUmƒUWV@mUXƒaƒbUKUwUaÇKn„ƒVk¦Wb@VnLmV@bkV@n„xW`Å_UVƒV@bƒUklVX@VmlUƒx@VVL@x—VWVL@VW@UUm@"],encodeOffsets:[[118485,39280]]}},{type:"Feature",id:"1301",properties:{name:"石家庄市",cp:[114.4995,38.1006],childNum:19},geometry:{type:"Polygon",coordinates:["@@la„@šy@U„I‚m„VXIVJšw„@lb„IVVnV‚@VVœIVVlašK„bVU„VVI„mVa„aV™„kš¯VanwšVlUnb°@lm@wX@@VV@VK@_nWlknwV™¯¥Van@VX‚@„W@U„V„IVxnmÜUnUVJV@„šnI@wValKnV@k‚mU£na@mVk°K„LVa@UU@UƒmknWWkXU@aWW@@km@UaU@@klK@UkaWaUnamm@U„a¯wWU@UkƒL@ŽUn@x™V™lUXVJUb™LmU@aUWUkmKkLUUm@mW—XƒaƒmmkkWUm@@U¯JUUm™kU¯@mKĉxÝwÝ¥LƒUóŽmwkUUUWVkKm™kKmLX„lxVLVxXJ@nVJnz@VWL@`nX@šƒxƒ@kVUUmJmIXx„JV„ƒnUVƒ@UVV„@LUšƒ`UXVVƒ„ƒlXL@l@b@VmX@b™xn°™UƒbkKWLXlW@@bƒK„mKULmakLUlmb@šXb@xmXU`V„b@`lLx@nWVXL@‚°WlXnlb„KVK„XVb@˜X@l_lJ@V@XnŽ„I"],encodeOffsets:[[116562,39691]]}},{type:"Feature",id:"1305",properties:{name:"邢台市",cp:[114.8071,37.2821],childNum:18},geometry:{type:"Polygon",coordinates:["@@nKlLnšlLXUVVlVnxô„V‚KÞ¦ÞxĊwnL°@lVnšVV°I@Vn@V‚lXnl„n„b˜WnXn@VVlKnLVlVX@bnVšKVaUIVWškšU@wVm@¯@U¥VmU_°lšK„k‚w@LX‚Va„U@wšUƒUUKlUóW@UVUœUlƒ°K„wlKU_na„KVnlKkkšWWa@IœJVa@IlJnU@„KVUUmVlaXUl@lm@kXWÝÑnkƒ™±™k@wğ›@@U@mKĉLmVJ@zmlnŽWLUÝJU_ƒ@@šmJkXUVlbklÝ@Ýa™b¯@¯±JÅwġaUU@ƒkU™@mVI±bUKƒL™WUXƒJkaƒLóKULWbUVkKmnk@@bmLUŽƒl@b@mnmJkUULƒaƒbnŽmn@lVV@¦n@„l@b‚znx@`Vz@b„xnV@xl„lbnKVx"],encodeOffsets:[[116764,38346]]}},{type:"Feature",id:"1304",properties:{name:"邯郸市",cp:[114.4775,36.535],childNum:18},geometry:{type:"Polygon",coordinates:["@@„bVKlVnInm‚@@a„kVnK@al@nmlLVUXaVKôL„Klb„IVWšX„KVL²a‚JnUš@lV@„VVĢbÆx²I°Ž°@šaÞbÞ@lkkaVUlWnI@™„@V`ÞI‚VXKmnk@y‚InUĊKƒÇkUUamUUkƒƒ@aU@U™ƒk@WUwVkVJVkkw°a@„mK@UX@VV„LVW@wšwVa@¯Xm@@lUIWaU@UWkXWmU@UwmUkKmn@lkVƒ²™VƒaULUVmJUUUwƒLma@™UmkIUm›L—mVšmx@b™LUamKÅL@VmbkU¯KÝamzkJUb±Vkb™L@lU@WIkJƒzkKmKƒnUalWkkKW@@nkbk@WW¯XUVUJ@XlJ@Xƒ@XlWLkUƒ`VUnaWa„UV@UVIƒaUxUUmVƒK@I@W@DŽU@@U@bƒ‚@nmKXmx™@UxkVWUX„@`VLlL@`™zX‚Ýb@b‚„@VUVkIUJVz°KVlnLlKnL„xlLVVUVlXUJ@nn‚„I@mVUlbn@@Žm„@bV„nV"],encodeOffsets:[[116528,37885]]}},{type:"Feature",id:"1303",properties:{name:"秦皇岛市",cp:[119.2126,40.0232],childNum:5},geometry:{type:"Polygon",coordinates:["@@lnV@Xb˜škx@lU@@LUVlV„LVbnl‚ašLXVVn‚l„I„V„U„JV@UnĊ¦la„bš@nJ°UmƒV@„wn@VU„JVI°bnWlXnWVLVK²b‚akk„lI@aUaVƒUwVUUalaVwnUVak¥šX@W‚kœLVÓm„mUK@_lWš@n_UK@alÅ@ğÅƑŃݍmƒ@їţÇlƒLƒ@¯m™z¯@ÝV™ak„ƒ`@LlVUbkXƒK™@klVXUxƒJmšbm¼V„nVVblLUV@b„°V°XLVb@¤mbXxWX°xXŽVbmVUVU@kbmI¯xmUƒ@Û°óbUl"],encodeOffsets:[[121411,41254]]}},{type:"Feature",id:"1311",properties:{name:"衡水市",cp:[115.8838,37.7161],childNum:11},geometry:{type:"Polygon",coordinates:["@@„KVlV@X°xƒb@VnnmbVŽXblb@VkL@lV@Vbn@@l‚@XX@bWVXlmXnlV„V@@VUbƒK¯LUl@nmbV¤n@l‚LXnlVUV@ln@lb„UlLnV@bV@@wlaXJVbnUVbVUš@VVšLVVn@VVX@@U‚KXU˜U@wUK@U„wVnk@UUWlk„V@a„UVUÆ`X_ƒw@mlU@anUmK@UXal¥„UmƒÈLVbVxVL„a„bVW@nXU‚Vn„„V°UŤV@Uƒ¯Um@Uƒ@@U™UaƒWVUmUUƒU@k£Vw™W@wW@XKƒIUa@wU@@al@UK@_mKXKƒbUU@aVKmš@Xmƒƒ±@kbÇakLğVaUw@a@ƒmkUJƒk@ykw@£ƒWX@lknk@WVkbUŽVnUVƒL@‚mVkI@JUb›I@JXb™XllkLUmƒLmbV`kLƒx¯Lk„›VUV@VôXkVVL„V™V@xƒVUbW@Kxƒl™L¯kV`UnV¦°@"],encodeOffsets:[[118024,38549]]}},{type:"Feature",id:"1310",properties:{name:"廊坊市",cp:[116.521,39.0509],childNum:9},geometry:{type:"MultiPolygon",coordinates:[["@@la„Ušš@šUnL@VWbklWxnIVV„V@X„JlbUlšXVbn@@K„mV@@X°WVInJmn²@lmVbnL@amKV_kwlmX@@LVamaXaƒaVU@UnJVanLlUkaW@UaVakK@IlKUU@an@ln@alKUƒkIVa@a@klaUKUV@UkUV¯šKVƒV@kUmƒU@@a¯ImJUU@VV@UL@Uƒ@@WXUWa@Ukwm™@ƒX@@w@al@@aVIUmVUUUVWUknK@I@™l¥kU±a™™UUVyUwƒ@@I@UUWm@@Uk@@nUJU@WU¯@kbWlULnšÇ„k¼@llLšl@xUnóŽƒLƒlkXUxƒV@lWb„I„`°nnn™llŽV²¯x@JkbƒLU„VxmJX²@ÒWVÛL@lln@‚Xn˜šnV„L"],["@@@kX@Valaa@KWI@UXW@WanaUIW@UaUKķŽk_W@UVUKUš@bƒ@UamxVXnJUbWVXLVbn@W°kb@U@Wó¼mIU¼k`V„@bVbl@„lX@lUôVlUœIV`lX„Vn@lUlVn@„l@UVaƒIUWl£Um™VWU@@UUKlUUUnƒVL@KšUnLVWUa›@™U"]],encodeOffsets:[[[119037,40467]],[[119970,40776]]]}}],UTF8Encoding:!0}}),i("echarts/util/mapData/geoJson/he_nan_geo",[],function(){
+return{type:"FeatureCollection",features:[{type:"Feature",id:"4113",properties:{name:"南阳市",cp:[112.4011,33.0359],childNum:12},geometry:{type:"Polygon",coordinates:["@@lKl@nVV@„bn„@VVnm‚nL‚LXx@š„‚VLlKVU„IXWÜ@șlbl@XUĊUlwnW„LÞw‚m@ÞUVmnVl@nX‚JXLm@VnnJla„I@VkxVb„@VŽln„J@knKVn„@°aVanal@XK°b„‚@š¯VJXIš„VK@al@nV„k‚@nK„a‚b„@XL@blVVKVLXK„@VaVI°mVaX@V_@a@yUkVw„VšIVašJ°™@anIlaV@nKnXÆm@wUUV±UUWUKnaWwXUWmŁ¯Vƒam@kakImƒUKƒ»lan@VXXa˜W@@UlUUa@a@UlwUƒV@Xal@@anIVaUK@V™XmwVmUmV„LXl‚@nalLnal@„šnKlkV@@UnJ‚UXnl@nVl¦V@@VnJ@nUVVVVIn@Va„JƗn@@K@m„kƒa@kmWVaUI@a@™k@@aUL@mmaVIUKUVƒ@@IU@mƒUmmL@K@UUUU@mW@@nU@ğ»mVmbk@klW@UXnV@LƒJm„™lUnUJ™UUUWƒƒ@UnkKƒxmLa@ƒ@@lUU™bmUVWk@@nkUmam@UakJU_ƒVm@ÅlÇLUVmVUwULƒKU@ƒk@UƒVUlU@@Uƒ@UaUUWaŎƒzJƒaWLkl™b@bmL@„kKƒabWŽUVƒ_@mV@b¯JmXUbUK™¤ÇLUU@b@JkLWmkUWIkJ@VmX@JUbVXU`¯VV¯blK@LXKl„UV@Um@@Uk@kxWŽkbƒL@KkbmL@‚UXmaU@@l@x@blX@xUJ@bULUlULÇ@@VšnU`W@@nÛ¼U@@VmKUkm@VVX@@xǚ@bUbVb@VX@@x‚LUb@lƒ¼XLlbUlVVU„Ub@n"],encodeOffsets:[[113671,34364]]}},{type:"Feature",id:"4115",properties:{name:"信阳市",cp:[114.8291,32.0197],childNum:9},geometry:{type:"Polygon",coordinates:["@@VllInJlknJVkVU@mXlUÞ`VnV™VU@U@y„@nXlKV„nJVkXKWaXI‚b@yVk„VUkVwn@‚K@nW@k„KlUXVVUlbnUV`n@V_V@llX@@V„b@bV@@nlVUb¯‚WLnbmb@ŽnLnK˜b„U„bVWnLlaX@VVUX@Vln@`kL@ll@VXVJÈIVl@XÞJ°Una„LlylU@UXKlnn@lanLWWnbVI@KXKVL@LVWVL@UVKUIVWX@@XÆJ@In`@lJVI@a„WšÛnK@UlK@UU@VK„nlm„nXal„UllLUbVVšknJ@nV@Vm@a„l@@xnV„„lJVUU@™w@aƒk„@XW@_mWnUlŁUmVKV@VXwW»XƒWaUwnkWUkVUƒU@@@WlaUkkaƒIWVkm¯xmIUmƒLUVƒaUIó»m@mmwXk@a›mk¯¯l™@wƒmkLmmU@UbkUWJ@XUbƒJ@b@l@znÆmK@Xk@Ub@lm@ƒI@akmVKUUVUkU@U±JUbkƒ@IWmkxƒa@UUV™UWVkIUaW@UlLWn@VkJƒI@VkK@L@bmKƒkJmUUaUKWXk¼VxnJ@„V@@VULV¼ƒ@@UkaUlWL@U@W@IkKmL@KULUWULWKUXUJmIƒb—KƒŽƒ²UW™nWKUUkLUƒmUUam@UU™@ƒmUL@xkV@„VV@bmV@Vk@mwkUƒVUx@mbX‚ÇnVb„‚UL¯šWŽnUVLVb@xnlWnU@UVUVVUbVVlVkn@llVUXUWUXVbUJ@bmLUJnb@nVK@bl@@š@bVJUbnX@l„b"],encodeOffsets:[[116551,33385]]}},{type:"Feature",id:"4103",properties:{name:"洛阳市",cp:[112.0605,34.3158],childNum:11},geometry:{type:"Polygon",coordinates:["@@VVUllLXl@LWn@J„@bƒKUVmnL@`VblLnbV@„b@JmL@LnV@VV@¯„VJVnXL˜@nm@aÞ@‚a„k@m„IšmVbXL‚ynLšk°@°aVJnUV@UVVXk@WJ@VXLlUnJVnnƒ°U@»°U„wl@šb„WmUXƒÆ@VLXU@m@U„a@I›mkb™a@naWW@_@WXUV@@U‚ƒ²@„K@I±U@¥kKWLóLlƒa@£Um@kWKXU@mlLXUVKUU±J¯_@`UL¯Wmk@Wa„kkƒlUnƒVUVaU@KUU@mmK@_ƒa@KX@VaUIm±™k„aVKVUkw™@kaƒƒW@kbkL±UUaƒK@UUKVak£ƒ@UmmL@lƒIkmUƒ@Ualw@UƒJkbmIUmn@WKImWk@mUUnÝV@ŽnÝxƒKmXkxĉVWVk@kaċšÛ@WXƒJUV@zŽm„VWnbUbVbšLlUnŽ‚lUÒnWV—VWnk@@Vm@kxm@Un™l@Ll@@V@šXnƒškJV„šV@nlVXx˜U@l„n@aš@VLnWĊ¦nxš@lbVKXLl@ރVLƒ„XJl@XXl`lIXVl@Xl‚XUVšK„wV@lanx„zUbVJ@VVX@b"],encodeOffsets:[[114683,35551]]}},{type:"Feature",id:"4117",properties:{name:"驻马店市",cp:[114.1589,32.9041],childNum:10},geometry:{type:"Polygon",coordinates:["@@n@„b°UƂXnVlnLÜ@VLœm@n˜@na@J„„m@k„@lVšVxXX@„V`lLV„XVV@VVÞLVV°„²@lašbnxV@@b„Lšmlm„_VWnIWUna@lšLšbnV°ƒVL@KšV„LVUVaVLXK@mÆXna@wVm„a‚@Xw@KlL@a„@Va@wUkaWnIVƒla@Kn@Vn@VUl@nKVn„J@LnK@aVkVUUWƒ@VakUVanI‚²X‚W@UUU°KnUVLl@XaVK@ašU@KUI@W@_lm@KkLUKV_Uƒ@»@UVJ@XV@@mVL@K@U@Kk@VwUUm@kmWL@VkVkzƒKmb¯VÝI@WUkÇJUIUWk@@klK@_km@UVWUUW@kbmKUXƒaƒV—amLmK@namaXK°VakU@mU@@aƒa@UW@kkU@U`m@U_mVkaUVWUkVƒL@lmX@ŽLm@UxVlƒUUl@zaWJXbWLUlmIUƒkLmWƒ@@z@VUVUšUmÝ_kVWŽ@nUVUlmIklmIkJUkƒl@n@Lm@؃IUbm@UJUUVU@mmI@UU@k¥mUk@WmVmI@VU@klmLƒ™k@mbkKmb@WkƒKUŽVnUnnxšW@UVLUbmJ@bk@WbU@V„kx@V@bVbkV@V‚@‚—XWbUWm@kb„¼VLn„lJlb"],encodeOffsets:[[115920,33863]]}},{type:"Feature",id:"4116",properties:{name:"周口市",cp:[114.873,33.6951],childNum:10},geometry:{type:"Polygon",coordinates:["@@lšnb@xlJ@UnLlKXUlJl_„KnV@xVL@bkbVVUè@šWb@„Ubmš„ŽkšVšmbX„VJnUl@„a°@@b„LVbƒlXx˜InmnLVw‚anJÆw²IlmnXVl°VVbÈaVb„@lkn@VWnLlUVmÞUUklƒkƒVkUaVaVaUw™K@kkaVWmw„_„‚l@nU„VVb@b„aV@VV@zXJl@@kl@šlœk°WVnÆbnbUšVJ„Iš@VKVm@k™K@_kK@a@aU@@wW@@k@aUW@IUWVUnLlUlVXKVwmk@W@—VWa„¥@k@lnƒUIÇKUaU@ƒUUVmIUV™Uk¥ƒVma@¯k@Wanwmƒ„@@n@@m@UIVƒkUVamUXWƒaV™U_™@ƒmUVUImW@aUIĉK@VmI™b@lU@@n™JƒkU™@KƒIUmmLk@UVm@UŽm@@LkbU„mJXlbV‚@xUbƒ@@bkK@LWx@ƒbUn@xmbÅW@nWLUKUbUVƒK™U@LUK¯„mU@šVV@xULUŽVL@bU`WšUz¯aUamKUaƒ@@xkX@x"],encodeOffsets:[[116832,34527]]}},{type:"Feature",id:"4114",properties:{name:"商丘市",cp:[115.741,34.2828],childNum:8},geometry:{type:"Polygon",coordinates:["@@XVl@lLȃ„@VkV@V»UanƒWX@VaÆÇô@ÈaVX@xVJXUÞU‚aVLĸbXKl„V@šm°Vn_ny˜XX»mUk¥lK@a„_@yšInaVKVa°_@WXI@ƒ@K‚VnIlbnaV@„l„@‚a@_w@ƒlwUKm™Xa@UV@š»Vƒšw@kUKVUUm@w±VUXUKUwmJUUƒ@km@@±mXkmUI™@mm™KUwkbWakLWaUIkJmŽƒX@l@@VUX@JWbX@VbULWbƒlUVULknlV@bVJk„mb¯KknWmk@@nmVkx™@ƒVmU¯KUnUL™@ƒJUIV™maÅaUm¯X›l™kk@@lk@WI@yUUU@ƒb@aUaƒUmVk@ƒƒ`nxUXlb@lšLVxUbUbVbUll„k„VlÝVUnkVmKUXm@klƒ@ƒnUx@xnxƒn@`VX@V²x@V@b@„Wl@zU`VUVVb„L@Vƒb™W@bkXllkLWV@V„@VVÈwlVœ@@X˜K²Llb„WnnÆL@VnJWn"],encodeOffsets:[[118024,35680]]}},{type:"Feature",id:"4112",properties:{name:"三门峡市",cp:[110.8301,34.3158],childNum:6},geometry:{type:"Polygon",coordinates:["@@WKUmUI°ƒU@@UmU@KnK@IƒaU@makKUa@_‚KnmVU„L@a‚ƒ@IXm@KWkkKVkUU@aUW@UUIVaƒymwkbU@ƒx™LVUWWkk@WUkJk_WWk@WI„ƒUK݄k@WKULka™@mwĉ¥mXUK™@@bƒm@k—VWwkU@m™UUƒlI„™Wm@™@Uk@@KškVmn@lwn@@Ul@Xm˜UXUmVсkmkV™KUaVamaUXnƒ‚@ykLUKƒ@™WwKmKnUm@UmƒƒaU@mUk@kL@lƒxċxUnkVmnXxWb@`kzWJ@V—LmVUn™lmUL@lW@Ub@VšXUbš`VLUbUJ@nmnUlUUm@@bUJlnU„š‚U@lxkbƒ@@XƒJUnƒ@kb¯VVVmlXXlJlzn@VlkVW@bkK™bmškŽUbVb„lƒXVxšKÈnšwÞlĊKlšVnKlwX@lL@xlUnVn„@šl@lmX@ƄÈb°¼ÈwVJlx„_°xšašlšUÈxlUnbVxnL@lllšbm„n@nb‚@@V„L@V„@@„VLšJnIVVlKnV„_"],encodeOffsets:[[114661,35911]]}},{type:"Feature",id:"4107",properties:{name:"新乡市",cp:[114.2029,35.3595],childNum:9},geometry:{type:"Polygon",coordinates:["@@XVlL„K°bUblbUbšl@nX@W„XVVKVkš@@Žmb@„Ubn„W`kL„LƒV@VVLnKlVXIlVš@@a„@l£nWlƒkVa„@°bnUlLVlna‚bnUVUXKlU@ƒ@lk@a„I°y„@ôkUU@wšmôšnkWakml™UkVmkUlmUUm@nkUKWanamU„LXW@U‚VnUln„`l„œblL°KXV@ĠJ@L°„šJšUVw„anK@UUImmƒkK@¯±Um@IVmUmmÅnWaUK¯aUk„w@W±kVƒx™U™VƒwƒnÅJUIWaÝJóI—bm`ÝbÅImJUI¯¥¯@mU¯UƒJmnUVóUkl±V@zXl„bWVXL@bm„mº@@XmJUXU°llk„@nWJk@U„@¦U`m¯ŽWx"],encodeOffsets:[[116100,36349]]}},{type:"Feature",id:"4104",properties:{name:"平顶山市",cp:[112.9724,33.739],childNum:8},geometry:{type:"Polygon",coordinates:["@@l¤UbVL@V„LVb²VlKlaX@„„lbš@lxUVULƒbšln²VJUbW@@L„b@`nL@nVV@LVŽUbUVm„kVl„ƒlXbl@Xn°ŽVK@_°`²IVVV@VUVJnInaWK@Uš@„K„LÆ@nmlXXWVUUw@klKVa@knyVkVanI‚JXUl@XbVUl@@aša@mXk‚bnK@UlK@UUUVaXaWmkUm¥n—WmXaWaœkl@VmÞb„KVL@aVI@mUwVm„@KōméUL™KVaUk@kUK@U˜WXI@VlKXU‚@VVnInVV@VLlK@UUƒkKU_@ƒWWUwU™@klƒn@ƒƒ@Imb—@@m›nUKÛ@mKUkWVXxmbVLXŽVVU²VV@xÅnmWmLU@kbmJ@b¯š™IUb™JƒUUxVl@z@bU`W@Ub¯nUJUbƒ@WLUKULkU@aWKƒ@aƒbmL@ƒlmUk@@bUL™ƒWJUI™°@ƒŽ¯aWLk@mbUb¯b"],encodeOffsets:[[114942,34527]]}},{type:"Feature",id:"4101",properties:{name:"郑州市",cp:[113.4668,34.6234],childNum:8},geometry:{type:"Polygon",coordinates:["@@@nWVUKÅ@W„nVnI‚ŽV@œkƂšwV@šnn@lxÞlnôJ˜zXJl@nalUČVlƒl@²UlkôVVUnm„I°VnV°@°¦VJnIÆJÞan_VmU@ama™@kU˜¥kaUklw@UIV¥kVUI@ƒmmUÅmUlƒwVU@amU—JWbUakVƒ—Vé¯Im`ƒk—@ƒwVWmLkU¯ŽƒXkWmLmx@UUƒbm@@x™J@LbW@UUVWUkVKƒ@ka™IUamKUkkmmLƒUkJUVWXkWmnÅ@ƒKƒL™@@VXLmbmJUIUVU@ULWVkK@nWVXL@lVn@¤„b‚kôKXKlL@¦²V@JƒL±@„@VU@WV@X@`XXmb@Žšblaœn@Jƒb@V"],encodeOffsets:[[115617,35584]]}},{type:"Feature",id:"4105",properties:{name:"安阳市",cp:[114.5325,36.0022],childNum:6},geometry:{type:"Polygon",coordinates:["@@°kVaV¥kVmUkWkWVkVKUwkkmKUU@a„wWWXWakKWkXmlašIVmX¥ƒU@a„@WnK@kƒƒ™V™I¯ƒ@KğI@WU¯LkK›akƒƒ_kmmVU@VWXƒKnVmbXbVLmln@VVknlVUnVlkšlnXbmlmlXblnÈlWbn@@nšK@V„L„bVV°VVzšlnš@V™xƒI™b™ŽU@WLUa¯V™UkWõ@¯kkmxk¼l‚„XUlVbVLnlULmU@lƒLkVUlƒX@xW@¯mUƒ@UmIUW™L@aXa˜kU™¯anƒWk°@k™kKmmUIWaambUkkKmV¯aƒ@UblŽk„mXk¤ƒ@@b™@UbULWVnb@lUVVnmšnVVU„J@bWXX@WJkL@blVU°UV@XlWnXUbW@UVkVšVWbnLUJWLUK@Lnn@blVU‚„nUblxVUVJXU„a˜@Ub„LnUVV@mVIVVn@UbV@‚XbmbUV„_lVXUWanJVI@WkI@WVIVU°WXXl@la@mX@lLXl‚kVbœm‚X„ylIXJV@@kšKla²UVa„IVyÞb°LlVna@UÆKnLVbšK@anwU™"],encodeOffsets:[[117676,36917]]}},{type:"Feature",id:"4102",properties:{name:"开封市",cp:[114.5764,34.6124],childNum:6},geometry:{type:"Polygon",coordinates:["@@lUVbXa˜InV@bUV„x‚knVVÆnn@„VJlUU¦VJ@kxVllb—¦lVš@nb@bVŽUn˜aôJÞIXbVJÆI„m„xšUšV„w‚U²l@XƒxVl°bVLXb‚`XklUnmVblLœ@lmšx°LVK@UXIVašWlL@Ukƒ°KkVaVUXmmI@UÅKmmƒXka±K—L@W›@kUÇxUUƒ@@UXUlKkklW@ašX„a@UƒKUaVUUV_@yXk@ƒ@a@U±w@UUW@_„mmw@wVw„mUaÇbUa¯UUkmWkn±JÅxmIbUxmKmn—JWw„kUaƒK@a¯@ƒbk@mVUIWƒ—Lmwm@Ua@WJUb@LUl™@UUmLUbWJ@VL@VmXWWzUJUꄘ"],encodeOffsets:[[116641,35280]]}},{type:"Feature",id:"4108",properties:{name:"焦作市",cp:[112.8406,35.1508],childNum:8},geometry:{type:"Polygon",coordinates:["@@V@VL@x@bXŽWV@XkššlUŽWX@J„@nI@KlL„KšUVaV@œJlL@KUk@KÞL‚l²_‚@nWlL„UVVš@nLWVUJVn@anV@a„wÞUVLVx„b„@lW„@lbXn‚Vn@@¼šL°mšKVn@bnl@nVK@blb„L„W„U@VWLXV@nlKn@lVVbXw°nV_@¥Vƒl@XI@mlƒkkV¯VWnI@W‚@n¹nƒ@aWKXUƒaWk@yk@k„ċUkVmbk@WI—yóImÝkkwm@™mU@™xŁ›lU@mJƒX™ak@ƒx¯V@¼¯Vm„UmmIkVWK@UXIl@UWVUU@mVUI¯b¯@™lmKzWKUa™nƒJ@nƒlbÝ@@b"],encodeOffsets:[[114728,35888]]}},{type:"Feature",id:"4110",properties:{name:"许昌市",cp:[113.6975,34.0466],childNum:6},geometry:{type:"Polygon",coordinates:["@@lI„VnKlnVlnLVbšJlb„@ULVlUXVVX@‚a@KšI@wn@„aVV‚@nwnKlX„W°lVnKUX„x˜@„ln_°JVIXy‚XnW@U‚K@UXIVanKVVš@Vk@KVaXI‚@Vbn@nx˜KnaU™l™ƒn™Va@ƒXa@™VçUUla@aUK@wmUƒLk`kIWVkLmK@V@XUlƒn@JXV@nm„™bU‚óIƒmUa±@@ÑóVUUk@UlKVU@akWVUUlUUaUK@UUKWbUkÅJ@XWaƒ@XbmJ@nUJ@bUKƒLÝaUnk@›lXbWbXnm˜n¦lVXnWbUbVV@VkL@VmLaWl@n™b@bk@UVWak@WVImJUbUlmz@lUbkL@lVx"],encodeOffsets:[[115797,35089]]}},{type:"Feature",id:"4109",properties:{name:"濮阳市",cp:[115.1917,35.799],childNum:6},geometry:{type:"Polygon",coordinates:["@@lLXbW‚XXƒx@bVVnLllVxULUl‚XXlVlUnlŽU¦Ub¯l˜nœK@V‚bVb@šXbVL„KVxVVnIlašb„a„¥lU@wnalLnVVlVLXnlWVXn@@lVI@WnU@mƒÅW¥—aW_k@WwXy@kmƒ@wU„mš„š¦šlUxVLV@UwšJ°xš@VX„@Vb„@š`VX@VX@llšIVbnJlI„bšV„l„˜J@ƒmѯLóa@ƒƒKUa„k™ƒ™Xƒ@UK@wU@ƒlWUUݯImW¯aƒLUKU@ƒkƒ»k@mƒwƒa@UnKWI@ƒUU@akVWK—k@a±ƒbóUWKXUmk™KUmLƒbUx„„@lmLXŽƒ@@b„VW¦Un™JkbWnXl"],encodeOffsets:[[117642,36501]]}},{type:"Feature",id:"4111",properties:{name:"漯河市",cp:[113.8733,33.6951],childNum:3},geometry:{type:"Polygon",coordinates:["@@@Lƒ‚UnVxnIWa„@Xb@WÆIVlXaVL@VVLVbkVVŽUVlX@bUVkLV‚l@VVôU@Ò²@Vb„nôJVšanƒ@mWU@I„mVk@WkI@wmak™@wlW@w„@VbnLVb°bVyX™V_@aUKVVK@wUU@™™a™K@kmbXVmJUXƒ`kn™nƒK@aU@mw™akb±@¯ƒUUÝKUUU@WU@VkLUKU@mUmJUU@WVkL@UWJ—X@VVL@lVlUbšLVKnêƎ"],encodeOffsets:[[116348,34431]]}},{type:"Feature",id:"4106",properties:{name:"鹤壁市",cp:[114.3787,35.744],childNum:3},geometry:{type:"Polygon",coordinates:["@@ó™™n@xVVólƒ@¯zƒJ@bkl@@„kVWLUVmVXbVJnnlLlš¯@Xlm„°bVš—lWb@bšKVXnJ@VV„°nX@@w„WVklU„K@knVVKmkUKUaVkƒWkl»nwlŽ°lö@lXšV°UVbXKV@šša„Jšw@Um™™kUy¯UUUƒaƒK@U™L@mm@XaÇkkmWank"],encodeOffsets:[[117158,36338]]}}],UTF8Encoding:!0}}),i("echarts/util/mapData/geoJson/hu_bei_geo",[],function(){return{type:"FeatureCollection",features:[{type:"Feature",id:"4228",properties:{name:"恩施土家族苗族自治州",cp:[109.5007,30.2563],childNum:8},geometry:{type:"Polygon",coordinates:["@@VK‚bX@lbUVnL°„@VlVnUl@VUX@„aVƒmaXƒlašUUU@wmaVUn@Vƒnmmk@m™U@kna™aU¥Vam™X_@WƒU™mW@_kƒVaVKnL‚lœ@VVal@k¥@kUW@kUKVUlUVсW@kÇaU»ValmkUVUVak™@aƒV¯_@W‚UkmVUlU@aœƒƒalI@akkVWUaWXUWwœWVbÆ@„„l„alIVK@U™m@UU„W@al²a‚¯UağÇm@ƒbkk@wƒ@@W™aULmxƒIU‚™ƒb¯@U`UX™JmL¯aƒKX›WUL@aknmK™@aWUXaWm@I@UÅmVU@™™aUV@b™VƒI@WkU›bXkm@VakwUKULWKXmJ@XUK@ƒmL@KUwVaUI@KU@mmn™mXka@»V@@UUaƒw¯yVk@ƒUUVmmkÛÈU@mWUnmx„šmlUbV¦UlbWVUL@UUƒ™IUmÇKV„VbUVVxkn™LUxV`VX@š„„kJVVUXWaUVVlUnmKUbkI@WULmK@L@LVlƒLnmUIWV@aknƒ`VXUJIVlUVVbUX@¤mbnLm‚m@UXk@mm@Ukaƒ¥@kV@@KkU@aUKWbkLWVkIVŽk@UbVlmX@bU@@mmL@bn`@Ln@llVLVk„@XVVU@`VXUš‚¼k`VULka@VllVIn¤VU@@bl܃bkx@bkL›škKƒn@bn@@b@JUnV`UnVbVKlVXUlbn@°ƒVx„@@b„nVbUllVn@V—VK@UnW@UVUšlnk‚VÈޚxVb„VVI„xVaÆ@@aka@UVaU@@a„k@Wl@nbVIƎ@Jk@„L@VlXnlla@VJnw@UmwXU@aVK°ÒnllnLlb„xnKVaV@l¦²nVl@llL„x@XVVœ‚Ķš@našx@U@al™XUVa‚LÈþV°XxWXkK@šmLnlUb@b‚xnLVlVVkb@UJ@xWXXš"],encodeOffsets:[[112816,32052]]}},{type:"Feature",id:"4203",properties:{name:"十堰市",cp:[110.5115,32.3877],childNum:9},geometry:{type:"MultiPolygon",coordinates:[["@@@a@w@kV@nbVK@ƒnUla„@la„Ål@nlVakwWX@WkLšaVmšwV@anK@UlIXmWkk@@mmLkWlwk@U_mKXwWK@U¯K@UU@ƒVUa™kmƒkI™yUUVUmanU@mlwkƒ@_mWXaƒUWU@ǃ@U@aUaVwUKUIƒVkK@UWIXƒmaV@k@Vm@UnwlƒUamk@V@„ULUamxUJkU@Iƒ`WkkK¯XWak@@W@IUV™LWJkXkaÇVUKƒ@kUmbmUUƒUKƒbkKWUkI@ƒkKÝ@@aƒUm»nI@mƒU@UnWV_@aUmWbkLUl¯b@a›kkk@WkkJm_k@UV±@J@b›nU@@WÝIUJVbXL@nlJkx@„Wn@VkJmb—LmUƒ`VbUL@xVn„@XVƒŽ@„mVVnnJVbU„ƒx@„V„nVUbVVƒx@šn„™bUK@bƒ„@bƒJ„šm²„VU‚lbXzVJV„„JVbn@@Xmb@V@bVJÈ@‚Vnkn@°aVVV@šX„KnalLVmšUnnVKVlnLWlXX„Klk°š™šXŽWškLUVVV@nU@ml¯nmbk@W`Å@mb—LWm¯UƒxnêVèk@mbƒVƒnUK™@kKmXk@@JUI›lÛLllnbVnlJ@LULnlÆaVLnŽV@nkVJ„@lkô@²bÆm°w„L„WV@VXšKšVXI@W°ÆVšK„b°U„JVIVV„¦XKVL@l‚InaVÝnUl@@bX@‚™nmVL@lVL„lVLVUnbVW@xXn˜bœU°¤V@š™„a@kWKUUn@VlnL@UV@Ü»@mX@V_ƒakaÞ@VK‚¯@kkW"],["@@mUkUUm@nllVKXXVK"]],encodeOffsets:[[[113918,33739]],[[113817,32811]]]}},{type:"Feature",id:"4205",properties:{name:"宜昌市",cp:[111.1707,30.7617],childNum:9},geometry:{type:"Polygon",coordinates:["@@°`„U@blšUbUVlVkn‚ŽUbV¼Èb@l‚XUÒkVUVVL@lVX@ll¦k@UbU‚›@kmKULUbl„@`nXšŽ„V@XW`nšUbV¦šbmb@lšV@nnlmnU„m@UVnb@xVV™VkbW„nb‚VnVa@an@UaVU‚JXnWlXX@l„¦@ŽlKÆX„bX‚V@VV„@°¯°xXx‚XV@nV°UVWU_VWXkmaVnWVkn@lln@lb@UVLXWlnX@˜aXUmaVK@UXU„U@WVI‚W„XXV‚U@¥VKœ@‚Uގ„„‚a²LlV@kV@UanKma@UVUnK@UVLXyVL‚knJ@UV@@UXKWUXaV@Vb@mVLnKW„m@aUUm@@UkK@Ula„LXKWaXI@alKlmUk@wVKXL@m@WWn@UVa@K@wna@aW_XWWkXbVW@k@U¯WWwka@UUaVIVƒkU@m±@U@@wVKkaš_@VV@XUVwU¥‚šyUkm@V±ÈUKk»ÇL„m˜mLk@ó£kmWwƒm@U„IkWKXwWU@ƒkLƒwkbmaƒbkK@VƒLkmWIUKkUUƒÇIǫJ™XÅJULVŽÇLUVƒ@UK™@kI@WVI@UaƒWmXVVUL`±kÅLmKkƒƒkƒÅ@Ua›XXxWVXŽVbUXll@bkJ„b›„@bkVUVlnV@X"],encodeOffsets:[[112906,30961]]}},{type:"Feature",id:"4206",properties:{name:"襄樊市",cp:[111.9397,31.9263],childNum:7},geometry:{type:"Polygon",coordinates:["@@@Xl@Xb°WlLXl„_@JlVVInwVbVK@ƒ@UnlVbk„mx@VUnl@U@nbW„XJ@VlL„UVJVLUxVb@b@VȄ‚@XV„VWbnX@`l„kx@nmVnbUVVVšzlJn„šlVb„UV@@V°L@VXLWxnLV`l@kxlXnK@nl@XlWn„`Xnl@@UVa@VÈKš£VLVanW°U@UVU„@„`VIn‚mV@„nV@Xa@aVW@UšalkXKšblI„yƍXnlJXbl@@VV@nklU@`„nVK„LVKVb@V„U@UÈK„UVKšIlUX@V`lIVbn@nblVVmV@@XXJšUVV@knKVn@`@X‚VnK„wlLVmUUU@ƒU@aXL@WlU@UUW@UmU@KkLWaXkWmXUWm@U@ƒnk@UmK@U@UaUVUUKV_@al@namWUI@KUƒK@aV@WUIƒbƒ¥ULUJkIm™ƒK@U@K™V@U@a@UkU@K@wVaUwlU@mUƒULmKUkV@@anIWmUK@I¯„mKkl@LUb±lUakLmk@WwUKÝVUIm`¯n@Uk@makJU_@ƒƒJma¯ImwUVkKƒb™aUÅ@wWaU@VU@mXIVmmUkJkwm@mIlUKWzUK@VmLUV@VnbmLVbU@@lkU±KbƒƒÝV›@UL@¦VWUƒWXUJ@XƒVWV@VULnbWV—bW@kmWXUK@Vkam@kkm@UlmXUŽnbWlUXV`UX¯VmUU@Ul@Lll@nnJ@LƒnWmbmš@b™`ƒš","@@kUUm@nllVKXXVKmU"],encodeOffsets:[[113423,32597],[113794,32800]]}},{type:"Feature",id:"4211",properties:{name:"黄冈市",cp:[115.2686,30.6628],childNum:10},geometry:{type:"Polygon",coordinates:["@@VVUnWVXnVJ@„‚U@V@VXŽV@@IVJUnŽ@V@L@KlIVlVanLVbnVlI„ƒn@@a@Kl@@I„JlI@aXU@KlK„kVblJXU„VlU@V„bVkVKXn@VlxVa²I@VlVUxln@bšJXklaVWnLmÅ@y@k@ašI@W@aXIlVVaV@nnlKnLVW@IUa@a@K„UVVlI@wXKVV@IUƒla„@lUXwWƒnƒnalLlxXLll°@XwVKVaXIl™nb˜@nln@Va@U@k°ƒUmÆUVaXI„JV¯ÇUmmkU@WaKmakVm@U@aVKkkmKkVmIkÇ°£@aUUVaVVnKlkX‚mkƒ@ƒlUVaX@@Um@‚™UmlUXV„UVU@w‚K²¥Ua@I@UV™l@U™V±UIUÇ°»VkUmVI@a@U™m™ĉ™¯V±bŹĖğaÇL¯lmŽkX@‚óĀ@ŽmšÝêb±WkLƒn@xXx@Ž@b@V@LW@UbƒlţXƒ`kxWnXô¯¦ÆV@L@JVLƒxkK@V@bkz°l‚lXz@J„UlVla@XUV„bVKXnW`XXV@laVV@V„X@V¯xƒx@xULVbUJ@n@LU@VmmakbUK@b™IWWUUVkUmkLm@VJkb@nUJƒ@`V@kX™aUaVmmLkUmJ@Uk@U„±lkzmJUb@b„VUxVXU¤ƒL@JƒX@VlL@JkLUVU@mnUl„¦@V"],encodeOffsets:[[117181,32063]]}},{type:"Feature",id:"4210",properties:{name:"荆州市",cp:[113.291,30.0092],childNum:7},geometry:{type:"Polygon",coordinates:["@@ÈJV„lVVLXJln„K@UlL„anbla„xlK@„XVWxXLlƒJ@V„nXxlnô¤l@nKn—‚ƒÈKl¼VL²Ç‚Un@Vl™zŽV¦UxWVU@@U™`lbUL@xV@²@@nlVU„UJVb@VlbXx°XVWX_VKUwVKVa@UVKUUVk@KnblaUU@wnWl@UX@lÆ@@a„IVmUk„™šxVJ„U„bܙ@Uk@WWnk@Vƒ„™Vm@I@m@Un@m™XUlVlUnJ@knJVU°@@aÆLX@ƒllL@¦nJV@XblLVa²U@UlWš@VX@`@LV@@bXJlIXml_lJœU°b„KÆLnVVl‚@ö—Vƒ‚mXaVIĢllUlVnLVlX@@b‚ašnnxšV„L‚bn@°ÆXmmkĉƒ¯w±™™™Uċ@KÝÅƧŃÝ癙Uw¯ƒm™¯k@W‚kV@¯UIUJW¼kb™Uƒwk@W`@¦Uônb@VƚlÈ@VU@ƒƒ£UWWnUÆUnmJkUÇ£VWUI@aUU@WkI@Uƒa@JW@k£kaWVUKmnkKƒb™kkVWb—VmUUmwU@kk›@UakUUa@V@nlx@lUb±lUbnnWLUyk@UamœUK™@mlk@Wb@VXL@x@xWI@a¯Ž¯V@bVn@LkKmL@`XmKmVU@@bkL@V±bk@Uaƒa™L™KUVƒIƒ„™W™XamVVbUK@b@Lm@UWkxULWVUnm@UlUX"],encodeOffsets:[[113918,30764]]}},{type:"Feature",id:"4208",properties:{name:"荆门市",cp:[112.6758,30.9979],childNum:4},geometry:{type:"Polygon",coordinates:["@@n@lxlInVUnWJ@nUVV@Xb@xVƚb„alLVUnx°Jnb„I@„V`lInbl@@V°mn_VJÞUVLXx‚@nllKVb²kVa@KlknL°ƒ@JVLXnmJ@bU@VlnLVKV„@nX@lUšKVaXal@VKn@¥°L@Unw˜bnašV@KV@VUX@lVXI@KW@@IXWV@laVL„„KlaXUVVnkVWV@lwXblIXWVkVmšaU£VaUmVIkU@y@WakKUamU@UUK@kmK@w@@mK@LƒV¯™U@WwkmULƒamVVUU@ƒƒIƒbUKUa™kmƒm@UakLmxU@UÒWlULţÿmwkIUm@a‚kÈblW@UVƒUUk@JW@XkWWUkUKUIlw@aUWknWUUmnIWƒ™aUwVaۚƒaƒVUI™wƒšVlUnƒJ@bÅ@@kVWk@mX@xVVkbma@LUlVVUL@VUbULVxULW`UX@V@lUXWaXlWXX`@bmb@x@LUb@VmŽXX@‚@nWKUL@xVlknkL@bWJXbWLƒKkb@VlL@Vn@VV@bƒnX‚mLUK@nUaU@WbXVWL@VU@@V"],encodeOffsets:[[114548,31984]]}},{type:"Feature",id:"4212",properties:{name:"咸宁市",cp:[114.2578,29.6631],childNum:6},geometry:{type:"Polygon",coordinates:["@@ÞƂLČ@šV‚š²š°xĊ„nlWnŎ¯m@aƒK@„„°‚n„Jšwn™VIUaÆJšÅ@wšwV™XW@aV_l@²V°lĊwlaXLšwlUkalVVaX@lVXI@a˜UXJ@U°UU¥VIVKVklanLVa@VÈIVV@nk@aVa@mV_@a„K@klKUa@UnKWk@@lU@@UW@@nUWUwmaVIXƒ„lV@mLXblJ@kV@kk@KU@WƒkUWVÅwkLmW@UmL@lUL™KULƒak@maUUÝwUJƒIb›KUUƒ@š™aWK@kUWVkUwVw@™mÝ@™I@wkW@a›ww@LU¥™kƒJ@nVJƒIkVVnkV›UkyUIUl@xWUkaW@@°kz„ŽWxkLUWmzk@@bVVVš„b@‚@XlVœ@Vl@bVbUn™`Wn—@Wb„VVI@`„LVbXLV`mnU@@lƒL@LUŽƒak@ƒLk@WbUJn¦@lVb@xVb@n"],encodeOffsets:[[116303,30567]]}},{type:"Feature",id:"4213",properties:{name:"随州市",cp:[113.4338,31.8768],childNum:2},geometry:{type:"Polygon",coordinates:["@@„@nš`lw„k„ƒ„UmUVWX@lk„@VanUĠ¼V@@mX@@nVV‚VXLmJVLnK@b„V@@J„@VUn@VaVUUUVWVLV@@Kk_@almaVkUU@WVƒVUVLXmmk@wUaUKUV@°™@kmaUaÈmW„mUƒVklaX@lVnxl@@UnaUk@ƒVUVwVK„nš@VVn@VbVJUknUmmVmk_Vw„KUUm™Vak¥@UVKVIkW@UmIVWkIVƒkmmLkwmVUƒ@LƒUU@VVXL@JmLUbmK@UUKmkKUUmVUaUnÇlk¯™mJUnmLUaUJUaWL@UkJ™ƒUƒ@ƒaklkU@¯@KWLUmUUWVkbƒLƒŽUKkbU@WX@JX@@LWJkUW@UVU@@L™Umb—amx@V¯K@¦mŽULk@WbUb™LkVW@kVVxUb@x@LlV@V@b@VšU@L@V„LnšlJVIVK„¦„aVJ@XUŽ@b„LV‚@LVJnXmbk@@bU`VLUVV‚b@V@VnL@Vml@„@VXnWVXnWlXblK@LnV@VVX@VkV@XWK@b„VV@VV"],encodeOffsets:[[115830,33154]]}},{type:"Feature",id:"4209",properties:{name:"孝感市",cp:[113.9502,31.1188],childNum:7},geometry:{type:"Polygon",coordinates:["@@VnXK@L@°lVlk„b„@„VšlI@VXKVbVIVbnKVmnI°šlŽÈkVmVbnUVVlLnVL@VnLVanK@IWKUUV@„V@KV„nUlxnKlnU„lJUXnJ@VlXUJUL@Vl¦UbnšVVƒLUxl`UnnnmVVlnVK„bšmVX@a°Ý°LšaXJV@VUnKVXVK@LnKlLUbVVX@VwVJVn„@@UU¥V@@UUK@ƒmaUVUkkJ@L@K@UmVUI@JU@W@U@UV@ƒUIWmXUVmUUÇ@UVmIlmnmakK@akaW@UwVUkKVnUlKVwk™ƒVU_WKUkVW@UXaWkUa@w@VU@XaW±@IkbƒKƒb¯L@WƒXkWƒ@UakL@UV@UmVUmL@UXWVL@ašUƒVUUUVU@yUUƒIUa@wUKWVU@kƒ™™Wk¯UkwVKƒLUx™K@nVxUlUUWVUmw@wƒUUyXWlX¦WbUV@„U‚@blbUVVbXXƒl@lVL@bk@lxkVVnVx™¦ƒ`UnkL@V@L@Ž‚@@xnL@lVL@VnVVblLXb@‚@zlVUJVnUbV¤™bUnUlWXkJWakxU@UXml"],encodeOffsets:[[116033,32091]]}},{type:"Feature",id:"4201",properties:{name:"武汉市",cp:[114.3896,30.6628],childNum:1},geometry:{type:"Polygon",coordinates:["@@nbnm‚knJVUÈ@@Uƒ¥VknmV@VUlK@IkK@U„W@I„KV£UWVwƒU@aVanIly²kVƒl@@VnIlVnKUnVbšblWU@@_„‚VI@mlaUIn@lKVnUlVVXXšJ@aVLlanbUnV@@K@mVIUaVK@w„w°w@UƒW@UUUkbU@WWX_WmULƒaVU@WkbkUƒV@IWyk¯kly@a@UlL„wUK@I@KÅUW@ѱUm@wl¥kaƒ@@_Vw@ķƒa@akw@ƒkKW£XVUVwVwUaU@VUU™™xWKkbĉx¯k±Uk@U`@bWXUš™x@x™ÆÅIVbUJmš™xƒImƒ¯@ƒ™Umx™nUVVbnJV„@Lƒ@@ŽkV@bVnƒ@UVULlx°VXlššl„V@XUVL@xVb„JVV@zUVVVUV„™V@bUKWX@VnKUVVnU@@VlKVb„@lX„W@X°K„a„Lla@JX²Wb@ŽUV@@xVbXlWb@VUXVlXLV`Uš„lŽUxkLmVUŽlLUVVxX@lb@blL"],encodeOffsets:[[117e3,32097]]}},{type:"Feature",id:"4202",properties:{name:"黄石市",cp:[115.0159,29.9213],childNum:3},geometry:{type:"Polygon",coordinates:["@@VšUVV@VbUx„aWUœblUVmnKlX@bXJVIlVUxVVVIU‚zlx¯š@‚VbnL@x‚x@UVaXK„b˜@Xk‚WU_Vm²klW„XVK„Žl@nXV@@w„mlK²X‚aÞén™@ôÿ@lWn°kUKmmUљUmm@ƒwkImWU@UakL@bVLUVċ@™bUK@alIXKWK@™nXnKmkUVwƒ@¯b@L„lUL±W™n@KULUaW@kL@lƒL@bU`@nUb@bmlU@UÇJ@UUbmKkblŽUULUJV¦¯V@VWI—V@bWJkUW@UbkUlbkV"],encodeOffsets:[[117282,30685]]}},{type:"Feature",id:"429021",properties:{name:"神农架林区",cp:[110.4565,31.5802],childNum:1},geometry:{type:"Polygon",coordinates:["@@n`lIXll@lœl@b°aVklKXaVn@bU`mX@V„V@nmJn¼„V@bÞ@lL@„lJXVlL„aVLV„nVnalV„@VLÈUlblWXIšKVU@J„™š_‚@an™na‚X„m@KmI@mkk@KVkWWw¯w¯°ƒ@UUU@WƒaÅWkL@ƒ¥@kWWXkWmIUVVbm@@bUbmUU„ƒbW@UVk@mVkU@U¯ƒmKVUkaW@aULƒÆVbƒb@VÅ@Un@VƒLWl¯Lš„"],encodeOffsets:[[112624,32266]]}},{type:"Feature",id:"429006",properties:{name:"天门市",cp:[113.0273,30.6409],childNum:1},geometry:{type:"Polygon",coordinates:["@@@K@UlKVm„_š¥UwUmlUkwl@@aUK@k„kWWUaVUka@aV@ƒVUXaW¥Xk@WWIklm@ÅxmI™VÝUkxkaƒ„@bWJaUL@„W@™l¯UULU‚ƒbƒkV™Ua¯bm¤UnÇUkmUšUx˜b@VkXÇal@bVnlJnxŤĀVKXkVÑV@nwlKVbn@n„šlVbVL„a„J@„VV‚UnU„bVKlnXxV@°š„U@KnL"],encodeOffsets:[[116056,31636]]}},{type:"Feature",id:"429004",properties:{name:"仙桃市",cp:[113.3789,30.3003],childNum:1},geometry:{type:"Polygon",coordinates:["@@VK°VškX@@ƒVK‚bXI@a„ƒlblwÞVšUnJÆwn@lkXJ@X‚WVz„V@xnx‚VXUVVVkUw@mšLVw„KVU„@Um@alU@„@@KUƒmIUaVUšmnwmw™mb@aW@UkmKkUkVġkUJWbnU„õ˜@UkmUÅKƒL¯a›VkIk`WnkJƒ@xVLUVVbUbk@WlXbm„VxnxUblbUV™@@VUV@nVL"],encodeOffsets:[[115662,31259]]}},{type:"Feature",id:"429005",properties:{name:"潜江市",cp:[112.7637,30.3607],childNum:1},geometry:{type:"Polygon",coordinates:["@@UbVxšbX„mJVnXVlmVX@bkxVJVLVlXXWlX@@IVl„V‚U—aVwV™lnÈVVmn£°aVbUš„l„aVUK@mVU@Uš@VUkaVamwUwnƒWaXkl@VaUaVUUK@w„WI@aU@@K@_UW™@kX@V±VUbkKWaU@mI@¥kK„kW@ÅK@b¯@UVmI@lmIkVkUWVnšm@@V@n@JUnƒšU„@ŽmlXXl@@V"],encodeOffsets:[[115234,31118]]}},{type:"Feature",id:"4207",properties:{name:"鄂州市",cp:[114.7302,30.4102],childNum:1},geometry:{type:"Polygon",coordinates:["@@°¥WóXmlw„_ŤW„kVaX@@K@U@a@WwU@mWk@ƒULƒWkX±lUnV`XWl—@ƒaWLUb@Vw@wmKUa@°™kw‚yVUJUUVwkUUJWI@akWmLUnkV›aXVƒbUxUVWX¤lL@„lx@b„b@ĸUx@`„@lbk¦@x‚n²VƄX@"],encodeOffsets:[[117541,31349]]}}],UTF8Encoding:!0}}),i("echarts/util/mapData/geoJson/hu_nan_geo",[],function(){return{type:"FeatureCollection",features:[{type:"Feature",id:"4312",properties:{name:"怀化市",cp:[109.9512,27.4438],childNum:12},geometry:{type:"Polygon",coordinates:["@@@n„‚@b@XnJ@k°x@aVUnl‚UXnV@@VnJWUJV„nIVV°ŽUbVVVL@Ž²LUVa°V@aV@nm‚UXblLXWVXVmVLVK@an_„`@X@l°„VlXXW`nX@Jmn@b„@nV@Lm`„bUb‚n@VUVl@nIVbUlƒV@LkJUnVV@xVblVUbU@ƒzUKU@mx@xUnn@@WV@lbUb@šnVWXX‚V@VIV@VUnJ@VUz@JWbXllI@VXVVL@ŽVn@„„Wlb@„Žl„XVlL„aV@VJ@XX`„kVwVl@bk„‚bUŽlVXIlƒnLVa„mVwV@@nV@XaVJVbX@lwV@n„@nV@VWnIVVUŽÆ@Xx‚a@I„UUKmk@mVƒ„IXmWUš™VJnUVU@anaVwk™›U@UXa@W™@m_@a¯@@K@UVƒ„bnK@blIlbXa@WW_n@VƒU@¯bmyƒUkUJÇÅ@WU@kWKÅwƒnm°KVkmankVWnXVWV@UƒƒwXkV@mƒ„UlLnaƒVaX@VUn@VnVK@xlnXWšU@a™@@klak™Vw™mUaV@™wmIÛ`m—@mVUXmlIXƒV‚I@K@aU@UaV_UK@wkUmmUKWXŽmVkUƒL@mƒƒU_nK‚™@aVU@Ukak»@U™™@ymUƒ„¯™ƒUUƒVKkam@™nka@ƒmwkLWb¯mkaƒ_VaVKUƒ™IUw@kKmU@WK@UnƒmaULkU@wUalWV¹U@@WUI@WU@‚_@W@U@mƒU@WbbUK@Um@@UmbUwWWkk@WU„a@anUUwlWUwUU@wlJVUnnV@@mnI@m‚K@U@w„a@wUm@_mƒVUUaVUkƒƒƒ_kċUk™VWLƒ@mlU@kn¥W@UwUWV@VÝU@lXLWVUbVLXlVIl‚knmU@VUJk@@„ƒ@™kVmwmVkxU@@XmVUb@xnKVLl@VxUxkIU`@bWVXX@JWL@bkb„¤@bmUUU¯Kƒkmb@V™VU„VVn@@„Vb@`lnœxmb„lUn‚bk„@xU„mV@bmWbUV@VJ„Il@nVUb‚K@nn@VbnJVIlJVkXJ@X@lmx@bnnWVXJWXU@UlU@mk@@llb°x„IUbnJ@VWbXVmI@JVX@bk‚@bWL@JUXUK@U@Uƒ`n@@Xm@XVW@@nX@@`ƒImxU@@JUI@KƒLmK@UÅUUV@VW@™¯kUU@UamVUUmJ@n„xmLKƒkmJkwkKm_mKXU@aƒU@b@Wk@ma@zUJVUmbUlU@™xnXlWlXXblK„¤V@@nUVVLkVš„l@Xb@VVK‚nXKVx@znW@X‚@@lVK@X@JXbWbnn@JUamLVVXIVxnK@aWUX@˜x@VnI@WlI@anV„IVxk‚l@lbXXšxVVVJVInbV@@ln¦ml@XXVWbkJWb","@@XLVKVXVKUa@UUUmV@l"],encodeOffsets:[[112050,28384],[112174,27394]]}},{type:"Feature",id:"4311",properties:{name:"永州市",cp:[111.709,25.752],childNum:10},geometry:{type:"Polygon",coordinates:["@@lxUXV‚lXUVnlVĢ„JVbUXVJV@XUW¯„VIUK@klW@Un@„nl@V`XUVL@l@šVx@„XXW`UnUbšxUlVnUšV„lb@VnJšUVVVInJlUšVnwVklKnw„LVJVšV@nIV@nbVa@KVVVUUa„KV_nVVJ@_VW„nV@n¥lI@anƒl¥X_VKlwVlULUVVVš@šU@VXL˜ƒ@IUmn@VU@wmKXUWU@m²šl@VIXWWkWUkWlkIVamUXamUnmWUU@@Un™lK@XJl@kVUk@mWKXkl@@aVU@UVWUUVa„In`VUVLnw@U@K@Uƒƒ@w@UVmUUƒ™°K@UnV@bV@Xk@KVm@amk„aU£VWUUmUUwm`UbULka›KXU@kVmU™@aV_UWVIn@˜y„XXK@klmV„V_kWVUn@WUU@UƒmaU@™wnwWanUmmXkƒam@UakLmK@b™xUUUU@Km¥Vaƒ¯@ƒkUaVUlm„UU@mUUÇmUk™Uyƒb™bUa™XUWWbÅLmL@V™aL@WWXUKmmk@a@UUK™XW¥kU@VƒUkxmVkUWbUJnVJ@nVJXzWxkŽ@lVbUX@VVL@`mbUnšŽUn™VV¼k@Ulm@mwLƒb@lmLUK@UamƒWkƒK@£Ua@ƒ›UkJkUmbVlkX@bWbUŽVŽnnUVl„@bšbVK@VX@lb„V@nU¤šx‚²„Knblb@x„V„ô@šlŽ@b@l@XWxnVl@„VV@XLVl‚LUŽUXV`šbXXmJU@@bm@UUkLW@UlUKWUUb™wUm™L@nklVVmVXXm@@bUKlÆn„‚XkllVUVVL@nUbV‚@V@nnV@xUn¯U@JW@UX@xĉ@™`m@@LV@b"],encodeOffsets:[[113671,26989]]}},{type:"Feature",id:"4305",properties:{name:"邵阳市",cp:[110.9619,26.8121],childNum:10},geometry:{type:"Polygon",coordinates:["@@XIlJšI„VVK@n@VVVKnLVwVmnLVK@U„@šw„J@wVIƚ°X@ÜȄUÈxll@kn@VwVaXJWXn@@WVL@UUKVKV_U@@aVK„x@U„aV@lk„@XylbUaV_šVnal@W„U@a„I@aV@@aVUl@Xm‚UXWaXml@@kk@ma@V_UnUV™UUWJUa@kkaWLUmk@@LUVWUkJWkK@¼UnWJƒIkV@b@JUIm@Ul™V™m@Uw@a@kWƒXWKUknW@ƒWUU@k™mx™UkVmIUJUU™VmI@UkaUƒV™UmVk™wVaVmX_WW@ƒUw@™@kUKWVU_k@ƒmm@@VkX@lVLUJƒX°WVU@UIVWUaƒIUġmkVUkWUVWkwWXk`mI@¥kUVƒUƒUn±@m›XkWknV„UVmmU@@XƒVƒUk`@Xƒƒƒk@¥¯»mbĉó@mkU@kU™ƒƒ™KmX@˜UnmL@lULkKUƒWUU@ƒbUaUnƒ@Vb@l„¦Ub@l™@UKmnƒKUnl„UVVbUVn„@`Vn@xƒb@x@VL@nmJ@nU@mmUVkI@xVVVxkXVxmV@bƒbXVl@Xl‚XVxna@Vn@@VVL‚aXaV@n„‚@@V@X`V@@XVJ@XV@UºkXVb@xlVVKnbm„@VXLV@n‚lL@VxšJV„ULUb„`lb°nXalKnx@„lbšmn@lbULV„„V°š„ƒnV@zšš@Vl¼lb@VUV@bšmLV`„„@n„KlVnU‚XWVLnnlV@xVLU`VbV@"],encodeOffsets:[[113535,28322]]}},{type:"Feature",id:"4310",properties:{name:"郴州市",cp:[113.2361,25.8673],childNum:10},geometry:{type:"Polygon",coordinates:["@@²zVaVlnVl@nšVk„Jl_XJlIVmnL@mV@VXn@lV@‚XzV@lyV¯²U@UlJ@XVKnVVIXl@UVLV`@n@J„I@mlI„KVLnUlVUVVLXašKVLl@nb@ŽW„XV°KUnVV„L@xVJ„L@b@LUVVVU„˜VXbmbVbn@@lUbm@x@XVVVŽ@@˜@bkImx@Vm@Xbƒb@l°XU¤„a‚L„mnL@bl@@™VUX@VxnV˜anLnƒWƒ¥XKVwnUWXmVIUWÆLVx„L„w@wVmlU@¥XƒWUkwlÇn_Uw„WV@VU°wnU—ƒy@aVškVlnL@lVn„w@VlJ@b„X„x@bVKnb@U@WVUl@@Vnbl@XLlK@aVLVKnxÞn@a„LlmUaVU™ƒm@ÅknUmaUKmVk@m™kk@UlWUkVm@w@kUU@W™U¯™¥@w„Ç@aVIlUV@kUWU@UUm»@k@mKVkUKUwƒaUaUa›@k„kUWJkImaU@UK™@maUzk`@zƒy@XmJkL@UUJmUkV@z›@kŽkVmK@¦UbWL@a@UbmKmwUK™Xk›VUUkmVkw@UUKmL@WUIWa—JW_k@@WmI@mk@WkWULUUVKUUVm@šU„bš@‚nUǃ@U@w„™V@Ua@aƒL@ak„›l@k™UƒJƒwó@@L@V@„™`@œƒJ@xnn™šmV@bkJmUó@ƒn—JW„UUmƒU@UV@Lk„WlnnmVXbmxšxV@nbV„V@XVm@UVlXU`ƒUŽkn@lWLƒW—zm@UJVXU`@bVšUn@lWVœLlbVKVan_VxnVVVUXV¤ƒbnl@bUn@LWlU@@amU@V¯L„šVVUn@V@x„„@V@L@VmxUKUVm_ƒJUbVV"],encodeOffsets:[[114930,26747]]}},{type:"Feature",id:"4307",properties:{name:"常德市",cp:[111.4014,29.2676],childNum:8},geometry:{type:"Polygon",coordinates:["@@l™U™mkUwUyV™@VW@¯Va—VmUU@KVUVUVLnaWƒnkUÓV_@mVU@݄w@ƒka@kVmƒUmK@IkaUamKkXWaUW@WUk„™@@KVU@aU@™L@J@XÇVUKVak_mWkLWakVUbmLUUmlUVKUU@kUWW@UImJ@xkLkKm@@Xƒ@ó݃@UUk@UKƒV™ƒULƒKƒXkWWbkaƒIUƒWU@mUk@WLaUJġ™ƒ@@XÈÆVIl‚„Vnz°aV@U„m@X`@XWbkakJ@amLƒaU„@V@L°@@bn`š@@XWb@VœVlšUxmb@bUVmVUI™šXVWnƒJU„@nnlVLƒV@JbWzk`m@UVK²V‚x„k„LVl„@Vn@V„„°xVKVkœVVlUblx@bU„‚Æœ@@nVnUll„kx@VW@@VkLWxUL@bÝ@kKkVõV@bkXVVUVƒ@ƒVkUkV›LkV™a™@@™ƒ¯xUxmX@JVb°WXkK@Vm@k„Vb™bn¤‚xUXkJƒblxnXÆK²l‚_@Wnašn@ŽUL@b‚JnIlV„@lUœ@@¯ô@lWȂIVKVm„U@aXaV@lwVXn@@K@UVKUUnU‚bn@lWšX„ƒlJnUšLšKV@„„l@²a@UlK@aV@naVX„WV_nKlL@KUm@a°U°@VXL@a@wWmXal@„k„@VLn›V@@bl@VnX@mwVa²aVU@mk@"],encodeOffsets:[[114976,30201]]}},{type:"Feature",id:"4331",properties:{name:"湘西土家族苗族自治州",cp:[109.7864,28.6743],childNum:8},geometry:{type:"Polygon",coordinates:["@@@KšL@wnK±nƒnm‚—@WUk„ƒÜÈn@n»@mVamk„mšU„„l@V™nmmU@wUan¯VKšLn„VWlInyWUœI@WWk@KXU˜n@mnUmU@WœƒmkV@ƒkXašaVaUm‚Ikƒƒ@kaƒX@ƒUm@UKWU@UkJWkXa@IVy@UmIUVU@UJU@WXWmU@™VakaU@@Xm@Vm@wnwV@VL„yV@VakUUa@wUUVmlI@K„UVkUamJk@VU@UmVaƒan_@KmUƒ@@anm@ImWX_WWUk¯ƒ@k@Wƒ_m`@bULUKUnUWWXkKWaVmnU@@b¯UUbVŽ±K@UKUUVa¯UUmJUƒVIXmI@UU@WmVmkUV@b¯w@lmI@W@aƒ@m¯LXbmJVLklWL@V@XXŽmbVVU@@VU²Ul@VlX@bš`Xx›zUmkUVÒlŽ@bXLWxXVlš@V„bkLma@nmVmULVbmVUb@lnzmbUÒVl@°nLV„lJkn@bmJk_ƒVmmkblxÈx@LUb„xVb@V™n@JmLVŽUš@„nV@¦VbnJ@lVVbkx™bm@UxVLV@n`UnVVV„kl°z„xVb@VU@@ÆlXnWm¦nbVK@XVVUVVl@X„KUV@nVL@WnIWŽXLVKVLlxUbVKXVWbn@@UnKVLVb„JšU@aVU°b"],encodeOffsets:[[112354,30325]]}},{type:"Feature",id:"4304",properties:{name:"衡阳市",cp:[112.4121,26.7902],childNum:9},geometry:{type:"Polygon",coordinates:["@@lšV@XV@„mXVlXL„W‚X@l@bVxn@šŽšUVkn@VJ@I@alU„JXIVm@»‚LXllIXVVU@Kl@VnXKlb@lVbXIVVUšmVVU`@nbl@@lXLVVVKVbnXWJ@VXbWxXb„Ul™VK„¦nLVVUVVbšb„K@U˜LnK@Un@VxlUV`UnnL@VVL@JV@VUnxnKVbV@@VšIVUnJUVUl@nW„XllIUa„KVbÞLV¼²`V@VIUwlaVmXa@IWanK@U@m„kVƒVUVaX@lšnaVLÈ@‚¥@kkJUWJUaƒXkaUm‚wVXJ@_lWUU@¥n_‚KkamUK„™@amKƒnKƒbV£¯W@k„aWan@@UnwlJ@a@—@UUU@W‚wn@Va@km@UanaWa—UVƒUUVU@K@aƒKUI@wƒKUUVm¯LWUXƒ@mak@UK™LWbUKVUkUmVUKƒLkJ@nƒJ@I@mU_UK@VWkUJmUUL@WkI@V±VU°kzU@Wy@kUm@UWU@@nmKUnkJWIk`ƒIUlm™k@mUUkUb±yUX@VUV@bk@WlXL@nVlUl‚k@WI@ŽkLmš@VV@XVmnnVWbnVUblJXkVl‚XXlWXUJk@±™@nXVWVnL@xUVm@Vn@J—„WK@U™V™@UUVUVKUkkxULW`k¦m„@bkJm¦U@ƒmUX@`UImUU`ƒLVbUVUU@LUbmaU@mJU@U™UIƒKmxkLUl"],encodeOffsets:[[114222,27484]]}},{type:"Feature",id:"4306",properties:{name:"岳阳市",cp:[113.2361,29.1357],childNum:7},geometry:{type:"Polygon",coordinates:["@@@wUklmUUmU@@UVm@wUaV_mmUKmwkIkJmUUnm@™™@UUƒbUKUƒmÛamm¯xVLkbÇƃUƒVUzkVUlƒUUKWLX¦W@ƒVUUUaƒKUbmLKm„@akU@aƒmVaUUVIVWkk@wkƒƒ@@xmLlmÅwmbVlXlÝIWVkK@kkVƒL@VWKU@Ublnaƒƒm@b@bšnW`@XUJk@UUWKƒk@UKƒnn‚@xmLUVm@kbVbV„nV@V„b‚@KnV„LWšXŽÆVĢ¦VblŽš„n„UJWz@ƙVóUVbkV™aÅx@¦lVUbVVknWKƒ„k@ƒwƒK™VU„Å„ƒl@zkb@`m_mJ@xX„mbVbœ@llV@n„@llbXL˜UXalUšl„alVnwnLVKlšVbX@@I„V@blJ@bVL@VVVUXȤ‚VnkVÑXmlbnš‚„VKkÑř@UmaVç@±XUlI„xlV„@VaX¯lUVVUšVJn—V@°°nŽ°„Vxĸł°¦šb²¦lJ@U@aUK@kUm@_m±VIXal@„Kl@„bV@K„K@k„m@UmUUaƒK@_UJƒaXU˜@Xmš_VmUk@WUk›@kU@a@m@UƒaUUU@al@ny‚XXWWwkly@¯n@@bnV@k@mVI‚„œVlUUmlU„JUw„I‚bXƒVaUal@K„b@ƒVKVkXVl@VkUU@ylUœVVaVL"],encodeOffsets:[[116888,29526]]}},{type:"Feature",id:"4309",properties:{name:"益阳市",cp:[111.731,28.3832],childNum:5},geometry:{type:"Polygon",coordinates:["@@„ŽÆxXL@l‚V„@ĢšVI‚bXKl@nVV@„XVŽ„JlbXalX„W„LVKš„„UVLl@VV„@ôބ@@Wn@lLlK@wnIVJX@VX@lVVUL‚VnkVVnKValUXblKnXl`UbVLÈU@W@IšKV@@bUV@Lš@lƒXV‚@VXXblWnLVblb@JnL„VUn@llb@„ƒx@ÞUV@nU`VÔmlX„mbUKUVUV@LVVUn˜ŽUb@°UXš@U‚VzVxnlVškšVnlVnaWƒ@wnIn`@_la@y„kƃVƒšU„L„xl@„ƒXLlmUUVakU@¥ÆwšblUUaôVšU@ÅXyVImƒ™ƒkUaġ¥ÅUWX™ƒKmU@Lƒa@UmUUƒUalan@VUnK@wm„m‚L@V„lXLVVl@VI@WX_™m@a™¯mKUkwW¥UK@_UWWLUVkUWL@WUIkVƒU@JƒwkLUUmJVI@WkXm@VmkKUIU@mmm_@VUV™@™„kJċwUU@KUWkkW@IWW@km@klwkWVkkU™V¯m@kWLU`mIkmkXm@@`@L@xUKWkU@VL@JUU@mbUKVa¯WVnL@`lXUVkU@xW@UbUWVU@UJ@„lnU@m‚nÈmVƒa@bUL™wUb™@@VkxmUUƒ™UV›K@IƒUƒmk@akm@wmIƒŽkK@b™VWXkm@wULUmm@UVW@Ub„mbkKƒVn„U@Wl„xV„U@UXmWUXmlnbUl¯Lmn"],encodeOffsets:[[113378,28981]]}},{type:"Feature",id:"4301",properties:{name:"长沙市",cp:[113.0823,28.2568],childNum:5},geometry:{type:"Polygon",coordinates:["@@lVUllXkx@lln@‚XX@JlXXl‚V@LVVČxlIšƒš@VU@Un`nnV@VJlLUnn@lW@XUJnIVVlK„x@I„VlUVJ@XXKlVVUXKVX@`VLX¦lxVŽnLš°‚an@„„‚bkmVaV@XL@U„KlU@llLXUÞJWkUknaÆxnŽ‚knK@w„@l„@xllUXUJVVUb„n@blV@bnƒ‚LnKVa„LVbVV„UX@W¥XKVL„VVklUVy„U„VÈÅlaUK°wnnÜbn‚V„VL„aVVš@šn@VmnVlIlJna„@Valkn@na@amwm@„UXw˜K@aUUVUUaVa—wWK@kU@UaW@kKUUƒƒ@k™W¯XWan@k„™mmÅ@@I@U@KmLkaVUƒKkLWVUƒk@UVmU@am@kkk¥ƒUƒVUK™„maUb@ŽUb™I@aƒKkkWm@W¯K¯b@VmaULVxUXlVk@UxVJVbUb@xULƒ@ULWW—LƒĕmxVVL@šVb™KUwƒaŲWwX@@WƒUWLU@VbkV@aU@@VUnmJ@VUn@VƒLUK@U‚mUIk@UÇmU@@UW@J@LƒbUmVI@aUmW@@bkXUx@lmLUbm@UbkJ@V@XmlUbkKm@ma@kUaVU@aUK@mImJUIkVƒUƒVUakbWwka@UWKkLUamKUXm`Å_U˜ƒULmaU@@lUV@X"],encodeOffsets:[[114582,28694]]}},{type:"Feature",id:"4302",properties:{name:"株洲市",cp:[113.5327,27.0319],childNum:6},geometry:{type:"Polygon",coordinates:["@@X‚‚Unw„Ė˜KXXVK„@VK@wVaUaUIVwl@kUVWUwVKnb@U°a°LXŽ‚@Xnll„L@bšJVa@VanbšƒVL„U„V@al@@UV¯ÅÇ@Ummk™w@¯ƒyVwnUVVVUkmWV—nKVUƒa@WXkVKn@lUVU„VVVXIlV°VnI@VlKnV@mwVm@LXKWkU¥wWwƒƒ@k@m„X@KX¯V@VUVa@VnKWkœƒV@VUkm@aWa@wkUWwkmV£VÿXUVL@mVIXaò@nW@ašUš@@am™@aUU„UmXmWUk@ƒƒnUW@_maVm™wUkamaUL@aƒwƒW@akI@UƒxUm@kmKUk™lUŽ@b„zV˜m¯xUVU@ƒXVxm`kÈlxXVW„@¦kVUn@xƒxƒKUwÅKVXUJWnXŽmVUxWL„¦XŽm„mK—bmUUwW@UV@šk@ƒšVLnŽlbLm`@¦VVkX@`WIUŽxVnlb„WVbXIV‚lI@l¦Ç@UKmbk™W@UbUVU„ƒl@n@VmLXb@JWbUnkbVxUJUxWXXlWL@V@V@XXJWx„zUVVVVKnXW`@bkIUl‚„nLVJUbUIWVXlWV@XklVbnn@xlš"],encodeOffsets:[[115774,28587]]}},{type:"Feature",id:"4308",properties:{name:"张家界市",cp:[110.5115,29.328],childNum:3},geometry:{type:"Polygon",coordinates:["@@@InWVw°wš„@š@šblUœKlUlV„U„@VUUUlW@aöUlUlLÞ@@aVKXwlK@UX@@UlwkƒVkUm@m›@ÅVƒ@akwVaUk›UUlUL¯wƒƒ@UUmƒ@UkƒKƒlw±UULVn@l_XyWwÅ@VUUmJUXU@@mmƒU@kxW@UaUIWbU@@mU@UxƒnUbmKk„WJkUValƒ@aUkUxƒlW_@WUIU@ƒbkKWUJVnUb™bWb„lU@nl›„@XnVmV@n—mWV@LXl@X›JXVmzkJUXmƒ™KULm°Vb@xnVmnUšk@ƒƒ™VƒnnlUb@nm¼m@Ûǃ„Vl@X˜mnm„²ŽmL@x™K@LUl@nULÆx@V@VXVWbXX˜l„@nLlm@bVKœX‚W„L°bnUš@VaVUš@šmšVw„JnwVK°zn@V‚Vb„a„@Ċ¼"],encodeOffsets:[[113288,30471]]}},{type:"Feature",id:"4313",properties:{name:"娄底市",cp:[111.6431,27.7185],childNum:5},geometry:{type:"Polygon",coordinates:["@@lL„nJ@xln@bnlV„‚„@JœLVUšŽV„nVlw@Uš@VašxVK@a„bnUmÇnV@km@ƒ‚I@VUVVXVaX@@wlVVUkW@_mKXU°‚UbVLnaV@‚V@IUKV@XlVL@w@K@_n@lWlnnJV_XK@l°nšU@WVU@kV@nbVK„V—lƒ@nLlƒ„LXU@ƒlmkw@nW@UKVa¯IVn@@aVUUKl@nXVKVn²a˜ŽXblKnLlmVI@KUU@akLUaVa‚UXm@aƒ@wVUVKnLnWlXl‚n@@U@anUVm@U‚Inm@IUK@UmKVmU_kVUwm@@VmL—K@VƒL™aUaVUUUmKƒ¥ULkšƒVWaXwWa@UXImWUaULUUWKk@WnXbWŽVWnk@UV@bU@@bƒJ@bƒV@XkŽmb™UU`VbkaWzƒ@klU@ƒb@VƒwUL@bV@U`ULVL@VUK@Xm@XWWIUbUxm@@lkkÇwƒVÛÇW@¯Å™UJ@xƒI™xƒ@@VULmKUnUxmKULUUm@@‚ULƒU™JkIWJ@b@LJUW„kJWnUV@nn˜Ü_nJšxU@VbšnUxlškb@lš@"],encodeOffsets:[[113682,28699]]}},{type:"Feature",id:"4303",properties:{name:"湘潭市",cp:[112.5439,27.7075],childNum:4},geometry:{type:"Polygon",coordinates:["@@Æ`n_VWnLVblKXL@VlbXxlaVb„U„VlUVJnInJ‚@VL@bUVVb@lnbn@lLVank@W@UlIVan@VanK@kVwlW@aX@Vn@bUJVn„a@K‚IX@@VV@nŽVÈl@VJn@VVL„K@UVm@UnIVm@UV@@blUUaV@XK„V@XW@XxƱ„bVxšLUa@™UKWk™@wmmUalk@WXUWkXUVJVaUImKƒVklJ@aX_mWULUUVUƒyXwWI@W@U@UXKWkXWVwU@±_U»ÝKUaƒLVbkJkƒWmXk@UVVŽmIUV™J@UU@UamLmwUVU@mnJ@VUnmV@b@Vm@kkWmXmKULUV@x„Ž@bWnVUbVblK@bVV@LUJknmKkLWa—±bUmULmWk@VLUV@bm@U°JUbVLX@@mlxkn@„WVƒKk„mK@k„"],encodeOffsets:[[114683,28576]]}}],UTF8Encoding:!0}}),i("echarts/util/mapData/geoJson/jiang_su_geo",[],function(){return{type:"FeatureCollection",features:[{type:"Feature",id:"3209",properties:{name:"盐城市",cp:[120.2234,33.5577],childNum:8},geometry:{type:"Polygon",coordinates:["@@„n@‚°ĀÞ°@¦ULWKkx@bkLWb@lUlVXXJVbƒnUKmxXV@bm@@Xš‚„LޚܦXlVnš‚mzVJ@n@‚²ÞôkƃÞaȰĉ‚wnljÜó„éVÛnĊīČlj‚ĉ@ō@KÞUlU@ƒkklÇÈњÑlġXɛ@UġƒƒaU@U_ƒW@n™@kaUL@VW@kKmkUV@bkbWW@bkzma@ƒJWI@KUKULƒ@U¦™`@XUJ™U@KmXƒw¯KXkmy@aUIWJXXmV@K¯UU@@bVL@¤VLXbV@@JVXVK@„„JVn@bkKmakVVXUVVVlI@`U@nzVVƒb@¤n@@UlKXLVVšI@V@nV@V‚@ÈUx@šóVōšƒkÅWó@mU@bk@Ýwk@WbXxm@@J@zV@kVƒbV‚nLWVUX™WUXUŽWLUŽ@Wl°z@VkxU@UVWIxWJkbƒĬ„nW@@bUl"],
+encodeOffsets:[[122344,34504]]}},{type:"Feature",id:"3203",properties:{name:"徐州市",cp:[117.5208,34.3268],childNum:7},geometry:{type:"Polygon",coordinates:["@@XKVX@WnIVx@K°Lnll@@I°K„nVašU°x²mlxš@VanU@aƒk@akmV@@w™@Ua@aUwVwUw@w›@UK@£kaĉlóIÇVkŽ±@@kUKmVkIkxW@Ua¯UUm@UVI@WVI„JV@ƒ@Um@Uana„U@m‚I@J@XV@XaVlkXƒVaUUWLUyVIXmWak@ƒXkJókƒJUL@KWkk@ULU@Wa™lUIkJmI™mk„VbVš@lV°kXUKWKULU„mb@VUlVnƒb@VV@IVKUUmU@ak@@bmV@xklƒUƒU@UKmV@nƒJVbkXƒKUamLUJ¯UUVmI™bVV—Ll`@LƒLU`m@kXUVU@V„lxUK@xkIWbUKƒx@V‚kVVn™b¯@@U™@ƒxk‚mbkLÇK™b™@@XnJ@LmVklƒ@@XƒlUƒVkxƒakVVb@bVnUbU@@x˜VUšVb@š„ŽnIĊ`šXVVôJš_„K@xlU²Klk„U„@VaVVÈm@kVUVmnamUUaVƒXIVJ„@‚ç@¥nkVLn›„@@XVK@VUX@JVUV@UnVJVLUJVLUVlšnI„b‚KnU@m°™VanI@anV‚KVL„an„lK„blš„KÞk@¦@¤@„VKnLVK„L„KVzlWšLX@VmV@VbnU°@Ualk™˜WXLVU„KWkUUWšƒ@£Wa"],encodeOffsets:[[121005,35213]]}},{type:"Feature",id:"3206",properties:{name:"南通市",cp:[121.1023,32.1625],childNum:7},geometry:{type:"Polygon",coordinates:["@@VJ@bnzWl°L„xnW@LšVVI@Wš_V¥„@VKVL@LXJ„I‚@nbly@aXXla@aVUnllLX@@UVKlbš@@m„XV`V@„bĢ„lkČÇƃȘ¯šwnĕVĉVÿšUƒUĠƒŦğlXÑVǵ@±ōLʵĖ¯lÇbÝÞ¯xk@Çkķé™n¯@ğŽġƴǫ@kVVlUbƒL@xULǂóLUl¤@nkVV°VLkxVb@l™aUXUKWĖklVX@¤UšƒUkb"],encodeOffsets:[[123087,33385]]}},{type:"Feature",id:"3208",properties:{name:"淮安市",cp:[118.927,33.4039],childNum:5},geometry:{type:"Polygon",coordinates:["@@šnźUôÒɴ胚l¦nĖV‚kbmš„X@xVlVL@xUb@bUJVnUx‚šœ„lKVLÈx‚m„zXV@lW@XV‚b@bȚVxnb‚ƒVIXa°L„aÆVVaXUlK@aXIƄVlXKVUlIXalK@alwXLVK@¥Ý¯¯ÿ@ƒmVk@aX@ƒm„īlaXI‚wXJVUV@lw@U¯yb›UaƒUġUÅaUKVknaġm@kUm@wÆIV±nLÆw„ÇnUUkƒ@ƅÝU¯JÝI¯¦Ul@bƒ@@VVL@l@LƒLÅmƒL@b™@UaVaUWmLUKV¹KƒLWKX¥WI@mXk@UmaUVUU@VmL@W™bkIUWƒUmVóIkbmm™@UbVLUxmJkU@bkJWbnXU`Wz™KUÞÈlVb™Lmx@„kè@Æ"],encodeOffsets:[[121062,33975]]}},{type:"Feature",id:"3205",properties:{name:"苏州市",cp:[120.6519,31.3989],childNum:6},geometry:{type:"Polygon",coordinates:["@@ôèĊVnX°¤²„lxƒÈÜ@²x@J@b@X‚`nIUƙUUV@bl@VVnL@L@xƒJ@X@blJXnW@@`XbW„kVƒ@UbVxƒXUxkV@LóxVbUVWš²šVJĸklUǬ@ĢƳĠ°@šmƒī°»ÈÇ¥ULUU±a@bU@¯ƒU@KnImUVWUk™mXUVU@lIVaUUVWKUbUkWKU¥n£WakJUkUL›K¯L™KkƒVIn@VaUƒVUUƒ›UkVk@ƒU@amUkJƒ@UUlwX¥W@@UkVmk@JUakL›@kk¯ÝmJUn@nmVXlmbVVkn@„UJ@±WUxV¯a¯KōbżÇxUxƒšUUlWL"],encodeOffsets:[[122794,31917]]}},{type:"Feature",id:"3213",properties:{name:"宿迁市",cp:[118.5535,33.7775],childNum:4},geometry:{type:"Polygon",coordinates:["@@XbWnUJVzXKVVUbW„klUWbU@@W@IJ@nƒVmbVbn@@V@„UŽƒIUJ@XUJ@VVn°VVbX@lwlJnUVL@l²@lÈUôJĊklb@¤VLœ@@xVxUxVx@bVbš@@xU@ln„mnX˜mXLVmV@X@lxVnVJôL„LXa‚x@b„@@KVL@bn@@m@™@alLUUVaU¥nIV±‚I@mXI@aWWXU@LlUXWW_XWmaUwǙ@aaWUX@@kWUƒynÇwUKkL›ƒ™VwUmVI@aVa@wUKUk@wƒWn™laUmĕk¥„™ɳçóÑŹV™mmzkVmm@a@Ióƒk@@LWU@`—„WbXLWlkImJVn@`nXVbXŽmL@Vn@‚l@nUVl°Xx°U@LVĠ@z°˜@¦UV@Xn@VJmV"],encodeOffsets:[[121005,34560]]}},{type:"Feature",id:"3207",properties:{name:"连云港市",cp:[119.1248,34.552],childNum:5},geometry:{type:"Polygon",coordinates:["@@@‚lzXxmÆV„„@@¦„@l`XnlKšXXm‚KnLla„b„@„xmbm@kL@V@Vl@@VUXšJX„mbš@@„°Æ@èÈzlW°XĢJlÈ`lInbšWV_@mš™@UUķnƒôw°ÆmnaVƒVÛVmĸ»Ģw±Ý@@mUIny™UmWkۥݙƒK™@Wn@@aWUnwVL„mUaWIUWVk@kkJUVWLUkŃWJ@bkLWVUbÅUƒb¯KWbUJ„WXX`WXkV@KWVXX@bWJ@nJU²mJV¦UbVVkK@b@š@nm@@aUK@Lƒ@@awWbƒKóKUIUmkwW@U@UnWK—nmWƒn@b„l@bmVUb™@kw±n¯w™VUb"],encodeOffsets:[[121253,35264]]}},{type:"Feature",id:"3210",properties:{name:"扬州市",cp:[119.4653,32.8162],childNum:5},geometry:{type:"Polygon",coordinates:["@@VUXblVVV„b@xV@kz„V@l‚wVLUbVV@VU@VbUbl‚b@nkĶ°IÞV@Ɔ„VlmVƒÈÅxmKU²ÅJ@xVn@lĢnmbUlVLÆbĢV„V‚bœV‚aXk‚@VXKVVWšXVWXUmKU„aWaU@™¥@£XW‚UUV@@ynam_VWkUVUna@ÆV@mnkWmXkWU„W@k„@@akklƒlWUI@UnKl¥™I@VVma@a@I@U@a@anK@UmK@ÅVUnJl™kI@aVwka@mVIUW@UWL@WÅbmIƒƒULka™UWƒUxkLUKWlXL@VƒImƒÅVƒU™mĉL™Uól¯I±l@ÒUbVbUVVXUJUnVV@lnbl@"],encodeOffsets:[[121928,33244]]}},{type:"Feature",id:"3201",properties:{name:"南京市",cp:[118.8062,31.9208],childNum:3},geometry:{type:"Polygon",coordinates:["@@k@ma@kUUVmVIUWVUUaVa@Ѳk°Jôk@Wmk¯KmX¯aUakKƒƒWU„@XU‚LXaV@@mUaVUUl@VmkaUXm@ƒWUUna°IlmV™m™IUW‚@Uk@@aV@VVX@„V‚I°»nm„U@VKVan@m»UaU@U_@WlIUa™aVaUala@¯n@‚ƒkaUkUUWKU@mwkUUmmL@K@ƒLmUUVƒKƒVÅImU—JƒƒVkVVLšèVLVU@W„L„V„š@nVÜULVŽUL@bW@XbWbkJƒUUVUxVXmVk@WUUkVmIƒV@„nbnVWbƒJU„kUULƒa@Jma@XkK@VVL@L@JƒLUVU@V¼ƒnXlƒbm@kbUKmn@lVb@VXXV‚UV@b@LVbÆxXbl@@lV@U„VV@XVK²VlIš`„UbVbUlVVn@WXn@@VUV@„@KmbVLXқLkKƒV@nX@VVUV@b™nVllbšmnb„IWVXU@`lLlknVnmlLlbUmVInK°nUƒU@l@VU@Vn@„ƒ@alI„`VIXaVaVa"],encodeOffsets:[[121928,33244]]}},{type:"Feature",id:"3212",properties:{name:"泰州市",cp:[120.0586,32.5525],childNum:5},geometry:{type:"Polygon",coordinates:["@@lUU@@y@In@WwXal@Þxl@@anVô@ÆX„lŎ™ôU@™Vw@ÇUU@@m@U™JUUWKkL@Vm@@£„aUUmyV@@_kJUUVUUWlUnblL@aUmƒI@ƒULUW@IU@WaUK@£UK@aV@°V@LnUWWXIla„VV™@£UWlkXĕVLVWšb@kUalwUKU¯lU@mk£VôKȁVK@w„KVaUkķlUI±™ğ¥ÝUŹš™Ž¯ôm¦ƒĸ™‚@XXK@VVXUJ@nlbUx@blJkšmIUV@ÆnL@VmL@b@b@V@J@bnb‚U@UšJk¦mL@VVJkXk„ll@bƒ@@lƒXXVWlXnml@nÅU@ŽmbUVlVUXn`mb@zU@V‚VWX@¤š¦V@Xb"],encodeOffsets:[[122592,34015]]}},{type:"Feature",id:"3202",properties:{name:"无锡市",cp:[120.3442,31.5527],childNum:3},geometry:{type:"Polygon",coordinates:["@@nLƒÒlxUVkL™am@™ƒkVWUULUxVVVbUV@bVLU‚nnź™ÞVĠ¦X™VUUaôw@KlUVw„WUwVa„@lUXƒWa@_X@WmkI@a@W„I@w@KmKUUk@@aVUšVVÅmJ_@W@a@I±wÛ@ƑÇkw±ƒ¯£mWĉUóçƒK¯VkUWK@XkV¯UWabƒmUa™UUb™lln@b@xƒbXŽWX`@„VxUblL@bn@Vb@`m@XbWnn@l¤„n@xnVlU„™VLÆWœkV@VbÞJ‚_nƒl@nKVU@aU™U@mVk°WVLUV¯bVXŽ˜bXlVn@VmL@x—V@bl„š‚@œnW@X@VVJ@²VJVU"],encodeOffsets:[[123064,32513]]}},{type:"Feature",id:"3204",properties:{name:"常州市",cp:[119.4543,31.5582],childNum:3},geometry:{type:"Polygon",coordinates:["@@„L˜ŽnxUbVVƒL@xnnW‚nn@VVXn@‚yœImx„„°ƒšL„a‚¥n@VkšKVw„W@nX„VJ@b‚@UVn„ƒ@UnUV@L‚b@`VLklVÞn„Æ@VaXLl™ÈJšmmVUK@aVUUaUUVwVKXVlUš„n@šblKVUkw„ÑmKUVUI@±UI@U@WmX@›™kƒ@a˜U@wnK@UUmWk—aWU°aVUUK¯XUl@nVŽVš@bUVmLk@m„`ÝIUaU@›lÅXUKƒškVmU@wƒmk£m@XmWan@@_Uam@@akKVaUw@ƒW_XW„a@w@akmm@mL@UJmnUKƒ@@XnJWLkKUb@„Vxk„WƒL—aWVUImVULUK@L@lkLVVVllb„m@@°kbVbUbšbVbkJ@XV`V@Vbn¼"],encodeOffsets:[[122097,32389]]}},{type:"Feature",id:"3211",properties:{name:"镇江市",cp:[119.4763,31.9702],childNum:4},geometry:{type:"Polygon",coordinates:["@@šVĊKšn„VÆUn„„J@UWKXkVLlKVwX„šVlbVK„„nJÆaš„ķn¥°óÇIkšWKUbÅ@mƒUÝlkUK@_a@KVUVm„@mƒVU@@aUIWƒ@mƒXUx™LUlm@¦ƒb™K¯„ƒƒnw›Jzm@UW@UmmXmm@w„KUUVamw—ƒKm@UbUL@ŽƒVmn¯¼JƒUW@UUU@@bl@@VŽVXšJšnnU‚‚k¯JmbVV„Xn@VWlbUnk@VVUŽVb@nU@WbKWVƒ@XV„„lLVb°bnW°Lnl@X"],encodeOffsets:[[122097,32997]]}}],UTF8Encoding:!0}}),i("echarts/util/mapData/geoJson/jiang_xi_geo",[],function(){return{type:"FeatureCollection",features:[{type:"Feature",id:"3607",properties:{name:"赣州市",cp:[115.2795,25.8124],childNum:18},geometry:{type:"Polygon",coordinates:["@@„`l@Èbln„@„KVLl@„V@bȎlnšKXkVlVL@„lJnb„¦VKVVnX„W@w°@VU„mln„UV`šU„bVUV@„xnKVI°KXKVkVL@al@Xa„LVlULWV™VVL@b„x@VXVmb@x@V™VV@nn¤„šlb°b°KXXWbX`lbXx‚z@x„`VIVUnK„L‚x„WXLVKVbVLVU@wnW°b„@nalX„‚mXVJn@U²mKkVl„U@@xlnœaVmlKnœ@JVLlŽnVššl@XXÆèVlUX@xVLXVšb°W@wnUWmXk@K‚LVwUmUkUKUw@wVaVK@kƒ@WnkUKWkwlmXL@KVUlLVKXmWU„L@ašL@malaVk@aa‚ašƒnXš@VVUblb„Jn˜ƒXa„V‚wn£„K@UWmUk@ƒUaWIV@b™JW@KmmU@aUUUkmKkVKlUU™nKVU„lVaV£Å¥WUUK@UkUUw@m@mIkƒƒUUWƒLƒK¯Uw°¯@wUKUbƒKmƒ@kkKUL@UUKV¥U@manw@k@U@Wm@@U@Wwkm„wWaUU@UUmV¯kwƒ@@kmƒkKkUW@UK@ÅV@XWWkXa@Ul@Va@KVaUUU@ƒaXwla@UkVWaXk@K@lmkUmV@Vmbk@ƒ»XIƒ¥VUkƒVUVU@anKVUƒKUalU@wX@˜™@a@K—@ÝwƒL@ŽUnÇlUIkJmn@ŽƒbVVb@VmnkLƒV¯U@ƒ±l—IWmƒ@kaUI@aÇU@K@KUIkbWbƒJUIUyƒX¯ƒUbU@méUUmUk„WK—xWIkJm@V¥U_UJUwmVkšƒUU@ƒƒƒ@knƒwm@UmkWJkL@n@VW@@‚U@knm@kUml@xÅxƒ@@XUJlb„@VX„JVxn@lbV„@lULnV@VlnV@bWV@bXL@lVLVb„V@blLn@Vl„K@xln@bX@lašLVbnKUVVb„KlXVVkxƒV@nnVUb‚lV@@z—°WWkbƒIk‚WL@LUJ@bUI@b™`@UmI@mkK¯XW™™mUV¯@UUVUUam@@VULWUJƒIm`IUJ›KUkW@Uxn‚WbnnmlXbmIUVmV@Vnb@V™LUKWLnÒVVV@V„UL@„kJUV@bƒÈ@ŽšV°šŽ@XVV@l@xUz"],encodeOffsets:[[116753,26596]]}},{type:"Feature",id:"3608",properties:{name:"吉安市",cp:[114.884,26.9659],childNum:12},geometry:{type:"Polygon",coordinates:["@@lxnb@V@bV@ln@‚n„‚lInš@blVXK‚nk¼@VUKWL@b™L@`UXU`ƒ@V¦XLĠ@lJ„¦@„nV@l°nn@‚mVXnaš@nb‚K„n@l„IVƒš@VanJ@_lKVVnš„L@L‚K@Vn@VbšUVanKlLnbnJVbšnWVnVVanI@‚Vb@L„bVKVanXVbVJVU@aXLll„bôlƼXxVLVK@Xn@ƒxnVVVmb@LnVVKVXV@@mnaVXUVnV˜K@_UaUmšwnKV_‚anKVLš»„K@¯ÝU@›™U@kWlUn™lknK‚VnaUkma@ƒUIUwl»Åw@ƒVwV@n™‚n@ÈXlKVmna@kVw@anm‚@n_WWk@™™mUkUK@Im›kLUn›bkm@wV@kƒlUnLV±m@UInWƒkWmbƒ@¯amX@xUVUKUaULWKƒXwƒKmLUVUJƒ_@wyWwkaW_XaWW¯L¯akaƒ™m£@mUUš@U@wnaWU@Uƒw@aUKšUXUVKUkƒKWbk@@bUKUlWL¯LUJmLƒwU@UVƒa™VU_ƒVkmƒnUV¯@@xƒXmWUUULƒ¥makI@ƒUKUkWl™LkmǍ@aƒUk@UKƒLƒ@kmÇak@ƒ_VlkL@`lbnšlLVanLnbmVÆln@škJlbknmKUbÝmmwULUK@bkLWKULUUma@Kk@UV@L@llbVzšxUxnl@bVLmŽšŽ@IVJXœVlƒLV`@bn²@J™@™V@Xmbñ@WbUJ@bm@@LUĬU‚„¦lV@xXb@blnUV"],encodeOffsets:[[116652,27608]]}},{type:"Feature",id:"3611",properties:{name:"上饶市",cp:[117.8613,28.7292],childNum:12},geometry:{type:"Polygon",coordinates:["@@„„@„V‚š„„I°`nm¤²@bVJUVVXUl@Vmb@xV@XbmVVœ@lkLmbn`VbnU‚@Va„UnbVllUXV„a@w°VW@_VWšLššnVlbšLVbnl„KšnVK@IUW@_@am@™‚ÑUólK@U@WU@VwU@UI@aUU‚aXƒƒ@kwmJV@yX@k‚anƒƒ@mkwVmmI@aUU@aUUW@kVkV@@anKš»„XVWnIVUl`@_„W@wlUœV@UWKnU‚bnŽ°InJl„UV@VnI‚b„Wn@VklL@l@Vn²m@U`kI@bWJƒnV@°VXnJm„XVmx@VVL@bkLmWULUmU@ƒbWXb@llnX@‚xkxVV„nVV@¤nL‚nVxnJVXX@˜ššbn`VI„b„@„blmlLnaV@„blWXnlUnbl@„ƒšKVanUVmm_XK@kWWnašU@UnaWUXa›ƒXamUkKmXUWƒLX¯WakKm™nUWwXa@KW_„aXWW_@WnIVl@XU‚LnWVknK@ImyUUÆbXK„Û@W@IÆUnƒVÝlkVK@mUIVwkUVaUm@aVIVyXIƒaÈwmmk@UnanVUmÅaó»lwšW@kkUVmUK@WKLƒUmWULkamK™Lk@Wa@wk@UU@U@mbUIWVKUXWmkUmVm›U@LkakKƒw@w@U™¯ƒ‚ƒUUn¯l@bmn@xkJWxkL@VkI@mƒkmJUI@V@b@VVxnbWlkÈkVƒLƒbkKmVƒL@V@²nxW‚kLUL@xlKVx„bXmVnšWJ@ޙ°@n™xUKUw±`UImVmnU@kalm@akwƒU@UUJmxU@@Uƒ@kU@Um@@Kn™ƒVm@k™KmkU@@WUnkLWxkVUwmKmLkU™bmKUbVŽ@xUnkJ@n±ŽšUxVXUšWJ@LUb™lUnm@ƒW@nknUJUVm@kXllknVbÆK„VVbš¼V„@šUl"],encodeOffsets:[[119194,29751]]}},{type:"Feature",id:"3604",properties:{name:"九江市",cp:[115.4224,29.3774],childNum:12},geometry:{type:"Polygon",coordinates:["@@WUkVUkmaƒVUb@mVUam_nalK@kU›nUWaU@@wna@UVkUWVUUI@a‚±n£m¯_ƒJ™ƒU@ƒƒƒĉ¦Ul@UV™Km™mLlm@ğ¹m`Uk¯@@UVK¯™@UUK@amkmKkVVUa@UkUƒKƒŽUa™L@VVXUJ™@ƒnƒ@™š™WUbƒnVb¯V@LÅlÝIƒJÅkݙm@Ua™WUU@UmUXmmwVUUKWUX±mUam@kWƒzUaVmÇw@aÅLmKXƒ‚UWKkL@W¯IƒwVw™lkUƒJ@Um@ÛÈWŽKUxWkƒaUU@KkLVl@„UKUX±KUb@nVVUbUVmaUlUL@„ƒaUL@‚@nUlWzX`@„V@lx²„@Vlb@bšVÞ@°nl@UxVL@lUbVV@n²xVUVmnUÞb‚a„J@IšV°xnbl@nbÆ@VwnK@VnXlK°xnUlVX„V@Vl@L@lk@W_XK@KƒkWxUL@J„nVx@aX@VVUa˜IXlmL@bVVX@VbnK‚a²XVWƒk°a„@UnV¤nbmLmW@XbmJUbVL„aÞK„L@K@U@aVKlbV@nXlJœxV@VnšŽVȚ„ÞKôbźĕČmV@ĊšŽ²xÆIšV@Þ¦ĸ¼ÞVlŽVÞnxln°Jœk‚LXWVUVUVwnJVI@yn@lXlaXmWI@w—»ma@UmK@akKkXmW@_kaWakKWk@@K@IšWƒkUa„ƒ"],encodeOffsets:[[119487,30319]]}},{type:"Feature",id:"3610",properties:{name:"抚州市",cp:[116.4441,27.4933],childNum:11},geometry:{type:"Polygon",coordinates:["@@°V°UnÜ@n@lnLlV@bšV°L„lnLllVzVVXlV„V@@L@xX@WlX„m@UVƒL@V@n„°škVmVUnKlaXxVbšnlU@lVVnaVI@aX@V„šJš@V„@b„b@šVbš‚@X@lUL@Ž@VlIVm@wUVanLšalVnKnLVxlUXwlKVm@k@Una@mWIXKWUÛVƒk@a@UVWn@@kl@@W„XlW@_Um@UVK@a„LnalInWV@@xnI@¥‚K„—šm@kKmƒnk@mlI„¤laXbVblknV@U‚KXVlUXa‚@@Unw@±mU@ak_±a@ƒUJUIƒVKW_Xa@aWU™šK@mmUVa@IXa@UWmšannlmX¯WKXwVUVwƒ@XUlK@klJXa@kƒkmm@Uwƒw@¯ƒW¯kw@WmbULƒaUUU@mVUU™WmkUb™KmkkK@aƒkUƒ¯¥Uƒl—ƒm@akU@mš@KVIVV@KUkUVUkaƒUWb—„mƒIkaVaUU™@mW™„b‚b@bUlkb‚b@n™K@bƒKXVWnULkKUV@LWKknlxXŽVLml@X„Ž@lULUb@xVxVLVlVnUxK@LWlXnmV@x¯X™aWUUK@wVWUkÅçm`@mn@bUx@lmbUnkLÇWm@mšU@Ux@„Æxk¼VxVJ@„nbVlmbUmLklmškVlX@‚VœšV@°Þ"],encodeOffsets:[[118508,28396]]}},{type:"Feature",id:"3609",properties:{name:"宜春市",cp:[115.0159,28.3228],childNum:10},geometry:{type:"Polygon",coordinates:["@@@VlbnK@b@JšLlUnx±ĀXxÆW„X@lš@V„@@blJ@nX@˜xUbVVUbVV@b—VmnmJœ„@bmbm@klUbƒLmbœš@lVb@xUX@bVVVbV¤@LVV„bXlVw‚LXÜÇn@@V„IlVškUx„x°J@XlKXLV„‚WnLÆK@bÈxUnVb„ylXn@Vbn‚W²XV‚LVVUŽnxWnnV@VVVšXVbn@ޚÆl„IÞJÆk@K°UUa„mVa@UUUš»@wV@VƒkkUKUVW£U@UmW@@aXkVUnVlKVV„UUkVmU™@kWaUanU„VVamIX¥W@@aUaUVW@_mW@UnIVVn@VbVm@bVL@anKVUkƒWK„UXV‚Ikx‚@na„bVK„b@nVJ„_V›@Vw„‚VUVVXUlUUaV@X@VblašbnKlkVaXaƒ¯@m@U„KVUn@WƒXkW@@w@KU@UƒWkUUUykkmKƒk¯K™U@akUmK@k@mmÛ¯V¯U@‚ƒL™¼UKmLbU`mL™xVnVb@`—LmUVUUWmb@nU@UWULmU@KnaUUmU„wmJ¯IUJWIkVkaWVUIUlWaUIUVkKmbUIƒÒlVUnnŽ@VlLUJ@bUX¯@ƒaWVUKUXƒKUbm@UwKWa@a@VkUWn™@Uak@mbX„WJXbm@mL—aWVk@™wƒL@WmanU@knwWmkaWL—KWUXaƒU@¥l„UVVVbnwƒ¥nKV™»@aUk@a@UƒJ@kƒmLma™@mbUWnm@ULǺ@LXnmxUŽm@UbkbW@@akLmWk@UXmJmUkV@VUXVlULmKUxkL@lmXnJ@X‚l°Vnb@bU@WbKUX@VmKUX"],encodeOffsets:[[116652,28666]]}},{type:"Feature",id:"3601",properties:{name:"南昌市",cp:[116.0046,28.6633],childNum:6},geometry:{type:"Polygon",coordinates:["@@šXš™„@„mš@VIUW@UšKVb„„LlV@VVbUŽlUnLnl@bVL@V°šUL@V°@Vln_Ġºn@‚knKnššLVU@VkĊ¥Vk@™Uƒ™»UaƒUÅLUalmkklWn@VUVIlm@m„Xn@VmškVa@KXIV™UWVw‚™²@m@U@VK@k@W™Ua@™ƒa@aUƒ™@™IUƒW@@bUJmbUU@kkV™mUaWwkbmLUVUn™lWbUbklmL™akbUaW@U@VbkVWVUUUVƒUx@‚Uœƒ`UI@mƒaULƒamb@lwJWUƒVXLl„UVmL@bUK@aUnUam@UUmJ@VnX@`UXVŽVb@bX@W¦nJUbƒUmVVbXb@lVšUnVlƒVUUkLmUUVWl@bX@VnV@X¤VUVLllU„U@@x™¼VV@V"],encodeOffsets:[[118249,29700]]}},{type:"Feature",id:"3602",properties:{name:"景德镇市",cp:[117.334,29.3225],childNum:3},geometry:{type:"Polygon",coordinates:["@@VVX@Vbmz„xUlU@mbmL@V²xVbUVVblbX@šVškVykValKVI@bn@n`lVWnX@l„L@™WKnƒVIVa@¯nK@alIXJVIVWUw‚ƒn@nU˜„nK@alI@a@anKm_™a—™W@UWmIUwmmK@£UUƒmUUlwwW@km@kWaX„aV@VnVKnXlK@aUK@UnwWUnƒmIUW@¯mU„XI@alJV_n@m±@U@kkKUlm@ƒXamJ@UVUkƒmI¯JmamVXL@V›UkV@xƒX@`k_UVmJUXƒW™¼mL@bU@UllX@VV@bVV@bnJUnlx@n„Žm„b@lWŽ@zU‚nIlx„@W„bVV@bVJV@UxV@@X@VkLVôÒ‚šn@@b@`VX@J"],encodeOffsets:[[119903,30409]]}},{type:"Feature",id:"3603",properties:{name:"萍乡市",cp:[113.9282,27.4823],childNum:4},geometry:{type:"Polygon",coordinates:["@@VWnL@UVW‚LXaV@@ama¯Uk@WmInW@klKVwnLVKUkVW@UlUnVnIVWl@nXlK@bX@laVan@VnwWm@KȹVK¯m@kmU@ƒƒ¥kIğ@WKU¥„@V_VW@_šK@aXKVL@Ul»mWLkU@am™kJƒm@kmU@@a@UmakwU@›„Xlƒ@VXk`UIW¼kWWX@‚œ@l‚xV¦XlW@Ubn„@ŽmUkL@UmJ¯UkUWVUaƒUlm@UXWl„nUJ@LmLU˜nXll@bUVUUmVUn„Ž@¦šxlŽnn@VÆÈU°kbV„VxllnL@VnVVUl@V„„anL"],encodeOffsets:[[116652,28666]]}},{type:"Feature",id:"3606",properties:{name:"鹰潭市",cp:[117.0813,28.2349],childNum:3},geometry:{type:"Polygon",coordinates:["@@@XV@nlšL@lUnš„mŽ@Ln@@VlV„@@VV@nwVI@V„Vlx@bknlbV@nmnUVJ‚_²‚VxVLšw@mš¯@ÝXIm™nUWƒaUwkL@wVKlKXmw@±@U„KnUlL„a„KlUlÇXkmaUw@U@a@Uƒ™UkwUJ@zWJ™w@WbkVWUL@VmUklUaWakbƒ£kJ@nmln„lL@Ž™nƒ˜L@¦mJ@wU@mXkJmbƒK@bUL@VVn@`kXƒW@Xk@@lm@UX@V@b„lÜUXVWLXJ@nmb@V@l"],encodeOffsets:[[119599,29025]]}},{type:"Feature",id:"3605",properties:{name:"新余市",cp:[114.95,27.8174],childNum:2},geometry:{type:"Polygon",coordinates:["@@m@@WULUKWwÅ»ókƒakkWK@bUVUIUamWUbULƒa@KUa@mJUbmUXU™mUamImakKmLUb™VUam@@UL@KƒKm™UUkL@`mIUb™@U„@V@bVl@bš¼UŽmL„¦mxUaUUƒVkŽ@¦„VWbXV˜LXKlbXnmx@lmVnb@X„Kšxl@XU˜bnKn@WaXIWƒnal@Vbš@XmlV@U@bXb‚LVxn@Va„LVWVLXU„b°@VW@aVIkK@UmVmkU„ÑVJnalLVUVJXbVkVJXUlblUXJVI°JnI"],encodeOffsets:[[118182,28542]]}}],UTF8Encoding:!0}}),i("echarts/util/mapData/geoJson/ji_lin_geo",[],function(){return{type:"FeatureCollection",features:[{type:"Feature",id:"2224",properties:{name:"延边朝鲜族自治州",cp:[129.397,43.2587],childNum:8},geometry:{type:"Polygon",coordinates:["@@Wxĵ„mš@„ó¤VX@@xܼƨš²xWxƒV„V@„XVƒ„„„ƒbWšXllaÞU°Ċ„@ô¼„LôÝWanV¥ƒÑnĉ°¥šÅX¥°¯@w°w@»°k£°mÈŹ‚mÈbƃŎ¦„K°z@Žkxl¦UbU¤šššklV„KŤÞȰ@@bšV@nVVUlÞ¦lUllœVlU°ÑU¯Vƒ°w„bXxl@VŽ²„˜@n„ô¼ƒó°™kmVk²ĕ‚w@wV™ÞÞ@@Ġƒö»˜¯œ@‚„šbnb°mÞ¯°V°„ÈJmX¥mam™UřƒUƒlaU¯™ƒ@w™Kk—l±n@@wƒkÝVUUl±¯I¯b™a™lƒ@™kLmakbƒ@ġƒŹé°™Þb°šékƒƒLm™„wX™‚aÅb@bVlƒbVb—ÒVbUb›UUanwƒakbVŽUV›ak„¯„UŽƒLmxV°UxnôŻX@J„Xkl‚bkbĉaƒbƒWU„ƒ@ƒk„WUU¯@@klmƒ@@™Å@aƒwWXlKkI@WbUaVIUanUƒƒ@ĕƒ¯K™„mUnWUwm@£ċèkUmbUmm@@nkJUalwk@@nmWUan_óaWmnw±KœIƒwl@UmƒI@an@@mlUÅmV_™KUkƒ@U`@_ƒKUmU™@U¯™mmb¯@kb™ImV¯ƒƒLkbƒKƒƒÛ@ÇnɱJóaÝĢkb@„›x—ÒÇllœ@‚Ž²V‚„ÆUVV„UÇ°X„óxlV¯„lV@bƒV@n—x›@—¤@„șŎnxV¼knšJ‚nšKX°˜¦UlnVbUbÆVnÞWVX¦llšb@l°œVJôÒnLVbšbXŽ"],encodeOffsets:[[131086,44798]]}},{type:"Feature",id:"2202",properties:{name:"吉林市",cp:[126.8372,43.6047],childNum:6},geometry:{type:"Polygon",coordinates:["@@ôl‚zšaÈV°„šK@„mŽ—LWl™nšVxUV‚È@ŽÝĬUÈn‚ôLša‚„²VmĀkV@„ĠĊnU@b„V@b˜@nl°UVnÞaôJ@bš™V„¦mlkššbmVXx¯@Vxm„nbƒ„šbÈK‚V@bÈL„wĠyônšmnbÜ@nn„V˜x@n²K‚„„J@k„al@nxÞU„Lź±Vwkw¯LWWUš™kŎīVwƒw„°y„Vĕ°wÈVlkÛ»@wW@Uô£@ƒn™ĶƒXwW™aUamKóÑUI¯›@k™akkW¥XUmÝÅUVaUa‚mVk—¥W¯™Lm™IlmU»mwȚō@ƒ˜£kJUÇk@am¯y¯UVwƒa@wġx¦ƒKƒƒ¯X°Ċ¯¦U°ċWULÅa±b¯@UkÅWmVƒ™ƒkIUlóŽċ¹™`óIƒlX„WŽXxmbUƒLݏƒbƧ@ƒx¯bƒÈ—l@xƒš¯zƒaݤ@nšm„VWb²bmn¯J¯Ò@n„š"],encodeOffsets:[[128701,44303]]}},{type:"Feature",id:"2208",properties:{name:"白城市",cp:[123.0029,45.2637],childNum:5},geometry:{type:"Polygon",coordinates:["@@ó™ǩŁ@WlwUaƑwÛÅÇéĉamKƒōÇ@Iƒ™ôġVƒȁÑŹçƒ™ÝUƧċĉwóóÝ@Ƒ»ğL¯ll²@ƆÅV@¦m‚Åb@nmlU²VxšlUn™@VbnW„bÇbk҃š„n@èlnlšU҄Ž°Lšx@¼ĉb@҄šUŽċxՃènLVxƒÒƒbÅJ±a@_ÅJÅnƒŽVb„Kl„nUÜĊ@„Uš™xXVÆn„mšVššJÞ¯V™ĠwšƒXw°xWL„x„KV¦ôU„wVÝǬóÞޙ¼‚‚„ÞkŽVôȘxބU„lVn¦ÞšĊa°w„b°@šbÆw„lŤL²`„z°@V@@™nJVnl@@¥nUmmn„@mwnmmUnk@mlwUaƒLnƒ›wn¯°anƒWakI„ƒÇmXwÆamUXUlJXa‚UUklKUknmÞV@‚K@VWÞ@VkUwVƒ"],encodeOffsets:[[127350,46553]]}},{type:"Feature",id:"2207",properties:{name:"松原市",cp:[124.0906,44.7198],childNum:5},geometry:{type:"Polygon",coordinates:["@@„šźèȂÒU„óĢ„š@JŎȄ‚‚LnŽĊbÈêÜƃxVbkx@XǪłôš„kÞ`„šW„b@n°ašbšKšnVw°`š_X`W„š¦„ĊIkmVšakw‚K„x°UÞb„U@lšƒl@°¦œVW„šaÞbšxÞI@mVI@ƒVkŚUWK„¥nL‚a@ƒ„@ȍ„@°ƒÆ@nU@KÞalkUwVékUWw„™kU›VkkƒJk¯@»ókƒV¯ÆÇI@bĉô¯@™ķw¯nmmÅL¯wƒVƒUÞy@UówÇLkmm@@UóxkkĉmL¯wVwkWWX™mLõm@kűV_ƒƒô»ÛƒÆ¯@™Va™VšaĠVlmğwķUóÝƽ£ÇJkbǫaƽLW@nxݤkzƒy¯XɅm@VšôÇX¯Ė¯ºÝnUŽnLVlUÔmV"],encodeOffsets:[[126068,45580]]}},{type:"Feature",id:"2201",properties:{name:"长春市",cp:[125.8154,44.2584],childNum:5},geometry:{type:"Polygon",coordinates:["@@„U°xÆKnn°mĸxš°@Ċó@aÈJ°Å„Uôl@¼l°„IllœUlVƒšXxlVUêVxkllnÈUVll@Vx²IÞ¤VUlVnIôlރlwô_„›„bVaĶLXÅÞÇ@K˜¯@wÛaƒçn¥š¯WXyW¯XwƒUmmÛ@ma™nómğzƒxÇK@aUÇL™a„ƒmanƒUw°@WwnU™al™nkƒ¥šU™@aóIÝbUm¯Vmk—@@aƒU@amVğĉ@ƒlUnÿ±Uƒ™bóKmVÇÞī@ÇVUUw‚™šmXk˜Kn@ƒ™L¯ƒÇU™byókōè@b‚n@lÝX@x¯ô@ƙUV_maXm@aóƒJWxnX@ŽVVnĖVnUJ@nōÆǼV¼kxƒLklÝw@xƒx@zV`ÅbmxU±xU„nnm‚kn‚ŽğU™bUŽ‚šUb@šÅ°Ü„󼄄U`Ʋ@lön‚KšnXWlXUx°xnKĊllôw@Vn@lnÈKôx@VÝz„V"],encodeOffsets:[[128262,45940]]}},{type:"Feature",id:"2206",properties:{name:"白山市",cp:[127.2217,42.0941],childNum:5},geometry:{type:"Polygon",coordinates:["@@Ušl¦kÒÆ°„IlÒU¤ôz„¼lJš„U„n‚ÆXVl°@²aÆbVKČXV¯°¥¯ĉ°W„„„L‚¥Ģw@x„bUx°V°zn‚‚b@ÈlVŽlIœ@˜w@m„U@akU°ƒkUôwWƒÈ¯VUƒVUƒÅ±U›@kÈk˜Ñœw@ƒlaÞġƒUÞ£@ƅ‚KnÑĢ¯@W‚aUaVUVkkw@a¯@¯™Ý™ƒVXnW@@WkXmK@xkKUb@bW@Uw¯„mmb@WKUbmUbUaWbƒJĉIVW@I—l±LkšmU™bUm™@ƒnkKWa¯n™@„`Ubma™„ĉL@bƚ—@W`ƒL@n¯‚Xb‚@kb@x™Lƒ„™@V‚kL±™™mlUIU¥mL@lÅx@_laƒƒ@U—aƒV@kmmƒK„£ƒƒLƒƒmKUnÅKVbmXVlèĉUUbml„ĢŤƒIlŽ¯bǦœl‚@ô¼Ģ„@x°„l¤„n„a„l@x™b"],encodeOffsets:[[129567,43262]]}},{type:"Feature",id:"2205",properties:{name:"通化市",cp:[125.9583,41.8579],childNum:7},geometry:{type:"Polygon",coordinates:["@@ÆlXnĠxĢ°lÈ°š„K„°kXm‚@¦Vbk„ŤJšnݤk„VÞVVkȄb°y„™@w˜k„Ç°a„wƨ@„aސ„K‚VnaWwXWƒ„kôJš_ČºôVkƒ»óyV£kуJůlÑk¥V™ša@wƒkƒbƒmk£¯ƒ@wġƒó»@›kÈ¥°ak„JÆ£ƒġnkVaĊVkçWUnUaÆLVmnL„„‚KU™±@—„m@a¯U„bmV¯m@_ƒK™™U™ƒaƒÅ™Wó¹ƒ@UanmWak@@wmI@y™@mk„JVa™@UaƒIkJ@n™@Um±kkxƒm™Ik„ƒbÇm@Ž°bXn„V@Ž°ÈmlÞ¼¯XVº¯Lm„kWWXLmVVlknƒ@@lnWƙ„Vxbmšnšm„¯lÝaVȁè@¼V„„b™„ÆŽ°ÞUVšJ„„kx›I—xƒƒƒIV¤™ÒXxmn"],encodeOffsets:[[128273,43330]]}},{type:"Feature",id:"2203",properties:{name:"四平市",cp:[124.541,43.4894],childNum:5},geometry:{type:"Polygon",coordinates:["@@Ɇn°W„zlyÞ£mwX@ƾKǬblaÈIƾ¤ôÞĸVĠxnmmVƒ²w‚VnwÆaU_@y„w@wÞxlk„KlwU»È»ŎÅ@mVIUmmĕUU@mWXw„Iô‚@bWnnbU`‚šV@Å°ó@wÞW@km@aŎ烙@m°Ñ°Inm±aXaƒU™n@mƑšU¦@šÇŽ¯aU£šaU™ġ¦ÅҙJōUŻókUÇ@™¥¯ak¯mUVak@@aċçÅaUƒm¦Ý`XbƄ@n`ƒI™xĊÞōÞml@šUb@Wl™_¯JkšÇUÝÆÅb@n™„llUb¯„±a@ƒ—ƒWĉJġĀ¯™Unóšm¤œxôaVnƒxôI@x„V@bmƙ„@lnLmޯޙxVb¯þ"],encodeOffsets:[[126293,45124]]}},{type:"Feature",id:"2204",properties:{name:"辽源市",cp:[125.343,42.7643],childNum:3},geometry:{type:"Polygon",coordinates:["@@żôŎVšIÆÑĢ¥Vš™bV¤°bȍ@™V¥ƒ™Þ£lÇUUUÝlƒÞ£™mţIlƒUa@¥nlWƒ¯ƒL¯™kÇġ¯ğwWmÅk¯UƒVU„„bWlXlmnƒbUx¯xVVknlŽUbV„ÇKUb@„™VnbmlnzUº±bmJUbWÈnèm҄š@X`WL"],encodeOffsets:[[127879,44168]]}}],UTF8Encoding:!0}}),i("echarts/util/mapData/geoJson/liao_ning_geo",[],function(){return{type:"FeatureCollection",features:[{type:"Feature",id:"2102",properties:{name:"大连市",cp:[122.2229,39.4409],childNum:5},geometry:{type:"Polygon",coordinates:["@@‚IÞmVk@wXWÜbnwlLnU„@‚nLlbXW@a‚wnbl@XL‚aš@Ċ¥@LULnJ@xVnmV@VXXV@VJkn@VÜKXXôJlb„xl@„IVbnJVLUbn‚lnVw„JVU@ƒXU‚aUUlwn@°ƒn„VKnV°_VJšwl@nwlV„IXWlIVVnK@IWmkIVaVU@WÈUlmU@U„WUalkXġŻ@kIƒ»mm™akUm›ĉUŁV»²ġVĕ@aUU؍IɃ`ȃ@kƒw@ƒUƒmwĉ™@ƒWķсIĉÇbÝLkymbIƒwÇmÛbmbU„¯ÜõÈkÆVbŎxnXVÆnšǪ¦„bš¤Uš™xÝnĉÒmĊVȄ¤Èš„bƼ„Ā„„ÆÆބźb„VVbX„‚°²¤"],encodeOffsets:[[124786,41102]]}},{type:"Feature",id:"2113",properties:{name:"朝阳市",cp:[120.0696,41.4899],childNum:6},geometry:{type:"Polygon",coordinates:["@@na@UVI@m„ÑW™kaV¥UI@wl@„aÈbšm@wVašk„@@K@kƒ™@a@UUmƒUUalmU@KÇUű¯@±kUKVkUaƒaU@¥m@@¯k@WLUmkn@mmIkm@amU@wVmkU@Klk@U—m˜aXIWWUL™aULVbƒmk@UUmUk±™_Uym@mbkImaX¯WW™xWKzU@WƒkJWwkV™@Um@UbVVVVXb@VWX—@WŽ@Vkb@V™nUK±aUUlwX™ÇWKknU@mmUkƒLUVƒVUUVƒUaƒw™bkKmwnIƒ™kJ@nmbƒ`kmVkLWwUm@UUU™K@UmaUa@UUaWK@mUƒ¯Wkk¯VmUUŽ„xVXUVmL¯ymXkWUbmXUKƒVknWx¯JVnkLƒl@VVxnxlĀVL²WlX„l@bÝVUn@bnlÜaXblIVl@šš@Ȧ@VmbXV‚@@x„VVnUn@`°@VnXU@K@„VV@VmbnVn@ln@b„xƒ°Ub@bšLV`Ånƒ„W@@lUšnnWVU@Vbkl@Xl`XxV„UblŽkX@Ž°¦V„UVVbUlkV›@UbVbkLUxmJkXšš@b‚bœxVKÆlXX˜bnŽnala@ƒUk@U„VVklKVUXKVU°KVan@VUnLšKVL„WVaU_@mmUXa@m˜wXwVkVWXk‚k@›„k@klm@wXKl@U@KVUUUVaUƒV@„alL„xUx@b°°VnnVšxlIXJmx„LUVlV@bnX@Všb„aVx‚@XJ@b‚n@VŽVXȄl@llX@lU„Vô°°@ބVbn@‚V„k„@VW"],encodeOffsets:[[123919,43262]]}},{type:"Feature",id:"2106",properties:{name:"丹东市",cp:[124.541,40.4242],childNum:4},geometry:{type:"Polygon",coordinates:["@@lzXJ‚U@š²x‚@@Vš„@bUVmKUn„°n@lnVK„„nV@n@VlV„°WbXn@‚VzƒJ@¦@bkb‚bUl@bkbƒJ¯zƒWULWbklV„nb™¦VJ@„„K°U„kl@@W„bVn°@„Všm²U˜nX`„UÜLXmVXlKVbUVVnUbn˜ƒX@VUL@lUbWxš@²kl`n@Vlb„@nUVWVLVU@aV@²bl@ÈmšxWX„VÈU„JV„l@„„la„WnX‚KÈkÈ@Va°bÆm„@XV°IVV°UnalƒVUn@UwVU„@@VVJ„I@bl@XK@wWmXU‚UVbkJVXnJVI@mƒknwlKXL@`l@VI@UUaVKÞn„aVm@aÇ£XW„U@aÇUU@mbkKm£™@WW™ƒL@@Kk@kl›U—bWKUkUU¯UõÛƒmUUaVU„U@WU_W@kVkJƒ_WKkV@bUL™¯¯ƒ±mk¯ġƒğÑ@UmwƒKUakƒ™ƒa@a„m¥ÝƒIUWmk@w™mţ—L›KʝbȗKWĢklVbƒX@VV‚knÇV@XUVUblJXn@J"],encodeOffsets:[[126372,40967]]}},{type:"Feature",id:"2112",properties:{name:"铁岭市",cp:[124.2773,42.7423],childNum:7},geometry:{type:"Polygon",coordinates:["@@XJm@¯šmXUlnVbUJƒU@bV@UJWL@VXLmJVbkXlJXxVL@b@V@n@b@`Vbk@lxknV@VV™V@bUL@bV@@bVK@VXLWLXJ@LV@nbWJ@IUV„x@LVJUXVxVx@VV@@LXJWL@VU@@L@VnL@bVVmVX@@VVInJmbnLWVnVULVVU@VVmX@@JVz‚l@„nVVKVXރ@mk_lm„UUWV_nJlUÞÑÞVVUVƒVL„UVJ@I„Vna‚@@KV@XwWknwnKlalU„w„aĉݚwšJl_@aUaƒKUUU@WU@WXUÆ@@UVK@n@UnVVšblK@bœllb@b„bW@Xbl@UlnLl°°bš¦nKlVnI„V@UWU@WXkƒw@am@nm@aVw@I@KUaVIm±XÑlknJVnVJšaX_VaUaVKmwnkmmn@lU@U@mnašXlKUmUIVmklaUK@UlUVUW@U™kVm™a@UUU@JmUU@@bmb—KWV¯XUKm@ka@UVKVk@aUKmLkKUUÝUmbXbÇJ@k@WU_@m™™@klm@UXKVaUI@KWUXaƒÇWk™aWUkWUL±U@lUU@ƒUJƒI@V¯JmIm@@aU@Uwƒa™@UV@VkI›V¯aUkƒWkb@bVL„@@VVVUXW@Uaƒ@@b—‚ÝbUV݄@ŽƒLmUkVUbVllLUV@LššXŽWbUXm@U`@„kxlnnJlbnIllšLX„lVlUXmVK„n‚V@L"],encodeOffsets:[[126720,43572]]}},{type:"Feature",id:"2101",properties:{name:"沈阳市",cp:[123.1238,42.1216],childNum:5},geometry:{type:"Polygon",coordinates:["@@ȚĊÜ°„b„L‚lÞxUbUn±‚@ÈnVÆL@xnLšlUVƒbƒxkImJkn@V±LUxkV@bšbšKVKnzVl@L°@Va„xÞUlbôxVVœ@@V±bnŽ@llXL˜ŽöXĶŽnal@nkVJVI@aU@@aVK@ašUUUU@lmkwl@Ua@_@a@m@U@aUKWwkIlWUanIWK@UXKVIU@@a„VVIUa‚mVknW°™n@WI@KUƒmULWnkVkUWƒ™KkkmJkamIkmlw@ƒV_n@VWXaW™™@KVUkKUkValUnV„K@ÞƒVUÞa˜@a„@VbX@VWUU@Uƒ@UK@ala@IkKmUUa@U@ƒVƒkk™WVwU_@KÜUXbl@V¥XUVmƒƒƒXa‚kŃlUUkIm`UIUJW@UIKmkm@UUJƒImmU@ƒVUXU`mIUbUK@LƒJUU™l@Xƒ@UbƒJ™kU@ƒŽn„m@Uam@@ƒ™aUmLKƒwƒ™mWXUK@kUaÇa@JUIUa@aƒKVUƒUXmƒUy™_@lmbkLUKWLX`‚n@bVL@JXL„‚WX@Vnb@Vm@UbnVmL@V@x@LUbVV@V@LƒUVl@mb¯U@xU@UVVV@X@VVblJ@bn„VKUn„x@llnL±¤™b@k`VXÆK@„kV@¼kl@bWIUl@VmLnbm@@JXXmb"],encodeOffsets:[[125359,43139]]}},{type:"Feature",id:"2104",properties:{name:"抚顺市",cp:[124.585,41.8579],childNum:4},geometry:{type:"Polygon",coordinates:["@@„XVl°bœUlJ@UVUš@„bVxV@@bn@nJ°I@U„J‚I„VV@V@k²VVKlXXVšb‚lÈX„ŽWbXV@LVJUbWL@Vkn@lšš@nV`@X@lÈIWanaÞVVVlLnKVL@bUlUL@Vlbn@VL°WXU˜Lna@aV@nV@IVV@VšbUnšl@V‚XnKVa@U„UnyWkXaƒaVk@ašašbnm@_WKXmWanU@alaU—l@XJVLVxX@˜wnKnVlwƒƒ™@V_@a¯¥@UkKWUaUU‚anK@IƒaU@WUaVw@klUVyUUVUUÇ@Iôbša@mnUma@kXa@UWak@Wa—l@a›@WUƒLmU@U`mIUU™`mUk@@UUK±nkJƒbUam@kwm@@a@UU@Ua@@K@ƒVK@kmKU_UKƒUUaĉWmkkL@`™LƒnmlkLkbmK@k™@Ulmb@b™„@Ž„xUVƒIUlmVXXƒxm@™JUUk@WUk@ƒakx±@¯x¯Umb™KUUVmUU¯UmVVn™WkÆ„lWb„„„ŽUnWVU¦k@WaÛV@LV`UxšXllU„@„@VVbnVlL@J"],encodeOffsets:[[126754,42992]]}},{type:"Feature",id:"2114",properties:{name:"葫芦岛市",cp:[120.1575,40.578],childNum:4},geometry:{type:"Polygon",coordinates:["@@ll°X„ŽnV‚@XLVb@VVbnb@VšLVV@VVnXxlKnU‚l„_na@mlI„šmJnxlLša„xVbU„VV„UVU„KVlnnV@lmXLšÈWŽkxVV²bVLšm@Ula@UX˜@XW@UWaUUUUVan@V‚š@lUXxlIX„V@‚yXLšw‚ŽXXW°nblJnan@Vzš`l²nVVVl@„nUaVKšbVKnXVaUaVUšyšnXK@kVK‚@X@m@m‚LXa„LWƒU¯„w@™ƒa@UVw„¥°™ó¯¯y¯ƒUǯ»›w¯Iƒm—¯Ç™UUl™¯»ţKċÑţķm¯w@mU_ómk¼VnU`±IkbVlƒnnŽU¼±Lk`@X™Wl¦UbmVUxkXVlkbllU„Vb@bkVmx@XVV@Jb±aULkKWXkWmX¯aUJmIkVm@ƒxU@n„"],encodeOffsets:[[122097,41575]]}},{type:"Feature",id:"2109",properties:{name:"阜新市",cp:[122.0032,42.2699],childNum:4},geometry:{type:"Polygon",coordinates:["@@šXnb°lš„VlnXVJ„LlVnl@zÆxnK@b„blKVLn@@V„aVLVK@L@Vl@XVVInVVKVwlUXwlKšL„ššVVb@aV@X„lUXbVW@n„lWnXKV@@V@XUVVLUVV@@bVVV@@ln@VbVUXV‚I„xVanJ@UšIVWšL@UV@@¤V@nInw˜W„k„lnIVx‚lnzUVÇJ¦VVÜLĸUnW@aV_šWĊXXa‚Knkl@nm™L™a@alUVw²K@UlmnIlJ„w„aVU™kmK@wÅKmU@DzVmVaÝwkƒKƒaÛ¯șĉķ¥ğ¥ƒ@kUWkƏī݃ƒ@@akU„K@KWIUm¯nƒU¯JmwUVmIkJÇLm@™UImJUU@aW@U@@nUb™JƒaƒbXVWn@UVmX@V@b„š@l@Lƒ@™lUb@x™nÇaƒbk@@xVJU¦lbXšƒÒ@nUJ@Vmb"],encodeOffsets:[[123919,43262]]}},{type:"Feature",id:"2107",properties:{name:"锦州市",cp:[121.6626,41.4294],childNum:5},geometry:{type:"Polygon",coordinates:["@@nJ@nlmVnXKl@@°n@@¦‚V„bVbUlVL²l°@ƲÈV@LV‚knVb„VVnnWVU‚@XmWU„a„bšIVa@mV@X@@bVVnIVJ@š‚nÈKlInJVUnx°I„V°mVnXJ@LƒLlV@b„@ބƐĬXllV„@Ġ¦ĸ¦naWW@In@manK@UVkXJ@alk@»lU@ƒÅLUWl_@ša²£‚Kkm@kƒwVmULmƒ@akIUa@U@WUUVU™aÝ@ğ›wkƒƒmĉ£UWƒ@@bÇL@m—a@_mKƒlƒXUwKƒLţÓ@UWw@K@U„I@m™U@UV¥„@°UnJ°@@_™KUwƒW@UnaWUmmI@m™ķwUaÇLóVĵwݙUUW™¯šƒ¦Ux@V„b@šƒxV°X„ƒKWbK@n@nW‚@UL@lWL™m™zUVVbUbmWXXWJ—b˜n@Vkl@LlVUn@xnV@bln"],encodeOffsets:[[123694,42391]]}},{type:"Feature",id:"2103",properties:{name:"鞍山市",cp:[123.0798,40.6055],childNum:4},geometry:{type:"Polygon",coordinates:["@@l„œxĠŽÞ@šbV@@w°Vna‚@Uk„V@K@UUUVa@K@w@UnKmUVan@@Uma@UXWƒWK@IUK@amW_XKVLlKna@kmKVak@VU„@VmšU@anIÆan@‚a„šUVnb@blLV`ÞLlU„bna‚Kn@naVU@¥°IVK@anUUKVaƒUVak™@mJƒkXƒ™UVwkƒVUUa°U@Wƒ@WlkXWlIXUlJlaœx‚IVVXLšll@nLV@lLXl„KĊzš¥maUƒlkXaVK„X°y„Ila@aVkala@a@¥„IUy@WmXaƒ¯kU@U@mmUƒƒULkmm@ƒ¯VmnLVU@a™ƒ@U@±w@™VWIkymLUUkJWXƒJkUmxk@™xUI¯`mUULmƒ¯„m@kxVVbWV@„UVƒIUx@bkšVšVVšxUbVV@V@zšJVXU‚lnk@@lkLƒlƒLUU±Jkšm@UIUVƒLUVU@™K@UƒnnV@l@Ll„ƒaUJ@zn`@nWlƒIUVUUUV±Ln‚@nmL@VUVkLVlUxVLVlÅXma™@@akLmWUX@JUnVJVkXJ@X@`WX„VUVUIlb„W@bVUVL@`Un@¦U`@bUV@z@Jm@@XV`„LUL¯J@IVKmKÅI@J™nWVnLnšVxV¤™z@bmV@VUV@bUL"],encodeOffsets:[[125123,42447]]}},{type:"Feature",id:"2105",properties:{name:"本溪市",cp:[124.1455,41.1987],childNum:3},geometry:{type:"Polygon",coordinates:["@@lb@Vn„lnVVUb@šVJ@nnJ@bmXUx@xVbkbkŽWLUxnl@Ul@„xWx@nUV@¼Ull„knkK@bmbnl‚LVJX@VIVJn_lJVVšXUmnU°VVVUnVVšLna°V°w²@lw„bl@XVl@VVšIn@„wWWnUVk„JVUƒw@šƒ@anaVkš@@lnLlalKnk„mšK@_lKnlĊXVb„VVLV`nL@lUL@„@L@‚VbV@@V@bn@lxn@Vb„alI²mVL@Vl@nVš_VVnJV_‚@nV„K‚V@Xœ‚@b˜kXbl@XblylUUkš™@Xa@UVIlK@UUWVU„Llm@UUUnKWU@K@UXm„XVa@U°KVUUWUk@ašUVKkaWkƒKUknaWa@U—@m@mk@ƒaUJk@@_WKkLmx„l@nUJmIUWlIUaVWVXn@xWLk@@aƒJUI@Uƒ@UVVxm@UVk„mb¯VUU¯JWUƒ@Ån¯aUbÇ@ÇlLmWƒXkbƒƒk@UƒƒIÇVƒUXW™wÇnk@±aU@@bUVUKUXmVƒ@kaUm@k_±l™@XwVa@kVK@U„Wm—VaUmVUUakLUWWnÛKƒVW_—m±V™nƒU¯@Umƒa@Xk@ƒl¯V"],encodeOffsets:[[126552,41839]]}},{type:"Feature",id:"2108",properties:{name:"营口市",cp:[122.4316,40.4297],childNum:4},geometry:{type:"Polygon",coordinates:["@@ĊĖƐn¤„„°Ċ¯ŎWšô„@xXb‚wnKl@nX@VUVƒKmL@VU@Ux݄@Vlb„x„U@VUb@b‚kœ`‚IUlVUn„V@@UV@@JnXlK@bš@nbÆWUkUKVwUklKVU@UnK@mm²KVUVVVU„JXk@mm_@yVI„bkƒ@K@kmU„m@VšLV@VU„KVUVJn@l™²IVV„K„klK@kl@kmVUW™I@y@UUUVa™wUUU™l™@akmmVaUKmIUaƒJk@ƒwkaóIWWÛL@UlmUIU@WW@UnUUm@wmIVK@Kĉ¦™@bWKk@max@bWXkamKƒ@mVkKmxÛaWX@xUlÝnJ"],encodeOffsets:[[124786,41102]]}},{type:"Feature",id:"2110",properties:{name:"辽阳市",cp:[123.4094,41.1383],childNum:5},geometry:{type:"Polygon",coordinates:["@@š`Vz„‚Wn„VUV„L@bVbVJ@IÈbVb@lVLXW‚n„š„x‚LnKVŽšb@„n@Vbn@mƒ„V@šl„IVa„@@WškVV„I@KVLVanJV_VW„UV@nn„JVI‚Vn@na@alLlmkƒVk@»VU@mXwƒwk@@VmkVwXKllaUa@wVwnW@amI@mUI@™VaUUkmmƒ@UkaƒL@ƒUIĉyƒLWkkKU@mKk@™kWKUUJ›wkbkIWVkJWXkl@X„‚@X¯VVbUVl„UxšVW„„lnIš@l‚Ub„VUbVLmV@bUL¯J@¦UVmbm@LmbƒakVÝKU_kK@amaVUƒ™bm@ÅbmJ@b™VUnƒ@UVl@UbnL"],encodeOffsets:[[125562,42194]]}},{type:"Feature",id:"2111",properties:{name:"盘锦市",cp:[121.9482,41.0449],childNum:3},geometry:{type:"Polygon",coordinates:["@@Vbĸx‚š@nnJVnXŽmb@V„XVxšL@`¯@mI¯Vƒ@U¦@VšV@nƒJ@V@LXx@VŤÔ„K‚LVx„W„knL@`˜b@nÈK@a„@VXĊ¤„nVK@aVU@UnU@ašyU£Uwm™mKXUšm@IÆJnLUL@J°IVKƒKU_@Wn@@I@yVU@aV_@¥Vm@_UKUV@aƒXkaVJVUƒUXW@_@WWIUlUIVm@IVW@IU@@VU@mƒUVVkJ›_l@aVa@UƒVƒwka@UރVwV@@UnK„LVU@UmWk@mLxWa@wóƒUVUIÇÆĉ¦¯¦¯xʟJ"],encodeOffsets:[[124392,41822]]}}],UTF8Encoding:!0}}),i("echarts/util/mapData/geoJson/nei_meng_gu_geo",[],function(){return{type:"FeatureCollection",features:[{type:"Feature",id:"1507",properties:{name:"呼伦贝尔市",cp:[120.8057,50.2185],childNum:13},geometry:{type:"Polygon",coordinates:["@@„m@Łkƒ™Žƒklƒôƒ@£kJ°ý™ɅķÑó¤ğLĉÅlÇğŁW¯¯›™ƥóÿlwkţÈéÝƛó™°ÞÅxV¤ĉĖWƒ¯lȭţυ̃ɱÿķƅˋğɱřÝţϙȍƧĊţ@¯kWKUKm¹Å@ķJU@ƧÑƧ„ō¥˹Ɔ@L@„Þ‚VLnš@VōČWJX¦@JŻbU@ţÞmVU@ȁýóbkWWLƒƒÅ™¯UWġkmóƒ±UŹôV¼ƽ¼ƒł̥ĖƽǬʉxĉŽŻȗKΕ̛ʵƨʟÞ˹»Ƨţ»Ǖō˷Ȍ±ȚʊĠUɾɜɨmÜ֞߼˸ƅȂ¯ǖKˢğÈÒǔnƾŎՂ@šĊbôô̐¼ƒ@ĊôĊŽÞĀ™xšĖƧL±ŽœŽ‚Uš°U„°ĬƒČ°ÜƒêɴȂVł°@ƒ„nxŎèƒbȄÞȌ΀ǸlŽ²IlxĊl²ÒmšôĖ™Èl„ĵºm„ÈêVþ„xɛČʉÇĵVmš„ÒƒÈɆôƐŰǀĊ°ÆǬĮƾb„yĊ@ĠšƒXǀċm»ôw°Ûk¥Çm¯ç™kkÇǫţǕéX_ĶWǖīŎaÆĵĸĊ@ȚȘ‚™ĊLĢĉ„VÆĉʊÇĕóaU¥šĉ°mkÅ°ġUĠřk°mƒÑČÿ˜ÛƒWĸ£ʠšÆxÈÞŎÞ»ʈ²ĊÇČalÒ°Ť±ĸz„ŽĊKȲm¤Ŏ@Ò°¼nyȂUźīǖƳÈē°@šÝĶƒ@ƒÈkl¥Ççkxk™›JXÇƒUÅ@˜£k»„óƿīÛ@lÅJl¥óý@¯ƽġƍÅan™ċ™°é¯¹"],encodeOffsets:[[128194,51014]]}},{type:"Feature",id:"1529",properties:{name:"阿拉善盟",cp:[102.019,40.1001],childNum:3},geometry:{type:"Polygon",coordinates:["@@™ƏnǟƨʫšŹɆÿ°¯ÆV²ˢ™żÿ@ÝÆŁȰ¯ȀƳĉó™™@ğkyš¹@īš›ƒwl£Źƒƒ¯Ŧé@™ÇÇxŋĉƩUUŃōL™Ç™ĵóÝnƒóç@™™ó@ġƒƱ„¥ƒç™WUçÆōƒ@é—çťK™çȭVһƽ̻aW¥ȁ£ʵNJǓƲɳޗǔlżÞmĠóĬȂɲȮ@ÈĢŮźÔnĶŻǠšŎȭœгŃċóȭţΗÆƑÞƧÅΫóȘǫɱȁġlÛkÇ°ȁÈnšõl¯ô„ÞɛÝkĢóWĊ„zÇɼʝ@ÇÈķlUČÅÜķnέƒǓKȮŎŎb°ĢǀŌ@ȼôĬmĠğŰōĖƧbЇƧōx@ķó£Ål±ĀƧīXÝġƃêĉK°Ýʇƅ@ΌʉżÅÒϱʈ@˺ƾ֛।࡬ţશóЈèʞUš¤Ґ_޸Ƒʠɽ̦ÝɜL׈ɛϜóȂJϚÈ@ǟͪaÞ»Ȯź"],encodeOffsets:[[107764,42750]]}},{type:"Feature",id:"1525",properties:{name:"锡林郭勒盟",cp:[115.6421,44.176],childNum:12},geometry:{type:"Polygon",coordinates:["@@ʶĬĊIȘƨƨŽ@ĬÛĢșŤĉĬƒĀóšU‚ÈŚÜènŦƐȤȄłϰUƨťƾÑ܆ğɲƜǔÈèʈƲĊƞƒšɆ¯̼V˺Ò˺ȂŤVĢêU܃x„Āˌ˘ƨ„Æ°ѢmÞżU¼ÆlŎ@ĊçŎnÈÒͪŎźƒĸU°lżwUb°°°Vš£ÞlĠĉĊLޏɆnźÞ„n¦ĊaȂīġŃ¯Iĉůl»kƒ„™Çý„¥Ŏ¯ƒén£ġљÝȭxƒÇ™@Åçķ»óƱŎ¥™çWÿmlóa£Çb™yVÅČÇV»ÝU¯™KĉýǕċţnġ¯»ÇōUm»ğƒÑ™wƏbċÇŎċwˋÈÛÿʉÑ°Łkw@óÇ»ĉw™¥VÑŹU™mW»ğğljVÿŤÅźī@ř¯ğnõƐ@ÞÅnŁVljóJƒwĊÑkĕÝw¯nk¥ŏaó¦ĉƒV¦Å`ğуÑÝ@mwn¯m±@óƒÛKˍƏǓ±UšÝ™a¯lƒōšșk„èƒĬގn@ŤġŰk°ċx@œĉ`Ƨĕ°@ţÒĉwmĉ@ƒƒnƒƒa„™¥ķnƒÞĉVóÆókĉŽķ@ÝkƧƧÛaƒ°Ç@ÝÈU˜óbݼ@„ÛÒV°™@V¼ˋL™ÞɅŤŹǠVÞȗŤÇĖŚōbȁƜ"],encodeOffsets:[[113817,44421]]}},{type:"Feature",id:"1506",properties:{name:"鄂尔多斯市",cp:[108.9734,39.2487],childNum:8},geometry:{type:"Polygon",coordinates:["@@ĶL²ĬVłƑkkl@Ȏ™ŘWńÈĬȗ¯™ºlz@ĠššĊôŦô„ÒĠ°kÞܚ™n@¤„UĸèĸbŌÈXŽĸLlÒĢxɲÆ¤ÈÛƾJÈÝ°UšÅĶ»²VW¯ĸJôšbk‚V@ôlbnĊyÈzVôašb@ĸ‚ÞUl°yǬ²Ǭm°ššk„±lbn°@È»˜JX„VŎÑÆJ@k„LšƒÆl²™Ġ²ʊůĊġ‚řóƛÞÅ@m„ƒmLUÿóĉƧ@™»L@„›`ČĸmšȗÑţů±ĉğl¯Ā™wǎƒçƧŤÛI@±ÜĉǓçō°Uwô™ǫůķƳř±bÅ£™ÓÇwnÑó@ȁƽ@™ƒÇƧĢón»ŏĕóĊ¯b„Å™™VȯÅImƒōKU„™LǓ±Ýxċ—ŋ˜V±Āȗ°™„Źl±šÛ@WÒȁŚŹНŚÅèŌô„¼°ȰɞȂVĊ"],encodeOffsets:[[109542,39983]]}},{type:"Feature",id:"1504",properties:{name:"赤峰市",cp:[118.6743,43.2642],childNum:10},geometry:{type:"Polygon",coordinates:["@@ɲŁĢljĊwƾōÞĭ°_ŎŃźȹƒUČÿl»¯ôķVÿǬƽ™ɅġÅÑǫ»̐ʟȣU™¯wVWݍÈġW»Þ¹m݃ɛŎÿŎōͩůV¹›ō™éċ™óŹÅVVĢǩʈ@Ėċ@ķšÛšV°¯xÇÅţ¥™»°Ûô™ĉʟ„¥WýČ¥™w‚灻±mnÅķ¥ˋVƒbUÒġ»ÅxğLƧ™ƒbWĖÅxš¦U°ÝVóŰlô²@š¥ÜÞÛô„V@²±`š¦™„™¯Ý@„ŽÅ„VÒō¼ôš™¤V²ŹĬÇĊƑƒţxƒç¯Lk»ʟlƽýmłÝÆƏ@mö°Ġ@ŚŹĬţÆUĀĠNJĠŽX¼šnźVUҚ¦Ċxȼ@ôlx¯łʊÒÜĀˌÇČxƍČÈƐašx„ÒĠŽn¼ŎVȐ‚¼Ģ°ŤmǖČĊþšLV°ÞŽU¼ċÈUƚzÈa‚¤ôbkŽ‚nXĀšè"],encodeOffsets:[[122232,46328]]}},{type:"Feature",id:"1508",properties:{name:"巴彦淖尔市",cp:[107.5562,41.3196],childNum:7},geometry:{type:"Polygon",coordinates:["@@²@Ζǀݴʶհĸ„˜ƒ¦Ķ™̒Uˌ¼ӾÇƾ¼̨UÞĉ˜Ƨ—éÝ»ƒĕĉ—ƐȍœōǪakó‚ó¯a@™ôţ™aV¯Þ¯°@²él¥ĵğťwōxó¯k±š—Vó@™aóbUÇyĉzmŽkaóŽU@l™aó‚ķIX°±Uĵ¼™Æ¯VÇÞƽIÇÜÅ£ɱŽġwkÑķKWŋÇķaķçƒV@£šmۙlÝğ¯ƒÑťóǿƴȯ°Åł@ÞŻĀˡš±ŽÅU¯°ɅĀ™źƧʬmǠšƐ"],encodeOffsets:[[107764,42750]]}},{type:"Feature",id:"1505",properties:{name:"通辽市",cp:[121.4758,43.9673],childNum:8},geometry:{type:"Polygon",coordinates:["@@ôƲĸ¼Æèš@„ÈȮwƾ»ʠĢ¥VÆ@²¥@»Ŏњ¯ĊJŤ£k»ÆÇX¯̼ōšī°aX£ôƒƾȁź¥„ƒ™aôŤ™ĢL°ƒĸ@Ȯ¼ÈÒʈŚôVXůÆaĠƛÈKƒķšĉôÿ@ğÈĉ™»ÇVn™ĉV›wXĠÝ°šČÿĸwVƒ™¯¯ǵ±™ĉ‚ǫ™ÅÅm»²Ż±ƽIm¥ţÈķ@¯šƧJV»ÞUÝç¯UġºU£ţŽóaÅÅlƒƒ™Ƨī¯K¯Þ݃ğL̑ȍƽ@ōŎōĀƑɜnÞݺX¼ÇĢގUX°xVšʠȤ̏Ǭ¼ÆÒɆĢšŽǫƾUĀóĸ°‚k¼ċĀƑVŹȺōń¯`ÝĮƽŎĉxġNJɱłō¦"],encodeOffsets:[[122097,46379]]}},{type:"Feature",id:"1509",properties:{name:"乌兰察布市",cp:[112.5769,41.77],childNum:11},geometry:{type:"Polygon",coordinates:["@@ʠǠÞĸɲȺƒÒȂƛŎaƙÈĕȘţUÝźǟɆţšÝˌKU»š@U¯ÜÑ@ƒÞ»ôaV—ÞÇÈ@„¯ÜbƨƨÞlĸ@ĊôlôÅĊU„Ýĸmš¦ƒŽ„bm„„„Ċ@n‚ĊxŤÑ@¯‚ƨĖĊ_@›Čwl¯™ƒȭL›Ý„»ƽ¯ķů„Ǔ@ÇǓbċ™ÅÅÆwÿĠÇU£óaƒ¥¯aŎğĠţkw°»¯ůlÝĵkǻݰɱƧǫaóôɱ»Çk¯ŃóƒʇŐŻ›ĉNJŻĢ„Ž¯ÒÈUl°ƒx°n„Ò™Ĭón™Ċğ°ÇŚĉ¦ʵVƒ°°ĬÛżÇJȁńʇʹó˂ƽŎ›Æţ¦"],encodeOffsets:[[112984,43763]]}},{type:"Feature",id:"1522",properties:{name:"兴安盟",cp:[121.3879,46.1426],childNum:6},geometry:{type:"Polygon",coordinates:["@@ÆXnlŎ°@LVLĠþœxĊUȮĊnU„ĠV@żaW¯XIŎġƒ¥Ý@K@w@K@I˺ŻŎ¦ƨƒƨÒŎIÆ@X@VºnX°lŎ@ƾĉˤƒȘǷȘÑÝݚÞbVţĸÿŤxÈĖƐŽêÇKnĸ¥ô@›ķÞUnÒl@UŚaƒīˋƒ¯ÑƧx@±kXřƐƏÛéV™ˋ»lō¯ĉ„ÅÇÓǫޗĖġV@ğ»›°ĵ„ÇÞǓ¼¯m˜ÛÅŃĉĠÇƾb²çƒ™šéż¯VƒƒğÞml»ōÑV痻V¯™¯šĕÆU¯y°k¯¯V»ôDŽѰa@Źk™ġKţšóŽšbƒ„Ź¦ƽȂó„W¤¯b™Ĭ̻ŎW°ÅÈl¼ţ¤ĉI™°ōÒ@¼±¦Å@UŽġ¦ʟŽƽ¼šÞĢÒm¤„êō°ƒ¦Èþƒšl„k¼ĊŰ°JĢńȁĬ„°ƒżn‚ÇbV„ݼ@¼óĸţ¤@°Ånšl"],encodeOffsets:[[122412,48482]]}},{type:"Feature",id:"1502",properties:{name:"包头市",cp:[110.3467,41.4899],childNum:5},geometry:{type:"Polygon",coordinates:["@@źxżĀǔÆǬVȘĀŤ¥œÅƾōôˁʈͳȂŃÈIÜŻ¯ī„¯ōm™¯ɱĖ¯ƒķÒÝIÝ»ÅV™ƒlÅôфġ™ğVmÞnnƒWçkW܁XƝÆwU»Șĕš£ĉÑ𱱚Åk™„ƒK@lÅIō҃UW‚—IǼ¯@m‚kaƒ²™l¯™ǫnǫ±¯zkŽÝVķUô™˜l²ô°ŎwŦxĶĠk¦±ê¯@Ý°U°šbóŤ@š°bôlôǩb›ŎƏȎĊ˜„ĖÞ¼˜ê—ƨÝĊ"],encodeOffsets:[[112017,43465]]}},{type:"Feature",id:"1501",
+properties:{name:"呼和浩特市",cp:[111.4124,40.4901],childNum:6},geometry:{type:"Polygon",coordinates:["@@ʶUĊ¥ÈřĠ¯šĉômšīƒÑ¯m„wk¯ÇV°ÑƒżġĊljǓɱţǓ›ƝóX¯ƒɛÒóa@nÝÆôƜŚĉĢʉŰĊҙ¤ȗĖV¼ÅxWƞۂlXXèm„ÝmUnšĠƒĢóÒkƚ„ÆUÞ¼ÞJĸÑ°„ɲĕš°Ŏn"],encodeOffsets:[[114098,42312]]}},{type:"Feature",id:"1503",properties:{name:"乌海市",cp:[106.886,39.4739],childNum:1},geometry:{type:"Polygon",coordinates:["@@Ș°ÇīXњŗ@ȍlkƒlUŁ±īĵKō¼VŽÇôXĸ¯Ž@šťê„°ź„k¤„x™œ@Ĭ"],encodeOffsets:[[109317,40799]]}}],UTF8Encoding:!0}}),i("echarts/util/mapData/geoJson/ning_xia_geo",[],function(){return{type:"FeatureCollection",features:[{type:"Feature",id:"6403",properties:{name:"吴忠市",cp:[106.853,37.3755],childNum:4},geometry:{type:"Polygon",coordinates:["@@nLV‚@šVLšaÞbn@@l˜š@bUVlUV„zVx™¤kÞVèšXnš‚@nm°a@UƒÑ„@VŽXnV@Va„UšŽVKUUU@@U‚@@KVa@U²@‚wXkWnk„±lLnU@UmmVKnIVWnI@UK›@UK@@UVKXkmWLWUXmlkVwUyVa@w„w@aVI„K@aVÈw„KlLVV@LnV„VVnU‚ܲ°WÈIUÆ@nÞ¼‚‚@¦™@UÞUVW@UxUxVn„b„K‚b¯ÞU`VbǬ™V@XXÆVVl°InmnUôƒ°¯‚anam£œWVX‚KXmškôaVU@ƒVak@@wmaƒn@K@UÛUWKXUƒÇƒ@UI™b@alW@akLUKV@@Ukw±Iš›nL@kmwkWmk@JUIƒůVmnnU@m@UƒK„VKlkUwkƒƒnVUKmbkI±š—KƒkmVkKƒb@U@aƒVkUmn™`kIlaUK@UUKmbUIݚUa@mUa@aƒ„m@UUULUK@bmKkbWI@WXwlkXƒWa@k@kKƒLVkkK@L@JUVmzUKlwUUnW˜£XVlKUwVU@aXI@aWaUw@W@_nam@¯‚UkWVkUWaU@nwmJkUVkWVUmUkJ@ImbUaƒ@@WÅ_mJknmak@@mƒXƒaUV@„ƒxUšƒ„@‚ƒ„@VUnkVƒ@Vn@`ULUbWLXVW@kbUJ@XW`@ƒnÅĖWJƒ@—m°@xƒxšbnUa‚w²lƒÞ°xŤIVVULۂWbšbkVVXÆ`UbVL„@kx°LlV@Vœ„WbƒJn@bl¤ULV„°@lmL@ƒƒ£U@@aUwmKULVxUVVx@„™@kU™@mK¯LÇa¯@"],encodeOffsets:[[108124,38605]]}},{type:"Feature",id:"6405",properties:{name:"中卫市",cp:[105.4028,36.9525],childNum:3},geometry:{type:"Polygon",coordinates:["@@°@Èb°KnLš@lVš@@ƒUwVUUwVKnLVx@bV@„¤@„nK@k‚¯UƒVKk£@a‚m„IXa›ƒ@UkU¯Klwƒ@UKVaÅ_UWlU™aXa܁VKUUţJ¯w„ݱkxVbmŽ™a„w@wn¯˜„@XIÆĕ„m‚@X_@WVIlaX@WUXKVaVK@_Um„@lUVm@U„ƒ@„ƒV™„w@ƒVUÛwm@@W@ImKUkU@Ua‚aXƒ@wWaUKkw@UVaUamLU™nk@»±`¯@k—W@Ua™ykbƒI„„@VWJkLWUkJƒwU@ƒn¤mL¯wm@Umƒ²XVWbnV@bmxƒVkxUblLUV@kVWKU¼ƒŽkUƒ@mn@JnV@bUnmJUn@„k‚@XlxšLVVnKlLVV@š@LkKULVbk`WL@lkXW@kVƒ@UÞUlÇX™lkaUbmV¯@@L@šƒV@bkb@xƒlW„—bƒbW@—±@UJ@IU@mVk„VxV@@l„Illœn@Vm@ƒVUbl„@JLmKÛXmVkU›KULU`@LĉwƒKUX„lVUl@Vb„JX¦̼bÞxŎxɜĖĠ„Ŏaô@"],encodeOffsets:[[108124,38605]]}},{type:"Feature",id:"6404",properties:{name:"固原市",cp:[106.1389,35.9363],childNum:6},geometry:{type:"MultiPolygon",coordinates:[["@@Vnn@°xnK‚£„mV@„xlIXVlKXI@Uƒƒ„JlašzVbX@l˜°@²_@¼mlVšnKVbUb@VlxVLXb@xW„bVbV@VlnL@J@Xn@Üx„b„W@nl@nblmnIÆ`@X„@Vbna@aVUUWVkƒ@kbWakbU@VwšW@_l@nmn@@alVlk@UkmVak@@a‚UXaƒL@¯@KVa@axWI@KnkVaVJn_lJ@„X@‚m@nVanUVb@mXLlJ„VWnLla„VVaVX@KXVVkVKlknKVa@aVU@KXb@klJUknUmƒ@K@_UW@alIUamaU¯kJma@IUK@U„@@UW@@aXLVƒVJVaXIƒKlaUkUV@ambUUJkIWJ@wUI™V@JU@UwV@@Um@™nU`@UkUmVUxWUUV@aÅb@aWXkKUUƒUUaWK@wnm@IVU@aXwm@UmVaUalk@anKUwlƒUwlkK@wmaƒUkmmIk@VmkUUbW@UVUnW@kV@xkVmbVnU‚™@UbUV@a›k@kkW@„kLW¤@„nV@VU@W_UV™UU`VLUV@IUVõVULU@UUUJ@wmkUJ@šWI@l@bkKkbVVƒbVbUL@UUJ@Vm@@L@xbVVVLVlVwX@Vb@bmUkbk@@JWIUVÅw@Km@UkWKXxWLÅ@UVUnWK@xkVW„@KULwWVXVWzXVVKVXkV›V@VUbV@U„VV@š@LXxVL@V„b‚Ž„LnKVLVxXVmb@l"],["@@@J@aƒU@LWK¯UUxVVn@Ġ„„LUW@UbUUUa@KUX"]],encodeOffsets:[[[108023,37052]],[[108541,36299]]]}},{type:"Feature",id:"6401",properties:{name:"银川市",cp:[106.3586,38.1775],childNum:4},geometry:{type:"Polygon",coordinates:["@@šUšwVK@UVWÞUšbšw„V@knV˜@@KU_VK@K„ƒn@W_XWlL@Vn@Ċw@Ulaœ@Wanamī@aƒ»ŋó@aÆÅɲÿUaV_°ÝaƒLƒaUmVwVwX@VUVݚ@@¥Ý»@mVÅÇJ¯XÛ±VUmƒUmU@KUUkKƒLÇxUŽ@bƒLUJ@bƒx@xUbVzUxklWnXV‚KnXWlUL@V@ŽVLœ@VL@ŽmJUXmJULnn@VmVkKƒ²mlXWlx±@@VUb@L@@VV@VVUL™ƒVUbU@WmUƒ@„Ò@V¯bmn@VŽƒ„@lVnUšnVWŽXVl@¦VVUn@x‚š@‚XL@¦‚lXxš„Vb"],encodeOffsets:[[108563,39803]]}},{type:"Feature",id:"6402",properties:{name:"石嘴山市",cp:[106.4795,39.0015],childNum:2},geometry:{type:"Polygon",coordinates:["@@U¯ķó±ÇÛ¯™ķmbXb›@kb@Vĉxm@@UkKWXX`m@ƒ„@LULV`@L—@mU@lƒU™x™aÝVUX@VUL™x™VkLWVšš@J„nVLXVlŽUV@zl‚VL@V@b„„n@lU²WVLlLVbUŽVxUx@xǀL˜xôҜk‚K²ŽVa‚U@wXa@W™ÈĉUa@‚bÈk„m@¯"],encodeOffsets:[[109542,39938]]}}],UTF8Encoding:!0}}),i("echarts/util/mapData/geoJson/qing_hai_geo",[],function(){return{type:"FeatureCollection",features:[{type:"Feature",id:"6328",properties:{name:"海西蒙古族藏族自治州",cp:[94.9768,37.1118],childNum:7},geometry:{type:"MultiPolygon",coordinates:[["@@„V£°š@laœXô±źwš™ô@„Ulƒża܍n™Kƒw@U„aƒ™ša²L‚mÈLƚÈxlaUa„wÞmÜbÞUšnJ°a„kôƒ‚ÑkwÝVğwÇ@ÝkkV¯¥@ò„»„nŤ¥XImw@mVwša@Åw™mLkaW—wƒ¥l»kçƒó„»@ƒWÑĉŽğ@ĉ„™‚Ń„UwóřVómĵ»™™Ý@VǕ¯kšÝĊÅk™°ÓUklkU±šI„ÇÞkƒ±@šƽJƒ™@UġIk@W¦™VÑșÓÅnťKULnŽ¯X›ƒ@¯mUÛ@WřmóKknōbƒxÝ@ƒŽU@kw@ÿÇLţšÝUkšmwƒŽk™lċVŚU¦™ŽƒLkUWlÅÑ@aƒ@ÅѱUóġŹ¼ƒÈĉmŻ@@wkw™Kl¯U™ġ@—„lÇU™Ó¯_ƒ‚Waĉ²Åló¼VbknƒKǎÅ@ƧĢō°Ý@ğ„W™ÅxUUm@™‚ÝXۂW„ULUè¯@mbUaƒLƒbUWġxIUJWz™a¯b™y™@ōÈóLU`ÇXUl™UĉV¯n›mÛbǕLklƒUĉVƒšóaġ„ƏbġKţnkbÝmmnÝWȭȃŽÝXţWókUÇl¯U¯‚ġUɅĀ@°¯„„š¯„VÆnmJ@ĊķnóJUbÝXUlVškL@lVxnnmb@¤Vzš`ÞÞŤ@„VnÆJV„°b„UôJkzlŽkl@²óš@ÆÇ°kĖƒšÇbÛU@lmb™XV˜kzƒV™ŽɅĀXˢlń„ĬŹ@›éÅ@ĉńÆ°ğbUšlŽɜ_°‚@xŦ˜škbVbƒKĢ„ŤVŎŽ°@żÈźlĊ„ôKôb@nôxŦ„Æ@ôŽŎL@þÆb@šnnšWˌbÈx‚InaŎxlU@Ѳ±ƒğVUĢƒƨbɲ@Þ¥ôUUķWVô¯ĊWʶnôaŤˁ@£nmnIôŽǪK°xUXô@Ŧa°m‚kXÆÞVŎkĊ°ÞLȄôyVašIlwX°UVwĢÑÜKôw@nV@œm°nmŽn„Ü‚ɞ£VbmŽXnƒ°ÜÒ@xx@V‚b²UlbkxVnšJUnVVĊ°KȚm°nxÇnn¤±¦@ŽUXVV@„lV„„bmVVȁŽVxšÒ™°šIšbźaȃšbVwš@šƒVL„™ƾÑ@ƒŦô¯ĊkôÑ"],["@@„@šƒ„@n„òVœa‚w²bVxšxÜaČVô_ĊJšIVmšL„a°@Ŏ¥XlK@ƒšk„l„KVbUb˜@nUĢn‚aÈ@lmǬ»Ġ¯œn‚mnƒƨVy™Ñǖ™Ġ»ɲInŽ‚@@ÅĢƳ@¯°™ôV„KÈbVIÇ¥¯@Ýó„™@ÑnīWKšƒk™‚k@¥š™¯™Åa™Xƒ±VÅw@±Ġ¯@»™š™n™Wmw@ƒ™@¯ƒVƒUUWçƒKĉ„a±VkkƒV¯w™x@šUJ‚x@bknÇb™mÅ@Uw±U¯¦UŽ™Kmš¯I¯Žť¼ğĊ™@ǃŹÈ¯@Ý»ÇnˡJƒbÛèÇnƒ„ÅK¯„ġĠŹW¼Ålm„@¤n²ƒŽÝb@b„š¯lƒ¯@ƒšÅ¤W„™¼nV@x„„°@Vx„@lbUblbX¼W‚œšÇ²lšUŽ@¼ŽV¦@bÇlVxUbVxÞbVšœbm¦ƒVV„"]],encodeOffsets:[[[100452,39719]],[[91980,35742]]]}},{type:"Feature",id:"6327",properties:{name:"玉树藏族自治州",cp:[93.5925,33.9368],childNum:6},geometry:{type:"Polygon",coordinates:["@@ɆÿĢV°°VÈklVôŤXÞW„ȮÇÞXnmÞnlaŤmĢLƐaĢƒôb„™ĊU„VlkǖKÜaœn°mĊUšVVkÈWV_ôKŎǚ@šz°ašbXyVI‚JĢwVX„a„KVbna°@VçVKXƒÜÞWšn@VVÆwXšĠƒÞ@Ŏ¯ƨġÆ@ȍ„LlmUaô»ÆkĊ±Xb„°`šÔV‚kȘƒĢ@Všk°šLlx@xż@Ċn„Çź»ôĢ²VÆ҄@@bÆÒXklV„KšV¥Æ™ČUšk‚l„nxl™çƒ¥ċç@±m¥ƒwÅJƒ@™™™Vƒ„mÈIléÈa°U¥™™@kÞV‚K²ÑWƒ°w²Ñ‚K²ñšyƐ„ÝšVmw„»kkWĉ—JWUƒVÅwƒL™mÅ@@ƒmw„kn¥Vу»°™°@@»„¯„Lla„JônV‚UůƒU@W¯Umѯ¯k@WykU@¯„wV¥ƒkVwţƒk»šwWǜĉĶçšK„ƒÞ™ÇaĉbƒI™lUƒ@kwƒWƒXUƒ°w™±@UšKn£Wĉ—KWxƒkĕVƒšamwXw™@™„Wmnk@aƒVkƒ™bĉLƒl™Imm„wUÇ‚Wx™nÝJn@¥Æ™kwƒaXƒÜĉ™¯ÅV¯¤mkƒx¯kķܙ²VWôŹVUƒƒ@V£™¥@ƒ°wn@™m@¯@UbUôķŽmn@ÆÛ@ÇýVaUÇĊVƒ@Çlğ—¯xÝŤ™lVÈÈVƒx„ƒ¤Vx™„kK@™@ƒx@„kVƒĖġ¥kIWbXŽŎx@nƒxÅUW`ƒ_—@±ŽUa™LUxƒK¯„WbkVlb—bmŽƒLÛÆWIUwƒWkwÝV@kI›ŽéUb›UUk™V¯Km¯k@Umݐ¯m¯›m—L›Þĉ‚ÛUm™ġ£UxkKm°™Lw›šk@kšƒVm„ƒKVUk›@¯a¯Ģ™móKUU™x™ImlÅn™™ÇbXèVVU„°„@ŽšŽ@„‚xXnmš™ššŽ@¼ğ°@²ÆxU‚„²šWÆb°š™š@¦llš™„XLmĬ@҃šÞô°@ȦUJÇaƒLóU¯š@°ġƴ@Ɓ@mɱJğ¼ǕššÒUzƧ‚m„n›mğ°ǫ¼knÇ@bġmmV—@VaUaƒLƒk™l@„kLW‚ō¦¯@ƒb™KUn™JĉIó`ċUÛb™wUw±ax›bñUmƒƒ@™„ƒ@—bƒaƒbǏÅXm˜„ƒÝ„ÅôVbގ™bl„UšÞVޚ„U‚°„VUxƒ@U„V„@l`™¼nL@Ċ„LW„„¤kXķWġXUVVVķ„UbVb@°kVVxÈa‚@ȦĊbšaźJ„U@Ț„„˜Vœƒlš@XkôaWƒĢ™Þ@laĸUÆb²mÞLĠ™ÞÑôbšÒĊa„JVbm¦"],encodeOffsets:[[93285,37030]]}},{type:"Feature",id:"6326",properties:{name:"果洛藏族自治州",cp:[99.3823,34.0466],childNum:6},geometry:{type:"Polygon",coordinates:["@@ÞVŤ™ÈK@ĀlxV@„Þ@„wŎalmôLšnXÆÜ@nV‚°@œ„°WmVKŦLÆmȚԂҚUX¥l@ĢJVš@„ŽƾI@w™W°™™Ån¥›kÅÝVwôƒÈç„@lÑĊĕša„JnaÆLVw°kny°UnkÆVȍĊll¦„Vƾ@@™nUźƒÈǂIn°X„wÞKô¦VWV£„@£°ókċ±I™™am¯Va™»ČĉV¥°™@m„k„¥l@„Ċm@ašU™mwXƒ@wÆxšmĢ_„`VnÆbšKVw„@@ƒnUVğVmVVöIlŽl@@çÛmƒ£UDŽw°@VUƒ¯»m¯ƒJōĖÅLƒa@»ĉĢ±`U_k`ÇçšóƒkX™lK@ƒakÝރš£WċkÝ™kxƒJݯÅw™xķxmIÅx„@k±J@ýŋš›¤UœkŽmV™°ÅÝxkwmġƒnÝVU„š¦ƒŤlmšóXk¤™UKƒç™@mVkK@klīƒ£mš¯VUbƒW¯¼ċb¯ĵam¼mVX„m@k¤ÇX‚ÇbƒUƒ„¯J¯„¯È@˜™bVXVҙ¤V¼kxݚV„@l‚V—„WxÛ¦Wš¯šmKnlŽkŽ‚šU‚@nƑUĉ„Ý@ǺۄċUĉ¥™UƒÞŏ™z±òL±Ò¯xX„±ÒLÝU@lššV¦¯‚ÇbkêÇJƒnU„šš@š„‚ÆI„xn¦‚‚@²Č脦‚è"],encodeOffsets:[[99709,36130]]}},{type:"Feature",id:"6325",properties:{name:"海南藏族自治州",cp:[100.3711,35.9418],childNum:5},geometry:{type:"Polygon",coordinates:["@@VxƒŽńƒš@ĊĠŽĊXÒ°UƾĕÞm°£nb@‚@LUUW„Ûº@nlÆǬšĠ£ÞV°UXb‚VȂǵ„éƒ@kWanm°@™x„z„K°¯ĠVšƒVƒkw™Lnm°kÞxÆa„¥@‚wnĉƏ@™œ_l›š_VwšmĸèŤÅČU@™˜Wn@ÑmKU™nğƒK@ƒ°¯UÿV£nmšLl™„UƒUÛé±óókkmƒnƒakV@Ç°óÝXƒWəÞťIţxmm™VÛUVȂÓnWyȁĉkƒVš°WnkĊa„¥‚_œK°ÿWna@ƒmU¯wƒlÝIU¤UXó¥ÝLƒx¯WmJÇÈŹ„mV@šƽ@ƒUk¥ĉkċŽÅUml¯Vmz¯lUxÅKmbƒI™bĉĖk҃@Çèó„UxÆޜlm¦šÆ¯ššX@x™Ž@Ž„²ÝlƒÈ™JV²klVl¯ÔlšĉƙްlUǖÞ@ššĶ¼nŽUôôŚ"],encodeOffsets:[[101712,37632]]}},{type:"Feature",id:"6322",properties:{name:"海北藏族自治州",cp:[100.3711,37.9138],childNum:4},geometry:{type:"Polygon",coordinates:["@@ōmġxƽUm±Lǿþġԙ@kxmWƒb¯I¯‚mIUx@bƒbŹVǎƒkĵbƒlĉI¯¥ƒUšm@ƒÆ¯È@šašóšUlƒČ»@w›œ»›wXaƒƒó°ţç݄kUƒaV¥ÅbÝw¯lmnšKlxU„™„ğU¯°ƒLƒyšw¯@mnXb‚l„@ƒêȁǶUWa¯VÝUğ¤ǫ™kÅ@mܹXƒVV@K@ma¯¤ÝnƽĖ¯V@„ƒ¼„ôlèk¼„¦˜xXŽlbnKšÆx@Ž™bUx@nnxWJţ¦ƒmƒ¼ñ@Ž°¦lUÞlÈ@ĠxÞUlxÒó„ƒl¯bmI™ŽÝVÛaÝnƒxVbkbÇwřÇKn±K™b„šƒb@V„xšLmŽÛŽŻbk„ƒVó@™šŹxó²›Wkb™@¯U¤ƒźĊ@lUX„°lÆôU„ƒlLX‚aœV°wšxUb°xÜôÈKVkÈmlwškÈKšwšK™™VUŤĉŎ»„»„Il¥na°LV»²¯Üy@wĢƒ°ĸwlwĢw°±„_lVkš@°ƒbƒÆ¯zƒ‚„š„@l_„@Ģ±lŚVlUaރ„LVƒnKlnȏ°IllČa˜wÞÑ°x„UU™@wƒVkmĠLô»„KÞýôaÞ¥ôĀÞmƁ„™‚mUƒŎV¥Èl°²°a²¥V„@@w„amm@Ñn@Æ£żƒVƒĠ£@W„¯Þƒšl@š»@Uk@"],encodeOffsets:[[105087,37992]]}},{type:"Feature",id:"6323",properties:{name:"黄南藏族自治州",cp:[101.5686,35.1178],childNum:4},geometry:{type:"Polygon",coordinates:["@@ôl²ôÜê„VƒVkš™KmnU¤VĀ¯°@„„LmĠVšnLÈL@alb@al@n°Vš_XmWUÈamaVIn@n‚aV£œóVWƒ™U£°ašxÈ¥@™‚aĊwȹ@óša™ƒğbm@k„w@mƒaÆw@ƒ„In¯mmƒ@UkkWƒÑÅ@@kċÅçVkÝJÅkVykŹl¥@¯š™ĢU܃X¥òý—mmX™ÝÅlmU@£™Wly™XW»Åbƒl@aI›»k@klm@UxUUƒVƒ¼¯Xƒl™aUnķ‚ƒI@x™@¯„ƒK™„ĉUU`óšlČ¯ô@¤ƒÞJ„k°xVŽ„n@ŽmbXŽ¯Ā›L`ƒ¦ĉbml¯X™ŽUŽl„ȂĊXzm‚ȁÔU‚ÜVšUnnŤwŦJɚ݄XÞW¯ô@ÈlU„b„mln"],encodeOffsets:[[103984,36344]]}},{type:"Feature",id:"6321",properties:{name:"海东地区",cp:[102.3706,36.2988],childNum:6},geometry:{type:"Polygon",coordinates:["@@@҄bš¤ÆI°ôU¼š°UŽnnWx™š@b¯L@lUUWbXxWl„ƨnxVUllš„XVŽUŽnL@lȀý²KVnƾ‚ĢwV»ƒ@mÞ£nÆƒÞÑmL™ƒKUaVżĕƒWVk²ƒƒÆÝ@ƒXw°@„ô™@a°wóUUmIk™™aVmÞwmknyƒ¹VÿƧnŏm£X»˜™naV±„Ýw@ašb@aƒm¯„ĉVó¦kÝWKUU@WanU™b@ôǺĉxb@šÇ¦™w¯bV¤„šUX›ôU¤bmm@UJnbÇbXVWn™`¯Umk@@bka@bÇK"],encodeOffsets:[[104108,37030]]}},{type:"Feature",id:"6301",properties:{name:"西宁市",cp:[101.4038,36.8207],childNum:4},geometry:{type:"Polygon",coordinates:["@@@kmKVUƒWk™VkUmwƒƧXkWwXaVV@k°K@aš™XwmmV™¯V»¯óÅJ™£ƒamŽ—X@šċVţÆķç™nUx™`kœ›`@šÅmĊx@Žƒ¦U¦„blVރŤèô¯„„Wbœx›¼œŽ@xċ¼k„™V™ô™bÇ@Å°@„™n„V°¦ĊJ„kĶa„lȍźU„a@aVwnJ°°J„anXlwš@ĢÓ"],encodeOffsets:[[104356,38042]]}}],UTF8Encoding:!0}}),i("echarts/util/mapData/geoJson/shang_hai_geo",[],function(){return{type:"FeatureCollection",features:[{type:"Feature",id:"310230",properties:{name:"崇明县",cp:[121.5637,31.5383],childNum:1},geometry:{type:"Polygon",coordinates:["@@uŏu»GPIV±ÐɃŜ{\\qJmC[W\\t„¾ÕjÕp‡nα|ěÔe`²„ †nZzZ~V|B^IpUbU†{bs\\a\\OvQ’Kªs†Mň£RAhQĤ‹lA`GĂA@ĥWĝO“"],encodeOffsets:[[124908,32105]]}},{type:"Feature",id:"310119",properties:{name:"南汇区",cp:[121.8755,30.954],childNum:1},geometry:{type:"Polygon",coordinates:["@@`y”ĉNǕDwǏ»ƒÖLxCdJ`HB@LBTD@CPFXANC@@PGBKNECCBB@EBFHEDDDSNKAUNBDMNqf[HcDCCcF…@EFGLEBa@ACoCCDDD@LGHD@DJFBBJED@BGAEGGFKIGDBDLBAD@FHBEF@RFDMLE@SGANFFJBANPH@@E@FJjRIACDMDOEKLFD@DbDAJI@AP@BGHFBCBGDCC@DCA@CECGH@FKCEHFJGBFDIHACEDNJDCVFBDCRKRLDLITB@CjNJI^DBCfNVDHDFKHAFGDIICDWBIF@@CFAjFJNJBBHD@CJ@AEFJ@@DH@BFBCPDBMFEQGDIFCNDHIP@HDABFACBJFHEBSZC@DP@@JDBƤ~"],encodeOffsets:[[124854,31907]]}},{type:"Feature",id:"310120",properties:{name:"奉贤区",cp:[121.5747,30.8475],childNum:1},geometry:{type:"Polygon",coordinates:["@@~T~JjZdDbLXDLCB_J@@FHFZJJIAGH@HGR@BENBLID@@LFCDF\\FpDBDb@FAHKFE†@dEDDdC\\GreNMACVMLBTMCCFCEGFAA@DAFDLMHA@OD@BMEWDOC@AS@KGAI_DcKw„ÕísƝ‘åĆctKbMBQ@EGEBEJ@@MBKL@BJB@FIBGKE@ABG@@FMFCPL@AjCD@ZOFCJIDICIlKJHNGJALH@@FPDCTJDGDBNCn"],encodeOffsets:[[124274,31722]]}},{type:"Feature",id:"310115",properties:{name:"浦东新区",cp:[121.6928,31.2561],childNum:1},geometry:{type:"Polygon",coordinates:["@@EN@JJLNHjLJNR^GRYVBNZJRBV@PDvbLNDN@LGNER@nCNQNuT_TIVFV\\Z\\XnDrI|[Ʉś²ÏJUHOƣ}CA@IO@@CYDATGFIEDAEBBAGCO@GJMCEDCJRHEFANOCADAEG@@CI@FE@BDIC@AGIAIMiEEB@DE@AJCXJDCJEHGBELGCUCeMAD]CIJiM@DSAKJKCLQDQACUECDMIFCBDJGECHAEIWCK@GLMCCGEACNKCEJG@MMBMC@@CIJUINT@JAJSTEPZZCP"],encodeOffsets:[[124383,31915]]}},{type:"Feature",id:"310116",properties:{name:"金山区",cp:[121.2657,30.8112],childNum:1},geometry:{type:"Polygon",coordinates:["@@L@BIHFN@@EE@@EFBDGDAADVDD@@EF@CA@IIsRE@GDAF@BF@CV@|FBCHBLCNHAFCADBMDCFZXHILBVEEQA@MWFARJJ@DCX@@TEFBLHAAERE@AJABRPBNK\\BrJ\\VHGND@CNADKDADQjGAGNC@GJ@FCFFHC@JF@@dLBDSFADHVG\\DTEPDDHJALIJkJDJCDIPE@YDCBiK@DONE@EH@BAF@HLJA@EIA@ALKNA@@FIFAFHR@NALadsæąyQY@ƒA±DʼnXUVI^BF@FFF@HBJEDFFGFEBSRkVEXGHFBMFIVW@GAEEFOIAIPKABGWEKFSCQLQBSEIBC\\FdBLRR@JGACFDDEF@AWB@LJJYNABBA@CUEGPaO_AIE@MYMFIGAEFECHSAAKAO\\[JEDB@E@MMA@@AGBKMGDFFCDDFEDFJF@NPBAFLHFH@EDDHBADDC@DDCDHHCDDFDABDAD@FEFOBCJ[D@HEDDNJBDDHABJIBBvGLBJAH"],encodeOffsets:[[123901,31695]]}},{type:"Feature",id:"310118",properties:{name:"青浦区",cp:[121.1751,31.1909],childNum:1},geometry:{type:"Polygon",coordinates:["@@RUNKdOFDJCbRFMLAHPLDN@JGL@@APBWYCKN@TU@SHGCEJIDIJKVIZVNM`iNY@CIE@CA@KBOEGEUFCCSADEIEFCDDDIDDHC@CKIeDCG@IG@DHWFEEGCH@@GO@@O]CNpeEQDBFME[JC]DGF@CKOA@QSB@GB@@GW@@ED@AQIJIAAFE@@DO@CFI@KNG@CDACAFEGKGBEGBDCCAIFCCLIECFI@MBCLDHGNAHSF@DMB@EEKBA@@C]DEICFG@ADBHGFKCDAKKHKD@@FHGAANGEEFCHKCECBCKG@ADKCNE\\[A[I@@mGBDQQEO@BCE@AI[AML@JGACLOAFKEMM@EQKC@CUCBCCBCHEA@FF@@FM@GEAJK@GNF@EXPH@FD@M^@HIADJCFDBER@DK@@DE@CAKFOCCBDHIBCNSB@GFC@GQEEOWFICGDUAEJIDBTAHJHEB@DIF@NE@H|HBDBEH@DKBAHEF@HEEUB@FGFGCCCE@AHOB@NH@PRLVNNFBX@RC€PbAvMtBfH@DJF@ELBFA@EH@HNED@FFB@HLC@CJ@@DJ@PIRf@HE@CFF@GPHD@DKE@FFBEFFD@DEFCA@DD@IjCRFBAHFDKD@HF@@PM@H@BlbDJDBFEF@DLXB@HCD@@IFCBIFEJD@FDC@FBALLF@PAACJERACAJCBD@EL@JD"],encodeOffsets:[[124061,32028]]}},{type:"Feature",id:"310117",properties:{name:"松江区",cp:[121.1984,31.0268],childNum:1},geometry:{type:"Polygon",coordinates:["@@@DLDFRN@FNELPBDKHB@INK\\BBJF@ADP@RFCRHA@nJ@B\\[\\MFLDBCH@DLDADFGLEDFFMHBBGH@EC@GLLLCBLDHEAGBCH@DEFJ^C@DB@LAFFA@CNE@GTMBGHKCAD@NEJFDKJDDJEDBCDHAAFLHFHBEBDDCH@LMJ@DEP@@CF@BEJBJIBRC@@FX@@HA@@HTA@RPBDLE@CHD^\\INFAERCfFMo^D@PP@@HG@HDFFXECGH@@JDHfCLJ@DGDCCCJCCEDJFCFTBDDVEHFPFLAB@NBFCFKFC@CHIACNOHWHCAAFIDD@CDAGEI@ACFMF@R@R_@GQED@EGFEQEDE_IAHKAEXCQUOQCUDEN@ZI\\DDmAMHCICDSOC@EG@BKHIGMIBCGOCSF[CUHCGEBCTKA@cE@@IGDEEEDI@@HMDBHiHCRCBCLMB@DMCGH[UqI[AMLOAAQIB@BQFBFGBAKFE@SW@CDI@QIEBNXB@FRUFKAGJYWDENCCADBBEMGKDGAAD{EU@@DAEE@CB@HQFJt@JDBE@@FC@"],encodeOffsets:[[123933,31687]]}},{type:"Feature",id:"310114",properties:{name:"嘉定区",cp:[121.2437,31.3625],childNum:1},geometry:{type:"Polygon",coordinates:["@@F@LI@IDKJADKIEJICADGACFECCJ@HKCAFOHAJI@aCBEE@ICAEB[GFGCKL@FGEIFADMLCAEJM@ELQECEIG@BE^QKKLQCA@EHBIGQ[GEHOMGGDHKH@JOECFCjCBEFDNCACMBCILGTABDLEEOEIG@GFIMM@CGKFBFCDE@@GEAGEEACIcGaHMFITIHDN[AKF@FS@OA@BK@IHM@KCGOKBENaQIDECcPMLQVFHFB@BFBKLGD@FAJOVGIACQ@A`LPCB@JEF@RU@ANS@@RCL\\HIFpRBFRBBDKLLDADJDGBFDABHBEDNF@DGBBBADKDAHC@\\JJFBDEH[DEFDH\\LX@XLBLbT@DNJLDCEL@VJABJNDHB@HBHYFBAA@GNFB@@AFB@AFABFLFBHFCL@HJBAFBLC@DN@HN"],encodeOffsets:[[124213,32254]]}},{type:"Feature",id:"310113",properties:{name:"宝山区",cp:[121.4346,31.4051],childNum:1},geometry:{type:"Polygon",coordinates:["@@ˆmÖoÖiƒ½[s[YEUJU`SCIEBCCWJY_LIICDWU@@FaBCJIB[ICH[@@CDKEE@MK@@IMCAEBCH@AMFI@SMGEFGB@FK@BHCAIFJNQD@FEBDFMBKGACG@ECWH@@CDDTOEEBGEK@GC@EE@GPHFR\\JHGA@FDBKRLL]RAFH@FJFDKR@FINBFKDCNEBFJEHK@DLEH\\HFADB@JFFDA@bIJGBEPDBGLI@DDEFBDCHDBIJJFCLIBCL@JKJE@ADHDBHJ@HIBBDFHBBAEIJ@BJFAVL¢ˆ"],encodeOffsets:[[124300,32302]]}},{type:"Feature",id:"310112",properties:{name:"闵行区",cp:[121.4992,31.0838],childNum:1},geometry:{type:"Polygon",coordinates:["@@T@@ELE\\BCMJGJSNEbGdHDJFBJAFIEIFCEWG@@gMENSFCVJFAxR~B@IH@AIiI@GE@FGEAFQPDRiV[\\DFSGMHAXHDOMCJCDETBBNVJJI@DD@ANNNH@FILDDMFBDHNDHKL@XDFGLD@EHGFD@DDB@CDDHCDAEAHG@ABOJ@BIaC@CECLKPFNCDCJBiQEIF@@@OGBMIAEEBMTHF@NKEC@QFEGA@EBCKAACHCLJHEFHHB@AFCAIEACIC@HG@KCCDC[ECEED@KC@KJMAAFQ@GHG@BHIJYIGE@EI@A`KDWCaKcCiY}I}S[CYJM@CFDVPRRVWDFžLBBG`JCFRFEFFHC@RF@HQ`Q@E@ENBDJ@HFCB@DCCEJBBGDGXMPBDGJ@DEDELEDMA@DJF@DMZ_jMNYUUJILCJIJDFGH@TSVM@DLXZ"],encodeOffsets:[[124165,32010]]}},{type:"Feature",id:"310110",properties:{name:"杨浦区",cp:[121.528,31.2966],childNum:1},geometry:{type:"Polygon",coordinates:["@@V@CXJDKJZ`XIDDFADJvSRMDM@mFQHM@KCMKMuaOCU@BDAJSX@HKJGD@PNJCJWAGT@R"],encodeOffsets:[[124402,32064]]}},{type:"Feature",id:"310107",properties:{name:"普陀区",cp:[121.3879,31.2602],childNum:1},geometry:{type:"Polygon",coordinates:["@@F@@FHDL@HFFAPFCSDC@@XGFDH@BDLHNACEFA@ERCIMJEDBAGL@@EHAFENHHJ\\ONQBQCIBC[MKACKI@GGGH@I_G@CW@[DMHCDIBMTDHN@JNHEH@FJFPKFACSBKHDJNABDMDECAFiDEDFDIPG@GLHCNH"],encodeOffsets:[[124248,32045]]}},{type:"Feature",id:"310104",properties:{name:"徐汇区",cp:[121.4333,31.1607],childNum:1},geometry:{type:"Polygon",coordinates:["@@RADL\\NCPHFfLJaJ@FWLGMGIK@IFMDOYYFOTSBI@IMSAMSACFIDNDCPWGGBHNET[CU\\QjOCERFBEHF@@HjJBJG@@J"],encodeOffsets:[[124327,31941]]}},{type:"Feature",id:"310105",properties:{name:"长宁区",cp:[121.3852,31.2115],childNum:1},geometry:{type:"Polygon",coordinates:["@@HFFB@HF@DCAELENSJADCNG\\CX@@D`H@JHGHHJ@BINBFUGEDO[MCKQB}AwQEBUIEDMTNF@hH@FXEDFJEJIB"],encodeOffsets:[[124250,31987]]}},{type:"Feature",id:"310108",properties:{name:"闸北区",cp:[121.4511,31.2794],childNum:1},geometry:{type:"Polygon",coordinates:["@@CSG@BQGODUPWTOBQAAFMECKBGEMFKEOHADDJARMR[PGI@TEJBNG@ADBFND@JL@@NFFCL@D\\@DG\\JJADI"],encodeOffsets:[[124385,32068]]}},{type:"Feature",id:"310109",properties:{name:"虹口区",cp:[121.4882,31.2788],childNum:1},geometry:{type:"Polygon",coordinates:["@@bA@E@QHSXBDIMI@OHCLI@GTWBIACQAYIOFGCENBBARSPOXCVHPARH@DT"],encodeOffsets:[[124385,32068]]}},{type:"Feature",id:"310101",properties:{name:"黄浦区",cp:[121.4868,31.219],childNum:1},geometry:{type:"Polygon",coordinates:["@@NEHFLAFDHDPEAMZUHQQ]IMKJG@EPERABHBGRUCCNGV"],encodeOffsets:[[124379,31992]]}},{type:"Feature",id:"310103",properties:{name:"卢湾区",cp:[121.4758,31.2074],childNum:1},geometry:{type:"Polygon",coordinates:["@@VDHQGABAFQFOH@LIiKKHEXI@IbAFZB"],encodeOffsets:[[124385,31974]]}},{type:"Feature",id:"310106",properties:{name:"静安区",cp:[121.4484,31.2286],childNum:1},geometry:{type:"Polygon",coordinates:["@@DLLB\\NPGLFHUDMYABEeKEVMAAJ"],encodeOffsets:[[124343,31979]]}}],UTF8Encoding:!0}}),i("echarts/util/mapData/geoJson/shan_dong_geo",[],function(){return{type:"FeatureCollection",features:[{type:"Feature",id:"3706",properties:{name:"烟台市",cp:[120.7397,37.5128],childNum:9},geometry:{type:"Polygon",coordinates:["@@ŤLšLllVń²è°xżĢĠÆl҄šŤbœ„V¤ĊXnŽlĢVĊ„Òš„È°ĊŰÞè˜L„±@џn»VUźċ²»ÆkôVɆkĊŃ²kŤVVwUUVmUaƒ@KkU@ƒmUmmk@UwUkmW@UVIXa@ƒmw@a™KULƒaƒx@Uk@UbWU@yULmK¯@kXƒVUwm@@JUUknWKUVƒLUbU@™wWykIƒa@w@mUI@ašUVynIWa„k„@@W„bl@@knmƒK@wnIl™°Kna@V¥ğ@ġUķ»™¥@UōJƒX¯¤k@™wmI¯‚k@mwƒak@@šlX@bUJ@VƒbknWxkLkxlŽšLVlkLmŽšb@bU@ƒbU@VbU`Vb@n„L@Žmb—U@˜VnUVmnU@mm™@kIUWVIUK›VkkUJUnmL@VmLUaVWaXamU@™™U@KUUmVƒU—JƒU™VÇwğn™mƒ@mXĉV@l¯xnô"],encodeOffsets:[[122446,38042]]}},{type:"Feature",id:"3713",properties:{name:"临沂市",cp:[118.3118,35.2936],childNum:10},geometry:{type:"Polygon",coordinates:["@@˜bXlƒl@zlV@lXXmŽkbVVlš„U@Vn@@Vmb@XšKšVX„WJ@XXl@„‚ŽÈbVLšUl`„@XXV@VVUxVbUxVbš¦„@‚WnXVJ@bnVUzl@„°Æx„U„KlU@mUUnUlUVWVUnVV@XX°V@Všll@Vk„aXVl@Ux@bmbXLlKlb@b@bUJn@@„„b@n°x°K@an@@UlLVKVbXb@bVVnK°LVa@UVa@™Xw‚KVxnLšU°@naV@UWUkWƒULmV—wÝKUUla@aó_@mƒK@aUU@ƒWUkwVm@aVI°W„@@IUw@a±¯@¥kUVUm@a‚wkw™@ƒK@kVKk@maXalI@alL„WXblaVLVU„V@LnKš@„l@w˜aXašLlnUl„LšmV@n°J@_VmnIVym£UKmI@WnIVm@anUVmÇ_kġIÅWUXÇm@U@ݯÅ@ƒ™@naWƒ™IVW@IkK@klKn@naWIƒmk@ƒaƒbkKkLWn™WkLWmk_ƒ@UaVƒUKmLUw@mn£WwUmU™ƒaóV@UkUm@UKULUwmJUX@WW@XҙzVblJXŽWXk@UVWK—X‚¤UL@xU@ƒ@ƒVUaU@@XmVkLmWkXUyÝLmKXnVŽ@n@l™x@bWLnVVn™`knULmxUl„„WLXŽVb@VƒK@z¯x¯¼Wx™KUn@bk@ƒlƒVVVz"],encodeOffsets:[[120241,36119]]}},{type:"Feature",id:"3707",properties:{name:"潍坊市",cp:[119.0918,36.524],childNum:9},geometry:{type:"Polygon",coordinates:["@@l@@UšK@Ž@L@bX@@VlL@JƒLUVnX@`ÜXn`V²mJ@bU@@n„b@l°xnnĸVƚ°@„ƒĊ£Þ@lWnÑnkʶJmó°w@kk»V@»ƒ¥k@V@kw@wVm„a˜Å„mšaô£ŎƒXI@mln„Kla@mV_UKƒ@kUkw@alW™IU»™mƒ—@WUIl±UUÅU›bkJƒ@a@wUKUaVIÆmXIWaka@m@Ul£XKVw@ƒUIƒJUkmJ™ƒVkU@a„ƒWK—ImVƒ@UxmL@bX`WXU@U`ÇkUak@@°UblXk‚mLUKmL@VULóƒƒVk@@Vlbn@Ub@ċaUJUbƒIUlVLUVVbVKX„VlVXU@mb¯@™VmKUwLWx@šUb@VUb¯KmLUU@aWaUaULkK@Vm@@b¯L¯w@mƒa@ƒm@UUU@U¦lJUXƒVƒmkb@nm„XVWŽkb™IVxUV@VUbWLXVƒLW`Ux@nk@Vn@x@VkJ@œV`mXkŽ@V„xV@lVššI@VULš˜VU„IV`°bVXXx„V@VWVnL@xV„Ub"],encodeOffsets:[[121332,37840]]}},{type:"Feature",id:"3702",properties:{name:"青岛市",cp:[120.4651,36.3373],childNum:6},geometry:{type:"Polygon",coordinates:["@@„@nU˜JXLƒ„@blVU‚š„nIVl„IVJ@„UxWLk¤@V@nlbXbWJÅnUJVbVL@x@b„ŽlIœaÆVVVk²VJ@X„˜šnV¼šJkX@blxlV„@VLU`@nkbƒLkm@nWJō„ó¤™bƒn—ƃbUn@xlxU@l@„¦@¼UŽl¼ĊUnW„@šnĠmÈxšU„V˜I„VnUVV@LšV@šnVWbXb‚UVbnK@UnKVmVIllœUVLUJVXlJš@nnV@nmVUUm@—˜Vna@ƒK@mUaV_UaV@„aV@@a™anlKUk™KklwlKXwlm„a@UVI@akW@™l@„bnxl@°nJšxl@°£„WŎIUÑn»lašmô¹Ŏ¥VaUUkƒmkġWɱIUUŹ`›@kk@ĉƨřV¥_Ç@™Ĭƒ¤ÝL¯m¯£ƽóķwUW±ī¯kōaĉĕ™kğmó°ƒbW@UKkLUaƒVmz@V@ŽUxVn"],encodeOffsets:[[122389,36580]]}},{type:"Feature",id:"3717",properties:{name:"菏泽市",cp:[115.6201,35.2057],childNum:9},geometry:{type:"Polygon",coordinates:["@@@¥šIVUÈmÞ»@UlU@Un@VW@UVmkk@aVUUKVÝ@UVknK@UV@VVnIVƒ@wnƒmwmKXaWaXI@UV@Vy²blkVKkam™U@kb@Um@VmUkmƒKmkXKWwkU@Ulƒ@UnK@UVUUm‚KXwšUVL„w‚K„U„@@Wl@@wUkV¥—@@I@W@_V@VWUw@UUa@aƒaWa—@@_mKUw™l¯amzmV—@WK™nU@kƒWLķaUKbÝVmV@UWÇbÛ@ƒX™°UbW@XŽm„Vlk²UJUbmLÇxÅWUzl‚¯Ll„@VkK™XUbWJ@bU@¯@™ƒkbƒLmKka™„@l™_WšXºVbUz@J‚n²V@¤lX„Ž„nV°šLn`WbXLôVlKVUšxXn˜lXLlU@bVV@„XJWLUVnVV@„„@n‚l„°nn‚V„KÈbVXÆJU°VnXV„kV@@xVL„@šWlb"],encodeOffsets:[[118654,36726]]}},{type:"Feature",id:"3708",properties:{name:"济宁市",cp:[116.8286,35.3375],childNum:11},geometry:{type:"Polygon",coordinates:["@@nam_nKlVLXa„Il`š_@KVVXI@m@w‚ƒ„@@k@Kšnô@n`VbV@@L„L@KVVn@VX@‚VL„Jl„š@VUUƒU@Uam@Uk„wšKWaXamkJmIUVUÈblašUnV@kVKl@@lXL°kVJ@VÈnVJUX@V‚LXl@xVLnU‚@VK„V@a„IUaV@„bĊU„x„K‚kVJXUlV„ƒ„UVašI@WUI@KlUnw„mWk@WXIWƒ™U™L@Wna@Um@@UƒVk™UUlanWW@kkU@y„kWk—aWVUlÝbUU@kƒJUIU@@ƒ™JmaókƒLKǃUUkKWLk@WbkUUaƒbmKn¯°¥V@XwV@VanaVaU_@Wlk@WÈ@VUÈVVۂm„aklKȯlLVUX@lK@aX@@kV@VmV@VwnJV_UWUwƒX™am@kW@wVUkKVIUUVmU@UV@IVK@aUL@aƒV@Lm„UKmx@ŽômLkUWJ@šnXmlUxUL@Vkn›VUšU„@V™L™`Ub±LkV@kUKÇbÛ@ƒU™Wó_mJƒ@Wk@@Xƒ@ƒVLƒxUK™VWxLVnUV@VmL@Vk„@VlVXxWLnl‚Ln„VlUnn@@VlaV@nšlbULkl±aUzU@@VWJXbWbnLnxm„@xU„mJUUU@@VmLUl@VUÞVLUV@bllUn@VUXm@@VkV@VݼÇnUV™J@¦nnƒlnVlL@„Þb°KVV"],encodeOffsets:[[118834,36844]]}},{type:"Feature",id:"3714",properties:{name:"德州市",cp:[116.6858,37.2107],childNum:11},geometry:{type:"Polygon",coordinates:["@@„¤@VmbVXnVVbVJššX@Žll@z„lVInl@„@bVxUbĠ‚l@Èbla„IšxXVWb@L™@n‚ULWVXXšWWLnL@`@LUVVL@lVn„JšU@UUk‚a„™nš‚Vôô„b°¼V‚ސXš˜‚œIÜbČa˜bôW„XÞWÈzÆmnLVJ°ÈnlV²lbnW@™@UƒUV™šmnwmkkKWƒkla@mVIUKUa™aUwmn™JU@@amIk@@bVlkX@mmUklUUƒƒa@_UaUUƒV@wƒw™WkXmW@I@WUaÝU@UXaWUU@UUVW@UUUWUn¥nUVa@m@k@alU@wk™LWa@UUm@@wnmU™wla@anKn_@alK@ݙ_ƒ@@WUUUmlkaƒIƒyU@UwU_Wa¯yU_mWUwkImm@InWWUk@@UVWV—kW¯U@VƒL@b¯b@l±¦@šVV@lUbV„@škxVnUšl¼XV@b@lV@nIWxnbƒ‚™@UU™LƒxÅxm¯ƒaUƒ™wU@mUÅVÝKULm@bmKUXó@"],encodeOffsets:[[118542,37801]]}},{type:"Feature",id:"3716",properties:{name:"滨州市",cp:[117.8174,37.4963],childNum:7},geometry:{type:"Polygon",coordinates:["@@Vb@`„bV„kVlnV@nlWUk@al@nJ@bV@šInmVxšbVbVLUJ@nkb‚lX„lLnlmx™nUš„V@V@šmXn˜lbĸ@nnVx‚b@lnXV@UJ@nVxšxnxVbÆVn¯ƒĕ‚@@wÈçUÇlķVIœb‚@„Çmk@¥k@UkUK@aWakUóJW_UW@wkkWK@U@Kš@XUƒƒUkmUUalKXala@U@kkWlkÈl@kšV„mVIVmU_‚a„ƒƒwnwVW@wƒwUƒ@wU£ƒwkJWIyUI±bk‚VUJ@nmV™Ukl„Xmx@lnbW„kVƒUkLWŽƒxkKUUmUkb™J±—LÇxUKmkUmkkW™™a„mUaVkšJÆ_²KĠ@U„W@w„U‚¥nUWwK@aÝUkÅVaVK@akLWƒƒƒ¯I@bnbVx¯JW„ñšWbUL@šƒŽnV@VmbkUUV@IÇak@@bWak@WJUœJWL@bXV@„‚@„V„Jlb@zUlUŽUImšnbV‚mz@°UV@V™bV@@V@L@xLmKUnmJVX„J@VkLW@UVUL@b"],encodeOffsets:[[120083,38442]]}},{type:"Feature",id:"3715",properties:{name:"聊城市",cp:[115.9167,36.4032],childNum:8},geometry:{type:"Polygon",coordinates:["@@ô@VWnL‚an@VKÞLÆUnVV@šxV„„bn°Æw„wšKVVš@„maXwmJU@@k@aWUk»V™Umlw@™UƒVa@kUU@™²¥@k°a@a„K@U›ƒU@mmm@ów—ѱ¥¯@@w™Kmw—I›¥kU¯UmakJmIUaƒVkKUkm@VUUa™Uƒ@UaƒKUK¯@™w™UVŽUIUKVw™k™¥™wƒbVŽ@xn„@lWnXxlL@`„XlJX¦l°XxW¦@¦Ul™n@Ž™@@Um@@VXVmx@¯bllUnUJ@VULVn@b„xV‚VL@b„„VlnVVblV„ÈnVlIVJœLô„lJ@xl²„"],encodeOffsets:[[118542,37801]]}},{type:"Feature",id:"3705",properties:{name:"东营市",cp:[118.7073,37.5513],childNum:5},geometry:{type:"Polygon",coordinates:["@@ͬUǪlô@°Uœw°ōĠ¯š»Ģ炻XÇ@w™wƑa™ÇƒkwVƑ¯@řķUmm¯w@kƒa@mV@@anIU±m_ÛW@_mWVU„K@IkK@UW@@a@K@™L@Vk@±U@UV@lm@mUU@kLm„„xV¤@xV„„x@xUXmx„xƒ„bV`UnUJƒn™U@lÇkkllX@l@VkbWbkLVbnVVl„„WV™@@L@VXLll@xVXX`ôIlVXb@bVLVll@@¦nlƒÈ@›aUJkĸVÈÇè@x"],encodeOffsets:[[121005,39066]]}},{type:"Feature",id:"3701",properties:{name:"济南市",cp:[117.1582,36.8701],childNum:5},geometry:{type:"Polygon",coordinates:["@@²¦˜Òôxn@nn‚@V‚œ„°VlXU˜UX@Vl@XVmX@JnnlJVxnXV`°zXbV`VxV@„z„JlbkŽVnVV@X„@š`@ÞkL@bm`mL@bkbšxnVm@xn@VV‚@XbšKl@xkV@b@l@nUbmVm¦XVVV@VUXVVV@XVWb@VÞVVb@X@JnXlWšX„x@x„UVV@aVKVUX@lK@UƒIUWnIVmnL‚K@w@K@UU@ša@UVU@¯nyUman™VJVVk@ykaƒIƒU@@ƒWU@aXK‚IV›XIl@Xb@al@Èb@JVUlVna@UmU„@™VKXaò™Xƒ°IUwma@aU@UU@wVW@фw@a™I±`kbƒUkw™UmJ@UkmÇUUkmKknUVƒ@mJUkaWkƒa@KmKkUƒLmyXa¯_@WmImmbƒLmUkVUbUVƒJ™bƒUkkWJkUƒl™IUm™k™Lƒ›„lK@knaVmkI@mWaƒLUK™UU@@VmLUVLWK@UUUƒWUkkVmx@„Vl™¦"],encodeOffsets:[[119014,37041]]}},{type:"Feature",id:"3709",properties:{name:"泰安市",cp:[117.0264,36.0516],childNum:5},geometry:{type:"Polygon",coordinates:["@@n¼šŽW„nxšL@x°@š¥Uk@ƒnwlUVl„XVV@VXL‚KVUnK@UV@šVVL„KXb@nlJUnmb@lkLƒ‚„œšKšlVnšJ„klVXIll„Vša„IVUValUnV„K‚annnJ@X°`Wbnz„KlVnL‚Ž@L„bXl‚bVlnI„@VUU@UmVƒ@U@Uš¥@VmV@@_Ua@m°@@ƒ„kmUUm@UVmn@nX‚@@a„anJVUVL„mlIVJn@nkVLVa@KVmVLXVVLš@@U°bn@VaV@@K@aVkœbWaXUVymU@aUImWXƒ@™¥UaVwUaVwUUU@WWƒ@k_™VUKÇa@ƒƒnmxkV@LVJ@X™JUbƒVƒ„kUWVUIlƒLƒwĉVƒaU@VbƒJ@bƒUUL@mVUK@wWkK@UVWUIÇm@UUI¯lWK@kk@UL@lmU™VkbÇaUVVnJlIn‚WbXb™LƒxVln@VbV@V„UV™@kƒƒIUK@UWm@UU@LƒK@KU@Uam_ó@™m@L@lƒ@„@x@nWJUU@L™`k_ƒJWbUKkmLn`mb"],encodeOffsets:[[118834,36844]]}},{type:"Feature",id:"3710",properties:{name:"威海市",cp:[121.9482,37.1393],childNum:4},geometry:{type:"Polygon",coordinates:["@@VbUnVVUxĊ¼š¼ô@Þф¯‚WǬLŎUÆW„¹Uǃō¯ÑƒÝkţ™™ţóġ™óL™ł̥U™wm¥kÝmkkKóbÝ@U¦@‚mb¯LkšmJ@x„Lmn@lk@ƒa@Xƒ@ƒlXbmJUz™V@bVJ@n@x„blJXzšxV@Va„KVUXLlmVV@In@Vx„UlW°@nLVK@zXVVal@@V„w„bVKšL@bnx@„WbUJ@VnXVlVxl@nnnV@„lV@L„‚"],encodeOffsets:[[124842,38312]]}},{type:"Feature",id:"3711",properties:{name:"日照市",cp:[119.2786,35.5023],childNum:3},geometry:{type:"Polygon",coordinates:["@@UaVUUKVk„JVaVIČb@Vam@ka@Ul@„Uô„VK@UnKVLnKlkWVa@¯l@VbÈlV_V@XWW_@anKVwUmVw@@Uny„UVblKVLX@„aô¯ó¥mÛĊÿÈ¥š™Þ¹lUīƒ¯Kĉ¼ʟbÇV™U™ŽUŽ™XmakJUnmV@bUnmJ@XnJVLn¤UzmJUn@`¯ImŽU@™nƒKVkkm™KWb—b@xƒk™@mL@KƒUUVUKkbWaƒXkK@bkJWbnbl@UL@l„Lš@lxx@b‚nUVlV@¦²°@bVx@Jƒ@¯XUJ@bUnlxVŽ„X@‚VV@b„L@nô`@bkbVVÞL˜xnU"],encodeOffsets:[[121883,36895]]}},{type:"Feature",id:"3703",properties:{name:"淄博市",cp:[118.0371,36.6064],childNum:4},geometry:{type:"Polygon",coordinates:["@@nƒlKV@nVn@@kVU‚@²VVaUƒ@wmKXU@UƒUWwUW¯aU_ƒJUV™—VK@U™JU™@kUƒw@UlnWU_@›lI@U@wUml@@mVwX_„KWUXKVa@UVUUwšJlaXWUnƒ@mla„n„UVWkIV¥V@VVVI@a@akakLWKna@aVwk@WUƒbUlk@™k@U¯UWWU@mUUVUXkVmVVV@nkVƒLƒVÅwƒ¯k@WVXb›aUl@bV@@b@xkVVXVxkJ@nk@@ŽVLUlVb‚VXUVVUzV‚™LVbUbV„VWVkLmškJ@n±@UxU„VVkV@bƒx@ÒUX@xVVV@°J„„X„lK@bULUblÆÞV@b‚LXxmV¦ƒV@xƒXVŽğ@±LÅ`™IUlVbƒnšbXšllVnnlVLÈw˜K²ŽšIlanVVVlL„wXlK„VlUXƒma@knwƒWlkšVnU@mVIUl²aVJ‚zXJlI"],encodeOffsets:[[121129,37891]]}},{type:"Feature",id:"3704",properties:{name:"枣庄市",cp:[117.323,34.8926],childNum:2},geometry:{type:"Polygon",coordinates:["@@‚yUU„U„kl@@aVmšLXw°»°w@y„L@UUaWXKƒƒVknwVKlmš_UmmUXK@ašw@k@mUWmUL@ƒ@™@£@KƒbÝV@akw™aULmƒƒbUK™LUU@lm@—°mL@nUJVxVXU`mIUxU@UnU@@lW@@bkLW@UVkKÇ°kLlŽƒbnUÜÇUUVÇ@@Xkl@XV`UbmbUbU@WxU@¯¦m°nL„aVblVXal@XKlLVVȄ‚L„KôlnbšI@„V@VJ„I@lVVÞaVkXU"],encodeOffsets:[[120241,36119]]}},{type:"Feature",id:"3712",properties:{name:"莱芜市",cp:[117.6526,36.2714],childNum:1},geometry:{type:"Polygon",coordinates:["@@lmnLVlÈVln@VnIšVlx„Vla²_šJlUUUVƒVw²@@mlIn™lKXU‚UUƒVaUašKUVyUUWVUUaVkUK@l@@mlIUwUWlU@w@aU@@LU@Ubm@¯a@V™@UKWUUKUn@LUbUKmlm@UIkJƒnUKUVmIƒb@b@mWm@Un@VVnnVƒl@„¯@@nVb@`U@Un@Ž™¦@V@VU„VnV@"],encodeOffsets:[[120173,37334]]}}],UTF8Encoding:!0}}),i("echarts/util/mapData/geoJson/shan_xi_1_geo",[],function(){return{type:"FeatureCollection",features:[{type:"Feature",id:"6108",properties:{name:"榆林市",cp:[109.8743,38.205],childNum:12},geometry:{type:"Polygon",coordinates:["@@™ýVƒnIW»ƒW@»kUÇL—݃U¯¥ÇIUWWїUWwX¯mƒ@»n@ÜÈķô™@a±kȱƒw„ÑmwçċmU»ÆkkVyIm™ĉÿ@ƒÝ¹ƒWnwÇVš™Åaƒzmmĉ¦ó™kVmx™xU¼VškVm_UlVlk„°IV‚kmJa›¦k™™LmmV@XmKnšlUô›VXbƒbƒ@UaÇLğܙ™Åwƒ£mKnmċwÅ@UkƒbmaVƒƒƒn@m¯aU™Jm_k˜@kWXyl@@kÅamw™LU™Þ™ƒ™mWÅzUKƒš™Uk±@™b@nnK‚bX¤mzVšŽVxÇn„‚¯„@ÒknWƒƒVUbkķÈÑWkk@Va™™U@„mUkbƒÝÅ@Ý¥ÇbkĬ™XV`kLǍVmalUUa™nV±nwmkƒJ@Inƒ°KVw¯UnÅ@¥™ƒ™U±bUU˜±œmWbÛKWnUm`UƒVK@bmnœm‚Èż@V„L@xƒxmš„Ť°nŽ@VmK™²VlšlKk„ô@„êÜV@VXLlmš¦UššV°Ș¯²ÿ@¥š@ƁĊ˜²IšmĶnnb°b„KVƒĸLl„Þ@UȮš™Ü°IVƒÞÝސlŽœx@ŽķĀWŽ„Ux„èƐ@š°ŽXnšlĊĖ°m„nƒšV„²V°ÒƦ„aބ„˜@zll@bÞĀšlš¼nKĊ¼óȂb²±šIǪÒ¯ĖV@„lxnVlk„JlaXwŌĉ„„@VnŽššlÆĕ„UÆLœèŌŤôxȚlUœ@šxlaUċĕXm„IWmnkšVVƒ„VW_@aÈWUUmk@ƒ¯çVm»™±W¯n¥V™mkXw±ÇVwƒ"],encodeOffsets:[[113592,39645]]}},{type:"Feature",id:"6106",properties:{name:"延安市",cp:[109.1052,36.4252],childNum:13},geometry:{type:"Polygon",coordinates:["@@@kkÇmIšmUwVkUƒƒU²WmšVkm@m`mIĢĕUƒVa@™mXƒƒÿVVkyUýšĕ@l_UmnƒW„KVkţ™™¥™aƒwğ@™@aôƒ„ƒWa„kUmƒa¯¯™a±£kx™mmxUwÝ@xmU™b¯K™wó„Ý@kmm¹Ub@lklVbmnnVUV@x›UknƧJUX@ŽƒLÇWkw™LķƧÅwWJk„ƒLkþĉxWz™JUnǚkš@Ɛk¼ÜÔÈKšè@°lșÆk¦l„n@l¼@l¯L™°UU™VÇ°ƒ¹—`m¼mXk‚™bUaƒV@U¯x@¦™Ç™„UUmlmUVm„nnmlkw™@@šƒ¦Å‚ÇLmx¯Iklš„@¦mÆ°VUx¯Lm„@J„InlmxU²šmVbkV‚bUnȎlKU_šWlīÈaÞ¦Æ@„ÞlanV@ƒšVšUbl@XlÇÒĸlŽVa„UX„lm@Ñ°ƒƒÈmUw‚U™nyW£amL@mša²@lšV„™VLÆynX„šÝšVššKnxÆb@lk@WzXŽ@ll—n`šIV‚°b@n„m„„‚Unb„aVlÆ@ČxmnnL„¤ÆxššĠÛÈKVb„@„aWaœU‚ókVm™nL@W‚UnnšKlšœ¥‚bnIlU¯JlƒUkVkn`lUU™V»šwnwlUôšĊ¥nn„yÆb"],encodeOffsets:[[113074,37862]]}},{type:"Feature",id:"6107",properties:{name:"汉中市",cp:[106.886,33.0139],childNum:11},geometry:{type:"Polygon",coordinates:["@@lKnb@n„lWb°bkxĸwVb@ł„nlŽ„ƒĊ¥šL@XŽl™ÈƒVblÈK‚b„akVwôml²`‚nœ@‚nVKœl˜k²xŎƒ°¦VU„JĊw@çnWçރVkUóÛ@¥kwš™šUmƒX¯WšÑkƒ@UymIUwlUn¥‚mUk²a°¯V»@™ÝVș„ÝċÅÅVl»@l@a°±@_kammÅb™a@ƒƒm@ż™KknõĠ—@mšƒ„¯LÅw›‚—LVxmb@¼kV™@mw¯wVakKW»X±¼¯Vkxƒb„¼WŽ@nx@x±bóakbƒ@ÝmU™@ķÓÛL™kƒVUm™k¯¤ÝLUlÝ@Ýz™š„x@x™°™™™bƒmƒX¯aUJW¯—k@bÇWƒwÛwWxƒ@XWlb@Žƒ„VŽÈUlwšLnl°VlUô¦œU°¤VšUxVXUxlbkVVlƒI„°„ÅVlU°m@k„ÇU¯xUlƒLUlVL@b™°ĠInĠ°ÈnK‚„@xÞa²n‚aUyšXUKVkšWô¼Èa‚z°JXUVÇV_„JVƒšz@Žnb"],encodeOffsets:[[109137,34392]]}},{type:"Feature",id:"6109",properties:{name:"安康市",cp:[109.1162,32.7722],childNum:10},geometry:{type:"Polygon",coordinates:["@@„bĊaƨèšwôô„¼šb°ašXVƒÞVUÞ@‚aXƒm¥kImx¯¯ƒV@anU@UÇéğL@ƒ¯¥V£mƒ@ÝÈb„K‚™„X°wČÿ˜ƒ„b@xÈblxȯĊ„„mÆUVƒ„nÈ@ƨÜLĢ¥ƒŹnƒ°Vnn˜K„aô_ȃšwU‚aXmnW‚¯kl›LXƒÇ™ō¦ÝaÅVmbğUn¥±wÅéVƒan¥ƒ„U„»°am¥„£ƒÝ@ƒ„wVw™¥nU„уUmmVwmķIÅaóVWxkblb@ból@œğÒĉ¤ċXƒ˜¯X™xk„Ç@óÆÅx@š™xķ_kmݎǣkblb@`¯²@bk‚‚@k¼ÆUČƃÞǚÞU@šU¼¯°±bVlnm¦kVVxnJVz@‚l„™ÒXW°n„™V™šlx@¦ôÜVUl݄Xèm@è"],encodeOffsets:[[110644,34521]]}},{type:"Feature",id:"6110",properties:{name:"商洛市",cp:[109.8083,33.761],childNum:7},geometry:{type:"Polygon",coordinates:["@@²nl‚ôbš„°aVwnKÞIš`°wšXôw°VĊ°@ŽÅš„ÞÆV„zÞK@xšŽ@a‚LŚ@b@ŽnLlƒ@šln„mnLVw„a„bVƒ‚VnbU¼„Vƒ°„bl„šbÈ@ĶŦb˜@nÇ@amIyUI@ĠVmôƒU™ƒVwkwlanJ„¯lwó¥@an°Jš_„‚@š™nóƒó@£l¥UwmašÑ@ƒUm±V_ƒJ—£›J—UW¥¯@ƒ_k¯¼mUƒVUè¯b@wmL™»ğVmağI¯¤ċIUW™XƒKĵ¦ķaƒJUb™IƒlUóVmk@WÅÅÇ@ƒmU„ÅVƒnĉƒÇ°kwÇa@wƒa—„ċĀ¯xƒWšƒLÇa@Þn„U¤°¦@„ĠKÈê@VmV@b„U°°nwlJn¦W„bÝ@VŽ"],encodeOffsets:[[111454,34628]]}},{type:"Feature",id:"6103",properties:{name:"宝鸡市",cp:[107.1826,34.3433],childNum:10},geometry:{type:"Polygon",coordinates:["@@@ƒ„£@›°Išb@¯°ynŹƒaUƒlƒU£„Umšĵĉ@@ylUÞ@@£kWU¯WaU£¯ÇV¥ƒ@kb¯wƒn™¥ÇkUÇnUƒ@¯±›kULm›@m±_kŽónUxlŽƒbaÇLkŽUaDŽkšW@™Kĉ¦ƒ„kƒm@ŁUaķxlw¯aXaƒk@mmakL@šmšÛŽ@¼m„@l„XV`ƒn™KUš°°@²š¤UÈ@VxmôƒxKl„VV²aVw„Xla„Vlx@UVnŽÇnk°ƒVVL™lkI™šƒJÇk¯V@šknƘn@lznmlVkzVŽ„VVxš@Ux„z@x±¼VxxU„l‚kb˜@„¼Čk˜VXlĠkôV²w‚LUKlwœJ@a‚IV¥Þƒn¯Ün„‚„@nk˜l²kÆ@š°„aVbnI@™š‚Ťn"],encodeOffsets:[[110408,35815]]}},{type:"Feature",id:"6105",properties:{name:"渭南市",cp:[109.7864,35.0299],childNum:11},geometry:{type:"Polygon",coordinates:["@@@ÈôL„xUŽ°„Þ@mŽÈnl¤nUôL‚wX`@ÞÝL™ŽUšmLô„„ŽôbVbnºlnÞ@ôƒšx°LšanV‚wÞ@Vxnwšnlw²¤šb°°„bVnƒlXbƒ„ó„@bš‚Ġ@„xšbš¦ŤšV™Xġ„£W¥ƽɽƒó@ýóƝÝ»„£X™mƅšĊkUƒ„@™™šó„kťaĵŽÇ@™akƒƒa„¯ƒUV»maUU„ƒaƒbUxmKƒnkm@™k„mK@ƒxó@¯n¯KǦ@ôÅèlxkx°nƒƾ¯KU¯WķL@VÝIUb™yWbX¼Ç°"],encodeOffsets:[[111589,35657]]}},{type:"Feature",id:"6104",properties:{name:"咸阳市",cp:[108.4131,34.8706],childNum:14},geometry:{type:"Polygon",coordinates:["@@šIXyĊwlý„KlƒXIVaķƒ™»a›£„¯aVU@a™‚wÈō‚ašL²»‚VœUln°WȯW»XašzVaÞJ@Uƒ»@¯Ýbğwly@£kÑţ±Wу@ka™IUƒƒnƒ@¯ƒómţU™b™U¯lÇIÝb@¤Ý@kV@zĊ@™ĶnƒVV¤k„V„„bmź¯z@°™a¯J@œƒ¤@„„bUx™bƒ„@`™xUÔ±ºVXœW‚„UnUJ‚LĢ¯ÈKlblmÈXŎ°šU„°LšŽlkÞKš@Èxl_°ĶUÒkblš"],encodeOffsets:[[111229,36394]]}},{type:"Feature",id:"6101",properties:{name:"西安市",cp:[109.1162,34.2004],childNum:5},geometry:{type:"Polygon",coordinates:["@@°²@‚„mVVÈÈlš¦„m°xla„@U¦°ÈV¤XbV°lXÞaÈJ°kšVšaŤVôn°„„@„mV„šJlb„@XÒŤ²lÒ@¤kzĠxÞa@°„¼ĸK°XV‚°L„ƽ¯mlwkwÆç@óÈ¥°L°mô@„w@aƙK@b™@wÝLƒyÅUƒÝƙ@ĉ¯¯Uóx™W¯x™_ÝJmLUx¯b™ƒóak±mÝUU„™W¯b™aƒ»óó™xƧçĉbƒaĉxƒIUV¯¥ō„±w—l"],encodeOffsets:[[110206,34532]]}},{type:"Feature",id:"6102",properties:{name:"铜川市",cp:[109.0393,35.1947],childNum:2},geometry:{type:"Polygon",coordinates:["@@ÆxĸƨšKlxÈX„K@VWƨIlmœV@wVUmUnmUalk@kVaUaóaƒóƒnKV™šÞK@ÝW_xóKmVk£ÇmnÝ@¯ƒVƒwóK@ǯXkm›VU±¼™KbÇŎx‚š@bUV°bƒœ¤‚bš¼ĸ„Ub"],encodeOffsets:[[111477,36192]]}}],UTF8Encoding:!0}}),i("echarts/util/mapData/geoJson/shan_xi_2_geo",[],function(){return{type:"FeatureCollection",features:[{type:"Feature",id:"1409",properties:{name:"忻州市",cp:[112.4561,38.8971],childNum:14},geometry:{type:"Polygon",coordinates:["@@Vx@lnbn¦WlnnUšmš°š²VšV‚VVVnUn„ºlz@l„„@Jƒ@kXWVXl@Lƒa@„ƒKUL„ŽlbnKlLnK‚LnKÆXn°šbVV@bUVl°Un@LnaVJUbW@UX²l‚@ČwlVVIšWnkÆa°„„anV‚Kn°™UW¯@™aVUVk@Un@„aV@ValwUanmWU„k@WVUUanaVwnLVl°@nk@mVU@UVK@w„LVKVU@ƒ„K@UUKVUV@@bnL„a‚V„aôšlIXmlKX_°KVV@bVV„@šzV`kblI„V„Ul‚šL@bnV@V„Ċll„„VlIXW@k„a‚U²blKšVnIlJ„albXXlWVn°JnšnL@l@XlJlaX@„X˜W²@l_VmnKšU„blU@mnkVK„¯@U@ƒma@kX¥VƒmakkƒLƒa@aƒ@WIUUVXWWnk@a°a@kkm@kUUmJm@WUUUIk`m@V—kaWWkX™KmƒXk¯ƒ@WKƒLkak@±bƒw@ƒaƒa@akaƒ@ma¯@ƒL—KÇÅkKWbkmġ™±ÅUƒLUK™VVkƒm¯LUVVbƒ„UwUW¯bm„ƒULƒxWJ—@ƒklmkUm@@KnwVkVK@akwƒ@@a¯bƒKkn›VUI™b¯mmbk@UbmKUL@xUUƒ@klmLUŽlVXI‚VVVUVUœU`mLXVWbXnW`Ų°xmŽxU@mĉƒƒwU@mbU@UƒmbkVW¦kJ™@ƒX@`¯Im@UlUVVnb@bWJXnmbƒJUU™UUaƒ@UamIkaƒxƒ@@x@b"],
+encodeOffsets:[[113614,39657]]}},{type:"Feature",id:"1411",properties:{name:"吕梁市",cp:[111.3574,37.7325],childNum:13},geometry:{type:"Polygon",coordinates:["@@@a@w„@„wlbnJVb„@VbšVVV„InaWmXI@a‚aUmVUVkn@°J@_„Wš@lIX¥lUnaV„V@naV@„xĊ„n‚V@‚wn¯wƱX_WmXaWUnKV_V›VUUUUWJkUVnKlk¯™@@kmKUaŁ±KkU@WmI@WUIlUUmVwXƒ‚w@ƒUlUVwœV‚@„Lnb‚W@anU@UšaVkô@l»n@na˜JnUÈLVaƃUUVm„VKVƒ²L@mU_lK@UVWkU‚a@a@U¯aUaƒÑóÑUb™„ƒKk@@aƒk¯mVaUwVƒÑkWUmK@UUKmXUWÝwUa™LUU@aWJUUU@Ua݄U@WL@VKVaVI@WnU@alIVKƒƒ@kIƒmIkJ@™m@ƒ™@@_™K@xƒ@kaW@U„@Vmn@ŽUK@mIƒJUXV¤XXWlkKƒkkK@XmJVakImJU@ó™¯LWKUV@nUVƒLkxmKkLma@kXKmmƒLƒab™LmK@V@mXVÆUxƒX@`nL„aV@@VmLUVnLlLš˜„b@„šŽ°²nx@b‚VUxlb@V¯bUV@zV‚XVĊXVx@lVn@VnnmŽUš@LlJXVƒz¯VWVXbšV@bmn™VUVk„Çþń@XVxmbUlV„Uln„W„@„Xl‚@VLXÒ@bÞJ°¦„L˜ò„@nU‚b@°„X@ŽXbmVU„V„nb@x‚x"],encodeOffsets:[[113614,39657]]}},{type:"Feature",id:"1410",properties:{name:"临汾市",cp:[111.4783,36.1615],childNum:17},geometry:{type:"Polygon",coordinates:["@@nW‚@@UnLšK‚a„b„KnnWL@lnblKnLlw„KVU@mVUXL°KôšV@nIlJUbnI@WlL„llLXkWWU£VW„InJ‚@VL@nm@UVƒX@lb„@@wšL@`‚@„šn@V@lw„@n„VmVX„WmwnUlƒœa@_lK„wVlUn°xVKVXXWlUšVVI@K@K„n°KœwlVlU@kna@V_„Wn‚m„UVm@kXml_@m„LlKXw°m@_ôJVUV@X™l@UaV@Va°I„lk»VwUkVmwUmmVn@V¯@KƒU—wmK@U¯wUVÝ@mJƒU—nWK™@@UnKVa„_lykUmKÛnm@™x@ƒUUlwVk™ƒXW@ƒa@Uƒ@@K@ƒkIV™nammVakUlƒ@wX@@kƒ™¯@ƒVVbml@„„°UbULmlVbnbÅK±VƒKVXUJWa@ULWaUU@@U@aWK@UkxUKƒLUUUJ±UkL@V±kk@kam@UV@l@LWl@n@VVUx„LlUUx@VUV™U@aƒIUl™L@°mLU‚ƒbkUUaWUUaUU@aWK—LWJ@bUL@VUVVbU@m@a@kmKmnĉlUK™XƒWUblb—xmIkƒƒU@xWb@lkšVx™LXŽmzVV@bklVVUzm˜@bk„@Vx@xlŽU„@lUbVnl@„Wxnl@n@ŽUbV„mL‚mƒb@`X@lUX@@xlnkLWaUJnnWV™Vn@l„@bULVV@l™V@XnJVX"],encodeOffsets:[[113063,37784]]}},{type:"Feature",id:"1407",properties:{name:"晋中市",cp:[112.7747,37.37],childNum:11},geometry:{type:"Polygon",coordinates:["@@@šlInJ„lJ„@‚„ULkJ@bmV@XUJUb‚L@UXKV@ރVbV@VVXI@bVVšKVbÞxVXnWVL@VnLV‚lX„ÒUŽVxUb°n„l@bl@„LšƒVaô҄ÒVb°b@VnLnnV@lmn@lb„U„V@„‚JœUVV‚Xkl@lUzmJ@xšXkl‚bUn„JVšUb„nU‚lb„V@nlLX@lakšV`Ub°š@XVJnU‚L²KlxnI@KV@lbUbVV„KnVl@„zlm@Uš@nŽšI@WUaVl@@mVU„@XkW@ƒnkVKVƒ„_Vw„y@knwVa‚@XalU„@šVnml@„X@V„L‚KVaÞbnnlJšI„mVKn„VVVInVlU„@„m@™mXK@UmyUI@mWUUakamw@wUwmLkakwVƒmK™w@wUam£y@am_ƒW@™UU@knmm„amU@WUa@knw@ƒUUUUV@nƒJm@mVUkKVUUUkKmwƒKULƒKUImV@lUn™nŽm@mbUK@°™bUnmbUmkkƒWUb@am@UXkK@a±@™V™@ĉř„V‚UXVxUVkLWl¯@@bULUlm@@nm`—XƒlWakIkm›VUbUL@Vm@kIƒ@@Kšm@—VaX‚I@W@aU@kUƒVU_™KƒbƒJkkǎ™b@nkKmL™wÅW@kVUUƒVU@WUIƒJmIXmma@_kyVaUUlkUm@ƒkU›x¯Lƒm@L@LUJ™UkVWXUWUL¯wVmUkƒxkL@`›bk„mVnxƒXUWUnmƒƒ@kxU@"],encodeOffsets:[[114087,37682]]}},{type:"Feature",id:"1408",properties:{name:"运城市",cp:[111.1487,35.2002],childNum:13},geometry:{type:"Polygon",coordinates:["@@„Vl„nJ˜wkaVa„XšWVLĊknmnL‚l@@bn‚V@UaVU@UVK@aXI˜KXL@bVVVbXVVblV„aVnK@¯šKVk„J@bšVVU@UVwkVƒKVwUUm@@Xk@K@kVUn@lbl@²l@UlK²VVIVV„KVLlw@VXL@b@VV@VŽXbVK‚@XbVIUW„L‚U²ÆLmaUankVKVaƒ¯@ƒnkUa„U°@„š‚n@@kWa„UVaXUW@IXKVw@U™ƒ„™WU@W@@UUƒU@mn@ƒ`m@UUULkUmJ™IUƒ@@UƒK@U@›anƒ™ak_@wmKUwmakV™kmK™V™k¯b™wƒ`kwUIÇx¯»ÇaŃmn@@™mƒmUkV@wkKW@kxmL™UkĉLÝk™xÝw¯lóVU„mV@ĀVVX¦W¤kz@`Vx°„²ĸ‚š@„Ul@x„êĸNJ°¤V„VlXLWnXxmV@nUl@„"],encodeOffsets:[[113232,36597]]}},{type:"Feature",id:"1402",properties:{name:"大同市",cp:[113.7854,39.8035],childNum:8},geometry:{type:"Polygon",coordinates:["@@²£šyl@Ȑ˜Ė@bĸŽĢbĸ„˜X„a‚KŤnn@ŎôllÈx„nVnÞDŽV@b‚nXllL°KšbVb@J@b—„‚„@ŽU„„xlKXLlKlXk„@Ulk„JlkUƒVKXUƒÇVIVm@_nǚLšašl‚w„VnU@UUwma@aƒaÝaLmUk@@Wƒ@U@@X™wVWÝUUUk@@VmLƒKV»nwUw™aUL@`mzƒJUIVƒUaUw™KUaVIlJôanÑlLVUn@ša„@VV„@@UUwVK°Vn_lJÆLœéW@UUUÅ@»lm@aÞIVwXW˜UUkkm@U@aƒU@mwU£VWU_kWmƒXwW_°yUkkK@UÇK@kkUVymóK—U@KWIƒbUak@mJ@bkbmLkŽ™UmƒkVU„W¦@lnb@„@Vƒ°ULml@nkVƒa™VmLUnk`±@—XƒWW@kbǦXŽ¯„WxI@xmbmxXlWV„„@bŎUz@J‚b@bÞb™ŽU@Wbk@ƒxk@WX¯VۙƒWÝbÝUkVUU@alI@a@akLWa™m@U¯UUmÇL@K@aU@¯VUkƒKmX@`@œkJ@nV‚Ub@lbVÆXVW„ULU`VbkLUV@XWl@bXJ˜@VbV@Vl"],encodeOffsets:[[115335,41209]]}},{type:"Feature",id:"1404",properties:{name:"长治市",cp:[112.8625,36.4746],childNum:12},geometry:{type:"Polygon",coordinates:["@@Uk™Lky@I‚JVa@mÞaWšy@_W@_WƒXVlUVwš@nw°K@m„UƒVaƒmVkU@mmmnLVUmKXa™U@IlKVUnK@UmWkX@WV_Vƒ@akU@a„KWIXyƒIUVmUn™Ua@WaXUVKVmkUWVkUƒLU@@VƒbƒKbƒIUmƒ@mbVL—x›WUUkn±V¯wƒbÅJUbmLkbmKÅKƒbVnUbƒV™KUb™KUbmLKmƒb™aƒKkUm@UŽnn‚VnxUVlUxl¼ƒk¯JUbU@Vbk@WšU@UVóI@`¯nWxkLƒK@nk`Wn@lUnƒVnm‚ƒXU`@mb@lkV@„VnklVVUblz@`nbWnnJ„IVJ@XUVV„UV@lÆXšxnKlL@mšaȍll„I„ašLV`„UlVV@@b@XJWUb@˜™n@L„@lJn@@UVKVaœUlnlJXb„k˜Wn_@mn@VkVK@a°@XklKVUUwVWUšƒĊƚ@šU²@@blLVWn@@bVa„XllVnnaVmša@¯VLnan@‚šmVm@knUVJ"],encodeOffsets:[[116269,37637]]}},{type:"Feature",id:"1406",properties:{name:"朔州市",cp:[113.0713,39.6991],childNum:5},geometry:{type:"Polygon",coordinates:["@@XXWVXVWnnlnn@èƼ@„„xlš„ŽV„nblšššVŽÈUVl‚š@„blnœL܃ĊmUkU@Ua‚—@WI@aXk@WVUlKUaV_VKXƒWUUÅka@VaU@mlI@›@_nW„LVl°UV@@b@LÈKVn°V@VšnXblK@b@bkJ@bVVlUÞVÞa„Xܚ°UXWl@„wl@XaV@šÝa@aa@IVyƍ@aƒƒXUWknwna@w‚JXw°ƒWÈ¥kI@W@kmKm™¯IUmkXWWkaƒbkImJ™UkL±aVƒb@lWXkJƒUkƒĉkƒ@UmU@a™KkƒVƒUkJlaU_™yƒ@UU@aUU¯LW`kLWnkJó™ƒbUƒbmK@aU@UVVL@VƒL@„UVULƒK@xUL@VUV@nml¯@UkmKUxmbVbUV@XƒlXVmnVbkxUbU@ƒbm@@VUlUVšb°@VX¯šm‚"],encodeOffsets:[[114615,40562]]}},{type:"Feature",id:"1405",properties:{name:"晋城市",cp:[112.7856,35.6342],childNum:6},geometry:{type:"Polygon",coordinates:["@@lV„Lšb„an‚LnKVašLVašL„UVaUm„aÆLnLlanKVaÆI„a°x²UlmVVœX˜wUKna„@Vn„J‚a„L„a@UV@@alUkKVKnkmmVwUk„w@ƒ™@kxWUXƒW@@mƒk@aUa@a¯aƒLkKmwkUm@kL@K@aWIXmƒVƒXƒWkUVakL@UVKƒw@aUK@UUKmLU@¯n™KUwVƒUIWJUWmka™@UXƒJƒk@UkmW@kLWKVƒx@bmI@VUaVU@a¯@UUmVKmX@±`kÝKVxUL±akL@V™bƒLkKmVƒ@XWVUbƒVXb@lm@@lW@@xk„lVUbnnmbUšlJ@„@L„@@V„b@‚WXš„UlkxVV@„šwn@ÜmnLlVkzƒ`UbmL@Vš@XL˜m„VnIÞ@VU°x@VnL˜x„V@LU°"],encodeOffsets:[[115223,36895]]}},{type:"Feature",id:"1401",properties:{name:"太原市",cp:[112.3352,37.9413],childNum:5},geometry:{type:"Polygon",coordinates:["@@„@VV@wVKnLVal@na°nšaVJœUlm„L°a@b„@lx@bULUlmx@Ln@lVkn„l˜@XI„w‚K„Vnƒ°aVXVx„ƒUaVU°K„nUlšUVL„KÆVš²Ģ‚lnXalLÈƘL„KUaVkUanmWU™a@WwkUWU¯y¯Ñ@anIl@@aVU„m„I„ymUƒLUUVakaU@@LmJkw±LKmVUI@W¯™VaU_l™kbW@kK@mƒUkaVƒmVaU™ƒIVmalk™W@wnIVy@klkWUU›VI@ƒƒUƒVkam@knU@mmmK@bblVUX@VkLV`@n±KU„ULƒ‚UnVVńUbÇKmV—Imbm@k¼ó@Ul™b@VmV@bXmaƒK@›UUxkV‚V@„xW„UxVnkVVJ@XnJ@XlV²LƂVbnL@lš@°"],encodeOffsets:[[114503,39134]]}},{type:"Feature",id:"1403",properties:{name:"阳泉市",cp:[113.4778,38.0951],childNum:3},geometry:{type:"Polygon",coordinates:["@@°@nb„@lb@b„b„b‚@„x²al@lb„KXU@m‚kUWkkmUUƒVwV@XUW@™naVklKXblKnL‚ƒnLVanImaXKlL„ašV@U@KUKW„alƒXK@£WKXUV@VU„ƒUUVW„_V™@W@@K„@šƒUƒƒIWmXUmƒULƒn™JkImmÝaUbLƒK@UƒWk@mn™Uƒ@kVWb@Ubmx@lƒzUxƒ`U„ULml@„XWlƒ@UV@nk@U‚Vb@X™Jm™@@Vknƒyk@ƒzƒJƒnUV@bk@mJ@b°Ò°zXVlVXx‚@šbXVmnVbUlVb"],encodeOffsets:[[115864,39336]]}}],UTF8Encoding:!0}}),i("echarts/util/mapData/geoJson/si_chuan_geo",[],function(){return{type:"FeatureCollection",features:[{type:"Feature",id:"5133",properties:{name:"甘孜藏族自治州",cp:[99.9207,31.0803],childNum:18},geometry:{type:"Polygon",coordinates:["@@ƒaXamƒ¯wm@±°wUwV@UaVw²Kš™„U@UƒU„¥‚a„ƒ@£Þ™ôx‚Knkm™X¥™IUƒÝUwlk°V„@ƒÈ™‚KUwlkUyV¹„mšx²Xll„ÑW»š„l„w°UŎ„nƒ„„˜Jœƒl¯°V@wôIVÇn™nUllšLšVǚLô¼XW£@±„@¥k_ÇJƒkUéƒkšƒƒwXa@ƒšLlw²™Vx„b‚mš¼ÈxlLȃ„VWÞn¯mǙÑUÝlÛkwlĉmƒULmwUJ™ç@wkm@ÑlUX™ƒÑôġƒVa™ƒUф¯@wķÓkbV„mnU@@y¯IķKƒV@¹šaƒé@k„mÞU°¥@a¯@anKlblU„¥@óğç@Çw@wkla„çݱk¯±@ğÝUÛmݯwƒ@kb±¯akXWÜkXUÆÇUš¤X_Ɛw„V@¤ƒXU‚ƒbUƒŽƒIUlÇUkŽġ@™aXČmlUlèUV@„mVk¦Vxš@¦±š¯ƒƒ¯¯anlWš¯nƒƒÅw@w°KVak£m@klƒKknÇU™»óKšīlaUaV£@™™¯@ƙU™VƒÛÝÇXƒÇl—ÓlŹ„»WUğJ¯£mx™Lĵô›ºX„VlUll²bl„„lŽƒxónn°ÝšU¼mJUš¯nƒƒƒV@êĉ°Uĸ™w™@mƒ@¯kmXamѯaUwÝKU¥„mÅn¥Wmn™ƒ¹n±ƑƆÇôXê±NJnšƒ‚UôlĖkȂVÒ¯¼VnƒȮ¯ĀnƆ˜Ģ@Žk°V°¯ĢVlkšVxm¼X²™Ŏ@ŽVxknWÜ°U‚¯n™Æݜ@`„ôݲÒƒ‚Çzn‚mX@x„è°K°Å„UČĬóĖ݄ƒ˜ó¼ÅêƒÒƒbmšk@V„Ž˜„@ҁl@nĉܛê—x@Ėml՛J¯¦óxȭ°ÝmŽ¯Lĵè›Ā@Ɓ„l°żƒ‚šX@xmŽkV@z@‚„°blŽnÞ°J@bn@ƼUVƒUóŽóLƒ°X°ÝLƒxUn„°ƒĬƒn@lnL@ŽÆ@šn„KÆxnUnV˜InĬmÆnxŎ¼ĊIĢóÞ@ĊƒƨbUƒ‚mV¥lkƒ‚wnL„mšÅÆ¥Xƒ˜wU@w‚wUÞ™@alUUŚU™Vkkm°aU—°Ó°w°U„ƒ„b°aš²K˜¯œĕ˜@ÈbޏĊaš»„XVm°In„‚Ĭk¼Vb„ašJšôš£VĊan™‚k„ů™™nƒÜU@anKnĮ‚bÈmƎš»nI‚霣Ġ™"],encodeOffsets:[[103073,33295]]}},{type:"Feature",id:"5132",properties:{name:"阿坝藏族羌族自治州",cp:[102.4805,32.4536],childNum:13},geometry:{type:"Polygon",coordinates:["@@l@@þ²I@lƒ„VL°wnJ°Uĸ™Ŏè„Ilw„V°¤nĮ™¤Ý„lè„L@„ƒ„@x„l™è²ôĊ_ĊġVÈôJżīlbXšÆÈVŽkxÇVƒ„n°„¦Üb@è@nn@@°šUÈ¥WDŽ_Uala¯¯UǙkƒ»„mVwk»˜k²°VxlL@¤œ_@x‚`ȍ‚Ėöb˜š@l²alX„a@bnK°¦VK@nnWmx@nUnl@@lƒlĉk°l°UXkmW@Unš`k„ÇL„ŽW„ÛÈVxšVVlVk@l„IXb@ylXÈW˜Į„WŤzœy@šmIƒŽ²šJ‚š@nŽ°@V„„J°a„Å@ƒŎkVǚk™aUw„KVw™™Vƒ„@nkm™@±ôkô™ĊJš¼šInÑm±nIššÞ‚XȃĊxĊUÈbÜyÈ£Vkw@kVUV™„m@ša„»ÜbÈmƒUXwÝxƒUn¥@°ġ™Å‚aœJVk™aW¯Û@W¥—UŏĶ™@¯kUƒŃ@ašI@mmanwސ‚W@œ™mw°»Uřk¹±W„xVx¯¦U°ƒzţW™w@°ÇVÑk¯@„y°aš£š@šmšnl¼„ašÝÝakwUƒ±aĉImlĵn@ƒm@kkVƒ¯Ñm™ĸ™°x„l™œ@˜ƒXVÞmlÛݙĉUÅ¥mwÅ¥VaUw›™XġċaVůÛŹlwU¯U™ó±™xÛV±¯¯n¯mċƒLmnĊm‚™@™_kJWaXmwUƒĉK™»™@mwX݃UDŽkKÇw™»nƒaUw±škx™K@„Wb„x™„„lVê„lÈIl`@¦ƒŽ@²X¤Wó»™KUșŽ™KkkmVmšUÈóJ@x¯Uk°›„—Iƒƒm„ōƒ¯Vƒxƒk™ŽX¼ƒÒkk±W™wƒnUºVzklVxLǚ@„ƒŽ¯UklVxސV„šJW¦nšmlLówݚ@¤ƒ„bƒ¦„V@VƒV™š±LUxVbU@Vx¯x@²n‚°xn„Wb„b"],encodeOffsets:[[103073,33295]]}},{type:"Feature",id:"5134",properties:{name:"凉山彝族自治州",cp:[101.9641,27.6746],childNum:17},geometry:{type:"Polygon",coordinates:["@@ĶóšKnw°¤ĠIXVƒ¼kź˜Ôk‚„ÈWŽÞȄÜUVšÅš°@šš‚@U¤Vbkb™ĬôLš¼ÈVlm„Llkn@l¤Ub¯L@xÆx„„°mX™mk°b„°°„²™@¥‚™Uwl¥nU@ƒVUkçVnkWċšbĢ@lÈVVk„J„‚V„aV„W@£ƒUƏxW`™£ÈVVÅlWXÛlW°b²la„@°xnÞVÜĠÞ²@l°Þ²ƒèkblŽ@xÈx@Ġènal£nU‚Dz@‚ÞK„nn¤@¼˜°U¼„nV‚šXU‚šbn™ĠUVbUlVš°LX„@lV„èÜUnK@_ƒyXVyUwmIU»Vƒ„kÇ¥šÿkkV¯m±n@ƒn¯ÜanVVƄz@Ž‚bœwÜb„m@wša@kƒmk»@™a@VUUó„w˜@nb°mš„XŽmnVbގVôanwšJ‚ak£lw„˜šLšÅnÝ@wl¥IÇӃ@U™™Lƒ¼kVǃÅó¯kVmmw@ƒn_‚Vn»°LÅ»@éÇçŹīVÇÝ@ÝğU™ƒaVݙ™š¯ķlŭġlƒ@óÞۂċ@¯nkUӄ—m±™IVġUwóKUn±¯—K›w»ƒKݐV„nl@„óxUwţ›£ĉƒUmŗÇ݃K™„ÝUlmKƒ£UVŽ@ÞȎW¦„Ò@Ĭšnny‚@nÒmœVŽ—¼@°Vbl@VlnUUwl™°a@„œ„@llnk°lbnKWĀnŽU„VxUŽ‚²Å‚m¦Û›ÇŚƒaU„Vbš@¦m`móX™Umm™xÅ@±Þn虲™U¯»m™ƒV—m@wƒU@wݚÝmLƒa@„™VÇUk„l°¯„VlkVƒ¦UšmxƒaULUèVx@„kIUxmWV¼¯VmȯšU„nl›È—@m»Å™ƒVWxÅbÅğW@kƒm@kVV¦mlnn@‚ō„l¦Åƙxkœ"],encodeOffsets:[[102466,28756]]}},{type:"Feature",id:"5107",properties:{name:"绵阳市",cp:[104.7327,31.8713],childNum:8},geometry:{type:"Polygon",coordinates:["@@„ńlV°š@Őĵ˜VX»ÆUĊќJ‚w„@È»m»š£°Kšk@ÇnÑƍš@„w°JUwnw@wšbVbš@VlźLUw„aƒ»„aUklyUUVakwWXwWƒUxkLƒmn¥mšwk™˜UX™lJ„w@aƒIk°X„¥Wƒ²l¥šaU™„IlmkklƒÈL@m°nlWU™aW—š@Vƒ„@UaV¥@ašk@Çk¹ƒK@a™K@kƒKkšÇX@VU@kx±V™èkIWwUVUkkKÇ@ƒa@wkml¯@kUWn£Wa„aVwnaV݃w¯@UaWx—n›JńUxUšma@L@„mbUŽU±VVnkxUƙ„VŽm@kkKW°„X@¤ÇUkÆÇnU¦¯ŽkƒmLVwÅK@UóbÇƁVƒ¦™L@‚±êX¦mVޚkÜÝnWU—„›@kšƒŽ¯wķšnš°ÒU„lln@@„ĶmnkĊJ²bV„lxÞb™Þƒbk»™m™n™@™¤¯bƒz@Žl°UÒ¯È@ŽšxŤX„yV¯°¥Uwƒw²XlºVŚ¯¼nx›š@ŽXݏmxnb@n™J@b"],encodeOffsets:[[106448,33694]]}},{type:"Feature",id:"5117",properties:{name:"达州市",cp:[107.6111,31.333],childNum:7},geometry:{type:"Polygon",coordinates:["@@Uxn°‚bnŽlUnÒƃnn@n‚¤„LnxlU„ššV@„Æl„x°XXxl`XœƒVW‚œL˜è—„±nÈbƒŽ°b@š²x°Kܼ°ĉ„V¦lJnU@¦šÞ‚JÞğ„mšLÞ»šxU„lb„VÆann„alŽ„VƍX@lnŎV„mU™maÅXƒa@aWmœ@‚£@wĉJVƒkk‚kkmƒnk@ƒmna@šal„Kš™‚J@Þwm‚ÅŃ@ambkUƒƒ@™™KUġKU@m‚ak¯±ƒ„a@aĉÑÅaVwšXlwƒ±—V¥l@@a™kƒ›@@£šmƒĉÝónWV@ŽnÝÇÇx—UmbƒaVkkk@m„@m°ƒÝýXm›akÅīƒ@@ƒmb@@xmšnbƒ@mxšŽkWL@ƒ¯b@WUXmWœWKkbm@kx™Xmm@LUl„xlêóK™nUš„all™LƒlLó°m¯JVšU„K„„@x˜K²Āô¦l°"],encodeOffsets:[[109519,31917]]}},{type:"Feature",id:"5108",properties:{name:"广元市",cp:[105.6885,32.2284],childNum:5},geometry:{type:"Polygon",coordinates:["@@ÆL„Ċx°»Ŧ¦˜W„™šLȄ@xÞKÜ°ÞnVxÅĀlÒnJ°a@w„V¯l@XWknKnw˜VȚ°XXa˜lX°VI°b„W„nšaššš¥@ƒw°™n@šyÆ@nkÞ@°¯lJn„°IÈl‚UšlXÅ@ķlUV¥VUUÝޙUUƒ@UwƒJUkĉm@ýƒƒlk™WUwVwWJk@VUK™lUkaVƒUƒmLk„m@ƒƒ@Uƒ›Ik`@„™UmlUkV¯ÇXKÝ_mm¯@Uƒ`kwmƒl¼±KV¯—¯Vk±Vk±kzma™KUnDZ™bk¦±ŽX„ƒ¦¯Wl„J@bƒxkIWš—Vlš™xnŽm¦„nlKVwX„WxXŽlxUbVVkzVlƒb„¼ƒbVxŹKUk™@Ua™a@xmxVx¯Iƒx™@ŎmÒ@șl¯L™¤n¼"],encodeOffsets:[[107146,33452]]}},{type:"Feature",id:"5118",properties:{name:"雅安市",cp:[102.6672,29.8938],childNum:8},geometry:{type:"Polygon",coordinates:["@@ln@xšèVInxVKn„‚ĊklxkÜVޚÒnÈm°nxš@š¼ĊLV„nx‚WXblIš`š@nmĉn‚KȄôÅlUÑmU„K²¹@ÇÅVÓůVýÞW„‚UVmX„ÆbnwšKUÿ‚™@UmmIUb¯¥Uwƒ™¯™Çmš™„çmanUm»UUƒl—kƒ¤ƒa¯bV™U_WĕmÇŚ±ĢUlƒUl™ÛVƒçkUƒ@WŽ¯KU™VkUağVmš™aV™WUƒmV»—¯@»m£ƒmÝLŽ±@ÈmVk¤mb@ôƒ¦kVkamL@b°‚@b¯¦ÝVƒn@l„ê™b@º„UĸL°J@zV@nmUƒlaĸÔ@xƒ°VҚ„Ub„‚óĢ„ÒWškV@Ò"],encodeOffsets:[[104727,30797]]}},{type:"Feature",id:"5115",properties:{name:"宜宾市",cp:[104.6558,28.548],childNum:10},geometry:{type:"Polygon",coordinates:["@@VlÈnl‚XnWLX`m„²nV‚@b°xĢçlnšVm‚nn„@@„°‚UzšlV°nޘÒkxl„w„`UnVb„mšL@albÞKÈۚmܼ°@Xǚ@wmW@ńKĊL„lV„šLVŎçÞL²±‚ğkw@Uƒy@¹lKX™lKVa@w™™Č@‚w@a˜ÇU¯n™@@wġak—™aō‚ƒƒK@Å»VakUWmķwkbğ¥mL™akš™@ġރ°¯xVVÞ@VšxVš—VWx„XlxU‚™@k²WVŃULmèULVĊklĠ„VœJVx±nŃ¯¦mwğ@mƒƒlğkkl±@kšUk@¯±Ç™Kƒ—kxl¤b™Imx"],encodeOffsets:[[106099,29279]]}},{type:"Feature",id:"5111",properties:{name:"乐山市",cp:[103.5791,29.1742],childNum:9},geometry:{type:"Polygon",coordinates:["@@kšVŽk„ššÆkšV²UlºÈIlxƒLXèÜlU„„XU‚mkƒbVè„x°@„@¼°Knnn@m˜ÆIUbnJ@bVI°b°±@nK@mVakkƒKl¯nbšmĸ„èl@VnÈl‚UUw„wmwnm°¥„L„™lLnU@Va™ImbkƒmK„ƒƒnk@mƒb™ƒƒLV„JVUUƒ„VnkVmb@a¯JUaÆkk¥„IW¥„Klw—ÑmÝU¯™kVy¯@ƒƒ@mmn™Ukmġè¯w@aU±mnƒW_XKWmkÇmUkóbUÝUanmW™ƒ¯nma—@ƒxVôUV@šb@‚l¼„n@l™b@xƒnÛa›xa@ƒyUÅmUÛbm°@„m‚n²U°ll™ĀȦƒlU„V¼nJVxUz‚W„z@`mL"],encodeOffsets:[[105480,29993]]}},{type:"Feature",id:"5113",properties:{name:"南充市",cp:[106.2048,31.1517],childNum:7},geometry:{type:"Polygon",coordinates:["@@ȲVmšLnblyl²²UUl˜°U°²L‚»„knlx„_VŽ°@nnÞ`WL°ÈUŽVlnkšV@ƒl_œJV„‚@„„n@lƒnKV£™Çšƒ„UV¯šm„@laX˜U„‚UbVx„@VkôJU°Jn™@™‚wUk°wnUƒV_nJmknmm¯Vwk¯ó¥±ÿ—L@wƒƒƒLVU™kU›bX¯mykI@a±Kk¦ULmaXƒƒVm¯ƒK—z±ƒklUIVbÇJšƒkL¯™l™ƒU™ÿ™UƒlUkJƒUmŽUUkVVklKk@@a™U@„™J„²ƒxƒ¦kĬ@¼±ºXnWb—xƒU@xƒx@lšL@b„Llº@șl@bU¦Vbƒ@U„™@X˜‚bVškX¯m@nÇKk„llknƒJVš"],encodeOffsets:[[107989,32282]]}},{type:"Feature",id:"5119",properties:{name:"巴中市",cp:[107.0618,31.9977],childNum:4},geometry:{type:"Polygon",coordinates:["@@V„U„lbkVšŽVLUŽl@XI‚ŽUxVxšXkl„„@þĊnVl„IVx„@VVݚVÞUVU¦kV@ĸWÆô²š@VÞnš@Vaôb²W@‚K@XUmÑUW°¯°Ina@y„_lWn¼lLUbô¼„Kla@™nkUyô—Æx°@šn£™Ý@¥mVkIU¥Ċƒ‚¯Û»¯L±w@™¯a„Ça²m˜ƒ—ç›KX„UW›k_Ww¯WƒwÅk@ƒ™Uƒ™kVmwƒK£@mmmńmÑkVmamnnlmIU`V„m¯xVlx@šmš¯IV‚óIUlƒ@UwVaƒ—VW‚kbƒ@™nU°ƒV™„šÈU¤"],encodeOffsets:[[108957,32569]]}},{type:"Feature",id:"5105",properties:{name:"泸州市",cp:[105.4578,28.493],childNum:5},geometry:{type:"Polygon",coordinates:["@@VVXwVKn„˜wnVƒn„l@b¯xmKUbVn°°X°@blLšènV„@Vn‚l@U„LnmmUna„VV_ĶV@wnJ„„l@@kkKVólaUwnJm„wUlm@ašUaôKVnJWbޚ@VšwVLX¥VVš_Þ`šw„WƒÞŹmmnIn¥Wƒ@k„WV¯@ƒ°kI™ŽƒLk¼Ç@k¤±Xk˜™nmݯUlÅÛKWV¯kƒlUwkLƒÓ™@U—@ƒ‚w@ġXV„˜WX„š@UbVbšV›š_kÇV™lU°lnwŎ¦ÞaƯnmm¯šU„™m¥nkVmkƒl_ó¥¯UÇl¯@™ƒ™L™kƒ`¯ķLUy¯@mw—¼ķ°ġ_řU°mlšnÇVUޚ„@‚ƒš_ƒJUnV‚UXšbl˜Ģb@x@mšV°—È‚b@‚xċ@šš@xUbkLWškL@º„zV‚@lxĠ±²"],encodeOffsets:[[107674,29639]]}},{type:"Feature",id:"5101",properties:{name:"成都市",cp:[103.9526,30.7617],childNum:11},geometry:{type:"Polygon",coordinates:["@@°n°m²°ÜUšw²ŽôVš°ŽVkxÜźUŰČb‚ŽĢlaÈL„»ƒ@k„wVǂ@„ƒnÛƻșUÝ°Kl_„V°Uš`Vbn@VbÈLšaVU@ƨ»V™nIl™šUUa„±lIk±š@VnKmÅ@WaƒK¦™lVōškK™Ý@maXÇmw¯IU‚@kƒVƒwUmVIƒƒƒç—ÿƒU±ŽÅ@¯È@xƒK@wƒLUbÇKō@mÝ£@yóUóóUxkI@WlIUaƒbƒaŽVĀ™LmxÅaWƒUnVƒÝXUþÆ°UÔÈÆ@±ºƒLnVVÒkóÆ"],encodeOffsets:[[105492,31534]]}},{type:"Feature",id:"5120",properties:{name:"资阳市",cp:[104.9744,30.1575],childNum:4},geometry:{type:"Polygon",coordinates:["@@„è„„UJVn„x„U@lV°JnxWÈnbÞ@šŽlLŎ™Ušk‚¥„LXbÆ@nŽmLU‚@zlbXmlnVynL„çšJVb‚UnómUnamU„an¥lKV_²aValWô„n@nƒ‚bVœK°¯VblW@kkƒlUnlV£°W@w„UXk°KVwƒmVkwVyVI@wkmƒVÅ_Umm@Uÿmbk£™xUaVw±V¼V¤kLWxU@Uk™bƒyƒXšómƒ°V@@zÝÒkKƒn™±U@@_VVkƒÇaVwnLWalm@@kkVVl™¦kIV`±n@w„Kƒƒk²™aƒVUUV¤™nkxmUkVWVnLUbVbƒ`kUU„mLU‚mX@`ÅbǚXbWLXŽ›n"],encodeOffsets:[[106695,31062]]}},{type:"Feature",id:"5104",properties:{name:"攀枝花市",cp:[101.6895,26.7133],childNum:3},geometry:{type:"Polygon",coordinates:["@@„b‚KÞnޙ@x„V@x˜n„Unš°¼šVš±mç²ÝÆ@šwnnšVWŽnôn_@¥‚™UaVƒ„bƙœÈ܎n¥Æ±VUwVƒmXÿmLkal¯km@k›ƒ@ƒ¯bkšVxmVUkk@Ua@¯˜»Un›mс@mz™m@īƒÑX¥Ç@ݙxU¦ƒšÅŽÇUkx@šlb„UWVX„mV@xĵĖ±@@Ž¯xUšÆLnÆm„šx@nXL±lUUVwKWak@WxkbšÞƒŽĉbUn@‚ƒ@@xó¦„Ŏ"],encodeOffsets:[[103602,27816]]}},{type:"Feature",id:"5114",properties:{name:"眉山市",cp:[103.8098,30.0146],childNum:6},geometry:{type:"Polygon",coordinates:["@@„šVx°¦VanJVnš@„b„aVbkJ@XlJVwôôôV@zÞ¤@nƎÈLVa„K@x„L@w°ÇÆ@²„V˜ĀœmWXKWașÆa@_nWVnKVƒlV„_UaVamKXUWwnmmwœÑm£@ynUƒkWƒĉUkWVkkV±çkJmkKƒšƒK¯¦mnnxƒxVxVÇkUmk@ƒçķ™nmak°„LllUb@nmL@‚¯²¯aUJ@amIVaÅJn—m@mm¯L@»ƒŽ¯@ƒwUç„anlVƒWVƒÛkWç„KkwÇJk¹±V™UÅl™™ġV™²ÈƂnXĖV`Uš°a„b„£˜l„kVVn¼mVnbƒè™šÈn°š"],encodeOffsets:[[105683,30685]]}},{type:"Feature",id:"5116",properties:{name:"广安市",cp:[106.6333,30.4376],childNum:5},geometry:{type:"Polygon",coordinates:["@@„VlIV‚„kšVšĀ„Vkš°šlK™„ÈIUaVJlk²„˜y„Ln°„UW„nbVKl¥²L@blJnzW°œalV°Inô¯‚K„kšKkkƒbV™šmôLkéƒwVk@KnnšWlwn@laXL›ŽnXVW@X°a@„XKl™nw„@man™@w‚@na@„„@ƒw™ĕġġ™wUkUWb@mk@™¦ƒ¥mUÛb±yÅn@bml@kV@„ƒlknVbmVnlmš—bÇk¯bWyk@V_UamJ@I—@WaƒVXamIVWkUkbVaƒUUxƒ@VnkVU¼›bkKUxmK™„@WšƒxnV@n"],encodeOffsets:[[108518,31208]]}},{type:"Feature",id:"5106",properties:{name:"德阳市",cp:[104.48,31.1133],childNum:6},geometry:{type:"Polygon",coordinates:["@@nUW¥²é@šK„¥‚UÈÅôa@VÆLUxnKl„°V¥ÈmlÅÈV@£ƒWX¯lLln@UšƒVÅlwUm²U‚VVna@ƒ@KnbV™VwƃœI˜mXwWƒkIVwÝĕVUa™IƒèmKUzkmWnka@y™@l²kJƒ²Vb™VkšmJUšƧ¼@UV™bÇKUam@Ua™_¯VƒUk`¯LVÞǚżm܃„@Uȃx@l„ƒ¼ÇKkbWŽœšVxUbƦnxƦĊV"],encodeOffsets:[[106594,32457]]}},{type:"Feature",id:"5110",properties:{name:"内江市",cp:[104.8535,29.6136],childNum:4},geometry:{type:"Polygon",coordinates:["@@²èlUUllXĊVX„„lmV@zn¤›ÒnxmnXxlUnVlwšmU£VV„Ušbl±„„ƒL@x²mU_lJš¥UklU@ln@‚kXbmKUxÈbl„UU@`V@š²„mlLÞÑ@yU@„¯ôn‚™„W„zšaVlV@XwlKU£‚»—aVaUwm@mwUVUwkƒlVDzLlƒ„KV™m_@ykUmƒ@mU™çkKmxkIU‚Ý„@LUJ@n±„kº‚LXb™¼@mmIXa™@mamnkW™ƒKUƒƒxƒ_U`UklwUw™mUbƒV™²ƒakbƒmkn@`„UmҙšVxUb™I™`UƒaÝÈ"],encodeOffsets:[[106774,30342]]}},{type:"Feature",id:"5109",properties:{name:"遂宁市",cp:[105.5347,30.6683],childNum:4},geometry:{type:"Polygon",coordinates:["@@ÞĖUxlJX„Vb°@„xUÞmbUxƒbXbm¤VX@lk°ln@x„bÈ@lLVlVUXxlJšç²UlwV@@UÈWl™„L„w@w„V˜wXaWm²¹@»lī„¥„wƒ±šI@ƒšV@bl@kLUllUVVn@mmU„wX™ċbVb@VUkbmamšW@kƒa@™™k@ƒlaUa™@¯b@šmmwó@@lkXUa¯°›LU‚am„m@óƒkXUb±bU`kLm¦ƒbnVmbnVmô"],encodeOffsets:[[107595,31270]]}},{type:"Feature",id:"5103",properties:{name:"自贡市",cp:[104.6667,29.2786],childNum:3},geometry:{type:"Polygon",coordinates:["@@lIÞDŽbVŽš_šJVaUwš™nуV@_lm„nla„bš±„UVašnVxkxVlV_„`„wV„„LšlXnmnbš@WbnJ@nš»WaKl¹²ƒ@mVI@KރVlJnw@aW¯¯¯UmVanL°w@aƒk„mmU—xmƒULWxUUÝKōèU™KUƒƒkĉKƒL@ÆnX@x™‚Wȯ@Û»™nÇÜÝLka@b™KƒnUaVmƒ_ƒxkƒLX¦ƒJl¦ÅlVb°I@bnaUŽmlƒUV„UVƒIUŽ„Kš„„a@nml„„ƒŽnLl„našJUbV@"],encodeOffsets:[[106752,30347]]}}],UTF8Encoding:!0}}),i("echarts/util/mapData/geoJson/tai_wan_geo",[],function(){return{type:"FeatureCollection",features:[{type:"Feature",id:"7100",properties:{name:"台湾",cp:[121.0295,23.6082],childNum:1},geometry:{type:"Polygon",coordinates:["@@\\sŽ@pS}aekgKSu™SsMß`¡CqZ·be@Q^o@‹gieMp‹‰]}•}Ľc_Kk…{™ù“A¡r‰[uom@эĥJiq©mʼnq¯Bq]ÙYgSåk_gwU­isTE…“‘ĕiqiUEkue_‰OSsZ‹aWKo¡­q“ycY£w}‹ĩ™ĕS§Z©S™N¥SyLÑ¡±Ks^IY‰PdƒY[Uo†Fp}´\\¬\\j]ˆe܍ò‹¤¡–ā a\\bn™U㺹Ìs¼j®[cíȈEŽĝĆ`ļf¶Š®K|VØDdKGpVnU‚FjpH—F`†B’[pMºxÖjbpÎxp€¬‚|ΟÜÒCŠ²®‚ÜAp„ZG~€Šd˜ÞàV¨|¸€`|Œ²tx~\\~|dFf^zG€ĄŚhœdL\\hĸž¼†ŠOªP®lV`p\\]Xpll˜æ¤œCpQ|oF}fMRi†NSon_²qämœM„NM‹\\•"],encodeOffsets:[[124853,25650]]}}],UTF8Encoding:!0}}),i("echarts/util/mapData/geoJson/tian_jin_geo",[],function(){return{type:"FeatureCollection",features:[{type:"Feature",id:"120225",properties:{name:"蓟县",cp:[117.4672,40.004],childNum:1},geometry:{type:"Polygon",coordinates:["@@EUDAEI@WNMNCBFAHFFNACDJDPBD@@GD@DIFFHEFGDBDEQOFG@EI_KG@OcJQM]RMEKBGPG@[LaCIICBWKCEEG@WBQHCDFD@HSLEJI@IHWECFGAAEKCGDBFCBSBIDCKKHEADMJMFABKOKEQAA@IEEG@GIQAEK@OZEESMOL“lu@SLUTYFQCMG@@SQUAYKAACA@IB@BDB@B@DC@@BGAEFAA@BEGKJCC@AGAIHA@@JC@QEIP@@A@EGIDC@O@C@@@@CJCWKABFLBBEBSQGBAAMIEM@AKBcJEN@BEBCFMAEFEF@J@BG@BFABECKFG@AFQ@@F@BEB@@A@@AAAKAE@GFGDECEFEECBKIKDELDFEDYH@EIACDCHKBEB@BAAC@ADBHABKJIAIJICEDGDCD@@A@A@DHCHJHDFEFGBKRKBGIK@GIMHSBCH_BOJECCJCFKKMD@DNJEDEGC@OJCJHRUL@HRJ@H[DCNKDZHCTFDHCFFKR`TANVDFZRDLFARB@HPAPG`ILAR@TERNDFNHDLCLDDCXDYbHF@FEB@LDDVE@JPNfXPINCVDJJD@NJPAJHLXHDNANHhB@DPNLRMTBFRBHHr@`NBFEBOCCBIAQJDHCHLHFA@HSDCRLFTB@HEFLNF@PELBDJALFLTC@EPFLLP@tUHQJDfIHGTB^JTCPDLKAIBATFPADIEGECEMJ@JIAIHGECFEAGDI\\SPOXAFCL@BQTQBBTMZECYGAHA@GJAE@HCAEME@IECFKJADDBABLTHHG@ILEAMNDJCDHEBF@@JNFJELDFKTOT@JETBFFHBHEHKI@@IJEJ@XKEOUMS@AF@CEB"],encodeOffsets:[[120575,41009]]}},{type:"Feature",id:"120114",properties:{name:"武清区",cp:[117.0621,39.4121],childNum:1},geometry:{type:"Polygon",coordinates:["@@FWôµ@IFCLIB@EHNBp]AGEAKAEDMGZKFGBGME@ILGP@HEFB@BXMEAHUGC@IHCLOD@X[NWHWPKAEF[@EKIOL@EKGBNMJ@EIEHKBIC@BAKMIACCFQZCF]DB@ERAKADIHGEIBCGIIECFaGLZO@EFCNGAGDGAKL@BMG@IE@ADSDEH[JGC@CGA@BMDeK@EIACFE@@GG@FIAMM@CCGC@EM@ADE@CFMAAGHBDKIEAJG@DOGCDEKAGIS@KFCHKAEHIE]BeKNO[IFIOELC@A]GMBKVYCDDgGAICARc@MW@AQE@DGI@@AQ@@BKBAIQQYEFW@CEADIGGBCEIiMEMF_LGEKMBBDWEBGRC@E_CHYGCH_IAED@FFBQh@FGJaJ}AHRAREF@bE\\C@CT`FHC@\\BBF@BID@HGDDJ@@FAHKBARECKDAZBJIVNHCTA@EREAMLHDAFFBVFFC@RNRETHD@FOJMACH@CAB@P@DF@@FGDWE@FFSIEMKQDYCCHKb^JADOCIDGNDBdBCFJB@EC\\A@BJEA@JAAAD@HHD@LFBCFF@BERDHNhZQHMBGHOACCEBWEGD@PSJKCGEUD@CINLFGHE@AJK@HDABBHTB@F`DBFLBBHEDARCFG@ABJBAPVFE^FBGLGCFG_BMLEXGAAFE@@JNRVJHFALFBEHQJCTbNDHCF@PlFLJSXCHFHfVBTNJ\\BPJXC^FAVNFCHFB@FFH@JF@\\ABCFD\\BDMCAAJKQBGAILOEGHILECQLWFENJHADC@QxNHFJNLDFA@CBA@D˜UÂmR@FBL@BD"],encodeOffsets:[[119959,40574]]}},{type:"Feature",id:"120115",properties:{name:"宝坻区",cp:[117.4274,39.5913],childNum:1},geometry:{type:"Polygon",coordinates:["@@TZbB@JHD@DODCLM@AP@LL@BNH@ETFN@`E@DNG@CHLBCJA@AICFKDDBKA@\\N@AFNAGRBFjFFFL@DHLBLFQPcXAZMJ]GAVHAIZJFNE@JpDRRDCLFDGXA@EFF@CFFPDfEBDB@DCHCFCJDJIJBLI@I@CB@@ADBB@FALADGDC@@H@BB@FZGFCCE@@FMLALJDAFFFEFDFCB@@AHCF@L@@BBB@BB@FC@E@@R@BEL@HEFD@G@AH@AIB@@@FEFEBALDDEFAFO^IF@JCBBFPNJJ@D@PRDCEKBAXL@BIFD@T@JE@BHHJORFDI@@B@JGH@@B@BDDLIFFHCD@D@DEE@BAAAB@DAF@B@H@NGLJLMRDNMfGIEPMI@GDAKK@KIDIJ@GE@CFDN@FE@GFEPGV@TCDFKHBBF@RW@DD@@ID@TJFKIKLI@EP@IGBCLAEKLEN@KSHIGYACSD@SEAMBBMGEBMQBCMIGKFB[D@HDLPHDBC@IFITDLG@IIIFGVBNJDLN@VIRI@YIAIHIC@CLKZCBEE@JECEIHEAKGDGECBGEEM@@DA@CCCBBEGA[GEDBBoNAAH]MKiIAWKQoIIPMFQAEEDMH@FMSUYIeF@EK@BIOEKJEBICFKaKPFAFSE@LWCCFMHDDEKESBOGBKIEIODLG@CCDEQCEDWEMDIEIB@EHGEEDAEAa@@HqDEJGF[AECCFa@WCEIKAAEQB@FCAE^YDERDDJBLNABD@AJGLJF@FNIAMLH@FPKLJ@FE\\BFOLGXMXW\\C@KPGD@JHDGVFBWN@AEAGFO@KH@JNFAHEHYLNHFCLBFBBHo^MAFGA@KJED@Jó¶EX"],encodeOffsets:[[119959,40574]]}},{type:"Feature",id:"120223",properties:{name:"静海县",cp:[116.9824,38.8312],childNum:1},geometry:{type:"Polygon",coordinates:["@@NGFMDATCNDR@CCbINEHNJA@C\\EEGVE@IhE–[˜w”epc¢·²›^QEKIEKIgiQDkehY£uSDBMkUDOJDHC@GF@CAFBFEN@C‹Q@BeP@@G@HD@@MHQKi@[IGCOCESE@GMA_OcCGDu`aˆ@VZzKDkJBLNXGDqKEWE@cFEFA@ƒISIi@@KMABJGBcMuFEzGVH\\ATSEUBeALCEMG@CEBUHUCGXaBPtUBBFIBFTDFF@DDKBFNGBJPHXDDMDCLJ^mBIHIL@LR\\@LCR[@@z@NFD@LLBNb@RHDBNTPT\\F@BJF@BXCFBHHBDLFB@HODADE@@JHVXCPDHCFTLBBFNCDCCCU@@GAABEHHZHBCAEdEjFDD@GfD@DXFCHF@ERFDLBH@"],encodeOffsets:[[119688,40010]]}},{type:"Feature",id:"120221",properties:{name:"宁河县",cp:[117.6801,39.3853],childNum:1},geometry:{type:"Polygon",coordinates:["@@BFLBFJXDb@DEFD\\BHEFIrC@Gb@FBCBFFGH@FJAJFNCXFFCRDCFDDH@CKJPJFALPHTALFCFGCENDDKXF@ETEBO‚bLELJDFALIPFAJL@@FfEZJTVENG@CNFFRBNEJOpJLRBXjJNLG^BBpMAAFC\\HHBAFDADDB@@CN@FFAHFDCHLHFBJGFCFUNKJJTD\\XUXF\\^F@DDDQXXBRLRCBDFEVCDLVDpUl@LEDJHAPRFGL@CETGPBTCDDVI@CFF@GFDCCVGLKEK[Y@MECISG@BKNSCGCKWEAaEBEKNGFSECO@GGM@GYI@DÅCMLHPTF@DJHAVVNKEGDETJ^[TJNNd@NOAMFYJ@@GFANDPEJB^aOadSTQSI@MHBDIEOKCG@EEFCKCqXO@@DMFENCDDHCCGJ]AKFoDaGGHYFDHKJiCMFGC@EQ@AEHGAC@IEAATKOHGIC@IXIFEoƒGE[JCFCDHNmRADFZMF[EEBMO{GU@AOW@@]ZeHBDEHBKEfQkuIWBs‡@EC@d[@[^EDMTKCEEcI@cDAB@FCBCACmOCG{PYHeBgPwPFDDALFFFCHQGSD@BHFAR[TaFYXMASUiGFL@DQNCJI@@D@PLDN`ETEFIGMCGBCE‘~CAIFDPEHGEQPHJADFJGHCJLB"],encodeOffsets:[[120145,40295]]}},{type:"Feature",id:"120109",properties:{name:"大港区",cp:[117.3875,38.757],childNum:1},geometry:{type:"Polygon",coordinates:["@@JFFL°_`ONJKDDFIFZN xlb~yFVNRŒrdJGzDPVFBCTNND\\UR@E`F@@Ip@IWGUoawOEE@ÏDgK{İEEMFëC—b…™@—KwOCDHHKBDJCDEEEAGHOABFABMCgDLSQ@CFEB‰MgYIDQINE@AUSwSAdYEHQMEyK[KI@GRMLE@@OqOoBOnpJ@BmEAFHL^FDB[C@BBDVFAHFJENB@sNEjQAMYsUgCSBGDJH@\\LjGR@NC@@G@HO@AfR@DŒM@EFEADBE@@HGDICCPlVANTC¤vgZlfRChjLJ"],encodeOffsets:[[120065,39771]]}},{type:"Feature",id:"120107",properties:{name:"塘沽区",cp:[117.6801,38.9987],childNum:1},geometry:{type:"Polygon",coordinates:["@@|ODHnPBDADEDA@CB@ddJFFLDNSFC\\]\\@@cFDˆ@nACOMW@M@ITURBRZNHNWRQšoO•j½f‡cqŸAqeiDÿÍyÓįFL|Ch@ÐFFxPpbHVJXo@@JCTR^BPABQA]^MB@bE@@FQBFVJRH@FXtPNZSBAja@@NƒDTŽLJrQTHFXZFB`"],encodeOffsets:[[120391,40118]]}},{type:"Feature",id:"120111",properties:{name:"西青区",cp:[117.1829,39.0022],childNum:1},geometry:{type:"Polygon",coordinates:["@@@LHAHRHATh`LHNHDG`HDGZ`D@FQDAHXFACNAFLVRTBFOfHDCVBFQH@HSXHEPFB@LDBF[bDbLFKJBFLADBDjLvCPEI]FGEIGCBEUSjcFiBIVWfaHCjN^HtwBBFGPBJGjFBEGECGDONMFAP]TDHQOWCMGAMHKIJEIGQ]aDlUG]VGEGDC„{PEbBZmE@@GH@BCA@FMQCFMYMJECELCMI_P¯`]R±œ¡¸od“f—x•\\gF@JUFFH[F@DIBGMMFaJDDQ@MCSDCBENMH"],encodeOffsets:[[119688,40010]]}},{type:"Feature",id:"120113",properties:{name:"北辰区",cp:[117.1761,39.2548],childNum:1},geometry:{type:"Polygon",coordinates:["@@ROHFFGCOJEDB’}DFHANDJHFEFSM_KC@O@CJ@DIRM@CEKKA…L…FKACHoLSJSIBETDJaEIIE]E]K[MYUYQILC@GF[MGNKEK@A@BCWECAIFEFYAGFOMI[OFuDiKACBCEKIAELaKaCE\\CA@KEAFOWGGTG@ERUACDeGEPSAUQKHE`FNjNFJADHHCJFB@DEXZFRRBJLA@AR@@BJ@CHF@BRX@@NQdDBBJhHCCZDLUNA^H@BKDPFEJ\\JMPfL^AJFFGLBDGLET@HJLBCFHDCPH@BIJFCLGABHNBDEF@BCN@@FHDDDN@BNEJH@@HF@DEJB@FfLNC@AHB@DHD\\IFGTCBCF@@JNH@ALKHBHCHBDMFEP@KYbHDEJF"],encodeOffsets:[[120139,40273]]}},{type:"Feature",id:"120110",properties:{name:"东丽区",cp:[117.4013,39.1223],childNum:1},geometry:{type:"Polygon",coordinates:["@@ZV\\N^L^FJFFJIbSCAFTJTIpKDGLB†E†KLBjHTVNBZWbE\\SBQGE@ATCRHDGEEKECBECxOhOfAZGA_YEEWSGqRKIS„C@Mb@BiTAMYsOEWG@IQEURA@EF@@acUOXQRYCUDCHDTEF[SUEgAYDcVGJM`iAWDWLQRMHUHgDsDBLHJFCFDFGHBFFVEAGHCJN@RJF‡PIhBD\\FENCPWA@LFBAFHBEJUEARCDIAEDQBRNa^"],encodeOffsets:[[120048,40134]]}},{type:"Feature",id:"120108",properties:{name:"汉沽区",cp:[117.8888,39.2191],childNum:1},geometry:{type:"Polygon",coordinates:["@@LMEI\\MTABKN@FCDMH@COAcH[AoēA™M¡Wa[Meq™pQRMXMGQYQASV@J@NNXDPmBAtJXlveRLFGACFGAYf@^X@BPV@|HNPFA\\FNEEYBCnQGMDCDE\\IHFp„EFWJ@JJDGHLPBSFB@JBDGHBFR@@FHDNEjDLICGZEHGbHpCLE^BHIDDCGDCFMNE@CP@rWLDEDFFH@"],encodeOffsets:[[120859,40235]]}},{type:"Feature",id:"120112",properties:{name:"津南区",cp:[117.3958,38.9603],childNum:1},geometry:{type:"Polygon",coordinates:["@@TLv@CNHFFBHGZFETNPhCVGNGRQXKXCjBN_HIdUZChBVF\\TFECSDGVCZDRQPWdVNA^]RBBAAOQ]DSE@F_Q@[VMCSMADUECOHycI‹qMQEU}zkaŸwENRDENB@ADG@@HF@YnaAOFƒ|CDFHUHH^kVbCR^JHIFLJNGHBDNPXGRSCO^EBMNCPDHHFAFiEIHOAEH"],encodeOffsets:[[120045,39982]]}},{type:"Feature",id:"120103",properties:{name:"河西区",cp:[117.2365,39.0804],childNum:1},geometry:{type:"Polygon",coordinates:["@@d@hZNFdcLYXKRCtCMOFSYEGHEAGEDMu@SKAAsx]GMTGt"],encodeOffsets:[[119992,40041]]}},{type:"Feature",id:"120102",properties:{name:"河东区",cp:[117.2571,39.1209],childNum:1},geometry:{type:"Polygon",coordinates:["@@ZBVFFIGABEEA@KXBDOFM[EACJgˆOIE@QIMGDBHUFEEGAEHECEDGIAKQDWLKZcdQPEP@FOFBJTJ@HNORJf@DBCN"],encodeOffsets:[[120063,40098]]}},{type:"Feature",id:"120104",properties:{name:"南开区",cp:[117.1527,39.1065],childNum:1},geometry:{type:"Polygon",coordinates:["@@NMVDCG\\E^B@HlB@YEDS@C…HsNSiMGDebUXAJEjidVTAFHDFJ"],encodeOffsets:[[119940,40093]]}},{type:"Feature",id:"120105",properties:{name:"河北区",cp:[117.2145,39.1615],childNum:1},geometry:{type:"Polygon",coordinates:["@@DBXFADB@L@LFHM\\NHED@JKZRb]QMRAFCJBDCBQYADMCAe@QIMP@GSIAIPE@E[EGH@ZEF]^HJAXK@KF"],encodeOffsets:[[119980,40125]]}},{type:"Feature",id:"120106",properties:{name:"红桥区",cp:[117.1596,39.1663],childNum:1},geometry:{type:"Polygon",coordinates:["@@J\\PNHEZBFEJELEL@BWGI^]FEkA@G]A[FDHUCMNEHJ^"],encodeOffsets:[[119942,40112]]}},{type:"Feature",id:"120101",properties:{name:"和平区",cp:[117.2008,39.1189],childNum:1},geometry:{type:"Polygon",coordinates:["@@D†T@FCHG\\FFOROMEgYc@"],encodeOffsets:[[119992,40041]]}}],UTF8Encoding:!0}}),i("echarts/util/mapData/geoJson/world_geo",[],function(){return{type:"FeatureCollection",offset:{x:170,y:90},features:[{type:"Feature",id:"AFG",properties:{name:"Afghanistan"},geometry:{type:"Polygon",coordinates:["@@ࡪ͇وŐǬϠڐŶӂʮǚڦ۾njƀ̚ІɣʪҴMوǯʲĹ،˒˰Nj˖ϪԈiżŬĘͺβ̈Ҕȏĝʱʪ¡ý۷ͪ˟̊ǰώĊԼϖׂ×ࢀAƬʋӧĥяƹ७ĭࣗǭӫλȤΣĪллΛ–͑ɳ̡ߛ€ͦ։՗ɅΥԕ²ԋ͡ɿ̳þٝŋğɻسDҵӇ‡܍થΓבôǝȁԇņ࠿űටіހހåզُƚßՔ˟ڢάҢιŮɲؒ΂ਸ"],encodeOffsets:[[62680,36506]]}},{type:"Feature",id:"AGO",properties:{name:"Angola"},geometry:{type:"MultiPolygon",coordinates:[["@@ȸصʌԋȘ˕͐ѯ֊æˤŠҬşŲɀɂӨԶ®ƤіHñ̡৴RfՉǞ͕ūԑÖԫ˪̷­ৃȼüκsԴŴϦ¹ĘʹĩСƨϿů̿î́ყZᦵ֤ۋպԽ໳΁᎝Š׋Ж₭—ŵÏԃϞկ~ԉƝЙDžÿՈŜ݊̂ޒªΰ˚ݶȨΆӘռːϐĘج«ӊʣ̜ɡԚȵԎ®Ǩʶͬʭ߼ǣ֚сՐĄǎΌŔʒg̎ĸៜ["],["@@ɉėɣلͼδʪƘ̀˽̩ǯƍɍλ"]],encodeOffsets:[[[16719,-6018]],[[12736,-5820]]]}},{type:"Feature",id:"ALB",properties:{name:"Albania"},geometry:{type:"Polygon",coordinates:["@@Ń˷ŢέΒȳiə˗ŧ»˙ϷСƛÐgȂү˰ñАîֶŖʼƗƂÉˌθаÂƿɨôǴɥȪďȨ̂"],encodeOffsets:[[21085,42860]]}},{type:"Feature",id:"ARE",properties:{name:"United Arab Emirates"},geometry:{type:"Polygon",coordinates:["@@Ƭ¤ŒɱڂƂ۞uԖ{ֺ֪ظՠՎԮdž˹ŖڑѕGçճƪŝϝǑE΅ʓΏuͷǝDZᡋъ͏࡚Ț"],encodeOffsets:[[52818,24828]]}},{type:"Feature",id:"ARG",properties:{name:"Argentina"},geometry:{type:"MultiPolygon",coordinates:[["@@ߗ§ѓ̔ԑx࣑@Aሞ͒ϵрؿનԋ୲ȿϙп"],["@@Ӵ؇͠ڰॠ“ƊǷ໶ോۊŷਆاࡾ͡Ŧχࠡ౧ࡒɭ़ŷڔƈނ٢ƎݐжLjфӝiڣۻҩ֟΁ॅࠃ૭ଧȽڥɣࡹT࠷ǽȇÝիËѫ੨ܙŗ׃Հν§Ч߯ઁఛ҉။ǩउĎǰԅǣػƺщԋ̏ࡱř̪͕߱ɗŜ࠳֨ʧҠˆʢѧޛʻڭԹūࡋȣ҇ߏEڃљʋؿؙࠞߦǝ˿ݭ঳Ӄձটލͧ΅Ͽ˔ࢍ֔ӡΟ¨ީƀ᎓ŒΑӪhؾ֓Ą̃̏óࢺ٤φˈՒĭьѾܔ̬૘ěӲξDŽę̈́ϵǚˢΜϛ͈ȝॺ͸Ǣƙ਀ȠࡲɤݢԊ̨ʭࠐEޚَոo۰ӒࠎDޜɓƶϭฐԬࡺÿࠀ̜ބռ߂צԺʥ͢Ǭ˔ඔࣶд̀ࢎĹɂ۬ݺશȱ"]],encodeOffsets:[[[-67072,-56524]],[[-66524,-22605]]]}},{type:"Feature",id:"ARM",properties:{name:"Armenia"},geometry:{type:"Polygon",coordinates:["@@୞ƀǨə͌ƣǛɁ҄˽ʁˋΦɫϘƏl׋̣}΃ӢHżχCʝɤǩuͧʖرȼĄФƛ̒"],encodeOffsets:[[44629,42079]]}},{type:"Feature",id:"ATF",properties:{name:"French Southern and Antarctic Lands"},geometry:{type:"Polygon",coordinates:["@@ը˃ߐĿˆDžɽϣಇÃq҂ŮΎÊǢ"],encodeOffsets:[[70590,-49792]]}},{type:"Feature",id:"AUS",properties:{name:"Australia"},geometry:{type:"MultiPolygon",coordinates:[["@@ߺ́ҜŘپNJԎÉÐঽ˽́ēگ̉ɰ׍בǧ®ԫ€ԭܘŗֈӝܸtϬռõ"],["@@̢ڇբ̈́˦ΡЖ͟đϋǴܛŸнɄĹɬܕąѥ˖֭࣬ѭצЋ֞λŋȯӔՃࣧ͜ͲȂ;ηȴźƢࢹ׬ԩϸ͋ڀڹʀڭtӏËԳА܋µݓơϵɩݡjӕǕ׻χއثЭ̫ٱ˫гʝܧ͕нɅػʼnׁªˇӕ̇व‰ޡ·ϫ͙ԕέ۟ψԥƪżѬҝǃ݁؉ܩɪӉƄӑÔ߿ʐիԮƻْțьЭ;߱ĸˢРȯزЧ׉ݝƷѮҬŶӞ͘ЬãجہܑԿ˽͏ڛٽΊ~ҀԿ،ѹ̀ǂȘઃԚןz߯Цຓāછ̝ख़˫ߡÈࢻљܯȗljѱ̳Ϳ܉qՅõݑƶ׿ğֽԁ҃ʕœуʁЗˋؕ֛Bࢽ՜ҋDŽlӖкŘƚȒ‡̠ĺאģӼѻࡖƏӒ˜ӎͭնsʚϋͰĽڄӓڔřΪτε˳ެиʑʞ͗aјеڎă˄țʦĠӠǢȸŘрęӮΎ؀Úٕ΢׀ۀˬЦΪٜ̰ϤàɴĻڎ̺ԚĤŶȀɞüҬoࢨʖҚώɊ҆ӲѐœͲvҘט܎ΠܩΦǚ̗Ј˂ТψǻĸٖҠаȮͨцƜ`ɼτĭdɂτŦОŔبϫҲӽՂMՖÿDZҦДڪϜɘſȾκӒԘ̒јıۺǂeі؛ˢ҂Ū֎ȻҀ·ۼɋʈĐԶʵӬʊ͂ñȠNJϬеɡ͉҇ͻ˿ƒĮͱʙп̗ЭÔʁڜҫ٨ˏѠ́؈ӻʂBѰɍŶʷߤ˵ֈ˼ǐҊǠόľҤʰڞŝОÔʔīӔŌنLjǠŽˬȮѾdžҦtʈ̸̾ʂЩÎՃȾķ˜Λ̨ёÚӇ‡̥"]],encodeOffsets:[[[148888,-41771]],[[147008,-14093]]]}},{type:"Feature",id:"AUT",properties:{name:"Austria"},geometry:{type:"Polygon",coordinates:["@@Û΃ӁCǎǻ˧էLJƗܽsщȏۛÞயɐȉ̊ࠧƣĭDžԗŢѕxϝƶźȴƬʪ²ьɹŤɜݎ•׸ƮЖ}ˀǣþƜšո̠ń̒ϰز˓ӀΆ̐ÚٶʱЂªϰǁãŃČ̅"],encodeOffsets:[[17388,49279]]}},{type:"Feature",id:"AZE",properties:{name:"Azerbaijan"},geometry:{type:"MultiPolygon",coordinates:[["@@ʞɣψDGŻ΄ӡֽŒщϰƃ͆Ǫv"],["@@ϊËƞɈԈͺѴѵђ׭ϺŸʸɧۗãƣٵƟ̭̍ȝvзȽ¥ԻѲ̂дʝʚ̿×যإk׌ϗƐΥɬʂˌ҃˾ǜɂ͋ƤǧɚȶƎضʍҐ¹ŘIJбҔɔŚʀ…׀ԙ"]],encodeOffsets:[[[46083,40694]],[[48511,42210]]]}},{type:"Feature",id:"BDI",properties:{name:"Burundi"},geometry:{type:"Polygon",coordinates:["@@Á০ɃϢԜßʲӎҀŸͧǸȏT˗ȹǭ͛ѫ̧̥΍Ÿ"],encodeOffsets:[[30045,-4607]]}},{type:"Feature",id:"BEL",properties:{name:"Belgium"},geometry:{type:"Polygon",coordinates:["@@؜áުǪՐοҦȝħ֧ɕĝһܿϦћßדІϷͶϷ`ũ̒ڪǔ"],encodeOffsets:[[3395,52579]]}},{type:"Feature",id:"BEN",properties:{name:"Benin"},geometry:{type:"Polygon",coordinates:["@@ۛįȹ׆žኞǛǦЮ̇̌ʱʞņѶ̀ĨǠξЪĀȀʤˮʘ̠F٘ә˩ȎӽǓͷĘɧСԳʵʳǁՉt՗µണ"],encodeOffsets:[[2757,6410]]}},{type:"Feature",id:"BFA",properties:{name:"Burkina Faso"},geometry:{type:"Polygon",coordinates:["@@ֹɐϽ‹̍Ƀϗǰƥ˦ϙǾÅӦɮΤo˴ښۢŬּɲȴОœΚǢŘɎٴϖdžˀ޼ΒҦŢɀLJՠJáСŔϣӀչ€НॺȏmֻǿʣЩÿǟν˿ħ݁lϳâ˓ƉωÖร¡qӉŘم"],encodeOffsets:[[-2895,9874]]}},{type:"Feature",id:"BGD",properties:{name:"Bangladesh"},geometry:{type:"Polygon",coordinates:["@@i׽̉ŶÆگʉѬµєDžКΕӨޟ’ü΋˃ҳΧǠũƵʃĠ͗øŽۖ̅لƜԒԫɤȆ̪Հ̼؅Ѽ֮̔ږεВ£ô׏ߞřު^Ӟƛϯ܅ϕµʷӍҢѥƎ՞ɶFѶ೯"],encodeOffsets:[[94897,22571]]}},{type:"Feature",id:"BGR",properties:{name:"Bulgaria"},geometry:{type:"Polygon",coordinates:["@@ʎΉ͚Ö٦ſ௾«иɌবȜ̩ؒӴĕѥΏ̫׹˔ӏܣŒࡥ˃Uлޅÿס̊ڧɱة|Ñ֊сːƒŢĝĴƘˌ͌ˀСδ÷̬ȸȐ"],encodeOffsets:[[23201,45297]]}},{type:"Feature",id:"BHS",properties:{name:"The Bahamas"},geometry:{type:"MultiPolygon",coordinates:[["@@ȵ£ɇӜ̿ʐǾՔʨ‘ۣ̎Jӥ"],["@@ࣷƅÏ̴Ђäֈ{~ɕ"],["@@ƟׯƷņ`ѮϓͪCĪڐϗ"]],encodeOffsets:[[[-79395,24330]],[[-79687,27218]],[[-78848,27229]]]}},{type:"Feature",id:"BIH",properties:{name:"Bosnia and Herzegovina"},geometry:{type:"Polygon",coordinates:["@@̦FȿσМ͓ūЃȡ™ƽû˙țūҥݓ͈ͅΘ͋Ȅϭ̾ǻʺЩϾǬΒ̞ȕǼǨϾnܠƓ׈\\Ϟȅ"],encodeOffsets:[[19462,45937]]}},{type:"Feature",id:"BLR",properties:{name:"Belarus"},geometry:{type:"Polygon",coordinates:["@@߼Mࣰ̈́ȚӄېːÿϔԜƚ͖ࣘࢮɁŢȻѲĴࠒȧĊЁǷɧՄս΂Ƴ»Ʊ֦Ʃʎɡ͝ǿڳˆljÿȠ˧ȸ՝ܝ¹ʵȁÃхͭĆݷ¡əȞ̿ƥ́ŨڍjफȬࡕàٱmҡɩГeϐʷϴԌǢLͰɷ͌™ϊ"],encodeOffsets:[[24048,55207]]}},{type:"Feature",id:"BLZ",properties:{name:"Belize"},geometry:{type:"Polygon",coordinates:["@@OŮĸžƴı̞ԔDŽZHūDŽGaɭƋεôŻĕ̝ÀăīщǓɟƱǓ̅ʣ@àॆPژ"],encodeOffsets:[[-91282,18236]]}},{type:"Feature",id:"BMU",properties:{name:"Bermuda"},geometry:{type:"Polygon",coordinates:["@@OEMA]NOGNG\\Q^McMOI_OK@CQSGa@WNLVWHFLJXVFGJ`ZRTDLeeWKIHGIK@@[MQNi`]VDTBHCJAPBJLVFjT^LV\\RJZRn^RH`TfJjZHHOTTFJP_NOX[EYQQKMEJOLANJH@HQHAARF@ZEPS[U_IcRQXE@EEKKOCGGCQCOGISKYGUC"],encodeOffsets:[[-66334,33083]]}},{type:"Feature",id:"BOL",properties:{name:"Bolivia"},geometry:{type:"Polygon",coordinates:["@@य़”͟گӳ؈વȲ۫ݹ؅ŗ͡୆ҋऺˆ߾ѳ΢ŏ؆ЫֲՌ࣢αۺȖ˰ƭ̶͠рh܎¤נǸ˶ܩഠزíѠnȈʪ݀;Ѷ͂સƚęؽļ͓ãࣰ֛ݫऴƑ̻ͦ֨ǕΐʑՈTӦʟšӟǐʕZγʓa͒এྖ“ūӟĜͧҞɽȤԹƫڋɯρĄӏʿǥaʶ޳јޭ^ัʓЕ݋sҋͥ৕ƉǸ"],encodeOffsets:[[-64354,-22563]]}},{type:"Feature",id:"BRA",properties:{name:"Brazil"},geometry:{type:"Polygon",coordinates:["@@૮ନॆࠄ֠΂ۼҪjڤуӞеLJǒӜŖӼBҦ̡ƴ̿Ƌ̻œį͔ýޔƿʤ֥ɪ΃ǏࢱLjÈଜʝҴˀǦăӐɰςƬڌȣԺҝɾěͨŬӠྕ”͑ঐʔbYδǏʖ™ӠӥʠՇSΏʒ֧ǖ̼ͥळƒ࣯ݬä֜Ļ͔Ěؾષƙѵ́ܿͽȇʩџmرîӃƟϡĪÈ౨ۏӷݏv҄ͅ֏¶DzΰұԞΓݴɜƶA΢ԖʎċҔɊ̈Ôϼ०ֲێNJŔŴݴŸϚᘰpθſӔύ̬LؐӀƒǚē†͐ӯĔYՀ࿖k˦̂ɸˉǐӷǂļҨѻٸÆnjʲشȞΊƐĮΤ׸ʆ¯Ǯ܅ðśՊ’֞ϓɒǀþجŅڜȿʐȤ؀žल̮͎̾ŏʂѪšȜȗʼnσ̀ŵȖϷɷ̏ƅ܏ɌыÔϳԬϿЮ¥Ģǒˆ˜ϠƦ˚ɢҬíȲŠҚçøǢƗǘĎʐͺõЈĒӔDZξǥʺɪȊ•ŘɿДÒ͒͊ʴؤӼޒ˺¢ȺҫҼ฽҈Ƒxׅمەʾʩ๤ƁŠࡃٔր੐̟ඊԡШӱƏҫ঎ʶ࿐ѹఴŽఔ۝੸व٪ʏܖ‘̦˅˸੭Ɣԗͯ൹ёշஅୡՙोثܯȿgɻءÒ༽ɹಓęօˇͧƫ૱࡛઱ƛࢁڹηȟԋ࣯Fೕ͓סύवʗ঩ڝ܅࠯ũطƔҫƽࡓȏЧחҥट๕݉ڗ֯Ͻϥߛ։ӑɷӈψЊӟֲڇҬࡹՠ̹{ࡅٰձę"],
+encodeOffsets:[[-59008,-30941]]}},{type:"Feature",id:"BRN",properties:{name:"Brunei"},geometry:{type:"Polygon",coordinates:["@@ͬ̾܎Ң›Я·՛Б€ǭ˹ϥѦ"],encodeOffsets:[[116945,4635]]}},{type:"Feature",id:"BTN",properties:{name:"Bhutan"},geometry:{type:"Polygon",coordinates:["@@΂ˍÏԩۇ{ۿÈՇſޅ͊kǚ֌زҒɈ׸șѺqπɥ"],encodeOffsets:[[93898,28439]]}},{type:"Feature",id:"BWA",properties:{name:"Botswana"},geometry:{type:"Polygon",coordinates:["@@ǜƭ˄ӡॎइήĝD̑ʚՑٰŹ՚ϝ஑أݭع˩֓ʧ́ҙãƧГďʽ՝țہ¤БɾΟĸХșȵГЉʧпϑ׻đȇ̐üԠӽߚɧŲAរࠤˆ|Ჾش„ಖ͎̎΍՜ͤʮDӂȎưÙ͔ڣ"],encodeOffsets:[[26265,-18980]]}},{type:"Feature",id:"CAF",properties:{name:"Central African Republic"},geometry:{type:"Polygon",coordinates:["@@ۜÚƺɎƔgȾȏ੔͐Τ͠Ѭ̌ĉ̐ʂüߺ½߆ϴ؊ࣺю;ՐƜĪΫӜԿF΃ƋΓÄʻ̆ʍٖοҢͻT˗֠ѫΖεɆԋغͩƊˉˣęաpكĘ̹ïųȱ˕}ͧDzधнϥĎŗÝʥԕطǐؙĊ՗̴ۓ˸҉˓͛яùדգ²֩Ƙԅѻѯޱėʐ›Ϧϧ˔̳Ѡï̠ЇѮæʢċΞÞٴȬƴц࡜"],encodeOffsets:[[15647,7601]]}},{type:"Feature",id:"CAN",properties:{name:"Canada"},geometry:{type:"MultiPolygon",coordinates:[["@@؎œުxЯ΅̵Å੥Φȿˬ͆ʸ̎С"],["@@Хcઝ˂ޯІ̄î૆Ɂ࡮Η|Ʒ"],["@@хŝൡϢʥ̘ݩ̌Ưʈࡻư͕ҜðȚࢨǿԨŵ߄ė˺̃дЋ࠼΍Όҩ"],["@@։ܿո˴֠ǵ̏̉ݚɱϰȴ࠼ʵʹ؛טƞņѿʼԷΝ݉ϝ‹փǂǾیɻńইܯԅ†צЂ߫Ȳࣙ¹࿅~ŹʠԼ̐λɬ۸Ԓࢄ೾Զӎܲ̂϶™Njɫ҅Չ"],["@@@@@@@@߰äʥ॓ܶگͯDԑϪ̵ϮчʾƻτºˎЂŋ"],["@@͡ѳχîəʢ Î͖ʦΆkɈǣ"],["@@ঝҧץnǿɪزϲ଼SiǍ"],["@@ƼυјżӨɗं˽४ʽöЍؤÞ׶˥ݙ˃ಳȬҽϚ࠭ҁ஡ѣ˿Ӯଗăܴдņڌ˺ޔ؈å"],["@@ष¥ȿЪΦҼޖŜپɷXέħřձʛ"],["@@Է̍ଉʬۃğଫϘ݊ʼטζࢼʃԎƯʦDžԠ͍"],["@@G࡭૰ڄ৐եʡح߾֥࢚؈ؖܨ°ईஞÝఔūૼй¼зس҃פ҇ŃУ࿩חୡŻࢃʨʣуߵ۽ʓοই֩ளÇڏΡÇձ঍Ŀਉڻ࣭ु͙ڏ±উంƕϜ޻ϼّ୲ǔ༞εࡀ͋׺Ѕ੆ɳࢸΟ൶µࣴąƍܫʼࡋ،ळనߗ٨˚ҔࡺѭೢףѶഎЀ॒לҮהç֭֘܌৷لলࢤνݾ˫ಾגȘ෸ɫࡸć۠ɚ޴˵ਚӣʮ͙ຄÛ}۷˪ਜ਼ގſ،ӵ௖Ұߦऔ֌ϸٺݣબੳघ৙͵Յ૤Ӂݰӓംɏբˍͬ܃ټŏͶͅÖऻ؍́׽̏൯̗੏ۑ෇ƋᅛǮుPࢇÍ۱׽ੳω௉૗ॵޡ܌Ɛഘૄᄈ۪సČݔЫߍ֟ˊࣟ˜هતп൸ŨࡆीÎ؍ժ̥ਣսᇷԁ࠯ͽय؁ٓ֍܆ฤ۞഍ƒणĹջӆBନύʐ֛ƛ˧ɚٙىʱٹ̕ϡΥŽˏ¥čȹ໽A౥MϛƷࢵ؃Ŀßˍ͝ޗBࠛGϛƅƊǑøʯeďષлࡽſউ҅Ɂ@˷ƂĥŦnĔȂ̎ЂҦʘӺǙܴǵނ࢕ЂľƬūĺɳ@ǛƆ¥ȤǍēɥ€¾ĊȡĊćɚٵːڹ˪ࠑ͘߁̨ݧʃ˝Sਕɔڻʼnࠁʺ࡫Ɔו¾ʻƜƫҤ˳IE͓჏BᮝA᭯@ᡃ@ᠿ@៙@ᢡ@ࠛ@᠁@ᛷ@őF྽ࠜ׵δຽΐҳݖŤԨ੻ΨƧڴ৭؎iѠҲКwՌෙ՘࡭ॠՁ׾ޑϚ֣ΈѿѢࡇ˕ࠇҹݛւדπࠋɸࠟ|JⷎNᷲ༬ȭ೘Й࢘û݆ΖৰˀఢĹ఼τ൘Ⱦ־ΑظȠȊЄ׈ęෆݫ૦֬ŖّਔƐ͆ʖৰ·౼Λዸ̭ୄƛࠖÄଊэ஁зຶǷᗘIJܒƦࣆԋࣴьࡩΦժ˼৾žڦĎڴȩࡊҗरä๢ϛಬƄ௬oĭԺݞƦದ˵KߑՖڠڰuϞࡊ࣑԰কͺäघশ؎ૌƇࡘχଞॅݗЭ༠ǝ"],["@@нϿሎʬୠщॊіސ˟یࠛфΒ׭ࡰ݊Ŭ࠲Ƈश͹ՆࠉʼץථеະЉĝσൡã՚͓˱ູ̯Ƃฃɪঋ»ཅ˷ᒃű๻āҕІଫɮݙģਛږ֔ĚಘƜஈ›રƦྷȞᅗã஗jѷ̴ዎͲಗ[ืɚ۶ـגͮᖬԠ࡬Nj"],["@@݉ևಹך˸Ş૸’ٔȁ"],["@@öɵࢿ|ࣟjࣿőʑ¼ऍѾ˜̠ИÈነěชң"],["@@ڎԽޤڴᒆΈ෺ࢅůջဒʒߒͮሀыୄЏŊν༚Ȑ࢘՗᎐ܸͩ͹ߐ޻໯ϹጘչೲȁீޙೖÇʽכ้ঋਗά೓߲ઙĿŁӕࢪӥଜϯΌɟմࠩ́׿੕ɪᑏڨஎܣ࢔ԕƎ̉ᗱͲᅩӤ৳Ц̌ʂయќ௥Т`ʑᝡƅ܃˾ֆؤ཈dႸņ˫̜̊оચࠊɳϊ͕˾౿Рၳ˺՞ɆࢷԺ݋´ڏ˸҇ʛ຿ŅᵝȈᄫʚഹŴۥ̐࢞Ϧ஝Hˉ࡚٦ݨࡺ΄ᓪɢأի"],["@@৊ǯຄńɖʑ޷Е౜αƱݳ൝͗߳ê׉͎ᐡٮjˎ႖ĽएռসР"],["@@࣓عय़ŒԽ݆`кѮΨ࠰ɮც‡ྈȱళݟ৉Ǎ"],["@@ᕍЙѷςኹѺήΤ׌ؘܰւࠑԦᭊƀ஬ǧᒰ±ࠄʑࣖΝ੍ɃᏝןਫי@ν"],["@@ҙ͙௝Øৱɖ҂Ϛீɨܼ̬̍ˇ"],["@@ٞϵ€љϣس൱đࣗƈjӬ൝ÝÁٮࣜౌ˺ஂµÜŎ"],["@@̙͢ݠƘࢢ™ƪЩԝЋ᭗Žᑯη౩mŅ˜პϊ④ij୯Ʈପࠐ߈ɾᛄ˳๶ӻฺÛறߨޔ̪ࢄĭ˲Џ"],["@@ढ˓ကFܨˡȑ́८ȍՔȧଊ™௬ë೸ǼႊðീÏ࣒ͅȊ΍ԽɟభǷ੽ĸᜱŻႫcഫļᖁ˔̃ҦĹжࡇξ჋ĺঅʼ͂ΈႾÁ"],["@@ŗ٣٩̇޹£༝Ϋ഍ŹଗǼ@@ුؼႮծಆ[ସŬ"],["@@ϣy༽Âɡɼၜ]מƻĵĩ"],["@@༩ʋఝ˔ڼˎ௮Đஈſ˩ʥ"],["@@৽ǏඉBbŤࡴʦҌદǝ"],["@@కǥۃȚέ͂áΎજ‘ӪÅ৐̇ɫ̣"],["@@͜Ε൏Ĥ൩˘ሏŒߺʠ৫ȮÕ͐࿶ŕᗢ̫ٞЍ"],["@@০˕ଽʟ༇ك๥Óდņࣗ΄^̦ڔɢ໡Oए˨ՑϠ׌ώ׊ʲࡴÎοȖዜ¨੶҅මǵ൞ǃڒև"],["@@ᖢßᅮŅ໤ɫ™ɡᏅη᎙ǟݻȉᆬJጡԙേʃ෯ۇႿƓՙǡᡷěୈĿׇƭ۞бߙ˽ಛʃЋ͡୫ʣŞȏ෬lȳᖟԋᔧɴឿŻధĸཟªĿЖ༊Ȑб؆ԢÐᖤγ଩բഹLjڼ͘๰Ȩʄ̊஋͠ΥѠᘞ—ڒĝ಼̪ቃĬ᰽Á๣˸۩ͼগʘȁ˺దLjঘ‚࿲ƌం̺ਬ©ࣤɽٔҒૐƈບĢᢲ–Ҁĝ᝚ƚᆔÁᆒÁ"]],encodeOffsets:[[[-65192,47668]],[[-63289,50284]],[[-126474,49675]],[[-57481,51904]],[[-135895,55337]],[[-81168,63651]],[[-83863,64216]],[[-87205,67234]],[[-77686,68761]],[[-97943,70767]],[[-92720,71166]],[[-116907,74877]],[[-107008,75183]],[[-78172,74858]],[[-88639,74914]],[[-102764,75617]],[[-95433,74519]],[[-123351,73097]],[[-95859,76780]],[[-100864,78562]],[[-110808,78031]],[[-96956,78949]],[[-118987,79509]],[[-96092,79381]],[[-112831,79562]],[[-112295,80489]],[[-98130,79931]],[[-102461,80205]],[[-89108,81572]],[[-70144,85101]]]}},{type:"Feature",id:"CHE",properties:{name:"Switzerland"},geometry:{type:"Polygon",coordinates:["@@ƫŹȳϞƵіwá΅χƙةŀǻ͹ЏơƄһ˵Л¡αǶ˽ςБſ^ϠؚҾɈϤûɲƞ܎MǦǼ࣒ʱ"],encodeOffsets:[[9825,48666]]}},{type:"Feature",id:"CHL",properties:{name:"Chile"},geometry:{type:"MultiPolygon",coordinates:[["@@Bም࣒@Ԓw˧ͻܛʻЭ‚ӻä؏ʨ࢟ŨੑҸ࡫Ҏୃशۘǭ୼֗૜̟ѢϬ˘ֺޠΎװı"],["@@͢୅؆ŘĺɁ˿ࢍࣵг€ඓǫ˓ʦ͡ץԹջ߁̛ރĀ߿ԫࡹϮฏɔƵCޛӑࠍpۯٍշFޙʮࠏԉ̧ɣݡȟࡱƚ৿ͷǡȞॹϜ͇ˡΛ϶ǙĚ̓νǃĜӱ̫૗ѽܓĮыˇՑ٣υôࢹ̧̐֔ÄgؽΒө᎔őުſݝPЙȷݷ̣Ɖ޹Σoॅ˚१ג@@ਲ਼ӔˁՒʄӰх֒Ņ෤Φ߰ࢴٰౣʔߞݒ˸ඊत̏Ѯგ֝ɠʿ਻ՉŠ˂ல˺༒ϮָʍࠎéूΠ„Ԩപ׈എΤబȗ఼ʤۚĵਞӮਆưྺ˒ნˀሤÕ൘ǩ஄ќɌɦњЬֱŐ؅ѴΡ˅߽Ҍह"]],encodeOffsets:[[[-70281,-53899]],[[-69857,-22010]]]}},{type:"Feature",id:"CHN",properties:{name:"China"},geometry:{type:"MultiPolygon",coordinates:[["@@ԑഓΫۏѷ܂ĩخӶࠜڦَϨʡƣԓ","@@ܩЗۏʺyܢаϠࣾɾӚoȊ͍σσșӟ"],["@@ฬˍ঺ׯͼ߃౨Cܰͨ൸ʜѳݱ͙̭˽ः֡ࠇ৵ƪܝ̑ɜܙť঳ѕwLяթӺͯһಙαƀѹܩŒЍ˂ֽ׭ऑҋۃա୭ʑأϽࣝɭ҂ϴǭ͞ږ֠ѹѲܷ̓ॉ׏ԫթ࠙¡ѓϻѸ֩یƏ„ϕڔʕस׶ݚ͝լuƌѱஓɻϻҏࠇућיࣜҥͦࠝԞޓ֮٥_دՅɯȪ҃ӶʻŻۃɇڗҷ÷ؗࣧڹિޭোିޡୟۻृĩԣύ̃˘Ӈй୭сࢵŹ˻ࢱҭ·ə؎Ȧ͘ૻːЇƍࡍɔЏ΀ƄӜޏƶЙܑ̀҃ࠇīڡJ҉ȳѥūŶ॥҃x÷Ȣ}Ύ؝ʓεƸر͂ʔۤՏǎȧޜࢱƓĴাߔۮ”ۚ{٠νȨ˭ӶӭÙࣟŲ˴ΜϿԺ׳Ν۵ȸॷ՗އسڳĿοɦѹr׷Țґɇ֋رëڌԟǭওĈोȖڿτٵǔ˯ЖҽŦࡓոکʴΑȩଢ଼טࠛՒɽऐ׾ő‚іͭјĐۆࣙঠ൧ͼʝ٦ةϼƫʌųӎˆ͜ԛȔ˟ďɇިʈȔśȠߤЈ׈ǐࢸő͆՜ંIJͮ̚೜ҔŠȐãӐּɔݱฦဘͲјȈ؆ຒဠˡҲϞ¢ࡆۦĀٖ֔͢èɚו۸ѽப̿׆ڱ͕ঙ̢ηূƝଆŝ৪ԻԲġϤޟӲӿऒnჄȉ૤Ŝࠦůఔԛ৮BόʽঐҌബ̈ాŒঘ̒׾҈ך˰Ƌˤˍ͔ѴըӀùࡺǝ࠸Ѿ౲͚؞֊נʆ௠ŐڐĥĠ̘ݿזګː٥̳ࠣžӇŃɏΆר࠾Цو৚̓ஆՎQτݸࢾҲːWҪңȦۜмਰƲ૜vసʡ݈̱԰ࡏ̀α̊ԩ̶ࠕ"]],encodeOffsets:[[[124701,24980],[112988,19127]],[[130722,50955]]]}},{type:"Feature",id:"CIV",properties:{name:"Ivory Coast"},geometry:{type:"Polygon",coordinates:["@@ϣUוǒ՟Wহƥ׍ʍ̯ࠫNjvÞۖĄŀ}ͨΣΚˉÈʕɲǾώčО ʔƄB¸ξÝnjĄŜ̸ĶȹڨȗΎæ˸ǘÞŊúɸųٮOƸʖƢgʎĦžΫȞłΌŰϚǽƦ˥Ϙǯ̎ɄϾŒֺɏɠ஡Ο۷ɕेθܣ›ͧ"],encodeOffsets:[[-2924,5115]]}},{type:"Feature",id:"CMR",properties:{name:"Cameroon"},geometry:{type:"Polygon",coordinates:["@@Ľ°ӻŇԝŒЋÅ൅nŬڒ͟֊ϧƚǟϖɋŦXɶɎתЎ߸ʒRԄӮ͈bҾΉ־˲ĀΔȌͺžь҆ΊǞךDzȊŢѨɜ՚۾ٲ¬˨ĠƲͫͰ‚ˌʂ¶ͮ՟Ê֏‹֏ҜޅҷTʁÏϥČǻЅӸөμƛŠΏˆ׃ſɩх࡛ȫƳÝٳČΝåʡЈѭð̴̟џϨ˓œϥĘʏÓґڛȤڷɜ੗"],encodeOffsets:[[13390,2322]]}},{type:"Feature",id:"COD",properties:{name:"Democratic Republic of the Congo"},geometry:{type:"Polygon",coordinates:["@@»ঙͶŕˑ̗͓ɟ͍ѫǯϷ±ګț͍Oهʍɹ‹ԃŗÝýҟɄϡÂ৥ưޝċѧǘӣӤҹҒ੕ͥĒ૿ƙɣĵʇՙȊχƫষĻࡇɨƫט͝ɲƴìٟࣟR·Ҧ̳ΨٟŠȋѰԣ˅ڧŞ˫ϢՕüϽqµʾ́rϥºԳųιtȻû®ৄ˩̸ÕԬŬԒǝ͖eՊ৳Qò̢ѕG­ƣԵɁӧűȿҫŠˣş։å͏Ѱȗ˖ʋԌȷض៛\\̍ķʑh΋œşʼɊʀμƎɎ̪ǰɚđ˼͐ҜSÄʃ̼ƩӶՄӨШɆːƒ۔θࠆϬўքМĪˌt̰Ǝ̆«ӊŀݖǐԾʦ҈¸Ԕúה͜ѐҊ˔۔˷՘ؚ̳ĉظǏʦԖŘÞϦčनоͨDZ˖~ŴȲ̺ðلėբoˤĚԘۙϘķɤƖϲÅҶDzȦΫ݊֏"],encodeOffsets:[[31574,3594]]}},{type:"Feature",id:"COG",properties:{name:"Republic of the Congo"},geometry:{type:"Polygon",coordinates:["@@̿˾ʩƗͻγۏࢸٖҪ̓֌˾ɂ֦ĺäό҆Зݐ•ʴЈł֒ĝڀЉӺζ঄ȽǘسçɻѢÔξ੘ڸɛڜȣÔҒѰ޲ԆѼ֪Ɨդ±·ԓʥ҇ǏԽĿݕ¬Ӊƍ̅s̯ĩˋփЛϫѝηࠅ„ۓɅˏӧЧӵՃ̻ƪÃʄқT˻͏əĒ"],encodeOffsets:[[13308,-4895]]}},{type:"Feature",id:"COL",properties:{name:"Colombia"},geometry:{type:"Polygon",coordinates:["@@ΫȤЭ˨ʅƅ܉Ŝȱΰƽ_࠿Ӓŕʺ̼ڛтȢ̦иÊΞՆ͐Ѵ̳ȦDŽӦȏސǸɚƃ܄ͻ҄ņТ˔ÑǂʠțӶĺŬѢـהΌĚT˦ƺ܂ӖϸՊfäǪڂéڌъ͞ȊОК̖»ɚɛǍ˱գƕɇп͗ʋʓ̷Ĺ׵ɷӭѢÇņϭȄȁâ͹ij̵ˆǫȸéȨ̉ઊĄӦŃעܡͼĚ؂­ӐĪ̔ƟƱҍȇ˯ß׻ǜ֑ʆʟ†ȉэл̨ȃɠ̋ʰ࠹ǁĻǏӸɷˊ˥́࿕lZԿӰē…͏ǙĔҿƑK؏ώ̫ƀӓoηϙᘯп҂ʣpժࡤٟϾԍị̈ƤҧɝصŀӵࢤϳɐˍІ֑Њɡā"],encodeOffsets:[[-77182,-155]]}},{type:"Feature",id:"CRI",properties:{name:"Costa Rica"},geometry:{type:"Polygon",coordinates:["@@җȆǟǮĬƤ‰ȄɷȪͥǔ́ņÅʖəƮÄʑǗȩȓɸˑĊŗǞLʮŎˆʁŠȖnjŴňֆɝȖŊˊéƔǥʜÇȪDzɈҙ͖ͷЂΩ͗õLͷǪűűıƱëǟ©Ǖ"],encodeOffsets:[[-84956,8423]]}},{type:"Feature",id:"CUB",properties:{name:"Cuba"},geometry:{type:"Polygon",coordinates:["@@ܨÑڊW߄˹̭ͮ޺Ĩ̔ȡ܈ԳԺϛˢ\\ԆǟÕʁئ“ٌ΅ıȟ֑Ń֡¥׃âளą֜Ҷ΁ɔէÈ̃ʐȥӎӃ޵ɦʥǬભž̋ǐ̀ɀࠗ¨׿ѧΏ[ťȳеğΫĂѺʸǼ̤ϞȈіǎَĄȰĢ"],encodeOffsets:[[-84242,23746]]}},{type:"Feature",id:"-99",properties:{name:"Northern Cyprus"},geometry:{type:"Polygon",coordinates:["@@ÐJŨȮ؄Yކʢ֧ΧÔƿęˆLJÙűj¥iĎѾNjVɫïƿ¬"],encodeOffsets:[[33518,35984]]}},{type:"Feature",id:"CYP",properties:{name:"Cyprus"},geometry:{type:"Polygon",coordinates:["@@€ãࡱͿЩŊȟͶЎŒǀ«ɬðnjUÒ½j覎ŲiLjÚ̇"],encodeOffsets:[[34789,35900]]}},{type:"Feature",id:"CZE",properties:{name:"Czech Republic"},geometry:{type:"Polygon",coordinates:["@@ϯǂЁ©ٵʲ̏Ùҿ΅ر˔ӃΰѕȬėΠƧʠؒǾ̸Ⱦ׾ǎɂdžɜīϒĖЊ˓ؼñ¿ɳҘǧŲɒּĥĄʿز»ϮЯʡCŽƯȕ—ÅȑLJ¡wý˹ēϋbšȁ"],encodeOffsets:[[17368,49764]]}},{type:"Feature",id:"DEU",properties:{name:"Germany"},geometry:{type:"Polygon",coordinates:["@@d͗ࡔțS̗ࡢǂҾɰॊͧІˋȞёɹɣ̨̙Ⱥ҅ß́Έ՛ϑĕɛĬɁDž׽Ǎ̷ȽؑǽƨʟĘΟіȫӄί̑ϯ̟ŃŢշýƛʿǤЕ~׷ƭݍ–ţɛыɺʩ±࣑ʲǥǻ܍Nń״ьֺ௅ƸЇɘ´ςǗȐĨ֨ƗࢢԎ@Ɉ͂Ⱦޔƿ˴ǐDz۰°Ƽȃ֮вȓ̀ӈٌōՠŸ"],encodeOffsets:[[10161,56303]]}},{type:"Feature",id:"DJI",properties:{name:"Djibouti"},geometry:{type:"Polygon",coordinates:["@@ȤʹΑӏȩήɯ̱҇ȅƬȭÏҷb_ʮßɶ˴Ѐ̐ϊήñʪȴ"],encodeOffsets:[[44116,13005]]}},{type:"Feature",id:"DNK",properties:{name:"Denmark"},geometry:{type:"MultiPolygon",coordinates:[["@@ԋڹ࢟ӄŝΒ௼˨ˎу"],["@@ȵ̓ʡĞ؁؁ɮХ՟ŷًŎͽҲ}࡬Ɣɪʌʦ݌À̐ɴڮʂƒѝʟ˙ĶɽҘŵ"]],encodeOffsets:[[[12995,56945]],[[11175,57814]]]}},{type:"Feature",id:"DOM",properties:{name:"Dominican Republic"},geometry:{type:"Polygon",coordinates:["@@ŀƞپIӾɏɜtƴ̕Ҡhʡϐ‰Ю̷̯ͿЍǼϫ•ˡ¢ƱƵ͑½ŷȲˣťͳֻɏƆ§ʎjɬɍʦȲƚÞ͒óҜ"],encodeOffsets:[[-73433,20188]]}},{type:"Feature",id:"DZA",properties:{name:"Algeria"},geometry:{type:"Polygon",coordinates:["@@ᮩཽᝩ࿷இϑटćU՘ϵƌԹʊȧЀᬻᆴᬻᆴṕᎠfnj@ÊQ঺ബب࠼Ÿێɦ͎тচͪ˜جӢòϞ̶સƚƸ͜ɛDz̃ࢲ¹Ԟ́ՠ߰ҠࣦƢՌΎ߶ʰ෎Ƭർæшůߊͨ࣌P΀ȝֺ¾ǟћƄߟȡۙԭҵôمۊԃRȯԮ͹Ϊຝ˖ݏ°ϵƧۇÔϥŃҟòՇͫΗӺؓŽέ̘ҵϼƸڒϷςՃ"],encodeOffsets:[[12288,24035]]}},{type:"Feature",id:"ECU",properties:{name:"Ecuador"},geometry:{type:"Polygon",coordinates:["@@҂غǻξ͍ϵԉςǞʀƙބ̎ŴƺԼ͆զÍ΄ҢǸ׀Ͱࡀӑƾ`Ȳί܊śʆƆЮ˧άȣŞٓʽճࣷ࢟য়ͧԥܵǃ֣Ӆ΋ΙъͻĞ΍áw̮ʈȨıΔ"],encodeOffsets:[[-82229,-3486]]}},{type:"Feature",id:"EGY",properties:{name:"Egypt"},geometry:{type:"Polygon",coordinates:["@@ɽͷǹىɫѩȝƥ˩˔ϛϒ׵ஸđùΐࢯԪࡋٌವ̴ҙ˒ӃݮछǗƣ‚ճ঒ݭƨǣΏ@Ὁ@⁩@@ᶶ@Ჴʥڲɐ԰Żά̤Ж૦b߲ɝ࠲ʛϴſ٨ˊΌʊݎêװŃɮеȜ˜ڨȣټ³аɄւ෽"],encodeOffsets:[[35761,30210]]}},{type:"Feature",id:"ERI",properties:{name:"Eritrea"},geometry:{type:"Polygon",coordinates:["@@˻˖ΉӰϋ˒ɏܷ̄ͶֻXȭǬӯȡԛϢʽط঑ǬęʹβఀĊ֒ˆʴؤƐьӒӦঃɴޗҢУବߏҲӍҖӝˀ˿аʧʩȳέò"],encodeOffsets:[[43368,12844]]}},{type:"Feature",id:"ESP",properties:{name:"Spain"},geometry:{type:"Polygon",coordinates:["@@¦״΃θஒ؆ਊƱ૾NࣂƝۦªമƒͰ͛໺ϡ̨ǺीϝআŊ®ӥߓ֓ઁǯõ˱ԩү͕ہ͞ӑӟϑǹճىǗש٥੧_ߟhՃ͍̓ͅЩê̵˴ʃӚ޷žé˦̶̀Śɬ̃ʢɶրͳԌδè’ЈƎŬZپϲɪɻфөˆƝŁӹCɁЬ΃ū̥ɇ"],encodeOffsets:[[-9251,42886]]}},{type:"Feature",id:"EST",properties:{name:"Estonia"},geometry:{type:"Polygon",coordinates:["@@ĮӸ̱ŁՓ̘ñӘਫ਼ɼ੔Ũ࣮Ƒࢂ|Ŵƣׯӝʞ޵ΫˉۙDܡ̸ρļ܏Ʃ"],encodeOffsets:[[24897,59181]]}},{type:"Feature",id:"ETH",properties:{name:"Ethiopia"},geometry:{type:"Polygon",coordinates:["@@ԜϡӰȢȮǫּWܸ͵ɐ̃όˑΊӯ˼˕̏ω˳Ͽàɵ`ʭҸaȮÐȆƫǽ̴̕ҧ̴Й̛͎ᩨঽۺNᛛᡃફ™ݟףաeɯ˅ַB͹˴ލΙʝΓ֕àȃĬȟwˇT੟܌ב@˹ˢ@ҾѧƘӻࣴϥȚƧʹэЦԧÒ˸ӐҀrŲʰ[ݲʞࢠЊɾĎ΄ήٜԔи΀ࠠƆܠ঒ǫʾظ"],encodeOffsets:[[38816,15319]]}},{type:"Feature",id:"FIN",properties:{name:"Finland"},geometry:{type:"Polygon",coordinates:["@@ūיಀ֓ޡى঎ख़֡ܛݴس΅յఘֻ́ѓޭӟᅡੵໃá๑̯ൃǯӡҞ߿ˠȈࠢСݶАӪނՆ኎࣮֖Ǭē΢ୟЈ˳͜uಒ಻ֲ૩ЪԊɞतѻલ¦ࣘȭߠϊЬ؞ಬ˶઄ͯΡכ"],encodeOffsets:[[29279,70723]]}},{type:"Feature",id:"FJI",properties:{name:"Fiji"},geometry:{type:"MultiPolygon",coordinates:[["@@̂ʍƓѭԳŗҩļąτ͖̀ϤĻȼƐ"],["@@՛ǯŅ̼оǤˊ°Ӱˀ@ЧՕȷ"],["@@é­@ШǨžĽЗ"]],encodeOffsets:[[[182655,-17756]],[[183669,-17204]],[[-184235,-16897]]]}},{type:"Feature",id:"FLK",properties:{name:"Falkland Islands"},geometry:{type:"Polygon",coordinates:["@@৘Ԍ܎ȿԌʹڦϙʥ̋ଋʥϙ̌܋ϙпϚ"],encodeOffsets:[[-62668,-53094]]}},{type:"Feature",id:"FRA",properties:{name:"France"},geometry:{type:"MultiPolygon",coordinates:[["@@ˣ٭ϡǠș֢ǜ̺ը͎Ɯܛ"],["@@הЅќà݀ϥȊñʎjЈɗெƷыֹŃ׳ɱƝϣü‚ɇؙҽ]ϟВƀ˾ρ“ʁʚ̿̅ʯɐٱҖŃĩηݿӅစɬ௧˗ĩԑঅʼnिϞ̧ǹ໹Ϣͯ͜ѢԎdžူࢁࢤإю౹͒čؖઠǾථɏˇॎߌέዠپʨێܾǞŪ̑ϸ_ϸ͵"]],encodeOffsets:[[[9790,43165]],[[3675,51589]]]}},{type:"Feature",id:"GAB",properties:{name:"Gabon"},geometry:{type:"Polygon",coordinates:["@@ࡹࡔ։ۚԙࢄ‚˨ǾˎȲؔǜخ˴¶௢SOৠЌÆԞőӼňľ¯ÓνɼѡشèȾǗεঃЊӹĞٿŁ֑ʳЇݏ–҅Иãϋ֥Ĺ˽Ɂ̈́֋ٕҩ"],encodeOffsets:[[11361,-4074]]}},{type:"Feature",id:"GBR",properties:{name:"United Kingdom"},geometry:{type:"MultiPolygon",coordinates:[["@@҉ֽًǦԱ[ǦҊǥ҈۴–ࣔԳ"],["@@࣋ࣧࡦŘऄIɕۅݯݩࢄÃäĕݠ঱ֺƇԬढ़ʈͧৰDžķ՝ѓʗͲѣݱѯ૳Rෝɱϻǒ։ϿޥĪם͍ҁǘ௼ࢨݪǺOBಽƔʃͰ࢜ʺҡҐdžռఢ÷D@ŮӤ֛Ԯ_\\৵ƨȧɬ̨ϒˡɴҍЇ·߶щє̨ࢆٶھڤá০ì"]],encodeOffsets:[[[-5797,55864]],[[-3077,60043]]]}},{type:"Feature",id:"GEO",properties:{name:"Georgia"},geometry:{type:"Polygon",coordinates:["@@Ųάȿִӟ̲ҭĬ̯ʴĺIJ܄ƝఆƋଦЕƦƻԚƂ޶ǭʴ·Նșɓřвғŗıҏºصʎȵƍଢ଼ſ߳Юࣅ¡"],encodeOffsets:[[42552,42533]]}},{type:"Feature",id:"GHA",properties:{name:"Ghana"},geometry:{type:"Polygon",coordinates:["@@೉ӯҳ˽ݳʑݡʆœͨηܤɖैΠ۸ɟ஢ŗنrӊฤ¢ϊÕ˔ƊϴáÕʿΖџC؍Ąڍɂ̫ȅݳäйɢՓȈ̍"],encodeOffsets:[[1086,6072]]}},{type:"Feature",id:"GIN",properties:{name:"Guinea"},geometry:{type:"Polygon",coordinates:["@@ʃtǡͷʁJǏǴÈͶΗԨɕħǵmɳ³V̮Ƈɘ‚ʔǻΜɹ̜ڥDțǁɵoƝǷīɹ҅σρӼ͛͢ɋŊȿǖħϊūȂʓƐώЦʮeɖƘȄDƄŎï˨ĢĖd˶МU؀ȱȄlÚĤҜáŨ´¶̭ƆBɖŒƔƒɸɇάãɲǺ˖ŒȬŠǚuȈȁĴɳΆΙǣɏ˙ǴĊŀį«ʡʲʍǗÝå˷Ș΍Ⱥڧ̷ĵăśÞNj·νƃA"],encodeOffsets:[[-8641,7871]]}},{type:"Feature",id:"GMB",properties:{name:"Gambia"},geometry:{type:"Polygon",coordinates:["@@ņόࣶzȎȦˊ`ͨȷʼIˢƚǞʏεȋιdέǰ̷ȗƭQȫŝއl"],encodeOffsets:[[-17245,13468]]}},{type:"Feature",id:"GNB",properties:{name:"Guinea Bissau"},geometry:{type:"Polygon",coordinates:["@@҅ΘΝÈȕʀLŸʯǴÁǶѼƌ˦ɦĨ༈•c˵ġĕð˧ƃōȃCɕƗʭfύХ"],encodeOffsets:[[-15493,11306]]}},{type:"Feature",id:"GNQ",properties:{name:"Equatorial Guinea"},geometry:{type:"Polygon",coordinates:["@@ƿŴ़̀െmPয়௡T˳µ"],encodeOffsets:[[9721,1035]]}},{type:"Feature",id:"GRC",properties:{name:"Greece"},geometry:{type:"MultiPolygon",coordinates:[["@@Ҡ˱ٺ¶شÑqƣҜĶĿʛ௃íTƒਁǎƺΦ"],["@@ʹՁȥĥԟ|ѫĀৱɓ׌ҿяƋҳAѻўƿȁȊԅрЁ̓ǿҴϯжʑ^ӅޥɠʜѕՓĕ͈ݏ֏Yۍμ̿ڦƧ֒͝ϮљӐÉʆϸТ¼˚˘Ũjɚռö͌ȀҖgƒƦdž„ت{ڨɲע̉ކĀVмЦɝ"]],encodeOffsets:[[[24269,36562]],[[27243,42560]]]}},{type:"Feature",id:"GRL",properties:{name:"Greenland"},geometry:{type:"Polygon",coordinates:["@@ᬜԆ᱒›ੴ̴ᲈĄ䀦Ŀ㉊ڗ༅͕ộ™⭏ćшƫᲐĠᡚ́࿈ʴۦ̝इӧᒞ̺✘͚ᠼNjҾΫ⃝ױӃȕ᧑ơወ¡ছؕگկ€ध৚շಽ“൧ˇ༂ѽȢ܋࣍ýઞܡህÑঈ΁˟̑இŽ୥E੆֩\\Ϗပΐћɣଌȿ઼ԣ͈ڱກlj٫͖ਣӘ˼֭উѵᕖ•୆¯ᖯܵᗿڏឧ́ओIࢅ͓ୟࢱᅵכׅ“૧ȷ஽ȝܛԱ[כыտോڧͺٿϗ۝љࠍஅ½఍ۈဿLࠁҢ֕ࠐฝਲэոŗݮ୓ޢ̢ئ֗̒ࠪচొ̺ͨΘǬڀॡ̕қůݯţਏ˜Éְ͢҂ެ\\႔ɟ෿Քݩ˾࠷ş۫ȼम޴ԝ̺ڗ׈ৡࢼ੯͚XΚᖷӮᄻÖᖟ‘Ꮕ×ইˌวՈᕂ˄ၚ¬≹ɖ቉΄Ś͜ẊИᶎИ̪͘ᗗ̠ܺͰ᯲ז௢ĚΓϘጲɜᣚƂᣖRࣺʽᕺҨፘ̽୺áპ˙ፅҐŘή"],encodeOffsets:[[-47886,84612]]}},{type:"Feature",id:"GTM",properties:{name:"Guatemala"},geometry:{type:"Polygon",coordinates:["@@ћƦԻfϩǖҍΌrʖĮȠšƾКۆ઄Ft˸Ƌ¾ġǺ̵Ț̹ˬϜDBӂ޸BަUOڗßॅʤ@˚ƱòŰʘŃϥ͍ЉɻÏljâǑǧɇȟ½¬ıƿġ˽Ƀ}ŭ"],encodeOffsets:[[-92257,14065]]}},{type:"Feature",id:"GUF",properties:{name:"French Guiana"},geometry:{type:"Polygon",coordinates:["@@͉͑ГÑŗʀȉ–ʹɩνǦɈΪòϤƢή͛ӸáֺѪܠ˸ğؤȥࢸۿƔ·ӻޑʳأ"],encodeOffsets:[[-53817,2565]]}},{type:"Feature",id:"GUY",properties:{name:"Guyana"},geometry:{type:"Polygon",coordinates:["@@ր̯Դյzџ̈́o҈Чͪ̇Ƈݱԛɕ°ȣƹџϊ؏ːAŎӃԢܳȱ‰ҫî˙ɡϟƥ˅—ġǑЭ¦ԫЀÓϴɋьƆܐɸ̐ȕϸ˿ŶŊτțȘѩ™ْ֩ɬɲiϲԬƊȾƾ˽̸ô̬ږӲ"],encodeOffsets:[[-61192,8568]]}},{type:"Feature",id:"HND",properties:{name:"Honduras"},geometry:{type:"Polygon",coordinates:["@@ơˀʭòÐʹŗĞǣÒσij‹ŔʩƈǷǚʛìǨɈáǒÐNJЊɼϦ͎ĔȂƨʊ\\þ垦ϸùϲv˒ĢİĦˎ©ȪÉɘnǖòϨśƄkʲƿʐį̏Źɜɳ˽jśŕ̇ŋɃAȅŃǙœƛźĕ{ŇȩăRaǥ̉ɳƹıđĽʛǞǹɣǫPȟqlЭūQĿȓʽ“"],encodeOffsets:[[-89412,13297]]}},{type:"Feature",id:"HRV",properties:{name:"Croatia"},geometry:{type:"Polygon",coordinates:["@@Ȳ͗ˊʇ͓̓ϝȆׇ[ܟƔϽmǻǧ̝ȖǫΑЪϽǼʹϮ̽͌ȃ͆Ηݔ͇ġƛ߃̶ӣ̢ޑʠ۹ؤǞØϥΞe˲եƄʱγʝˮn̆Šbג…Ƹƚ˸ƍͤgGɼ̈ĒĈͺڞɠˊĻؼέۜlj̼Ų"],encodeOffsets:[[19282,47011]]}},{type:"Feature",id:"HTI",properties:{name:"Haiti"},geometry:{type:"Polygon",coordinates:["@@Ԣ™ܰƁôқÝ͑ȱƙɎʥiɫ֏ƜЅÍԡÔϽƿ҉ʾö˔ޜśيã̢ȈϧθP͎ՋžȌɶ"],encodeOffsets:[[-74946,20394]]}},{type:"Feature",id:"HUN",properties:{name:"Hungary"},geometry:{type:"Polygon",coordinates:["@@˨ըǍǼӂDÜ΄ђɋ̲ğ۸ļäǚͮ~ЦžĜÃЂŀȠȢˠ¼࣒ʭǴĒҲɭÎɣԡǭЉ֫ԕ֭کǁԽš١ə̻űۛNJػήˉļǍ˴ƗV"],encodeOffsets:[[16592,47977]]}},{type:"Feature",id:"IDN",properties:{name:"Indonesia"},geometry:{type:"MultiPolygon",coordinates:[["@@Λe૝ך޴ǒѴʭ̎ʭ»ɩ"],["@@ܙȁijĶø˸ΰԢࠨͬĐǓfʫշع"],["@@̢ɣԲèȼΥॿǛ׉őҍP̀ӚҤPɤ̖"],["@@ūұ౅ʅૣľE̬ښǪՂʥ֔Üݬ̮"],["@@ྔċȂΌ༘З̪կీƵਐӿय़͋ऍ͸ݻwࢍØ޻ưঅ͎؝ČΓŁ໕ΌƣΰޑØּߤ৶·ڴ͡ΒÛŘ̗"],["@@ѝֱćنƬ̠Ǭ˴ȒʗCЏ"],["@@̿˥ׅƸǏΰࡘ¢Ⱦˣ"],["@@̨ٝۿΌۯìӃÅׇˆȦҦਠ”ऎʕ"],["@@ɼയ࢈ԉ۰ࢼ८ԔݜBܘ̉خ̛ࣘLJbᩑbᩑݟې࡟ǜȷʇ੡}ΦۂՈɺɕࣲЕ۸࿃܆ۗêృަʛУ͑óȏ̮GκٛЮ̢ࣞ״gëɠ௵DͩԄݥƺΡдଈȰњ˜ഘ·Ƃ̹"],["@@ڭ࠭كlj߱ǐඓ¥ܽŧţٍݪݛҒϠ༪˸çϯλŪιӯ͙݉ߒ੿Ƶ˿ݲॻQտ҅ʙ̐͡Мی࠙͗ȻɶŊ͖؅ӲØࠌ֕ʭîও”றՓũίʚʌޜŽ߸ΛPʻֺΎվŤښф౎ǮΎ܎ذپʛ੖śॴ–ࠨ؎Ʀȉ"],["@@©ܽџĈŷԝΌѷɽĵ͹Ւʟ੺ǚڤ˨̨ÔҝӸóĀ΃"],["@@सާহį˫ֵšݿַ߱u࠷͕౻ŭ̚ॕϙͫԤ׳´лːৃ̟̩Оս¯ۗĬŹૺнɺЕܘŝ݀ĮުԂ֐Ɩָ֗ӅըǠ՜ÑӪъЖôߒɽۆǶњୠ͔̈̆क़ॲ@ܰƙӍݷآߓơϭ"],["@@छkۻ۰અۊέԚٍۄзؾٕ୴۪݅ʙܠ̳ڀݵՊѭܘمҺࢗऒóђզ‘ಢNjݔࠓٮ֫ҪΓߔࣙࡢ_ۺֹӠ۳٘ϥͳۉӖ̞̅sƜו̊ҵؠõФՏɁ਱‘ಟ"]],encodeOffsets:[[[123613,-10485]],[[127423,-10383]],[[120730,-8289]],[[125854,-8288]],[[111231,-6940]],[[137959,-6363]],[[130304,-3542]],[[133603,-3168]],[[137363,-1179]],[[128247,1454]],[[131777,1160]],[[120705,1872]],[[108358,-5992]]]}},{type:"Feature",id:"IND",properties:{name:"India"},geometry:{type:"Polygon",coordinates:["@@ࣚটďۅͮїѕ׽ŒɾएࠜՑ୞חՑϟ͛޻ࠀͅߊЭરһସʼnӜёٮāৠȝ۪bĪͪŋՖÞβԠǮìڋlǙކ͉Ոƀ܀Çۈ|ÐԪ΁ˎڴŀވشॸ՘۶ȷ״ΞЀԹ˳Λ࣠űÜ͇̍Ʒèԫ׷Ʋછׅ~ӓҩ۵§ХϏۗځȒࢇȏ˹ĚΣгȥѵ೰ɵEƍ՝ҡѦʸӎϖ¶ϰ܆ӝƜީ]ߝŚóאБ¤ڕζ֭̓؆ѻԿ̻ȅ̩Ԭɣƛԑ̆كžەţֱ̫Zਛǩ´ك҃ӻ௃֡ळ঩كՋ࠷ջCϭлȹݳ̝Ͻ«ʥٙǪધ®ۡΣߙI෗ѣ¡ϣٙʰˣދʃ˱֯͵ʍߑ޸ϳ୴͑ࡒ̍Јѿ߰ȻੂơՀޅ଼Α࿀ʣ੾HৰǍ޾௣ԉףĶ઱৲И̤ʝͤড܊֖֔ᇜCǗܞҽюĩ٨ջϘऒࢢঊÙ࢞ࢢՄ࡞ࠄࡈ_״ܒӠڳд֪݂̇̕Ьβ౤ȱपŰߺ۸"],encodeOffsets:[[79706,36346]]}},{type:"Feature",id:"IRL",properties:{name:"Ireland"},geometry:{type:"Polygon",coordinates:["@@ƒ׷ًݣ๯ӹ஑Ŷڼ࢚ѭࡢତڄٌϼǦ҇ǥ҉Բ\\ٌǥ"],encodeOffsets:[[-6346,55161]]}},{type:"Feature",id:"IRN",properties:{name:"Iran"},geometry:{type:"Polygon",coordinates:["@@݈njװӔ֚{τƾװýघэڤğ।ݓظ‰òۻ΁਷ɱؑκŭΫҡˠڡàՓِƙæեݿݿжѵ͸ԓߦυx݉ДƋêϯ௉ѡ̓উཌྷʪࣷȖेŊΧਐЕƪ٣ƭࡑНਇ˦ࡑ٦߳ʈ֗ߘا૪ҍƋՕ˦̻͝ҭѴS҂ˍ@Ɛ،ѝٔ਍Ң׉ߜȜپц̂ÙӬտʨխ৊ҟڨǐʼʿ६ּʈƄͅъϯ־ő̤~রئ̀Øʞʙ́гԼѱȾ¦ˈإߖǩ׎у஠ƟಾɞĄȞ"],encodeOffsets:[[55216,38092]]}},{type:"Feature",id:"IRQ",properties:{name:"Iraq"},geometry:{type:"Polygon",coordinates:["@@րʧÚӫх́țٽ׊ߛ਎ҡўٓƏ؋ˎ@TҁҮѳӿ¤֟ê؝߭༟äᛍၖఫךৡɪ͹৾ᇶ࢔͆৬āؘҢȺјԾΰž঎Ň̐ɉЖƚծ৉"],encodeOffsets:[[46511,36842]]}},{type:"Feature",id:"ISL",properties:{name:"Iceland"},geometry:{type:"Polygon",coordinates:["@@șիॊֵથٙᝓֹܣƵૉŮᚑˈࠠψᆧЪ๪ǎ—ʘᄋȜ֨նౠŰಸ֭౨Ҝ੒ʃൌ҄ආÑ"],encodeOffsets:[[-14856,68051]]}},{type:"Feature",id:"ISR",properties:{name:"Israel"},geometry:{type:"Polygon",coordinates:["@@ƥ˅̣Ŝǫ֓ɂĥɋř—ɛЄŖp͛нഉց෾ʔˢ˶ɞϼǠيŤɆzVˬCþƦɤ\\`·ŕŵhM"],encodeOffsets:[[36578,33495]]}},{type:"Feature",id:"ITA",properties:{name:"Italy"},geometry:{type:"MultiPolygon",coordinates:[["@@̟ڋŲʹǭѝٝ̈́ёĞ୩ѐŞќজûࡪĠْò"],["@@Ԍ׭ş૕ϣÂ΁˫͇ɞ‘২ȓӒҨ¥рʼ"],["@@ரɏĝЯȬΧڝŪہ̗²зĻʇˠё߀чцۛदڱچLȲȃɽǗݪ̥ؠʩܜѫĔƿƽ̛үϼܳƐΝի؈̷ıѫΗ¹҅ܛΕÝHʲǢҊǼǶ͝ӤʱшΑŀʛδգƴεͶثÆٿϜޑմ֯ӜʿࠪйĮہˤϯŕӝϵΓÕĪθҕńɏٲ̆ʰʙ̀”ʂβǵМ¢Ҽ˶ƢƃА€ǼͺتĿψƚâΆԘšĮdžࠨƤȊ̉"]],encodeOffsets:[[[15893,39149]],[[9432,42200]],[[12674,47890]]]}},{type:"Feature",id:"JAM",properties:{name:"Jamaica"},geometry:{type:"Polygon",coordinates:["@@֢÷ҀȫƔɯןeʭƗҹƊӑ̪ĶȔΜÎȒƒ"],encodeOffsets:[[-79431,18935]]}},{type:"Feature",id:"JOR",properties:{name:"Jordan"},geometry:{type:"Polygon",coordinates:["@@Ʀˆपͫ࿪ࣆͺ৽Džų၅у࠸࠿ˣƛƑ˭ٙřȩ̡εʵधƆƒŨоഊo͜Ůʚ@Ԥ"],encodeOffsets:[[36399,33172]]}},{type:"Feature",id:"JPN",properties:{name:"Japan"},geometry:{type:"MultiPolygon",coordinates:[["@@ņ˽ҿԕΉːљțɝӭշʈRЊҬԆӌīΊΜؠǹ"],["@@́ڡƤсѩף੹Ѓ๏½ணॡ͔֡“غษȃষЃঝe࡞أ֗෗իΝН͜ȶݶՏʒͿ־ߐʶѲՈࡌѢ؞ָာʤ࣎ǣࢠ๺֔Б௾ࡀӌ͜ՈਈƟा΢ՎࣀƸҞୗ}ڻޥࡍbࢁ"],["@@נǵרΤȈहఝɯ݁࠱೓ָқँण]ř࠴д٨࣌²ʖ୐ʜټন࢓٤˯"]],encodeOffsets:[[[137870,34969]],[[144360,38034]],[[147365,45235]]]}},{type:"Feature",id:"KAZ",properties:{name:"Kazakhstan"},geometry:{type:"Polygon",coordinates:["@@ӕƹ્דο׹̹KɱЊ੫‚ǡێХNÚࡆ৓ؘ෷ßডũߣݶۋ͆ಥ׼ƽðᓗӹᶽљ£יچ֧ɼॕǩχ˧±ȲȶΖDž̊অ˺ϛݮҩɆ…˜ࠊāŽؘ܎ƎܼűƲࠎƭԲ࠿£܍ȴঃσ޵ǭяƌĐўՙ֘دw܉֬ӞِʕǢڢऊࡺӣŀؘჄࣴಾtᇢ׉঺ͻࢼΠ೰j੺ѥʔʠ୼—ɂЊഷ׀߮Цƿɮ߮ɔ؅ֺϬ˼Ḯ̈ШȺᑆ̴ݰΒຢǹ˄ࢉ࢚Ȳઆ˹éҝ߮´ᑌߎ̭ˁ੶٭ሠᒑ҄ѰୄӛீɎҪƯКӟטNjΨΥ઎ŒѾԣٕ֓ۥÿ¡ࡅұϝဟˢ؅ຑїȇဗͱݲลֻɓäӏԭŬу̠ఝĖඃx̧ġ஥ΞӉǧŽӹ൩̂փşȉρ"],encodeOffsets:[[72666,43281]]}},{type:"Feature",id:"KEN",properties:{name:"Kenya"},geometry:{type:"Polygon",coordinates:["@@ӾۙיͱȹΕ̿Õšףˑ͹Ǐ֑ͷ˥஻ࡀËӤᵁႌƙĢSࢺʊ;а֌̨ؔσ॰įтЉ׎ԬԈ֬ֆѨƗ@ҽ˺ˡג@੠܋ˈSȠxȄī֖ßʞΔގΚͺ˳ָAܽ॑Xᵣ"],encodeOffsets:[[41977,-878]]}},{type:"Feature",id:"KGZ",properties:{name:"Kyrgyzstan"},geometry:{type:"Polygon",coordinates:["@@ȊςքŠ൪́žӺӊǨ஦Ν̨Ģ඄wఞĕф̟Ԯūşȏ೛ғ̙ͭઁıͅ՛ࢷŒׇǏߣЇŜȟʇȓཟŵਡ˘࣫ÝĂӜࣴƕ̮ʸٖĉ੾؂঻ѸױȽإ͂۶ծʟĊ"],encodeOffsets:[[72666,43281]]}},{type:"Feature",id:"KHM",properties:{name:"Cambodia"},geometry:{type:"Polygon",coordinates:["@@΁Ѭыࢄȣ২ՠۨઘdž߀ťۚ͡Ϟׄݖ̱Ȝ֕Ļ৕ඳ٧τԙࢥÓܫͷ۱Ū"],encodeOffsets:[[105982,10888]]}},{type:"Feature",id:"KOR",properties:{name:"South Korea"},geometry:{type:"Polygon",coordinates:["@@ܨযȺխPॷ̓ҥݽljڥΏݳïĥҚƼـχ࢔ذƚֻܘÂúϒ‡͞Ϝצ¢ΨÈŨȮ"],encodeOffsets:[[131431,39539]]}},{type:"Feature",id:"CS-KM",properties:{name:"Kosovo"},geometry:{type:"Polygon",coordinates:["@@›ǣŃPĘ́ȩĐdzɦƾȌȪÒŜ˨ư²Ţşƾ¿ŌƅƒŸǎƻŢLĥȳijij„×ȉӹŻ"],encodeOffsets:[[21261,43062]]}},{type:"Feature",id:"KWT",properties:{name:"Kuwait"},geometry:{type:"Polygon",coordinates:["@@Ǭχõȓ˔هשuȽАݟĆ؞߮֠é"],encodeOffsets:[[49126,30696]]}},{type:"Feature",id:"LAO",properties:{name:"Laos"},geometry:{type:"Polygon",coordinates:["@@˚Ϝœ܆ڹܸ¿ٕࠦھٍÎǛ̉ӯyʣƨࢯԅoݬȸࢮ֧ž³ԎηʸǴ̲ܐնøȡ҄wŵ०ѦŬӮڏϖޅਚO͚ܹ՝ɗʉ̟৔ԉۦ঳Ռ݋َ׏ɄץƵ࠿ݕ̲ϝ׃ۙ͢"],encodeOffsets:[[107745,14616]]}},{type:"Feature",id:"LBN",properties:{name:"Lebanon"},geometry:{type:"Polygon",coordinates:["@@ɣ[ýƥ˫D̘ۄмעfˆϘ§Ɛͣқ̓ȷҟ"],encodeOffsets:[[36681,34077]]}},{type:"Feature",id:"LBR",properties:{name:"Liberia"},geometry:{type:"Polygon",coordinates:["@@ɗQࡽАޅٖ܏Ң֣ըȪː¬ʔϜҘϺϺǶnɖĨΘԧÇ͵ǐdzʂIǢ͸ʄsŸʓĎНǽύʖɱˊÇΤΙ~ͧăĿÝە"],encodeOffsets:[[-7897,4470]]}},{type:"Feature",id:"LBY",properties:{name:"Libya"},geometry:{type:"Polygon",coordinates:["@@ק̷ҿҤ೧βρՄڑϸϻƷ̗ҶήӹؔͬΘñՈńҠÓϦƨۈ¯϶˕ݐШȜðΠėΒ־͔ʶːЦʌ´٦দ́ΜðۮƓ૞ϓЀݛݮǍஆΙࣆйЦɔЖϮț٠˂Ф؄ЀׂŘ଒ǣ˺ϑ̺Iˌƛ࠴ıȲˣ̣ЕżΫɏԯʦڱ@Ჳ@ᶵ@့ॱGYΙ‧ྐ‧ྒࡓҟ"],encodeOffsets:[[15208,23412]]}},{type:"Feature",id:"LKA",properties:{name:"Sri Lanka"},geometry:{type:"Polygon",coordinates:["@@ų࢓ΙʇܵȓЍڜƫீϠ഼׆ұϺסО࢓"],encodeOffsets:[[83751,7704]]}},{type:"Feature",id:"LSO",properties:{name:"Lesotho"},geometry:{type:"Polygon",coordinates:["@@̆ʩʳУƛ˛ҳſƹˍ̛ċؿ٨҄ՐҖ͢ϼǠξʵ"],encodeOffsets:[[29674,-29650]]}},{type:"Feature",id:"LTU",properties:{name:"Lithuania"},geometry:{type:"Polygon",coordinates:["@@ãɊĚɲχƄࢡƨDZ۸२ʴඬÁࠜĊŞǩ҂Ã߲СĀϓۏˏșӃ࣯̓߻NȫʶљĜ"],encodeOffsets:[[23277,55632]]}},{type:"Feature",id:"LUX",properties:{name:"Luxembourg"},geometry:{type:"Polygon",coordinates:["@@ǘȏ³ρʍiȉòĞҼɖŽ"],encodeOffsets:[[6189,51332]]}},{type:"Feature",id:"LVA",properties:{name:"Latvia"},geometry:{type:"Polygon",coordinates:["@@†نЮՆߊ˼ڜعڪhNJ٤ܐƪςĻܢ̷ۚCКȕîС˒ӷ͕ࣗԛƙ߱ТҁÄŝǪࠛĉණÂ१ʳ"],encodeOffsets:[[21562,57376]]}},{type:"Feature",id:"MAR",properties:{name:"Morocco"},geometry:{type:"Polygon",coordinates:["@@ԒΥߜÎࢊȃκU͂՟ºԝ̄ࢱɜDZƷ͛ષƙϝ̵ӡñ—ثঙ͍ͩсۍɥ࠻ŷഫاRহŷ@@@p҉Ա˓ȑϡ@̥Ŋ۹ě˛ٻʿÕЁ੕ୟ࣡ˣୋ΅ϗĵ̡ቅãaD ϶͒ɮ˞ѪÃ˶̀פҴՖ˲ƊɞӬp҂̤Բ̪֔Ւ࡬f\\ц͔ްĢڎָтɠۮۮȿਸ਼͊ܢŔѶդ֨ࡈϦخΐ֘࢈˄ԪؤI"],encodeOffsets:[[-5318,36614]]}},{type:"Feature",id:"MDA",properties:{name:"Moldova"},geometry:{type:"Polygon",coordinates:["@@ȨŮ֒ĊؤʽΊϞɥÑ˵̪ƏŨΗ̊ɇÏűƾčɝ×ӷ|ĉŜǫãÒƭɱˍƥ˽ɁĝƯϦĘΪςӝԂˉΠʹʠʯĈ"],encodeOffsets:[[27259,49379]]}},{type:"Feature",id:"MDG",properties:{name:"Madagascar"},geometry:{type:"Polygon",coordinates:["@@ɠΥȺ։Ɗঢ়ɒϽĉЗƩʙ˷ӰǁʝLjثõΥɵȗ¿܅ͧওб୅ԯཧ͑ୟϛইہȣܻΡӛɊڙ̜ɳѺÇݘ̑ڠù؂Ʈ؄ϰƢD˪Дِø՚șЈǃՌãޠ̊ҺŔՒмŒҶǤ̶Ʋτ\\ӐӎۖԮʦцŗάΦĵҪ׎fԐ˦ϔ̊ί"],encodeOffsets:[[50733,-12769]]}},{type:"Feature",id:"MEX",properties:{name:"Mexico"},geometry:{type:"Polygon",coordinates:["@@͙݅ƥ؁Õ૷ąЧƤқʺЧǚٳ֎سȞӏ͢бࢾɝΐΙ݄ɾٚĎؼưՊƠՖ΂ȨӬè۸Ƣʖ֬ɚࢶȚݔ‡ԚîȬDZ…ЙҋԁȥԝƸƥűγɁٽɅɎǭcǃY̝ԓƳIJķPŭޥV޷AAӁϛC̺˫̶șĢǹƌ½s˷ઃEЙۅŢƽĭȟqʕ्ࣞџ˘ۇɖҷÓګ́чĉץɜؿDŽ޹ϬؿŠ्ϸ۱ВɃɤҹº࡯ˈΓϦࣗӊсՌȧЦ˪ĈđʈȖɔJ̄˱Ϙùͮ˭ъ݋࠴ࡋڀУԼܝ΄ƷȴŸԲѓȞӹФȽהҍæӣѸϿФ™ˀҍو̓٠^͔؇ͬ˫™ӑɴƇͿƔЕĆف̀΋خׁƒȡŸÓŎ˽Ƭ\\ǜթʮɇǴ̕Նё˨ޯʠρɸϿ²ѷКƒͶϡ̨ϑqƭΝ̱ƫJɛԞջӎ؃РїɈ„ؚŵҖЏʺֿϒŏŇɃɖԭȰӷӦÖÚΊ³̸̼ŽϜ٩׶ӱɶ̱Հ̷վϳڦͿݲॖÞ੪ĞÿǑ౔СኀףဪPژ@DΌผ@̪̕јˇԀσ˨ѭȾҥѢʩۤʥՊڒۊhפͱфֹ̄ӯӸӏȂחɾЃپʹ׮ȁ͞|"],encodeOffsets:[[-99471,26491]]}},{type:"Feature",id:"MKD",properties:{name:"Macedonia"},geometry:{type:"Polygon",coordinates:["@@ńOœǤӺżȊ˺¶ϴbтˏÒ։DžƒƑƥҕh͋ǿջõΑȴšήń˸"],encodeOffsets:[[21085,42860]]}},{type:"Feature",id:"MLI",properties:{name:"Mali"},geometry:{type:"Polygon",coordinates:["@@˰ƶƘӶˊpזɻӄǖ͖ÇŴȈ⁚^ȈךƣļЛ⋈Л⋆౾dᬼᆳᬼᆳȨϿԺʉ϶ƋV՗ठĈFካҟ֗íԭݛƃ଩ï̳̗ա՟IȿLjҥš޻ΑDžʿٳϕŗɍΙǡНŔɱȳūֻڙۡp˳ɭΣÆӥ΋ůȝŁŽάʍĥơhƷʕ٭PɷŴʼnùʱʎ¬ʢĿİdzĉ˚Ǥɐ΅ΚijɴȇȂǙvȫş˕őɱǹΫäɷɈƓ„ɕőƅAµ̮žʾí̽͘ʀǓӔԺ"],encodeOffsets:[[-12462,14968]]}},{type:"Feature",id:"MMR",properties:{name:"Myanmar"},geometry:{type:"Polygon",coordinates:["@@ӫηץ›ϥࣥΟƳО݅ՔؗΈօ̭ܵ̃ƹȪу֖ڙĪҷ_ϵ͠ދң޵Сࡷăذʴ٠˯ӼæࣸͽѤ˛৔Ʊਗ਼εۢօуॕ׳ҽöԳȠ̂ਪǫ޾څॺļ̢ӭņ׭ۆÅڰ̊ŵj׾дȦęΤȐ˺Ž࢈ڂȑϐۘ¨ЦҪ۶}Ӕજ׆׸ƱçԬ̎ƸÛ͈ӮÚˮӵξȧ|ٟ“ۙߓۭijঽࢲƔȨޛՐǍʓۣز́ζƷ؞ʔ~΍܏յdẕӓȗ"],encodeOffsets:[[101933,20672]]}},{type:"Feature",id:"MNE",properties:{name:"Montenegro"},geometry:{type:"Polygon",coordinates:["@@ÁǀηЯÊˋǫÞɽ˞εǖĢƜŬҦ˚ȜƾüɠƟŬśˠě͌ǧçïƽȋɧó"],encodeOffsets:[[20277,43521]]}},{type:"Feature",id:"MNG",properties:{name:"Mongolia"},geometry:{type:"Polygon",coordinates:["@@ࢮƢ྄ܤ౬Єܴʳ࢚]֘Ͻ࠼‰ௐɁࠈגͿӶࢊࢊश΍ނįনɍLjؿஜΛߐƺਫ਼ŌࡆōࠖЗԚѕެT੒Ƌޜȼૈƒ௸פԌĝѰ˭ৌêХهק࠽ɐ΅ӈńࠤŽ٦̴ڬˏހוğ̗ڏĦ௟ŏןʅ؝։౱͙࠷ѽࡹǞҿúѳէˎ͓ƌˣי˯׽҇গ̑ఽ‹ഫ̇এҋϋʾ৭AఓԜࠥŰૣśჃȊऑmӱԀϣޠԱĢ৩ԼଅŞুƞ̡θ͖চׅڲன̀۷Ѿəז"],encodeOffsets:[[89858,50481]]}},{type:"Feature",id:"MOZ",properties:{name:"Mozambique"},geometry:{type:"Polygon",coordinates:["@@لæ৞ʁɖńגt̚ʦԌaऀ͜ڞӤƊϕ“࠷ľ݅ಿƨЫʣ׷͙׍՗Եޏ͉ृСॉ͓ࣕƵוׯ΋ȗí׳ЌُǔӱZʣƪ¦{ࠗƋϷȤƝűΓΗ̗ۗ˳য়ҕρ̳ðΟɊÉíѵّRïϊůϖí̠ƬपɓװГஂࢬ॔ɜ؆ŶúĨӶƉʞ˜غǐ׌E੠ѥ˒ЏÔǹȼϳǰ۫gÅ̼āװᢈۘӚЕɴüͨɅ¸͵ǯϷØסոԱʲ׌ζǰíઊΙ؈̣˖̅]ɽદɾٔ"],encodeOffsets:[[35390,-11796]]}},{type:"Feature",id:"MRT",properties:{name:"Mauritania"},geometry:{type:"Polygon",coordinates:["@@և־ԗؤ֍ɞГʚҵUЧǽйð˽ˏïҐɺаŀߊģࠨĵкČмɑЎѵδǾˬᾔMǃ௎ȴќ߀øᒸ᪂©F౞Ṗ᎟౽cМ⋅М⋇ƤĻȇי⁙]ųȇ͕ÈӃǕוɼˉoƗӵ˯Ƶ"],encodeOffsets:[[-12462,14968]]}},{type:"Feature",id:"MWI",properties:{name:"Malawi"},geometry:{type:"Polygon",coordinates:["@@ɽٓɾથ̆^̤˕Κ؇îઉεǯʱ׋շԲ×עǰϸ·ͶͧɆɳûәЖѵɔʮޮ˄̈LJۢǚڼƞɪɉ܌Ѕϐ࠘ƽǜɵ˶Ϲɾଡ"],encodeOffsets:[[35390,-11796]]}},{type:"Feature",id:"MYS",properties:{name:"Malaysia"},geometry:{type:"MultiPolygon",coordinates:[["@@àћֈĶ˞ΈȘýӸԓΜ֛¶֣ęϡĆ˿Öӻ̒ɵͤݑe˳׫Éߑخ঵ښįђӟ֚ś̡۠ҜĠؔȃΤƤƮۈρ"],["@@أ˹ܯƚॱ@̅ॗ͓̇љୟۅǵߑɾЕóөщ՛Òէǟַӆƕ֘؜˽ٮǀǜ܆άǂ৖Ǻ׾ڔЬՐϦѥǮ˺В¸՜œа٪אшڀͼHќыžιֆɻ۬ʧÑ֝͡¥ƮЧ"]],encodeOffsets:[[[103502,6354]],[[121466,4586]]]}},{type:"Feature",id:"NAM",properties:{name:"Namibia"},geometry:{type:"Polygon",coordinates:["@@رٌؖ͡ȃࠊȷ،˯ಒm৒ŅҞ͛Όѡۜѳ৘ǽՆۃࠐ»٢КdžԊƞհ}ԄϝŶÐ₮˜׌Е᎞ş໴΂یȒհµͨȍPéӁȍʭC՛͍ͣΎಕ̍سƒ{Ჽࠣ‡BយA᷋ݣѕҋÕՇDŽϗÔƗάͩɰГг"],encodeOffsets:[[16738,-29262]]}},{type:"Feature",id:"NCL",properties:{name:"New Caledonia"},geometry:{type:"Polygon",coordinates:["@@ېԵѨϭ͉ȫҥɪ׹ϚէѼ։פś˶β[Һ˹φ˷ˎɻ"],encodeOffsets:[[169759,-21585]]}},{type:"Feature",id:"NER",properties:{name:"Niger"},geometry:{type:"Polygon",coordinates:["@@nּॹȐОҿպœϤâТբ̴̘ପðݜƄîԮҠ֘Eኬஈϒᝪ࿸᮪ཾ೨αӀңר̸ȸಯ̾ɓ`ˋΔ˽ǻί͕ၻ«ધੳߋγૉΔ̵CեբmčЃʁµˋƻm֩ंȟ’ځҷٱʔҍ¸ʏşӯ~ӷΧѓq৯ѢЉȵѓb̿͆ࡅ̼ࣗıɕǻşӗʋ͹ÍݣٗӚ̟E˭ʗ"],encodeOffsets:[[2207,12227]]}},{type:"Feature",id:"NGA",properties:{name:"Nigeria"},geometry:{type:"Polygon",coordinates:["@@ࢍ̡͉¬͓ȉڥl҇Ղˡ؊שֆكYݍB¶തs՘ǂՊʶʴТԴėɨǔ͸ȍӾ˪ÎݤʌͺŠӘɖǼࣘIJࡆ̻̀ͅєaЊȶৰѡєrӸΨӰ}ʐŠҎ·ٲʓڂҸȠ‘֪ँƼnͬͯğƱ«˧۽ٱɛՙšѧDZȉǝי҅ΉŽыȋ͹ÿΓֽ˱ҽΊ͇aԃӭʑQЍ߷ɍש"],encodeOffsets:[[8705,4887]]}},{type:"Feature",id:"NIC",properties:{name:"Nicaragua"},geometry:{type:"Polygon",coordinates:["@@̃ˆϽͺȁ˲Ο˄сϜĤžƒŵÚÒʾ”ŀȔŬRkЮȠrǬOǺɤʜǝĒľƺIJ̊ɴbǦĄQňȪĖ|ƜŹǚ›ȆńɄB̈ŌŜŖ˾iïă§ȉĐ̫ȗ˹ěͷυ®ɏtϙŹĉýΫÌɛǣɋ ɩźƏȩDZʛÈƓǦˉêȕʼnօɞųŇ"],encodeOffsets:[[-87769,11355]]}},{type:"Feature",id:"NLD",properties:{name:"Netherlands"},geometry:{type:"Polygon",coordinates:["@@ۦyǀ˳Ƚޓɇ́ԍ@ƘࢡҥȞՏπީǩ؛âѠɲ݀ఆଲΘ"],encodeOffsets:[[6220,54795]]}},{type:"Feature",id:"NOR",properties:{name:"Norway"},geometry:{type:"MultiPolygon",coordinates:[["@@᥆ؙઍɣऄՅෛ͵ڵû΢לઃͰಫ˵Ы؝ߟωࣗȮ઱¥णѼԉɝԷ“ūփནƊɝҵ߭Hևױ࠿झಫ஁̨˹̇ͫ࠯bձ޿¾૟՞э˥ধֻۧυӛ֝Ԫဋঁ૫ȟ୏є̛ࣚˇ኶ޞզᕠ۶ဌࢂ໤୦፺ྴඦلᘼ੊ᇎπ൪­౮ۢ໖›ພǘ"],["@@ም΅๝Ȝ׆ɐԕˎეǚͮ̿ொȍ"],["@@᪖صᑟͥұأ݅ǁЍۡৣᅵԢނ̘ఽʐ࿕܂ٷڄᘎ̜Ң̋஦\\͊˼௾ˆ੖̋"],["@@࿮̏ఝҍ᝱ı៙ƖƫɴஹdँϬᣴɼ௞ȫࡘʤᑺȽ"]],encodeOffsets:[[[28842,72894]],[[25318,79723]],[[18690,81615]],[[26059,82338]]]}},{type:"Feature",id:"NPL",properties:{name:"Nepal"},geometry:{type:"Polygon",coordinates:["@@ÝαŌՕĩͩ۩aয়Ȟ٭ĂӛђଷŊયҼ߉Ю߿͆͜޼ՒϠΒȪڪʳࡔշҾť˰ЕٶǓۀσौȕঔć"],encodeOffsets:[[90236,28546]]}},{type:"Feature",id:"NZL",properties:{name:"New Zealand"},geometry:{type:"MultiPolygon",coordinates:[["@@Ȓ΋װ;ʐΡBΝ̹ϳչإїͷ̴З٭Yܗ̓ɣջӋࡗڇϓнʇޝlխˢࣱÐƗ̰Ҍذ੐ࠦժǀ׾͌ܜѰԎѦώظ͈ɆŰҶלϴȆΧ"],["@@،ࢫlָϜɯŲًڰ˛֨ãӒ͎юĭȯݗʯӫٛjɡʭþαūƻͅҏзֹ٭ͯƟɘΕŨӞ۔˟ҨࣛͲz̦؈̌ƚ٨Ÿլͻ֜vƪБΎڋݔΗת̸àҚұٺɑʂݡ"]],encodeOffsets:[[[177173,-41901]],[[178803,-37024]]]}},{type:"Feature",id:"OMN",properties:{name:"Oman"},geometry:{type:"MultiPolygon",coordinates:[["@@ֹ̻ϟªǩȧƉэļ֗ÿĻϯFԽ̻ćХȓǯԹP͡ɃJͻПɷҩĂ֗˳ϱ³˝טٿ൴ᠾ࠾֖၂ϩתv͸ʔΐFΆϞǒƩŞèմіHϖֵҸ̧؞ŋӼƳϜӕɨ˧̞ŃCȉ̩ԃƅɽΟˏ"],["@@ʼnƳDž˺ʔ˺ľñā΍"]],encodeOffsets:[[[60274,21621]],[[57745,26518]]]}},{type:"Feature",id:"PAK",properties:{name:"Pakistan"},geometry:{type:"Polygon",coordinates:["@@تϻʞ٥൨ͻ߹۷ऩůౣȲЫα̖݁̈֩ڴгܑӟ`׳ࠃࡇՃ࡝࢝ࢡউÚऑࢡռϗĪ٧ҾэǘܝᇛD֓֕؛Ɇʣ؀٭٘໻ǁിeஃŝ̈́ঊொѢéϰГƌw݊ߥφͷԔеѶඨѕࡀŲԈŅǞȂגóદĈ܎ҶӈشCĠɼٞŌ̴ý͢ʀ±ԌΦԖ՘Ɇͥ֊ߜɴ̢•͒мΜĩмȣΤӬμࣘǮ८ĮѐƺӨĦ"],encodeOffsets:[[76962,38025]]}},{type:"Feature",id:"PAN",properties:{name:"Panama"},geometry:{type:"Polygon",coordinates:["@@˫ʎǵҒȺɢɅÎƿˤлɸοÁǝ̇ͻɁǽ‡ĉǩВҗɯŅŧŭϷ©ơԈŋƛˡ¸ǝ͸·ÈɓİέCǻĩŶªǖìǠƲŲIJǩŲK͸͘ö̠̝iDZͲ›ĀæɴȵЮÔΨɄԜǞ˺ʤҬ·‹ĉҶ…ώơ˜ʧ̈́ɵĹūȜӵǁʟ˓ÒŅС"],encodeOffsets:[[-79750,7398]]}},{type:"Feature",id:"PER",properties:{name:"Peru"},geometry:{type:"Polygon",coordinates:["@@ɥљћɋࡅӘñΈရࡊທࣾ٫԰ΏۜƐʎ܅ાࠣ༄ߍီ΅Ϥ˃ؤٷպױͼ˖ϒПߢʼךڢՎIJΓʇȧx̭ΎâͼĝΚщӆΌDŽ֤ԦܶৠͨࣸࢠʾմŝٔɢĂ֒ЉˎЅϴɏӶࢣضĿҨɞ̤ƣԎð٠Ͻթࡣʤoрҁݳ œųۍlj॥ֱÓϻɉ̇ČғԕʍBΡɛƵΔݳҲԝDZί֐µ͆҃ݐuېӸÇ౧ϢĩӄƠܪടǷ˵£ןg܍͟пƮ̵ȕ˯β۹Ջ࣡"],encodeOffsets:[[-71260,-18001]]}},{type:"Feature",id:"PHL",properties:{name:"Philippines"},geometry:{type:"MultiPolygon",coordinates:[["@@Đ֏ºҽ˹ޑ̫ࡨϽэˎإʉϿ঩Ӧɿ؊ʰЎՑЈˁΑЃثҵƑʖ͢۾ՌʀҜ̈́̔ϝٔɰƎϒרv·ٰڼЋêхÐ̱"],["@@̟ˡˁՍ˃ʝԫ׈ǦɤɂɾĢԸҨ¸Ɖ֣جߺāߡ"],["@@ૣߕЬט؈԰Ԏ׊Ѱ࠲Ʈۅևҧѳֿ"],["@@Ԏʹ՘BgΗϳΣՕʧ‡ϸÒєŽА"],["@@ʀभ٫ɞj˭ȶԯЍȋ•עʧªƁԘӶãY͈ԣٜ߮mɴ̻"],["@@ɟܩέоѓ٘ܚ‰̡̈"],["@@ԮʉʶɖüɇƍΑ˼׻ɛۥӷ˥ƁڳȊڝѾġϊIJਾүăҙ˜ȫēϯٻЮ̵Ѵɍ̯՗ԊރůлȆ¨ΎˀɊʣȘŇ̡бӚűμߨͺˡĔೄ˜ހԘA"]],encodeOffsets:[[[129410,8617]],[[126959,10526]],[[121349,9540]],[[124809,12178]],[[128515,12455]],[[124445,13384]],[[124234,18949]]]}},{type:"Feature",id:"PNG",properties:{name:"Papua New Guinea"},geometry:{type:"MultiPolygon",coordinates:[["@@ɽčε͔ρՔǷ٘ŜĆĜʡʬȏРՑЈ˵ŝɽ"],["@@ѯçƃɽҟȱћȟѽBۏʔӑɺêʺݬũҠàŶЖŦrĆѽӐÜʂ˼Ҹ̚ġӸԌfǜƏgү˯ԡ"],["@@ݤտղࢻӖ„‘ω٬ƛʥǁࣀΝġʏ֋ÏȷɔܟĦࡕŴٷ՚ӉҦѧ݀ભπ܇ʇԡˣńإڇ˿һƖࢅ–aᩒaᩒภ׃༊ӓׄїҴхŸӵඔԱȲѽޛěȄ֕"],["@@ʿɡǁӸȝ͘ϝ˞ӍΪ؇ʚɺȮҒɻ˸ȁΜȫʹΛ͊ˏĶѧ"]],encodeOffsets:[[[159622,-6983]],[[155631,-5609]],[[150725,-7565]],[[156816,-4607]]]}},{type:"Feature",id:"POL",properties:{name:"Poland"},geometry:{type:"Polygon",coordinates:["@@·՜à̂ȹ̧҆̚ɺɤȝђָʘ಼ϴ੒˴࠼ƙÚȱ߸Yਚħ໶^њěȬʵšωɸ͋KͯԋǡʸϳfϏцܻěɽзįރۥɒϗǿ¶ߙ͔؁šЇĒӹǵч̖Ήŕ³¼ϭаر¼ăˀֻĦűɑҗǨÀɴػòЉ˔"],encodeOffsets:[[15378,52334]]}},{type:"Feature",id:"PRI",properties:{name:"Puerto Rico"},geometry:{type:"Polygon",coordinates:["@@јõưǕɋɃمLӫ‡·άŢŬیK"],encodeOffsets:[[-67873,18960]]}},{type:"Feature",id:"PRK",properties:{name:"North Korea"},geometry:{type:"Polygon",coordinates:["@@Şƥ͉ºη˵ʣ˷Ž׽ѣȅƫƧ̓ʝ֓ƏηɥηįġͰƋӈσŧȭΧÇץ¡͝ϛϑˆÁùСdžĵƿʙé‡ǀɑüɥƆɰφȤİõƶɆҒÅƎөĠЇɤۄբऒҌ־׮Ўˁܪ‹ſѺಚβͰҼժӹ"],encodeOffsets:[[133776,43413]]}},{type:"Feature",id:"PRT",properties:{name:"Portugal"},geometry:{type:"Polygon",coordinates:["@@̦Ɉ΄ŬɂЫӺDƞłӪ‡ɼуϱɩYٽƍū‘Їγçʹԋɵտ̄ʡřɫ̵̿ê˥ͷɓѷŠџġŸڂÿԬϓþȩ͈äռͰ̨ÒͼǪԎkΤǙ̠™˲"],encodeOffsets:[[-9251,42886]]}},{type:"Feature",id:"PRY",properties:{name:"Paraguay"},geometry:{type:"Polygon",coordinates:["@@ͦ৖tҌЖ݌าʔޮ]޴їbʵʞҳÇଛࢲLJ΄ǐ֦ɩǀʣþޓİ͓̼›̀ƌ̢ƳAҥŕӻǑӛƍݏށ١ړƇऻŸࡑɮࠢ౨ťψࡽ͢ਅبۉŸ໵ൌ"],encodeOffsets:[[-64189,-22783]]}},{type:"Feature",id:"QAT",properties:{name:"Qatar"},geometry:{type:"Polygon",coordinates:["@@ÇؔɨѲɰĜʬˁdӯǽӳɵÑʫǖ"],encodeOffsets:[[52030,25349]]}},{type:"Feature",id:"ROU",properties:{name:"Romania"},geometry:{type:"Polygon",coordinates:["@@δǶԴġՠGϸȳ˺źبĄɄȠΠ@ʰćʺʟˊΟӞԁ€ρėΩưϥϒƹЂƊϠƟpɏПǹʯĀɻ৥ӳĖ̪ؑফțзɋ௽¬٥ƀ͙ÕʍΊƵƦȚƘȷŀ˃ȋөʔßΌԟȢĥˌҕͤڪǂԖ֮Њ֬ԢǮ"],encodeOffsets:[[23256,49032]]}},{type:"Feature",id:"RUS",properties:{name:"Russia"},geometry:{type:"MultiPolygon",coordinates:[["@@ࡌ๫కˤԫ்ࠌࡳyוُԒսٱƻ۸Ĥࠊħ࣢Țٌš૴ӯࠜôରަϮͭϴϐŠɔ։̆ߵuࠟΎࡑ"],["@@໵]ਙĨȒτ୊˚ࢢƧψƃęɱäɉ"],["@@֦Ƚțؐᗸű࿨޻࠭λ൛ēsࠑͳǩ޽~ٗ̊ૣʖȉθ࡟Ǝॗʼnҗ̎Ǽ̸৓ȥϚЃӉΣ@„Ꮪٛᔺ࠳ïԷ"],["@@ः©ƭˌੲΖ@ַ"],["@@ળ»@ָň–܈E௒ʉïŗࡽȩ"],["@@ౡMႣĤƧ¬ߘͪੀþஞ͏ĸə"],["@@ॿͩഉø༛ͨȪ˖༨ųᑔɗ"],["@@ډرᶽzඃȣမղҎ׀૎ǂᕞ™ᴬѽ"],["@@ӹóᩣŊɟώູɦūҒ࡮Ƕ…Ҟသܒޙĺ፨݆ɩϢሤѺ᪪բ᫠ǀ෴̸࿐Ŋאͩ֟ʻᲗз᢭Џᤙߝఫࠍ೉߱Ǡۥྎۏ"],["@@ɨгސȲឤYቈЧڬ̿ȽѧङʝᕅүفʟਬşఖɃݴDŽєաτɔഊƂ᧪ƑȴϽ↲ů´ٜᄼƥഄLബѷϮ՝ӹΙੌڋ೔Ϳ߸ࢦഖϙ෢ɦྼʵؤʀൖş؅ޮૐζ䢀ձܐӿᔲٛ₎DŽာƑ۪΍Ĺؙਜʇ૴Ǥ๰vཚǑཪĢะݛਪˎڷ՞ϐώᧆɻფºᝂБ୲ν@”MKઇσઝÖݶҁԄەϲɧĮΏɑɝ༧Ǿ᚝مݛĭ౽ן௛ԧ̱ϣய׊ᔗڇϣ̸ߵΫ૱Ř˓ց৙߽Šͻड़ȋő௣ޭ‹Ϋ۱Δα฽ѕ̅ॡభȳʥ࡟ே޳ׂ̳έ௬ҵለИ୘܀ԆªϾರȊຊ੒คࡺຢڢڮஆ৷ëԍۗᒉइۍਖᓧ˷ᑃටۚԧሙɕಝēÔ؊ಯŶ਩ЭᢵƠ᪏ʟᨩ࿛ủጝ೚ŁаՃࠄȅ՞оईÃௌऍ†܍ځ࠽ë্ϛഉ్௓˯ׇଙ঑ଇॻթӹ૩ӱՉYՇФૻؙſ˩ŝƦKѐіxŦ঴ɛܚܞ̒৶Ʃ֢ࠈ˾ऄ͚̮Ѵݲ൷ʛܯͧ౧Dͻ߄হװหˎ̵ࠖ̉Ԫ̿βԯࡐ̲݇షʢ૛uਯƱۛлҤȥXҩұˑݷࢻRσஅՍ৙̈́োéѯˮԋĞ௷ףેƑޛȻੑƌޫSԙіࠕИࡅŎ੝ŋߏƹ஛ΜLJـধɎށİवΎࢉࢉ΀ӵࠇב௏ɂ࠻Š֗Ͼ࢙^ܳʴ౫Ѓྃܣࢭơ͡çѽԤઍőΧΦחnjЙӠҩưிɍୃӜ҃ѯሟᒒੵٮ̮˂ᑋߍ߭³êҞઅ˺࢙ȱ˃ࢊມǺݯΑᑅ̳Чȹḭ̇ϫ˻؆ֹ߭ɓǀɭ߭ХസֿɁЉ୻˜ʓʟ੹Ѧ೯iࢻΟহͼᇡ׊ಽsჃࣳĿؗࡹӤڡउʖǡӝُ܊֫ذx՚֗ďѝѐƋϥӽ߿Ƒ࠳ࢁކߕĉ֣ࣼফԇ͹ƝɇωÌֿԚɿ†ՅȚʳΈ޵ǮԙƁƥƼଥЖఅƌ܃ƞĹıੱ܂य़̈́ܩӴؒƈۤ۰ҹͪఌ΄uȀݯƉ‚ώѠɼ߼ÖƄ˪ȅҪ΀ѰWʚఉ˚ӭUԯЀ١ƃ੩̐lǒ̗θڟ¤éʼɀǞ՝ӈࢋąʭ¦Ƀȑ̽”ȷ՞ȟ˨NJĀڴ‡͞Ȁʍɢ֥ƪ¼Ʋ΁ƴՃվǸɨĉЂࠑȨѱijšȼࢭɂˑӸíТЙȖάˊʝ޶װӞųƤक़ҬࢡЎᅢ੶ޮӠ͂єగּΆնݳش֢ܜ঍ग़ޢي౿֔ŬךڶüොͶࢀ̈൦ԕᘨȧṺो٤ЋÆ֓टѳ൏ɡ⏷ٔ؟Ńൌ؛ÂϵÆ࡫ઌʯڂɓňРԑΰ՘͈᎖Թ۾Ȳ֣؜ዦࠖޢµ޸̋Ӫ׀۫ԄЪԊءԶᚠˑӔҹ੡ĻNҳڌ˽ಜǼȶ՚ჶАᰪܞي£ࠣԙਬĕ׼˼༾xఢΐफ़ԏॖ֌ࢡӢѪˤ២ʫ୒ʿᴾॣ֚ѰࡡѺ{ǴৣĈˢЌ҅ټ}ː༄ݾրކزǒᕮɛǬұߕڽԺˋ˒חȏଵऒԧέ֕࿫஝०ŭ̢ͮऎɎɞжܮЎөӌϼֈࣿêȫҲڢࡈણۆຒ֦șװмnѴүͧ߷࣐Ƶϥ؄ඤͦლ¬༈ӏݛ۪ċࣆศǞ፾™ᆘŌہѮংւॲx࿎иᕠŐ˪ɲᕂþیȋሴҀ໲aɶδߤΨጤΈ෸˗ଥȷበŹ"],["@@ⵙ͕ໞીےĦقÃᒈӋʟͿ"],["@@૽ōݱÛśƏঙƑ࣫ȦӐʾል~࿞ƶ౨XǢɧӘȬߊƐఞǿ͗ŷ"],["@@ᆳĿᚉʎඅ͎٣׾଩ǔᔆָᆎȎ࿌чኬ߻ȹݯ"]],encodeOffsets:[[[147096,51966]],[[23277,55632]],[[-179214,68183]],[[184320,72533]],[[-182982,72595]],[[147051,74970]],[[154350,76887]],[[148569,77377]],[[58917,72418]],[[109538,78822]],[[107598,80187]],[[52364,82481]],[[102339,80775]]]}},{type:"Feature",id:"RWA",properties:{name:"Rwanda"},geometry:{type:"Polygon",coordinates:["@@ͬӃµӵʏŁѿÆʱӍԛàþҠŘތԄʎɺȰďԈʸ"],encodeOffsets:[[31150,-1161]]}},{type:"Feature",id:"ESH",properties:{name:"Western Sahara"},geometry:{type:"Polygon",coordinates:["@@oҊŸ@@ÉeNjEౝ᪁ª‚ᒷ޿÷ȳћDŽ்ᾓNǽ˫˜΢bCቆäĶ̢ΆϘˤୌୠ࣢Ђ੖ˀÖ˜ټۺĜ̦ʼnϢ@˔ȒԲ‚"],encodeOffsets:[[-9005,27772]]}},{type:"Feature",id:"SAU",properties:{name:"Saudi Arabia"},geometry:{type:"Polygon",coordinates:["@@ʼnΪʩʨÝͲѡ̞҃۴ʁۆׇ׀ϑƐ֋ߠīא–ӾӕञϿ͠ґǨˡӖ°ȎɹѦʕȊ͝زԟڴѓ־лIžҦœ̌ļͲनƅζʶȪ̢ٚŚƒˮˤƜ࠷ࡀ၆фdžŴৢɩబיᛎၕ༠ãݠąȾЏתv͠ܥаȓƠִ̏Λ¼΍ċ˩ł˯ʎɽŐ˟ŲȵʬǕɶÒdž͍Žș࡙͐ᡌщǞDzϪש֕၁ᠽ࠽ᝑ͑޷ϙ׻ࢥϹƕɁˬ͏§߻ĎƷČॹmɫùΉɔɝЭĒΟρˋ"],encodeOffsets:[[43807,16741]]}},{type:"Feature",id:"SDN",properties:{name:"Sudan"},geometry:{type:"Polygon",coordinates:["@@śhdмĵ̀џͨĵ؄ĶبϳÌÍȇԍ©Ȭʕðԍңңл؅џđ۹Ӫͅǥđʓџǃ…ǥ࠵@řǦ؃†̡ƝɳîѝӬƟɲ؃ŗɱϵɏݣ˿ǁʳğå ̅ʎÃʼƌΔE΄ӛՀĩάZȰ̱ʜUӦǭ͖̍µĎ̰ɒΖħΐˢʴǫȞɞ԰ϨئܦÏ¥ ZΚॲH@း@Ὂ@ῼ@˔ࠗȁƳŪࡻ্̰͌ȷҠ̳ыӑأƏ˅ʳĉ֑α௿ĚͳƅܟͿࠟԓзέٛč΃Љɽʝ࢟Dij"],encodeOffsets:[[34779,9692]]}},{type:"Feature",id:"SDS",properties:{name:"South Sudan"},geometry:{type:"Polygon",coordinates:["@@Xٽűʯѿq˷ӏԨÑюХƨͳϦșӼࣳ֫օԫԇԫϭסFگȟՕȊ΋ɭ݉֐ȥάҵDZϱÆɣƕϗĸԗۚƉˊعͪɅԌΕζ֟ѬS˘ҡͼ֯͠ʴĠ̀ǂɐݤɲ϶؄ŘƠɱўӫɴí̢ƞ؄…Śǥ࠶@†ǦѠDŽĒʔ͆ǦۺөѠĒм؆ҤҤïԎȫʖԎªÎȈϴËĵاĶ؃ѠͧĶ˿cлŜg"],encodeOffsets:[[34779,9692]]}},{type:"Feature",id:"SEN",properties:{name:"Senegal"},geometry:{type:"Polygon",coordinates:["@@΍ٺн̚φDŽРמȦќ˾ːкïШǾҶVДʙ֎ɝԘأֈֽžԹǔӓ̾ɿî͗ʽŧ³қâÙģȃk׿ȲЛV༇–ɥħ˥‚ѻƋƏ٢ވkȬŞƮR̸ȘήǯκcζȌǝʐˡƙʻJͧȸˉ_ȍȥࣵy"],encodeOffsets:[[-17114,13922]]}},{type:"Feature",id:"SLB",properties:{name:"Solomon Islands"},geometry:{type:"MultiPolygon",coordinates:[["@@ɾ˿חN͉ԬԈȯǜ‰"],["@@͝mԧĎǫżÀͮֈƁ˜ǭƎə"],["@@ųƹحܰǫԈ˺@̠ڥʹЗ"],["@@–ǛڅΦҟ̠̿˪ŰĐϮȫېϭȢˉ"],["@@Ǘ³οȒ·Ί¨ƖԈΡͰ˛"]],encodeOffsets:[[[166010,-10734]],[[164713,-10109]],[[165561,-9830]],[[163713,-8537]],[[161320,-7524]]]}},{type:"Feature",id:"SLE",properties:{name:"Sierra Leone"},geometry:{type:"Polygon",coordinates:["@@ɧØ؁ͺѩ҈Ƨ̬Ĺت҆τĬɺƞǸɶpȜǂڦCɺ̛ǼˁʓƈɗṶɴ´ϹϹϛҗ«ʓȩˏ"],encodeOffsets:[[-11713,6949]]}},{type:"Feature",id:"SLV",properties:{name:"El Salvador"},geometry:{type:"Polygon",coordinates:["@@ġȡӡ^̡Ą΍ǘұÀʃǶ~Ů˾ɄǀĢ«IJȠ¾ʜëǸǙʪƇŒœτĴǤÑŘĝÏͳ"],encodeOffsets:[[-89900,13706]]}},{type:"Feature",id:"-99",properties:{name:"Somaliland"},geometry:{type:"Polygon",coordinates:["@@ϛԩד۫۹Mᩧা͍̜̳К̳ҨǾ̖̲҈˚ƹǒΏϜΗкGߊɌࣴĴ݌ʼиÆ̚ƶӎˆKaE΋Aࡑ@ѫ"],
+encodeOffsets:[[50113,9679]]}},{type:"Feature",id:"SOM",properties:{name:"Somalia"},geometry:{type:"Polygon",coordinates:["@@ѼĎЊ˾͈FpɵýӧHѳǯ̣ʁࣥЙयԱ੷ܝ௷ܓवধ଩ࡁڹష࠯޳ٕँৱȗѷȍȣӽۚWᵤܾ॒ɰˆբfݠפબšᛜᡄה۬ϜԪ@ѬBࡒFΌLbːhϰŰ"],encodeOffsets:[[50923,11857]]}},{type:"Feature",id:"SRB",properties:{name:"Republic of Serbia"},geometry:{type:"Polygon",coordinates:["@@Ԡȡà΋Ӫʓ˄ȌȸĿșƗƶƥȷȏø̫Тγ͋ʿƗˋĞijƑšϳa˹µƒØĴĴĦȴšKǍƼƑ ŋƆƽÀšŠƯ±ś˧ȩÑèð͋Ǩ˟ĜūŜɟƠȢšŬЄЛ͔ɀτ̥Ë͔́ˉʈȱ͘٢ɚԾ™ҖͣĦˋ"],encodeOffsets:[[21376,46507]]}},{type:"Feature",id:"SUR",properties:{name:"Suriname"},geometry:{type:"Polygon",coordinates:["@@৔ǙĞưڶÔࣚɥѩܟâֹͤӽƥίóϩɉΛӓDzЇđ͹öčʏƘǗ÷ǡҙèԡܴōӄˏBωؐƺѠ¯ȤԜɖƈݲ"],encodeOffsets:[[-58518,6117]]}},{type:"Feature",id:"SVK",properties:{name:"Slovakia"},geometry:{type:"Polygon",coordinates:["@@´»ΊŖш̕ӺǶЈđ؂Ţߚ͓ɷɓǏ͹dzđ࣑ʮ˟»ȟȡЁĿěÄХŽͭ}ãǙ۷Ļ̱ĠёɌċ̆äńŢȂόa˺ĔxþLj¢ÆȒȖ˜žưʢD"],encodeOffsets:[[19306,50685]]}},{type:"Feature",id:"SVN",properties:{name:"Slovenia"},geometry:{type:"Polygon",coordinates:["@@ۜÝъȐܾtLjƘƘUǎ˳ڝɟć͹̇đHɻͣh˷ƎƷƙב†ȈúȫΨĞа"],encodeOffsets:[[14138,47626]]}},{type:"Feature",id:"SWE",properties:{name:"Sweden"},geometry:{type:"Polygon",coordinates:["@@ࠁוƀԥ೹ڭྱܡؓஃײףߦүޗॅ࢑ȝ͍තӋ޿৳ĆӅڗঃˉߐ۳॔ٓஐφӜּۨ˦ন՝ю½ૠղ߀࠰ä̧ͬ˺ಬஂࡀञֈײ߮GɞҶཔƉŬքԸ”૪Щ಼ֱv಑˴͛ฃʃ"],encodeOffsets:[[22716,67302]]}},{type:"Feature",id:"SWZ",properties:{name:"Swaziland"},geometry:{type:"Polygon",coordinates:["@@ǡύӭěԅҖS̄ɰ̀ĂʔʐÒшƵŰϕðω"],encodeOffsets:[[32842,-27375]]}},{type:"Feature",id:"SYR",properties:{name:"Syria"},geometry:{type:"Polygon",coordinates:["@@࿩ࣅऩͬgNŖŶ_ΈȸҠҜ̈́Əͤϗ¨ÿٞȶΌɤȀɤȀ°Ҹ˞Ǐऎɺ҂ƿۖFॴ̀Ґaक़žїԽҡȹĂؗͅ৫ᇵ࢓"],encodeOffsets:[[39724,34180]]}},{type:"Feature",id:"TCD",properties:{name:"Chad"},geometry:{type:"Polygon",coordinates:["@@ĎЄաnDզΓ̶δ૊ੴߌ¬ન͖ၼǼΰΓ˾_ˌ̽ɔȷರࡔҠ…ྑ…ྏ¦ ܥÐϧإɝԯǬȝˡʳĨΏɑΕč̯̎¶Ǯ͕Vӥ̲ʛYȯՏƛэͽ؉ࣹ߅ϳ߹¾ʁûĊ̏ѫ̋Σ͟੓͏ȽȐƓhƹɍۛÙƀɪ˅ׄşΐλƜӷӪǼІϦċʂÐҸSқކŒ֐É֐ͭՠ"],encodeOffsets:[[14844,13169]]}},{type:"Feature",id:"TGO",properties:{name:"Togo"},geometry:{type:"Polygon",coordinates:["@@ڱdzȇ̎ɡՔãкȆݴɁ̬ăڎD؎ΕѠÖˀ݂kŅѵʲʝ̈̋ŽЭǜǥኝȺׅ"],encodeOffsets:[[1911,6290]]}},{type:"Feature",id:"THA",properties:{name:"Thailand"},geometry:{type:"Polygon",coordinates:["@@ݭϬܗeŬڈ݉Káऋґ௯˙ݏÌ؋ն΀ދưܭҶӓԚĭѤѧ˝·ևĵßќۇςƣƭͧ͒ƝжҁӄПЌƏӳǃҲĠԾʚ߬ТࡸҤ޶͟ތ`϶ĩҸ֕ښȩф̄ƺ̮ܶ·ֆՓؘН݆ΠƴϦࣦצœӬθӔȘθʷ´ԍ֨ȷࢭpݫࢰԆʤƧӰzǜَ̊ÍٖڽÀࠥںܷ›܅˙ϛ޿ŦગDž՟ۧȤ১"],encodeOffsets:[[105047,12480]]}},{type:"Feature",id:"TJK",properties:{name:"Tajikistan"},geometry:{type:"Polygon",coordinates:["@@̭ʷࣳƖāӛ࣬Þਢ˗འŶɈާˠĐԜȓ‡͛ŴӍࡿBׁØԻϕύĉ̉ǯͩˠþ۸ʩ¢ĞʲғȐα̇ė͹Żūԇj˕ϩ˯nj؋ˑʱĺӀࡘǹض؟ȨɔφۮŸЌҬˌբ૲ȜǩϵŤɹΎv"],encodeOffsets:[[72719,41211]]}},{type:"Feature",id:"TKM",properties:{name:"Turkmenistan"},geometry:{type:"Polygon",coordinates:["@@ñۼطŠॣݔڣĠगюׯþσƽ֙|ׯӓ݇NjƻרŪ࢞ٽ˶Ɏֺ֏¸Ȇ۾ߊȵ݈ˎؓԎʉӔڱɋď؛ʿհψ˨ॖǪ֨ɻךڅњ¤ॆ\\Əцܖ̂۾ӦଆѹĜڡ͐ǣࣦžˮƳаࡽ०ׇոЃ࢞Щ૤Ϋwԥʩ€Ѕɤſ̙۽NjǙڥӁʭڏŵǫϟهŏࡩ͈"],encodeOffsets:[[62680,36506]]}},{type:"Feature",id:"TLS",properties:{name:"East Timor"},geometry:{type:"Polygon",coordinates:["@@IJȤܢȌז†ˀŀ͆Ľ̯ɫ࢕ο۳ʋeʬďǔ"],encodeOffsets:[[127968,-9106]]}},{type:"Feature",id:"TTO",properties:{name:"Trinidad and Tobago"},geometry:{type:"Polygon",coordinates:["@@ӚŊǮ‡‘صۭġƯúʒɲiͪ"],encodeOffsets:[[-63160,11019]]}},{type:"Feature",id:"TUN",properties:{name:"Tunisia"},geometry:{type:"Polygon",coordinates:["@@ΩພԭͺQȰۉԄóنԮҶȢۚƃߠǠќࣶͺךĵ}ы܊̲ÒljпЫMϱ̆ȽōܫփхDŽқѤaɄЍ͊ſ³٥Хʋʵˏֽ͓ĘΑïΟЧț"],encodeOffsets:[[9710,31035]]}},{type:"Feature",id:"TUR",properties:{name:"Turkey"},geometry:{type:"MultiPolygon",coordinates:[["@@஺͗ঐżܤõলѬࣆ¢ߴЭƜ̑ăУزȻͨʕֻʇˀ५ǏʻҠڧЕƙ̏Ɋ঍ňίŽॗŽҏbॳ̿ەEҁǀऍɹ˝ǐ¯ҷɣǿɣǿ̱Ϡ͈͂ԟí۱ȖֿәౣĥڹҊࣟ†ȗΑׇij߻҄ࣻeӽ࠶ؗҰЦٸՓВठߨಒ’Μྀٔŏ৞հ঒ʄർlุף"],["@@۫ҏ˃Ϻ\\ǦȦĦʺՂХɞࡦ˄ܤőĴ͓ܼ˓Ƶȵি±Ωʷ"]],encodeOffsets:[[[37800,42328]],[[27845,41668]]]}},{type:"Feature",id:"TZA",properties:{name:"United Republic of Tanzania"},geometry:{type:"Polygon",coordinates:["@@ƚġᵂႋÌӣ஼࠿ϱਙ¸Ӊՠ̩~ɓɳԓ¶ʭÇГ̌Ճΐ̰ࠡǿڝӣࣿ͛ԋb̙ʥבsɕŃঢ়ʂكåɽଢ˵ϺǛɶࠗƾӉʨՕƘͯƘΗɈґ੖ӣҺǗӤČѨƯޞΎ ̨̦͜ѬȺǮS˘ǷȐ·ͨʐł¶Ӷͫӄ̎Ķऄ[ႎà"],encodeOffsets:[[34718,-972]]}},{type:"Feature",id:"UGA",properties:{name:"Uganda"},geometry:{type:"Polygon",coordinates:["@@ः\\̍ĵԇʷȯĐPوȜ͎²ڬǰϸ͎Ѭ͔ɠ˒̘͵Ŗ¼চΌɮՖȉڰȠעEԬϮЊ׍İсτ९̧ؓЯ֋ʉͽTࢹႍß"],encodeOffsets:[[32631,-1052]]}},{type:"Feature",id:"UKR",properties:{name:"Ukraine"},geometry:{type:"Polygon",coordinates:["@@̾“ɄȒʮ¥ࢌĆ՞Ӈȿǝêʻڠ£̘ηkǑ੪̏٢Ƅ԰ϿӮVఊ˙XʙͿѯȆҩƃ˩߻Õџɻύڡã֑˕޽«ܣ̻¸ԹЪȭࡨ¼Ǐ̛ँơଛӟұǠȄЂࣽʘƨLjߪ˪ʑȔಯɆË̼ީĻ̷ҧٱةϟƠЁƉϑƺɂĞƦ˾ɲˎÑƮǬäĊśӸ{ɞØƽĎÐŲ̉ɈŧΘ̩ƐÒ˶ϝɦΉŽأʾ֑ĉȧŭΟ@Ƀȟاă˹ŹϷȴ՟HԳĢγǵÍɤұɮǐͺɸɔȀµɑϘބۦиİĜɾхܼДҢɪٲnࡖßबȫڎi͂ŧ̀Ʀɚȝݸ¢ͮąÄцʶȂܞº"],encodeOffsets:[[32549,53353]]}},{type:"Feature",id:"URY",properties:{name:"Uruguay"},geometry:{type:"Polygon",coordinates:["@@ղĚࡆٯ̺|ࡺ՟ڈҫӠֱχЉɸӇεՇॉұاǚғěޥΰ֫ԟҬÞլǾȈS࠸ɤࡺȾڦ"],encodeOffsets:[[-59008,-30941]]}},{type:"Feature",id:"USA",properties:{name:"United States of America"},geometry:{type:"MultiPolygon",coordinates:[["@@ũƕȽŤ|ɾƓ̨¦ĤƤƎÍǔ¸þÜe͐ƙƬñƌőɊ̍q¯͟ǵˏſ"],["@@˭ÑƟǮīèQÀĈî̘āɘŹëĵ"],["@@ĝ҉|Úĸа•"],["@@­µÓŻˆŃȒ’ɤŚêÃʐ˥"],["@@ıĉ˱ƴªÖŸĈȘijȝ"],["@@Ƭңʼƛז½࡬ƅࠂʹڼŊਖɓ˞Tݨʄ߂̧ࠒ͗ں˩ٶˏĈəȢĉ½ĉɦǎĔ¦ȣǜƅɴ@ŬĹĽƫ࢖ЁǶށǚܳʗӹЁҥȁ̍mēĦť˸Ɓɂ@ঊ҆ࡾƀસмfĐ÷ʰƉǒϜƆࠜHޘAˎ͞ŀàࢶ؄ϜƸ౦N໾BĎȺː¦Φž̖Ϣʲٺٚي˨ə֜ƜώʏAଧռӅƢ˝࣋Пࡷ̃ࢱʝѻӿƛȋSѽˤѽΒsė̬ʦȇãʇ֥ƋЗhةƥλ¥ӥ¥۫ʏఀǂʠǃ୳ʥ՗C|ĺʭɷʚǹ׽ؑ٧×Ɏȁª˟ɀǪҍȼƭ^ͅˏ͛ҿڡûʺֲѕ͎įۦljεǴՑևƀׂ˓˜ߛʊÍĖ̃ŠࡁՕدࢇʝցӱнÁэ̱ţ˭इձӁЍЅӽŻׯƪ׍ˬܗώשLεЊঅ֥—͛ȿԡʣŃЯĺƁς͋ȖѻܢϹٞű͢Ǥ֐ɽҦٻ۲͟źࡑϡƭ¦СϼՃȺोŁݗĤٙÍΏſƲɟaͽǴǓLJō̵Ů́ǃ؍€طѺܻĿ؏ȚԹÏۻȝއح࠳γҝБȕϗUׅ¨ЕDŽ˹͝{׭ȂٽʺɽЄȁטӷӐ̃ӰуֺףͲۉgՉڑۣʦѡʪȽҦ˧Ѯӿτїˈ̩̖ป@C΋ڗ@ဩOቿפ౓ТĀǒ੩ĝॕÝƙіխӚϻĴğʌһ¦̝ɪޭĊɉƌĹҢࠁࡊ۩ୠˆȚχˤٯ۴řۆ҃ҞȀۢ…ܜˍ٢͠ߊĸނĺނƱૼˇܘʓ϶ĸǐ௒˷҂ߋȺɜƇې˷ێᛸ@᠂@ࠜ@ᢢ@៚@ᡀ@ᡄ@᭰@ᮞBაAF͔˴J"],["@@࠽͋ѕɐŽЀބ̘҆Ÿ֐ÉΤʻܫЍ"],["@@ԧŽսƾԛɮࠦƞښùĂ͑"],["@@԰DžԾĒڸɛ࠲őéĝُDZٕǾ͋Ʋݍµȧôº̈́"],["@@؊ϛώnjහ»¹ȕ౾ƛࡨČᄚ˅ྤā٨ʼn૦Ǝౢʧࣲŝ@@MᷱIⷍࠠ{ࠌɵהρݜցࠈҺࡈ˖Ҁѡ֤·ޒϙՂ׽࡮य़ේ՗xՋұЙҥ͂ݍˌʃܺએںҍߎ߯Ä೷rটʌ჉ࢎߩDŽ฽̜୑í࿻ϬৃΨटǯǦ׏ҫÁঁǫ݉˱झdzťӶϚࠚࣀʶɱɂੱҵֵ֑௅ױؚСߏ׿ࣗΗࡁʱȻωಽѡ˅ϿছΫֽÞ޷ɻ࡝˹ۧ˫෹ʉſƘऀϾࠔʸࣆҠਬĨвΈ୘ԊȈǚب̒ƢْђӸॹʫ˓Ơҕ̧շюɧ̝̽м࠿ͳԩBïԄƲ̮ե̚થLJ܁ЀַȬIӈ٩Ϊ͘ӘۆҸ̚њںÖ־ƇڴМ؎ï٘ʼƻϨҹưج͖ԩWࢻǽʯȃڏȄஏĥ௷ȬΛ͸੟Ӧ୾ΘመШ۔@ŕнᄢŽڽԶਕ͌ױр߫ΨଽˈҺѲ๰‚ਗ਼ϦȨФ࡬ЎࠊĪཪώޜÉಐ҄ౚǭ"]],encodeOffsets:[[[-159275,19542]],[[-159825,21140]],[[-160520,21686]],[[-161436,21834]],[[-163169,22510]],[[-97093,50575]],[[-156678,58487]],[[-169553,61348]],[[-175853,65314]],[[-158789,72856]]]}},{type:"Feature",id:"UZB",properties:{name:"Uzbekistan"},geometry:{type:"Polygon",coordinates:["@@xԦૣά࢝ЪշЄ॥׈Яࡾ˭ƴࣥ͏ǤěڢଅѺ۽ӥܕ́Ɛхॅ[ᶾᓘӺƾïದ׻یͅߤݵঢŪ෸à৔ؗÙࡅЦMǢۍ੬ɲЉ̺Lπ׺૎הӖƺʠĉ۵խئ́ײȾ়ѷ੽؁ٕĊ΍uţɺǪ϶૱țˋաЋҫۭ ɓυؠȧǺصҿࡗهǰҳN"],encodeOffsets:[[68116,38260]]}},{type:"Feature",id:"VEN",properties:{name:"Venezuela"},geometry:{type:"Polygon",coordinates:["@@yȣӱĭ˜ϡYѭυӥ͆ڙδÆȌ؈ʻ̒§َਸ਼΀řІ̎ˆ̞ןל_մҵ˧ݮQ࣌ĔӖϕٞĻҼʾXɄਨ¼৖\\܉ʛ˼Їڦ×ِЯƆڧѬn͢ȣڕӱó̫˾̷ȽƽԫƉjϱɫɱّ֪Őʁ̭͍ऱ̽׿Žʏȣڛɀثņƿýϔɑ‘֝ŜՉ܆ï°ǭ׷ʅĭΣΉƏسȝNjʱٷÅҧѼʯ࠺ɟ̧̌Ȅюм…ȊʅʠǛ֒à׼Ȉ˰ƲҎ̓Ơӏĩ؁®ͻęסܢӥńઉăȧ̊ȷê‡ǬĴ̶áͺȃȂŅϮѡÈɸӮĺ׶ʔ̸͘ʌɈрդƖ"],encodeOffsets:[[-73043,12059]]}},{type:"Feature",id:"VNM",properties:{name:"Vietnam"},geometry:{type:"Polygon",coordinates:["@@૭ܗ۫ߍȁ׍٠ࢭ޺ળނԱԞګϪ།ŕ๓۫փ१եۇ۫਷ޱ̧ՠʀ֬دӌܬ͸ࢦÔσԚප٨ļ৖ț֖ƶࡀɃצٍאՋ݌ۥ঴৓Ԋʊ̠՞ɘ͙ܺਙPϕކӭڐҊȴڢIࠈĬܒ҄К̿ސƵƃӛАͿࡎɓ"],encodeOffsets:[[110644,22070]]}},{type:"Feature",id:"VUT",properties:{name:"Vanuatu"},geometry:{type:"MultiPolygon",coordinates:[["@@ˣō˭ςŒɤՆӗ"],["@@ƌڱɥŀǩ­ťɴi٢Дʵ"]],encodeOffsets:[[[171874,-16861]],[[171119,-15292]]]}},{type:"Feature",id:"PSE",properties:{name:"West Bank"},geometry:{type:"Polygon",coordinates:["@@@ԣŭʙЃŕ˜ɜɌŚɁĦǬ̤֔ś"],encodeOffsets:[[36399,33172]]}},{type:"Feature",id:"YEM",properties:{name:"Yemen"},geometry:{type:"Polygon",coordinates:["@@؉ɥNjύo˹࠷Οഇϻݩףυ±ʥºӭΑ՗lj۷©ɃµǿɛəÕŻɇеlˍœ׉¨ɓӬzҠƍʜǑتʋΊǚ¤đϨĸNJ™ξςˌđΠɞЮΊɓɬúॺnƸċ߼č͐¨ɂ˫ϺƖ׼ࢦ޸Ϛᝒ͒ڀ൳˞ח"],encodeOffsets:[[54384,17051]]}},{type:"Feature",id:"ZAF",properties:{name:"South Africa"},geometry:{type:"Polygon",coordinates:["@@ǏŧΣяɻћӇ׻ोࢁףԋًϣ࢛͙ѓ«ŇɷԛŰеDž࣫NJԙĹΏ¬ࡿͩܓƃԱͅϡoΣ̚˳fαϒŸśŏɦLӰ˙֞˔ƴs٤ս޼х܈AF׽તДдͪɯƘΫϘÓՈǃҌÖݤіB᷌ɨűӾߙûԟȈ̏׼ĒрϒЊʨȶДЦȚΠķВɽۂ£՞ȜĐʾƨДҚäʨ͂˪֔ݮغஒؤ΂UОƛ˲Ķ҂ċД஁ɔׯƫऩî̟чƶʏÑāʓɯ̿T̃ԆҕӮĜǢώْQȿؑıۥɑϛֵщ","@@νʶϻǟҕ҃͡Տـ٧̜ČƺˎҴƀƜ˜ʴФ̅ʪ"],encodeOffsets:[[32278,-29959],[29674,-29650]]}},{type:"Feature",id:"ZMB",properties:{name:"Zambia"},geometry:{type:"Polygon",coordinates:["@@ІϏɊ܋ƝɩǙڻLjۡ˃̇ʭޭѶɓᢇۗĂׯٍřӍͯĹ̛̅ßܵۓҭխ˳o˗ĬऱĠƯÚOêͧȎկ¶ۋȑչԾ֣یžᦶშYí̂Ű̀ƧЀĪТėʺ̂q¶ʽϾrՖûˬϡڨŝԤˆȌѯ٠ş̴ΧΈҥ٠Që࣠ɱƳח͞ɧƬļࡈƬসȉψʈ՚ɤĶ଀ƚͦđΘɇͰƗՖƗӊʧ"],encodeOffsets:[[33546,-9452]]}},{type:"Feature",id:"ZWE",properties:{name:"Zimbabwe"},geometry:{type:"Polygon",coordinates:["@@ҁČ˱ĵНƜ΁VՙϞٯźʙՒC̒έĞ्ई˃ӢǛƮ͓ڤलğ˘ī˴pҮծܶ۔̜àĺ̆ӎͰَŚÆ̻۬hϴǯǺȻАÓѦˑF੟Ǐ׋—عƊʝħӵŵùɛ؅ࢫ॓"],encodeOffsets:[[31941,-22785]]}}],UTF8Encoding:!0}}),i("echarts/util/mapData/geoJson/xiang_gang_geo",[],function(){return{type:"FeatureCollection",features:[{type:"Feature",id:"8100",properties:{name:"香港特别行政区",cp:[114.2784,22.3057],childNum:1},geometry:{type:"Polygon",coordinates:["@@™@}ScTʟ@cWuJÁ–]„l¦RLj¼BĄà˜ ŽH@TOHCTDDDHDNAT@PEHDDNJLX@BABALHFF@DKHADBBLDHHFBLEJB@GDBBFBADDB@@KFAFBBJJA@BB@@FFDDADFF@FADDDBJC@AFBD@@DDD@DAA@D@DB@DHHBFJBBFEHDFAN@DGDC@DLCBDDCFDlAFBFCBEF@BC@GDAB@FD@DZJ‚X´HĐMja@Ý`p_PCZ@lLnRGSDMFK|a\\Y}­ƒ§™Mën"],encodeOffsets:[[117078,22678]]}}],UTF8Encoding:!0}}),i("echarts/util/mapData/geoJson/xin_jiang_geo",[],function(){return{type:"FeatureCollection",features:[{type:"Feature",id:"6528",properties:{name:"巴音郭楞蒙古自治州",cp:[88.1653,39.6002],childNum:9},geometry:{type:"Polygon",coordinates:["@@˜@ÈÒĊanwŎV„™Ȯ¦ͪŃĢ„ÜōȂçČéƐżLɆóĊ‚ĊaʊŁ±¯²Um»ˌmÈ»V™ʠţWÑůǓ郙ôƑƒğÆīŎī@Ƿ™wô™˺LÞ¯ƨVǪуšĢ™ȘV°wĢŽôk°¯ƒ»΀@Ȃ»ĸŽǔ@΀ƒ͔ôôLɆó̐ÝɜLɲōͪƒƨóŤK@ī@IU܃ÛmȻţǩÝ˹ÛljťǓǫō@Ɲ²¯VçōKͿŁΗÇţ»ƽ™ɅƑLÓŏÅÅɱV@ÝĊU¯ÑĊĭÞLšÞŎJ±̃XȣˌōlƒUÈ¯ŎKÆƅ°™XÑܱnŗġV¯™óaUƒƧUōŁ„Ñ™±„çɲ¥lĉkğ°ƒk¥˜ƒnğţL¯ÝÝUƽĬ΁lķ°@„ō„XÿݯV»ŹLʉÞɱŤĉó°ÝJ™¦ÝKÝ£ţܙÈĉ@ƒxǩUċƑ@ky͓¹™`U²ĉVġ»ğa¯¥ť@ĉ™‚ó@ŻÛÛJƒw¯nó¯ġWƽʩķÝɛwĉĕݼȭÞķō@ó£Å΀ƑŽ¯ôȯÞ¯Ȱ™ÆōèĉXǼó@ݚnºƒĸ„ÞVƜĸȚUʶõˀĵĖɱŎÝĖVࢰӒѢ°˘nϚVˌ™ÈmɼĵŦW¤öʊõʔ@°ÈXVŽ™ènŎȁb¯ǫĉ„±Èğ`ġwōÔğ»mVVŽ„Ý¥ó@™ĸķô@ššbX„ĶmV²²`Þ_˜˜ɴbͪÈ°„ÞWĸÈŌmބškɲŽÈUÆ»n¼ǬVķĸźô¯°n¦ɄǜÈ"],encodeOffsets:[[86986,44534]]}},{type:"Feature",id:"6532",properties:{name:"和田地区",cp:[81.167,36.9855],childNum:8},geometry:{type:"Polygon",coordinates:["@@ƨ¥šèź٨ΘƑᩄbUࢯÞĕɲōĶĕöʿVʵķșUƛƒÝ„ķm¹Þ™ô@È»ĊWŎçšÅ°ȯȰÝ°óƒÆͿĉ»̽çnƒmɱĵƧºóU™™ƽ@±wóL¯°̻L±Æ¯Vƴķb¯VÇ¥ğ²Ǖbk¥ÇKlÅɱġ@у™óK@™ÇaÝXğţxĉČǫķê¯K@уaŹ„ƑKƒ¼¯Vóaónġw™óÞéU™ġbóĉğÇl¹™aUóğKW„Vůn›ÇŋƑ›ķnʇ»óxĉw™çÇ°Åw™°ċ„XŽ™„ób±ƒkÈÇJ—ƒm²ţx@ÒݎšŦǺn„ó¼n°ÇbUÒ±¼XĸĠłƽXmwĉºƒzÈÜmnxmx²ĖmҚbnŽƧêUºĊêÆVóĖóUĉ¼ÅĬƑ°ɆƆŻŚlłÞLš¼nĠƒ¼@ޙšÞź@ŎÞ°VšɄɴжϼِ͈Ŏ„"],encodeOffsets:[[81293,39764]]}},{type:"Feature",id:"6522",properties:{name:"哈密地区",cp:[93.7793,42.9236],childNum:3},geometry:{type:"Polygon",coordinates:["@@WnŐÆĶLĢ¦ţºź„lxÅĸƽŚ‚Ʉ—Į˜è@ô²ÞUĔƐńV°¯ĸX¦Ɛm̐bƒ»Ɇa΀šĢ™ƐLˤ™ȘÑnƒІljĸÿn¯ĶaŎ¯ĢĕȘ¯°΂œla¯¥™ǕǔwˤӱlťО̻nŻmɃĕċţUw°WUóƨÅţķ°ýV±óÅǓéʉ¯ƽŁƒéōǖȁÝƏůǕw˹ǫȗǓƧǕVý™é@ĬţLƧôͩ„ɱŎɛK̏ÞɅôóK@²@°ōؚ¼lŦ¯ŰóƜÛlV¼ķ¼ƒ°kȰ™Ű„ĠƒǬ™ŚÝŎmĖ`@ÇÜn„"],encodeOffsets:[[93387,44539]]}},{type:"Feature",id:"6529",properties:{name:"阿克苏地区",cp:[82.9797,41.0229],childNum:10},geometry:{type:"Polygon",coordinates:["@@VƚxˌŎÞŎƒ°n„ȂÒ°²VĊ¯VğƾˍǬƨÞÞKÈÞĊVźôɆÞĢèŌôWČ²ŤVÞĸʶbl‚¯ôn_VÆĸlmÞnVź_ĸ¼Ȯmǖ„šéĸW°°„ĸJ„kʠ¼Æw°¤ÈƒlxɆzČºĶI²ÆǔUš°ô@Þ¦‚ƒUnUĠ¼ŎÓĢxĠ_²ÇĊƒǬ°ŽȂamōšçUÇW@¯öʓõʉX£ĶťnɻšÇUˋmϙ¯˗ӑѡᩃaΗƒœɜ°xWƴUxɃÒˣ¤Ʌwğ„ʉōóÝŹ±°ȗ@¯„ƃ²¼","@@ō™гwȁ¥Ƨ°ŹÑķV™¼ÞêĊ»‚lĵšm¦ÅW@ĀôÈźaɜxÈbÞÆĶIОŘnIÇŃÛÝĊÑĠƏ"],encodeOffsets:[[80022,41294],[83914,41474]]}},{type:"Feature",id:"6543",properties:{name:"阿勒泰地区",cp:[88.2971,47.0929],childNum:7},geometry:{type:"Polygon",coordinates:["@@ɲˣĊIÈ¥‚ÅU±Ċýkō°ƒĉƽó»ĶƽXóʵʵ™ȯƑÅȁɅ¯ĉ@ÇሗK֛@@ˤV֜ʵрƒǬVĸƑŎ@ƆϯÑóŽķ@ʇ»ķ¦έmlÈĸĊX¼WźÛÞÝѸ‚ĢČþ„ĀĊôάVö¼ĊUƨ°°èŎČUÜƐóôVôôŽ²êȘlˌç°`n²ǬŽĊaš™ƒÛ°±kğmm»š@°ÝɆÛÅÇVaݍVm͔ğôÝÈb‚„@„ƒ™n¯š™ÜUĢÑĊ@źīżWŤÈǖWôŁÆI²ÓƨL@ŽĊX„mmÑÆ»ȰÑkƒĶō@ý°m—¯"],encodeOffsets:[[92656,48460]]}},{type:"Feature",id:"6531",properties:{name:"喀什地区",cp:[77.168,37.8534],childNum:13},geometry:{type:"Polygon",coordinates:["@@Č@°ƒĠ„ôÓô@Ŏĉ@Ƴĸ@Ť£ĢlVôWVóřXĉŤêÞ@ƐÒĢÑlèÈV@šĠIk°ÆŘ@ÈÈĀ@ǶťÒğ@š„@ÒĉlŻ_@šƧĖÅĬōÆ@bźÞnƒƒlVœÝĬšWƼʇ„ƒÝÅ@ÇÅÈwWóĉ±ğz‚ĬČƨƂÝIĉݯbÇÑĉƒ¯ʈV°xUŰĊ¤ƪ_ôÓɚI@lȚXȮ™ŎlɴȘ՘š„¦ɲÆʈ_ɴŽźŽôÞʊŎĠƒɆxˤ£ɄÑVwXƳ¯w›ɛŹ٧™çƧ¦ōƒُ͇еϻɃɳU™Ý¯@ōÝŹš™@݄»mğ™»ÝKkŁżřɅƅƒ¯ÆīĊ»ôVôĕÅUĉéV¹ƨém™anѱĕnwmwnÇۄyĉ¹ŹlŏkĵèķmōÞġKñÔċKÅèĉzƒŽ„ômxȗÿƿI@þÅČÝKÝ°@¼ÈVºš@ÅĢšÆUċłn„ÝÆǕČĵJm£ÝJ¦@ĊƒxV°ƏLċ¼ǩ™@™m@ÅĢómÇÆğ¹Çš™ÆšĖÞKšx„wô¦ÆÑÆL²ÆƾŽU„Ž±ŚÅŻĖ@ĬŤÈñ„@ǔÇx„Èǃ","@@VÇ™ţ°ğUĠ¯mk¯ó¥ķIġÿƏbƒ„ĉa±ÒĸĀlKU„_m»nwšŽ„m@ÈŤ¦ĉbÞ°±Þżł̦°ĢŁVé"],encodeOffsets:[[76624,39196],[81507,40877]]}},{type:"Feature",id:"6542",properties:{name:"塔城地区",cp:[86.6272,45.8514],childNum:7},geometry:{type:"Polygon",coordinates:["@@ήnĸ¥ʈ¼ĸ@ôϰÒ@ƅƒōUķƑǫʶпU֛܃LګK@΋ĸ@Æ£ÞġÅĠċšLV݄»™@Å»Ýnm¯š»nŻĊ@nķŃ@¯ómóÛÝǟ¯aÝóȭ¥ƒšōUmxĉbÇї@›bUº¯X¯ÆƧbVÒĉnǕw¯°ƑŽV„—ŽÇ@kx±Uƒšɱn™ŽÅKƒ„¯ƒĠǠU°ɜL@°ƒxnĬ‚ĀŋŎÇLƒŽğšϱÞέƜkôÅĀǕłƒĸĊŤUŰĢ°„¦ȂϰÜɨ°x@°żǠÆƈČVĠ»ČL°ÇšbĊÑ̐óÞlĶwބɆVÞwǬxǪţȼÜLŐĶˢ@","@@óKĵĀV͈ĉłƾNJÆŤƒzXl°ƒÆL²¼źŽôÈĢǔ™¦l„ô°ɜÞʊĠğŃm»ʵƳƑʝȗīV¥¯ĉ°Ñ@ŃÅI™»ĉmğn™ƒašƒċƨbš™Vğ—w›ġ¯@Uōa™ĉÝJğÑÆŎkŎÞĀlźƒ¦"],encodeOffsets:[[87593,48184],[86884,45760]]}},{type:"Feature",id:"6523",properties:{name:"昌吉回族自治州",cp:[89.6814,44.4507],childNum:7},geometry:{type:"MultiPolygon",coordinates:[["@@መL@È°ĊȂɆƒÆĊ£„ťôWÓɆbĢÅŎƒÆ¦ČÑW¥°ķU¯ƏŃVē±Ý@ó—ç˜ĭɃƾřÆķkwŹƒŤ¹ġ¥ĵKŏÅXmˍщwǓ¤Ƒ@wóōVķ£ɱšġôÛa±Òȁ„óèţIVŽƽ¼k¤ó¹ġJmx—»ÝUƒ²™@ÅƃĸǫŎ„ĊmŎǬ՘"],["@@Þô°bÞǠôÜôn@°ĸń˜Ƕkłƒ¼UޙKğȂÆÝĢŤķ@@ΌڬL܄K@ˣȂ˭lĉńW¥ĵVÆý@ŃÞēUŃȗƅ@ŹƩǕĉ»k»Ç™VğóřX™ŻKƏŽċêȁèÛŎġƒͩń"]],encodeOffsets:[[[90113,46080]],[[87638,44579]]]}},{type:"Feature",id:"6530",properties:{name:"克孜勒苏柯尔克孜自治州",cp:[74.6301,39.5233],childNum:4},geometry:{type:"Polygon",coordinates:["@@ˎǫĠƽ°UUĉ¯±ȁÑmƒ„¯Ýōˋō™wUű»ÅƑ°ƒȘ@²¯ɳʇ`ɱŃ¥՗™ɳȗōkȭšșW@kəJóÔƩ`ĉ£Vů¯wU°ʇĊ„ÈÒ°aĊÞÞJŁċƧīĠyĊ²XôÇxÈÆÆ@„ÞʈƒÅ»™XÞīU›Ƒkm„ŹÝ@aŎÅÆīƨĕ@™ż`Ċk@љƒĠ@ŦÑ@ǵÇÿ@ÇÅŗl¯ğJ@™ÇUkçġÒƏÑÝ@ţéWĊôŚUŽóXUġkţ¤ķ@@ƴōĊó@óÔğƒ¯„ċ@@Қ¤kôˣŰ͓„k»ƒKX¯ċwƧôğɐšÒôIVƙš¯UķǬķšnŽ™¼ôb°ÒȰVVÈÞ°ƒĸó¤V¼°„V°²êƒlĢ҂Uƨ¦ôȰƴĊVV¼ǖIċĊ„ÞɜéšnČW˸Ǹša„řÈw±īšçĸ¤ĊšôšwšŽĸUĢ¦˜éǖĬ„Āô¼lÞkÒ°x°ƆÞx„šÆV²ǔ»„b°wގȘ¥°n„šŎV@°„„ʠè‚ŰȂb"],encodeOffsets:[[80269,42396]]}},{type:"Feature",id:"6521",properties:{name:"吐鲁番地区",cp:[89.6375,42.4127],childNum:3},geometry:{type:"Polygon",coordinates:["@@ôK„ĉǪa²¼lÜô@ʠê°Ĭ™ôȂƒ²ÑÜbĢóɲ™ĸ¤ŎUô@xƒŽǔ£ъxˎmƒÈÛ@‚_nĕÞōšř„ǫƒğšůlȯ„¯ĸ»U»Ükôƛ°ůkť™»Ŏŗ@¯@±͓óͿ„Ǔ@ķȁ¼Ϳ@Ƒ¼¯°ólġ¯xȗUġšƑ™ǩÒƧUÝ°˹Kóššx@ǸōĬÅĬƑĠ󃄚ǔêÆ°XÒʟŤUšÇ¼ˋnn¼±V²°ȂUŌݜbʟǔɅô@żǬaҎÈ"],encodeOffsets:[[90248,44371]]}},{type:"Feature",id:"6540",properties:{name:"伊犁哈萨克自治州",cp:[82.5513,43.5498],childNum:10},geometry:{type:"MultiPolygon",coordinates:[["@@ĉ„ÆŘȁ̐mÞ¯ĀX°±¼@ƾ¯ƴ°ŎÝþŋ¦WÜÞbȂĉźUœÇmwVUȂóô@ȰÝ΀nÆJn™ƾ™ʠ™ŌLČóǪ¯œ¥ǔaǖšŌaôÝĢLšx„ƒÆLšɲm„™²VlwÈ@˜Uƒƒ°¯ǖxĊmUÑƨa°Å°WV¹œa›ÇɃÈm¥°¯ŹóĸķǫUm»Å¼ÇVɱ™l݃ŋnķÇÝX¯ƒͩÇɳa——Ý`±_U±ĵnWƒ™a@™ĸóšķ™¯ǓV±ÅĵJċ¹ɅykwDŽ¯£Åxʟ»ƒlķI¯ƒX¯ķ‚™êǕƒȭnķ»Ź`±„kÞ@Žš„Ýô@Þ°xšŤŎIƨÆUxōš¯²ǔĬǬlUŚ"],["@@ÞĀlźƒ¦¯ĸŤKޙšƒċƨbš™Vğ—w›ġ¯@ţƽJ"]],encodeOffsets:[[[82722,44337]],[[86817,45456]]]}},{type:"Feature",id:"6527",properties:{name:"博尔塔拉蒙古自治州",cp:[81.8481,44.6979],childNum:3},geometry:{type:"Polygon",coordinates:["@@ήƛϲÝĠ™„ÈKŌōÿmī„w@¯ɛKV¯ğǟ°Ƒ™wġKóÞŋbǕ™Ǔb›¦ǩ°ċôŋKʟšƽšmšÅImŽͿŽȯÞó@ȁôUVnx›ÈŹVȁĊÝabŻ£¯°l„óxȂŤĸkĊšÞyĊêĊmĢxV„ƨÈŽĠX„ŽΘÆĠÔź‚Ɇţ°LXƾŤŤb"],encodeOffsets:[[84555,46311]]}},{type:"Feature",id:"6501",properties:{name:"乌鲁木齐市",cp:[87.9236,43.5883],childNum:4},geometry:{type:"Polygon",coordinates:["@@šŽWŽôŚUĠȚl¼Ċ¼ƪǖ@źȘƆ@ýlܚXVŘޙš¦V¼kĖó҃èkĊȁˮ֜@ǫ՗nōƒĉǬō„ķÆŚ@„±ÞV˜¼nwĢIôºl£ƾ»UŤJôçšó¯īʟéó@kÛ±»ǩbƒĊóLҍÇǫb@ŻɆóʠǓ›aŋÞȁVʉłĉbĉɅô"],encodeOffsets:[[88887,44146]]}},{type:"Feature",id:"6502",properties:{name:"克拉玛依市",cp:[85.2869,45.5054],childNum:2},geometry:{type:"MultiPolygon",coordinates:[["@@ɜÞʊĊýVaŃm»ʵƳƑʝȗīV¥¯ĉ°Ñ@ŃÅI™»ĉmğn™ƒaݚţL°ķóKĵĀV͈ĉłƾNJÆŤƒzXl°ƒÆL²¼źŽôÈĢǔ™¦l„ô°"],["@@ƾIŤ@UUwōa™ĉÝJğÑÆŎkŎ"]],encodeOffsets:[[[87424,47245]],[[86817,45456]]]}},{type:"Feature",id:"659002",properties:{name:"阿拉尔市",cp:[81.2769,40.6549],childNum:1},geometry:{type:"Polygon",coordinates:["@@nIÇŃÛÝĊÑĠƏō™гwȁ¥Ƨ°ŹÑķV™¼ÞêĊ»‚lĵšm¦ÅW@ĀôÈźaɜxÈbÞÆĶIОŘ"],encodeOffsets:[[83824,41929]]}},{type:"Feature",id:"659003",properties:{name:"图木舒克市",cp:[79.1345,39.8749],childNum:1},geometry:{type:"Polygon",coordinates:["@@VéVÇ™ţ°ğUĠ¯mk¯ó¥ķIġÿƏbƒ„ĉa±ÒĸĀlKU„_m»nwšŽ„m@ÈŤ¦ĉbÞ°±Þżł̦°ĢŁ"],encodeOffsets:[[81496,40962]]}},{type:"Feature",id:"659004",properties:{name:"五家渠市",cp:[87.5391,44.3024],childNum:1},geometry:{type:"Polygon",coordinates:["@@„çôÑlĕU»™¥ÝšUŗ™WkÛ@þVńÝĔ@ńÅþĶUX¦Æƒ"],encodeOffsets:[[89674,45636]]}},{type:"Feature",id:"659001",properties:{name:"石河子市",cp:[86.0229,44.2914],childNum:1},geometry:{type:"Polygon",coordinates:["@@lŁ—ǵm‚ĉ@mż™¼n°ÞmƼš@"],encodeOffsets:[[88178,45529]]}}],UTF8Encoding:!0}}),i("echarts/util/mapData/geoJson/xi_zang_geo",[],function(){return{type:"FeatureCollection",features:[{type:"Feature",id:"5424",properties:{name:"那曲地区",cp:[88.1982,33.3215],childNum:10},geometry:{type:"Polygon",coordinates:["@@ƨʔĸbܺÞwnxźbÞ°ô@„ĶŽĸIȼĊJŎÈôUšÝƒ¤ǔLސŎ@ĢŽȘblƒôL„ÇźçȤôLš¥ÞIÞ¯Ķxʊťƨ™ƿÑĉXVķŦ¯ȂKÇǕšÑ¯IUš£¯Óƿ£VĕōÞÿÆwƒƑ„£ǖxÞĕ±ÇÝaUÑȃU¯‚UōÈ݃wWŁĵ™±Ý„óĢÿ°IÞ±mÅĢ¯mÿ„¥°UnÑŤĢĕĶwǬŻͪwŎ¼źÇĢ„ĠĕˎŁ°óƨ¼Èa‚m@¥°wǔ„ǖ°ŽƨÇŤœšġƨ„ŎŃôbÈÛŎĊ°@Ġw²ÑÞJƃÆb²ƒ°êĊUނlȲƒV„ÈKĊÒĸĉ›»ÅôťUÅǃk¯@ǂÑklǁÅl™Ģ™VÑóƒ@°@„ÛĸƒV¯ƒÇĊ™n¯Uĕšƽ¯m›¯b™È@Ò°Ĭƒbĵ›¼„‚kxķýÇJk£ÝaUÑÅóĶǟkÓʉnĉƒÝ¼Ƒ„ó»Þmn£m™Č¯@ƒȮÿV¯ĸƒ™k@Ýówƒ»ğ„ġ±ǓLō„ƒšV¼Əèķĉ™è±b@Òţ„UÑóakƒl£™Ó@¯L@™ÇlUóȁš¯aġÈÅĕÝLķ¯Ė¯@WĬ—x‚ÒÈnW°ţôU²ǓÓġ²V°¯ôƒǔÝL—ċšk™š»Ý»Ýš¯ÞƒVƒwۄÝÇōͩÈĉċ»ĉm¯£W¥ţKkóġƏW@¯±kōŽÈ›b@җšÇaƒÆ¯a™„ƒkóŽÛƒÇ¦Ýa¯šÝ™ĉ@ǻۄmƒǓxķƛ¯lVĀÅÞġb™™ÇJUÅV™ĖƑW™zō»ōšƒW™n@è¯ÞóVkwƩnkźÇބҙޯƒƒýğÇUxÆÈnè±bĉÝ»ÈуwšwÞ@m»ÈV@ýÇ°ķ™xƒa„ݯXċ¥ƒÈóW@ôkxlnxVÈóĊkŤġ¼@°¯ŰƑL̻۱ŎÝV—Þ›VƒÇÞŎÇakƞ‚š@èğŎĸżšƾ°ÒšLÞôĠKȰĖźVÈÒĠ„¤™VôšŽU„ÈþťL@ôǬÞlÜÈnÇÒUŚ™@šĊƨW°™°Xƒ‚@ČÇþ„ƴĉÒķ¦@ŽĢôWĀôłUÞĢǬ™ź°¼š@ƒôV°„bUÆnzm¤ƽĸƒÈ"],encodeOffsets:[[88133,36721]]}},{type:"Feature",id:"5425",properties:{name:"阿里地区",cp:[82.3645,32.7667],childNum:7},geometry:{type:"Polygon",coordinates:["@@„Çƾķn£myVŃaU¯„ó™@¯»šŹġǫVÝóŁXÿġó@ĸ¥ĊуƳÈý@ċ„Wš¯X¯ĉƧ‚™š@VřÈÑÇmkÛǫÝ@óŦKÇýVƒ™U󚏃£ğÇÑŹUȯĕğLÝó™K¯Ñ™ƽķŻĠō@灙lƝÈbƍÈ݂„œU˜ÝÞU²ō̼ůƒK°ů@¯UK±—ĊƧbōÇmçÈġƒóšÅób™™źóš¥kīƯól™ç™KôĵUƒÅ„VŃķ¥nÅŏm¯¹Å‚™»@ÑǍóxÝkʇȤU¤ķb@ƒ¯ĊÇx¯ĸĉKm°šĀk¦l„„KnĬȀƾÛ¦WÆŐmNJĉ°ōUţ¤UšŎ°šŎKÞłÆ„Ǔ¦ƒÞ™‚™„ř¯bmUÝl¯Um™ğl¯£șwŎǫaÝnĉĶƒk@¯™K™šō»ĉn™aÞ»ťnkml™ĸ¥UŚŻkÑťƒĉV™ôó°LôīĠU„ÿĉǕÅz±Kƒ¤„²ō¤¯Ė¯UÝ¥Vĵ™óÈťÝwķșÑk¤ó„™ƒWýĵĕ™„VĠƒV󍃎Ǔ„ķ°k±VU±ţ¦UǟÝřJVљ¥XUċUŎlÛƆǕÆȗƆ¯wŏÞÅ@™šĉl݁óŽƒÒ™nUôńlxólÝôێ±™™LÛôÝL@‚ġ¯X¯ÇUżóa󤛼XÒġŎóLk¦‚ôżĸĠ™¼™KġƆô¦„ÆƑÔĉĶ¯ImÒ°¦n°¯Þl˜ÝČn„ƒÒšKĠޚĕkƒlýƾťœšôI‚ĖŤÒnƜm¼¯lnżóÞ@Ůó¦™ôƽĖċŚn°Ý°ôÈUƜƒblÞóŽ@Žǖô°UÈƆ°X„þôŽô‚lѢšŽ²Ėm¦°š@¤™XŽĊblܚzkºƒĖmX„šŎWVšóÞn°lĠxȚa°»żLźƒ„b@Æ°XĠÝȚxĊĕŤaȚ‚°È@„„@èŤ¦Ü¼œW˜ÞkŽÈ@V°lŤkŎ±²¦ƐUšlj°aÈÑŎbĢƒŎbÆ¥ÞIȘlššôVÈU‚™šb„kɲĶn„mnXb̼òƾĖŎ@ĢȂÑôÓĠĖʊšĊÔ"],encodeOffsets:[[88133,36721]]}},{type:"Feature",id:"5423",properties:{name:"日喀则地区",cp:[86.2427,29.5093],childNum:18},geometry:{type:"Polygon",coordinates:["@@ĶĖXþš„ôƒl£šÒĸÇÞxÇŦšôUĶÞ¦°V°ĕŎ£ƒ±„£²LÆyĊǖƒĀğVóĬ¯KóôUš‚ĊŦ„lҙżVÆķ¦kšlnŦmݼšbĊmŎ¼š™šL@°„lĊĵÞmǬbƍȚx°¤Ġknš°VÞkVn°aƒŚš‚š„Ýǔ¥ÅƒÝŁōL¯™ōV™Ť£ŎVĊ¯nljƏXÅÜ¥ǿƽmīƒLkƒl¥™ÿn¯ĊL°ķÈw°ĉ@ƑĸaV£ʈȣÞlôwȎ@Қ¼Æ°ºŐnmÆĸ¦UńƃV„óĶšLšèôkÅ°lĬ™¦Źôššôa™Æ„ôÇĢnèŎÈƨa˜ĉ²‚VLĢ»lţôĉUǂwkmlw@óôX„ÇȦ°WƒÞ„b‚wĸšÈ¯@þÇUn¼Ý@™x„xÇńÞ¼ĊŽ²amçÅÇVwĠȄþ°„šÝƒÑÈÝlŹƪmlxôU°Ý@çšm„XŎ™Ŏ¼šyƒXšĕÆUVÈIššĢaÆÝUÿ°kĸƜǔwn„܃ȼĊ@ޚ°™Þbȥ܄ô„lšƒ°b„ÅÈb˜™@ќa‚ǯUU¯Vġš»ƒ™¯aV¯Ç°Å™mnÑŤçǬVǬ™±ĉ¯¥Vĕ¯Ýk£˜ō—w@±ġÛ°ÇVїƒ@ۘa@ČL™Ƴ™„ƒÇa¯¤ÝIĵ¼U¥ƿōķÅţŻókÝóĕ‚¥¯™U»Æ£X¯ġŃÛkÝ°V°ó¼¯èWôÞĖ„ȎƒŽkĀƧĀówm¥¯JŹÝJݙōVVŁaݐƑ@ƒ˜ğŭǂ¯_ƒ˜ĵ—›VnxŃón›ƒĵxÇĖĉVÝÈğV™Ò󃯐±Żĉ£ķÆÅL™Ljĉý˜ţۃ¯VƒnV¤ÝÈ@°ÅÞݤ™ŰğŁm¦ÝxóKƒ¥ɱÈUĠôêVôÛ¼ÇWÝçĵaō¦óĖƧlÇĢƑŽnŎDŽV¼¼‚ºÛ@m¦ƽ„ĉmm¯ÝKÛç¯bŏłĬ™bƒ¼ÅLmŽ„xť°ÅU™šÝXkŽÝmĉ¦W„¯K„ÒknÝaV„Ýè¯KɅńÝKnÞ¯¼"],encodeOffsets:[[84117,30927]]}},{type:"Feature",id:"5426",properties:{name:"林芝地区",cp:[95.4602,29.1138],childNum:7},geometry:{type:"Polygon",coordinates:["@@‚VÈłVôÈk@š°K@ŽšÔk¤l„ôbVÒŤƒ@ѲašçĸĊƐçU»„™ŎƒǔKĢ²Ġƒ„¼ôx@ޚlƨĬ„Ul¯ÈLV‚šÞJ„°Ünʊ„wÜbXê‚VÞ¯°ššanaU°wƼɴÑWÑ°mÈýÈam¥Þ£Ť@„¥ôblÞĢ„ź¥ôxÈÅmݚ™ƒĕŃV»ĉōŤōnóƒ»ÈīķIUƒĠÑ°ġĸLÞ¯VÒƂ@Ābš¼WôÈ@V¼ôóŤKÈÑU»šwVǫżnWÒÈx™¼‚lŦ£ĊōŤx²¯@ƒÆƒU¯šçÆ@„¤°£„é°k°lšůÈó@¯ŤÇÈĉƒkkÿó¥ÝXķљÜ@ÒóŚÝ¯°ĉówÇ±¦ÅJUÒĉĀķw¯°mĖ¯„±akxÝÅnƒ™»lуK@¯lU™¯UVѯóĊ¯mōğVǓƅƒÞƒWÝÈÛ@ƿô¯ÜġzÅþ¯ólmôʇġĊÅUͿřŏȁˋŁóÇˡōƧƒÇb™w°Ķôk¦šÒƒnUþġҙÔkǔķèó@ƒ²@ŘōńĵyƒzġaݤÅIƒ¤Ƀť¦ğѯ¤ķbóš¯ó±ŽU²°¤ČÜVnÈƂ„ŚŎ°ôĢ„þÆzèVĀǎĀǘƒXŹÑ¯¤ówċķk¦šłUÒġzÇ@ƒ™ÆÝx@²Þ@Ƥ„Uô¦Uš°x„U"],encodeOffsets:[[94737,30809]]}},{type:"Feature",id:"5421",properties:{name:"昌都地区",cp:[97.0203,30.7068],childNum:11},geometry:{type:"Polygon",coordinates:["@@™ŽVĖm°ĉš„ÈU°ķ„ƒÜ¯@@ô„UÒġškš‚ÆkÈlŽÒ@Èl°È„VÆóŦƂœ¼‚a„ÅĢ™Ʉwnōw@¥Ŏ¦°ŹÞmVš°wnÿƒw„wÝw@¯šmÞŗ°wĠ˜ĸkÞğlĔ²¦°@„ĕĸwVóšal@nĢÇĊn°@¦šŽźUXçǔůĸVš™ÆK„ÈÝĠš²ÅĔô@lšŽÈ_m˜„zǖl„šaU¼ôwV°¯¦‚ĬÈa„l@Čǎ„¼™„nŽ˜I„xô»ɜ@ƨ¥ɆŁ„ŃǪȁkƛƨȍʊȡóĭ›@—ÈÇVƒůރĸƅmēƨť™ÅÈʉVǵ°ġVŭÅɧ°ÿnɛš£mƒķ²ŃóÑUĉ°mÇ»¯@mxUĀ¯èţ°ȁÝç„ġU¯ÆÇţÈ@°Çô™Ű¯k¯lƒê¯¤ƒ£Å@™èV°Å„@„±°ţwĉŎť¤kš»ÇwXÑŻmUǬ™xV¼ÇÒţLóôU»Ç@X󙻂a@ÿŁUÑÝ°ķK¯ĢğÒV„ĸJÇĬ„¼môţŎĊŎU¼Æ„„Ė™šnÞÇÆówŹ¦ġƒkÝóaƒ¦ţ@ݤn¦ÇbÇþ¯nXÒɳÒÅ»¯xVmb™b¯™Ý°UWéÛaƒxʉÛmƒ¯ÝI™‚UÇKk°ƒVƧīķ„U°ȭĀ@„ċ°nšm¤Ýnô¼ƒƒÞ»Ċ„ʊmlÔĵǠÆôVÒÞbl¤ÈIĸþlwƒœ»ĶŽ„a¯ī@њǰanœƾ°"],encodeOffsets:[[97302,31917]]}},{type:"Feature",id:"5422",properties:{name:"山南地区",cp:[92.2083,28.3392],childNum:12},geometry:{type:"Polygon",coordinates:["@@°ÞUĖ°¦²ĊôÇÜLǖĀɜŽȘŰÞLĸźêÞ@UÜUŤ°ɞ¯Ü„°WŦĀmŎ„¦ĢyVљŁl¥Čĸôx°£źÒ„Wȗ‚ÿȍUÿ‚çÅyƒýóġō¯ƒřŁmÇÛUċŽ¯£V±²°ôô™ĸa°£ĠÒŦ¥ɄŽ„£ÆJÞ£Ģb„yĶzŎŃ@ŗ„±ô@ĸçlǓšÓĢÑVý„m™Ñl¥ĵó‚¯̻̥™ƛǫÝһÇƧĉyţ¼ҍēVĶĉŎ°ĸmšÞVÝĸ™ÒÛaċ„ó™ŹĖƒèÈÈl¼k¤ÝX@`ސŏ¼Æō¼ÇçĉKUÝÝ£ğ¤@¦ġl¯Òġĉ¯óš™móxÝÞğVšƴċK@—b@ܘ„UÒ¯ÈĢÜ@²˜x—Ŏl¤"],encodeOffsets:[[92363,29672]]}},{type:"Feature",id:"5401",properties:{name:"拉萨市",cp:[91.1865,30.1465],childNum:8},geometry:{type:"Polygon",coordinates:["@@Ŏ²l@°‚XĢƐlôŤLX¦°¤ĊnČ¼ÇĊŎͪÞÈ܃„x„U°Ýޙ޼™¼lšČ™˜ŽÞK„Ǔ°óU¯Ģ±ǔÔV±ŤóX¯ÇmÑ˜wXī°@°ĕĸÞKÆĖĢÇ°bȂ™ÇŁUƒV¯wV™ó¥ƒVÅ£Ý@@±ÞwšÅ‚„È@ƒ¥nōťÿ¯Xۃɝ°ţ¯ÛVVÝ@ŹéķÝKȗůɛǕÿÛKóÈǫšǫUţèmҚn¯Æ°ÈU‚°b„š™¼UĢV°°V"],encodeOffsets:[[92059,30696]]}}],UTF8Encoding:!0}}),i("echarts/util/mapData/geoJson/yun_nan_geo",[],function(){return{type:"FeatureCollection",features:[{type:"Feature",id:"5308",properties:{name:"普洱市",cp:[100.7446,23.4229],childNum:10},geometry:{type:"Polygon",coordinates:["@@U‚ô²‚a@Ž²²Ķ¥œV°šĶ²bl¤kVxl‚@œ°‚Ś²@˜„„y„@ô¦¯„@xƒxVxU„VššbVšÜm¼Ŏ„„ĢmºXXWÆ@ĀœšmŽmXU°ÅÒm¼Þx°w„@°‚XêĠ°»nV°U„l@k„@V±ôī@£‚ƒČŃÆ£„KÞý@¥‚k@y„a@—nWV„UVƒšwƒmƒ£Jƒknm@wmkn‚X„˜šX„¥mUUlUnbš¯°ŽnkƒVInlIUw°n™mk@@mlanXlanmšk@wVWUw™_@éĠašnmUaÜ£ƒmXƒ¥¯@@„óUmݯ¯ÞÝlKnxô£š»„»Ġ„J°aV„UÝÿV¥ÛbƒI@wmŽón¯yÛL@ƒWkŎmș`IWa¯K@¯mUnmaXm™bmak„¯ŽƒĢ™ÒÝm¯mV¯KÇb¯KۜWW™X@a™V™knċLUWV™kXóW@k™a@ƒób¯Uƒwmb¥UUlaU¥U£maķšƒKXkƒmÝ@kwmѯk±ċbUUVakaġ¦ƒƒkL@`ƒœ™a¯xƒm™Åƒ™LUWƒ@ċnŎUV°LkL@b°°@¤š²ƒ‚šnôôk„l°kè›ÒÈzV¤È„WôôƒnV@„ƒ¦@¼Ux"],encodeOffsets:[[101903,23637]]}},{type:"Feature",id:"5325",properties:{name:"红河哈尼族彝族自治州",cp:[103.0408,23.6041],childNum:13},geometry:{type:"Polygon",coordinates:["@@°°nÞôV@ƒ°@„¦WŽ„nÛ¤Vbmn™ğb@êš`VxUX@xš„ƏÞUnn˜WÞĸĢƒšÈ@ŽÇè@zÛÜWšÅêlš²„˜KnV¯ĖĊx@bk@@„°JÆ£Èbl„nnm°nlUkVUUwVm„Kn„‚nVŽÞxVLX¥laX@@xl@VzȎVmšk@b°šÈĸmŽV¦`W„XšƒbUb‚bX¼°x@ašVVkn@lþnXUlVxŤÅ„y‚IUƒka‚IŎĊ@lXx@b„z@‚ô„ƒ¥„_V@l‚n@„ôy@al_l`nmƒÈ»@kƒmXwWK™U¯»™a™Å@wƒmUÝKUa™UUƒ™wWƒ@w²»@kƃV£—mm£VKkÑV@@»nwƒ¥™ƒ@kƙnllIVlnLVakalknJšWmnaUaVÑVVލn¥m@ƒ„¯Uÿl™@™™™VçƒaXaV¯UyVLVkš@nJlšXLlŽkxlbla²Òl@nVJVkšx„KlkUaVķÝÑU@Åm¯@±™Uó°ğńķĠmU™Ñ@ǯ¯Å¼@nml@°¯¯`@w™£@¯Çƒk@ƒ»nmċ¯U»™I™Ž¯LÇĶÛn@bó°™U›šwmŽ¯„™Umǯa„™ƒ™ƒI@ykIƒVUŽ¯bƒIğŽƒ¼™¼ó¤mwkLÝÞ"],encodeOffsets:[[104243,23429]]}},{type:"Feature",id:"5326",properties:{name:"文山壮族苗族自治州",cp:[104.8865,23.5712],childNum:8},geometry:{type:"Polygon",coordinates:["@@šwô„š@²¯maUmôUÆxš@Xš˜bÞInlVUVw„JVaU„K°¥„xmÞXnlKlnna°@ĊČ„ÆwUmnkl@°ƒƒ£nyn@VV@Vak™ƒ@@kÞ݄bmx°Vnw°klÞInĖÞVlKl™@Xa°„„KlV„U@šJnx‚U@ÈĢbUKlm@ak_‚wšanWUk°ƒl»„k@Wk@lwU_ƒ@UalóU¥ƒÇnƒ™kJWƒ@mVXx±bƒK@nV±a@™Åa™£ÝK²ƒWknamKknǏk¯ƒaV™™V¯ĀƒU™„™Ò¥ƒI@mm¯¯xōW@@`k@ó»ƒUU¯lm£ÅWlĵ„w@mmwÅmWU@y±U—xmwU„¯Uƒ¥Ý¥¯£m@kŽÇVUV°VbklƒL™wUlUIm‚k@±ÑkbkalwkWKk™mI™@UlUKVzU°Wb„bU蚚@škšVĀƒ°@„n‚m¦ÝŽUUUÒVbmbXn™‚mIkllbUbmKUkkJmkŚ@lš„„¦mx@¼U@lÒULn¤˜nU¤Å„@l±¼@xX„šxV„šVVbÞLVŽ„n@xšÆšb°¼šV"],encodeOffsets:[[106504,25037]]}},{type:"Feature",id:"5303",properties:{name:"曲靖市",cp:[103.9417,25.7025],childNum:9},geometry:{type:"Polygon",coordinates:["@@ȦlKÞĕUV¯Um¯„ÇVUnVVUƒĉn™ĊÇƾLn°°È„JÆw„@lbÞa„¦V„XJ°¯W¯„aÞJVkUša„ƒ@lKnÅmWUk¯a¯»@m±@уkkbWWX_WÓU»_l™kÑm@U»m@l@IWċn¯l@VanV„UV™UVwVx„KȄVmUē‚@„ƒn@VÝÆL„w„VVwnVlmkUVÑÇ°ka@k™ÿÝaÞUl£™›—ċĕX±±ĉƒa@UnVnalónk@wl™UVmkÝJ—aW™™@ÅwóVVnnb±°™@óƒ™xXLWx„n@lǼn„m‚k_k`@bózƒ‚m@kU@ƒ`„¦óƒ@nWš@ÜÅXWw@ƒyƒb¦@ÒlnUb@x™lܐk‚@²Ç@Uƒ¯bmy@kV@bƒb„¦U`lLVx@b—Ll¼Þ¤@„°VVބU@WސUb›J@nnš@lnnm„šxUŽƒUUbƒK@šÇwklkUƒVWakn@ŽlbU@@„ULVxkKUn‚°¯Ò@¼™„kmƒ¦m@kl™Ȱ@lU„l¦„@Vl°wšnnþĊUÆbUx™b„ŽV„šĖU°„a‚nnašV„al@@b"],encodeOffsets:[[106099,27653]]}},{type:"Feature",id:"5323",properties:{name:"楚雄彝族自治州",cp:[101.6016,25.3619],childNum:10},geometry:{type:"Polygon",coordinates:["@@mҁXU`Wnšš™@Xl±¦š„Uxnbl°knmKUx„„ƒxVôUx°¼ôÒȄ°JlnÞKĠœW°¦ƒ„Vx²JVwš_°¥@UV@@wnymknK¯I@‚™²b°ƒš£V¥šwU‚V„¤nLškÆJÈwôô°„l»Č¯ƒġVƒUU@@ƒ°ƒƒÝXl@U»°Å„@U„¯@w±¯VmUUlm@m™„ÑnIVyUwmak£Vwm±—@Çw@nƒ@UxkwlÇnL‚mkř@±Žk™ka@kóJV¯Ç»U£lw¯™Xalbl¥¯UXƒ@a˜™UaÈL@ÇVIVƒkaU¯mm™akLWkUJ¯Umxnšƒ@ƒkUx¯xƒ„mWÅīÝkkbƒŤƒbkxWmXwWk¯wƒKkƒƒLŤċń„@¤óĬU²ƒ@@lƒk¯VmU¯¼@xV@k°l°kbUš°nm‚VnUš@°„š„UVèރÆbUÒÞnU¦›V—¼lô„@Vl"],encodeOffsets:[[103433,26196]]}},{type:"Feature",id:"5329",properties:{name:"大理白族自治州",cp:[99.9536,25.6805],childNum:12},geometry:{type:"Polygon",coordinates:["@@lbœKVIUa˜@²m@b™xôÒÜxXLmbnšl@š„„K°šš¼k„Uô‚xôlV¦nJ„Uš™Ænšm„@šx„ÆwšbXšÆôô„LUVwôK@wlmšaVwœ@WknmƒIUmlnJla@_™@kÝmKUašÑm¯Xw°aUaVl»²JV„bÆJkôĶĀ²VVk„mšbVwUó„wƒƒVwnLlmk¯maVw™ƒ²¥Wkš@™™XmV_‚WnÑUkƒ@k󘻜UV¥ÝmVÑÅa݄UçƒVƒ™@¯V™Umn¯mV™lak¯l¯U@@wğŽW鯁ƒ@¯xÝw¯š¯Jċa¯U¥mLU¤„bÞȤƒbÇLWUwmIUVW¼kbš`U„Vb¯L±ĊÛkƒÿÝKkwƒKţê™UĉþƒÈƒV¯ÞVbUŽ°KVšk²Ý‚mI—ƒmV@kƒm™UkšVxm„¯KXÈķJU¦V°ULWxšL@môƒšb@bkx±LnVUŽVLnkÜWnwlLŃmW@kkJU_ƒV„šWĊ„Þ"],encodeOffsets:[[101408,26770]]}},{type:"Feature",id:"5309",properties:{name:"临沧市",cp:[99.613,24.0546],childNum:8},geometry:{type:"Polygon",coordinates:["@@‚xĢ„l`²X°ŽV„šx@x°Þ°KXašğUњW‚bnIl`X²°b„xl°„„šV@xVxk¦mb„l@xšXV‚ÆzX¤™Æ˜k°„kx@lźêlaX»VUnJVx‚XÈK„aÝȣƒaV£nKV¦°‚Čb°I°™n»ÆÑV¯nWn›™@ÿXÅWWn¹ƒġōƒn»‚ÛU™™aU™VƒUw„w@w°ƒó¥ƒ@ƒz—ƒ±@ř›¯@kUwlk£±aĵŽ¯™›Uĵ¦±±@bó±VÝ@ó¤ƒw¯I@mńóm±XŽ¯IólƒK@š°Ullb™zkKlln@@ԙºƒUmVk²ôҙx™ŎUVóLƒb„ŽmÈnŽmbnl‚a„x@z„@Ǝ„¦kš"],encodeOffsets:[[101251,24734]]}},{type:"Feature",id:"5334",properties:{name:"迪庆藏族自治州",cp:[99.4592,27.9327],childNum:3},geometry:{type:"Polygon",coordinates:["@@W™Xwƒ™@akk@y›—k°īX¥›Uóķ¯w@n»UaVaUۃ¯ƒmV¼k‚™Þċô@n¯xÛÒm„V‚¯Ô@xƒ‚@šk™wm™Åa@ƒUa‚݁¯VŃyV„a@ÿšn»ÝVmank™mmÞÅôƒ@n£±›ğzÇmU¦™Vm„nÜmbn@°nV@xmzÅ@mºV¦k°ln¤š¼õô„n@xkƃIUxUš@Ťƒ¦VšmVkmkXW¤XzVx@ƚx™¼ƒÞ¯b@lVš™ĸގV„m¼XŽm¦V„ŽÞ@Ǝš¹Vón¥ÆKn„‚KX¯x@èĊȱłXšaÆxnlV@UÛlȻkğV¥„m²ljmÅÞĕƒƛm°„ÆmX¤mznƃŽV¦ÞVVb°bnÞWbnŽ°l@V„È@„‚VĵĊ±@ó„InxÆw„¥@£Þ›W¯ĸ£UƒUK‚ƒk±akkkbmWmÈķ„aÆÇU—ȃÆW@wmknmU¯"],encodeOffsets:[[102702,28401]]}},{type:"Feature",id:"5306",properties:{name:"昭通市",cp:[104.0955,27.6031],childNum:11},geometry:{type:"Polygon",coordinates:["@@mƒnK@wmƒUř¥mšóXǓŏmX@Ž—VƒmL@xţ™nk@mlUšŻÒğŋ@ƒL@mmLkm™š@b™XŎW¼ka¯lÇŹ¯aÇ»™ÝÝ_@m„@@a™@UklwUm@ak@ƒb™UmbmƒbV¯™ĕUƒƒšaVwÅaĉVmý™m¯xUkƒ@k¥VƒUXƒ¤VÈm`@„—ńÇÜ@Ākn‚ĔkƞÆĠ„™Þš‚U„VôƆÞI@ŽUxƦn„l@ĊĊnxUÒ°¦Vb¯WUnWŽIml@xn„Ubô¤‚¼ÈxlI„»šKVš„@ÈԂJkšUĖ±ÆVb@nœ„VÜVUVƒšL„wĠl„kn„Ġ@nx°¥Æ„²mUwƒ@m™mÅUl¯UњÑUm„Lll„Il±š@VkwƒW@w°@U»™kUóI°ƒ„»ĢтL„™š`nUĠ²lm„bôV@n„JUxƦX¦l@š‚ŎUƒV„@lV„KVřV£UaÞU™ƒnW@¯VU@ó™"],encodeOffsets:[[107787,28244]]}},{type:"Feature",id:"5301",properties:{name:"昆明市",cp:[102.9199,25.4663],childNum:11},geometry:{type:"Polygon",coordinates:["@@n@Vk‚VUn²°@xƒ°Vƒ@¯ÆV¼k@WŽ„Þ¯„@„@‚VVU„„Ģċ°k¼V„Ċxœ¤Ōœx°mVkƒÑȏšL‚°„x°Xœ°VmĊLVxUĖ°bX¦VW@kšȯlkn@„¥lnšƒ@»°Ñ¯VmlLUwVK@ƒV@ka@lmXb„UlVlkÈx@™„LVa„VV™wnƒmm@km™@mœIVaݏ@XƒVUݯU@ƒÝ£k»˜K@aUwkKV_ƒ¥„a@alU@nz°aV„È@@±lÛšk@wVakm@т¥„a„z‚@XxÆW@ÛX™@m@ƒy@aWw@kōĉJlbV„JƒzţÆUwVkmWkým@Ul™U@b¯wVºƒU™VUêšĠƒXUaUbVĊUŽWXUmkK™™WnUUU™V™ƒƒVV™Ý@kk±‚™¯ƒƒLkƒš±WkXlVklƒ@ƒwXbmLƒ›VUIVmk@Ubma@kkaVKUƒ™kmlXLWn™J¯ÒĊ°@zkºlLUŤn@@n›ô@lƁnmKkÈlxVw„@@mÈx˜@n²Uxl¤nbVxUzmJƒÒnš"],encodeOffsets:[[104828,25999]]}},{type:"Feature",id:"5307",properties:{name:"丽江市",cp:[100.448,26.955],childNum:5},geometry:{type:"Polygon",coordinates:["@@l@™„@w°ÓUnƒÜÑ°w@mČóšÝlU»n°„„VÜUbVbm¼@Ž°xôĸœVW¦¯Ĭlœ˜@zll@b„šWxXš‚a„X@ÆĠÆaXwl@XaƦn¼˜Jn@mnKW¯È»V¯°ak™VanXVwl@VyUĕVU„bÈīlaUk°ƒk¯lƒ²V˜Ukƛô@ƒ„I@mVwĊa„™ƒVaka„™ÆbUŽVLšaXIWKUw™ƒ„aWÑÅKUaVk°ƒ@Uw„ƒ¯¥›XğÝLkm¯Iǃóѯ»™aƒnUl±UĵÿlóÅIƒaU‚±Ik¼UŽVb¯bWxn°™ÒVbnLlޚ@@`kbmIkŽVn„JmnXl›@Ux™bkn@xóLUxVŽƒKóóŐW™™aÅxƒŽ™wƒ@™nÅm™šƒV™„ƒôX„ƒLlVU¤ƒb¦m¼™Ž@ĀƒbU‚„zUƂ°ÞVb@„Æbnššx"],encodeOffsets:[[101937,28227]]}},{type:"Feature",id:"5328",properties:{name:"西双版纳傣族自治州",cp:[100.8984,21.8628],childNum:3},geometry:{type:"Polygon",coordinates:["@@l²°ŽnÒlxÞ@„nWl„Lĸ™nbV¤V¦kbVV‚¦na„x°Vôa@„šb@lôXlWUšVXČKlmššU@bšWXXܛ°LÈa°LnU°‚ÞnšÑ„ġ°lƒnbšaƒ¯¯KWƒœó@kmK@UšĉV@k°„VV¹„a@y‚_ċl_nÓlL@anI@ƒóWl£VU—ƒl™kĕl™šKVw„U@™kVƒam¯ÅL@bƒ‚Ýk@Vn„UbÇbÝwÅ@ċ¥¯lk‚¼ÅŽ™Ò°b@¦nlUn@ŽÇV„mƁbWôU@ÝÅōm™¯ƒaU™™mk™WWw—@±ƒ™n¯U™è™a™Lƒ¯mƒL™škwƒl@°mnÈÒ¯šów@V™xƒĀU¤°Įƒ°Xl"],encodeOffsets:[[102376,22579]]}},{type:"Feature",id:"5305",properties:{name:"保山市",cp:[99.0637,24.9884],childNum:5},geometry:{type:"Polygon",coordinates:["@@X°„Il‚@¦ƒŽÈ¼m¼ÞaÞÅl„ÈxV¼šlVôÈÆlLޣȺlkUƒ‚ƒUw„¯UĕVwĊ@n¦mlnVĸIWÇ°LnƒUwl™šV„n@lnU˜„nJށl±U™¯LVUa°Ý„U„ÇĊýšVŤé„LlxÞL„ĀÜl²ĉ°KUaVƒ™_Źé@klw¯ƒlÅ—šW£ÅyU™W@wƒknal¥Uw@w™Uƒƒk¯ƒw¯aW±k_mJa™XVҙĠWb¯L¯Ý@w™wUƒ¯±Wk_ġƒwƒwōKmb@¤„bk°lĖƒô„UJƒšVnÅlťUš¯°VbnbWxX„m„ÞššWUĀ™L™yWzÛKmbUxVKkn݃kŽVšĀċ¤Ux„@Ž¯Žm@ƒ¦"],encodeOffsets:[[100440,25943]]}},{type:"Feature",id:"5304",properties:{name:"玉溪市",cp:[101.9312,23.8898],childNum:9},geometry:{type:"Polygon",coordinates:["@@l„„L°xXlWxXnlw„a„ţlaÞlÆĬnX„ƒ°wVw„l„@m™nw°VVIXllKšbnnV°lbU„UJ@ÈÇKVb—š@bW„°Vk¦kaWb°škxV¤È¼U°ôI@llblš²š@‚@œó@mm@VţkKl¹@yĉ¯°ÑšIXmWKnkšlV„ULlb@lnbVal@UnVJœU‚„nKWa„x„@lkkUlW²X„™‚l„K°„šl²@lšÞUŽ„U‚„UšVšVVXmššlLVnXWVUĉVaVb„W™ğVéšU„VU¹W»aVa„aW™Xƒ‚_U¥nÇķ¯™@a™lUnǍUyk@@wW@kbW¦UKÝwUmmƒƒLUnVxUVVlk¯mmnƒmkÇaŤ¯I@ƒl@@aĉw°ĕmU—L±ƒk™ÆéX™ÜÛ@yÈç@™Çġ„Ýķ—XmmÝVՙƒ™lmnkbmWkb@nl@nŽmš¯VxkJmUJ„ml¯™°makVVnVƒ¦™Wƒ—Wmnl@xmn„l‚I„¤„n™xU„ƒVUŽmX@˜ƒb@zl@¦Ýþ"],encodeOffsets:[[103703,24874]]}},{type:"Feature",id:"5333",properties:{name:"怒江傈僳族自治州",cp:[99.1516,26.5594],childNum:4},geometry:{type:"Polygon",coordinates:["@@WyX£lWlnnUU™„¥@ţV™Vw„JlÅ@wƒmö󙻂£kml¯U¥n¹Æ@ny@wmU@¯mnamÛnƒšUV¥ÈnĠy²œm¤„@ÆónݚnmlnbÞU‚¥„aV£kU„KWƒ„óšƒmIU¥ókwVólƒ™»¯™ƒL™ƒk@m™naWKÛwóњw@a±n—@VbUJ›LkaƒÝXĉƒ™„UV`lI@lnXÆƑkKmxÛXmlUKVmU²Klw@a™aó„@n™KXwVKU¯V¥mUnkm¥ĉ@UxVĖƒ°Vx„V„klmޙkKWĀkVWšnl°Lnm@°ŽUxlV@nk¦™JVÈ°ŽVÒ@nX°@ÆlUômlnôƒ²nxmłnVV„¯x@Èm°XblVUšl°@xkXU¤WXX‚W„Xƃ„mkÅJmށw±bƒxUīkKmÅVUĖÝèV„kx@š›lX„lnk¤ƒLkŽ‚Ėk¦‚xUššL°‚¯Ė@LnK@b°xVI„¥Ua°Ñ@»nm@¹‚KŎÞÈWln²n"],encodeOffsets:[[101071,28891]]}},{type:"Feature",id:"5331",properties:{name:"德宏傣族景颇族自治州",cp:[98.1299,24.5874],childNum:5},geometry:{type:"Polygon",coordinates:["@@„¥n@°@ƒVwČ£™ÿUlÞ„lmULVwnaÜLXyšzšKVÿ™XݙnƒWƒXwmaUa°¯V™ŦŽÆkUm„™VIƒ„ókĕl¯ƒa@£nama™@¯m¯œó@óyţbġkÅm±ÛammVkƒLwU`Wk@VƒkUmŃlUUKmbkkUVUwƒ¦óŽ°¼šbn°ô¦lºƒz@xšŽ¯„™@UŽ°nƒšU¤ţU„°VƆ@ÈmlnzÞl°¦Æa„xUxƒLkxWƒn@‚š²ŰšW„™‚@°ÈXl°Llx"],encodeOffsets:[[100440,25943]]}}],UTF8Encoding:!0}}),i("echarts/util/mapData/geoJson/zhe_jiang_geo",[],function(){return{type:"FeatureCollection",features:[{type:"Feature",id:"3311",properties:{name:"丽水市",cp:[119.5642,28.1854],childNum:9},geometry:{type:"Polygon",coordinates:["@@@V‚bVl@Xn‚UXƒKVŽ@¦nxlUXV‚n„KVmnL‚UV@bn¤lLXK˜²„`nnlJXIVJ‚I„Vnn°KnnVll@VLXWV@UkVaVK„zV@„ƒšVVaUK@U»VUl@@WnUUƒ@wVLn@Vwl@XW°LVbn@VU‚@X„l`@XnKVbkl@XVJlUnlV„„xlL@lnXl„@VšUnV°°„@a„UVLXblWVXn@VVUV@Lš¤VLV„U‚VbnalLUUVX_laVa„WVzXKV@@a@KUmImmXama@kU@yVIUK‚aVa@kXK@aWU@VIUmW@kkVm„Uš@VwUa@K@k@Uƒ`@kUKVk@UV@VaUm²Vy@klUUWUkVmUa@_ƒKVaXa›XmƒU@mUlWkaUXƒ@mmkL@w™JƒnVVÅbWKXa™@@I@aƒJUUÇ@V„UL™W@akLmb@K@a™XXw@mƒVmUVkUy@£@aU@@VkUWm@kUKƒXUWU_mW@wkkmJUUkLWWUXƒW@IkJ@k@mW_kӃ_Ul™Lƒm@I@aUa¯m@kƒa¯LUJƒ@mVVxUb™a@LUKkXƒbm@Uak@@a@Um`ƒIUbUJ@nUVW@@LnVV@lšUbVlUX@`š@blXklW„Ušm„Xlm¦U@@V¯bml@š@nUb@llnn@VbX@lV@ŽUVULmU@JVn„bVbkb™VWxU@@nUVk@"],encodeOffsets:[[121546,28992]]}},{type:"Feature",id:"3301",properties:{name:"杭州市",cp:[119.5313,29.8773],childNum:6},geometry:{type:"Polygon",coordinates:["@@X@l„°KXXlW„b@²„`šššb‚I„šX`l@„@bWl@n@VnLUV@V„@°¦@šl@XVlU@š@xVbUb@Vkb@‚@XVJVz™J@Lޚ@VmLUxUJ@LU„Vx‚b„xXUl@VaÈw„b‚aÞa@Vl@XUVx@V@V„LlbnV„al@lb„Vnn‚LnKnL@VlbVJXalIšb@KUU@mVInJ˜„U„Vl@xUšVLnUš@UÞaV@lkV@UanK„L@UlKVUnbÆmn@@nUlVnVJl@@UXU„L@WVIVJVxVLXV@IÜKnbn@V¥V@@I@ƒƒ„y°b@UUwnk°ÆƨVlUšçXm›£aƒÇ™IkVƒ@WV@@aWIUWUIkb@WW@UnƒK@UU@kaWVkƒVIVVnU@UWVUV@VmVkKkWIkVWaULU`UImJUImm—U@ƒƒwmwUV™IUWVkUamaU@mV—kƒb@KVU@aVU@anKULVJ‚U@kÛU™JUV›kkƒVakU@ƒaVwkW@UWkXmWaULUaUK@XƒJUUmƒVU@UVƒUkJ@ImwmKU@k„@lU„W@@akKm„kamIkWl_UwVm@UkaVUUaƒ@UamakbWlkL@aUalU@mkL@U@U™lmK@XkKm@Ýakb@xƒnXbƒ`ƒnUUU@›™U@™wU@@ƒmKkkƒV¯U@lULUbVbUb@V‚a@L™ºÝb@bLmK™x@VUL@bk@mxULWl"],encodeOffsets:[[121185,30184]]}},{type:"Feature",id:"3303",properties:{name:"温州市",cp:[120.498,27.8119],childNum:9},geometry:{type:"Polygon",coordinates:["@@ll@xnXV`VX„WVL@lXnlV@UV@@b@¤VzUlnV„U@nWxšW@b@LnalK@bšXVKUƒÈ@VV„I@b@Jš@WbXLÆaUU„mšI@xlKnn„@VWlbkXV‚@n„VWnœ‚WbUb„L@`VbUnVlVXkV@lUz±‚VnUbU@@VUlVL@l„_@V@l@LVbV@XLV`VÈlxn@lU@aœaVV‚k„@XJ@nl@@LU`°LVb„L°a@a„UVy@anI@a„a‚nV@²wÜJX@VšVV°k„na@WVk„aWwU@m@™ƒkƒaUĕ™ÝšÝŤnÈa„aóI›»@±X™WkUķ@kV±kw™ƒUkWw„™UƒÝ»ÛkɳlImaUaWóXÿǬk‚UnWVmmk™KţnŏÞğl™„UlUx@XWb„V@JkXƒ°mb@VULVxUVk@@LWWk@WIkšƒUkJmUkVmI@yƒ@Ua™kLm‚U@mUUUkaVk™@mK@UlUU@UmKmbUUUJ@n@KVLUL@VkJWXX`mnULWlkL@JVLVb@°kxkU@LVŽ™V@„VLV`UL@VUX"],encodeOffsets:[[122502,28334]]}},{type:"Feature",id:"3302",properties:{name:"宁波市",cp:[121.5967,29.6466],childNum:6},geometry:{type:"Polygon",coordinates:["@@Ċ¦ĸĀ°‚nXÞVšKškƨƑźÿ°»n„@wô¥ÜbœU°ÆXÞWóçĉݱIUƒÈ¥@U°wÆ»²mm_@aXƒVKÞVlk@akk›̅@£X»VwƏXWa¯aȗb™KƽۃĊ™xƒLóŽk@ƒƒƒ@¯nƒKUL@xkL›ÑkWULUUmJUXVŽU@mŽUX¯@V`mbXbV@@nn¤WXšx@škJ@nVVUVl²UbÝVUVk@Wx@V@„ƒVXzmlaƒL@VlLU`„XUVVVUnl@VbnJlnUVVnƒlUKkbmnn„VxlJnxmbU@UL@KUV™X@xmb@lk@mnVVUš™è"],encodeOffsets:[[123784,30977]]}},{type:"Feature",id:"3309",properties:{name:"舟山市",cp:[122.2559,30.2234],childNum:3},geometry:{type:"Polygon",coordinates:["@@l΢ƒʠþÆVĢLĊƒǬXĊ܄XôV„ÑÆw„ƒlšƏÈóVĭVǓ@ƒĉwɛkmK@ĉXīWaĉUĵÝmƒ¯ĉƒwĉ±±nż¯x@VǦV„²JĊÞôèÝXÅW¯›VÛaó¦@xƒŽmŽ¯¼ŹĀ"],
+encodeOffsets:[[124437,30983]]}},{type:"Feature",id:"3310",properties:{name:"台州市",cp:[121.1353,28.6688],childNum:7},geometry:{type:"Polygon",coordinates:["@@lV„IVWVz@bXJl@Xal@°„nLll@nVxnV„K@UJVbƒ¦°„k`UIWJXnƚ@bUJ„Xl@lb„Wn@UzVV@bVVšmVnnJVXna‚bšKUKnUVVUnVLlKVLXa„Jm£@mU@WanaU_°@VWnV@UVWnIVVVKlXœÒlK@wVK„L°m„@„„l@ô„Kšw„ĉƾůUƒl£@»UƒVk„m@ƅUƒƒaÛIŏmUk@m„w@a™£ƒWk@ţšƒIm±@ankôUlaU™Uw¯ƒōaƒbÇbţm™ÞšÞVĖ„b„l@š@n‚VXxƒbUl@XmbƒŽ¯lUUU™W@ÛI±xU@mƒb@bmJ@bUzƒV@b¯bƒKUa¯KV_@Kk@@mWIƒ@lUU›b@bkVm@kwUÇU_WKU@Ux™@ƒVUnllX@Vn‚J@UXV@bWL@lUbbVLUJ@z‚V@lnbWbnnnJVŽ@L"],encodeOffsets:[[123312,29526]]}},{type:"Feature",id:"3307",properties:{name:"金华市",cp:[120.0037,29.1028],childNum:8},geometry:{type:"Polygon",coordinates:["@@nbVb„@VbUVlb@VUnVxk`lXnJlbnƒlL@bX@Vƒ@klƒV@nLnx@JlI„V‚U@VUVn„VV„I@WVLVbVKXbWnXl@VlXUx„b@ŽlVUbl„œlVUšIÜVnalKX@@bV@@aUUlUƒwUw„@naWW„UVaUUšaVb„LlxXJVk°ƒUƒlkU¥@k„a@LVlXLVlšVWznVn@lxšJl_@WX_@mVa„a@alU@kVVna„KVLlK„b@UUaVašbnUWmXU@k@yVI@ařWmXIVJl_¯ƒ„¥UaVI@ƒLmUUw@mkkmK¯ƒk@Wbk@WI@aUyUXƒJkU@bU@WLUyƒXUbkbW`UVVkKmbUaVUƒUK™£@KVUUUm@UWkXWaUKƒV@b¯ƒ¯mU™V@UkƒmW@kkKƒwUƒmkkVUI@WlkUamL@Wk_Wƒ@UVm@Ua¯KWXk@Uxm@UK@xV„mV@Xk@UVV¼@‚VLUb™Uƒ„U@ƒyULUbVlU@@XlVUVVbƒU@lXXVW@XUVl@@VUVƒÈn@VVU„@lVa@„U„mL@`X@`WL@VUX@lUL@xlx"],encodeOffsets:[[122119,29948]]}},{type:"Feature",id:"3308",properties:{name:"衢州市",cp:[118.6853,28.8666],childNum:5},geometry:{type:"Polygon",coordinates:["@@XkVKnwl@@aVK@UšwnL‚K@aÞaš¹@Kb@UVaUaVaVK@k°V„UllnL@„V@šxV@œšV@VV„m„_Wa„m@wlaÞbn@lL@WnLšk@V@VlK@nkVVb@blKXklakw@wVK@kVW@UXK@_‚W@_nKVƒ@ƒUb@kVƒUUm@„ÇVU@Uk@VU@WUXWW@k„VUaVUkU@WWXUKk@Ukmm¯LmmƒUJUIWJkImmƒ_—±WLkKm£@aVUmKUnƒLmWUkVmw@¥U„LVWm@WUka@UmmLmm@@bUX™@@WUIm@UVUK@UVUUU™VVJmb@b„Xn‚mVƒ¼nnn¦mJUVƒL„V@VW@UzUlVnUbl`UnVl@XU@kl@bmÈUx™Vk@@J@„ƒ¼W@ÅaVVnzmVƒ„@WJk@kWJ@ƒlXbWbXxmVnšlLXb@°lKVXnWšbWV„„X„mbV@Xl‚bšI@Kn@@x@šVLlm"],encodeOffsets:[[121185,30184]]}},{type:"Feature",id:"3306",properties:{name:"绍兴市",cp:[120.564,29.7565],childNum:6},geometry:{type:"Polygon",coordinates:["@@„x@„˜VnnVJnIVJV_VKXblUXJlŽlLUŽUnU@UVVX@ŽmVUUUJl„XUlbV@@V„LVmX@@XlaVJVXXJ@b‚@XU„@lUšJ„È‚bœ¤Ō„JšçV™UUnml@@kna@wšWVU@LVKV@namwkIUwmƒnmlaVL„kUmVUkmmIUak@VmUUVUƒWV_kK@U„K‚bnkWy„U@ƒ@UXwl@VUÞUVak±VUUU@mlI@™™wXWƒIWbUKkLUKVmUUmVVL™LambUWmIUm™nUU@aUUVym@ƒXkak@ƒW@z@lWVXnmV™aUbVb@VƒakLUKƒLmbUU@lkV@bƒbUb@nW`@Xk`™Ikwm@mUXy™UUkWKUk@Kƒb@lV¦klV„¯„UlWIkwƒKUa™bVVUbƒVXXmbƒ@Vx„xkVVV@bU@@aW@kLmb@lVUIVKmL@bUV@bUV@L„a˜lnUV@nbVbUlVXšJVUnx"],encodeOffsets:[[122997,30561]]}},{type:"Feature",id:"3304",properties:{name:"嘉兴市",cp:[120.9155,30.6354],childNum:6},geometry:{type:"Polygon",coordinates:["@@@blIX@@VÜVUnn@l‚k„lKnI°Þl`²LVKVbnbVaVLUVn@W¦@VkVVb„@VI„`@blLnL‚aX@„VVb@U‚@XlVa„@@kVaUKV»U_lWXUƒƒ@alb„k@VllnLVKn@@UVIUw@y°IVVXU@VV@lw„m@wVkƾaœJ‚LkΡƧƒ™l™LÝUmW¯ķÿĉ¥ƒIŋŽWn™èkVƧU¯ÅmlVx@V¯aƒz„Ž@„@JU@U¦m@@šnVmn@V„LV‚"],encodeOffsets:[[123233,31382]]}},{type:"Feature",id:"3305",properties:{name:"湖州市",cp:[119.8608,30.7782],childNum:4},geometry:{type:"Polygon",coordinates:["@@kLlƒkm@VmÛU@UW@kJ@aUƒK@UnmmU@™maÛL@JWUUKUwUIUJ@XƒKWV@Vk@UIUmVk@mm@ÅnmaUVkL@VƒKmLVbU@klU@ÝbV™@mVUKV™@wUkVƒ—ƒmIUJ@nVV@L™akJWbUIka@UmKmLKmmƒUUVk@@nmLX`WXUV@Ž@nUl™kmlU@Ub„„ƒxVVšIlV„Žšnn„@@n˜„UҚ@„°n@@xmb@„VbnV@šš„@b@`@L@L@x@blVklVbnnV@‚aXb°VlU@W„b°U„LXWVUV™„™VwÈwÜ»ĸaĠnUVw²X@V@lVU@wlaUUVm@knUV›"],encodeOffsets:[[123379,31500]]}}],UTF8Encoding:!0}}),i("echarts/chart/gauge",["require","./base","../util/shape/GaugePointer","zrender/shape/Text","zrender/shape/Line","zrender/shape/Rectangle","zrender/shape/Circle","zrender/shape/Sector","../config","../util/ecData","../util/accMath","zrender/tool/util","../chart"],function(e){function t(e,t,n,a,o){i.call(this,e,t,n,a,o),this.refresh(a)}var i=e("./base"),n=e("../util/shape/GaugePointer"),a=e("zrender/shape/Text"),o=e("zrender/shape/Line"),r=e("zrender/shape/Rectangle"),s=e("zrender/shape/Circle"),l=e("zrender/shape/Sector"),h=e("../config");h.gauge={zlevel:0,z:2,center:["50%","50%"],clickable:!0,legendHoverLink:!0,radius:"75%",startAngle:225,endAngle:-45,min:0,max:100,splitNumber:10,axisLine:{show:!0,lineStyle:{color:[[.2,"#228b22"],[.8,"#48b"],[1,"#ff4500"]],width:30}},axisTick:{show:!0,splitNumber:5,length:8,lineStyle:{color:"#eee",width:1,type:"solid"}},axisLabel:{show:!0,textStyle:{color:"auto"}},splitLine:{show:!0,length:30,lineStyle:{color:"#eee",width:2,type:"solid"}},pointer:{show:!0,length:"80%",width:8,color:"auto"},title:{show:!0,offsetCenter:[0,"-40%"],textStyle:{color:"#333",fontSize:15}},detail:{show:!0,backgroundColor:"rgba(0,0,0,0)",borderWidth:0,borderColor:"#ccc",width:100,height:40,offsetCenter:[0,"40%"],textStyle:{color:"auto",fontSize:30}}};var m=e("../util/ecData"),V=e("../util/accMath"),U=e("zrender/tool/util");return t.prototype={type:h.CHART_TYPE_GAUGE,_buildShape:function(){var e=this.series;this._paramsMap={},this.selectedMap={};for(var t=0,i=e.length;i>t;t++)e[t].type===h.CHART_TYPE_GAUGE&&(this.selectedMap[e[t].name]=!0,e[t]=this.reformOption(e[t]),this.legendHoverLink=e[t].legendHoverLink||this.legendHoverLink,this._buildSingleGauge(t),this.buildMark(t));this.addShapeList()},_buildSingleGauge:function(e){var t=this.series[e];this._paramsMap[e]={center:this.parseCenter(this.zr,t.center),radius:this.parseRadius(this.zr,t.radius),startAngle:t.startAngle.toFixed(2)-0,endAngle:t.endAngle.toFixed(2)-0},this._paramsMap[e].totalAngle=this._paramsMap[e].startAngle-this._paramsMap[e].endAngle,this._colorMap(e),this._buildAxisLine(e),this._buildSplitLine(e),this._buildAxisTick(e),this._buildAxisLabel(e),this._buildPointer(e),this._buildTitle(e),this._buildDetail(e)},_buildAxisLine:function(e){var t=this.series[e];if(t.axisLine.show)for(var i,n,a=t.min,o=t.max-a,r=this._paramsMap[e],s=r.center,l=r.startAngle,h=r.totalAngle,V=r.colorArray,U=t.axisLine.lineStyle,d=this.parsePercent(U.width,r.radius[1]),p=r.radius[1],c=p-d,u=l,y=0,g=V.length;g>y;y++)n=l-h*(V[y][0]-a)/o,i=this._getSector(s,c,p,n,u,V[y][1],U,t.zlevel,t.z),u=n,i._animationAdd="r",m.set(i,"seriesIndex",e),m.set(i,"dataIndex",y),this.shapeList.push(i)},_buildSplitLine:function(e){var t=this.series[e];if(t.splitLine.show)for(var i,n,a,r=this._paramsMap[e],s=t.splitNumber,l=t.min,h=t.max-l,m=t.splitLine,V=this.parsePercent(m.length,r.radius[1]),U=m.lineStyle,d=U.color,p=r.center,c=r.startAngle*Math.PI/180,u=r.totalAngle*Math.PI/180,y=r.radius[1],g=y-V,b=0;s>=b;b++)i=c-u/s*b,n=Math.sin(i),a=Math.cos(i),this.shapeList.push(new o({zlevel:t.zlevel,z:t.z+1,hoverable:!1,style:{xStart:p[0]+a*y,yStart:p[1]-n*y,xEnd:p[0]+a*g,yEnd:p[1]-n*g,strokeColor:"auto"===d?this._getColor(e,l+h/s*b):d,lineType:U.type,lineWidth:U.width,shadowColor:U.shadowColor,shadowBlur:U.shadowBlur,shadowOffsetX:U.shadowOffsetX,shadowOffsetY:U.shadowOffsetY}}))},_buildAxisTick:function(e){var t=this.series[e];if(t.axisTick.show)for(var i,n,a,r=this._paramsMap[e],s=t.splitNumber,l=t.min,h=t.max-l,m=t.axisTick,V=m.splitNumber,U=this.parsePercent(m.length,r.radius[1]),d=m.lineStyle,p=d.color,c=r.center,u=r.startAngle*Math.PI/180,y=r.totalAngle*Math.PI/180,g=r.radius[1],b=g-U,f=0,k=s*V;k>=f;f++)f%V!==0&&(i=u-y/k*f,n=Math.sin(i),a=Math.cos(i),this.shapeList.push(new o({zlevel:t.zlevel,z:t.z+1,hoverable:!1,style:{xStart:c[0]+a*g,yStart:c[1]-n*g,xEnd:c[0]+a*b,yEnd:c[1]-n*b,strokeColor:"auto"===p?this._getColor(e,l+h/k*f):p,lineType:d.type,lineWidth:d.width,shadowColor:d.shadowColor,shadowBlur:d.shadowBlur,shadowOffsetX:d.shadowOffsetX,shadowOffsetY:d.shadowOffsetY}})))},_buildAxisLabel:function(e){var t=this.series[e];if(t.axisLabel.show)for(var i,n,o,r,s=t.splitNumber,l=t.min,h=t.max-l,m=t.axisLabel.textStyle,U=this.getFont(m),d=m.color,p=this._paramsMap[e],c=p.center,u=p.startAngle,y=p.totalAngle,g=p.radius[1]-this.parsePercent(t.splitLine.length,p.radius[1])-5,b=0;s>=b;b++)r=V.accAdd(l,V.accMul(V.accDiv(h,s),b)),i=u-y/s*b,n=Math.sin(i*Math.PI/180),o=Math.cos(i*Math.PI/180),i=(i+360)%360,this.shapeList.push(new a({zlevel:t.zlevel,z:t.z+1,hoverable:!1,style:{x:c[0]+o*g,y:c[1]-n*g,color:"auto"===d?this._getColor(e,r):d,text:this._getLabelText(t.axisLabel.formatter,r),textAlign:i>=110&&250>=i?"left":70>=i||i>=290?"right":"center",textBaseline:i>=10&&170>=i?"top":i>=190&&350>=i?"bottom":"middle",textFont:U,shadowColor:m.shadowColor,shadowBlur:m.shadowBlur,shadowOffsetX:m.shadowOffsetX,shadowOffsetY:m.shadowOffsetY}}))},_buildPointer:function(e){var t=this.series[e];if(t.pointer.show){var i=t.max-t.min,a=t.pointer,o=this._paramsMap[e],r=this.parsePercent(a.length,o.radius[1]),l=this.parsePercent(a.width,o.radius[1]),h=o.center,V=this._getValue(e);V=V<t.max?V:t.max;var U=(o.startAngle-o.totalAngle/i*(V-t.min))*Math.PI/180,d="auto"===a.color?this._getColor(e,V):a.color,p=new n({zlevel:t.zlevel,z:t.z+1,clickable:this.query(t,"clickable"),style:{x:h[0],y:h[1],r:r,startAngle:o.startAngle*Math.PI/180,angle:U,color:d,width:l,shadowColor:a.shadowColor,shadowBlur:a.shadowBlur,shadowOffsetX:a.shadowOffsetX,shadowOffsetY:a.shadowOffsetY},highlightStyle:{brushType:"fill",width:l>2?2:l/2,color:"#fff"}});m.pack(p,this.series[e],e,this.series[e].data[0],0,this.series[e].data[0].name,V),this.shapeList.push(p),this.shapeList.push(new s({zlevel:t.zlevel,z:t.z+2,hoverable:!1,style:{x:h[0],y:h[1],r:a.width/2.5,color:"#fff"}}))}},_buildTitle:function(e){var t=this.series[e];if(t.title.show){var i=t.data[0],n=null!=i.name?i.name:"";if(""!==n){var o=t.title,r=o.offsetCenter,s=o.textStyle,l=s.color,h=this._paramsMap[e],m=h.center[0]+this.parsePercent(r[0],h.radius[1]),V=h.center[1]+this.parsePercent(r[1],h.radius[1]);this.shapeList.push(new a({zlevel:t.zlevel,z:t.z+(Math.abs(m-h.center[0])+Math.abs(V-h.center[1])<2*s.fontSize?2:1),hoverable:!1,style:{x:m,y:V,color:"auto"===l?this._getColor(e):l,text:n,textAlign:"center",textFont:this.getFont(s),shadowColor:s.shadowColor,shadowBlur:s.shadowBlur,shadowOffsetX:s.shadowOffsetX,shadowOffsetY:s.shadowOffsetY}}))}}},_buildDetail:function(e){var t=this.series[e];if(t.detail.show){var i=t.detail,n=i.offsetCenter,a=i.backgroundColor,o=i.textStyle,s=o.color,l=this._paramsMap[e],h=this._getValue(e),m=l.center[0]-i.width/2+this.parsePercent(n[0],l.radius[1]),V=l.center[1]+this.parsePercent(n[1],l.radius[1]);this.shapeList.push(new r({zlevel:t.zlevel,z:t.z+(Math.abs(m+i.width/2-l.center[0])+Math.abs(V+i.height/2-l.center[1])<o.fontSize?2:1),hoverable:!1,style:{x:m,y:V,width:i.width,height:i.height,brushType:"both",color:"auto"===a?this._getColor(e,h):a,lineWidth:i.borderWidth,strokeColor:i.borderColor,shadowColor:i.shadowColor,shadowBlur:i.shadowBlur,shadowOffsetX:i.shadowOffsetX,shadowOffsetY:i.shadowOffsetY,text:this._getLabelText(i.formatter,h),textFont:this.getFont(o),textPosition:"inside",textColor:"auto"===s?this._getColor(e,h):s}}))}},_getValue:function(e){return this.getDataFromOption(this.series[e].data[0])},_colorMap:function(e){var t=this.series[e],i=t.min,n=t.max-i,a=t.axisLine.lineStyle.color;a instanceof Array||(a=[[1,a]]);for(var o=[],r=0,s=a.length;s>r;r++)o.push([a[r][0]*n+i,a[r][1]]);this._paramsMap[e].colorArray=o},_getColor:function(e,t){null==t&&(t=this._getValue(e));for(var i=this._paramsMap[e].colorArray,n=0,a=i.length;a>n;n++)if(i[n][0]>=t)return i[n][1];return i[i.length-1][1]},_getSector:function(e,t,i,n,a,o,r,s,h){return new l({zlevel:s,z:h,hoverable:!1,style:{x:e[0],y:e[1],r0:t,r:i,startAngle:n,endAngle:a,brushType:"fill",color:o,shadowColor:r.shadowColor,shadowBlur:r.shadowBlur,shadowOffsetX:r.shadowOffsetX,shadowOffsetY:r.shadowOffsetY}})},_getLabelText:function(e,t){if(e){if("function"==typeof e)return e.call(this.myChart,t);if("string"==typeof e)return e.replace("{value}",t)}return t},refresh:function(e){e&&(this.option=e,this.series=e.series),this.backupShapeList(),this._buildShape()}},U.inherits(t,i),e("../chart").define("gauge",t),t}),i("echarts/util/shape/GaugePointer",["require","zrender/shape/Base","zrender/tool/util","./normalIsCover"],function(e){function t(e){i.call(this,e)}var i=e("zrender/shape/Base"),n=e("zrender/tool/util");return t.prototype={type:"gauge-pointer",buildPath:function(e,t){var i=t.r,n=t.width,a=t.angle,o=t.x-Math.cos(a)*n*(n>=i/3?1:2),r=t.y+Math.sin(a)*n*(n>=i/3?1:2);a=t.angle-Math.PI/2,e.moveTo(o,r),e.lineTo(t.x+Math.cos(a)*n,t.y-Math.sin(a)*n),e.lineTo(t.x+Math.cos(t.angle)*i,t.y-Math.sin(t.angle)*i),e.lineTo(t.x-Math.cos(a)*n,t.y+Math.sin(a)*n),e.lineTo(o,r)},getRect:function(e){if(e.__rect)return e.__rect;var t=2*e.width,i=e.x,n=e.y,a=i+Math.cos(e.angle)*e.r,o=n-Math.sin(e.angle)*e.r;return e.__rect={x:Math.min(i,a)-t,y:Math.min(n,o)-t,width:Math.abs(i-a)+t,height:Math.abs(n-o)+t},e.__rect},isCover:e("./normalIsCover")},n.inherits(t,i),t}),i("echarts/chart/funnel",["require","./base","zrender/shape/Text","zrender/shape/Line","zrender/shape/Polygon","../config","../util/ecData","../util/number","zrender/tool/util","zrender/tool/color","zrender/tool/area","../chart"],function(e){function t(e,t,n,a,o){i.call(this,e,t,n,a,o),this.refresh(a)}var i=e("./base"),n=e("zrender/shape/Text"),a=e("zrender/shape/Line"),o=e("zrender/shape/Polygon"),r=e("../config");r.funnel={zlevel:0,z:2,clickable:!0,legendHoverLink:!0,x:80,y:60,x2:80,y2:60,min:0,max:100,minSize:"0%",maxSize:"100%",sort:"descending",gap:0,funnelAlign:"center",itemStyle:{normal:{borderColor:"#fff",borderWidth:1,label:{show:!0,position:"outer"},labelLine:{show:!0,length:10,lineStyle:{width:1,type:"solid"}}},emphasis:{borderColor:"rgba(0,0,0,0)",borderWidth:1,label:{show:!0},labelLine:{show:!0}}}};var s=e("../util/ecData"),l=e("../util/number"),h=e("zrender/tool/util"),m=e("zrender/tool/color"),V=e("zrender/tool/area");return t.prototype={type:r.CHART_TYPE_FUNNEL,_buildShape:function(){var e=this.series,t=this.component.legend;this._paramsMap={},this._selected={},this.selectedMap={};for(var i,n=0,a=e.length;a>n;n++)if(e[n].type===r.CHART_TYPE_FUNNEL){if(e[n]=this.reformOption(e[n]),this.legendHoverLink=e[n].legendHoverLink||this.legendHoverLink,i=e[n].name||"",this.selectedMap[i]=t?t.isSelected(i):!0,!this.selectedMap[i])continue;this._buildSingleFunnel(n),this.buildMark(n)}this.addShapeList()},_buildSingleFunnel:function(e){var t=this.component.legend,i=this.series[e],n=this._mapData(e),a=this._getLocation(e);this._paramsMap[e]={location:a,data:n};for(var o,r=0,s=[],h=0,m=n.length;m>h;h++)o=n[h].name,this.selectedMap[o]=t?t.isSelected(o):!0,this.selectedMap[o]&&!isNaN(n[h].value)&&(s.push(n[h]),r++);if(0!==r){for(var V,U,d,p,c=this._buildFunnelCase(e),u=i.funnelAlign,y=i.gap,g=r>1?(a.height-(r-1)*y)/r:a.height,b=a.y,f="descending"===i.sort?this._getItemWidth(e,s[0].value):l.parsePercent(i.minSize,a.width),k="descending"===i.sort?1:0,x=a.centerX,_=[],h=0,m=s.length;m>h;h++)if(o=s[h].name,this.selectedMap[o]&&!isNaN(s[h].value)){switch(V=m-2>=h?this._getItemWidth(e,s[h+k].value):"descending"===i.sort?l.parsePercent(i.minSize,a.width):l.parsePercent(i.maxSize,a.width),u){case"left":U=a.x;break;case"right":U=a.x+a.width-f;break;default:U=x-f/2}d=this._buildItem(e,s[h]._index,t?t.getColor(o):this.zr.getColor(s[h]._index),U,b,f,V,g,u),b+=g+y,p=d.style.pointList,_.unshift([p[0][0]-10,p[0][1]]),_.push([p[1][0]+10,p[1][1]]),0===h&&(0===f?(p=_.pop(),"center"==u&&(_[0][0]+=10),"right"==u&&(_[0][0]=p[0]),_[0][1]-="center"==u?10:15,1==m&&(p=d.style.pointList)):(_[_.length-1][1]-=5,_[0][1]-=5)),f=V}c&&(_.unshift([p[3][0]-10,p[3][1]]),_.push([p[2][0]+10,p[2][1]]),0===f?(p=_.pop(),"center"==u&&(_[0][0]+=10),"right"==u&&(_[0][0]=p[0]),_[0][1]+="center"==u?10:15):(_[_.length-1][1]+=5,_[0][1]+=5),c.style.pointList=_)}},_buildFunnelCase:function(e){var t=this.series[e];if(this.deepQuery([t,this.option],"calculable")){var i=this._paramsMap[e].location,n=10,a={hoverable:!1,style:{pointListd:[[i.x-n,i.y-n],[i.x+i.width+n,i.y-n],[i.x+i.width+n,i.y+i.height+n],[i.x-n,i.y+i.height+n]],brushType:"stroke",lineWidth:1,strokeColor:t.calculableHolderColor||this.ecTheme.calculableHolderColor||r.calculableHolderColor}};return s.pack(a,t,e,void 0,-1),this.setCalculable(a),a=new o(a),this.shapeList.push(a),a}},_getLocation:function(e){var t=this.series[e],i=this.zr.getWidth(),n=this.zr.getHeight(),a=this.parsePercent(t.x,i),o=this.parsePercent(t.y,n),r=null==t.width?i-a-this.parsePercent(t.x2,i):this.parsePercent(t.width,i);return{x:a,y:o,width:r,height:null==t.height?n-o-this.parsePercent(t.y2,n):this.parsePercent(t.height,n),centerX:a+r/2}},_mapData:function(e){function t(e,t){return"-"===e.value?1:"-"===t.value?-1:t.value-e.value}function i(e,i){return-t(e,i)}for(var n=this.series[e],a=h.clone(n.data),o=0,r=a.length;r>o;o++)a[o]._index=o;return"none"!=n.sort&&a.sort("descending"===n.sort?t:i),a},_buildItem:function(e,t,i,n,a,o,r,l,h){var m=this.series,V=m[e],U=V.data[t],d=this.getPolygon(e,t,i,n,a,o,r,l,h);s.pack(d,m[e],e,m[e].data[t],t,m[e].data[t].name),this.shapeList.push(d);var p=this.getLabel(e,t,i,n,a,o,r,l,h);s.pack(p,m[e],e,m[e].data[t],t,m[e].data[t].name),this.shapeList.push(p),this._needLabel(V,U,!1)||(p.invisible=!0);var c=this.getLabelLine(e,t,i,n,a,o,r,l,h);this.shapeList.push(c),this._needLabelLine(V,U,!1)||(c.invisible=!0);var u=[],y=[];return this._needLabelLine(V,U,!0)&&(u.push(c.id),y.push(c.id)),this._needLabel(V,U,!0)&&(u.push(p.id),y.push(d.id)),d.hoverConnect=u,p.hoverConnect=y,d},_getItemWidth:function(e,t){var i=this.series[e],n=this._paramsMap[e].location,a=i.min,o=i.max,r=l.parsePercent(i.minSize,n.width),s=l.parsePercent(i.maxSize,n.width);return(t-a)*(s-r)/(o-a)+r},getPolygon:function(e,t,i,n,a,r,s,l,h){var V,U=this.series[e],d=U.data[t],p=[d,U],c=this.deepMerge(p,"itemStyle.normal")||{},u=this.deepMerge(p,"itemStyle.emphasis")||{},y=this.getItemStyleColor(c.color,e,t,d)||i,g=this.getItemStyleColor(u.color,e,t,d)||("string"==typeof y?m.lift(y,-.2):y);switch(h){case"left":V=n;break;case"right":V=n+(r-s);break;default:V=n+(r-s)/2}var b={zlevel:U.zlevel,z:U.z,clickable:this.deepQuery(p,"clickable"),style:{pointList:[[n,a],[n+r,a],[V+s,a+l],[V,a+l]],brushType:"both",color:y,lineWidth:c.borderWidth,strokeColor:c.borderColor},highlightStyle:{color:g,lineWidth:u.borderWidth,strokeColor:u.borderColor}};return this.deepQuery([d,U,this.option],"calculable")&&(this.setCalculable(b),b.draggable=!0),new o(b)},getLabel:function(e,t,i,a,o,r,s,l,U){var d,p=this.series[e],c=p.data[t],u=this._paramsMap[e].location,y=h.merge(h.clone(c.itemStyle)||{},p.itemStyle),g="normal",b=y[g].label,f=b.textStyle||{},k=y[g].labelLine.length,x=this.getLabelText(e,t,g),_=this.getFont(f),L=i;b.position=b.position||y.normal.label.position,"inner"===b.position||"inside"===b.position||"center"===b.position?(d=U,L=Math.max(r,s)/2>V.getTextWidth(x,_)?"#fff":m.reverse(i)):d="left"===b.position?"right":"left";var W={zlevel:p.zlevel,z:p.z+1,style:{x:this._getLabelPoint(b.position,a,u,r,s,k,U),y:o+l/2,color:f.color||L,text:x,textAlign:f.align||d,textBaseline:f.baseline||"middle",textFont:_}};return g="emphasis",b=y[g].label||b,f=b.textStyle||f,k=y[g].labelLine.length||k,b.position=b.position||y.normal.label.position,x=this.getLabelText(e,t,g),_=this.getFont(f),L=i,"inner"===b.position||"inside"===b.position||"center"===b.position?(d=U,L=Math.max(r,s)/2>V.getTextWidth(x,_)?"#fff":m.reverse(i)):d="left"===b.position?"right":"left",W.highlightStyle={x:this._getLabelPoint(b.position,a,u,r,s,k,U),color:f.color||L,text:x,textAlign:f.align||d,textFont:_,brushType:"fill"},new n(W)},getLabelText:function(e,t,i){var n=this.series,a=n[e],o=a.data[t],r=this.deepQuery([o,a],"itemStyle."+i+".label.formatter");return r?"function"==typeof r?r.call(this.myChart,{seriesIndex:e,seriesName:a.name||"",series:a,dataIndex:t,data:o,name:o.name,value:o.value}):"string"==typeof r?r=r.replace("{a}","{a0}").replace("{b}","{b0}").replace("{c}","{c0}").replace("{a0}",a.name).replace("{b0}",o.name).replace("{c0}",o.value):void 0:o.name},getLabelLine:function(e,t,i,n,o,r,s,l,m){var V=this.series[e],U=V.data[t],d=this._paramsMap[e].location,p=h.merge(h.clone(U.itemStyle)||{},V.itemStyle),c="normal",u=p[c].labelLine,y=p[c].labelLine.length,g=u.lineStyle||{},b=p[c].label;b.position=b.position||p.normal.label.position;var f={zlevel:V.zlevel,z:V.z+1,hoverable:!1,style:{xStart:this._getLabelLineStartPoint(n,d,r,s,m),yStart:o+l/2,xEnd:this._getLabelPoint(b.position,n,d,r,s,y,m),yEnd:o+l/2,strokeColor:g.color||i,lineType:g.type,lineWidth:g.width}};return c="emphasis",u=p[c].labelLine||u,y=p[c].labelLine.length||y,g=u.lineStyle||g,b=p[c].label||b,b.position=b.position,f.highlightStyle={xEnd:this._getLabelPoint(b.position,n,d,r,s,y,m),strokeColor:g.color||i,lineType:g.type,lineWidth:g.width},new a(f)},_getLabelPoint:function(e,t,i,n,a,o,r){switch(e="inner"===e||"inside"===e?"center":e){case"center":return"center"==r?t+n/2:"left"==r?t+10:t+n-10;case"left":return"auto"===o?i.x-10:"center"==r?i.centerX-Math.max(n,a)/2-o:"right"==r?t-(a>n?a-n:0)-o:i.x-o;default:return"auto"===o?i.x+i.width+10:"center"==r?i.centerX+Math.max(n,a)/2+o:"right"==r?i.x+i.width+o:t+Math.max(n,a)+o}},_getLabelLineStartPoint:function(e,t,i,n,a){return"center"==a?t.centerX:n>i?e+Math.min(i,n)/2:e+Math.max(i,n)/2},_needLabel:function(e,t,i){return this.deepQuery([t,e],"itemStyle."+(i?"emphasis":"normal")+".label.show")},_needLabelLine:function(e,t,i){return this.deepQuery([t,e],"itemStyle."+(i?"emphasis":"normal")+".labelLine.show")},refresh:function(e){e&&(this.option=e,this.series=e.series),this.backupShapeList(),this._buildShape()}},h.inherits(t,i),e("../chart").define("funnel",t),t}),i("echarts/chart/eventRiver",["require","./base","../layout/eventRiver","zrender/shape/Polygon","../component/axis","../component/grid","../component/dataZoom","../config","../util/ecData","../util/date","zrender/tool/util","zrender/tool/color","../chart"],function(e){function t(e,t,n,a,o){i.call(this,e,t,n,a,o);var r=this;r._ondragend=function(){r.isDragend=!0},this.refresh(a)}var i=e("./base"),n=e("../layout/eventRiver"),a=e("zrender/shape/Polygon");e("../component/axis"),e("../component/grid"),e("../component/dataZoom");var o=e("../config");o.eventRiver={zlevel:0,z:2,clickable:!0,legendHoverLink:!0,itemStyle:{normal:{borderColor:"rgba(0,0,0,0)",borderWidth:1,label:{show:!0,position:"inside",formatter:"{b}"}},emphasis:{borderColor:"rgba(0,0,0,0)",borderWidth:1,label:{show:!0}}}};var r=e("../util/ecData"),s=e("../util/date"),l=e("zrender/tool/util"),h=e("zrender/tool/color");return t.prototype={type:o.CHART_TYPE_EVENTRIVER,_buildShape:function(){var e=this.series;this.selectedMap={},this._dataPreprocessing();for(var t=this.component.legend,i=[],a=0;a<e.length;a++)if(e[a].type===this.type){e[a]=this.reformOption(e[a]),this.legendHoverLink=e[a].legendHoverLink||this.legendHoverLink;var o=e[a].name||"";if(this.selectedMap[o]=t?t.isSelected(o):!0,!this.selectedMap[o])continue;this.buildMark(a),i.push(this.series[a])}n(i,this._intervalX,this.component.grid.getArea()),this._drawEventRiver(),this.addShapeList()},_dataPreprocessing:function(){for(var e,t,i=this.series,n=0,a=i.length;a>n;n++)if(i[n].type===this.type){e=this.component.xAxis.getAxis(i[n].xAxisIndex||0);for(var o=0,r=i[n].data.length;r>o;o++){t=i[n].data[o].evolution;for(var l=0,h=t.length;h>l;l++)t[l].timeScale=e.getCoord(s.getNewDate(t[l].time)-0),t[l].valueScale=Math.pow(t[l].value,.8)}}this._intervalX=Math.round(this.component.grid.getWidth()/40)},_drawEventRiver:function(){for(var e=this.series,t=0;t<e.length;t++){var i=e[t].name||"";if(e[t].type===this.type&&this.selectedMap[i])for(var n=0;n<e[t].data.length;n++)this._drawEventBubble(e[t].data[n],t,n)}},_drawEventBubble:function(e,t,i){var n=this.series,o=n[t],s=o.name||"",l=o.data[i],m=[l,o],V=this.component.legend,U=V?V.getColor(s):this.zr.getColor(t),d=this.deepMerge(m,"itemStyle.normal")||{},p=this.deepMerge(m,"itemStyle.emphasis")||{},c=this.getItemStyleColor(d.color,t,i,l)||U,u=this.getItemStyleColor(p.color,t,i,l)||("string"==typeof c?h.lift(c,-.2):c),y=this._calculateControlPoints(e),g={zlevel:o.zlevel,z:o.z,clickable:this.deepQuery(m,"clickable"),style:{pointList:y,smooth:"spline",brushType:"both",lineJoin:"round",color:c,lineWidth:d.borderWidth,strokeColor:d.borderColor},highlightStyle:{color:u,lineWidth:p.borderWidth,strokeColor:p.borderColor},draggable:"vertical",ondragend:this._ondragend};g=new a(g),this.addLabel(g,o,l,e.name),r.pack(g,n[t],t,n[t].data[i],i,n[t].data[i].name),this.shapeList.push(g)},_calculateControlPoints:function(e){var t=this._intervalX,i=e.y,n=e.evolution,a=n.length;if(!(1>a)){for(var o=[],r=[],s=0;a>s;s++)o.push(n[s].timeScale),r.push(n[s].valueScale);var l=[];l.push([o[0],i]);var s=0;for(s=0;a-1>s;s++)l.push([(o[s]+o[s+1])/2,r[s]/-2+i]);for(l.push([(o[s]+(o[s]+t))/2,r[s]/-2+i]),l.push([o[s]+t,i]),l.push([(o[s]+(o[s]+t))/2,r[s]/2+i]),s=a-1;s>0;s--)l.push([(o[s]+o[s-1])/2,r[s-1]/2+i]);return l}},ondragend:function(e,t){this.isDragend&&e.target&&(t.dragOut=!0,t.dragIn=!0,t.needRefresh=!1,this.isDragend=!1)},refresh:function(e){e&&(this.option=e,this.series=e.series),this.backupShapeList(),this._buildShape()}},l.inherits(t,i),e("../chart").define("eventRiver",t),t}),i("echarts/layout/eventRiver",["require"],function(){function e(e,i,o){function r(e,t){var i=e.importance,n=t.importance;return i>n?-1:n>i?1:0}for(var s=4,l=0;l<e.length;l++){for(var h=0;h<e[l].data.length;h++){null==e[l].data[h].weight&&(e[l].data[h].weight=1);for(var m=0,V=0;V<e[l].data[h].evolution.length;V++)m+=e[l].data[h].evolution[V].valueScale;e[l].data[h].importance=m*e[l].data[h].weight}e[l].data.sort(r)}for(var l=0;l<e.length;l++){null==e[l].weight&&(e[l].weight=1);for(var m=0,h=0;h<e[l].data.length;h++)m+=e[l].data[h].weight;e[l].importance=m*e[l].weight}e.sort(r);for(var U=Number.MAX_VALUE,d=0,l=0;l<e.length;l++)for(var h=0;h<e[l].data.length;h++)for(var V=0;V<e[l].data[h].evolution.length;V++){var p=e[l].data[h].evolution[V].timeScale;U=Math.min(U,p),d=Math.max(d,p)}U=~~U,d=~~d;for(var c=function(){var e=d-U+1+~~i;if(0>=e)return[0];for(var t=[];e--;)t.push(0);return t}(),u=c.slice(0),y=[],g=0,b=0,l=0;l<e.length;l++)for(var h=0;h<e[l].data.length;h++){var f=e[l].data[h];f.time=[],f.value=[];for(var k,x=0,V=0;V<e[l].data[h].evolution.length;V++)k=e[l].data[h].evolution[V],f.time.push(k.timeScale),f.value.push(k.valueScale),x=Math.max(x,k.valueScale);n(f,i,U),f.y=a(u,f,function(e,t){return e.ypx[t]}),f._offset=a(c,f,function(){return s}),g=Math.max(g,f.y+x),b=Math.max(b,f._offset),y.push(f)}t(y,o,g,b)}function t(e,t,i,n){for(var a=t.height,o=n/a>.5?.5:1,r=t.y,s=(t.height-n)/i,l=0,h=e.length;h>l;l++){var m=e[l];m.y=r+s*m.y+m._offset*o,delete m.time,delete m.value,delete m.xpx,delete m.ypx,delete m._offset;for(var V=m.evolution,U=0,d=V.length;d>U;U++)V[U].valueScale*=s}}function i(e,t,i,n){if(e===i)throw new Error("x0 is equal with x1!!!");if(t===n)return function(){return t};var a=(t-n)/(e-i),o=(n*e-t*i)/(e-i);return function(e){return a*e+o}}function n(e,t,n){var a=~~t,o=e.time.length;e.xpx=[],e.ypx=[];for(var r,s=0,l=0,h=0,m=0,V=0;o>s;s++){l=~~e.time[s],m=e.value[s]/2,s===o-1?(h=l+a,V=0):(h=~~e.time[s+1],V=e.value[s+1]/2),r=i(l,m,h,V);for(var U=l;h>U;U++)e.xpx.push(U-n),e.ypx.push(r(U))}e.xpx.push(h-n),e.ypx.push(V)}function a(e,t,i){for(var n,a=0,o=t.xpx.length,r=0;o>r;r++)n=i(t,r),a=Math.max(a,n+e[t.xpx[r]]);for(r=0;o>r;r++)n=i(t,r),e[t.xpx[r]]=a+n;return a}return e}),i("echarts/chart/venn",["require","./base","zrender/shape/Text","zrender/shape/Circle","zrender/shape/Path","../config","../util/ecData","zrender/tool/util","../chart"],function(e){function t(e,t,n,a,o){i.call(this,e,t,n,a,o),this.refresh(a)}var i=e("./base"),n=e("zrender/shape/Text"),a=e("zrender/shape/Circle"),o=e("zrender/shape/Path"),r=e("../config");r.venn={zlevel:0,z:1,calculable:!1};var s=e("../util/ecData"),l=e("zrender/tool/util");return t.prototype={type:r.CHART_TYPE_VENN,_buildShape:function(){this.selectedMap={},this._symbol=this.option.symbolList,this._queryTarget,this._dropBoxList=[],this._vennDataCounter=0;for(var e=this.series,t=this.component.legend,i=0;i<e.length;i++)if(e[i].type===r.CHART_TYPE_VENN){e[i]=this.reformOption(e[i]);var n=e[i].name||"";if(this.selectedMap[n]=t?t.isSelected(n):!0,!this.selectedMap[n])continue;this._buildVenn(i)}this.addShapeList()},_buildVenn:function(e){var t,i,n=this.series[e],a=n.data;a[0].value>a[1].value?(t=this.zr.getHeight()/3,i=t*Math.sqrt(a[1].value)/Math.sqrt(a[0].value)):(i=this.zr.getHeight()/3,t=i*Math.sqrt(a[0].value)/Math.sqrt(a[1].value));var o=this.zr.getWidth()/2-t,r=(t+i)/2*Math.sqrt(a[2].value)/Math.sqrt((a[0].value+a[1].value)/2),s=t+i;0!==a[2].value&&(s=this._getCoincideLength(a[0].value,a[1].value,a[2].value,t,i,r,Math.abs(t-i),t+i));var l=o+s,h=this.zr.getHeight()/2;if(this._buildItem(e,0,a[0],o,h,t),this._buildItem(e,1,a[1],l,h,i),0!==a[2].value&&a[2].value!==a[0].value&&a[2].value!==a[1].value){var m=(t*t-i*i)/(2*s)+s/2,V=s/2-(t*t-i*i)/(2*s),U=Math.sqrt(t*t-m*m),d=0,p=0;a[0].value>a[1].value&&o+m>l&&(p=1),a[0].value<a[1].value&&o+V>l&&(d=1),this._buildCoincideItem(e,2,a[2],o+m,h-U,h+U,t,i,d,p)}},_getCoincideLength:function(e,t,i,n,a,o,r,s){var l=(n*n-a*a)/(2*o)+o/2,h=o/2-(n*n-a*a)/(2*o),m=Math.acos(l/n),V=Math.acos(h/a),U=n*n*Math.PI,d=m*n*n-l*n*Math.sin(m)+V*a*a-h*a*Math.sin(V),p=d/U,c=i/e,u=Math.abs(p/c);return u>.999&&1.001>u?o:.999>=u?(s=o,o=(o+r)/2,this._getCoincideLength(e,t,i,n,a,o,r,s)):(r=o,o=(o+s)/2,this._getCoincideLength(e,t,i,n,a,o,r,s))},_buildItem:function(e,t,i,n,a,o){var r=this.series,l=r[e],h=this.getCircle(e,t,i,n,a,o);if(s.pack(h,l,e,i,t,i.name),this.shapeList.push(h),l.itemStyle.normal.label.show){var m=this.getLabel(e,t,i,n,a,o);s.pack(m,l,e,l.data[t],t,l.data[t].name),this.shapeList.push(m)}},_buildCoincideItem:function(e,t,i,n,a,r,l,h,m,V){var U=this.series,d=U[e],p=[i,d],c=this.deepMerge(p,"itemStyle.normal")||{},u=this.deepMerge(p,"itemStyle.emphasis")||{},y=c.color||this.zr.getColor(t),g=u.color||this.zr.getColor(t),b="M"+n+","+a+"A"+l+","+l+",0,"+m+",1,"+n+","+r+"A"+h+","+h+",0,"+V+",1,"+n+","+a,f={color:y,path:b},k={zlevel:d.zlevel,z:d.z,style:f,highlightStyle:{color:g,lineWidth:u.borderWidth,strokeColor:u.borderColor}};k=new o(k),k.buildPathArray&&(k.style.pathArray=k.buildPathArray(f.path)),s.pack(k,U[e],0,i,t,i.name),this.shapeList.push(k)},getCircle:function(e,t,i,n,o,r){var s=this.series[e],l=[i,s],h=this.deepMerge(l,"itemStyle.normal")||{},m=this.deepMerge(l,"itemStyle.emphasis")||{},V=h.color||this.zr.getColor(t),U=m.color||this.zr.getColor(t),d={zlevel:s.zlevel,z:s.z,clickable:!0,style:{x:n,y:o,r:r,brushType:"fill",opacity:1,color:V},highlightStyle:{color:U,lineWidth:m.borderWidth,strokeColor:m.borderColor}};return this.deepQuery([i,s,this.option],"calculable")&&(this.setCalculable(d),d.draggable=!0),new a(d)},getLabel:function(e,t,i,a,o,r){var s=this.series[e],l=s.itemStyle,h=[i,s],m=this.deepMerge(h,"itemStyle.normal")||{},V="normal",U=l[V].label,d=U.textStyle||{},p=this.getLabelText(t,i,V),c=this.getFont(d),u=m.color||this.zr.getColor(t),y=d.fontSize||12,g={zlevel:s.zlevel,z:s.z,style:{x:a,y:o-r-y,color:d.color||u,text:p,textFont:c,textAlign:"center"}};return new n(g)},getLabelText:function(e,t,i){var n=this.series,a=n[0],o=this.deepQuery([t,a],"itemStyle."+i+".label.formatter");return o?"function"==typeof o?o(a.name,t.name,t.value):"string"==typeof o?(o=o.replace("{a}","{a0}").replace("{b}","{b0}").replace("{c}","{c0}"),o=o.replace("{a0}",a.name).replace("{b0}",t.name).replace("{c0}",t.value)):void 0:t.name},refresh:function(e){e&&(this.option=e,this.series=e.series),this._buildShape()}},l.inherits(t,i),e("../chart").define("venn",t),t}),i("echarts/chart/treemap",["require","./base","zrender/tool/area","zrender/shape/Rectangle","zrender/shape/Text","zrender/shape/Line","../layout/TreeMap","../data/Tree","../config","../util/ecData","zrender/config","zrender/tool/event","zrender/tool/util","zrender/tool/color","../chart"],function(e){function t(e,t,n,a,o){i.call(this,e,t,n,a,o),this.refresh(a);var r=this;r._onclick=function(e){return r.__onclick(e)},r.zr.on(V.EVENT.CLICK,r._onclick)}var i=e("./base"),n=e("zrender/tool/area"),a=e("zrender/shape/Rectangle"),o=e("zrender/shape/Text"),r=e("zrender/shape/Line"),s=e("../layout/TreeMap"),l=e("../data/Tree"),h=e("../config");h.treemap={zlevel:0,z:1,calculable:!1,clickable:!0,center:["50%","50%"],size:["80%","80%"],root:"",itemStyle:{normal:{label:{
+show:!0,x:5,y:12,textStyle:{align:"left",color:"#000",fontFamily:"Arial",fontSize:13,fontStyle:"normal",fontWeight:"normal"}},breadcrumb:{show:!0,textStyle:{}},borderWidth:1,borderColor:"#ccc",childBorderWidth:1,childBorderColor:"#ccc"},emphasis:{}}};var m=e("../util/ecData"),V=e("zrender/config"),U=(e("zrender/tool/event"),e("zrender/tool/util")),d=e("zrender/tool/color");return t.prototype={type:h.CHART_TYPE_TREEMAP,refresh:function(e){this.clear(),e&&(this.option=e,this.series=this.option.series),this._treesMap={};for(var t=this.series,i=this.component.legend,n=0;n<t.length;n++)if(t[n].type===h.CHART_TYPE_TREEMAP){t[n]=this.reformOption(t[n]);var a=t[n].name||"";if(this.selectedMap[a]=i?i.isSelected(a):!0,!this.selectedMap[a])continue;this._buildSeries(t[n],n)}},_buildSeries:function(e,t){var i=l.fromOptionData(e.name,e.data);this._treesMap[t]=i;var n=e.root&&i.getNodeById(e.root)||i.root;this._buildTreemap(n,t)},_buildTreemap:function(e,t){for(var i=this.shapeList,n=0;n<i.length;){var a=i[n];m.get(a,"seriesIndex")===t?(this.zr.delShape(i[n]),i.splice(n,1)):n++}for(var o=i.length,r=this.series[t],l=r.itemStyle,h=this.parsePercent(r.size[0],this.zr.getWidth())||400,V=this.parsePercent(r.size[1],this.zr.getHeight())||500,U=this.parseCenter(this.zr,r.center),d=U[0]-.5*h,p=U[1]-.5*V,c=h*V,u=0,y=[],g=e.children,n=0;n<g.length;n++)u+=g[n].data.value;for(var b=0;b<g.length;b++)y.push(g[b].data.value*c/u);for(var f=new s({x:d,y:p,width:h,height:V}),k=f.run(y),x=0;x<k.length;x++){var _=g[x].data,L=k[x],W=[_.itemStyle,l],X=this.deepMerge(W);X.normal.color||(X.normal.color=this.zr.getColor(x)),X.emphasis.color||(X.emphasis.color=X.normal.color),this._buildItem(_,X,L,t,x),_.children&&this._buildChildrenTreemap(_.children,X,L,t)}this.query(r,"itemStyle.normal.breadcrumb.show")&&this._buildBreadcrumb(e,t,d,p+V);for(var n=o;n<i.length;n++)this.zr.addShape(i[n])},_buildItem:function(e,t,i,n,a){var o=this.series,r=this.getRectangle(e,t,i);m.pack(r,o[n],n,e,a,e.name),this.shapeList.push(r)},getRectangle:function(e,t,i){var n=t.emphasis,o=t.normal,r=this.getLabel(t,i,e.name,e.value),s=this.option.hoverable,l={zlevel:this.getZlevelBase(),z:this.getZBase(),hoverable:s,clickable:!0,style:U.merge({x:i.x,y:i.y,width:i.width,height:i.height,brushType:"both",color:o.color,lineWidth:o.borderWidth,strokeColor:o.borderColor},r.style,!0),highlightStyle:U.merge({color:n.color,lineWidth:n.borderWidth,strokeColor:n.borderColor},r.highlightStyle,!0)};return new a(l)},getLabel:function(e,t,i,a){var o=e.normal.label.textStyle,r=[e.emphasis.label.textStyle,o],s=this.deepMerge(r),l=e.normal.label.formatter,h=this.getLabelText(i,a,l),m=this.getFont(o),V=n.getTextWidth(h,m),U=n.getTextHeight(h,m),d=this.deepQuery([e.emphasis,e.normal],"label.formatter"),p=this.getLabelText(i,a,d),c=this.getFont(s),u=n.getTextWidth(h,c),y=n.getTextHeight(h,c);e.normal.label.show?(e.normal.label.x+V>t.width||e.normal.label.y+U>t.height)&&(h=""):h="",e.emphasis.label.show?(s.x+u>t.width||s.y+y>t.height)&&(p=""):p="";var g={style:{textX:t.x+e.normal.label.x,textY:t.y+e.normal.label.y,text:h,textPosition:"specific",textColor:o.color,textFont:m},highlightStyle:{textX:t.x+e.emphasis.label.x,textY:t.y+e.emphasis.label.y,text:p,textColor:s.color,textPosition:"specific"}};return g},getLabelText:function(e,t,i){return i?"function"==typeof i?i.call(this.myChart,e,t):"string"==typeof i?(i=i.replace("{b}","{b0}").replace("{c}","{c0}"),i=i.replace("{b0}",e).replace("{c0}",t)):void 0:e},_buildChildrenTreemap:function(e,t,i,n){for(var a=i.width*i.height,o=0,r=[],l=0;l<e.length;l++)o+=e[l].value;for(var h=0;h<e.length;h++)r.push(e[h].value*a/o);for(var V=new s({x:i.x,y:i.y,width:i.width,height:i.height}),U=V.run(r),d=t.normal.childBorderWidth,p=t.normal.childBorderColor,c=0;c<U.length;c++){var u=U[c],y=[];i.y.toFixed(2)!==u.y.toFixed(2)&&y.push(this._getLine(u.x,u.y,u.x+u.width,u.y,d,p)),i.x.toFixed(2)!==u.x.toFixed(2)&&y.push(this._getLine(u.x,u.y,u.x,u.y+u.height,d,p)),(i.y+i.height).toFixed(2)!==(u.y+u.height).toFixed(2)&&y.push(this._getLine(u.x,u.y+u.height,u.x+u.width,u.y+u.height,d,p)),(i.x+i.width).toFixed(2)!==(u.x+u.width).toFixed(2)&&y.push(this._getLine(u.x+u.width,u.y,u.x+u.width,u.y+u.height,d,p));for(var g=0;g<y.length;g++)m.set(y[g],"seriesIndex",n),this.shapeList.push(y[g])}},_getLine:function(e,t,i,n,a,o){var s={zlevel:this.getZlevelBase(),z:this.getZBase(),hoverable:!1,style:{xStart:e,yStart:t,xEnd:i,yEnd:n,lineWidth:a,strokeColor:o}};return new r(s)},_buildBreadcrumb:function(e,t,i,n){for(var a=[],r=e;r;)a.unshift(r.data.name),r=r.parent;for(var s=this.series[t],l=this.query(s,"itemStyle.normal.breadcrumb.textStyle")||{},h=this.query(s,"itemStyle.emphasis.breadcrumb.textStyle")||{},V={y:n+10,textBaseline:"top",textAlign:"left",color:l.color,textFont:this.getFont(l)},p={brushType:"fill",color:h.color||d.lift(l.color,-.3),textFont:this.getFont(h)},c=0;c<a.length;c++){var u=new o({zlevel:this.getZlevelBase(),z:this.getZBase(),style:U.merge({x:i,text:a[c]+(a.length-1-c?" > ":"")},V),clickable:!0,highlightStyle:p});m.set(u,"seriesIndex",t),m.set(u,"name",a[c]),i+=u.getRect(u.style).width,this.shapeList.push(u)}},__onclick:function(e){var t=e.target;if(t){var i=m.get(t,"seriesIndex"),n=m.get(t,"name"),a=this._treesMap[i],o=a.getNodeById(n);o&&o.children.length&&this._buildTreemap(o,i)}}},U.inherits(t,i),e("../chart").define("treemap",t),t}),i("echarts/layout/TreeMap",["require"],function(){function e(e){({x:e.x,y:e.y,width:e.width,height:e.height});this.x=e.x,this.y=e.y,this.width=e.width,this.height=e.height}return e.prototype.run=function(e){var t=[];return this._squarify(e,{x:this.x,y:this.y,width:this.width,height:this.height},t),t},e.prototype._squarify=function(e,t,i){var n="VERTICAL",a=t.width,o=t.height;t.width<t.height&&(n="HORIZONTAL",a=t.height,o=t.width);for(var r=this._getShapeListInAbstractRow(e,a,o),s=0;s<r.length;s++){r[s].x=0,r[s].y=0;for(var l=0;s>l;l++)r[s].y+=r[l].height}var h={};if("VERTICAL"==n){for(var m=0;m<r.length;m++)i.push({x:r[m].x+t.x,y:r[m].y+t.y,width:r[m].width,height:r[m].height});h={x:r[0].width+t.x,y:t.y,width:t.width-r[0].width,height:t.height}}else{for(var V=0;V<r.length;V++)i.push({x:r[V].y+t.x,y:r[V].x+t.y,width:r[V].height,height:r[V].width});h={x:t.x,y:t.y+r[0].width,width:t.width,height:t.height-r[0].width}}var U=e.slice(r.length);0!==U.length&&this._squarify(U,h,i)},e.prototype._getShapeListInAbstractRow=function(e,t,i){if(1===e.length)return[{width:t,height:i}];for(var n=1;n<e.length;n++){var a=this._placeFixedNumberRectangles(e.slice(0,n),t,i),o=this._placeFixedNumberRectangles(e.slice(0,n+1),t,i);if(this._isFirstBetter(a,o))return a}},e.prototype._placeFixedNumberRectangles=function(e,t,i){for(var n=e.length,a=[],o=0,r=0;r<e.length;r++)o+=e[r];for(var s=o/i,l=0;n>l;l++){var h=i*e[l]/o;a.push({width:s,height:h})}return a},e.prototype._isFirstBetter=function(e,t){var i=e[0].height/e[0].width;i=i>1?1/i:i;var n=t[0].height/t[0].width;return n=n>1?1/n:n,Math.abs(i-1)<=Math.abs(n-1)?!0:!1},e}),i("echarts/data/Tree",["require","zrender/tool/util"],function(e){function t(e,t){this.id=e,this.depth=0,this.height=0,this.children=[],this.parent=null,this.data=t||null}function i(e){this.root=new t(e)}var n=e("zrender/tool/util");return t.prototype.add=function(e){var t=this.children;e.parent!==this&&(t.push(e),e.parent=this)},t.prototype.remove=function(e){var t=this.children,i=n.indexOf(t,e);i>=0&&(t.splice(i,1),e.parent=null)},t.prototype.traverse=function(e,t){e.call(t,this);for(var i=0;i<this.children.length;i++)this.children[i].traverse(e,t)},t.prototype.updateDepthAndHeight=function(e){var t=0;this.depth=e;for(var i=0;i<this.children.length;i++){var n=this.children[i];n.updateDepthAndHeight(e+1),n.height>t&&(t=n.height)}this.height=t+1},t.prototype.getNodeById=function(e){if(this.id===e)return this;for(var t=0;t<this.children.length;t++){var i=this.children[t].getNodeById(e);if(i)return i}},i.prototype.traverse=function(e,t){this.root.traverse(e,t)},i.prototype.getSubTree=function(e){var t=this.getNodeById(e);if(t){var n=new i(t.id);return n.root=t,n}},i.prototype.getNodeById=function(e){return this.root.getNodeById(e)},i.fromOptionData=function(e,n){function a(e,i){var n=new t(e.name,e);i.add(n);var o=e.children;if(o)for(var r=0;r<o.length;r++)a(o[r],n)}var o=new i(e),r=o.root;r.data={name:e,children:n};for(var s=0;s<n.length;s++)a(n[s],r);return o.root.updateDepthAndHeight(0),o},i.fromGraph=function(e){function n(t){for(var i=e.getNodeById(t.id),a=0;a<i.outEdges.length;a++){var r=i.outEdges[a],s=o[r.node2.id];t.children.push(s),n(s)}}for(var a={},o={},r=0;r<e.nodes.length;r++){var s,l=e.nodes[r];0===l.inDegree()?(a[l.id]=new i(l.id),s=a[l.id].root):s=new t(l.id),s.data=l.data,o[l.id]=s}var h=[];for(var m in a)n(a[m].root),a[m].root.updateDepthAndHeight(0),h.push(a[m]);return h},i}),i("echarts/chart/tree",["require","./base","../util/shape/Icon","zrender/shape/Image","zrender/shape/Line","zrender/shape/BezierCurve","../layout/Tree","../data/Tree","../config","../util/ecData","zrender/config","zrender/tool/event","zrender/tool/util","../chart"],function(e){function t(e,t,n,a,o){i.call(this,e,t,n,a,o),this.refresh(a)}var i=e("./base"),n=.618,a=e("../util/shape/Icon"),o=e("zrender/shape/Image"),r=e("zrender/shape/Line"),s=e("zrender/shape/BezierCurve"),l=e("../layout/Tree"),h=e("../data/Tree"),m=e("../config");m.tree={zlevel:1,z:2,calculable:!1,clickable:!0,rootLocation:{},orient:"vertical",symbol:"circle",symbolSize:20,nodePadding:30,layerPadding:100,itemStyle:{normal:{label:{show:!0},lineStyle:{width:1,color:"#777",type:"curve"}},emphasis:{}}};var V=e("../util/ecData"),U=(e("zrender/config"),e("zrender/tool/event"),e("zrender/tool/util"));return t.prototype={type:m.CHART_TYPE_TREE,_buildShape:function(e,t){var i=e.data[0];this.tree=h.fromOptionData(i.name,i.children),this.tree.root.data=i,this._setTreeShape(e),this.tree.traverse(function(i){this._buildItem(i,e,t),i.children.length>0&&this._buildLink(i,e)},this);var n=e.roam===!0||"move"===e.roam,a=e.roam===!0||"scale"===e.roam;this.zr.modLayer(this.getZlevelBase(),{panable:n,zoomable:a}),(this.query("markPoint.effect.show")||this.query("markLine.effect.show"))&&this.zr.modLayer(m.EFFECT_ZLEVEL,{panable:n,zoomable:a}),this.addShapeList()},_buildItem:function(e,t,i){var n=[e.data,t],r=this.deepQuery(n,"symbol"),s=this.deepMerge(n,"itemStyle.normal")||{},l=this.deepMerge(n,"itemStyle.emphasis")||{},h=s.color||this.zr.getColor(),m=l.color||this.zr.getColor(),U=-e.layout.angle||0;e.id===this.tree.root.id&&(U=0);var d="right";Math.abs(U)>=Math.PI/2&&Math.abs(U)<3*Math.PI/2&&(U+=Math.PI,d="left");var p=[U,e.layout.position[0],e.layout.position[1]],c=new a({zlevel:this.getZlevelBase(),z:this.getZBase()+1,rotation:p,clickable:this.deepQuery(n,"clickable"),style:{x:e.layout.position[0]-.5*e.layout.width,y:e.layout.position[1]-.5*e.layout.height,width:e.layout.width,height:e.layout.height,iconType:r,color:h,brushType:"both",lineWidth:s.borderWidth,strokeColor:s.borderColor},highlightStyle:{color:m,lineWidth:l.borderWidth,strokeColor:l.borderColor}});c.style.iconType.match("image")&&(c.style.image=c.style.iconType.replace(new RegExp("^image:\\/\\/"),""),c=new o({rotation:p,style:c.style,highlightStyle:c.highlightStyle,clickable:c.clickable,zlevel:this.getZlevelBase(),z:this.getZBase()})),this.deepQuery(n,"itemStyle.normal.label.show")&&(c.style.text=null==e.data.label?e.id:e.data.label,c.style.textPosition=this.deepQuery(n,"itemStyle.normal.label.position"),"radial"===t.orient&&"inside"!==c.style.textPosition&&(c.style.textPosition=d),c.style.textColor=this.deepQuery(n,"itemStyle.normal.label.textStyle.color"),c.style.textFont=this.getFont(this.deepQuery(n,"itemStyle.normal.label.textStyle")||{})),this.deepQuery(n,"itemStyle.emphasis.label.show")&&(c.highlightStyle.textPosition=this.deepQuery(n,"itemStyle.emphasis.label.position"),c.highlightStyle.textColor=this.deepQuery(n,"itemStyle.emphasis.label.textStyle.color"),c.highlightStyle.textFont=this.getFont(this.deepQuery(n,"itemStyle.emphasis.label.textStyle")||{})),V.pack(c,t,i,e.data,0,e.id),this.shapeList.push(c)},_buildLink:function(e,t){var i=t.itemStyle.normal.lineStyle;if("broken"===i.type)return void this._buildBrokenLine(e,i,t);for(var n=0;n<e.children.length;n++){var a=e.layout.position[0],o=e.layout.position[1],r=e.children[n].layout.position[0],s=e.children[n].layout.position[1];switch(i.type){case"curve":this._buildBezierCurve(e,e.children[n],i,t);break;case"broken":break;default:var l=this._getLine(a,o,r,s,i);this.shapeList.push(l)}}},_buildBrokenLine:function(e,t,i){var a=U.clone(t);a.type="solid";var o=[],r=e.layout.position[0],s=e.layout.position[1],l=i.orient,h=e.children[0].layout.position[1],m=r,V=s+(h-s)*(1-n),d=e.children[0].layout.position[0],p=V,c=e.children[e.children.length-1].layout.position[0],u=V;if("horizontal"===l){var y=e.children[0].layout.position[0];m=r+(y-r)*(1-n),V=s,d=m,p=e.children[0].layout.position[1],c=m,u=e.children[e.children.length-1].layout.position[1]}o.push(this._getLine(r,s,m,V,a)),o.push(this._getLine(d,p,c,u,a));for(var g=0;g<e.children.length;g++)y=e.children[g].layout.position[0],h=e.children[g].layout.position[1],"horizontal"===l?p=h:d=y,o.push(this._getLine(d,p,y,h,a));this.shapeList=this.shapeList.concat(o)},_getLine:function(e,t,i,n,a){return e===i&&(e=i=this.subPixelOptimize(e,a.width)),t===n&&(t=n=this.subPixelOptimize(t,a.width)),new r({zlevel:this.getZlevelBase(),hoverable:!1,style:U.merge({xStart:e,yStart:t,xEnd:i,yEnd:n,lineType:a.type,strokeColor:a.color,lineWidth:a.width},a,!0)})},_buildBezierCurve:function(e,t,i,a){var o=n,r=a.orient,l=e.layout.position[0],h=e.layout.position[1],m=t.layout.position[0],V=t.layout.position[1],d=l,p=(V-h)*o+h,c=m,u=(V-h)*(1-o)+h;if("horizontal"===r)d=(m-l)*o+l,p=h,c=(m-l)*(1-o)+l,u=V;else if("radial"===r)if(e.id===this.tree.root.id)d=(m-l)*o+l,p=(V-h)*o+h,c=(m-l)*(1-o)+l,u=(V-h)*(1-o)+h;else{var y=e.layout.originPosition[0],g=e.layout.originPosition[1],b=t.layout.originPosition[0],f=t.layout.originPosition[1],k=this.tree.root.layout.position[0],x=this.tree.root.layout.position[1];d=y,p=(f-g)*o+g,c=b,u=(f-g)*(1-o)+g;var _=(d-this.minX)/this.width*Math.PI*2;d=p*Math.cos(_)+k,p=p*Math.sin(_)+x,_=(c-this.minX)/this.width*Math.PI*2,c=u*Math.cos(_)+k,u=u*Math.sin(_)+x}var L=new s({zlevel:this.getZlevelBase(),hoverable:!1,style:U.merge({xStart:l,yStart:h,cpX1:d,cpY1:p,cpX2:c,cpY2:u,xEnd:m,yEnd:V,strokeColor:i.color,lineWidth:i.width},i,!0)});this.shapeList.push(L)},_setTreeShape:function(e){var t=new l({nodePadding:e.nodePadding,layerPadding:e.layerPadding});this.tree.traverse(function(t){var i=[t.data,e],n=this.deepQuery(i,"symbolSize");"number"==typeof n&&(n=[n,n]),t.layout={width:n[0],height:n[1]}},this),t.run(this.tree);var i=e.orient,n=e.rootLocation.x,a=e.rootLocation.y,o=this.zr.getWidth(),r=this.zr.getHeight();n="center"===n?.5*o:this.parsePercent(n,o),a="center"===a?.5*r:this.parsePercent(a,r),a=this.parsePercent(a,r),"horizontal"===i&&(n=isNaN(n)?10:n,a=isNaN(a)?.5*r:a),"radial"===i?(n=isNaN(n)?.5*o:n,a=isNaN(a)?.5*r:a):(n=isNaN(n)?.5*o:n,a=isNaN(a)?10:a);var s=this.tree.root.layout.position[0];if("radial"===i){var h=1/0,m=0,V=0;this.tree.traverse(function(e){m=Math.max(m,e.layout.position[0]),h=Math.min(h,e.layout.position[0]),V=Math.max(V,e.layout.width)}),this.width=m-h+2*V,this.minX=h}this.tree.traverse(function(t){var o,r;if("vertical"===i&&"inverse"===e.direction)o=t.layout.position[0]-s+n,r=a-t.layout.position[1];else if("vertical"===i)o=t.layout.position[0]-s+n,r=t.layout.position[1]+a;else if("horizontal"===i&&"inverse"===e.direction)r=t.layout.position[0]-s+a,o=n-t.layout.position[1];else if("horizontal"===i)r=t.layout.position[0]-s+a,o=t.layout.position[1]+n;else{o=t.layout.position[0],r=t.layout.position[1],t.layout.originPosition=[o,r];var l=r,m=(o-h)/this.width*Math.PI*2;o=l*Math.cos(m)+n,r=l*Math.sin(m)+a,t.layout.angle=m}t.layout.position[0]=o,t.layout.position[1]=r},this)},refresh:function(e){this.clear(),e&&(this.option=e,this.series=this.option.series);for(var t=this.series,i=this.component.legend,n=0;n<t.length;n++)if(t[n].type===m.CHART_TYPE_TREE){t[n]=this.reformOption(t[n]);var a=t[n].name||"";if(this.selectedMap[a]=i?i.isSelected(a):!0,!this.selectedMap[a])continue;this._buildSeries(t[n],n)}},_buildSeries:function(e,t){this._buildShape(e,t)}},U.inherits(t,i),e("../chart").define("tree",t),t}),i("echarts/layout/Tree",["require","zrender/tool/vector"],function(e){function t(e){e=e||{},this.nodePadding=e.nodePadding||30,this.layerPadding=e.layerPadding||100,this._layerOffsets=[],this._layers=[]}var i=e("zrender/tool/vector");return t.prototype.run=function(e){this._layerOffsets.length=0;for(var t=0;t<e.root.height+1;t++)this._layerOffsets[t]=0,this._layers[t]=[];this._updateNodeXPosition(e.root);var i=e.root;this._updateNodeYPosition(i,0,i.layout.height)},t.prototype._updateNodeXPosition=function(e){var t=1/0,n=-(1/0);e.layout.position=e.layout.position||i.create();for(var a=0;a<e.children.length;a++){var o=e.children[a];this._updateNodeXPosition(o);var r=o.layout.position[0];t>r&&(t=r),r>n&&(n=r)}e.layout.position[0]=e.children.length>0?(t+n)/2:0;var s=this._layerOffsets[e.depth]||0;if(s>e.layout.position[0]){var l=s-e.layout.position[0];this._shiftSubtree(e,l);for(var a=e.depth+1;a<e.height+e.depth;a++)this._layerOffsets[a]+=l}this._layerOffsets[e.depth]=e.layout.position[0]+e.layout.width+this.nodePadding,this._layers[e.depth].push(e)},t.prototype._shiftSubtree=function(e,t){e.layout.position[0]+=t;for(var i=0;i<e.children.length;i++)this._shiftSubtree(e.children[i],t)},t.prototype._updateNodeYPosition=function(e,t,i){e.layout.position[1]=t;for(var n=0,a=0;a<e.children.length;a++)n=Math.max(e.children[a].layout.height,n);var o=this.layerPadding;"function"==typeof o&&(o=o(e.depth));for(var a=0;a<e.children.length;a++)this._updateNodeYPosition(e.children[a],t+o+i,n)},t}),i("echarts/chart/wordCloud",["require","./base","zrender/shape/Text","../layout/WordCloud","../component/grid","../component/dataRange","../config","../util/ecData","zrender/tool/util","zrender/tool/color","../chart"],function(e){function t(e,t,n,a,o){i.call(this,e,t,n,a,o),this.refresh(a)}var i=e("./base"),n=e("zrender/shape/Text"),a=e("../layout/WordCloud");e("../component/grid"),e("../component/dataRange");var o=e("../config"),r=e("../util/ecData"),s=e("zrender/tool/util"),l=e("zrender/tool/color");return o.wordCloud={zlevel:0,z:2,clickable:!0,center:["50%","50%"],size:["40%","40%"],textRotation:[0,90],textPadding:0,autoSize:{enable:!0,minSize:12},itemStyle:{normal:{textStyle:{fontSize:function(e){return e.value}}}}},t.prototype={type:o.CHART_TYPE_WORDCLOUD,refresh:function(e){e&&(this.option=e,this.series=e.series),this._init()},_init:function(){var e=this.series;this.backupShapeList();for(var t=this.component.legend,i=0;i<e.length;i++)if(e[i].type===o.CHART_TYPE_WORDCLOUD){e[i]=this.reformOption(e[i]);var n=e[i].name||"";if(this.selectedMap[n]=t?t.isSelected(n):!0,!this.selectedMap[n])continue;this.buildMark(i),this._initSerie(e[i])}},_initSerie:function(e){var t=e.itemStyle.normal.textStyle,i=[this.parsePercent(e.size[0],this.zr.getWidth())||200,this.parsePercent(e.size[1],this.zr.getHeight())||200],n=this.parseCenter(this.zr,e.center),o={size:i,wordletype:{autoSizeCal:e.autoSize},center:n,rotate:e.textRotation,padding:e.textPadding,font:t.fontFamily,fontSize:t.fontSize,fontWeight:t.fontWeight,fontStyle:t.fontStyle,text:function(e){return e.name},data:e.data},r=new a(o),s=this;r.end(function(e){s._buildShapes(e)}),r.start()},_buildShapes:function(e){for(var t=e.length,i=0;t>i;i++)this._buildTextShape(e[i],0,i);this.addShapeList()},_buildTextShape:function(e,t,i){var a=this.series,o=a[t],s=o.name||"",h=o.data[i],m=[h,o],V=this.component.legend,U=V?V.getColor(s):this.zr.getColor(t),d=this.deepMerge(m,"itemStyle.normal")||{},p=this.deepMerge(m,"itemStyle.emphasis")||{},c=this.getItemStyleColor(d.color,t,i,h)||U,u=this.getItemStyleColor(p.color,t,i,h)||("string"==typeof c?l.lift(c,-.2):c),y=new n({zlevel:o.zlevel,z:o.z,hoverable:!0,clickable:this.deepQuery(m,"clickable"),style:{x:0,y:0,text:e.text,color:c,textFont:[e.style,e.weight,e.size+"px",e.font].join(" "),textBaseline:"alphabetic",textAlign:"center"},highlightStyle:{brushType:p.borderWidth?"both":"fill",color:u,lineWidth:p.borderWidth||0,strokeColor:p.borderColor},position:[e.x,e.y],rotation:[-e.rotate/180*Math.PI,0,0]});r.pack(y,o,t,h,i,h.name),this.shapeList.push(y)}},s.inherits(t,i),e("../chart").define("wordCloud",t),t}),i("echarts/layout/WordCloud",["require","../layout/WordCloudRectZero","zrender/tool/util"],function(e){function t(e){this._init(e)}var i=e("../layout/WordCloudRectZero"),n=e("zrender/tool/util");return t.prototype={start:function(){function e(){p.totalArea=r,U.autoSizeCal.enable&&p._autoCalTextSize(m,r,a,o,U.autoSizeCal.minSize),V.timer&&clearInterval(V.timer),V.timer=setInterval(t,0),t()}function t(){for(var e,t=+new Date,i=m.length;+new Date-t<V.timeInterval&&++s<i&&V.timer;)e=m[s],e.x=d[0]>>1,e.y=d[1]>>1,p._cloudSprite(e,m,s),e.hasText&&p._place(n,e,h)&&(l.push(e),e.x-=d[0]>>1,e.y-=d[1]>>1);s>=i&&(p.stop(),p._fixTagPosition(l),V.endcallback(l))}var n=null,a=0,o=0,r=0,s=-1,l=[],h=null,m=this.wordsdata,V=this.defaultOption,U=V.wordletype,d=V.size,p=this,c=new i({type:U.type,width:d[0],height:d[1]});return c.calculate(function(t){n=t.initarr,a=t.maxWit,o=t.maxHit,r=t.area,h=t.imgboard,e()},this),this},_fixTagPosition:function(e){for(var t=this.defaultOption.center,i=0,n=e.length;n>i;i++)e[i].x+=t[0],e[i].y+=t[1]},stop:function(){return this.defaultOption.timer&&(clearInterval(this.defaultOption.timer),this.defaultOption.timer=null),this},end:function(e){return e&&(this.defaultOption.endcallback=e),this},_init:function(e){this.defaultOption={},this._initProperty(e),this._initMethod(e),this._initCanvas(),this._initData(e.data)},_initData:function(e){var t=this,i=t.defaultOption;this.wordsdata=e.map(function(e,n){return e.text=i.text.call(t,e,n),e.font=i.font.call(t,e,n),e.style=i.fontStyle.call(t,e,n),e.weight=i.fontWeight.call(t,e,n),e.rotate=i.rotate.call(t,e,n),e.size=~~i.fontSize.call(t,e,n),e.padding=i.padding.call(t,e,n),e}).sort(function(e,t){return t.value-e.value})},_initMethod:function(e){function t(e){return e.name}function i(){return"sans-serif"}function n(){return"normal"}function a(e){return e.value}function o(){return 0}function r(e){return function(){return e[Math.round(Math.random()*(e.length-1))]}}function s(){return 0}function l(e){var t=e[0]/e[1];return function(e){return[t*(e*=.1)*Math.cos(e),e*Math.sin(e)]}}function h(e){var t=4,i=t*e[0]/e[1],n=0,a=0;return function(e){var o=0>e?-1:1;switch(Math.sqrt(1+4*o*e)-o&3){case 0:n+=i;break;case 1:a+=t;break;case 2:n-=i;break;default:a-=t}return[n,a]}}function m(e){return"function"==typeof e?e:function(){return e}}var V=this.defaultOption;V.text=e.text?m(e.text):t,V.font=e.font?m(e.font):i,V.fontSize=e.fontSize?m(e.fontSize):a,V.fontStyle=e.fontStyle?m(e.fontStyle):n,V.fontWeight=e.fontWeight?m(e.fontWeight):n,V.rotate=e.rotate?r(e.rotate):o,V.padding=e.padding?m(e.padding):s,V.center=e.center,V.spiral=l,V.endcallback=function(){},V.rectangularSpiral=h,V.archimedeanSpiral=l},_initProperty:function(e){var t=this.defaultOption;t.size=e.size||[256,256],t.wordletype=e.wordletype,t.words=e.words||[],t.timeInterval=1/0,t.timer=null,t.spirals={archimedean:t.archimedeanSpiral,rectangular:t.rectangularSpiral},n.merge(t,{size:[256,256],wordletype:{type:"RECT",areaPresent:.058,autoSizeCal:{enable:!0,minSize:12}}})},_initCanvas:function(){var e,t=Math.PI/180,i=64,n=2048,a=1;"undefined"!=typeof document?(e=document.createElement("canvas"),e.width=1,e.height=1,a=Math.sqrt(e.getContext("2d").getImageData(0,0,1,1).data.length>>2),e.width=(i<<5)/a,e.height=n/a):e=new Canvas(i<<5,n);var o=e.getContext("2d");o.fillStyle=o.strokeStyle="red",o.textAlign="center",this.defaultOption.c=o,this.defaultOption.cw=i,this.defaultOption.ch=n,this.defaultOption.ratio=a,this.defaultOption.cloudRadians=t},_cloudSprite:function(e,t,i){if(!e.sprite){var n=this.defaultOption.cw,a=this.defaultOption.ch,o=this.defaultOption.c,r=this.defaultOption.ratio,s=this.defaultOption.cloudRadians;o.clearRect(0,0,(n<<5)/r,a/r);var l=0,h=0,m=0,V=t.length;for(--i;++i<V;){e=t[i],o.save(),o.font=e.style+" "+e.weight+" "+~~((e.size+1)/r)+"px "+e.font;var U=o.measureText(e.text+"m").width*r,d=e.size<<1;if(e.rotate){var p=Math.sin(e.rotate*s),c=Math.cos(e.rotate*s),u=U*c,y=U*p,g=d*c,b=d*p;U=Math.max(Math.abs(u+b),Math.abs(u-b))+31>>5<<5,d=~~Math.max(Math.abs(y+g),Math.abs(y-g))}else U=U+31>>5<<5;if(d>m&&(m=d),l+U>=n<<5&&(l=0,h+=m,m=0),h+d>=a)break;o.translate((l+(U>>1))/r,(h+(d>>1))/r),e.rotate&&o.rotate(e.rotate*s),o.fillText(e.text,0,0),e.padding&&(o.lineWidth=2*e.padding,o.strokeText(e.text,0,0)),o.restore(),e.width=U,e.height=d,e.xoff=l,e.yoff=h,e.x1=U>>1,e.y1=d>>1,e.x0=-e.x1,e.y0=-e.y1,e.hasText=!0,l+=U}for(var f=o.getImageData(0,0,(n<<5)/r,a/r).data,k=[];--i>=0;)if(e=t[i],e.hasText){for(var U=e.width,x=U>>5,d=e.y1-e.y0,_=0;d*x>_;_++)k[_]=0;if(l=e.xoff,null==l)return;h=e.yoff;for(var L=0,W=-1,X=0;d>X;X++){for(var _=0;U>_;_++){var v=x*X+(_>>5),w=f[(h+X)*(n<<5)+(l+_)<<2]?1<<31-_%32:0;k[v]|=w,L|=w}L?W=X:(e.y0++,d--,X--,h++)}e.y1=e.y0+W,e.sprite=k.slice(0,(e.y1-e.y0)*x)}}},_place:function(e,t,i){function n(e,t,i){i>>=5;for(var n,a=e.sprite,o=e.width>>5,r=e.x-(o<<4),s=127&r,l=32-s,h=e.y1-e.y0,m=(e.y+e.y0)*i+(r>>5),V=0;h>V;V++){n=0;for(var U=0;o>=U;U++)if((n<<l|(o>U?(n=a[V*o+U])>>>s:0))&t[m+U])return!0;m+=i}return!1}function a(e,t){return t.row[e.y]&&t.cloumn[e.x]&&e.x>=t.row[e.y].start&&e.x<=t.row[e.y].end&&e.y>=t.cloumn[e.x].start&&e.y<=t.cloumn[e.x].end}for(var o,r,s,l=this.defaultOption.size,h=([{x:0,y:0},{x:l[0],y:l[1]}],t.x),m=t.y,V=Math.sqrt(l[0]*l[0]+l[1]*l[1]),U=this.defaultOption.spiral(l),d=Math.random()<.5?1:-1,p=-d;(o=U(p+=d))&&(r=~~o[0],s=~~o[1],!(Math.min(r,s)>V));)if(t.x=h+r,t.y=m+s,!(t.x+t.x0<0||t.y+t.y0<0||t.x+t.x1>l[0]||t.y+t.y1>l[1])&&!n(t,e,l[0])&&a(t,i)){for(var c,u=t.sprite,y=t.width>>5,g=l[0]>>5,b=t.x-(y<<4),f=127&b,k=32-f,x=t.y1-t.y0,_=(t.y+t.y0)*g+(b>>5),L=0;x>L;L++){c=0;for(var W=0;y>=W;W++)e[_+W]|=c<<k|(y>W?(c=u[L*y+W])>>>f:0);_+=g}return delete t.sprite,!0}return!1},_autoCalTextSize:function(e,t,i,n,a){function o(e){c.clearRect(0,0,(d<<5)/u,p/u),c.save(),c.font=e.style+" "+e.weight+" "+~~((e.size+1)/u)+"px "+e.font;var t=c.measureText(e.text+"m").width*u,r=e.size<<1;t=t+31>>5<<5,c.restore(),e.aw=t,e.ah=r;var s,l,h;if(e.rotate){var m=Math.sin(e.rotate*y),V=Math.cos(e.rotate*y),g=t*V,b=t*m,f=r*V,k=r*m;l=Math.max(Math.abs(g+k),Math.abs(g-k))+31>>5<<5,h=~~Math.max(Math.abs(b+f),Math.abs(b-f))}return e.size<=U||e.rotate&&t*r<=e.area&&i>=l&&n>=h||t*r<=e.area&&i>=t&&n>=r?void(e.area=t*r):(s=e.rotate&&l>i&&h>n?Math.min(i/l,n/h):t>i||r>n?Math.min(i/t,n/r):Math.sqrt(e.area/(e.aw*e.ah)),e.size=~~(s*e.size),e.size<a?void(e.size=a):o(e))}function r(e,t){for(var i=e.length,n=0;i--;)n+=t(e[i]);return n}for(var s,l,h=r(e,function(e){return e.size}),m=e.length,V=.25,U=a,d=this.defaultOption.cw,p=this.defaultOption.ch,c=this.defaultOption.c,u=this.defaultOption.ratio,y=this.defaultOption.cloudRadians;m--;)s=e[m],l=s.size/h,s.areapre=V?V>l?l:V:l,s.area=t*s.areapre,s.totalarea=t,o(s)}},t}),i("echarts/layout/WordCloudRectZero",["require"],function(){function e(e){this.defaultOption={type:"RECT"},this._init(e)}return e.prototype={RECT:"_calculateRect",_init:function(e){this._initOption(e),this._initCanvas()},_initOption:function(e){for(k in e)this.defaultOption[k]=e[k]},_initCanvas:function(){var e=document.createElement("canvas");e.width=1,e.height=1;var t=Math.sqrt(e.getContext("2d").getImageData(0,0,1,1).data.length>>2);if(e.width=this.defaultOption.width,e.height=this.defaultOption.height,e.getContext)var i=e.getContext("2d");this.canvas=e,this.ctx=i,this.ratio=t},calculate:function(e,t){var i=this.defaultOption.type,n=this[i];this[n].call(this,e,t)},_calculateReturn:function(e,t,i){t.call(i,e)},_calculateRect:function(e,t){var i={},n=this.defaultOption.width>>5<<5,a=this.defaultOption.height;i.initarr=this._rectZeroArray(n*a),i.area=n*a,i.maxHit=a,i.maxWit=n,i.imgboard=this._rectBoard(n,a),this._calculateReturn(i,e,t)},_rectBoard:function(e,t){for(var i=[],n=0;t>n;n++)i.push({y:n,start:0,end:e});for(var a=[],n=0;e>n;n++)a.push({x:n,start:0,end:t});return{row:i,cloumn:a}},_rectZeroArray:function(e){for(var t=[],i=e,n=-1;++n<i;)t[n]=0;return t}},e}),i("echarts/chart/heatmap",["require","./base","../layer/heatmap","../config","../util/ecData","zrender/tool/util","zrender/tool/color","zrender/shape/Image","../chart"],function(e){function t(e,t,n,a,o){i.call(this,e,t,n,a,o),this.refresh(a)}var i=e("./base"),n=e("../layer/heatmap"),a=e("../config"),o=(e("../util/ecData"),e("zrender/tool/util")),r=(e("zrender/tool/color"),e("zrender/shape/Image"));return a.heatmap={zlevel:0,z:2,clickable:!0},t.prototype={type:a.CHART_TYPE_HEATMAP,refresh:function(e){this.clear(),e&&(this.option=e,this.series=e.series),this._init()},_init:function(){var e=this.series;this.backupShapeList();for(var t=e.length,i=0;t>i;++i)if(e[i].type===a.CHART_TYPE_HEATMAP){e[i]=this.reformOption(e[i]);var o=new n(e[i]),s=o.getCanvas(e[i].data,this.zr.getWidth(),this.zr.getHeight()),l=new r({position:[0,0],scale:[1,1],hoverable:this.option.hoverable,style:{x:0,y:0,image:s,width:s.width,height:s.height}});this.shapeList.push(l)}this.addShapeList()}},o.inherits(t,i),e("../chart").define("heatmap",t),t});var n=t("zrender");n.tool={color:t("zrender/tool/color"),math:t("zrender/tool/math"),util:t("zrender/tool/util"),vector:t("zrender/tool/vector"),area:t("zrender/tool/area"),event:t("zrender/tool/event")},n.animation={Animation:t("zrender/animation/Animation"),Cip:t("zrender/animation/Clip"),easing:t("zrender/animation/easing")};var a=t("echarts");a.config=t("echarts/config"),a.util={mapData:{params:t("echarts/util/mapData/params")}},t("echarts/chart/line"),t("echarts/chart/bar"),t("echarts/chart/scatter"),t("echarts/chart/k"),t("echarts/chart/pie"),t("echarts/chart/radar"),t("echarts/chart/chord"),t("echarts/chart/force"),t("echarts/chart/map"),t("echarts/chart/gauge"),t("echarts/chart/funnel"),t("echarts/chart/eventRiver"),t("echarts/chart/venn"),t("echarts/chart/treemap"),t("echarts/chart/tree"),t("echarts/chart/wordCloud"),t("echarts/chart/heatmap"),e.echarts=a,e.zrender=n}(window);
\ No newline at end of file
diff --git a/src/main/websrc/js/login/failure.js b/src/main/websrc/js/login/failure.js
new file mode 100644
index 0000000..b71bc51
--- /dev/null
+++ b/src/main/websrc/js/login/failure.js
@@ -0,0 +1,40 @@
+(function(){
+     angular.module("app.login")
+        .controller("failureCtrl",["$scope","UtilService","$http","$interval","$location",failureCtrl]);
+
+    function failureCtrl($scope,UtilService,$http,$interval,$location){
+        //loading加载
+        $scope.showLoading = function(){
+            document.getElementById("sysLoad").style.display = "block";
+        }
+        $scope.hideLoading = function(){
+            document.getElementById("sysLoad").style.display = "none";
+        }
+        $scope.hasReged = true;
+        $scope.failureType =1;
+        $scope.registerMessage = $location.search().message;
+        $scope.registerFlag = $scope.registerMessage.substring(0,1);
+        $scope.registerId = $scope.registerMessage.substring(1,100);
+        $http.get("api/reged/find/"+$scope.registerId).success(function(data){
+            $scope.registerEmail = data.content.email;
+        });
+
+        $scope.sendAgain = function(){
+            $scope.failureType = 2;
+        	$http.get("api/reged/sendeactivemail/"+$scope.registerId+"/"+$scope.registerFlag).success(function(data){
+                $scope.hideLoading();
+                if(data.content == "success"){
+                    UtilService.setCookie("regId",$scope.registerId,7);
+                    UtilService.setCookie("regFlag",$scope.registerFlag,7);
+                    UtilService.setCookie("regEmail",$scope.registerEmail,7);
+                    window.location.href = "activation.html";
+                }
+                else{
+                    $scope.failureText = "重新激活发送失败";
+                }
+            });
+           
+        }
+          
+    }
+})();
\ No newline at end of file
diff --git a/src/main/websrc/js/login/forget.js b/src/main/websrc/js/login/forget.js
new file mode 100644
index 0000000..5e6a273
--- /dev/null
+++ b/src/main/websrc/js/login/forget.js
@@ -0,0 +1,121 @@
+(function(){
+     angular.module("app.login")
+        .controller("forgetCtrl",["$scope","UtilService","$http","$interval","$location",forgetCtrl]);
+
+    function forgetCtrl($scope,UtilService,$http,$interval,$location){
+    	//loading加载
+        $scope.showLoading = function(){
+            document.getElementById("sysLoad").style.display = "block";
+        }
+        $scope.hideLoading = function(){
+            document.getElementById("sysLoad").style.display = "none";
+        }
+        $scope.hasReged = true;
+        $scope.forgettype = 'forget';
+        $scope.newNoRegister = false;
+    	$scope.save = function(){
+            var par = {
+                email: $scope.email
+            };
+            var verPar = {
+                email: {
+                    key: 'email',
+                    max:48,
+                    val: par.email,
+                    txt:"邮箱最长48位"
+                }
+            }
+            var reg = /^([a-zA-Z0-9]+[_|\_|\.|\-]?)*[a-zA-Z0-9]+@([a-zA-Z0-9]+[_|\_|\.|\-]?)*[a-zA-Z0-9]+\.[a-zA-Z]{1,63}$/;
+            $scope.tip = formJudge(verPar);
+            if($scope.email == undefined || $scope.email == ""){
+                if ($scope.tip.succ == true) {
+                    $scope.tip.succ = false;
+                }
+                $scope.tip.email = {
+                    status:true,
+                    txt:"必填"
+                }
+            }
+            if($scope.email != undefined && $scope.email != "" && !reg.test($scope.email)){
+                if ($scope.tip.succ == true) {
+                    $scope.tip.succ = false;
+                }
+                $scope.tip.email = {
+                    status:true,
+                    txt:"请输入正确的邮箱格式"
+                }
+            }
+            if($scope.email == 'admin@reyun.com' || $scope.email == 'demo@reyun.com'){
+                if ($scope.tip.succ == true) {
+                    $scope.tip.succ = false;
+                }
+                $scope.tip.email = {
+                    status:true,
+                    txt:"该账号密码不可修改"
+                }
+            }
+            if ($scope.tip.succ != true) { 
+                return false;
+            }
+            $scope.errorMessage = "";
+            $scope.showLoading();
+            $http.get("/api/reged/sendforgetpwdemail?email="+$scope.email).success(function(data){
+                $scope.hideLoading();
+                if(data.content.message == "账号不存在"){
+                    $scope.tip = {
+                        email:{
+                            status:true,
+                            txt:"邮箱未注册过账号"
+                        }
+                    };
+                }else if(data.content.message == "success"){
+                    $scope.forgettype = 'success';
+                }else if(data.content.message == "newuser not actived"){
+                    $scope.registerId = data.content.id;
+                    $scope.noActive = 1;
+                    UtilService.setCookie("regId",data.content.id,7);
+                    UtilService.setCookie("regEmail",$scope.email,7);
+                    UtilService.setCookie("regFlag",0,7);
+                }else if(data.content.message == "new subAccount"){
+                    $scope.noActive = 1;
+                    $scope.newNoRegister = true;
+                }else{
+                    $scope.tip = {
+                        email:{
+                            status:true,
+                            txt:"邮件发送失败"
+                        }
+                    };
+                }
+            });
+        }
+
+        $scope.noActive = 0;
+        $scope.closeWin = function(){
+            $scope.noActive = 0;
+            $scope.loginSend = 'yes';
+        }
+        $scope.loginSend = 'yes';
+        $scope.sendAgain = function(){
+            $scope.loginSend = 'no';
+            /*var sendPM = HttpService.getInfo("reged/sendeactivemail/"+$scope.registerId+"/"+0);
+            sendPM.then(function(data){
+                window.location.href = "activation.html";   
+            });*/
+            $http.get("/api/reged/sendeactivemail/"+$scope.registerId+"/"+0).success(function(data){
+                window.location.href = "activation.html"; 
+            });
+        }
+
+        $scope.loginEmail = function(){
+            var mail = $scope.email.split("@");
+            window.open("http://mail."+mail[1]);
+        }
+        $scope.keyEvt= function(e){
+            if(e.keyCode == 13){
+                $scope.save();
+            }
+        }    
+          
+    }
+})();
\ No newline at end of file
diff --git a/src/main/websrc/js/manage/activityevent.js b/src/main/websrc/js/manage/activityevent.js
new file mode 100644
index 0000000..c1852e9
--- /dev/null
+++ b/src/main/websrc/js/manage/activityevent.js
@@ -0,0 +1,236 @@
+(function(){
+    angular.module("app.manage")
+        .controller("activityeventCtrl",["$rootScope","$scope","HttpService","ToolService","UtilService","$state","$timeout","$stateParams",activityeventCtrl])
+        .controller("activityeventDetailCtrl",["$scope","$rootScope","HttpService","ToolService","UtilService","$q","$state","$stateParams","$timeout",activityeventDetailCtrl]);
+
+    function activityeventCtrl($rootScope,$scope,HttpService,ToolService,UtilService,$state,$timeout,$stateParams){
+        $scope.query = function(){
+            var eventPM = HttpService.getInfo("mng/virtual/find/"+$scope.appid);
+            ToolService.showLoading();
+            eventPM.then(function(data){
+                ToolService.hideLoading();
+                $scope.eventList = data;
+            });
+        }
+        $scope.$watch("appid",function(n){
+            if(angular.isDefined(n)){
+                $scope.query();
+            }
+        });
+
+        $scope.$on('flipinfo',function(e,msg){
+            $scope.flipPage = msg;          
+        });
+
+        $scope.onUser = function(id){
+            ToolService.showLoading();
+            var userPM = HttpService.putInfo("mng/virtual/find/"+id+"/enable");
+            userPM.then(function(data){
+                ToolService.hideLoading();
+                ToolService.showTips("启用成功")
+                $scope.query();
+            });
+        }
+        $scope.offUser = function(id){
+            var userPM = HttpService.putInfo("mng/virtual/find/"+id+"/disable");
+            ToolService.showLoading();
+            userPM.then(function(data){
+                ToolService.hideLoading();
+                ToolService.showTips("停用成功")
+                $scope.query();
+            });
+        }
+
+        $scope.gopage = function(info){
+            if(angular.isDefined(info)){
+                $state.go("collect.activityeventDetail",{aid:info});
+            }else{
+                $state.go("collect.activityeventDetail");
+            }
+        }
+    }
+
+    function activityeventDetailCtrl($scope,$rootScope,HttpService,ToolService,UtilService,$q,$state,$stateParams,$timeout){
+        var editInfo = $stateParams.aid;
+        $scope.title = editInfo?"编辑虚拟事件":"新建虚拟事件";
+        $scope.inputdis = false;
+        if(editInfo == null){ //新建虚拟事件
+            editInfo = {eventList:[],type:'userdefine'};
+            $scope.specialEvents = [];
+             $scope.name = "";
+        }
+        else{
+            $scope.name = editInfo.ch_name;
+            if(editInfo.type == 'userdefine'){ //虚拟事件
+                $scope.specialEvents = [];
+            }
+            else{//活跃事件
+                $scope.inputdis = true;
+                if($scope.isweb){
+                    $scope.specialEvents = ["pageview"];
+                }
+                else{
+                    $scope.specialEvents = ["loggedin","reged","payment"];
+                }
+            }
+        }
+        
+
+        var listId = editInfo.id;
+        var chooseStr = editInfo.eventList;
+        $scope.$watch("appid",function(n){
+            if(angular.isDefined(n)){
+                $scope.query();
+            }
+        });
+
+        /*var noFalse = [];
+        $scope.eventList.filter(function(item){
+            if(item.status == true){
+                noFalse.push(item);
+            }
+        });*/
+
+        $scope.query = function(){
+            var url = "";
+            if(editInfo!=null && editInfo.type != 'userdefine'){
+                url = "mng/virtual/unselect/"+$scope.appid;
+            }
+            else{
+                url = "mng/event/find/"+$scope.appid;
+            }
+            var eventPM = HttpService.getInfo(url);
+            ToolService.showLoading();
+            eventPM.then(function(data){
+                ToolService.hideLoading();
+
+                $scope.eventList = data.filter(function(item){
+                    if(item.status == true){
+                        if(chooseStr.indexOf(item.eventName) > -1 || $scope.specialEvents.indexOf(item.eventName)>-1){
+                            item.ischeck = true;
+                        }
+                        else{
+                            item.ischeck = false;
+                        }
+                    }
+                    return item.status == true;
+                });
+            });
+        }
+        
+
+        var chooseNum = 0,max = 5;
+        $scope.chooseItem = function(info){
+            chooseNum = 0;
+            for(var i = 0; i < $scope.eventList.length; i++){
+                if($scope.eventList[i].ischeck == true){
+                    chooseNum = chooseNum + 1;
+                }
+            }
+            if(chooseNum < max){
+                info.ischeck = true;
+            }
+            else{
+                ToolService.showTips("最多可以选择"+max+"个");
+            }
+            
+        }
+        $scope.cancelItem = function(info){
+            if($scope.specialEvents.indexOf(info.eventName)>-1){
+                info.ischeck = true;
+            }else{
+                info.ischeck = false;
+            }
+        }
+        $scope.selectAllEvent = function(){
+            if($scope.eventList.length > max){
+                ToolService.showTips("最多可以选择"+max+"个");
+            }
+            else{
+                $scope.selAll = !$scope.selAll;
+                $scope.eventList.filter(function(item){
+                    if($scope.specialEvents.indexOf(item.eventName)>-1){
+                        item.ischeck = true;
+                    }else{
+                        item.ischeck = $scope.selAll;
+                    }
+                });
+            }
+        }
+
+        $scope.save = function(){
+            var chooseList = [];
+            for(var i = 0; i < $scope.eventList.length; i++){
+                if($scope.eventList[i].ischeck == true){
+                    chooseList.push($scope.eventList[i].eventName);
+                }
+            }
+            var params = {
+                ch_name : $scope.name,
+                eventList : chooseList.join(",")
+            };
+
+            $scope.tip = {},error = false;
+            var verPar = {
+                name: {
+                    key: 'spcname2',
+                    val: params.ch_name,
+                    txt: "含非法字符或过长(支持输入汉字、大小写字母、数字、下划线,长度限制40字符以内)"
+                }
+            };
+            $scope.tip = formJudge(verPar);
+            if($scope.tip.succ != true) { 
+                error = true;
+            }
+                
+            if(chooseList.length<2){
+                $scope.tip.moreparams = {
+                    status:true,
+                    txt:'请至少选择2个事件'
+                }
+                return false;
+            }
+            if(error){return false;}
+
+            var savePM = null,txt = "保存成功";
+            if(listId){
+                params.id = listId;
+                params.type = editInfo.type;
+                savePM = HttpService.putInfo("mng/virtual/update/"+$scope.appid,params);
+            }
+            else{
+                txt = "新建成功";
+                savePM = HttpService.postInfo("mng/virtual/userdefined/"+$scope.appid,params);
+            }
+            ToolService.showLoading();
+            savePM.then(function(data){
+                ToolService.hideLoading();
+                if(data.code == -6001){
+                    $scope.tip.name = {
+                        status:true,
+                        txt:'名称重复'
+                    }
+                    ToolService.showTips("名称重复");
+                }
+                else{
+                    $scope.cancel();
+                    ToolService.showTips(txt);
+                }
+            },function(data){
+                ToolService.hideLoading();
+                if(data.code == -6001){
+                    $scope.tip.name = {
+                        status:true,
+                        txt:'名称重复'
+                    }
+                    ToolService.showTips("名称重复");
+                }
+            });
+        }
+
+        $scope.cancel = function(){
+            $state.go("collect.activityevent");
+        }
+    }
+})();
+        
\ No newline at end of file
diff --git a/src/main/websrc/js/manage/app.js b/src/main/websrc/js/manage/app.js
new file mode 100644
index 0000000..887bc92
--- /dev/null
+++ b/src/main/websrc/js/manage/app.js
@@ -0,0 +1,483 @@
+(function(){
+    angular.module("app.manage")
+        .controller("appCtrl",["$rootScope","$scope","HttpService","ToolService","UtilService","$state","$timeout",appCtrl])
+        .controller("appDetailCtrl",["$scope","$rootScope","HttpService","ToolService","UtilService","$q","$state","$stateParams","$filter","$timeout",appDetailCtrl]);
+
+    var isLog = false; //标识是不是从列表直接进入到调试界面
+    function appCtrl($rootScope,$scope,HttpService,ToolService,UtilService,$state,$timeout){
+        $scope.isDemo = ToolService.isDemoUser();
+
+    	$scope.$on('flipinfo',function(e,msg){
+            $scope.flipPage = msg;
+        });
+        $scope.specialsAppkey = [
+            "e31caee07ebedf8c172267e73204802f",
+            "f4c6764d10bec9a3c4bd4f79a442a947",
+            "022da4f8bd53ac212141bd7fdfa9532d",
+            "5eb29a7e239537f4bedef93f8289d1c6",
+            "e0b3000ebd3f54b791a405f68d3e520c"];
+        $scope.doRemove = function(id){
+            $scope.delstatus = true;
+            $scope.delId = id;
+        }
+        $scope.removeInfo = function(){
+            var removePM = HttpService.deleteInfo("mng/app/delete/"+$scope.delId);
+            ToolService.showLoading();
+            removePM.then(function(data){
+                ToolService.hideLoading();
+                $scope.delstatus = false;
+                ToolService.showTips("删除成功")
+                $scope.$emit("f5Applist",true);
+            });
+        }
+        $timeout(function(){
+            var clipboard = new Clipboard('.copyBtn');
+            clipboard.on('success', function(e) {
+                $scope.$apply(function(){
+                    ToolService.showTips("复制成功");
+                });
+            });
+            clipboard.on('error', function(e) {
+                $scope.$apply(function(){
+                    ToolService.showTips("复制失败");
+                });
+            });
+        },200);
+        //启用停用
+        $scope.onOff = function(id,flag){
+            var url = "mng/app/enable/"+id,tipmsg = "启用成功";
+            if(flag && flag==1){
+                url = "mng/app/forbidden/"+id;
+                tipmsg = "停用成功";
+            }
+            var userPM = HttpService.putInfo(url,{});
+            ToolService.showLoading();
+            userPM.then(function(data){
+                ToolService.hideLoading();
+                ToolService.showTips(tipmsg)
+                $scope.$emit("f5Applist",true);
+            });
+        }
+
+        $scope.gopage = function(id,flag){
+            if(flag){
+                isLog = true;
+            }
+            else{
+                isLog = false;
+            }
+            if(angular.isDefined(id)){
+                $state.go("collect.appDetail",{aid:id});
+            }else{
+                $state.go("collect.appDetail");
+            }
+        }
+
+        $scope.goReport = function(info){
+            $rootScope.isweb = info.platform == 'H5';
+            $scope.$emit("mngappTo",info.id);
+
+            var url = $rootScope.firstMeau.substring(1).replace('/','.');
+            $state.go(url);
+        }
+    }
+
+    function appDetailCtrl($scope,$rootScope,HttpService,ToolService,UtilService,$q,$state,$stateParams,$filter,$timeout){
+        var infoId = $scope.infoId = $scope.id = $stateParams.aid;
+        $scope.isLog = isLog;
+
+        var boundOldID = "",oldName = "";
+
+        var gameTypeId = 38;
+
+        if(!$scope.isLog){
+            var typePM = HttpService.getInfo("mng/app/find/getcategorys");
+            typePM.then(function(data){
+                var typeArr = [],gameArr = [];
+                data.filter(function(item){
+                    item.name = item.categoryname;
+                    if(item.isgame == 1){
+                        gameArr.push(item);
+                    }else{
+                        typeArr.push(item);
+                    }
+                });
+                $scope.typeList = typeArr;
+                $scope.gameList = gameArr;
+
+                $scope.appGenreInit = $scope.typeList[0].categoryid;
+                $scope.gameGenreInit = $scope.gameList[0].categoryid;
+            });
+        }
+        $scope.downloadsdk = function(){
+        }
+        $scope.$on("appGenre",function(e,msg){
+            $scope.showGame = msg.info.categoryid == gameTypeId;
+            $scope.appGenre = msg.info.categoryid;
+
+            $scope.appGenreName = msg.info.categoryname;
+        });
+        $scope.$on("gameGenre",function(e,msg){
+            $scope.gameGenre = msg.info.categoryid;
+            $scope.gameGenreName = msg.info.categoryname;
+        });
+
+        $scope.ckSync = function(){
+            $scope.sync = !$scope.sync;
+
+            if($scope.sync == true){
+                ToolService.showTips("所有推广活动的下载地址将同步更新。",2000);
+            }
+        }
+        var init = function(){
+            if(infoId!=null){
+                if($scope.isLog){
+                    $scope.stepflag = 3;
+                }
+                else{
+                    $scope.stepflag = 1;
+                }
+                var editPM = HttpService.getInfo("mng/app/find/"+infoId);
+                ToolService.showLoading();
+                editPM.then(function(data){
+                    $scope.platform = data.platform;
+                    $scope.name = oldName = data.name;
+                    $scope.url = data.url;
+                    $scope.appkey = data.appkey;
+                    // $scope.sync = data.sync;
+                    $scope.sync = false;
+                    $scope.bundleid = boundOldID = data.bundleid;
+
+                    if($scope.stepflag == 3){
+                        ToolService.hideLoading();
+                        $scope.queryLogInfo();
+                    }
+                });
+                if($scope.stepflag == 1){
+                    $q.all([typePM,editPM]).then(function(data){
+                        ToolService.hideLoading();
+                        var info = data[1];
+                        $scope.appGenreInit = info.appGenre;
+                        $scope.gameGenreInit = info.gameGenre;
+                    });
+                }
+            }else{
+                $scope.stepflag = 1;
+                $scope.platform = 'iOS';
+                $scope.sync = false;
+            }
+        }
+        init();
+
+        $scope.nameHas = false;
+        $scope.exixtName = function(){
+            if(!$scope.tip){
+                $scope.tip = {};
+            }
+            if($scope.judgeNameChange(oldName,$scope.name)){
+                ToolService.showLoading();
+                var existPM = HttpService.getInfo("mng/app/validname",{name:$scope.name});
+                existPM.then(function(data){
+                    ToolService.hideLoading();
+                    if(data==true){
+                        $scope.tip.name = {
+                            status:true,
+                            txt : "名称已存在"
+                        };
+                        $scope.nameHas = true;
+                    }
+                    else{
+                        $scope.tip.name = {
+                            status:false
+                        };
+                        $scope.nameHas = false;
+                    }
+                });
+            }
+            else{
+                $scope.tip.name = {
+                    status:false
+                };
+                $scope.nameHas = false;
+            }
+        }
+
+        $scope.bundleHas = false;
+        $scope.existBundleid = function(flag){
+            if(!$scope.tip){
+                $scope.tip = {};
+            }
+            if($scope.judgeNameChange(boundOldID,$scope.bundleid)){
+                ToolService.showLoading();
+                var existPM = HttpService.getInfo("mng/app/valid",{name:$scope.bundleid});
+                existPM.then(function(data){
+                    ToolService.hideLoading();
+                    if(data==true){
+                        $scope.tip.bundleid = {
+                            status:true,
+                            txt : "bundleid已存在"
+                        };
+                        $scope.bundleHas = true;
+                    }
+                    else{
+                        $scope.tip.bundleid = {
+                            status:false
+                        };
+                        $scope.bundleHas = false;
+                    }
+                });
+            }
+            else{
+                $scope.tip.bundleid = {
+                    status:false
+                };
+                $scope.bundleHas = false;
+            }
+        }
+
+        $scope.save = function(){
+            if($scope.nameHas || $scope.bundleHas){
+                return false;
+            }
+            var par = {
+                    platform: $scope.platform,
+                    name: $scope.name,
+                    appGenre: $scope.appGenre,
+                    sync: $scope.sync,
+                    url: $scope.url
+                };
+                if($scope.appGenre == gameTypeId){
+                    par.gameGenre = $scope.gameGenre;
+                }else{
+                    par.gameGenre = -1;
+                }
+
+            var verPar = {
+                name: {
+                    key: 'nameFormat',
+                    val: $scope.name
+                },
+                url: {
+                    key: 'url',
+                    val: $scope.url,
+                    txt:"以http://或https://开头的合法url"
+                }
+            };
+
+            if($scope.platform=='iOS'){
+                par["bundleid"] = $scope.bundleid;
+                verPar.bundleid = {
+                    key : "num",
+                    min : 9,
+                    max : 10,
+                    val : $scope.bundleid,
+                    txt : '请输入9-10位数字'
+                }
+            }
+
+            $scope.tip = formJudge(verPar);
+            if ($scope.tip.succ != true) {
+                ToolService.showTips($scope.formTipMsg);
+                return false;
+            }
+
+            var savePM = null,txtTips = "添加成功";
+            if(infoId!=null){
+                par.id = infoId;
+                savePM = HttpService.putInfo("mng/app/update",par);
+                txtTips = "修改成功";
+            }else{
+                savePM = HttpService.postInfo("mng/app/create",par);
+            }
+            ToolService.showLoading();
+            savePM.then(function(data){
+                if(infoId!=null){
+                    ToolService.hideLoading();
+                    ToolService.showTips(txtTips);
+                    $scope.cancel();
+                }else{
+                    $scope.$emit("f5Applist",1);
+                    $scope.id = data.id;
+                    $scope.name = data.name;
+                    $scope.appkey = data.appkey;
+                    ToolService.hideLoading();
+                    $scope.stepflag = 2;
+                }
+            });
+        }
+
+        $scope.cancel = function(){
+            $scope.$emit("f5Applist",true);
+            $state.go("collect.app");
+        }
+
+        $scope.changeStep = function(){
+            if($scope.stepflag == 3){
+                $scope.stepflag = 2;
+            }
+        }
+
+        $scope.deviceList = [{'id':1,name:"全部设备"}];
+        $scope.deviceInit = $scope.deviceList[0].id;
+        $scope.$on("deviceId",function(e,msg){
+            if(msg.info.id == 1){
+                $scope.deviceTxt = "";
+            }
+            else{
+                $scope.deviceTxt = msg.info.id;
+            }
+        });
+
+        var getV = function(v){
+            if(UtilService.isNullStr(v)){
+                return "";
+            }
+            else{
+                return v;
+            }
+        }
+        $scope.queryLogInfo = function(){
+            $scope.logFlag = 0;
+            ToolService.showLoading();
+            var testPM = HttpService.getInfo("mng/app/debug/event/list/"+$scope.id),
+                logPM = HttpService.getInfo("mng/app/debug/log/list/"+$scope.id),
+                totalPM = HttpService.getInfo("mng/app/debug/device/list/"+$scope.id);
+
+            $scope.hasZeroEvt = 0;
+            $q.all([testPM,logPM,totalPM]).then(function(data){
+                $scope.testInfos = data[0];
+                $scope.testInfos.filter(function(item){
+                    if($scope.platform=="H5"){
+                        if(['pageview'].indexOf(item.eventName)>-1 && item.eventNumber==0){
+                            $scope.hasZeroEvt ++;
+                        }
+                    }else{
+                        if(['startup','install'].indexOf(item.eventName)>-1 && item.eventNumber==0){
+                            $scope.hasZeroEvt ++;
+                        }
+                    }
+
+                });
+                var logs = data[1];
+                logs.map(function(item){
+                    item.xcontext = JSON.parse(item.xcontext);
+
+                    item.xcontext.osname = getV(item.xcontext._ryos || item.xcontext._os) + '' + getV(item.xcontext._ryosversion);
+                    item.xcontext.channel = item.xcontext._campaignid || item.xcontext.channelid;
+                    item.deviceId = item.xcontext._deviceid;
+
+                    item._network_type = item.xcontext._network_type || item.xcontext._network;
+                    item._model = item.xcontext._model || item.xcontext._devicetype;
+                });
+                $scope.logInfos = logs;
+                $scope.totalInfos = data[2];
+
+                var devList = [{'id':1,name:"全部设备"}];
+                $scope.totalInfos.filter(function(item){
+                    devList.push({id:item.deviceId,name:item.deviceId});
+                });
+                $scope.deviceList = devList;
+                ToolService.hideLoading();
+            });
+        }
+        $scope.getPlatClass = function(plat){
+            var plat = $filter("lowercase")(plat);
+            return {'ios':'apple','android':'android','h5':'web'}[plat];
+        }
+        $scope.nextStep = function(){
+            $scope.cancel();
+            // $scope.stepflag = 3;
+            // $scope.queryLogInfo();
+        }
+        $scope.lookEvents = function(info){
+            $scope.eventDetails = [
+                {name:'时间',key:'xwhen'},
+                {name:'设备ID',key:'_deviceid',second:true},
+                {name:'APPKEY',key:'',value:$scope.appkey},
+                {name:'应用名称',key:'',value:$scope.name},
+                {name:'分包渠道',key:'channel',second:true},
+                {name:'系统',key:'osname',second:true},
+                {name:'机型',key:'_model'},
+                {name:'分辨率',key:'_resolution',second:true},
+                {name:'网络',key:'_network_type'},
+                {name:'SDK版本',key:'_lib_version',second:true},
+                {name:'事件ID',key:'xwhat',isevent:true},
+                {name:'事件名称',key:'eventName'}
+            ];
+            $scope.curEvtLogInfo = info;
+
+            $scope.logFlag = 1;
+            ToolService.showAlp();
+            angular.element(document).on("click",function(){
+                $scope.$apply(function(){
+                    $scope.hideDetails();
+                });
+            });
+        }
+        $scope.commonParams = null;
+        $scope.lookParams = function(info){
+            var getEventParams = function(){
+                var xcontext = $scope.curEvtLogInfo.xcontext;
+                var myparams = [];
+                for(var k in xcontext){
+                    var temp = {'name':k,'value':xcontext[k],sortId:100};
+                    if(k.indexOf("_")==0){
+                        var ccc = $scope.commonParams[k];
+                        if(ccc){
+                            temp.name = ccc.alias;
+                            temp.sortId = ccc.sortId;
+                        }
+                        myparams.push(temp);
+                    }
+                    else{
+                        myparams.push(temp);
+                    }
+                }
+                UtilService.sortArray(myparams);
+                $scope.paramsList = myparams;
+                $scope.logFlag = 2;
+            }
+            if($scope.commonParams != null){
+                getEventParams();
+            }
+            else{
+                ToolService.showLoading();
+                var evtPM = HttpService.getInfo("mng/app/debug/find/common");
+                evtPM.then(function(data){
+                    ToolService.hideLoading();
+                    var json = {};
+                    data.filter(function(item){
+                        json[item.param] = item;
+                    });
+                    $scope.commonParams = json;
+                    getEventParams();
+                });
+            }
+        }
+
+        $scope.hideDetails = function(){
+            ToolService.hideAlp();
+            $scope.logFlag = 0;
+        }
+        $scope.finisStep = function(){
+            ToolService.showLoading();
+            var finshPM = HttpService.putInfo("mng/app/debug/complete/"+$scope.id);
+            finshPM.then(function(data){
+                $scope.cancel();
+            });
+        }
+        $timeout(function(){
+            var clipboard = new Clipboard('.sdkAppid');
+            clipboard.on('success', function(e) {
+                $scope.$apply(function(){
+                    ToolService.showTips("复制成功");
+                });
+            });
+            clipboard.on('error', function(e) {
+                $scope.$apply(function(){
+                    ToolService.showTips("复制失败");
+                });
+            });
+        },200);
+    }
+})();
diff --git a/src/main/websrc/js/manage/auth.js b/src/main/websrc/js/manage/auth.js
new file mode 100644
index 0000000..0b69131
--- /dev/null
+++ b/src/main/websrc/js/manage/auth.js
@@ -0,0 +1,379 @@
+(function(){
+    angular.module("app.manage")
+        .controller("authCtrl",["$rootScope","$scope","HttpService","ToolService","UtilService","$state",authCtrl])
+        .controller("authDetailCtrl",["$rootScope","$scope","HttpService","ToolService","UtilService","$q","$state","$stateParams",authDetailCtrl]);
+
+    function authCtrl($rootScope,$scope,HttpService,ToolService,UtilService,$state){
+
+      $scope.demoUSuper = UtilService.getCookie("ryioUname") == 'demoadmin@reyun.com';
+    	$scope.deviceList = [
+            {id:1,name:"已启用"},
+            {id:2,name:"已停用"}
+        ];
+      $scope.deviceInit = $scope.deviceList[0].id;
+      $scope.$on("deviceId",function(e,msg){
+          $scope.seeFlag = msg.info.id;
+          if( $scope.seeFlag == 1){
+              $scope.findName = 'enable';
+          }else{
+              $scope.findName = 'disable';
+          }
+
+          $scope.query();
+      });
+      if(!$rootScope.accountFlag){
+          $rootScope.accountFlag = "account";
+      }
+
+    	$scope.query = function(flag){
+        if(flag){
+            $rootScope.accountFlag = flag;
+            $rootScope.thirdtab = '子账号管理';
+        }
+        if(angular.isUndefined($scope.findName)){return false;}
+
+        $scope.authList = [];
+    		var authPM = HttpService.getInfo("mng/auth"+$scope.getSuburl()+"/list/"+$scope.findName);
+        ToolService.showLoading();
+  	    authPM.then(function(data){
+            ToolService.hideLoading();
+	    		  $scope.authList = data;
+	    	});
+    	}
+    	$scope.query();
+
+    	$scope.$on('flipinfo',function(e,msg){
+            $scope.flipPage = msg;
+      });
+
+       $scope.onUser = function(id){
+          ToolService.showLoading();
+      	  var userPM = HttpService.putInfo("mng/auth"+$scope.getSuburl()+"/"+id+"/enable");
+    	    userPM.then(function(data){
+            ToolService.hideLoading();
+  		      ToolService.showTips("启用成功");
+            $scope.query();
+    	    });
+        }
+        $scope.offUser = function(id){
+        	var userPM = HttpService.putInfo("mng/auth"+$scope.getSuburl()+"/"+id+"/disable");
+          ToolService.showLoading();
+	    	  userPM.then(function(data){
+            ToolService.hideLoading();
+  		      ToolService.showTips("停用成功");
+            $scope.query();
+	    	  });
+        }
+        $scope.deleteAuth = function(d){
+            $scope.delInfo = d;
+            $scope.wantDelete = true;
+            ToolService.showAlp();
+        }
+        $scope.doDelete = function(){
+            $scope.closeWin();
+            ToolService.showLoading();
+            var deletePM = HttpService.deleteInfo("mng/auth/"+$scope.delInfo.id+"/delete");
+            deletePM.then(function(){
+                ToolService.showTips("删除成功");
+                ToolService.hideLoading();
+                $scope.query();
+            });
+        }
+        $scope.sendEmailAgain = function(send){
+            var sendPM = HttpService.postInfo("mng/auth/mail/"+send.id+"/resend");
+            ToolService.showLoading();
+            sendPM.then(function(data){
+                ToolService.hideLoading();
+                send.send = 1;
+                ToolService.showTips("发送成功");
+            });
+        }
+        $scope.closeWin = function(flag){
+            $scope.wantDelete = false;
+            ToolService.hideAlp();
+        }
+        $scope.gopage = function(info){
+            if(angular.isDefined(info)){
+                if(!info.valid){return false;}
+
+                $state.go("collect.authDetail",{aid:info.id});
+            }else{
+                $state.go("collect.authDetail");
+            }
+        }
+        $scope.getSuburl = function(){
+            var suburl = "";
+            if($rootScope.accountFlag == 'channel'){
+                suburl = "/channel";
+            }
+            return suburl;
+        }
+        $scope.isdetail = false;
+        $scope.showDetails = function(info){
+            $scope.detailInfo = info;
+            ToolService.showAlp();
+            $scope.isdetail = true;
+            angular.element(document).on("click",function(){
+                $scope.$apply(function(){
+                    $scope.hideDetails();
+                });
+            });
+        }
+        $scope.hideDetails = function(){
+            ToolService.hideAlp();
+            $scope.isdetail = false;
+        }
+    }
+    var copyArray = function(arr){
+        return $.extend(true, [], arr);
+    }
+    function authDetailCtrl($rootScope,$scope,HttpService,ToolService,UtilService,$q,$state,$stateParams){
+
+        var infoId = $scope.id = $stateParams.aid;
+
+        $scope.$watch("applistInfo",function(data){
+            if(angular.isDefined(data)){
+                $scope.authapplist = copyArray(data);
+                if($scope.isAppManage && !UtilService.isNullStr(infoId)){
+                    var hasAuthAppsPM = HttpService.getInfo("app/find/"+infoId+"/AuthApp");
+                    hasAuthAppsPM.then(function(data){
+                        $scope.init(data);
+                    });
+                }
+                else{
+                    $scope.init();
+                }
+            }
+        });
+
+        $scope.init = function(otherpowers){
+            if(!UtilService.isNullStr(infoId)){
+                ToolService.showLoading();
+                var accountPM = HttpService.getInfo("mng/auth/"+infoId+"/find");
+                accountPM.then(function(data){
+                    ToolService.hideLoading();
+
+                    $scope.accountInfo = data;
+                    $scope.email = $scope.oldEmail = data.email;
+                    $scope.name = data.name;
+                    $scope.remark = data.remark;
+                    $scope.parentRole = data.parentRole;
+                    if(UtilService.isNullStr(data.name)){
+                        $scope.nameNofix = false;
+                    }else{
+                        $scope.nameNofix = true;
+                    }
+                    $scope.roleCategory = data.roleCategory;
+
+                    if($scope.roleCategory == 2){
+                        $scope.authapplist = copyArray($scope.appAlllistInfo);
+                    }
+                    else{
+                        $scope.authapplist = copyArray($scope.applistInfo);
+                    }
+
+                    if($scope.isAppManage){
+                        var appids = [];
+                        $scope.authapplist.filter(function(item){
+                            appids.push(item.id);
+                        });
+                        otherpowers.filter(function(item){
+                            if(appids.indexOf(item.id)==-1){
+                                item.nopower = true;//当前子应用没有该app权限
+                                $scope.authapplist.push(item);
+                            }
+                        });
+                    }
+
+                    var authStr = data.authList;
+                    authStr.filter(function(power){
+                      for(var i=0;i<$scope.authapplist.length;i++){
+                          var appinfo = $scope.authapplist[i];
+                          if(appinfo.id == power.app){
+                              $scope.authapplist[i].ischeck = true;
+                              break;
+                          }
+                      }
+                    });
+
+                    $scope.steps = 1;
+                    if($scope.roleCategory == 1){
+                        $scope.steps = 0;
+                        $scope.maxstep = 0;
+                    }
+                    else if($scope.roleCategory == 2){//子应用管理员
+                        $scope.maxstep = 1;
+                    }
+                });
+            }
+        }
+
+        $scope.steps = 0;
+        $scope.maxstep = 0;
+        $scope.changeRole = function(flag){
+            switch(flag){
+                case 1: //管理员
+                    $scope.steps = 0;
+                    $scope.maxstep = 0;
+                    break;
+                case 2: //子应用管理员
+                    $scope.steps = 1;
+                    $scope.maxstep = 1;
+                    break;
+                default:
+                    break;
+            }
+
+            if(flag == 2){ //子应用管理员可以赋予未调式的产品
+                $scope.authapplist = copyArray($scope.appAlllistInfo);
+            }
+            else{
+                $scope.authapplist = copyArray($scope.applistInfo);
+            }
+
+            $scope.roleCategory = flag;
+        }
+        $scope.getTips = function(app){
+            if(app.nopower){
+                return "该应用权限由管理员添加,您无此应用权限";
+            }
+            else{
+                return "";
+            }
+        }
+        //全选操作
+        $scope.doCheck = function(k){
+            var bol = $scope.isAllCheck = !$scope.isAllCheck;
+
+            if(k == 'app'){ //选择应用时的全选
+                $scope.authapplist.filter(function(item){
+                    if(!item.nopower){
+                        item.ischeck = bol;
+                    }
+                });
+            }
+        }
+
+        $scope.isAllCheck = false;
+        //第一步选择app
+        $scope.selectApp = function(app){
+            app.ischeck = true;
+            var checkbol = true;
+            for(var i=0;i<$scope.authapplist.length;i++){
+              var item = $scope.authapplist[i];
+              if(!item.nopower && !item.ischeck){
+                checkbol = false;
+                break;
+              }
+            }
+            $scope.isAllCheck = checkbol;
+        }
+        $scope.removeApp = function(app){
+            if(app.nopower){return false;}
+
+            app.ischeck = false;
+            $scope.isAllCheck = false;
+        }
+
+        $scope.nameNofix = false;
+        $scope.save = function(){
+            var par = {
+                    "email":$scope.email,
+                    "name":$scope.name,
+                    "roleCategory":$scope.roleCategory,
+                    "remark":$scope.remark
+                };
+            var verPar = {
+                email:{
+                    key:"email",
+                    val:par.email,
+                    nullTxt:"请填写邮箱"
+                },
+                name:{
+                    key:"numLetter",
+                    val:par.name,
+                    nullTxt:"请填写姓名",
+                    max:20,
+                    txt:"请输入20位以内的中英文或数字"
+                }
+            };
+            if(!UtilService.isNullStr(par.remark)){
+                verPar.remark = {
+                    key:'nameLen',
+                    val:par.remark,
+                    max:200,
+                    txt:'最多可输入100字'
+                }
+            }
+
+            $scope.tip = formJudge(verPar);
+            if($scope.tip.succ != true) {
+                ToolService.showTips($scope.formTipMsg);
+                return false;
+            }
+            else if(!$scope.roleCategory){
+                ToolService.showTips("请选择角色");
+                return false;
+            }
+
+            if($scope.roleCategory ==2 ){
+                var appAuth = [];
+                $scope.authapplist.filter(function(item){
+                    if(item.ischeck){
+                        appAuth.push({app:item.id});
+                    }
+                });
+
+                if(appAuth.length == 0){
+                    ToolService.showTips("请选择应用");
+                    return false;
+                }
+                par.authList = appAuth;
+            }
+
+            var savePM = null,txtTips = "已为该账号发送激活邮件,请在72小时内联系相关人员激活并设置密码";
+            if(infoId!=null){
+                par.id = infoId;
+                savePM = HttpService.putInfo("mng/auth"+$scope.getSuburl()+"/"+infoId+"/update",par);
+                txtTips = "修改成功";
+            }
+            else{
+                savePM = HttpService.postInfo("mng/auth"+$scope.getSuburl()+"/create",par);
+            }
+            ToolService.showLoading();
+            savePM.then(function(data){
+                if(data.code == -6001){
+                    ToolService.hideLoading();
+                    ToolService.showTips("该邮箱已创建");
+                }
+                else if(data.code == -300){
+                    ToolService.hideLoading();
+                    ToolService.showTips("最多可添加3个管理员");
+                }
+                else{
+                    ToolService.hideLoading();
+                    ToolService.showTips(txtTips);
+                    $scope.cancel();
+                }
+            },function(data){
+                if(data.code == -6001){
+                    ToolService.hideLoading();
+                    ToolService.showTips("该邮箱已创建");
+                }else if(data.code == -300){
+                    ToolService.hideLoading();
+                    ToolService.showTips("最多可添加3个管理员");
+                }
+            });
+        }
+        $scope.getSuburl = function(){
+            var suburl = "";
+            if($scope.accountFlag == 'channel'){
+                suburl = "/channel";
+            }
+            return suburl;
+        }
+        $scope.cancel = function(){
+            $state.go("collect.auth");
+        }
+    }
+})();
diff --git a/src/main/websrc/js/manage/channel.js b/src/main/websrc/js/manage/channel.js
new file mode 100644
index 0000000..727e441
--- /dev/null
+++ b/src/main/websrc/js/manage/channel.js
@@ -0,0 +1,1874 @@
+(function(){
+    angular.module("app.manage")
+        .controller("channelCtrl",["$rootScope","$scope","HttpService","ToolService","UtilService","$state","$stateParams","$timeout","$location",channelCtrl])
+        .controller("channelDetailCtrl",["$scope","$rootScope","HttpService","ToolService","UtilService","$q","$state","$stateParams",channelDetailCtrl])
+        .controller("channelAddCtrl",["$rootScope","$scope","HttpService","ToolService","UtilService","$q","$state","$stateParams",channelAddCtrl])
+        .controller("channelSmCtrl",["$rootScope","$scope","HttpService","ToolService","UtilService","$q","$state","$stateParams","DateService","$timeout",channelSmCtrl])
+        .controller("channelAdwordsCtrl",["$rootScope","$scope","HttpService","ToolService","UtilService","$q","$state","$stateParams","DateService","$timeout",channelAdwordsCtrl]);
+
+    function channelCtrl($rootScope,$scope,HttpService,ToolService,UtilService,$state,$stateParams,$timeout,$location){
+        if($rootScope.isSuper || $rootScope.isManage){
+            $rootScope.editPower = true;
+        }else{
+            $rootScope.editPower = false;
+        }
+        var judgeBacklist = function(){
+            if($rootScope.isSuper || $rootScope.isManage){
+                if($rootScope.limitInfo.abTest.blacklist == true){
+                    $scope.hasBlacklist = true;
+                }else{
+                    $scope.hasBlacklist = false;
+                }
+            }else{
+                $scope.hasBlacklist = false;
+            }
+        }
+        if(angular.isDefined($rootScope.limitInfo)){
+            judgeBacklist();
+        }
+        else{
+            $timeout(judgeBacklist,100);
+        }
+
+        var type = $stateParams.aid;
+        if(!UtilService.isNullStr(type) && type != 'adwords' && type != 'smsearch' && type != 'gdt'){
+            $scope.channType = type;
+        }
+        else{
+            $scope.channType = 'ry_coop';
+        }
+        $scope.pageFlag = 1;//2渠道账号列表 3新建渠道账号
+
+        $scope.filterTypeList = function(type){
+            $scope.channType = type;
+            $rootScope.channeluniqueName = 'normal';
+            $rootScope.thirdtab = {'ry_coop':'常规渠道','custom':'自定义渠道','ry_bd':'SEM渠道'}[type];
+            $scope.query();
+        }
+
+        $scope.deviceList = [
+            {id:1,name:"已启用"},
+            {id:2,name:"已停用"}
+        ];
+        $scope.deviceInit = $scope.deviceList[0].id;
+        $scope.$on("deviceId",function(e,msg){
+            $scope.seeFlag = msg.info.id;
+
+            if($scope.customList && $scope.channType == 'custom'){
+                $scope.filterList();
+            }
+        });
+
+        $scope.query = function(bol){
+            var url = '';
+            if($scope.channType == 'custom'){
+                url = "mng/channel/find";
+                if($scope.customList && !bol){
+                    $scope.filterList();
+                    return;
+                }
+            }
+            else{
+                url = "mng/channel/find/unown";
+                if($scope.coopList && !bol){
+                    $scope.filterList();
+                    return;
+                }
+            }
+            var channelPM = HttpService.getInfo(url);
+            ToolService.showLoading();
+            channelPM.then(function(data){
+                ToolService.hideLoading();
+                if($scope.channType == 'custom'){
+                    $scope.customList = data;
+                    $scope.filterList();
+                }
+                else{
+                    $scope.coopList = data;
+                    if($scope.channelType == 'ry_coop'){
+                        $scope.channelList = $scope.coopList.filter(function(item){
+                            return item.type == 'ry_bd';
+                        });
+                    }else{
+                        $scope.channelList = $scope.coopList.filter(function(item){
+                            return item.type == 'ry_coop';
+                        });
+                    }
+                }
+                $scope.filterList();
+                //$scope.channelList = data;
+            });
+        }
+        $scope.filterList = function(){
+            if($scope.channType == 'custom'){
+                $scope.channelList = $scope.customList.filter(function(item){
+                    if($scope.seeFlag == 1){return item.delFlag != true;}
+                    if($scope.seeFlag == 2){return item.delFlag == true;}
+                });
+            }
+            else{
+                $scope.channelList = $scope.coopList.filter(function(item){
+                    if($scope.channType == "ry_bd"){
+                        return item.type == $scope.channType;
+                    }else{
+                        return item.type == $scope.channType && item.category == 'ADVERTISING';
+                    }
+
+                });
+            }
+        }
+        $scope.query();
+
+        var curfilpPage = null,rmd = new Date().getTime();
+        $scope.$on('flipinfo',function(e,msg){
+            if(msg.listkey == 'account'){
+                $scope.flipPage2 = msg;
+            }else if(msg.listkey == 'public'){
+                $scope.flipPage = msg;
+                $scope.flipChange = ++ rmd;
+            }else{
+                $scope.flipPage3 = msg;
+            }
+        });
+
+        $scope.doRemove = function(info){
+            $scope.delId = info.id;
+            $scope.delInfo = info;
+            ToolService.showLoading();
+            var prePM = HttpService.getInfo("mng/channel/delete/valid/"+$scope.delId);
+            prePM.then(function(data){
+                ToolService.hideLoading();
+                if(angular.isNumber(data) && data > 0){
+                    $scope.delflagStatus = 2;
+                    $scope.campnum = data;
+                }
+                else{
+                    $scope.delflagStatus = 1;
+                }
+                $scope.delstatus = true;
+            });
+        }
+
+        $scope.removeInfo = function(){
+            if($scope.delflagStatus == 2){
+                $scope.delstatus = false;
+                return false;
+            }
+            var removePM = HttpService.deleteInfo("mng/channel/delete/"+$scope.delId);
+            ToolService.showLoading();
+            $scope.delstatus = 0;
+            removePM.then(function(data){
+                ToolService.hideLoading();
+
+                ToolService.showTips("停用成功")
+                $scope.query(true);
+            });
+        }
+        $scope.enableInfo = function(info){
+            var enablePM = HttpService.putInfo("mng/channel/enable/"+info.id);
+            ToolService.showLoading();
+            enablePM.then(function(data){
+                ToolService.hideLoading();
+                ToolService.showTips("启用成功")
+                $scope.query(true);
+            });
+        }
+
+        $scope.gopage = function(info){
+            if(angular.isDefined(info)){
+                $state.go("collect.channelDetail",{aid:info});
+            }else{
+                $state.go("collect.channelDetail");
+            }
+        }
+
+        $scope.goGdt = function(info,flag){
+            if(angular.isDefined(info)){
+                info.step = flag;
+                $state.go("collect.channelAdd",{aid:info});
+            }else{
+                $state.go("collect.channelAdd");
+            }
+        }
+
+        $scope.goSm = function(info){
+            if(angular.isDefined(info)){
+                $state.go("collect.channelSm",{aid:info});
+            }else{
+                $state.go("collect.channelSm");
+            }
+        }
+
+        $scope.goAdwords = function(info,flag){
+            if(angular.isDefined(info)){
+                info.step = flag;
+                $state.go("collect.channelAdwords",{aid:info});
+            }else{
+                $state.go("collect.channelAdwords");
+            }
+        }
+
+        $scope.goSub = function(info,flag){
+            $scope.curChannel = info;
+            if($scope.curChannel.name == 'adwords'){
+                $scope.curChannel.nodeUrl = "http://doc.trackingio.com/qu-dao-pei-zhi-shuo-ming/adwords.html";
+            }
+            if(flag){
+                $scope.pageFlag = 3;
+            }else{
+                $scope.backFlag(2);
+            }
+
+        }
+        $scope.backFlag = function(flag){
+            $scope.pageFlag = flag;
+            if(flag == 2){
+                if($scope.curChannel == undefined){
+                    var subPM = HttpService.getInfo("mng/channelaccount/find/"+$scope.twoListID);
+                }else{
+                    var subPM = HttpService.getInfo("mng/channelaccount/find/"+$scope.curChannel.id);
+                }
+                ToolService.showLoading();
+                subPM.then(function(data){
+                    ToolService.hideLoading();
+                    $scope.accountList = data;
+                });
+            }
+            if(flag == 1){
+                $scope.filterTypeList($scope.channType);
+            }
+        }
+
+        if(($rootScope.channeluniqueName != "normal" && $rootScope.channeluniqueName != undefined && window.location.href.indexOf('channel')>-1) || type == 'adwords' || type == 'gdt' || type == 'smsearch'){
+            if(type == 'adwords' || type == 'gdt' || type == 'smsearch'){
+                $rootScope.channeluniqueName = type;
+            }
+            $scope.$watch("appid",function(n){
+                if(angular.isDefined(n)){
+                    var gdtPM = HttpService.getInfo($scope.appid+"/channel/find/"+$rootScope.channeluniqueName);
+                    gdtPM.then(function(data){
+                        ToolService.hideLoading();
+                        $scope.gdtData = data;
+                        $scope.gdtDataId = data.id;
+                        $scope.gdtName = data.name;
+                        $scope.gdtUrl = data.nodeUrl;
+                        if($rootScope.channeluniqueName == 'adwords'){
+                            $scope.gdtUrl = "http://doc.trackingio.com/qu-dao-pei-zhi-shuo-ming/adwords.html";
+                        }
+                    });
+                }
+            });
+            $scope.$watch("gdtDataId",function(n){
+                if(angular.isDefined(n)){
+                    $scope.pageFlag = 2;
+                    var subPM = HttpService.getInfo("mng/channelaccount/find/"+$scope.gdtDataId);
+                    ToolService.showLoading();
+                    subPM.then(function(data){
+                        ToolService.hideLoading();
+                        $scope.accountList = data;
+                    });
+                }
+            });
+            //$rootScope.channeluniqueName = 'normal';
+        }
+
+        $scope.openUrl = function(url){
+            if(url == "http://doc.trackingio.com/qu-dao-pei-zhi-shuo-ming/guang-dian-901a-lao-mo-shi.html"){
+                url = "http://doc.trackingio.com/qu-dao-pei-zhi-shuo-ming/guang-dian-tong.html";
+            }
+            window.open(url);
+        }
+
+        $scope.isdetail = false;
+        $scope.showDetails = function(info){
+            $scope.showDetailsInfo = info;
+            $scope.channelAlias = info.alias;
+            var listPM = null;
+            listPM = HttpService.getInfo("mng/channelaccount/app/find/"+info.id);
+            listPM.then(function(data){
+                $scope.detailInfo = data;
+            });
+            ToolService.showAlp();
+            $scope.isdetail = true;
+            angular.element(document).on("click",function(){
+                $scope.$apply(function(){
+                    $scope.hideDetails();
+                });
+            });
+        }
+        $scope.hideDetails = function(){
+            ToolService.hideAlp();
+            $scope.isdetail = false;
+        }
+
+        $scope.changeAccoutStatus = function(info,flag){
+            var url = "",txt = "";
+            if(flag == 1){
+                url = "mng/channelaccount/forbidden/"+info.id;
+                txt = "停用成功";
+            }
+            else{
+                url = "mng/channelaccount/enable/"+info.id;
+                txt = "启用成功";
+            }
+
+            var enablePM = HttpService.putInfo(url);
+            ToolService.showLoading();
+            enablePM.then(function(data){
+                $scope.twoListID = data.channel;
+                ToolService.hideLoading();
+                ToolService.showTips(txt)
+                $scope.backFlag(2);
+            });
+        }
+        /*var oldname = "";
+        $scope.subDetail = {};
+        $scope.goSubDetail = function(info){
+            $scope.pageFlag = 3;
+            $scope.tip = {};
+            if(info){//编辑
+                $scope.subDetail = info;
+                $scope.channelname = info.name;
+                $scope.channelpwd = info.password;
+                $scope.channeluname = oldname = info.alias;
+                $scope.channelRebate = info.rebate;
+            }
+            else{
+                $scope.subDetail = {};
+                $scope.channelname = "";
+                $scope.channelpwd = "";
+                $scope.channeluname = oldname = "";
+                $scope.channelRebate = "";
+            }
+        }*/
+        //判断名称是否存在
+        $scope.existName = function(flag){
+            if($scope.judgeNameChange(oldname,$scope.channeluname)){
+                ToolService.showLoading();
+                var namePM = HttpService.getInfo("mng/channelaccount/valid",{name:$scope.channeluname});
+                namePM.then(function(data){
+                    if(!$scope.tip){
+                        $scope.tip = {};
+                    }
+                    ToolService.hideLoading();
+                    if(data!=true){//存在
+                        $scope.tip = {
+                            channeluname:{
+                                status:true,
+                                txt:"渠道账号别名已存在"
+                            }
+                        }
+                    }
+                    else{
+                        $scope.tip = {
+                            channeluname:{
+                                status:false
+                            }
+                        }
+                        if(flag && flag == 1){
+                            $scope.saveChannelUser();
+                        }
+                    }
+                });
+            }
+            else{
+                $scope.tip = {
+                    channeluname:{
+                        status:false
+                    }
+                }
+                if(flag && flag == 1){
+                    $scope.saveChannelUser();
+                }
+            }
+        }
+        $scope.saveChannelUser = function(){
+            var par = {
+                name: $scope.channelname,
+                password: $scope.channelpwd,
+                alias: $scope.channeluname,
+                rebate:$scope.channelRebate,
+                channel:$scope.curChannel.id
+            };
+            var verPar = {
+                channelname: {
+                    key: 'isNull',
+                    val: $scope.channelname
+                },
+                channelpwd: {
+                    key: 'isNull',
+                    val: $scope.channelpwd
+                },
+                channeluname: {
+                    key: 'username',
+                    val: $scope.channeluname,
+                    txt: '支持16位内汉字或32位内字母数字'
+                }
+            }
+
+            $scope.tip = formJudge(verPar);
+            if(!UtilService.isNullStr($scope.channelRebate)){
+                if(!angular.isNumber($scope.channelRebate) || Number($scope.channelRebate) < 0 || Number($scope.channelRebate) > 100){
+                    $scope.tip.succ = false;
+                    $scope.tip.channelRebate = {
+                        status: true,
+                        txt : "填写数值过大或过小(取值范围[0.01-100])"
+                    }
+                }
+                else{
+                    $scope.tip.channelRebate = {};
+                }
+            }else{
+                $scope.tip.channelRebate = {};
+            }
+
+            if($scope.tip.succ != true) {
+                ToolService.showTips($scope.formTipMsg);
+                return false;
+            }
+
+            var savePM = null,txtTips = "添加成功";
+            if($scope.subDetail.id!=null){
+                par.id = $scope.subDetail.id;
+                savePM = HttpService.putInfo("mng/channelaccount/update",par);
+                txtTips = "修改成功";
+            }else{
+                savePM = HttpService.postInfo("mng/channelaccount/create",par);
+            }
+            ToolService.showLoading();
+            savePM.then(function(data){
+                ToolService.hideLoading();
+                if(!data.id){
+                    ToolService.showTips("账号或密码错误,请检查更新后重新创建");
+                }
+                else{
+                    ToolService.showTips(txtTips);
+                    $scope.backFlag(2);
+                }
+            });
+        }
+
+
+
+
+        $scope.dayList = [
+            {id:999,name:"未设置"},
+            {id:1,name:"1天"},
+            {id:2,name:"2天"},
+            {id:3,name:"3天"},
+            {id:4,name:"4天"},
+            {id:5,name:"5天"},
+            {id:6,name:"6天"},
+            {id:7,name:"7天"},
+            {id:15,name:"15天"},
+            {id:30,name:"30天"}
+        ];
+        $scope.dayList1 = [
+            {id:1,name:"1天"},
+            {id:2,name:"2天"},
+            {id:3,name:"3天"},
+            {id:4,name:"4天"},
+            {id:5,name:"5天"},
+            {id:6,name:"6天"},
+            {id:7,name:"7天"},
+            {id:15,name:"15天"},
+            {id:30,name:"30天"}
+        ];
+        $scope.$on("ciDay",function(e,msg){
+            $scope.ciDay = msg.info.id;
+        });
+        $scope.$on("ciDayOne",function(e,msg){
+            $scope.ciDayOne = msg.info.id;
+        });
+        $scope.cheatList = [
+            {id:999,name:"未设置"},
+            {id:0,name:"严格"},
+            {id:1,name:"普通"},
+            {id:2,name:"宽松"}
+        ];
+        $scope.cheatList1 = [
+            {id:0,name:"严格"},
+            {id:1,name:"普通"},
+            {id:2,name:"宽松"}
+        ];
+        $scope.$on("cheat",function(e,msg){
+            $scope.cheat = msg.info.id;
+        });
+        $scope.$on("cheatOne",function(e,msg){
+            $scope.cheatOne = msg.info.id;
+        });
+        //全渠道设置
+        var rmd = new Date().getTime();
+        $scope.allSet = function(){
+            $scope.pageFlag = 3;
+            var allPM = HttpService.getInfo("mng/channelparam/find/black");
+            ToolService.showLoading();
+            allPM.then(function(data){
+                ToolService.hideLoading();
+                $scope.allData = data.allChannelValidMatch;
+                $scope.allBlack = data.allChannelBlackMatch;
+                if($scope.allData == false){
+                    $scope.ciDayInit = 999;
+                }else{
+                    $scope.ciDayInit = data.ciDay;
+                }
+                if($scope.allBlack ==false || data.blacklistLevel == -1){
+                    $scope.cheatInit = 999;
+                }else{
+                    $scope.cheatInit = data.blacklistLevel;
+                }
+
+                $scope.blackType = data.blacklistStatus;
+                $scope.datafresh2= ++rmd;
+                $scope.datafresh1= ++rmd;
+            });
+        }
+        $scope.saveAllSet = function(id,flag){
+            //应用全渠道限制
+            if($scope.ciDay == 999 && id == 0 && flag == "valid"){
+                return false;
+            }
+            if($scope.cheat == 999 && id == 0 && flag == "black" && $scope.blackType){
+                return false;
+            }
+
+            var isall = true;
+            if(id == 1){
+                var isdefault = true;
+            }else{
+                var isdefault = false;
+            }
+            var par = {};
+            if($scope.ciDay == 999){
+                par.blacklistStatus = $scope.blackType
+            }
+            if($scope.cheat == 999){
+                par.ciDay = $scope.ciDay
+            }
+            if($scope.ciDay != 999 && $scope.cheat != 999){
+                par.ciDay = $scope.ciDay;
+                par.blacklistStatus = $scope.blackType;
+            }
+
+            if($scope.blackType == true){
+                par.blacklistLevel = $scope.cheat;
+            }else{
+                par.blacklistLevel = -1;
+            }
+            var allsavePM = HttpService.putInfo("mng/channelparam/update/"+flag+"?isall="+isall+"&isdefault="+isdefault,par);
+            ToolService.showLoading();
+            allsavePM.then(function(data){
+                ToolService.hideLoading();
+                if(data == 'success'){
+                    ToolService.showTips("保存成功");
+                }
+                if(flag == 'black'){
+                    $scope.allBlack = true;
+                }else{
+                    $scope.allData = true;
+                }
+                if(id == 1){
+                    $scope.allSet();
+                }
+            });
+        }
+
+        //渠道单独设置
+        var oneSetId = 0;
+        $scope.oneSet = function(info){
+            $scope.pageFlag = 4;
+            $scope.channelParam = info;
+
+            var onePM = HttpService.getInfo("mng/channelparam/find/"+info.id);
+            ToolService.showLoading();
+            onePM.then(function(data){
+                ToolService.hideLoading();
+                oneSetId = data.id;
+                $scope.winciDayOne = $scope.ciDayOneInit = data.ciDay;
+                $scope.blackOneType = data.blacklistStatus;
+                $scope.cheatOne = $scope.wincheatOne = $scope.cheatOneInit = data.blacklistLevel;
+                /*if(data.blacklistLevel == -1){
+                    $scope.cheatOne = $scope.cheatOneInit = 1;
+                }  */
+            });
+        }
+
+        $scope.blackClick = function(id){
+            if(id == 1){
+                $scope.blackOneType = true;
+                if($scope.wincheatOne = -1){
+                    $scope.cheatOne = $scope.wincheatOne = $scope.cheatOneInit = 1;
+                }
+            }else{
+                $scope.blackOneType = false;
+            }
+        }
+
+        $scope.saveOne = function(id,flag){
+            var isall = false;
+            if(id == 1){
+                var isdefault = true;
+            }else{
+                var isdefault = false;
+            }
+
+            var par = {
+                id: oneSetId,
+                cid: $scope.channelParam.id,
+                ciDay: $scope.ciDayOne,
+                blacklistStatus:$scope.blackOneType
+            };
+            if($scope.blackOneType == true){
+                par.blacklistLevel = $scope.cheatOne;
+            }else{
+                par.blacklistLevel = -1;
+            }
+            var onesavePM = HttpService.putInfo("mng/channelparam/update/"+flag+"?isall="+isall+"&isdefault="+isdefault,par);
+            ToolService.showLoading();
+            onesavePM.then(function(data){
+                ToolService.hideLoading();
+                $scope.closeWin();
+                ToolService.showTips("保存成功");
+                oneSetId = data.id;
+                $scope.winciDayOne = $scope.ciDayOneInit = data.ciDay;
+                $scope.blackOneType = data.blacklistStatus;
+                $scope.cheatOne = $scope.wincheatOne = $scope.cheatOneInit = data.blacklistLevel;
+            });
+        }
+
+        //数据有效期设置
+        $scope.setData = function(){
+            ToolService.showAlp();
+            $scope.winFlag = 2;
+        }
+        //黑名单设置
+        $scope.setBlock = function(){
+            ToolService.showAlp();
+            $scope.winFlag = 3;
+        }
+
+        //公共IP列表
+        $scope.publicIP = function(){
+            $scope.pageFlag = 5;
+            var publicPM = HttpService.getInfo("mng/channelparam/find");
+            ToolService.showLoading();
+            publicPM.then(function(data){
+                ToolService.hideLoading();
+                $scope.campaignList = data;
+                $scope.selectIDS = [];
+                $scope.searchtxt = "";
+            });
+        }
+        //公共IP操作
+        $scope.saveIP = function(){
+            var par = {
+                ip: $scope.ip
+            };
+            var verPar = {
+                ip: {
+                    key: 'ipError',
+                    val: $scope.ip
+                }
+            };
+            $scope.tip = formJudge(verPar);
+            if ($scope.tip.succ != true) {
+                ToolService.showTips($scope.formTipMsg);
+                return false;
+            }
+            if($scope.ip == oldIP){
+                $scope.closeWin();
+                return false;
+            }
+            var savePM = null,txtTips = "添加成功";
+            if($scope.ipListId!=null){
+                par.id = $scope.ipListId;
+                savePM = HttpService.putInfo("mng/channelparam/update",par);
+                txtTips = "修改成功";
+            }else{
+                savePM = HttpService.postInfo("mng/channelparam/create",par);
+            }
+            ToolService.showLoading();
+            savePM.then(function(data){
+                ToolService.hideLoading();
+                if(data.code == -7000){
+                    $scope.tip = {
+                        ip:{
+                            status:true,
+                            txt:"IP地址已存在"
+                        }
+                    };
+                }else{
+                    ToolService.showTips(txtTips);
+                    $scope.closeWin();
+                    $scope.publicIP();
+                }
+            },function(data){
+                ToolService.hideLoading();
+                if(data.code == -7000){
+                    $scope.tip = {
+                        ip:{
+                            status:true,
+                            txt:"IP地址已存在"
+                        }
+                    };
+                }
+            });
+
+        }
+
+        $scope.$watch("flipChange+campaignList",function(){
+            if($scope.flipPage && $scope.campaignList){
+                curfilpPage = {start:$scope.flipPage.start+1,end:$scope.flipPage.end};
+                if(curfilpPage.end > $scope.campaignList.length){
+                    curfilpPage.end = $scope.campaignList.length;
+                }
+            }
+        });
+        //新增或编辑IP
+        var oldIP = "";
+        $scope.createIP = function(info){
+            if(info == undefined){
+                $scope.ip = "";
+                $scope.ipListId = null;
+            }else{
+                $scope.ipListId = info.id;
+                $scope.ip = info.ip;
+                oldIP = info.ip;
+            }
+            ToolService.showAlp();
+            $scope.winFlag=1;
+            $scope.tip = {
+                ip:{
+                    status:false,
+                    txt:""
+                }
+            };
+        }
+        $scope.closeWin = function(){
+            ToolService.hideAlp();
+            $scope.winFlag=0;
+        }
+
+        $scope.clickCkx = function(id){
+            var idx = $scope.selectIDS.indexOf(id);
+            if(idx > -1){
+                $scope.selectIDS.splice(idx,1);
+            }else{
+                $scope.selectIDS.push(id);
+            }
+        }
+        $scope.setCurrentList = function(){
+            var curList = $scope.campaignList;
+            if(!UtilService.isNullStr($scope.searchTxt)){
+                var myFilterList = $scope.campaignList.filter(function(item){
+                    if((item.name && angular.uppercase(String(item.name)).indexOf(angular.uppercase($scope.searchTxt))>-1) || (item.trackurl && angular.uppercase(String(item.trackurl)).indexOf(angular.uppercase($scope.searchTxt))>-1)){
+                        return true;
+                    }
+                    else{
+                        return false;
+                    }
+                });
+                curList = myFilterList;
+            }
+            $scope.curShowList = curList;
+        }
+        $scope.curPageAll = function(){
+            if(!$scope.flipPage || !$scope.campaignList){return false;}
+
+            $scope.setCurrentList();
+            curfilpPage.end = $scope.curShowList.length>curfilpPage.end ? curfilpPage.end:$scope.curShowList.length;
+            var len = curfilpPage.end - curfilpPage.start,count = 0;
+
+            for(var i = curfilpPage.start;i<curfilpPage.end;i++){
+                var temp = $scope.curShowList[i];
+
+                if($scope.selectIDS.indexOf(temp.id)>-1){
+                    count ++;
+                }
+            }
+            $scope.onePageCount = count;
+            return len == count && len>0;
+        }
+        $scope.checkAllCurrent = function(){
+            var bol = $scope.curPageAll();
+            curfilpPage.end = $scope.curShowList.length>curfilpPage.end ? curfilpPage.end:$scope.curShowList.length;
+            for(var i = curfilpPage.start;i<curfilpPage.end;i++){
+                var temp = $scope.curShowList[i],idx = $scope.selectIDS.indexOf(temp.id);
+                if(bol && idx>-1){
+                    $scope.selectIDS.splice(idx,1);
+                }
+                if(!bol && idx==-1){
+                    $scope.selectIDS.push(temp.id);
+                }
+            }
+        }
+
+        $scope.checkAllPage = function(){
+            $scope.selectIDS = [];
+            var len = $scope.curShowList.length,count = 0;
+            for(var i = 0;i<len;i++){
+                $scope.selectIDS.push($scope.curShowList[i].id);
+            }
+        }
+
+        $scope.NocheckAllPage = function(){
+            $scope.selectIDS = [];
+        }
+
+        $scope.$watch("searchTxt",function(n){
+            if(angular.isDefined(n)){
+                $scope.selectIDS = [];
+            }
+        });
+        $scope.$watch("selectIDS",function(n){
+            if($scope.selectIDS && $scope.selectIDS.length>0){
+                $scope.iptHolder = "搜索后,所选内容将清除";
+            }
+            else{
+                $scope.iptHolder = "输入名称或短链搜索";
+            }
+        });
+
+        $scope.doBatchRemove = function(){
+            $scope.delIPbatch = true;
+        }
+
+        $scope.removeBatchIP = function(){
+            $scope.delIPbatch = false;
+            var removePM = HttpService.deleteInfo("mng/channelparam/delete/"+$scope.selectIDS.join(","));
+            ToolService.showLoading();
+            removePM.then(function(data){
+                ToolService.hideLoading();
+                ToolService.showTips("删除成功");
+                $scope.publicIP();
+            });
+        }
+
+        $scope.doRemoveIP = function(info){
+            $scope.delIPTips = "是否删除 “"+info.ip+"” 这个IP地址?";
+            $scope.delIPstatus = true;
+            $scope.delIPId = info.id;
+        }
+        $scope.removeInfoIP = function(){
+            var removePM = HttpService.deleteInfo("mng/channelparam/delete/"+$scope.delIPId);
+            ToolService.showLoading();
+            removePM.then(function(data){
+                ToolService.hideLoading();
+                $scope.delIPstatus = false;
+                ToolService.showTips("删除成功");
+                $scope.publicIP();
+            });
+        }
+    }
+
+    function channelDetailCtrl($scope,$rootScope,HttpService,ToolService,UtilService,$q,$state,$stateParams){
+        var editInfo = $stateParams.aid,infoId = null;
+        if(angular.isDefined(editInfo) && editInfo!=null){
+            infoId = $scope.id = editInfo.id;
+        }
+
+        var channelPM = HttpService.getInfo("1/channel/findcoop");
+        channelPM.then(function(data){
+            $scope.channelList = data;
+        });
+
+        var inName = "";
+        $scope.init = function(){
+            if(angular.isDefined(editInfo) && editInfo!=null){
+                $scope.name = inName = editInfo.name;
+                $scope.category = editInfo.category;
+                $scope.url = editInfo.url;
+
+                $scope.osIos = editInfo.osIos;
+                $scope.osAndroid = editInfo.osAndroid;
+                $scope.osWeb = editInfo.osWeb;
+
+                if(editInfo.osIos){
+                    $scope.os1 = 0;
+                }
+                if(editInfo.osAndroid){
+                    $scope.os2 = 1;
+                }
+                if(editInfo.osWeb){
+                    $scope.os3 = 2;
+                }
+            }else{
+                $scope.osIos = false;
+                $scope.osAndroid = false;
+                $scope.osWeb = false;
+                $scope.category='ADVERTISING';
+                $scope.os = 0;
+                inName = "";
+            }
+        };
+        $scope.tipStatus = false;
+        $scope.changeName = function(){
+            if(angular.isDefined(editInfo) && editInfo!=null){
+
+            }else{
+                var isCheck = !$scope.osIos && !$scope.osAndroid && !$scope.osWeb;
+                if(isCheck){
+                    $("#name").blur();
+                    ToolService.showTips("请先选择平台");
+                }
+            }
+        }
+        //监控渠道类型
+        $scope.$watch("category",function(n){
+            if(angular.isDefined(n)){
+                $scope.osIos = false;
+                $scope.osAndroid = false;
+                $scope.osWeb = false;
+            }
+        });
+        $scope.filterName = function(){
+            if(!$scope.name){return false;}
+
+            if($scope.name!=inName){
+                $scope.filterChannels = $scope.channelList.filter(function(item){
+                    var result = (item.name.indexOf($scope.name)>-1 || $scope.name.indexOf(item.name)>-1) && item.category == $scope.category;
+                    if(!result){return false;}
+
+                    if($scope.osIos){
+                        result = result && item.osIos;
+                    }
+                    if($scope.osAndroid){
+                        result = result && item.osAndroid;
+                    }
+                    if($scope.osWeb){
+                        result = result && item.osWeb;
+                    }
+                    return result;
+                });
+                $scope.tipStatus = false;
+            }
+            else{
+                $scope.filterChannels = [];
+            }
+        }
+
+        $scope.clearFilter = function(){
+            $scope.filterChannels = [];
+        }
+        $scope.doTips = function(channel){
+            $scope.coopchannel = channel;
+            $scope.name = channel.name;
+            $scope.tipStatus = true;
+            $scope.filterChannels = [];
+        }
+
+        $scope.checkTypes = function(os){
+            if(os==1){
+                $scope.osIos = !$scope.osIos;
+            }else if(os==2){
+                $scope.osAndroid = !$scope.osAndroid;
+            }else{
+                $scope.osWeb = !$scope.osWeb;
+            }
+            if($scope.osIos || $scope.osAndroid || $scope.osWeb){
+                $scope.typeTip = "";
+            }
+        }
+        $scope.init();
+        $scope.save = function(){
+            var par = {
+                name: $scope.name,
+                category: $scope.category,
+                url: $scope.url,
+                // os:$scope.os,
+                osIos:$scope.osIos,
+                osAndroid:$scope.osAndroid,
+                osWeb:$scope.osWeb,
+            };
+            var verPar = {
+                name: {
+                    key: 'spcname',
+                    val: par.name
+                }
+            }
+            $scope.tip = formJudge(verPar);
+            var isCheck = !$scope.osIos && !$scope.osAndroid && !$scope.osWeb;
+            if ($scope.tip.succ != true || (isCheck && !infoId)) {
+                if(isCheck && !infoId){$scope.typeTip = "请至少选择一个平台";}
+                ToolService.showTips($scope.formTipMsg);
+                return false;
+            }
+            var savePM = null,txtTips = "添加成功";
+            if(infoId!=null){
+                par.id = infoId;
+                savePM = HttpService.putInfo("mng/channel/update",par);
+                txtTips = "修改成功";
+            }else{
+                savePM = HttpService.postInfo("mng/channel/create",par);
+            }
+            ToolService.showLoading();
+            savePM.then(function(data){
+                ToolService.hideLoading();
+                ToolService.showTips(txtTips);
+                $scope.cancel();
+            });
+        }
+
+        $scope.cancel = function(){
+            $state.go("collect.channel",{aid:'custom'});
+        }
+    }
+
+
+    function channelAddCtrl($rootScope,$scope,HttpService,ToolService,UtilService,$q,$state,$stateParams){
+        if($rootScope.isSuper || $rootScope.isManage){
+            $scope.editPower = true;
+        }else{
+            $scope.editPower = false;
+        }
+
+        $rootScope.channeluniqueName = 'gdt';
+        $scope.stepflag = 1;    //1、2、3步
+        $scope.step1 = 'normal';     //第一步   normal   failure  success
+        var editInfo = $stateParams.aid;
+        if(angular.isDefined(editInfo) && editInfo!=null){
+            infoId = $scope.id = editInfo.id;
+            if(editInfo.step == 3){
+                $scope.stepflag = 3;
+            }
+        }
+        var oldname = "";
+        var oldthirdAccountCode = "";
+        var oldalias = "";
+        $scope.pastStatus = false;
+        $scope.init = function(){
+            if(angular.isDefined(editInfo) && editInfo!=null){
+                $scope.state = oldname = editInfo.name;
+                $scope.accountid = oldthirdAccountCode = editInfo.thirdAccountCode;
+                $scope.rebate = parseFloat(editInfo.rebate);
+                $scope.alias = oldalias = editInfo.alias;
+                $scope.pastStatus = editInfo.pastStatus;
+                $scope.step1='success';
+
+            }
+            else{
+                $scope.rebate = 0;
+            }
+        };
+        $scope.init();
+
+        if($scope.id == undefined){
+            $scope.flag = 1;
+        }else{
+            $scope.flag = 0;
+        }
+
+        $scope.cancel = function(){
+            if($scope.empowerType == true){
+                var savePM = null;
+                savePM = HttpService.deleteInfo("mng/channelaccount/delete/authorize/"+$scope.flag+"/"+$scope.state);
+                savePM.then(function(data){
+                    $state.go("collect.channel",{aid:'ry_coop'});
+                });
+            }else{
+                $state.go("collect.channel",{aid:'ry_coop'});
+            }
+
+        }
+
+        $scope.nextStep = function(){
+            $scope.stepflag = $scope.stepflag + 1;
+        }
+        $scope.lastStep = function(){
+            $scope.stepflag = $scope.stepflag - 1;
+        }
+        //弹窗
+        $scope.openDialog = function(){
+            window.open("http://doc.trackingio.com/qu-dao-pei-zhi-shuo-ming/guang-dian-tong.html");
+        }
+
+        $scope.empower = function(){
+            if($scope.checkID != true && $scope.checkQQ != true){
+                var par = {
+                    state: $scope.state,
+                    accountid: $scope.accountid
+                };
+                var verPar = {
+                    state: {
+                        key: 'num',
+                        val: par.state,
+                        txt: '合法性为仅支持输入数字,长度不限'
+                    },
+                    accountid: {
+                        key: 'num',
+                        val: par.accountid,
+                        txt: '合法性为仅支持输入数字,长度不限'
+                    }
+                }
+                $scope.tip = formJudge(verPar);
+                if ($scope.tip.succ != true) {
+                    ToolService.showTips($scope.formTipMsg);
+                    return false;
+                }
+                window.open("https://developers.e.qq.com/oauth/authorize?client_id=1106237187&redirect_uri=http://www.trackingio.com/api/mng/channelaccount/code&state="+$scope.state);
+                $scope.empowerType = true;
+            }
+        }
+
+        $scope.empowerError = function(){
+            $scope.empowerType = false;
+        }
+
+        $scope.empowerOK = function(){
+            var savePM = null;
+            savePM = HttpService.getInfo("mng/channelaccount/valid/qq?qq="+$scope.state);
+            savePM.then(function(data){
+                $scope.empowerType = false;
+                if(data == true){
+                    $scope.step1 = 'success';
+                }else{
+                    $scope.step1 = 'failure';
+                }
+            });
+        }
+
+        $scope.powerAgain = function(){
+            $scope.step1='normal';
+        }
+
+        $scope.exixtQQ = function(){
+            if(oldname == $scope.state){
+                $scope.checkQQ = false;
+            }else{
+                if($scope.state == "" || $scope.state == undefined){
+                    return false;
+                }
+                var packPM = HttpService.getInfo("mng/channelaccount/valid/qq?qq="+$scope.state);
+                packPM.then(function(data){
+                    if(data.content == false){
+                        $scope.checkQQ = false;
+                        $scope.tip = {
+                            state:{
+                                status:false,
+                                txt:''
+                            }
+                        };
+                    }else{
+                        $scope.checkQQ = true;
+                        $scope.tip = {
+                            state:{
+                                status:true,
+                                txt:'该渠道账号已被授权,如果需要对该账号重新授权,请到对应账号进行修改。'
+                            }
+                        };
+                    }
+                });
+            }
+        }
+
+        $scope.exixtID = function(){
+            if(oldthirdAccountCode == $scope.accountid){
+                $scope.checkID = false;
+            }else{
+                if($scope.accountid == "" || $scope.accountid == undefined){
+                    return false;
+                }
+                var packPM = HttpService.getInfo("mng/channelaccount/valid/accountid?accountid="+$scope.accountid);
+                packPM.then(function(data){
+                    if(data.content == false){
+                        $scope.checkID = false;
+                        $scope.tip = {
+                            accountid:{
+                                status:false,
+                                txt:''
+                            }
+                        };
+                    }else{
+                        $scope.checkID = true;
+                        $scope.tip = {
+                            accountid:{
+                                status:true,
+                                txt:'该账号id已被绑定到其他渠道账号,请到对应账号进行修改'
+                            }
+                        };
+                    }
+                });
+            }
+        }
+
+        $scope.saveOne = function(){
+            var par = {
+                name: $scope.state,
+                thirdAccountCode: $scope.accountid
+            };
+            var savePM = null;
+            savePM = HttpService.postInfo("mng/channelaccount/authorize",par);
+            savePM.then(function(data){
+                $scope.aliasID = data.id;
+                $scope.stepflag = $scope.stepflag + 1;
+            });
+        }
+
+
+        //第二步
+        $scope.saveTwo = function(){
+            if($scope.checkAlias == false){
+                return false;
+            }
+            if($scope.aliasID == null || $scope.aliasID == undefined){
+                $scope.aliasID = $scope.id
+            }
+            var parmas = {
+                alias: $scope.alias,
+                rebate: $scope.rebate,
+                id: $scope.aliasID
+            };
+            var verParmas = {
+                alias: {
+                    key: 'isNull',
+                    val: $scope.alias
+                }
+            }
+            $scope.tip = formJudge(verParmas);
+            if ($scope.tip.succ != true) {
+                ToolService.showTips($scope.formTipMsg);
+                return false;
+            }
+            var savePM = null;
+            savePM = HttpService.putInfo("mng/channelaccount/alias",parmas);
+            savePM.then(function(data){
+                if(data.id != null){
+                    $scope.createID = data.id;
+                    $scope.stepflag = 3;
+                    //$scope.tableList();
+                }
+            });
+        }
+        $scope.exixtAlias = function(){
+            if(oldalias == $scope.alias){
+                $scope.checkAlias = true;
+            }else{
+                if($scope.alias == "" || $scope.alias == undefined){
+                    return false;
+                }
+                var packPM = HttpService.getInfo("mng/channelaccount/valid?name="+$scope.alias);
+                packPM.then(function(data){
+                    if(data == true){
+                        $scope.checkAlias = true;
+                        $scope.tip = {
+                            alias:{
+                                status:false,
+                                txt:''
+                            }
+                        };
+                    }else{
+                        $scope.checkAlias = false;
+                        $scope.tip = {
+                            alias:{
+                                status:true,
+                                txt:'该渠道账号别名已经被占用'
+                            }
+                        };
+                    }
+                });
+            }
+        }
+
+        //第三步
+        var rmd = new Date().getTime();
+        $scope.productList = function(){
+            var savePM = null;
+            if($scope.createID== null || $scope.createID == undefined){
+                $scope.createID = $scope.id;
+            }
+            //savePM = HttpService.getInfo("mng/channelaccount/app/list?accountid="+$scope.accountid);
+            savePM = HttpService.getInfo("mng/channelaccount/"+$scope.createID+"/app/list?linkuserid="+$scope.createID+"&unique_name=gdt");
+            savePM.then(function(data){
+                $scope.dayList = data;
+                $scope.appnameInit = data[0].id;
+                $scope.$on("appname",function(e,msg){
+                    $scope.appname = msg.info.id;
+                    $scope.appType = msg.info.platform;
+                    $scope.appkey = msg.info.appkey;
+                });
+            });
+            $scope.datafresh = ++rmd;
+        }
+
+        $scope.tableList = function(){
+            var savePM = null;
+            if($scope.createID == null || $scope.createID == undefined){
+                $scope.createID = $scope.id;
+            }
+            savePM = HttpService.getInfo("mng/channelaccount/app/find/"+$scope.createID);
+            savePM.then(function(data){
+                $scope.tableData = data;
+            });
+        }
+
+        $scope.$watch("stepflag",function(n){
+            if(angular.isDefined(n)){
+                if($scope.stepflag == 3){
+                    $scope.tableList();
+                }
+            }
+        });
+
+        //监测appname
+        $scope.$watch("appname",function(n){
+            $scope.nodata();
+        });
+
+        $scope.nodata = function(){
+            $scope.createType = 'noadd';
+            $scope.thirdAppId = "";
+            $scope.userActionSetId = "";
+            $scope.tip = {
+                thirdAppId:{
+                    status:false
+                }
+            };
+        }
+
+        $scope.addType = false;
+        $scope.addProduct = function(){
+            if($scope.createType == "inadd" || $scope.createType == "erroradd" || $scope.createType == "openadd"){
+                ToolService.showTips("请先完成当前产品测试,再添加下一个产品。");
+            }else{
+                $scope.userActionSetIdTxt = "点击右侧按钮获取行为数据源ID";
+                $scope.createType = "openadd";
+                $scope.addType = true;
+                $scope.productList();
+            }
+        }
+        $scope.closeProduct = function(){
+            $scope.addType = false;
+            $scope.nodata();
+        }
+
+        //获取行为数据源ID
+        $scope.getDmpCode = function(){
+            var par = {
+                thirdAppId: $scope.thirdAppId,
+                linkUserId: $scope.createID,
+                appName: $scope.appname,
+                appType: $scope.appType,
+                accountId: $scope.accountid
+            };
+            var verPar = {
+                thirdAppId: {
+                    key: 'isNull',
+                    val: par.thirdAppId
+                }
+            }
+            $scope.tip = formJudge(verPar);
+            if ($scope.tip.succ != true) {
+                ToolService.showTips($scope.formTipMsg);
+                return false;
+            }
+            var savePM = null;
+            savePM = HttpService.postInfo("mng/channelaccount/userid/create",par);
+            savePM.then(function(data){
+                if(data.data != null || data.data != undefined){
+                    $scope.userActionSetId = data.data;
+                    $scope.userActionSetIdTxt = "";
+                }else{
+                    $scope.tip = {
+                        thirdAppId:{
+                            status:true,
+                            txt:data.msg
+                        }
+                    };
+                }
+            });
+        }
+
+        //noadd未添加  openadd打开弹窗     inadd添加中    okadd添加成功    erroradd添加失败
+        $scope.createType = "noadd";
+
+        //连接测试
+        $scope.testDmp = function(){
+            var par = {
+                thirdAppId: $scope.thirdAppId,
+                appName: $scope.appname,
+                appkey: $scope.appkey,
+                userActionSetId: $scope.userActionSetId,
+                linkUserId: $scope.createID,
+                appType: $scope.appType,
+                accountId: $scope.accountid
+            };
+            var verPar = {
+                thirdAppId: {
+                    key: 'isNull',
+                    val: $scope.thirdAppId
+                },
+                userActionSetId: {
+                    key: 'isNull',
+                    val: $scope.userActionSetId
+                }
+            }
+            $scope.tip = formJudge(verPar);
+            if ($scope.tip.succ != true) {
+                ToolService.showTips($scope.formTipMsg);
+                return false;
+            }
+            var savePM = null;
+            $scope.createType = "inadd";
+            savePM = HttpService.postInfo("mng/channelaccount/app/create",par);
+            savePM.then(function(data){
+                if(data.code == 0){
+                    $scope.createType = "okadd";
+                    $scope.tableList();
+                    $scope.closeProduct();
+                }else{
+                    $scope.createType = "erroradd";
+                    $scope.failureText = data.message;
+                }
+            });
+        }
+
+        //删除
+        $scope.deletePro = function(obj){
+            $scope.delstatus = true;
+            $scope.delId = obj.id;
+        }
+        $scope.removeInfo = function(){
+            var removePM = HttpService.deleteInfo("mng/channelaccount/delete/app/"+$scope.delId);
+            ToolService.showLoading();
+            removePM.then(function(data){
+                ToolService.hideLoading();
+                $scope.delstatus = false;
+                ToolService.showTips("删除成功");
+                $scope.tableList();
+            });
+        }
+
+        //保存
+        $scope.save = function(){
+            $state.go("collect.channel",{aid:'ry_coop'});
+        }
+    }
+
+    function channelSmCtrl($rootScope,$scope,HttpService,ToolService,UtilService,$q,$state,$stateParams,DateService,$timeout){
+        $rootScope.channeluniqueName = 'smsearch';
+        var editInfo = $stateParams.aid;
+        if(angular.isDefined(editInfo) && editInfo!=null){
+            var infoId = $scope.id = editInfo.id;
+        }
+
+        var oldalias = "";
+        $scope.init = function(){
+            if(angular.isDefined(editInfo) && editInfo!=null){
+                $scope.alias = oldalias = editInfo.alias;
+                $scope.name = editInfo.name;
+                $scope.password = editInfo.password;
+                //pastStatus   false为授权成功
+                if(editInfo.pastStatus == false){
+                    $scope.step1 = 'success';
+                }else{
+                    $scope.step1 = 'failure';
+                }
+            }
+        };
+        $scope.init();
+
+        var channelID = "";
+        $scope.$watch("appid",function(n){
+            if(angular.isDefined(n)){
+                var gdtPM = HttpService.getInfo($scope.appid+"/channel/find/smsearch");
+                gdtPM.then(function(data){
+                    ToolService.hideLoading();
+                    channelID = data.id;
+                });
+            }
+        });
+
+        $scope.cancel = function(){
+            $state.go("collect.channel",{aid:'ry_bd'});
+        }
+
+        $scope.exixtName = function(){
+            if(oldalias == $scope.alias){
+                $scope.checkName = true;
+            }else{
+                if($scope.alias == "" || $scope.alias == undefined){
+                    return false;
+                }
+                ToolService.showLoading();
+                var packPM = HttpService.getInfo("mng/channelaccount/valid?name="+$scope.alias);
+                packPM.then(function(data){
+                    ToolService.hideLoading();
+                    if(data == true){
+                        $scope.checkName = true;
+                        $scope.tip = {
+                            alias:{
+                                status:false,
+                                txt:''
+                            }
+                        };
+                    }else{
+                        $scope.checkName = false;
+                        $scope.tip = {
+                            alias:{
+                                status:true,
+                                txt:'该账号别名已存在,请更换。'
+                            }
+                        };
+                    }
+                });
+            }
+        }
+        $scope.empowerType = false;
+        $scope.empower = function(){
+            if($scope.checkName == false){
+                return false;
+            }
+            var par = {
+                channel: channelID,
+                alias: $scope.alias,
+                name: $scope.name,
+                password: $scope.password
+            };
+            var verPar = {
+                alias: {
+                    key: 'isNull',
+                    val: par.alias
+                },
+                name: {
+                    key: 'isNull',
+                    val: par.name
+                },
+                password: {
+                    key: 'isNull',
+                    val: par.password
+                }
+            }
+            $scope.tip = formJudge(verPar);
+            if ($scope.tip.succ != true) {
+                return false;
+            }
+            ToolService.showLoading();
+            var savePM = null;
+            if($scope.id!=null){
+                par.id = $scope.id;
+                savePM = HttpService.putInfo("mng/channel/account/update",par);
+            }else{
+                savePM = HttpService.postInfo("mng/channel/account/create",par);
+            }
+            savePM.then(function(data){
+                ToolService.hideLoading();
+                $scope.empowerType = true;
+                $scope.id = $scope.empowerID = data.id;
+                window.open("https://e.sm.cn/auth/OAuth2/authorizationRequest?response_type=code&state="+$scope.empowerID+"&scope=1,2&redirect_uri=http://www.trackingio.com/api/third/getToken&client_id=434&client_secret=3e1bdcb210290c0668566e414373c8c3");
+            });
+        }
+        $scope.failureAlert = false;
+        $scope.empowerOK = function(){
+            var savePM = null;
+            savePM = HttpService.getInfo("mng/channel/account/checkstatus?id="+$scope.empowerID);
+            savePM.then(function(data){
+                $scope.empowerType = false;
+                if(data == true){
+                    $scope.step1 = 'success';
+                    ToolService.showTips("授权成功");
+                    $scope.cancel();
+                }else{
+                    $scope.step1 = 'failure';
+                    $scope.failureAlert = true;
+                }
+            });
+        }
+
+        $scope.empowerError = function(){
+            $scope.empowerType = false;
+            $scope.pastStatus = true;
+        }
+    }
+
+    function channelAdwordsCtrl($rootScope,$scope,HttpService,ToolService,UtilService,$q,$state,$stateParams,DateService,$timeout){
+        if($rootScope.isSuper || $rootScope.isManage){
+            $rootScope.editPower = true;
+        }else{
+            $rootScope.editPower = false;
+        }
+        $scope.stepflag = 1;
+
+        $rootScope.channeluniqueName = 'adwords';
+        var editInfo = $stateParams.aid;
+        if(angular.isDefined(editInfo) && editInfo!=null){
+            var infoId = $scope.id = editInfo.id;
+            if(editInfo.step == 2){
+                $scope.stepflag = 2;
+            }
+        }
+        var oldname = "";
+        var oldthirdAccountCode = "";
+        var oldalias = "";
+        $scope.pastStatus = false;
+        $scope.init = function(){
+            if(angular.isDefined(editInfo) && editInfo!=null){
+                $scope.name = oldname = editInfo.name;
+                $scope.thirdAccountCode = oldthirdAccountCode = editInfo.thirdAccountCode;
+                $scope.alias = oldalias = editInfo.alias;
+            }
+        };
+        $scope.init();
+
+        $scope.cancel = function(){
+            $state.go("collect.channel",{aid:'ry_coop'});
+        }
+
+        var channelID = "";
+        $scope.$watch("appid",function(n){
+            if(angular.isDefined(n)){
+                var gdtPM = HttpService.getInfo($scope.appid+"/channel/find/adwords");
+                gdtPM.then(function(data){
+                    ToolService.hideLoading();
+                    channelID = data.id;
+                });
+            }
+        });
+
+        //弹窗
+        $scope.openDialog = function(){
+            window.open("http://doc.trackingio.com/qu-dao-pei-zhi-shuo-ming/adwords.html");
+        }
+
+        $scope.saveOne = function(){
+            //$scope.stepflag = 2;
+            var par = {
+                channel: channelID,
+                alias: $scope.alias,
+                name: $scope.name,
+                thirdAccountCode: $scope.thirdAccountCode
+            };
+            var verPar = {
+                alias: {
+                    key: 'spcname',
+                    max:40,
+                    val: $scope.alias,
+                    txt: "含非法字符或过长(支持输入汉字、大小写字母、数字、下划线、中划线,长度限制40字符以内)"
+                },
+                name: {
+                    key: 'isNull',
+                    val: $scope.name
+                },
+                thirdAccountCode: {
+                    key: 'isNull',
+                    val: $scope.thirdAccountCode
+                }
+            }
+            $scope.tip = formJudge(verPar);
+            if ($scope.tip.succ != true) {
+                return false;
+            }
+            var savePM = null;
+            if($scope.id!=null){
+                par.id = $scope.id;
+                savePM = HttpService.putInfo("mng/channel/account/update",par);
+            }else{
+                savePM = HttpService.postInfo("mng/channel/account/create",par);
+            }
+            savePM.then(function(data){
+                ToolService.hideLoading();
+                if(data.code == -5002){
+                    $scope.tip = {
+                        alias:{
+                            status:true,
+                            txt:data.message
+                        }
+                    };
+                }else if(data.code == -5003){
+                    $scope.tip = {
+                        thirdAccountCode:{
+                            status:true,
+                            txt:data.message
+                        }
+                    };
+                }else{
+                    $scope.createID = $scope.aliasID = data.id;
+                    $scope.stepflag = $scope.stepflag + 1;
+                }
+            });
+        }
+
+        $scope.lastStep = function(){
+            $scope.stepflag = $scope.stepflag - 1;
+        }
+
+
+        var rmd = new Date().getTime();
+        $scope.productList = function(){
+            var savePM = null;
+            if($scope.createID== null || $scope.createID == undefined){
+                $scope.createID = $scope.id;
+            }
+            //应用列表
+            savePM = HttpService.getInfo("mng/channelaccount/"+$scope.createID+"/app/list?linkuserid="+$scope.createID+"&unique_name=adwords");
+            savePM.then(function(data){
+                $scope.dayListALL = data;
+                $scope.dayList = $scope.dayListALL.filter(function(item){
+                    return item.platform == 'iOS';
+                })
+                $scope.appnameInit = $scope.dayList[0].id;
+                $scope.$on("appname",function(e,msg){
+                    $scope.appname = msg.info.id;
+                    $scope.appType = msg.info.platform;
+                    $scope.appkey = msg.info.appkey;
+                });
+            });
+            $scope.datafresh = ++rmd;
+        }
+
+        //已保存产品列表
+        $scope.tableList = function(){
+            var savePM = null;
+            if($scope.createID == null || $scope.createID == undefined){
+                $scope.createID = $scope.id;
+            }
+            savePM = HttpService.getInfo("mng/channelaccount/app/find/"+$scope.createID);
+            savePM.then(function(data){
+                $scope.tableData = data;
+            });
+        }
+
+        $scope.$watch("stepflag",function(n){
+            if(angular.isDefined(n)){
+                if($scope.stepflag == 2){
+                    $scope.tableList();
+                }
+            }
+        });
+
+        //监测appname
+        $scope.$watch("appname",function(n){
+            $scope.nodata();
+        });
+        $scope.nodata = function(){
+            $scope.createType = 'noadd';
+            $scope.userActionSetId = "";
+            $scope.tip = {
+                userActionSetId:{
+                    status:false,
+                    txt:''
+                }
+            };
+        }
+
+        //添加和关闭
+        $scope.addType = false;
+        $scope.addProduct = function(){
+            if($scope.createType == "inadd" || $scope.createType == "erroradd" || $scope.createType == "openadd"){
+                ToolService.showTips("请先完成当前产品测试,再添加下一个产品。");
+            }else{
+                $scope.createType = "openadd";
+                $scope.addType = true;
+                $scope.productList();
+            }
+        }
+        $scope.closeProduct = function(){
+            $scope.addType = false;
+            $scope.nodata();
+        }
+
+        //检测linkid
+        $scope.checkLinkID = false;
+        $scope.exixtLinkId = function(){
+            var par = {
+                linkUserId: $scope.createID,
+                channel: channelID,
+                fieldkey: 'linkid',
+                fieldvalue: $scope.userActionSetId
+            };
+            var verPar = {
+                fieldvalue: {
+                    key: 'isNull',
+                    val: par.fieldvalue
+                }
+            }
+            $scope.tip = formJudge(verPar);
+            if ($scope.tip.succ != true) {
+                return false;
+            }
+            var packPM = HttpService.getInfo("mng/channelaccount/109/app/checkname",par);
+            packPM.then(function(data){
+                ToolService.hideLoading();
+                if(data == true){
+                    $scope.checkLinkID = true;
+                    $scope.tip = {
+                        userActionSetId:{
+                            status:false,
+                            txt:''
+                        }
+                    };
+                }else{
+                    $scope.checkLinkID = false;
+                    $scope.tip = {
+                        userActionSetId:{
+                            status:true,
+                            txt:'该LinkID已存在,请更换。'
+                        }
+                    };
+                }
+            });
+        }
+
+        //noadd未添加  openadd打开弹窗     inadd添加中    okadd添加成功    erroradd添加失败
+        $scope.createType = "noadd";
+        //连接测试
+        $scope.testDmp = function(){
+            if($scope.checkLinkID == false){
+                return false;
+            }
+            var par = {
+                appName: $scope.appname,
+                appkey: $scope.appkey,
+                userActionSetId: $scope.userActionSetId,
+                linkUserId: $scope.createID,
+                appType: $scope.appType
+            };
+            var verPar = {
+                userActionSetId: {
+                    key: 'isNull',
+                    val: par.userActionSetId
+                }
+            }
+            $scope.tip = formJudge(verPar);
+            if ($scope.tip.succ != true) {
+                ToolService.showTips($scope.formTipMsg);
+                return false;
+            }
+            var savePM = null;
+            $scope.createType = "inadd";
+            savePM = HttpService.postInfo("mng/channelaccount/"+$scope.createID+"/app/create",par);
+            savePM.then(function(data){
+                if(data.id != undefined){
+                    $scope.createType = "okadd";
+                    $scope.checkLinkID = false;
+                    $scope.tableList();
+                    $scope.closeProduct();
+                }else{
+                    $scope.createType = "erroradd";
+                    $scope.failureText = data.message;
+                }
+            });
+        }
+
+        //删除
+        $scope.deletePro = function(obj){
+            $scope.delstatus = true;
+            $scope.delId = obj.id;
+        }
+        $scope.removeInfo = function(){
+            var removePM = HttpService.deleteInfo("mng/channelaccount/delete/app/"+$scope.delId);
+            ToolService.showLoading();
+            removePM.then(function(data){
+                ToolService.hideLoading();
+                $scope.delstatus = false;
+                ToolService.showTips("删除成功");
+                $scope.tableList();
+            });
+        }
+
+        //保存
+        $scope.save = function(){
+            $state.go("collect.channel",{aid:'ry_coop'});
+        }
+
+    }
+})();
diff --git a/src/main/websrc/js/manage/event.js b/src/main/websrc/js/manage/event.js
new file mode 100644
index 0000000..ae97b05
--- /dev/null
+++ b/src/main/websrc/js/manage/event.js
@@ -0,0 +1,213 @@
+(function(){
+    angular.module("app.manage")
+        .controller("eventCtrl",["$scope","HttpService","ToolService",eventCtrl]);
+
+    function eventCtrl($scope,HttpService,ToolService){
+        $scope.isevent = true;
+    	$scope.query = function(){
+            $scope.isevent = true;
+    		var eventPM = HttpService.getInfo("mng/event/find/"+$scope.appid);
+            ToolService.showLoading();
+            eventPM.then(function(data){
+                ToolService.hideLoading();
+                $scope.eventList = data;
+
+                var seldatas = data.slice(0);
+                seldatas.unshift({eventName:"-all",eventNameAlias:"全部属性"});
+                $scope.eventSelList = seldatas;
+                $scope.eventEditId = -1;
+            });
+    	}
+    	$scope.$watch("appid",function(n){
+    		if(angular.isDefined(n)){
+    			$scope.query();
+    		}
+    	});
+
+        $scope.$on('flipinfo',function(e,msg){
+            if(msg.listkey == 'paramTab'){
+                $scope.pflipPage = msg;
+            }else{
+                $scope.flipPage = msg;
+            }
+            
+        });
+
+        var curEvent = null,rmd = 1;
+        $scope.clickEvent = function(event){
+            if($scope.eventpidInit == event.eventName){
+                $scope.isevent = false;
+                $scope.eventpidF5 = ++rmd;
+            }else{
+                $scope.eventpidInit = event.eventName;
+            }
+        }
+
+        $scope.$on("eventpid",function(e,msg){
+            curEvent = msg.info;
+            $scope.getParamsList();
+        });
+        $scope.getParamsList = function(){
+            var pams = {};
+            if(curEvent!=null && curEvent.eventName && curEvent.eventName!='-all'){
+                pams = {name:curEvent.eventName};
+            }
+            var paramsPM = HttpService.getInfo("mng/event/find/one/"+$scope.appid,pams);
+            ToolService.showLoading();
+            paramsPM.then(function(data){
+                $scope.isevent = false;
+                ToolService.hideLoading();
+                $scope.paramsList = data;
+                $scope.eventParamsId = -1;
+            });
+        }
+
+        $scope.doEdit = function(obj,flag){
+            if(flag==1){
+                $scope.eventEditId=obj.eventName;
+                obj.editname=obj.eventNameAlias;
+            }
+            if(flag==2){
+                $scope.eventParamsId=obj.attr;
+                obj.editname=obj.attrAlias;
+            }
+        }
+        //启用停用
+        $scope.onOff = function(name,flag){
+        	var url = "mng/event/enable/"+$scope.appid,tipmsg = "启用成功";
+        	if(flag && flag==1){
+        		url = "mng/event/forbidden/"+$scope.appid;
+                tipmsg = "停用成功";
+        	}
+        	var userPM = HttpService.putInfo(url,{eventId:name});
+            ToolService.showLoading();
+	    	userPM.then(function(data){
+                ToolService.hideLoading();
+	    		ToolService.showTips(tipmsg)
+                $scope.query();
+	    	});
+        }
+        //事件更新
+        $scope.updateEvent = function(info){
+            var params = {
+                eventId:info.eventName,
+                alias:info.editname
+            }
+            if(info.editname==''){
+                ToolService.showTips("事件名称不能为空")
+                return false;
+            }
+            var has = $scope.eventList.filter(function(item){
+                return item.eventNameAlias == info.editname && item.eventName!=info.eventName;
+            });
+            if(has.length>0){
+                ToolService.showTips("事件名称不能重复")
+                return false;
+            }
+
+            var tips = formJudge({
+                name:{
+                    key:'spcname2',
+                    val:params.alias
+                }
+            });
+            if(tips.succ != true){
+                ToolService.showTips("仅支持包含下划线的40位以内字符");
+                return false;
+            }
+            var updatePM = HttpService.putInfo("mng/event/update/"+$scope.appid,params);
+            ToolService.showLoading();
+            updatePM.then(function(data){
+                ToolService.hideLoading();
+                ToolService.showTips("修改成功")
+                $scope.query();
+            });
+        }
+        
+        //属性启用停用
+        $scope.pramesOnOff = function(info,flag){
+            var url = "mng/event/enable/attr/"+$scope.appid,tipmsg = "启用成功";
+            if(flag && flag==1){
+                url = "mng/event/forbidden/attr/"+$scope.appid;
+                tipmsg = "停用成功"
+            }
+            var userPM = HttpService.putInfo(url,{attribute:info});
+            ToolService.showLoading();
+            userPM.then(function(data){
+                ToolService.hideLoading();
+                ToolService.showTips(tipmsg)
+                $scope.getParamsList();
+            });
+        }
+        //属性更新
+        $scope.updateParams = function(info){
+            var params = {
+                attribute:info.attr,
+                alias:info.editname
+            }
+            if(info.editname==''){
+                ToolService.showTips("属性名称不能为空")
+                return false;
+            }
+            var has = $scope.paramsList.filter(function(item){
+                return item.attrAlias == info.editname && item.attr!=info.attr;
+            });
+            if(has.length>0){
+                ToolService.showTips("事件属性名称不能重复")
+                return false;
+            }
+
+            var tips = formJudge({
+                name:{
+                    key:'spcname2',
+                    val:params.alias
+                }
+            });
+            if(tips.succ != true){
+                ToolService.showTips("仅支持包含下划线的40位以内字符");
+                return false;
+            }
+            
+            var updatePM = HttpService.putInfo("mng/event/update/"+$scope.appid+"/one",params);
+            ToolService.showLoading();
+            updatePM.then(function(data){
+                ToolService.hideLoading();
+                ToolService.showTips("修改成功")
+                $scope.getParamsList();
+            });
+        }
+
+        $scope.changeStatus = function(flag,attr){
+            var method = "";
+            switch (flag) {
+                case 1:
+                    method = "addStats";
+                    break;
+                case 2:
+                    method = "delStats";
+                    break;
+                case 3:
+                    method = "addCondition";
+                    break;
+                case 4:
+                    method = "delCondition";
+                    break;
+                default:
+                    break;
+            }
+            if(method!=''){
+                var putPM = HttpService.putInfo("mng/event/"+method+"/"+$scope.appid,{attribute:attr})
+                putPM.then(function(data){
+                    if(!localStorage.getItem("joinFiltrate") && flag==3){
+                        ToolService.showTips("操作成功,可以按属性名称在事件、漏斗或留存功能中查看或筛选",4000);
+                        localStorage.setItem("joinFiltrate","joinFiltrate");
+                    }else{
+                        ToolService.showTips("操作成功");
+                    }   
+                    $scope.getParamsList();
+                });
+            }
+        }
+    }
+ 
+})();
\ No newline at end of file
diff --git a/src/main/websrc/styles/animate.scss b/src/main/websrc/styles/animate.scss
new file mode 100644
index 0000000..93ebe54
--- /dev/null
+++ b/src/main/websrc/styles/animate.scss
@@ -0,0 +1,1068 @@
+.toggle {
+  -webkit-transition: all 0 cubic-bezier(0.25, 0.46, 0.45, 0.94);
+  -moz-transition: all 0 cubic-bezier(0.25, 0.46, 0.45, 0.94);
+  -ms-transition: all 0 cubic-bezier(0.25, 0.46, 0.45, 0.94);
+  -o-transition: all 0 cubic-bezier(0.25, 0.46, 0.45, 0.94);
+  transition: all 0 cubic-bezier(0.25, 0.46, 0.45, 0.94);
+  /* easeOutQuad */
+  -webkit-transition-timing-function: cubic-bezier(0.25, 0.46, 0.45, 0.94);
+  -moz-transition-timing-function: cubic-bezier(0.25, 0.46, 0.45, 0.94);
+  -ms-transition-timing-function: cubic-bezier(0.25, 0.46, 0.45, 0.94);
+  -o-transition-timing-function: cubic-bezier(0.25, 0.46, 0.45, 0.94);
+  transition-timing-function: cubic-bezier(0.25, 0.46, 0.45, 0.94);
+  /* easeOutQuad */
+}
+.toggle.ng-enter {
+  opacity: 0;
+  transition-duration: 250ms;
+  -webkit-transition-duration: 250ms;
+}
+.toggle.ng-enter-active {
+  opacity: 1;
+}
+.toggle.ng-leave {
+  opacity: 1;
+  transition-duration: 250ms;
+  -webkit-transition-duration: 250ms;
+}
+.toggle.ng-leave-active {
+  opacity: 0;
+}
+.toggle.ng-hide-add {
+  transition-duration: 250ms;
+  -webkit-transition-duration: 250ms;
+  opacity: 1;
+}
+.toggle.ng-hide-add.ng-hide-add-active {
+  opacity: 0;
+}
+.toggle.ng-hide-remove {
+  transition-duration: 250ms;
+  -webkit-transition-duration: 250ms;
+  display: block !important;
+  opacity: 0;
+}
+.toggle.ng-hide-remove.ng-hide-remove-active {
+  opacity: 1;
+}
+
+.slide-top {
+  -webkit-transition: all 0 cubic-bezier(0.25, 0.46, 0.45, 0.94);
+  -moz-transition: all 0 cubic-bezier(0.25, 0.46, 0.45, 0.94);
+  -ms-transition: all 0 cubic-bezier(0.25, 0.46, 0.45, 0.94);
+  -o-transition: all 0 cubic-bezier(0.25, 0.46, 0.45, 0.94);
+  transition: all 0 cubic-bezier(0.25, 0.46, 0.45, 0.94);
+
+  -webkit-transition-timing-function: cubic-bezier(0.25, 0.46, 0.45, 0.94);
+  -moz-transition-timing-function: cubic-bezier(0.25, 0.46, 0.45, 0.94);
+  -ms-transition-timing-function: cubic-bezier(0.25, 0.46, 0.45, 0.94);
+  -o-transition-timing-function: cubic-bezier(0.25, 0.46, 0.45, 0.94);
+  transition-timing-function: cubic-bezier(0.25, 0.46, 0.45, 0.94);
+}
+.slide-top.ng-enter {
+  transform: translateY(60px);
+  -ms-transform: translateY(60px);
+  -webkit-transform: translateY(60px);
+  transition-duration: 250ms;
+  -webkit-transition-duration: 250ms;
+  opacity: 0;
+}
+.slide-top.ng-enter-active {
+  transform: translateY(0);
+  -ms-transform: translateY(0);
+  -webkit-transform: translateY(0);
+  opacity: 1;
+}
+.slide-top.ng-leave {
+  transform: translateY(0);
+  -ms-transform: translateY(0);
+  -webkit-transform: translateY(0);
+  transition-duration: 250ms;
+  -webkit-transition-duration: 250ms;
+  opacity: 1;
+}
+.slide-top.ng-leave-active {
+  transform: translateY(60px);
+  -ms-transform: translateY(60px);
+  -webkit-transform: translateY(60px);
+  opacity: 0;
+}
+.slide-top.ng-hide-add {
+  transform: translateY(0);
+  -ms-transform: translateY(0);
+  -webkit-transform: translateY(0);
+  transition-duration: 250ms;
+  -webkit-transition-duration: 250ms;
+  opacity: 1;
+}
+.slide-top.ng-hide-add.ng-hide-add-active {
+  transform: translateY(60px);
+  -ms-transform: translateY(60px);
+  -webkit-transform: translateY(60px);
+  opacity: 0;
+}
+.slide-top.ng-hide-remove {
+  transform: translateY(60px);
+  -ms-transform: translateY(60px);
+  -webkit-transform: translateY(60px);
+  transition-duration: 250ms;
+  -webkit-transition-duration: 250ms;
+  display: block !important;
+  opacity: 0;
+}
+.slide-top.ng-hide-remove.ng-hide-remove-active {
+  transform: translateY(0);
+  -ms-transform: translateY(0);
+  -webkit-transform: translateY(0);
+  opacity: 1;
+}
+
+.slide-right {
+  -webkit-transition: all 0 cubic-bezier(0.25, 0.46, 0.45, 0.94);
+  -moz-transition: all 0 cubic-bezier(0.25, 0.46, 0.45, 0.94);
+  -ms-transition: all 0 cubic-bezier(0.25, 0.46, 0.45, 0.94);
+  -o-transition: all 0 cubic-bezier(0.25, 0.46, 0.45, 0.94);
+  transition: all 0 cubic-bezier(0.25, 0.46, 0.45, 0.94);
+ 
+  -webkit-transition-timing-function: cubic-bezier(0.25, 0.46, 0.45, 0.94);
+  -moz-transition-timing-function: cubic-bezier(0.25, 0.46, 0.45, 0.94);
+  -ms-transition-timing-function: cubic-bezier(0.25, 0.46, 0.45, 0.94);
+  -o-transition-timing-function: cubic-bezier(0.25, 0.46, 0.45, 0.94);
+  transition-timing-function: cubic-bezier(0.25, 0.46, 0.45, 0.94);
+}
+.slide-right.ng-enter {
+  transform: translateX(60px);
+  -ms-transform: translateX(60px);
+  -webkit-transform: translateX(60px);
+  transition-duration: 250ms;
+  -webkit-transition-duration: 250ms;
+  opacity: 0;
+}
+.slide-right.ng-enter-active {
+  transform: translateX(0);
+  -ms-transform: translateX(0);
+  -webkit-transform: translateX(0);
+  opacity: 1;
+}
+.slide-right.ng-leave {
+  transform: translateX(0);
+  -ms-transform: translateX(0);
+  -webkit-transform: translateX(0);
+  transition-duration: 250ms;
+  -webkit-transition-duration: 250ms;
+  opacity: 1;
+}
+.slide-right.ng-leave-active {
+  transform: translateX(60px);
+  -ms-transform: translateX(60px);
+  -webkit-transform: translateX(60px);
+  opacity: 0;
+}
+.slide-right.ng-hide-add {
+  transform: translateX(0);
+  -ms-transform: translateX(0);
+  -webkit-transform: translateX(0);
+  transition-duration: 250ms;
+  -webkit-transition-duration: 250ms;
+  opacity: 1;
+}
+.slide-right.ng-hide-add.ng-hide-add-active {
+  transform: translateX(60px);
+  -ms-transform: translateX(60px);
+  -webkit-transform: translateX(60px);
+  opacity: 0;
+}
+.slide-right.ng-hide-remove {
+  transform: translateX(60px);
+  -ms-transform: translateX(60px);
+  -webkit-transform: translateX(60px);
+  transition-duration: 250ms;
+  -webkit-transition-duration: 250ms;
+  display: block !important;
+  opacity: 0;
+}
+.slide-right.ng-hide-remove.ng-hide-remove-active {
+  transform: translateX(0);
+  -ms-transform: translateX(0);
+  -webkit-transform: translateX(0);
+  opacity: 1;
+}
+
+.slide-left {
+  -webkit-transition: all 0 cubic-bezier(0.25, 0.46, 0.45, 0.94);
+  -moz-transition: all 0 cubic-bezier(0.25, 0.46, 0.45, 0.94);
+  -ms-transition: all 0 cubic-bezier(0.25, 0.46, 0.45, 0.94);
+  -o-transition: all 0 cubic-bezier(0.25, 0.46, 0.45, 0.94);
+  transition: all 0 cubic-bezier(0.25, 0.46, 0.45, 0.94);
+ 
+  -webkit-transition-timing-function: cubic-bezier(0.25, 0.46, 0.45, 0.94);
+  -moz-transition-timing-function: cubic-bezier(0.25, 0.46, 0.45, 0.94);
+  -ms-transition-timing-function: cubic-bezier(0.25, 0.46, 0.45, 0.94);
+  -o-transition-timing-function: cubic-bezier(0.25, 0.46, 0.45, 0.94);
+  transition-timing-function: cubic-bezier(0.25, 0.46, 0.45, 0.94);
+}
+.slide-left.ng-enter {
+  transform: translateX(-60px);
+  -ms-transform: translateX(-60px);
+  -webkit-transform: translateX(-60px);
+  transition-duration: 250ms;
+  -webkit-transition-duration: 250ms;
+  opacity: 0;
+}
+.slide-left.ng-enter-active {
+  transform: translateX(0);
+  -ms-transform: translateX(0);
+  -webkit-transform: translateX(0);
+  opacity: 1;
+}
+.slide-left.ng-leave {
+  transform: translateX(0);
+  -ms-transform: translateX(0);
+  -webkit-transform: translateX(0);
+  transition-duration: 250ms;
+  -webkit-transition-duration: 250ms;
+  opacity: 1;
+}
+.slide-left.ng-leave-active {
+  transform: translateX(-60px);
+  -ms-transform: translateX(-60px);
+  -webkit-transform: translateX(-60px);
+  opacity: 0;
+}
+.slide-left.ng-hide-add {
+  transform: translateX(0);
+  -ms-transform: translateX(0);
+  -webkit-transform: translateX(0);
+  transition-duration: 250ms;
+  -webkit-transition-duration: 250ms;
+  opacity: 1;
+}
+.slide-left.ng-hide-add.ng-hide-add-active {
+  transform: translateX(-60px);
+  -ms-transform: translateX(-60px);
+  -webkit-transform: translateX(-60px);
+  opacity: 0;
+}
+.slide-left.ng-hide-remove {
+  transform: translateX(-60px);
+  -ms-transform: translateX(-60px);
+  -webkit-transform: translateX(-60px);
+  transition-duration: 250ms;
+  -webkit-transition-duration: 250ms;
+  display: block !important;
+  opacity: 0;
+}
+.slide-left.ng-hide-remove.ng-hide-remove-active {
+  transform: translateX(0);
+  -ms-transform: translateX(0);
+  -webkit-transform: translateX(0);
+  opacity: 1;
+}
+
+.slide-down {
+  -webkit-transition: all 0 cubic-bezier(0.25, 0.46, 0.45, 0.94);
+  -moz-transition: all 0 cubic-bezier(0.25, 0.46, 0.45, 0.94);
+  -ms-transition: all 0 cubic-bezier(0.25, 0.46, 0.45, 0.94);
+  -o-transition: all 0 cubic-bezier(0.25, 0.46, 0.45, 0.94);
+  transition: all 0 cubic-bezier(0.25, 0.46, 0.45, 0.94);
+ 
+  -webkit-transition-timing-function: cubic-bezier(0.25, 0.46, 0.45, 0.94);
+  -moz-transition-timing-function: cubic-bezier(0.25, 0.46, 0.45, 0.94);
+  -ms-transition-timing-function: cubic-bezier(0.25, 0.46, 0.45, 0.94);
+  -o-transition-timing-function: cubic-bezier(0.25, 0.46, 0.45, 0.94);
+  transition-timing-function: cubic-bezier(0.25, 0.46, 0.45, 0.94);
+}
+.slide-down.ng-enter {
+  transform: translateY(-60px);
+  -ms-transform: translateY(-60px);
+  -webkit-transform: translateY(-60px);
+  transition-duration: 250ms;
+  -webkit-transition-duration: 250ms;
+  opacity: 0;
+}
+.slide-down.ng-enter-active {
+  transform: translateY(0);
+  -ms-transform: translateY(0);
+  -webkit-transform: translateY(0);
+  opacity: 1;
+}
+.slide-down.ng-leave {
+  transform: translateY(0);
+  -ms-transform: translateY(0);
+  -webkit-transform: translateY(0);
+  transition-duration: 250ms;
+  -webkit-transition-duration: 250ms;
+  opacity: 1;
+}
+.slide-down.ng-leave-active {
+  transform: translateY(-60px);
+  -ms-transform: translateY(-60px);
+  -webkit-transform: translateY(-60px);
+  opacity: 0;
+}
+.slide-down.ng-hide-add {
+  transform: translateY(0);
+  -ms-transform: translateY(0);
+  -webkit-transform: translateY(0);
+  transition-duration: 250ms;
+  -webkit-transition-duration: 250ms;
+  opacity: 1;
+}
+.slide-down.ng-hide-add.ng-hide-add-active {
+  transform: translateY(-60px);
+  -ms-transform: translateY(-60px);
+  -webkit-transform: translateY(-60px);
+  opacity: 0;
+}
+.slide-down.ng-hide-remove {
+  transform: translateY(-60px);
+  -ms-transform: translateY(-60px);
+  -webkit-transform: translateY(-60px);
+  transition-duration: 250ms;
+  -webkit-transition-duration: 250ms;
+  display: block !important;
+  opacity: 0;
+}
+.slide-down.ng-hide-remove.ng-hide-remove-active {
+  transform: translateY(0);
+  -ms-transform: translateY(0);
+  -webkit-transform: translateY(0);
+  opacity: 1;
+}
+
+.bouncy-slide-top {
+  -webkit-transition: all 0 cubic-bezier(0.175, 0.885, 0.32, 1);
+  -webkit-transition: all 0 cubic-bezier(0.175, 0.885, 0.32, 1.275);
+  -moz-transition: all 0 cubic-bezier(0.175, 0.885, 0.32, 1.275);
+  -ms-transition: all 0 cubic-bezier(0.175, 0.885, 0.32, 1.275);
+  -o-transition: all 0 cubic-bezier(0.175, 0.885, 0.32, 1.275);
+  transition: all 0 cubic-bezier(0.175, 0.885, 0.32, 1.275);
+ 
+  -webkit-transition-timing-function: cubic-bezier(0.175, 0.885, 0.45, 1);
+  -webkit-transition-timing-function: cubic-bezier(0.175, 0.885, 0.45, 1.595);
+  -moz-transition-timing-function: cubic-bezier(0.175, 0.885, 0.45, 1.595);
+  -ms-transition-timing-function: cubic-bezier(0.175, 0.885, 0.45, 1.595);
+  -o-transition-timing-function: cubic-bezier(0.175, 0.885, 0.45, 1.595);
+  transition-timing-function: cubic-bezier(0.175, 0.885, 0.45, 1.595);
+}
+.bouncy-slide-top.ng-enter {
+  transform: translateY(240px);
+  -ms-transform: translateY(240px);
+  -webkit-transform: translateY(240px);
+  transition-duration: 250ms;
+  -webkit-transition-duration: 250ms;
+  opacity: 0;
+}
+.bouncy-slide-top.ng-enter-active {
+  transform: translateY(0);
+  -ms-transform: translateY(0);
+  -webkit-transform: translateY(0);
+  opacity: 1;
+}
+.bouncy-slide-top.ng-leave {
+  transform: translateY(0);
+  -ms-transform: translateY(0);
+  -webkit-transform: translateY(0);
+  transition-duration: 250ms;
+  -webkit-transition-duration: 250ms;
+  opacity: 1;
+}
+.bouncy-slide-top.ng-leave-active {
+  transform: translateY(240px);
+  -ms-transform: translateY(240px);
+  -webkit-transform: translateY(240px);
+  opacity: 0;
+}
+.bouncy-slide-top.ng-hide-add {
+  transform: translateY(0);
+  -ms-transform: translateY(0);
+  -webkit-transform: translateY(0);
+  transition-duration: 250ms;
+  -webkit-transition-duration: 250ms;
+  opacity: 1;
+}
+.bouncy-slide-top.ng-hide-add.ng-hide-add-active {
+  transform: translateY(240px);
+  -ms-transform: translateY(240px);
+  -webkit-transform: translateY(240px);
+  opacity: 0;
+}
+.bouncy-slide-top.ng-hide-remove {
+  transform: translateY(240px);
+  -ms-transform: translateY(240px);
+  -webkit-transform: translateY(240px);
+  transition-duration: 250ms;
+  -webkit-transition-duration: 250ms;
+  display: block !important;
+  opacity: 0;
+}
+.bouncy-slide-top.ng-hide-remove.ng-hide-remove-active {
+  transform: translateY(0);
+  -ms-transform: translateY(0);
+  -webkit-transform: translateY(0);
+  opacity: 1;
+}
+
+.bouncy-slide-right {
+  -webkit-transition: all 0 cubic-bezier(0.175, 0.885, 0.32, 1);
+ 
+  -webkit-transition: all 0 cubic-bezier(0.175, 0.885, 0.32, 1.275);
+  -moz-transition: all 0 cubic-bezier(0.175, 0.885, 0.32, 1.275);
+  -ms-transition: all 0 cubic-bezier(0.175, 0.885, 0.32, 1.275);
+  -o-transition: all 0 cubic-bezier(0.175, 0.885, 0.32, 1.275);
+  transition: all 0 cubic-bezier(0.175, 0.885, 0.32, 1.275);
+ 
+  -webkit-transition-timing-function: cubic-bezier(0.175, 0.885, 0.45, 1);
+ 
+  -webkit-transition-timing-function: cubic-bezier(0.175, 0.885, 0.45, 1.595);
+  -moz-transition-timing-function: cubic-bezier(0.175, 0.885, 0.45, 1.595);
+  -ms-transition-timing-function: cubic-bezier(0.175, 0.885, 0.45, 1.595);
+  -o-transition-timing-function: cubic-bezier(0.175, 0.885, 0.45, 1.595);
+  transition-timing-function: cubic-bezier(0.175, 0.885, 0.45, 1.595);
+}
+.bouncy-slide-right.ng-enter {
+  transform: translateX(240px);
+  -ms-transform: translateX(240px);
+  -webkit-transform: translateX(240px);
+  transition-duration: 250ms;
+  -webkit-transition-duration: 250ms;
+  opacity: 0;
+}
+.bouncy-slide-right.ng-enter-active {
+  transform: translateX(0);
+  -ms-transform: translateX(0);
+  -webkit-transform: translateX(0);
+  opacity: 1;
+}
+.bouncy-slide-right.ng-leave {
+  transform: translateX(0);
+  -ms-transform: translateX(0);
+  -webkit-transform: translateX(0);
+  transition-duration: 250ms;
+  -webkit-transition-duration: 250ms;
+  opacity: 1;
+}
+.bouncy-slide-right.ng-leave-active {
+  transform: translateX(240px);
+  -ms-transform: translateX(240px);
+  -webkit-transform: translateX(240px);
+  opacity: 0;
+}
+.bouncy-slide-right.ng-hide-add {
+  transform: translateX(0);
+  -ms-transform: translateX(0);
+  -webkit-transform: translateX(0);
+  transition-duration: 250ms;
+  -webkit-transition-duration: 250ms;
+  opacity: 1;
+}
+.bouncy-slide-right.ng-hide-add.ng-hide-add-active {
+  transform: translateX(240px);
+  -ms-transform: translateX(240px);
+  -webkit-transform: translateX(240px);
+  opacity: 0;
+}
+.bouncy-slide-right.ng-hide-remove {
+  transform: translateX(240px);
+  -ms-transform: translateX(240px);
+  -webkit-transform: translateX(240px);
+  transition-duration: 250ms;
+  -webkit-transition-duration: 250ms;
+  display: block !important;
+  opacity: 0;
+}
+.bouncy-slide-right.ng-hide-remove.ng-hide-remove-active {
+  transform: translateX(0);
+  -ms-transform: translateX(0);
+  -webkit-transform: translateX(0);
+  opacity: 1;
+}
+
+.bouncy-slide-left {
+  -webkit-transition: all 0 cubic-bezier(0.175, 0.885, 0.32, 1);
+ 
+  -webkit-transition: all 0 cubic-bezier(0.175, 0.885, 0.32, 1.275);
+  -moz-transition: all 0 cubic-bezier(0.175, 0.885, 0.32, 1.275);
+  -ms-transition: all 0 cubic-bezier(0.175, 0.885, 0.32, 1.275);
+  -o-transition: all 0 cubic-bezier(0.175, 0.885, 0.32, 1.275);
+  transition: all 0 cubic-bezier(0.175, 0.885, 0.32, 1.275);
+ 
+  -webkit-transition-timing-function: cubic-bezier(0.175, 0.885, 0.45, 1);
+  
+  -webkit-transition-timing-function: cubic-bezier(0.175, 0.885, 0.45, 1.595);
+  -moz-transition-timing-function: cubic-bezier(0.175, 0.885, 0.45, 1.595);
+  -ms-transition-timing-function: cubic-bezier(0.175, 0.885, 0.45, 1.595);
+  -o-transition-timing-function: cubic-bezier(0.175, 0.885, 0.45, 1.595);
+  transition-timing-function: cubic-bezier(0.175, 0.885, 0.45, 1.595);
+}
+.bouncy-slide-left.ng-enter {
+  transform: translateX(-240px);
+  -ms-transform: translateX(-240px);
+  -webkit-transform: translateX(-240px);
+  transition-duration: 250ms;
+  -webkit-transition-duration: 250ms;
+  opacity: 0;
+}
+.bouncy-slide-left.ng-enter-active {
+  transform: translateX(0);
+  -ms-transform: translateX(0);
+  -webkit-transform: translateX(0);
+  opacity: 1;
+}
+.bouncy-slide-left.ng-leave {
+  transform: translateX(0);
+  -ms-transform: translateX(0);
+  -webkit-transform: translateX(0);
+  transition-duration: 250ms;
+  -webkit-transition-duration: 250ms;
+  opacity: 1;
+}
+.bouncy-slide-left.ng-leave-active {
+  transform: translateX(-240px);
+  -ms-transform: translateX(-240px);
+  -webkit-transform: translateX(-240px);
+  opacity: 0;
+}
+.bouncy-slide-left.ng-hide-add {
+  transform: translateX(0);
+  -ms-transform: translateX(0);
+  -webkit-transform: translateX(0);
+  transition-duration: 250ms;
+  -webkit-transition-duration: 250ms;
+  opacity: 1;
+}
+.bouncy-slide-left.ng-hide-add.ng-hide-add-active {
+  transform: translateX(-240px);
+  -ms-transform: translateX(-240px);
+  -webkit-transform: translateX(-240px);
+  opacity: 0;
+}
+.bouncy-slide-left.ng-hide-remove {
+  transform: translateX(-240px);
+  -ms-transform: translateX(-240px);
+  -webkit-transform: translateX(-240px);
+  transition-duration: 250ms;
+  -webkit-transition-duration: 250ms;
+  display: block !important;
+  opacity: 0;
+}
+.bouncy-slide-left.ng-hide-remove.ng-hide-remove-active {
+  transform: translateX(0);
+  -ms-transform: translateX(0);
+  -webkit-transform: translateX(0);
+  opacity: 1;
+}
+
+.bouncy-slide-down {
+  -webkit-transition: all 0 cubic-bezier(0.175, 0.885, 0.32, 1);
+ 
+  -webkit-transition: all 0 cubic-bezier(0.175, 0.885, 0.32, 1.275);
+  -moz-transition: all 0 cubic-bezier(0.175, 0.885, 0.32, 1.275);
+  -ms-transition: all 0 cubic-bezier(0.175, 0.885, 0.32, 1.275);
+  -o-transition: all 0 cubic-bezier(0.175, 0.885, 0.32, 1.275);
+  transition: all 0 cubic-bezier(0.175, 0.885, 0.32, 1.275);
+ 
+  -webkit-transition-timing-function: cubic-bezier(0.175, 0.885, 0.45, 1);
+ 
+  -webkit-transition-timing-function: cubic-bezier(0.175, 0.885, 0.45, 1.595);
+  -moz-transition-timing-function: cubic-bezier(0.175, 0.885, 0.45, 1.595);
+  -ms-transition-timing-function: cubic-bezier(0.175, 0.885, 0.45, 1.595);
+  -o-transition-timing-function: cubic-bezier(0.175, 0.885, 0.45, 1.595);
+  transition-timing-function: cubic-bezier(0.175, 0.885, 0.45, 1.595);
+}
+.bouncy-slide-down.ng-enter {
+  transform: translateY(-240px);
+  -ms-transform: translateY(-240px);
+  -webkit-transform: translateY(-240px);
+  transition-duration: 250ms;
+  -webkit-transition-duration: 250ms;
+  opacity: 0;
+}
+.bouncy-slide-down.ng-enter-active {
+  transform: translateY(0);
+  -ms-transform: translateY(0);
+  -webkit-transform: translateY(0);
+  opacity: 1;
+}
+.bouncy-slide-down.ng-leave {
+  transform: translateY(0);
+  -ms-transform: translateY(0);
+  -webkit-transform: translateY(0);
+  transition-duration: 250ms;
+  -webkit-transition-duration: 250ms;
+  opacity: 1;
+}
+.bouncy-slide-down.ng-leave-active {
+  transform: translateY(-240px);
+  -ms-transform: translateY(-240px);
+  -webkit-transform: translateY(-240px);
+  opacity: 0;
+}
+.bouncy-slide-down.ng-hide-add {
+  transform: translateY(0);
+  -ms-transform: translateY(0);
+  -webkit-transform: translateY(0);
+  transition-duration: 250ms;
+  -webkit-transition-duration: 250ms;
+  opacity: 1;
+}
+.bouncy-slide-down.ng-hide-add.ng-hide-add-active {
+  transform: translateY(-240px);
+  -ms-transform: translateY(-240px);
+  -webkit-transform: translateY(-240px);
+  opacity: 0;
+}
+.bouncy-slide-down.ng-hide-remove {
+  transform: translateY(-240px);
+  -ms-transform: translateY(-240px);
+  -webkit-transform: translateY(-240px);
+  transition-duration: 250ms;
+  -webkit-transition-duration: 250ms;
+  display: block !important;
+  opacity: 0;
+}
+.bouncy-slide-down.ng-hide-remove.ng-hide-remove-active {
+  transform: translateY(0);
+  -ms-transform: translateY(0);
+  -webkit-transform: translateY(0);
+  opacity: 1;
+}
+
+.scale-fade {
+  -webkit-transition: all 0 cubic-bezier(0.25, 0.46, 0.45, 0.94);
+  -moz-transition: all 0 cubic-bezier(0.25, 0.46, 0.45, 0.94);
+  -ms-transition: all 0 cubic-bezier(0.25, 0.46, 0.45, 0.94);
+  -o-transition: all 0 cubic-bezier(0.25, 0.46, 0.45, 0.94);
+  transition: all 0 cubic-bezier(0.25, 0.46, 0.45, 0.94);
+ 
+  -webkit-transition-timing-function: cubic-bezier(0.25, 0.46, 0.45, 0.94);
+  -moz-transition-timing-function: cubic-bezier(0.25, 0.46, 0.45, 0.94);
+  -ms-transition-timing-function: cubic-bezier(0.25, 0.46, 0.45, 0.94);
+  -o-transition-timing-function: cubic-bezier(0.25, 0.46, 0.45, 0.94);
+  transition-timing-function: cubic-bezier(0.25, 0.46, 0.45, 0.94);
+}
+.scale-fade.ng-enter {
+  transform: scale(0.7);
+  -ms-transform: scale(0.7);
+  -webkit-transform: scale(0.7);
+  transition-duration: 250ms;
+  -webkit-transition-duration: 250ms;
+  opacity: 0;
+}
+.scale-fade.ng-enter-active {
+  transform: scale(1);
+  -ms-transform: scale(1);
+  -webkit-transform: scale(1);
+  opacity: 1;
+}
+.scale-fade.ng-leave {
+  transform: scale(1);
+  -ms-transform: scale(1);
+  -webkit-transform: scale(1);
+  transition-duration: 250ms;
+  -webkit-transition-duration: 250ms;
+  opacity: 1;
+}
+.scale-fade.ng-leave-active {
+  transform: scale(0.7);
+  -ms-transform: scale(0.7);
+  -webkit-transform: scale(0.7);
+  opacity: 0;
+}
+.scale-fade.ng-hide-add {
+  transform: scale(1);
+  -ms-transform: scale(1);
+  -webkit-transform: scale(1);
+  transition-duration: 250ms;
+  -webkit-transition-duration: 250ms;
+  opacity: 1;
+}
+.scale-fade.ng-hide-add.ng-hide-add-active {
+  transform: scale(0.7);
+  -ms-transform: scale(0.7);
+  -webkit-transform: scale(0.7);
+  opacity: 0;
+}
+.scale-fade.ng-hide-remove {
+  transform: scale(0.7);
+  -ms-transform: scale(0.7);
+  -webkit-transform: scale(0.7);
+  transition-duration: 250ms;
+  -webkit-transition-duration: 250ms;
+  display: block !important;
+  opacity: 0;
+}
+.scale-fade.ng-hide-remove.ng-hide-remove-active {
+  transform: scale(1);
+  -ms-transform: scale(1);
+  -webkit-transform: scale(1);
+  opacity: 1;
+}
+
+.spin-toggle {
+  -webkit-transition: all 0 cubic-bezier(0.25, 0.46, 0.45, 0.94);
+  -moz-transition: all 0 cubic-bezier(0.25, 0.46, 0.45, 0.94);
+  -ms-transition: all 0 cubic-bezier(0.25, 0.46, 0.45, 0.94);
+  -o-transition: all 0 cubic-bezier(0.25, 0.46, 0.45, 0.94);
+  transition: all 0 cubic-bezier(0.25, 0.46, 0.45, 0.94);
+ 
+  -webkit-transition-timing-function: cubic-bezier(0.25, 0.46, 0.45, 0.94);
+  -moz-transition-timing-function: cubic-bezier(0.25, 0.46, 0.45, 0.94);
+  -ms-transition-timing-function: cubic-bezier(0.25, 0.46, 0.45, 0.94);
+  -o-transition-timing-function: cubic-bezier(0.25, 0.46, 0.45, 0.94);
+  transition-timing-function: cubic-bezier(0.25, 0.46, 0.45, 0.94);
+}
+.spin-toggle.ng-enter {
+  transform: rotate(225deg);
+  -ms-transform: rotate(225deg);
+  -webkit-transform: rotate(225deg);
+  transition-duration: 250ms;
+  -webkit-transition-duration: 250ms;
+  opacity: 0;
+}
+.spin-toggle.ng-enter-active {
+  transform: rotate(0deg);
+  -ms-transform: rotate(0deg);
+  -webkit-transform: rotate(0deg);
+  opacity: 1;
+}
+.spin-toggle.ng-leave {
+  transform: rotate(0deg);
+  -ms-transform: rotate(0deg);
+  -webkit-transform: rotate(0deg);
+  transition-duration: 250ms;
+  -webkit-transition-duration: 250ms;
+  opacity: 1;
+}
+.spin-toggle.ng-leave-active {
+  transform: rotate(90deg);
+  -ms-transform: rotate(90deg);
+  -webkit-transform: rotate(90deg);
+  opacity: 0;
+}
+.spin-toggle.ng-hide-add {
+  transform: rotate(0deg);
+  -ms-transform: rotate(0deg);
+  -webkit-transform: rotate(0deg);
+  transition-duration: 250ms;
+  -webkit-transition-duration: 250ms;
+  opacity: 1;
+}
+.spin-toggle.ng-hide-add.ng-hide-add-active {
+  transform: rotate(90deg);
+  -ms-transform: rotate(90deg);
+  -webkit-transform: rotate(90deg);
+  opacity: 0;
+}
+.spin-toggle.ng-hide-remove {
+  transform: rotate(225deg);
+  -ms-transform: rotate(225deg);
+  -webkit-transform: rotate(225deg);
+  transition-duration: 250ms;
+  -webkit-transition-duration: 250ms;
+  display: block !important;
+  opacity: 0;
+}
+.spin-toggle.ng-hide-remove.ng-hide-remove-active {
+  transform: rotate(0deg);
+  -ms-transform: rotate(0deg);
+  -webkit-transform: rotate(0deg);
+  opacity: 1;
+}
+
+.scale-fade-in {
+  -webkit-transition: all 0 cubic-bezier(0.25, 0.46, 0.45, 0.94);
+  -moz-transition: all 0 cubic-bezier(0.25, 0.46, 0.45, 0.94);
+  -ms-transition: all 0 cubic-bezier(0.25, 0.46, 0.45, 0.94);
+  -o-transition: all 0 cubic-bezier(0.25, 0.46, 0.45, 0.94);
+  transition: all 0 cubic-bezier(0.25, 0.46, 0.45, 0.94);
+ 
+  -webkit-transition-timing-function: cubic-bezier(0.25, 0.46, 0.45, 0.94);
+  -moz-transition-timing-function: cubic-bezier(0.25, 0.46, 0.45, 0.94);
+  -ms-transition-timing-function: cubic-bezier(0.25, 0.46, 0.45, 0.94);
+  -o-transition-timing-function: cubic-bezier(0.25, 0.46, 0.45, 0.94);
+  transition-timing-function: cubic-bezier(0.25, 0.46, 0.45, 0.94);
+}
+.scale-fade-in.ng-enter {
+  transform: scale(3);
+  -ms-transform: scale(3);
+  -webkit-transform: scale(3);
+  transition-duration: 250ms;
+  -webkit-transition-duration: 250ms;
+  opacity: 0;
+}
+.scale-fade-in.ng-enter-active {
+  transform: scale(1);
+  -ms-transform: scale(1);
+  -webkit-transform: scale(1);
+  opacity: 1;
+}
+.scale-fade-in.ng-leave {
+  transform: scale(1);
+  -ms-transform: scale(1);
+  -webkit-transform: scale(1);
+  transition-duration: 250ms;
+  -webkit-transition-duration: 250ms;
+  opacity: 1;
+}
+.scale-fade-in.ng-leave-active {
+  transform: scale(3);
+  -ms-transform: scale(3);
+  -webkit-transform: scale(3);
+  opacity: 0;
+}
+.scale-fade-in.ng-hide-add {
+  transform: scale(1);
+  -ms-transform: scale(1);
+  -webkit-transform: scale(1);
+  transition-duration: 250ms;
+  -webkit-transition-duration: 250ms;
+  opacity: 1;
+}
+.scale-fade-in.ng-hide-add.ng-hide-add-active {
+  transform: scale(3);
+  -ms-transform: scale(3);
+  -webkit-transform: scale(3);
+  opacity: 0;
+}
+.scale-fade-in.ng-hide-remove {
+  transform: scale(3);
+  -ms-transform: scale(3);
+  -webkit-transform: scale(3);
+  transition-duration: 250ms;
+  -webkit-transition-duration: 250ms;
+  display: block !important;
+  opacity: 0;
+}
+.scale-fade-in.ng-hide-remove.ng-hide-remove-active {
+  transform: scale(1);
+  -ms-transform: scale(1);
+  -webkit-transform: scale(1);
+  opacity: 1;
+}
+
+.bouncy-scale-in {
+  -webkit-transition: all 0 cubic-bezier(0.175, 0.885, 0.32, 1);
+   -webkit-transition: all 0 cubic-bezier(0.175, 0.885, 0.32, 1.275);
+  -moz-transition: all 0 cubic-bezier(0.175, 0.885, 0.32, 1.275);
+  -ms-transition: all 0 cubic-bezier(0.175, 0.885, 0.32, 1.275);
+  -o-transition: all 0 cubic-bezier(0.175, 0.885, 0.32, 1.275);
+  transition: all 0 cubic-bezier(0.175, 0.885, 0.32, 1.275);
+ 
+  -webkit-transition-timing-function: cubic-bezier(0.175, 0.885, 0.45, 1);
+ 
+  -webkit-transition-timing-function: cubic-bezier(0.175, 0.885, 0.45, 1.595);
+  -moz-transition-timing-function: cubic-bezier(0.175, 0.885, 0.45, 1.595);
+  -ms-transition-timing-function: cubic-bezier(0.175, 0.885, 0.45, 1.595);
+  -o-transition-timing-function: cubic-bezier(0.175, 0.885, 0.45, 1.595);
+  transition-timing-function: cubic-bezier(0.175, 0.885, 0.45, 1.595);
+}
+.bouncy-scale-in.ng-enter {
+  transform: scale(3);
+  -ms-transform: scale(3);
+  -webkit-transform: scale(3);
+  transition-duration: 450ms;
+  -webkit-transition-duration: 450ms;
+  opacity: 0;
+}
+.bouncy-scale-in.ng-enter-active {
+  transform: scale(1);
+  -ms-transform: scale(1);
+  -webkit-transform: scale(1);
+  opacity: 1;
+}
+.bouncy-scale-in.ng-leave {
+  transform: scale(1);
+  -ms-transform: scale(1);
+  -webkit-transform: scale(1);
+  transition-duration: 450ms;
+  -webkit-transition-duration: 450ms;
+  opacity: 1;
+}
+.bouncy-scale-in.ng-leave-active {
+  transform: scale(3);
+  -ms-transform: scale(3);
+  -webkit-transform: scale(3);
+  opacity: 0;
+}
+.bouncy-scale-in.ng-hide-add {
+  transform: scale(1);
+  -ms-transform: scale(1);
+  -webkit-transform: scale(1);
+  transition-duration: 450ms;
+  -webkit-transition-duration: 450ms;
+  opacity: 1;
+}
+.bouncy-scale-in.ng-hide-add.ng-hide-add-active {
+  transform: scale(3);
+  -ms-transform: scale(3);
+  -webkit-transform: scale(3);
+  opacity: 0;
+}
+.bouncy-scale-in.ng-hide-remove {
+  transform: scale(3);
+  -ms-transform: scale(3);
+  -webkit-transform: scale(3);
+  transition-duration: 450ms;
+  -webkit-transition-duration: 450ms;
+  display: block !important;
+  opacity: 0;
+}
+.bouncy-scale-in.ng-hide-remove.ng-hide-remove-active {
+  transform: scale(1);
+  -ms-transform: scale(1);
+  -webkit-transform: scale(1);
+  opacity: 1;
+}
+
+.flip-in {
+  -webkit-transition: all 0 cubic-bezier(0.25, 0.46, 0.45, 0.94);
+  -moz-transition: all 0 cubic-bezier(0.25, 0.46, 0.45, 0.94);
+  -ms-transition: all 0 cubic-bezier(0.25, 0.46, 0.45, 0.94);
+  -o-transition: all 0 cubic-bezier(0.25, 0.46, 0.45, 0.94);
+  transition: all 0 cubic-bezier(0.25, 0.46, 0.45, 0.94);
+ 
+  -webkit-transition-timing-function: cubic-bezier(0.25, 0.46, 0.45, 0.94);
+  -moz-transition-timing-function: cubic-bezier(0.25, 0.46, 0.45, 0.94);
+  -ms-transition-timing-function: cubic-bezier(0.25, 0.46, 0.45, 0.94);
+  -o-transition-timing-function: cubic-bezier(0.25, 0.46, 0.45, 0.94);
+  transition-timing-function: cubic-bezier(0.25, 0.46, 0.45, 0.94);
+}
+.flip-in.ng-enter {
+  transform: perspective(300px) rotateX(90deg);
+  -ms-transform: perspective(300px) rotateX(90deg);
+  -webkit-transform: perspective(300px) rotateX(90deg);
+  transition-duration: 550ms;
+  -webkit-transition-duration: 550ms;
+  opacity: 0.7;
+}
+.flip-in.ng-enter-active {
+  transform: perspective(300px) rotateX(0deg);
+  -ms-transform: perspective(300px) rotateX(0deg);
+  -webkit-transform: perspective(300px) rotateX(0deg);
+  opacity: 1;
+}
+.flip-in.ng-leave {
+  transform: perspective(300px) rotateX(0deg);
+  -ms-transform: perspective(300px) rotateX(0deg);
+  -webkit-transform: perspective(300px) rotateX(0deg);
+  transition-duration: 550ms;
+  -webkit-transition-duration: 550ms;
+  opacity: 1;
+}
+.flip-in.ng-leave-active {
+  transform: perspective(300px) rotateX(135deg);
+  -ms-transform: perspective(300px) rotateX(135deg);
+  -webkit-transform: perspective(300px) rotateX(135deg);
+  opacity: 0.7;
+}
+.flip-in.ng-hide-add {
+  transform: perspective(300px) rotateX(0deg);
+  -ms-transform: perspective(300px) rotateX(0deg);
+  -webkit-transform: perspective(300px) rotateX(0deg);
+  transition-duration: 550ms;
+  -webkit-transition-duration: 550ms;
+  opacity: 1;
+}
+.flip-in.ng-hide-add.ng-hide-add-active {
+  transform: perspective(300px) rotateX(135deg);
+  -ms-transform: perspective(300px) rotateX(135deg);
+  -webkit-transform: perspective(300px) rotateX(135deg);
+  opacity: 0;
+}
+.flip-in.ng-hide-remove {
+  transform: perspective(300px) rotateX(90deg);
+  -ms-transform: perspective(300px) rotateX(90deg);
+  -webkit-transform: perspective(300px) rotateX(90deg);
+  transition-duration: 550ms;
+  -webkit-transition-duration: 550ms;
+  display: block !important;
+  opacity: 0;
+}
+.flip-in.ng-hide-remove.ng-hide-remove-active {
+  transform: perspective(300px) rotateX(0deg);
+  -ms-transform: perspective(300px) rotateX(0deg);
+  -webkit-transform: perspective(300px) rotateX(0deg);
+  opacity: 1;
+}
+
+.rotate-in {
+  -webkit-transition: all 0 cubic-bezier(0.175, 0.885, 0.32, 1);
+ 
+  -webkit-transition: all 0 cubic-bezier(0.175, 0.885, 0.32, 1.275);
+  -moz-transition: all 0 cubic-bezier(0.175, 0.885, 0.32, 1.275);
+  -ms-transition: all 0 cubic-bezier(0.175, 0.885, 0.32, 1.275);
+  -o-transition: all 0 cubic-bezier(0.175, 0.885, 0.32, 1.275);
+  transition: all 0 cubic-bezier(0.175, 0.885, 0.32, 1.275);
+ 
+  -webkit-transition-timing-function: cubic-bezier(0.175, 0.885, 0.45, 1);
+ 
+  -webkit-transition-timing-function: cubic-bezier(0.175, 0.885, 0.45, 1.595);
+  -moz-transition-timing-function: cubic-bezier(0.175, 0.885, 0.45, 1.595);
+  -ms-transition-timing-function: cubic-bezier(0.175, 0.885, 0.45, 1.595);
+  -o-transition-timing-function: cubic-bezier(0.175, 0.885, 0.45, 1.595);
+  transition-timing-function: cubic-bezier(0.175, 0.885, 0.45, 1.595);
+
+  -webkit-transform-origin:center;
+  -moz-transform-origin:center;
+  -ms-transform-origin:center;
+  -o-transform-origin:center;
+  transform-origin:center;
+}
+.rotate-in.ng-enter {
+  transform: perspective(300px) rotateY(40deg);
+  -ms-transform: perspective(300px) rotateY(40deg);
+  -webkit-transform: perspective(300px) rotateY(40deg);
+  transition-duration: 550ms;
+  -webkit-transition-duration: 550ms;
+  opacity: 0.7;
+}
+.rotate-in.ng-enter-active {
+  transform: perspective(300px) rotateY(0deg);
+  -ms-transform: perspective(300px) rotateY(0deg);
+  -webkit-transform: perspective(300px) rotateY(0deg);
+  opacity: 1;
+}
+.rotate-in.ng-leave {
+  transform: perspective(300px) rotateY(0deg);
+  -ms-transform: perspective(300px) rotateY(0deg);
+  -webkit-transform: perspective(300px) rotateY(0deg);
+  transition-duration: 550ms;
+  -webkit-transition-duration: 550ms;
+  opacity: 1;
+}
+.rotate-in.ng-leave-active {
+  transform: perspective(300px) rotateY(-40deg);
+  -ms-transform: perspective(300px) rotateY(-40deg);
+  -webkit-transform: perspective(300px) rotateY(-40deg);
+  opacity: 0.7;
+}
+.rotate-in.ng-hide-add {
+  transform: perspective(300px) rotateY(0deg);
+  -ms-transform: perspective(300px) rotateY(0deg);
+  -webkit-transform: perspective(300px) rotateY(0deg);
+  transition-duration: 550ms;
+  -webkit-transition-duration: 550ms;
+  opacity: 1;
+}
+.rotate-in.ng-hide-add.ng-hide-add-active {
+  transform: perspective(300px) rotateY(-40deg);
+  -ms-transform: perspective(300px) rotateY(-40deg);
+  -webkit-transform: perspective(300px) rotateY(-40deg);
+  opacity: 0;
+}
+.rotate-in.ng-hide-remove {
+  transform: perspective(300px) rotateY(40deg);
+  -ms-transform: perspective(300px) rotateY(40deg);
+  -webkit-transform: perspective(300px) rotateY(40deg);
+  transition-duration: 550ms;
+  -webkit-transition-duration: 550ms;
+  display: block !important;
+  opacity: 0;
+}
+.rotate-in.ng-hide-remove.ng-hide-remove-active {
+  transform: perspective(300px) rotateY(0deg);
+  -ms-transform: perspective(300px) rotateY(0deg);
+  -webkit-transform: perspective(300px) rotateY(0deg);
+  opacity: 1;
+}
\ No newline at end of file
diff --git a/src/main/websrc/template/collect/custommenu.html b/src/main/websrc/template/collect/custommenu.html
new file mode 100644
index 0000000..e6fc0c6
--- /dev/null
+++ b/src/main/websrc/template/collect/custommenu.html
@@ -0,0 +1,442 @@
+<div ng-if="pageFlag==1">
+	<div class="nodata">
+		<h5>还没有看单</h5>
+	</div>
+	<div class="btn3" style="float:none;width:200px;margin:0 auto;text-align: center;" ng-click="showWin(1)" ng-if="hasEditPower()">创建第一个看单</div>
+	<dl class="tipsList statustip">
+        <dt>1. 什么是“行业看单”?</dt>
+        <dd>
+        	行业看单提供的是的常用可分类的数据分析指标的查看,目前主要由事件,漏斗,留存构成,可以根据指标类型分类成不同的行业菜单,便于查看,我们叫做看单。
+        </dd>
+        <dt>2. 怎么使用行业看单?</dt>
+        <dd>
+        	通过TrackingIO强大的数据分析,行业看单可以帮助解决以下问题:<br/>
+			&nbsp;&nbsp;&nbsp;&nbsp;a. 做详细的app数据分析,你可以快速组建成行业数据菜单,便于产品,市场,运营查看。<br/>
+			&nbsp;&nbsp;&nbsp;&nbsp;b. 你可以选择行业优秀者分享的看单模版,快速组建自己的行业数据看单。<br/><br/>
+		</dd>
+		<dd>
+			关于行业看单,你可以根据产品特性合理配置看单名称和表单内容,创建出符合自己行业标准化的数据图表。比如电商,可以创建购买数据分析,包含购买用户趋势,购买金额趋势等,帮您分析用户的购买行为。
+		</dd>
+    </dl>
+</div>
+<div ng-if="pageFlag==2">
+	<div class="finshedWrap">
+		<span class="finshedIcon"></span>
+		<span class="finshLabel">已完成</span>
+	</div>
+	<div class="btn3" style="float:none;width:100px;margin:0 auto;text-align: center;" ng-click="lookMyMenu()">查看我的看单</div>
+	<div class="descWrap">
+		<p class="pTitle">该操作会自动帮你添加{{getEventTypeCount(reyunList)}}</p>
+		<ol class="olList">
+			<li ng-repeat="ry in reyunList track by $index">{{ry.name}}</li>
+		</ol>
+	</div>
+</div>
+<!-- 看单缩略图 -->
+<div class="clearfix"  ng-if="pageFlag==3 && viewFlag>0">
+	<ul class="customNav">
+		<li ng-class="{'active':viewFlag==3}" ng-click="changeViewFlag(3)">行业看单模板</li>
+		<!-- <li ng-class="{'active':viewFlag==2}" ng-click="changeViewFlag(2)">我的收藏</li> -->
+		<li ng-class="{'active':viewFlag==1}" ng-click="changeViewFlag(1)">我的看单</li>
+	</ul>
+	<div class="filterBox clearfix" ng-show="viewFlag!=1">
+		<!-- <div class="iconBtn right p" ng-class="{'active':selfilter}" ng-click="selfilter=!selfilter" ng-mouseleave='selfilter=false;'>
+	    	<span class="filterIcon"></span>排序
+	    	<div class="optionList rightLayout" ng-show="selfilter"  style="max-width:100px;width:100px;">
+	  			<dl class="dlOperTitle popmenu">
+	  				<dd ng-click="menuOrder(1)" ng-class="{'active':orderFlag==1}">默认排序</dd>
+	  				<dd ng-click="menuOrder(2)" ng-class="{'active':orderFlag==2}">按匹配度</dd>
+	  				<dd ng-click="menuOrder(3)" ng-class="{'active':orderFlag==3}">按使用次数</dd>
+	  				<dd ng-click="menuOrder(4)" ng-class="{'active':orderFlag==4}">按收藏次数</dd>
+	  			</dl>
+  			</div>
+	    </div> -->
+		<div class="searchWrap">
+	        <input type="text" class="searchIpt" ng-model="searchTxt" placeholder="输入搜索关键词">
+	    </div>
+	    <div class="right">
+	    	<select-list style="margin-right: 20px;height: 32px;line-height: 32px;background-color: #ffffff;" meau-info="industryList" meau-id="industryId" meau-data="industryInit" meau-name="industryNameInit"></select-list>
+	    </div>
+	</div>
+	<div class="filterBox clearfix" ng-if="viewFlag==1">
+		<p class="pinfo left">您的账号仅支持创建{{maxMenu}}个看单,如需增加,请联系商务</p>
+		<div class="iconBtn right" ng-click="showWin(1)" ng-class="{'disable':menuInfoList.length>=maxMenu}" ng-if="hasEditPower()">
+	    	<span class="additionIcon"></span>添加一个新看单
+	    </div>
+	</div>
+	<div class="defineBox">
+         <!-- drag-order drag-id="menu.id" drag-info="{{menu}}" drag-flag="menu" -->
+		<div class="defineBoxItem" ng-repeat="menu in menuInfoList | filter:{'name':searchTxt} | filter:{'categoryName':industryInitName} track by $index" ng-class-even="'rightLayoutWrap'" ng-style="{'width':viewFlag==1?'33.333%':''}">
+			<div class="chartBox p" ng-style="{'min-height':viewFlag!=1?'320px':''}" style="padding-top: 10px;">
+
+				<!-- <div class="dropIcon p" ng-class="{'active':selme}" ng-click="selme=!selme" ng-mouseleave='selme=false;' ng-show="viewFlag==1">
+					<div class="optionList" ng-show="selme"  style="max-width:140px;width:140px;">
+			  			<dl class="dlOperTitle popmenu">
+			  				<dd ng-click="menuDetail(menu)">查看详情</dd>
+			  				<dd ng-click="showWin(2,menu)" ng-if="hasEditPower()">修改看单名称</dd>
+			  				<dd ng-click="showWin(4,menu)" ng-if="!menu.hasShare && menu.templates.length>0 && !menu.source">分享到行业看单模板</dd>
+			  				<dd ng-click="doShare(menu)" ng-if="menu.hasShare && !menu.source">取消分享</dd>
+			  				<dd ng-click="showWin(3,menu)" ng-if="hasEditPower()">删除该看单</dd>
+			  			</dl>
+		  			</div>
+				</div>
+				<div class="dropIcon p" ng-class="{'active':selme1}" ng-click="selme1=!selme1" ng-mouseleave='selme1=false;' ng-show="viewFlag==2 && !menu.shareValid">
+		  			<div class="optionList" ng-show="selme1"  style="max-width:100px;width:100px;">
+			  			<dl class="dlOperTitle popmenu">
+			  				<dd ng-click="doFavoriteByMenu(menu)">取消收藏</dd>
+			  			</dl>
+		  			</div>
+				</div> -->
+				
+				<h5 class="boxTitle" ng-mouseenter="menu.editShow=true" ng-mouseleave="menu.editShow=false" style="cursor: pointer;padding: 10px 0px;">{{menu.name}}
+					<span class="eidtbtn eidt" ng-click="showWin(2,menu)" ng-if="hasEditPower() && viewFlag==1" ng-show="menu.editShow"></span>
+					<span ng-if="viewFlag==3" style="color: #999;font-size: 13px;">({{menu.categoryName}})</span>
+					<span class="delbtn del right p" ng-click="showWin(3,menu)" ng-if="hasEditPower() && viewFlag==1 && menu.editShow">
+					</span>
+				</h5>
+				<!-- <p class="pinfo" ng-if="viewFlag>1">{{getShareName(menu)}} {{menu.shareDate | date:'yyyy-MM-dd'}}</p> -->
+				<div class="snviewWrap hand" ng-click="menuDetail(menu)" ng-if="viewFlag!=2 || menu.shareValid" style="margin-top:10px">
+				  <div ng-repeat="temp in menu.templates track by $index" ng-if="$index<(viewFlag==1?4:6)" style="display: inline-block;text-align: center;">
+					<div class="snviewItem" ng-class="temp.type?temp.type:temp.menuType">
+					</div>
+					<div class="nowrap" style="color: #999;width:149px;margin:0px auto;margin-bottom:24px;">{{temp.name}}</div>
+				  </div>
+				</div>
+				<div class="lostInfo" ng-if="viewFlag==2 && !menu.shareValid">
+					<span class="wrongIcon"></span>
+					已被删除
+				</div>
+				<div ng-if="menu.templates.length == 0 && viewFlag==1 && !demoU" style="text-align:center;">
+				    <span class="emptyImg"></span>
+				    <div style="margin-bottom: 20px;color:#999999;">当前还未添加报表</div>
+					<div class="iconBtn" ng-click="showWin(6,menu)" style="margin-left:0px;color:#666666;">
+				    	<span class="additionIcon"></span>添加报表
+				    </div>
+			    </div>
+			    <div class="boxBottom" ng-if="viewFlag==1" style="display: inline;">
+			    	<span class="item">{{menu.createAccountName}}</span>
+			    	<span class="item" style="margin-left: 10px;">创建于{{menu.createDate | date:'yyyy-MM-dd'}}</span>
+			    </div>
+				<div class="boxBottom" ng-if="viewFlag==1">
+					<span class="item">共{{menu.templates.length}}张报表</span>
+				</div>
+				<!-- <div class="boxBottom" ng-if="viewFlag>1">
+					<span class="item">{{menu.useNumber}}人使用</span>
+					<span class="item">{{menu.favoriteNumber}}人已收藏</span>
+					<span class="item">{{menu.matchPercent*100 | numFixed}}%匹配度</span>
+				</div> -->
+			</div>
+		</div>
+	</div>
+</div>
+
+<!-- 看单详情 -->
+<div class="clearfix"  ng-if="pageFlag==4">
+	<div class="filterBox clearfix p" style="margin-top: 0px;">
+		<div class="left">
+			<div class="iconBtn left mr10" style="margin-left: 0px;" ng-click="backToMenu()">
+		    	<span class="doBackIcon"></span>返回
+		    </div>
+			<h5 class="boxTitle left mr10 lh32">
+				{{currentMenu.name}}
+				<span ng-click="showWin(2,menu)" ng-if="viewFlag==3" style="color: #999;font-size: 13px;">({{currentMenu.categoryName}})
+				</span>
+			</h5>
+			<!-- <p class="pinfo left lh32" style="margin:0px;">({{getShareName(currentMenu)}}&nbsp;&nbsp;{{currentMenu.shareDate | date:'yyyy-MM-dd'}})</p> -->
+		</div>
+		<!-- <div class="right" ng-if="viewFlag!=1 && currentMenu.accountId!=currentAccountId">
+			<div class="iconBtn" ng-click="changeMatchFlag(1)" ng-class="{'active':matchFlag==1}">
+		    	<span class="matchIcon"></span>匹配度详情({{currentMenu.matchPercent*100 | numFixed}}%)
+		    </div>
+		    <div class="iconBtn" ng-class="{'hascollect':currentMenu.hasFavorite}" ng-click="doFavorite()" ng-show="hasEditPower()">
+		    	<span class="collectionIcon"></span><span ng-if="currentMenu.hasFavorite">已</span>收藏({{currentMenu.favoriteNumber}})
+		    </div>
+		     <div class="iconBtn" ng-class="{'hascollect':currentMenu.hasFavorite}" ng-if="!hasEditPower()">
+		    	<span class="collectionIcon"></span><span ng-if="currentMenu.hasFavorite">已</span>收藏({{currentMenu.favoriteNumber}})
+		    </div>
+		    <div class="iconBtn" ng-click="changeMatchFlag(2)" ng-class="{'active':matchFlag==2}" ng-if="!currentMenu.hasUsed && hasEditPower()">
+		    	<span class="additionIcon"></span>加入我的看单({{currentMenu.useNumber}})
+		    </div>
+		    <div class="iconBtn disable" ng-if="currentMenu.hasUsed">
+		    	已加入我的看单
+		    </div>
+		</div> -->
+		<my-datepicker class="dateRange rightDate right" init-day="date" ng-show="viewFlag==1"><span>{{datestr}}</span></my-datepicker>
+		<div class="right rigthM" style="padding-top: 0px;" ng-show="viewFlag==1">
+			<ul class="btnGroup">
+				<!-- <li ng-class="{'active':timeFlag=='hour','dis':disTimeFlag.indexOf('hour')>-1}" ng-click="changeTimeFlag('hour')">时</li> -->
+				<li ng-class="{'active':timeFlag=='day','dis':disTimeFlag.indexOf('day')>-1}" ng-click="changeTimeFlag('day')" style="padding:8px 15px;">天</li>
+				<li ng-class="{'active':timeFlag=='week','dis':disTimeFlag.indexOf('week')>-1}" ng-click="changeTimeFlag('week')" style="padding:8px 15px;">周</li>
+				<li ng-class="{'active':timeFlag=='month','dis':disTimeFlag.indexOf('month')>-1}" ng-click="changeTimeFlag('month')" style="padding:8px 15px;">月</li>
+			</ul>
+		</div>
+		<div class="iconBtn right rigthM imgbtn" style="margin-left: 10px;background-color: #ffffff;padding: 8px 10px;" ng-click="changeCount()" title="一行三张表" ng-show="viewFlag==1">
+	    	<div ng-class="{'three':(!showCount || showCount==2),'two':showCount==3}"></div>
+	    </div>
+		<select-list meau-info="menuInfoList" meau-id="menuId" meau-data="menuInit" meau-name="menuInitName" meau-refresh="typef5" style="background-color: #ffffff;float: right;z-index: 4;"></select-list>
+		<div class="conditionWin customWin" ng-class="{'c2':matchFlag==1,'c1':false}" ng-show="matchFlag>0">
+			<div class="sanicon"></div>
+			<div class="condiCont">
+				<div class="clearfix mb20" ng-if="matchFlag==2">
+					<p class="label" style="margin-bottom: 15px">您正在将“{{currentMenu.name}}”加入您的看单?</p>
+					<div class="openBtnGroup clearfix left">
+				        <div class="btn8" ng-click="changeMatchFlag(0)"  style="margin-right:20px;display: inline-block;">取消</div>
+				        <div class="btn3 lh30 oneCenter mybtn" ng-class="{'disable':!canJoin()}" ng-click="addShareMenu()" style="display: inline-block;">确定</div>
+				    </div>
+				</div>
+				<p class="pinfo">从行业看单模版加入到看单中心的看单,不能再次分享。</p>
+				<h5 class="boxTitle mr10 lh32">{{currentMenu.name}}</h5>
+				<p class="pinfo lh32" style="margin:0px;">
+					匹配度{{currentMenu.matchPercent*100 | numFixed}}%
+					<span class="ckblue" ng-click="tds=true" ng-show="!tds && matchFlag==2">查看详情</span>
+					<span class="ckblue" ng-click="tds=false" ng-show="tds && matchFlag==2">收起</span>
+				</p>
+				<div class="tableList" style="background-color: #fff;" ng-show="tds || matchFlag==1">
+		            <table>
+		                <tr>
+		                    <th>{{currentMenu.name}}模板</th>
+		                    <th>我的事件对应关系</th>
+		                    <th>匹配状态</th>
+		                </tr>
+		                <tr ng-repeat="template in currentMenu.templates track by $index">
+		                    <td>{{template.name}}</td>
+		                    <td>
+		                    	{{template.eventname}}
+		                    	<span class="matchEditIcon ml10" ng-show="matchFlag==2 && !template.isMatch" ng-click="editTemplateEvent(template,$index)"></span>
+		                    </td>
+		                    <td><span ng-class="{true:'matchOkIcon',false:'matchNoIcon'}[template.isMatch]"></span></td>
+		                </tr>
+		                
+		            </table>
+		        </div>
+		        <div class="descWrap" style="width:100%;" ng-if="matchFlag==2 && canJoin()">
+					<p class="pTitle lh32" style="margin-top: 10px;">
+						该操作会自动帮你添加{{getEventTypeCount(currentMenu.templates)}}
+						<span class="ckblue" ng-click="tdo=true" ng-show="!tdo">查看详情</span>
+						<span class="ckblue" ng-click="tdo=false" ng-show="tdo">收起</span>
+					</p>
+					<ol class="olList" ng-show="tdo">
+						<li ng-repeat="temp in currentMenu.templates track by $index">{{temp.name}}</li>
+					</ol>
+				</div>
+			</div>
+		</div>
+	</div>
+
+	<div class="conditionAlpha" ng-class="{'topAlp':showEditEvent}" ng-show="matchFlag>0" ng-click="changeMatchFlag(0)"></div>
+
+	<div class="defineBox defineChartBox">
+	 <!-- drag-order drag-id="temp.info.id" drag-info="{{temp.info}}" -->
+		<div class="defineBoxItem" ng-repeat="temp in chartDatas track by temp.charts.rmd" ng-class-even="'rightLayoutWrap'" ng-style="{'width':showCount==3?'33.333%':''}" >
+			<div class="chartBox" style="min-height:455px">
+				<!-- <div class="dropIcon p" ng-class="{'active':selme}" ng-click="selme=!selme" ng-mouseleave='selme=false;' ng-show="viewFlag==1 && hasEditPower()">
+					<div class="optionList" ng-show="selme"  style="max-width:140px;width:140px;" >
+			  			<dl class="dlOperTitle popmenu">
+			  				<dd ng-click="reportDetail(temp.info)" ng-if="showMenu(temp.info.menuType) && (!limitInfo.abTest || !limitInfo.abTest.eventstats)">查看详情</dd>
+			  				<dd ng-click="showWin(7,temp.info)" ng-if="hasEditPower()">从该看单删除</dd>
+			  			</dl>
+		  			</div>
+				</div> -->
+				<div class="delbtn del right p" ng-show="viewFlag==1 && hasEditPower()" ng-click="showWin(7,temp.info)">
+				</div>
+				<div class="right p mr10" style="z-index: 3;" ng-show="temp.chartList.length>0">
+				    <select-list style="margin-top:-5px;height: 31px;line-height: 26px;height:26px;margin-right: 0px;width:80px;background-color:#fbfbfb;color: #666666;border-radius: 0px 3px 3px 0px;border-color: #c9c9c9;" meau-info="temp.chartList" meau-id2="temp.charts.chartTypeId" meau-data="temp.charts.chartTypeInit"></select-list>
+				</div>
+				<div class="right p" style="z-index: 3;" ng-show="temp.rateList.length>0 || temp.group_List.length>0" ng-mouseleave="showDrop=false">
+					<div class="btn" style="margin-top:-5px;height: 31px;line-height:26px;height:26px;margin-right: 0px;background-color:#fbfbfb;color: #666666;border-right: none;border-radius: 3px 0px 0px 3px;border-color: #c9c9c9;" ng-click="showDrop=true;" ng-class="{'active':showDrop}">
+					<span class="mr10">{{temp.selectName}}</span>
+					<div class="arrowIcon" style="margin-right:0px;margin-top:10px;"></div>
+					</div>
+					<div class="rateWrap" ng-show="showDrop" style="width: 200px;left: 0px;">
+						<ul class="rateInfo" ng-show="temp.group_List.length==0 || temp.charts.chartType=='table'" style="    width: 95%;">
+							<li ng-repeat="rate in temp.rateList track  by $index" ng-click="changeRate(temp,rate)" ng-class="{'dis':!canAdd(temp,1,rate)}" title="{{substrName(rate)}}">
+								<span class="checkbox" ng-class="{'active':temp.rateListed.indexOf(rate)>-1}"></span>{{substrName(rate)}}
+							</li>
+						</ul>
+						<ul class="rateInfo" ng-show="temp.group_List.length>0 && temp.charts.chartType!='table'" style="    width: 95%;">
+						    <li ng-show="temp.group_List.length>1 && temp.charts.chartType=='pie'">
+						      <span  ng-click="checkAll(temp)">
+						        <span class="checkbox" ng-class="{'active':temp.ischeckall}" style="margin-right: 6px;"></span>全选
+						      </span>
+						    </li>
+							<li ng-repeat="group in temp.group_List track  by $index" ng-click="changeGroup(temp,group)" ng-class="{'dis':!canAdd(temp,2,group)}" title="{{group}}">
+								<span class="checkbox" ng-class="{'active':temp.grouped_List.indexOf(group)>-1}"></span>{{group}}
+							</li>
+						</ul>
+					</div>
+				</div>
+				<h5 class="boxTitle" style="cursor: pointer;"><span ng-click="gotoDetail(temp.info)">{{temp.info.name}}</span></h5>
+				<div style="height: 80px;text-align: center;">
+				    <div ng-if="temp.info.menuType=='eventstats' && (temp.charts.chartType=='columnstack' || temp.charts.chartType=='line')" style="height:100%;">
+					    <div class="tipDate" ng-if="temp.tooltipChart.length>0">{{temp.tooltipChart[0].name}}</div>
+						<span ng-repeat="t in temp.tooltipChart track by $index" ng-if="showCount==3?$index<3:$index<4" style="text-align: center;">
+							<div class="tipVal" ng-style="{'color':t.color,'margin-right':!$last?'20px':''}">
+							   {{getFormatNumber(t.value)}}{{temp.charts.chartConfig.namesub[$index]}}
+							   <div class="chartTip" ng-style="getTipWidth(temp)" title="{{t.seriesName}}">
+							   		{{t.seriesName}}
+							   </div>
+							</div>
+						</span>
+					</div>
+					<div ng-if="temp.charts.chartType=='table' && temp.group_List.length>0" style="text-align:center;">
+					    <select-list style="margin-top:40px;height: 31px;line-height: 26px;margin-right: 0px;width:110px;background-color:#ffffff;border:none;height: 100%;" class="dsSelect" meau-info="temp.dsList" meau-id2="temp.dsId" meau-data="temp.dsInit" icon-type="blue" ng-style="{'width':timeFlag!='day'?'185px':'120px'}"></select-list>
+					</div>
+				</div>
+				<min-chart ng-if="temp.charts.chartType!='table'" chart-data="temp.charts.chartData" chart-tp="temp.charts.chartType" chart-config="temp.charts.chartConfig" chart-loading="temp.charts.chartLoading" chart-back="temp.charts.rmd"></min-chart>
+				<div style="color:#999;font-size: 12px;text-align: center;margin-top:-20px;" ng-if="temp.charts.chartType=='pie'">
+        			<span ng-show="!temp.charts.chartLoading">{{substrName(temp.charts.chartData.key[0])}}</span>
+        		</div>
+		        <div class="chartWrap clearfix" ng-if="temp.charts.chartType=='table'">
+		            <div class="chartWrapItem">
+		                <is-loading ng-if="channeltopLoading"></is-loading>
+		                <div class="fixedTable" ng-show="!channeltopLoading" big-table fixed-col="1" info-list="temp.infoList" fix-change="temp.fixrefresh" initf5="temp.initrefresh" no-all-scroll="true">
+		                    <div class="tableHeader">
+		                        <table>
+		                            <tr>
+		                                <th ng-repeat="title in temp.trendList.name track by $index">
+		                                    <div id="title_{{$index}}" ng-style="temp.colsStyle[$index]" class="tditem" style="height:23px;line-height:23px;">
+		                                        {{title}}
+		                                        <span class="sortWrap" ng-click="temp.reverse=!temp.reverse;orderCol(temp,temp.trendList.columnkey[$index], temp.reverse)">
+		                                            <span class="ascIcon" ng-class="{'active':temp.sortCol==temp.trendList.columnkey[$index] && !temp.reverse}"></span>
+		                                            <span class="descIcon" ng-class="{'active':temp.sortCol==temp.trendList.columnkey[$index] && temp.reverse}"></span>
+		                                        </span>
+		                                    </div>
+		                                </th>
+		                            </tr>
+		                        </table>
+		                    </div>
+		                    <div class="tableInfo" style="max-height:234px;min-height:234px;">
+		                        <table>
+		                            <tr ng-repeat="info in temp.infoList | filter:{'ds':temp.ds} | limitTo:100 track by $index">
+		                                <td ng-repeat="col in temp.trendList.columnkey track by $index ">
+		                                  <div ng-style="temp.colsStyle[0]" class="tditem" ng-if="$index==0" style="height:23px;line-height:23px;">
+		                                    {{info[col]}}
+		                                  </div>
+		                                  <div ng-style="temp.colsStyle[$index]" class="tditem" ng-if="$index>0" style="height:23px;line-height:23px;">
+		                                    {{info[col] | formatRate:col:temp.trendList.format}}
+		                                  </div>
+		                                </td>
+		                            </tr>
+		                        </table>
+		                    </div>
+		                </div>
+		            </div>
+		        </div>
+				<div class="boxBottom" ng-if="viewFlag!=1" style="top:430px;color: #00a9e8;cursor: pointer;" ng-click="showDetail(temp)" stop-event>埋点及规则</div>
+			</div>
+		</div>
+		<div class="defineBoxItem" ng-class="{'disReport':chartDatas.length>=8}" ng-if="viewFlag<=1 && hasEditPower()" ng-style="{'width':showCount==3?'33.333%':''}">
+			<div class="chartBox hand" ng-click="showWin(6)" title="{{getMaxTips()}}" style="min-height:455px">
+				<div class="addReportIcon"></div>
+				<div class="addReportIconDesc">创建新表单</div>
+			</div>
+		</div>
+	</div>
+</div>
+
+
+<div class="openTipWin" ng-show="winFlag==3 || winFlag==7">
+    <div class="closeGray" ng-click="closeWin()"></div>
+    <div class="tipCont">
+        是否删除&nbsp;&nbsp;“{{delname}}”&nbsp;&nbsp;<span ng-if="winFlag==3">看单</span><span ng-if="winFlag==7">报表</span>?
+    </div>
+    <div class="openBtnGroup clearfix">
+        <div class="btn8 mr20" ng-click="closeWin()">取消</div>
+        <div class="btn8" ng-click="doDelete(winFlag)">确定</div>
+    </div>
+</div>
+<div class="openTipWin" ng-show="winFlag==1 || winFlag==2"> 
+    <div class="closeGray" ng-click="closeWin()"></div>
+    <div class="tipCont" style="text-align: left;padding-bottom: 30px;">
+        <p>请输入您想添加看单的名称:</p>
+        <div>
+        	<input type="text" class="iptform" ng-model="ename" style="width:300px;" placeholder="最多输入12个汉字">
+        	<div class="btn5 ml10 btnblock conwidth" ng-click="saveMenu()">确定</div>
+        </div>
+    </div>
+</div>
+<div class="openTipWin" ng-if="winFlag==4">
+    <div class="closeGray" ng-click="closeWin()"></div>
+    <div class="tipCont">
+        您正在将您的看单&nbsp;&nbsp;“{{mname}}”&nbsp;&nbsp;分享为“行业看单”?
+    </div>
+    <div class="openBtnGroup clearfix">
+        <div class="btn8 mr20" ng-click="closeWin()">取消</div>
+        <div class="btn8" ng-click="doShare()">确定</div>
+    </div>
+    <div class="descWrap">
+		<p class="pTitle">分享“行业看单模板”后:</p>
+		<ol class="olList normal mb20">
+			<li>您的看单将会展示在行业看单模版。</li>
+			<li>该操作不会透漏您的数据隐私,数据展示时,会随机乘于一个阿尔法值,该值范围为0.01到100。</li>
+		</ol>
+	</div>
+</div>
+<div class="openTipWin" ng-if="winFlag==5">
+    <div class="closeGray" ng-click="closeWin()"></div>
+    <div class="tipCont">
+        <div class="finshedWrap" style="margin:0px;">
+			<span class="finshedIcon"></span>
+			<span class="finshLabel">已成功加入我的看单</span>
+		</div>
+    </div>
+    <div class="openBtnGroup clearfix" style="width:220px;">
+        <div class="btn3 lh30 mr20" ng-click="lookMyMenu(2)">查看我的看单</div>
+        <div class="btn8" ng-click="closeWin(1)" style="width:100px;">返回到分享页</div>
+    </div>
+    <div class="descWrap">
+		<p class="pTitle">该操作会自动帮你添加{{getEventTypeCount(currentMenu.templates)}}</p>
+		<ol class="olList mb20">
+			<li ng-repeat="temp in currentMenu.templates track by $index">{{temp.name}}</li>
+		</ol>
+	</div>
+</div>
+<div class="openTipWin" ng-if="winFlag==6"> 
+    <div class="closeGray" ng-click="closeWin()"></div>
+    <div class="tipCont" style="text-align: left;padding-bottom: 30px;">
+        <p>请选择看单类型:</p>
+        <div class="customType">
+        	<div class="iconBtn" ng-class="{'active':customTypeFlag==1}" ng-click="changeCustomFlag(1)">
+		    	<span class="customEventIcon"></span>事件
+		    </div>
+        	<div class="iconBtn" ng-class="{'active':customTypeFlag==2}" ng-click="changeCustomFlag(2)">
+		    	<span class="customRetentionIcon"></span>留存
+		    </div>
+		    <div class="iconBtn" ng-class="{'active':customTypeFlag==3}" ng-click="changeCustomFlag(3)">
+		    	<span class="customFunnelIcon"></span>漏斗
+		    </div>
+        </div>
+        <div style="margin-bottom: 40px;">
+        	<select-list meau-info="typeList" meau-id="typeId" meau-data="typeinit" meau-name="typeInitname" meau-refresh="typef5" style="width:230px;"></select-list>
+        </div>
+        <div class="btn3 lh30 oneCenter" ng-click="addReport()">确定</div>
+    </div>
+</div>
+
+<custom-event type="currentTemplate.menuType" event-list="eventList" old-info="currentTemplate.jsonCondition" ng-if="showEditEvent"></custom-event>
+<div class="leftTipsSlider" ng-class="{'sliderSw1':isdetail}" stop-event>
+	    <div class="slideHeader" style="height: 44px;line-height: 44px;">
+	        {{custitle}}分析事件埋点及规则
+	        <div class="whiteClose" ng-click="hideDetail()"></div>
+	    </div>
+	    <div style="height:93%;overflow-y: auto;">
+		    <div ng-if="detailInfo.conversion" style="margin-left: 28px;margin-top: 20px;">
+		    	<h3>转化有效期:{{detailInfo.conversion}}</h3>
+		    </div>
+		    <div class="spetableList ml30 mr5" ng-repeat="detail in detailInfo.data track by $index">
+		        <div class="mt20 mb10"><h3>{{detail.name}}</h3></div>
+		        <table>
+		            <tr ng-if="detail.name!='分组查看维度'">
+		                <th ng-repeat="title in detail.key track by $index">
+		                    {{title}}
+		                </th>
+		            </tr>
+		            <tr ng-repeat="info in detail.value track by $index">
+		                <td ng-repeat="col in detail.key track by $index">
+		                      {{info[$index]}}
+		                </td>
+		            </tr>
+		        </table>
+		    </div>
+    	</div>
+</div>
\ No newline at end of file
diff --git a/src/main/websrc/template/collect/eventstats.html b/src/main/websrc/template/collect/eventstats.html
new file mode 100644
index 0000000..3e414ce
--- /dev/null
+++ b/src/main/websrc/template/collect/eventstats.html
@@ -0,0 +1,312 @@
+<div class="p" ng-show="defineList.length>0 || addFirst">
+	<div class="conditionBox clearfix p pb20">
+		<div class="left">
+			<div class="selList" ng-class="{'active':selme,'noright':hasEditPower()}" ng-click="selme=!selme;" ng-mouseleave="selme=false;">
+			  	<span ng-if="(currentDefine.id || currentDefine.id==0 || !showEventWin) && !showTempLook">{{define.name}}</span>
+			  	<span class="ckhand dark" ng-if="(!currentDefine.id && currentDefine.id!=0 && showEventWin) || showTempLook">{{addTitName}}</span>
+			  	<div class="arrowIcon"></div>
+			  	<div class="optionList even" ng-show="selme"  style="width:320px;z-index:7;">
+		  			<dl class="dlOperTitle bbb" ng-if="hasEditPower()">
+		  				<dd ng-click="addComplexEvent(0)" ng-class="{'active':isShowCache}">{{addTitName}}</dd>
+		  			</dl>
+			  		<div ng-show="defineList.length>5" class="searchWrap ml10 searchSpec clearfix" style="float:none;width:300px;" stop-event>
+				        <input type="text" class="searchIpt selectIpt" style="width:300px;" ng-model="seatxt" placeholder="关键字搜索">
+				    </div>
+				    <ul>
+			            <li ng-repeat="m in defineList | filter:{'name':seatxt} track by $index" ng-click="clickDefine(m)" ng-class="{'active':m.id == define.id && !isShowCache}" title="{{m.name}}" class="p">
+			              {{m.name}}<span class="delIcon s1" ng-click="deleteDefine(m)" stop-event  ng-if="hasEditPower()"></span>
+			            </li>
+			        </ul>
+			  	</div>
+			</div>
+			<div class="btn8 dark btnblock btnNo" ng-class="{'active':currentDefine.id && showEventWin,'dis':(!define.id && !isShowCache) || (!isEditInfo && !isShowCache)}" ng-click="addComplexEvent(1,(!currentDefine.id && currentDefine.id!=0 && showEventWin) || showTempLook)"  ng-show="hasEditPower()">编辑</div>
+		</div>
+		
+		<div class="right">
+			<!-- range-days="7" -->
+			<my-datepicker class="dateRange rightDate" init-day="date"  operation-sel="define.id>0 || isShowCache"><span>{{datestr}}</span></my-datepicker>
+		</div>
+		<div class="conditionWin eventBox" ng-show="showEventWin" ng-class="{'edit':currentDefine.id}" id="evtBox" style="z-index:6;">
+			<div class="sanicon"></div>
+			<span style="position: absolute;left:40px;top:25px;">显示</span> 
+			<div class="p mb20" ng-repeat="ex in currentEvent track by $index" ng-show="ex.show!=false">
+			    <span class="ml27"></span>
+			    <span class="changeIcon" ng-click="changeForm(ex)"></span>
+			    <span style="position:relative;">
+					<input type="text" class="iptform" id="expression_{{$index}}" ng-model="ex.expressionName" style="width:500px;" ng-click="changeExpression(ex,$index)" stop-event ng-show="ex.expression" ng-style="{'border-color': ex.error || ex.extip?'#e74646':''}" ng-mousedown="getMouseXY($event)" ng-keydown="watchKey(ex,$event)">
+					<span class="error" style="position: absolute;left: 0px;top:27px;">{{ex.extip}}</span>
+				</span>
+				<select-t-list meau-info="eventList" meau-id2="ex.eventId" meau-data="ex.eventInit" meau-name="eventinitname"  meau-typekey="['nature','virtual']" meau-typename="['自然事件','虚拟事件']" keyid="id" keyname="name" meau-refresh="ex.evtrefresh" ng-show="!ex.expression" meau-red="ex.eventerror"></select-t-list>
+				<select-list meau-info="ex.epropertyList" meau-id2="ex.propertyId" meau-data="ex.propertyinit" meau-name="ex.propertyinitname"  keyid="id" keyname="name" meau-refresh="ex.prorefresh" ng-show="!ex.expression && ex.propertyShow" meau-red="ex.proerror"></select-list>
+				<select-list meau-info="ex.targetList" meau-id2="ex.targetId" meau-data="ex.targetinit" meau-name="ex.targetinitname"  keyid="id" keyname="name" meau-refresh="ex.tarrefresh" ng-show="!ex.expression && ex.targetShow" meau-red="ex.tarerror"></select-list>
+				<span class="ml20 mr5">命名为</span>
+				<span style="position:relative;">
+					<input type="text" class="iptform" ng-model="ex.name" placeholder="请输入指标的名称" ng-style="{'border-color': ex.nameerror?'#e74646':''}">
+					<span class="error" style="position: absolute;left: 0px;top:27px;">{{ex.tip.name.txt}}</span>
+				</span>
+				<span class="ml20 mr5" ng-show="ex.expression">以</span>
+				<select-list ng-show="ex.expression" meau-info="formatList" meau-id2="ex.format_id" meau-data="ex.formatInit" meau-name="formatinitname" keyid="format" keyname="name" style="width:80px;" meau-refresh="evtrefresh"></select-list>
+				<span class="ml5" ng-show="ex.expression">显示</span>
+				<span class="deleteIcon" ng-show="getEventNum()>1" ng-click="removeEvent(ex)"></span>
+			</div>
+			<div id="optionList" class="optionList" style="width:200px;min-width:200px;max-width:200px;" ng-show="showProList && epropertyList.length>0">
+				<ul>
+					<div ng-show="epropertyList.length>5" class="searchWrap" style="width: 100%;margin-top:5px;margin-bottom: 5px;float:left;box-sizing: border-box;padding:0px 5px;" stop-event>
+			          <input type="text" class="searchIpt selectIpt" ng-model="filterSearch" placeholder="关键字搜索" style="width:100%;border:1px solid #c9c9c9;">
+		        	</div>
+		        	<div ng-repeat="type in typeKey track by $index" ng-class="{'border':$index>0 && haslist(type)}" ng-show="haslist(type) && typeKey.length>0">
+			        	<div class="liTypeTitle" ng-if="typeName[$index]!='' && ((virtual==type || nature==type) || !filterSearch)">{{typeName[$index]}}</div>
+						<li ng-repeat="event in epropertyList | filter:{'name':filterSearch}" ng-click="getProperty(event)" ng-if="event.type == type || event.dimensionType == type" ng-class="{'active':$index==eventIndex}">{{event.name}}</li>
+					</div>
+					<li ng-repeat="event in epropertyList | filter:{'name':filterSearch}" ng-click="getProperty(event)" ng-style="{'border-bottom': event.border?'1px solid #dcdcdc':'','height':'35px'}" ng-show="event.type!='nature' && event.type!='virtual'" ng-class="{'active':$index==eventIndex}">{{event.name}}</li>
+				</ul>
+			</div>
+			<div class="addAttrBtn" style="border-bottom: 1px solid #dcdcdc;padding-left: 40px;padding-bottom: 20px;" ng-class="{'dis':getEventNum()>=10}">
+			    <span ng-click="addEvents()"><span class="addAttrIcon"></span><span class="ckhand">新增</span></span>
+			</div>
+			<div class="p mb20 mt20" style="border-bottom: 1px solid #dcdcdc;padding-left: 40px;padding-bottom: 20px;">
+			    <span class="mr10">按</span>
+			    <input type="text" class="iptform" value="总体" disabled="true">
+			    <span class="ml10">查看</span>
+			    <span class="newaddIcon" ng-class="{'adddis':getGroupByNum()>=3}" ng-click="addGroupby()"></span>
+				<div class="p mb20 mt20" ng-repeat="gby in groupbys track by $index" ng-show="gby.show!=false">
+					<span class="mr10">按</span>
+					<select-t-list meau-info="dimensionList" meau-id2="gby.dimensionId" meau-name="dimensionname"  meau-typekey="['event','profile']" meau-typename="['事件属性','用户属性']" meau-data="gby.dimenInit" meau-type="gby.type" keyid="param" keyname="alias" meau-red="gby.groerror" ></select-t-list>
+					<span class="ml10">查看</span>
+					<span class="deleteIcon" ng-click="removeGroupby(gby)"></span>
+				</div>
+			</div>
+			<div style="padding-bottom: 20px;" ng-class="{'conditionEventItem':event.params && getEventParamsNum(event)>5 && showFlow}">
+				<div class="profileItemWrap p" ng-mouseleave="changeFlow()">
+	                <div class="operInfo" style="bottom:35px;" ng-show="event.params && getEventParamsNum(event)>1">
+	                    <div class="operBtn" ng-click="changeRel()">{{eventRel}}</div>
+	                </div>
+	                <div class="profileItem" ng-repeat="item in event.params track by $index" ng-show="item.show!=false">
+	                    <profile-item info-list="event.paramsList" item-info="item" item-type="event" item-event="eventId" common="true" ng-click="changeFlow(1)"></profile-item>
+	                    <span class="deleteIcon" ng-click="removeEventParams(event,item)"></span>
+	                </div>
+		            <div class="addAttrBtn" ng-class="{'dis':getEventParamsNum(event)>=maxparams}">
+		                <span ng-click="addEventParams(event)"><span class="addAttrIcon"></span><span class="ckhand">添加事件属性筛选</span></span>
+		            </div>
+	            </div>
+		        
+			</div>
+            <div class="conditionBoxBottom">
+                <div class="left mt20" ng-show="!isShowCache && currentDefine.id">
+					<span style="margin-left: -20px;margin-right:10px;">事件分析名称</span>  
+					<input type="text" class="iptform" ng-model="ename" placeholder="请输入事件分析名称" ng-style="{'border-color': enameerror?'#e74646':''}">              	
+                </div>
+            	<div class="right mt50">
+            		<span class="ckhand mr10" ng-click="initCondition()">重置条件</span>
+            		<div class="btnMoreGroup">
+            			<div class="btn btnblock ml10 mybtn h30" ng-click="closeAddWin()">关闭</div>
+            		</div>
+            		<span class="btnMoreGroup" ng-show="!currentDefine.id">
+            			<div class="btn btnblock mr10 mybtn h30" ng-click="nameWin()">保存</div>
+            			<div class="btn3 btnblock mybtn h30" ng-click="lookReport()">查看</div>
+            		</span>
+            		<div class="btnMoreGroup" ng-show="currentDefine.id" ng-mouseenter="bgroup=true" ng-mouseleave="bgroup=false;">
+            			<div class="primaryBtn" ng-click="save()">保存</div>
+            			<div class="primarySelBtn"></div>
+            			<ul class="btnMenu" ng-show="bgroup && event.id">
+            				<li ng-click="save()">保存</li>
+            				<li ng-click="save(2)">另存为</li>
+            			</ul>
+            		</div>
+            	</div>
+            </div>
+		</div>
+	</div>
+	<div class="conditionAlpha" ng-show="showEventWin" ng-click="closeAddWin()"></div>
+
+	<div class="chartWrap bar one clearfix" style="margin-top: 0px;"  ng-show="defineList.length>0 || showTempLook">
+	    <div class="chartWrapItem titleChart">
+	    	<div class="chartModule">
+				<span>{{getTrendTitle()}}</span>
+				<div class="right p mr10" style="z-index: 1;">
+				    <select-list style="margin-top: 8px;height: 31px;line-height: 31px;margin-right: 0px;width:80px;background-color:#ffffff;color: #999;" meau-info="chartList" meau-id="chartTypeId" meau-spe="group_List.length == 0" meau-data="chartTypeInit" operation-sel="!eventChartLoading"></select-list>
+				</div>
+				<div class="right p mr10" style="z-index: 1;" ng-mouseleave="showDrop=false" >
+					<div class="btn" style="margin-top: 8px;height: 31px;line-height: 31px;margin-right: 0px;color: #999;background-color: #ffffff;" ng-click="showDrop=true;" ng-class="{'active':showDrop}">
+					<span class="mr10">显示设置</span>
+					<div class="arrowIcon" style="margin-right:0px;"></div>
+					</div>
+					<div class="rateWrap" ng-show="showDrop">
+						<ul class="titWrap">
+							<li ng-class="{'active':rateFlag==1}" ng-click="rateFlag=1">显示指标</li>
+							<li ng-class="{'active':rateFlag==2}" ng-click="rateFlag=2">显示分组</li>
+						</ul>
+						<ul class="rateInfo" ng-show="rateFlag==1">
+							<li ng-repeat="rate in rateList track  by $index" ng-click="changeRate(rate)" ng-class="{'dis':!canAdd(1,rate)}">
+								<span class="checkbox" ng-class="{'active':rateListed.indexOf(rate)>-1}"></span>{{substrName(rate)}}
+							</li>
+						</ul>
+						<ul class="rateInfo" ng-show="rateFlag==2">
+						    <li ng-show="group_List.length>1 && chartType=='pie'">
+						      <span  ng-click="checkAll()">
+						        <span class="checkbox" ng-class="{'active':ischeckall}" style="margin-right: 6px;"></span>全选
+						      </span>
+						    </li>
+							<li ng-if="group_List.length==0">当前没有分组</li>
+							<li ng-repeat="group in group_List track  by $index" ng-click="changeGroup(group)" ng-class="{'dis':!canAdd(2,group)}" title="{{group}}">
+								<span class="checkbox" ng-class="{'active':grouped_List.indexOf(group)>-1}"></span>{{group}}
+							</li>
+						</ul>
+					</div>
+				</div>
+				<div class="right rigthM">
+					<ul class="btnGroup">
+						<!-- <li ng-class="{'active':timeFlag=='hour','dis':disTimeFlag.indexOf('hour')>-1}" ng-click="changeTimeFlag('hour')">时</li> -->
+						<li ng-class="{'active':timeFlag=='day','dis':disTimeFlag.indexOf('day')>-1}" ng-click="changeTimeFlag('day')">天</li>
+						<li ng-class="{'active':timeFlag=='week','dis':disTimeFlag.indexOf('week')>-1}" ng-click="changeTimeFlag('week')">周</li>
+						<li ng-class="{'active':timeFlag=='month','dis':disTimeFlag.indexOf('month')>-1}" ng-click="changeTimeFlag('month')">月</li>
+					</ul>
+				</div>
+			</div>
+	        <div class="chartItem p">
+	        	<div ng-class="{'lengedChart':dimenId && dimenId!='-all'}">
+	        		<min-chart chart-data="myChartData" chart-tp="chartType" chart-config="eventChartConfig" chart-loading="eventChartLoading" chart-resize="yes"></min-chart>
+	        		<div style="color:#999;font-size: 13px;" ng-if="chartType=='pie'">
+	        			<span ng-show="!eventChartLoading" ng-repeat="key in myChartData.key" ng-style="{'padding-left':(myChartData.key.length>1 && $index==0?panelw/4:panelw/2-($index==1?getwidth(myChartData.key[0])/2:0))-getwidth(key)/2+'px'}">{{substrName(key)}}</span>
+	        		</div>
+	        	</div>
+	        </div>
+	    </div>
+	</div>
+
+	<div class="chartWrap clearfix" ng-show="defineList.length>0 || showTempLook">
+	    <div class="chartWrapItem grayhm titleChart nothborder">
+	    	<div class="chartModule">
+				<span>{{getTrendTitle()}}详情</span>
+				<export-button export-condition="myChartDataCondition" ng-if="infoList.length>0 && !istranfer"></export-button>
+				<div class="right mr10" style="padding-top: 10px;" ng-show="infoList.length>0">
+					<ul class="btnGroup">
+						<li ng-class="{'active':istranfer}" ng-click="changeFlag(1)">转换</li>
+						<li ng-class="{'active':ispercent}" ng-click="changeFlag(2)" ng-if="group_List.length>0 || istranfer">
+							<span ng-if="istranfer">环比</span>
+							<span ng-if="!istranfer">占比</span>
+						</li>
+					</ul>
+				</div>
+				<div class="eptWrap right mt10 big" ng-show="!istranfer && !isShowCache && define.id && condList.length>2" ng-click="showOrderList()">
+					<span class="orderIcon"></span>
+				</div>
+			    <div class="right condiTitleWrap" style="padding-top: 9px;" ng-show="infoList.length>0 && !istranfer">
+			    	<span class="hand" ng-click="isshowTotal = !isshowTotal">
+			    		<span class="checkbox mr5" ng-class="{'active':isshowTotal}"></span>
+			    		<span class="label">显示合计</span>
+			    	</span>
+			    </div>
+			</div>
+	        <is-loading ng-if="chartListLoading"></is-loading>
+	        <div class="tableList yeswrap hm-scroll" ng-show="!chartListLoading" style="max-height: inherit;">
+	            <table title-name="listname"  fix-firtd="1" fix-list="flipPage" ng-show="infoList.length>0">
+	            	<thead>
+		                <tr>
+		                	<th>
+		                		{{listname[0]}}
+		                    	<span class="sortWrap" ng-click="reverse1=!reverse1;order(listkey[0], reverse1,0)">
+		                    		<span class="ascIcon" ng-class="{'active':sortCol1==listkey[0] && !reverse1}"></span>
+		                    		<span class="descIcon" ng-class="{'active':sortCol1==listkey[0] && reverse1}"></span>
+		                    	</span>
+		                	</th>
+		                    <th ng-repeat="title in listname track by $index" ng-show="$index>0">
+		                    	{{title}}
+		                    	<span class="sortWrap" ng-click="reverse=!reverse;order(listkey[$index], reverse,$index)">
+		                    		<span class="ascIcon" ng-class="{'active':(sortCol==listkey[$index] || sortCol1==listkey[$index]) && !reverse}"></span>
+		                    		<span class="descIcon" ng-class="{'active':(sortCol==listkey[$index] || sortCol1==listkey[$index]) && reverse}"></span>
+		                    	</span>
+		                    </th>
+		                </tr>
+	                </thead>
+	                <tr ng-repeat="info in totalList track by $index" ng-init="len = totalList.length" ng-if="!istranfer && isshowTotal">
+	                	<td ng-if="$index==0" rowspan="{{len}}" style="background-color: #fff;">{{info[listkey[0]]}}</td>
+	                    <td ng-repeat="col in listkey track by $index" ng-if="$index>0" style="padding-right: 10px;" ng-class="{'txright':($index>grouplen && !istranfer) || ($index > grouplen && istranfer)}">
+	                    	{{info[col] | formatRate:col:trendList.format:info._myzb}}
+	                    	<span ng-if="ispercent && info[percentPre+col]"  ng-class="{false:'red',true:'green'}[info[percentPre+col]>0]"><br/>{{info[percentPre+col] | numFixed}}%</span>
+	                    </td>
+	                </tr>
+	                <tr ng-repeat="info in currentDetailList track by $index">
+	                	<td ng-if="info.isrs && !istranfer" rowspan="{{info.rsnum}}" style="background-color: #fff;">{{info[listkey[0]]}}</td>
+
+	                	<td ng-if="info.isrs && istranfer" ng-repeat="g in trendList.groupfield track by $index" rowspan="{{info.rsnum}}" style="background-color: #fff;">{{info[listkey[$index]]}}</td>
+
+	                    <td ng-repeat="col in listkey track by $index" ng-if="($index>0 && !istranfer) || (istranfer && $index>=grouplen)" style="padding-right: 10px;" ng-class="{'txright':($index>grouplen && !istranfer) || ($index > grouplen && istranfer)}">
+	                    	{{info[col] | formatRate:col:trendList.format:info._myzb}}
+	                    	<span ng-if="ispercent && info[percentPre+col]" ng-class="{false:'red',true:'green'}[info[percentPre+col]>0]"><br/>{{info[percentPre+col] | numFixed}}%</span>
+	                    </td>
+	                </tr>
+	            </table>
+				<no-data ng-if="infoList.length==0"></no-data>
+	        </div>
+	        <flip-info list-info="pageAllList"  list-refresh="listf5"></flip-info> 
+	    </div>
+	</div>
+</div>
+
+<div ng-show="defineList.length==0 && !addFirst">
+	<div class="nodata">
+		<h5>还未创建事件统计细分</h5>
+	</div>
+	<div class="btn3" style="float:none;width:180px;margin:0 auto;text-align: center;" ng-click="addFirstEvent()" ng-if="hasEditPower()">创建第一个事件统计细分</div>
+	<dl class="tipsList statustip">
+        <dt>1. 什么是“事件”?</dt>
+        <dd>
+        	事件是指用户在使用产品过程中发生的行为,如注册、登录、充值、付款等操作数据。
+        </dd>
+        <dt>2. 怎么使用事件分析?</dt>
+        <dd>TrackingIO通过收集用户事件及对应属性,提供基于事件属性的事件及组合事件运算功能,用不同形式报表展现关注的单个事件或者多个事件经过数学运算后形成的新指标在不同维度的数据趋势。
+        <br/>
+        <br/>
+        事件分析可以帮您回答不同地域的游戏用户充值虚拟金币的金额是多少,不同渠道的游戏用户消费道具的频次是怎样等问题。您可以根据您的产品特性及需求,进行合理配置。</dd>
+    </dl>
+</div>
+
+<div class="openTipWin" ng-show="wantDelete">
+    <div class="closeGray" ng-click="closeWin()"></div>
+    <div class="tipCont">
+       <span ng-show="custommenus.length>0">
+	       报表“{{delDefine.name}}”正在被
+	       <span ng-repeat="custommenu in custommenus" ng-click="gotoCustonMenu(custommenu.id)">
+	       <span class="customname">{{custommenu.name}}</span>
+	       <span ng-show="!$last">、</span></span>
+	       {{custommenus.length}}个看单使用<br/>
+	       删除后对应看单将不会再显示该报表,是否确认删除?
+       </span>
+       <span ng-show="!custommenus">
+	       您正在删除报表“{{delDefine.name}}”,是否确认删除?
+       </span>
+    </div>
+    <div class="openBtnGroup clearfix">
+        <div class="btn8 mr20" ng-click="closeWin()">取消</div>
+        <div class="btn8" ng-click="doDelete()">确定</div>
+    </div>
+</div>
+<div class="openTipWin orderWrap" ng-show="showOrderWin">
+    <div class="closeGray" ng-click="closeOrder()"></div>
+    <div class="tipCont">
+    	<p style="font-size: 14px;">指标顺序调整</p>
+    	<p class="lglabel mb20">拖动指标名称调整顺序,表格内指标将按照调整后顺序显示。</p>
+        <ul class="orderUL">
+        	<li ng-repeat="cond in condList track by cond.id">
+        		<span>第{{cond.indexname}}列</span>
+        		<div class="rate" drag-order drag-id="cond.id" drag-info="{{cond}}">{{cond.name}}</div>
+        	</li>
+        </ul>
+    </div>
+    <div class="openBtnGroup clearfix" style="width: 160px;">
+        <div class="btn8 mr20" ng-click="closeOrder()">取消</div>
+        <div class="btn9" ng-click="okOrderWin()">确定</div>
+    </div>
+</div>
+<div class="openTipWin" ng-show="wantSave"> 
+    <div class="closeGray" ng-click="closeWin(2)"></div>
+    <div class="tipCont" style="text-align: left;">
+        <p class="mb10">请输入事件统计细分名称:</p>
+        <div>
+        	<input type="text" class="iptform" ng-model="ename" style="width:300px;" placeholder="文字限定在20个汉字以内">
+        	<div class="btn5 ml10 btnblock conwidth" ng-click="save(1)">保存</div>
+        </div>
+    </div>
+</div>
+<span id="ruler" style="display: none;"></span>
\ No newline at end of file
diff --git a/src/main/websrc/template/collect/funnel.html b/src/main/websrc/template/collect/funnel.html
new file mode 100644
index 0000000..90e566a
--- /dev/null
+++ b/src/main/websrc/template/collect/funnel.html
@@ -0,0 +1,192 @@
+<div ng-show="(!funnelList || funnelList.length==0) && !addFirst">
+	<div class="nodata">
+		<h5>还没有漏斗</h5>
+	</div>
+	<div class="btn3" style="float:none;width:150px;margin:0 auto;text-align: center;" ng-click="addFirstFunnel()" ng-if="hasEditPower()">创建第一个漏斗</div>
+	<dl class="tipsList statustip">
+        <dt>1. 什么是“漏斗”?</dt>
+        <dd>
+        	漏斗是一种分析产品中一个多步骤的行为过程中每一步的转化情况的模型,它可以分析整体的转化情况,以及每一步具体的转化率。</br/>
+			举例来说,用户首次进入游戏的过程可能包含:打开app,激活账号,loading页面加载完进入游戏。
+        </dd>
+        <dt>2. 怎么使用漏斗分析?</dt>
+        <dd>
+        	通过TrackingIO强大的数据分析,漏斗分析可以帮助解决以下问题:<br/>
+			游戏用户在进入游戏时,流失在哪个步骤。不同渠道的游戏用户在做某个任务时,为什么放弃了。
+		</dd>
+    </dl>
+</div>
+<div ng-show="funnelList.length>0 || addFirst" class="p">
+	<div class="conditionBox clearfix p pb20">
+		<div class="left">
+			<div class="selList" ng-class="{'active':selme,'noright':hasEditPower()}" ng-click="selme=!selme;" ng-mouseleave="selme=false;">
+			  	<span ng-if="currentFunnel.id || currentFunnel.id==0 || !showEventWin">{{funnelInfo.name}}</span>
+			  	<span class="ckhand dark" ng-if="!currentFunnel.id && currentFunnel.id!=0 && showEventWin">新建漏斗</span> 
+			  	<div class="arrowIcon"></div>
+			  	<div class="optionList even" ng-show="selme"  style="width:320px;">
+		  			<dl class="dlOperTitle bbb" ng-if="hasEditPower() && (funnelList.length<limitInfo.dataConversionFunnelNum || limitInfo.dataConversionFunnelNum==-1)">
+		  				<dd ng-click="addFunnel()">新建漏斗</dd>
+		  			</dl>
+			  		<div ng-show="funnelList.length>5" class="searchWrap ml10 searchSpec clearfix" style="float:none;width:300px;" stop-event>
+				        <input type="text" class="searchIpt selectIpt" style="width:300px;" ng-model="seatxt" placeholder="关键字搜索">
+				    </div>
+				    <ul>
+			            <li ng-repeat="m in funnelList | filter:{'name':seatxt} track by $index" ng-click="clickFunnel(m)" ng-class="{'active':m.id == funnelInfo.id}" title="{{m.name}}" class="p">
+			              {{m.name}}<span class="delIcon s1" ng-click="deleteFunnel(m)" stop-event  ng-if="hasEditPower()"></span>
+			            </li>
+			        </ul>
+			  	</div>
+			</div>
+			<div class="btn8 dark btnblock btnNo" ng-class="{'active':isEditInfo==3 && showEventWin,'dis':!funnelInfo.id || isEditInfo==2}" ng-click="addFunnel(1)"  ng-show="hasEditPower()">编辑</div>
+		</div>
+		
+		<div class="right">
+			<!-- <select-t-list meau-info="dimensionList" meau-id="dimensionId" meau-name="dimensionname"  meau-typekey="['whole','usergroup','population','source']" meau-typename="['','用户分群','人口维度','来源维度']" meau-data="dimenInit" meau-refresh="dimenRmd"  operation-sel="funnelInfo.id>0"></select-t-list> -->
+			<select-t-list meau-info="dimensionList" meau-id="dimensionId" meau-name="dimensionname"  meau-typekey="['whole','usergroup','eventlist',null]" meau-typename="['','用户分群','事件属性','用户属性']" meau-data="dimenInit" meau-id2="dimenEventType" meau-refresh="dimenRmd"  operation-sel="funnelInfo.id>0"></select-t-list>
+			<my-datepicker class="dateRange rightDate" init-day="date" range-days2="rangday"  operation-sel="funnelInfo.id>0"><span>{{datestr}}</span></my-datepicker>
+		</div>
+		<div class="conditionWin eventBox" ng-show="showEventWin" ng-class="{'edit':isEditInfo==3}">
+			<div class="sanicon"></div>
+			<div class="funnelWrap"  ng-class="{'max400':getEventNum()>=5}">
+		        <div ng-repeat="event in eventInfo track by $index" ng-show="event.show!=false">
+		            <div class="eventItem clearfix p" ng-style="event.style">
+		                <div class="label txtLabel">第{{event.steps}}步:</div>
+		                <select-list meau-info="eventList" meau-id2="event.eventid" meau-data="event.eventinit" meau-name="eventinitname" class="eventItemsel" keyid="eventName" keyname="eventNameAlias" meau-red="event.nullevent"></select-list>
+
+		                <div class="profileItemWrap p">
+		                    <div class="operInfo" style="bottom:35px;" ng-show="event.params && getEventParamsNum(event)>1">
+		                        <div class="operBtn" ng-click="changeRel(event)">{{event.relation}}</div>
+		                    </div>
+		                    <div class="profileItem" ng-repeat="item in event.params track by $index" ng-show="item.show!=false">
+		                        <profile-item info-list="event.paramsList" item-info="item" item-type="event" item-event="event.event"></profile-item>
+		                        <span class="removeSpan"  ng-click="removeEventParams(event,item)">取消</span>
+		                    </div>
+
+		                    <span class="ml10 addAttrBtn" ng-click="addEventParams(event)" ng-class="{'dis':getEventParamsNum(event)>=3}">
+		                        <span class="addAttrIcon"></span><span class="ckhand">添加事件属性筛选</span>
+		                    </span>
+		                </div>
+		                <span class="delItemIcon right" ng-click="removeEvent(event)"></span>
+		            </div>
+		            <div class="relLine"></div>
+		        </div>
+		        <div class="addItemIcon" ng-click="addEvent()" ng-class="{'dis':getEventNum()>=maxStep}" style="margin-left: 15px;"></div>
+		    </div>
+		    <div class="formDetailItem ml15 mt20">
+		        <div class="iptlabel" style="width:120px;">转化有效期<help-tip class="help" style="margin-left: 2px;" name="转化有效期"></help-tip>:</div>
+		        <select-list meau-info="dayList" meau-id="windows" meau-data="windowsinit" style="width:100px;" class="upSList" nosearch="true"></select-list>
+		        <span class="desc">完成转化的时间超过此有效期的,为无效转化,即转化失败(流失)。</span>
+		    </div>
+	        <div class="conditionBoxBottom">
+	        	<div class="right mt20">
+	        		<span class="ckhand mr10" ng-class="{'dis':!canSave()}" ng-click="initCondition()">重置条件</span>
+	        		<span ng-show="!currentFunnel.id">
+	        			<div class="btn btnblock mybtn h30" ng-click="nameWin()" ng-class="{'disable':!canSave()}">保存</div>
+	        			<!-- <div class="btn3 btnblock mybtn h30" ng-click="lookReport()" ng-class="{'disable':!canSave()}">查看</div> -->
+	        		</span>
+	        		<div class="btnMoreGroup" ng-show="currentFunnel.id" ng-mouseenter="bgroup=true" ng-mouseleave="bgroup=false;">
+	        			<div class="primaryBtn" ng-click="save()" ng-class="{'dis':!canSave()}">保存</div>
+	        			<div class="primarySelBtn" ng-class="{'dis':!canSave()}"></div>
+	        			<ul class="btnMenu" ng-show="bgroup && canSave()">
+	        				<li ng-click="save()">保存</li>
+	        				<li ng-click="nameWin(1)">另存为</li>
+	        			</ul>
+	        		</div>
+	        	</div>
+	        </div>
+		</div>
+	</div>
+	<div class="conditionAlpha" ng-show="showEventWin && funnelList.length>0" ng-click="closeAddWin()"></div>
+
+	<div class="chartWrap chart300 one clearfix" style="margin-top: 0px;" ng-show="funnelList.length>0">
+	    <div class="chartWrapItem titleChart">
+	    	<div class="chartModule">
+	    		<span>{{funnelInfo.name}}的漏斗分析</span>
+				<!-- <div class="right rigthM">
+					<select-list meau-info="deviceList" meau-id="deviceId" meau-data="deviceInit" class="whitebg" style="width:100px;"></select-list>
+				</div> -->
+			</div>
+	        <div class="chartItem p">
+	        	<div  ng-class="{'lengedChart':dimenId && dimenId!='-all'}">
+	        		<min-chart chart-data="chartData" chart-type="funnel" chart-config="chartConfig" chart-loading="chartLoading"></min-chart>
+	        	</div>
+	            <div class="lengedWrap" ng-show="dimenId && dimenId!='-all'">
+	            	<div class="searchWrap searchSpec clearfix" style="float:none;">
+				        <input type="text" class="searchIpt selectIpt" ng-model="swtxt" placeholder="关键字搜索">
+				    </div>
+				    <ul class="hm-scroll">
+				    	<li ng-repeat="name in lengedNames | filter:swtxt track by $index" ng-click="setFunnelData(name,1)">
+				    		<span class="sign" ng-style="getChartStyle(name)"></span>{{name}}
+				    	</li>
+				    </ul>
+	            </div>
+	        </div>
+	    </div>
+	</div>
+	
+	<div class="chartWrap clearfix" ng-show="funnelList.length>0">
+	    <div class="chartWrapItem nothborder">
+	    	<div class="chartModule">
+				<span>{{funnelInfo.name}}的漏斗分析详情</span>
+				<export-button export-condition="listInfoDataCondition" ng-if="listInfoData.val && listInfoData.val.length>0"></export-button>
+			</div>
+	        <is-loading ng-if="listInfoLoading"></is-loading>
+	        <div class="tableList" ng-show="!listInfoLoading">
+	            <table ng-show="listInfoData.val.length>0">
+	                <tr>
+	                    <th ng-repeat="title in listInfoData.name track by $index">{{title}}</th>
+	                </tr>
+	                <tr ng-repeat="info in listInfoData.val track by $index">
+	                	<td>{{info[listInfoData.columnkey[0]]}}</td>
+	                    <td ng-repeat="col in listInfoData.columnkey track by $index" ng-if="$index>0" ng-class="{'lostinfo':col.indexOf('lost')==-1,'m':listInfoData.columnkey.length>7}">
+	                    	<div ng-if="col.indexOf('lost')==-1">
+	                    		<span class="tabBar">
+	                    			<div class="active" style="height:{{info['rate_'+col]}}%"></div>
+	                    		</span>
+	                    		<span style="display: inline-block;">
+		                    		{{info[col]}}
+		                    		<p class="n">{{info['rate_'+col]}}%</p>
+	                    		</span>
+	                    	</div>
+	                    	<div ng-if="col.indexOf('lost')>-1" class="lost">
+	                    		{{info[col]}}
+	                    		<p>{{info['rate_' + col]}}%</p>
+	                    	</div>
+	                    </td>
+	                </tr>
+	            </table>
+				<no-data ng-if="!listInfoData.val || listInfoData.val.length==0"></no-data>
+	        </div>
+	    </div>
+	</div>
+</div>
+<div class="openTipWin" ng-show="wantDelete">
+    <div class="closeGray" ng-click="closeWin()"></div>
+    <div class="tipCont">
+    	<span ng-show="custommenus.length>0">
+	       报表“{{delDefine.name}}”正在被
+	       <span ng-repeat="custommenu in custommenus" ng-click="gotoCustonMenu(custommenu.id)">
+	       <span class="customname">{{custommenu.name}}</span>
+	       <span ng-show="!$last">、</span></span>
+	       {{custommenus.length}}个看单使用<br/>
+	       删除后对应看单将不会再显示该报表,是否确认删除?
+       </span>
+       <span ng-show="!custommenus">
+	       您正在删除报表“{{delDefine.name}}”,是否确认删除?
+       </span>
+    </div>
+    <div class="openBtnGroup clearfix">
+        <div class="btn8 mr20" ng-click="closeWin()">取消</div>
+        <div class="btn8" ng-click="doDelete()">确定</div>
+    </div>
+</div>
+<div class="openTipWin" ng-show="wantSave"> 
+    <div class="closeGray" ng-click="closeWin(2)"></div>
+    <div class="tipCont" style="text-align: left;">
+        <p class="mb10">请输入漏斗名称:</p>
+        <div>
+        	<input type="text" class="iptform" ng-model="ename" style="width:300px;" placeholder="文字限定在20个汉字以内">
+        	<div class="btn5 ml10 btnblock conwidth" ng-click="save(1)">保存</div>
+        </div>
+    </div>
+</div>
\ No newline at end of file
diff --git a/src/main/websrc/template/common/channel.html b/src/main/websrc/template/common/channel.html
new file mode 100644
index 0000000..2727225
--- /dev/null
+++ b/src/main/websrc/template/common/channel.html
@@ -0,0 +1,30 @@
+<div class="popchannellist" ng-show="popchannellist" ng-class="{'doshow':popchannellist}" stop-event>
+    <div class="title">
+        <span ng-click="changeType('ry_coop')" ng-class="{'active': channType==='ry_coop'}" ng-if="!type">常规渠道</span>
+
+        <span ng-click="changeType(null)" ng-class="{'active': channType===null}">自定义渠道</span>
+
+        <span ng-click="changeType('ry_bd')" ng-class="{'active': channType==='ry_bd'}" ng-if="!type">SEM渠道</span>
+       
+        <div class="right" ng-click="popchannellist = false;"></div>
+    </div>
+    <div class="subtitle">
+        <input type="text" class="iptform" ng-model="channelfilter" style="width:80px;height:25px;" placeholder="搜索关键字" />
+        <span ng-click="letter='abcdefg'" ng-class="{active:letter=='abcdefg'}" class="ml10">A~G</span>
+        <span ng-click="letter='hijklmn'" ng-class="{active:letter=='hijklmn'}">H~N</span>
+        <span ng-click="letter='opqrst'" ng-class="{active:letter=='opqrst'}">O~T</span>
+        <span ng-click="letter='uvwxyz'" ng-class="{active:letter=='uvwxyz'}">U~Z</span>
+        <span ng-click="letter='0123456789'" ng-class="{active:letter=='0123456789'}">0~9</span>
+        <span ng-show="channType!='ry_bd' && appplattype==2" class="sline ml10">
+            <span ng-click="category='ADVERTISING'" ng-class="{active:category == 'ADVERTISING'}">分链接</span>
+            <span ng-click="category='APPMARKET'" ng-class="{active:category == 'APPMARKET'}">分包</span>
+        </span>
+        <em class="ckhand right" ng-if="(channType===null || !channType) && isSuper" ng-click="goChannel()">
+            渠道管理
+        </em>
+    </div>
+    
+    <ul class="poplist">
+        <li ng-class="{'active':curchid == channel.id}" title="{{channel.name}}" ng-repeat="channel in curChannelList   | charfilter:letter | filter:{name:channelfilter} | orderBy:'firstchar' track by $index" ng-click="clickChannel(channel)">{{channel.name}}</li>
+    </ul>
+</div>
\ No newline at end of file
diff --git a/src/main/websrc/template/common/chart.html b/src/main/websrc/template/common/chart.html
new file mode 100644
index 0000000..d2b386e
--- /dev/null
+++ b/src/main/websrc/template/common/chart.html
@@ -0,0 +1,40 @@
+<div style="width:100%;" class="clearfix">
+	<is-loading ng-if="chartLoading"></is-loading>
+	<div class="nodataTxt" ng-show="!chartLoading && chartData.val.length==0" style="height:308px;">NO DATA</div>
+	<div class="chartInfo" ng-show="!chartLoading && chartData.val.length>0 && isChart"></div>
+	<div class="tableList chartList hm-scroll" ng-if="!chartLoading && chartData.val.length>0 && !isChart">
+     	<table fix-header title-name="chartData.name">
+     		<thead>
+     			<tr>
+     				<!-- <th>序号</th> -->
+     				<th>{{chartData.column[0]}}</th>
+     				<th ng-repeat="title in chartData.name track by $index">
+     					{{title}}
+						<!-- <span class="sortWrap" ng-click="reverse=!reverse;order(listInfo.columnkey[$index], reverse)">
+                    		<span class="ascIcon" ng-class="{'active':sortCol==listInfo.columnkey[$index] && !reverse}"></span>
+                    		<span class="descIcon" ng-class="{'active':sortCol==listInfo.columnkey[$index] && reverse}"></span>
+                    	</span> -->
+     				</th>
+     			</tr>
+     		</thead>
+     		<tbody>
+     			<tr ng-repeat="k in chartData.key track by $index">
+     				<!-- <td>{{$index+1}}</td> -->
+     				<td>{{k}}</td>
+                    <td ng-repeat="col in chartData.name track by $index">{{chartData.val[$index][$parent.$index]}}</td>
+                </tr>
+     		</tbody>
+     	</table>
+    </div>
+	<div class="eptWrapGroup clearfix" style="margin-right: 0px;" ng-if="!chartLoading && chartData.val.length>0 && chartCondition">
+		<div class="eptWrap lc" ng-click="changeChart(true)" ng-class="{'active':isChart}">
+			<span class="eptChart"></span>
+		</div>
+		<div class="eptWrap rc" ng-click="changeChart(false)" ng-class="{'active':!isChart}">
+			<span class="eptList"></span>
+		</div>
+		<div class="eptWrap ml10" ng-click="exportData()" ng-if="iscanExport">
+			<span class="eptOut"></span>
+		</div>
+	</div>
+</div>
diff --git a/src/main/websrc/template/common/custom.html b/src/main/websrc/template/common/custom.html
new file mode 100644
index 0000000..a47d9bc
--- /dev/null
+++ b/src/main/websrc/template/common/custom.html
@@ -0,0 +1,93 @@
+<div class="customBigWin">
+    <div class="conditionWin eventBox" style="top:0px;" ng-if="type=='eventstats'">
+        <div class="conditionItem">
+            <span>展示事件:</span>
+            <select-list meau-info="eventList" meau-id="eventId" meau-data="eventInit" meau-name="eventinitname"  keyid="eventName" keyname="eventNameAlias" meau-refresh="evtrefresh" meau-red="evnullevent"></select-list>
+            <span ng-show="event.id">
+                <span class="ml20">展示属性:</span>
+                <select-t-list meau-info="propertyList" meau-id="propertyId" meau-data="propertyInit" keyid="attr" keyname="attrAlias" meau-refresh="prorefresh" meau-name="properinitname" meau-typekey="['default','custom']" meau-typename="['默认属性','']" meau-red="evnullevent"></select-t-list>
+            </span>
+            <select-list meau-info="sumtypeList" meau-id="sumtypeId" meau-data="sumtypeInit" keyid="attr" keyname="attrAlias" meau-name="suminitname" ng-show="event.second" meau-red="evnullevent"></select-list>
+        </div>
+        <div style="padding-bottom: 20px;" ng-class="{'conditionEventItem':event.params && getEventParamsNum(event)>5}">
+            <div class="profileItemWrap p">
+                <div class="operInfo" style="bottom:35px;" ng-show="event.params && getEventParamsNum(event)>1">
+                    <div class="operBtn" ng-click="changeRel(event)">{{event.relation}}</div>
+                </div>
+
+                <div class="profileItem" ng-repeat="item in event.params track by $index" ng-show="item.show!=false">
+                    <profile-item info-list="event.paramsList" item-info="item" item-type="event" item-event="eventId"></profile-item>
+                    <span class="removeSpan"  ng-click="removeEventParams(event,item)">取消</span>
+                </div>
+                <div class="addAttrBtn ml10" ng-click="addEventParams(event)"  ng-class="{'dis':getEventParamsNum(event)>=3}">
+                    <span class="addAttrIcon"></span><span class="ckhand">添加事件属性筛选</span>
+                </div>
+            </div>
+            
+        </div>
+        <div class="conditionBoxBottom">
+            <div class="right mt20">
+                <div class="btn3 btnblock mr10 mybtn h30" ng-click="eventSave()">保存</div>
+            </div>
+        </div>
+    </div>
+
+    <div class="conditionWin eventBox" ng-if="type=='retention'">
+        <div class="funnelWrap clearfix" ng-repeat="event in eventInfo track by $index" ng-class="{'last':$index>0}">
+            <div class="eventItem clearfix p" ng-style="event.style">
+                <div class="label txtLabel" ng-if="$index==0">初始行为:</div>
+                <div class="label txtLabel" ng-if="$index==1">回访行为:</div>
+                <select-list meau-info="eventList" meau-id2="event.eventid" meau-data="event.eventinit" meau-name="event.eventinitname" class="eventItemsel" keyid="eventName" keyname="eventNameAlias" meau-red="event.nullevent"></select-list>
+
+                <div class="profileItemWrap p">
+                    <div class="operInfo" style="bottom:35px;" ng-show="event.params && getEventParamsNum(event)>1">
+                        <div class="operBtn" ng-click="changeRel(event)">{{event.relation}}</div>
+                    </div>
+                    <div class="profileItem" ng-repeat="item in event.params track by $index" ng-show="item.show!=false">
+                        <profile-item info-list="event.paramsList" item-info="item" item-type="event" item-event="event.event"></profile-item>
+                        <span class="removeSpan"  ng-click="removeEventParams(event,item)">取消</span>
+                    </div>
+                    <span class="ml10 addAttrBtn" ng-click="addEventParams(event)" ng-class="{'dis':getEventParamsNum(event)>=3}" style="display: inline-block;">
+                        <span class="addAttrIcon"></span><span class="ckhand">添加事件属性筛选</span>
+                    </span>
+                </div>
+            </div>
+        </div>
+        <div class="conditionBoxBottom">
+            <div class="right mt20">
+                <div class="btn3 btnblock mr10 mybtn h30" ng-click="okSave()">保存</div>
+            </div>
+        </div>
+    </div>
+
+    <div class="conditionWin eventBox" ng-if="type=='funnel'">
+        <div class="funnelWrap" ng-class="{'max400':eventInfo.length>=5}">
+            <div ng-repeat="event in eventInfo track by $index" ng-show="event.show!=false">
+                <div class="eventItem clearfix p" ng-style="event.style">
+                    <div class="label txtLabel">第{{event.steps}}步:</div>
+                    <select-list meau-info="eventList" meau-id2="event.eventid" meau-data="event.eventinit" meau-name="event.eventinitname" class="eventItemsel" keyid="eventName" keyname="eventNameAlias" meau-red="event.nullevent"></select-list>
+
+                    <div class="profileItemWrap p">
+                        <div class="operInfo" style="bottom:35px;" ng-show="event.params && getEventParamsNum(event)>1">
+                            <div class="operBtn" ng-click="changeRel(event)">{{event.relation}}</div>
+                        </div>
+                        <div class="profileItem" ng-repeat="item in event.params track by $index" ng-show="item.show!=false">
+                            <profile-item info-list="event.paramsList" item-info="item" item-type="event" item-event="event.event"></profile-item>
+                            <span class="removeSpan"  ng-click="removeEventParams(event,item)">取消</span>
+                        </div>
+
+                        <span class="ml10 addAttrBtn" ng-click="addEventParams(event)" ng-class="{'dis':getEventParamsNum(event)>=3}">
+                            <span class="addAttrIcon"></span><span class="ckhand">添加事件属性筛选</span>
+                        </span>
+                    </div>
+                    <span class="delItemIcon right" ng-click="removeEvent(event)"></span>
+                </div>
+            </div>
+        </div>
+         <div class="conditionBoxBottom">
+            <div class="right mt20">
+                <div class="btn3 btnblock mr10 mybtn h30" ng-click="okSave()">保存</div>
+            </div>
+        </div>
+    </div>
+</div>
\ No newline at end of file
diff --git a/src/main/websrc/template/common/datemonth.html b/src/main/websrc/template/common/datemonth.html
new file mode 100644
index 0000000..97b8145
--- /dev/null
+++ b/src/main/websrc/template/common/datemonth.html
@@ -0,0 +1,36 @@
+<div stop-event ng-class="{'active':selme}" ng-click="selme=!selme;" ng-mouseleave="selme=false;">
+    <span class="cal" ng-show="options.months>1"></span>
+    <el class="dateletter" stop-event ng-click="showDateTable()" ng-transclude></el>
+    <div class="arrowIcon"></div>
+    <div class="dateWarp" ng-show="showFlag" style="width:220px;" stop-event>
+        <div class="date-single date-month">
+            <div class="date-title">
+                <span class="iconleft left" ng-click="changeYear(-1)"></span>
+                <div class="date-label center-block">{{nowyear}}</div>
+                <span class="iconright right" ng-click="changeYear(1)"></span>
+            </div>
+            <table cellpadding="0" cellspacing="0" class="date-table">
+                <tbody>
+                    <tr ng-repeat="row in monthList">
+                        <td ng-repeat="cell in row">
+                            <a class="pika-button pika-day" 
+                            ng-click="chooseDate(cell)"
+                            ng-class="cellClass(cell)">
+                                {{cell.month}}月
+                            </a>
+                        </td>
+                    </tr>
+                </tbody>
+            </table>
+        </div>
+        <div class='date-footer clearfix' ng-show="options.months>1">
+            <div class="right">
+                <a class="btn3 mr10" ng-click="complete()">确定</a>
+                <a class="btn2" ng-click="cancel()">取消</a>
+            </div>
+        </div>
+        <div class='date-footer clearfix' ng-show="options.months==1">
+            <a class="btn3 mr5" ng-click="cancel()" style="float:right;">关闭</a>
+        </div>
+    </div>
+</div>
\ No newline at end of file
diff --git a/src/main/websrc/template/common/datepicker.html b/src/main/websrc/template/common/datepicker.html
new file mode 100644
index 0000000..ee1d174
--- /dev/null
+++ b/src/main/websrc/template/common/datepicker.html
@@ -0,0 +1,58 @@
+<div stop-event ng-class="{'active':selme && operSel}" ng-click="selme=!selme;showDateTable();" ng-mouseleave="selme=false;">
+    <span class="cal" ng-show="panels.length>1"></span>
+    <el class="dateletter" ng-transclude></el>
+    <div class="arrowIcon"></div>
+    <div class="dateWarp dateTabRange" ng-show="showFlag" ng-style="wstyle" stop-event>
+        <div class="left">
+            <div class="date-single" ng-repeat="p in panels" style="height:270px;">
+                <div class="date-title">
+                    <span class="iconleft left" ng-click="changeMonth($index,p.date,-1)" ng-show="$index===0"></span>
+                    <div class="date-label center-block">{{p.date | date: "yyyy-MM"}}</div>
+                    <span class="iconright right" ng-click="changeMonth($index,p.date,1)" ng-show="$index===panels.length-1"></span>
+                </div>
+                <table cellpadding="0" cellspacing="0" class="date-table">
+                    <thead>
+                        <th scope="col" ng-repeat="week in options.abbrWeeks">{{week}}</th>
+                    </thead>
+                    <tbody>
+                        <tr ng-repeat="row in p.weeks">
+                            <td ng-repeat="cell in row">
+                                <a class="pika-button pika-day" 
+                                ng-click="chooseDate(cell)"
+                                ng-class="cellClass(cell)">
+                                    {{cell.day | date: "d"}}
+                                </a>
+                            </td>
+                        </tr>
+                    </tbody>
+                </table>
+            </div>
+            
+            <div class='date-footer' ng-show="panels.length>1">
+                <span class='date-input'>
+                    <label>日期范围:</label>
+                    <input type="text" ng-model='customStrat' ng-blur='startDate()' readonly="true" style="width:90px;" />
+                    <label>至</label>
+                    <input type="text" ng-model='customEnd' ng-blur='endDate()' readonly="true" style="width:90px;" />
+                </span>
+                <div class="right">
+                    <a class="btn3 mr10" ng-click="complete()">确定</a>
+                    <a class="btn2" ng-click="cancel()">取消</a>
+                </div>
+            </div>
+            <div class='date-footer clearfix' ng-show="panels.length==1">
+                <a class="btn3 mr5" ng-click="cancel()" style="float:right;">关闭</a>
+            </div>
+        </div>
+        <div class="relativeDateWrap" ng-show="panels.length>1">
+            <a class="btn" ng-click="setRelDate('yesday')" ng-class="{'active':selDayflag=='yesday'}">昨日</a>
+            <a class="btn" ng-click="setRelDate('d7')" ng-class="{'active':selDayflag=='d7'}">近7天</a>
+            <a class="btn" ng-click="setRelDate('d14')" ng-class="{'active':selDayflag=='d14'}">近14天</a>
+            <a class="btn" ng-click="setRelDate('d30')" ng-class="{'active':selDayflag=='d30'}">近30天</a>
+            <a class="btn" ng-click="setRelDate('-w1')" ng-class="{'active':selDayflag=='-w1'}">上周</a>
+            <a class="btn" ng-click="setRelDate('w0')" ng-class="{'active':selDayflag=='w0'}">本周</a>
+            <a class="btn" ng-click="setRelDate('-m1')" ng-class="{'active':selDayflag=='-m1'}">上月</a>
+            <a class="btn" ng-click="setRelDate('m0')" ng-class="{'active':selDayflag=='m0'}">本月</a>
+        </div>
+    </div>
+</div>
\ No newline at end of file
diff --git a/src/main/websrc/template/common/daterange.html b/src/main/websrc/template/common/daterange.html
new file mode 100644
index 0000000..bae2669
--- /dev/null
+++ b/src/main/websrc/template/common/daterange.html
@@ -0,0 +1,8 @@
+<div class="timeBtnWrap clearfix">
+    <div class="btn" ng-class="{'active':timeflag=='today'}" ng-click="changeDate('today')" ng-show="noToday!=true">今日</div>
+    <div class="btn" ng-class="{'active':timeflag=='yesday'}" ng-click="changeDate('yesday')">昨日</div>
+    <div class="btn" ng-class="{'active':timeflag=='d7'}" ng-click="changeDate('d7')">近7天</div>
+    <div class="btn" ng-class="{'active':timeflag=='d14'}" ng-click="changeDate('d14')">近14天</div>
+    <div class="btn" ng-class="{'active':timeflag=='d30'}" ng-click="changeDate('d30')">近30天</div>
+    <my-datepicker class="dateRange" ng-show="!nodrange" init-day="mydate" max-day2="maxDay" range-days2="myrangeday"><span>{{datestr}}</span></my-datepicker>
+</div>
\ No newline at end of file
diff --git a/src/main/websrc/template/common/dateweek.html b/src/main/websrc/template/common/dateweek.html
new file mode 100644
index 0000000..cbf0a71
--- /dev/null
+++ b/src/main/websrc/template/common/dateweek.html
@@ -0,0 +1,36 @@
+<div stop-event ng-class="{'active':selme}" ng-click="selme=!selme;" ng-mouseleave="selme=false;">
+    <span class="cal" ng-show="options.weeks>1"></span>
+    <el class="dateletter" stop-event ng-click="showDateTable()" ng-transclude></el>
+    <div class="arrowIcon"></div>
+    <div class="dateWarp" ng-show="showFlag" style="width:370px;" stop-event>
+        <div class="date-single date-week">
+            <div class="date-title">
+                <span class="iconleft left" ng-click="changeYear(-1)"></span>
+                <div class="date-label center-block">{{nowyear}}</div>
+                <span class="iconright right" ng-click="changeYear(1)"></span>
+            </div>
+            <table cellpadding="0" cellspacing="0" class="date-table">
+                <tbody>
+                    <tr ng-repeat="row in weeklist">
+                        <td ng-repeat="cell in row">
+                            <a class="pika-button pika-day" 
+                            ng-click="chooseDate(cell)"
+                            ng-class="cellClass(cell)">
+                                第{{cell.week}}周
+                            </a>
+                        </td>
+                    </tr>
+                </tbody>
+            </table>
+        </div>
+        <div class='date-footer clearfix' ng-show="options.weeks>1">
+            <div class="right">
+                <a class="btn3 mr10" ng-click="complete()">确定</a>
+                <a class="btn2" ng-click="cancel()">取消</a>
+            </div>
+        </div>
+        <div class='date-footer clearfix' ng-show="options.weeks==1">
+            <a class="btn3 mr5" ng-click="cancel()" style="float:right;">关闭</a>
+        </div>
+    </div>
+</div>
\ No newline at end of file
diff --git a/src/main/websrc/template/common/delwin.html b/src/main/websrc/template/common/delwin.html
new file mode 100644
index 0000000..defee77
--- /dev/null
+++ b/src/main/websrc/template/common/delwin.html
@@ -0,0 +1,15 @@
+<div class="dialogWin tipwin" ng-show="status==true">
+    <div class="dialogTitle">
+        <label>提示</label>
+        <div class="closeIcon fr mt10 mr10" ng-click="hideWin()"></div>
+    </div>
+    <div class="dialogContent">
+        <div class="formInfo">
+            <p class="ptip" ng-transclude></p>
+        </div>
+        <div class="btnTwoWrap clearfix">
+            <div class="btn6 mr10" ng-click="hideWin()" style="width:70px;text-align: center;">取消</div>
+            <div class="btn5" ng-click="delfn()" style="width:70px;text-align: center;">{{btnname}}</div>
+        </div>
+    </div>
+</div>
\ No newline at end of file
diff --git a/src/main/websrc/template/common/export.html b/src/main/websrc/template/common/export.html
new file mode 100644
index 0000000..c21fa26
--- /dev/null
+++ b/src/main/websrc/template/common/export.html
@@ -0,0 +1,3 @@
+<div class="eptWrap" ng-click="exportData()" ng-style="style1" ng-hide="iscanExport">
+	<span class="eptOut"></span>
+</div>
diff --git a/src/main/websrc/template/common/flipinfo.html b/src/main/websrc/template/common/flipinfo.html
new file mode 100644
index 0000000..d589911
--- /dev/null
+++ b/src/main/websrc/template/common/flipinfo.html
@@ -0,0 +1,12 @@
+ 
+<div class="filpinfo" ng-show="page.totals > minNum">
+     <select-list meau-info="everyList" meau-id="everyId" meau-data="everyInit" class="upSList" style="z-index: 5;"></select-list>
+     <span class="numlabel ml10">共计{{page.totals}}条</span>
+     <div class="right clearfix">
+        <div class="btn2 big" ng-click="goto(2)" ng-class="{'dis':page.curpage==1}">&lt;</div>
+
+        <span class="numlabel left mr5">第<input type="number" min="1" max="{{page.totalpages}}" class="iptform iptnum" ng-enter="goto(5)" ng-blur="goto(5)" ng-model="gonum" style="width:60px;text-align: center;" />页/{{page.totalpages}}页</span>
+        
+        <div class="btn2 big" ng-click="goto(3)" ng-class="{'dis':page.curpage==page.totalpages || page.totalpages<=1}">&gt;</div> 
+     </div>
+</div>
diff --git a/src/main/websrc/template/common/flipinfody.html b/src/main/websrc/template/common/flipinfody.html
new file mode 100644
index 0000000..88b2c4c
--- /dev/null
+++ b/src/main/websrc/template/common/flipinfody.html
@@ -0,0 +1,12 @@
+ 
+<div class="filpinfo" ng-show="page.totals > minNum">
+     <select-list meau-info="everyList" meau-id="everyId" meau-data="everyInit" class="upSList"></select-list>
+     <span class="numlabel ml10">共计{{page.totals}}条</span>
+     <div class="right clearfix">
+        <div class="btn2 big" ng-click="goto(2)" ng-class="{'dis':page.curpage==1}">&lt;</div>
+
+        <span class="numlabel left mr5">第<input type="number" min="1" max="{{page.totalpages}}" class="iptform iptnum" ng-enter="goto(5)" ng-blur="goto(5)" ng-model="gonum" style="width:60px;text-align: center;" />页/{{page.totalpages}}页</span>
+        
+        <div class="btn2 big" ng-click="goto(3)" ng-class="{'dis':page.curpage==page.totalpages || page.totalpages<=1}">&gt;</div>
+     </div>
+</div>
diff --git a/src/main/websrc/template/home/demolist.html b/src/main/websrc/template/home/demolist.html
new file mode 100644
index 0000000..ea40064
--- /dev/null
+++ b/src/main/websrc/template/home/demolist.html
@@ -0,0 +1,250 @@
+<div class="content padBottom80">
+    <div class="demoListTitle">TrackingIO目前提供了下面五个产品体验Demo,点击即可查看。</div>
+    <div class="demoListNotes">注:Demo数据为非真实业务数据,仅为企业提供可适用的业务场景参考。</div>
+
+    <div class="demoList">电商产品<span><a href ng-click="goDemo('5eb29a7e239537f4bedef93f8289d1c6')">点击查看>></a></span></div>
+    <div class="demoListWarp">
+        <div class="demoListLeft">
+            <li>
+                <p class="num">689573</p>
+                <p class="name">推广点击量</p>
+            </li>
+            <li>
+                <p class="num">84562</p>
+                <p class="name">推广激活量</p>
+            </li>
+            <li>
+                <p class="num">37935</p>
+                <p class="name">自然量激活</p>
+            </li>
+            <li>
+                <p class="num">56723</p>
+                <p class="name">作弊点击量</p>
+            </li>
+            <li>
+                <p class="num">5623</p>
+                <p class="name">作弊激活量</p>
+            </li>
+        </div>
+        <div class="demoListright">
+            <li>
+                <p class="num">21</p>
+                <p class="name">事件种类数</p>
+            </li>
+            <li>
+                <p class="num">68</p>
+                <p class="name">事件属性数</p>
+            </li>
+            <li>
+                <p class="num">15</p>
+                <p class="name">用户属性数</p>
+            </li>
+            <li>
+                <p class="num">59832</p>
+                <p class="name">本月事件总次数</p>
+            </li>
+            <li>
+                <p class="num">61234</p>
+                <p class="name">上月事件总次数</p>
+            </li>
+        </div>
+        <div class="clear"></div>
+    </div>
+
+    <div class="demoList">金融产品<span><a href ng-click="goDemo('f4c6764d10bec9a3c4bd4f79a442a947')">点击查看>></a></span></div>
+    <div class="demoListWarp">
+        <div class="demoListLeft">
+            <li>
+                <p class="num">944672</p>
+                <p class="name">推广点击量</p>
+            </li>
+            <li>
+                <p class="num">69234</p>
+                <p class="name">推广激活量</p>
+            </li>
+            <li>
+                <p class="num">52338</p>
+                <p class="name">自然量激活</p>
+            </li>
+            <li>
+                <p class="num">92343</p>
+                <p class="name">作弊点击量</p>
+            </li>
+            <li>
+                <p class="num">9235</p>
+                <p class="name">作弊激活量</p>
+            </li>
+        </div>
+        <div class="demoListright">
+            <li>
+                <p class="num">22</p>
+                <p class="name">事件种类数</p>
+            </li>
+            <li>
+                <p class="num">72</p>
+                <p class="name">事件属性数</p>
+            </li>
+            <li>
+                <p class="num">18</p>
+                <p class="name">用户属性数</p>
+            </li>
+            <li>
+                <p class="num">89235</p>
+                <p class="name">本月事件总次数</p>
+            </li>
+            <li>
+                <p class="num">83472</p>
+                <p class="name">上月事件总次数</p>
+            </li>
+        </div>
+        <div class="clear"></div>
+    </div>
+
+    <div class="demoList">直播产品<span><a href ng-click="goDemo('022da4f8bd53ac212141bd7fdfa9532d')">点击查看>></a></span></div>
+    <div class="demoListWarp">
+        <div class="demoListLeft">
+            <li>
+                <p class="num">589239</p>
+                <p class="name">推广点击量</p>
+            </li>
+            <li>
+                <p class="num">57093</p>
+                <p class="name">推广激活量</p>
+            </li>
+            <li>
+                <p class="num">48756</p>
+                <p class="name">自然量激活</p>
+            </li>
+            <li>
+                <p class="num">56723</p>
+                <p class="name">作弊点击量</p>
+            </li>
+            <li>
+                <p class="num">5623</p>
+                <p class="name">作弊激活量</p>
+            </li>
+        </div>
+        <div class="demoListright">
+            <li>
+                <p class="num">18</p>
+                <p class="name">事件种类数</p>
+            </li>
+            <li>
+                <p class="num">39</p>
+                <p class="name">事件属性数</p>
+            </li>
+            <li>
+                <p class="num">12</p>
+                <p class="name">用户属性数</p>
+            </li>
+            <li>
+                <p class="num">93886</p>
+                <p class="name">本月事件总次数</p>
+            </li>
+            <li>
+                <p class="num">89659</p>
+                <p class="name">上月事件总次数</p>
+            </li>
+        </div>
+        <div class="clear"></div>
+    </div>
+
+    <div class="demoList">H5产品<span><a href ng-click="goDemo('e0b3000ebd3f54b791a405f68d3e520c')">点击查看>></a></span></div>
+    <div class="demoListWarp">
+        <div class="demoListLeft">
+            <li>
+                <p class="num">78342</p>
+                <p class="name">推广点击量</p>
+            </li>
+            <li>
+                <p class="num">6098</p>
+                <p class="name">推广注册量</p>
+            </li>
+            <li>
+                <p class="num">4033</p>
+                <p class="name">自然注册量</p>
+            </li>
+            <li>
+                <p class="num">92124</p>
+                <p class="name">PV</p>
+            </li>
+            <li>
+                <p class="num">80934</p>
+                <p class="name">UV</p>
+            </li>
+        </div>
+        <div class="demoListright">
+            <li>
+                <p class="num">10</p>
+                <p class="name">事件种类数</p>
+            </li>
+            <li>
+                <p class="num">80</p>
+                <p class="name">事件属性数</p>
+            </li>
+            <li>
+                <p class="num">15</p>
+                <p class="name">用户属性数</p>
+            </li>
+            <li>
+                <p class="num">120834</p>
+                <p class="name">本月事件总次数</p>
+            </li>
+            <li>
+                <p class="num">140934</p>
+                <p class="name">上月事件总次数</p>
+            </li>
+        </div>
+        <div class="clear"></div>
+    </div>
+
+    <div class="demoList">常规产品<span><a ng-click="goDemo('e31caee07ebedf8c172267e73204802f')">点击查看>></a></span></div>
+    <div class="demoListWarp">
+        <div class="demoListLeft">
+            <li>
+                <p class="num">628765</p>
+                <p class="name">推广点击量</p>
+            </li>
+            <li>
+                <p class="num">78564</p>
+                <p class="name">推广激活量</p>
+            </li>
+            <li>
+                <p class="num">52378</p>
+                <p class="name">自然量激活</p>
+            </li>
+            <li>
+                <p class="num">42783</p>
+                <p class="name">作弊点击量</p>
+            </li>
+            <li>
+                <p class="num">4892</p>
+                <p class="name">作弊激活量</p>
+            </li>
+        </div>
+        <div class="demoListright">
+            <li>
+                <p class="num">14</p>
+                <p class="name">事件种类数</p>
+            </li>
+            <li>
+                <p class="num">28</p>
+                <p class="name">事件属性数</p>
+            </li>
+            <li>
+                <p class="num">8</p>
+                <p class="name">用户属性数</p>
+            </li>
+            <li>
+                <p class="num">67235</p>
+                <p class="name">本月事件总次数</p>
+            </li>
+            <li>
+                <p class="num">71542</p>
+                <p class="name">上月事件总次数</p>
+            </li>
+        </div>
+        <div class="clear"></div>
+    </div>
+    
+</div>
\ No newline at end of file
diff --git a/src/main/websrc/template/manage/activityevent.html b/src/main/websrc/template/manage/activityevent.html
new file mode 100644
index 0000000..054edf5
--- /dev/null
+++ b/src/main/websrc/template/manage/activityevent.html
@@ -0,0 +1,46 @@
+<div class="clearfix longTip rightTip tip0">
+    <ul class="customNav custleft">
+        <li ng-click="goPage('collect.event')">APP事件管理</li> 
+        <li class="active" ng-click="goPage('collect.activityevent')">虚拟事件管理</li>
+        
+    </ul>
+</div>
+
+<div class="chartWrap clearfix" style="margin-top: 20px;">
+    <div class="chartWrapItem grayhm titleChart nothborder"> 
+          
+        <div class="chartModule">
+            <span>虚拟事件管理</span>
+            <div class="searchWrap">
+                <input type="text" class="searchIpt" ng-model="searchTxt" placeholder="输入包含事件搜索">
+            </div>
+            <div class="btn10 mr10" style="float: right;margin-top: 9px;" ng-click="gopage()" ng-if="hasEditPower()">
+                <span class="formAddIcon"></span>新增虚拟事件
+            </div>
+        </div>
+        <div class="tableList">
+            <table>
+                <tr>
+                    <th>序号</th>
+                    <th>虚拟事件名称</th>
+                    <th>包含事件</th>
+                    <th ng-if="hasEditPower()">操作</th>
+                </tr>
+                <tr ng-repeat="info in eventList  | filterList:searchTxt:'eventListName' track by $index"  ng-if="$index>flipPage.start && $index < flipPage.end">
+                    <td>{{$index+1}}</td>
+                    <td>{{info.ch_name}}</td>
+                    <td>{{info.eventListName}}</td>
+                    <td class="formOper" ng-if="hasEditPower()">
+                        <div class="formBtn" ng-click="gopage(info)">
+                            <span class="editIcon"></span>编辑
+                        </div>
+                        <div class="btn4" ng-if="info.enable==false && info.type=='userdefine'" ng-click="onUser(info.id)">启用</div>
+                        <div class="btn2" ng-if="info.enable==true && info.type=='userdefine'" ng-click="offUser(info.id)">停用</div>
+                    </td>
+                </tr>
+            </table>
+            <flip-info list-info="eventList" search-txt="searchTxt" search-name="eventList"></flip-info>
+        </div>
+        
+    </div>
+</div>
\ No newline at end of file
diff --git a/src/main/websrc/template/manage/activityeventDetail.html b/src/main/websrc/template/manage/activityeventDetail.html
new file mode 100644
index 0000000..b329d96
--- /dev/null
+++ b/src/main/websrc/template/manage/activityeventDetail.html
@@ -0,0 +1,44 @@
+<ul class="tabMenu formTab">
+    <li class="ckblue" ng-click="cancel()"><span class="doBackIcon doBackIconBlue"></span>返回</li>
+    <li>{{title}}</li>
+</ul>
+<div class="formDetailInfo label150">
+    <div class="clear"></div>
+    <div class="formDetailItem">
+        <div class="iptlabel must">名称:</div>
+        <input type="text" class="iptform" ng-model="name" placeholder="请输入名称" ng-disabled="inputdis">
+        <em class="error" ng-if="tip.name.status">{{tip.name.txt}}</em>
+    </div>
+    <div class="formDetailItem">
+        <div class="iptlabel must">事件:</div>
+        <div class="powerSelectData" style="display: inline-block;">
+             <div class="campaign">
+                <div class="pt">未选事件</div>
+                <div class="datawrap one">
+                    <div class="clear"></div>
+                    <ul class="campaignList">
+                       <!--  <li><span class="checkbox" ng-class="{'active':selAll}" ng-click="selectAllEvent()"></span>全选</li> -->
+                        <li ng-repeat="params in eventList track by $index" ng-click="chooseItem(params)" ng-if="params.ischeck!=true" title="{{params.eventNameAlias}}">
+                            <span class="checkbox"></span>{{params.eventNameAlias}}
+                        </li>
+                    </ul>
+                </div>
+            </div>
+            <div class="campaign">
+                <div class="pt">已选事件</div>
+                <div class="datawrap one">
+                    <ul class="campaignList">
+                        <li ng-repeat="params in eventList track by $index"  ng-click="cancelItem(params)" ng-if="params.ischeck==true" title="{{params.eventNameAlias}}">
+                            <span class="checkbox active" ng-if="specialEvents.indexOf(params.eventName)==-1"></span>{{params.eventNameAlias}}
+                        </li>
+                    </ul>
+                </div>
+            </div>  
+            <em class="error" ng-if="tip.moreparams.status" style="vertical-align: bottom;">{{tip.moreparams.txt}}</em>
+        </div>
+    </div>
+    <div class="formsaveBtnWrap clearfix">
+        <div class="btn6" ng-click="cancel()">取消</div>
+        <div class="btn5" ng-click="save()">保存</div>
+    </div>
+</div>
\ No newline at end of file
diff --git a/src/main/websrc/template/manage/app.html b/src/main/websrc/template/manage/app.html
new file mode 100644
index 0000000..d00b3ba
--- /dev/null
+++ b/src/main/websrc/template/manage/app.html
@@ -0,0 +1,45 @@
+<div class="btn3 mb20" ng-click="gopage()" ng-if="(appAlllistInfo.length<limitInfo.appNum || limitInfo.appNum==-1) && (isManage || isSuper)"><span class="formAddIcon"></span>新建产品</div>
+<div class="btn2 big dis mb20" ng-if="(appAlllistInfo.length>=limitInfo.appNum && limitInfo.appNum!=-1) || (!isSuper && !isManage)"><span class="formAddIcon dis"></span>新建产品</div>
+<span class="tiplabel" ng-if="limitInfo.appNum!=-1">主账号仅允许创建{{limitInfo.appNum}}个产品,如需升级请联系商务。</span>
+<div class="clear"></div>
+<div class="wrapTitle formTitleWrap">
+    <span>产品管理</span>
+    <div class="searchWrap">
+        <input type="text" class="searchIpt" ng-model="searchTxt" placeholder="搜索产品名称或APPKEY">
+    </div>
+</div>
+<div class="tableList yeswrap">
+    <table>
+        <tr>
+            <th>序号</th>
+            <th>平台</th>
+            <th>产品名称</th>
+            <th>APPKEY</th>
+            <th style="width:150px;">创建时间</th>
+            <th style="width:110px;">操作</th>
+        </tr>
+        <tr ng-repeat="info in appAlllistInfo | filterList:searchTxt:'name,appkey' track by $index"  ng-if="$index>flipPage.start && $index < flipPage.end">
+            <td>{{$index+1}}</td>
+            <td>
+                <div class="appicon" style="margin-left: 0px;" ng-class="{'iOS':'apple','Android':'android','H5':'web'}[info.platform]"></div>
+            </td>
+            <td ng-if="!info.isDebug">
+                <span class="ckblue" ng-click="goReport(info)">{{info.name}}</span>
+                <span class="copyBtnIcon copyBtn" data-clipboard-text="{{info.name}}" title="点击复制"></span>
+            </td>
+            <td ng-if="info.isDebug">
+                {{info.name}}
+            </td>
+            <td>{{info.appkey}}</td>
+            <td>{{info.createTime | date:'yyyy-MM-dd HH:mm:ss'}}</td>
+            <td class="formOper">
+                <div class="formBtn" ng-click="gopage(info.id)" style="margin-right: 10px;"><span class="editIcon"></span>编辑</div>
+                <div class="formBtn" ng-click="doRemove(info.id)" ng-if="specialsAppkey.indexOf(info.appkey)==-1" style="margin-right: 10px;"><span class="removeIcon"></span>删除</div>
+                <!-- <div class="formBtn" ng-click="gopage(info.id,1)" ng-if="info.isDebug" style="margin-right: 10px;">调试</div> -->
+                <!-- <span class="label" ng-if="!info.isDebug" style="color:#999">已调试</span> -->
+            </td>
+        </tr>
+    </table>
+    <del-tip status="delstatus" delfn="removeInfo()">确定删除该产品?<br><b class="error">此应用的数据将彻底删除,无法恢复!</b></del-tip>
+</div>
+<flip-info list-info="appAlllistInfo" search-txt="searchTxt" search-name="name,appkey"></flip-info>
diff --git a/src/main/websrc/template/manage/appDetail.html b/src/main/websrc/template/manage/appDetail.html
new file mode 100644
index 0000000..d56e54f
--- /dev/null
+++ b/src/main/websrc/template/manage/appDetail.html
@@ -0,0 +1,247 @@
+<div class="formDetailInfo appPageWrap">
+    <div class="formDetailTitle" style="margin-bottom: 30px;">
+        <a class="pretitle hand" ng-click="cancel()">产品中心</a>
+        <span ng-if="!infoId"> > 新建产品</span>
+        <span ng-if="infoId"> > 修改产品</span>
+    </div>
+
+    <div class="clear"></div>
+
+    <div class="circlewrap" ng-show="isLog || !infoId">
+        <span class="active">
+            <span class="circle">1</span>
+            <span class="circlelabel" ng-if="!infoId"> 新建产品</span>
+            <span class="circlelabel" ng-if="infoId"> 修改产品</span>
+        </span>
+        <span class="circleline"></span>
+        <span ng-class="{'active':stepflag>1}" class="hand"> <!--ng-click="changeStep()"-->
+            <span class="circle">2</span>
+            <span class="circlelabel">嵌入SDK</span>
+        </span>
+        <!-- <span class="circleline"></span>
+        <span ng-class="{'active':stepflag>2}">
+            <span class="circle">3</span>
+            <span class="circlelabel">数据调试</span>
+        </span> -->
+    </div>
+
+    <div ng-show="stepflag==1">
+        <div class="formDetailItem">
+            <div class="iptlabel must">产品名称:</div>
+            <input type="text" class="iptform" ng-model="name" ng-blur="exixtName()" placeholder="请输入应用名称">
+            <em class="error" ng-if="tip.name.status">{{tip.name.txt}}</em>
+        </div>
+        <div class="formDetailItem">
+            <div class="iptlabel must">平台:</div>
+            <div class="radioWrap" ng-show="!id">
+                <div class="radiolabel" ng-click="platform='iOS'">
+                    <span class="radio" ng-class="{'active':platform=='iOS'}"></span>
+                    iOS
+                </div>
+                <div class="radiolabel" ng-click="platform='Android'">
+                    <span class="radio" ng-class="{'active':platform=='Android'}"></span>
+                    Android
+                </div>
+                <div class="radiolabel" ng-click="platform='H5'">
+                    <span class="radio" ng-class="{'active':platform=='H5'}"></span>
+                    H5
+                </div>
+                <!-- <div class="radiolabel" ng-click="platform='web'">
+                    <span class="radio" ng-class="{'active':platform=='web'}"></span>
+                    web
+                </div> -->
+            </div>
+            <div class="radioWrap" ng-show="id">
+                <span class="label">{{platform}}</span>
+            </div>
+        </div>
+        <div class="formDetailItem" ng-show="platform=='iOS'">
+            <div class="iptlabel must">apple_appid:</div>
+            <input type="text" class="iptform" ng-model="bundleid" ng-blur="existBundleid()" placeholder="请输入apple_appid">
+            <em class="error" ng-if="tip.bundleid.status">{{tip.bundleid.txt}}</em>
+            <div class="iptwrap desc">例:https://itunes.apple.com/cn/app/xxxxx/id1032170871
+    则apple_appid为1032170871,如果apple_appid暂时无法获取,请输入任意9-10位的数字,待应用上线后,请修改</div>
+        </div>
+        <div class="formDetailItem">
+            <div class="iptlabel must">产品类别:</div>
+            <input type="text" class="iptform" ng-model="appGenreName" ng-disabled="true" ng-if="id">
+            <select-list meau-info="typeList" meau-id="appGenre" meau-data="appGenreInit"  keyid="categoryid" ng-show="!id"></select-list>
+        </div>
+        <div class="formDetailItem" ng-show="showGame">
+            <div class="iptlabel must">游戏类别:</div>
+            <input type="text" class="iptform" ng-model="gameGenreName" ng-disabled="true" ng-if="id">
+            <select-list meau-info="gameList" meau-id="gameGenre" meau-data="gameGenreInit" keyid="categoryid" ng-show="!id"></select-list>
+        </div>
+        <div class="formDetailItem">
+            <div class="iptlabel must">下载地址:</div>
+            <input type="text" class="iptform" ng-model="url" placeholder="请输入下载地址">
+            <em class="error" ng-if="tip.url.status">{{tip.url.txt}}</em>
+        </div>
+        <div class="formsaveBtnWrap clearfix">
+            <div class="btn5" ng-click="save()">
+                <span ng-if="!id">立即创建</span>
+                <span ng-if="id">保存</span>
+            </div>
+            <div class="btn6" ng-click="cancel()">取消</div>
+        </div>
+    </div>
+
+    <div ng-show="stepflag==2">
+        <div class="appsdk">
+            <div class="appTitle">产品名称:</div>
+            <div class="appText">{{name}}</div>
+        </div>
+        <div class="appsdk">
+            <div class="appTitle">您的APPKEY:</div>
+            <div class="appText appid">
+                <span id="appidCopy">{{appkey}}</span>
+                <button class="sdkAppid" data-clipboard-action="copy" data-clipboard-target="#appidCopy">复制</button>
+            </div>
+        </div>
+        <div class="appsdk idenText">
+            <div class="appTitle">&nbsp;</div>
+            <div class="appText iden">(APPKEY是应用的唯一标识,用来集成到SDK中。)</div>
+        </div>
+        <div class="appsdk">
+            <a href="http://doc.trackingio.com/sdkwen-dang.html" target="_blank"><div class="sdkButton" ng-click="downloadsdk()">查看集成文档并下载SDK</div></a>
+        </div>
+        <div class="useSdk">
+            <p class="userTitle">使用流程:</p>
+            <p class="userText">
+              1.下载SDK<span class="circleline"></span>
+              2.集成SDK
+              <!-- <span class="circleline"></span> -->
+              <!-- 3.数据调试 -->
+            </p>
+        </div>
+        <!-- <p class="userText error" style="padding-left: 38px; margin-top: 20px">数据调试结束后上报的数据才进入正常的数据统计。</p> -->
+        <div class="btn3 stepBtn" ng-click="nextStep()">
+            完成
+        </div>
+    </div>
+
+    <div ng-show="stepflag == 3">
+        <div class="btn6 sdkLast" ng-click="changeStep()" style="width: 120px;">上一步</div>
+        <div class="btn3 sdkSave" ng-click="finisStep()" style="width: 130px;" ng-if="hasZeroEvt==0">
+            完成调试,保存新建
+        </div>
+        <div class="btn2 big dis sdkSave" style="width: 150px;" ng-if="hasZeroEvt>0">完成调试,保存新建</div>
+
+        <div class="clearfix">
+            <div class="btn10 mr10" ng-click="queryLogInfo()" style="float: right;">
+                <span class="f5IconGray"></span>数据刷新
+            </div>
+            <span style="float: right;" class="error lh32" ng-if="(platform=='H5' && hasZeroEvt==1) || hasZeroEvt==2">我们还没有接收到来自您的任何数据,请继续进行集成工作。</span>
+        </div>
+        <div class="applogWrap clearfix">
+            <div class="logTestWrap mr10">
+                <div class="logTestTitle">LogTest</div>
+                <div class="logTestCont">
+                    <div class="appsdk">
+                        <div class="appTitle">您的APPKEY:</div>
+                        <div class="appText appid">
+                            <span>{{appkey}}</span>
+                        </div>
+                    </div>
+                    <dl class="tipsList">
+                        <dt>说明</dt>
+                        <dd>1.打开集成好的客户端,SDK将自动帮助收集数据。</dd>
+                        <dd>2.在任意平台有数据量产生后,您可随时完成调试,进入正式数据报表。</dd>
+                        <dd>3.一个APP最多显示1W条测试数据,且保留最近7天数据。</dd>
+                    </dl>
+                    <div class="appEvtWrap hm-scroll">
+                        <div class="appEvtItem" ng-repeat="test in testInfos track by $index">
+                            <span>{{test.eventNameAlias}}</span>
+                            <em>{{test.eventNumber}}</em>
+                        </div>
+                    </div>
+                </div>
+            </div>
+            <div class="logTestWrap">
+                <div class="logTestTitle">日志
+                    <select-list meau-info="deviceList" meau-id="deviceId" meau-data="deviceInit" style="float:right;width:230px;" ng-show="logInfos.length>0"></select-list>
+                </div>
+                <div class="logTestCont">
+                    <dl class="tipsList" ng-if="logInfos.length==0">
+                        <dt>已经集成,依然查阅不到任何数据?请仔细检查下述事项: </dt>
+                        <dd>1.仔细检查APPKEY是否填写正确,是否多输入了空格等字符。</dd>
+                        <dd>2.检查您的测试设备是否网络正常。</dd>
+                    </dl>
+                    <ul class="chainWrap hm-scroll">
+                        <li ng-repeat="log in logInfos | filter:{'deviceId':deviceTxt} track by $index">
+                            <i></i>
+                            <span>{{log.xcontext._deviceid}}</span>
+                            <h6 ng-click="lookEvents(log)" stop-event>{{log.eventName}}</h6>
+                            <em>{{log.xwhen}}</em>
+                        </li>
+                    </ul>
+                </div>
+            </div>
+        </div>
+        <div class="chartWrap clearfix">
+            <div class="chartWrapItem nothborder" ng-if="platform!='H5'">
+                <div class="chartModule">
+                    <span>调试设备列表</span>
+                </div>
+                <div class="tableList">
+                    <table>
+                        <tr>
+                            <th>平台</th>
+                            <th>设备ID</th>
+                            <!-- <th>分包渠道</th> -->
+                            <th>最后测试时间</th>
+                            <th>测试日志总数</th>
+                        </tr>
+                        <tr ng-repeat="total in totalInfos track by $index">
+                            <td>
+                                <b class="platformIcon" ng-class="getPlatClass(total.os)"></b>
+                            </td>
+                            <td>{{total.deviceId}}</td>
+                            <!-- <td>
+                                <span ng-if="total.packetChannel!='_default_' && total.packetChannel!='unknown'">{{total.packetChannel}}</span>
+                            </td> -->
+                            <td>{{total.latestTime}}</td>
+                            <td>{{total.number}}</td>
+                        </tr>
+                    </table>
+                </div>
+            </div>
+        </div>
+    </div>
+
+    <div class="leftTipsSlider" ng-class="{'sliderLog':logFlag>0}" stop-event>
+        <div class="slideHeader" ng-show="logFlag==1">
+            日志详情
+            <div class="whiteClose" ng-click="hideDetails()"></div>
+        </div>
+        <div class="slideHeader" ng-show="logFlag==2">
+            <div class="backLog left" ng-click="logFlag=1">返回</div>
+            事件属性
+            <div class="whiteClose" ng-click="hideDetails()"></div>
+        </div>
+        <div class="tableList hm-scroll" style="max-height: 90%;overflow-y: auto;">
+            <table ng-show="logFlag==1">
+                <tr ng-repeat="event in eventDetails track  by $index">
+                    <td>{{event.name}}</td>
+                    <td ng-if="!event.isevent">
+                        <span ng-if="event.second">
+                            {{curEvtLogInfo.xcontext[event.key]}}
+                        </span>
+                        <span ng-if="!event.second">
+                            <span ng-if="!event.value">{{curEvtLogInfo[event.key]}}</span>
+                            <span ng-if="event.value">{{event.value}}</span>
+                        </span>
+                    </td>
+
+                    <td class="ckEvt" ng-click="lookParams()" ng-if="event.isevent">{{curEvtLogInfo[event.key]}}</td>
+                </tr>
+            </table>
+            <table ng-show="logFlag==2">
+                <tr ng-repeat="param in paramsList track by $index">
+                    <td>{{param.name}}</td>
+                    <td>{{param.value}}</td>
+                </tr>
+            </table>
+        </div>
+    </div>
+</div>
diff --git a/src/main/websrc/template/manage/auth.html b/src/main/websrc/template/manage/auth.html
new file mode 100644
index 0000000..d9b2084
--- /dev/null
+++ b/src/main/websrc/template/manage/auth.html
@@ -0,0 +1,82 @@
+<div class="chartWrap clearfix">
+    <div class="chartWrapItem grayhm titleChart nothborder">
+        <div class="chartModule">
+            <span>子账户管理</span>
+            <div class="searchWrap" style="float: right;">
+                <input type="text" class="searchIpt" ng-model="searchTxt" placeholder="输入账户名或姓名搜索">
+            </div>
+            <div class="campaginAction">
+                <select-list meau-info="deviceList" meau-id="deviceId" meau-data="deviceInit" class="whitebg mr10" style="width:100px;"></select-list>
+
+                <div class="btn10 mr10" ng-click="gopage()">
+                    <span class="formAddIcon"></span>
+                    <span>新建子账号</span>
+                </div>
+            </div>
+        </div>
+        <div class="tableList">
+            <table>
+                <tr>
+                    <th>序号</th>
+                    <th>账户名</th>
+                    <th>姓名</th>
+                    <th>角色</th>
+                    <th>状态</th>
+                    <th>操作</th>
+                    <th>操作记录</th>
+                </tr>
+                <tr ng-repeat="info in authList | filterList:searchTxt:'name,email' track by $index"  ng-if="$index>flipPage.start && $index < flipPage.end">
+                    <td>{{$index+1}}</td>
+                    <td>{{info.email}}</td>
+                    <td>{{info.name}}</td>
+                    <td ng-if="accountFlag!='channel'">{{info.roleName}}</td>
+                    <td>
+                        <span ng-if="info.status==-3">未激活</span>
+                        <span ng-if="info.status!=-3 && info.valid">激活</span>
+                        <span ng-if="info.status!=-3 && !info.valid">已过期</span>
+                    </td>
+                    <td class="formOper">
+                        <div ng-hide="(info.roleCategory == 1 && !isSuper) || info.email == 'demo@reyun.com' || (info.roleCategory==2 && isAppManage)">
+                            <div class="formBtn" ng-class="{'dis':!info.valid}" ng-click="gopage(info)" ng-show="info.status==1 && findName=='enable'"><span class="editIcon"></span>编辑</div>
+                            <div class="btn4" ng-if="info.status!=-3 && findName=='disable' && info.valid" ng-click="onUser(info.id)">启用</div>
+                            <div class="btn2" ng-if="info.status!=-3 && findName=='enable' && info.valid" ng-click="offUser(info.id)">停用</div>
+                            <div class="formBtn" ng-if="info.status==-3 && !info.send" ng-click="sendEmailAgain(info)">重新发送激活邮件</div>
+                            <div class="formBtn dis" ng-if="info.status==-3 && info.send == 1">发送成功</div>
+                            <div class="formBtn" ng-click="deleteAuth(info)" ng-if="info.status==-3"><span class="removeIcon"></span>删除</div>
+                        </div>
+                        <div class="nopower" ng-if="info.roleCategory==2 && isAppManage" title="您已无此授权权限,请联系管理员">
+                        </div>
+                    </td>
+                    <td>
+                        <div class="formBtn" ng-click="showDetails(info)" stop-event><span class="lookIcon"></span></div>
+                    </td>
+                </tr>
+            </table>
+            <flip-info list-info="authList" search-txt="searchTxt" search-name="name,email"></flip-info>
+        </div>
+    </div>
+</div>
+<div class="openTipWin" ng-show="wantDelete">
+    <div class="closeGray" ng-click="closeWin()"></div>
+    <div class="tipCont">
+        您正在删除&nbsp;&nbsp;“{{delInfo.name}}”&nbsp;&nbsp;
+        <span>子账户</span>,请确认。
+    </div>
+    <div class="openBtnGroup clearfix">
+        <div class="btn8 mr20" ng-click="closeWin()">取消</div>
+        <div class="btn8" ng-click="doDelete()">确定</div>
+    </div>
+</div>
+<div class="leftTipsSlider" ng-class="{'sliderSw':isdetail}" stop-event>
+    <div class="slideHeader">
+        操作记录
+        <div class="whiteClose" ng-click="hideDetails()"></div>
+    </div>
+    <div class="slideSub">账户名:{{detailInfo.email}}</div>
+    <ul class="tipsInfo">
+        <li>创建人:{{detailInfo.createAccountName}}</li>
+        <li>创建时间:{{detailInfo.createTime | date:'yyyy-MM-dd HH:mm:ss'}}</li>
+        <li>最后编辑人:{{detailInfo.modifyAccountName}}</li>
+        <li>最后编辑时间:{{detailInfo.modifyTime | date:'yyyy-MM-dd HH:mm:ss'}}</li>
+    </ul>
+</div>
diff --git a/src/main/websrc/template/manage/authDetail.html b/src/main/websrc/template/manage/authDetail.html
new file mode 100644
index 0000000..c3ccbf5
--- /dev/null
+++ b/src/main/websrc/template/manage/authDetail.html
@@ -0,0 +1,89 @@
+<ul class="tabMenu formTab smallTab">
+	<li class="ckblue" ng-click="cancel()"><span class="doBackIcon doBackIconBlue"></span>返回</li>
+    <li ng-if="accountFlag=='account'">
+    	<span ng-if="id">修改子账号</span>
+    	<span ng-if="!id">新建子账号</span>
+    </li>
+</ul>
+<div class="clear"></div>
+
+<div class="formDetailInfo" ng-class="{'notopr':!id}">
+    <div class="formDetailItem">
+        <div class="iptlabel must">邮箱&nbsp;<help-tip class="help" name="邮箱" style="margin-left: 0px;"></help-tip> :</div>
+        <input type="text" class="iptform" ng-model="email" placeholder="请输入邮箱" ng-disabled="id">
+        <em class="error" ng-if="tip.email.status">{{tip.email.txt}}</em>
+    </div>
+    <div class="formDetailItem">
+        <div class="iptlabel must">姓名 :</div>
+        <input type="text" class="iptform" ng-model="name" placeholder="请输入姓名" ng-disabled="accountFlag=='channel' && id && nameNofix">
+        <em class="error" ng-if="tip.name.status">{{tip.name.txt}}</em>
+    </div>
+    <div class="formDetailItem">
+        <div class="iptlabel">备注 :</div>
+        <textarea class="iptform" ng-model="remark" style="height: 100px;line-height: 25px;"></textarea>
+        <em class="error" ng-if="tip.remark.status">{{tip.remark.txt}}</em>
+    </div>
+    <div class="authPowerWrap">
+    	<div class="powerHeader">
+    		<span>角色设置</span>
+    	</div>
+    	<ul class="roleList">
+    		<li ng-show="isSuper && (!parentRole || parentRole < 1)">
+    			<div class="radiolabel" ng-click="changeRole(1)">
+	                <span class="radio" ng-class="{'active':roleCategory==1}"></span>
+	                <em>管理员</em>
+	            </div>
+	            请谨慎勾选,该种用户将拥有公司下所有应用管理、查看权限,以及产品、成员、渠道管理、推广参数管理权限,且最多可新建3个管理员。
+    		</li>
+    		<li ng-show="!isAppManage && (!parentRole || parentRole < 2 || roleCategory==2)">
+    			<div class="radiolabel" ng-click="changeRole(2)">
+	                <span class="radio" ng-class="{'active':roleCategory==2}"></span>
+	                <em>子应用管理员</em>
+	            </div>
+	            您可以为子应用选择该权限,该种用户拥有公司下某些应用的管理、查看权限,以及成员管理权限。
+    		</li>
+    	</ul>
+    	<div class="powerInfoWrap" ng-show="roleCategory>1">
+    		<p>产品权限:</p>
+    		<div class="powerSelectWrap" ng-show="steps==1">
+    			<div class="leftSelectWrap">
+    				<div class="powerHeader bR">
+    					<div class="left ml10 hand" ng-click="doCheck('app')">
+    						<span class="checkbox mr5" ng-class="{'active':isAllCheck}"></span>全选
+    					</div>
+    					应用
+    				</div>
+    				<div class="searchWrap">
+		                <input type="text" class="searchIpt" ng-model="searchTxt" placeholder="搜索产品">
+		            </div>
+		            <div class="scrollItem">
+		            	<ul class="selInfosWrap w3">
+	    					<li ng-repeat="app in authapplist | filter:{'name':searchTxt} track by $index" ng-click="selectApp(app)" ng-class="{'checked checkedText':app.ischeck}" title="{{getTips(app)}}">
+	    						<span class="checkbox"></span>
+	    						<span class="nopower" ng-if="app.nopower"></span>
+	    						{{app.name}}
+	    					</li>
+	    				</ul>
+		            </div>
+    			</div>
+    			<div class="rightSelectWrap">
+    				<div class="powerHeader">已选择应用</div>
+    				<ul class="selInfosWrap scrollItem" style="max-height: 350px;">
+    					<li ng-repeat="app in authapplist track by $index" ng-click="removeApp(app)" ng-if="app.ischeck" title="{{getTips(app)}}"  ng-class="{'checked checkedText':app.nopower}">
+    						<span class="checkbox active"></span>
+    						<span class="nopower" ng-if="app.nopower"></span>
+    						{{app.name}}
+    					</li>
+    				</ul>
+    			</div>
+    		</div>
+    	</div>
+    </div>
+		<div class="formsaveBtnWrap clearfix">
+	        <div class="btn6" ng-click="cancel()">取消</div>
+	        <div class="btn5" ng-click="save()">
+	            <span ng-if="!id">完成</span>
+	            <span ng-if="id">保存</span>
+	        </div>
+	    </div>
+</div>
diff --git a/src/main/websrc/template/manage/event.html b/src/main/websrc/template/manage/event.html
new file mode 100644
index 0000000..679ecd4
--- /dev/null
+++ b/src/main/websrc/template/manage/event.html
@@ -0,0 +1,100 @@
+<div class="clearfix longTip rightTip tip0">
+    <ul class="customNav custleft">
+        <li class="active" ng-click="goPage('collect.event')">APP事件管理</li> 
+        <li ng-click="goPage('collect.activityevent')">虚拟事件管理</li>
+    </ul>
+</div>
+
+<div class="chartWrap clearfix" style="margin-top: 20px;">
+    <div class="chartWrapItem grayhm titleChart nothborder"> 
+        
+        <div ng-show="isevent">
+            <div class="chartModule">
+                <span>APP事件管理</span>
+                <div class="searchWrap">
+                    <input type="text" class="searchIpt" ng-model="searchTxt" placeholder="输入事件名称搜索">
+                </div>
+            </div>
+            <div class="tableList">
+                <table>
+                    <tr>
+                        <th>序号</th>
+                        <th>事件ID</th>
+                        <th>事件名称</th>
+                        <th>操作</th>
+                    </tr>
+                    <tr ng-repeat="info in eventList  | filter:{eventNameAlias:searchTxt} track by $index"  ng-if="$index>flipPage.start && $index < flipPage.end">
+                        <td>{{$index+1}}</td>
+                        <td>{{info.eventName}}</td>
+                        <td>
+                            <div ng-show="info.eventName!=eventEditId">
+                                {{info.eventNameAlias}}<div class="formBtn" ng-click="doEdit(info,1)" ng-if="hasEditPower() && info.common!=true"><span class="editIcon ml5"></span></div>
+                            </div>
+                            <div ng-show="info.eventName==eventEditId">
+                                <input type="text" class="iptform" ng-model="info.editname"><div class="btn3 ml5 toblock" ng-click="updateEvent(info)">确定</div>
+                            </div>
+                        </td>
+                        <td class="formOper">
+                            <div class="formBtn" ng-click="clickEvent(info)">
+                                <span class="viewIcon"></span>详情
+                            </div>
+                            <div class="btn4" ng-if="info.status==false && info.common!=true && hasEditPower()" ng-click="onOff(info.eventName)">启用</div>
+                            <div class="btn2" ng-if="info.status==true && info.common!=true && hasEditPower()" ng-click="onOff(info.eventName,1)">停用</div>
+                        </td>
+                    </tr>
+                </table>
+                <flip-info list-info="eventList" search-txt="searchTxt" search-name="eventNameAlias"></flip-info>
+            </div>
+        </div>
+
+        <div ng-show="!isevent">
+            <div class="wrapTitle formTitleWrap">
+                <span class="ckhand" ng-click="isevent=true">事件管理</span>  >
+                <select-list meau-info="eventSelList" meau-id="eventpid" meau-data="eventpidInit" keyid="eventName" keyname="eventNameAlias" meau-refresh="eventpidF5" style="margin-top:-4px;"></select-list>
+
+                <div class="searchWrap">
+                    <input type="text" class="searchIpt" ng-model="searchKey" placeholder="输入属性名称搜索">
+                </div>
+            </div>
+            <div class="tableList">
+                <table>
+                    <tr>
+                        <th>序号</th>
+                        <th>属性ID</th>
+                        <th>属性名称</th>
+                        <th>类型</th>
+                        <th ng-if="hasEditPower()">操作</th>
+                    </tr>
+                    <tr ng-repeat="info in paramsList | filter:{attrAlias:searchKey} track by $index"  ng-if="$index>pflipPage.start && $index < pflipPage.end">
+                        <td>{{$index+1}}</td>
+                        <td>{{info.attr}}</td>
+                        <td>
+                            <div ng-show="info.attr!=eventParamsId">
+                                {{info.attrAlias}}
+                                <div class="formBtn" ng-click="doEdit(info,2)" ng-show="info.common!=true && hasEditPower()">
+                                <span class="editIcon ml5"></span>
+                                </div>
+                            </div>
+                            <div ng-show="info.attr==eventParamsId">
+                                <input type="text" class="iptform" ng-model="info.editname"><div class="btn3 toblock ml5" ng-click="updateParams(info)">确定</div>
+                            </div>
+                        </td>
+                        <td>{{info.dataType}}</td>
+                        <td ng-if="hasEditPower()" class="formOper" style="width: 200px;">
+                            <div class="btn4" ng-if="info.status==false && info.common!=true" ng-click="pramesOnOff(info.attr)">启用</div>
+                            <div class="btn2" ng-if="info.status==true && info.common!=true" ng-click="pramesOnOff(info.attr,1)">停用</div>
+
+                           <!--  <div class="btn4" ng-if="info.addStatsView==false && info.common!=true && info.dataType=='number'" ng-click="changeStatus(1,info.attr)">加入统计</div>
+                            <div class="btn2" ng-if="info.addStatsView==true && info.common!=true && info.dataType=='number'" ng-click="changeStatus(2,info.attr)">取消统计</div> -->
+
+                            <div class="btn4" ng-if="info.addStatsCondition==false && info.common!=true" ng-click="changeStatus(3,info.attr)">加入筛选</div>
+                            <div class="btn2" ng-if="info.addStatsCondition==true && info.common!=true" ng-click="changeStatus(4,info.attr)">取消筛选</div>
+                        </td>
+                    </tr>
+                </table>
+                <flip-info list-info="paramsList" search-txt="searchKey" search-name="attrAlias" list-key="paramTab"></flip-info>
+            </div>
+        </div>
+
+    </div>
+</div>
\ No newline at end of file
diff --git a/src/main/websrc/template/manage/img/1.png b/src/main/websrc/template/manage/img/1.png
new file mode 100644
index 0000000..4ec8910
Binary files /dev/null and b/src/main/websrc/template/manage/img/1.png differ
diff --git a/src/main/websrc/template/manage/img/2.png b/src/main/websrc/template/manage/img/2.png
new file mode 100644
index 0000000..c6e47f3
Binary files /dev/null and b/src/main/websrc/template/manage/img/2.png differ
diff --git a/src/main/websrc/template/manage/img/3.png b/src/main/websrc/template/manage/img/3.png
new file mode 100644
index 0000000..19cf906
Binary files /dev/null and b/src/main/websrc/template/manage/img/3.png differ
diff --git a/src/main/websrc/template/manage/img/4.png b/src/main/websrc/template/manage/img/4.png
new file mode 100644
index 0000000..12e3c00
Binary files /dev/null and b/src/main/websrc/template/manage/img/4.png differ
diff --git a/src/main/websrc/template/manage/img/5.png b/src/main/websrc/template/manage/img/5.png
new file mode 100644
index 0000000..50009db
Binary files /dev/null and b/src/main/websrc/template/manage/img/5.png differ
diff --git a/src/main/websrc/template/manage/img/addchannel.png b/src/main/websrc/template/manage/img/addchannel.png
new file mode 100644
index 0000000..aa48ac1
Binary files /dev/null and b/src/main/websrc/template/manage/img/addchannel.png differ
diff --git a/src/main/websrc/template/manage/img/addchannel2.png b/src/main/websrc/template/manage/img/addchannel2.png
new file mode 100644
index 0000000..e2e1970
Binary files /dev/null and b/src/main/websrc/template/manage/img/addchannel2.png differ
diff --git a/src/main/websrc/template/manage/img/addchannel3.png b/src/main/websrc/template/manage/img/addchannel3.png
new file mode 100644
index 0000000..5789be2
Binary files /dev/null and b/src/main/websrc/template/manage/img/addchannel3.png differ
diff --git a/src/main/websrc/template/manage/img/adwords/1.png b/src/main/websrc/template/manage/img/adwords/1.png
new file mode 100644
index 0000000..70ef888
Binary files /dev/null and b/src/main/websrc/template/manage/img/adwords/1.png differ
diff --git a/src/main/websrc/template/manage/img/adwords/2.png b/src/main/websrc/template/manage/img/adwords/2.png
new file mode 100644
index 0000000..f0d94a8
Binary files /dev/null and b/src/main/websrc/template/manage/img/adwords/2.png differ
diff --git a/src/main/websrc/template/manage/img/adwords/3.png b/src/main/websrc/template/manage/img/adwords/3.png
new file mode 100644
index 0000000..afb12b8
Binary files /dev/null and b/src/main/websrc/template/manage/img/adwords/3.png differ
diff --git a/src/main/websrc/template/manage/img/adwords/4.png b/src/main/websrc/template/manage/img/adwords/4.png
new file mode 100644
index 0000000..a358a87
Binary files /dev/null and b/src/main/websrc/template/manage/img/adwords/4.png differ
diff --git a/src/main/websrc/template/manage/img/adwords/5.png b/src/main/websrc/template/manage/img/adwords/5.png
new file mode 100644
index 0000000..f2e9bbb
Binary files /dev/null and b/src/main/websrc/template/manage/img/adwords/5.png differ
diff --git a/src/main/websrc/template/manage/img/adwords/6.png b/src/main/websrc/template/manage/img/adwords/6.png
new file mode 100644
index 0000000..e4402b1
Binary files /dev/null and b/src/main/websrc/template/manage/img/adwords/6.png differ
diff --git a/src/main/websrc/template/manage/img/baidu1.png b/src/main/websrc/template/manage/img/baidu1.png
new file mode 100644
index 0000000..b93355b
Binary files /dev/null and b/src/main/websrc/template/manage/img/baidu1.png differ
diff --git a/src/main/websrc/template/manage/img/baidu2.png b/src/main/websrc/template/manage/img/baidu2.png
new file mode 100644
index 0000000..cfed81e
Binary files /dev/null and b/src/main/websrc/template/manage/img/baidu2.png differ
diff --git a/src/main/websrc/template/manage/img/baidudsp.png b/src/main/websrc/template/manage/img/baidudsp.png
new file mode 100644
index 0000000..3a460ec
Binary files /dev/null and b/src/main/websrc/template/manage/img/baidudsp.png differ
diff --git a/src/main/websrc/template/manage/img/wxmp/1.png b/src/main/websrc/template/manage/img/wxmp/1.png
new file mode 100644
index 0000000..c9207f0
Binary files /dev/null and b/src/main/websrc/template/manage/img/wxmp/1.png differ
diff --git a/src/main/websrc/template/manage/img/wxmp/2.png b/src/main/websrc/template/manage/img/wxmp/2.png
new file mode 100644
index 0000000..f660ea8
Binary files /dev/null and b/src/main/websrc/template/manage/img/wxmp/2.png differ
diff --git a/src/main/websrc/template/manage/img/wxmp/3.png b/src/main/websrc/template/manage/img/wxmp/3.png
new file mode 100644
index 0000000..66eb758
Binary files /dev/null and b/src/main/websrc/template/manage/img/wxmp/3.png differ
diff --git a/src/main/websrc/template/manage/img/wxmp/4.png b/src/main/websrc/template/manage/img/wxmp/4.png
new file mode 100644
index 0000000..819c3f3
Binary files /dev/null and b/src/main/websrc/template/manage/img/wxmp/4.png differ
diff --git a/src/main/websrc/template/manage/img/wxmp/5.png b/src/main/websrc/template/manage/img/wxmp/5.png
new file mode 100644
index 0000000..ef3661d
Binary files /dev/null and b/src/main/websrc/template/manage/img/wxmp/5.png differ
diff --git a/src/main/websrc/template/manage/img/zht/1.png b/src/main/websrc/template/manage/img/zht/1.png
new file mode 100644
index 0000000..1748f3c
Binary files /dev/null and b/src/main/websrc/template/manage/img/zht/1.png differ
diff --git a/src/main/websrc/template/manage/img/zht/2.png b/src/main/websrc/template/manage/img/zht/2.png
new file mode 100644
index 0000000..ddad5ae
Binary files /dev/null and b/src/main/websrc/template/manage/img/zht/2.png differ
diff --git a/src/main/websrc/template/manage/img/zht/3.png b/src/main/websrc/template/manage/img/zht/3.png
new file mode 100644
index 0000000..4054291
Binary files /dev/null and b/src/main/websrc/template/manage/img/zht/3.png differ
diff --git a/src/main/websrc/template/manage/img/zht/4.png b/src/main/websrc/template/manage/img/zht/4.png
new file mode 100644
index 0000000..d4cc56c
Binary files /dev/null and b/src/main/websrc/template/manage/img/zht/4.png differ
diff --git a/src/main/websrc/template/menu/collect.html b/src/main/websrc/template/menu/collect.html
new file mode 100644
index 0000000..0f8a89d
--- /dev/null
+++ b/src/main/websrc/template/menu/collect.html
@@ -0,0 +1,183 @@
+<div ng-if="!unfoldFlag" class="leftBig">
+<ul class="sidebarNav" ng-if="mainMenu=='behavior'">
+   	<li class="p" ng-class="{'active':pagePath=='custommenu'}" ng-if="showMenu('custommenu')"   ng-click="goPage('collect.custommenu')">
+    	<i class="iconfont icon-custommenu"></i>
+    	<a>行业看单</a>
+    </li>
+   	<li ng-class="{'active':pagePath=='eventstats'}" ng-if="showMenu('eventstats')"  ng-click="goPage('collect.eventstats')">
+    	<i class="iconfont icon-eventstats"></i>
+    	<a>事件分析</a>
+    </li>
+    <li ng-class="{'active':pagePath=='funnel'}" ng-if="showMenu('funnel')" ng-click="goPage('collect.funnel')">
+        <i class="iconfont icon-funnel"></i>
+        <a>漏斗转化</a>
+      </li>
+    <li ng-class="{'active':pagePath=='retention'}" ng-if="showMenu('retention')"  ng-click="goPage('collect.retention')">
+      <i class="iconfont icon-retention"></i>
+      <a>留存分析</a>
+    </li>
+    <li ng-class="{'active':pagePath=='intelligentpath'}" ng-if="showMenu('intelligentpath')"  ng-click="goPage('collect.intelligentpath')">
+      <i class="iconfont icon-intelligentpath"></i>
+      <a>智能路径</a>
+    </li>
+  	<li ng-class="{'active':pagePath=='usergroup'}" ng-if="showMenu('usergroup')" ng-click="goPage('collect.usergroup')">
+    	<i class="iconfont icon-usergroup"></i>
+    	<a>用户分群</a>
+    </li>
+    <li ng-click="getSubMenu('eventmanage')" ng-class="{'activemore':subflag=='eventmanage'}" ng-if="showMenu('eventmanage',1)">
+      <i class="iconfont icon-event"></i>
+      <a>埋点管理</a>
+      <span class="downicon"></span>
+    </li>
+    <div class="subliWrap" ng-class="{'subshow':subflag=='eventmanage'}" ng-if="showMenu('eventmanage',1)">
+      <li class="subli"  ng-class="{'active':pagePath=='event'}" ng-click="goPage('collect.event')" ng-if="showMenu('event')">
+        <a>APP事件管理</a>
+      </li>
+      <li class="subli"  ng-class="{'active':pagePath=='profile'}" ng-click="goPage('collect.profile')" ng-if="showMenu('profile')">
+        <a>用户属性管理</a>
+      </li>
+    </div>
+</ul>
+<ul class="sidebarNav" ng-if="mainMenu=='export'">
+    <!-- <li ng-class="{'active':pagePath=='logtool'}" ng-click="goPage('collect.logtool')" ng-if="showMenu('logtool')">
+        <i class="iconfont icon-logtool"></i>
+        <a>日志流</a>
+    </li> -->
+    <li ng-class="{'active':pagePath=='report'}" ng-click="goPage('collect.report')" ng-if="showMenu('report')">
+        <i class="iconfont icon-report"></i>
+        <a>下载报表</a>
+    </li>
+</ul>
+<ul class="sidebarNav" ng-if="mainMenu=='management'">
+    <li ng-click="goPage('collect.app')" ng-class="{'active':pagePath=='app'}" ng-if="showMenu('app') && !demoU">
+        <i class="iconfont icon-app"></i>
+        <a>产品中心</a>
+    </li>
+    <li ng-click="goPage('collect.auth')" ng-class="{'active':pagePath=='auth'}" ng-if="showMenu('auth') && !demoU">
+        <i class="iconfont icon-auth"></i>
+        <a>成员管理</a>
+    </li>
+</ul>
+</div>
+<div ng-if="unfoldFlag" class="leftSmall">
+<ul class="sidebarNav" ng-if="mainMenu=='behavior'">
+    <li class="p" ng-class="{'active':pagePath=='custommenu'}" ng-if="showMenu('custommenu')" ng-mouseenter="hoverMenu='行业看单'" ng-mouseleave="hoverMenu=''" ng-click="goPage('collect.custommenu')">
+      <i class="iconfont icon-custommenu"></i>
+      <div class="outDiv" ng-if="hoverMenu=='行业看单'">
+        <span class="arrIcon"></span>
+        <ul class="smallMenu">
+           <li ng-class="{'active':pagePath=='custommenu'}"><a>行业看单</a></li>
+        </ul>
+      </div>
+    </li>
+
+    <li ng-class="{'active':pagePath=='eventstats'}" ng-if="showMenu('eventstats')"  ng-click="goPage('collect.eventstats')" ng-mouseenter="hoverMenu='事件分析'" ng-mouseleave="hoverMenu=''">
+      <i class="iconfont icon-eventstats"></i>
+      <div class="outDiv" ng-if="hoverMenu=='事件分析'">
+        <span class="arrIcon"></span>
+        <ul class="smallMenu">
+          <li ng-class="{'active':pagePath=='eventstats'}"><a>事件分析</a></li>
+        </ul>
+      </div>
+    </li>
+    <li ng-class="{'active':pagePath=='intelligentpath'}" ng-if="showMenu('intelligentpath')"  ng-click="goPage('collect.intelligentpath')" ng-mouseenter="hoverMenu='智能路径'" ng-mouseleave="hoverMenu=''">
+      <i class="iconfont icon-intelligentpath"></i>
+      <div class="outDiv" ng-if="hoverMenu=='智能路径'">
+        <span class="arrIcon"></span>
+        <ul class="smallMenu">
+          <li ng-class="{'active':pagePath=='intelligentpath'}"><a>智能路径</a></li>
+        </ul>
+      </div>
+    </li>
+    <li ng-class="{'active':pagePath=='retention'}" ng-if="showMenu('retention')"  ng-click="goPage('collect.retention')" ng-mouseenter="hoverMenu='留存分析'" ng-mouseleave="hoverMenu=''" >
+      <i class="iconfont icon-retention"></i>
+      <div class="outDiv" ng-if="hoverMenu=='留存分析'">
+        <span class="arrIcon"></span>
+        <ul class="smallMenu">
+          <li ng-class="{'active':pagePath=='retention'}"><a>留存分析</a></li>
+        </ul>
+      </div>
+    </li>
+    <li ng-class="{'active':pagePath=='funnel'}" ng-if="showMenu('funnel')" ng-click="goPage('collect.funnel')" ng-mouseenter="hoverMenu='漏斗转化'" ng-mouseleave="hoverMenu=''" >
+      <i class="iconfont icon-funnel"></i>
+      <div class="outDiv" ng-if="hoverMenu=='漏斗转化'">
+        <span class="arrIcon"></span>
+        <ul class="smallMenu">
+          <li ng-class="{'active':pagePath=='funnel'}"><a>漏斗转化</a></li>
+        </ul>
+      </div>
+      </li>
+    <li ng-class="{'active':pagePath=='usergroup'}" ng-if="showMenu('usergroup')" ng-click="goPage('collect.usergroup')" ng-mouseenter="hoverMenu='用户分群'" ng-mouseleave="hoverMenu=''" >
+      <i class="iconfont icon-usergroup"></i>
+      <div class="outDiv" ng-if="hoverMenu=='用户分群'">
+        <span class="arrIcon"></span>
+        <ul class="smallMenu">
+          <li ng-class="{'active':pagePath=='usergroup'}"><a>用户分群</a></li>
+        </ul>
+      </div>
+    </li>
+    <li ng-click="getSubMenu('eventmanage')" ng-class="{'activemore':subflag=='eventmanage'}" ng-if="showMenu('eventmanage',1)" ng-mouseenter="hoverMenu='埋点管理'" ng-mouseleave="hoverMenu=''">
+      <i class="iconfont icon-event"></i>
+      <div class="outDiv" ng-if="hoverMenu=='埋点管理'">
+        <span class="arrIcon"></span>
+        <ul class="smallMenu">
+           <a style="padding-left:10px;">埋点管理</a>
+           <div class="subliWrap subshow">
+             <li class="subli"  ng-class="{'active':pagePath=='event'}" ng-click="goPage('collect.event')" ng-if="showMenu('event')">
+               <a>APP事件管理</a>
+             </li>
+             <li class="subli"  ng-class="{'active':pagePath=='profile'}" ng-click="goPage('collect.profile')" ng-if="showMenu('profile')">
+               <a>用户属性管理</a>
+             </li>
+           </div>
+        </ul>
+      </div>
+    </li>
+</ul>
+<ul class="sidebarNav" ng-if="mainMenu=='export'">
+    <!-- <li ng-class="{'active':pagePath=='logtool'}" ng-click="goPage('collect.logtool')" ng-if="showMenu('logtool')" ng-mouseenter="hoverMenu='日志流'" ng-mouseleave="hoverMenu=''" >
+      <i class="iconfont icon-logtool"></i>
+      <div class="outDiv" ng-if="hoverMenu=='日志流'">
+        <span class="arrIcon"></span>
+        <ul class="smallMenu">
+          <li ng-class="{'active':pagePath=='logtool'}"><a>日志流</a></li>
+        </ul>
+      </div>
+    </li> -->
+    <li ng-class="{'active':pagePath=='report'}" ng-click="goPage('collect.report')" ng-if="showMenu('report')" ng-mouseenter="hoverMenu='下载报表'" ng-mouseleave="hoverMenu=''" >
+      <i class="iconfont icon-report"></i>
+      <div class="outDiv" ng-if="hoverMenu=='下载报表'">
+        <span class="arrIcon"></span>
+        <ul class="smallMenu">
+          <li ng-class="{'active':pagePath=='report'}"><a>下载报表</a></li>
+        </ul>
+      </div>
+    </li>
+</ul>
+<ul class="sidebarNav" ng-if="mainMenu=='management'">
+    <li ng-click="goPage('collect.app')" ng-class="{'active':pagePath=='app'}" ng-if="showMenu('app') && !demoU && !isAppManage" ng-mouseenter="hoverMenu='产品中心'" ng-mouseleave="hoverMenu=''" >
+      <i class="iconfont icon-app"></i>
+      <div class="outDiv" ng-if="hoverMenu=='产品中心'">
+        <span class="arrIcon"></span>
+        <ul class="smallMenu">
+          <li ng-class="{'active':pagePath=='app'}"><a>产品中心</a></li>
+        </ul>
+      </div>
+    </li>
+    <li ng-click="goPage('collect.auth')" ng-class="{'active':pagePath=='auth'}" ng-if="showMenu('auth') && !demoU" ng-mouseenter="hoverMenu='成员管理'" ng-mouseleave="hoverMenu=''" >
+      <i class="iconfont icon-auth"></i>
+      <div class="outDiv" ng-if="hoverMenu=='成员管理'">
+        <span class="arrIcon"></span>
+        <ul class="smallMenu">
+          <li ng-class="{'active':pagePath=='auth'}"><a>成员管理</a></li>
+        </ul>
+      </div>
+    </li>
+</ul>
+</div>
+<div class="bigBtn" ng-show="!unfoldFlag" ng-click="toggleMenu()">
+  <span class="unfold"></span><div >收起菜单</div>
+</div>
+<div class="smallBtn" ng-show="unfoldFlag" ng-click="toggleMenu()">
+  <span class="nounfold"></span>
+</div>
--
libgit2 0.27.1